Simplified management of action enable/visibility states in MainWindow.

This commit is contained in:
Jim Evins
2018-11-07 22:06:52 -05:00
parent f5b494d714
commit 4707aaee88
5 changed files with 562 additions and 623 deletions
+95 -151
View File
@@ -168,10 +168,7 @@ namespace glabels
centralWidget->setLayout( hLayout );
setCentralWidget( centralWidget );
setDocVerbsEnabled( false );
setSelectionVerbsEnabled( false );
setPasteVerbsEnabled( false );
setWelcomeMode( true );
manageActions();
setTitle();
// Connect
@@ -226,10 +223,7 @@ namespace glabels
mEditorButton->setChecked( true );
mPages->setCurrentIndex( EDITOR_PAGE_INDEX );
setDocVerbsEnabled( true );
setSelectionVerbsEnabled( false );
setMultiSelectionVerbsEnabled( false );
setWelcomeMode( false );
manageActions();
setTitle();
connect( mLabelEditor, SIGNAL(contextMenuActivate()), this, SLOT(onContextMenuActivate()) );
@@ -813,130 +807,103 @@ namespace glabels
///
/// Set enabled state of TOC buttons based on Welcome mode
/// Manage enabled/visibility state of actions
///
void MainWindow::setWelcomeMode( bool enabled )
void MainWindow::manageActions()
{
mWelcomeAction->setVisible( enabled );
mEditorAction->setVisible( !enabled );
mPropertiesAction->setVisible( !enabled );
mMergeAction->setVisible( !enabled );
mPrintAction->setVisible( !enabled );
// Do we have a model?
bool hasModel = mModel != nullptr;
fileShowEditorPageAction->setEnabled( !enabled && !mEditorButton->isChecked() );
fileShowPropertiesPageAction->setEnabled( !enabled && !mPropertiesButton->isChecked() );
fileShowMergePageAction->setEnabled( !enabled && !mMergeButton->isChecked() );
fileShowPrintPageAction->setEnabled( !enabled && !mPrintButton->isChecked() );
}
// Which page is currently active?
bool isWelcomePage = mWelcomeButton->isChecked();
bool isEditorPage = mEditorButton->isChecked();
bool isPropertiesPage = mPropertiesButton->isChecked();
bool isMergePage = mMergeButton->isChecked();
bool isPrintPage = mPrintButton->isChecked();
// What is the current selection state?
bool hasSelection = hasModel && !mModel->isSelectionEmpty();
bool hasMultiSelection = hasSelection && !mModel->isSelectionAtomic();
bool canPaste = hasModel && mModel->canPaste();
// Toggle visibility of TOC buttons based on welcome mode
mWelcomeAction->setVisible( isWelcomePage );
mEditorAction->setVisible( !isWelcomePage );
mPropertiesAction->setVisible( !isWelcomePage );
mMergeAction->setVisible( !isWelcomePage );
mPrintAction->setVisible( !isWelcomePage );
///
/// Set enabled state of actions associated with a document.
///
void MainWindow::setDocVerbsEnabled( bool enabled )
{
fileSaveAction->setEnabled( mModel && mModel->isModified() );
fileSaveAsAction->setEnabled( mModel );
editUndoAction->setEnabled( enabled && mUndoRedoModel->canUndo() );
editRedoAction->setEnabled( enabled && mUndoRedoModel->canRedo() );
editDeleteAction->setEnabled( enabled );
editSelectAllAction->setEnabled( enabled );
editUnSelectAllAction->setEnabled( enabled );
viewZoomInAction->setEnabled( enabled );
viewZoomOutAction->setEnabled( enabled );
viewZoom1To1Action->setEnabled( enabled );
viewZoomToFitAction->setEnabled( enabled );
viewGridAction->setEnabled( enabled );
viewMarkupAction->setEnabled( enabled );
objectsArrowModeAction->setEnabled( enabled );
objectsCreateMenu->setEnabled( enabled );
objectsCreateTextAction->setEnabled( enabled );
objectsCreateLineAction->setEnabled( enabled );
objectsCreateBoxAction->setEnabled( enabled );
objectsCreateEllipseAction->setEnabled( enabled );
objectsCreateImageAction->setEnabled( enabled );
objectsCreateBarcodeAction->setEnabled( enabled );
objectsOrderMenu->setEnabled( enabled );
objectsOrderRaiseAction->setEnabled( enabled );
objectsOrderLowerAction->setEnabled( enabled );
objectsXformMenu->setEnabled( enabled );
objectsXformRotateLeftAction->setEnabled( enabled );
objectsXformRotateRightAction->setEnabled( enabled );
objectsXformFlipHorizAction->setEnabled( enabled );
objectsXformFlipVertAction->setEnabled( enabled );
objectsAlignMenu->setEnabled( enabled );
objectsAlignLeftAction->setEnabled( enabled );
objectsAlignRightAction->setEnabled( enabled );
objectsAlignHCenterAction->setEnabled( enabled );
objectsAlignTopAction->setEnabled( enabled );
objectsAlignBottomAction->setEnabled( enabled );
objectsAlignVCenterAction->setEnabled( enabled );
objectsCenterMenu->setEnabled( enabled );
objectsCenterHorizAction->setEnabled( enabled );
objectsCenterVertAction->setEnabled( enabled );
}
// File actions
fileNewAction->setEnabled( true );
fileOpenAction->setEnabled( true );
fileSaveAction->setEnabled( hasModel && mModel->isModified() );
fileSaveAsAction->setEnabled( hasModel );
fileShowEditorPageAction->setEnabled( !isWelcomePage && !isEditorPage );
fileShowPropertiesPageAction->setEnabled( !isWelcomePage && !isPropertiesPage );
fileShowMergePageAction->setEnabled( !isWelcomePage && !isMergePage );
fileShowPrintPageAction->setEnabled( !isWelcomePage && !isPrintPage );
fileTemplateDesignerAction->setEnabled( true );
fileCloseAction->setEnabled( true );
fileExitAction->setEnabled( true );
// Edit actions
editUndoAction->setEnabled( hasModel && mUndoRedoModel->canUndo() );
editRedoAction->setEnabled( hasModel && mUndoRedoModel->canRedo() );
editCutAction->setEnabled( isEditorPage && hasSelection );
editCopyAction->setEnabled( isEditorPage && hasSelection );
editPasteAction->setEnabled( isEditorPage && canPaste );
editDeleteAction->setEnabled( isEditorPage && hasSelection );
editSelectAllAction->setEnabled( isEditorPage );
editUnSelectAllAction->setEnabled( isEditorPage && hasSelection );
editPreferencesAction->setEnabled( true );
///
/// Set enabled state of actions associated with a document being modified since last save.
///
void MainWindow::setDocModifiedVerbsEnabled( bool enabled )
{
fileSaveAction->setEnabled( enabled );
}
// View actions
viewFileToolBarAction->setEnabled( true );
viewEditorToolBarAction->setEnabled( true );
viewGridAction->setEnabled( isEditorPage );
viewMarkupAction->setEnabled( isEditorPage );
viewZoomInAction->setEnabled( isEditorPage );
viewZoomOutAction->setEnabled( isEditorPage );
viewZoom1To1Action->setEnabled( isEditorPage );
viewZoomToFitAction->setEnabled( isEditorPage );
// Object actions
objectsArrowModeAction->setEnabled( isEditorPage );
objectsCreateMenu->setEnabled( isEditorPage );
objectsCreateTextAction->setEnabled( isEditorPage );
objectsCreateLineAction->setEnabled( isEditorPage );
objectsCreateBoxAction->setEnabled( isEditorPage );
objectsCreateEllipseAction->setEnabled( isEditorPage );
objectsCreateImageAction->setEnabled( isEditorPage );
objectsCreateBarcodeAction->setEnabled( isEditorPage );
objectsOrderMenu->setEnabled( isEditorPage && hasSelection );
objectsOrderRaiseAction->setEnabled( isEditorPage && hasSelection );
objectsOrderLowerAction->setEnabled( isEditorPage && hasSelection );
objectsXformMenu->setEnabled( isEditorPage && hasSelection );
objectsXformRotateLeftAction->setEnabled( isEditorPage && hasSelection );
objectsXformRotateRightAction->setEnabled( isEditorPage && hasSelection );
objectsXformFlipHorizAction->setEnabled( isEditorPage && hasSelection );
objectsXformFlipVertAction->setEnabled( isEditorPage && hasSelection );
objectsAlignMenu->setEnabled( isEditorPage && hasMultiSelection );
objectsAlignLeftAction->setEnabled( isEditorPage && hasMultiSelection );
objectsAlignRightAction->setEnabled( isEditorPage && hasMultiSelection );
objectsAlignHCenterAction->setEnabled( isEditorPage && hasMultiSelection );
objectsAlignTopAction->setEnabled( isEditorPage && hasMultiSelection );
objectsAlignBottomAction->setEnabled( isEditorPage && hasMultiSelection );
objectsAlignVCenterAction->setEnabled( isEditorPage && hasMultiSelection );
objectsCenterMenu->setEnabled( isEditorPage && hasSelection );
objectsCenterHorizAction->setEnabled( isEditorPage && hasSelection );
objectsCenterVertAction->setEnabled( isEditorPage && hasSelection );
///
/// Set enabled state of actions associated with data being available on clipboard.
///
void MainWindow::setPasteVerbsEnabled( bool enabled )
{
editPasteAction->setEnabled( enabled );
contextPasteAction->setEnabled( enabled );
}
// Help actions
helpContentsAction->setEnabled( true );
helpAboutAction->setEnabled( true );
///
/// Set enabled state of actions associated with a non-empty selection.
///
void MainWindow::setSelectionVerbsEnabled( bool enabled )
{
editCutAction->setEnabled( enabled );
editCopyAction->setEnabled( enabled );
editDeleteAction->setEnabled( enabled );
editUnSelectAllAction->setEnabled( enabled );
objectsOrderMenu->setEnabled( enabled );
objectsOrderRaiseAction->setEnabled( enabled );
objectsOrderLowerAction->setEnabled( enabled );
objectsXformMenu->setEnabled( enabled );
objectsXformRotateLeftAction->setEnabled( enabled );
objectsXformRotateRightAction->setEnabled( enabled );
objectsXformFlipHorizAction->setEnabled( enabled );
objectsXformFlipVertAction->setEnabled( enabled );
objectsCenterMenu->setEnabled( enabled );
objectsCenterHorizAction->setEnabled( enabled );
objectsCenterVertAction->setEnabled( enabled );
contextOrderMenu->setEnabled( enabled );
contextXformMenu->setEnabled( enabled );
contextCenterMenu->setEnabled( enabled );
}
///
/// Set enabled state of actions associated with a non-atomic selection.
///
void MainWindow::setMultiSelectionVerbsEnabled( bool enabled )
{
objectsAlignMenu->setEnabled( enabled );
objectsAlignLeftAction->setEnabled( enabled );
objectsAlignRightAction->setEnabled( enabled );
objectsAlignHCenterAction->setEnabled( enabled );
objectsAlignTopAction->setEnabled( enabled );
objectsAlignBottomAction->setEnabled( enabled );
objectsAlignVCenterAction->setEnabled( enabled );
contextAlignMenu->setEnabled( enabled );
// Special context actions
contextCutAction->setEnabled( isEditorPage && hasSelection );
contextCopyAction->setEnabled( isEditorPage && hasSelection );
contextPasteAction->setEnabled( isEditorPage && canPaste );
contextDeleteAction->setEnabled( isEditorPage && hasSelection );
}
@@ -1057,45 +1024,24 @@ namespace glabels
{
if ( checked )
{
setWelcomeMode( false );
if ( mEditorButton->isChecked() )
{
mPages->setCurrentIndex( EDITOR_PAGE_INDEX );
setDocVerbsEnabled( true );
setSelectionVerbsEnabled( !mModel->isSelectionEmpty() );
setMultiSelectionVerbsEnabled( !mModel->isSelectionEmpty() &&
!mModel->isSelectionAtomic() );
setPasteVerbsEnabled( mModel->canPaste() );
}
else if ( mPropertiesButton->isChecked() )
{
mPages->setCurrentIndex( PROPERTIES_PAGE_INDEX );
setDocVerbsEnabled( false );
setSelectionVerbsEnabled( false );
setMultiSelectionVerbsEnabled( false );
setPasteVerbsEnabled( false );
}
else if ( mMergeButton->isChecked() )
{
mPages->setCurrentIndex( MERGE_PAGE_INDEX );
setDocVerbsEnabled( false );
setSelectionVerbsEnabled( false );
setMultiSelectionVerbsEnabled( false );
setPasteVerbsEnabled( false );
}
else if ( mPrintButton->isChecked() )
{
mPages->setCurrentIndex( PRINT_PAGE_INDEX );
setDocVerbsEnabled( false );
setSelectionVerbsEnabled( false );
setMultiSelectionVerbsEnabled( false );
setPasteVerbsEnabled( false );
}
manageActions();
}
}
@@ -1105,7 +1051,7 @@ namespace glabels
///
void MainWindow::clipboardChanged()
{
setPasteVerbsEnabled( mModel->canPaste() );
manageActions();
}
@@ -1654,8 +1600,8 @@ namespace glabels
///
void MainWindow::onModifiedChanged()
{
manageActions();
setTitle();
setDocModifiedVerbsEnabled( mModel->isModified() );
}
@@ -1664,8 +1610,7 @@ namespace glabels
///
void MainWindow::onSelectionChanged()
{
setSelectionVerbsEnabled( !mModel->isSelectionEmpty() );
setMultiSelectionVerbsEnabled( !mModel->isSelectionEmpty() && !mModel->isSelectionAtomic() );
manageActions();
}
@@ -1683,8 +1628,7 @@ namespace glabels
///
void MainWindow::onUndoRedoChanged()
{
editUndoAction->setEnabled( mUndoRedoModel->canUndo() );
editRedoAction->setEnabled( mUndoRedoModel->canRedo() );
manageActions();
}
} // namespace glabels
+1 -6
View File
@@ -173,12 +173,7 @@ namespace glabels
QWidget* createMergePage();
QWidget* createPrintPage();
void setWelcomeMode( bool );
void setDocVerbsEnabled( bool );
void setDocModifiedVerbsEnabled( bool );
void setPasteVerbsEnabled( bool );
void setSelectionVerbsEnabled( bool );
void setMultiSelectionVerbsEnabled( bool );
void manageActions();
void setTitle();