⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 language.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.** ** This program is free software; you can redistribute it and/or modify it** under the terms of the GNU General Public License as published by the** Free Software Foundation; either version 2 of the License, or (at your** option) any later version.** ** A copy of the GNU GPL license version 2 is included in this package as ** LICENSE.GPL.**** This program is distributed in the hope that it will be useful, but** WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ** See the GNU General Public License for more details.**** In addition, as a special exception Trolltech gives permission to link** the code of this program with Qtopia applications copyrighted, developed** and distributed by Trolltech under the terms of the Qtopia Personal Use** License Agreement. You must comply with the GNU General Public License** in all respects for all of the code used other than the applications** licensed under the Qtopia Personal Use License Agreement. If you modify** this file, you may extend this exception to your version of the file,** but you are not obligated to do so. If you do not wish to do so, delete** this exception statement from your version.** ** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "languagesettings.h"#include <qtopia/global.h>#include <qtopia/fontmanager.h>#include <qtopia/config.h>#include <qtopia/applnk.h>#include <qtopia/qpedialog.h>#include <qtopia/qpeapplication.h>#if defined(Q_WS_QWS) && !defined(QT_NO_COP)#include <qtopia/qcopenvelope_qws.h>#endif#ifdef QTOPIA_PHONE#include <qtopia/contextbar.h>#include <qtopia/contextmenu.h>#endif#include <qtopia/resource.h>#include <qlabel.h>#include <qaction.h>#include <qcheckbox.h>#include <qradiobutton.h>#include <qtabwidget.h>#include <qslider.h>#include <qfile.h>#include <qtextstream.h>#include <qdatastream.h>#include <qmessagebox.h>#include <qcombobox.h>#include <qspinbox.h>#include <qlistbox.h>#include <qdir.h>#if QT_VERSION >= 0x030000#include <qstylefactory.h>#endif#include <qaccel.h>//#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)//#include <unistd.h>//#include <linux/fb.h>//#include <sys/types.h>//#include <sys/stat.h>//#include <fcntl.h>//#include <sys/ioctl.h>//#endif#include <stdlib.h>class FontedItem : public QListBoxPixmap {public:    FontedItem(const QPixmap& pxm, const QString& langName,const QFont& font) :	QListBoxPixmap(pxm, langName),	fnt(font), showPixmap(FALSE)    {    }    int height( const QListBox * ) const    {	return QMAX(QFontMetrics(fnt).lineSpacing(), pixmap()->height());    }    int width( const QListBox * ) const    {	return QMAX(QFontMetrics(fnt).width(text()), pixmap()->width());    }    void setSelected(bool active)    {        showPixmap = active;    }    bool selected() { return showPixmap; }    protected:    void paint(QPainter* painter)    {	painter->setFont(fnt);        if (showPixmap)            painter->drawPixmap( 3, 0, *pixmap() );        if ( !text().isEmpty() ) {	    QFontMetrics fm = painter->fontMetrics();            if (showPixmap) {                int yPos;			// vertical text position                if ( pixmap()->height() < fm.height() )                    yPos = fm.ascent() + fm.leading()/2;                else                    yPos = pixmap()->height()/2 - fm.height()/2 + fm.ascent();                painter->drawText( pixmap()->width() + 5, yPos, text() );            } else {                painter->drawText( 3, fm.ascent() + fm.leading()/2, text() );            }        }    }private:    QFont fnt;    bool showPixmap;};//remove dependency on pkimQStringList LanguageSettings::langs;QStringList LanguageSettings::dictLanguages(){    if ( langs.isEmpty() ) {	QDir dir(QPEApplication::qpeDir() + "etc/dict", "words-*.dawg");	for (int i=0; i<(int)dir.count(); i++) {	    QString f = dir[i];	    langs.append(f.mid(6,f.length()-11)); // words-*.dawg	}    }    return langs;}#include "langname.h"LanguageSettings::LanguageSettings( QWidget* parent,  const char* name, WFlags fl )    : LanguageSettingsBase( parent, name, TRUE, fl ), confirmChange(TRUE){#ifdef QWS    if ( FontManager::hasUnicodeFont() )       languages->setFont(FontManager::unicodeFont(FontManager::Proportional));#endif    QPixmap pix = Resource::loadPixmap("selectedDict");    QStringList qpepaths = Global::qtopiaPaths();    for (QStringList::Iterator qit=qpepaths.begin(); qit != qpepaths.end(); ++qit ) {	QString tfn = *qit+"i18n/";	QDir langDir = tfn;	QStringList list = langDir.entryList("*", QDir::Dirs );	QStringList::Iterator it;	for( it = list.begin(); it != list.end(); ++it ) {	    QString id = (*it);	    if ( !langAvail.contains(id) ) {		QFileInfo desktopFile( tfn + "/" + id + "/.directory" );		if( desktopFile.exists() ) {		    langAvail.append(id);		    QFont font = languages->font();		    QString langName = languageName(id, &font);		    languages->insertItem( new FontedItem(pix, langName,font) );		}	    }	}    }    dl = new QPEDialogListener(this);    reset();    connect(languages,SIGNAL(highlighted(int)), this, SLOT(applyLanguage()));#ifdef QTOPIA_PHONE    connect(languages,SIGNAL(selected(int)), this, SLOT(accept()));    a_input = new QAction( tr("Use for input"), QString::null, 0, this );    connect( a_input, SIGNAL( activated() ), this, SLOT( inputToggled() ) );    a_input->setToggleAction(TRUE);    ContextMenu *menu = new ContextMenu(this);    a_input->addTo(menu);#else    connect(languages,SIGNAL(selected(int)), this, SLOT(inputToggled()));#endif    updateActions();}LanguageSettings::~LanguageSettings(){}void LanguageSettings::setConfirm(bool c){    confirmChange = c;}void LanguageSettings::inputToggled(){    int index = languages->currentItem();    QString lang = langAvail.at( index );    inputLanguages.remove(lang);#ifdef QTOPIA_PHONE    if ( a_input->isOn() )	inputLanguages.prepend(lang);#else    FontedItem* item = (FontedItem*) languages->item(index);    if (!item->selected()) {	inputLanguages.prepend(lang);        item->setSelected(FALSE);    } else         item->setSelected(TRUE);#endif    updateActions();}void LanguageSettings::updateActions(){    int numEntries = languages->numRows();    QString lang;    for(int index = 0; index < numEntries; index++) {        FontedItem* item = (FontedItem* ) languages->item(index);        lang = langAvail.at(index);        item->setSelected(dictLanguages().contains(lang) &&                 inputLanguages.contains(lang));    }    languages->triggerUpdate(FALSE);#ifdef QTOPIA_PHONE     lang = langAvail.at( languages->currentItem() );    a_input->setOn(inputLanguages.contains(lang));#endif}void LanguageSettings::forceChosen(){    // For simplicity, make primary reading language also primary writing language.    QString l = chosenLanguage;    while (1) {	if ( dictLanguages().contains(l) )	    break;	int e = l.findRev(QRegExp("[._]"));	if ( e >= 0 ) {	    l = l.left(e);	} else {	    // Give up.	    l = chosenLanguage;	    break;	}    }    inputLanguages.remove(l);    inputLanguages.prepend(l);}void LanguageSettings::accept(){    chosenLanguage = langAvail.at( languages->currentItem() );    Config config("locale");    config.setGroup( "Language" );    QString lang = config.readEntry( "Language" );    if( lang != chosenLanguage && confirmChange	&& QMessageBox::warning( this, tr("Language Change"),                                  tr("<qt>This will cause "                                  "Qtopia to restart, closing all applications."                                  "<p>Change Language?</qt>"),                                  QMessageBox::Yes, QMessageBox::No) != QMessageBox::Yes ) {                        // user should be able to leave the app by pressing BACK            // user doesn't want to change lang anymore => reset chosenLanguage            chosenLanguage = lang;	    return; // Cancel accept.    }    config.writeEntry( "Language", chosenLanguage );    forceChosen();    config.writeEntry( "InputLanguages", inputLanguages, ' ' );    config.write();#if defined(Q_WS_QWS) && !defined(QT_NO_COP)    if( lang != chosenLanguage ) {	QCopEnvelope e("QPE/System","language(QString)");	e << chosenLanguage;    }#endif    QDialog::accept();}void LanguageSettings::applyLanguage(){    chosenLanguage = langAvail.at( languages->currentItem() );    updateActions();}void LanguageSettings::reject(){    reset();    QDialog::reject();}void LanguageSettings::reset(){    Config config("locale");    config.setGroup( "Language" );    QString l = getenv("LANG");    l = config.readEntry( "Language", l );    if(l.isEmpty()) l = "en_US"; // No tr    chosenLanguage = l;    inputLanguages = config.readListEntry( "InputLanguages", ' ' );    forceChosen();    int n = langAvail.find( l );    languages->setCurrentItem( n );}void LanguageSettings::done(int r){    QDialog::done(r);    close();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -