trwindow.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 1,877 行 · 第 1/5 页
CPP
1,877 行
#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(QLatin1String("Ctrl+Return")) << QKeySequence(QLatin1String("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(QLatin1String("FileToolbar")); filet->setWindowTitle(tr("File")); this->addToolBar(filet); m_ui.menuToolbars->addAction(filet->toggleViewAction()); QToolBar *editt = new QToolBar(this); editt->setVisible(false); editt->setObjectName(QLatin1String("EditToolbar")); editt->setWindowTitle(tr("Edit")); this->addToolBar(editt); m_ui.menuToolbars->addAction(editt->toggleViewAction()); QToolBar *translationst = new QToolBar(this); translationst->setObjectName(QLatin1String("TranslationToolbar")); translationst->setWindowTitle(tr("Translation")); this->addToolBar(translationst); m_ui.menuToolbars->addAction(translationst->toggleViewAction()); QToolBar *validationt = new QToolBar(this); validationt->setObjectName(QLatin1String("ValidationToolbar")); validationt->setWindowTitle(tr("Validation")); this->addToolBar(validationt); m_ui.menuToolbars->addAction(validationt->toggleViewAction()); QToolBar *helpt = new QToolBar(this); helpt->setVisible(false); helpt->setObjectName(QLatin1String("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)) { QMessageBox::warning(this, tr("Qt Linguist"), tr("Cannot read from phrase book '%1'.").arg(name)); return false; } QAction *a = m_ui.menuClosePhraseBook->addAction(pb.friendlyPhraseBookName()); phraseBooks[PhraseCloseMenu].insert(a, pb); a->setWhatsThis(tr("Close this phrase book.")); a = m_ui.menuEditPhraseBook->addAction(pb.friendlyPhraseBookName()); phraseBooks[PhraseEditMenu].insert(a, pb); a->setWhatsThis(tr("Allow you to add, modify, or delete" " phrases of this phrase book.")); a = m_ui.menuPrintPhraseBook->addAction(pb.friendlyPhraseBookName()); phraseBooks[PhrasePrintMenu].insert(a, pb); a->setWhatsThis(tr("Print the entries of the phrase" " book.")); updatePhraseDict(); m_ui.actionBatchTranslation->setEnabled(phraseBooks[PhraseCloseMenu].count() > 0); return true;}bool TrWindow::savePhraseBook(QString &name, const PhraseBook &pb){ if (!name.contains(QLatin1String(".qph")) && !name.contains(QLatin1String("."))) name += QLatin1String(".qph"); if (!pb.save(name)) { QMessageBox::warning(this, tr("Qt Linguist"), tr("Cannot create phrase book '%1'.").arg(name)); return false; } return true;}void TrWindow::updateProgress(){ int numNonobsolete = cmdl->getNumNonobsolete(); int numFinished = cmdl->getNumFinished(); if (numNonobsolete == 0) progress->setText(QString(QLatin1String(" "))); else progress->setText(QString(QLatin1String(" %1/%2 ")).arg(numFinished) .arg(numNonobsolete)); m_ui.actionPrevUnfinished->setEnabled(numFinished != numNonobsolete); m_ui.actionNextUnfinished->setEnabled(numFinished != numNonobsolete); m_ui.actionPrev->setEnabled(cmdl->contextsInList() > 0); m_ui.actionNext->setEnabled(cmdl->contextsInList() > 0);}void TrWindow::updatePhraseDict(){ phraseDict.clear(); foreach (PhraseBook pb, phraseBooks[PhraseCloseMenu]) { foreach (Phrase p, pb) { QString f = friendlyString(p.source()); if ( f.length() > 0 ) { f = f.split(QLatin1Char(' ')).first(); if (!phraseDict.contains(f)) { PhraseBook pbe; phraseDict.insert(f, pbe); } phraseDict[f].append(p); } } } revalidate();}PhraseBook TrWindow::getPhrases(const QString &source){ PhraseBook phrases; QString f = friendlyString(source); QStringList lookupWords = f.split(QLatin1Char(' ')); foreach (QString s, lookupWords) { if (phraseDict.contains(s)) { PhraseBook ent = phraseDict.value(s); foreach (Phrase p, ent) { if (f.indexOf(friendlyString((p).source())) >= 0) phrases.append(p); } } } return phrases;}void TrWindow::printDanger(MessageItem *m){ danger(m, true);}bool TrWindow::updateDanger(MessageItem *m, bool verbose){ bool dngr = danger(m, verbose); if (dngr != m->danger()) m->setDanger(dngr); return dngr;}bool TrWindow::danger( const MessageItem *m, bool verbose ){ QString source = m->sourceText(); QStringList translations = m->translations(); if (m_ui.actionAccelerators->isChecked()) { bool sk = source.contains(Qt::Key_Ampersand); bool tk = true; for (int i = 0; i < translations.count() && tk; ++i) { tk &= bool(translations[i].contains(Qt::Key_Ampersand)); } if (!sk && tk) { if (verbose) statusBar()->showMessage(tr("Accelerator possibly superfluous in" " translation."), ErrorMS); return true; } else if (sk && !tk) { if (verbose) statusBar()->showMessage(tr("Accelerator possibly missing in" " translation."), ErrorMS); return true; } } if (m_ui.actionEndingPunctuation->isChecked()) { bool endingok = true; for (int i = 0; i < translations.count() && endingok; ++i) { endingok &= (ending( source, cmdl->language()) == ending(translations[i], cmdl->language() )); } if (!endingok) { if (verbose) statusBar()->showMessage(tr("Translation does not end with the" " same punctuation as the source text."), ErrorMS); return true; } } if (m_ui.actionPhraseMatches->isChecked()) { QString fsource = friendlyString(source); QString ftranslation = friendlyString(translations.first()); QStringList lookupWords = fsource.split(QLatin1Char(' ')); bool phraseFound; foreach (QString s, lookupWords) { if (phraseDict.contains(s)) { PhraseBook ent = phraseDict.value(s); phraseFound = true; foreach (Phrase p, ent) { if (fsource == friendlyString(p.source())) { if (ftranslation.indexOf(friendlyString(p.target())) >= 0) { phraseFound = true; break; } else { phraseFound = false; } } } if (!phraseFound) { if (verbose) statusBar()->showMessage(tr("A phrase book suggestion for" " '%1' was ignored.").arg(s), ErrorMS ); return true; } } } } if (m_ui.actionPlaceMarkerMatches->isChecked()) { // Stores the occurence count of the place markers in the vector placeMarkerIndexes. // i.e. the occurence count of %1 is stored at placeMarkerIndexes[1], // count of %2 is stored at placeMarkerIndexes[2] etc. // In the first pass, it counts all place markers in the sourcetext. // In the second pass it (de)counts all place markers in the translation. // When finished, all elements should have returned to a count of 0, if not there is a mismatch // between place markers in the source text and the translation text. QVector<int> placeMarkerIndexes; QString translation; int numTranslations = translations.count(); for (int pass = 0; pass < numTranslations + 1; ++pass) { const QChar *uc_begin = source.unicode(); const QChar *uc_end = uc_begin + source.length(); if (pass >= 1) { translation = translations[pass - 1]; uc_begin = translation.unicode(); uc_end = uc_begin + translation.length(); } const QChar *c = uc_begin; while (c < uc_end) { if (c->unicode() == '%') { const QChar *escape_start = ++c; while (c->isDigit()) ++c; const QChar *escape_end = c; bool ok = true; int markerIndex = QString::fromRawData(escape_start, escape_end - escape_start).toInt(&ok); if (ok) { if (markerIndex >= placeMarkerIndexes.size()) { placeMarkerIndexes.resize(markerIndex + 1); } placeMarkerIndexes[markerIndex]+= (pass == 0 ? numTranslations : -1); } } ++c; } } for (int i = 0; i < placeMarkerIndexes.size(); ++i) { if (placeMarkerIndexes.at(i) != 0) { if (verbose) statusBar()->showMessage(tr("Translation does not refer" " to the same place markers as in the source text."), ErrorMS); return true; } } } if (verbose) statusBar()->clearMessage(); return false;}void TrWindow::readConfig(){ QString keybase(QString::number((QT_VERSION >> 16) & 0xff) + QLatin1Char('.') + QString::number((QT_VERSION >> 8) & 0xff) + QLatin1Char('/')); QSettings config; QRect r( pos(), size() ); recentFiles = config.value(keybase + QLatin1String("RecentlyOpenedFiles")).toStringList(); restoreGeometry(config.value(keybase + QLatin1String("Geometry/WindowGeometry")).toByteArray()); restoreState(config.value(keybase + QLatin1String("MainWindowState")).toByteArray()); m_ui.actionAccelerators->setChecked(config.value(keybase+ QLatin1String("Validators/Accelerator"), true).toBool()); m_ui.actionEndingPunctuation->setChecked(config.value(keybase+ QLatin1String("Validators/EndingPunctuation"), true).toBool()); m_ui.actionPhraseMatches->setChecked(config.value(keybase+ QLatin1String("Validators/PhraseMatch"), true).toBool()); m_ui.actionPlaceMarkerMatches->setChecked(config.value(keybase+ QLatin1String("Validators/PlaceMarkers"), true).toBool()
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?