const struct sync_track *sync_get_track(struct sync_device *d, const char *name) { struct sync_track *t; int idx = find_track(d, name); if (idx >= 0) return d->tracks[idx]; idx = create_track(d, name); t = d->tracks[idx]; get_track_data(d, t); return t; }
void NewTrackDialog::confirm_track_creation() { QString track_name = widgets_.trackName->text(); QString track_author = widgets_.author->text(); if (track_name.isEmpty()) { widgets_.trackName->setFocus(); } else if (track_author.isEmpty()) { widgets_.author->setFocus(); } else { TrackEssentials essentials; essentials.path = QDir::cleanPath(widgets_.trackLocation->text() + QDir::separator() + track_name + ".trk"); essentials.name = track_name; essentials.author = track_author; essentials.size.setWidth(widgets_.widthSpinBox->value()); essentials.size.setHeight(widgets_.heightSpinBox->value()); for (int row = 0; row != widgets_.assetsList->count(); ++row) { QString asset = widgets_.assetsList->item(row)->text(); essentials.assets.push_back(asset); } create_track(essentials); hide(); } }
//================================================================ int append_track(int scene, const char* sessionName, const char* trackName) { #ifdef DEBUG if(!is_track_scene(scene)) { printf("%d is not a Track Scene\n", scene); return -1; } #else if(!is_track_scene(scene)) return -1; #endif TrackSceneNode* t = NULL; create_track(sessionName, trackName, t); #ifdef DEBUG if( !t ) { printf("Could not create track object\n"); return -1; } #else if( !t ) return -1; #endif TrackScene* ts = trackscenevec[scene]; // Tracks with the same 'HOLE' should have the same 't->py' // Track name: <hole>_<core> bool foundTheSameHole = false; float holePy = defaultTrackPositionY; char * newTrackName = (char*) malloc(sizeof(char) * (strlen(trackName) + 1)); strcpy(newTrackName, trackName); char * newHoleStr = strtok(newTrackName, "_"); // try to reuse a track vec slot for(int i = 0; i < ts->trackvec.size(); ++i) { if( ts->trackvec[i] == NULL) { ts->trackvec[i] = t; // make sure that we don't have more than one i in zorder if( ts->zorder.size() == 0) { ts->zorder.push_back(i); return i; } bool found = false; for( int k = 0; k < ts->zorder.size(); ++k) { if( ts->zorder[k] == i) { if(!found) { found = true; } else { ts->zorder[k] = -1; } } } if(!found) { ts->zorder.push_back(i); bring_track_front(scene,i); } // increament default track posY t->py = holePy; defaultTrackPositionY = (foundTheSameHole) ? (defaultTrackPositionY) : (defaultTrackPositionY -= (TRACK_GAP * DEFAULT_DPI)); return i; } else // try to find if track name with the same HOLE component exists { if(!foundTheSameHole) { char *thisTrackName = (char *) malloc( sizeof(char) * (strlen(ts->trackvec[i]->name)+1) ); strcpy(thisTrackName, ts->trackvec[i]->name); char * thisHoleStr = strtok(thisTrackName, "_"); // found it, with compare HOLE string if(0 == strcmp(newHoleStr, thisHoleStr)) { holePy = ts->trackvec[i]->py; foundTheSameHole = true; } free(thisTrackName); } } } t->py = holePy; defaultTrackPositionY = (foundTheSameHole) ? (defaultTrackPositionY) : (defaultTrackPositionY -= (TRACK_GAP * DEFAULT_DPI)); free(newTrackName); // no empty slots ts->trackvec.push_back(t); ts->zorder.push_back(ts->trackvec.size() -1); bring_track_front(scene,ts->trackvec.size() -1); return (ts->trackvec.size() - 1); }
//================================================================ int append_track(const char* sessionName, const char* trackName) { if(!is_scene_bound()) return -1; #ifdef DEBUG if(!is_track_scene(BoundScene)) { printf("%d is not a Track Scene\n", BoundScene); return -1; } #else if(!is_track_scene(BoundScene)) return -1; #endif TrackSceneNode* t = NULL; create_track(sessionName, trackName, t); #ifdef DEBUG if( !t ) { printf("Could not create track object\n"); return -1; } #else if( !t ) return -1; #endif TrackScene* ts = trackscenevec[BoundScene]; // try to reuse a track vec slot int pos = -1; for( int i = 0; i < ts->trackvec.size(); ++i) { if( ts->trackvec[i] == NULL) { ts->trackvec[i] = t; // make sure that we don't have more than one i in zorder if( ts->zorder.size() == 0) { ts->zorder.push_back(i); return i; } bool found = false; for( int k = 0; k < ts->zorder.size(); ++k) { if( ts->zorder[k] == i) { if(!found) found = true; else ts->zorder[k] = -1; } } if(!found) { ts->zorder.push_back(i); bring_track_front(BoundScene,i); } return i; } } // no empty slots ts->trackvec.push_back(t); ts->zorder.push_back(ts->trackvec.size() -1); bring_track_front(BoundScene,ts->trackvec.size() -1); return ts->trackvec.size() - 1; }