From 0921b67bca379566478979e61207efbf179ee055 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 26 Feb 2012 11:18:00 +0000 Subject: Corrected MdiChild focus issues when opening more than one file, enable or disable menu options when approriate. --- src/mainwindow.cc | 66 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 52 insertions(+), 14 deletions(-) (limited to 'src/mainwindow.cc') diff --git a/src/mainwindow.cc b/src/mainwindow.cc index 260a630..6985506 100644 --- a/src/mainwindow.cc +++ b/src/mainwindow.cc @@ -25,16 +25,18 @@ MainWindow::MainWindow() mainwindow_mdiarea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); mainwindow_mdiarea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); setCentralWidget(mainwindow_mdiarea); + + connect(mainwindow_mdiarea, SIGNAL(subWindowActivated(QMdiSubWindow*)), this, SLOT(updateMenus())); // initialize actions - init_actions(); + initActions(); // initialize menu bar - init_menu(); + initMenus(); } -void MainWindow::init_actions() +void MainWindow::initActions() { // File -> New action_new = new QAction( tr("&New..."), this); @@ -63,9 +65,18 @@ void MainWindow::init_actions() action_quit->setShortcuts(QKeySequence::Quit); action_quit->setStatusTip(tr("Exit the application")); connect(action_quit, SIGNAL(triggered()), qApp, SLOT(closeAllWindows())); + + // Edit -> Add + action_add = new QAction(tr("&Add"), this); + connect(action_add, SIGNAL(triggered()), this, SLOT(slot_add())); + action_delete = new QAction(tr("&Delete"), this); + connect(action_delete, SIGNAL(triggered()), this, SLOT(slot_delete())); + action_duplicate = new QAction(tr("D&uplicate"), this); + connect(action_duplicate, SIGNAL(triggered()), this, SLOT(slot_duplicate())); + } -void MainWindow::init_menu() +void MainWindow::initMenus() { mainwindow_filemenu = menuBar()->addMenu(tr("&File")); mainwindow_filemenu->addAction(action_new); @@ -76,8 +87,22 @@ void MainWindow::init_menu() mainwindow_filemenu->addAction(action_quit); mainwindow_editmenu = menuBar()->addMenu(tr("&Edit")); + mainwindow_editmenu->addAction(action_add); + mainwindow_editmenu->addAction(action_delete); + mainwindow_editmenu->addAction(action_duplicate); } +void MainWindow::updateMenus() +{ + bool active =(mainwindow_mdiarea->activeSubWindow() != 0); + + action_save_as->setEnabled(active); + action_save->setEnabled(active); + + action_add->setEnabled(active); + action_delete->setEnabled(active); + action_duplicate->setEnabled(active); +} EditorWindow *MainWindow::active_child() { @@ -109,7 +134,7 @@ EditorWindow *MainWindow::add_child() // add the widget to the MDI area, // this will wrap an QMdiSubWindow around it QMdiSubWindow *subwindow = mainwindow_mdiarea->addSubWindow(child_widget); - subwindow->resize(768, 512); + //subwindow->resize(768, 512); child_widget->show(); // FIXME check if maximized @@ -131,6 +156,8 @@ void MainWindow::slot_open() QMdiSubWindow *subwindow = find_child(filename); if (subwindow) { + subwindow->raise(); + subwindow->activateWindow(); mainwindow_mdiarea->setActiveSubWindow(subwindow); } else { EditorWindow *editorwindow = add_child(); @@ -138,13 +165,11 @@ void MainWindow::slot_open() if (!editorwindow->loadFile(filename)) { subwindow = find_child(filename); subwindow->close(); - return; - } - - subwindow = find_child(filename); - if (subwindow) { - subwindow->setWindowTitle(filename); - mainwindow_mdiarea->setActiveSubWindow(subwindow); + } else { + subwindow = find_child(filename); + if (subwindow) { + subwindow->setWindowTitle(filename); + } } } } @@ -170,7 +195,6 @@ void MainWindow::slot_save_as() void MainWindow::slot_save() { - /* if (active_child()) { if (active_child()->filename().isEmpty()) { slot_save_as(); @@ -179,7 +203,21 @@ void MainWindow::slot_save() active_child()->saveFile(active_child()->filename()); } } - */ +} + +void MainWindow::slot_add() +{ + qDebug() << "slot_add"; +} + +void MainWindow::slot_delete() +{ + qDebug() << "slot_delete"; +} + +void MainWindow::slot_duplicate() +{ + qDebug() << "slot_duplicate"; } } -- cgit v1.2.3