-KDE-Plugin: Updated API, plugin works fine again

-KDE-Plugin: added KDE icon loader to load KDE's currunt icon theme (incomplete)
-reverted change in the group combobox in the editentrydialog


git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@141 b624d157-de02-0410-bad0-e51aec6abb33
master
tarek_saidi 17 years ago
parent 57416c61d2
commit 05ec5eb40c
  1. 2
      src/dialogs/EditEntryDlg.cpp
  2. 33
      src/main.cpp
  3. 33
      src/plugins/interfaces/IIconTheme.h
  4. 55
      src/plugins/kde/keepassx-kde.cpp
  5. 13
      src/plugins/kde/keepassx-kde.h
  6. 10
      src/plugins/kde/keepassx-kde.pro
  7. 1
      src/src.pro

@ -192,7 +192,7 @@ void CEditEntryDlg::InitGroupComboBox(){
QString Space; QString Space;
groups=db->sortedGroups(); groups=db->sortedGroups();
for(int i=0;i<groups.size();i++){ for(int i=0;i<groups.size();i++){
Space.fill(' ', 2 * (groups[i]->level() - 1)); Space.fill(' ', 2 * (groups[i]->level()));
Combo_Group->insertItem(i,db->icon(groups[i]->image()),Space+groups[i]->title()); Combo_Group->insertItem(i,db->icon(groups[i]->image()),Space+groups[i]->title());
if(groups[i]==entry->group()){ if(groups[i]==entry->group()){
Combo_Group->setCurrentIndex(i); Combo_Group->setCurrentIndex(i);

@ -37,6 +37,7 @@
#include "plugins/interfaces/IFileDialog.h" #include "plugins/interfaces/IFileDialog.h"
#include "plugins/interfaces/IKdeInit.h" #include "plugins/interfaces/IKdeInit.h"
#include "plugins/interfaces/IGnomeInit.h" #include "plugins/interfaces/IGnomeInit.h"
#include "plugins/interfaces/IIconTheme.h"
#include "lib/FileDialogs.h" #include "lib/FileDialogs.h"
#include "main.h" #include "main.h"
@ -68,6 +69,7 @@ bool TrActive;
QString DetailViewTemplate; QString DetailViewTemplate;
QPixmap* EntryIcons; QPixmap* EntryIcons;
IIconTheme* IconLoader=NULL;
inline void loadImages(); inline void loadImages();
inline void parseCmdLineArgs(int argc, char** argv,QString &ArgFile,QString& ArgCfg,QString& ArgLang); inline void parseCmdLineArgs(int argc, char** argv,QString &ArgFile,QString& ArgCfg,QString& ArgLang);
@ -134,8 +136,13 @@ int main(int argc, char **argv)
qWarning("Could not load desktop integration plugin:"); qWarning("Could not load desktop integration plugin:");
qWarning(CSTR(PluginLoadError)); qWarning(CSTR(PluginLoadError));
} }
else{ else{
IFileDialog* fdlg=qobject_cast<IFileDialog*>(plugin.instance()); QObject *plugininstance=plugin.instance();
IFileDialog* fdlg=qobject_cast<IFileDialog*>(plugininstance);
IconLoader=qobject_cast<IIconTheme*>(plugininstance);
if(IconLoader==NULL){
qWarning("Error: Integration Plugin: Could not initialize IconTheme interface.");
}
KpxFileDialogs::setPlugin(fdlg); KpxFileDialogs::setPlugin(fdlg);
if(config->integrPlugin()==KpxConfig::KDE){ if(config->integrPlugin()==KpxConfig::KDE){
IKdeInit* kdeinit=qobject_cast<IKdeInit*>(plugin.instance()); IKdeInit* kdeinit=qobject_cast<IKdeInit*>(plugin.instance());
@ -350,13 +357,19 @@ const QIcon& getIcon(const QString& name){
QIcon* CachedIcon=IconCache.value(name); QIcon* CachedIcon=IconCache.value(name);
if(CachedIcon) if(CachedIcon)
return *CachedIcon; return *CachedIcon;
QFileInfo IconFile(AppDir+"/../share/keepass/icons/"+name+".png"); QIcon* NewIcon=NULL;
if(!IconFile.isFile() || !IconFile.exists() || !IconFile.isReadable()){ if(IconLoader==NULL){
///TODO 0.2.3 error handling QFileInfo IconFile(AppDir+"/../share/keepass/icons/"+name+".png");
qWarning("%s",CSTR(name)); if(!IconFile.isFile() || !IconFile.exists() || !IconFile.isReadable()){
///TODO 0.2.3 error handling
qWarning("%s",CSTR(name));
}
NewIcon=new QIcon(AppDir+"/../share/keepass/icons/"+name+".png");
IconCache.insert(name,NewIcon);
} else {
NewIcon=new QIcon(IconLoader->getIcon(name));
IconCache.insert(name,NewIcon);
} }
QIcon* NewIcon=new QIcon(AppDir+"/../share/keepass/icons/"+name+".png");
IconCache.insert(name,NewIcon);
return *NewIcon; return *NewIcon;
} }
@ -436,9 +449,9 @@ QMessageBox::critical(parent,QObject::tr("Error"),msg,QObject::tr("OK"));
QString findPlugin(const QString& filename){ QString findPlugin(const QString& filename){
QFileInfo info; QFileInfo info;
info.setFile(AppDir+"/../lib/keepassx/"+filename); info.setFile(AppDir+"/../lib/"+filename);
if(info.exists() && info.isFile()) if(info.exists() && info.isFile())
return AppDir+"/../lib/keepassx/"+filename; return AppDir+"/../lib/"+filename;
return QString(); return QString();
} }

@ -0,0 +1,33 @@
/***************************************************************************
* Copyright (C) 2007 by Tarek Saidi *
* tarek.saidi@arcor.de *
* *
* 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; Version 2 of the license only. *
* *
* 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 <QString>
#include <QStringList>
#include <QIcon>
#ifndef _I_ICON_THEME_H_
#define _I_ICON_THEME_H_
class IIconTheme{
public:
virtual ~IIconTheme(){}
virtual QIcon getIcon(const QString& name)=0;
};
Q_DECLARE_INTERFACE(IIconTheme,"org.KeePassX.IconThemeInterface/0.2.3")
#endif

@ -17,27 +17,74 @@
* Free Software Foundation, Inc., * * Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/ ***************************************************************************/
#include <kapplication.h> #include <kapplication.h>
#include <kfiledialog.h> #include <kfiledialog.h>
#include <kcmdlineargs.h> #include <kcmdlineargs.h>
#include <kiconloader.h>
#include <QPixmap>
#include <QHash>
#include "keepassx-kde.h" #include "keepassx-kde.h"
QHash<QString,QString>IconMap;
Q_EXPORT_PLUGIN2(keepassx_kde, KdePlugin) Q_EXPORT_PLUGIN2(keepassx_kde, KdePlugin)
QString KdePlugin::openExistingFileDialog(QWidget* parent,QString title,QString dir,QStringList Filters){
return KFileDialog::getOpenFileName();
void createIconMap(){
IconMap["alarmclock"]="alarmclock";
IconMap["appsettings"]="configure";
IconMap["autotype"]="input-keyboard";
IconMap["clock"]="chronometer";
IconMap["clonenetry"]="edit-copy";
IconMap["copypwd"]="kgpg-export-kgpg";
IconMap["copyusername"]="user";
IconMap["dbsearch"]="edit-find";
IconMap["dbsettings"]="configure";
IconMap["delete"]="edit-delete";
IconMap["delete-entry"]="edit-delete";
IconMap["delete-group"]="edit-delete";
IconMap["editentry"]="edit";
IconMap["editgroup"]="edit";
IconMap["exit"]="application-exit";
IconMap["expired"]="flag-red";
IconMap["fileclose"]="dialog-close";
IconMap["filedelete"]="edit-delete";
IconMap["filenew"]="document-new";
IconMap["fileopen"]="document-open";
IconMap["filesave"]="document-save";
IconMap["filesaveas"]="document-save-as";
IconMap["filesaveasdisabled"]="document-save-as"; ///FIXME
IconMap["generator"]="roll";
IconMap["groupsearch"]="file-find";
IconMap["help"]="help-contents";
IconMap["key"]="password";
IconMap["manual"]="help-contents";
} }
QString KdePlugin::openExistingFileDialog(QWidget* parent,QString title,QString dir,QStringList Filters,int SelectedFilter){
return KFileDialog::getOpenFileName();
}
QStringList KdePlugin::openExistingFilesDialog(QWidget* parent,QString title,QString dir,QStringList Filters){ QStringList KdePlugin::openExistingFilesDialog(QWidget* parent,QString title,QString dir,QStringList Filters,int SelectedFilter){
return QStringList(); return QStringList();
} }
QString KdePlugin::saveFileDialog(QWidget* parent,QString title,QString dir,QStringList Filters,bool OverWriteWarn){return QString();} QString KdePlugin::saveFileDialog(QWidget* parent,QString title,QString dir,QStringList Filters,int SelectedFilter,bool OverWriteWarn){return QString();}
QApplication* KdePlugin::getMainAppObject(int argc, char** argv){ QApplication* KdePlugin::getMainAppObject(int argc, char** argv){
KCmdLineArgs::init(argc,argv,"keepassx","KeePassX","Cross Platform Password Manager","0.2.3"); KCmdLineArgs::init(argc,argv,"keepassx","KeePassX","Cross Platform Password Manager","0.2.3");
createIconMap();
return dynamic_cast<QApplication*>( new KApplication() ); return dynamic_cast<QApplication*>( new KApplication() );
} }
QIcon KdePlugin::getIcon(const QString& name){
KIconLoader loader;
QPixmap pxm=loader.loadIcon(IconMap.value(name),K3Icon::Desktop);
QIcon icon(pxm);
return icon;
}

@ -20,21 +20,26 @@
#include <QtPlugin> #include <QtPlugin>
#include <QObject> #include <QObject>
#include <QIcon>
#include "../interfaces/IFileDialog.h" #include "../interfaces/IFileDialog.h"
#include "../interfaces/IKdeInit.h" #include "../interfaces/IKdeInit.h"
#include "../interfaces/IIconTheme.h"
class KdePlugin:public QObject,public IFileDialog,public IKdeInit{ class KdePlugin:public QObject,public IFileDialog,public IKdeInit,public IIconTheme{
Q_OBJECT Q_OBJECT
Q_INTERFACES(IFileDialog) Q_INTERFACES(IFileDialog)
Q_INTERFACES(IKdeInit) Q_INTERFACES(IKdeInit)
Q_INTERFACES(IIconTheme)
public: public:
virtual QString openExistingFileDialog(QWidget* parent,QString title,QString dir, virtual QString openExistingFileDialog(QWidget* parent,QString title,QString dir,
QStringList Filters); QStringList Filters, int SelectedFilter);
virtual QStringList openExistingFilesDialog(QWidget* parent,QString title,QString dir, virtual QStringList openExistingFilesDialog(QWidget* parent,QString title,QString dir,
QStringList Filters); QStringList Filters, int SelectedFilter);
virtual QString saveFileDialog(QWidget* parent,QString title,QString dir, virtual QString saveFileDialog(QWidget* parent,QString title,QString dir,
QStringList Filters,bool ShowOverwriteWarning=true); QStringList Filters, int SelectedFilter, bool ShowOverwriteWarning=true);
virtual int getLastFilter(){return 0;}
virtual QApplication* getMainAppObject(int argc, char** argv); virtual QApplication* getMainAppObject(int argc, char** argv);
virtual QIcon getIcon(const QString& name);
}; };

@ -1,9 +1,9 @@
INCLUDEPATH += /usr/lib/kde4/include
INCLUDEPATH += /opt/kde4/include
TEMPLATE = lib TEMPLATE = lib
CONFIG += plugin release CONFIG += plugin release
HEADERS += keepassx-kde.h HEADERS += keepassx-kde.h
SOURCES += keepassx-kde.cpp SOURCES += keepassx-kde.cpp
MOC_DIR = build/moc MOC_DIR = ../../../build/moc
OBJECTS_DIR = build/ OBJECTS_DIR = ../../../build
LIBS+=-L/opt/kde4/lib -lkio -lkdecore TARGET = ../../../lib/keepassx-kde
LIBS+=-L/usr/lib/kde4/lib -lkio -lkdecore

@ -114,6 +114,7 @@ HEADERS += lib/IniReader.h \
plugins/interfaces/IFileDialog.h \ plugins/interfaces/IFileDialog.h \
plugins/interfaces/IKdeInit.h \ plugins/interfaces/IKdeInit.h \
plugins/interfaces/IGnomeInit.h \ plugins/interfaces/IGnomeInit.h \
plugins/interfaces/IIconTheme.h \
KpxConfig.h \ KpxConfig.h \
KpxFirefox.h KpxFirefox.h
SOURCES += lib/UrlLabel.cpp \ SOURCES += lib/UrlLabel.cpp \