//! \brief Setup the menu under File -> Recent //! \see void MainWindow::setupRecentMenu( ) void FileDealerImageSingle::setupRecentMenu( QMenu* recent ) { for( int i = 0; i < MaxRecentFiles; ++i ) { mRecentFileActions[i] = new QAction( this ); mRecentFileActions[i]->setVisible( false ); connect( mRecentFileActions[i], SIGNAL( triggered() ), this, SLOT( openRecent() ) ); } this->updateRecentFileActions(); recent->addActions( mRecentFileActions ); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setWindowTitle(tr("Text Editor")); resize(700, 400); move(50, 50); tabs = new TabWidget(this); setCentralWidget(tabs); tabs->setTabsClosable(true); connect(tabs, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int))); connect(tabs, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); connect(tabs, SIGNAL(textDropped(QString)), this, SLOT(textDropped(QString))); QStatusBar *sBar = new QStatusBar(this); setStatusBar(sBar); set = new QSettings("settings.ini", QSettings::IniFormat); QList<RecentFilesItem> files = RecentFiles().allItems(); QFileIconProvider *pvd = new QFileIconProvider(); QMenuBar *bar = new QMenuBar(this); setMenuBar(bar); QMenu *mFile = bar->addMenu(tr("&File")); QMenu *mEdit = bar->addMenu(tr("&Edit")); QMenu *mView = bar->addMenu(tr("&View")); QMenu *mTool = bar->addMenu(tr("&Tool")); QMenu *mHelp = bar->addMenu(tr("&Help")); QAction *aNew = mFile->addAction(QIcon::fromTheme("document-new"), tr("New"), this, SLOT(newTab())); QAction *aOpen = mFile->addAction(QIcon::fromTheme("document-open"), tr("Open"), this, SLOT(open())); QMenu *mRecents = mFile->addMenu(QIcon::fromTheme(""), tr("Recently used")); foreach(RecentFilesItem file, files) { qDebug() << file.path(); if(file.mimeType().startsWith("text/")) mRecents->addAction(QIcon(), file.path(), this, SLOT(openRecent())); if(mRecents->actions().count() == 5) break; }
MainWindow::MainWindow() { // User interface ---------------------------------------------------------- if (tr("LTR") == "RTL") { qApp->setLayoutDirection(Qt::RightToLeft); } setupUi(this); network_access_manager = new QNetworkAccessManager(this); default_printer = NULL; #ifdef Q_OS_MAC this->setUnifiedTitleAndToolBarOnMac(true); #endif progressBar = new QProgressBar(this); progressBar->setTextVisible(false); progressBar->resize(QSize(30, 10)); statusBar()->addPermanentWidget(progressBar, 0); statusBar()->setFixedHeight(20); progressBar->setFixedWidth(150); progressBar->setFixedHeight(15); progressBar->setVisible(false); LQCategoryComboBox->setVisible(false); SQStatisticsLabel->setVisible(false); currentSvgChanged(); btnApply = SQButtonBox->button(QDialogButtonBox::Apply); btnApply->setText(tr("Apply")); btnApply->setStatusTip(tr("Apply any changes you have made to the question")); btnApply->setIcon(QIcon(QString::fromUtf8(":/images/images/button_ok.png"))); btnDiscard = SQButtonBox->button(QDialogButtonBox::Discard); btnDiscard->setText(tr("Discard")); btnDiscard->setStatusTip(tr("Discard any changes you have made to the question")); btnDiscard->setIcon(QIcon(QString::fromUtf8(":/images/images/button_cancel.png"))); SQQuestionTextEdit->setTitle(tr("Question:")); SQQuestionTextEdit->textEdit()->setStatusTip(tr("Text of the selected question")); ECTextEdit->setTitle(tr("Comments:")); ECTextEdit->textEdit()->setStatusTip(tr("Use this field for your comments, notes, reminders...")); EFTreeWidget->setMouseTracking(true); EFTreeWidget->header()->setSectionResizeMode(0, QHeaderView::Fixed); EFTreeWidget->header()->setSectionResizeMode(1, QHeaderView::Stretch); EFTreeWidget->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents); EFButtonBox->button(QDialogButtonBox::Apply)->setText(tr("Apply")); EFButtonBox->button(QDialogButtonBox::Apply)->setStatusTip(tr("Apply any changes you have made to the categories")); EFButtonBox->button(QDialogButtonBox::Apply)->setIcon(QIcon(QString::fromUtf8(":/images/images/button_ok.png"))); EFButtonBox->button(QDialogButtonBox::Discard)->setText(tr("Discard")); EFButtonBox->button(QDialogButtonBox::Discard)->setStatusTip(tr("Discard any changes you have made to the categories")); EFButtonBox->button(QDialogButtonBox::Discard)->setIcon(QIcon(QString::fromUtf8(":/images/images/button_cancel.png"))); // Initialize variables ---------------------------------------------------- // URLs docs_url = tr("http://itest.sourceforge.net/documentation/%1/en/").arg("1.4"); // i18n QTranslator translator; translator.load(":/i18n/iTest-i18n.qm"); itest_i18n.insert("English", "en"); itest_i18n.insert(translator.translate("LanguageNames", "Slovak"), "sk"); itest_i18n.insert(translator.translate("LanguageNames", "Russian"), "ru"); itest_i18n.insert(translator.translate("LanguageNames", "Turkish"), "tr"); itest_i18n.insert(translator.translate("LanguageNames", "Portuguese"), "pt"); itest_i18n.insert(translator.translate("LanguageNames", "Spanish"), "es"); itest_i18n.insert(translator.translate("LanguageNames", "Italian"), "it"); itest_i18n.insert(translator.translate("LanguageNames", "Latvian"), "lv"); itest_i18n.insert(translator.translate("LanguageNames", "Ukrainian"), "uk"); itest_i18n.insert(translator.translate("LanguageNames", "Czech"), "cs"); itest_i18n.insert(translator.translate("LanguageNames", "Hungarian"), "hu"); itest_i18n.insert(translator.translate("LanguageNames", "German"), "de"); // CURRENT_DB current_db_open = false; current_db_session = NULL; current_db_class = NULL; current_db_categories.resize(20); current_db_categories_enabled.resize(20); // Connect slots ----------------------------------------------------------- tbtnAddQuestion->setDefaultAction(actionAdd); tbtnDuplicateQuestion->setDefaultAction(actionDuplicate); tbtnDeleteQuestion->setDefaultAction(actionDelete); QObject::connect(actionAdd, SIGNAL(triggered()), this, SLOT(addQuestion())); QObject::connect(actionDelete, SIGNAL(triggered()), this, SLOT(deleteQuestion())); QObject::connect(actionDuplicate, SIGNAL(triggered()), this, SLOT(duplicateQuestion())); QObject::connect(btnApply, SIGNAL(released()), this, SLOT(applyQuestionChanges())); QObject::connect(actionApply, SIGNAL(triggered()), this, SLOT(applyQuestionChanges())); QObject::connect(btnDiscard, SIGNAL(released()), this, SLOT(discardQuestionChanges())); QObject::connect(actionDiscard, SIGNAL(triggered()), this, SLOT(discardQuestionChanges())); QObject::connect(actionNew, SIGNAL(triggered()), this, SLOT(newDB())); QObject::connect(btnNew, SIGNAL(released()), this, SLOT(newDB())); QObject::connect(actionOpen, SIGNAL(triggered()), this, SLOT(open())); QObject::connect(btnOpenOther, SIGNAL(released()), this, SLOT(open())); QObject::connect(btnOpenSelected, SIGNAL(released()), this, SLOT(openRecent())); QObject::connect(actionSave, SIGNAL(triggered()), this, SLOT(save())); QObject::connect(actionSave_as, SIGNAL(triggered()), this, SLOT(saveAs())); QObject::connect(actionSave_a_copy, SIGNAL(triggered()), this, SLOT(saveCopy())); QObject::connect(actionExport_CSV, SIGNAL(triggered()), this, SLOT(exportCSV())); QObject::connect(actionClose, SIGNAL(triggered()), this, SLOT(closeDB())); QObject::connect(actionQuit, SIGNAL(triggered()), this, SLOT(quit())); QObject::connect(actionAbout, SIGNAL(triggered()), this, SLOT(about())); QObject::connect(recentDBsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(openRecent(QListWidgetItem *))); QObject::connect(LQListWidget, SIGNAL(currentTextChanged(QString)), this, SLOT(setCurrentQuestion())); QObject::connect(actionFrom_A_to_Z, SIGNAL(triggered()), this, SLOT(sortQuestionsAscending())); QObject::connect(actionFrom_Z_to_A, SIGNAL(triggered()), this, SLOT(sortQuestionsDescending())); QObject::connect(actionBy_category, SIGNAL(triggered()), this, SLOT(sortQuestionsByCategory())); tbtnAddSVG->setDefaultAction(actionAdd_SVG); tbtnRemoveSVG->setDefaultAction(actionRemove_SVG); tbtnEditSVG->setDefaultAction(actionEdit_SVG); tbtnExportSVG->setDefaultAction(actionExport_SVG); QObject::connect(actionAdd_SVG, SIGNAL(triggered()), this, SLOT(addSvg())); QObject::connect(actionRemove_SVG, SIGNAL(triggered()), this, SLOT(removeSvg())); QObject::connect(actionEdit_SVG, SIGNAL(triggered()), this, SLOT(editSvg())); QObject::connect(actionExport_SVG, SIGNAL(triggered()), this, SLOT(exportSvg())); QObject::connect(SQSVGListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(previewSvg(QListWidgetItem *))); QObject::connect(SQSVGListWidget, SIGNAL(currentTextChanged(QString)), this, SLOT(currentSvgChanged())); tbtnMoveUp->setDefaultAction(actionMove_up); tbtnMoveDown->setDefaultAction(actionMove_down); QObject::connect(actionMove_up, SIGNAL(triggered()), this, SLOT(moveUp())); QObject::connect(actionMove_down, SIGNAL(triggered()), this, SLOT(moveDown())); QObject::connect(actionMove_to_top, SIGNAL(triggered()), this, SLOT(moveToTop())); QObject::connect(actionMove_to_bottom, SIGNAL(triggered()), this, SLOT(moveToBottom())); QObject::connect(actionHide, SIGNAL(triggered()), this, SLOT(hideQuestion())); QObject::connect(actionShow_hidden, SIGNAL(triggered()), this, SLOT(filterLQSearch())); rbtngrpFilterLQ = new QButtonGroup(this); rbtngrpFilterLQ->addButton(LQAllRadioButton); rbtngrpFilterLQ->addButton(LQEasyRadioButton); rbtngrpFilterLQ->addButton(LQMediumRadioButton); rbtngrpFilterLQ->addButton(LQDifficultRadioButton); rbtngrpFilterLQ->addButton(LQCategoryRadioButton); actgrpFilterLQ = new QActionGroup(this); actgrpFilterLQ->addAction(actionShow_all); actgrpFilterLQ->addAction(actionShow_easy); actgrpFilterLQ->addAction(actionShow_medium); actgrpFilterLQ->addAction(actionShow_difficult); actgrpFilterLQ->addAction(actionShow_category); QObject::connect(rbtngrpFilterLQ, SIGNAL(buttonReleased(QAbstractButton *)), this, SLOT(filterLQ(QAbstractButton *))); QObject::connect(actgrpFilterLQ, SIGNAL(triggered(QAction *)), this, SLOT(filterLQAction(QAction *))); QObject::connect(LQCategoryComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(filterLQCategoryChanged())); QObject::connect(LQSearchLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(filterLQSearch())); QObject::connect(tbtnSearchByGroup, SIGNAL(released()), this, SLOT(searchByGroup())); actgrpPage = new QActionGroup(this); actgrpPage->addAction(actionEdit_questions); actgrpPage->addAction(actionEdit_comments); actgrpPage->addAction(actionEdit_categories); actgrpPage->addAction(actionEdit_test); actgrpPage->addAction(actionSaved_sessions); actgrpPage->addAction(actionEdit_classes); QObject::connect(actgrpPage, SIGNAL(triggered(QAction *)), this, SLOT(setPage(QAction *))); //QObject::connect(btnApply, SIGNAL(released()), this, SLOT(setDatabaseModified())); //QObject::connect(actionApply, SIGNAL(triggered()), this, SLOT(setDatabaseModified())); QObject::connect(ECTextEdit, SIGNAL(textChanged()), this, SLOT(setDatabaseModified())); QObject::connect(actionCheck_for_updates, SIGNAL(triggered()), this, SLOT(checkForUpdates())); QObject::connect(network_access_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(httpRequestFinished(QNetworkReply *))); QObject::connect(actionDocumentation, SIGNAL(triggered()), this, SLOT(openDocumentation())); QObject::connect(SQStatisticsLabel, SIGNAL(linkActivated(QString)), this, SLOT(adjustQuestionDifficulty())); QObject::connect(actionPrint_questions, SIGNAL(triggered()), this, SLOT(showPrintQuestionsDialogue())); QObject::connect(actionOverall_statistics, SIGNAL(triggered()), this, SLOT(overallStatistics())); QObject::connect(actionChange_language, SIGNAL(triggered()), this, SLOT(changeLanguage())); QObject::connect(mainStackedWidget, SIGNAL(currentChanged(int)), this, SLOT(currentPageChanged(int))); // Disable all ------------------------------------------------------------- setAllEnabled(false); // Categories ------------------------------------------------------------------- setupCategoriesPage(); // Server ------------------------------------------------------------------ setupServer(); // Session viewer ---------------------------------------------------------- setupSessionViewer(); // Class viewer ------------------------------------------------------------ setupClassViewer(); // ------------------------------------------------------------------------- #ifdef Q_OS_MAC show(); #endif // Load settings ----------------------------------------------------------- loadSettings(); // Ready ------------------------------------------------------------------- statusBar()->showMessage(tr("Ready"), 10000); // Check app args ---------------------------------------------------------- if (qApp->arguments().count() > 1) { openFile(qApp->arguments().at(1)); } // ------------------------------------------------------------------------- #ifndef Q_OS_MAC show(); #endif }
/** * Constructor. * @param window The main application window. * @param toolbar The main toolbar * @param fileDescription The description of the document file type as it is * to appear in file dialogs * @param fileExtension The file extension of the document file type (do not * include the period) * @param newFileLaunchesDialog True if creating a new file launches a dialog * to set additional parameters, false otherwise */ QQMenuHelper::QQMenuHelper(QMainWindow *window, QToolBar *toolbar, const QString &fileDescription, const QString &fileExtension, bool newFileLaunchesDialog) : QObject(window), mainWindow(window), mainToolBar(toolbar), description(fileDescription), extension(fileExtension), file(0), help(0) { QChar ellipsis(8230); // Some phrases need to be handled differently on Mac OS X QString prefsText = menuText(tr("Pr&eferences")); QString macPrefsText = QMenuBar::tr("Preferences"); QString quitText = menuText(tr("&Quit")); QString macQuitText = QMenuBar::tr("Quit %1"); QString helpText = tr("Help Contents"); QString macHelpText = tr("%1 Help").arg(qApp->applicationName()); QString aboutText = menuText(tr("&About %1")).arg(qApp->applicationName()); QString macAboutText = QMenuBar::tr("About %1"); QString aboutQtText = menuText(tr("About &Qt")); QString macAboutQtText = QMenuBar::tr("About Qt"); #ifdef Q_WS_MAC prefsText = macPrefsText; quitText = macQuitText; helpText = macHelpText; aboutText = macAboutText; aboutQtText = macAboutQtText; #endif // File menu actions QString fileNewText(tr("&New")); if (newFileLaunchesDialog) { fileNewText += ellipsis; } fileNewAction = new QAction(QIcon(":/icons/new.png"), menuText(fileNewText), window); fileNewAction->setStatusTip(tr("Create a new file")); fileNewAction->setToolTip(fileNewAction->statusTip()); fileNewAction->setShortcut(QKeySequence::New); connect(fileNewAction, SIGNAL(triggered()), this, SLOT(emitNewFile())); fileOpenAction = new QAction(QIcon(":/icons/open.png"), menuText(tr("&Open")) + ellipsis, window); fileOpenAction->setStatusTip(tr("Open an existing file")); fileOpenAction->setToolTip(fileOpenAction->statusTip()); fileOpenAction->setShortcut(QKeySequence::Open); connect(fileOpenAction, SIGNAL(triggered()), this, SLOT(emitOpenFile())); quitAction = new QAction(QIcon(":/icons/quit.png"), quitText, window); quitAction->setStatusTip(tr("Quit the application")); #if !defined(Q_WS_HILDON) quitAction->setShortcut(QKeySequence::Quit); #endif quitAction->setMenuRole(QAction::QuitRole); connect(quitAction, SIGNAL(triggered()), this, SIGNAL(quit())); fileSaveAction = new QAction(QIcon(":/icons/save.png"), menuText(tr("&Save")), window); fileSaveAction->setStatusTip(tr("Save the current file")); fileSaveAction->setToolTip(fileSaveAction->statusTip()); fileSaveAction->setShortcut(QKeySequence::Save); connect(fileSaveAction, SIGNAL(triggered()), this, SIGNAL(saveFile())); for (int i = 0; i < MAX_RECENT_FILES; i++) { // we'll set the actual paths later; just need actions that stick // around after a file is opened recentActions[i] = new QAction("", window); connect(recentActions[i], SIGNAL(triggered()), this, SLOT(openRecent())); } fileSeparatorAction = new QAction(this); fileSeparatorAction->setSeparator(true); closeAction = new QAction(QIcon(":/icons/close.png"), menuText(tr("&Close")), window); closeAction->setStatusTip(tr("Close the current file")); closeAction->setShortcut(QKeySequence::Close); connect(closeAction, SIGNAL(triggered()), this, SIGNAL(closeFile())); prefsAction = new QAction(prefsText, window); prefsAction->setStatusTip(tr("Change the application settings")); #if !defined(Q_WS_HILDON) prefsAction->setShortcut(QKeySequence::Preferences); #endif prefsAction->setMenuRole(QAction::PreferencesRole); connect(prefsAction, SIGNAL(triggered()), this, SIGNAL(editPreferences())); #if defined(Q_WS_MAC) || defined(Q_WS_HILDON) || defined(Q_WS_MAEMO_5) fileNewAction->setIconVisibleInMenu(false); fileOpenAction->setIconVisibleInMenu(false); quitAction->setIconVisibleInMenu(false); fileSaveAction->setIconVisibleInMenu(false); closeAction->setIconVisibleInMenu(false); #endif #if defined(Q_WS_MAC) docIcon = QIcon(":/icons/document_small.png"); modifiedDocIcon = QIcon(darkenPixmap(QPixmap(":/icons/document_small.png"))); #endif // File menu basic setup file = new QMenu(menuText(tr("&File")), window); recent = new QMenu(menuText(tr("Open &Recent")), window); file->addAction(fileNewAction); file->addAction(fileOpenAction); file->addMenu(recent); file->addAction(fileSaveAction); file->addAction(fileSeparatorAction); file->addAction(closeAction); file->addAction(prefsAction); insertionPoint = fileSeparatorAction; #if !defined(Q_WS_MAC) file->addSeparator(); #endif file->addAction(quitAction); #if !defined(Q_WS_HILDON) && !defined(Q_WS_MAEMO_5) window->menuBar()->addMenu(file); #endif // Help menu actions helpAction = new QAction(helpText, window); helpAction->setStatusTip(helpText); helpAction->setShortcut(QKeySequence::HelpContents); connect(helpAction, SIGNAL(triggered()), this, SLOT(showHelp())); aboutAction = new QAction(aboutText, window); aboutAction->setStatusTip(aboutText); aboutAction->setMenuRole(QAction::AboutRole); connect(aboutAction, SIGNAL(triggered()), this, SIGNAL(aboutApplication())); aboutQtAction = new QAction(aboutQtText, window); aboutQtAction->setStatusTip(aboutQtText); aboutQtAction->setMenuRole(QAction::AboutQtRole); connect(aboutQtAction, SIGNAL(triggered()), this, SLOT(aboutQt())); // Help menu setup help = new QMenu(menuText(tr("&Help")), window); #if !defined(Q_WS_HILDON) && !defined(Q_WS_MAEMO_5) help->addAction(helpAction); #if !defined(Q_WS_MAC) // skip this on the mac, since both "About.." actions get moved elsewhere help->addSeparator(); #endif help->addAction(aboutAction); help->addAction(aboutQtAction); window->menuBar()->addMenu(help); #endif // toolbar setup addToToolBar(fileNewAction); addToToolBar(fileOpenAction); addToToolBar(fileSaveAction); // build the actions hash actions[New] = fileNewAction; actions[Open] = fileOpenAction; actions[Save] = fileSaveAction; actions[Recent1] = recentActions[0]; actions[Recent2] = recentActions[1]; actions[Recent3] = recentActions[2]; actions[Recent4] = recentActions[3]; actions[Recent5] = recentActions[4]; actions[Separator] = fileSeparatorAction; actions[Close] = closeAction; actions[Preferences] = prefsAction; actions[Quit] = quitAction; actions[Help] = helpAction; actions[About] = aboutAction; actions[AboutQt] = aboutQtAction; }
void MainWindowTask::createRescentMenu() { ui->rescentMenu->clear(); if(lastFiles.count()==0)ui->rescentMenu->setEnabled(false);else ui->rescentMenu->setEnabled(true); settings->setValue("RescentFiles",lastFiles); for(int i=0;i<lastFiles.count();i++) { QAction *action = ui->rescentMenu->addAction("&"+QString::number(i+1)+" "+lastFiles[i],this,SLOT(openRecent())); Q_UNUSED(action); } }
void MainWindow::setupWidgets() { // ligne à supprimer lorsque la doc util sera disponible actionUserManual->setVisible(false); aboutDial = new AboutDialog(this); confDial = new ConfigDialog(this); logDial = LogDialog::instance(); searchDialog = new SearchDialog(this); //printDialog = new QPrintDialog(this); QAction *a; recentActions.clear(); for(int i=0; i<10; i++) { a = new QAction(this); a->setVisible(false); connect(a, SIGNAL(triggered()), this, SLOT(openRecent())); recentActions << a; } menuRecent_files->addActions(recentActions); menuRecent_files->addSeparator(); menuRecent_files->addAction(actionClearRecent); actionPlugins->setVisible(false); actionMap[AbstractTabWidget::Copy] = actionCopy; actionMap[AbstractTabWidget::Cut] = actionCut; actionMap[AbstractTabWidget::Paste] = actionPaste; actionMap[AbstractTabWidget::Print] = actionPrint; actionMap[AbstractTabWidget::Redo] = actionRedo; actionMap[AbstractTabWidget::Save] = actionSaveQuery; actionMap[AbstractTabWidget::SaveAs] = actionSaveQueryAs; actionMap[AbstractTabWidget::Search] = actionSearch; actionMap[AbstractTabWidget::SelectAll] = actionSelect_all; actionMap[AbstractTabWidget::Undo] = actionUndo; QSettings s; s.beginGroup("mainwindow"); if(s.contains("size")) resize(s.value("size").toSize()); if(s.contains("position")) move(s.value("position").toPoint()); if(s.value("maximized", false).toBool()) setWindowState(Qt::WindowMaximized); // removeDockWidget(dockWidget); int corner = s.value("maindock_area", 1).toInt(); switch (corner) { case 1: addDockWidget(Qt::LeftDockWidgetArea, dockWidget); break; case 2: addDockWidget(Qt::RightDockWidgetArea, dockWidget); break; case 4: addDockWidget(Qt::TopDockWidgetArea, dockWidget); break; case 8: addDockWidget(Qt::BottomDockWidgetArea, dockWidget); break; } if (s.contains("maindock_size")) { dockWidget->resize(s.value("maindock_size").toSize()); } queriesStatusLabel = new QLabel("", this); QMainWindow::statusBar()->addPermanentWidget(queriesStatusLabel); tooltipButton->setChecked(s.value("tooltips", true).toBool()); tooltipFrame->setVisible(s.value("tooltips", true).toBool()); s.endGroup(); int count = s.beginReadArray("recentfiles"); recentFiles.clear(); for(int i=0; i<count && i<10; i++) { s.setArrayIndex(i); recentFiles << s.value("entry").toString(); } s.endArray(); refreshRecent(); #if defined(Q_WS_X11) QString lang = QLocale::system().name().left(2).toLower(); QString url = QString(QString(PREFIX) + "/share/dbmaster/index_%1.html") .arg(lang); if(!QFile::exists(url)) url = QString(QString(PREFIX) + "/share/dbmaster/index_en.html"); textBrowser->setSource(url); #endif #if defined(Q_WS_WIN) QString lang = QLocale::system().name().left(2).toLower(); QString url = QString("share\\index_%1.html").arg(lang); if(!QFile::exists(url)) url = QString("share\\index_en.html"); textBrowser->setSource(url); #endif #if QT_VERSION >= 0x040500 // ensures compatibility with Qt 4.4 tabWidget->setMovable(true); tabWidget->setTabsClosable(true); // actionCloseTab->setVisible(false); mainToolBar->removeAction(actionCloseTab); #endif // loading icons from current theme actionAbout->setIcon( IconManager::get("help-about")); actionAddDb->setIcon( IconManager::get("db_add")); actionClearRecent->setIcon( IconManager::get("edit-clear")); actionCloseTab->setIcon( IconManager::get("window-close")); actionCopy->setIcon( IconManager::get("edit-copy")); actionCut->setIcon( IconManager::get("edit-cut")); actionExit->setIcon( IconManager::get("application-exit")); actionNewQuery->setIcon( IconManager::get("document-new")); actionOpenQuery->setIcon( IconManager::get("document-open")); actionPaste->setIcon( IconManager::get("edit-paste")); actionPreferences->setIcon( IconManager::get("preferences")); actionPrint->setIcon( IconManager::get("document-print")); actionRedo->setIcon( IconManager::get("edit-redo")); actionSaveQuery->setIcon( IconManager::get("document-save")); actionSaveQueryAs->setIcon( IconManager::get("document-save-as")); actionSearch->setIcon( IconManager::get("edit-find")); actionUndo->setIcon( IconManager::get("edit-undo")); tooltipButton->setIcon( IconManager::get("help-faq")); tabWidget->setTabIcon(0, IconManager::get("go-home")); }
ViewerWindow::ViewerWindow(QWidget* parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), gameData(nullptr), gameWorld(nullptr), renderer(nullptr) { setMinimumSize(640, 480); QMenuBar* mb = this->menuBar(); QMenu* file = mb->addMenu("&File"); file->addAction("Open &Game", this, SLOT(loadGame())); file->addSeparator(); for(int i = 0; i < MaxRecentGames; ++i) { QAction* r = file->addAction(""); recentGames.append(r); connect(r, SIGNAL(triggered()), SLOT(openRecent())); } recentSep = file->addSeparator(); auto ex = file->addAction("E&xit"); ex->setShortcut(QKeySequence::Quit); connect(ex, SIGNAL(triggered()), QApplication::instance(), SLOT(closeAllWindows())); viewerWidget = new ViewerWidget; viewerWidget->context()->makeCurrent(); glewExperimental = 1; glewInit(); objectViewer = new ObjectViewer(viewerWidget); connect(this, SIGNAL(loadedData(GameWorld*)), objectViewer, SLOT(showData(GameWorld*))); connect(this, SIGNAL(loadedData(GameWorld*)), viewerWidget, SLOT(dataLoaded(GameWorld*))); modelViewer = new ModelViewer(viewerWidget); connect(this, SIGNAL(loadedData(GameWorld*)), modelViewer, SLOT(showData(GameWorld*))); viewSwitcher = new QStackedWidget; viewSwitcher->addWidget(objectViewer); viewSwitcher->addWidget(modelViewer); //connect(objectViewer, SIGNAL(modelChanged(Model*)), modelViewer, SLOT(showModel(Model*))); connect(objectViewer, SIGNAL(showObjectModel(uint16_t)), this, SLOT(showObjectModel(uint16_t))); objectViewer->setViewerWidget( viewerWidget ); QMenu* view = mb->addMenu("&View"); QAction* objectAction = view->addAction("&Object"); QAction* modelAction = view->addAction("&Model"); objectAction->setData(0); modelAction->setData(1); connect(objectAction, SIGNAL(triggered()), this, SLOT(switchWidget())); connect(modelAction, SIGNAL(triggered()), this, SLOT(switchWidget())); QMenu* data = mb->addMenu("&Data"); //data->addAction("Export &Model", objectViewer, SLOT(exportModel())); QMenu* anim = mb->addMenu("&Animation"); anim->addAction("Load &Animations", this, SLOT(openAnimations())); this->setCentralWidget(viewSwitcher); updateRecentGames(); }
Void PlaYUVerApp::createActions() { m_arrayActions.resize( TOTAL_ACT ); // ------------ File ------------ m_arrayActions[OPEN_ACT] = new QAction( QIcon( ":/images/open.png" ), tr( "&Open" ), this ); m_arrayActions[OPEN_ACT]->setIcon( style()->standardIcon( QStyle::SP_DialogOpenButton ) ); m_arrayActions[OPEN_ACT]->setShortcuts( QKeySequence::Open ); m_arrayActions[OPEN_ACT]->setStatusTip( tr( "Open stream" ) ); connect( m_arrayActions[OPEN_ACT], SIGNAL( triggered() ), this, SLOT( open() ) ); m_arrayRecentFilesActions.resize( MAX_RECENT_FILES ); for( Int i = 0; i < MAX_RECENT_FILES; i++ ) { m_arrayRecentFilesActions[i] = new QAction( this ); m_arrayRecentFilesActions[i]->setVisible( false ); connect( m_arrayRecentFilesActions[i], SIGNAL( triggered() ), this, SLOT( openRecent() ) ); } m_arrayActions[SAVE_ACT] = new QAction( QIcon( ":/images/save.png" ), tr( "&Save Frame" ), this ); m_arrayActions[SAVE_ACT]->setIcon( style()->standardIcon( QStyle::SP_DialogSaveButton ) ); m_arrayActions[SAVE_ACT]->setShortcuts( QKeySequence::SaveAs ); m_arrayActions[SAVE_ACT]->setStatusTip( tr( "Save current frame" ) ); connect( m_arrayActions[SAVE_ACT], SIGNAL( triggered() ), this, SLOT( save() ) ); m_arrayActions[FORMAT_ACT] = new QAction( tr( "&Format" ), this ); m_arrayActions[FORMAT_ACT]->setIcon( QIcon::fromTheme( "transform-scale", QIcon( ":/images/configuredialog.png" ) ) ); m_arrayActions[FORMAT_ACT]->setShortcut( Qt::CTRL + Qt::Key_F ); m_arrayActions[FORMAT_ACT]->setStatusTip( tr( "Open format dialog" ) ); connect( m_arrayActions[FORMAT_ACT], SIGNAL( triggered() ), this, SLOT( format() ) ); m_arrayActions[RELOAD_ACT] = new QAction( tr( "&Reload" ), this ); m_arrayActions[RELOAD_ACT]->setIcon( style()->standardIcon( QStyle::SP_BrowserReload ) ); m_arrayActions[RELOAD_ACT]->setShortcut( Qt::CTRL + Qt::Key_R ); m_arrayActions[RELOAD_ACT]->setShortcut( Qt::Key_F5 ); m_arrayActions[RELOAD_ACT]->setStatusTip( tr( "Reload current sequence" ) ); connect( m_arrayActions[RELOAD_ACT], SIGNAL( triggered() ), this, SLOT( reload() ) ); m_arrayActions[RELOAD_ALL_ACT] = new QAction( tr( "Reload All" ), this ); m_arrayActions[RELOAD_ALL_ACT]->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_R ); m_arrayActions[RELOAD_ALL_ACT]->setStatusTip( tr( "Reload all sequences" ) ); connect( m_arrayActions[RELOAD_ALL_ACT], SIGNAL( triggered() ), this, SLOT( reloadAll() ) ); m_arrayActions[LOAD_ALL_ACT] = new QAction( tr( "Preload" ), this ); m_arrayActions[LOAD_ALL_ACT]->setStatusTip( tr( "Load sequence into memory (caution)" ) ); connect( m_arrayActions[LOAD_ALL_ACT], SIGNAL( triggered() ), this, SLOT( loadAll() ) ); m_arrayActions[CLOSE_ACT] = new QAction( tr( "&Close" ), this ); m_arrayActions[CLOSE_ACT]->setIcon( style()->standardIcon( QStyle::SP_DialogCloseButton ) ); m_arrayActions[CLOSE_ACT]->setStatusTip( tr( "Close the active window" ) ); connect( m_arrayActions[CLOSE_ACT], SIGNAL( triggered() ), m_pcWindowHandle, SLOT( removeActiveSubWindow() ) ); m_arrayActions[CLOSEALL_ACT] = new QAction( tr( "Close &All" ), this ); m_arrayActions[CLOSEALL_ACT]->setStatusTip( tr( "Close all the windows" ) ); connect( m_arrayActions[CLOSEALL_ACT], SIGNAL( triggered() ), m_pcWindowHandle, SLOT( removeAllSubWindow() ) ); m_arrayActions[EXIT_ACT] = new QAction( tr( "E&xit" ), this ); m_arrayActions[EXIT_ACT]->setShortcuts( QKeySequence::Quit ); m_arrayActions[EXIT_ACT]->setStatusTip( tr( "Exit the application" ) ); connect( m_arrayActions[EXIT_ACT], SIGNAL( triggered() ), qApp, SLOT( closeAllWindows() ) ); // ------------ View ------------ mapperZoom = new QSignalMapper( this ); connect( mapperZoom, SIGNAL( mapped(int) ), this, SLOT( scaleFrame(int) ) ); m_arrayActions[ZOOM_IN_ACT] = new QAction( tr( "Zoom &In (+25%)" ), this ); m_arrayActions[ZOOM_IN_ACT]->setIcon( QIcon::fromTheme( "zoom-in", QIcon( ":/images/zoomin.png" ) ) ); m_arrayActions[ZOOM_IN_ACT]->setShortcut( tr( "Ctrl++" ) ); m_arrayActions[ZOOM_IN_ACT]->setStatusTip( tr( "Scale the image up by 25%" ) ); connect( m_arrayActions[ZOOM_IN_ACT], SIGNAL( triggered() ), mapperZoom, SLOT( map() ) ); mapperZoom->setMapping( m_arrayActions[ZOOM_IN_ACT], 125 ); m_arrayActions[ZOOM_OUT_ACT] = new QAction( tr( "Zoom &Out (-25%)" ), this ); m_arrayActions[ZOOM_OUT_ACT]->setIcon( QIcon::fromTheme( "zoom-out", QIcon( ":/images/zoomout.png" ) ) ); m_arrayActions[ZOOM_OUT_ACT]->setShortcut( tr( "Ctrl+-" ) ); m_arrayActions[ZOOM_OUT_ACT]->setStatusTip( tr( "Scale the image down by 25%" ) ); connect( m_arrayActions[ZOOM_OUT_ACT], SIGNAL( triggered() ), mapperZoom, SLOT( map() ) ); mapperZoom->setMapping( m_arrayActions[ZOOM_OUT_ACT], 80 ); m_arrayActions[ZOOM_NORMAL_ACT] = new QAction( tr( "&Normal Size" ), this ); m_arrayActions[ZOOM_NORMAL_ACT]->setIcon( QIcon::fromTheme( "zoom-original", QIcon( ":/images/zoomtonormal.png" ) ) ); m_arrayActions[ZOOM_NORMAL_ACT]->setShortcut( tr( "Ctrl+N" ) ); m_arrayActions[ZOOM_NORMAL_ACT]->setStatusTip( tr( "Show the image at its original size" ) ); connect( m_arrayActions[ZOOM_NORMAL_ACT], SIGNAL( triggered() ), this, SLOT( normalSize() ) ); m_arrayActions[ZOOM_FIT_ACT] = new QAction( tr( "Zoom to &Fit" ), this ); m_arrayActions[ZOOM_FIT_ACT]->setIcon( QIcon::fromTheme( "zoom-fit-best", QIcon( ":/images/fittowindow.png" ) ) ); m_arrayActions[ZOOM_FIT_ACT]->setStatusTip( tr( "Zoom in or out to fit on the window." ) ); connect( m_arrayActions[ZOOM_FIT_ACT], SIGNAL( triggered() ), this, SLOT( zoomToFit() ) ); m_arrayActions[ZOOM_FIT_ALL_ACT] = new QAction( tr( "Zoom to Fit All" ), this ); //m_arrayActions[ZOOM_FIT_ALL_ACT]->setIcon( QIcon::fromTheme( "zoom-fit-best", QIcon( ":/images/fittowindow.png" ) ) ); m_arrayActions[ZOOM_FIT_ALL_ACT]->setStatusTip( tr( "Apply zoom to fit to all windows" ) ); connect( m_arrayActions[ZOOM_FIT_ALL_ACT], SIGNAL( triggered() ), this, SLOT( zoomToFitAll() ) ); m_appModuleVideo->createActions(); m_appModuleQuality->createActions(); m_appModuleExtensions->createActions(); m_pcWindowHandle->createActions(); // ------------ About ------------ #ifdef USE_FERVOR m_arrayActions[UPDATE_ACT] = new QAction( tr( "&Update" ), this ); m_arrayActions[UPDATE_ACT]->setStatusTip( tr( "Check for updates" ) ); connect( m_arrayActions[UPDATE_ACT], SIGNAL( triggered() ), FvUpdater::sharedUpdater(), SLOT( CheckForUpdatesNotSilent() ) ); #endif m_arrayActions[ABOUT_ACT] = new QAction( tr( "&About" ), this ); m_arrayActions[ABOUT_ACT]->setStatusTip( tr( "Show the application's About box" ) ); connect( m_arrayActions[ABOUT_ACT], SIGNAL( triggered() ), this, SLOT( about() ) ); m_arrayActions[ABOUTQT_ACT] = new QAction( tr( "About &Qt" ), this ); m_arrayActions[ABOUTQT_ACT]->setIcon( QIcon( ":images/qt.png" ) ); m_arrayActions[ABOUTQT_ACT]->setStatusTip( tr( "Show the Qt library's About box" ) ); connect( m_arrayActions[ABOUTQT_ACT], SIGNAL( triggered() ), qApp, SLOT( aboutQt() ) ); }
ViewerWindow::ViewerWindow(QWidget* parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) , gameData(nullptr) , gameWorld(nullptr) , renderer(nullptr) { setMinimumSize(640, 480); QMenuBar* mb = this->menuBar(); QMenu* file = mb->addMenu("&File"); file->addAction("Open &Game", this, SLOT(loadGame())); file->addSeparator(); for(int i = 0; i < MaxRecentGames; ++i) { QAction* r = file->addAction(""); recentGames.append(r); connect(r, SIGNAL(triggered()), SLOT(openRecent())); } recentSep = file->addSeparator(); auto ex = file->addAction("E&xit"); ex->setShortcut(QKeySequence::Quit); connect(ex, SIGNAL(triggered()), QApplication::instance(), SLOT(closeAllWindows())); //----------------------- View Mode setup viewerWidget = new ViewerWidget; viewerWidget->context()->makeCurrent(); connect(this, SIGNAL(loadedData(GameWorld*)), viewerWidget, SLOT(dataLoaded(GameWorld*))); //------------- Object Viewer m_views[ViewMode::Object] = new ObjectViewer(viewerWidget); m_viewNames[ViewMode::Object] = "Objects"; //------------- Model Viewer m_views[ViewMode::Model] = new ModelViewer(viewerWidget); m_viewNames[ViewMode::Model] = "Model"; //------------- World Viewer m_views[ViewMode::World] = new WorldViewer(viewerWidget); m_viewNames[ViewMode::World] = "World"; //------------- display mode switching viewSwitcher = new QStackedWidget; auto signalMapper = new QSignalMapper(this); auto switchPanel = new QVBoxLayout(); int i = 0; for(auto viewer : m_views) { viewSwitcher->addWidget(viewer); connect(this, SIGNAL(loadedData(GameWorld*)), viewer, SLOT(showData(GameWorld*))); auto viewerButton = new QPushButton(m_viewNames[i].c_str()); signalMapper->setMapping(m_views[i], i); signalMapper->setMapping(viewerButton, i); connect(viewerButton, SIGNAL(clicked()), signalMapper, SLOT(map())); switchPanel->addWidget(viewerButton); i++; } // Map world viewer loading placements to switch to the world viewer connect(m_views[ViewMode::World], SIGNAL(placementsLoaded(QString)), signalMapper, SLOT(map())); switchView(ViewMode::Object); connect(m_views[ViewMode::Object], SIGNAL(showObjectModel(uint16_t)), this, SLOT(showObjectModel(uint16_t))); connect(m_views[ViewMode::Object], SIGNAL(showObjectModel(uint16_t)), m_views[ViewMode::Model], SLOT(showObject(uint16_t))); connect(this, SIGNAL(loadAnimations(QString)), m_views[ViewMode::Model], SLOT(loadAnimations(QString))); connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(switchView(int))); connect(signalMapper, SIGNAL(mapped(int)), viewSwitcher, SLOT(setCurrentIndex(int))); switchPanel->addStretch(); auto mainlayout = new QHBoxLayout(); mainlayout->addLayout(switchPanel); mainlayout->addWidget(viewSwitcher); auto mainwidget = new QWidget(); mainwidget->setLayout(mainlayout); QMenu* data = mb->addMenu("&Data"); //data->addAction("Export &Model", objectViewer, SLOT(exportModel())); QMenu* anim = mb->addMenu("&Animation"); anim->addAction("Load &Animations", this, SLOT(openAnimations())); QMenu* map = mb->addMenu("&Map"); map->addAction("Load IPL", m_views[ViewMode::World], SLOT(loadPlacements())); this->setCentralWidget(mainwidget); updateRecentGames(); }