From: <ms...@us...> - 2009-08-31 12:52:25
|
Revision: 10793 http://rosegarden.svn.sourceforge.net/rosegarden/?rev=10793&view=rev Author: msjulie Date: 2009-08-31 12:52:12 +0000 (Mon, 31 Aug 2009) Log Message: ----------- * Added state/visible, and state/invisble to FilePraser which tracks the visibility status of actions for use in states using enterActionsState, and leaveActionState as calling mechanism. * sSitched our duration toolbar to use new state mechanism & added relivant state information to notaitn.rc file. NOTE: Current setup gains no efficiency, but will when rest of code that communication with the new NoteRestInserter is refactored. Branch compiles... but no "visible" progress via gui. Next stage: rework the code communicating with NoteRestInserter and refine NoteRestInserter as needed. Modified Paths: -------------- branches/notation_toolbar_2/data/rc/notation.rc branches/notation_toolbar_2/src/gui/editors/notation/NotationView.cpp branches/notation_toolbar_2/src/gui/editors/notation/NotationView.h branches/notation_toolbar_2/src/gui/general/ActionFileParser.cpp branches/notation_toolbar_2/src/gui/general/ActionFileParser.h Modified: branches/notation_toolbar_2/data/rc/notation.rc =================================================================== --- branches/notation_toolbar_2/data/rc/notation.rc 2009-08-30 19:52:28 UTC (rev 10792) +++ branches/notation_toolbar_2/data/rc/notation.rc 2009-08-31 12:52:12 UTC (rev 10793) @@ -635,10 +635,10 @@ <ToolBar name="Duration Toolbar" newline="true" hidden="false" position="left"> <text>Duration Toolbar</text> - <Action name="switch_to_notes" icon="switch-to-notes"/> - <Action name="switch_to_rests" icon="switch-to-rests"/> - <Action name="switch_dots_on" icon="switch-dots-on"/> - <Action name="switch_dots_off" icon="switch-dots-off"/> + <Action name="switch_to_notes" icon="switch-to-notes" /> + <Action name="switch_to_rests" icon="switch-to-rests" /> + <Action name="switch_dots_on" icon="switch-dots-on" /> + <Action name="switch_dots_off" icon="switch-dots-off" /> <Separator/> <!-- Reference names, but with _ instead of - --> <Action name="breve" icon="breve" checked="false" group="tools_note" tooltip="Double Whole Note (5)" /> @@ -1011,4 +1011,103 @@ </disable> </State> +<State name="note_0_dot_mode"> + <enable> + <!-- This line is in question since active always --> + <Action name="switch_to_rests" /> + <Action name="switch_dots_on" /> + <Action name="insert_note_actionmenu"/> + <Action name="chord_mode" /> + <Action name="triplet_mode" /> + <Action name="grace_mode" /> + </enable> + <visible> + <Action name="switch_to_rests" /> + <Action name="switch_dots_on" /> + <Action name="breve" /> + <Action name="semibreve" /> + <Action name="minim" /> + <Action name="crotchet" /> + <Action name="quaver" /> + <Action name="semiquaver" /> + <Action name="demisemi" /> + <Action name="hemidemisemi" /> + </visible> +</State> + +<State name="note_1_dot_mode"> + <enable> + <!-- This line is in question since active always --> + <Action name="insert_note_actionmenu"/> + <Action name="switch_to_rests" /> + <Action name="switch_dots_off" /> + </enable> + <disable> + <Action name="dummy_1" /> + <Action name="dummy_2" /> + </disable> + <visible> + <Action name="switch_to_rests" /> + <Action name="switch_dots_off" /> + <Action name="dummy_1" /> + <Action name="dotted_semibreve" /> + <Action name="dotted_minim" /> + <Action name="dotted_crotchet" /> + <Action name="dotted_quaver" /> + <Action name="dotted_semiquaver" /> + <Action name="dotted_demisemi" /> + <Action name="dummy_2" /> + </visible> +</State> + +<State name="rest_0_dot_mode"> + <enable> + <Action name="switch_to_notes" /> + <Action name="switch_dots_on" /> + </enable> + <disable> + <Action name="chord_mode" /> + <Action name="triplet_mode" /> + <Action name="grace_mode" /> + </disable> + <visible> + <Action name="switch_to_notes" /> + <Action name="switch_dots_on" /> + <Action name="rest_breve" /> + <Action name="rest_semibreve" /> + <Action name="rest_minim" /> + <Action name="rest_crotchet" /> + <Action name="rest_quaver" /> + <Action name="rest_semiquaver" /> + <Action name="rest_demisemi" /> + <Action name="rest_hemidemisemi" /> + </visible> +</State> + +<State name="rest_1_dot_mode"> + <enable> + <Action name="switch_to_notes" /> + <Action name="switch_dots_off" /> + </enable> + <disable> + <Action name="dummy_3" /> + <Action name="dummy_4" /> + <Action name="chord_mode" /> + <Action name="triplet_mode" /> + <Action name="grace_mode" /> + </disable> + <visible> + <Action name="switch_to_notes" /> + <Action name="switch_dots_off" /> + <Action name="dummy_3" /> + <Action name="rest_dotted_semibreve" /> + <Action name="rest_dotted_minim" /> + <Action name="rest_dotted_crotchet" /> + <Action name="rest_dotted_quaver" /> + <Action name="rest_dotted_semiquaver" /> + <Action name="rest_dotted_demisemi" /> + <Action name="dummy_4" /> + </visible> +</State> + </kpartgui> Modified: branches/notation_toolbar_2/src/gui/editors/notation/NotationView.cpp =================================================================== --- branches/notation_toolbar_2/src/gui/editors/notation/NotationView.cpp 2009-08-30 19:52:28 UTC (rev 10792) +++ branches/notation_toolbar_2/src/gui/editors/notation/NotationView.cpp 2009-08-31 12:52:12 UTC (rev 10793) @@ -630,8 +630,7 @@ //Where is "options_show_toolbar" created? createAction("show_general_toolbar", SLOT(slotToggleGeneralToolBar())); createAction("show_tools_toolbar", SLOT(slotToggleToolsToolBar())); - createAction("show_notes_toolbar", SLOT(slotToggleNotesToolBar())); - createAction("show_rests_toolbar", SLOT(slotToggleRestsToolBar())); + createAction("show_duration_toolbar", SLOT(slotToggleDurationToolBar())); createAction("show_accidentals_toolbar", SLOT(slotToggleAccidentalsToolBar())); createAction("show_clefs_toolbar", SLOT(slotToggleClefsToolBar())); createAction("show_marks_toolbar", SLOT(slotToggleMarksToolBar())); @@ -1367,16 +1366,11 @@ toggleNamedToolBar("Tools Toolbar"); } -void NewNotationView::slotToggleNotesToolBar() +void NewNotationView::slotToggleDurationToolBar() { - toggleNamedToolBar("Notes Toolbar"); + toggleNamedToolBar("Duration Toolbar"); } -void NewNotationView::slotToggleRestsToolBar() -{ - toggleNamedToolBar("Rests Toolbar"); -} - void NewNotationView::slotToggleAccidentalsToolBar() { toggleNamedToolBar("Accidentals Toolbar"); @@ -1592,7 +1586,12 @@ void NewNotationView::hideAllDurationMonobarActions() { - // This makes me nausous with how much it needs to know about the .rc file + leaveActionState("note_0_dot_mode"); + leaveActionState("note_1_dot_mode"); + leaveActionState("rest_0_dot_mode"); + leaveActionState("rest_1_dot_mode"); + +/* // This makes me nausous with how much it needs to know about the .rc file // to work, but this is what we have to do. // controlling bits @@ -1644,6 +1643,7 @@ findAction("chord_mode")->setEnabled(false); findAction("triplet_mode")->setEnabled(false); findAction("grace_mode")->setEnabled(false); +*/ } void @@ -1670,7 +1670,9 @@ switch (mode) { case InsertingNotes: - // controlling bits + enterActionState("note_0_dot_mode"); + break; +/* // controlling bits findAction("switch_to_rests")->setVisible(true); findAction("switch_dots_on")->setVisible(true); // was Notes Toolbar @@ -1687,9 +1689,11 @@ findAction("triplet_mode")->setEnabled(true); findAction("grace_mode")->setEnabled(true); break; - +*/ case InsertingDottedNotes: - // controlling bits + enterActionState("note_1_dot_mode"); + break; +/* // controlling bits findAction("switch_to_rests")->setVisible(true); findAction("switch_dots_off")->setVisible(true); // was Dotted Notes Toolbar @@ -1706,9 +1710,11 @@ findAction("triplet_mode")->setEnabled(true); findAction("grace_mode")->setEnabled(true); break; - +*/ case InsertingRests: - // controlling bits + enterActionState("rest_0_dot_mode"); + break; +/* // controlling bits findAction("switch_to_notes")->setVisible(true); findAction("switch_dots_on")->setVisible(true); // was Rests Toolbar @@ -1725,9 +1731,11 @@ findAction("triplet_mode")->setEnabled(false); findAction("grace_mode")->setEnabled(false); break; - +*/ case InsertingDottedRests: - // controlling bits + enterActionState("rest_1_dot_mode"); + break; +/* // controlling bits findAction("switch_to_notes")->setVisible(true); findAction("switch_dots_off")->setVisible(true); // was Dotted Rests Toolbar @@ -1744,7 +1752,7 @@ findAction("triplet_mode")->setEnabled(false); findAction("grace_mode")->setEnabled(false); break; - +*/ default: std::cerr << "NewNotationView::morphDurationMonobar: Damn, well, I guess the DurationMonobar just winked out of existence. Oh well." << std::endl; Modified: branches/notation_toolbar_2/src/gui/editors/notation/NotationView.h =================================================================== --- branches/notation_toolbar_2/src/gui/editors/notation/NotationView.h 2009-08-30 19:52:28 UTC (rev 10792) +++ branches/notation_toolbar_2/src/gui/editors/notation/NotationView.h 2009-08-31 12:52:12 UTC (rev 10793) @@ -108,9 +108,13 @@ void slotSetSelectTool(); void slotSetEraseTool(); + + /** + * Restore NoteRestInserter as the current tool and recall its + * state information. + */ void slotSetNoteRestInserter(); - void slotInsertNoteFromAction(); void slotInsertRest(); @@ -200,8 +204,7 @@ void slotToggleGeneralToolBar(); void slotToggleToolsToolBar(); - void slotToggleNotesToolBar(); - void slotToggleRestsToolBar(); + void slotToggleDurationToolBar(); void slotToggleAccidentalsToolBar(); void slotToggleClefsToolBar(); void slotToggleMarksToolBar(); Modified: branches/notation_toolbar_2/src/gui/general/ActionFileParser.cpp =================================================================== --- branches/notation_toolbar_2/src/gui/general/ActionFileParser.cpp 2009-08-30 19:52:28 UTC (rev 10792) +++ branches/notation_toolbar_2/src/gui/general/ActionFileParser.cpp 2009-08-31 12:52:12 UTC (rev 10793) @@ -150,12 +150,18 @@ QString actionName = atts.value("name"); if (actionName == "") { - std::cerr << "WARNING: ActionFileParser::startElement(" << m_currentFile << "): No action name provided in action element" << std::endl; + std::cerr << "WARNING: ActionFileParser::startElement(" + << m_currentFile << "): No action name provided in action element" + << std::endl; } if (m_currentMenus.empty() && m_currentToolbar == "" && - (m_currentState == "" || (!m_inEnable && !m_inDisable))) { - std::cerr << "WARNING: ActionFileParser::startElement(" << m_currentFile << "): Action \"" << actionName << "\" appears outside (valid) menu, toolbar or state enable/disable element" << std::endl; + (m_currentState == "" || (!m_inEnable && !m_inDisable + && !m_inVisible && !m_inInvisible))) { + std::cerr << "WARNING: ActionFileParser::startElement(" + << m_currentFile << "): Action \"" << actionName + << "\" appears outside (valid) menu, toolbar or state " + << "enable/disable/visible/invisible element" << std::endl; } QString text = atts.value("text"); @@ -169,13 +175,15 @@ //!!! return values if (text != "") setActionText(actionName, text); if (icon != "") setActionIcon(actionName, icon); - if (shortcut != "") setActionShortcut(actionName, shortcut, shortcutContext.toLower() == "application"); + if (shortcut != "") setActionShortcut(actionName, shortcut, + shortcutContext.toLower() == "application"); if (tooltip != "") setActionToolTip(actionName, tooltip); if (group != "") setActionGroup(actionName, group); if (checked != "") setActionChecked(actionName, - checked.toLower() == "true"); + checked.toLower() == "true"); - // this can appear in menu, toolbar, state/enable, state/disable + // this can appear in menu, toolbar, state/enable, state/disable, + // state/visible, state/invisible if (m_inEnable) { enableActionInState(m_currentState, actionName); @@ -183,6 +191,10 @@ disableActionInState(m_currentState, actionName); } else if (!m_currentMenus.empty()) { addActionToMenu(m_currentMenus.last(), actionName); + } else if (m_inVisible) { + toVisibleActionInState(m_currentState, actionName); + } else if (m_inInvisible) { + toInvisibleActionInState(m_currentState, actionName); } else if (m_currentToolbar != "") { addActionToToolbar(m_currentToolbar, actionName); } @@ -215,6 +227,20 @@ } else { m_inDisable = true; } + } else if (name == "visible") { + + if (m_currentState == "") { + std::cerr << "WARNING: ActionFileParser::startElement(" << m_currentFile << "): Visible element appears outside state element" << std::endl; + } else { + m_inVisible = true; + } + } else if (name == "invisible") { + + if (m_currentState == "") { + std::cerr << "WARNING: ActionFileParser::startElement(" << m_currentFile << "): Invisible element appears outside state element" << std::endl; + } else { + m_inInvisible = true; + } } return true; @@ -262,6 +288,12 @@ } else if (name == "disable") { m_inDisable = false; + } else if (name == "visible") { + + m_inVisible = false; + } else if (name == "invisible") { + + m_inInvisible = false; } return true; @@ -681,6 +713,30 @@ return true; } +bool +ActionFileParser::toVisibleActionInState(QString stateName, QString actionName) +{ + if (stateName == "" || actionName == "") return false; + QAction *action = findAction(actionName); + if (!action) action = findStandardAction(actionName); + if (!action) return false; + m_stateVisibleMap[stateName].insert(action); + connect(action, SIGNAL(destroyed()), this, SLOT(slotObjectDestroyed())); + return true; +} + +bool +ActionFileParser::toInvisibleActionInState(QString stateName, QString actionName) +{ + if (stateName == "" || actionName == "") return false; + QAction *action = findAction(actionName); + if (!action) action = findStandardAction(actionName); + if (!action) return false; + m_stateInvisibleMap[stateName].insert(action); + connect(action, SIGNAL(destroyed()), this, SLOT(slotObjectDestroyed())); + return true; +} + void ActionFileParser::setEnabled(QAction *a, bool e) { @@ -688,6 +744,12 @@ } void +ActionFileParser::setVisible(QAction *a, bool e) +{ + if (a) a->setVisible(e); +} + +void ActionFileParser::enterActionState(QString stateName) { Profiler p("ActionFileParser::enterActionState"); @@ -695,10 +757,18 @@ i != m_stateDisableMap[stateName].end(); ++i) { setEnabled(*i, false); } + for (ActionSet::iterator i = m_stateInvisibleMap[stateName].begin(); + i != m_stateInvisibleMap[stateName].end(); ++i) { + setVisible(*i, false); + } for (ActionSet::iterator i = m_stateEnableMap[stateName].begin(); i != m_stateEnableMap[stateName].end(); ++i) { setEnabled(*i, true); } + for (ActionSet::iterator i = m_stateVisibleMap[stateName].begin(); + i != m_stateVisibleMap[stateName].end(); ++i) { + setVisible(*i, true); + } } void @@ -709,10 +779,18 @@ i != m_stateEnableMap[stateName].end(); ++i) { setEnabled(*i, false); } + for (ActionSet::iterator i = m_stateVisibleMap[stateName].begin(); + i != m_stateVisibleMap[stateName].end(); ++i) { + setVisible(*i, false); + } for (ActionSet::iterator i = m_stateDisableMap[stateName].begin(); i != m_stateDisableMap[stateName].end(); ++i) { setEnabled(*i, true); } + for (ActionSet::iterator i = m_stateInvisibleMap[stateName].begin(); + i != m_stateInvisibleMap[stateName].end(); ++i) { + setVisible(*i, true); + } } void Modified: branches/notation_toolbar_2/src/gui/general/ActionFileParser.h =================================================================== --- branches/notation_toolbar_2/src/gui/general/ActionFileParser.h 2009-08-30 19:52:28 UTC (rev 10792) +++ branches/notation_toolbar_2/src/gui/general/ActionFileParser.h 2009-08-31 12:52:12 UTC (rev 10793) @@ -91,6 +91,16 @@ bool enableActionInState(QString stateName, QString actionName); bool disableActionInState(QString stateName, QString actionName); + /** + * Set the action as visible for state. + */ + bool toVisibleActionInState(QString stateName, QString actionName); + + /** + * Set the action as invisible for state. + */ + bool toInvisibleActionInState(QString stateName, QString actionName); + bool enableMenuInState(QString stateName, QString menuName); bool disableMenuInState(QString stateName, QString menuName); @@ -106,10 +116,25 @@ typedef std::set<QAction *> ActionSet; typedef QMap<QString, ActionSet> StateMap; + // Map of enable(d) items when entering action state. StateMap m_stateEnableMap; + // Map of disable(d) items when entering action state. StateMap m_stateDisableMap; + // Map of visible items when entering action state. + StateMap m_stateVisibleMap; + // Map of invisible items when entering action state. + StateMap m_stateInvisibleMap; + + /** + * Null safe settter for QAction->enable(bool). + */ void setEnabled(QAction *, bool); + /** + * Null safe settter for QAction->setVisibe(bool). + */ + void setVisible(QAction *, bool); + ActionSet m_tooltipSet; QObject *m_actionOwner; @@ -117,6 +142,8 @@ bool m_inText; bool m_inEnable; bool m_inDisable; + bool m_inVisible; // Are we inside a State/visible tag? + bool m_inInvisible; // Are we inside a State/invisible tag? QStringList m_currentMenus; QString m_currentToolbar; QString m_currentState; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |