summaryrefslogtreecommitdiff
path: root/muse2/muse/liste
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2011-03-24 22:58:22 +0000
committerTim E. Real <termtech@rogers.com>2011-03-24 22:58:22 +0000
commit52cf2594877ab000b873674fa0c142120682232b (patch)
tree4567955dc2b8e0248777017b1785cd02e5a9ec50 /muse2/muse/liste
parentead1d513257aeed4199075c1ea5266c560992227 (diff)
Some fixes/steps towards better controller graph editing.
Diffstat (limited to 'muse2/muse/liste')
-rw-r--r--muse2/muse/liste/listedit.cpp64
1 files changed, 38 insertions, 26 deletions
diff --git a/muse2/muse/liste/listedit.cpp b/muse2/muse/liste/listedit.cpp
index 3f29176c..11e9cfc5 100644
--- a/muse2/muse/liste/listedit.cpp
+++ b/muse2/muse/liste/listedit.cpp
@@ -189,22 +189,55 @@ void ListEdit::songChanged(int type)
}
liste->setSortingEnabled(false);
if (type == SC_SELECTION) {
+
+ // BUGFIX: I found the keyboard modifier states affect how QTreeWidget::setCurrentItem() operates.
+ // So for example (not) holding shift while lassoo-ing notes in piano roll affected
+ // whether multiple items were selected in this event list editor!
+ // Also blockSignals() definitely required - was messing up selections. p4.0.18 Tim.
+ /*
bool update = false;
QTreeWidgetItem* ci = 0;
for (int row = 0; row < liste->topLevelItemCount(); ++row) {
QTreeWidgetItem* i = liste->topLevelItem(row);
- if (i->isSelected() ^ ((EventListItem*)i)->event.selected()) {
+ if (i->isSelected() ^ ((EventListItem*)i)->event.selected())
+ {
i->setSelected(((EventListItem*)i)->event.selected());
if (i->isSelected())
ci = i;
update = true;
}
}
- if (update) {
+ if (update)
+ {
if (ci)
+ {
liste->setCurrentItem(ci);
+ }
//liste->update();
- }
+ }
+ */
+ bool ci_done = false;
+ liste->blockSignals(true);
+ // Go backwards to avoid QTreeWidget::setCurrentItem() dependency on KB modifiers!
+ for (int row = liste->topLevelItemCount() -1; row >= 0 ; --row)
+ {
+ //printf("ListEdit::songChanged row:%d\n", row);
+ QTreeWidgetItem* i = liste->topLevelItem(row);
+ bool sel = ((EventListItem*)i)->event.selected();
+ if (i->isSelected() ^ sel)
+ {
+ //printf("ListEdit::songChanged changing row:%d sel:%d\n", row, sel);
+ // Do setCurrentItem() before setSelected().
+ if(sel && !ci_done)
+ {
+ liste->setCurrentItem(i);
+ ci_done = true;
+ }
+ i->setSelected(sel);
+ }
+ }
+ liste->blockSignals(false);
+
}
else {
curPart = 0;
@@ -215,6 +248,7 @@ void ListEdit::songChanged(int type)
if (part->sn() == curPartId)
curPart = part;
EventList* el = part->events();
+ liste->blockSignals(true); // p4.0.18
for (iEvent i = el->begin(); i != el->end(); ++i) {
EventListItem* item = new EventListItem(liste, i->second, part);
for (int col = 0; col < liste->columnCount(); ++col)
@@ -226,13 +260,10 @@ void ListEdit::songChanged(int type)
liste->scrollToItem(item, QAbstractItemView::EnsureVisible);
}
}
+ liste->blockSignals(false);
}
}
- // p3.3.34
- //if (curPart == 0)
- // curPart = (MidiPart*)(parts()->begin()->second);
- //curTrack = curPart->track();
if(!curPart)
{
if(!parts()->empty())
@@ -525,10 +556,6 @@ ListEdit::ListEdit(PartList* pl)
connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
songChanged(-1);
- // p3.3.34
- // Was crashing because of -1 stored, because there was an invalid
- // part pointer stored.
- //curPart = (MidiPart*)(pl->begin()->second);
if(pl->empty())
{
curPart = 0;
@@ -564,7 +591,6 @@ ListEdit::~ListEdit()
void ListEdit::editInsertNote()
{
- // p3.3.34
if(!curPart)
return;
@@ -578,7 +604,6 @@ void ListEdit::editInsertNote()
tick-= curPart->tick();
event.setTick(tick);
// Indicate do undo, and do not handle port controller values.
- //audio->msgAddEvent(event, curPart);
audio->msgAddEvent(event, curPart, true, false, false);
}
}
@@ -589,7 +614,6 @@ void ListEdit::editInsertNote()
void ListEdit::editInsertSysEx()
{
- // p3.3.34
if(!curPart)
return;
@@ -603,7 +627,6 @@ void ListEdit::editInsertSysEx()
tick-= curPart->tick();
event.setTick(tick);
// Indicate do undo, and do not handle port controller values.
- //audio->msgAddEvent(event, curPart);
audio->msgAddEvent(event, curPart, true, false, false);
}
}
@@ -614,7 +637,6 @@ void ListEdit::editInsertSysEx()
void ListEdit::editInsertCtrl()
{
- // p3.3.34
if(!curPart)
return;
@@ -628,7 +650,6 @@ void ListEdit::editInsertCtrl()
tick-= curPart->tick();
event.setTick(tick);
// Indicate do undo, and do port controller values and clone parts.
- //audio->msgAddEvent(event, curPart);
audio->msgAddEvent(event, curPart, true, true, true);
}
}
@@ -639,7 +660,6 @@ void ListEdit::editInsertCtrl()
void ListEdit::editInsertMeta()
{
- // p3.3.34
if(!curPart)
return;
@@ -653,7 +673,6 @@ void ListEdit::editInsertMeta()
tick-= curPart->tick();
event.setTick(tick);
// Indicate do undo, and do not handle port controller values.
- //audio->msgAddEvent(event, curPart);
audio->msgAddEvent(event, curPart, true, false, false);
}
}
@@ -664,7 +683,6 @@ void ListEdit::editInsertMeta()
void ListEdit::editInsertCAfter()
{
- // p3.3.34
if(!curPart)
return;
@@ -678,7 +696,6 @@ void ListEdit::editInsertCAfter()
tick-= curPart->tick();
event.setTick(tick);
// Indicate do undo, and do not handle port controller values.
- //audio->msgAddEvent(event, curPart);
audio->msgAddEvent(event, curPart, true, false, false);
}
}
@@ -689,7 +706,6 @@ void ListEdit::editInsertCAfter()
void ListEdit::editInsertPAfter()
{
- // p3.3.34
if(!curPart)
return;
@@ -704,7 +720,6 @@ void ListEdit::editInsertPAfter()
tick-= curPart->tick();
event.setTick(tick);
// Indicate do undo, and do not handle port controller values.
- //audio->msgAddEvent(event, curPart);
audio->msgAddEvent(event, curPart, true, false, false);
}
}
@@ -750,11 +765,9 @@ void ListEdit::editEvent(Event& event, MidiPart* part)
{
if(event.type() == Controller)
// Indicate do undo, and do port controller values and clone parts.
- //audio->msgChangeEvent(event, nevent, part);
audio->msgChangeEvent(event, nevent, part, true, true, true);
else
// Indicate do undo, and do not do port controller values and clone parts.
- //audio->msgChangeEvent(event, nevent, part);
audio->msgChangeEvent(event, nevent, part, true, false, false);
}
}
@@ -859,7 +872,6 @@ void ListEdit::cmd(int cmd)
if (i->isSelected() || item->event.selected()) {
deletedEvent=item;
// Indicate no undo, and do port controller values and clone parts.
- //audio->msgDeleteEvent(item->event, item->part, false);
audio->msgDeleteEvent(item->event, item->part, false, true, true);
}
}