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
This commit is contained in:
parent
60d342201d
commit
853747bce1
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><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Mattias Miller</span> (www.outofhanwell.com)</p><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</p></body></html></string>
|
<string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><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;"></p></body></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,16 +487,27 @@
|
||||||
<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>
|
|
||||||
<class>KeepassEntryView</class>
|
|
||||||
<extends>QTreeWidget</extends>
|
|
||||||
<header>../../src/lib/EntryView.h</header>
|
|
||||||
<container>0</container>
|
|
||||||
<pixmap></pixmap>
|
|
||||||
</customwidget>
|
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>KeepassGroupView</class>
|
<class>KeepassGroupView</class>
|
||||||
<extends>QTreeWidget</extends>
|
<extends>QTreeWidget</extends>
|
||||||
|
@ -494,6 +515,13 @@
|
||||||
<container>0</container>
|
<container>0</container>
|
||||||
<pixmap></pixmap>
|
<pixmap></pixmap>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>KeepassEntryView</class>
|
||||||
|
<extends>QTreeWidget</extends>
|
||||||
|
<header>../../src/lib/EntryView.h</header>
|
||||||
|
<container>0</container>
|
||||||
|
<pixmap></pixmap>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
|
|
|
@ -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,7 +1,7 @@
|
||||||
<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" >
|
||||||
|
@ -27,6 +27,22 @@
|
||||||
<property name="windowTitle" >
|
<property name="windowTitle" >
|
||||||
<string>Settings</string>
|
<string>Settings</string>
|
||||||
</property>
|
</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>&Cancel</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut" >
|
||||||
|
<string>Alt+C</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
<widget class="QLabel" name="Banner" >
|
<widget class="QLabel" name="Banner" >
|
||||||
<property name="geometry" >
|
<property name="geometry" >
|
||||||
<rect>
|
<rect>
|
||||||
|
@ -43,6 +59,22 @@
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</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&K</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut" >
|
||||||
|
<string>Alt+K</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
<widget class="QTabWidget" name="tabWidget4" >
|
<widget class="QTabWidget" name="tabWidget4" >
|
||||||
<property name="geometry" >
|
<property name="geometry" >
|
||||||
<rect>
|
<rect>
|
||||||
|
@ -56,48 +88,76 @@
|
||||||
<attribute name="title" >
|
<attribute name="title" >
|
||||||
<string>Securi&try</string>
|
<string>Securi&try</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<widget class="QLabel" name="textLabel1" >
|
<widget class="QWidget" name="widget" >
|
||||||
<property name="geometry" >
|
<property name="geometry" >
|
||||||
<rect>
|
<rect>
|
||||||
<x>10</x>
|
<x>10</x>
|
||||||
<y>20</y>
|
<y>20</y>
|
||||||
<width>231</width>
|
<width>531</width>
|
||||||
<height>20</height>
|
<height>25</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<layout class="QHBoxLayout" >
|
||||||
|
<property name="margin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="spacing" >
|
||||||
|
<number>6</number>
|
||||||
|
</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" >
|
<property name="text" >
|
||||||
<string>Clear clipboard after:</string>
|
<string>Clear clipboard after:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
<widget class="QSpinBox" name="SpinBox_ClipboardTime" >
|
<widget class="QSpinBox" name="SpinBox_ClipboardTime" >
|
||||||
<property name="geometry" >
|
<property name="sizePolicy" >
|
||||||
<rect>
|
<sizepolicy>
|
||||||
<x>250</x>
|
<hsizetype>5</hsizetype>
|
||||||
<y>20</y>
|
<vsizetype>0</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize" >
|
||||||
|
<size>
|
||||||
<width>80</width>
|
<width>80</width>
|
||||||
<height>20</height>
|
<height>16777215</height>
|
||||||
</rect>
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximum" >
|
||||||
|
<number>50000</number>
|
||||||
|
</property>
|
||||||
|
<property name="value" >
|
||||||
|
<number>2</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
<widget class="QLabel" name="textLabel2" >
|
<widget class="QLabel" name="textLabel2" >
|
||||||
<property name="geometry" >
|
|
||||||
<rect>
|
|
||||||
<x>340</x>
|
|
||||||
<y>20</y>
|
|
||||||
<width>100</width>
|
|
||||||
<height>20</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
<string>Seconds</string>
|
<string>Seconds</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
<widget class="QCheckBox" name="CheckBox_ShowPasswords" >
|
<widget class="QCheckBox" name="CheckBox_ShowPasswords" >
|
||||||
<property name="geometry" >
|
<property name="geometry" >
|
||||||
<rect>
|
<rect>
|
||||||
<x>10</x>
|
<x>10</x>
|
||||||
<y>50</y>
|
<y>50</y>
|
||||||
<width>420</width>
|
<width>531</width>
|
||||||
<height>20</height>
|
<height>20</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -116,7 +176,7 @@
|
||||||
<widget class="Q3GroupBox" name="groupBox1" >
|
<widget class="Q3GroupBox" name="groupBox1" >
|
||||||
<property name="geometry" >
|
<property name="geometry" >
|
||||||
<rect>
|
<rect>
|
||||||
<x>10</x>
|
<x>20</x>
|
||||||
<y>10</y>
|
<y>10</y>
|
||||||
<width>520</width>
|
<width>520</width>
|
||||||
<height>90</height>
|
<height>90</height>
|
||||||
|
@ -125,27 +185,126 @@
|
||||||
<property name="title" >
|
<property name="title" >
|
||||||
<string>Banner Color</string>
|
<string>Banner Color</string>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QLabel" name="textLabel1_3" >
|
<widget class="QWidget" name="widget" >
|
||||||
<property name="geometry" >
|
<property name="geometry" >
|
||||||
<rect>
|
<rect>
|
||||||
<x>10</x>
|
<x>11</x>
|
||||||
<y>20</y>
|
<y>20</y>
|
||||||
<width>53</width>
|
<width>501</width>
|
||||||
<height>20</height>
|
<height>62</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<layout class="QGridLayout" >
|
||||||
|
<property name="margin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="spacing" >
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="1" column="0" >
|
||||||
|
<widget class="QLabel" name="textLabel2_2" >
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
<string>Color 1</string>
|
<string>Text Color:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="3" >
|
||||||
|
<spacer>
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType" >
|
||||||
|
<enum>QSizePolicy::Fixed</enum>
|
||||||
|
</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>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="4" >
|
||||||
|
<widget class="QLabel" name="textLabel3" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>4</hsizetype>
|
||||||
|
<vsizetype>5</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Color 2:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" >
|
||||||
<widget class="QLabel" name="pixmColor1" >
|
<widget class="QLabel" name="pixmColor1" >
|
||||||
<property name="geometry" >
|
<property name="sizePolicy" >
|
||||||
<rect>
|
<sizepolicy>
|
||||||
<x>70</x>
|
<hsizetype>4</hsizetype>
|
||||||
<y>20</y>
|
<vsizetype>0</vsizetype>
|
||||||
<width>22</width>
|
<horstretch>0</horstretch>
|
||||||
<height>22</height>
|
<verstretch>0</verstretch>
|
||||||
</rect>
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize" >
|
||||||
|
<size>
|
||||||
|
<width>23</width>
|
||||||
|
<height>23</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize" >
|
||||||
|
<size>
|
||||||
|
<width>23</width>
|
||||||
|
<height>23</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" >
|
||||||
|
<widget class="QLabel" name="pixmTextColor" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>4</hsizetype>
|
||||||
|
<vsizetype>0</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize" >
|
||||||
|
<size>
|
||||||
|
<width>23</width>
|
||||||
|
<height>23</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize" >
|
||||||
|
<size>
|
||||||
|
<width>23</width>
|
||||||
|
<height>23</height>
|
||||||
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="pixmap" >
|
<property name="pixmap" >
|
||||||
<pixmap/>
|
<pixmap/>
|
||||||
|
@ -154,14 +313,64 @@
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QPushButton" name="ButtonColor1" >
|
</item>
|
||||||
<property name="geometry" >
|
<item row="0" column="6" >
|
||||||
<rect>
|
<widget class="QPushButton" name="ButtonColor2" >
|
||||||
<x>100</x>
|
<property name="sizePolicy" >
|
||||||
<y>20</y>
|
<sizepolicy>
|
||||||
<width>60</width>
|
<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>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="5" >
|
||||||
|
<widget class="QLabel" name="pixmColor2" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>4</hsizetype>
|
||||||
|
<vsizetype>0</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize" >
|
||||||
|
<size>
|
||||||
|
<width>23</width>
|
||||||
<height>23</height>
|
<height>23</height>
|
||||||
</rect>
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize" >
|
||||||
|
<size>
|
||||||
|
<width>23</width>
|
||||||
|
<height>23</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap" >
|
||||||
|
<pixmap/>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents" >
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2" >
|
||||||
|
<widget class="QPushButton" name="ButtonColor1" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>4</hsizetype>
|
||||||
|
<vsizetype>0</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
<string>C&hange...</string>
|
<string>C&hange...</string>
|
||||||
|
@ -170,95 +379,39 @@
|
||||||
<string>Alt+H</string>
|
<string>Alt+H</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QLabel" name="textLabel3" >
|
</item>
|
||||||
<property name="geometry" >
|
<item row="0" column="0" >
|
||||||
<rect>
|
<widget class="QLabel" name="textLabel1_3" >
|
||||||
<x>190</x>
|
<property name="sizePolicy" >
|
||||||
<y>20</y>
|
<sizepolicy>
|
||||||
<width>60</width>
|
<hsizetype>4</hsizetype>
|
||||||
|
<vsizetype>5</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Color 1:</string>
|
||||||
|
</property>
|
||||||
|
</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>
|
<height>20</height>
|
||||||
</rect>
|
</size>
|
||||||
</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>
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QCheckBox" name="CheckBox_ExpandGroupTree" >
|
<widget class="QCheckBox" name="CheckBox_ExpandGroupTree" >
|
||||||
|
@ -266,7 +419,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>10</x>
|
<x>10</x>
|
||||||
<y>110</y>
|
<y>110</y>
|
||||||
<width>380</width>
|
<width>521</width>
|
||||||
<height>20</height>
|
<height>20</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -277,6 +430,19 @@
|
||||||
<string>Alt+Ö</string>
|
<string>Alt+Ö</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QCheckBox" name="CheckBox_AlternatingRowColors" >
|
||||||
|
<property name="geometry" >
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>130</y>
|
||||||
|
<width>531</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Alternating Row Colors</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="tab" >
|
<widget class="QWidget" name="tab" >
|
||||||
<attribute name="title" >
|
<attribute name="title" >
|
||||||
|
@ -298,73 +464,46 @@
|
||||||
<string>Alt+Ö</string>
|
<string>Alt+Ö</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QLabel" name="textLabel1_4" >
|
<widget class="QWidget" name="widget" >
|
||||||
<property name="geometry" >
|
<property name="geometry" >
|
||||||
<rect>
|
<rect>
|
||||||
<x>10</x>
|
<x>10</x>
|
||||||
<y>50</y>
|
<y>50</y>
|
||||||
<width>110</width>
|
<width>531</width>
|
||||||
<height>20</height>
|
<height>25</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<layout class="QHBoxLayout" >
|
||||||
|
<property name="margin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="spacing" >
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="textLabel1_4" >
|
||||||
<property name="text" >
|
<property name="text" >
|
||||||
<string>Browser Command:</string>
|
<string>Browser Command:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QLineEdit" name="Edit_BrowserCmd" >
|
</item>
|
||||||
<property name="geometry" >
|
<item>
|
||||||
<rect>
|
<widget class="QLineEdit" name="Edit_BrowserCmd" />
|
||||||
<x>120</x>
|
</item>
|
||||||
<y>50</y>
|
</layout>
|
||||||
<width>190</width>
|
|
||||||
<height>21</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</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&K</string>
|
|
||||||
</property>
|
|
||||||
<property name="shortcut" >
|
|
||||||
<string>Alt+K</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<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>&Cancel</string>
|
|
||||||
</property>
|
|
||||||
<property name="shortcut" >
|
|
||||||
<string>Alt+C</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
</widget>
|
||||||
<layoutdefault spacing="6" margin="11" />
|
<layoutdefault spacing="6" margin="11" />
|
||||||
<pixmapfunction/>
|
<pixmapfunction></pixmapfunction>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>Q3GroupBox</class>
|
<class>Q3GroupBox</class>
|
||||||
<extends/>
|
<extends></extends>
|
||||||
<header>Qt3Support/Q3GroupBox</header>
|
<header>Qt3Support/Q3GroupBox</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
<pixmap/>
|
<pixmap></pixmap>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
|
|
|
@ -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,15 +53,20 @@ 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);
|
||||||
|
@ -70,7 +76,9 @@ if(LastHoverItem){
|
||||||
InsertionMarker=QLine();
|
InsertionMarker=QLine();
|
||||||
if(isSearchResultGroup(item))
|
if(isSearchResultGroup(item))
|
||||||
event->setAccepted(false);
|
event->setAccepted(false);
|
||||||
else if(item){
|
else
|
||||||
|
if(DragType==GROUP){
|
||||||
|
if(item){
|
||||||
QRect ItemRect=visualItemRect(item);
|
QRect ItemRect=visualItemRect(item);
|
||||||
if(!db->isParentGroup(item->pGroup,DragItem->pGroup) && DragItem!=item){
|
if(!db->isParentGroup(item->pGroup,DragItem->pGroup) && DragItem!=item){
|
||||||
if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){
|
if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){
|
||||||
|
@ -79,25 +87,36 @@ else if(item){
|
||||||
item->setFont(0,f);
|
item->setFont(0,f);
|
||||||
LastHoverItem=item;
|
LastHoverItem=item;
|
||||||
event->setAccepted(true);
|
event->setAccepted(true);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
LastHoverItem=NULL;
|
LastHoverItem=NULL;
|
||||||
if(event->pos().y() > INSERT_AREA_WIDTH)
|
if(event->pos().y() > INSERT_AREA_WIDTH)
|
||||||
InsertionMarker=QLine(ItemRect.x(),ItemRect.y()+ItemRect.height(),
|
InsertionMarker=QLine(ItemRect.x(),ItemRect.y()+ItemRect.height()
|
||||||
ItemRect.x()+ItemRect.width(),ItemRect.y()+ItemRect.height());
|
,ItemRect.x()+ItemRect.width(),ItemRect.y()+ItemRect.height());
|
||||||
else
|
else
|
||||||
InsertionMarker=QLine(ItemRect.x(),0,
|
InsertionMarker=QLine(ItemRect.x(),0,ItemRect.x()+ItemRect.width(),0);
|
||||||
ItemRect.x()+ItemRect.width(),0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
event->setAccepted(false);
|
event->setAccepted(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
LastHoverItem=NULL;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
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;
|
LastHoverItem=NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,7 +141,8 @@ if(LastHoverItem){
|
||||||
LastHoverItem=NULL;
|
LastHoverItem=NULL;
|
||||||
}
|
}
|
||||||
GroupViewItem* item=(GroupViewItem*)itemAt(event->pos());
|
GroupViewItem* item=(GroupViewItem*)itemAt(event->pos());
|
||||||
if(item){
|
if(DragType==GROUP){
|
||||||
|
if(item){
|
||||||
QRect ItemRect=visualItemRect(item);
|
QRect ItemRect=visualItemRect(item);
|
||||||
if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){
|
if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){
|
||||||
db->moveGroup(DragItem->pGroup,item->pGroup);}
|
db->moveGroup(DragItem->pGroup,item->pGroup);}
|
||||||
|
@ -135,8 +155,18 @@ if(item){
|
||||||
}
|
}
|
||||||
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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
83
src/main.cpp
83
src/main.cpp
|
@ -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_";
|
|
||||||
QMessageBox::warning(NULL,"Warning",
|
|
||||||
QString("Translation file '%1' could not be loaded.")
|
|
||||||
.arg(config.Language),"OK",0,0,2,1);
|
|
||||||
delete translator;
|
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)
|
||||||
|
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(){}
|
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/
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
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><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Mattias Miller</span> (www.outofhanwell.com)</p><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</p></body></html></source>
|
<source>License</source>
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Übersetzung</source>
|
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>License</source>
|
<source><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><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;"></p></body></html></source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<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 '%1'</source>
|
<source>Could not open file '%1'</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>< keiner ></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>
|
||||||
|
<message>
|
||||||
|
<source>Open Database</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Select File Manually...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>< none ></source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CSearchDlg</name>
|
<name>CSearchDlg</name>
|
||||||
<message>
|
|
||||||
<source>Suchen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<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>
|
||||||
|
@ -529,118 +521,114 @@ Please use the manual file selection for key files with a filename other than &a
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>GenPwDlg</name>
|
<name>GenPwDlg</name>
|
||||||
<message>
|
|
||||||
<source>Passwort Generator</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Akzep&tieren</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Abbre&chen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Generieren</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Neues Passwort:</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Qualität:</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Optionen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Gro&ßbuchstaben</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Alt+ß</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Kleinbuchstaben</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Alt+K</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Zahlen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Alt+Z</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>S&onderzeichen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Bindestriche</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Unterstriche</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+U</source>
|
<source>Alt+U</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>h&öhere ANSI-Zeichen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Alt+ö</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&nur folgende Zeichen benutzen:</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+N</source>
|
<source>Alt+N</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Zeichenanzahl:</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>"/dev/rando&m" nutzen (empfohlen)</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+M</source>
|
<source>Alt+M</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>folgende Zeichengruppen &verwenden:</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Alt+V</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Leerzeichen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+L</source>
|
<source>Alt+L</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Password Generator</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Accep&t</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Cancel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generate</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>New Password:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Quality:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Options</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Upper Letters</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Lower Letters</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Numbers</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Special Characters</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Minus</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>U&nderline</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>h&igher ANSI-Characters</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Alt+H</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Use &only following characters:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Alt+O</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Length:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Use "/dev/rando&m"</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Use follo&wing character groups:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Alt+W</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>White &Spaces</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Alt+S</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>KeepassEntryView</name>
|
<name>KeepassEntryView</name>
|
||||||
|
@ -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><B>Group: </B>%1 <B>Title: </B>%2 <B>Username: </B>%3 <B>URL: </B><a href=%4>%4</a> <B>Password: </B>%5 <B>Creation: </B>%6 <B>Last Change: </B>%7 <B>LastAccess: </B>%8 <B>Expires: </B>%9</source>
|
<source><B>Group: </B>%1 <B>Title: </B>%2 <B>Username: </B>%3 <B>URL: </B><a href=%4>%4</a> <B>Password: </B>%5 <B>Creation: </B>%6 <B>Last Change: </B>%7 <B>LastAccess: </B>%8 <B>Expires: </B>%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>
|
||||||
|
@ -1047,40 +1039,40 @@ to save the changes?</source>
|
||||||
<source>OK</source>
|
<source>OK</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Abbrechen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Geben Sie das Passwort ein oder wählen Sie eine Schlüsseldatei.</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Schlüssel</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Passwort:</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>...</source>
|
<source>...</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message encoding="UTF-8">
|
<message>
|
||||||
<source>Schlüsseldatei oder Datenträger:</source>
|
<source>Cancel</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message encoding="UTF-8">
|
<message>
|
||||||
<source>W&ählen...</source>
|
<source>Enter a Password and/or choose a key file.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message encoding="UTF-8">
|
<message>
|
||||||
<source>Alt+Ä</source>
|
<source>Key</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message encoding="UTF-8">
|
<message>
|
||||||
<source>Passwort UND Schlüsseldatei benutzen</source>
|
<source>Password:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Key file or directory:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Browse...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Alt+B</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<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'.'MM'.'yy' 'hh':'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 '~/.keepass'.</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 '%1' could not be found.</source>
|
<source>File '%1' could not be found.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
@ -1237,65 +1221,17 @@ Make sure you have write access to '~/.keepass'.</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>
|
|
||||||
<source>Suche...</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Suchbegriff:</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>regul&ärer Ausdruck</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Alt+Ä</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Gro&ß- und Kleinschreibung beachten</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Alt+ß</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Suche nach</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Titel</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+T</source>
|
<source>Alt+T</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Benut&zername</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Alt+Z</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Kommentar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Alt+K</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&URL</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+U</source>
|
<source>Alt+U</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
@ -1308,105 +1244,89 @@ Make sure you have write access to '~/.keepass'.</source>
|
||||||
<source>Alt+N</source>
|
<source>Alt+N</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Pass&wort</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+W</source>
|
<source>Alt+W</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Suchen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>S&chließen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+C</source>
|
<source>Alt+C</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Untergruppen einbeziehen</source>
|
<source>Search...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Search For:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Regular E&xpression</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Alt+X</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Case Sensitive</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Include:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Titles</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Usernames</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>C&omments</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Alt+O</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>U&RLs</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Alt+R</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Pass&words</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Search</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Clo&se</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Alt+S</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<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>
|
|
||||||
<source>Einstellungen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Sicherhei&t</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Zwischenablage löschen nach:</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Sekunden</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Passw&örter standardmäßig in Klartext anzeigen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
<message encoding="UTF-8">
|
||||||
<source>Alt+Ö</source>
|
<source>Alt+Ö</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>E&rscheinungsbild</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Bannerfarbverlauf</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Farbe 1</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>&ändern...</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Alt+Ä</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Farbe 2</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>ändern...</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Textfarbe</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>Gruppenbaum beim &Öffnen aufklappen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>S&onstiges</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message encoding="UTF-8">
|
|
||||||
<source>zuletzt geöffnete Datei bei Programmstart &öffnen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Browseraufruf:</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>O&K</source>
|
<source>O&K</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
@ -1416,24 +1336,88 @@ Make sure you have write access to '~/.keepass'.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Abbre&chen</source>
|
<source>Alt+C</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+C</source>
|
<source>Settings</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Cancel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Securi&try</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Clear clipboard after:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Seconds</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Sh&ow passwords in plain text by default</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Alt+O</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Appea&rance</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Banner Color</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Text Color:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Change...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Color 2:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>C&hange...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Alt+H</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Color 1:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Expand group tree when opening a database</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Other</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Remember last opend file</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<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>
|
|
||||||
<source>Passworteingabe</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Passwort:</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>O&K</source>
|
<source>O&K</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
@ -1442,10 +1426,6 @@ Make sure you have write access to '~/.keepass'.</source>
|
||||||
<source>Alt+K</source>
|
<source>Alt+K</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Abbre&chen</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Alt+C</source>
|
<source>Alt+C</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
@ -1454,6 +1434,18 @@ Make sure you have write access to '~/.keepass'.</source>
|
||||||
<source>...</source>
|
<source>...</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Enter your Password</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Password:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Cancel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>dbsettingdlg_base</name>
|
<name>dbsettingdlg_base</name>
|
||||||
|
|
Loading…
Reference in New Issue