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

📄 main.cpp

📁 KeePassX用于保护密码的安全
💻 CPP
字号:
/*************************************************************************** *   Copyright (C) 2005-2006 by Tarek Saidi                                * *   tarek@linux                                                           * *                                                                         * *   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.                                   * *                                                                         * *   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.                          * *                                                                         * *   You should have received a copy of the GNU General Public License     * *   along with this program; if not, write to the                         * *   Free Software Foundation, Inc.,                                       * *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             * ***************************************************************************/#include <iostream>#include <qapplication.h>#include <qlibrary.h>#include <qlocale.h>#include <qdir.h>#include <QMessageBox>#include <QTranslator>#include <QPainter>#include <QImage>#include <QStyleFactory>#include <QProcess>#include <QLibraryInfo>#include "main.h"#include "PwmConfig.h"#include "PwManager.h"#include "mainwindow.h"using namespace std;#ifdef Q_WS_X11	#include <X11/extensions/XTest.h>	#define XK_LATIN1	#define XK_MISCELLANY 	#define XK_XKB_KEYS	#include <X11/keysymdef.h>	#include <X11/Xlib.h>#endifCConfig config;QString  AppDir;bool TrActive;QPixmap *Icon_Key32x32;QPixmap *Icon_Settings32x32;QPixmap *Icon_Search32x32;QPixmap *Icon_I18n32x32;QPixmap *Icon_Ok16x16;QPixmap *EntryIcons;QIcon *Icon_FileNew;QIcon *Icon_FileOpen;QIcon *Icon_FileClose;QIcon *Icon_FileSave;QIcon *Icon_FileSaveAs;QIcon *Icon_Exit;QIcon *Icon_File_Export;QIcon *Icon_EditDelete;QIcon *Icon_EditAdd;QIcon *Icon_EditEdit;QIcon *Icon_EditUsernameToCb;QIcon *Icon_EditPasswordToCb;QIcon *Icon_EditClone;QIcon *Icon_EditOpenUrl;QIcon *Icon_EditSearch;QIcon *Icon_Configure;QIcon *Icon_Help;QIcon *Icon_AutoType;QIcon *Icon_Swap;inline void loadImages();inline void parseCmdLineArgs(int argc, char** argv,QString &ArgFile,QString& ArgCfg,QString& ArgLang);bool loadTranslation(QTranslator* tr,const QString& prefix,const QString& LocaleCode,const QStringList& SearchPaths);int main(int argc, char **argv){QApplication* app=new QApplication(argc,argv);QString ArgFile,ArgCfg,ArgLang,IniFilename;parseCmdLineArgs(argc,argv,ArgFile,ArgCfg,ArgLang);AppDir=app->applicationDirPath();//Load Configif(ArgCfg==QString()){ if(!QDir(QDir::homePath()+"/.keepass").exists()){	QDir conf(QDir::homePath());	if(!conf.mkdir(".keepass")){		cout << "Warning: Could not create directory '~/.keepass'." << endl;} } IniFilename=QDir::homePath()+"/.keepass/config"; config.loadFromIni(IniFilename);}else{ IniFilename=ArgCfg; config.loadFromIni(IniFilename);}//InternationalizationQLocale loc;if(!ArgLang.size())	loc=QLocale::system();else	loc=QLocale(ArgLang);QTranslator* translator = NULL;QTranslator* qtTranslator=NULL;translator=new QTranslator;qtTranslator=new QTranslator;if(loadTranslation(translator,"keepass-",loc.name(),QStringList()					<< app->applicationDirPath()+"/../share/keepass/i18n/" 					<< QDir::homePath()+"/.keepass/" ))	{app->installTranslator(translator);	 TrActive=true;}else{	if(loc.name()!="en_US")	qWarning(QString("Kpx: No Translation found for '%1 (%2)'using 'English (UnitedStates)'")			.arg(QLocale::languageToString(loc.language()))			.arg(QLocale::countryToString(loc.country())).toAscii());	delete translator;	TrActive=false;}if(loadTranslation(qtTranslator,"qt_",loc.name(),QStringList()					<< QLibraryInfo::location(QLibraryInfo::TranslationsPath)					<< app->applicationDirPath()+"/../share/keepass/i18n/" 					<< QDir::homePath()+"/.keepass/" ))	app->installTranslator(qtTranslator);else{	if(loc.name()!="en_US")	qWarning(QString("Qt: No Translation found for '%1 (%2)'using 'English (UnitedStates)'")			.arg(QLocale::languageToString(loc.language()))			.arg(QLocale::countryToString(loc.country())).toAscii());	delete qtTranslator;}loadImages();SecString::generateSessionKey();int r=0;KeepassMainWindow *mainWin = new KeepassMainWindow(ArgFile);if(mainWin->Start){	mainWin->show();	r=app->exec();}delete mainWin;if(!config.saveToIni(IniFilename))	QMessageBox::warning(NULL,QObject::tr("Warning"),			QObject::tr("Could not save configuration file.\nMake sure you have write access to '~/.keepass'."),			QObject::tr("OK"),"","",0.0);delete app;return r;}void createBanner(QLabel *Banner,QPixmap* symbol,QString text){createBanner(Banner,symbol,text,config.BannerColor1			       ,config.BannerColor2			       ,config.BannerTextColor); //call overloaded function}void createBanner(QLabel *Banner,QPixmap* symbol,QString text,QColor color1,QColor color2,QColor textcolor){int w=Banner->width();int h=Banner->height();QColor color;float b1[3];float b2[3];float a1,a2;QPixmap* banner_pixmap=new QPixmap(w,h); ///@FIXME löscht der Destruktor von QLabel die Pixmap zum schluss???QPainter painter(banner_pixmap);QPen pen;pen.setWidth(1);painter.setPen(pen);QFont font("Arial",16);painter.setFont(font);if(color1!=color2){ b1[0]=color1.red(); b1[1]=color1.green(); b1[2]=color1.blue(); b2[0]=color2.red(); b2[1]=color2.green(); b2[2]=color2.blue(); for(int x=0;x<w;x++){  a2=(float)x/(float)w;  a1=1-a2;  color.setRgb(	(int)(a1*b1[0]+a2*b2[0]),		(int)(a1*b1[1]+a2*b2[1]),		(int)(a1*b1[2]+a2*b2[2]));  pen.setColor(color);  painter.setPen(pen);  painter.drawLine(x,0,x,h); }}else{ banner_pixmap->fill(color1);}QPixmap icon(32,32);icon.fill(textcolor);icon.setAlphaChannel(*symbol);painter.drawPixmap(10,10,icon);pen.setColor(textcolor);painter.setPen(pen);painter.drawText(50,35,text);Banner->setPixmap(*banner_pixmap);}void openBrowser(QString url){QProcess browser;QStringList args=config.OpenUrlCommand.arg(url).split(' ');QString cmd=args.takeFirst();browser.startDetached(cmd,args);}void loadImg(QString name,QPixmap& Img){if(Img.load(AppDir+"/../share/keepass/icons/"+name)==false){ if(Img.load(AppDir+"/share/"+name)==false){ QMessageBox::critical(0,QObject::tr("Error"),QObject::tr("File '%1' could not be found.")				   .arg(name),QObject::tr("OK"),0,0,2,1); exit(1);}}}#define _loadIcon(Icon,PATH)\	Icon=new QIcon(ThemeDir+PATH);void loadImages(){bool small=true;QString ThemeDir=AppDir+"/../share/keepass/icons/nuvola/32x32";QPixmap tmpImg;//-----------------------loadImg("clientic.png",tmpImg);EntryIcons=new QPixmap[BUILTIN_ICONS];for(int i=0;i<BUILTIN_ICONS;i++){EntryIcons[i]=tmpImg.copy(i*16,0,16,16);}//--------------------------loadImg("key.png",tmpImg);Icon_Key32x32=new QPixmap;*Icon_Key32x32=tmpImg;//--------------------------loadImg("settings.png",tmpImg);Icon_Settings32x32=new QPixmap;*Icon_Settings32x32=tmpImg;//--------------------------loadImg("i18n.png",tmpImg);Icon_I18n32x32=new QPixmap;*Icon_I18n32x32=tmpImg;//--------------------------loadImg("ok.png",tmpImg);Icon_Ok16x16=new QPixmap;*Icon_Ok16x16=tmpImg;//--------------------------loadImg("search.png",tmpImg);Icon_Search32x32=new QPixmap;*Icon_Search32x32=tmpImg;//--------------------------_loadIcon(Icon_FileNew,"/actions/filenew.png");_loadIcon(Icon_FileOpen,"/actions/fileopen.png");_loadIcon(Icon_FileSave,"/actions/filesave.png");_loadIcon(Icon_FileSaveAs,"/actions/filesaveas.png");_loadIcon(Icon_FileClose,"/actions/fileclose.png");_loadIcon(Icon_Exit,"/actions/exit.png");_loadIcon(Icon_EditDelete,"/actions/editdelete.png");_loadIcon(Icon_EditAdd,"/actions/edit_add.png");_loadIcon(Icon_EditEdit,"/actions/edit.png");_loadIcon(Icon_EditUsernameToCb,"/actions/identity.png");_loadIcon(Icon_EditPasswordToCb,"/actions/klipper_dock.png");_loadIcon(Icon_EditClone,"/actions/editcopy.png");_loadIcon(Icon_EditOpenUrl,"/actions/run.png");_loadIcon(Icon_EditSearch,"/actions/find.png");_loadIcon(Icon_Configure,"/actions/configure.png");_loadIcon(Icon_Help,"/actions/help.png");_loadIcon(Icon_AutoType,"/apps/ktouch.png");_loadIcon(Icon_Swap,"/actions/reload.png");}bool loadTranslation(QTranslator* tr,const QString& prefix,const QString& loc,const QStringList& paths){for(int i=0;i<paths.size();i++)	if(tr->load(prefix+loc+".qm",paths[i])) return true;for(int i=0;i<paths.size();i++){	QDir dir(paths[i]);	QStringList TrFiles=dir.entryList(QStringList()<<"*.qm",QDir::Files);	for(int j=0;j<TrFiles.size();j++){		if(TrFiles[j].left(prefix.length()+2)==prefix+loc.left(2)){			if(tr->load(TrFiles[j],paths[i]))return true;		}	}}return false;}void parseCmdLineArgs(int argc, char** argv,QString &ArgFile,QString& ArgCfg,QString& ArgLang){if(argc>1){int i=1;	if(argv[i][0]!='-'){		ArgFile=QString::fromUtf8(argv[i]);		i++; }	for(i; i<argc;i++){		if(QString(argv[i])=="-help"){			cout << "KeePassX" << KEEPASS_VERSION << endl;			cout << "Usage: keepass [Filename] [Options]" << endl;			cout << "  -help             This Help" << endl;			cout << "  -cfg <CONFIG>     Use specified file for loading/saving the configuration." << endl;			cout << "  -lang <LOCALE>    Use specified language instead of systems default." << endl;			cout << "                    <LOCALE> is the ISO-639 language code with or without ISO-3166 country code" << endl;			cout << "                    Examples: de     German" << endl;			cout << "                              de_CH  German(Switzerland)"<<endl;			cout << "                              pt_BR  Portuguese(Brazil)"<<endl;			exit(0);			}		else if(QString(argv[i])=="-cfg"){			if(i-1==argc){ cout << "Missing argument for -cfg" << endl; exit(1);}			else{ArgCfg=QString::fromUtf8(argv[i+1]); i++;}			}		else if(QString(argv[i])=="-lang"){			if(i-1==argc) cout << "Missing argument for -lang" << endl;			else{ArgLang=QString::fromUtf8(argv[i+1]); i++;}			}		else if(QString(argv[i])=="-test"){				if (testDatabase()) exit(0);				else exit(1);			}		else{cout << "** Unrecognized argument: " << argv[i] <<  endl;			exit(1);}	}   }}void showErrMsg(const QString& msg,QWidget* parent){QMessageBox::critical(parent,QObject::tr("Error"),msg,QObject::tr("OK"));}

⌨️ 快捷键说明

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