diff options
| -rw-r--r-- | muse/ChangeLog | 2 | ||||
| -rw-r--r-- | muse/muse/marker/markerview.cpp | 68 | ||||
| -rw-r--r-- | muse/muse/marker/markerview.h | 1 | 
3 files changed, 59 insertions, 12 deletions
diff --git a/muse/ChangeLog b/muse/ChangeLog index bb156365..a49ca8dd 100644 --- a/muse/ChangeLog +++ b/muse/ChangeLog @@ -1,3 +1,5 @@ +13.06.2010 +      * Fixed: More fixes to marker list, selected item was still not right. (T356)  03.06.2010        * Fixed: Time signature editing problems in master track list and gui. (T356)          - Fixed SigEdit::outOfRange(). Added Sig::isValid(), and check it in LMaster::returnPressed() to fix crash with 0 n or z. diff --git a/muse/muse/marker/markerview.cpp b/muse/muse/marker/markerview.cpp index 1c9eee77..75ee1a06 100644 --- a/muse/muse/marker/markerview.cpp +++ b/muse/muse/marker/markerview.cpp @@ -241,7 +241,9 @@ MarkerView::MarkerView(QWidget* parent)        //    Rest        //--------------------------------------------------- -      connect(song, SIGNAL(songChanged(int)), SLOT(updateList())); +      //connect(song, SIGNAL(songChanged(int)), SLOT(updateList())); +      connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); +              updateList();        // work around for probable QT/WM interaction bug. @@ -333,28 +335,70 @@ void MarkerView::deleteMarker()        }  //--------------------------------------------------------- +//   songChanged +//--------------------------------------------------------- + +void MarkerView::songChanged(int flags) +{ +  // Is it simply a midi controller value adjustment? Forget it. +  if(flags == SC_MIDI_CONTROLLER) +    return; +     +  updateList(); +} + +//---------------------------------------------------------  //   updateList  //---------------------------------------------------------  void MarkerView::updateList()  { -       -      // Added p3.3.43 -      // Remember the next selected item, or else any new item added. +      // Added p3.3.43 Manage selected item, due to clearing of table...        MarkerList* marker = song->marker(); -      MarkerItem* item     = (MarkerItem*)table->selectedItem(); -      MarkerItem* nextitem = item ? (MarkerItem*)item->nextSibling() : 0; -      //Marker* selm     = item->marker(); -      //Marker* nextselm = nextitem->marker(); -      Marker* selm     = nextitem ? nextitem->marker() : 0; -      for (iMarker i = marker->begin(); i != marker->end(); ++i)  +      MarkerItem* selitem     = (MarkerItem*)table->selectedItem(); +      Marker* selm     = selitem ? selitem->marker() : 0; +      // p3.3.44 Look for removed markers before added markers... +      if(selitem) +      { +        MarkerItem* mitem = (MarkerItem*)table->firstChild(); +        while(mitem)  +        { +          bool found = false; +          for(iMarker i = marker->begin(); i != marker->end(); ++i)  +          { +            Marker* m = &i->second; +            if(m == mitem->marker())  +            { +              found = true; +              break; +            } +          } +          // Anything removed from the marker list? +          if(!found) +          { +            // If it is the current selected item, it no longer exists. Make the next item be selected. +            if(mitem == selitem) +            { +              MarkerItem* mi = (MarkerItem*)selitem->nextSibling(); +              if(mi) +              { +                selitem = mi; +                selm    = selitem->marker(); +              }   +            }   +          }   +          mitem = (MarkerItem*)mitem->nextSibling(); +        } +      }   +      // Look for added markers... +      for(iMarker i = marker->begin(); i != marker->end(); ++i)         {          Marker* m = &i->second;          bool found = false;          MarkerItem* item = (MarkerItem*)table->firstChild(); -        while (item)  +        while(item)           { -          if (item->marker() == m)  +          if(item->marker() == m)             {              found = true;              break; diff --git a/muse/muse/marker/markerview.h b/muse/muse/marker/markerview.h index 2252be48..f16471b8 100644 --- a/muse/muse/marker/markerview.h +++ b/muse/muse/marker/markerview.h @@ -63,6 +63,7 @@ class MarkerView : public TopWin {        void markerChanged(int);        void clicked(QListViewItem*);        void updateList(); +      void songChanged(int);     signals:        void deleted(unsigned long);  | 
