Drag&Drop for Entries, some other UI work

git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@53 b624d157-de02-0410-bad0-e51aec6abb33
master
tariq 19 years ago
parent 60d342201d
commit 853747bce1
  1. BIN
      share/keepass/icons/nuvola/32x32/actions/help.png
  2. 6
      src/PwManager.cpp
  3. 1
      src/PwManager.h
  4. 4
      src/PwmConfig.cpp
  5. 2
      src/PwmConfig.h
  6. 5
      src/crypto/twofish.cpp
  7. 2
      src/dialogs/AboutDlg.cpp
  8. 8
      src/dialogs/EditEntryDlg.cpp
  9. 21
      src/dialogs/PasswordDlg.cpp
  10. 12
      src/dialogs/PasswordDlg.h
  11. 2
      src/dialogs/SettingsDlg.cpp
  12. 8
      src/dialogs/SimplePasswordDlg.cpp
  13. 2
      src/dialogs/SimplePasswordDlg.h
  14. 4
      src/forms/AboutDlg.ui
  15. 86
      src/forms/MainWindow.ui
  16. 7
      src/forms/PasswordDlg.ui
  17. 859
      src/forms/SettingsDlg.ui
  18. 80
      src/lib/EntryView.cpp
  19. 9
      src/lib/EntryView.h
  20. 124
      src/lib/GroupView.cpp
  21. 2
      src/lib/GroupView.h
  22. 85
      src/main.cpp
  23. 2
      src/main.h
  24. 115
      src/mainwindow.cpp
  25. 5
      src/mainwindow.h
  26. 6
      src/src.pro
  27. 413
      src/translations/keepass-de_DE.ts
  28. 1489
      src/translations/keepass-ru_RU.ts
  29. 348
      src/translations/keepass-xx_XX.ts

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -1,6 +1,6 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2005 by Tarek Saidi * * Copyright (C) 2005-2006 by Tarek Saidi *
* tarek@linux * * tarek.saidi@arcor.de *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -148,7 +148,7 @@ sha256_finish(&sha32,(unsigned char *)FinalKey);
if(memcmp(ContentsHash, FinalKey, 32) != 0) if(memcmp(ContentsHash, FinalKey, 32) != 0)
{ {
err=tr("Hash test failed.\nThe key is wrong or the file is damaged"); err=tr("Hash test failed.\nThe key is wrong or the file is damaged.");
return false;} return false;}

@ -75,7 +75,6 @@ public:
QString getErrors(); //get all errors in a \n seperated String QString getErrors(); //get all errors in a \n seperated String
private: private:
bool IsMetaStream(CEntry& Entry); bool IsMetaStream(CEntry& Entry);
bool parseMetaStream(const CEntry& Entry); bool parseMetaStream(const CEntry& Entry);

@ -52,6 +52,8 @@ MainWinWidth=ini.GetValueI("UI","MainWinWidth",900);
MainWinSplit1=ini.GetValueI("UI","MainWinSplit1",100); MainWinSplit1=ini.GetValueI("UI","MainWinSplit1",100);
MainWinSplit2=ini.GetValueI("UI","MainWinSplit2",300); MainWinSplit2=ini.GetValueI("UI","MainWinSplit2",300);
ParseIntString(ini.GetValue("UI","ColumnSizes","15,10,10,10,10,10,10,10,10,10").c_str(),ColumnSizes,10); ParseIntString(ini.GetValue("UI","ColumnSizes","15,10,10,10,10,10,10,10,10,10").c_str(),ColumnSizes,10);
ShowStatusbar=ini.GetValueB("UI","ShowStatusbar",true);
AlternatingRowColors=ini.GetValueB("Options","AlternatingRowColors",true);
return true; return true;
} }
@ -81,6 +83,8 @@ ini.SetValueI("UI","MainWinWidth",MainWinWidth);
ini.SetValueI("UI","MainWinSplit1",MainWinSplit1); ini.SetValueI("UI","MainWinSplit1",MainWinSplit1);
ini.SetValueI("UI","MainWinSplit2",MainWinSplit2); ini.SetValueI("UI","MainWinSplit2",MainWinSplit2);
ini.SetValue("UI","ColumnSizes",(const char*)CreateIntString(ColumnSizes,10),true); ini.SetValue("UI","ColumnSizes",(const char*)CreateIntString(ColumnSizes,10),true);
ini.SetValueB("UI","ShowStatusbar",ShowStatusbar);
ini.SetValueB("Options","AlternatingRowColors",AlternatingRowColors);
if(!ini.WriteFile())return false; if(!ini.WriteFile())return false;
else return true; else return true;
} }

@ -51,6 +51,8 @@ public:
int MainWinSplit1; int MainWinSplit1;
int MainWinSplit2; int MainWinSplit2;
int ColumnSizes[10]; int ColumnSizes[10];
bool ShowStatusbar;
bool AlternatingRowColors;
bool loadFromIni(QString filename); bool loadFromIni(QString filename);
bool saveToIni(QString filename); bool saveToIni(QString filename);

@ -474,9 +474,10 @@
#endif #endif
#include <qmessagebox.h>
void Twofish_fatal(char* msg){ void Twofish_fatal(char* msg){
QMessageBox::critical(0,"Interner Fehler",msg,"OK","Cancel",0,2,1); qCritical("Twofish: Fatal Error");
exit(1);
} }

@ -55,7 +55,7 @@ return;
} }
if(!gpl.open(QIODevice::ReadOnly)){ if(!gpl.open(QIODevice::ReadOnly)){
QMessageBox::critical(this,tr("Fehler"),tr("Could not open file '%1'") QMessageBox::critical(this,tr("Error"),tr("Could not open file '%1'")
.arg("'license.txt'")+tr("The following error occured:\n%1").arg(gpl.errorString()) .arg("'license.txt'")+tr("The following error occured:\n%1").arg(gpl.errorString())
,tr("OK"),0,0,2,1); ,tr("OK"),0,0,2,1);
return; return;

@ -1,6 +1,6 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2005 by Tarek Saidi * * Copyright (C) 2005-2006 by Tarek Saidi *
* tarek@linux * * tarek.saidi@arcor.de *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -51,7 +51,7 @@ Q_ASSERT(_entry);
entry=_entry; entry=_entry;
db=_db; db=_db;
setupUi(this); setupUi(this);
createBanner(Banner,Icon_Key32x32,tr("Eintrag bearbeiten")); createBanner(Banner,Icon_Key32x32,tr("Edit Entry"));
ModFlag=false; ModFlag=false;
connect(Edit_Password_w, SIGNAL(editingFinished()), this, SLOT(OnPasswordwLostFocus())); connect(Edit_Password_w, SIGNAL(editingFinished()), this, SLOT(OnPasswordwLostFocus()));
connect(Edit_Password_w, SIGNAL(textChanged(const QString&)), this, SLOT( OnPasswordwTextChanged(const QString&))); connect(Edit_Password_w, SIGNAL(textChanged(const QString&)), this, SLOT( OnPasswordwTextChanged(const QString&)));
@ -257,7 +257,7 @@ if(filename=="")return;
QFile file(filename); QFile file(filename);
if(file.open(QIODevice::ReadOnly)==false){ if(file.open(QIODevice::ReadOnly)==false){
file.close(); file.close();
QMessageBox::warning(NULL,tr("Fehler"),tr("Datei konnte nicht geöffnet werden."),"OK"); QMessageBox::warning(NULL,tr("Error"),tr("Could not open file."),tr("OK"));
return; return;
} }
ModFlag=true; ModFlag=true;

@ -33,12 +33,13 @@
CPasswordDialog::CPasswordDialog(QWidget* parent, const char* name, bool modal, Qt::WFlags fl) CPasswordDialog::CPasswordDialog(QWidget* parent, const char* name, bool modal, bool ShowExitButton, Qt::WFlags fl)
: QDialog(parent,name, modal,fl) : QDialog(parent,name, modal,fl)
{ {
setupUi(this); setupUi(this);
createBanner(Banner,Icon_Key32x32,tr("Datenbank öffnen")); ButtonExit->setVisible(ShowExitButton);
Label_select=new LinkLabel((QWidget*)groupframe,"Select",tr("Datei manuell wählen..."),410,100); createBanner(Banner,Icon_Key32x32,tr("Open Database"));
Label_select=new LinkLabel((QWidget*)groupframe,"Select",tr("Select File Manually..."),410,100);
connect( Combo_Dirs, SIGNAL( activated(int) ), this, SLOT( OnComboSelectionChanged(int) ) ); connect( Combo_Dirs, SIGNAL( activated(int) ), this, SLOT( OnComboSelectionChanged(int) ) );
connect( ButtonBrowse, SIGNAL( clicked() ), this, SLOT( OnButtonBrowse() ) ); connect( ButtonBrowse, SIGNAL( clicked() ), this, SLOT( OnButtonBrowse() ) );
connect( ButtonOK, SIGNAL( clicked() ), this, SLOT( OnOK() ) ); connect( ButtonOK, SIGNAL( clicked() ), this, SLOT( OnOK() ) );
@ -47,7 +48,7 @@ connect( Edit_Password, SIGNAL( textChanged(const QString&) ), this, SLOT( OnPas
connect( CheckBox_Both, SIGNAL( stateChanged(int) ), this, SLOT( OnCheckBox_BothChanged(int) ) ); connect( CheckBox_Both, SIGNAL( stateChanged(int) ), this, SLOT( OnCheckBox_BothChanged(int) ) );
connect( ButtonChangeEchoMode, SIGNAL( clicked() ), this, SLOT( ChangeEchoMode() ) ); connect( ButtonChangeEchoMode, SIGNAL( clicked() ), this, SLOT( ChangeEchoMode() ) );
connect( Edit_Password, SIGNAL( returnPressed() ), this, SLOT( OnOK() ) ); connect( Edit_Password, SIGNAL( returnPressed() ), this, SLOT( OnOK() ) );
connect( ButtonExit, SIGNAL( clicked()),this,SLOT(OnButtonExit()));
QDir media("/media"); QDir media("/media");
if(media.exists()){ if(media.exists()){
@ -58,7 +59,7 @@ Paths.erase(Paths.begin()); // delete ".."
for(int i=0;i<Paths.count();i++){ for(int i=0;i<Paths.count();i++){
Paths[i]="/media/"+Paths[i]; Paths[i]="/media/"+Paths[i];
} }
Paths.prepend(tr("< keiner >")); Paths.prepend(tr("< none >"));
} }
for(int i=0;i<Paths.count();i++){ for(int i=0;i<Paths.count();i++){
Combo_Dirs->insertItem(0,Paths[i]); Combo_Dirs->insertItem(0,Paths[i]);
@ -208,11 +209,7 @@ Edit_Password->setEchoMode(QLineEdit::Normal);
} }
void CPasswordDialog::OnButtonExit(){
done(2);
}
/*$SPECIALIZATION$*/
//#include "passworddialog.moc"

@ -44,26 +44,20 @@ QString password;
public: public:
CPasswordDialog(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 ); CPasswordDialog(QWidget* parent = 0, const char* name = 0, bool modal = false,
bool ShowExitButton = false, Qt::WFlags fl = 0 );
~CPasswordDialog(); ~CPasswordDialog();
/*$PUBLIC_FUNCTIONS$*/
public slots: public slots:
/*$PUBLIC_SLOTS$*/
virtual void OnOK(); virtual void OnOK();
virtual void OnCancel(); virtual void OnCancel();
virtual void OnSelectClicked(); virtual void OnSelectClicked();
virtual void OnButtonBrowse(); virtual void OnButtonBrowse();
virtual void OnButtonExit();
virtual void OnComboSelectionChanged(int); virtual void OnComboSelectionChanged(int);
virtual void OnPasswordChanged(const QString &txt); virtual void OnPasswordChanged(const QString &txt);
virtual void OnCheckBox_BothChanged(int state); virtual void OnCheckBox_BothChanged(int state);
virtual void ChangeEchoMode(); virtual void ChangeEchoMode();
protected:
/*$PROTECTED_FUNCTIONS$*/
protected slots:
/*$PROTECTED_SLOTS$*/
}; };

@ -61,6 +61,7 @@ textcolor=config.BannerTextColor;
CheckBox_ShowPasswords->setChecked(config.ShowPasswords); CheckBox_ShowPasswords->setChecked(config.ShowPasswords);
Edit_BrowserCmd->setText(config.OpenUrlCommand); Edit_BrowserCmd->setText(config.OpenUrlCommand);
CheckBox_ExpandGroupTree->setChecked(config.ExpandGroupTree); CheckBox_ExpandGroupTree->setChecked(config.ExpandGroupTree);
CheckBox_AlternatingRowColors->setChecked(config.AlternatingRowColors);
} }
@ -78,6 +79,7 @@ config.BannerTextColor=textcolor;
config.ShowPasswords=CheckBox_ShowPasswords->isChecked(); config.ShowPasswords=CheckBox_ShowPasswords->isChecked();
config.OpenUrlCommand=Edit_BrowserCmd->text(); config.OpenUrlCommand=Edit_BrowserCmd->text();
config.ExpandGroupTree=CheckBox_ExpandGroupTree->isChecked(); config.ExpandGroupTree=CheckBox_ExpandGroupTree->isChecked();
config.AlternatingRowColors=CheckBox_AlternatingRowColors->isChecked();
close(); close();
} }

@ -18,16 +18,16 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/ ***************************************************************************/
#include "SimplePasswordDlg.h"
#include <qlineedit.h> #include <qlineedit.h>
#include <qpushbutton.h> #include <qpushbutton.h>
#include "main.h"
#include "SimplePasswordDlg.h"
CSimplePasswordDialog::CSimplePasswordDialog(bool HidePw,QWidget* parent, const char* name, bool modal, Qt::WFlags fl) CSimplePasswordDialog::CSimplePasswordDialog(QWidget* parent, const char* name, bool modal, Qt::WFlags fl)
: QDialog(parent,name, modal,fl) : QDialog(parent,name, modal,fl)
{ {
setupUi(this); setupUi(this);
if(HidePw)Button_HidePassword->toggle(); if(!config.ShowPasswords)Button_HidePassword->toggle();
} }
CSimplePasswordDialog::~CSimplePasswordDialog() CSimplePasswordDialog::~CSimplePasswordDialog()

@ -28,7 +28,7 @@ class CSimplePasswordDialog : public QDialog, public Ui_SimplePasswordDialog
Q_OBJECT Q_OBJECT
public: public:
CSimplePasswordDialog(bool HidePw,QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 ); CSimplePasswordDialog(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 );
~CSimplePasswordDialog(); ~CSimplePasswordDialog();
/*$PUBLIC_FUNCTIONS$*/ /*$PUBLIC_FUNCTIONS$*/

@ -131,13 +131,13 @@
</rect> </rect>
</property> </property>
<property name="html" > <property name="html" >
<string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;/head>&lt;body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Mattias Miller&lt;/span> (www.outofhanwell.com)&lt;/p>&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> Mac OS X Support&lt;/p>&lt;/body>&lt;/html></string> <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;/head>&lt;body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>&lt;/body>&lt;/html></string>
</property> </property>
</widget> </widget>
</widget> </widget>
<widget class="QWidget" name="tab_4" > <widget class="QWidget" name="tab_4" >
<attribute name="title" > <attribute name="title" >
<string>Übersetzung</string> <string>Translation</string>
</attribute> </attribute>
<widget class="QTextEdit" name="Edit_Translation" > <widget class="QTextEdit" name="Edit_Translation" >
<property name="geometry" > <property name="geometry" >

@ -114,31 +114,6 @@
<height>29</height> <height>29</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuDatei" >
<property name="title" >
<string>File</string>
</property>
<widget class="QMenu" name="menuImportieren_aus" >
<property name="title" >
<string>Import from...</string>
</property>
<addaction name="FileImpPwmAction" />
<addaction name="FileImpKWalletXmlAction" />
</widget>
<addaction name="FileNewAction" />
<addaction name="FileOpenAction" />
<addaction name="FileCloseAction" />
<addaction name="separator" />
<addaction name="FileSaveAction" />
<addaction name="FileSaveAsAction" />
<addaction name="separator" />
<addaction name="FileSettingsAction" />
<addaction name="FileChangeKeyAction" />
<addaction name="separator" />
<addaction name="menuImportieren_aus" />
<addaction name="separator" />
<addaction name="FileExitAction" />
</widget>
<widget class="QMenu" name="menuBearbeiten" > <widget class="QMenu" name="menuBearbeiten" >
<property name="title" > <property name="title" >
<string>Edit</string> <string>Edit</string>
@ -182,12 +157,45 @@
</widget> </widget>
<addaction name="ViewShowToolbarAction" /> <addaction name="ViewShowToolbarAction" />
<addaction name="ViewShowEntryDetailsAction" /> <addaction name="ViewShowEntryDetailsAction" />
<addaction name="ViewShowStatusbarAction" />
<addaction name="separator" /> <addaction name="separator" />
<addaction name="ViewHideUsernamesAction" /> <addaction name="ViewHideUsernamesAction" />
<addaction name="ViewHidePasswordsAction" /> <addaction name="ViewHidePasswordsAction" />
<addaction name="separator" /> <addaction name="separator" />
<addaction name="menuSpalten" /> <addaction name="menuSpalten" />
</widget> </widget>
<widget class="QMenu" name="menuDatei" >
<property name="title" >
<string>File</string>
</property>
<widget class="QMenu" name="menuImportieren_aus" >
<property name="title" >
<string>Import from...</string>
</property>
<addaction name="FileImpPwmAction" />
<addaction name="FileImpKWalletXmlAction" />
</widget>
<widget class="QMenu" name="menuExport_to" >
<property name="title" >
<string>Export to...</string>
</property>
<addaction name="FileExpPlainTextAction" />
</widget>
<addaction name="FileNewAction" />
<addaction name="FileOpenAction" />
<addaction name="FileCloseAction" />
<addaction name="separator" />
<addaction name="FileSaveAction" />
<addaction name="FileSaveAsAction" />
<addaction name="separator" />
<addaction name="FileSettingsAction" />
<addaction name="FileChangeKeyAction" />
<addaction name="separator" />
<addaction name="menuImportieren_aus" />
<addaction name="menuExport_to" />
<addaction name="separator" />
<addaction name="FileExitAction" />
</widget>
<widget class="QMenu" name="menuExtras" > <widget class="QMenu" name="menuExtras" >
<property name="title" > <property name="title" >
<string>Extras</string> <string>Extras</string>
@ -198,6 +206,8 @@
<property name="title" > <property name="title" >
<string>Help</string> <string>Help</string>
</property> </property>
<addaction name="HelpHandbookAction" />
<addaction name="separator" />
<addaction name="HelpAboutAction" /> <addaction name="HelpAboutAction" />
</widget> </widget>
<addaction name="menuDatei" /> <addaction name="menuDatei" />
@ -477,20 +487,38 @@
<string>About...</string> <string>About...</string>
</property> </property>
</action> </action>
<action name="ViewShowStatusbarAction" >
<property name="checkable" >
<bool>true</bool>
</property>
<property name="text" >
<string>Show Statusbar</string>
</property>
</action>
<action name="HelpHandbookAction" >
<property name="text" >
<string>KeePassX Handbook...</string>
</property>
</action>
<action name="FileExpPlainTextAction" >
<property name="text" >
<string>Plain Text (*.txt)</string>
</property>
</action>
</widget> </widget>
<pixmapfunction></pixmapfunction> <pixmapfunction></pixmapfunction>
<customwidgets> <customwidgets>
<customwidget> <customwidget>
<class>KeepassEntryView</class> <class>KeepassGroupView</class>
<extends>QTreeWidget</extends> <extends>QTreeWidget</extends>
<header>../../src/lib/EntryView.h</header> <header>../../src/lib/GroupView.h</header>
<container>0</container> <container>0</container>
<pixmap></pixmap> <pixmap></pixmap>
</customwidget> </customwidget>
<customwidget> <customwidget>
<class>KeepassGroupView</class> <class>KeepassEntryView</class>
<extends>QTreeWidget</extends> <extends>QTreeWidget</extends>
<header>../../src/lib/GroupView.h</header> <header>../../src/lib/EntryView.h</header>
<container>0</container> <container>0</container>
<pixmap></pixmap> <pixmap></pixmap>
</customwidget> </customwidget>

@ -105,6 +105,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QPushButton" name="ButtonExit" >
<property name="text" >
<string>Exit</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QLabel" name="textLabel1" > <widget class="QLabel" name="textLabel1" >

@ -1,384 +1,523 @@
<ui version="4.0" > <ui version="4.0" >
<author/> <author></author>
<comment/> <comment></comment>
<exportmacro/> <exportmacro></exportmacro>
<class>SettingsDialog</class> <class>SettingsDialog</class>
<widget class="QDialog" name="SettingsDialog" > <widget class="QDialog" name="SettingsDialog" >
<property name="geometry" > <property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>571</width>
<height>341</height>
</rect>
</property>
<property name="minimumSize" >
<size>
<width>571</width>
<height>341</height>
</size>
</property>
<property name="maximumSize" >
<size>
<width>571</width>
<height>341</height>
</size>
</property>
<property name="windowTitle" >
<string>Settings</string>
</property>
<widget class="QPushButton" name="ButtonCancel" >
<property name="geometry" >
<rect>
<x>470</x>
<y>310</y>
<width>90</width>
<height>23</height>
</rect>
</property>
<property name="text" >
<string>&amp;Cancel</string>
</property>
<property name="shortcut" >
<string>Alt+C</string>
</property>
</widget>
<widget class="QLabel" name="Banner" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>570</width>
<height>50</height>
</rect>
</property>
<property name="pixmap" >
<pixmap/>
</property>
<property name="scaledContents" >
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="ButtonOK" >
<property name="geometry" >
<rect>
<x>380</x>
<y>310</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="text" >
<string>O&amp;K</string>
</property>
<property name="shortcut" >
<string>Alt+K</string>
</property>
</widget>
<widget class="QTabWidget" name="tabWidget4" >
<property name="geometry" >
<rect>
<x>10</x>
<y>60</y>
<width>550</width>
<height>241</height>
</rect>
</property>
<widget class="QWidget" name="tab" >
<attribute name="title" >
<string>Securi&amp;try</string>
</attribute>
<widget class="QWidget" name="widget" >
<property name="geometry" >
<rect> <rect>
<x>0</x> <x>10</x>
<y>0</y> <y>20</y>
<width>571</width> <width>531</width>
<height>341</height> <height>25</height>
</rect> </rect>
</property> </property>
<property name="minimumSize" > <layout class="QHBoxLayout" >
<size> <property name="margin" >
<width>571</width> <number>0</number>
<height>341</height>
</size>
</property>
<property name="maximumSize" >
<size>
<width>571</width>
<height>341</height>
</size>
</property>
<property name="windowTitle" >
<string>Settings</string>
</property>
<widget class="QLabel" name="Banner" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>570</width>
<height>50</height>
</rect>
</property> </property>
<property name="pixmap" > <property name="spacing" >
<pixmap/> <number>6</number>
</property>
<property name="scaledContents" >
<bool>true</bool>
</property> </property>
<item>
<widget class="QLabel" name="textLabel1" >
<property name="sizePolicy" >
<sizepolicy>
<hsizetype>4</hsizetype>
<vsizetype>5</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string>Clear clipboard after:</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="SpinBox_ClipboardTime" >
<property name="sizePolicy" >
<sizepolicy>
<hsizetype>5</hsizetype>
<vsizetype>0</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize" >
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
<property name="maximum" >
<number>50000</number>
</property>
<property name="value" >
<number>2</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="textLabel2" >
<property name="text" >
<string>Seconds</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QCheckBox" name="CheckBox_ShowPasswords" >
<property name="geometry" >
<rect>
<x>10</x>
<y>50</y>
<width>531</width>
<height>20</height>
</rect>
</property>
<property name="text" >
<string>Sh&amp;ow passwords in plain text by default</string>
</property>
<property name="shortcut" >
<string>Alt+O</string>
</property>
</widget> </widget>
<widget class="QTabWidget" name="tabWidget4" > </widget>
<widget class="QWidget" name="TabPage" >
<attribute name="title" >
<string>Appea&amp;rance</string>
</attribute>
<widget class="Q3GroupBox" name="groupBox1" >
<property name="geometry" >
<rect>
<x>20</x>
<y>10</y>
<width>520</width>
<height>90</height>
</rect>
</property>
<property name="title" >
<string>Banner Color</string>
</property>
<widget class="QWidget" name="widget" >
<property name="geometry" > <property name="geometry" >
<rect> <rect>
<x>10</x> <x>11</x>
<y>60</y> <y>20</y>
<width>550</width> <width>501</width>
<height>241</height> <height>62</height>
</rect> </rect>
</property> </property>
<widget class="QWidget" name="tab" > <layout class="QGridLayout" >
<attribute name="title" > <property name="margin" >
<string>Securi&amp;try</string> <number>0</number>
</attribute> </property>
<widget class="QLabel" name="textLabel1" > <property name="spacing" >
<property name="geometry" > <number>6</number>
<rect> </property>
<x>10</x> <item row="1" column="0" >
<y>20</y> <widget class="QLabel" name="textLabel2_2" >
<width>231</width> <property name="text" >
<height>20</height> <string>Text Color:</string>
</rect> </property>
</property>
<property name="text" >
<string>Clear clipboard after:</string>
</property>
</widget> </widget>
<widget class="QSpinBox" name="SpinBox_ClipboardTime" > </item>
<property name="geometry" > <item row="0" column="3" >
<rect> <spacer>
<x>250</x> <property name="orientation" >
<y>20</y> <enum>Qt::Horizontal</enum>
<width>80</width> </property>
<height>20</height> <property name="sizeType" >
</rect> <enum>QSizePolicy::Fixed</enum>
</property> </property>
<property name="sizeHint" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="2" >
<widget class="QPushButton" name="ButtonTextColor" >
<property name="sizePolicy" >
<sizepolicy>
<hsizetype>4</hsizetype>
<vsizetype>0</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string>Change...</string>
</property>
<property name="shortcut" >
<string/>
</property>
</widget> </widget>
<widget class="QLabel" name="textLabel2" > </item>
<property name="geometry" > <item row="0" column="4" >
<rect> <widget class="QLabel" name="textLabel3" >
<x>340</x> <property name="sizePolicy" >
<y>20</y> <sizepolicy>
<width>100</width> <hsizetype>4</hsizetype>
<height>20</height> <vsizetype>5</vsizetype>
</rect> <horstretch>0</horstretch>
</property> <verstretch>0</verstretch>
<property name="text" > </sizepolicy>
<string>Seconds</string> </property>
</property> <property name="text" >
<string>Color 2:</string>
</property>
</widget> </widget>
<widget class="QCheckBox" name="CheckBox_ShowPasswords" > </item>
<property name="geometry" > <item row="0" column="1" >
<rect> <widget class="QLabel" name="pixmColor1" >
<x>10</x> <property name="sizePolicy" >
<y>50</y> <sizepolicy>
<width>420</width> <hsizetype>4</hsizetype>
<height>20</height> <vsizetype>0</vsizetype>
</rect> <horstretch>0</horstretch>
</property> <verstretch>0</verstretch>
<property name="text" > </sizepolicy>
<string>Sh&amp;ow passwords in plain text by default</string> </property>
</property> <property name="minimumSize" >
<property name="shortcut" > <size>
<string>Alt+O</string> <width>23</width>
</property> <height>23</height>
</size>
</property>
<property name="maximumSize" >
<size>
<width>23</width>
<height>23</height>
</size>
</property>
<property name="text" >
<string/>
</property>
</widget> </widget>
</widget> </item>
<widget class="QWidget" name="TabPage" > <item row="1" column="1" >
<attribute name="title" > <widget class="QLabel" name="pixmTextColor" >
<string>Appea&amp;rance</string> <property name="sizePolicy" >
</attribute> <sizepolicy>
<widget class="Q3GroupBox" name="groupBox1" > <hsizetype>4</hsizetype>
<property name="geometry" > <vsizetype>0</vsizetype>
<rect> <horstretch>0</horstretch>
<x>10</x> <verstretch>0</verstretch>
<y>10</y> </sizepolicy>
<width>520</width> </property>
<height>90</height> <property name="minimumSize" >
</rect> <size>
</property> <width>23</width>
<property name="title" > <height>23</height>
<string>Banner Color</string> </size>
</property> </property>
<widget class="QLabel" name="textLabel1_3" > <property name="maximumSize" >
<property name="geometry" > <size>
<rect> <width>23</width>
<x>10</x> <height>23</height>
<y>20</y> </size>
<width>53</width> </property>
<height>20</height> <property name="pixmap" >
</rect> <pixmap/>
</property> </property>
<property name="text" > <property name="scaledContents" >
<string>Color 1</string> <bool>true</bool>
</property> </property>
</widget>
<widget class="QLabel" name="pixmColor1" >
<property name="geometry" >
<rect>
<x>70</x>
<y>20</y>
<width>22</width>
<height>22</height>
</rect>
</property>
<property name="pixmap" >
<pixmap/>
</property>
<property name="scaledContents" >
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="ButtonColor1" >
<property name="geometry" >
<rect>
<x>100</x>
<y>20</y>
<width>60</width>
<height>23</height>
</rect>
</property>
<property name="text" >
<string>C&amp;hange...</string>
</property>
<property name="shortcut" >
<string>Alt+H</string>
</property>
</widget>
<widget class="QLabel" name="textLabel3" >
<property name="geometry" >
<rect>
<x>190</x>
<y>20</y>
<width>60</width>
<height>20</height>
</rect>
</property>
<property name="text" >
<string>Color 2</string>
</property>
</widget>
<widget class="QLabel" name="pixmTextColor" >
<property name="geometry" >
<rect>
<x>70</x>
<y>50</y>
<width>22</width>
<height>22</height>
</rect>
</property>
<property name="pixmap" >
<pixmap/>
</property>
<property name="scaledContents" >
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="ButtonTextColor" >
<property name="geometry" >
<rect>
<x>100</x>
<y>50</y>
<width>60</width>
<height>23</height>
</rect>
</property>
<property name="text" >
<string>Change...</string>
</property>
<property name="shortcut" >
<string/>
</property>
</widget>
<widget class="QLabel" name="textLabel2_2" >
<property name="geometry" >
<rect>
<x>10</x>
<y>50</y>
<width>54</width>
<height>20</height>
</rect>
</property>
<property name="text" >
<string>Text Color</string>
</property>
</widget>
<widget class="QLabel" name="pixmColor2" >
<property name="geometry" >
<rect>
<x>250</x>
<y>20</y>
<width>22</width>
<height>22</height>
</rect>
</property>
<property name="pixmap" >
<pixmap/>
</property>
<property name="scaledContents" >
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="ButtonColor2" >
<property name="geometry" >
<rect>
<x>280</x>
<y>20</y>
<width>60</width>
<height>23</height>
</rect>
</property>
<property name="text" >
<string>Change...</string>
</property>
<property name="shortcut" >
<string/>
</property>
</widget>
</widget> </widget>
<widget class="QCheckBox" name="CheckBox_ExpandGroupTree" > </item>
<property name="geometry" > <item row="0" column="6" >
<rect> <widget class="QPushButton" name="ButtonColor2" >
<x>10</x> <property name="sizePolicy" >
<y>110</y> <sizepolicy>
<width>380</width> <hsizetype>4</hsizetype>
<height>20</height> <vsizetype>0</vsizetype>
</rect> <horstretch>0</horstretch>
</property> <verstretch>0</verstretch>
<property name="text" > </sizepolicy>
<string>Expand group tree when opening a database</string> </property>
</property> <property name="text" >
<property name="shortcut" > <string>Change...</string>
<string>Alt+Ö</string> </property>
</property> <property name="shortcut" >
<string/>
</property>
</widget> </widget>
</widget> </item>
<widget class="QWidget" name="tab" > <item row="0" column="5" >
<attribute name="title" > <widget class="QLabel" name="pixmColor2" >
<string>&amp;Other</string> <property name="sizePolicy" >
</attribute> <sizepolicy>
<widget class="QCheckBox" name="CheckBox_OpenLast" > <hsizetype>4</hsizetype>
<property name="geometry" > <vsizetype>0</vsizetype>
<rect> <horstretch>0</horstretch>
<x>10</x> <verstretch>0</verstretch>
<y>20</y> </sizepolicy>
<width>380</width> </property>
<height>20</height> <property name="minimumSize" >
</rect> <size>
</property> <width>23</width>
<property name="text" > <height>23</height>
<string>Remember last opend file</string> </size>
</property> </property>
<property name="shortcut" > <property name="maximumSize" >
<string>Alt+Ö</string> <size>
</property> <width>23</width>
<height>23</height>
</size>
</property>
<property name="pixmap" >
<pixmap/>
</property>
<property name="scaledContents" >
<bool>true</bool>
</property>
</widget> </widget>
<widget class="QLabel" name="textLabel1_4" > </item>
<property name="geometry" > <item row="0" column="2" >
<rect> <widget class="QPushButton" name="ButtonColor1" >
<x>10</x> <property name="sizePolicy" >
<y>50</y> <sizepolicy>
<width>110</width> <hsizetype>4</hsizetype>
<height>20</height> <vsizetype>0</vsizetype>
</rect> <horstretch>0</horstretch>
</property> <verstretch>0</verstretch>
<property name="text" > </sizepolicy>
<string>Browser Command:</string> </property>
</property> <property name="text" >
<string>C&amp;hange...</string>
</property>
<property name="shortcut" >
<string>Alt+H</string>
</property>
</widget> </widget>
<widget class="QLineEdit" name="Edit_BrowserCmd" > </item>
<property name="geometry" > <item row="0" column="0" >
<rect> <widget class="QLabel" name="textLabel1_3" >
<x>120</x> <property name="sizePolicy" >
<y>50</y> <sizepolicy>
<width>190</width> <hsizetype>4</hsizetype>
<height>21</height> <vsizetype>5</vsizetype>
</rect> <horstretch>0</horstretch>
</property> <verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string>Color 1:</string>
</property>
</widget> </widget>
</widget> </item>
<item row="0" column="7" >
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget> </widget>
<widget class="QPushButton" name="ButtonOK" > <widget class="QCheckBox" name="CheckBox_ExpandGroupTree" >
<property name="geometry" > <property name="geometry" >
<rect> <rect>
<x>380</x> <x>10</x>
<y>310</y> <y>110</y>
<width>80</width> <width>521</width>
<height>23</height> <height>20</height>
</rect> </rect>
</property> </property>
<property name="text" > <property name="text" >
<string>O&amp;K</string> <string>Expand group tree when opening a database</string>
</property> </property>
<property name="shortcut" > <property name="shortcut" >
<string>Alt+K</string> <string>Alt+Ö</string>
</property> </property>
</widget> </widget>
<widget class="QPushButton" name="ButtonCancel" > <widget class="QCheckBox" name="CheckBox_AlternatingRowColors" >
<property name="geometry" > <property name="geometry" >
<rect> <rect>
<x>470</x> <x>10</x>
<y>310</y> <y>130</y>
<width>90</width> <width>531</width>
<height>23</height> <height>22</height>
</rect> </rect>
</property> </property>
<property name="text" > <property name="text" >
<string>&amp;Cancel</string> <string>Alternating Row Colors</string>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab" >
<attribute name="title" >
<string>&amp;Other</string>
</attribute>
<widget class="QCheckBox" name="CheckBox_OpenLast" >
<property name="geometry" >
<rect>
<x>10</x>
<y>20</y>
<width>380</width>
<height>20</height>
</rect>
</property>
<property name="text" >
<string>Remember last opend file</string>
</property>
<property name="shortcut" >
<string>Alt+Ö</string>
</property>
</widget>
<widget class="QWidget" name="widget" >
<property name="geometry" >
<rect>
<x>10</x>
<y>50</y>
<width>531</width>
<height>25</height>
</rect>
</property>
<layout class="QHBoxLayout" >
<property name="margin" >
<number>0</number>
</property> </property>
<property name="shortcut" > <property name="spacing" >
<string>Alt+C</string> <number>6</number>
</property> </property>
<item>
<widget class="QLabel" name="textLabel1_4" >
<property name="text" >
<string>Browser Command:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="Edit_BrowserCmd" />
</item>
</layout>
</widget> </widget>
</widget>
</widget> </widget>
<layoutdefault spacing="6" margin="11" /> </widget>
<pixmapfunction/> <layoutdefault spacing="6" margin="11" />
<customwidgets> <pixmapfunction></pixmapfunction>
<customwidget> <customwidgets>
<class>Q3GroupBox</class> <customwidget>
<extends/> <class>Q3GroupBox</class>
<header>Qt3Support/Q3GroupBox</header> <extends></extends>
<container>1</container> <header>Qt3Support/Q3GroupBox</header>
<pixmap/> <container>1</container>
</customwidget> <pixmap></pixmap>
</customwidgets> </customwidget>
<tabstops> </customwidgets>
<tabstop>tabWidget4</tabstop> <tabstops>
<tabstop>SpinBox_ClipboardTime</tabstop> <tabstop>tabWidget4</tabstop>
<tabstop>CheckBox_ShowPasswords</tabstop> <tabstop>SpinBox_ClipboardTime</tabstop>
<tabstop>ButtonColor1</tabstop> <tabstop>CheckBox_ShowPasswords</tabstop>
<tabstop>ButtonTextColor</tabstop> <tabstop>ButtonColor1</tabstop>
<tabstop>ButtonColor2</tabstop> <tabstop>ButtonTextColor</tabstop>
<tabstop>CheckBox_OpenLast</tabstop> <tabstop>ButtonColor2</tabstop>
<tabstop>Edit_BrowserCmd</tabstop> <tabstop>CheckBox_OpenLast</tabstop>
<tabstop>ButtonOK</tabstop> <tabstop>Edit_BrowserCmd</tabstop>
<tabstop>ButtonCancel</tabstop> <tabstop>ButtonOK</tabstop>
</tabstops> <tabstop>ButtonCancel</tabstop>
<resources/> </tabstops>
<connections/> <resources/>
<connections/>
</ui> </ui>

@ -26,6 +26,8 @@
#include <QMouseEvent> #include <QMouseEvent>
#include <QHeaderView> #include <QHeaderView>
#include <QTime> #include <QTime>
#include <QApplication>
#include <QPainter>
#include "main.h" #include "main.h"
#include "EntryView.h" #include "EntryView.h"
@ -45,7 +47,7 @@ header()->setResizeMode(QHeaderView::Interactive);
header()->setStretchLastSection(false); header()->setStretchLastSection(false);
connect(header(),SIGNAL(sectionResized(int,int,int)),this,SLOT(OnColumnResized(int,int,int))); connect(header(),SIGNAL(sectionResized(int,int,int)),this,SLOT(OnColumnResized(int,int,int)));
ContextMenu=new QMenu(this); ContextMenu=new QMenu(this);
setAlternatingRowColors(config.AlternatingRowColors);
} }
KeepassEntryView::~KeepassEntryView(){ KeepassEntryView::~KeepassEntryView(){
@ -136,13 +138,13 @@ void KeepassEntryView::setEntry(CEntry* entry){
if(config.Columns[4]){ if(config.Columns[4]){
tmp->setText(j++,entry->Additional.section('\n',0,0));} tmp->setText(j++,entry->Additional.section('\n',0,0));}
if(config.Columns[5]){ if(config.Columns[5]){
tmp->setText(j++,entry->Expire.toString(DateTimeFormat));} tmp->setText(j++,entry->Expire.date().toString(Qt::LocalDate));}
if(config.Columns[6]){ if(config.Columns[6]){
tmp->setText(j++,entry->Creation.toString(DateTimeFormat));} tmp->setText(j++,entry->Creation.date().toString(Qt::LocalDate));}
if(config.Columns[7]){ if(config.Columns[7]){
tmp->setText(j++,entry->LastMod.toString(DateTimeFormat));} tmp->setText(j++,entry->LastMod.date().toString(Qt::LocalDate));}
if(config.Columns[8]){ if(config.Columns[8]){
tmp->setText(j++,entry->LastAccess.toString(DateTimeFormat));} tmp->setText(j++,entry->LastAccess.date().toString(Qt::LocalDate));}
if(config.Columns[9]){ if(config.Columns[9]){
tmp->setText(j++,entry->BinaryDesc);} tmp->setText(j++,entry->BinaryDesc);}
Items.back()->setIcon(0,EntryIcons[entry->ImageID]); Items.back()->setIcon(0,EntryIcons[entry->ImageID]);
@ -174,13 +176,13 @@ for(int i=0;i<Items.size();i++){
if(config.Columns[4]){ if(config.Columns[4]){
tmp->setText(j++,entry->Additional.section('\n',0,0));} tmp->setText(j++,entry->Additional.section('\n',0,0));}
if(config.Columns[5]){ if(config.Columns[5]){
tmp->setText(j++,entry->Expire.toString(DateTimeFormat));} tmp->setText(j++,entry->Expire.date().toString(Qt::LocalDate));}
if(config.Columns[6]){ if(config.Columns[6]){
tmp->setText(j++,entry->Creation.toString(DateTimeFormat));} tmp->setText(j++,entry->Creation.date().toString(Qt::LocalDate));}
if(config.Columns[7]){ if(config.Columns[7]){
tmp->setText(j++,entry->LastMod.toString(DateTimeFormat));} tmp->setText(j++,entry->LastMod.date().toString(Qt::LocalDate));}
if(config.Columns[8]){ if(config.Columns[8]){
tmp->setText(j++,entry->LastAccess.toString(DateTimeFormat));} tmp->setText(j++,entry->LastAccess.date().toString(Qt::LocalDate));}
if(config.Columns[9]){ if(config.Columns[9]){
tmp->setText(j++,entry->BinaryDesc);} tmp->setText(j++,entry->BinaryDesc);}
tmp->setIcon(0,EntryIcons[entry->ImageID]); tmp->setIcon(0,EntryIcons[entry->ImageID]);
@ -285,6 +287,66 @@ if(((ColumnSizes[j]-div)*w > 2)){
resizeColumns(); resizeColumns();
} }
void KeepassEntryView::mousePressEvent(QMouseEvent *event){
//save event position - maybe this is the start of a drag
if (event->button() == Qt::LeftButton)
DragStartPos = event->pos();
//call base function
QTreeWidget::mousePressEvent(event);
}
void KeepassEntryView::mouseMoveEvent(QMouseEvent *event){
if (!(event->buttons() & Qt::LeftButton))
return;
if ((event->pos() - DragStartPos).manhattanLength() < QApplication::startDragDistance())
return;
DragItems.clear();
EntryViewItem* DragStartItem=(EntryViewItem*)itemAt(DragStartPos);
if(!DragStartItem){
while(selectedItems().size()){
setItemSelected(selectedItems()[0],false);}
return;
}
if(selectedItems().size()==0){
setItemSelected(DragStartItem,true);}
else{
bool AlreadySelected=false;
for(int i=0;i<selectedItems().size();i++){
if(selectedItems()[i]==DragStartItem){AlreadySelected=true; break;}
}
if(!AlreadySelected){
while(selectedItems().size()){
setItemSelected(selectedItems()[0],false);
}
setItemSelected(DragStartItem,true);
}
}
DragItems=selectedItems();
QDrag *drag = new QDrag(this);
QFontMetrics fontmet(DragStartItem->font(0));
int DragPixmHeight=16;
if(fontmet.height()>16)DragPixmHeight=fontmet.height();
QString DragText;
if(DragItems.size()>1)DragText=QString(tr("%1 items")).arg(DragItems.size());
else DragText=((EntryViewItem*)DragItems[0])->pEntry->Title;
DragPixmap = QPixmap(fontmet.width(DragText)+19,DragPixmHeight);
DragPixmap.fill(QColor(255,255,255));
QPainter painter(&DragPixmap);
painter.setPen(QColor(0,0,0));
painter.setFont(DragItems[0]->font(0));
painter.drawPixmap(0,0,DragItems[0]->icon(0).pixmap());
painter.drawText(19,DragPixmHeight-fontmet.strikeOutPos(),DragText);
QMimeData *mimeData = new QMimeData;
void* pDragItems=&DragItems;
mimeData->setData("keepass/entry",QByteArray((char*)&pDragItems,sizeof(void*)));
drag->setMimeData(mimeData);
drag->setPixmap(DragPixmap);
drag->start();
}
void KeepassEntryView::paintEvent(QPaintEvent * event){ void KeepassEntryView::paintEvent(QPaintEvent * event){

@ -50,10 +50,19 @@ private:
QList<float>ColumnSizes; QList<float>ColumnSizes;
void resizeColumns(); void resizeColumns();
bool AutoResizeColumns; bool AutoResizeColumns;
QPoint DragStartPos;
QList<QTreeWidgetItem*> DragItems;
QPixmap DragPixmap;
protected: protected:
virtual void contextMenuEvent(QContextMenuEvent *event); virtual void contextMenuEvent(QContextMenuEvent *event);
virtual void paintEvent(QPaintEvent* event); virtual void paintEvent(QPaintEvent* event);
virtual void resizeEvent(QResizeEvent* event); virtual void resizeEvent(QResizeEvent* event);
// virtual void dragEnterEvent ( QDragEnterEvent * event );
// virtual void dragMoveEvent ( QDragMoveEvent * event );
// virtual void dragLeaveEvent ( QDragLeaveEvent * event );
// virtual void dropEvent ( QDropEvent * event );
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);
public slots: public slots:
void OnColumnResized(int index,int OldSize, int NewSize); void OnColumnResized(int index,int OldSize, int NewSize);
}; };

@ -34,6 +34,7 @@
#include <QBrush> #include <QBrush>
#include <QMenu> #include <QMenu>
#include "main.h" #include "main.h"
#include "EntryView.h"
#include "GroupView.h" #include "GroupView.h"
#define INSERT_AREA_WIDTH 4 #define INSERT_AREA_WIDTH 4
@ -41,7 +42,7 @@ KeepassGroupView::KeepassGroupView(QWidget* parent):QTreeWidget(parent){
InsertionMarker=QLine(); InsertionMarker=QLine();
db=NULL; db=NULL;
LastHoverItem=NULL; LastHoverItem=NULL;
setHeaderLabels(QStringList()<<tr("Gruppen")); setHeaderLabels(QStringList()<<tr("Groups"));
ShowSearchGroup=false; ShowSearchGroup=false;
ContextMenu=new QMenu(this); ContextMenu=new QMenu(this);
} }
@ -52,52 +53,70 @@ setItemSelected(Items.back(),true);
} }
void KeepassGroupView:: dragEnterEvent ( QDragEnterEvent * event ){ void KeepassGroupView:: dragEnterEvent ( QDragEnterEvent * event ){
if(event->mimeData()->hasFormat("keepass/group") || if(event->mimeData()->hasFormat("keepass/group")){
event->mimeData()->hasFormat("keepass/entry")){ DragType=GROUP;
event->accept(); event->accept();
return;
}
if(event->mimeData()->hasFormat("keepass/entry")){
DragType=ENTRY;
event->accept();
return;
} }
} }
void KeepassGroupView:: dragMoveEvent ( QDragMoveEvent * event ){ void KeepassGroupView::dragMoveEvent( QDragMoveEvent * event ){
GroupViewItem* item=(GroupViewItem*)itemAt(event->pos()); GroupViewItem* item=(GroupViewItem*)itemAt(event->pos());
if(LastHoverItem){ if(LastHoverItem){
QFont f=LastHoverItem->font(0); QFont f=LastHoverItem->font(0);
f.setBold(false); f.setBold(false);
LastHoverItem->setFont(0,f); LastHoverItem->setFont(0,f);
} }
InsertionMarker=QLine(); InsertionMarker=QLine();
if(isSearchResultGroup(item)) if(isSearchResultGroup(item))
event->setAccepted(false); event->setAccepted(false);
else if(item){ else
QRect ItemRect=visualItemRect(item); if(DragType==GROUP){
if(!db->isParentGroup(item->pGroup,DragItem->pGroup) && DragItem!=item){ if(item){
if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){ QRect ItemRect=visualItemRect(item);
QFont f=item->font(0); if(!db->isParentGroup(item->pGroup,DragItem->pGroup) && DragItem!=item){
f.setBold(true); if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){
item->setFont(0,f); QFont f=item->font(0);
LastHoverItem=item; f.setBold(true);
event->setAccepted(true); item->setFont(0,f);
} LastHoverItem=item;
else{ event->setAccepted(true);
LastHoverItem=NULL; }
if(event->pos().y() > INSERT_AREA_WIDTH) else{
InsertionMarker=QLine(ItemRect.x(),ItemRect.y()+ItemRect.height(), LastHoverItem=NULL;
ItemRect.x()+ItemRect.width(),ItemRect.y()+ItemRect.height()); if(event->pos().y() > INSERT_AREA_WIDTH)
else InsertionMarker=QLine(ItemRect.x(),ItemRect.y()+ItemRect.height()
InsertionMarker=QLine(ItemRect.x(),0, ,ItemRect.x()+ItemRect.width(),ItemRect.y()+ItemRect.height());
ItemRect.x()+ItemRect.width(),0); else
InsertionMarker=QLine(ItemRect.x(),0,ItemRect.x()+ItemRect.width(),0);
}
}
else
event->setAccepted(false);
} }
} else
else LastHoverItem=NULL;
event->setAccepted(false);
} }
else{ else{
LastHoverItem=NULL; if(item){
QFont f=item->font(0);
f.setBold(true);
item->setFont(0,f);
LastHoverItem=item;
event->setAccepted(true);
}
else{
event->setAccepted(false);
LastHoverItem=NULL;
}
} }
update(); update();
} }
@ -122,21 +141,32 @@ if(LastHoverItem){
LastHoverItem=NULL; LastHoverItem=NULL;
} }
GroupViewItem* item=(GroupViewItem*)itemAt(event->pos()); GroupViewItem* item=(GroupViewItem*)itemAt(event->pos());
if(item){ if(DragType==GROUP){
QRect ItemRect=visualItemRect(item); if(item){
if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){ QRect ItemRect=visualItemRect(item);
db->moveGroup(DragItem->pGroup,item->pGroup);} if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){
else{ db->moveGroup(DragItem->pGroup,item->pGroup);}
if(event->pos().y() > INSERT_AREA_WIDTH){ else{
if(db->getNumberOfChilds(item->pGroup) > 0) if(event->pos().y() > INSERT_AREA_WIDTH){
db->moveGroup(DragItem->pGroup,item->pGroup,0); if(db->getNumberOfChilds(item->pGroup) > 0)
else db->moveGroup(DragItem->pGroup,item->pGroup,0);
db->moveGroupDirectly(DragItem->pGroup,item->pGroup); else
} db->moveGroupDirectly(DragItem->pGroup,item->pGroup);
else db->moveGroupDirectly(DragItem->pGroup,NULL); }
} else db->moveGroupDirectly(DragItem->pGroup,NULL);
}
}
else db->moveGroup(DragItem->pGroup,NULL);
}else{
Q_ASSERT(item);
QList<QTreeWidgetItem*>* pDragItems=(QList<QTreeWidgetItem*>*)*((QList<QTreeWidgetItem*>**)event->mimeData()->data("keepass/entry").data());
for(int i=0;i<pDragItems->size();i++){
db->moveEntry(((EntryViewItem*)(*pDragItems)[i])->pEntry,item->pGroup);
}
} }
else db->moveGroup(DragItem->pGroup,NULL);
updateItems(); updateItems();
} }

@ -60,6 +60,8 @@ private:
GroupViewItem* DragItem; GroupViewItem* DragItem;
GroupViewItem* LastHoverItem; GroupViewItem* LastHoverItem;
GroupViewItem* getLastSameLevelItem(int level); GroupViewItem* getLastSameLevelItem(int level);
enum tDragType{GROUP,ENTRY};
tDragType DragType;
}; };

@ -60,8 +60,7 @@ QIcon *Icon_EditClone;
QIcon *Icon_EditOpenUrl; QIcon *Icon_EditOpenUrl;
QIcon *Icon_EditSearch; QIcon *Icon_EditSearch;
QIcon *Icon_Configure; QIcon *Icon_Configure;
QString DateTimeFormat("no-format-string"); QIcon *Icon_Help;
inline void loadImages(); inline void loadImages();
inline void parseCmdLineArgs(int argc, char** argv,QString &ArgFile,QString& ArgCfg); inline void parseCmdLineArgs(int argc, char** argv,QString &ArgFile,QString& ArgCfg);
@ -91,47 +90,36 @@ else{
//Internationalization //Internationalization
QLocale loc=QLocale::system(); QLocale loc=QLocale::system();
QTranslator* translator = 0; QTranslator* translator = NULL;
translator =new QTranslator; translator=new QTranslator;
if(config.Language==""){ bool TrFound=true;
switch(loc.language()){ if(!translator->load("keepass-"+loc.name(),app->applicationDirPath()+"/../share/keepass/i18n/")){
case QLocale::German: if(!translator->load("keepass-"+loc.name(),QDir::homeDirPath()+"/.keepass/")){
config.Language="_DEUTSCH_"; qWarning(QString("No Translation found for %1 (%2)")
break; .arg(QLocale::languageToString(loc.language()))
case QLocale::Russian: .arg(QLocale::countryToString(loc.country())));
config.Language="russian.qm"; TrFound=false;
break; }
case QLocale::English:
config.Language="english.qm";
break;
default:
config.Language="english.qm";
break;}
} }
if(config.Language!="_DEUTSCH_"){ if(TrFound)
if(!translator->load(app->applicationDirPath()+"/../share/keepass/i18n/"+config.Language)){ app->installTranslator(translator);
if(!translator->load(app->applicationDirPath()+"/share/i18n/"+config.Language)){ else
config.Language="_DEUTSCH_"; delete translator;
QMessageBox::warning(NULL,"Warning",
QString("Translation file '%1' could not be loaded.")
.arg(config.Language),"OK",0,0,2,1);
delete translator;
translator=NULL;}}
else app->installTranslator(translator);
}
DateTimeFormat=QObject::tr("dd'.'MM'.'yy' 'hh':'mm");
loadImages(); loadImages();
SecString::generateSessionKey(); SecString::generateSessionKey();
int r=0;
KeepassMainWindow *mainWin = new KeepassMainWindow(); KeepassMainWindow *mainWin = new KeepassMainWindow();
mainWin->show(); if(mainWin->Start){
int r=app->exec(); mainWin->show();
r=app->exec();
}
delete mainWin; delete mainWin;
if(!config.saveToIni(IniFilename)) 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); 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; delete app;
return r; return r;
} }
@ -201,19 +189,31 @@ browser.startDetached(cmd,args);
void loadImg(QString name,QPixmap& Img){ void loadImg(QString name,QPixmap& Img){
if(Img.load(AppDir+"/../share/keepass/icons/"+name)==false){ if(Img.load(AppDir+"/../share/keepass/icons/"+name)==false){
if(Img.load(AppDir+"/share/"+name)==false){ if(Img.load(AppDir+"/share/"+name)==false){
QMessageBox::critical(0,QObject::tr("Fehler"),QObject::tr("File '%1' could not be found.") QMessageBox::critical(0,QObject::tr("Error"),QObject::tr("File '%1' could not be found.")
.arg(name),QObject::tr("OK"),0,0,2,1); .arg(name),QObject::tr("OK"),0,0,2,1);
exit(1); exit(1);
}} }}
} }
#ifndef Q_WS_X11
#define _loadIcon(_VAR,_NAME)\ #define _loadIcon(Icon,PATH)\
_VAR=new QIcon(ThemeDir+_NAME); {QImage img(ThemeDir+PATH);\
Icon=new QIcon();\
/*Icon->addPixmap(QPixmap::fromImage(img));*/\
Icon->addPixmap(QPixmap::fromImage(img.scaled(16,16,Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));\
}
#else
#define _loadIcon(Icon,PATH)\
{QImage img(ThemeDir+PATH);\
Icon=new QIcon();\
Icon->addPixmap(QPixmap::fromImage(img));\
Icon->addPixmap(QPixmap::fromImage(img.scaled(16,16,Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));\
}
#endif
void loadImages(){ void loadImages(){
bool small=true; bool small=true;
QString ThemeDir=AppDir+"/../share/keepass/icons/nuvola/32x32"; QString ThemeDir=AppDir+"/../share/keepass/icons/nuvola/32x32";
QPixmap tmpImg; QPixmap tmpImg;
@ -246,7 +246,6 @@ Icon_Search32x32=new QPixmap;
*Icon_Search32x32=tmpImg; *Icon_Search32x32=tmpImg;
//-------------------------- //--------------------------
_loadIcon(Icon_FileNew,"/actions/filenew.png"); _loadIcon(Icon_FileNew,"/actions/filenew.png");
_loadIcon(Icon_FileOpen,"/actions/fileopen.png"); _loadIcon(Icon_FileOpen,"/actions/fileopen.png");
_loadIcon(Icon_FileSave,"/actions/filesave.png"); _loadIcon(Icon_FileSave,"/actions/filesave.png");
@ -262,7 +261,7 @@ _loadIcon(Icon_EditClone,"/actions/editcopy.png");
_loadIcon(Icon_EditOpenUrl,"/actions/run.png"); _loadIcon(Icon_EditOpenUrl,"/actions/run.png");
_loadIcon(Icon_EditSearch,"/actions/find.png"); _loadIcon(Icon_EditSearch,"/actions/find.png");
_loadIcon(Icon_Configure,"/actions/configure.png"); _loadIcon(Icon_Configure,"/actions/configure.png");
_loadIcon(Icon_Help,"/actions/help.png");
} }
@ -295,5 +294,5 @@ int i=1;
} }
void showErrMsg(const QString& msg,QWidget* parent){ void showErrMsg(const QString& msg,QWidget* parent){
QMessageBox::critical(parent,QObject::tr("Fehler"),msg,QObject::tr("OK")); QMessageBox::critical(parent,QObject::tr("Error"),msg,QObject::tr("OK"));
} }

@ -60,7 +60,7 @@ extern QIcon *Icon_EditClone;
extern QIcon *Icon_EditOpenUrl; extern QIcon *Icon_EditOpenUrl;
extern QIcon *Icon_EditSearch; extern QIcon *Icon_EditSearch;
extern QIcon *Icon_Configure; extern QIcon *Icon_Configure;
extern QString DateTimeFormat; extern QIcon *Icon_Help;
#endif #endif

@ -59,6 +59,7 @@
KeepassMainWindow::KeepassMainWindow(QWidget *parent, Qt::WFlags flags):QMainWindow(parent,flags){ KeepassMainWindow::KeepassMainWindow(QWidget *parent, Qt::WFlags flags):QMainWindow(parent,flags){
Start=true;
setupUi(this); setupUi(this);
setGeometry(geometry().x(),geometry().y(),config.MainWinWidth,config.MainWinHeight); setGeometry(geometry().x(),geometry().y(),config.MainWinWidth,config.MainWinHeight);
splitter->setSizes(QList<int>() << config.MainWinSplit1 << config.MainWinSplit2); splitter->setSizes(QList<int>() << config.MainWinSplit1 << config.MainWinSplit2);
@ -68,14 +69,22 @@ KeepassMainWindow::KeepassMainWindow(QWidget *parent, Qt::WFlags flags):QMainWin
setupToolbar(); setupToolbar();
setStateFileOpen(false); setStateFileOpen(false);
setupMenus(); setupMenus();
setupConnections();
FileOpen=false;
Clipboard=QApplication::clipboard();
setStatusBar(new QStatusBar(this)); setStatusBar(new QStatusBar(this));
StatusBarGeneral=new QLabel(tr("Ready"),statusBar()); StatusBarGeneral=new QLabel(tr("Ready"),statusBar());
StatusBarSelection=new QLabel(statusBar()); StatusBarSelection=new QLabel(statusBar());
statusBar()->addWidget(StatusBarGeneral,30); statusBar()->addWidget(StatusBarGeneral,15);
statusBar()->addWidget(StatusBarSelection,70); statusBar()->addWidget(StatusBarSelection,85);
statusBar()->setVisible(config.ShowStatusbar);
setupConnections();
FileOpen=false;
Clipboard=QApplication::clipboard();
if(config.OpenLast && (config.LastFile!=QString()) ){
QFileInfo file(config.LastFile);
if(file.exists())
openDatabase(config.LastFile,true);
else
config.LastFile=QString();
}
} }
void KeepassMainWindow::setupConnections(){ void KeepassMainWindow::setupConnections(){
@ -118,6 +127,7 @@ void KeepassMainWindow::setupConnections(){
connect(ViewColumnsLastChangeAction,SIGNAL(toggled(bool)), this, SLOT(OnColumnVisibilityChanged(bool))); connect(ViewColumnsLastChangeAction,SIGNAL(toggled(bool)), this, SLOT(OnColumnVisibilityChanged(bool)));
connect(ViewColumnsLastAccessAction,SIGNAL(toggled(bool)), this, SLOT(OnColumnVisibilityChanged(bool))); connect(ViewColumnsLastAccessAction,SIGNAL(toggled(bool)), this, SLOT(OnColumnVisibilityChanged(bool)));
connect(ViewColumnsAttachmentAction,SIGNAL(toggled(bool)), this, SLOT(OnColumnVisibilityChanged(bool))); connect(ViewColumnsAttachmentAction,SIGNAL(toggled(bool)), this, SLOT(OnColumnVisibilityChanged(bool)));
connect(ViewShowStatusbarAction,SIGNAL(toggled(bool)),statusBar(),SLOT(setVisible(bool)));
connect(ExtrasSettingsAction,SIGNAL(triggered(bool)),this,SLOT(OnExtrasSettings())); connect(ExtrasSettingsAction,SIGNAL(triggered(bool)),this,SLOT(OnExtrasSettings()));
@ -172,6 +182,7 @@ EditDeleteGroupAction->setIcon(*Icon_EditDelete);
EditSearchAction->setIcon(*Icon_EditSearch); EditSearchAction->setIcon(*Icon_EditSearch);
EditGroupSearchAction->setIcon(*Icon_EditSearch); EditGroupSearchAction->setIcon(*Icon_EditSearch);
ExtrasSettingsAction->setIcon(*Icon_Configure); ExtrasSettingsAction->setIcon(*Icon_Configure);
HelpHandbookAction->setIcon(*Icon_Help);
} }
void KeepassMainWindow::setupMenus(){ void KeepassMainWindow::setupMenus(){
@ -207,6 +218,7 @@ void KeepassMainWindow::setupMenus(){
ViewColumnsLastChangeAction->setChecked(config.Columns[7]); ViewColumnsLastChangeAction->setChecked(config.Columns[7]);
ViewColumnsLastAccessAction->setChecked(config.Columns[8]); ViewColumnsLastAccessAction->setChecked(config.Columns[8]);
ViewColumnsAttachmentAction->setChecked(config.Columns[9]); ViewColumnsAttachmentAction->setChecked(config.Columns[9]);
ViewShowStatusbarAction->setChecked(config.ShowStatusbar);
FileNewAction->setShortcut(tr("Ctrl+N")); FileNewAction->setShortcut(tr("Ctrl+N"));
FileOpenAction->setShortcut(tr("Ctrl+O")); FileOpenAction->setShortcut(tr("Ctrl+O"));
@ -228,11 +240,14 @@ void KeepassMainWindow::setupMenus(){
} }
void KeepassMainWindow::openDatabase(QString filename){ void KeepassMainWindow::openDatabase(QString filename,bool s){
Q_ASSERT(!FileOpen); Q_ASSERT(!FileOpen);
CPasswordDialog PasswordDlg(this,"Password Dialog",true); CPasswordDialog PasswordDlg(this,"Password Dialog",true,s);
PasswordDlg.setCaption(filename); PasswordDlg.setCaption(filename);
if(!PasswordDlg.exec()) return; int r=PasswordDlg.exec();
if(r==0) return;
if(r==2) {Start=false; close(); return;}
Q_ASSERT(r==1);
db = new PwDatabase(); db = new PwDatabase();
GroupView->db=db; GroupView->db=db;
EntryView->db=db; EntryView->db=db;
@ -246,8 +261,10 @@ if(PasswordDlg.password!="" && PasswordDlg.keyfile!=""){
db->CalcMasterKeyByFileAndPw(PasswordDlg.keyfile,PasswordDlg.password); db->CalcMasterKeyByFileAndPw(PasswordDlg.keyfile,PasswordDlg.password);
} }
QString err; QString err;
StatusBarGeneral->setText(tr("Loading Database..."));
if(db->loadDatabase(filename,err)==true){ if(db->loadDatabase(filename,err)==true){
//SUCCESS //SUCCESS
if(config.OpenLast)config.LastFile=filename;
setCaption(tr("Keepass - %1").arg(filename)); setCaption(tr("Keepass - %1").arg(filename));
GroupView->updateItems(); GroupView->updateItems();
EntryView->updateItems(0); EntryView->updateItems(0);
@ -257,11 +274,13 @@ setStateFileModified(false);
else{ else{
//ERROR //ERROR
delete db; delete db;
StatusBarGeneral->setText(tr("Loading Failed"));
if(err=="")err=tr("Unknown error in PwDatabase::loadDatabase()"); if(err=="")err=tr("Unknown error in PwDatabase::loadDatabase()");
QMessageBox::critical(this,tr("Error") QMessageBox::critical(this,tr("Error")
,tr("The following error occured while opening the database:\n%1") ,tr("The following error occured while opening the database:\n%1")
.arg(err),tr("OK")); .arg(err),tr("OK"));
} }
StatusBarGeneral->setText(tr("Ready"));
} }
bool KeepassMainWindow::closeDatabase(){ bool KeepassMainWindow::closeDatabase(){
@ -296,7 +315,7 @@ if(FileOpen)
db=new PwDatabase(); db=new PwDatabase();
CChangeKeyDlg dlg(this,db); CChangeKeyDlg dlg(this,db);
if(dlg.exec()==1){ if(dlg.exec()==1){
setCaption(tr("KeePassX - %1").arg(tr("[neu]"))); setCaption(tr("KeePassX - %1").arg(tr("[new]")));
GroupView->db=db; GroupView->db=db;
EntryView->db=db; EntryView->db=db;
GroupView->updateItems(); GroupView->updateItems();
@ -311,7 +330,7 @@ else delete db;
void KeepassMainWindow::OnFileOpen(){ void KeepassMainWindow::OnFileOpen(){
if(FileOpen) if(FileOpen)
if(!closeDatabase())return; if(!closeDatabase())return;
QString filename=QFileDialog::getOpenFileName(this,tr("Databank öffnen..."),QDir::homePath(),"*.kdb"); QString filename=QFileDialog::getOpenFileName(this,tr("Open Database..."),QDir::homePath(),"*.kdb");
if(filename!=QString::null){ if(filename!=QString::null){
openDatabase(filename); openDatabase(filename);
} }
@ -542,9 +561,77 @@ void KeepassMainWindow::OnFileExit(){
close(); close();
} }
void KeepassMainWindow::OnImportFromPwm(){} void KeepassMainWindow::OnImportFromPwm(){
if(FileOpen)
void KeepassMainWindow::OnImportFromKWalletXml(){} if(!closeDatabase())return;
QString filename=QFileDialog::getOpenFileName(this,tr("Open Database..."),QDir::homePath(),"*.pwm");
if(filename!=QString::null){
Q_ASSERT(!FileOpen);
db = new PwDatabase();
CSimplePasswordDialog dlg(this,"SimplePasswordDlg",true);
if(!dlg.exec()){
delete db;
db=NULL;
StatusBarGeneral->setText(tr("Ready"));
}
GroupView->db=db;
EntryView->db=db;
QString err;
StatusBarGeneral->setText(tr("Loading Database..."));
Import_PwManager import;
if(import.importFile(filename,dlg.password,db,err)==true){
//SUCCESS
setCaption(tr("KeePassX [new]"));
GroupView->updateItems();
EntryView->updateItems(0);
setStateFileOpen(true);
setStateFileModified(true);
}
else{
//ERROR
delete db;
StatusBarGeneral->setText(tr("Loading Failed"));
if(err=="")err=tr("Unknown error in Import_PwManager::importFile()()");
QMessageBox::critical(this,tr("Error")
,tr("The following error occured while opening the database:\n%1")
.arg(err),tr("OK"));
}
StatusBarGeneral->setText(tr("Ready"));
}
}
void KeepassMainWindow::OnImportFromKWalletXml(){
if(FileOpen)
if(!closeDatabase())return;
QString filename=QFileDialog::getOpenFileName(this,tr("Open Database..."),QDir::homePath(),"*.pwm");
if(filename!=QString::null){
Q_ASSERT(!FileOpen);
db = new PwDatabase();
GroupView->db=db;
EntryView->db=db;
QString err;
StatusBarGeneral->setText(tr("Loading Database..."));
Import_KWalletXml import;
if(import.importFile(filename,db,err)==true){
//SUCCESS
setCaption(tr("KeePassX [new]"));
GroupView->updateItems();
EntryView->updateItems(0);
setStateFileOpen(true);
setStateFileModified(true);
}
else{
//ERROR
delete db;
StatusBarGeneral->setText(tr("Loading Failed"));
if(err=="")err=tr("Unknown error in Import_KWalletXml::importFile()");
QMessageBox::critical(this,tr("Error")
,tr("The following error occured while opening the database:\n%1")
.arg(err),tr("OK"));
}
StatusBarGeneral->setText(tr("Ready"));
}
}
void KeepassMainWindow::OnCurrentGroupChanged(QTreeWidgetItem* cur,QTreeWidgetItem* prev){ void KeepassMainWindow::OnCurrentGroupChanged(QTreeWidgetItem* cur,QTreeWidgetItem* prev){
if(cur){ if(cur){
@ -776,6 +863,7 @@ config.MainWinHeight=geometry().height();
config.MainWinWidth=geometry().width(); config.MainWinWidth=geometry().width();
config.MainWinSplit1=splitter->sizes()[0]; config.MainWinSplit1=splitter->sizes()[0];
config.MainWinSplit2=splitter->sizes()[1]; config.MainWinSplit2=splitter->sizes()[1];
config.ShowStatusbar=statusBar()->isVisible();
if(FileOpen){ if(FileOpen){
if(!closeDatabase()) if(!closeDatabase())
@ -791,6 +879,7 @@ else
void KeepassMainWindow::OnExtrasSettings(){ void KeepassMainWindow::OnExtrasSettings(){
CSettingsDlg dlg(this,"SettingsDlg"); CSettingsDlg dlg(this,"SettingsDlg");
dlg.exec(); dlg.exec();
EntryView->setAlternatingRowColors(config.AlternatingRowColors);
} }
void KeepassMainWindow::OnHelpAbout(){ void KeepassMainWindow::OnHelpAbout(){

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2005 by Tarek Saidi * * Copyright (C) 2005-2006 by Tarek Saidi *
* tarek.saidi@arcor.de * * tarek.saidi@arcor.de *
* * * *
* This program is free software; you can redistribute it and/or modify * * This program is free software; you can redistribute it and/or modify *
@ -50,6 +50,7 @@ Q_OBJECT
public: public:
KeepassMainWindow (QWidget *parent=0, Qt::WFlags flags=0); KeepassMainWindow (QWidget *parent=0, Qt::WFlags flags=0);
PwDatabase* db; PwDatabase* db;
bool Start;
private slots: private slots:
void OnFileNew(); void OnFileNew();
@ -105,7 +106,7 @@ private:
void setStateFileModified(bool); void setStateFileModified(bool);
void setStateGroupSelected(SelectionState s); void setStateGroupSelected(SelectionState s);
void setStateEntrySelected(SelectionState s); void setStateEntrySelected(SelectionState s);
void openDatabase(QString filename); void openDatabase(QString filename,bool IsStart=false);
bool closeDatabase(); bool closeDatabase();
void search(CGroup* pGroup); void search(CGroup* pGroup);
void editEntry(CEntry* pEntry); void editEntry(CEntry* pEntry);

@ -24,7 +24,7 @@ FORMS += forms/EditGroupDlg.ui \
forms/EditEntryDlg.ui \ forms/EditEntryDlg.ui \
forms/PasswordGenDlg.ui forms/PasswordGenDlg.ui
TRANSLATIONS += translations/keepass-de_DE.ts \ TRANSLATIONS += translations/keepass-de_DE.ts \
translations/keepass-ru_Ru.ts \ translations/keepass-ru_RU.ts \
translations/keepass-xx_XX.ts translations/keepass-xx_XX.ts
HEADERS += lib/IniReader.h \ HEADERS += lib/IniReader.h \
lib/UrlLabel.h \ lib/UrlLabel.h \
@ -91,8 +91,8 @@ SOURCES += lib/IniReader.cpp \
lib/EntryView.cpp \ lib/EntryView.cpp \
crypto/arcfour.cpp \ crypto/arcfour.cpp \
lib/KpFileIconProvider.cpp lib/KpFileIconProvider.cpp
QT += xml \ QT += xml qt3support
qt3support QT -= network sql
MOC_DIR = ../build/moc MOC_DIR = ../build/moc
UI_DIR = ../build/ui UI_DIR = ../build/ui
OBJECTS_DIR = ../build/ OBJECTS_DIR = ../build/

@ -3,79 +3,76 @@
<name>AboutDlg</name> <name>AboutDlg</name>
<message> <message>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation>Über</translation>
</message> </message>
<message> <message>
<source>Homepage:</source> <source>Homepage:</source>
<translation type="unfinished"></translation> <translation>Homepage:</translation>
</message> </message>
<message> <message>
<source>KeePassX - Cross Platform Password Manager</source> <source>KeePassX - Cross Platform Password Manager</source>
<translation type="unfinished"></translation> <translation>KeePassX - Cross-Platform Passwort Manager</translation>
</message> </message>
<message> <message>
<source>Email:</source> <source>Email:</source>
<translation type="unfinished"></translation> <translation>EMail:</translation>
</message> </message>
<message> <message>
<source>Copyright (C) 2005-2006 Tarek Saidi</source> <source>Copyright (C) 2005-2006 Tarek Saidi</source>
<translation type="unfinished"></translation> <translation>Copyright (C) 2005-2006 Tarek Saidi</translation>
</message> </message>
<message> <message>
<source>Thanks To</source> <source>Thanks To</source>
<translation type="unfinished"></translation> <translation>Dank An</translation>
</message> </message>
<message> <message>
<source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;/head&gt;&lt;body style=&quot; white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;&quot;&gt;&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Mattias Miller&lt;/span&gt; (www.outofhanwell.com)&lt;/p&gt;&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Mac OS X Support&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>License</source>
<translation type="unfinished"></translation> <translation>Lizenz</translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Übersetzung</source> <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;/head&gt;&lt;body style=&quot; white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;&quot;&gt;&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation> <translation>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;/head&gt;&lt;body style=&quot; white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;&quot;&gt;&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<source>License</source> <source>Translation</source>
<translation type="unfinished"></translation> <translation>Übersetzung</translation>
</message> </message>
</context> </context>
<context> <context>
<name>CAboutDialog</name> <name>CAboutDialog</name>
<message> <message>
<source>KeePassX %1</source> <source>KeePassX %1</source>
<translation type="unfinished"></translation> <translation>KeePassX %1</translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation>Fehler</translation>
</message> </message>
<message> <message>
<source>File &apos;%1&apos; could not be found.</source> <source>File &apos;%1&apos; could not be found.</source>
<translation type="unfinished"></translation> <translation>Datei &apos;%1&apos; konnte nicht geöffnet werden.</translation>
</message> </message>
<message> <message>
<source>Make sure that the program is installed correctly.</source> <source>Make sure that the program is installed correctly.</source>
<translation type="unfinished"></translation> <translation>Stellen Sie sicher, dass das Programm korrekt installiert wurde.</translation>
</message> </message>
<message> <message>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation>OK</translation>
</message>
<message>
<source>Fehler</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Could not open file &apos;%1&apos;</source> <source>Could not open file &apos;%1&apos;</source>
<translation type="unfinished"></translation> <translation>Datei &apos;%1&apos; konnte nicht geöffnet werden.</translation>
</message> </message>
<message> <message>
<source>The following error occured: <source>The following error occured:
%1</source> %1</source>
<translation type="unfinished"></translation> <translation>Folgender Fehler ist aufgetreten:
%1</translation>
</message> </message>
<message> <message>
<source>http://keepass.berlios.de/index.php</source> <source>http://keepass.berlios.de/index.php</source>
<translation type="unfinished"></translation> <translation>http://keepass.berlios.de/index.php</translation>
</message> </message>
</context> </context>
<context> <context>
@ -86,7 +83,7 @@
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished">Fehler</translation>
</message> </message>
<message> <message>
<source>Please enter a password.</source> <source>Please enter a password.</source>
@ -94,7 +91,7 @@
</message> </message>
<message> <message>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished">OK</translation>
</message> </message>
<message> <message>
<source>Please choose a key file.</source> <source>Please choose a key file.</source>
@ -155,11 +152,11 @@ Please check your input.</source>
</message> </message>
<message> <message>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished">OK</translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished">Fehler</translation>
</message> </message>
<message> <message>
<source>&apos;%1&apos; is not valid integer value.</source> <source>&apos;%1&apos; is not valid integer value.</source>
@ -172,10 +169,6 @@ Please check your input.</source>
</context> </context>
<context> <context>
<name>CEditEntryDlg</name> <name>CEditEntryDlg</name>
<message>
<source>Eintrag bearbeiten</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Warning</source> <source>Warning</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -187,15 +180,7 @@ Please check your input.</source>
</message> </message>
<message> <message>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished">OK</translation>
</message>
<message>
<source>Fehler</source>
<translation type="unfinished"></translation>
</message>
<message encoding="UTF-8">
<source>Datei konnte nicht geöffnet werden.</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Save Attachment...</source> <source>Save Attachment...</source>
@ -220,7 +205,7 @@ Do you want to replace it?</source>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished">Fehler</translation>
</message> </message>
<message> <message>
<source>Could not remove old file.</source> <source>Could not remove old file.</source>
@ -247,6 +232,14 @@ Are you sure?</source>
<source>No, Cancel</source> <source>No, Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Edit Entry</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Could not open file.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>CGenPwDialog</name> <name>CGenPwDialog</name>
@ -260,11 +253,11 @@ Are you sure?</source>
</message> </message>
<message> <message>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished">OK</translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished">Fehler</translation>
</message> </message>
<message> <message>
<source>Could not open &apos;/dev/random&apos; or &apos;/dev/urandom&apos;.</source> <source>Could not open &apos;/dev/random&apos; or &apos;/dev/urandom&apos;.</source>
@ -273,18 +266,6 @@ Are you sure?</source>
</context> </context>
<context> <context>
<name>CPasswordDialog</name> <name>CPasswordDialog</name>
<message encoding="UTF-8">
<source>Datenbank öffnen</source>
<translation type="unfinished"></translation>
</message>
<message encoding="UTF-8">
<source>Datei manuell wählen...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt; keiner &gt;</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>No key file found</source> <source>No key file found</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -297,7 +278,7 @@ Please use the manual file selection for key files with a filename other than &a
</message> </message>
<message> <message>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished">OK</translation>
</message> </message>
<message> <message>
<source>Browse...</source> <source>Browse...</source>
@ -309,7 +290,7 @@ Please use the manual file selection for key files with a filename other than &a
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished">Fehler</translation>
</message> </message>
<message> <message>
<source>Please enter a Password.</source> <source>Please enter a Password.</source>
@ -323,13 +304,21 @@ Please use the manual file selection for key files with a filename other than &a
<source>Please enter a Password or select a key file.</source> <source>Please enter a Password or select a key file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context>
<context>
<name>CSearchDlg</name>
<message> <message>
<source>Suchen</source> <source>Open Database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select File Manually...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>&lt; none &gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CSearchDlg</name>
<message> <message>
<source>Notice</source> <source>Notice</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -340,6 +329,10 @@ Please use the manual file selection for key files with a filename other than &a
</message> </message>
<message> <message>
<source>OK</source> <source>OK</source>
<translation type="unfinished">OK</translation>
</message>
<message>
<source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@ -530,115 +523,111 @@ Please use the manual file selection for key files with a filename other than &a
<context> <context>
<name>GenPwDlg</name> <name>GenPwDlg</name>
<message> <message>
<source>Passwort Generator</source> <source>Alt+U</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Akzep&amp;tieren</source> <source>Alt+N</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Abbre&amp;chen</source> <source>Alt+M</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Generieren</source> <source>Alt+L</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Neues Passwort:</source> <source>Password Generator</source>
<translation type="unfinished"></translation>
</message>
<message encoding="UTF-8">
<source>Qualität:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Optionen</source> <source>Accep&amp;t</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Gro&amp;ßbuchstaben</source> <source>&amp;Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+ß</source> <source>Generate</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Kleinbuchstaben</source> <source>New Password:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+K</source> <source>Quality:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Zahlen</source> <source>Options</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+Z</source> <source>&amp;Upper Letters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>S&amp;onderzeichen</source> <source>&amp;Lower Letters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Bindestriche</source> <source>&amp;Numbers</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Unterstriche</source> <source>&amp;Special Characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+U</source> <source>Minus</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>h&amp;öhere ANSI-Zeichen</source> <source>U&amp;nderline</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+ö</source> <source>h&amp;igher ANSI-Characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;nur folgende Zeichen benutzen:</source> <source>Alt+H</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+N</source> <source>Use &amp;only following characters:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Zeichenanzahl:</source> <source>Alt+O</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&quot;/dev/rando&amp;m&quot; nutzen (empfohlen)</source> <source>Length:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+M</source> <source>Use &quot;/dev/rando&amp;m&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>folgende Zeichengruppen &amp;verwenden:</source> <source>Use follo&amp;wing character groups:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+V</source> <source>Alt+W</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Leerzeichen</source> <source>White &amp;Spaces</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+L</source> <source>Alt+S</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@ -688,20 +677,16 @@ Please use the manual file selection for key files with a filename other than &a
<context> <context>
<name>KeepassGroupView</name> <name>KeepassGroupView</name>
<message> <message>
<source>Gruppen</source> <source>Search Results</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Search Results</source> <source>Groups</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>KeepassMainWindow</name> <name>KeepassMainWindow</name>
<message>
<source>Bereit</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Ctrl+N</source> <source>Ctrl+N</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -772,7 +757,7 @@ Please use the manual file selection for key files with a filename other than &a
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished">Fehler</translation>
</message> </message>
<message> <message>
<source>The following error occured while opening the database: <source>The following error occured while opening the database:
@ -781,7 +766,7 @@ Please use the manual file selection for key files with a filename other than &a
</message> </message>
<message> <message>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished">OK</translation>
</message> </message>
<message> <message>
<source>Save modified file?</source> <source>Save modified file?</source>
@ -808,14 +793,6 @@ to save the changes?</source>
<source>KeePassX - %1</source> <source>KeePassX - %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>[neu]</source>
<translation type="unfinished"></translation>
</message>
<message encoding="UTF-8">
<source>Databank öffnen...</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&lt;B&gt;Group: &lt;/B&gt;%1 &lt;B&gt;Title: &lt;/B&gt;%2 &lt;B&gt;Username: &lt;/B&gt;%3 &lt;B&gt;URL: &lt;/B&gt;&lt;a href=%4&gt;%4&lt;/a&gt; &lt;B&gt;Password: &lt;/B&gt;%5 &lt;B&gt;Creation: &lt;/B&gt;%6 &lt;B&gt;Last Change: &lt;/B&gt;%7 &lt;B&gt;LastAccess: &lt;/B&gt;%8 &lt;B&gt;Expires: &lt;/B&gt;%9</source> <source>&lt;B&gt;Group: &lt;/B&gt;%1 &lt;B&gt;Title: &lt;/B&gt;%2 &lt;B&gt;Username: &lt;/B&gt;%3 &lt;B&gt;URL: &lt;/B&gt;&lt;a href=%4&gt;%4&lt;/a&gt; &lt;B&gt;Password: &lt;/B&gt;%5 &lt;B&gt;Creation: &lt;/B&gt;%6 &lt;B&gt;Last Change: &lt;/B&gt;%7 &lt;B&gt;LastAccess: &lt;/B&gt;%8 &lt;B&gt;Expires: &lt;/B&gt;%9</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -845,6 +822,18 @@ to save the changes?</source>
<source>Save Database As...</source> <source>Save Database As...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[new]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open Database...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
@ -860,10 +849,6 @@ to save the changes?</source>
<source>Import from...</source> <source>Import from...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Bearbeiten</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>View</source> <source>View</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1036,6 +1021,14 @@ to save the changes?</source>
<source>About...</source> <source>About...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show Statusbar</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>PasswordDlg</name> <name>PasswordDlg</name>
@ -1045,42 +1038,42 @@ to save the changes?</source>
</message> </message>
<message> <message>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished">OK</translation>
</message> </message>
<message> <message>
<source>Abbrechen</source> <source>...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Geben Sie das Passwort ein oder wählen Sie eine Schlüsseldatei.</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Schlüssel</source> <source>Enter a Password and/or choose a key file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Passwort:</source> <source>Key</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>...</source> <source>Password:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Schlüsseldatei oder Datenträger:</source> <source>Key file or directory:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>W&amp;ählen...</source> <source>&amp;Browse...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+Ä</source> <source>Alt+B</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Passwort UND Schlüsseldatei benutzen</source> <source>Use Password AND Key File</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@ -1143,10 +1136,6 @@ The key is wrong or the file is damaged</source>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message>
<source>dd&apos;.&apos;MM&apos;.&apos;yy&apos; &apos;hh&apos;:&apos;mm</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Warning</source> <source>Warning</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1158,15 +1147,11 @@ Make sure you have write access to &apos;~/.keepass&apos;.</source>
</message> </message>
<message> <message>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished">OK</translation>
</message>
<message>
<source>Fehler</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>File &apos;%1&apos; could not be found.</source> <source>File &apos;%1&apos; could not be found.</source>
<translation type="unfinished"></translation> <translation type="unfinished">Datei &apos;%1&apos; konnte nicht geöffnet werden.</translation>
</message> </message>
<message> <message>
<source>File not found.</source> <source>File not found.</source>
@ -1237,221 +1222,229 @@ Make sure you have write access to &apos;~/.keepass&apos;.</source>
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Error</source>
<translation type="unfinished">Fehler</translation>
</message>
</context> </context>
<context> <context>
<name>Search_Dlg</name> <name>Search_Dlg</name>
<message> <message>
<source>Suche...</source> <source>Alt+T</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Suchbegriff:</source> <source>Alt+U</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>regul&amp;ärer Ausdruck</source> <source>A&amp;nhang</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+Ä</source> <source>Alt+N</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Gro&amp;ß- und Kleinschreibung beachten</source> <source>Alt+W</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+ß</source> <source>Alt+C</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Suche nach</source> <source>Search...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Titel</source> <source>Search For:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+T</source> <source>Regular E&amp;xpression</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Benut&amp;zername</source> <source>Alt+X</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+Z</source> <source>&amp;Case Sensitive</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Kommentar</source> <source>Include:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+K</source> <source>&amp;Titles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;URL</source> <source>&amp;Usernames</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+U</source> <source>C&amp;omments</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>A&amp;nhang</source> <source>Alt+O</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+N</source> <source>U&amp;RLs</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Pass&amp;wort</source> <source>Alt+R</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+W</source> <source>Pass&amp;words</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Suchen</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>S&amp;chließen</source> <source>Clo&amp;se</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+C</source> <source>Alt+S</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Untergruppen einbeziehen</source> <source>Include Subgroups (recursive)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context encoding="UTF-8"> <context>
<name>SettingsDialog</name> <name>SettingsDialog</name>
<message encoding="UTF-8">
<source>Alt+Ö</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Einstellungen</source> <source>O&amp;K</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Sicherhei&amp;t</source> <source>Alt+K</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Zwischenablage löschen nach:</source> <source>Alt+C</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Sekunden</source> <source>Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Passw&amp;örter standardmäßig in Klartext anzeigen</source> <source>&amp;Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+Ö</source> <source>Securi&amp;try</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>E&amp;rscheinungsbild</source> <source>Clear clipboard after:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Bannerfarbverlauf</source> <source>Seconds</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Farbe 1</source> <source>Sh&amp;ow passwords in plain text by default</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>&amp;ändern...</source> <source>Alt+O</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+Ä</source> <source>Appea&amp;rance</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Farbe 2</source> <source>Banner Color</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>ändern...</source> <source>Text Color:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Textfarbe</source> <source>Change...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Gruppenbaum beim &amp;Öffnen aufklappen</source> <source>Color 2:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>S&amp;onstiges</source> <source>C&amp;hange...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>zuletzt geöffnete Datei bei Programmstart &amp;öffnen</source> <source>Alt+H</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Browseraufruf:</source> <source>Color 1:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>O&amp;K</source> <source>Expand group tree when opening a database</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+K</source> <source>&amp;Other</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Abbre&amp;chen</source> <source>Remember last opend file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+C</source> <source>Browser Command:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>SimplePasswordDialog</name> <name>SimplePasswordDialog</name>
<message> <message>
<source>Passworteingabe</source> <source>O&amp;K</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Passwort:</source> <source>Alt+K</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>O&amp;K</source> <source>Alt+C</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+K</source> <source>...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Abbre&amp;chen</source> <source>Enter your Password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+C</source> <source>Password:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>...</source> <source>&amp;Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>

File diff suppressed because it is too large Load Diff

@ -26,15 +26,15 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;/head&gt;&lt;body style=&quot; white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;&quot;&gt;&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Mattias Miller&lt;/span&gt; (www.outofhanwell.com)&lt;/p&gt;&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Mac OS X Support&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>License</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Übersetzung</source> <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;/head&gt;&lt;body style=&quot; white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;&quot;&gt;&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>License</source> <source>Translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@ -60,10 +60,6 @@
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Fehler</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Could not open file &apos;%1&apos;</source> <source>Could not open file &apos;%1&apos;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -172,10 +168,6 @@ Please check your input.</source>
</context> </context>
<context> <context>
<name>CEditEntryDlg</name> <name>CEditEntryDlg</name>
<message>
<source>Eintrag bearbeiten</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Warning</source> <source>Warning</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -189,14 +181,6 @@ Please check your input.</source>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Fehler</source>
<translation type="unfinished"></translation>
</message>
<message encoding="UTF-8">
<source>Datei konnte nicht geöffnet werden.</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Save Attachment...</source> <source>Save Attachment...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -247,6 +231,14 @@ Are you sure?</source>
<source>No, Cancel</source> <source>No, Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Edit Entry</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Could not open file.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>CGenPwDialog</name> <name>CGenPwDialog</name>
@ -273,18 +265,6 @@ Are you sure?</source>
</context> </context>
<context> <context>
<name>CPasswordDialog</name> <name>CPasswordDialog</name>
<message encoding="UTF-8">
<source>Datenbank öffnen</source>
<translation type="unfinished"></translation>
</message>
<message encoding="UTF-8">
<source>Datei manuell wählen...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt; keiner &gt;</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>No key file found</source> <source>No key file found</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -323,13 +303,21 @@ Please use the manual file selection for key files with a filename other than &a
<source>Please enter a Password or select a key file.</source> <source>Please enter a Password or select a key file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context>
<context>
<name>CSearchDlg</name>
<message> <message>
<source>Suchen</source> <source>Open Database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select File Manually...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt; none &gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context>
<context>
<name>CSearchDlg</name>
<message> <message>
<source>Notice</source> <source>Notice</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -342,6 +330,10 @@ Please use the manual file selection for key files with a filename other than &a
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>CSettingsDlg</name> <name>CSettingsDlg</name>
@ -530,115 +522,111 @@ Please use the manual file selection for key files with a filename other than &a
<context> <context>
<name>GenPwDlg</name> <name>GenPwDlg</name>
<message> <message>
<source>Passwort Generator</source> <source>Alt+U</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Akzep&amp;tieren</source> <source>Alt+N</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Abbre&amp;chen</source> <source>Alt+M</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Generieren</source> <source>Alt+L</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Neues Passwort:</source> <source>Password Generator</source>
<translation type="unfinished"></translation>
</message>
<message encoding="UTF-8">
<source>Qualität:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Optionen</source> <source>Accep&amp;t</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Gro&amp;ßbuchstaben</source> <source>&amp;Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+ß</source> <source>Generate</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Kleinbuchstaben</source> <source>New Password:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+K</source> <source>Quality:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Zahlen</source> <source>Options</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+Z</source> <source>&amp;Upper Letters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>S&amp;onderzeichen</source> <source>&amp;Lower Letters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Bindestriche</source> <source>&amp;Numbers</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Unterstriche</source> <source>&amp;Special Characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+U</source> <source>Minus</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>h&amp;öhere ANSI-Zeichen</source> <source>U&amp;nderline</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+ö</source> <source>h&amp;igher ANSI-Characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;nur folgende Zeichen benutzen:</source> <source>Alt+H</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+N</source> <source>Use &amp;only following characters:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Zeichenanzahl:</source> <source>Alt+O</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&quot;/dev/rando&amp;m&quot; nutzen (empfohlen)</source> <source>Length:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+M</source> <source>Use &quot;/dev/rando&amp;m&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>folgende Zeichengruppen &amp;verwenden:</source> <source>Use follo&amp;wing character groups:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+V</source> <source>Alt+W</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Leerzeichen</source> <source>White &amp;Spaces</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+L</source> <source>Alt+S</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@ -688,20 +676,16 @@ Please use the manual file selection for key files with a filename other than &a
<context> <context>
<name>KeepassGroupView</name> <name>KeepassGroupView</name>
<message> <message>
<source>Gruppen</source> <source>Search Results</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Search Results</source> <source>Groups</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>KeepassMainWindow</name> <name>KeepassMainWindow</name>
<message>
<source>Bereit</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Ctrl+N</source> <source>Ctrl+N</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -808,14 +792,6 @@ to save the changes?</source>
<source>KeePassX - %1</source> <source>KeePassX - %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>[neu]</source>
<translation type="unfinished"></translation>
</message>
<message encoding="UTF-8">
<source>Databank öffnen...</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&lt;B&gt;Group: &lt;/B&gt;%1 &lt;B&gt;Title: &lt;/B&gt;%2 &lt;B&gt;Username: &lt;/B&gt;%3 &lt;B&gt;URL: &lt;/B&gt;&lt;a href=%4&gt;%4&lt;/a&gt; &lt;B&gt;Password: &lt;/B&gt;%5 &lt;B&gt;Creation: &lt;/B&gt;%6 &lt;B&gt;Last Change: &lt;/B&gt;%7 &lt;B&gt;LastAccess: &lt;/B&gt;%8 &lt;B&gt;Expires: &lt;/B&gt;%9</source> <source>&lt;B&gt;Group: &lt;/B&gt;%1 &lt;B&gt;Title: &lt;/B&gt;%2 &lt;B&gt;Username: &lt;/B&gt;%3 &lt;B&gt;URL: &lt;/B&gt;&lt;a href=%4&gt;%4&lt;/a&gt; &lt;B&gt;Password: &lt;/B&gt;%5 &lt;B&gt;Creation: &lt;/B&gt;%6 &lt;B&gt;Last Change: &lt;/B&gt;%7 &lt;B&gt;LastAccess: &lt;/B&gt;%8 &lt;B&gt;Expires: &lt;/B&gt;%9</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -845,6 +821,18 @@ to save the changes?</source>
<source>Save Database As...</source> <source>Save Database As...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[new]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open Database...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
@ -860,10 +848,6 @@ to save the changes?</source>
<source>Import from...</source> <source>Import from...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Bearbeiten</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>View</source> <source>View</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1036,6 +1020,14 @@ to save the changes?</source>
<source>About...</source> <source>About...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show Statusbar</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>PasswordDlg</name> <name>PasswordDlg</name>
@ -1048,39 +1040,39 @@ to save the changes?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Abbrechen</source> <source>...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Geben Sie das Passwort ein oder wählen Sie eine Schlüsseldatei.</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Schlüssel</source> <source>Enter a Password and/or choose a key file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Passwort:</source> <source>Key</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>...</source> <source>Password:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Schlüsseldatei oder Datenträger:</source> <source>Key file or directory:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>W&amp;ählen...</source> <source>&amp;Browse...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+Ä</source> <source>Alt+B</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Passwort UND Schlüsseldatei benutzen</source> <source>Use Password AND Key File</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@ -1143,10 +1135,6 @@ The key is wrong or the file is damaged</source>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message>
<source>dd&apos;.&apos;MM&apos;.&apos;yy&apos; &apos;hh&apos;:&apos;mm</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Warning</source> <source>Warning</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1160,10 +1148,6 @@ Make sure you have write access to &apos;~/.keepass&apos;.</source>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Fehler</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>File &apos;%1&apos; could not be found.</source> <source>File &apos;%1&apos; could not be found.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1237,221 +1221,229 @@ Make sure you have write access to &apos;~/.keepass&apos;.</source>
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>Search_Dlg</name> <name>Search_Dlg</name>
<message> <message>
<source>Suche...</source> <source>Alt+T</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Suchbegriff:</source> <source>Alt+U</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>regul&amp;ärer Ausdruck</source> <source>A&amp;nhang</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+Ä</source> <source>Alt+N</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Gro&amp;ß- und Kleinschreibung beachten</source> <source>Alt+W</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+ß</source> <source>Alt+C</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Suche nach</source> <source>Search...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Titel</source> <source>Search For:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+T</source> <source>Regular E&amp;xpression</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Benut&amp;zername</source> <source>Alt+X</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+Z</source> <source>&amp;Case Sensitive</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;Kommentar</source> <source>Include:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+K</source> <source>&amp;Titles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&amp;URL</source> <source>&amp;Usernames</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+U</source> <source>C&amp;omments</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>A&amp;nhang</source> <source>Alt+O</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+N</source> <source>U&amp;RLs</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Pass&amp;wort</source> <source>Alt+R</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+W</source> <source>Pass&amp;words</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Suchen</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>S&amp;chließen</source> <source>Clo&amp;se</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+C</source> <source>Alt+S</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Untergruppen einbeziehen</source> <source>Include Subgroups (recursive)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context encoding="UTF-8"> <context>
<name>SettingsDialog</name> <name>SettingsDialog</name>
<message encoding="UTF-8">
<source>Alt+Ö</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Einstellungen</source> <source>O&amp;K</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Sicherhei&amp;t</source> <source>Alt+K</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Zwischenablage löschen nach:</source> <source>Alt+C</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Sekunden</source> <source>Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Passw&amp;örter standardmäßig in Klartext anzeigen</source> <source>&amp;Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+Ö</source> <source>Securi&amp;try</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>E&amp;rscheinungsbild</source> <source>Clear clipboard after:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Bannerfarbverlauf</source> <source>Seconds</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Farbe 1</source> <source>Sh&amp;ow passwords in plain text by default</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>&amp;ändern...</source> <source>Alt+O</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Alt+Ä</source> <source>Appea&amp;rance</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Farbe 2</source> <source>Banner Color</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>ändern...</source> <source>Text Color:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Textfarbe</source> <source>Change...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>Gruppenbaum beim &amp;Öffnen aufklappen</source> <source>Color 2:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>S&amp;onstiges</source> <source>C&amp;hange...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message encoding="UTF-8"> <message>
<source>zuletzt geöffnete Datei bei Programmstart &amp;öffnen</source> <source>Alt+H</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Browseraufruf:</source> <source>Color 1:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>O&amp;K</source> <source>Expand group tree when opening a database</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+K</source> <source>&amp;Other</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Abbre&amp;chen</source> <source>Remember last opend file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+C</source> <source>Browser Command:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>SimplePasswordDialog</name> <name>SimplePasswordDialog</name>
<message> <message>
<source>Passworteingabe</source> <source>O&amp;K</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Passwort:</source> <source>Alt+K</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>O&amp;K</source> <source>Alt+C</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+K</source> <source>...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Abbre&amp;chen</source> <source>Enter your Password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Alt+C</source> <source>Password:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>...</source> <source>&amp;Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>