diff --git a/share/keepass/icons/bookmark.png b/share/keepass/icons/bookmark.png new file mode 100644 index 0000000..0cc8656 Binary files /dev/null and b/share/keepass/icons/bookmark.png differ diff --git a/share/keepass/icons/bookmark_add.png b/share/keepass/icons/bookmark_add.png new file mode 100644 index 0000000..3521387 Binary files /dev/null and b/share/keepass/icons/bookmark_add.png differ diff --git a/share/keepass/icons/bookmark_edit.png b/share/keepass/icons/bookmark_edit.png new file mode 100644 index 0000000..d2f72df Binary files /dev/null and b/share/keepass/icons/bookmark_edit.png differ diff --git a/share/keepass/icons/bookmark_folder.png b/share/keepass/icons/bookmark_folder.png new file mode 100644 index 0000000..b1b319c Binary files /dev/null and b/share/keepass/icons/bookmark_folder.png differ diff --git a/share/keepass/icons/document.png b/share/keepass/icons/document.png new file mode 100644 index 0000000..2b60577 Binary files /dev/null and b/share/keepass/icons/document.png differ diff --git a/share/keepass/icons/down.png b/share/keepass/icons/down.png new file mode 100644 index 0000000..5cbe6bb Binary files /dev/null and b/share/keepass/icons/down.png differ diff --git a/share/keepass/icons/up.png b/share/keepass/icons/up.png new file mode 100644 index 0000000..899ad4f Binary files /dev/null and b/share/keepass/icons/up.png differ diff --git a/src/Kdb3Database.cpp b/src/Kdb3Database.cpp index 9af0f06..2062af4 100644 --- a/src/Kdb3Database.cpp +++ b/src/Kdb3Database.cpp @@ -103,7 +103,7 @@ int Kdb3Database::numIcons(){ bool Kdb3Database::parseMetaStream(const StdEntry& entry){ - qDebug("%s",entry.Comment.toUtf8().data()); + qDebug("Found Metastream: %s",entry.Comment.toUtf8().data()); if(entry.Comment=="KPX_GROUP_TREE_STATE"){ parseGroupTreeStateMetaStream(entry.Binary); @@ -843,8 +843,7 @@ QList Kdb3Database::entries(IGroupHandle* group){ handles.append(&EntryHandles[i]); } qSort(handles.begin(),handles.end(),EntryHandleLessThan); - foreach(IEntryHandle* h,handles){qDebug("+ %s (%i)",h->title().toUtf8().data(),(int)h->isValid());} - + return handles; } diff --git a/src/KpxConfig.h b/src/KpxConfig.h index ce7df09..1632057 100644 --- a/src/KpxConfig.h +++ b/src/KpxConfig.h @@ -56,7 +56,6 @@ public: QBitArray columns(){return stringToBitArray(settings.value("UI/Columns","11111000000").toString(),11);} QList columnOrder(){return stringToIntArray(settings.value("UI/ColumnOrder","100,100,100,100,100,100,100,100,100,100,100").toString(),11);} QList columnSizes(){return stringToIntArray(settings.value("UI/ColumnSizes","15,10,10,10,10,10,10,10,10,10,10").toString(),11);} - bool enableBookmarkMenu(){return settings.value("Options/EnableBookmarkMenu",true).toBool();} QStringList fileDlgHistory(unsigned index){return settings.value(QString("FileDlgHistory/ENTRY%1").arg(index)).toStringList();} GrpTreeState groupTreeState(){return stringToGrpTreeState(settings.value("Options/GroupTreeState").toString());} bool hidePasswords(){return settings.value("UI/HidePasswords",true).toBool();} @@ -90,6 +89,7 @@ public: bool askBeforeDelete(){return settings.value("Options/AskBeforeDelete",true).toBool();} int autoTypePreGap(){return settings.value("Options/AutoTypePreGap",500).toInt();} int autoTypeKeyStrokeDelay(){return settings.value("Options/AutoTypeKeyStrokeDelay",0).toInt();} + bool featureBookmarks(){return settings.value("Features/Bookmarks",true).toBool();} void setAlternatingRowColors(bool value){settings.setValue("Options/AlternatingRowColors",value);} void setBannerColor1(const QColor& value){settings.setValue("Options/BannerColor1",colorToString(value));} @@ -99,7 +99,6 @@ public: void setColumns(const QBitArray& value){settings.setValue("UI/Columns",bitArrayToString(value));} void setColumnOrder(const QList& value){settings.setValue("UI/ColumnOrder",intArrayToString(value));} void setColumnSizes(const QList& value){settings.setValue("UI/ColumnSizes",intArrayToString(value));} - void setEnableBookmarkMenu(bool value){settings.setValue("Options/EnableBookmarkMenu",value);} void setFileDlgHistory(unsigned index,const QStringList& value){settings.setValue(QString("FileDlgHistory/ENTRY%1").arg(index), value);} void setGroupTreeState(GrpTreeState value){settings.setValue("Options/GroupTreeState",grpTreeStateToString(value));} void setHidePasswords(bool value){settings.setValue("UI/HidePasswords",value);} @@ -133,6 +132,7 @@ public: void setAskBeforeDelete(bool value){settings.setValue("Options/AskBeforeDelete",value);} void setAutoTypePreGap(int value){settings.setValue("Options/AutoTypePreGap",value);} void setAutoTypeKeyStrokeDelay(int value){settings.setValue("Options/AutoTypeKeyStrokeDelay",value);} + void setFeatureBookmarks(bool value){settings.setValue("Features/Bookmarks",value);} unsigned fileDlgHistorySize(); void clearFileDlgHistory(){settings.remove("FileDlgHistory");}; diff --git a/src/crypto/arcfour.cpp b/src/crypto/arcfour.cpp index 3d0c923..0df7980 100644 --- a/src/crypto/arcfour.cpp +++ b/src/crypto/arcfour.cpp @@ -58,7 +58,6 @@ void CArcFour::prepareKey(){ } void CArcFour::encrypt(const byte* src, byte* dst,int length){ -//qDebug("Key:%s",RawKey.data()); prepareKey(); unsigned char x; unsigned char y; diff --git a/src/dialogs/AboutDlg.cpp b/src/dialogs/AboutDlg.cpp index cd182ae..95be523 100755 --- a/src/dialogs/AboutDlg.cpp +++ b/src/dialogs/AboutDlg.cpp @@ -1,11 +1,10 @@ /*************************************************************************** - * Copyright (C) 2005-2006 by Tarek Saidi * + * Copyright (C) 2005-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. * - * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * @@ -48,18 +47,18 @@ AboutDialog::AboutDialog(QWidget* parent):QDialog(parent) QString str; str+=""+tr("Team")+"
"; str+="
"; - str+=""+tr("Tarek Saidi")+"
"+tr("Developer, Project Admin")+"
"+tr("tariq@users.berlios.de")+"
"; + str+=""+tr("Tarek Saidi")+"
"+tr("Developer, Project Admin")+"
"+tr("tarek_saidi@users.sf.net")+"
"; str+="
"; - str+=""+tr("Eugen Gorschenin")+"
"+tr("Web Designer")+"
"+tr("geugen@users.berlios.de")+"
"; + str+=""+tr("Eugen Gorschenin")+"
"+tr("Web Designer")+"
"+tr("geugen@users.sf.de")+"
"; + str+="
"; + str+=""+tr("Jota Jota")+"
"+tr("Developer")+"
"+tr("myxself@users.sf.de")+"
"; str+="

"; str+=""+tr("Thanks To")+""; str+="
"; str+=""+tr("Matthias Miller")+"
"+tr("Patches for better MacOS X support")+"
"+tr("www.outofhanwell.com")+"
"; str+="
"; - str+="
"; str+=""+tr("James Nicholls")+"
"+tr("Main Application Icon")/*+"
"+tr("mailto:???")*/+"
"; str+="
"; - str+="
"; str+=""+tr("Constantin Makshin")+"
"+tr("Various fixes and improvements")+"
"+tr("dinosaur-rus@users.sourceforge.net")+"
"; Edit_Thanks->setHtml(str); } diff --git a/src/dialogs/AddBookmarkDlg.cpp b/src/dialogs/AddBookmarkDlg.cpp new file mode 100644 index 0000000..3238e55 --- /dev/null +++ b/src/dialogs/AddBookmarkDlg.cpp @@ -0,0 +1,58 @@ +/*************************************************************************** + * 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. * + * * + * 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 +#include "AddBookmarkDlg.h" +#include "lib/FileDialogs.h" +#include "lib/bookmarks.h" + +AddBookmarkDlg::AddBookmarkDlg(QWidget* parent, QString DefaultFilename, int _ItemID):QDialog(parent) +{ + setupUi(this); + ItemID=_ItemID; + connect(Button_Browse,SIGNAL(clicked()),this,SLOT(OnButtonBrowse())); + connect(buttonBox->button(QDialogButtonBox::Ok),SIGNAL(clicked()),this,SLOT(OnButtonOk())); + connect(buttonBox->button(QDialogButtonBox::Cancel),SIGNAL(clicked()),this,SLOT(reject())); + if(ItemID==-1){ + if(DefaultFilename==QString()) + OnButtonBrowse(); + else + Edit_Filename->setText(DefaultFilename); + } + else { + Edit_Title->setText(KpxBookmarks::title(ItemID)); + Edit_Filename->setText(KpxBookmarks::path(ItemID)); + setWindowTitle(tr("Edit Bookmark")); + } +} + +void AddBookmarkDlg::OnButtonBrowse(){ + QString path=KpxFileDialogs::openExistingFile(this,"AddBookmarkDlg", tr("Add Bookmark"), + QStringList() << tr("KeePass Databases (*.kdb)") << tr("All Files (*)")); + if(path!=QString()) + Edit_Filename->setText(path); +} + +void AddBookmarkDlg::OnButtonOk(){ + if(ItemID==-1) + ItemID=KpxBookmarks::add(Edit_Title->text(),Edit_Filename->text()); + else + KpxBookmarks::edit(Edit_Title->text(),Edit_Filename->text(),ItemID); + accept(); +} \ No newline at end of file diff --git a/src/dialogs/AddBookmarkDlg.h b/src/dialogs/AddBookmarkDlg.h new file mode 100644 index 0000000..363ace2 --- /dev/null +++ b/src/dialogs/AddBookmarkDlg.h @@ -0,0 +1,41 @@ +/*************************************************************************** + * 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. * + * * + * 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. * + ***************************************************************************/ + +#ifndef _ADDBOOKMARKDLG_H_ +#define _ADDBOOKMARKDLG_H_ + +#include +#include "ui_AddBookmarkDlg.h" + +class AddBookmarkDlg : public QDialog, private Ui::AddBookmarkDlg +{ + Q_OBJECT + + public: + AddBookmarkDlg (QWidget* parent=0, QString DefaultFilename=QString(), int ItemID=-1); + int ItemID; + + private slots: + void OnButtonOk(); + void OnButtonBrowse(); + +}; + +#endif + diff --git a/src/dialogs/EditEntryDlg.cpp b/src/dialogs/EditEntryDlg.cpp index 06448c8..75aefc3 100755 --- a/src/dialogs/EditEntryDlg.cpp +++ b/src/dialogs/EditEntryDlg.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include "SelectIconDlg.h" #include "PasswordGenDlg.h" @@ -348,27 +349,27 @@ void CEditEntryDlg::OnNewAttachment() int prec; if (entry->binarySize() < 1024) { - unit = "Bytes"; + unit = tr("Bytes"); faktor = 1; prec = 0; } else { - if (entry->binarySize() < 1048576) + if (entry->binarySize() < pow(2,20)) { - unit = "kB"; + unit = tr("kiB"); faktor = 1024; } else - if (entry->binarySize() < 1073741824) + if (entry->binarySize() < pow(2,30)) { - unit = "MB"; - faktor = 1048576; + unit = tr("MiB"); + faktor = pow(2,20); } else { - unit = "GB"; - faktor = 1073741824; + unit = tr("GiB"); + faktor = pow(2,30); } prec = 1; } diff --git a/src/dialogs/ManageBookmarksDlg.cpp b/src/dialogs/ManageBookmarksDlg.cpp new file mode 100644 index 0000000..c1045b0 --- /dev/null +++ b/src/dialogs/ManageBookmarksDlg.cpp @@ -0,0 +1,117 @@ +/*************************************************************************** + * 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. * + * * + * 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 +#include "main.h" +#include "ManageBookmarksDlg.h" +#include "lib/bookmarks.h" +#include "dialogs/AddBookmarkDlg.h" + +ManageBookmarksDlg::ManageBookmarksDlg(QWidget* parent):QDialog(parent) +{ + setupUi(this); + for(int i=0;isetData(Qt::UserRole,i); + item->setText(KpxBookmarks::title(i)); + } + connect(Button_Up,SIGNAL(clicked()),this,SLOT(OnButtonUp())); + connect(Button_Down,SIGNAL(clicked()),this,SLOT(OnButtonDown())); + connect(Button_Delete,SIGNAL(clicked()),this,SLOT(OnButtonDelete())); + connect(Button_Add,SIGNAL(clicked()),this,SLOT(OnButtonAdd())); + connect(Button_Edit,SIGNAL(clicked()),this,SLOT(OnButtonEdit())); + connect(ListWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(edit(QListWidgetItem*))); + connect(buttonBox->button(QDialogButtonBox::Close),SIGNAL(clicked()),this,SLOT(close())); + + Button_Up->setIcon(getIcon("up")); + Button_Down->setIcon(getIcon("down")); + Button_Delete->setIcon(getIcon("delete")); + Button_Edit->setIcon(getIcon("bookmark_edit")); + Button_Add->setIcon(getIcon("bookmark_add")); +} + + +void ManageBookmarksDlg::OnButtonUp(){ + int row=ListWidget->currentRow(); + QListWidgetItem* item=ListWidget->currentItem(); + if(row==-1 || !item || row==0)return; + ListWidget->takeItem(row); + row--; + ListWidget->insertItem(row,item); + ListWidget->setCurrentRow(row); +} + +void ManageBookmarksDlg::OnButtonDown(){ + int row=ListWidget->currentRow(); + QListWidgetItem* item=ListWidget->currentItem(); + if(row==-1 || !item || row==ListWidget->count()-1)return; + ListWidget->takeItem(row); + row++; + ListWidget->insertItem(row,item); + ListWidget->setCurrentRow(row); +} + +void ManageBookmarksDlg::OnButtonDelete(){ + QListWidgetItem* item=ListWidget->currentItem(); + if(!item)return; + int index=item->data(Qt::UserRole).toInt(); + KpxBookmarks::remove(index); + delete item; + for(int i=0;icount();i++){ + int itemindex=ListWidget->item(i)->data(Qt::UserRole).toInt(); + if(itemindex>index) + ListWidget->item(i)->setData(Qt::UserRole,itemindex-1); + } +} + +void ManageBookmarksDlg::OnButtonEdit(){ + QListWidgetItem* item=ListWidget->currentItem(); + if(!item)return; + edit(item); +} + +void ManageBookmarksDlg::edit(QListWidgetItem* item){ + int i=item->data(Qt::UserRole).toInt(); + AddBookmarkDlg dlg(this,QString(),i); + dlg.exec(); + item->setText(KpxBookmarks::title(i)); +} + + +void ManageBookmarksDlg::OnButtonAdd(){ + AddBookmarkDlg dlg(this); + if(dlg.exec()){ + int i=dlg.ItemID; + QListWidgetItem* item=new QListWidgetItem(ListWidget); + item->setData(Qt::UserRole,i); + item->setText(KpxBookmarks::title(i)); + } + return; +} + +void ManageBookmarksDlg::closeEvent(QCloseEvent * event){ + QList Order; + // Creating a list with the new indices + // Order[OldIndex]==NewIndex + for(int i=0;iitem(i)->data(Qt::UserRole).toInt(); + } + KpxBookmarks::resort(Order); + event->accept(); +} \ No newline at end of file diff --git a/src/dialogs/ManageBookmarksDlg.h b/src/dialogs/ManageBookmarksDlg.h new file mode 100644 index 0000000..4501a5c --- /dev/null +++ b/src/dialogs/ManageBookmarksDlg.h @@ -0,0 +1,44 @@ +/*************************************************************************** + * 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. * + * * + * 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. * + ***************************************************************************/ + +#ifndef MANAGEBOOKMARKSDLG_H +#define MANAGEBOOKMARKSDLG_H + +#include +#include +#include "ui_ManageBookmarksDlg.h" + +class ManageBookmarksDlg : public QDialog, private Ui::ManageBookmarksDlg +{ + Q_OBJECT + public: + ManageBookmarksDlg(QWidget* parent=0); + private: + virtual void closeEvent(QCloseEvent* event); + private slots: + void OnButtonUp(); + void OnButtonDown(); + void OnButtonDelete(); + void OnButtonAdd(); + void OnButtonEdit(); + void edit(QListWidgetItem*); +}; + +#endif + diff --git a/src/dialogs/PasswordDlg.cpp b/src/dialogs/PasswordDlg.cpp index ee9d0e2..143f3f3 100755 --- a/src/dialogs/PasswordDlg.cpp +++ b/src/dialogs/PasswordDlg.cpp @@ -1,11 +1,10 @@ /*************************************************************************** - * Copyright (C) 2005-2006 by Tarek Saidi * + * Copyright (C) 2005-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. * - * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * @@ -27,26 +26,31 @@ #include #include #include +#include +#include +#include #include "main.h" #include "KpxConfig.h" #include "PasswordDlg.h" #include "lib/FileDialogs.h" +#include "lib/bookmarks.h" -CPasswordDialog::CPasswordDialog(QWidget* parent,IDatabase* DB,bool ShowExitButton,bool ChangeKeyMode) +CPasswordDialog::CPasswordDialog(QWidget* parent,QString filename,IDatabase* DB,bool IsAuto,bool ChangeKeyMode) : QDialog(parent) { setupUi(this); - createBanner(Banner,getPixmap("key"),tr("Database Key")); + createBanner(&BannerPixmap,getPixmap("key"),tr("Database Key"),width()); + Button_Bookmarks->setIcon(getIcon("bookmark")); db=DB; + LastFile=filename; + setWindowTitle(LastFile); QString mountDir=config->mountDir(); QDir media(mountDir); if(media.exists()){ QStringList Paths; - Paths=media.entryList(QStringList()<<"*",QDir::Dirs); - Paths.erase(Paths.begin()); // delete "." - Paths.erase(Paths.begin()); // delete ".." + Paths=media.entryList(QStringList()<<"*",QDir::Dirs | QDir::NoDotAndDotDot); for(int i=0;iaddItem(mountDir+Paths[i]); } @@ -66,17 +70,47 @@ CPasswordDialog::CPasswordDialog(QWidget* parent,IDatabase* DB,bool ShowExitButt } // if(LastKeyType==Password){... is not required because it is already the default state. } + + // Bookmarks // + QPalette palette=Button_Bookmarks->palette(); + palette.setColor(QPalette::Active,QPalette::Button,config->bannerColor1()); + palette.setColor(QPalette::Active,QPalette::Window,config->bannerColor2()); + Button_Bookmarks->setPalette(palette); + palette=Label_Bookmark->palette(); + palette.setColor(QPalette::Active,QPalette::WindowText,config->bannerTextColor()); + Label_Bookmark->setPalette(palette); + + QMenu* BookmarkMenu=new QMenu(this); + QAction* action=new QAction(this); + action->setData(QString()); + action->setText(tr("Last File")); + action->setIcon(getIcon("document")); + BookmarkMenu->addAction(action); + BookmarkMenu->addSeparator(); + for(int i=0;isetData(KpxBookmarks::path(i)); + action->setText(KpxBookmarks::title(i)); + action->setIcon(getIcon("document")); + BookmarkMenu->addAction(action); + } + Button_Bookmarks->setMenu(BookmarkMenu); + if(!IsAuto || !config->featureBookmarks()){ + Button_Bookmarks->hide(); + Label_Bookmark->hide(); + } + + connect(Combo_Dirs, SIGNAL( editTextChanged(const QString&) ),this, SLOT( OnComboTextChanged(const QString&))); + connect(ButtonCancel, SIGNAL( clicked() ), this, SLOT( OnCancel() ) ); + connect(Edit_Password, SIGNAL( textChanged(const QString&) ), this, SLOT( OnPasswordChanged(const QString&) ) ); + connect(CheckBox_Both, SIGNAL( stateChanged(int) ), this, SLOT( OnCheckBox_BothChanged(int) ) ); + connect(ButtonChangeEchoMode, SIGNAL( clicked() ), this, SLOT( ChangeEchoModeDatabaseKey() ) ); + connect(Edit_Password, SIGNAL( returnPressed() ), this, SLOT( OnOK() ) ); + connect(Edit_PasswordRep, SIGNAL( returnPressed() ), this, SLOT( OnOK() ) ); + connect(ButtonExit, SIGNAL( clicked()),this,SLOT(OnButtonExit())); + connect(BookmarkMenu,SIGNAL(triggered(QAction*)),this,SLOT(OnBookmarkTriggered(QAction*))); - connect( Combo_Dirs, SIGNAL( editTextChanged(const QString&) ),this, SLOT( OnComboTextChanged(const QString&))); - connect( ButtonCancel, SIGNAL( clicked() ), this, SLOT( OnCancel() ) ); - connect( Edit_Password, SIGNAL( textChanged(const QString&) ), this, SLOT( OnPasswordChanged(const QString&) ) ); - connect( CheckBox_Both, SIGNAL( stateChanged(int) ), this, SLOT( OnCheckBox_BothChanged(int) ) ); - connect( ButtonChangeEchoMode, SIGNAL( clicked() ), this, SLOT( ChangeEchoModeDatabaseKey() ) ); - connect( Edit_Password, SIGNAL( returnPressed() ), this, SLOT( OnOK() ) ); - connect( Edit_PasswordRep, SIGNAL( returnPressed() ), this, SLOT( OnOK() ) ); - connect( ButtonExit, SIGNAL( clicked()),this,SLOT(OnButtonExit())); - - ButtonExit->setVisible(ShowExitButton); + ButtonExit->setVisible(IsAuto); Mode_Set=ChangeKeyMode; if(!ChangeKeyMode){ Edit_PasswordRep->hide(); @@ -342,3 +376,18 @@ void CPasswordDialog::OnButtonExit(){ done(2); } +void CPasswordDialog::paintEvent(QPaintEvent* event){ + QDialog::paintEvent(event); + QPainter painter(this); + painter.setClipRegion(event->region()); + painter.drawPixmap(QPoint(0,0),BannerPixmap); +} + +void CPasswordDialog::OnBookmarkTriggered(QAction* action){ + BookmarkFilename=action->data().toString(); + if(action->data().toString()==QString()) + setWindowTitle(LastFile); + else + setWindowTitle(action->data().toString()); + Label_Bookmark->setText(action->text()); +} diff --git a/src/dialogs/PasswordDlg.h b/src/dialogs/PasswordDlg.h index fef9f8f..d3e723a 100755 --- a/src/dialogs/PasswordDlg.h +++ b/src/dialogs/PasswordDlg.h @@ -23,6 +23,8 @@ #include "main.h" #include "lib/UrlLabel.h" #include "Database.h" +#include +#include class CPasswordDialog : public QDialog, public Ui_PasswordDlg @@ -32,17 +34,21 @@ class CPasswordDialog : public QDialog, public Ui_PasswordDlg private: bool Mode_Set; //true = Set, false = Get IDatabase* db; + QPixmap BannerPixmap; void setStatePasswordOnly(); void setStateKeyFileOnly(); void setStateBoth(); bool doAuth(); + virtual void paintEvent(QPaintEvent*); + QString LastFile; public: QString keyfile; QString password; + QString BookmarkFilename; tKeyType KeyType; bool OverwriteKeyFile; - CPasswordDialog(QWidget* parent,IDatabase* DB,bool ShowExitButton = false, bool KeyMode_Set=false); + CPasswordDialog(QWidget* parent,QString filename,IDatabase* DB,bool ShowExitButton = false, bool KeyMode_Set=false); public slots: void OnOK(); @@ -55,6 +61,7 @@ class CPasswordDialog : public QDialog, public Ui_PasswordDlg void OnCheckBox_BothChanged(int state); void ChangeEchoModeDatabaseKey(); void OnComboTextChanged(const QString&); + void OnBookmarkTriggered(QAction* action); }; #endif diff --git a/src/dialogs/SettingsDlg.cpp b/src/dialogs/SettingsDlg.cpp index fe30da4..376e4e4 100755 --- a/src/dialogs/SettingsDlg.cpp +++ b/src/dialogs/SettingsDlg.cpp @@ -103,6 +103,9 @@ CSettingsDlg::CSettingsDlg(QWidget* parent):QDialog(parent,Qt::Dialog) SpinBox_ClipboardTime->setValue(config->clipboardTimeOut()); CheckBox_ShowPasswords->setChecked(config->showPasswords()); CheckBox_ShowPasswords_PasswordDlg->setChecked(config->showPasswordsPasswordDlg()); + + //Features + CheckBox_FeatureBookmarks->setChecked(config->featureBookmarks()); //Desktop Integration @@ -186,7 +189,6 @@ void CSettingsDlg::apply(){ config->setShowSysTrayIcon(checkBox_ShowSysTrayIcon->isChecked()); config->setMinimizeToTray(checkBox_MinimizeToTray->isChecked()); config->setSaveFileDlgHistory(checkBox_SaveFileDlgHistory->isChecked()); - config->setEnableBookmarkMenu(checkBox_EnableBookmarkMenu->isChecked()); if(Radio_GroupTreeRestore->isChecked())config->setGroupTreeState(KpxConfig::RestoreLast); else if(Radio_GroupTreeExpand->isChecked())config->setGroupTreeState(KpxConfig::ExpandAll); else config->setGroupTreeState(KpxConfig::DoNothing); @@ -204,6 +206,9 @@ void CSettingsDlg::apply(){ config->setClipboardTimeOut(SpinBox_ClipboardTime->value()); config->setShowPasswords(CheckBox_ShowPasswords->isChecked()); config->setShowPasswordsPasswordDlg(CheckBox_ShowPasswords_PasswordDlg->isChecked()); + + //Features + config->setFeatureBookmarks(CheckBox_FeatureBookmarks->isChecked()); //Desktop Integration PluginsModified=Label_IntPlugin_Info->isVisible(); diff --git a/src/forms/AboutDlg.ui b/src/forms/AboutDlg.ui index 2ce6d81..2883a64 100644 --- a/src/forms/AboutDlg.ui +++ b/src/forms/AboutDlg.ui @@ -10,9 +10,7 @@ - - 0 - 0 + 0 0 @@ -33,12 +31,21 @@ About - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + @@ -65,12 +72,21 @@ About - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + @@ -80,12 +96,21 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -104,12 +129,21 @@ - - 0 - 12 + + 0 + + + 0 + + + 0 + + + 0 + @@ -130,9 +164,9 @@ - Copyright (C) 2005 - 2006 Tarek Saidi + Copyright (C) 2005 - 2007 KeePassX Team KeePassX is distributed under the terms of the -General Public License (GPL) version 2 or later. +General Public License (GPL) version 2. @@ -147,12 +181,21 @@ General Public License (GPL) version 2 or later. Credits - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + @@ -167,12 +210,21 @@ General Public License (GPL) version 2 or later. Translation - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + @@ -187,12 +239,21 @@ General Public License (GPL) version 2 or later. License - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + diff --git a/src/forms/AddBookmarkDlg.ui b/src/forms/AddBookmarkDlg.ui new file mode 100644 index 0000000..e2897f6 --- /dev/null +++ b/src/forms/AddBookmarkDlg.ui @@ -0,0 +1,58 @@ + + AddBookmarkDlg + + + + 0 + 0 + 497 + 148 + + + + Add Bookmark + + + + + + + + Title: + + + + + + + + + + File: + + + + + + + + + + Browse... + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + + + + + + + + diff --git a/src/forms/MainWindow.ui b/src/forms/MainWindow.ui index 4d30a94..9871057 100644 --- a/src/forms/MainWindow.ui +++ b/src/forms/MainWindow.ui @@ -143,9 +143,15 @@ &Import from... + + + + Bookmarks + + @@ -237,6 +243,11 @@ + + + Manage Bookmarks... + + &Open Database... @@ -544,6 +555,16 @@ Recycle Bin... + + + Add Bookmark... + + + + + Bookmark this Database... + + diff --git a/src/forms/ManageBookmarksDlg.ui b/src/forms/ManageBookmarksDlg.ui new file mode 100644 index 0000000..fa81c67 --- /dev/null +++ b/src/forms/ManageBookmarksDlg.ui @@ -0,0 +1,69 @@ + + ManageBookmarksDlg + + + + 0 + 0 + 452 + 360 + + + + Manage Bookmarks + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 161 + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + + + + + diff --git a/src/forms/PasswordDlg.ui b/src/forms/PasswordDlg.ui index 97ed2b1..a8f6dc8 100644 --- a/src/forms/PasswordDlg.ui +++ b/src/forms/PasswordDlg.ui @@ -1,7 +1,4 @@ - - - PasswordDlg @@ -13,9 +10,7 @@ - - 0 - 0 + 0 0 @@ -41,293 +36,342 @@ true - - - - 0 - 0 - 578 - 50 - - - - - 5 - 5 - 0 - 0 - - - - TextLabel - - - - - - 10 - 240 - 561 - 31 - - - - - 0 - - - 6 - - - - - Qt::Horizontal - - - - 351 - 20 - - - - - - - - OK - - - - - - - Cancel - - - - - - - Exit - - - - - - - - - 10 - 80 - 561 - 151 - - - - - 7 - 7 - 0 - 0 - - - - Key - - - - - 10 - 20 - 541 - 123 - - - - - 0 - - - 6 - + + + - - - 0 + + + Qt::Vertical - - 6 + + QSizePolicy::Fixed - - - - Password Repet.: - - - - - - - - - - - 5 - 5 - 0 - 0 - - - - Password: - - - - - - - ... - - - - - - - + + + 20 + 50 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + - - 0 - - - 6 - - - - - 5 - 5 - 0 - 0 - - + - Key file or directory: + Last File - - - - 7 - 0 - 0 - 0 - + + + QToolButton::InstantPopup - - true + + Qt::NoArrow - - - - - 5 - 0 - 0 - 0 - - - - &Browse... - - - Alt+B - - - - - - - - - 0 - - - 6 - - - - - - 0 - 0 - 0 - 0 - - - - Use Password AND Key File - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - 10 - 60 - 459 - 16 - - - - - 7 - 4 - 0 - 0 - - - - Enter a Password and/or choose a key file. - - + + + + + + 0 + 0 + + + + Enter a Password and/or choose a key file. + + + + + + + + 0 + 0 + + + + Key + + + + + 10 + 20 + 541 + 124 + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 6 + + + 6 + + + + + Password Repet.: + + + + + + + + + + + 0 + 0 + + + + Password: + + + + + + + ... + + + + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Key file or directory: + + + + + + + + 0 + 0 + + + + true + + + + + + + + 0 + 0 + + + + &Browse... + + + Alt+B + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Use Password AND Key File + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 351 + 20 + + + + + + + + OK + + + + + + + Cancel + + + + + + + Exit + + + + + + - Edit_Password Edit_PasswordRep Combo_Dirs - CheckBox_Both - ButtonChangeEchoMode ButtonBrowse + CheckBox_Both ButtonOK ButtonCancel ButtonExit + Button_Bookmarks + ButtonChangeEchoMode diff --git a/src/forms/SettingsDlg.ui b/src/forms/SettingsDlg.ui index b0dba08..7e39081 100644 --- a/src/forms/SettingsDlg.ui +++ b/src/forms/SettingsDlg.ui @@ -846,7 +846,7 @@ - + Bookmarks diff --git a/src/lib/EntryView.cpp b/src/lib/EntryView.cpp index 2e6daf2..8c267ac 100644 --- a/src/lib/EntryView.cpp +++ b/src/lib/EntryView.cpp @@ -462,7 +462,6 @@ void KeepassEntryView::OnColumnMoved(int LogIndex,int OldVisIndex,int NewVisInde } int KeepassEntryView::logicalColIndex(int LstIndex){ - qDebug("%i",LstIndex); int c=-1; for(int i=0;i +#include "bookmarks.h" +#include "main.h" +#define CSTR(x)(x.toUtf8().data()) + +QList KpxBookmarks::Bookmarks; +QString KpxBookmarks::filename; + +bool KpxBookmarks::load(const QString& _filename){ + /* + Fileformat: + "Title1" "Path1"\n + "Title2" "Path2"\n + ... + */ + + filename=_filename; + QFile file(filename); + if(!file.exists()){ + return true; + } + if(!file.open(QIODevice::ReadOnly)){ + qWarning("Reading bookmarks failed: %s",CSTR(decodeFileError(file.error()))); + return false; + } + QString content=QString::fromUtf8(file.readAll()); + file.close(); + content.replace("\r",""); + QStringList lines=content.split("\n"); + for(int i=0;i order){ + QList NewList; + for(int i=0;i +#include + +class KpxBookmarks { + public: + static bool load(const QString& file); + static int add(const QString& Title,const QString& Path); + static void remove(int id); + static void edit(const QString& Title,const QString& Path, int Index); + static int count(); + static void resort(QList order); + static QString title(int Index); + static QString path(int Index); + private: + static bool save(); + class BookmarkEntry { + public: + QString Title; + QString Path; + int Index; + }; + static QList Bookmarks; + static QString filename; + +}; + + +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index e6b714a..3be4dcd 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -43,6 +43,7 @@ #include "main.h" #include "lib/FileDialogs.h" +#include "lib/bookmarks.h" #include "KpxConfig.h" #include "Kdb3Database.h" #include "mainwindow.h" @@ -216,6 +217,7 @@ int main(int argc, char **_argv) else loadDefaultDetailViewTemplate(); loadImages(); + KpxBookmarks::load(QDir::homePath()+"/.keepassx/bookmarks"); initYarrow(); //init random number generator SecString::generateSessionKey(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 9e6f303..4e299e6 100755 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -42,6 +42,7 @@ #include "lib/random.h" #include "lib/AutoType.h" #include "lib/FileDialogs.h" +#include "lib/bookmarks.h" #include "import/Import_PwManager.h" #include "import/Import_KWalletXml.h" #include "import/Import_KeePassX_Xml.h" @@ -59,13 +60,11 @@ #include "dialogs/CustomizeDetailViewDlg.h" #include "dialogs/ExpiredEntriesDlg.h" #include "dialogs/TrashCanDlg.h" +#include "dialogs/AddBookmarkDlg.h" +#include "dialogs/ManageBookmarksDlg.h" -//#include #include -//QDBusServer* dbusServer; -//QDBusConnection* dbusCon; - Import_KeePassX_Xml import_KeePassX_Xml; Import_PwManager import_PwManager; Import_KWalletXml import_KWalletXml; @@ -116,21 +115,8 @@ KeepassMainWindow::KeepassMainWindow(const QString& ArgFile,QWidget *parent, Qt: } HelpBrowser = new QAssistantClient(QString(),this); HelpBrowser->setArguments(QStringList()<< "-profile" << "/home/tarek/Documents/KeePassX/share/keepass/doc/keepassx.adp"); - - // DBus Server of Qt 4.2 does not work - 4.3 snapshot seems to work fine - /* - //dbusServer=new QDBusServer("unix:path=/tmp/KpxBus",this); - //qDebug("DBUS: %s",dbusServer->lastError().message().toAscii().data()); - //QDBusConnection::connectToBus("unix:path=/tmp/KpxBus","MyKpxConnection"); - //qDebug("DBUS: %s",dbusCon->lastError().message().toAscii().data()); - - KpxFirefox* fox=new KpxFirefox(NULL); - new KpxFirefoxAdaptor(fox); - QDBusConnection::sessionBus().registerService("org.keepassx.firefoxservice"); - QDBusConnection::sessionBus().registerObject("/KpxFirefox",fox); - qDebug("DBUS: %s",QDBusConnection::sessionBus().lastError().message().toAscii().data()); - */ - + + createBookmarkActions(); } void KeepassMainWindow::setupConnections(){ @@ -145,6 +131,7 @@ void KeepassMainWindow::setupConnections(){ connect(FileUnLockWorkspaceAction,SIGNAL(triggered()), this, SLOT(OnUnLockWorkspace())); connect(menuImport,SIGNAL(triggered(QAction*)),this,SLOT(OnImport(QAction*))); connect(menuExport,SIGNAL(triggered(QAction*)),this,SLOT(OnExport(QAction*))); + connect(menuBookmarks,SIGNAL(triggered(QAction*)),this,SLOT(OnBookmarkTriggered(QAction*))); connect(EditNewGroupAction, SIGNAL(triggered()), GroupView, SLOT(OnNewGroup())); connect(EditEditGroupAction, SIGNAL(triggered()), GroupView, SLOT(OnEditGroup())); @@ -252,6 +239,10 @@ void KeepassMainWindow::setupIcons(){ EditAutoTypeAction->setIcon(getIcon("autotype")); HelpHandbookAction->setIcon(getIcon("manual")); HelpAboutAction->setIcon(getIcon("help")); + menuBookmarks->menuAction()->setIcon(getIcon("bookmark_folder")); + AddThisAsBookmarkAction->setIcon(getIcon("bookmark")); + AddBookmarkAction->setIcon(getIcon("bookmark_add")); + ManageBookmarksAction->setIcon(getIcon("bookmark_edit")); SysTray->setIcon(getIcon("keepassx_large")); if(config->showSysTrayIcon()) SysTray->show(); @@ -350,6 +341,7 @@ void KeepassMainWindow::setupMenus(){ #endif ExtrasTrashCanAction->setVisible(false); //For KP 2.x only + menuBookmarks->menuAction()->setVisible(config->featureBookmarks()); } void KeepassMainWindow::setupDatabaseConnections(IDatabase* DB){ @@ -367,12 +359,14 @@ void KeepassMainWindow::openDatabase(QString filename,bool IsAuto){ config->setLastKeyLocation(QString()); config->setLastKeyType(PASSWORD);} db=dynamic_cast(new Kdb3Database()); - CPasswordDialog PasswordDlg(this,db,IsAuto,false); - PasswordDlg.setWindowTitle(filename); + CPasswordDialog PasswordDlg(this,filename,db,IsAuto,false); switch(PasswordDlg.exec()){ case 0: return; case 2: Start=false; return; } + if(PasswordDlg.BookmarkFilename!=QString()) + filename=PasswordDlg.BookmarkFilename; + GroupView->db=db; EntryView->db=db; setupDatabaseConnections(db); @@ -432,7 +426,7 @@ bool KeepassMainWindow::closeDatabase(){ void KeepassMainWindow::OnFileNewKdb(){ IDatabase* db_new=dynamic_cast(new Kdb3Database()); db_new->create(); - CPasswordDialog dlg(this,db_new,false,true); + CPasswordDialog dlg(this,QString(),db_new,false,true); dlg.setWindowTitle(tr("New Database")); if(dlg.exec()==1){ if(FileOpen) @@ -495,6 +489,7 @@ EntryView->setEnabled(IsOpen); DetailView->setEnabled(IsOpen); QuickSearchEdit->setEnabled(IsOpen); ExtrasShowExpiredEntriesAction->setEnabled(IsOpen); +AddThisAsBookmarkAction->setEnabled(IsOpen); if(!IsOpen){ EditNewGroupAction->setEnabled(false); @@ -756,7 +751,7 @@ if(dlg.exec())setStateFileModified(true); } void KeepassMainWindow::OnFileChangeKey(){ - CPasswordDialog dlg(this,db,false,true); + CPasswordDialog dlg(this,QString(),db,false,true); if(dlg.exec()) setStateFileModified(true); } @@ -777,7 +772,7 @@ void KeepassMainWindow::OnImport(QAction* action){ IDatabase* tmpdb=dynamic_cast(new Kdb3Database()); tmpdb->create(); if(dynamic_cast(action->data().value())->importDatabase(this,tmpdb)){ - CPasswordDialog dlg(this,tmpdb,false,true); + CPasswordDialog dlg(this,QString(),tmpdb,false,true); dlg.setWindowTitle(tr("Set Master Key")); if(!dlg.exec()){ delete tmpdb; @@ -890,6 +885,7 @@ void KeepassMainWindow::OnExtrasSettings(){ if(dlg.exec()==QDialog::Accepted){ EntryView->setAlternatingRowColors(config->alternatingRowColors()); SysTray->setVisible(config->showSysTrayIcon()); + menuBookmarks->menuAction()->setVisible(config->featureBookmarks()); } } @@ -1029,3 +1025,55 @@ void KeepassMainWindow::OnUnLockWorkspace(){ IsLocked=true; } } + +void KeepassMainWindow::OnBookmarkTriggered(QAction* action){ + if(action==AddBookmarkAction){ + AddBookmarkDlg dlg(this); + if(dlg.exec()){ + int id=dlg.ItemID; + QAction* action=new QAction(this); + action->setData(id); + action->setText(KpxBookmarks::title(id)); + action->setIcon(getIcon("document")); + menuBookmarks->addAction(action); + } + return; + } + + if(action==ManageBookmarksAction){ + ManageBookmarksDlg dlg(this); + dlg.exec(); + menuBookmarks->clear(); + createBookmarkActions(); + return; + } + + if(action==AddThisAsBookmarkAction){ + AddBookmarkDlg dlg(this,db->file()->fileName()); + if(dlg.exec()){ + int id=dlg.ItemID; + QAction* action=new QAction(this); + action->setData(id); + action->setText(KpxBookmarks::title(id)); + action->setIcon(getIcon("document")); + menuBookmarks->addAction(action); + } + return; + } + openDatabase(KpxBookmarks::path(action->data().toInt())); + +} + +void KeepassMainWindow::createBookmarkActions(){ + menuBookmarks->addAction(AddBookmarkAction); + menuBookmarks->addAction(AddThisAsBookmarkAction); + menuBookmarks->addAction(ManageBookmarksAction); + menuBookmarks->addSeparator(); + for(int i=0;isetData(i); + action->setText(KpxBookmarks::title(i)); + action->setIcon(getIcon("document")); + menuBookmarks->addAction(action); + } +} diff --git a/src/mainwindow.h b/src/mainwindow.h index 8666ffb..9c687da 100755 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -69,6 +69,7 @@ class KeepassMainWindow : public QMainWindow, public Ui_MainWindow{ void OnFileSettings(); void OnFileChangeKey(); void OnFileExit(); + void OnBookmarkTriggered(QAction* action); void OnSearch(); void OnGroupSearch(); void OnViewShowToolbar(bool); @@ -120,6 +121,7 @@ class KeepassMainWindow : public QMainWindow, public Ui_MainWindow{ void updateDetailView(); void exportDatabase(IExport* exporter,QStringList filters); void saveLastFilename(const QString& filename); + void createBookmarkActions(); QLineEdit* QuickSearchEdit; QLabel* StatusBarGeneral; QLabel* StatusBarSelection; diff --git a/src/src.pro b/src/src.pro index 27ccdac..8f70b6b 100755 --- a/src/src.pro +++ b/src/src.pro @@ -14,20 +14,24 @@ INSTALLS += target data data.files += ../share/keepass/* TARGET = ../bin/keepassx -unix: !macx{ +isEmpty(PREFIX){ + PREFIX = /usr +} + +unix : !macx { target.path = $${PREFIX}/bin data.path = $${PREFIX}/share/keepass LIBS += -lXtst -lQtDBus SOURCES += lib/AutoType_X11.cpp } -macx{ +macx { target.path = /Applications data.path = /Applications/keepass.app/Contents/share/keepass SOURCES += lib/AutoType_X11.cpp } -win32{ +win32 { SOURCES += lib/AutoType_Win.cpp TARGET = ../$$TARGET QMAKE_LINK_OBJECT_SCRIPT = ../build/$$QMAKE_LINK_OBJECT_SCRIPT @@ -50,7 +54,9 @@ FORMS += forms/EditGroupDlg.ui \ forms/CalendarDlg.ui \ forms/TrashCanDlg.ui \ forms/ExpiredEntriesDlg.ui \ - forms/WorkspaceLockedWidget.ui + forms/WorkspaceLockedWidget.ui \ + forms/AddBookmarkDlg.ui \ + forms/ManageBookmarksDlg.ui TRANSLATIONS += translations/keepass-de_DE.ts \ translations/keepass-ru_RU.ts \ translations/keepass-es_ES.ts \ @@ -113,7 +119,10 @@ HEADERS += lib/IniReader.h \ plugins/interfaces/IGnomeInit.h \ plugins/interfaces/IIconTheme.h \ KpxConfig.h \ - KpxFirefox.h + KpxFirefox.h \ + dialogs/AddBookmarkDlg.h \ + lib/bookmarks.h \ + dialogs/ManageBookmarksDlg.h SOURCES += lib/UrlLabel.cpp \ main.cpp \ mainwindow.cpp \ @@ -161,7 +170,10 @@ SOURCES += lib/UrlLabel.cpp \ crypto/yarrow.cpp \ lib/WaitAnimationWidget.cpp \ KpxConfig.cpp \ - KpxFirefox.cpp + KpxFirefox.cpp \ + dialogs/AddBookmarkDlg.cpp \ + lib/bookmarks.cpp \ +dialogs/ManageBookmarksDlg.cpp RESOURCES += res/resources.qrc MOC_DIR = ../build/moc UI_DIR = ../build/ui @@ -171,9 +183,8 @@ CONFIG += debug \ qt \ thread \ warn_off \ -dbus \ assistant -QT += dbus xml +QT += xml TEMPLATE = app INCLUDEPATH += . \ lib \