From 1030dc837b10a03a02a85d5504cbeec168ce49e2 Mon Sep 17 00:00:00 2001 From: Bernie Innocenti Date: Mon, 03 May 2010 21:53:47 +0000 Subject: Import XaoS r489 (trunk after version 3.5) --- (limited to 'src/ui/ui-drv/qt/mainwindow.cpp') diff --git a/src/ui/ui-drv/qt/mainwindow.cpp b/src/ui/ui-drv/qt/mainwindow.cpp new file mode 100644 index 0000000..aa03e66 --- /dev/null +++ b/src/ui/ui-drv/qt/mainwindow.cpp @@ -0,0 +1,172 @@ +#include "mainwindow.h" +#include "fractalwidget.h" +#include "customdialog.h" + +#include "ui.h" + +#include + + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + setWindowTitle(QCoreApplication::applicationName()); + + statusBar()->show(); + + m_fractalWidget = new FractalWidget(); + setCentralWidget(m_fractalWidget); + + readSettings(); +} + +MainWindow::~MainWindow() +{ +} + +FractalWidget *MainWindow::fractalWidget() +{ + return m_fractalWidget; +} + +void MainWindow::readSettings() +{ + QSettings settings; + QPoint pos = settings.value("windowPosition", QPoint(200, 200)).toPoint(); + QSize size = settings.value("imageSize", QSize(640, 480)).toSize(); + m_fractalWidget->setSizeHint(size); + move(pos); +} + +void MainWindow::writeSettings() +{ + QSettings settings; + settings.setValue("windowPosition", pos()); + settings.setValue("imageSize", size()); +} + +void MainWindow::closeEvent(QCloseEvent *event) +{ + writeSettings(); + ui_quit(); +} + +void MainWindow::showMessage(const QString &message) +{ + statusBar()->showMessage(message, 5000); +} + +QKeySequence::StandardKey MainWindow::keyForItem(const QString &name) +{ + if (name =="initstate") return QKeySequence::New; + if (name =="loadpos") return QKeySequence::Open; + if (name =="savepos") return QKeySequence::Save; + if (name =="undo") return QKeySequence::Undo; + if (name =="redo") return QKeySequence::Redo; + if (name =="recalculate") return QKeySequence::Refresh; + if (name =="help") return QKeySequence::HelpContents; + + return QKeySequence::UnknownKey; +} + +void MainWindow::buildMenu(struct uih_context *uih, const char *name) +{ + menuBar()->clear(); + + const menuitem *item; + for (int i = 0; (item = menu_item(name, i)) != NULL; i++) { + if (item->type == MENU_SUBMENU) { + QMenu *menu = menuBar()->addMenu(QString(item->name)); + buildMenu(uih, item->shortname, menu); + } + } +} + +void MainWindow::buildMenu(struct uih_context *uih, const char *name, QMenu *parent) +{ + QActionGroup *group = new QActionGroup(parent); + + const menuitem *item; + for (int i = 0; (item = menu_item(name, i)) != NULL; i++) { + + QString itemName(item->name); + if (item->type == MENU_DIALOG || item->type == MENU_CUSTOMDIALOG) + itemName += "..."; + + if (item->type == MENU_SEPARATOR) { + parent->addSeparator(); + } else if (item->type == MENU_SUBMENU) { + QMenu *menu = parent->addMenu(item->name); + buildMenu(uih, item->shortname, menu); + } else { + QAction *action = new QAction(itemName, parent); + action->setShortcuts(keyForItem(item->shortname)); + action->setObjectName(item->shortname); + if (item->flags & (MENUFLAG_RADIO | MENUFLAG_CHECKBOX)) { + action->setCheckable(true); + action->setChecked(menu_enabled(item, uih)); + if (item->flags & MENUFLAG_RADIO) + action->setActionGroup(group); + } + connect(action, SIGNAL(triggered()), this, SLOT(activateMenuItem())); + parent->addAction(action); + } + } +} + +void MainWindow::popupMenu(struct uih_context *uih, const char *name) +{ + QMenu *menu = new QMenu(this); + buildMenu(uih, name, menu); + menu->exec(QCursor::pos()); + delete menu; +} + +void MainWindow::toggleMenu(struct uih_context *uih, const char *name) +{ + const menuitem *item = menu_findcommand(name); + QAction *action = menuBar()->findChild(name); + if (action) + action->setChecked(menu_enabled(item, uih)); +} + +void MainWindow::activateMenuItem() +{ + QAction *action = qobject_cast(sender()); + const menuitem *item = menu_findcommand(action->objectName().toAscii()); + ui_menuactivate(item, NULL); +} + +void MainWindow::showDialog(struct uih_context *uih, const char *name) +{ + const menuitem *item = menu_findcommand(name); + if (!item) return; + + const menudialog *dialog = menu_getdialog(uih, item); + if (!dialog) return; + + int nitems; + for (nitems = 0; dialog[nitems].question; nitems++); + + if (nitems == 1 && (dialog[0].type == DIALOG_IFILE || dialog[0].type == DIALOG_OFILE)) { + QString filter = QString("*.%1").arg(QFileInfo(dialog[0].defstr).completeSuffix()); + QString directory;// = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); + + QString fileName; + if (dialog[0].type == DIALOG_IFILE) + fileName = QFileDialog::getOpenFileName(this, item->name, directory, filter); + else if (dialog[0].type == DIALOG_OFILE) + fileName = QFileDialog::getSaveFileName(this, item->name, directory, filter); + + + if (!fileName.isNull()) { + dialogparam *param = (dialogparam *)malloc(sizeof(dialogparam)); + param->dstring = strdup(fileName.toUtf8()); + ui_menuactivate(item, param); + } + } else { + CustomDialog customDialog(uih, item, dialog, this); + if (customDialog.exec() == QDialog::Accepted) + ui_menuactivate(item, customDialog.parameters()); + } +} -- cgit v0.9.1