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 + -
显示快捷键?