1 /***************************************************************************
2 * Copyright (C) 2005-2007 by Tarek Saidi *
3 * tarek.saidi@arcor.de *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; version 2 of the License. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
18 ***************************************************************************/
20 #include <kapplication.h>
21 #include <kfiledialog.h>
22 #include <kcmdlineargs.h>
23 #include <kiconloader.h>
24 #include <kfilefiltercombo.h>
27 #include <QStringList>
30 #include "keepassx-kde.h"
32 #define CSTR(x)(x.toUtf8().data())
34 QHash<QString,QString>IconMap;
37 Q_EXPORT_PLUGIN2(keepassx_kde, KdePlugin)
40 IconMap["alarmclock"]="alarmclock";
41 IconMap["appsettings"]="configure";
42 IconMap["autotype"]="input-keyboard";
43 IconMap["clock"]="chronometer";
44 IconMap["clonenetry"]="edit-copy";
45 IconMap["copypwd"]="kgpg-export-kgpg";
46 IconMap["copyusername"]="user";
47 IconMap["dbsearch"]="edit-find";
48 IconMap["dbsettings"]="configure";
49 IconMap["delete"]="edit-delete";
50 IconMap["delete-entry"]="edit-delete";
51 IconMap["delete-group"]="edit-delete";
52 IconMap["editentry"]="edit";
53 IconMap["editgroup"]="edit";
54 IconMap["exit"]="application-exit";
55 IconMap["expired"]="flag-red";
56 IconMap["fileclose"]="dialog-close";
57 IconMap["filedelete"]="edit-delete";
58 IconMap["filenew"]="document-new";
59 IconMap["fileopen"]="document-open";
60 IconMap["filesave"]="document-save";
61 IconMap["filesaveas"]="document-save-as";
62 IconMap["filesaveasdisabled"]="document-save-as"; ///FIXME needs to be grayed to reflect it's status
63 IconMap["generator"]="roll";
64 IconMap["groupsearch"]="file-find";
65 IconMap["help"]="help-contents";
66 IconMap["key"]="password";
67 IconMap["manual"]="help-contents";
68 IconMap["newentry"]="kgpg-key3-kpgp";
69 IconMap["newgroup"]="folder";
71 IconMap["openurl"]="network";
72 IconMap["search"]="edit-find";
75 QString convertFilters(const QStringList& qtfilters){
78 StringList: "DescrA (*.ext1 *.ext2 *.ext3)",
82 Single String: "*.ext1 *.ext2 *.ext3|DescrA\n*ext4|DescrB"
86 for(int i=0;i<qtfilters.size();i++){
87 int a=qtfilters[i].indexOf('(');
88 int b=qtfilters[i].indexOf(')');
89 QString exts=qtfilters[i].mid(a+1,b-a-1);
92 kdefilters+=qtfilters[i];
93 if(i<qtfilters.size()-1)kdefilters+='\n';
99 int getFilterIndex(const QStringList& qtfilters,const QString& KdeExtString){
102 for(i=0;i<qtfilters.size();i++){
103 int a=qtfilters[i].indexOf('(');
104 int b=qtfilters[i].indexOf(')');
105 QString QtExtString=qtfilters[i].mid(a+1,b-a-1); // "*.ext1 *.ext2"
106 if(KdeExtString==QtExtString){
118 QString KdePlugin::openExistingFileDialog(QWidget* parent,QString title,QString dir,QStringList Filters,int SelectedFilter){
119 KFileDialog FileDlg(KUrl(dir),convertFilters(Filters),parent);
120 //FileDlg.filterWidget()->setCurrentFilter(convertFilters(QStringList()<<Filters[SelectedFilter]));
121 FileDlg.setMode(KFile::ExistingOnly | KFile::File);
122 FileDlg.setOperationMode(KFileDialog::Opening);
123 if(!FileDlg.exec())return QString();
124 LastFilter=getFilterIndex(Filters,FileDlg.currentFilter());
125 return FileDlg.selectedFiles()[0];
128 QStringList KdePlugin::openExistingFilesDialog(QWidget* parent,QString title,QString dir,QStringList Filters,int SelectedFilter){
129 KFileDialog FileDlg(KUrl(dir),convertFilters(Filters),parent);
130 //FileDlg.filterWidget()->setCurrentFilter(convertFilters(QStringList()<<Filters[SelectedFilter]));
131 FileDlg.setMode(KFile::ExistingOnly | KFile::Files);
132 FileDlg.setOperationMode(KFileDialog::Opening);
133 if(!FileDlg.exec())return QStringList();
134 LastFilter=getFilterIndex(Filters,FileDlg.currentFilter());
135 return FileDlg.selectedFiles();
138 QString KdePlugin::saveFileDialog(QWidget* parent,QString title,QString dir,QStringList Filters,int SelectedFilter,bool OverWriteWarn){
139 KFileDialog FileDlg(KUrl(dir),convertFilters(Filters),parent);
140 //FileDlg.filterWidget()->setCurrentFilter(convertFilters(QStringList()<<Filters[SelectedFilter]));
141 FileDlg.setMode(KFile::File);
142 FileDlg.setOperationMode(KFileDialog::Saving);
143 if(!FileDlg.exec())return QString();
144 LastFilter=getFilterIndex(Filters,FileDlg.currentFilter());
145 return FileDlg.selectedFiles()[0];
149 QApplication* KdePlugin::getMainAppObject(int argc, char** argv){
150 KCmdLineArgs::init(argc,argv,QByteArray("keepassx"),
154 ki18n("Cross Platform Password Manager"));
156 #ifdef GLOBAL_AUTOTYPE
157 return dynamic_cast<QApplication*>( new KpKApplication() );
159 return dynamic_cast<QApplication*>( new KApplication() );
164 QIcon KdePlugin::getIcon(const QString& name){
166 QPixmap pxm=loader.loadIcon(IconMap.value(name),KIconLoader::Desktop,0,KIconLoader::DefaultState,QStringList(),NULL,true);
167 if(pxm.isNull())return QIcon();