diff options
| -rw-r--r-- | muse2/ChangeLog | 2 | ||||
| -rw-r--r-- | muse2/muse/song.cpp | 4 | ||||
| -rw-r--r-- | muse2/muse/song.h | 1 | ||||
| -rw-r--r-- | muse2/muse/undo.cpp | 48 | 
4 files changed, 54 insertions, 1 deletions
| diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 8c2a1751..a22ef487 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -4,6 +4,8 @@              not writable or is shared with another independent (non-clone) wave event.             TODO: Improve by asking even for writable waves outside the Project Directory               (add a 'copy' checkbox column to the dialog, settable only under certain conditions).  +         * Added: Informative text on Undo/Redo buttons/menu text/tooltips ("Undo AddTrack" etc). (Tim) +           In cases of multiple items in one operation, the first is shown, with ", .." ("Undo AddTrack, ..").  16.09.2012:  	 - Fixed allocation error with drag&drop of plugins (rj)  	 - Fixed close menu alternative in Instrument editor (rj) diff --git a/muse2/muse/song.cpp b/muse2/muse/song.cpp index 9781116f..026ec1a9 100644 --- a/muse2/muse/song.cpp +++ b/muse2/muse/song.cpp @@ -1778,6 +1778,7 @@ void Song::endMsgCmd()              redoList->clearDelete();              MusEGlobal::undoAction->setEnabled(true);              MusEGlobal::redoAction->setEnabled(false); +            setUndoRedoText();              emit songChanged(updateFlags);              }        } @@ -1795,6 +1796,7 @@ void Song::undo()        doUndo3();        MusEGlobal::redoAction->setEnabled(true);        MusEGlobal::undoAction->setEnabled(!undoList->empty()); +      setUndoRedoText();        if(updateFlags && (SC_TRACK_REMOVED | SC_TRACK_INSERTED))          MusEGlobal::audio->msgUpdateSoloStates(); @@ -1815,6 +1817,7 @@ void Song::redo()        doRedo3();        MusEGlobal::undoAction->setEnabled(true);        MusEGlobal::redoAction->setEnabled(!redoList->empty()); +      setUndoRedoText();        if(updateFlags && (SC_TRACK_REMOVED | SC_TRACK_INSERTED))          MusEGlobal::audio->msgUpdateSoloStates(); @@ -2102,6 +2105,7 @@ void Song::clear(bool signal, bool clear_all)          MusEGlobal::undoAction->setEnabled(false);        if(MusEGlobal::redoAction)          MusEGlobal::redoAction->setEnabled(false); +      setUndoRedoText();        _markerList->clear();        pos[0].setTick(0); diff --git a/muse2/muse/song.h b/muse2/muse/song.h index 8777fb2c..9a314533 100644 --- a/muse2/muse/song.h +++ b/muse2/muse/song.h @@ -358,6 +358,7 @@ class Song : public QObject {        void doRedo3();        void addUndo(UndoOp i); +      void setUndoRedoText();        //-----------------------------------------        //   Configuration diff --git a/muse2/muse/undo.cpp b/muse2/muse/undo.cpp index 45642652..65ca04bf 100644 --- a/muse2/muse/undo.cpp +++ b/muse2/muse/undo.cpp @@ -214,6 +214,7 @@ void Song::startUndo()        {        redoList->clearDelete(); // redo must be invalidated when a new undo is started  			MusEGlobal::redoAction->setEnabled(false); +      setUndoRedoText();        undoList->push_back(Undo());        updateFlags = 0; @@ -231,6 +232,49 @@ void Song::endUndo(SongChangedFlags_t flags)        undoMode = false;        } +//--------------------------------------------------------- +//   setUndoRedoText +//--------------------------------------------------------- + +void Song::setUndoRedoText() +{ +  if(MusEGlobal::undoAction) +  { +    QString s = tr("Und&o"); +    if(MusEGlobal::undoAction->isEnabled()) +    { +      if(!undoList->empty() && !undoList->back().empty()) +      { +        int sz = undoList->back().size(); +        //if(sz >= 2) +        //  s += QString(" (%1)").arg(sz); +        s += QString(" ") + undoList->back().front().typeName(); +        if(sz >= 2) +          s += ", ..";  // Hm, the tooltip will not show three dots "..." +      } +    } +    MusEGlobal::undoAction->setText(s); +  } +   +  if(MusEGlobal::redoAction) +  { +    QString s = tr("Re&do"); +    if(MusEGlobal::redoAction->isEnabled()) +    { +      if(!redoList->empty() && !redoList->back().empty()) +      { +        int sz = redoList->back().size(); +        //if(sz >= 2) +        //  s += QString(" (%1)").arg(sz); +        s += QString(" ") + redoList->back().front().typeName(); +        if(sz >= 2) +          s += ", .."; +      } +    } +    MusEGlobal::redoAction->setText(s); +  } +} +  void cleanOperationGroup(Undo& group)  { @@ -277,12 +321,14 @@ bool Song::applyOperationGroup(Undo& group, bool doUndo)              {                    undoList->pop_back();                    MusEGlobal::undoAction->setEnabled(!undoList->empty()); +                  setUndoRedoText();              }              else              {                    redoList->clearDelete(); // redo must be invalidated when a new undo is started                    MusEGlobal::redoAction->setEnabled(false); -						} +                  setUndoRedoText(); +            }              return doUndo;        } | 
