📄 trwindow.cpp
字号:
// beginFromSourceAct->addToToolbar( translationst, // tr("Begin from Source"), "searchfind" ); prevAct->addToToolbar( translationst, tr("Prev") ); nextAct->addToToolbar( translationst, tr("Next") ); prevUnfinishedAct->addToToolbar( translationst, tr("Prev Unfinished") ); nextUnfinishedAct->addToToolbar( translationst, tr("Next Unfinished") ); doneAndNextAct->addToToolbar( translationst, tr("Done and Next") ); acceleratorsAct->addToToolbar( validationt, tr("Accelerators") ); endingPunctuationAct->addToToolbar( validationt, tr("Punctuation") ); phraseMatchesAct->addToToolbar( validationt, tr("Phrases") ); whatsThisAct->addToToolbar( helpt, tr("What's This?") );}void TrWindow::setCurrentContextItem( QListViewItem *item ){ lv->ensureItemVisible( item ); lv->setSelected( item, TRUE );}void TrWindow::setCurrentMessageItem( QListViewItem *item ){ slv->ensureItemVisible( item ); slv->setSelected( item, TRUE );}QString TrWindow::friendlyPhraseBookName( int k ){ return QFileInfo( phraseBookNames[k] ).fileName();}bool TrWindow::openPhraseBook( const QString& name ){ PhraseBook *pb = new PhraseBook; if ( !pb->load(name) ) { QMessageBox::warning( this, tr("Qt Linguist"), tr("Cannot read from phrase book '%1'.") .arg(name) ); return FALSE; } int index = (int) phraseBooks.count(); phraseBooks.append( pb ); phraseBookNames.append( name ); int id = closePhraseBookp->insertItem( friendlyPhraseBookName(index) ); closePhraseBookp->setWhatsThis( id, tr("Close this phrase book.") ); id = editPhraseBookp->insertItem( friendlyPhraseBookName(index) ); editPhraseBookp->setWhatsThis( id, tr("Allow you to add, modify, or delete" " phrases of this phrase book.") ); id = printPhraseBookp->insertItem( friendlyPhraseBookName(index) ); printPhraseBookp->setWhatsThis( id, tr("Print the entries of the phrase" " book.") ); updatePhraseDict(); return TRUE;}bool TrWindow::savePhraseBook( QString& name, const PhraseBook& pb ){ if ( !name.contains( ".qph" ) && !name.contains(".") ) name += ".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(){ if ( numNonobsolete == 0 ) progress->setText( QString(" " " ") ); else progress->setText( QString(" %1/%2 ").arg(numFinished) .arg(numNonobsolete) ); prevUnfinishedAct->setEnabled( numFinished != numNonobsolete ); nextUnfinishedAct->setEnabled( numFinished != numNonobsolete ); prevAct->setEnabled( lv->firstChild() != 0 ); nextAct->setEnabled( lv->firstChild() != 0 );}void TrWindow::updatePhraseDict(){ QPtrListIterator<PhraseBook> pb = phraseBooks; PhraseBook::Iterator p; PhraseBook *ent; phraseDict.clear(); while ( pb.current() != 0 ) { for ( p = (*pb)->begin(); p != (*pb)->end(); ++p ) { QString f = friendlyString( (*p).source() ); if ( f.length() > 0 ) { f = QStringList::split( QChar(' '), f ).first(); ent = phraseDict.find( f ); if ( ent == 0 ) { ent = new PhraseBook; phraseDict.insert( f, ent ); } ent->append( *p ); } } ++pb; } revalidate();}PhraseBook TrWindow::getPhrases( const QString& source ){ PhraseBook phrases; QString f = friendlyString( source ); QStringList lookupWords = QStringList::split( QChar(' '), f ); QStringList::Iterator w; PhraseBook::Iterator p; for ( w = lookupWords.begin(); w != lookupWords.end(); ++w ) { PhraseBook *ent = phraseDict.find( *w ); if ( ent != 0 ) { for ( p = ent->begin(); p != ent->end(); ++p ) { if ( f.find(friendlyString((*p).source())) >= 0 ) phrases.append( *p ); } } } return phrases;}bool TrWindow::danger( const QString& source, const QString& translation, bool verbose ){ if ( acceleratorsAct->isOn() ) { int sk = QAccel::shortcutKey( source ); int tk = QAccel::shortcutKey( translation ); if ( sk == 0 && tk != 0 ) { if ( verbose ) statusBar()->message( tr("Accelerator possibly superfluous in" " translation."), ErrorMS ); return TRUE; } else if ( sk != 0 && tk == 0 ) { if ( verbose ) statusBar()->message( tr("Accelerator possibly missing in" " translation."), ErrorMS ); return TRUE; } } if ( endingPunctuationAct->isOn() ) { if ( ending(source) != ending(translation) ) { if ( verbose ) statusBar()->message( tr("Translation does not end with the" " same punctuation as the source" " text."), ErrorMS ); return TRUE; } } if ( phraseMatchesAct->isOn() ) { QString fsource = friendlyString( source ); QString ftranslation = friendlyString( translation ); QStringList lookupWords = QStringList::split( QChar(' '), fsource ); QStringList::Iterator w; PhraseBook::Iterator p; for ( w = lookupWords.begin(); w != lookupWords.end(); ++w ) { PhraseBook *ent = phraseDict.find( *w ); if ( ent != 0 ) { for ( p = ent->begin(); p != ent->end(); ++p ) { if ( fsource.find(friendlyString((*p).source())) < 0 || ftranslation.find(friendlyString((*p).target())) >= 0 ) break; } if ( p == ent->end() ) { if ( verbose ) statusBar()->message( tr("A phrase book suggestion for" " '%1' was ignored.") .arg(*w), ErrorMS ); return TRUE; } } } } if ( verbose ) statusBar()->clear(); return FALSE;}void TrWindow::readConfig(){ QString keybase( "/Qt Linguist/" + QString::number( (QT_VERSION >> 16) & 0xff ) + "." + QString::number( (QT_VERSION >> 8) & 0xff ) + "/" ); QSettings config; config.insertSearchPath( QSettings::Windows, "/Trolltech" ); QRect r( pos(), size() ); recentFiles = config.readListEntry( keybase + "RecentlyOpenedFiles" ); if ( !config.readBoolEntry( keybase + "Geometry/MainwindowMaximized", FALSE ) ) { r.setX( config.readNumEntry( keybase + "Geometry/MainwindowX", r.x() ) ); r.setY( config.readNumEntry( keybase + "Geometry/MainwindowY", r.y() ) ); r.setWidth( config.readNumEntry( keybase + "Geometry/MainwindowWidth", r.width() ) ); r.setHeight( config.readNumEntry( keybase + "Geometry/MainwindowHeight", r.height() ) ); QRect desk = QApplication::desktop()->geometry(); QRect inter = desk.intersect( r ); resize( r.size() ); if ( inter.width() * inter.height() > ( r.width() * r.height() / 20 ) ) { move( r.topLeft() ); } } QDockWindow * dw; dw = (QDockWindow *) lv->parent(); int place; place = config.readNumEntry( keybase + "Geometry/ContextwindowInDock" ); r.setX( config.readNumEntry( keybase + "Geometry/ContextwindowX" ) ); r.setY( config.readNumEntry( keybase + "Geometry/ContextwindowY" ) ); r.setWidth( config.readNumEntry( keybase + "Geometry/ContextwindowWidth" ) ); r.setHeight( config.readNumEntry( keybase + "Geometry/ContextwindowHeight" ) ); if ( place == QDockWindow::OutsideDock ) { dw->undock(); dw->show(); } dw->setGeometry( r ); dw = (QDockWindow *) slv->parent(); place = config.readNumEntry( keybase + "Geometry/SourcewindowInDock" ); r.setX( config.readNumEntry( keybase + "Geometry/SourcewindowX" ) ); r.setY( config.readNumEntry( keybase + "Geometry/SourcewindowY" ) ); r.setWidth( config.readNumEntry( keybase + "Geometry/SourcewindowWidth" ) ); r.setHeight( config.readNumEntry( keybase + "Geometry/SourcewindowHeight" ) ); if ( place == QDockWindow::OutsideDock ) { dw->undock(); dw->show(); } dw->setGeometry( r ); dw = (QDockWindow *) plv->parent()->parent(); place = config.readNumEntry( keybase + "Geometry/PhrasewindowInDock" ); r.setX( config.readNumEntry( keybase + "Geometry/PhrasewindowX" ) ); r.setY( config.readNumEntry( keybase + "Geometry/PhrasewindowY" ) ); r.setWidth( config.readNumEntry( keybase + "Geometry/PhrasewindowWidth" ) ); r.setHeight( config.readNumEntry( keybase + "Geometry/PhrasewindowHeight" ) ); if ( place == QDockWindow::OutsideDock ) { dw->undock(); dw->show(); } dw->setGeometry( r ); QApplication::sendPostedEvents();}void TrWindow::writeConfig(){ QString keybase( "/Qt Linguist/" + QString::number( (QT_VERSION >> 16) & 0xff ) + "." + QString::number( (QT_VERSION >> 8) & 0xff ) + "/" ); QSettings config; config.insertSearchPath( QSettings::Windows, "/Trolltech" ); config.writeEntry( keybase + "RecentlyOpenedFiles", recentFiles ); config.writeEntry( keybase + "Geometry/MainwindowMaximized", isMaximized() ); config.writeEntry( keybase + "Geometry/MainwindowX", x() ); config.writeEntry( keybase + "Geometry/MainwindowY", y() ); config.writeEntry( keybase + "Geometry/MainwindowWidth", width() ); config.writeEntry( keybase + "Geometry/MainwindowHeight", height() ); QDockWindow * dw =(QDockWindow *) lv->parent(); config.writeEntry( keybase + "Geometry/ContextwindowInDock", dw->place() ); config.writeEntry( keybase + "Geometry/ContextwindowX", dw->x() ); config.writeEntry( keybase + "Geometry/ContextwindowY", dw->y() ); config.writeEntry( keybase + "Geometry/ContextwindowWidth", dw->width() ); config.writeEntry( keybase + "Geometry/ContextwindowHeight", dw->height() ); dw =(QDockWindow *) slv->parent(); config.writeEntry( keybase + "Geometry/SourcewindowInDock", dw->place() ); config.writeEntry( keybase + "Geometry/SourcewindowX", dw->geometry().x() ); config.writeEntry( keybase + "Geometry/SourcewindowY", dw->geometry().y() ); config.writeEntry( keybase + "Geometry/SourcewindowWidth", dw->width() ); config.writeEntry( keybase + "Geometry/SourcewindowHeight", dw->height() ); dw =(QDockWindow *) plv->parent()->parent(); config.writeEntry( keybase + "Geometry/PhrasewindowInDock", dw->place() ); config.writeEntry( keybase + "Geometry/PhrasewindowX", dw->geometry().x() ); config.writeEntry( keybase + "Geometry/PhrasewindowY", dw->geometry().y() ); config.writeEntry( keybase + "Geometry/PhrasewindowWidth", dw->width() ); config.writeEntry( keybase + "Geometry/PhrasewindowHeight", dw->height() );}void TrWindow::setupRecentFilesMenu(){ recentFilesMenu->clear(); int id = 0; QStringList::Iterator it = recentFiles.begin(); for ( ; it != recentFiles.end(); ++it ) { recentFilesMenu->insertItem( *it, id ); id++; }}void TrWindow::recentFileActivated( int id ){ if ( id != -1 ) { if ( maybeSave() ) openFile( *recentFiles.at( id ) ); }}void TrWindow::addRecentlyOpenedFile( const QString &fn, QStringList &lst ){ if ( lst.find( fn ) != lst.end() ) return; if ( lst.count() >= 10 ) lst.remove( lst.begin() ); lst << fn;}void TrWindow::toggleGuessing(){ me->toggleGuessing();}void TrWindow::focusSourceList(){ slv->setFocus();}void TrWindow::focusPhraseList(){ plv->setFocus();}void TrWindow::updateClosePhraseBook(){ if ( dirtyItem != -1 ) { closePhraseBookp->removeItem( closePhraseBookp->idAt(dirtyItem) ); dirtyItem = -1; }}void TrWindow::toggleStatistics(){ if ( toggleStats->isOn() ) { if ( !stats ) { stats = new Statistics( this, "linguist_stats" ); connect( this, SIGNAL(statsChanged(int,int,int,int,int,int)), stats, SLOT(updateStats(int,int,int,int,int,int)) ); connect( stats, SIGNAL(closed()), toggleStats, SLOT(toggle()) ); } updateStatistics(); stats->show(); } else if ( stats ) { stats->close(); }}void TrWindow::updateStatistics(){ QListViewItem * ci = lv->firstChild(); int trW = 0; int trC = 0; int trCS = 0; while ( ci ) { countStats( ci, ((ContextLVI *)ci)->firstMessageItem(), trW, trC, trCS ); ci = ci->nextSibling(); } // ..and the items in the source list countStats( 0, slv->firstChild(), trW, trC, trCS ); emit statsChanged( srcWords, srcChars, srcCharsSpc, trW, trC, trCS );}void TrWindow::countStats( QListViewItem* ci, QListViewItem* mi, int& trW, int& trC, int& trCS ){ MessageLVI * m; while ( mi ) { m = (MessageLVI *) mi; if ( m->finished() && !(m->message().type() == MetaTranslatorMessage::Obsolete) ) doCharCounting( m->translation(), trW, trC, trCS ); if ( ci ) mi = ((ContextLVI *)ci)->nextMessageItem(); else mi = mi->nextSibling(); }}void TrWindow::doCharCounting( const QString& text, int& trW, int& trC, int& trCS ){ trCS += text.length(); bool inWord = FALSE; for ( int i = 0; i < (int) text.length(); i++ ) { if ( text[i].isLetterOrNumber() || text[i] == QChar('_') ) { if ( !inWord ) { trW++; inWord = TRUE; } } else { inWord = FALSE; } if ( !text[i].isSpace() ) trC++; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -