From 496bb399035fc3789920498c4e9d60f0d0be3217 Mon Sep 17 00:00:00 2001 From: Jim Evins Date: Sat, 27 Sep 2014 00:49:34 -0400 Subject: [PATCH] MainWindow tracks model status. --- glabels/LabelModel.cpp | 40 ++++++++++++++++++ glabels/LabelModel.h | 9 +--- glabels/MainWindow.cpp | 93 ++++++++++++++++++++++++++++++++++++------ glabels/MainWindow.h | 13 ++++-- 4 files changed, 133 insertions(+), 22 deletions(-) diff --git a/glabels/LabelModel.cpp b/glabels/LabelModel.cpp index 5788200..201e320 100644 --- a/glabels/LabelModel.cpp +++ b/glabels/LabelModel.cpp @@ -65,6 +65,16 @@ namespace glabels } + /// + /// Clear modified status + /// + void LabelModel::clearModified() + { + mModified = false; + emit modifiedChanged(); + } + + /// /// Add object. /// @@ -80,6 +90,7 @@ namespace glabels emit objectAdded( object ); emit changed(); + emit modifiedChanged(); } @@ -92,6 +103,7 @@ namespace glabels emit objectChanged( qobject_cast(sender()) ); emit changed(); + emit modifiedChanged(); } @@ -104,6 +116,7 @@ namespace glabels emit objectMoved( qobject_cast(sender()) ); emit changed(); + emit modifiedChanged(); } @@ -121,6 +134,7 @@ namespace glabels emit objectDeleted( object ); emit changed(); + emit modifiedChanged(); } @@ -361,6 +375,7 @@ namespace glabels emit changed(); emit selectionChanged(); + emit modifiedChanged(); } @@ -386,6 +401,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -411,6 +427,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -430,6 +447,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -467,6 +485,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -486,6 +505,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -520,6 +540,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -554,6 +575,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -605,6 +627,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -639,6 +662,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -673,6 +697,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -724,6 +749,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -748,6 +774,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -772,6 +799,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -791,6 +819,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -810,6 +839,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -829,6 +859,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -848,6 +879,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -867,6 +899,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -886,6 +919,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -905,6 +939,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -924,6 +959,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -943,6 +979,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -962,6 +999,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -981,6 +1019,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } @@ -1000,6 +1039,7 @@ namespace glabels mModified = true; emit changed(); + emit modifiedChanged(); } } diff --git a/glabels/LabelModel.h b/glabels/LabelModel.h index fb9824c..14eba77 100644 --- a/glabels/LabelModel.h +++ b/glabels/LabelModel.h @@ -61,6 +61,7 @@ namespace glabels void nameChanged(); void sizeChanged(); void selectionChanged(); + void modifiedChanged(); void objectChanged( LabelModelObject* object ); void objectMoved( LabelModelObject* object ); void objectAdded( LabelModelObject* object ); @@ -74,7 +75,7 @@ namespace glabels ///////////////////////////////// public: inline bool isModified() const; - inline void clearModified(); + void clearModified(); QString shortName(); inline const QString& filename() const; @@ -205,12 +206,6 @@ namespace glabels } - inline void LabelModel::clearModified() - { - mModified = false; - } - - inline const QString& LabelModel::filename() const { return mFilename; diff --git a/glabels/MainWindow.cpp b/glabels/MainWindow.cpp index beb2699..cd9e351 100644 --- a/glabels/MainWindow.cpp +++ b/glabels/MainWindow.cpp @@ -65,6 +65,7 @@ namespace glabels setDocVerbsEnabled( false ); setPasteVerbsEnabled( false ); + setTitle(); readSettings(); @@ -99,6 +100,12 @@ namespace glabels mView->setModel( mModel ); setDocVerbsEnabled( true ); + setTitle(); + + connect( mModel, SIGNAL(nameChanged()), this, SLOT(onNameChanged()) ); + connect( mModel, SIGNAL(modifiedChanged()), this, SLOT(onModifiedChanged()) ); + connect( mModel, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()) ); + connect( mModel, SIGNAL(changed()), this, SLOT(onLabelChanged()) ); } @@ -563,12 +570,13 @@ namespace glabels statusBar()->addWidget( zoomInfoLabel ); statusBar()->addWidget( cursorInfoLabel, 1 ); - updateZoomInfo(); - updateCursorInfo(); + onZoomChanged(); + onPointerExit(); - connect( mView, SIGNAL(zoomChanged()), this, SLOT(updateZoomInfo()) ); - connect( mView, SIGNAL(pointerMoved(double, double)), this, SLOT(updateCursorInfo(double, double)) ); - connect( mView, SIGNAL(pointerExited()), this, SLOT(updateCursorInfo()) ); + connect( mView, SIGNAL(zoomChanged()), this, SLOT(onZoomChanged()) ); + connect( mView, SIGNAL(pointerMoved(double, double)), + this, SLOT(onPointerMoved(double, double)) ); + connect( mView, SIGNAL(pointerExited()), this, SLOT(onPointerExit()) ); } @@ -682,6 +690,30 @@ namespace glabels } + /// + /// Set window title + /// + void MainWindow::setTitle() + { + if ( mModel == 0 ) + { + setWindowTitle( "gLabels" ); + } + else + { + if ( mModel->isModified() ) + { + setWindowTitle( mModel->shortName() + " " + tr("(modified)") + + " - gLabels" ); + } + else + { + setWindowTitle( mModel->shortName() + " - gLabels" ); + } + } + } + + /// /// Read MainWindow Settings /// @@ -1201,9 +1233,9 @@ namespace glabels /// - /// Update Zoom Information in Status Bar + /// Zoom changed: update Zoom Information in Status Bar /// - void MainWindow::updateZoomInfo() + void MainWindow::onZoomChanged() { zoomInfoLabel->setText( QString( " %1% " ).arg(100*mView->zoom(), 0, 'f', 0) ); @@ -1213,9 +1245,9 @@ namespace glabels /// - /// Update Cursor Information in Status Bar + /// Pointer moved: update Cursor Information in Status Bar /// - void MainWindow::updateCursorInfo( double x, double y ) + void MainWindow::onPointerMoved( double x, double y ) { /* TODO: convert x,y to locale units and set precision accordingly. */ cursorInfoLabel->setText( QString( "%1, %2" ).arg(x).arg(y) ); @@ -1223,14 +1255,51 @@ namespace glabels /// - /// Update Zoom Information in Status Bar (Clears information) - /// E.g. when pointer exits view. + /// Pointer exited view: update Zoom Information in Status Bar (Clears information) /// - void MainWindow::updateCursorInfo() + void MainWindow::onPointerExit() { cursorInfoLabel->setText( "" ); } + /// + /// Name changed handler + /// + void MainWindow::onNameChanged() + { + setTitle(); + } + + + /// + /// Modified changed handler + /// + void MainWindow::onModifiedChanged() + { + setTitle(); + setDocModifiedVerbsEnabled( mModel->isModified() ); + } + + + /// + /// Selection changed handler + /// + void MainWindow::onSelectionChanged() + { + setSelectionVerbsEnabled( !mModel->isSelectionEmpty() ); + setMultiSelectionVerbsEnabled( !mModel->isSelectionAtomic() ); + } + + + /// + /// Label changed handler + /// + void MainWindow::onLabelChanged() + { + /* @TODO: update undo/redo verbs. */ + } + + } diff --git a/glabels/MainWindow.h b/glabels/MainWindow.h index f31119a..024de2e 100644 --- a/glabels/MainWindow.h +++ b/glabels/MainWindow.h @@ -133,9 +133,14 @@ namespace glabels void helpContents(); void helpAbout(); - void updateZoomInfo(); - void updateCursorInfo(); - void updateCursorInfo( double, double ); + void onZoomChanged(); + void onPointerMoved( double, double ); + void onPointerExit(); + + void onNameChanged(); + void onModifiedChanged(); + void onSelectionChanged(); + void onLabelChanged(); ///////////////////////////////////// @@ -153,6 +158,8 @@ namespace glabels void setSelectionVerbsEnabled( bool ); void setMultiSelectionVerbsEnabled( bool ); + void setTitle(); + void readSettings(); void writeSettings();