From: Mathias L. <lun...@us...> - 2004-05-25 21:04:51
|
Update of /cvsroot/lmuse/muse/muse/arranger In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27278/muse/arranger Modified Files: pcanvas.cpp Log Message: Shortcuts for moving around in arranger added Index: pcanvas.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/arranger/pcanvas.cpp,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** pcanvas.cpp 6 May 2004 15:08:07 -0000 1.38 --- pcanvas.cpp 25 May 2004 21:04:33 -0000 1.39 *************** *** 755,759 **** return; } - else if (key == shortcuts[SHRT_TOOL_POINTER].key) { emit setUsedTool(PointerTool); --- 755,758 ---- *************** *** 781,831 **** } ! if (!isSingleSelection()) { ! event->ignore(); // give global accelerators a chance return; } - CItem* item = 0; - for (iCItem i = items.begin(); i != items.end(); ++i) { - if (i->second->isSelected()) { - item = i->second; - break; - } - } - Part* part = ((NPart*)item)->part(); - unsigned tick = part->tick(); - Track* track = part->track(); CItem* newItem = 0; Part* newPart = 0; ! if (key == shortcuts[SHRT_EDIT_PART].key && item) { ! PartList* pl = new PartList; ! NPart* npart = (NPart*)(item); ! pl->add(npart->part()); ! int type = 0; ! ! // Check if track is wave or drum, ! // else track is midi ! ! switch (track->type()) { ! case Track::DRUM: ! type = 3; ! break; ! case Track::WAVE: ! type = 4; ! break; ! case Track::MIDI: ! case Track::AUDIO_OUTPUT: ! case Track::AUDIO_INPUT: ! case Track::AUDIO_GROUP: ! case Track::AUDIO_AUX: ! case Track::AUDIO_SOFTSYNTH: //TODO ! break; } - emit startEditor(pl, type); } // Select part to the right ! else if (key == shortcuts[SHRT_SEL_RIGHT].key ) { for (iCItem i = items.begin(); i != items.end(); ++i) { NPart* npart = (NPart*)(i->second); --- 780,835 ---- } ! // ! // Shortcuts that require selected parts from here ! // ! if (!curItem) { //TODO: Fix a curItem from selected parts if song is loaded and has selected parts. ! event->ignore(); return; } CItem* newItem = 0; Part* newPart = 0; ! bool singleSelection = isSingleSelection(); ! bool add = false; ! //Locators to selection ! if (key == shortcuts[SHRT_LOCATORS_TO_SELECTION].key) { ! CItem *leftmost = 0, *rightmost = 0; ! for (iCItem i = items.begin(); i != items.end(); i++) { ! if (i->second->isSelected()) { ! // Check leftmost: ! if (!leftmost) ! leftmost = i->second; ! else ! if (leftmost->x() > i->second->x()) ! leftmost = i->second; ! // Check rightmost: ! if (!rightmost) ! rightmost = i->second; ! else ! if (rightmost->x() < i->second->x()) ! rightmost = i->second; } } + + int left_tick = leftmost->part()->tick(); + int right_tick = rightmost->part()->tick() + rightmost->part()->lenTick(); + Pos p1(left_tick, true); + Pos p2(right_tick, true); + song->setPos(1, p1); + song->setPos(2, p2); + return; + } + // Select part to the right ! else if (key == shortcuts[SHRT_SEL_RIGHT].key || key == shortcuts[SHRT_SEL_RIGHT_ADD].key) { ! if (key == shortcuts[SHRT_SEL_RIGHT_ADD].key) ! add = true; ! ! Part* part = curItem->part(); ! Track* track = part->track(); ! unsigned int tick = part->tick(); ! for (iCItem i = items.begin(); i != items.end(); ++i) { NPart* npart = (NPart*)(i->second); *************** *** 850,857 **** } // Select part to the left ! else if (key == shortcuts[SHRT_SEL_LEFT].key) { for (iCItem i = items.begin(); i != items.end(); ++i) { NPart* npart = (NPart*)(i->second); Part* ipart = npart->part(); if (ipart->track() != track) continue; --- 854,869 ---- } // Select part to the left ! else if (key == shortcuts[SHRT_SEL_LEFT].key || key == shortcuts[SHRT_SEL_LEFT_ADD].key) { ! if (key == shortcuts[SHRT_SEL_LEFT_ADD].key) ! add = true; ! ! Part* part = curItem->part(); ! Track* track = part->track(); ! unsigned int tick = part->tick(); ! for (iCItem i = items.begin(); i != items.end(); ++i) { NPart* npart = (NPart*)(i->second); Part* ipart = npart->part(); + if (ipart->track() != track) continue; *************** *** 872,899 **** } } - // Set locators to selected parts - // TODO: Make it possible to set it if several parts are selected - else if (key == shortcuts[SHRT_LOCATORS_TO_SELECTION].key) { - Pos p1(part->tick(), true); - Pos p2(part->tick() + part->lenTick(), true); - song->setPos(1, p1); - song->setPos(2, p2); - return; - } // Select nearest part on track above ! else if (key == shortcuts[SHRT_SEL_ABOVE].key && item !=0) { //To get an idea of which track is above us: int stepsize = rmapxDev(1); track = y2Track(track->y() - 1); - if (!track) - return; CItem *aboveL = 0, *aboveR = 0; ! //Upper limit: song end , lower limit: song start int ulimit = song->len(); int llimit = 0; ! int middle = (item->x() + item->width()/2); while (newItem == 0) { ! int y = track->y() + 1; int xoffset = 0; int xleft = middle - xoffset; --- 884,906 ---- } } // Select nearest part on track above ! else if (key == shortcuts[SHRT_SEL_ABOVE].key || key == shortcuts[SHRT_SEL_ABOVE_ADD].key) { ! if (key == shortcuts[SHRT_SEL_ABOVE_ADD].key) ! add = true; //To get an idea of which track is above us: int stepsize = rmapxDev(1); + Track* track = curItem->part()->track();//top->part()->track(); track = y2Track(track->y() - 1); + int topleft = curItem->x(); + int topright = curItem->x() + curItem->part()->lenTick()/2; + int middle = topleft + topright/2; CItem *aboveL = 0, *aboveR = 0; ! //Upper limit: song end, lower limit: song start int ulimit = song->len(); int llimit = 0; ! while (newItem == 0) { ! int y = track->y() + 2; int xoffset = 0; int xleft = middle - xoffset; *************** *** 922,931 **** } // Select nearest part on track below ! else if (key == shortcuts[SHRT_SEL_BELOW].key && item != 0) { //To get an idea of which track is below us: int stepsize = rmapxDev(1); track = y2Track(track->y() + track->height() + 1 ); ! if (track == 0) ! return; CItem *belowL = 0, *belowR = 0; --- 929,941 ---- } // Select nearest part on track below ! else if (key == shortcuts[SHRT_SEL_BELOW].key || key == shortcuts[SHRT_SEL_BELOW_ADD].key) { ! if (key == shortcuts[SHRT_SEL_BELOW_ADD].key) ! add = true; ! //To get an idea of which track is below us: int stepsize = rmapxDev(1); + Track* track = curItem->part()->track();//bottom->part()->track(); track = y2Track(track->y() + track->height() + 1 ); ! int middle = curItem->x() + curItem->part()->tick()/2; CItem *belowL = 0, *belowR = 0; *************** *** 933,937 **** int ulimit = song->len(); int llimit = 0; - int middle = (item->x() + item->width()/2); while (newItem == 0) { int y = track->y() + 1; --- 943,946 ---- *************** *** 962,972 **** } } ! else // equiv to case: Default event->ignore(); // give global accelerators a chance if (newItem) { ! selectItem(item, false); selectItem(newItem, true); //Check if we've hit the upper or lower boundaries of the window. If so, set a new position if (newItem->x() < mapxDev(0)) { --- 971,1026 ---- } } ! else if (key == shortcuts[SHRT_EDIT_PART].key && curItem) { //This should be the other way around - singleSelection first. ! if (!singleSelection) { ! event->ignore(); ! return; ! } ! PartList* pl = new PartList; ! NPart* npart = (NPart*)(curItem); ! Track* track = npart->part()->track(); ! pl->add(npart->part()); ! int type = 0; ! ! // Check if track is wave or drum, ! // else track is midi ! ! switch (track->type()) { ! case Track::DRUM: ! type = 3; ! break; ! ! case Track::WAVE: ! type = 4; ! break; ! ! case Track::MIDI: ! case Track::AUDIO_OUTPUT: ! case Track::AUDIO_INPUT: ! case Track::AUDIO_GROUP: ! case Track::AUDIO_AUX: ! case Track::AUDIO_SOFTSYNTH: //TODO ! break; ! } ! emit startEditor(pl, type); ! } ! ! /*else { ! printf("Ignoring event - was not singleSelection, unknown shortcut.\n"); event->ignore(); // give global accelerators a chance + return; + }*/ + // Check if anything happened to the selected parts if (newItem) { ! //If this is a single selection, toggle previous item ! if (singleSelection && !add) ! selectItem(curItem, false); ! else if(!add) ! deselectAll(); ! ! curItem = newItem; selectItem(newItem, true); + //Check if we've hit the upper or lower boundaries of the window. If so, set a new position if (newItem->x() < mapxDev(0)) { |