4747#include < QGraphicsScene>
4848#include < QFileInfo>
4949#include < QDesktopServices>
50+ #include < QDesktopWidget>
5051
5152#include " widgets/editroidialog.h"
5253
6465
6566#include " planetaryimager.h"
6667#include " drivers/driver.h"
68+ #include " mainwindowwidgets.h"
6769
6870using namespace GuLinux ;
6971using namespace std ;
@@ -75,12 +77,13 @@ Q_DECLARE_METATYPE(cv::Mat)
7577DPTR_IMPL(PlanetaryImagerMainWindow) {
7678 PlanetaryImagerPtr planetaryImager;
7779 FilesystemBrowserPtr filesystemBrowser;
80+ MainWindowWidgetsPtr main_window_widgets;
7881
7982 static PlanetaryImagerMainWindow *q;
8083 unique_ptr<Ui::PlanetaryImagerMainWindow> ui;
8184 Imager *imager = nullptr ;
8285 void rescan_devices ();
83- void saveState ();
86+ void saveWindowGeometry ();
8487
8588 StatusBarInfoWidget *statusbar_info_widget;
8689 shared_ptr<DisplayImage> displayImage;
@@ -113,17 +116,15 @@ PlanetaryImagerMainWindow *PlanetaryImagerMainWindow::Private::q = nullptr;
113116PlanetaryImagerMainWindow::~PlanetaryImagerMainWindow ()
114117{
115118 LOG_F_SCOPE
116- d->saveState ();
117119 if (d->imager ) {
118120 d->imager ->destroy ();
119121 }
120122 d->displayImage ->quit ();
121123 d->planetaryImager ->quit ();
122124}
123125
124- void PlanetaryImagerMainWindow::Private::saveState ()
126+ void PlanetaryImagerMainWindow::Private::saveWindowGeometry ()
125127{
126- planetaryImager->configuration ().set_dock_status (q->saveState ());
127128 planetaryImager->configuration ().set_main_window_geometry (q->saveGeometry ());
128129}
129130
@@ -142,6 +143,9 @@ PlanetaryImagerMainWindow::PlanetaryImagerMainWindow(
142143 d->ui .reset (new Ui::PlanetaryImagerMainWindow);
143144
144145 d->ui ->setupUi (this );
146+ d->main_window_widgets = make_shared<MainWindowWidgets>(this , d->ui ->menuWindow , planetaryImager->configuration ());
147+
148+ restoreGeometry (d->planetaryImager ->configuration ().main_window_geometry ());
145149 setWindowIcon (QIcon::fromTheme (" planetary_imager" ));
146150 d->ui ->recording ->setWidget (d->recording_panel = new RecordingPanel{d->planetaryImager ->configuration (), filesystemBrowser});
147151 d->configurationDialog = new ConfigurationDialog (d->planetaryImager ->configuration (), this );
@@ -184,38 +188,28 @@ PlanetaryImagerMainWindow::PlanetaryImagerMainWindow(
184188 d->image_widget ->actions ()[ZoomableImage::Actions::ZoomRealSize]->setShortcut ({Qt::CTRL + Qt::Key_Backspace});
185189 d->image_widget ->actions ()[ZoomableImage::Actions::ZoomRealSize]->setIcon (QIcon{" :/resources/real_size.png" });
186190 d->image_widget ->toolbar ()->setWindowTitle (" Image Control" );
187- addToolBar (d->image_widget ->toolbar ());
188- QToolBar *helpToolBar = new QToolBar;
189- helpToolBar->setWindowTitle (tr (" Help" ));
191+ d->image_widget ->toolbar ()->setObjectName (" imageToolbar" );
192+
193+ d->main_window_widgets ->add_toolbar (d->ui ->imageManipulation );
194+ d->main_window_widgets ->add_toolbar (d->ui ->ROIToolbar );
195+ d->main_window_widgets ->add_toolbar (d->image_widget ->toolbar (), true );
196+ QToolBar *helpToolBar = new QToolBar (tr (" Help" ));
190197 auto whatsThis = QWhatsThis::createAction ();
191198 whatsThis->setIcon (QIcon{" :/resources/help.png" });
192199 helpToolBar->addAction (whatsThis);
193- addToolBar (helpToolBar);
200+ helpToolBar->setObjectName (" help" );
201+ d->main_window_widgets ->add_toolbar (helpToolBar, true );
202+
194203 d->image_widget ->toolbar ()->setFloatable (true );
195204 d->image_widget ->toolbar ()->setMovable (true );
196205
197- restoreGeometry (d->planetaryImager ->configuration ().main_window_geometry ());
198- restoreState (d->planetaryImager ->configuration ().dock_status ());
199206 connect (d->ui ->actionAbout , &QAction::triggered, bind (&QMessageBox::about, this , tr (" About" ),
200207 tr (" %1 version %2.\n Fast imaging capture software for planetary imaging" ).arg (qApp->applicationDisplayName ())
201208 .arg (qApp->applicationVersion ())));
202209 connect (d->ui ->actionAbout_Qt , &QAction::triggered, &QApplication::aboutQt);
203210 connect (d->ui ->action_devices_rescan , &QAction::triggered, bind (&Private::rescan_devices, d.get ()));
204211 connect (d->ui ->actionShow_settings , &QAction::triggered, bind (&QDialog::show, d->configurationDialog ));
205212
206- auto dockWidgetToggleVisibility = [=](QDockWidget *widget, bool visible){ widget->setVisible (visible); };
207- auto dockWidgetVisibleCheck = [=](QAction *action, QDockWidget *widget) { action->setChecked (widget->isVisible ()); };
208- QList<QDockWidget*> dock_widgets;
209- auto setupDockWidget = [&](QAction *action, QDockWidget *widget){
210- dockWidgetVisibleCheck (action, widget);
211- connect (action, &QAction::triggered, bind (dockWidgetToggleVisibility, widget, _1));
212- connect (widget, &QDockWidget::visibilityChanged, bind (dockWidgetVisibleCheck, action, widget));
213- connect (widget, &QDockWidget::dockLocationChanged, bind (&Private::saveState, d.get ()));
214- connect (widget, &QDockWidget::topLevelChanged, bind (&Private::saveState, d.get ()));
215- connect (widget, &QDockWidget::visibilityChanged, bind (&Private::saveState, d.get ()));
216- dock_widgets.push_back (widget);
217- };
218-
219213 connect (d->configurationDialog , &QDialog::accepted, this , bind (&DisplayImage::read_settings, d->displayImage ), Qt::DirectConnection);
220214 connect (d->configurationDialog , &QDialog::accepted, this , bind (&Histogram::read_settings, d->histogram ), Qt::DirectConnection);
221215 connect (d->configurationDialog , &QDialog::accepted, this ,
@@ -236,16 +230,14 @@ PlanetaryImagerMainWindow::PlanetaryImagerMainWindow(
236230 QTimer::singleShot (5000 , bind (&DisplayImage::setRecording, d->displayImage , false ));
237231 QTimer::singleShot (5000 , bind (&Histogram::setRecording, d->histogram , false ));
238232 }, Qt::QueuedConnection);
239- setupDockWidget (d->ui ->actionChip_Info , d->ui ->chipInfoWidget );
240- setupDockWidget (d->ui ->actionCamera_Settings , d->ui ->camera_settings );
241- setupDockWidget (d->ui ->actionRecording , d->ui ->recording );
242- setupDockWidget (d->ui ->actionHistogram , d->ui ->histogram );
243- if (! d->planetaryImager ->configuration ().widgets_setup_first_run () ) {
244- tabifyDockWidget (d->ui ->chipInfoWidget , d->ui ->camera_settings );
245- tabifyDockWidget (d->ui ->chipInfoWidget , d->ui ->histogram );
246- tabifyDockWidget (d->ui ->chipInfoWidget , d->ui ->recording );
247- d->planetaryImager ->configuration ().set_widgets_setup_first_run (true );
248- }
233+
234+ d->main_window_widgets ->add_dock (d->ui ->chipInfoWidget );
235+ d->main_window_widgets ->add_dock (d->ui ->camera_settings );
236+ d->main_window_widgets ->add_dock (d->ui ->recording );
237+ d->main_window_widgets ->add_dock (d->ui ->histogram );
238+
239+ d->main_window_widgets ->load ();
240+
249241 qDebug () << " file " << logFilePath << " exists: " << QFile::exists (logFilePath);
250242 d->ui ->actionOpen_log_file_folder ->setMenuRole (QAction::ApplicationSpecificRole);
251243 d->ui ->actionOpen_log_file_folder ->setVisible ( ! logFilePath.isEmpty () && QFile::exists (logFilePath));
@@ -269,8 +261,6 @@ PlanetaryImagerMainWindow::PlanetaryImagerMainWindow(
269261#endif
270262 });
271263
272- connect (d->ui ->actionHide_all , &QAction::triggered, [=]{ for_each (begin (dock_widgets), end (dock_widgets), bind (&QWidget::hide, _1) ); });
273- connect (d->ui ->actionShow_all , &QAction::triggered, [=]{ for_each (begin (dock_widgets), end (dock_widgets), bind (&QWidget::show, _1) ); });
274264 connect (MessagesLogger::instance (), &MessagesLogger::message, this , bind (&PlanetaryImagerMainWindow::notify, this , _1, _2, _3, _4), Qt::QueuedConnection);
275265 connect (d->displayImage .get (), &DisplayImage::gotImage, this , bind (&ZoomableImage::setImage, d->image_widget , _1), Qt::QueuedConnection);
276266
@@ -332,8 +322,15 @@ PlanetaryImagerMainWindow::PlanetaryImagerMainWindow(
332322 d->rescan_devices ();
333323}
334324
325+ void PlanetaryImagerMainWindow::showEvent (QShowEvent *event)
326+ {
327+ QMainWindow::showEvent (event);
328+ }
329+
335330void PlanetaryImagerMainWindow::closeEvent (QCloseEvent* event)
336331{
332+ d->main_window_widgets ->save ();
333+ d->saveWindowGeometry ();
337334 QMainWindow::closeEvent (event);
338335 emit quit ();
339336}
0 commit comments