📄 trwindow.cpp
字号:
return true; // found a unfinished context } } return false; // done}bool TrWindow::setNextMessage(QModelIndex *currentIndex, bool checkUnfinished){ bool found = false; if (currentIndex->isValid()) { QModelIndex idx = *currentIndex; do { int row = 0; QModelIndex par = idx.parent(); if (par.isValid()) { row = idx.row() + 1; } else { //In case we are located on a top-level node par = idx; } if (row >= cmdl->rowCount(par)) { int toprow = par.row() + 1; if (toprow >= cmdl->rowCount()) toprow = 0; par = cmdl->index(toprow, 0); row = 0; idx = cmdl->index(row, 1, par); } else { idx = cmdl->index(row, 1, par); } found = checkUnfinished ? !cmdl->finished(idx) : true; if (idx == *currentIndex) break; } while(!found); if (found) { *currentIndex = idx; tv->setCurrentIndex(*currentIndex); } } return found;}bool TrWindow::setPrevMessage(QModelIndex *currentIndex, bool checkUnfinished){ bool found = false; Q_ASSERT(currentIndex); QModelIndex idx = currentIndex->isValid() ? *currentIndex : cmdl->index(0, 0); do { int row = idx.row() - 1; QModelIndex par = idx.parent(); if (!par.isValid()) { //In case we are located on a top-level node par = idx; row = -1; } if (row < 0) { int toprow = par.row() - 1; if (toprow < 0) toprow = cmdl->rowCount() - 1; par = cmdl->index(toprow, 0); row = cmdl->rowCount(par) - 1; idx = cmdl->index(row, 1, par); } else { idx = cmdl->index(row, 1, par); } found = checkUnfinished ? !cmdl->finished(idx) : true; if (idx == *currentIndex) break; } while(!found); if (found) { *currentIndex = idx; tv->setCurrentIndex(*currentIndex); } return found;}void TrWindow::nextUnfinished(){ if (m_ui.actionNextUnfinished->isEnabled()) { if (!next(true)) { // If no Unfinished message is left, the user has finished the job. We // congratulate on a job well done with this ringing bell. statusBar()->showMessage(tr("No untranslated phrases left."), MessageMS); qApp->beep(); } }}void TrWindow::prevUnfinished(){ if (m_ui.actionNextUnfinished->isEnabled()) { if (!prev(true)) { // If no Unfinished message is left, the user has finished the job. We // congratulate on a job well done with this ringing bell. statusBar()->showMessage(tr("No untranslated phrases left."), MessageMS); qApp->beep(); } }}void TrWindow::prev(){ prev(false);}bool TrWindow::prev(bool checkUnfinished){ QModelIndex current = tv->currentIndex(); return setPrevMessage(¤t, checkUnfinished); }bool TrWindow::next(bool checkUnfinished){ QModelIndex current = tv->currentIndex(); return setNextMessage(¤t, checkUnfinished);}void TrWindow::next(){ next(false);}void TrWindow::findNext(const QString &text, int where, bool matchCase){ if (text.isEmpty()) return; findText = text; findWhere = where; findMatchCase = matchCase; m_ui.actionFindNext->setEnabled(true); findAgain();}void TrWindow::revalidate(){ if (cmdl->contextsInList() <= 0) return; ContextItem *c; MessageItem *m; for (int ci=0; ci<cmdl->contextsInList(); ++ci) { c = cmdl->contextItem(cmdl->index(ci, 0)); for (int mi=0; mi<c->messageItemsInList(); ++mi) { m = c->messageItem(mi); updateDanger(m); //if (cmdl->contextItem() == c) // cmdl->updateItem(cmdl->index(mi, 0)); } cmdl->updateItem(cmdl->index(ci, 0)); }}QString TrWindow::friendlyString(const QString& str){ QString f = str.toLower(); f.replace(QRegExp(QString("[.,:;!?()-]")), QString(" ")); f.replace("&", QString("")); f = f.simplified(); f = f.toLower(); return f;}void TrWindow::setupMenuBar(){ m_ui.setupUi(this); m_ui.actionAccelerators->setIcon(QIcon(rsrcString + "/accelerator.png")); m_ui.actionOpenPhraseBook->setIcon(QIcon(rsrcString + "/book.png")); m_ui.actionDoneAndNext->setIcon(QIcon(rsrcString + "/doneandnext.png")); m_ui.actionCopy->setIcon(QIcon(rsrcString + "/editcopy.png")); m_ui.actionCut->setIcon(QIcon(rsrcString + "/editcut.png")); m_ui.actionPaste->setIcon(QIcon(rsrcString + "/editpaste.png")); m_ui.actionOpen->setIcon(QIcon(rsrcString + "/fileopen.png")); m_ui.actionSave->setIcon(QIcon(rsrcString + "/filesave.png")); m_ui.actionNext->setIcon(QIcon(rsrcString + "/next.png")); m_ui.actionNextUnfinished->setIcon(QIcon(rsrcString + "/nextunfinished.png")); m_ui.actionPhraseMatches->setIcon(QIcon(rsrcString + "/phrase.png")); m_ui.actionEndingPunctuation->setIcon(QIcon(rsrcString + "/punctuation.png")); m_ui.actionPrev->setIcon(QIcon(rsrcString + "/prev.png")); m_ui.actionPrevUnfinished->setIcon(QIcon(rsrcString + "/prevunfinished.png")); m_ui.actionPrint->setIcon(QIcon(rsrcString + "/print.png")); m_ui.actionRedo->setIcon(QIcon(rsrcString + "/redo.png")); m_ui.actionFind->setIcon(QIcon(rsrcString + "/searchfind.png")); m_ui.actionUndo->setIcon(QIcon(rsrcString + "/undo.png")); m_ui.actionPlaceMarkerMatches->setIcon(QIcon(rsrcString + "/validateplacemarkers.png")); m_ui.actionWhatsThis->setIcon(QIcon(rsrcString + "/whatsthis.png")); // File menu connect(m_ui.actionOpen, SIGNAL(triggered()), this, SLOT(open())); connect(m_ui.actionSave, SIGNAL(triggered()), this, SLOT(save())); connect(m_ui.actionSaveAs, SIGNAL(triggered()), this, SLOT(saveAs())); connect(m_ui.actionRelease, SIGNAL(triggered()), this, SLOT(release())); connect(m_ui.actionReleaseAs, SIGNAL(triggered()), this, SLOT(releaseAs())); connect(m_ui.actionPrint, SIGNAL(triggered()), this, SLOT(print())); connect(m_ui.actionExit, SIGNAL(triggered()), this, SLOT(close())); // Edit menu connect(m_ui.actionUndo, SIGNAL(triggered()), me, SLOT(undo())); connect(me, SIGNAL(undoAvailable(bool)), m_ui.actionUndo, SLOT(setEnabled(bool))); connect(m_ui.actionRedo, SIGNAL(triggered()), me, SLOT(redo())); connect(me, SIGNAL(redoAvailable(bool)), m_ui.actionRedo, SLOT(setEnabled(bool))); connect(m_ui.actionCopy, SIGNAL(triggered()), me, SLOT(copy())); connect(me, SIGNAL(copyAvailable(bool)), m_ui.actionCopy, SLOT(setEnabled(bool))); connect(me, SIGNAL(cutAvailable(bool)), m_ui.actionCut, SLOT(setEnabled(bool))); connect(m_ui.actionCut, SIGNAL(triggered()), me, SLOT(cut())); connect(me, SIGNAL(pasteAvailable(bool)), m_ui.actionPaste, SLOT(setEnabled(bool))); connect(m_ui.actionPaste, SIGNAL(triggered()), me, SLOT(paste())); connect(m_ui.actionSelectAll, SIGNAL(triggered()), me, SLOT(selectAll())); connect(m_ui.actionFind, SIGNAL(triggered()), this, SLOT(find())); connect(m_ui.actionFindNext, SIGNAL(triggered()), this, SLOT(findAgain())); connect(m_ui.actionSearchAndTranslate, SIGNAL(triggered()), this, SLOT(showTranslateDialog())); connect(m_ui.actionBatchTranslation, SIGNAL(triggered()), this, SLOT(showBatchTranslateDialog())); connect( m_ui.actionTranslationFileSettings, SIGNAL(triggered()), this, SLOT(showTranslationSettings()) ); // Translation menu // when updating the accelerators, remember the status bar connect(m_ui.actionPrevUnfinished, SIGNAL(triggered()), this, SLOT(prevUnfinished())); connect(m_ui.actionNextUnfinished, SIGNAL(triggered()), this, SLOT(nextUnfinished())); connect(m_ui.actionNext, SIGNAL(triggered()), this, SLOT(next())); connect(m_ui.actionPrev, SIGNAL(triggered()), this, SLOT(prev())); connect(m_ui.actionDoneAndNext, SIGNAL(triggered()), this, SLOT(doneAndNext())); connect(m_ui.actionBeginFromSource, SIGNAL(triggered()), me, SLOT(beginFromSource())); connect(me, SIGNAL(updateActions(bool)), m_ui.actionBeginFromSource, SLOT(setEnabled(bool))); // Phrasebook menu connect(m_ui.actionNewPhraseBook, SIGNAL(triggered()), this, SLOT(newPhraseBook())); connect(m_ui.actionOpenPhraseBook, SIGNAL(triggered()), this, SLOT(openPhraseBook())); connect(m_ui.menuClosePhraseBook, SIGNAL(triggered(QAction*)), this, SLOT(closePhraseBook(QAction*))); connect(m_ui.menuEditPhraseBook, SIGNAL(triggered(QAction*)), this, SLOT(editPhraseBook(QAction*))); connect(m_ui.menuPrintPhraseBook, SIGNAL(triggered(QAction*)), this, SLOT(printPhraseBook(QAction*))); // Validation menu connect(m_ui.actionAccelerators, SIGNAL(triggered()), this, SLOT(revalidate())); connect(m_ui.actionEndingPunctuation, SIGNAL(triggered()), this, SLOT(revalidate())); connect(m_ui.actionPhraseMatches, SIGNAL(triggered()), this, SLOT(revalidate())); connect(m_ui.actionPlaceMarkerMatches, SIGNAL(triggered()), this, SLOT(revalidate())); // View menu connect(m_ui.actionRevertSorting, SIGNAL(triggered()), this, SLOT(revertSorting())); connect(m_ui.actionDisplayGuesses, SIGNAL(triggered()), this, SLOT(toggleGuessing())); connect(m_ui.actionStatistics, SIGNAL(triggered()), this, SLOT(toggleStatistics())); connect(m_ui.menuView, SIGNAL(aboutToShow()), this, SLOT(updateViewMenu())); m_ui.menuViewViews->addAction( dwScope->toggleViewAction() ); m_ui.menuViewViews->addAction( me->phraseDockWnd()->toggleViewAction() ); // Tools menu connect(m_batchTranslateDlg, SIGNAL(finished()), this, SLOT(finishedBatchTranslation())); connect(m_ui.actionPreviewForm, SIGNAL(triggered()), this, SLOT(previewForm()));#if defined(Q_WS_MAC) // Window menu QMenu *windowMenu = new QMenu(tr("&Window"), this); menuBar()->insertMenu(m_ui.menuHelp->menuAction(), windowMenu); windowMenu->addAction(tr("Minimize"), this, SLOT(showMinimized()), QKeySequence(tr("Ctrl+M")));#endif // Help connect(m_ui.actionManual, SIGNAL(triggered()), this, SLOT(manual())); connect(m_ui.actionAbout, SIGNAL(triggered()), this, SLOT(about())); connect(m_ui.actionAboutQt, SIGNAL(triggered()), this, SLOT(aboutQt())); connect(m_ui.actionWhatsThis, SIGNAL(triggered()), this, SLOT(onWhatsThis())); connect(m_ui.menuFile, SIGNAL(aboutToShow()), this, SLOT(setupRecentFilesMenu())); connect(m_ui.menuRecentlyOpenedFiles, SIGNAL(triggered(QAction*)), this, SLOT(recentFileActivated(QAction*))); m_ui.actionManual->setWhatsThis(tr("Display the manual for %1.").arg(tr("Qt Linguist"))); m_ui.actionAbout->setWhatsThis(tr("Display information about %1.").arg(tr("Qt Linguist"))); m_ui.actionDoneAndNext->setShortcuts(QList<QKeySequence>() << QKeySequence("Ctrl+Return") << QKeySequence("Ctrl+Enter")); // Disable the Close/Edit/Print phrasebook menuitems if they are not loaded connect(m_ui.menuPhrases, SIGNAL(aboutToShow()), this, SLOT(setupPhrase()));}void TrWindow::updateViewMenu(){ if (stats) m_ui.actionStatistics->setChecked(stats->isVisible()); else m_ui.actionStatistics->setChecked(false);}void TrWindow::onWhatsThis(){ QWhatsThis::enterWhatsThisMode();}void TrWindow::setupToolBars(){ QToolBar *filet = new QToolBar(this); filet->setObjectName("FileToolbar"); filet->setWindowTitle(tr("File")); this->addToolBar(filet); m_ui.menuToolbars->addAction(filet->toggleViewAction()); QToolBar *editt = new QToolBar(this); editt->setVisible(false); editt->setObjectName("EditToolbar"); editt->setWindowTitle(tr("Edit")); this->addToolBar(editt); m_ui.menuToolbars->addAction(editt->toggleViewAction()); QToolBar *translationst = new QToolBar(this); translationst->setObjectName("TranslationToolbar"); translationst->setWindowTitle(tr("Translation")); this->addToolBar(translationst); m_ui.menuToolbars->addAction(translationst->toggleViewAction()); QToolBar *validationt = new QToolBar(this); validationt->setObjectName("ValidationToolbar"); validationt->setWindowTitle(tr("Validation")); this->addToolBar(validationt); m_ui.menuToolbars->addAction(validationt->toggleViewAction()); QToolBar *helpt = new QToolBar(this); helpt->setVisible(false); helpt->setObjectName("HelpToolbar"); helpt->setWindowTitle(tr("Help")); this->addToolBar(helpt); m_ui.menuToolbars->addAction(helpt->toggleViewAction()); filet->addAction(m_ui.actionOpen); filet->addAction(m_ui.actionSave); filet->addAction(m_ui.actionPrint); filet->addSeparator(); filet->addAction(m_ui.actionOpenPhraseBook); editt->addAction(m_ui.actionUndo); editt->addAction(m_ui.actionRedo); editt->addSeparator(); editt->addAction(m_ui.actionCut); editt->addAction(m_ui.actionCopy); editt->addAction(m_ui.actionPaste); editt->addSeparator(); editt->addAction(m_ui.actionFind); translationst->addAction(m_ui.actionPrev); translationst->addAction(m_ui.actionNext); translationst->addAction(m_ui.actionPrevUnfinished); translationst->addAction(m_ui.actionNextUnfinished); translationst->addAction(m_ui.actionDoneAndNext); validationt->addAction(m_ui.actionAccelerators); validationt->addAction(m_ui.actionEndingPunctuation); validationt->addAction(m_ui.actionPhraseMatches); validationt->addAction(m_ui.actionPlaceMarkerMatches); helpt->addAction(m_ui.actionWhatsThis);}void TrWindow::setCurrentContext(const QModelIndex &indx){ tv->setCurrentIndex(indx); tv->scrollTo(indx);}void TrWindow::setCurrentContextRow(int row){ QModelIndex mdlI = cmdl->index(row,1); tv->setCurrentIndex(mdlI); tv->scrollTo(mdlI);}void TrWindow::setCurrentMessage(const QModelIndex &indx){ tv->setCurrentIndex(indx); tv->scrollTo(indx);}bool TrWindow::openPhraseBook(const QString& name){ PhraseBook pb; if (!pb.load(name)) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -