summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--muse/ChangeLog2
-rw-r--r--muse/muse/marker/markerview.cpp68
-rw-r--r--muse/muse/marker/markerview.h1
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);