diff --git a/src/Database.cpp b/src/Database.cpp index 4df0d74..e85be07 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -24,10 +24,10 @@ CEntry::CEntry(){ ImageID=0; GroupID=0; -Creation.SetToNow(); -LastMod.SetToNow(); -LastAccess.SetToNow(); -Expire.Set(28,12,2999,0,0,0); +Creation=QDateTime::currentDateTime(); +LastMod=QDateTime::currentDateTime(); +LastAccess=QDateTime::currentDateTime(); +Expire=QDateTime(QDate(2999,12,28),QTime(23,59,59)); BinaryDataLength=0; pBinaryData=NULL; } @@ -35,10 +35,10 @@ pBinaryData=NULL; bool CGroup::UI_ExpandByDefault=true; CGroup::CGroup(){ -Creation.SetToNow(); -LastAccess.SetToNow(); -LastMod.SetToNow(); -Expire.Set(1,1,2999,0,0,0); +Creation=QDateTime::currentDateTime(); +LastAccess=QDateTime::currentDateTime(); +LastMod=QDateTime::currentDateTime(); +Expire=QDateTime(QDate(2999,12,28),QTime(23,59,59)); Level=0; ImageID=0; Name=""; diff --git a/src/Database.h b/src/Database.h index b8cdd15..6c62eec 100644 --- a/src/Database.h +++ b/src/Database.h @@ -21,8 +21,9 @@ #define _DATABASE_H_ #include -#include "lib/PwmTime.h" +#include #include "lib/SecString.h" +using namespace std; class CEntry{ public: @@ -38,10 +39,10 @@ QString UserName; SecString Password; QString Additional; QString BinaryDesc; -CPwmTime Creation; -CPwmTime LastMod; -CPwmTime LastAccess; -CPwmTime Expire; +QDateTime Creation; +QDateTime LastMod; +QDateTime LastAccess; +QDateTime Expire; Q_UINT8 *pBinaryData; Q_UINT32 BinaryDataLength; Q_UINT32 PasswordLength; @@ -57,10 +58,10 @@ Q_UINT32 ID; Q_UINT32 ImageID; Q_UINT32 NumEntries; QString Name; -CPwmTime Creation; -CPwmTime LastMod; -CPwmTime LastAccess; -CPwmTime Expire; +QDateTime Creation; +QDateTime LastMod; +QDateTime LastAccess; +QDateTime Expire; Q_UINT16 Level; Q_UINT32 Flags; bool ReadGroupField(Q_UINT16 FieldType, Q_UINT32 FieldSize, Q_UINT8 *pData); @@ -75,21 +76,15 @@ typedef vector::iterator EntryItr; typedef vector::iterator GroupItr; -class AbstractDatabase{ -public: - vectorGroups; - vectorEntries; -}; - - - -class Database:public AbstractDatabase{ +class Database{ public: Q_UINT32 CryptoAlgorithmus; Q_UINT32 KeyEncRounds; QString filename; bool modflag; int SearchGroupID; + vectorGroups; + vectorEntries; protected: Q_UINT8 MasterKey[32]; diff --git a/src/PwManager.cpp b/src/PwManager.cpp index 28bd789..902ba9b 100755 --- a/src/PwManager.cpp +++ b/src/PwManager.cpp @@ -19,7 +19,7 @@ ***************************************************************************/ #include "global.h" -#include +#include #include #include #include @@ -29,10 +29,27 @@ #include "crypto/rijndael.h" #include "crypto/twoclass.h" #include "lib/random.h" - +using namespace std; #include "PwManager.h" +QString PwDatabase::getError(){ +if(Errors.size()){ +QString r=Errors.front(); +Errors.pop_front(); +return r; +} +else return QString(trUtf8("unbekannter Fehler")); +} +QString PwDatabase::getErrors(){ +QString r; +for(int i=0; i 2147483446) || (crypto_size == 0)){err=trUtf8("Unerwarteter Wert für 'crypto_size'"); return false;} +if((crypto_size > 2147483446) || (crypto_size == 0)){err=trUtf8("Entschlüsselung nicht möglich - der Schlüssel ist falsch oder die Datei beschädigt."); return false;} sha256_starts(&sha32); sha256_update(&sha32,(unsigned char *)buffer + DB_HEADER_SIZE,crypto_size); @@ -418,16 +435,16 @@ bool CGroup::ReadGroupField(Q_UINT16 FieldType, Q_UINT32 FieldSize, Q_UINT8 *pDa Name=QString::fromUtf8((char*)pData); break; case 0x0003: - Creation.Set(pData); + Creation=dateFromPackedStruct5(pData); break; case 0x0004: - LastMod.Set(pData); + LastMod=dateFromPackedStruct5(pData); break; case 0x0005: - LastAccess.Set(pData); + LastAccess=dateFromPackedStruct5(pData); break; case 0x0006: - Expire.Set(pData); + Expire=dateFromPackedStruct5(pData); break; case 0x0007: memcpyFromLEnd32(&ImageID, (char*)pData); @@ -491,16 +508,16 @@ switch(FieldType) Additional=QString::fromUtf8((char*)pData); break; case 0x0009: - Creation.Set(pData); + Creation=dateFromPackedStruct5(pData); break; case 0x000A: - LastMod.Set(pData); + LastMod=dateFromPackedStruct5(pData); break; case 0x000B: - LastAccess.Set(pData); + LastAccess=dateFromPackedStruct5(pData); break; case 0x000C: - Expire.Set(pData); + Expire=dateFromPackedStruct5(pData); break; case 0x000D: BinaryDesc=(char*)pData; @@ -527,13 +544,13 @@ switch(FieldType) return true; // Field processed } -bool PwDatabase::CloseDataBase(){ +bool PwDatabase::closeDatabase(){ Groups.clear(); Entries.clear(); return true; } -bool PwDatabase::SaveDataBase(QString filename){ +bool PwDatabase::saveDatabase(){ CGroup SearchGroup; Q_UINT32 NumGroups,NumEntries,Signature1,Signature2,Flags,Version; Q_UINT8 TrafoRandomSeed[32]; @@ -604,22 +621,22 @@ for(int i=0; i < Groups.size(); i++){ FieldType = 0x0003; FieldSize = 5; memcpy(buffer+pos, &FieldType, 2); pos += 2; memcpy(buffer+pos, &FieldSize, 4); pos += 4; - Groups[i].Creation.GetPackedTime((unsigned char*)buffer+pos);pos += 5; + dateToPackedStruct5(Groups[i].Creation,(unsigned char*)buffer+pos); pos += 5; FieldType = 0x0004; FieldSize = 5; memcpy(buffer+pos, &FieldType, 2); pos += 2; memcpy(buffer+pos, &FieldSize, 4); pos += 4; - Groups[i].LastMod.GetPackedTime((unsigned char*)buffer+pos);pos += 5; + dateToPackedStruct5(Groups[i].LastMod,(unsigned char*)buffer+pos);pos += 5; FieldType = 0x0005; FieldSize = 5; memcpy(buffer+pos, &FieldType, 2); pos += 2; memcpy(buffer+pos, &FieldSize, 4); pos += 4; - Groups[i].LastAccess.GetPackedTime((unsigned char*)buffer+pos);pos += 5; + dateToPackedStruct5(Groups[i].LastAccess,(unsigned char*)buffer+pos);pos += 5; FieldType = 0x0006; FieldSize = 5; memcpy(buffer+pos, &FieldType, 2); pos += 2; memcpy(buffer+pos, &FieldSize, 4); pos += 4; - Groups[i].Expire.GetPackedTime((unsigned char*)buffer+pos);pos += 5; + dateToPackedStruct5(Groups[i].Expire,(unsigned char*)buffer+pos);pos += 5; FieldType = 0x0007; FieldSize = 4; memcpy(buffer+pos, &FieldType, 2); pos += 2; @@ -692,23 +709,23 @@ for(int i = 0; i < Entries.size(); i++){ FieldType = 0x0009; FieldSize = 5; memcpy(buffer+pos, &FieldType, 2); pos += 2; memcpy(buffer+pos, &FieldSize, 4); pos += 4; - Entries[i].Creation.GetPackedTime((unsigned char*)buffer+pos); pos+=5; + dateToPackedStruct5(Entries[i].Creation,(unsigned char*)buffer+pos); pos+=5; FieldType = 0x000A; FieldSize = 5; memcpy(buffer+pos, &FieldType, 2); pos += 2; memcpy(buffer+pos, &FieldSize, 4); pos += 4; - Entries[i].LastMod.GetPackedTime((unsigned char*)buffer+pos); pos+=5; + dateToPackedStruct5(Entries[i].LastMod,(unsigned char*)buffer+pos); pos+=5; FieldType = 0x000B; FieldSize = 5; memcpy(buffer+pos, &FieldType, 2); pos += 2; memcpy(buffer+pos, &FieldSize, 4); pos += 4; - Entries[i].LastAccess.GetPackedTime((unsigned char*)buffer+pos); pos+=5; + dateToPackedStruct5(Entries[i].LastAccess,(unsigned char*)buffer+pos); pos+=5; FieldType = 0x000C; FieldSize = 5; memcpy(buffer+pos, &FieldType, 2); pos += 2; memcpy(buffer+pos, &FieldSize, 4); pos += 4; - Entries[i].Expire.GetPackedTime((unsigned char*)buffer+pos); pos+=5; + dateToPackedStruct5(Entries[i].Expire,(unsigned char*)buffer+pos); pos+=5; FieldType = 0x000D; FieldSize = Entries[i].BinaryDesc.utf8().length() + 1; // Add terminating NULL character space @@ -797,18 +814,6 @@ if(SearchGroupID!=-1)Groups.push_back(SearchGroup); return true; } -bool PwDatabase::NewDataBase(){ -filename=""; -SearchGroupID=-1; -CryptoAlgorithmus=ALGO_AES; -KeyEncRounds=6000; - -CGroup g; -g.ID=1; -g.Name=QObject::trUtf8("Standardgruppe"); -Groups.push_back(g); -} - GroupItr PwDatabase::getGroupIterator(CGroup* pGroup){ //for(vector::iterator i=Groups.begin();i!=Groups.end();i++){ //if((*i).ID==pGroup->ID)return i;} @@ -961,3 +966,27 @@ void memcpyFromLEnd16(Q_UINT16* dst,char* src){ memcpy(dst+0,src+1,1); #endif } + +const QDateTime Date_Never(QDate(2999,12,28),QTime(23,59,59)); + +QDateTime dateFromPackedStruct5(const unsigned char* pBytes){ +Q_UINT32 dw1, dw2, dw3, dw4, dw5; +dw1 = (Q_UINT32)pBytes[0]; dw2 = (Q_UINT32)pBytes[1]; dw3 = (Q_UINT32)pBytes[2]; +dw4 = (Q_UINT32)pBytes[3]; dw5 = (Q_UINT32)pBytes[4]; +int y = (dw1 << 6) | (dw2 >> 2); +int mon = ((dw2 & 0x00000003) << 2) | (dw3 >> 6); +int d = (dw3 >> 1) & 0x0000001F; +int h = ((dw3 & 0x00000001) << 4) | (dw4 >> 4); +int min = ((dw4 & 0x0000000F) << 2) | (dw5 >> 6); +int s = dw5 & 0x0000003F; +return QDateTime(QDate(y,mon,d),QTime(h,min)); +} + + +void dateToPackedStruct5(const QDateTime& d,unsigned char* pBytes){ +pBytes[0] = (Q_UINT8)(((Q_UINT32)d.date().year() >> 6) & 0x0000003F); +pBytes[1] = (Q_UINT8)((((Q_UINT32)d.date().year() & 0x0000003F) << 2) | (((Q_UINT32)d.date().month() >> 2) & 0x00000003)); +pBytes[2] = (Q_UINT8)((((Q_UINT32)d.date().month() & 0x00000003) << 6) | (((Q_UINT32)d.date().day() & 0x0000001F) << 1) | (((Q_UINT32)d.time().hour() >> 4) & 0x00000001)); +pBytes[3] = (Q_UINT8)((((Q_UINT32)d.time().hour() & 0x0000000F) << 4) | (((Q_UINT32)d.time().minute() >> 2) & 0x0000000F)); +pBytes[4] = (Q_UINT8)((((Q_UINT32)d.time().minute() & 0x00000003) << 6) | ((Q_UINT32)d.time().second() & 0x0000003F)); +} \ No newline at end of file diff --git a/src/PwManager.h b/src/PwManager.h index d71991a..a10bbf3 100755 --- a/src/PwManager.h +++ b/src/PwManager.h @@ -17,9 +17,10 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ + #ifndef _PW_MANAGER_H_ #define _PW_MANAGER_H_ - #define DB_HEADER_SIZE 124 + #define DB_HEADER_SIZE 124 #define PWM_DBSIG_1 0x9AA2D903 #define PWM_DBSIG_2 0xB54BFB65 #define PWM_DBVER_DW 0x00030002 @@ -30,12 +31,14 @@ #define PWM_STD_KEYENCROUNDS 6000 #define ALGO_AES 0 #define ALGO_TWOFISH 1 - #define KEEPASS_VERSION "0.1.3" #include #include +#include +#include +#include +#include #include "lib/SecString.h" -#include "lib/PwmTime.h" #include "Database.h" @@ -45,9 +48,8 @@ public: PwDatabase(); ~ PwDatabase(); bool loadDatabase(QString filename, QString& err); - bool SaveDataBase(QString filename); - bool NewDataBase(); - bool CloseDataBase(); + bool saveDatabase(); + bool closeDatabase(); bool CalcMasterKeyByPassword(QString& password); bool CalcMasterKeyByFile(QString filename); bool CalcMasterKeyByFileAndPw(QString filename, QString& password); @@ -59,7 +61,9 @@ public: EntryItr deleteEntry(CEntry* pEntry); void moveEntry(CEntry* pEntry,CGroup* pDstGroup); CEntry* addEntry(); - void merge(PwDatabase* db2); + void merge(PwDatabase* db2); + QString getError(); //get first error + QString getErrors(); //get all errors in a \n seperated String @@ -75,9 +79,14 @@ private: Q_UINT32 getNewGroupId(); Q_UINT32 getNewEntrySid(); bool convHexToBinaryKey(char* HexKey, char* dst); + QStringList Errors; }; + + extern const QDateTime Date_Never; void memcpyFromLEnd32(Q_UINT32* dst,char* src); void memcpyFromLEnd16(Q_UINT16* dst,char* src); + QDateTime dateFromPackedStruct5(const unsigned char* pBytes); + void dateToPackedStruct5(const QDateTime& datetime, unsigned char* dst); #endif diff --git a/src/PwmConfig.cpp b/src/PwmConfig.cpp index 68c5528..03c48c3 100755 --- a/src/PwmConfig.cpp +++ b/src/PwmConfig.cpp @@ -21,7 +21,8 @@ #include "PwmConfig.h" #include #include -#include +#include +using namespace std; bool CConfig::loadFromIni(QString filename){ CIniFile ini((char*)filename.data()); diff --git a/src/crypto/blowfish.h b/src/crypto/blowfish.h index 1c71148..15520e2 100755 --- a/src/crypto/blowfish.h +++ b/src/crypto/blowfish.h @@ -16,7 +16,7 @@ #define BLOWFISH_H #include "global.h" -#include +//#include #include using std::string; diff --git a/src/dialogs/AboutDlg.cpp b/src/dialogs/AboutDlg.cpp index 148bb02..70861ba 100755 --- a/src/dialogs/AboutDlg.cpp +++ b/src/dialogs/AboutDlg.cpp @@ -18,20 +18,20 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" #include #include #include #include #include +#include "main.h" #include "AboutDlg.h" CAboutDialog::CAboutDialog(QWidget* parent, const char* name, bool modal, Qt::WFlags fl) -: AboutDlg(parent,name, modal,fl) +: QDialog(parent,name, modal,fl) { -mainwnd=((CMainWindow*)parentWidget()); -mainwnd->CreateBanner(Banner,mainwnd->Icon_Key32x32,trUtf8("Keepass für Linux")); +setupUi(this); +createBanner(Banner,Icon_Key32x32,trUtf8("Keepass für Linux")); Link_Homepage=new LinkLabel(this,"Link_Homepage",trUtf8("http://keepass.de.vu"),80,143); Link_EMail=new LinkLabel(this,"Link_EMail",trUtf8("tarek.saidi@arcor.de"),80,163); Link_License=new LinkLabel(this,"Link_License",trUtf8("Lizenz"),80,183); @@ -60,7 +60,7 @@ QDialog dlg(this,NULL,true); Q3ScrollView scroll(&dlg); QLabel label(&scroll,"License-Scroll"); scroll.addChild(&label); -QFile gpl(((CMainWindow*)parentWidget())->appdir+"/../share/keepass/license.txt"); +QFile gpl(AppDir+"/../share/keepass/license.txt"); if(!gpl.exists()){ QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Die Datei '%1' konnte nicht gefunden werden.") .arg("'license.txt'")+"\n"+trUtf8("Die Anwendung wurde möglicherweiße nicht korrekt installiert.") @@ -89,10 +89,10 @@ delete buffer; } void CAboutDialog::OnHomepageClicked(){ -mainwnd->OpenURL("http://keepass.de.vu"); +openBrowser(tr("http://keepass.berlios.de/index.php")); } void CAboutDialog::OnEMailClicked(){ -mainwnd->OpenURL("mailto:tarek.saidi@arcor.de"); +openBrowser("mailto:tarek.saidi@arcor.de"); } diff --git a/src/dialogs/AboutDlg.h b/src/dialogs/AboutDlg.h index 05db255..0cb38e8 100755 --- a/src/dialogs/AboutDlg.h +++ b/src/dialogs/AboutDlg.h @@ -21,11 +21,11 @@ #define _ABOUTDIALOG_H_ #include "ui_AboutDlg.h" #include "lib/UrlLabel.h" -#include "mainwindow.h" +#include "main.h" -class CAboutDialog : public AboutDlg +class CAboutDialog : public QDialog, public Ui_AboutDlg { Q_OBJECT @@ -34,7 +34,6 @@ public: CAboutDialog(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 ); ~CAboutDialog(); - CMainWindow* mainwnd; /*$PUBLIC_FUNCTIONS$*/ public slots: diff --git a/src/dialogs/ChangeKeyDlg.cpp b/src/dialogs/ChangeKeyDlg.cpp index 7f36cd9..5d12eb4 100755 --- a/src/dialogs/ChangeKeyDlg.cpp +++ b/src/dialogs/ChangeKeyDlg.cpp @@ -17,7 +17,7 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" +#include "main.h" #include "PwManager.h" #include "../lib/random.h" #include "ChangeKeyDlg.h" @@ -33,12 +33,21 @@ CChangeKeyDlg::CChangeKeyDlg(QWidget* parent,PwDatabase* _db,const char* name, bool modal, Qt::WFlags fl) -: ChangeKeyDialog(parent,name, modal,fl) +: QDialog(parent,name, modal,fl) { +setupUi(this); +connect( ButtonOK, SIGNAL( clicked() ), this, SLOT( OnOK() ) ); +connect( ButtonCancel, SIGNAL( clicked() ), this, SLOT( OnCancel() ) ); +connect( Button_Browse, SIGNAL( clicked() ), this, SLOT( OnBrowse() ) ); +connect( Edit_Password, SIGNAL( textChanged(const QString&) ), this, SLOT( OnPasswordChanged(const QString&) ) ); +connect( Edit_Password_2, SIGNAL( textChanged(const QString&) ), this, SLOT( OnPassword2Changed(const QString&) ) ); +connect( Combo_Dirs, SIGNAL( activated(int) ), this, SLOT( OnComboChanged(int) ) ); +connect( CheckBox_Both, SIGNAL( stateChanged(int) ), this, SLOT( OnCheckBoxChanged(int) ) ); +connect( ButtonChangeEchoMode, SIGNAL( clicked() ), this, SLOT( ChangeEchoMode() ) ); + db=_db; -parentwnd=((CMainWindow*)parentWidget()); -parentwnd->CreateBanner(Banner,parentwnd->Icon_Key32x32,trUtf8("Hauptschlüssel ändern")); -if(!parentwnd->config->ShowPasswords)ChangeEchoMode(); +createBanner(Banner,Icon_Key32x32,trUtf8("Hauptschlüssel ändern")); +if(!config.ShowPasswords)ChangeEchoMode(); ///@PlatformSpecific QDir media("/media"); if(media.exists()){ diff --git a/src/dialogs/ChangeKeyDlg.h b/src/dialogs/ChangeKeyDlg.h index d70d7bf..fdab495 100755 --- a/src/dialogs/ChangeKeyDlg.h +++ b/src/dialogs/ChangeKeyDlg.h @@ -17,15 +17,16 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" #ifndef _CHANGEKEYDLG_H_ #define _CHANGEKEYDLG_H_ #include "ui_ChangeKeyDlg.h" #include #include #include +#include "main.h" +#include "PwManager.h" -class CChangeKeyDlg : public ChangeKeyDialog +class CChangeKeyDlg : public QDialog, public Ui_ChangeKeyDialog { Q_OBJECT @@ -57,7 +58,6 @@ public slots: private: PwDatabase* db; -CMainWindow* parentwnd; QStringList Paths; Q3ValueList IsFile; diff --git a/src/dialogs/DatabaseSettingsDlg.cpp b/src/dialogs/DatabaseSettingsDlg.cpp index 3a39ff1..c0a64a7 100755 --- a/src/dialogs/DatabaseSettingsDlg.cpp +++ b/src/dialogs/DatabaseSettingsDlg.cpp @@ -22,14 +22,17 @@ #include //Added by qt3to4: #include -#include "mainwindow.h" +#include "main.h" #include "DatabaseSettingsDlg.h" -CDbSettingsDlg::CDbSettingsDlg(CMainWindow* parent,Database* db, const char* name, bool modal, Qt::WFlags fl) -: dbsettingdlg_base(parent,name, modal,fl) +CDbSettingsDlg::CDbSettingsDlg(QWidget* parent,Database* db, const char* name, bool modal, Qt::WFlags fl) +: QDialog(parent,name, modal,fl) { +setupUi(this); database=db; +connect( ButtonOK, SIGNAL( clicked() ), this, SLOT( OnOK() ) ); +connect( ButtonCancel, SIGNAL( clicked() ), this, SLOT( OnCancel() ) ); } CDbSettingsDlg::~CDbSettingsDlg() @@ -38,7 +41,7 @@ CDbSettingsDlg::~CDbSettingsDlg() void CDbSettingsDlg::showEvent(QShowEvent *event){ if(event->spontaneous()==false){ -((CMainWindow*)parentWidget())->CreateBanner(Banner,((CMainWindow*)parentWidget())->Icon_Settings32x32,"Einstellungen"); +createBanner(Banner,Icon_Settings32x32,"Einstellungen"); ComboAlgo->insertItem(trUtf8("AES(Rijndael): 256 Bit (Standard)"),0); ComboAlgo->insertItem(trUtf8("Twofish: 256 Bit"),1); ComboAlgo->setCurrentItem(database->CryptoAlgorithmus); //Achtung: AlgoID muss gleich dem ComboBox Index sein! @@ -49,7 +52,7 @@ EditRounds->setText(QString::number(database->KeyEncRounds)); void CDbSettingsDlg::OnCancel() { -close(); +done(0); } @@ -72,7 +75,7 @@ return; database->KeyEncRounds=rounds; database->CryptoAlgorithmus=ComboAlgo->currentItem(); -close(); +done(1); } diff --git a/src/dialogs/DatabaseSettingsDlg.h b/src/dialogs/DatabaseSettingsDlg.h index 06bd497..524fdd5 100755 --- a/src/dialogs/DatabaseSettingsDlg.h +++ b/src/dialogs/DatabaseSettingsDlg.h @@ -20,17 +20,17 @@ #ifndef DBSETTINGSDLG_H #define DBSETTINGSDLG_H #include "ui_DatabaseSettingsDlg.h" -#include "mainwindow.h" +#include "main.h" #include "Database.h" //Added by qt3to4: #include -class CDbSettingsDlg : public dbsettingdlg_base +class CDbSettingsDlg : public QDialog, public Ui_dbsettingdlg_base { Q_OBJECT public: - CDbSettingsDlg(CMainWindow* parent,Database* db,const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 ); + CDbSettingsDlg(QWidget* parent,Database* db,const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 ); ~CDbSettingsDlg(); virtual void showEvent(QShowEvent *); /*$PUBLIC_FUNCTIONS$*/ diff --git a/src/dialogs/EditEntryDlg.cpp b/src/dialogs/EditEntryDlg.cpp index dec900c..4cd6f92 100755 --- a/src/dialogs/EditEntryDlg.cpp +++ b/src/dialogs/EditEntryDlg.cpp @@ -17,7 +17,7 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" +#include "main.h" #include #include @@ -43,72 +43,97 @@ -CEditEntryDlg::CEditEntryDlg(QWidget* parent, const char* name, bool modal, Qt::WFlags fl) -: EditEntryDialog(parent,name, modal,fl) +CEditEntryDlg::CEditEntryDlg(PwDatabase* _db, CEntry* _entry,QWidget* parent, const char* name, bool modal, Qt::WFlags fl) +: QDialog(parent,name, modal,fl) { - -pw=((CMainWindow*)parentWidget())->db; -mainwnd=((CMainWindow*)parentWidget()); -mainwnd->CreateBanner(Banner,mainwnd->Icon_Key32x32,trUtf8("Eintrag bearbeiten")); +Q_ASSERT(_db); +Q_ASSERT(_entry); +entry=_entry; +db=_db; +setupUi(this); +createBanner(Banner,Icon_Key32x32,trUtf8("Eintrag bearbeiten")); ModFlag=false; -} - -CEditEntryDlg::~CEditEntryDlg() -{ +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, SIGNAL(textChanged(const QString&)), this, SLOT( OnPasswordTextChanged(const QString&))); +connect(ButtonEchoMode, SIGNAL(clicked()), this, SLOT( ChangeEchoMode())); +connect(ButtonCancel, SIGNAL(clicked()), this, SLOT( OnButtonCancel())); +connect(ButtonOpenAttachment, SIGNAL(clicked()), this, SLOT( OnNewAttachment())); +connect(ButtonDeleteAttachment, SIGNAL(clicked()), this, SLOT( OnDeleteAttachment())); +connect(ButtonSaveAttachment, SIGNAL(clicked()), this, SLOT( OnSaveAttachment())); +connect(ButtonGenPw, SIGNAL(clicked()), this, SLOT( OnButtonGenPw())); +connect(ButtonOK, SIGNAL(clicked()),this,SLOT(OnButtonOK())); +connect(CheckBox_ExpiresNever,SIGNAL(stateChanged(int)),this,SLOT(OnCheckBoxExpiresNeverChanged(int))); + +ButtonOpenAttachment->setIcon(*Icon_FileOpen); +ButtonDeleteAttachment->setIcon(*Icon_EditDelete); +ButtonSaveAttachment->setIcon(*Icon_FileSave); - -} - - -void CEditEntryDlg::showEvent(QShowEvent *event){ - -if(event->spontaneous()==false){ if(entry->pBinaryData==NULL){ -ButtonSaveAttachment->setDisabled(true); -ButtonDeleteAttachment->setDisabled(true); -} + ButtonSaveAttachment->setDisabled(true); + ButtonDeleteAttachment->setDisabled(true);} setCaption(entry->Title); -setIcon(mainwnd->EntryIcons[entry->ImageID]); +setIcon(EntryIcons[entry->ImageID]); Edit_Title->setText(entry->Title); Edit_UserName->setText(entry->UserName); Edit_URL->setText(entry->URL); Edit_Password->setText(entry->Password.getString()); Edit_Password_w->setText(entry->Password.getString()); entry->Password.delRef(); -if(!mainwnd->config->ShowPasswords)ChangeEchoMode(); +if(!config.ShowPasswords) + ChangeEchoMode(); OnPasswordwLostFocus(); int bits=(entry->Password.length()*8); Label_Bits->setText(QString::number(bits)+" Bit"); -if(bits>128)bits=128; -Progress_Quali->setProgress(bits,128); -Progress_Quali->setPercentageVisible(false); +if(bits>128) + bits=128; +Progress_Quali->setValue(100*bits/128); Edit_Attachment->setText(entry->BinaryDesc); Edit_Comment->setText(entry->Additional); InitGroupComboBox(); InitIconComboBox(); -Edit_Expire_Date->setText((entry->Expire.GetString(0)).mid(0,10)); -Edit_Expire_Time->setText((entry->Expire.GetString(0)).mid(11,8)); -if(entry->BinaryDataLength==0){ -Label_AttachmentSize->setText(""); -} -else -{ -QString unit; -int faktor; -int prec; +if(entry->BinaryDataLength==0) + Label_AttachmentSize->setText(""); +else{ + QString unit; + int faktor; + int prec; if(entry->BinaryDataLength<1000){unit=" Byte";faktor=1;prec=0;} else {if(entry->BinaryDataLength<1000000){unit=" kB";faktor=1000;prec=1;} else{unit=" MB";faktor=1000000;prec=1;} - } -Label_AttachmentSize->setText(QString::number((float)entry->BinaryDataLength/(float)faktor,'f',prec)+unit); + } + Label_AttachmentSize->setText(QString::number((float)entry->BinaryDataLength/(float)faktor,'f',prec)+unit); +} +if(entry->Expire==Date_Never){ + DateTime_Expire->setDisabled(true); + CheckBox_ExpiresNever->setChecked(true); } +else{ +DateTime_Expire->setDateTime(entry->Expire); +} + + + +} + +CEditEntryDlg::~CEditEntryDlg() +{ + + +} + + +void CEditEntryDlg::showEvent(QShowEvent *event){ + +if(event->spontaneous()==false){ + } } void CEditEntryDlg::InitIconComboBox(){ for(int i=0;i<52;i++){ -Combo_IconPicker->insertItem(((CMainWindow*)parentWidget())->EntryIcons[i],"",i); +Combo_IconPicker->insertItem(EntryIcons[i],"",i); } Combo_IconPicker->setCurrentItem(entry->ImageID); } @@ -117,38 +142,26 @@ Combo_IconPicker->setCurrentItem(entry->ImageID); void CEditEntryDlg::InitGroupComboBox(){ QString tmp; int i; -for(i=0;i!=pw->Groups.size();i++){ +for(i=0;i!=db->Groups.size();i++){ tmp=""; - for(int j=0;jGroups[i].Level;j++)tmp+=" "; -Combo_Group->insertItem(((CMainWindow*)parentWidget())->EntryIcons[pw->Groups[i].ImageID], - tmp+pw->Groups[i].Name,i); + for(int j=0;jGroups[i].Level;j++)tmp+=" "; +Combo_Group->insertItem(EntryIcons[db->Groups[i].ImageID], + tmp+db->Groups[i].Name,i); } -Combo_Group->setCurrentItem(pw->getGroupIndex(entry->GroupID)); +Combo_Group->setCurrentItem(db->getGroupIndex(entry->GroupID)); } void CEditEntryDlg::OnButtonOK() { - if(QString::compare(Edit_Password->text(),Edit_Password_w->text())!=0){ QMessageBox::warning(NULL,"Stopp",QString::fromUtf8("Passwort und Passwortwiederholung stimmen\nnicht überein."),"OK"); return; } -QString str=Edit_Expire_Date->text(); -if(CPwmTime::IsValidDate(str)==false){ -QMessageBox::warning(NULL,"Stopp",QString::fromUtf8(str+" ist kein gültiges Datum."),"OK"); -return; -} -str=Edit_Expire_Time->text(); -if(CPwmTime::IsValidTime(str)==false){ -QMessageBox::warning(NULL,"Stopp",QString::fromUtf8(str+" ist keine gültige Uhrzeit."),"OK"); -return; -} +if(CheckBox_ExpiresNever->state()==Qt::Checked){ + DateTime_Expire->setDateTime(Date_Never);} -CPwmTime tmp_Expire; -tmp_Expire.SetDate(Edit_Expire_Date->text()); -tmp_Expire.SetTime(Edit_Expire_Time->text()); -if(tmp_Expire!=entry->Expire) +if(DateTime_Expire->dateTime()!=entry->Expire) ModFlag=true; if(entry->Title!=Edit_Title->text()) ModFlag=true; @@ -163,18 +176,17 @@ if(passw!=Edit_Password->text()) ModFlag=true; entry->Password.delRef(); -entry->Expire.SetDate(Edit_Expire_Date->text()); -entry->Expire.SetTime(Edit_Expire_Time->text()); -entry->LastAccess.SetToNow(); -if(ModFlag)entry->LastMod.SetToNow(); +entry->Expire=DateTime_Expire->dateTime(); +entry->LastAccess=QDateTime::currentDateTime(); +if(ModFlag)entry->LastMod=QDateTime::currentDateTime(); entry->Title=Edit_Title->text(); entry->UserName=Edit_UserName->text(); entry->URL=Edit_URL->text(); QString s=Edit_Password->text(); entry->Password.setString(s,true); entry->Additional=Edit_Comment->text(); -if(Combo_Group->currentItem()!=pw->getGroupIndex(entry->GroupID)){ -pw->moveEntry(entry,&pw->Groups[Combo_Group->currentItem()]); +if(Combo_Group->currentItem()!=db->getGroupIndex(entry->GroupID)){ +db->moveEntry(entry,&db->Groups[Combo_Group->currentItem()]); } entry->ImageID=Combo_IconPicker->currentItem(); done(1); @@ -182,7 +194,7 @@ done(1); void CEditEntryDlg::OnButtonCancel() { -entry->LastAccess.SetToNow(); +entry->LastAccess=QDateTime::currentDateTime(); done(0); } @@ -207,7 +219,7 @@ Edit_Password_w->setText(""); int bits=(Edit_Password->text().length()*8); Label_Bits->setText(QString::number(bits)+" Bit"); if(bits>128)bits=128; -Progress_Quali->setProgress(bits,128); +Progress_Quali->setValue(100*bits/128); } void CEditEntryDlg::OnPasswordwTextChanged(const QString& w) @@ -237,30 +249,6 @@ Edit_Password_w->setPaletteBackgroundColor(QColor(255,255,255)); ///@FIXME Stand } -void CEditEntryDlg::OnExpDateLostFocus() -{ -QString str=Edit_Expire_Date->text(); -if(CPwmTime::IsValidDate(str)==false){ -Edit_Expire_Date->setPaletteBackgroundColor(QColor(255,125,125)); -} -else -{ -Edit_Expire_Date->setPaletteBackgroundColor(QColor(255,255,255));///@FIXME Standart-Hintergrundfarbe nicht weiß -} -} - -void CEditEntryDlg::OnExpTimeLostFocus() -{ -QString str=Edit_Expire_Time->text(); -if(CPwmTime::IsValidTime(str)==false){ -Edit_Expire_Time->setPaletteBackgroundColor(QColor(255,125,125)); -} -else -{ -Edit_Expire_Time->setPaletteBackgroundColor(QColor(255,255,255));///@FIXME Standart-Hintergrundfarbe nicht weiß -} -} - void CEditEntryDlg::OnNewAttachment() { QString filename=Q3FileDialog::getOpenFileName(QDir::homeDirPath(),"",this,QString::fromUtf8("Anhang hinzufügen...")); @@ -355,12 +343,15 @@ pDlg->show(); } - - - - - - +void CEditEntryDlg::OnCheckBoxExpiresNeverChanged(int state){ +if(state==Qt::Unchecked){ + DateTime_Expire->setDisabled(false); +} +else +{ + DateTime_Expire->setDisabled(true); +} +} diff --git a/src/dialogs/EditEntryDlg.h b/src/dialogs/EditEntryDlg.h index 14fd80d..840d4ad 100755 --- a/src/dialogs/EditEntryDlg.h +++ b/src/dialogs/EditEntryDlg.h @@ -17,20 +17,21 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" + #ifndef EDITENTRYDLG_H #define EDITENTRYDLG_H #include "ui_EditEntryDlg.h" -//Added by qt3to4: #include #include +#include "main.h" +#include "PwManager.h" -class CEditEntryDlg : public EditEntryDialog +class CEditEntryDlg : public QDialog, public Ui_EditEntryDialog { Q_OBJECT public: - CEditEntryDlg(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0); + CEditEntryDlg(PwDatabase* _db, CEntry* _entry,QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0); ~CEditEntryDlg(); virtual void showEvent(QShowEvent *); /*$PUBLIC_FUNCTIONS$*/ @@ -46,9 +47,8 @@ protected slots: /*$PROTECTED_SLOTS$*/ public: -CMainWindow* mainwnd; CEntry* entry; -PwDatabase* pw; +PwDatabase* db; QPixmap* banner_pixmap; bool ModFlag; @@ -59,17 +59,16 @@ void InitIconComboBox(); public slots: - virtual void OnExpTimeLostFocus(); - virtual void OnExpDateLostFocus(); - virtual void OnPasswordwLostFocus(); - virtual void OnPasswordwTextChanged(const QString&); - virtual void OnPasswordTextChanged(const QString&); - virtual void ChangeEchoMode(); - virtual void OnButtonCancel(); - virtual void OnNewAttachment(); - virtual void OnDeleteAttachment(); - virtual void OnSaveAttachment(); - virtual void OnButtonGenPw(); + void OnPasswordwLostFocus(); + void OnPasswordwTextChanged(const QString&); + void OnPasswordTextChanged(const QString&); + void ChangeEchoMode(); + void OnButtonCancel(); + void OnNewAttachment(); + void OnDeleteAttachment(); + void OnSaveAttachment(); + void OnButtonGenPw(); + void OnCheckBoxExpiresNeverChanged(int state); }; diff --git a/src/dialogs/EditGroupDlg.cpp b/src/dialogs/EditGroupDlg.cpp index 82ca266..c740176 100755 --- a/src/dialogs/EditGroupDlg.cpp +++ b/src/dialogs/EditGroupDlg.cpp @@ -18,7 +18,7 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" +#include "main.h" #include #include @@ -28,8 +28,9 @@ CEditGroupDialog::CEditGroupDialog(QWidget* parent, const char* name, bool modal, Qt::WFlags fl) -: EditGroupDialog(parent,name, modal,fl) +: QDialog(parent,name, modal,fl) { +setupUi(this); IconID=0; } @@ -41,7 +42,7 @@ void CEditGroupDialog::showEvent(QShowEvent *event){ if(event->spontaneous()==false){ EditTitle->setText(GroupName); for(int i=0;i<52;i++){ -ComboIconPicker->insertItem(((CMainWindow*)parentWidget())->EntryIcons[i],"",i); +ComboIconPicker->insertItem(EntryIcons[i],"",i); } ComboIconPicker->setCurrentItem(IconID); }} diff --git a/src/dialogs/EditGroupDlg.h b/src/dialogs/EditGroupDlg.h index 4e70f93..4489316 100755 --- a/src/dialogs/EditGroupDlg.h +++ b/src/dialogs/EditGroupDlg.h @@ -26,7 +26,7 @@ //Added by qt3to4: #include -class CEditGroupDialog : public EditGroupDialog +class CEditGroupDialog : public QDialog, public Ui_EditGroupDialog { Q_OBJECT diff --git a/src/dialogs/LanguageDlg.cpp b/src/dialogs/LanguageDlg.cpp index a4877e4..2e23ed5 100755 --- a/src/dialogs/LanguageDlg.cpp +++ b/src/dialogs/LanguageDlg.cpp @@ -17,7 +17,7 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" +#include "main.h" #include "LanguageDlg.h" #include #include @@ -26,7 +26,8 @@ #include //Added by qt3to4: #include -#include +#include +using namespace std; const char* infostrings[]={ QT_TRANSLATE_NOOP("_INFO","$TRANSL_AUTHOR"), @@ -38,23 +39,24 @@ const char* msg[]={QT_TRANSLATE_NOOP("_MSG","Die Änderung der Sprache wird erst QT_TRANSLATE_NOOP("_MSG","Hinweis")}; CLanguageDlg::CLanguageDlg(QWidget* parent, const char* name, Qt::WFlags fl) -: LanguageDlg(parent,name,fl) +: QDialog(parent,name,fl) { -parentwnd=((CMainWindow*)parentWidget()); -parentwnd->CreateBanner(Banner,parentwnd->Icon_I18n32x32,trUtf8("Spracheinstellungen")); +setupUi(this); + +createBanner(Banner,Icon_I18n32x32,trUtf8("Spracheinstellungen")); Q3ListViewItem* item; -QString& config_lang=parentwnd->config->Language; +QString& config_lang=config.Language; QStringList files; -QString langdir=parentwnd->appdir+"/../share/keepass/i18n/"; +QString langdir=AppDir+"/../share/keepass/i18n/"; QDir dir(langdir); if(dir.exists()){ files=dir.entryList("*.qm",QDir::Files); } List->insertItem(item=new Q3ListViewItem(List,"","Deutsch","-","-")); -if(config_lang=="_DEUTSCH_")item->setPixmap(0,*parentwnd->Icon_Ok16x16); +if(config_lang=="_DEUTSCH_")item->setPixmap(0,*Icon_Ok16x16); pItems.push_back(item); filenames.push_back("_DEUTSCH_"); @@ -67,7 +69,7 @@ QTranslator translator; List->insertItem(item=new Q3ListViewItem(List,"",translator.translate("_INFO","$TRANSL_LANGUAGE") ,translator.translate("_INFO","$TRANSL_VERSION") ,translator.translate("_INFO","$TRANSL_AUTHOR"))); -if(config_lang==files[i])item->setPixmap(0,*parentwnd->Icon_Ok16x16); +if(config_lang==files[i])item->setPixmap(0,*Icon_Ok16x16); pItems.push_back(item); filenames.push_back(files[i]); } @@ -96,7 +98,7 @@ void CLanguageDlg::OnItemRightClick(Q3ListViewItem* item) void CLanguageDlg::OnItemDoubleClicked(Q3ListViewItem* item) // == Slot für Button "wählen" { int i; -QString langdir=parentwnd->appdir+"/../share/keepass/i18n/"; +QString langdir=AppDir+"/../share/keepass/i18n/"; for(i=0;iconfig->Language=filenames[i]; +config.Language=filenames[i]; for(int j=0;jsetPixmap(0,*parentwnd->Icon_Ok16x16); +if(j==i)pItems[j]->setPixmap(0,*Icon_Ok16x16); else pItems[j]->setPixmap(0,0);} List->setColumnWidth(0,20); diff --git a/src/dialogs/LanguageDlg.h b/src/dialogs/LanguageDlg.h index 59f82bc..056cd1f 100755 --- a/src/dialogs/LanguageDlg.h +++ b/src/dialogs/LanguageDlg.h @@ -17,7 +17,7 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" +#include "main.h" #ifndef _LANGUAGEDLG_H_ #define _LANGUAGEDLG_H_ #include "ui_LanguageDlg.h" @@ -27,14 +27,13 @@ -class CLanguageDlg : public LanguageDlg +class CLanguageDlg : public QDialog, public Ui_LanguageDlg { Q_OBJECT public: CLanguageDlg(QWidget* parent = 0, const char* name = 0, Qt::WFlags fl = 0 ); ~CLanguageDlg(); - CMainWindow* parentwnd; vector filenames; vector pItems; /*$PUBLIC_FUNCTIONS$*/ diff --git a/src/dialogs/PasswordDlg.cpp b/src/dialogs/PasswordDlg.cpp index d5f04d5..aadf287 100755 --- a/src/dialogs/PasswordDlg.cpp +++ b/src/dialogs/PasswordDlg.cpp @@ -18,7 +18,7 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" +#include "main.h" #include "PasswordDlg.h" #include @@ -34,12 +34,20 @@ CPasswordDialog::CPasswordDialog(QWidget* parent, const char* name, bool modal, Qt::WFlags fl) -: PasswordDlg(parent,name, modal,fl) +: QDialog(parent,name, modal,fl) { -parentwnd=((CMainWindow*)parentWidget()); -parentwnd->CreateBanner(Banner,parentwnd->Icon_Key32x32,trUtf8("Datenbank öffnen")); +setupUi(this); +createBanner(Banner,Icon_Key32x32,trUtf8("Datenbank öffnen")); Label_select=new LinkLabel((QWidget*)groupframe,"Select",trUtf8("Datei manuell wählen..."),410,100); -connect(Label_select,SIGNAL(clicked()),this,SLOT(OnSelectClicked())); +connect( Combo_Dirs, SIGNAL( activated(int) ), this, SLOT( OnComboSelectionChanged(int) ) ); +connect( ButtonBrowse, SIGNAL( clicked() ), this, SLOT( OnButtonBrowse() ) ); +connect( ButtonOK, SIGNAL( clicked() ), this, SLOT( OnOK() ) ); +connect( ButtonCancel, SIGNAL( clicked() ), this, SLOT( OnCancel() ) ); +connect( Edit_Password, SIGNAL( textChanged(const QString&) ), this, SLOT( OnPasswordChanged(const QString&) ) ); +connect( CheckBox_Both, SIGNAL( stateChanged(int) ), this, SLOT( OnCheckBox_BothChanged(int) ) ); +connect( ButtonChangeEchoMode, SIGNAL( clicked() ), this, SLOT( ChangeEchoMode() ) ); +connect( Edit_Password, SIGNAL( returnPressed() ), this, SLOT( OnOK() ) ); + ///@PlatformSpecific QDir media("/media"); if(media.exists()){ @@ -57,7 +65,7 @@ Combo_Dirs->insertItem(0,Paths[i]); IsFile.append(false); } -if(!parentwnd->config->ShowPasswords)ChangeEchoMode(); +if(!config.ShowPasswords)ChangeEchoMode(); } @@ -116,7 +124,7 @@ QMessageBox::warning(this,"Datei nicht gefunden",QString::fromUtf8("Im gewählte void CPasswordDialog::OnSelectClicked() { -if(Button_Browse->isEnabled()){ +if(ButtonBrowse->isEnabled()){ keyfile=Q3FileDialog::getOpenFileName(QDir::homeDirPath(),"",this,QString::fromUtf8("Schlüsseldatei öffnen")); if(keyfile=="")return; Combo_Dirs->insertItem(keyfile); @@ -133,13 +141,11 @@ IsFile.append(true); void CPasswordDialog::OnCancel() { -canceled=true; -close(); +done(0); } void CPasswordDialog::OnOK() { -canceled=false; if(CheckBox_Both->isChecked()){ if(password==""){QMessageBox::warning(this,trUtf8("Fehler"),trUtf8("Bitte geben Sie ein Passwort ein.") @@ -155,7 +161,7 @@ else ,trUtf8("OK"),"","",0,0); return;} } -close(); +done(1); } void CPasswordDialog::OnPasswordChanged(const QString &txt) @@ -163,10 +169,10 @@ void CPasswordDialog::OnPasswordChanged(const QString &txt) password=Edit_Password->text(); if(txt!="" && !(CheckBox_Both->isChecked())){ Combo_Dirs->setDisabled(true); -Button_Browse->setDisabled(true);} +ButtonBrowse->setDisabled(true);} else{ Combo_Dirs->setEnabled(true); -Button_Browse->setEnabled(true);} +ButtonBrowse->setEnabled(true);} } @@ -174,7 +180,7 @@ void CPasswordDialog::OnCheckBox_BothChanged(int state) { if(state==QCheckBox::On){ Combo_Dirs->setEnabled(true); -Button_Browse->setEnabled(true); +ButtonBrowse->setEnabled(true); Edit_Password->setEnabled(true);} else{ Edit_Password->setText(""); diff --git a/src/dialogs/PasswordDlg.h b/src/dialogs/PasswordDlg.h index 1d133cb..6b9450d 100755 --- a/src/dialogs/PasswordDlg.h +++ b/src/dialogs/PasswordDlg.h @@ -17,7 +17,7 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" +#include "main.h" #ifndef PASSWORDDIALOG_H #define PASSWORDDIALOG_H #include "lib/UrlLabel.h" @@ -25,12 +25,11 @@ //Added by qt3to4: #include -class CPasswordDialog : public PasswordDlg +class CPasswordDialog : public QDialog, public Ui_PasswordDlg { Q_OBJECT private: -CMainWindow* parentwnd; int NumComboEntries; QStringList Paths; Q3ValueList IsFile; @@ -41,7 +40,7 @@ public: QString keyfile; QString password; -bool canceled; + public: @@ -51,22 +50,21 @@ public: public slots: /*$PUBLIC_SLOTS$*/ - virtual void OnOK(); virtual void OnCancel(); virtual void OnSelectClicked(); virtual void OnButtonBrowse(); + virtual void OnComboSelectionChanged(int); + virtual void OnPasswordChanged(const QString &txt); + virtual void OnCheckBox_BothChanged(int state); + virtual void ChangeEchoMode(); protected: /*$PROTECTED_FUNCTIONS$*/ protected slots: /*$PROTECTED_SLOTS$*/ -public slots: - virtual void OnComboSelectionChanged(int); - virtual void OnPasswordChanged(const QString &txt); - virtual void OnCheckBox_BothChanged(int state); - virtual void ChangeEchoMode(); + }; #endif diff --git a/src/dialogs/PasswordGenDlg.cpp b/src/dialogs/PasswordGenDlg.cpp index 427604a..d61b48f 100755 --- a/src/dialogs/PasswordGenDlg.cpp +++ b/src/dialogs/PasswordGenDlg.cpp @@ -25,29 +25,29 @@ #include #include #include -#include +#include CGenPwDialog::CGenPwDialog(QWidget* parent, const char* name, bool modal, Qt::WFlags fl) -: GenPwDlg(parent,name, modal,fl) +: QDialog(parent,name, modal,fl) { -mainwnd=(CMainWindow*)(((CEditEntryDlg*)parentWidget())->parentWidget()); -mainwnd->CreateBanner(Banner,mainwnd->Icon_Key32x32,QString::fromUtf8("Passwort generieren")); - - - +setupUi(this); +createBanner(Banner,Icon_Key32x32,QString::fromUtf8("Passwort generieren")); Radio_1->setChecked(true); - Edit_chars->setDisabled(true); +connect(ButtonGenerate,SIGNAL(clicked()),this,SLOT(OnGeneratePw())); +connect(Radio_1,SIGNAL(toggled(bool)),this,SLOT(OnRadio1StateChanged(bool))); +connect(Radio_2,SIGNAL(toggled(bool)),this,SLOT(OnRadio2StateChanged(bool))); +connect(Button_Cancel,SIGNAL(clicked()),this,SLOT(OnCancel())); +connect(ButtonOK,SIGNAL(clicked()),this,SLOT(OnAccept())); } CGenPwDialog::~CGenPwDialog() { } -void CGenPwDialog::OnRadio1StateChanged(int state) +void CGenPwDialog::OnRadio1StateChanged(bool state) { -switch (state){ - case QCheckBox::On: +if(state){ Radio_2->setChecked(false); checkBox1->setEnabled(true); checkBox2->setEnabled(true); @@ -57,8 +57,7 @@ switch (state){ checkBox6->setEnabled(true); checkBox7->setEnabled(true); checkBox8->setEnabled(true); - break; - case QCheckBox::Off: +}else{ if(Radio_2->isChecked()==false)Radio_2->setChecked(true); checkBox1->setDisabled(true); checkBox2->setDisabled(true); @@ -68,27 +67,19 @@ switch (state){ checkBox6->setDisabled(true); checkBox7->setDisabled(true); checkBox8->setDisabled(true); - - break; - case QCheckBox::NoChange: - break; } } -void CGenPwDialog::OnRadio2StateChanged(int state) +void CGenPwDialog::OnRadio2StateChanged(bool state) { -switch (state){ - case QCheckBox::On: +if(state){ Radio_1->setChecked(false); Edit_chars->setEnabled(true); - break; - case QCheckBox::Off: +} +else{ if(Radio_1->isChecked()==false)Radio_1->setChecked(true); Edit_chars->setDisabled(true); - break; - case QCheckBox::NoChange: - break; } } diff --git a/src/dialogs/PasswordGenDlg.h b/src/dialogs/PasswordGenDlg.h index e4e3a07..90f39a5 100755 --- a/src/dialogs/PasswordGenDlg.h +++ b/src/dialogs/PasswordGenDlg.h @@ -17,7 +17,7 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" +#include "main.h" #ifndef GENPWDIALOG_H #define GENPWDIALOG_H #include "ui_PasswordGenDlg.h" @@ -25,7 +25,7 @@ -class CGenPwDialog : public GenPwDlg +class CGenPwDialog : public QDialog, public Ui_GenPwDlg { Q_OBJECT private: @@ -44,14 +44,10 @@ protected: protected slots: /*$PROTECTED_SLOTS$*/ -public: -CMainWindow* mainwnd; public slots: virtual void OnGeneratePw(); -public slots: - virtual void OnRadio2StateChanged(int); -public slots: - virtual void OnRadio1StateChanged(int); + virtual void OnRadio2StateChanged(bool); + virtual void OnRadio1StateChanged(bool); virtual void OnCancel(); virtual void OnAccept(); }; diff --git a/src/dialogs/SearchDlg.cpp b/src/dialogs/SearchDlg.cpp index 8b76d66..e5b5a53 100755 --- a/src/dialogs/SearchDlg.cpp +++ b/src/dialogs/SearchDlg.cpp @@ -18,6 +18,7 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include "main.h" #include "PwManager.h" #include "SearchDlg.h" #include @@ -26,33 +27,30 @@ #include CSearchDlg::CSearchDlg(CGroup* pGroup,QWidget* parent, const char* name, bool modal, Qt::WFlags fl) -: Search_Dlg(parent,name, modal,fl) +: QDialog(parent,name, modal,fl) { -parentwnd=(CMainWindow*)parent; -parentwnd->CreateBanner(Banner,parentwnd->Icon_Search32x32,tr("Suchen")); -group=pGroup; -pw=parentwnd->db; - -checkBox_Cs->setChecked(parentwnd->config->SearchOptions[0]); -checkBox_regExp->setChecked(parentwnd->config->SearchOptions[1]); -checkBox_Title->setChecked(parentwnd->config->SearchOptions[2]); -checkBox_Username->setChecked(parentwnd->config->SearchOptions[3]); -checkBox_Password->setChecked(parentwnd->config->SearchOptions[4]); -checkBox_Comment->setChecked(parentwnd->config->SearchOptions[5]); -checkBox_URL->setChecked(parentwnd->config->SearchOptions[6]); -checkBox_Attachment->setChecked(parentwnd->config->SearchOptions[7]); +setupUi(this); +createBanner(Banner,Icon_Search32x32,tr("Suchen")); +checkBox_Cs->setChecked(config.SearchOptions[0]); +checkBox_regExp->setChecked(config.SearchOptions[1]); +checkBox_Title->setChecked(config.SearchOptions[2]); +checkBox_Username->setChecked(config.SearchOptions[3]); +checkBox_Password->setChecked(config.SearchOptions[4]); +checkBox_Comment->setChecked(config.SearchOptions[5]); +checkBox_URL->setChecked(config.SearchOptions[6]); +checkBox_Attachment->setChecked(config.SearchOptions[7]); } CSearchDlg::~CSearchDlg() { -parentwnd->config->SearchOptions[0]=checkBox_Cs->isChecked(); -parentwnd->config->SearchOptions[1]=checkBox_regExp->isChecked(); -parentwnd->config->SearchOptions[2]=checkBox_Title->isChecked(); -parentwnd->config->SearchOptions[3]=checkBox_Username->isChecked(); -parentwnd->config->SearchOptions[4]=checkBox_Password->isChecked(); -parentwnd->config->SearchOptions[5]=checkBox_Comment->isChecked(); -parentwnd->config->SearchOptions[6]=checkBox_URL->isChecked(); -parentwnd->config->SearchOptions[7]=checkBox_Attachment->isChecked(); +config.SearchOptions[0]=checkBox_Cs->isChecked(); +config.SearchOptions[1]=checkBox_regExp->isChecked(); +config.SearchOptions[2]=checkBox_Title->isChecked(); +config.SearchOptions[3]=checkBox_Username->isChecked(); +config.SearchOptions[4]=checkBox_Password->isChecked(); +config.SearchOptions[5]=checkBox_Comment->isChecked(); +config.SearchOptions[6]=checkBox_URL->isChecked(); +config.SearchOptions[7]=checkBox_Attachment->isChecked(); } void CSearchDlg::OnButtonClose() @@ -60,9 +58,9 @@ void CSearchDlg::OnButtonClose() done(0); } - void CSearchDlg::OnButtonSearch() { +/* txt=Edit_Search->text(); regexp=checkBox_regExp->isChecked(); if(txt==""){ @@ -81,8 +79,12 @@ for(int i=0;iEntries.size();i++){ pw->Entries[i].Password.delRef(); if(hit)hits.push_back(&pw->Entries[i]); } +*/ done(1); + } + +/* bool CSearchDlg::search(QString& str){ if(regexp){ QRegExp exp(txt,checkBox_Cs->isChecked()); @@ -90,7 +92,7 @@ if(regexp){ else{ if(str.contains(txt,checkBox_Cs->isChecked())==0)return false;} return true; -} +}*/ /*$SPECIALIZATION$*/ diff --git a/src/dialogs/SearchDlg.h b/src/dialogs/SearchDlg.h index d099b52..d3c62f1 100755 --- a/src/dialogs/SearchDlg.h +++ b/src/dialogs/SearchDlg.h @@ -17,17 +17,18 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" #ifndef SEARCHDLG_H #define SEARCHDLG_H #include "ui_SearchDlg.h" +#include "main.h" +#include "PwManager.h" -class CSearchDlg : public Search_Dlg +class CSearchDlg : public QDialog, public Ui_Search_Dlg { Q_OBJECT - public: - CSearchDlg(CGroup* pGroup=NULL,QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 ); + CSearchDlg(CGroup* pGroup=NULL,QWidget* parent = 0, const char* name = 0, + bool modal = FALSE, Qt::WFlags fl = 0 ); ~CSearchDlg(); /*$PUBLIC_FUNCTIONS$*/ @@ -45,18 +46,9 @@ public slots: public slots: virtual void OnButtonSearch(); - private: - CMainWindow* parentwnd; - CGroup* group; - PwDatabase* pw; QString txt; bool regexp; - bool search(QString&); - -public: - vector hits; - }; #endif diff --git a/src/dialogs/SettingsDlg.cpp b/src/dialogs/SettingsDlg.cpp index 0048888..7508c3e 100755 --- a/src/dialogs/SettingsDlg.cpp +++ b/src/dialogs/SettingsDlg.cpp @@ -17,7 +17,7 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" +#include "main.h" #include #include #include @@ -27,30 +27,28 @@ CSettingsDlg::CSettingsDlg(QWidget* parent, const char* name, bool modal, Qt::WFlags fl) -: SettingsDialog(parent,name, modal,fl) +: QDialog(parent,name, modal,fl) { -pw=((CMainWindow*)parentWidget())->db; -mainwnd=((CMainWindow*)parentWidget()); -mainwnd->CreateBanner(Banner,mainwnd->Icon_Settings32x32,trUtf8("Einstellungen")); - -CheckBox_OpenLast->setChecked(mainwnd->config->OpenLast); -SpinBox_ClipboardTime->setValue(mainwnd->config->ClipboardTimeOut); +setupUi(this); +createBanner(Banner,Icon_Settings32x32,trUtf8("Einstellungen")); +CheckBox_OpenLast->setChecked(config.OpenLast); +SpinBox_ClipboardTime->setValue(config.ClipboardTimeOut); pixmTextColor->setPixmap(*(new QPixmap(pixmTextColor->width(),pixmTextColor->height()))); -//pixmTextColor->pixmap()->fill(mainwnd->config->BannerTextColor); +//pixmTextColor->pixmap()->fill(config.BannerTextColor); pixmColor1->setPixmap(*(new QPixmap(pixmColor1->width(),pixmColor1->height()))); -//pixmColor1->pixmap()->fill(mainwnd->config->BannerColor1); +//pixmColor1->pixmap()->fill(config.BannerColor1); pixmColor2->setPixmap(*(new QPixmap(pixmColor2->width(),pixmColor2->height()))); -//pixmColor2->pixmap()->fill(mainwnd->config->BannerColor2); +//pixmColor2->pixmap()->fill(config.BannerColor2); -color1=mainwnd->config->BannerColor1; -color2=mainwnd->config->BannerColor2; -textcolor=mainwnd->config->BannerTextColor; +color1=config.BannerColor1; +color2=config.BannerColor2; +textcolor=config.BannerTextColor; -CheckBox_ShowPasswords->setChecked(mainwnd->config->ShowPasswords); -Edit_BrowserCmd->setText(mainwnd->config->OpenUrlCommand); -CheckBox_ExpandGroupTree->setChecked(mainwnd->config->ExpandGroupTree); +CheckBox_ShowPasswords->setChecked(config.ShowPasswords); +Edit_BrowserCmd->setText(config.OpenUrlCommand); +CheckBox_ExpandGroupTree->setChecked(config.ExpandGroupTree); } @@ -60,14 +58,14 @@ CSettingsDlg::~CSettingsDlg() void CSettingsDlg::OnOK() { -mainwnd->config->OpenLast=CheckBox_OpenLast->isChecked(); -mainwnd->config->ClipboardTimeOut=SpinBox_ClipboardTime->value(); -mainwnd->config->BannerColor1=color1; -mainwnd->config->BannerColor2=color2; -mainwnd->config->BannerTextColor=textcolor; -mainwnd->config->ShowPasswords=CheckBox_ShowPasswords->isChecked(); -mainwnd->config->OpenUrlCommand=Edit_BrowserCmd->text(); -mainwnd->config->ExpandGroupTree=CheckBox_ExpandGroupTree->isChecked(); +config.OpenLast=CheckBox_OpenLast->isChecked(); +config.ClipboardTimeOut=SpinBox_ClipboardTime->value(); +config.BannerColor1=color1; +config.BannerColor2=color2; +config.BannerTextColor=textcolor; +config.ShowPasswords=CheckBox_ShowPasswords->isChecked(); +config.OpenUrlCommand=Edit_BrowserCmd->text(); +config.ExpandGroupTree=CheckBox_ExpandGroupTree->isChecked(); close(); } @@ -85,7 +83,7 @@ QPixmap *px=new QPixmap(pixmTextColor->width(),pixmTextColor->height()); px->fill(c); pixmTextColor->clear(); pixmTextColor->setPixmap(*px); -mainwnd->CreateBanner(Banner,mainwnd->Icon_Settings32x32,trUtf8("Einstellungen"),color1,color2,textcolor);} +createBanner(Banner,Icon_Settings32x32,trUtf8("Einstellungen"),color1,color2,textcolor);} } @@ -98,7 +96,7 @@ QPixmap *px=new QPixmap(pixmColor2->width(),pixmColor2->height()); px->fill(c); pixmColor2->clear(); pixmColor2->setPixmap(*px); -mainwnd->CreateBanner(Banner,mainwnd->Icon_Settings32x32,trUtf8("Einstellungen"),color1,color2,textcolor);} +createBanner(Banner,Icon_Settings32x32,trUtf8("Einstellungen"),color1,color2,textcolor);} } @@ -111,7 +109,7 @@ QPixmap *px=new QPixmap(pixmColor1->width(),pixmColor1->height()); px->fill(c); pixmColor1->clear(); pixmColor1->setPixmap(*px); -mainwnd->CreateBanner(Banner,mainwnd->Icon_Settings32x32,trUtf8("Einstellungen"),color1,color2,textcolor); +createBanner(Banner,Icon_Settings32x32,trUtf8("Einstellungen"),color1,color2,textcolor); } } diff --git a/src/dialogs/SettingsDlg.h b/src/dialogs/SettingsDlg.h index 3ba8850..1f3c90b 100755 --- a/src/dialogs/SettingsDlg.h +++ b/src/dialogs/SettingsDlg.h @@ -17,20 +17,18 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "mainwindow.h" +#include "main.h" #ifndef SETTINGSDLG_H #define SETTINGSDLG_H #include "ui_SettingsDlg.h" #include -class CSettingsDlg : public SettingsDialog +class CSettingsDlg : public QDialog, public Ui_SettingsDialog { Q_OBJECT public: - CMainWindow* mainwnd; - PwDatabase* pw; CSettingsDlg(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 ); ~CSettingsDlg(); /*$PUBLIC_FUNCTIONS$*/ diff --git a/src/dialogs/SimplePasswordDlg.cpp b/src/dialogs/SimplePasswordDlg.cpp index d61a0c1..5c68953 100755 --- a/src/dialogs/SimplePasswordDlg.cpp +++ b/src/dialogs/SimplePasswordDlg.cpp @@ -24,8 +24,9 @@ #include CSimplePasswordDialog::CSimplePasswordDialog(bool HidePw,QWidget* parent, const char* name, bool modal, Qt::WFlags fl) -: SimplePasswordDialog(parent,name, modal,fl) +: QDialog(parent,name, modal,fl) { +setupUi(this); if(HidePw)Button_HidePassword->toggle(); } diff --git a/src/dialogs/SimplePasswordDlg.h b/src/dialogs/SimplePasswordDlg.h index cdddd56..3b2fe1b 100755 --- a/src/dialogs/SimplePasswordDlg.h +++ b/src/dialogs/SimplePasswordDlg.h @@ -23,7 +23,7 @@ #include "ui_SimplePasswordDlg.h" -class CSimplePasswordDialog : public SimplePasswordDialog +class CSimplePasswordDialog : public QDialog, public Ui_SimplePasswordDialog { Q_OBJECT diff --git a/src/import/Import_KWalletXml.cpp b/src/import/Import_KWalletXml.cpp index e7cc18c..072a9f4 100755 --- a/src/import/Import_KWalletXml.cpp +++ b/src/import/Import_KWalletXml.cpp @@ -19,10 +19,11 @@ ***************************************************************************/ #include "Import_KWalletXml.h" -#include +#include #include #include #include +using namespace std; bool Import_KWalletXml::importFile(QString FileName,PwDatabase* pwm,QString& err){ QFile file(FileName); diff --git a/src/import/Import_PwManager.cpp b/src/import/Import_PwManager.cpp index 32bedbb..dab4a3f 100755 --- a/src/import/Import_PwManager.cpp +++ b/src/import/Import_PwManager.cpp @@ -20,12 +20,12 @@ #include #include -#include +#include #include #include "crypto/blowfish.h" #include "crypto/sha1.h" #include "Import_PwManager.h" - +using namespace std; bool Import_PwManager::importFile(QString filename, QString password, PwDatabase* db, QString& err){ database=db; diff --git a/src/lib/SecString.cpp b/src/lib/SecString.cpp index 4f357c6..9e5ebca 100755 --- a/src/lib/SecString.cpp +++ b/src/lib/SecString.cpp @@ -20,9 +20,9 @@ #include "SecString.h" #include -#include +#include #include "random.h" - +using namespace std; Q_UINT8 SecString::Key[32]={0}; SecString::SecString(){ diff --git a/src/lib/UrlLabel.h b/src/lib/UrlLabel.h index 86939e2..a65fb59 100755 --- a/src/lib/UrlLabel.h +++ b/src/lib/UrlLabel.h @@ -22,7 +22,6 @@ #define _LINKLABEL_H_ #include #include -//Added by qt3to4: #include class LinkLabel : public QLabel{ diff --git a/src/lib/random.cpp b/src/lib/random.cpp index da84ae3..dc7d6b5 100755 --- a/src/lib/random.cpp +++ b/src/lib/random.cpp @@ -17,11 +17,12 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include +#include #include #include #include #include "random.h" +using namespace std; void getRandomBytes(void* buffer,int NumBlocks,int BlockSize,bool Strong){ FILE *dev_random; diff --git a/src/main.cpp b/src/main.cpp index 2989686..c73066c 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,51 +18,58 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include +#include #include #include #include #include -#include -//Added by qt3to4: +#include #include +#include +#include +#include -#include "pwsafe.h" +#include "main.h" #include "PwmConfig.h" -#include "lib/KdePlugin.h" +#include "mainwindow.h" +using namespace std; -void parseCmdLineArgs(int argc, char** argv,QString &ArgFile,QString& ArgCfg){ -if(argc>1){ -int i=1; - if(argv[i][0]!='-'){ - ArgFile=QString::fromUtf8(argv[i]); - i++; - } - for(i; iapplicationDirPath(); //Load Config if(ArgCfg==""){ if(!QDir(QDir::homeDirPath()+"/.keepass").exists()){ @@ -73,41 +80,9 @@ if(ArgCfg==""){ IniFilename=QDir::homeDirPath()+"/.keepass/config"; config.loadFromIni(IniFilename); } -else -{ - IniFilename=ArgCfg; - config.loadFromIni(IniFilename); -} - -//KDE PlugIn -QApplication* app=NULL; -if(config.EnableKdePlugin){ -cout << "don't activate the kde plugin option" << endl; -exit(1); -/* - QLibrary lib("/home/tarek/Documents/keepass_kde/bin/libkeepass_kde.so"); - if(!lib.load()){ - cout << "Could not load KDE plugin." << endl; - exit(1); - } - CKdePlugin KdePlugin; - if(!KdePlugin.resolveSymbols(lib)){ - cout << "KDE plugin: Symbols could not be resolved." << endl; - exit(1); - } - app=KdePlugin.getAppObj(argc,argv); - QApplication*(*_getAppObj)(int,char**); - _getAppObj=(QApplication*(*)(int,char**))lib.resolve("getAppObj"); - app=_getAppObj(argc,argv**); - if(!app){cout << "app==NULL" << endl; - exit(1); - } -*/ -} else{ -app=new QApplication(argc,argv); -} - + IniFilename=ArgCfg; + config.loadFromIni(IniFilename);} //Internationalization @@ -129,6 +104,7 @@ if(config.Language==""){ config.Language="english.qm"; break;} } + if(config.Language!="_DEUTSCH_"){ if(!translator->load(app->applicationDirPath()+"/../share/keepass/i18n/"+config.Language)){ if(!translator->load(app->applicationDirPath()+"/share/i18n/"+config.Language)){ @@ -141,16 +117,16 @@ if(config.Language!="_DEUTSCH_"){ else app->installTranslator(translator); } - PwSafe *mainWin = 0; - - mainWin = new PwSafe(app,ArgFile,&config); - app->setMainWidget( mainWin ); - mainWin->show(); - int ret=app->exec(); - if(!config.saveToIni(IniFilename)) +DateTimeFormat=QObject::trUtf8("dd'.'MM'.'yy' 'hh':'mm"); +loadImages(); + +KeepassMainWindow *mainWin = new KeepassMainWindow(); +mainWin->show(); +int r=app->exec(); +if(!config.saveToIni(IniFilename)) QMessageBox::warning(NULL,QObject::tr("Warnung"),QObject::trUtf8("Die Konfigurationsdatei konnte nicht gespeichert werden.Stellen Sie sicher, dass\nSie Schreibrechte im Verzeichnis ~/.keepass besitzen."),QObject::tr("OK"),"","",0.0); - delete app; - return ret; +delete app; +return r; } @@ -160,55 +136,154 @@ if(config.Language!="_DEUTSCH_"){ -/********* KDE ************** -#include -#include -#include -#include +void createBanner(QLabel *Banner,QPixmap* symbol,QString text){ +createBanner(Banner,symbol,text,config.BannerColor1 + ,config.BannerColor2 + ,config.BannerTextColor); //call overloaded function +} + + +void createBanner(QLabel *Banner,QPixmap* symbol,QString text,QColor color1,QColor color2,QColor textcolor){ +int w=Banner->width(); +int h=Banner->height(); +QColor color; +float b1[3]; +float b2[3]; +float a1,a2; +QPixmap* banner_pixmap=new QPixmap(w,h); ///@FIXME löscht der Destruktor von QLabel die Pixmap zum schluss??? +QPainter painter(banner_pixmap); +QPen pen; +pen.setWidth(1); +painter.setPen(pen); +QFont font("Arial",16); +painter.setFont(font); +if(color1!=color2){ + b1[0]=color1.red(); + b1[1]=color1.green(); + b1[2]=color1.blue(); + b2[0]=color2.red(); + b2[1]=color2.green(); + b2[2]=color2.blue(); + for(int x=0;xfill(color1); +} +painter.drawPixmap(10,10,*symbol); +pen.setColor(textcolor); +painter.setPen(pen); +painter.drawText(50,30,text); +Banner->setPixmap(*banner_pixmap); +} -static const char description[] = - I18N_NOOP("A KDE KPart Application"); -static const char version[] = "0.1"; -static KCmdLineOptions options[] = -{ -// { "+[URL]", I18N_NOOP( "Document to open" ), 0 }, - KCmdLineLastOption -}; +void openBrowser(QString url){ + + -int main(int argc, char **argv) -{ - KAboutData about("Keepass", I18N_NOOP("Keepass"), version, description, - KAboutData::License_BSD, "(C) %{YEAR} Tarek Saidi", 0, 0, "tareks@arcor.de"); - about.addAuthor( "Tarek Saidi", 0, "tareks@arcor.de" ); - KCmdLineArgs::init(argc, argv, &about); - KCmdLineArgs::addCmdLineOptions( options ); - KApplication app; - PwSafe *mainWin = 0; - - if (app.isRestored()) - { - RESTORE(PwSafe); - } - else - { - // no session.. just start up normally - KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); - - /// @todo do something with the command line args here - - mainWin = new PwSafe(); - app.setMainWidget( mainWin ); - mainWin->show(); - - args->clear(); - } - - // mainWin has WDestructiveClose flag by default, so it will delete itself. - return app.exec(); } -*/ + +void loadImg(QString name,QPixmap& Img){ +if(Img.load(AppDir+"/../share/keepass/icons/"+name)==false){ + if(Img.load(AppDir+"/share/"+name)==false){ + QMessageBox::critical(0,QObject::trUtf8("Fehler"),QObject::trUtf8("Die Datei '%1' konnte nicht gefunden werden.") + .arg(name),QObject::tr("OK"),0,0,2,1); + exit(1); +}} + +} + + + +void loadImages(){ +QString ThemeDir="nuvola/32x32"; +QPixmap tmpImg; +//----------------------- +loadImg("clientic.png",tmpImg); +EntryIcons=new QPixmap[NUM_CLIENT_ICONS]; +for(int i=0;i<52;i++){ +EntryIcons[i]=tmpImg.copy(i*16,0,16,16);} +//-------------------------- +loadImg("key.png",tmpImg); +Icon_Key32x32=new QPixmap; +*Icon_Key32x32=tmpImg; +//-------------------------- +loadImg("settings.png",tmpImg); +Icon_Settings32x32=new QPixmap; +*Icon_Settings32x32=tmpImg; +//-------------------------- +loadImg("i18n.png",tmpImg); +Icon_I18n32x32=new QPixmap; +*Icon_I18n32x32=tmpImg; +//-------------------------- +loadImg("ok.png",tmpImg); +Icon_Ok16x16=new QPixmap; +*Icon_Ok16x16=tmpImg; +//-------------------------- +loadImg("search.png",tmpImg); +Icon_Search32x32=new QPixmap; +*Icon_Search32x32=tmpImg; +//-------------------------- +loadImg(ThemeDir+"/actions/filenew.png",tmpImg); +Icon_FileNew=new QIcon(tmpImg); +//-------------------------- +loadImg(ThemeDir+"/actions/fileopen.png",tmpImg); +Icon_FileOpen=new QIcon(tmpImg); +//-------------------------- +loadImg(ThemeDir+"/actions/filesave.png",tmpImg); +Icon_FileSave=new QIcon(tmpImg); +//-------------------------- +loadImg(ThemeDir+"/actions/filesaveas.png",tmpImg); +Icon_FileSaveAs=new QIcon(tmpImg); +//-------------------------- +loadImg(ThemeDir+"/actions/fileclose.png",tmpImg); +Icon_FileClose=new QIcon(tmpImg); +//-------------------------- +loadImg(ThemeDir+"/actions/exit.png",tmpImg); +Icon_Exit=new QIcon(tmpImg); +//-------------------------- +loadImg(ThemeDir+"/actions/editdelete.png",tmpImg); +Icon_EditDelete=new QIcon(tmpImg); + + +} +void parseCmdLineArgs(int argc, char** argv,QString &ArgFile,QString& ArgCfg){ +if(argc>1){ +int i=1; + if(argv[i][0]!='-'){ + ArgFile=QString::fromUtf8(argv[i]); + i++; } + for(i; i -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//Added by qt3to4: +#include "mainwindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include -//STD -#include -//local +#include +#include + #include "lib/random.h" #include "lib/IniReader.h" -#include "ListViews.h" -#include +#include "import/Import_PwManager.h" +#include "import/Import_KWalletXml.h" #include "dialogs/AboutDlg.h" #include "dialogs/EditGroupDlg.h" @@ -63,1319 +54,218 @@ #include "dialogs/EditEntryDlg.h" #include "dialogs/PasswordGenDlg.h" -#include "import/Import_PwManager.h" -#include "import/Import_KWalletXml.h" - -CMainWindow::CMainWindow(QApplication* app,QString ArgFile,CConfig* cfg,QWidget* parent,const char* name, Qt::WFlags fl) -: MainFrame(parent,name,fl) -{ -config=cfg; -FileOpen=false; -App=app; -appdir=app->applicationDirPath(); -parentWidget()->setCaption(tr("Keepass Passwortsafe")); -SecString::generateSessionKey(); -CGroup::UI_ExpandByDefault=config->ExpandGroupTree; - -// Icons, Pixmaps // - -QImage tmpImg; -//----------------------- -LoadImg("clientic.png",tmpImg); -EntryIcons=new QPixmap[52]; -for(int i=0;i<52;i++){ -EntryIcons[i]=tmpImg.copy(i*16,0,16,16); -} - -//-------------------------- -LoadImg("key.png",tmpImg); -Icon_Key32x32=new QPixmap; -*Icon_Key32x32=tmpImg; - -//-------------------------- -LoadImg("settings.png",tmpImg); -Icon_Settings32x32=new QPixmap; -*Icon_Settings32x32=tmpImg; - -//-------------------------- -LoadImg("i18n.png",tmpImg); -Icon_I18n32x32=new QPixmap; -*Icon_I18n32x32=tmpImg; - -//-------------------------- -LoadImg("ok.png",tmpImg); -Icon_Ok16x16=new QPixmap; -*Icon_Ok16x16=tmpImg; - -//-------------------------- -LoadImg("search.png",tmpImg); -Icon_Search32x32=new QPixmap; -*Icon_Search32x32=tmpImg; -///nicht vergessen: die müssen im Destr. auch wieder gelöscht werden!/// - - -// Signal-Slot Connections // -connect(&ClipboardTimer, SIGNAL(timeout()), this, SLOT(OnClipboardTimerEvent())); -connect(GroupView,SIGNAL(collapsed(Q3ListViewItem*)),this, SLOT(OnGroupItemCollapsed(Q3ListViewItem*))); -connect(GroupView,SIGNAL(expanded(Q3ListViewItem*)),this, SLOT(OnGroupItemExpanded(Q3ListViewItem*))); - - -// MainWnd // -CurrentGroup=NULL; -Clipboard=QApplication::clipboard(); -GroupView->setSorting(-1); - -if(config->Toolbar){ - View_ShowToolBar->setOn(true);} -else{ Toolbar->hide(); - View_ShowToolBar->setOn(false);} -if(config->EntryDetails){ - View_ShowEntryDetails->setOn(true);} -else{ SummaryField->hide(); - View_ShowEntryDetails->setOn(false);} -if(config->Columns[0]){ - View_Column_Title->setOn(true);} -else{ - View_Column_Title->setOn(false);} - -if(config->Columns[1]){ - View_Column_Username->setOn(true);} -else{ - View_Column_Username->setOn(false);} - -if(config->Columns[2]){ - View_Column_URL->setOn(true);} -else{ - View_Column_URL->setOn(false);} - -if(config->Columns[3]){ - View_Column_Password->setOn(true);} -else{ - View_Column_Password->setOn(false);} - -if(config->Columns[4]){ - View_Column_Comment->setOn(true);} -else{ - View_Column_Comment->setOn(false);} - -if(config->Columns[5]){ - View_Column_Expire->setOn(true);} -else{ - View_Column_Expire->setOn(false);} - -if(config->Columns[6]){ - View_Column_Creation->setOn(true);} -else{ - View_Column_Creation->setOn(false);} - -if(config->Columns[7]){ - View_Column_LastMod->setOn(true);} -else{ - View_Column_LastMod->setOn(false);} - -if(config->Columns[8]){ - View_Column_LastAccess->setOn(true);} -else{ - View_Column_LastAccess->setOn(false);} - -if(config->Columns[9]){ - View_Column_Attachment->setOn(true);} -else{ - View_Column_Attachment->setOn(false);} -if(config->ListView_HidePasswords){ - View_HidePasswords->setOn(true);} -else{ - View_HidePasswords->setOn(false);} - -if(config->ListView_HideUsernames){ - View_HideUsernames->setOn(true);} -else{ - View_HideUsernames->setOn(false);} - -//////////////////////////////////////////////// -GroupView->addColumn(trUtf8("Gruppen")); -GroupView->setColumnWidth(0,GroupView->width()-4); -SetupColumns(); -InitMenus(); - -if(ArgFile==""){ - if(config->OpenLast && config->LastFile!="") - {QFileInfo file(config->LastFile); - if(file.exists() && file.isFile())OpenDatabase(config->LastFile); - else config->LastFile="";} +KeepassMainWindow::KeepassMainWindow(QWidget *parent, Qt::WFlags flags):QMainWindow(parent,flags){ + setupUi(this); + setupConnections(); + setupIcons(); + setupToolbar(); + setStateFileOpen(false); + FileOpen=false; } -else -{ - QFileInfo file(ArgFile); - if(file.exists() && file.isFile())OpenDatabase(ArgFile); - else {cout << "file not found "<< ArgFile.ascii() << endl;} -} - - -} - -void CMainWindow::LoadImg(QString name,QImage& tmpImg){ -if(tmpImg.load(appdir+"/../share/keepass/"+name)==false){ - if(tmpImg.load(appdir+"/share/"+name)==false){ - QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Die Datei '%1' konnte nicht gefunden werden.") - .arg(name),trUtf8("OK"),0,0,2,1); - exit(-1); -}} +void KeepassMainWindow::setupConnections(){ + connect(FileNewAction, SIGNAL(triggered()), this, SLOT(OnFileNew())); + connect(FileOpenAction, SIGNAL(triggered()), this, SLOT(OnFileOpen())); + connect(FileCloseAction, SIGNAL(triggered()), this, SLOT(OnFileClose())); + connect(FileSaveAction, SIGNAL(triggered()), this, SLOT(OnFileSave())); + connect(FileSaveAsAction, SIGNAL(triggered()), this, SLOT(OnFileSaveAs())); + connect(FileSettingsAction, SIGNAL(triggered()), this, SLOT(OnFileSettings())); + connect(FileChangeKeyAction, SIGNAL(triggered()), this, SLOT(OnFileChangeKey())); + connect(FileExitAction, SIGNAL(triggered()), this, SLOT(OnFileExit())); + connect(FileImpPwmAction, SIGNAL(triggered()), this, SLOT(OnImportFromPwm())); + connect(FileImpKWalletXmlAction, SIGNAL(triggered()), this,SLOT(OnImportFromKWalletXml())); + connect(GroupView,SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),this, + SLOT(OnCurrentGroupChanged(QTreeWidgetItem*,QTreeWidgetItem*))); + connect(EntryView,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this, + SLOT(OnEntryItemDoubleClicked(QTreeWidgetItem*,int))); } +void KeepassMainWindow::setupToolbar(){ +toolBar->addAction(FileNewAction); +toolBar->addAction(FileOpenAction); +toolBar->addAction(FileSaveAction); +toolBar->addSeparator(); -CMainWindow::~CMainWindow() -{ -OnClose(); -delete [] EntryIcons; -delete Icon_Key32x32; -delete Icon_Settings32x32; -delete Icon_Search32x32; -delete Icon_I18n32x32; -delete Icon_Ok16x16; } -void CMainWindow::OnClose() -{ -if(FileOpen) CloseDataBase(); -parentWidget()->close(); +void KeepassMainWindow::setupIcons(){ +FileNewAction->setIcon(*Icon_FileNew); +FileOpenAction->setIcon(*Icon_FileOpen); +FileSaveAction->setIcon(*Icon_FileSave); +FileSaveAsAction->setIcon(*Icon_FileSaveAs); +FileCloseAction->setIcon(*Icon_FileClose); +FileExitAction->setIcon(*Icon_Exit); } -void CMainWindow::OnMainWinResize() -{ - -} - -void CMainWindow::OnFileOpen(){ -QString filename=Q3FileDialog::getOpenFileName(QDir::homeDirPath(),"*.kdb",this,trUtf8("Datenbank öffnen")); -if(filename=="")return; -OpenDatabase(filename); -} - - -void CMainWindow::OpenDatabase(QString filename) -{ -if(FileOpen==true) CloseDataBase(); -CPasswordDialog dlg(this,0,true); -dlg.setCaption(filename); -dlg.exec(); - -if(dlg.canceled)return; +void KeepassMainWindow::openDatabase(QString filename){ +Q_ASSERT(!FileOpen); +CPasswordDialog PasswordDlg(this,"Password Dialog",true); +PasswordDlg.setCaption(filename); +if(!PasswordDlg.exec()) return; db = new PwDatabase(); - -if(dlg.password!="" && dlg.keyfile==""){ -db->CalcMasterKeyByPassword(dlg.password); +GroupView->db=db; +EntryView->db=db; +if(PasswordDlg.password!="" && PasswordDlg.keyfile==""){ +db->CalcMasterKeyByPassword(PasswordDlg.password); } -if(dlg.password=="" && dlg.keyfile!=""){ -db->CalcMasterKeyByFile(dlg.keyfile); +if(PasswordDlg.password=="" && PasswordDlg.keyfile!=""){ +db->CalcMasterKeyByFile(PasswordDlg.keyfile); } -if(dlg.password!="" && dlg.keyfile!=""){ -db->CalcMasterKeyByFileAndPw(dlg.keyfile,dlg.password); +if(PasswordDlg.password!="" && PasswordDlg.keyfile!=""){ +db->CalcMasterKeyByFileAndPw(PasswordDlg.keyfile,PasswordDlg.password); } QString err; if(db->loadDatabase(filename,err)==true){ -updateGroupView(); -SetFileMenuState(STATE_FileOpen); -setModFlag(false); -parentWidget()->setCaption(tr("Keepass - %1").arg(filename)); -FileOpen=true; +//SUCCESS +setCaption(tr("Keepass - %1").arg(filename)); +GroupView->updateItems(); +EntryView->updateItems(); +EntryView->setCurrentGroup(0); +setStateFileOpen(true); +setStateFileModified(false); } else{ -///@FIXME MessageBox erscheint im Hintergrund -//mgl parent MainWindow ist noch nicht offen -//mgl parent CPasswordDlg ist schon zu -//tritt nur mit libqtkde.so auf +//ERROR delete db; -FileOpen=false; -QMessageBox::critical(NULL,trUtf8("Fehler"),trUtf8("Beim öffnen der Datenbank ist ein Fehler aufgetreten:\n%1") - .arg(err),trUtf8("OK"),0,0,0); -} -} - -void CMainWindow::updateGroupView(){ -GroupView->clear(); -GroupItems.clear(); -EntryView->clear(); -EntryItems.clear(); - -//Level==0 -> Parent=GroupView -//Level>lastLevel -> Parent=lastItem -//Level<=lastLevel -> Parent=last higher Item(reverse) - -for(GroupItr i=db->Groups.begin();i!=db->Groups.end();i++){ -if((*i).Level==0){ - if(GroupItems.size())GroupItems.push_back(new GroupItem(&(*i),GroupView,getLastSameLevelItem(0),(*i).Name)); - else GroupItems.push_back(new GroupItem(&(*i),GroupView,(*i).Name)); -} - else{ - if((*i).Level>(*(i-1)).Level){ - GroupItems.push_back(new GroupItem(&(*i),(*(GroupItems.end()-1)),getLastSameLevelItem((*i).Level),(*i).Name)); - } - if((*i).Level<=(*(i-1)).Level){ - GroupItemItr j; - for(j=GroupItems.end()-1;j!=GroupItems.begin();j--){ - if((*j)->pGroup->Level<(*i).Level)break;} - GroupItems.push_back(new GroupItem(&(*i),(*j),getLastSameLevelItem((*i).Level),(*i).Name)); - } - } -(*(GroupItems.end()-1))->setPixmap(0,EntryIcons[(*i).ImageID]); -} - -for(int i=0;isetOpen(GroupItems[i],GroupItems[i]->pGroup->UI_ItemIsExpanded); -} - -} - - -void CMainWindow::OnGroupChanged(Q3ListViewItem* item){ -if(item){ -SetEditMenuState(STATE_SingleGroupSelected); -setCurrentGroup((GroupItem*)item); -} -else SetEditMenuState(STATE_NoGroupSelected); -SummaryField->setText(""); -SetEditMenuState(STATE_NoEntrySelected); -} - -void CMainWindow::setCurrentGroup(GroupItem* item){ -CurrentGroup=item; -updateEntryView(); -} - -void CMainWindow::SetupColumns(){ -int NumColumns=EntryView->columns(); -for(int i=0;iremoveColumn(0); -int columnID[10]; -int i=0; -if(config->Columns[0]){ -columnID[0]=EntryView->addColumn(trUtf8("Titel"),0); i++;} -if(config->Columns[1]){ -columnID[1]=EntryView->addColumn(trUtf8("Benutzername"),0); i++;} -if(config->Columns[2]){ -columnID[2]=EntryView->addColumn(trUtf8("URL"),0); i++;} -if(config->Columns[3]){ -columnID[3]=EntryView->addColumn(trUtf8("Passwort"),0); i++;} -if(config->Columns[4]){ -columnID[4]=EntryView->addColumn(trUtf8("Kommentare"),0); i++;} -if(config->Columns[5]){ -columnID[5]=EntryView->addColumn(trUtf8("Gültig bis"),0); i++;} -if(config->Columns[6]){ -columnID[6]=EntryView->addColumn(trUtf8("Erstellung"),0); i++;} -if(config->Columns[7]){ -columnID[7]=EntryView->addColumn(trUtf8("letzte Änderung"),0); i++;} -if(config->Columns[8]){ -columnID[8]=EntryView->addColumn(trUtf8("letzter Zugriff"),0); i++;} -if(config->Columns[9]){ -columnID[9]=EntryView->addColumn(trUtf8("Anhang"),0); i++;} -ResizeColumns(); - -} - -void CMainWindow::ResizeColumns(){ -int cols=EntryView->columns(); -int width=(EntryView->width()-4)/cols; //Ränder mit je 2 Px Breite??? -for(int i=0;isetColumnWidth(i,width); -} -} - - -void CMainWindow::updateEntryView(){ -// Achtung: -// Die ->pEntry bzw ->pGroup Zeiger sind zu diesem Zeitpunkt ungültig! -EntryView->clear(); -EntryItems.clear(); -if(!CurrentGroup)return; -EntryItem *tmp=NULL; -for(int i=0;iEntries.size();i++){ -CEntry* entry=&db->Entries[i]; -if((CurrentGroup->pGroup->ID==entry->GroupID) || (CurrentGroup->pGroup->ID==db->SearchGroupID && isInSearchResults(entry))){ -EntryItems.push_back(tmp=new EntryItem(entry,EntryView)); -int j=0; -if(config->Columns[0]){ -tmp->setText(j++,entry->Title);} -if(config->Columns[1]){ - if(config->ListView_HideUsernames) - tmp->setText(j++,"******"); - else - tmp->setText(j++,entry->UserName);} -if(config->Columns[2]){ -tmp->setText(j++,entry->URL);} -if(config->Columns[3]){ - if(config->ListView_HidePasswords) - tmp->setText(j++,"******"); - else{ - tmp->setText(j++,entry->Password.getString()); - entry->Password.delRef();}} -if(config->Columns[4]){ -tmp->setText(j++,entry->Additional.section('\n',0,0));} -if(config->Columns[5]){ -tmp->setText(j++,entry->Expire.GetString(0));} -if(config->Columns[6]){ -tmp->setText(j++,entry->Creation.GetString(0));} -if(config->Columns[7]){ -tmp->setText(j++,entry->LastMod.GetString(0));} -if(config->Columns[8]){ -tmp->setText(j++,entry->LastAccess.GetString(0));} -if(config->Columns[9]){ -tmp->setText(j++,entry->BinaryDesc);} - (*(EntryItems.end()-1))->setPixmap(0,EntryIcons[entry->ImageID]); - } -} -} - -void CMainWindow::OnEntryChanged(Q3ListViewItem* item){ -if(item)SetEditMenuState(STATE_SingleEntrySelected); -else SetEditMenuState(STATE_NoEntrySelected); -updateEntryDetails((EntryItem*)item); -} - - -void CMainWindow::showEvent(QShowEvent *event){ -if(event->spontaneous()==false){ -SetEditMenuState(STATE_NoGroupSelected); -Q3ValueList s; -s.push_back(25); s.push_back(100); -parentWidget()->resize(750,450); -splitter->setSizes(s); - - - -//////////////////////////////////// -/*Beim öffnen der Datenbank ist ein Fehler aufgetreten. -if(db->IsOpen==true) CloseDataBase(); -QString filename="/home/tarek/Desktop/wallet.xml"; -Import_KWalletXml importer; -QString err; -if(!importer.importFile(filename,&pwmanager,err)){ - cout << err << endl; - return; -} -cout << "Erfolg" << endl; -updateGroupView(); -SetFileMenuState(STATE_FileOpen); -*/ -//////////////////////////////////// - - - - - +if(err=="")err=trUtf8("unbekannter Fehler in PwDatabase::loadDatabase()"); +QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Beim öffnen der Datenbank ist ein Fehler aufgetreten:\n%1") + .arg(err),trUtf8("OK")); } } -void CMainWindow::OnEntryDoubleClicked(Q3ListViewItem* item,const QPoint& Point, int column){ -if(item && (column==0)){ -OnEditEntry(); +bool KeepassMainWindow::closeDatabase(){ +Q_ASSERT(FileOpen); +Q_ASSERT(db!=NULL); +if(ModFlag){ + int r=QMessageBox::question(this,trUtf8("Geänderte Datei speichern?"), + trUtf8("Die aktuell geöffnete Datei wurde verändert. Sollen die Änderungen vor dem Schließen gespeichert werden?"),tr("Ja"),tr("Nein"),tr("Abbrechen"),2,2); + if(r==2)return false; //Abbrechen + if(r==0) //Ja (Datei speichern) + if(!OnFileSave())return false; } -} - - -void CMainWindow::CreateBanner(QLabel *Banner,QPixmap* symbol,QString text){ -CreateBanner(Banner,symbol,text,config->BannerColor1 - ,config->BannerColor2 - ,config->BannerTextColor); //überladene Funktion wird aufgerufen -} - -void CMainWindow::CreateBanner(QLabel *Banner,QPixmap* symbol,QString text,QColor color1,QColor color2,QColor textcolor){ -int w=Banner->width(); -int h=Banner->height(); -QColor color; -float b1[3]; -float b2[3]; -float a1,a2; -QPixmap* banner_pixmap=new QPixmap(w,h); ///@FIXME löscht der Destruktor von QLabel die Pixmap zum schluss??? -QPainter painter(banner_pixmap); -QPen pen; -pen.setWidth(1); -painter.setPen(pen); -QFont font("Arial",16); -painter.setFont(font); -if(color1!=color2){ -b1[0]=color1.red(); -b1[1]=color1.green(); -b1[2]=color1.blue(); -b2[0]=color2.red(); -b2[1]=color2.green(); -b2[2]=color2.blue(); -///@FIXME Farbtiefe < 24 Bit (Dithering?) -for(int x=0;xfill(color1); -} - -painter.drawPixmap(10,10,*symbol); -pen.setColor(textcolor); -painter.setPen(pen); -painter.drawText(50,30,text); -Banner->setPixmap(*banner_pixmap); -} - - -void CMainWindow::CloseDataBase(){ -if(modflag){ -int r=QMessageBox::question(this,trUtf8("Datenbank speichern?"),trUtf8("Soll die aktuelle Datenbank vor dem Schließen gespeichert werden?") - ,trUtf8("Ja"),trUtf8("Nein"),trUtf8("Abbrechen"),2,2); -if(r==2)return; -if(r==0)OnFileSave();} -SummaryField->setText(""); -SetEditMenuState(STATE_NoEntrySelected); -SetEditMenuState(STATE_NoGroupSelected); +delete db; +db=NULL; +EntryView->db=NULL; EntryView->clear(); -EntryItems.clear(); +EntryView->Items.clear(); +GroupView->db=NULL; GroupView->clear(); -GroupItems.clear(); -config->LastFile=db->filename; -db->CloseDataBase(); -delete db; -FileOpen=false; -} - -void CMainWindow::OnMenu_closeDB() -{ -CloseDataBase(); -SetFileMenuState(STATE_NoFileOpen); -SetEditMenuState(STATE_NoEntrySelected); -SetEditMenuState(STATE_NoGroupSelected); -parentWidget()->setCaption(tr("Keepass Passwortsafe")); -} - -void CMainWindow::OnFileSave() -{ -if(db->filename==""){ -OnFileSaveAs(); -return; -} -if(db->SaveDataBase(db->filename))setModFlag(false); -} - -void CMainWindow::OnFileSaveAs() -{ -QString filename=Q3FileDialog::getSaveFileName(QDir::homeDirPath(),"*.kdb",this,trUtf8("Datenbank öffnen")); -if(filename=="")return; -db->filename=filename; -config->LastFile=filename; -db->SaveDataBase(filename); -setModFlag(false); -parentWidget()->setCaption(tr("Keepass - %1").arg(filename)); -} - -void CMainWindow::InitMenus(){ -SetEditMenuState(STATE_NoEntrySelected); -SetEditMenuState(STATE_NoGroupSelected); -SetFileMenuState(STATE_NoFileOpen); -} - - -void CMainWindow::SetFileMenuState(FileMenuState status){ -switch(status){ - case STATE_FileOpen: - File_Save->setEnabled(true); - File_SaveAs->setEnabled(true); - File_Close->setEnabled(true); - File_ChangeKey->setEnabled(true); - File_Settings->setEnabled(true); - Edit_NewGroup->setEnabled(true); - Edit_GlobalSearch->setEnabled(true); - toolButtonSave->setEnabled(true); - toolButtonAddEntry->setEnabled(true); - GroupView->setEnabled(true); - EntryView->setEnabled(true); - SummaryField->setEnabled(true); - break; - case STATE_NoFileOpen: - File_Save->setDisabled(true); - File_SaveAs->setDisabled(true); - File_Close->setDisabled(true); - File_ChangeKey->setDisabled(true); - File_Settings->setDisabled(true); - Edit_NewGroup->setDisabled(true); - Edit_GlobalSearch->setDisabled(true); - toolButtonSave->setDisabled(true); - toolButtonAddEntry->setEnabled(false); - GroupView->setDisabled(true); - EntryView->setDisabled(true); - SummaryField->setDisabled(true); - break; -} -} - -void CMainWindow::SetEditMenuState(EditMenuState status){ -switch(status){ - case STATE_NoGroupSelected: - Edit_NewSubGroup->setDisabled(true); - Edit_GroupProperties->setDisabled(true); - Edit_DeleteGroup->setDisabled(true); - Edit_AddEntry->setDisabled(true); - Edit_GroupSearch->setDisabled(true); - toolButtonAddEntry->setEnabled(false); - break; - case STATE_NoEntrySelected: - Edit_UserNameToClipboard->setDisabled(true); - Edit_PasswordToClipboard->setDisabled(true); - Edit_SaveAttachment->setDisabled(true); - Edit_OpenURL->setDisabled(true); - Edit_DeleteEntry->setDisabled(true); - Edit_EditEntry->setDisabled(true); - Edit_CopyEntry->setDisabled(true); - toolButtonEditEntry->setDisabled(true); - toolButtonDeleteEntry->setDisabled(true); - toolButtonUserNameToClipboard->setDisabled(true); - toolButtonPasswordToClipboard->setDisabled(true); - break; - case STATE_SingleGroupSelected: - Edit_NewSubGroup->setEnabled(true); - Edit_GroupProperties->setEnabled(true); - Edit_DeleteGroup->setEnabled(true); - Edit_AddEntry->setEnabled(true); - Edit_GroupSearch->setEnabled(true); - toolButtonAddEntry->setEnabled(true); - break; - case STATE_SingleEntrySelected: - toolButtonEditEntry->setDisabled(false); - toolButtonDeleteEntry->setDisabled(false); - toolButtonUserNameToClipboard->setDisabled(false); - toolButtonPasswordToClipboard->setDisabled(false); - Edit_UserNameToClipboard->setEnabled(true); - Edit_PasswordToClipboard->setEnabled(true); - Edit_SaveAttachment->setEnabled(true); - Edit_OpenURL->setEnabled(true); - Edit_DeleteEntry->setEnabled(true); - Edit_EditEntry->setEnabled(true); - Edit_CopyEntry->setEnabled(true); - break; -} +GroupView->Items.clear(); +setStateFileOpen(false); +setCaption("Keepass Passwort-Manager"); +return true; } -void CMainWindow::OnMenuExit() -{ -OnClose(); -} - -void CMainWindow::OnAddGroup() -{ -CEditGroupDialog dlg(this,trUtf8("Gruppeneigenschaften"),true,NULL); -dlg.exec(); -if(dlg.OK==false)return; -CGroup* NewGroup=db->addGroup(NULL); -NewGroup->Name=dlg.GroupName; -NewGroup->ImageID=dlg.IconID; -updateGroupView(); -setModFlag(true); -} - - -void CMainWindow::OnAddSubGroup() -{ -CEditGroupDialog dlg(this,trUtf8("Gruppeneigenschaften"),true,NULL); -dlg.exec(); -if(dlg.OK==false)return; -CGroup* NewGroup=db->addGroup(CurrentGroup->pGroup); -NewGroup->Name=dlg.GroupName; -NewGroup->ImageID=dlg.IconID; -//GroupItems.push_back(new GroupItem(NewGroup,CurrentGroup,NewGroup->Name)); -updateGroupView(); -setModFlag(true); -} - -void CMainWindow::OnEditGroup() -{ -GroupItem* item=CurrentGroup; -CGroup& group=*item->pGroup; -CEditGroupDialog dlg(this,trUtf8("Gruppeneigenschaften"),true,NULL); -dlg.GroupName=group.Name; -dlg.IconID=group.ImageID; -dlg.exec(); -if(dlg.OK==false)return; -group.Name=dlg.GroupName; -group.ImageID=dlg.IconID; -item->setText(0,group.Name); -item->setPixmap(0,EntryIcons[group.ImageID]); -setModFlag(true); -} - - - -void CMainWindow::OnDeleteGroup() -{ -db->deleteGroup(CurrentGroup->pGroup); -CurrentGroup=NULL; -SetEditMenuState(STATE_NoGroupSelected); -updateGroupView(); -updateEntryView(); -setModFlag(true); -} - - -void CMainWindow::OnPasswordToClipboard() -{ -Clipboard->setText(currentEntry()->Password.getString(),QClipboard::Clipboard); -ClipboardTimer.start(config->ClipboardTimeOut*1000,true); -currentEntry()->Password.delRef(); -} -void CMainWindow::OnUserNameToClipboard() -{ -Clipboard->setText(currentEntry()->UserName, QClipboard::Clipboard); -ClipboardTimer.start(config->ClipboardTimeOut*1000,true); -} - -void CMainWindow::OnClipboardTimerEvent(){ -Clipboard->clear(QClipboard::Clipboard); //löscht nicht den KDE-Klipper -} - -void CMainWindow::OnOpenURL() -{ -OpenURL(currentEntry()->URL); -} - -void CMainWindow::OpenURL(QString url){ -Q3Process browser; -browser.setArguments(QStringList::split(' ',config->OpenUrlCommand.arg(url))); -browser.start(); -} - -void CMainWindow::OnSaveAttachment() -{ -CEntry& entry=*currentEntry(); -if(entry.BinaryDataLength==0){ -QMessageBox::information(NULL,trUtf8("Hinweis"),trUtf8("Dieser Eintrag hat keinen Dateianhang."),"OK"); -return; -} -QString filename=Q3FileDialog::getSaveFileName(QDir::homeDirPath(),"",this,trUtf8("Anhang speichern...")); -if(filename=="")return; -QFile file(filename); -if(file.exists()){ -int r=QMessageBox::warning(this,trUtf8("Vorhandene Datei überschreiben?"),trUtf8("Unter dem gewählten Dateinamen existiert bereits eine Datei.\nSoll sie überschrieben werden?"),trUtf8("Ja"),trUtf8("Nein"),NULL,1,1); -if(r==1)return; -if(file.remove()==false){ -QMessageBox::critical(NULL,trUtf8("Fehler"),trUtf8("Datei konnte nicht überschrieben werden."),trUtf8("OK")); -return;} -} -if(file.open(QIODevice::WriteOnly)==false){ -QMessageBox::critical(NULL,trUtf8("Fehler"),trUtf8("Datei konnte nicht erstellt werden."),trUtf8("OK")); -return; -} - -int r=file.writeBlock((char*)entry.pBinaryData,entry.BinaryDataLength); -if(r==-1){ -file.close(); -QMessageBox::critical(NULL,trUtf8("Fehler"),trUtf8("Beim schreiben in der Datei ist ein Fehler aufgetreten."),trUtf8("OK")); -return; -} -if(r!=entry.BinaryDataLength){ -file.close(); -QMessageBox::critical(NULL,trUtf8("Fehler"),trUtf8("Die Datei konnte nicht vollständig geschrieben werden."),trUtf8("OK")); -return; -} -file.close(); -} - -void CMainWindow::OnAddEntry() -{ -CEntry entry; -entry.ImageID=0; -entry.GroupID=CurrentGroup->pGroup->ID; -entry.Creation.SetToNow(); -entry.LastMod.SetToNow(); -entry.LastAccess.SetToNow(); -entry.Expire.Set(28,12,2999,0,0,0); -entry.BinaryDataLength=0; -entry.pBinaryData=NULL; -entry.PasswordLength=0; - -CEditEntryDlg* pDlg= new CEditEntryDlg(this,0,true); -pDlg->entry=&entry; -if(pDlg->exec()){ - if(db->Entries.size()==0){ - entry.sID=0; - getRandomBytes(&entry.ID,16,1,false); - } - else { - entry.sID=(*(db->Entries.end()-1)).sID+1; - while(1){ - bool used=false; - getRandomBytes(&entry.ID,16,1,false); - for(int j=0;jEntries.size();j++){ - int k; - for(k=0;k<16;k++){if(db->Entries[j].ID[k]!=entry.ID[k])k=0;break;} - if(k==15)used=true;} - if(used==false)break; - }} - db->Entries.push_back(entry); - updateEntryView(); - setModFlag(true); -} - -} - -void CMainWindow::OnEditEntry() -{ -CEditEntryDlg* pDlg= new CEditEntryDlg(this,0,true); -pDlg->entry=currentEntry(); -pDlg->exec(); -updateEntryView(); -if(pDlg->ModFlag)setModFlag(true); -} - -void CMainWindow::OnCopyEntry() -{ -CEntry &src=*currentEntry(); -CEntry entry=src; -entry.sID=(*(db->Entries.end()-1)).sID+1; -while(1){ -bool used=false; -getRandomBytes(&entry.ID,16,1,false); - for(int j=0;jEntries.size();j++){ - int k; - for(k=0;k<16;k++){if(db->Entries[j].ID[k]!=entry.ID[k])k=0;break;} - if(k==15)used=true;} -if(used==false)break; -} -entry.Creation.SetToNow(); -entry.LastMod.SetToNow(); -entry.LastAccess.SetToNow(); -entry.Expire.Set(28,12,2999,0,0,0); -db->Entries.push_back(entry); -if(entry.BinaryDataLength>0){ -CEntry &new_entry=(*(db->Entries.end()-1)); -new_entry.pBinaryData=new unsigned char[new_entry.BinaryDataLength]; -memcpy(new_entry.pBinaryData,src.pBinaryData,new_entry.BinaryDataLength); -} -updateEntryView(); -setModFlag(true); -} - -void CMainWindow::OnDeleteEntry() -{ -db->deleteEntry(currentEntry()); -updateEntryView(); -setModFlag(true); -} - -void CMainWindow::OnGlobalSearch() -{ -Search(); -} - -void CMainWindow::OnGroupSearch() -{ -Search(CurrentGroup->pGroup); -} - -void CMainWindow::Search(CGroup* pGroup){ -CSearchDlg dlg(pGroup,this,"SearchDialog",true); -if(!dlg.exec())return; -if(!dlg.hits.size()){ - QMessageBox::information(this,tr("Suche erfolglos"),trUtf8("Die Suche lieferte keine Ergebnisse."),trUtf8("OK"),0,0,2,1); - return;} -if(db->SearchGroupID!=-1){ - db->deleteGroup(db->SearchGroupID); - SearchResults.clear(); - db->SearchGroupID=-1; -} -CGroup* group=db->addGroup(NULL); -db->SearchGroupID=group->ID; -group->Name=tr("Suchergebnisse"); -SearchResults.clear(); -for(int i=0;isID); -} -updateGroupView(); - -} - -void CMainWindow::OnEntryRightClicked(Q3ListViewItem* item, const QPoint& pos,int column) -{ -if(!FileOpen)return; -if(!CurrentGroup) return; -Q3PopupMenu menu; -connect(&menu, SIGNAL(activated(int)), this, SLOT(OnEntryCtxMenuClicked(int))); -menu.insertItem(trUtf8("Passwort in Zwischenablage kopieren"),1); -menu.insertItem(trUtf8("Benutzername in Zwischenablage kopieren"),2); -menu.insertItem(trUtf8("URL öffnen"),3); -menu.insertItem(trUtf8("Anhang speichern..."),4); -menu.insertSeparator(); -menu.insertItem(trUtf8("Eintrag hinzufügen..."),5); -menu.insertItem(trUtf8("Eintrag anzeigen/bearbeiten"),6); -menu.insertItem(trUtf8("Eintrag duplizieren"),7); -menu.insertItem(trUtf8("Eintrag löschen"),8); - -if(column==-1){ -menu.setItemEnabled(1,false); -menu.setItemEnabled(2,false); -menu.setItemEnabled(3,false); -menu.setItemEnabled(4,false); -menu.setItemEnabled(6,false); -menu.setItemEnabled(7,false); -menu.setItemEnabled(8,false);} - -if(CurrentGroup->pGroup->ID==db->SearchGroupID){ -menu.setItemEnabled(5,false); -menu.setItemEnabled(7,false); -} - -menu.exec(pos); - -} - -void CMainWindow::OnEntryCtxMenuClicked(int id){ -switch(id){ -case 1:OnPasswordToClipboard(); -break; -case 2:OnUserNameToClipboard(); -break; -case 3:OnOpenURL(); -break; -case 4:OnSaveAttachment(); -break; -case 5:OnAddEntry(); -break; -case 6:OnEditEntry(); -break; -case 7:OnCopyEntry(); -break; -case 8:OnDeleteEntry(); -break; -} -} - -void CMainWindow::OnGroupRightClicked(Q3ListViewItem* item, const QPoint& pos, int column) -{ -if(!FileOpen)return; - -Q3PopupMenu menu; -if(column!=-1){ - if(((GroupItem*)item)->pGroup->ID!=db->SearchGroupID){ - connect(&menu, SIGNAL(activated(int)), this, SLOT(OnGroupCtxMenuClicked(int))); - //menu.insertItem(trUtf8("Gruppe hinzufügen..."),1); - menu.insertItem(trUtf8("Untergruppe hinzufügen..."),2); - menu.insertSeparator(); - menu.insertItem(trUtf8("Gruppe löschen"),3); - menu.insertItem(trUtf8("Eigenschaften"),4);} - else{ - connect(&menu, SIGNAL(activated(int)), this, SLOT(OnSearchGroupCtxMenuClicked(int))); - menu.insertItem(trUtf8("Ausblenden"),1);} -} -else -{ -connect(&menu, SIGNAL(activated(int)), this, SLOT(OnGroupCtxMenuClicked(int))); - menu.insertItem(trUtf8("Gruppe hinzufügen..."),1); -} -menu.exec(pos); -} - -void CMainWindow::OnSearchGroupCtxMenuClicked(int id){ -/*if(db->SearchGroupID!=-1){ - db->DeleteGroup(db->GetGroupIterator(db->SearchGroupID)); - SearchResults.clear(); - delete GetGroupItem(db->SearchGroupID); - DeleteGroupAssoc(db->SearchGroupID); - db->SearchGroupID=-1; - SetEditMenuState(STATE_NoGroupSelected); - RefreshEntryView(); -}*/ -} - -void CMainWindow::OnGroupCtxMenuClicked(int id){ -switch(id){ -case 1:OnAddGroup(); -break; -case 2:OnAddSubGroup(); -break; -case 3:OnDeleteGroup(); -break; -case 4:OnEditGroup(); -break; -} -} - -void CMainWindow::OnDbSettings() -{ -CDbSettingsDlg dlg(this,db,trUtf8("Einstellungen"),true); -dlg.exec(); -} - -void CMainWindow::OnChangeDbKey() -{ -CChangeKeyDlg dlg(this,db); -dlg.exec(); -setModFlag(true); -} - -void CMainWindow::OnFileNew() -{ -if(FileOpen==true) CloseDataBase(); +void KeepassMainWindow::OnFileNew(){ +if(FileOpen) + if(!closeDatabase())return; db=new PwDatabase(); -db->NewDataBase(); CChangeKeyDlg dlg(this,db); if(dlg.exec()==1){ -updateGroupView(); -SetFileMenuState(STATE_FileOpen); -setModFlag(true); +setCaption(tr("Keepass - %1").arg(tr("[neu]"))); +GroupView->db=db; +EntryView->db=db; +GroupView->updateItems(); +EntryView->updateItems(); +EntryView->setCurrentGroup(0); +setStateFileOpen(true); +setStateFileModified(true); FileOpen=true; } else delete db; } -void CMainWindow::OnViewToolbarToggled(bool toggled) -{ -config->Toolbar=toggled; -if(toggled){ -Toolbar->show(); -} -else -{ -Toolbar->hide(); -} +void KeepassMainWindow::OnFileOpen(){ +if(FileOpen) + if(!closeDatabase())return; +QString filename=QFileDialog::getOpenFileName(this,trUtf8("Databank öffnen..."),QDir::homePath(),"*.kdb"); +if(filename!=QString::null) + openDatabase(filename); } -void CMainWindow::OnViewEntryDetailsToggled(bool toggled) -{ -config->EntryDetails=toggled; -if(toggled){ -SummaryField->show(); -} -else -{ -SummaryField->hide(); -} +void KeepassMainWindow::OnFileClose(){ +closeDatabase(); } -void CMainWindow::OnSettings() -{ -CSettingsDlg dlg(this,0,true); -dlg.exec(); - +void KeepassMainWindow::setStateFileOpen(bool IsOpen){ +FileOpen=IsOpen; +FileSaveAction->setEnabled(IsOpen); +FileSaveAsAction->setEnabled(IsOpen); +FileCloseAction->setEnabled(IsOpen); +FileSettingsAction->setEnabled(IsOpen); +FileChangeKeyAction->setEnabled(IsOpen); +GroupView->setEnabled(IsOpen); +EntryView->setEnabled(IsOpen); } -void CMainWindow::OnHelpAbout() -{ -CAboutDialog* pDlg= new CAboutDialog(this,0,true); -pDlg->show(); - -} - -void CMainWindow::OnView_ColumnExpireToggled(bool value) -{ -config->Columns[5]=value; -SetupColumns(); -updateEntryView(); - -} - -void CMainWindow::OnView_ColumnAttachmentToggled(bool value) -{ -config->Columns[9]=value; -SetupColumns(); -updateEntryView(); -} - -void CMainWindow::OnView_ColumnUrlToggled(bool value) -{ -config->Columns[2]=value; -SetupColumns(); -updateEntryView(); -} - - -void CMainWindow::OnView_ColumnTitleToggled(bool value) -{ -config->Columns[0]=value; -SetupColumns(); -updateEntryView(); -} - - -void CMainWindow::OnView_ColumnCreationToggled(bool value) -{ -config->Columns[6]=value; -SetupColumns(); -updateEntryView(); -} - - -void CMainWindow::OnView_ColumnLastAccessToggled(bool value) -{ -config->Columns[8]=value; -SetupColumns(); -updateEntryView(); -} - - -void CMainWindow::OnView_ColumnLastModToggled(bool value) -{ -config->Columns[7]=value; -SetupColumns(); -updateEntryView(); -} - - -void CMainWindow::OnView_ColumnCommentToggled(bool value) -{ -config->Columns[4]=value; -SetupColumns(); -updateEntryView(); -} - - -void CMainWindow::OnView_ColumnPasswordToggled(bool value) -{ -config->Columns[3]=value; -SetupColumns(); -updateEntryView(); -} - -void CMainWindow::OnView_ColumnUsernameToggled(bool value) -{ -config->Columns[1]=value; -SetupColumns(); -updateEntryView(); -} - -void CMainWindow::OnExtrasLanguage() -{ -CLanguageDlg dlg(this,0/*,QT3 modal? = true*/); +void KeepassMainWindow::editEntry(CEntry* pEntry){ +CEditEntryDlg dlg(db,pEntry,this,"EditEntryDialog",true); dlg.exec(); +if(dlg.ModFlag)setStateFileModified(true); } -bool CMainWindow::isInSearchResults(CEntry* pEntry){ -for(int i=0; isID==SearchResults[i])return true;} -return false; -} - -void CMainWindow::OnQickSearch() -{ -QMessageBox::information(this,trUtf8("Platzhalter"),trUtf8("< noch nicht implementiert >"),trUtf8("OK"),0,0,2,1); -} - -void CMainWindow::setModFlag(bool flag){ -modflag=flag; -toolButtonSave->setEnabled(flag); -} - -void CMainWindow::OnGroupItemExpanded(Q3ListViewItem* item){ -((GroupItem*)item)->pGroup->UI_ItemIsExpanded=true; -} - -void CMainWindow::OnGroupItemCollapsed(Q3ListViewItem* item){ -((GroupItem*)item)->pGroup->UI_ItemIsExpanded=false; -} - -void CMainWindow::DEBUG_OnPrintDbStucture() -{ - -if(!FileOpen){cout << "db->IsOpen=false" << endl; return;} - -cout << "NumEntries=" << db->Entries.size() << endl; -cout << "NumGroups=" << db->Groups.size() << endl; -cout << "------------------Group Vector-----------------" << endl; -if(db->Groups.size()){ -//cout << "Start: 0x" << QString::number((unsigned int)&db->Groups.front(),16) << endl; -//cout << "End: 0x" << QString::number((unsigned int)&db->Groups.back(),16) << endl; -for(int i=0;iGroups.size();i++){ -cout << QString("(+%1) '%2', Level=%3, ID=%4").arg(i).arg(db->Groups[i].Name).arg(db->Groups[i].Level).arg(db->Groups[i].ID).ascii() - << endl; -} -} -cout << "------------------Entry Vector-----------------" << endl; -if(db->Entries.size()){ -//cout << "Start: 0x" << QString::number((unsigned int)&db->Entries.front(),16) << endl; -//cout << "End: 0x" << QString::number((unsigned int)&db->Entries.back(),16) << endl; -for(int i=0;iEntries.size();i++){ -QString groupname="???"; - for(int j=0;jGroups.size();j++){ - if(db->Groups[j].ID==db->Entries[i].GroupID){ - groupname="'"+db->Groups[j].Name+"'"; - break;} -} -cout << QString("(+%1) '%2', GroupID=%3 [%4], sID=%5").arg(i).arg(db->Entries[i].Title).arg(db->Entries[i].GroupID).arg(groupname).arg(db->Entries[i].sID).ascii() - << endl; -} -} -cout << endl; - -} - -GroupItem* CMainWindow::getLastSameLevelItem(int level){ -for(int i=GroupItems.size()-1;i>=0;i--){ - if(GroupItems[i]->pGroup->Level==level){ -return GroupItems[i];} +void KeepassMainWindow::setStateFileModified(bool mod){ +if(!FileOpen)return; +ModFlag=mod; +FileSaveAction->setEnabled(mod); } -return GroupItems.back(); -} -void CMainWindow::OnImportPwManagerFile() -{ -bool merge=false; -if(FileOpen){ -int ret=QMessageBox::question(this,tr("Frage"), - trUtf8("Es ist noch eine andere Datenbank geöffnet. Soll sie mit der zu importierenden Datenbank zusammengeführt oder geschlossen werden werden?"), - trUtf8("Zusammenführen"),trUtf8("Schließen"),tr("Abbrechen"),1,2); -switch(ret){ - case 0: merge=true; - break; - case 1: CloseDataBase(); - break; - case 2: return; - } -} -QString filename=Q3FileDialog::getOpenFileName(QDir::homeDirPath(),"*.pwm",this,trUtf8("Datenbank importieren")); -if(filename=="")return; -CSimplePasswordDialog dlg(!config->ShowPasswords,this,"SimplePasswordDlg",true); -if(!dlg.exec())return; -Import_PwManager importer; -QString err; - -if(merge){ - PwDatabase* ImportDb=new PwDatabase(); - if(!importer.importFile(filename,dlg.password,ImportDb,err)){ - delete ImportDb; - QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Die Datei konnte nicht importiert werden.\n%1").arg(err),trUtf8("OK"),0,0,2,1); - return;} - db->merge(ImportDb); - delete ImportDb; -} +bool KeepassMainWindow::OnFileSave(){ +if(db->filename==QString()) + return OnFileSaveAs(); +if(db->saveDatabase()) + setStateFileModified(false); else{ - db=new PwDatabase(); - if(!importer.importFile(filename,dlg.password,db,err)){ - delete db; - QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Die Datei konnte nicht importiert werden.\n%1").arg(err),trUtf8("OK"),0,0,2,1); - return;} - CChangeKeyDlg dlg(this,db); - if(dlg.exec()!=1){ - delete db; - return; - } + showErrMsg(trUtf8("Die Datei konnte nicht gespeichert werden.\n%1").arg(db->getError())); + return false; } -updateGroupView(); -SetFileMenuState(STATE_FileOpen); -FileOpen=true; +return true; } -void CMainWindow::OnView_HideUsernamesToggled(bool state) -{ -config->ListView_HideUsernames=state; -updateEntryView(); -updateEntryDetails(); -} - - -void CMainWindow::OnView_HidePasswordsToggled(bool state) -{ -config->ListView_HidePasswords=state; -updateEntryView(); -updateEntryDetails(); +bool KeepassMainWindow::OnFileSaveAs(){ +QString filename=QFileDialog::getSaveFileName(this,trUtf8("Datenbank speichern unter..."),QDir::homePath(),"*.kdb"); +if(filename==QString()) return false; +db->filename=filename; +setCaption(tr("Keepass - %1").arg(db->filename)); +return OnFileSave(); } -void CMainWindow::OnGroupViewDrop(QDropEvent* e) -{ +void KeepassMainWindow::OnFileSettings(){ +CDbSettingsDlg dlg(this,db,"DatabaseSettingsDlg"); +if(dlg.exec())setStateFileModified(true); } -void CMainWindow::OnHelpAboutQt() -{ -QMessageBox::aboutQt(this); -} +void KeepassMainWindow::OnFileChangeKey(){ +CChangeKeyDlg dlg(this,db,"ChangeKeyDialog"); +if(dlg.exec()) setStateFileModified(true); -void CMainWindow::OnImportKWalletXML() -{ -bool merge=false; -if(FileOpen){ -int ret=QMessageBox::question(this,tr("Frage"), - trUtf8("Es ist noch eine andere Datenbank geöffnet. Soll sie mit der zu importierenden Datenbank zusammengeführt oder geschlossen werden werden?"), - trUtf8("Zusammenführen"),trUtf8("Schließen"),tr("Abbrechen"),1,2); -switch(ret){ - case 0: merge=true; - break; - case 1: CloseDataBase(); - break; - case 2: return; - } } -QString filename=Q3FileDialog::getOpenFileName(QDir::homeDirPath(),"*.xml",this,trUtf8("Datenbank importieren")); -if(filename=="")return; -Import_KWalletXml importer; -QString err; -if(merge){ - PwDatabase* ImportDb=new PwDatabase(); - if(!importer.importFile(filename,ImportDb,err)){ - delete ImportDb; - QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Die Datei konnte nicht importiert werden.\n%1").arg(err),trUtf8("OK"),0,0,2,1); - return;} - db->merge(ImportDb); - delete ImportDb; -} -else{ - db=new PwDatabase(); - if(!importer.importFile(filename,db,err)){ - delete db; - QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Die Datei konnte nicht importiert werden.\n%1").arg(err),trUtf8("OK"),0,0,2,1); - return;} - CChangeKeyDlg dlg(this,db); - if(dlg.exec()!=1){ - delete db; - return; - } -} -updateGroupView(); -SetFileMenuState(STATE_FileOpen); -FileOpen=true; +void KeepassMainWindow::OnFileExit(){ +if(FileOpen) + if(!closeDatabase())return; +close(); } -void CMainWindow::updateEntryDetails(EntryItem* pItem){ -if(pItem==NULL){ - SummaryField->setText(""); - return;} -CEntry& entry=*pItem->pEntry; -QString str=trUtf8("Gruppe: %1 Titel: %2 Benutzername: %3 URL: %4 Passwort: %5 Erstellt: %6 letzte Änderung: %7 letzter Zugriff: %8 gültig bis: %9"); -str=str.arg(CurrentGroup->pGroup->Name).arg(entry.Title); +void KeepassMainWindow::OnImportFromPwm(){} -if(!config->ListView_HideUsernames) str=str.arg(entry.UserName); -else str=str.arg("****"); +void KeepassMainWindow::OnImportFromKWalletXml(){} -str=str.arg(entry.URL); - -if(!config->ListView_HidePasswords) str=str.arg(entry.Password.getString()); -else str=str.arg("****"); - -str=str.arg(entry.Creation.GetString(0)) - .arg(entry.LastMod.GetString(0)) - .arg(entry.LastAccess.GetString(0)) - .arg(entry.Expire.GetString(0)); -SummaryField->setText(str); -entry.Password.delRef(); +void KeepassMainWindow::OnCurrentGroupChanged(QTreeWidgetItem* cur,QTreeWidgetItem* prev){ +if(cur){ + EntryView->setCurrentGroup(((GroupViewItem*)cur)->pGroup->ID); } - - -void CMainWindow::updateEntryDetails(){ -updateEntryDetails( (EntryItem*)EntryView->currentItem() ); } - - -EntryItem* CMainWindow::currentEntryItem(){ -return (EntryItem*)EntryView->currentItem(); -} - -CEntry* CMainWindow::currentEntry(){ -return ((EntryItem*)EntryView->currentItem())->pEntry; -} +void KeepassMainWindow::OnEntryItemDoubleClicked(QTreeWidgetItem* item,int column){ +if(column) return; +if(!config.Columns[0]) return; +editEntry(static_cast(item)->pEntry); +} \ No newline at end of file diff --git a/src/mainwindow.h b/src/mainwindow.h index 4a01ffd..8dbc0d8 100755 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -21,156 +21,68 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include -#include -#include -#include -#include -#include + +#include +#include +#include +#include +#include +#include #include -//Added by qt3to4: #include #include #include -#include "ui_MainWindow.h" -#include "ListViews.h" +#include +#include + + +#include "PwManager.h" #include "PwmConfig.h" +#include "lib/GroupView.h" -typedef vector::iterator GroupItemItr; -typedef vector::iterator EntryItemItr; +#include "ui_MainWindow.h" -class CMainWindow : public MainFrame{ -Q_OBJECT +#define NO_ENTRY_SELECTED +class KeepassMainWindow : public QMainWindow, public Ui_MainWindow{ +Q_OBJECT public: - /*$PUBLIC_FUNCTIONS$*/ - CMainWindow(QApplication* app,QString ArgFile,CConfig* config, QWidget* parent = 0,const char* name = 0, Qt::WFlags fl = 0 ); - ~CMainWindow(); -protected: - /*$PROTECTED_FUNCTIONS$*/ - -protected slots: - /*$PROTECTED_SLOTS$*/ - virtual void showEvent(QShowEvent *e); - -public slots: - /*$PUBLIC_SLOTS$*/ - virtual void OnClose(); - virtual void OnMainWinResize(); - virtual void OnFileOpen(); - virtual void OnGroupChanged(Q3ListViewItem*); - virtual void OnEntryChanged(Q3ListViewItem*); - virtual void OnEntryDoubleClicked(Q3ListViewItem*,const QPoint&,int); - virtual void OnMenu_closeDB(); - virtual void OnFileSaveAs(); - virtual void OnFileSave(); - virtual void OnMenuExit(); - virtual void OnAddGroup(); - virtual void OnUserNameToClipboard(); - virtual void OnPasswordToClipboard(); - virtual void OnDeleteGroup(); - virtual void OnEditGroup(); - virtual void OnAddSubGroup(); - virtual void OnClipboardTimerEvent(); - virtual void OnOpenURL(); - virtual void OnGroupSearch(); - virtual void OnGlobalSearch(); - virtual void OnDeleteEntry(); - virtual void OnCopyEntry(); - virtual void OnEditEntry(); - virtual void OnAddEntry(); - virtual void OnSaveAttachment(); - virtual void OnEntryRightClicked(Q3ListViewItem* item, const QPoint& pos,int column); - virtual void OnEntryCtxMenuClicked(int id); - virtual void OnGroupRightClicked(Q3ListViewItem* item, const QPoint& pos, int column); - virtual void OnGroupCtxMenuClicked(int id); - virtual void OnChangeDbKey(); - virtual void OnDbSettings(); - virtual void OnFileNew(); - virtual void OnViewToolbarToggled(bool toggled); - virtual void OnViewEntryDetailsToggled(bool toggled); - virtual void OnHelpAbout(); - virtual void OnSettings(); - virtual void OnView_ColumnUrlToggled(bool value); - virtual void OnView_ColumnTitleToggled(bool value); - virtual void OnView_ColumnCreationToggled(bool value); - virtual void OnView_ColumnLastAccessToggled(bool value); - virtual void OnView_ColumnLastModToggled(bool value); - virtual void OnView_ColumnCommentToggled(bool value); - virtual void OnView_ColumnPasswordToggled(bool value); - virtual void OnView_ColumnAttachmentToggled(bool value); - virtual void OnView_ColumnExpireToggled(bool value); - virtual void OnView_ColumnUsernameToggled(bool value); - virtual void OnExtrasLanguage(); - virtual void OnSearchGroupCtxMenuClicked(int); - virtual void OnQickSearch(); - virtual void OnGroupItemExpanded(Q3ListViewItem* item); - virtual void OnGroupItemCollapsed(Q3ListViewItem* item); - virtual void DEBUG_OnPrintDbStucture(); - virtual void OnImportPwManagerFile(); - virtual void OnView_HideUsernamesToggled(bool state); - virtual void OnView_HidePasswordsToggled(bool state); - virtual void OnGroupViewDrop(QDropEvent* e); - virtual void OnHelpAboutQt(); - virtual void OnImportKWalletXML(); + KeepassMainWindow (QWidget *parent=0, Qt::WFlags flags=0); + PwDatabase* db; +private slots: + void OnFileNew(); + void OnFileOpen(); + void OnFileClose(); + bool OnFileSave(); + bool OnFileSaveAs(); + void OnFileSettings(); + void OnFileChangeKey(); + void OnFileExit(); + void OnImportFromPwm(); + void OnImportFromKWalletXml(); + void OnCurrentGroupChanged(QTreeWidgetItem*,QTreeWidgetItem*); + void OnEntryItemDoubleClicked(QTreeWidgetItem* item,int column); -public: - PwDatabase* db; - vector GroupItems; - vector EntryItems; - vector SearchResults; - QString img_res_dir; - QPixmap* EntryIcons; - QPixmap* Icon_Key32x32; - QPixmap* Icon_Settings32x32; - QPixmap* Icon_Search32x32; - QPixmap* Icon_I18n32x32; - QPixmap* Icon_Ok16x16; - QTimer ClipboardTimer; - QString appdir; - CConfig* config; - - enum FileMenuState{STATE_FileOpen, - STATE_NoFileOpen}; - enum EditMenuState{STATE_NoGroupSelected, - STATE_NoEntrySelected, - STATE_SingleGroupSelected, - STATE_SingleEntrySelected}; - void InitMenus(); - void SetFileMenuState(FileMenuState status); - void SetEditMenuState(EditMenuState status); - void LoadImg(QString name,QImage &tmpImg); - void SetupColumns(); - void ResizeColumns(); - void OpenDatabase(QString filename); - void CreateBanner(QLabel *Banner,QPixmap* symbol,QString text); - void CreateBanner(QLabel *Banner,QPixmap* symbol,QString text,QColor color1,QColor color2,QColor textcolor); - void CloseDataBase(); - void OpenURL(QString url); - GroupItem* getLastSameLevelItem(int i); - - - void setCurrentGroup(GroupItem* item); - void updateEntryView(); - void updateGroupView(); - void updateEntryDetails(); - void updateEntryDetails(EntryItem* item); - inline EntryItem* currentEntryItem(); - inline CEntry* currentEntry(); - GroupItem* CurrentGroup; - QClipboard* Clipboard; private: - bool isInSearchResults(CEntry*); - void Search(CGroup* pGroup=NULL); - QApplication* App; - QTranslator* translator; - bool modflag; - void setModFlag(bool); bool FileOpen; - QString IniFilename; + bool ModFlag; + inline void setupToolbar(); + inline void setupIcons(); + inline void setupConnections(); + void setStateFileOpen(bool); + void setStateFileModified(bool); + void openDatabase(QString filename); + bool closeDatabase(); + void editEntry(CEntry* pEntry); + + + + + }; -#endif + +#endif \ No newline at end of file diff --git a/src/src.pro b/src/src.pro index f825370..8ef1d83 100755 --- a/src/src.pro +++ b/src/src.pro @@ -8,31 +8,29 @@ INSTALLS += Share \ target.path = /usr/local/bin Share.files += ../share/keepass/* Share.path = /usr/local/share/keepass -FORMS += forms/ui_EditGroupDlg.ui \ - forms/ui_SearchDlg.ui \ - forms/ui_AboutDlg.ui \ - forms/ui_LanguageDlg.ui \ - forms/ui_SettingsDlg.ui \ - forms/ui_ChangeKeyDlg.ui \ - forms/ui_MainWindow.ui \ - forms/ui_SimplePasswordDlg.ui \ - forms/ui_DatabaseSettingsDlg.ui \ - forms/ui_PasswordDlg.ui \ - forms/ui_EditEntryDlg.ui \ - forms/ui_PasswordGenDlg.ui +FORMS += forms/EditGroupDlg.ui \ + forms/SearchDlg.ui \ + forms/AboutDlg.ui \ + forms/LanguageDlg.ui \ + forms/SettingsDlg.ui \ + forms/ChangeKeyDlg.ui \ + forms/MainWindow.ui \ + forms/SimplePasswordDlg.ui \ + forms/DatabaseSettingsDlg.ui \ + forms/PasswordDlg.ui \ + forms/EditEntryDlg.ui \ + forms/PasswordGenDlg.ui TRANSLATIONS += translations/english.ts \ translations/russian.ts HEADERS += lib/IniReader.h \ lib/UrlLabel.h \ mainwindow.h \ PwManager.h \ - pwsafe.h \ crypto/rijndael.h \ lib/SecString.h \ crypto/sha256.h \ crypto/twoclass.h \ crypto/twofish.h \ - ListViews.h \ import/Import_PwManager.h \ crypto/blowfish.h \ crypto/sha1.h \ @@ -51,21 +49,21 @@ HEADERS += lib/IniReader.h \ dialogs/PasswordGenDlg.h \ lib/random.h \ Database.h \ - lib/PwmTime.h \ lib/KdePlugin.h \ - global.h + global.h \ + main.h \ + lib/GroupView.h \ + lib/EntryView.h SOURCES += lib/IniReader.cpp \ lib/UrlLabel.cpp \ main.cpp \ mainwindow.cpp \ PwManager.cpp \ - pwsafe.cpp \ crypto/rijndael.cpp \ lib/SecString.cpp \ crypto/sha256.c \ crypto/twoclass.cpp \ crypto/twofish.cpp \ - ListViews.cpp \ import/Import_PwManager.cpp \ crypto/blowfish.cpp \ crypto/sha1.cpp \ @@ -84,12 +82,16 @@ SOURCES += lib/IniReader.cpp \ dialogs/PasswordGenDlg.cpp \ lib/random.cpp \ Database.cpp \ - lib/PwmTime.cpp \ - lib/KdePlugin.cpp + lib/KdePlugin.cpp \ + lib/GroupView.cpp \ + lib/EntryView.cpp +QT += xml \ +qt3support MOC_DIR = ../build/moc UI_DIR = ../build/ui OBJECTS_DIR = ../build/ TARGET = ../bin/keepass +INCLUDEPATH += ./ CONFIG += debug \ warn_off \ qt \ @@ -97,8 +99,3 @@ thread \ exceptions \ stl TEMPLATE = app -#The following line was inserted by qt3to4 -QT += xml qt3support -#The following line was inserted by qt3to4 -CONFIG += uic3 - diff --git a/src/translations/english.ts b/src/translations/english.ts index 521b6ab..04b216f 100755 --- a/src/translations/english.ts +++ b/src/translations/english.ts @@ -78,6 +78,10 @@ The following error occured: %1 + + http://keepass.berlios.de/index.php + + CChangeKeyDlg @@ -231,266 +235,6 @@ Sind Sie sicher, dass Sie dies tun wollen? There is no translation selected. - - CMainWindow - - Keepass Passwortsafe - Keepass Password Safe - - - Warnung - Warning - - - OK - OK - - - Fehler - Error - - - Die Datei '%1' konnte nicht gefunden werden. - Could not open file '%1': no such file or directory. - - - Datenbank öffnen - Open Database - - - Keepass - %1 - Keepass - %1 - - - Laden fehlgeschlagen. <TODO: Fehlerbeschreibung> - Loading failed. <TODO: Error Desc.> - - - Abbrechen - Cancel - - - Titel - Title - - - Benutzername - Username - - - URL - URL - - - Passwort - Password - - - Kommentare - Comments - - - Gültig bis - Expires - - - Erstellung - Creation - - - letzte Änderung - last Change - - - letzter Zugriff - last Access - - - Anhang - Attachment - - - <B>Gruppe: </B>%1 <B>Titel: </B>%2 <B>Benutzername: </B>%3 <B>URL: </B>%4 <B>Passwort: </B>%5 <B>Erstellt: </B>%6 <B>letzte Änderung: </B>%7 <B>letzter Zugriff: </B>%8 <B>gültig bis: </B>%9 - <B>Group: </B>%1 <B>Title: </B>%2 <B>Username: </B>%3 <B>URL: </B>%4 <B>Password: </B>%5 <B>Creation: </B>%6 <B>Last Change: </B>%7 <B>Last Access: </B>%8 <B>Expires: </B>%9 - - - Gruppen - Groups - - - Datenbank speichern? - Save Database? - - - Soll die aktuelle Datenbank vor dem Schließen gespeichert werden? - Do you want to save the current database before closing. - - - Ja - Yes - - - Nein - No - - - Gruppeneigenschaften - Properties - - - Hinweis - Information - - - Dieser Eintrag hat keinen Dateianhang. - This entry has no file attachment. - - - Anhang speichern... - Save Attachment... - - - Vorhandene Datei überschreiben? - Overwrite existing file? - - - Unter dem gewählten Dateinamen existiert bereits eine Datei. -Soll sie überschrieben werden? - Overwrite existing file? - - - Datei konnte nicht überschrieben werden. - Could not overwrite file. - - - Datei konnte nicht erstellt werden. - Could not create file. - - - Beim schreiben in der Datei ist ein Fehler aufgetreten. - An error occured while writing the file. - - - Die Datei konnte nicht vollständig geschrieben werden. - The file could not be written completely. - - - Suche erfolglos - Search finished - - - Die Suche lieferte keine Ergebnisse. - The search finished without any result. - - - Suchergebnisse - Search Results - - - Passwort in Zwischenablage kopieren - Copy Password to Clipboard - - - Benutzername in Zwischenablage kopieren - Copy Username to Clipboard - - - URL öffnen - Open URL - - - Eintrag hinzufügen... - Add Entry... - - - Eintrag anzeigen/bearbeiten - Show/Edit Entry - - - Eintrag duplizieren - Duplicate Entry - - - Eintrag löschen - Delete Entry - - - Gruppe hinzufügen... - Add Group... - - - Untergruppe hinzufügen... - Add Subgroup - - - Gruppe löschen - Delete Group - - - Eigenschaften - Properties - - - Ausblenden - Hide - - - Einstellungen - Settings - - - Platzhalter - <no translation> - - - < noch nicht implementiert > - < not implemented yet > - - - Beim öffnen der Datenbank ist ein Fehler aufgetreten. - Could not open database. - - - Datenbank importieren - Import Database - - - Warnung: Verzeichnis ~/.keepass konnte nicht erstellt werden. - Warnig: Could not create directory ~/.keepass. - - - Die Konfigurationsdatei konnte nicht gespeichert werden.Stellen Sie sicher, dass -Sie Schreibrechte im Verzeichnis ~/.keepass besitzen. - Could not save configuration file. - - - Beim öffnen der Datenbank ist ein Fehler aufgetreten: -%1 - An error occured while opening the database: - - - Frage - Question - - - Es ist noch eine andere Datenbank geöffnet. Soll sie mit der zu importierenden Datenbank zusammengeführt oder geschlossen werden werden? - Another database is still open. Do you want to merge it with the imported database or should it be closed. - - - Zusammenführen - Merge - - - Schließen - Close - - - Die Datei konnte nicht importiert werden. -%1 - File could not be imported. -%1 - - CPasswordDialog @@ -534,11 +278,11 @@ Sie Schreibrechte im Verzeichnis ~/.keepass besitzen. Hinweis - Information + Information Bitte geben Sie einen Suchbegriff ein. - Please enter at least one charakter. + Please enter at least one charakter. @@ -697,6 +441,10 @@ Sie Schreibrechte im Verzeichnis ~/.keepass besitzen. Alt+K + + läuft nicht ab + + EditGroupDialog @@ -872,227 +620,561 @@ Sie Schreibrechte im Verzeichnis ~/.keepass besitzen. - LanguageDlg + KeepassEntryView - Keepass - Keepass - - - Schlie&ßen - &Close - - - Alt+ß - Alt+C + Titel + Title - * - * + Benutzername + Username - Sprache - Language + URL + URL - Version - Version + Passwort + Password - Autor - Author + Kommentare + Comments - - Fes&tlegen - &Use + + Gültig bis + Expires - Alt+T - Alt+U + Erstellung + Creation - Legt die aktuell markierte Sprache -als Übersetzung für Keepass fest. - Use the selected language as the -active translation for Keepass. + letzte Änderung + last Change + + + letzter Zugriff + last Access + + + Anhang + Attachment + + + + KeepassGroupView + + Gruppen + Groups + + + + KeepassMainWindow + + Keepass Passwortsafe + Keepass Password Safe + + + Warnung + Warning + + + OK + OK + + + Fehler + Error + + + Die Datei '%1' konnte nicht gefunden werden. + Could not open file '%1': no such file or directory. + + + Datenbank öffnen + Open Database + + + Keepass - %1 + Keepass - %1 + + + Laden fehlgeschlagen. <TODO: Fehlerbeschreibung> + Loading failed. <TODO: Error Desc.> + + + Abbrechen + Cancel + + + Titel + Title + + + Benutzername + Username + + + URL + URL + + + Passwort + Password + + + Kommentare + Comments + + + Gültig bis + Expires + + + Erstellung + Creation + + + letzte Änderung + last Change + + + letzter Zugriff + last Access + + + Anhang + Attachment + + + <B>Gruppe: </B>%1 <B>Titel: </B>%2 <B>Benutzername: </B>%3 <B>URL: </B>%4 <B>Passwort: </B>%5 <B>Erstellt: </B>%6 <B>letzte Änderung: </B>%7 <B>letzter Zugriff: </B>%8 <B>gültig bis: </B>%9 + <B>Group: </B>%1 <B>Title: </B>%2 <B>Username: </B>%3 <B>URL: </B>%4 <B>Password: </B>%5 <B>Creation: </B>%6 <B>Last Change: </B>%7 <B>Last Access: </B>%8 <B>Expires: </B>%9 + + + Gruppen + Groups + + + Datenbank speichern? + Save Database? + + + Soll die aktuelle Datenbank vor dem Schließen gespeichert werden? + Do you want to save the current database before closing. + + + Ja + Yes + + + Nein + No + + + Gruppeneigenschaften + Properties + + + Hinweis + Information + + + Dieser Eintrag hat keinen Dateianhang. + This entry has no file attachment. + + + Anhang speichern... + Save Attachment... + + + Vorhandene Datei überschreiben? + Overwrite existing file? + + + Unter dem gewählten Dateinamen existiert bereits eine Datei. +Soll sie überschrieben werden? + Overwrite existing file? + + + Datei konnte nicht überschrieben werden. + Could not overwrite file. + + + Datei konnte nicht erstellt werden. + Could not create file. + + + Beim schreiben in der Datei ist ein Fehler aufgetreten. + An error occured while writing the file. + + + Die Datei konnte nicht vollständig geschrieben werden. + The file could not be written completely. + + + Suche erfolglos + Search finished + + + Die Suche lieferte keine Ergebnisse. + The search finished without any result. + + + Suchergebnisse + Search Results + + + Passwort in Zwischenablage kopieren + Copy Password to Clipboard + + + Benutzername in Zwischenablage kopieren + Copy Username to Clipboard + + + URL öffnen + Open URL + + + Eintrag hinzufügen... + Add Entry... + + + Eintrag anzeigen/bearbeiten + Show/Edit Entry + + + Eintrag duplizieren + Duplicate Entry + + + Eintrag löschen + Delete Entry + + + Gruppe hinzufügen... + Add Group... + + + Untergruppe hinzufügen... + Add Subgroup + + + Gruppe löschen + Delete Group + + + Eigenschaften + Properties + + + Ausblenden + Hide + + + Einstellungen + Settings + + + Platzhalter + <no translation> + + + < noch nicht implementiert > + < not implemented yet > + + + Beim öffnen der Datenbank ist ein Fehler aufgetreten. + Could not open database. + + + Datenbank importieren + Import Database + + + Warnung: Verzeichnis ~/.keepass konnte nicht erstellt werden. + Warnig: Could not create directory ~/.keepass. + + + Die Konfigurationsdatei konnte nicht gespeichert werden.Stellen Sie sicher, dass +Sie Schreibrechte im Verzeichnis ~/.keepass besitzen. + Could not save configuration file. + + + Beim öffnen der Datenbank ist ein Fehler aufgetreten: +%1 + An error occured while opening the database: + + + Frage + Question + + + Es ist noch eine andere Datenbank geöffnet. Soll sie mit der zu importierenden Datenbank zusammengeführt oder geschlossen werden werden? + Another database is still open. Do you want to merge it with the imported database or should it be closed. + + + Zusammenführen + Merge + + + Schließen + Close + + + Die Datei konnte nicht importiert werden. +%1 + File could not be imported. +%1 + + + unbekannter Fehler in PwDatabase::loadDatabase() + + + + Databank öffnen... + + + + Speichern? + + + + Sollen die Änderungen an der aktuellen Datenbank gespeichert werden? + + + + Speichern fehlgeschlagen + + + + Die Datei konnte nicht gespeichert werden. + + + + + LanguageDlg + + Keepass + Keepass + + + Schlie&ßen + &Close + + + Alt+ß + Alt+C + + + * + * + + + Sprache + Language + + + Version + Version + + + Autor + Author + + + Fes&tlegen + &Use + + + Alt+T + Alt+U + + + Legt die aktuell markierte Sprache +als Übersetzung für Keepass fest. + Use the selected language as the +active translation for Keepass. MainFrame Form1 - Form1 + Form1 Neue Datenbank - New Database + New Database Datei - File + File Bearbeiten - Edit + Edit Ansicht - View + View Spalten - Columns + Columns Extras - Extras + Extras Hilfe - Help + Help Toolbar - Toolbar + Toolbar neue Datenbank - New Database + New Database Datenbank öffnen - Open Database + Open Database Datenbank speichern - Save Database + Save Database Eintrag hinzufügen - Add Entry + Add Entry Eintrag bearbeiten - Edit Entry + Edit Entry Eintrag löschen - Delete Entry + Delete Entry Benutzername in Zwischenablage kopieren - Copy Username to Clipboard + Copy Username to Clipboard Passwort in Zwischenablage kopieren - Copy Password to Clipboard + Copy Password to Clipboard in Datenbank suchen - Search + Search < PLATZHALTER > - < empty > + < empty > Hilfe anzeigen - Help + Help Schnellsuche - Quick Search + Quick Search Beenden - Exit + Exit &Neue Datenbank... - &New Database... + &New Database... &Datenbank öffnen... - Open &Database... + Open &Database... Datenbank &schließen - Clo&se Database + Clo&se Database Datenbank s&peichern - Save Data&base + Save Data&base Datenbank speichern unter... - Save Database As... + Save Database As... Datenbank-Einstellungen... - Database Settings... + Database Settings... Hauptschlüssel ändern... - Change Master Key... + Change Master Key... &Neue Gruppe erstellen... - &New Group... + &New Group... Neue &Untergruppe ertellen... - New S&ubgroup... + New S&ubgroup... Gruppe &bearbeiten... - Edit Grou&p... + Edit Grou&p... Gruppe &löschen - De&lete Group + De&lete Group &Passwort in Zwischenablage kopieren - Copy Pas&sword to Clipboard + Copy Pas&sword to Clipboard Ben&utzername in Zwischenablage kopieren - C&opy Username to Clipboard + C&opy Username to Clipboard U&RL öffnen - Open U&RL + Open U&RL &Anhang speichern unter... - Save Attachment &As... + Save Attachment &As... Eintrag &hinzufügen... - Add Entr&y... + Add Entr&y... Eintrag bearbeiten/&anzeigen... - Vie&w/Edit Entry + Vie&w/Edit Entry Eintrag &duplizieren - &Duplicate Entry + &Duplicate Entry Eintrag l&öschen - Delet&e Entry + Delet&e Entry In Datenbank &suchen... - Search &in Database... + Search &in Database... In dieser Gru&ppe suchen... - Search in t&his group... + Search in t&his group... &Toolbar anzeigen - Show &Toolbar + Show &Toolbar Eintragsansicht antzeigen @@ -1100,7 +1182,7 @@ active translation for Keepass. Einstellungen... - Settings... + Settings... Über... @@ -1108,102 +1190,173 @@ active translation for Keepass. Titel - Title + Title Benutzername - Username + Username URL - URL + URL Passwort - Password + Password Kommentar - Comment + Comment Ablaufdatum - Expires + Expires Letzter Zugriff - Last Access + Last Access Letzte Änderung - Last Change + Last Change Erstellungsdatum - Creation + Creation Anhang - Attachment + Attachment Unnamed - Unnamed + Unnamed Sprache... - Language... + Language... DEBUG - DEBUG + DEBUG Eintragsansicht anzeigen - Show Entry View + Show Entry View Datenbankstruktur - Database Structure + Database Structure Importieren aus - Import From + Import From PwManager-Datei (*.pwm)... - PwManager File (*.pwm)... + PwManager File (*.pwm)... Über Keepass... - About Keepass... + About Keepass... Dokumentation... - Dockumentation... + Dockumentation... Passwörter verbergen - Hide Passwords + Hide Passwords Benutzernamen verbergen - Hide Usernames + Hide Usernames KWallet XML-Datei (*.xml)... - KWallet XML File (*.xml)... + KWallet XML File (*.xml)... Über QT... - About QT... + About QT... + + + + MainWindow + + Keepass Passwort-Manager + + + + Ansicht + View + + + Extras + Extras + + + Hilfe + Help + + + Bearbeiten + Edit + + + Datei + File + + + Importieren aus + Import From + + + Neue Datenbank... + + + + Datenbank öffnen... + + + + Datenbank schließen... + + + + Datenbank speichern + Save Database + + + Datenbank speichern unter... + Save Database As... + + + Datenbank-Einstellungen... + Database Settings... + + + Hauptschlüssel ändern... + Change Master Key... + + + Beenden + Exit + + + PwManager-Datei (*.pwm) + + + + KWallet XML-Datei (*.xml) + PasswordDlg Datenbank öffnen - Open Database + Open Database Geben Sie das Passwort ein oder wählen Sie eine Schlüsseldatei. @@ -1215,11 +1368,11 @@ active translation for Keepass. O&K - O&K + O&K Alt+K - Alt+K + Alt+K Schlüssel @@ -1243,15 +1396,35 @@ active translation for Keepass. Alt+ä - Alt+B + Alt+B Passwort <b>und</b> Schlüsseldatei verwenden - Use password <b>and</b> key file. + Use password <b>and</b> key file. Abbre&chen - &Cancel + &Cancel + + + TextLabel + + + + OK + OK + + + Abbrechen + Cancel + + + Alt+Ä + + + + Passwort UND Schlüsseldatei benutzen + @@ -1289,7 +1462,7 @@ active translation for Keepass. QObject Fehler - Error + Error Das Datenbankformat Version 0.1 wird nicht unterstützt. @@ -1321,7 +1494,7 @@ active translation for Keepass. ungültiger RGB-Farbwert: - invalid RGB color value: + invalid RGB color value: '/dev/random' bzw. '/dev/urandom' konnte nicht zum lesen geöffnet werden. @@ -1404,6 +1577,19 @@ active translation for Keepass. Sie Schreibrechte im Verzeichnis ~/.keepass besitzen. Could not save configuration file. + + dd'.'MM'.'yy' 'hh':'mm + + + + Die Datei '%1' konnte nicht gefunden werden. + + + + ungültiger RGB-Farbwert. + + + Search_Dlg diff --git a/src/translations/russian.ts b/src/translations/russian.ts index f27dcb8..a712c5a 100755 --- a/src/translations/russian.ts +++ b/src/translations/russian.ts @@ -102,6 +102,10 @@ Die Datei '%1' konnte nicht geöffnet werden. Невозможно открыть файл '%1'. + + http://keepass.berlios.de/index.php + + CChangeKeyDlg @@ -328,799 +332,877 @@ Sind Sie sicher, dass Sie dies tun wollen? - CMainWindow - - Keepass Passwortsafe - Keepass Password Safe - + CPasswordDialog - Warnung - Предупреждение + Datenbank öffnen + Открыть базу - Die Übersetzungsdatei '%1' konnte nicht geladen werden. -Die Sprache wurde auf Deutsch zurückgesetzt. - Файл перевода '%1' не может быть загружен -Будет использован язык по умолчанию. + Datei manuell wählen... + Выбрать файл вручную... - OK - OK + < keiner > + < нет > Fehler Ошибка - Die Datei '%1' konnte nicht gefunden werden. - Невозможно открыть файл '%1'. + Bitte geben Sie ein Passwort ein. + Пожалуйста, введите пароль. - Datenbank öffnen - Открыть базу паролей + OK + OK - Keepass - %1 - Keepass - %1 + Bitte wählen Sie eine Schlüsseldatei. + Пожалуйста, выберите ключевой файл. - Abbrechen - Отменить + Geben Sie bitte ein Passwort ein oder wählen Sie eine Schlüsseldatei. + Пожалуйста, выберите ключевой файл или введите пароль. - - Titel - Заголовок + + Datenbank öffnen + Открыть базу - - Benutzername - Имя пользователя + + Datei manuell wählen... + Выбрать файл вручную... - - URL - URL + + Bitte wählen Sie eine Schlüsseldatei. + Пожалуйста, выберите ключевой файл. - - Passwort - Пароль + + Geben Sie bitte ein Passwort ein oder wählen Sie eine Schlüsseldatei. + Пожалуйста, выберите ключевой файл или введите пароль. + + + CSearchDlg - Kommentare - Комментарии + Suchen + Поиск - Gültig bis - Годен до + Hinweis + Информация - Erstellung - Создание + Bitte geben Sie einen Suchbegriff ein. + Пожалуйста, введите хотя-бы один символ. + + + CSettingsDlg - letzte Änderung - Изменен + Einstellungen + Настройки + + + ChangeKeyDialog - letzter Zugriff - последний Доступ + Hauptschlüssel ändern + Изменить главный пароль - Anhang - Вложение + Geben Sie das Passwort ein und/oder wählen Sie eine Schlüsseldatei. + Введите пароль и/или выберите ключевой файл. - <B>Gruppe: </B>%1 <B>Titel: </B>%2 <B>Benutzername: </B>%3 <B>URL: </B>%4 <B>Passwort: </B>%5 <B>Erstellt: </B>%6 <B>letzte Änderung: </B>%7 <B>letzter Zugriff: </B>%8 <B>gültig bis: </B>%9 - <B>Категория: </B>%1 <B>Заголовок: </B>%2 <B>Имя пользователя: </B>%3 <B>URL: </B>%4 <B>Пароль: </B>%5 <B>Создан: </B>%6 <B>Изменен: </B>%7 <B>Доступ: </B>%8 <B>Годен до: </B>%9 + O&K + O&K - Gruppen - Категории + Alt+K + Alt+K - Datenbank speichern? - Сохранить базу? + Schlüssel + Ключ - Soll die aktuelle Datenbank vor dem Schließen gespeichert werden? - Хотите сохранить базу перед закрытием? + Schlüsseldatei oder Datenträger: + Ключевой файл или устройство: - Ja - Да + Passwort: + Пароль: - Nein - Нет + Passwort <b>und</b> Schlüsseldatei verwenden + Использовать пароль <b>и</b> ключевой файл - Gruppeneigenschaften - Настройки + W&ählen... + &Обзор... - Hinweis - Информация + Alt+ä + Alt+B - Dieser Eintrag hat keinen Dateianhang. - Запись не имеет вложений. + ... + ... - Anhang speichern... - Сохранить вложение... + Passwortwiederholung: + Повторите пароль: - Vorhandene Datei überschreiben? - Перезаписать существующий файл? + Abb&rechen + О&тмена - Unter dem gewählten Dateinamen existiert bereits eine Datei. -Soll sie überschrieben werden? - Перезаписать существующий файл? + Alt+R + Alt+R - Datei konnte nicht überschrieben werden. - Невозможно перезаписать файл. + Abbrechen + Отмена - - Datei konnte nicht erstellt werden. - Невозможно создать файл. + + Hauptschlüssel ändern + Изменить главный пароль - - Beim schreiben in der Datei ist ein Fehler aufgetreten. - Ошибка во время записи файла. + + Geben Sie das Passwort ein und/oder wählen Sie eine Schlüsseldatei. + Введите пароль и/или выберите ключевой файл. - - Die Datei konnte nicht vollständig geschrieben werden. - Файл не может быть полностью записан. + + Schlüssel + Ключ + + + Schlüsseldatei oder Datenträger: + Ключевой файл или устройство: + + + Passwort <b>und</b> Schlüsseldatei verwenden + Использовать пароль <b>и</b> ключевой файл + + + W&ählen... + &Обзор... + + + Alt+ä + + + + EditEntryDialog - Suche erfolglos - Поиск закончен + Eintrag bearbeiten + Редактировать запись - Die Suche lieferte keine Ergebnisse. - Ничего не найдено. + 120 Bits + 120 Bit - Suchergebnisse - Результаты поиска + Ge&n. + Ge&n. - Passwort in Zwischenablage kopieren - Скопировать пароль в буфер обмена + Icon: + Icon: - Benutzername in Zwischenablage kopieren - Скопировать Имя Пользователя в буфер обмена + ... + ... - URL öffnen - Открыть URL + O&K + O&K - Eintrag hinzufügen... - Добавить запись... + Benutzername: + Имя пользователя: - Eintrag anzeigen/bearbeiten - Показать/Редактировать запись + Passwort Wdhlg.: + Повторите пароль: - Eintrag duplizieren - Повторяющаяся запись + Titel: + Заголовок: - Eintrag löschen - Удалить запись + URL: + URL: - Gruppe hinzufügen... - Добавить группу... + Passwort: + Пароль: - Untergruppe hinzufügen... - Добавить подгруппу... + Qualität: + Качество: - Gruppe löschen - Удалить группу + Kommentar: + Комментарий: - Eigenschaften - Настройки + gültig bis: + Годен до: - Ausblenden - Спрятать + Anhang: + Вложение: - Einstellungen - Опции + Gruppe: + Категория: - Platzhalter - Заменить символ + 5,30 MB + 5,30 MB - < noch nicht implementiert > - < еще не реализовано > + Abbre&chen + &Отмена - Beim öffnen der Datenbank ist ein Fehler aufgetreten. - Невозможно открыть базу. + Alt+C + Alt+C - Laden fehlgeschlagen. <TODO: Fehlerbeschreibung> - Загрузка невозможна. <TODO: Error Desc.> + Alt+K + Alt+K - - Die Übersetzungsdatei '%1' konnte nicht geladen werden. -Die Sprache wurde auf Deutsch zurückgesetzt. - Файл перевода '%1' не может быть загружен -Будет использован язык по умолчанию. + + Abbrechen + Отмена - Datenbank öffnen - Открыть базу паролей + Qualität: + Качество: - Beim öffnen der Datenbank ist ein Fehler aufgetreten. - Невозможно открыть базу. + gültig bis: + годен до: - Gültig bis - Годен до + läuft nicht ab + - - letzte Änderung - Изменен + + + EditGroupDialog + + Gruppeneigenschaften + Свойства категории - - <B>Gruppe: </B>%1 <B>Titel: </B>%2 <B>Benutzername: </B>%3 <B>URL: </B>%4 <B>Passwort: </B>%5 <B>Erstellt: </B>%6 <B>letzte Änderung: </B>%7 <B>letzter Zugriff: </B>%8 <B>gültig bis: </B>%9 - <B>Категория: </B>%1 <B>Заголовок: </B>%2 <B>Имя пользователя: </B>%3 <B>URL: </B>%4 <B>Пароль: </B>%5 <B>Создан: </B>%6 <B>Изменен: </B>%7 <B>Доступ: </B>%8 <B>Годен до: </B>%9 + + Titel: + Заголовок: - - Soll die aktuelle Datenbank vor dem Schließen gespeichert werden? - Хотите сохранить базу перед закрытием? + + Symbol: + Icon: - - Vorhandene Datei überschreiben? - Перезаписать существующий файл? + + Abbre&chen + О&тмена - - Unter dem gewählten Dateinamen existiert bereits eine Datei. -Soll sie überschrieben werden? - Перезаписать существующий файл? + + Alt+C + Alt+C - - Datei konnte nicht überschrieben werden. - Невозможно перезаписать файл. + + O&K + O&K - - Die Datei konnte nicht vollständig geschrieben werden. - Файл не может быть полностью записан. + + Alt+K + Alt+K - - URL öffnen - Открыть URL + + + Form1 + + Form1 + Form1 - - Eintrag hinzufügen... - Добавить запись... + + + GenPwDlg + + Passwort Generator + Генератор паролей - - Eintrag löschen - Удалить запись + + Generieren + Создать - - Untergruppe hinzufügen... - Добавить подгруппу... + + Neues Passwort: + Новый пароль: - - Gruppe löschen - Удалить группу + + Qualität: + Качество: - - Gruppe hinzufügen... - Добавить группу... + + Optionen + Параметры - Warnung: Verzeichnis ~/.keepass konnte nicht erstellt werden. - Внимание: Невозможно создать директорию ~/.keepass. + Gro&ßbuchstaben + &Заглавные буквы - - Die Übersetzungsdatei '%1' konnte nicht geladen werden. - Die Sprache wurde auf Deutsch zurückgesetzt. - Файл перевода '%1' не был загружен. -Возврат к исходному переводу. + + Alt+ß + Alt+L - Die Konfigurationsdatei konnte nicht gespeichert werden.Stellen Sie sicher, dass -Sie Schreibrechte im Verzeichnis ~/.keepass besitzen. - Невозможно сохранить файл конфигурации. + &Kleinbuchstaben + &Строчные буквы - - Beim öffnen der Datenbank ist ein Fehler aufgetreten: -%1 - Ошибка при открытии базы: -%1 + + Alt+K + Alt+O - Frage - Вопрос + &Zahlen + &Числа - - Es ist noch eine andere Datenbank geöffnet. Soll sie mit der zu importierenden Datenbank zusammengeführt oder geschlossen werden werden? - Другая база всё еще открыта. Хотите объединить её с импортируемой базой или закрыть? + + Alt+Z + Alt+N - - Zusammenführen - Объединить + + Bindestriche + Минус - - Schließen - Закрыть + + &Unterstriche + &Подчеркивание - Datenbank importieren - Импорт базы + Alt+U + Alt+U - Die Datei konnte nicht importiert werden. -%1 - Файл не может быть импортирован. -%1 + h&öhere ANSI-Zeichen + &Верхние ANSI Символы - - - CPasswordDialog - Datenbank öffnen - Открыть базу + Alt+ö + Alt+H - Datei manuell wählen... - Выбрать файл вручную... + &nur folgende Zeichen benutzen: + &Использовать только следующие символы: - < keiner > - < нет > + Alt+N + Alt+Y - Fehler - Ошибка + Zeichenanzahl: + Длина: - Bitte geben Sie ein Passwort ein. - Пожалуйста, введите пароль. + folgende Zeichengruppen &verwenden: + использовать следующие &символы: - OK - OK + Alt+V + Alt+C - Bitte wählen Sie eine Schlüsseldatei. - Пожалуйста, выберите ключевой файл. + &Leerzeichen + &Пробел - Geben Sie bitte ein Passwort ein oder wählen Sie eine Schlüsseldatei. - Пожалуйста, выберите ключевой файл или введите пароль. + Alt+L + Alt+S + + + Akzep&tieren + &Принять + + + Abbre&chen + &Отменить + + + S&onderzeichen + &Спецсимволы + + + "/dev/rando&m" nutzen (empfohlen) + Использовать '/dev/rando&m' (рекомендуется) + + + Alt+M + Alt+M + + + Akzeptieren + Прнять + + + Abbrechen + Отмена + + + Sonderzeichen + Спецсимволы + + + "/dev/&random" nutzen (empfohlen) + использовать "/dev/&random" (рекомендуется) + + + Alt+R + Alt+R - Datenbank öffnen - Открыть базу + Qualität: + Качество: - Datei manuell wählen... - Выбрать файл вручную... + Gro&ßbuchstaben + &Заглавные буквы - Bitte wählen Sie eine Schlüsseldatei. - Пожалуйста, выберите ключевой файл. + Alt+ß + Alt+L - Geben Sie bitte ein Passwort ein oder wählen Sie eine Schlüsseldatei. - Пожалуйста, выберите ключевой файл или введите пароль. + h&öhere ANSI-Zeichen + &Верхние ANSI Символы + + + Alt+ö + Alt+H - CSearchDlg + KeepassEntryView - Suchen - Поиск + Titel + Заголовок - Hinweis - Информация + Benutzername + Имя пользователя - Bitte geben Sie einen Suchbegriff ein. - Пожалуйста, введите хотя-бы один символ. + URL + URL - - - CSettingsDlg - Einstellungen - Настройки + Passwort + Пароль - - - ChangeKeyDialog - Hauptschlüssel ändern - Изменить главный пароль + Kommentare + Комментарии - - Geben Sie das Passwort ein und/oder wählen Sie eine Schlüsseldatei. - Введите пароль и/или выберите ключевой файл. + + Gültig bis + Годен до - O&K - O&K + Erstellung + Создание + + + letzte Änderung + Изменен - Alt+K - Alt+K + letzter Zugriff + последний Доступ - Schlüssel - Ключ + Anhang + Вложение + + + KeepassGroupView - Schlüsseldatei oder Datenträger: - Ключевой файл или устройство: + Gruppen + Категории + + + KeepassMainWindow - Passwort: - Пароль: + Keepass Passwortsafe + Keepass Password Safe - Passwort <b>und</b> Schlüsseldatei verwenden - Использовать пароль <b>и</b> ключевой файл + Warnung + Предупреждение - W&ählen... - &Обзор... + Die Übersetzungsdatei '%1' konnte nicht geladen werden. +Die Sprache wurde auf Deutsch zurückgesetzt. + Файл перевода '%1' не может быть загружен +Будет использован язык по умолчанию. - Alt+ä - Alt+B + OK + OK - ... - ... + Fehler + Ошибка - Passwortwiederholung: - Повторите пароль: + Die Datei '%1' konnte nicht gefunden werden. + Невозможно открыть файл '%1'. - Abb&rechen - О&тмена + Datenbank öffnen + Открыть базу паролей - Alt+R - Alt+R + Keepass - %1 + Keepass - %1 Abbrechen - Отмена - - - Hauptschlüssel ändern - Изменить главный пароль - - - Geben Sie das Passwort ein und/oder wählen Sie eine Schlüsseldatei. - Введите пароль и/или выберите ключевой файл. + Отменить - - Schlüssel - Ключ + + Titel + Заголовок - - Schlüsseldatei oder Datenträger: - Ключевой файл или устройство: + + Benutzername + Имя пользователя - - Passwort <b>und</b> Schlüsseldatei verwenden - Использовать пароль <b>и</b> ключевой файл + + URL + URL - - W&ählen... - &Обзор... + + Passwort + Пароль - - Alt+ä - + + Kommentare + Комментарии - - - EditEntryDialog - Eintrag bearbeiten - Редактировать запись + Gültig bis + Годен до - 120 Bits - 120 Bit + Erstellung + Создание - Ge&n. - Ge&n. + letzte Änderung + Изменен - Icon: - Icon: + letzter Zugriff + последний Доступ - ... - ... + Anhang + Вложение - O&K - O&K + <B>Gruppe: </B>%1 <B>Titel: </B>%2 <B>Benutzername: </B>%3 <B>URL: </B>%4 <B>Passwort: </B>%5 <B>Erstellt: </B>%6 <B>letzte Änderung: </B>%7 <B>letzter Zugriff: </B>%8 <B>gültig bis: </B>%9 + <B>Категория: </B>%1 <B>Заголовок: </B>%2 <B>Имя пользователя: </B>%3 <B>URL: </B>%4 <B>Пароль: </B>%5 <B>Создан: </B>%6 <B>Изменен: </B>%7 <B>Доступ: </B>%8 <B>Годен до: </B>%9 - Benutzername: - Имя пользователя: + Gruppen + Категории - Passwort Wdhlg.: - Повторите пароль: + Datenbank speichern? + Сохранить базу? - Titel: - Заголовок: + Soll die aktuelle Datenbank vor dem Schließen gespeichert werden? + Хотите сохранить базу перед закрытием? - URL: - URL: + Ja + Да - Passwort: - Пароль: + Nein + Нет - Qualität: - Качество: + Gruppeneigenschaften + Настройки - Kommentar: - Комментарий: + Hinweis + Информация - gültig bis: - Годен до: + Dieser Eintrag hat keinen Dateianhang. + Запись не имеет вложений. - Anhang: - Вложение: + Anhang speichern... + Сохранить вложение... - Gruppe: - Категория: + Vorhandene Datei überschreiben? + Перезаписать существующий файл? - 5,30 MB - 5,30 MB + Unter dem gewählten Dateinamen existiert bereits eine Datei. +Soll sie überschrieben werden? + Перезаписать существующий файл? - Abbre&chen - &Отмена + Datei konnte nicht überschrieben werden. + Невозможно перезаписать файл. - Alt+C - Alt+C + Datei konnte nicht erstellt werden. + Невозможно создать файл. - Alt+K - Alt+K + Beim schreiben in der Datei ist ein Fehler aufgetreten. + Ошибка во время записи файла. - Abbrechen - Отмена + Die Datei konnte nicht vollständig geschrieben werden. + Файл не может быть полностью записан. - - Qualität: - Качество: + + Suche erfolglos + Поиск закончен - - gültig bis: - годен до: + + Die Suche lieferte keine Ergebnisse. + Ничего не найдено. - - - EditGroupDialog - Gruppeneigenschaften - Свойства категории + Suchergebnisse + Результаты поиска - Titel: - Заголовок: + Passwort in Zwischenablage kopieren + Скопировать пароль в буфер обмена - Symbol: - Icon: + Benutzername in Zwischenablage kopieren + Скопировать Имя Пользователя в буфер обмена - Abbre&chen - О&тмена + URL öffnen + Открыть URL - Alt+C - Alt+C + Eintrag hinzufügen... + Добавить запись... - O&K - O&K + Eintrag anzeigen/bearbeiten + Показать/Редактировать запись - Alt+K - Alt+K + Eintrag duplizieren + Повторяющаяся запись - - - Form1 - Form1 - Form1 + Eintrag löschen + Удалить запись - - - GenPwDlg - Passwort Generator - Генератор паролей + Gruppe hinzufügen... + Добавить группу... - Generieren - Создать + Untergruppe hinzufügen... + Добавить подгруппу... - Neues Passwort: - Новый пароль: + Gruppe löschen + Удалить группу - Qualität: - Качество: + Eigenschaften + Настройки - Optionen - Параметры + Ausblenden + Спрятать - Gro&ßbuchstaben - &Заглавные буквы + Einstellungen + Опции - Alt+ß - Alt+L + Platzhalter + Заменить символ - &Kleinbuchstaben - &Строчные буквы + < noch nicht implementiert > + < еще не реализовано > - Alt+K - Alt+O + Beim öffnen der Datenbank ist ein Fehler aufgetreten. + Невозможно открыть базу. - &Zahlen - &Числа + Laden fehlgeschlagen. <TODO: Fehlerbeschreibung> + Загрузка невозможна. <TODO: Error Desc.> + + + Die Übersetzungsdatei '%1' konnte nicht geladen werden. +Die Sprache wurde auf Deutsch zurückgesetzt. + Файл перевода '%1' не может быть загружен +Будет использован язык по умолчанию. + + + Datenbank öffnen + Открыть базу паролей + + + Beim öffnen der Datenbank ist ein Fehler aufgetreten. + Невозможно открыть базу. + + + Gültig bis + Годен до + + + letzte Änderung + Изменен - - Alt+Z - Alt+N + + <B>Gruppe: </B>%1 <B>Titel: </B>%2 <B>Benutzername: </B>%3 <B>URL: </B>%4 <B>Passwort: </B>%5 <B>Erstellt: </B>%6 <B>letzte Änderung: </B>%7 <B>letzter Zugriff: </B>%8 <B>gültig bis: </B>%9 + <B>Категория: </B>%1 <B>Заголовок: </B>%2 <B>Имя пользователя: </B>%3 <B>URL: </B>%4 <B>Пароль: </B>%5 <B>Создан: </B>%6 <B>Изменен: </B>%7 <B>Доступ: </B>%8 <B>Годен до: </B>%9 - - Bindestriche - Минус + + Soll die aktuelle Datenbank vor dem Schließen gespeichert werden? + Хотите сохранить базу перед закрытием? - - &Unterstriche - &Подчеркивание + + Vorhandene Datei überschreiben? + Перезаписать существующий файл? - - Alt+U - Alt+U + + Unter dem gewählten Dateinamen existiert bereits eine Datei. +Soll sie überschrieben werden? + Перезаписать существующий файл? - - h&öhere ANSI-Zeichen - &Верхние ANSI Символы + + Datei konnte nicht überschrieben werden. + Невозможно перезаписать файл. - - Alt+ö - Alt+H + + Die Datei konnte nicht vollständig geschrieben werden. + Файл не может быть полностью записан. - - &nur folgende Zeichen benutzen: - &Использовать только следующие символы: + + URL öffnen + Открыть URL - - Alt+N - Alt+Y + + Eintrag hinzufügen... + Добавить запись... - - Zeichenanzahl: - Длина: + + Eintrag löschen + Удалить запись - - folgende Zeichengruppen &verwenden: - использовать следующие &символы: + + Untergruppe hinzufügen... + Добавить подгруппу... - - Alt+V - Alt+C + + Gruppe löschen + Удалить группу - - &Leerzeichen - &Пробел + + Gruppe hinzufügen... + Добавить группу... - Alt+L - Alt+S + Warnung: Verzeichnis ~/.keepass konnte nicht erstellt werden. + Внимание: Невозможно создать директорию ~/.keepass. - - Akzep&tieren - &Принять + + Die Übersetzungsdatei '%1' konnte nicht geladen werden. + Die Sprache wurde auf Deutsch zurückgesetzt. + Файл перевода '%1' не был загружен. +Возврат к исходному переводу. - Abbre&chen - &Отменить + Die Konfigurationsdatei konnte nicht gespeichert werden.Stellen Sie sicher, dass +Sie Schreibrechte im Verzeichnis ~/.keepass besitzen. + Невозможно сохранить файл конфигурации. - - S&onderzeichen - &Спецсимволы + + Beim öffnen der Datenbank ist ein Fehler aufgetreten: +%1 + Ошибка при открытии базы: +%1 - "/dev/rando&m" nutzen (empfohlen) - Использовать '/dev/rando&m' (рекомендуется) + Frage + Вопрос - - Alt+M - Alt+M + + Es ist noch eine andere Datenbank geöffnet. Soll sie mit der zu importierenden Datenbank zusammengeführt oder geschlossen werden werden? + Другая база всё еще открыта. Хотите объединить её с импортируемой базой или закрыть? - - Akzeptieren - Прнять + + Zusammenführen + Объединить - - Abbrechen - Отмена + + Schließen + Закрыть - Sonderzeichen - Спецсимволы + Datenbank importieren + Импорт базы - "/dev/&random" nutzen (empfohlen) - использовать "/dev/&random" (рекомендуется) + Die Datei konnte nicht importiert werden. +%1 + Файл не может быть импортирован. +%1 - Alt+R - Alt+R + unbekannter Fehler in PwDatabase::loadDatabase() + - Qualität: - Качество: + Databank öffnen... + - - Gro&ßbuchstaben - &Заглавные буквы + + Speichern? + - Alt+ß - Alt+L + Sollen die Änderungen an der aktuellen Datenbank gespeichert werden? + - - h&öhere ANSI-Zeichen - &Верхние ANSI Символы + + Speichern fehlgeschlagen + - - Alt+ö - Alt+H + + Die Datei konnte nicht gespeichert werden. + @@ -1186,43 +1268,43 @@ als Übersetzung für Keepass fest. MainFrame Form1 - Form1 + Form1 Neue Datenbank - Новая база + Новая база Datei - Файл + Файл Bearbeiten - Редактирование + Редактирование Ansicht - Вид + Вид Spalten - Колонки + Колонки Extras - Дополнительно + Дополнительно Hilfe - Помощь + Помощь Toolbar - Панель инструментов + Панель инструментов neue Datenbank - Новая база + Новая база Datenbank öffnen @@ -1230,7 +1312,7 @@ als Übersetzung für Keepass fest. Datenbank speichern - Сохранить базу + Сохранить базу Eintrag hinzufügen @@ -1238,7 +1320,7 @@ als Übersetzung für Keepass fest. Eintrag bearbeiten - Редактировать запись + Редактировать запись Eintrag löschen @@ -1246,35 +1328,35 @@ als Übersetzung für Keepass fest. Benutzername in Zwischenablage kopieren - Копировать Имя в буфер обмена + Копировать Имя в буфер обмена Passwort in Zwischenablage kopieren - Копировать Пароль в буфер обмена + Копировать Пароль в буфер обмена in Datenbank suchen - Поиск + Поиск < PLATZHALTER > - < пусто > + < пусто > Hilfe anzeigen - Помощь + Помощь Schnellsuche - Быстрый поиск + Быстрый поиск Beenden - Выход + Выход &Neue Datenbank... - &Новая база... + &Новая база... &Datenbank öffnen... @@ -1286,15 +1368,15 @@ als Übersetzung für Keepass fest. Datenbank s&peichern - &Сохранить базу + &Сохранить базу Datenbank speichern unter... - Сохранить базу как... + Сохранить базу как... Datenbank-Einstellungen... - Настройки базы... + Настройки базы... Hauptschlüssel ändern... @@ -1302,15 +1384,15 @@ als Übersetzung für Keepass fest. &Neue Gruppe erstellen... - &Новая категория... + &Новая категория... Neue &Untergruppe ertellen... - &Новая подкатегория... + &Новая подкатегория... Gruppe &bearbeiten... - &Редактировать категорию... + &Редактировать категорию... Gruppe &löschen @@ -1318,11 +1400,11 @@ als Übersetzung für Keepass fest. &Passwort in Zwischenablage kopieren - Копировать &Пароль в буфер обмена + Копировать &Пароль в буфер обмена Ben&utzername in Zwischenablage kopieren - Копировать &имя в буфер обмена + Копировать &имя в буфер обмена U&RL öffnen @@ -1330,7 +1412,7 @@ als Übersetzung für Keepass fest. &Anhang speichern unter... - Сохранить вложение &как... + Сохранить вложение &как... Eintrag &hinzufügen... @@ -1338,11 +1420,11 @@ als Übersetzung für Keepass fest. Eintrag bearbeiten/&anzeigen... - Показать/&Редактировать запись... + Показать/&Редактировать запись... Eintrag &duplizieren - &Dup Копировать запись + &Dup Копировать запись Eintrag l&öschen @@ -1350,19 +1432,19 @@ als Übersetzung für Keepass fest. In Datenbank &suchen... - &Поиск в базе... + &Поиск в базе... In dieser Gru&ppe suchen... - Поиск в &категории... + Поиск в &категории... &Toolbar anzeigen - Показать панель &инструментов + Показать панель &инструментов Einstellungen... - Настройки... + Настройки... Über... @@ -1370,31 +1452,31 @@ als Übersetzung für Keepass fest. Titel - Заголовок + Заголовок Benutzername - Имя пользователя + Имя пользователя URL - URL + URL Passwort - Пароль + Пароль Kommentar - Комментарий + Комментарий Ablaufdatum - Годен до + Годен до Letzter Zugriff - последний доступ + последний доступ Letzte Änderung @@ -1402,31 +1484,31 @@ als Übersetzung für Keepass fest. Erstellungsdatum - Создание + Создание Anhang - Вложение + Вложение Unnamed - Неназвано + Неназвано Sprache... - Язык... + Язык... DEBUG - DEBUG + DEBUG Eintragsansicht anzeigen - Расширенный вид записи + Расширенный вид записи Datenbankstruktur - Структура базы + Структура базы Eintragsansicht antzeigen @@ -1434,43 +1516,43 @@ als Übersetzung für Keepass fest. Datenbank öffnen - Открыть базу + Открыть базу Eintrag hinzufügen - Добавить запись + Добавить запись Eintrag löschen - Удалить запись + Удалить запись &Datenbank öffnen... - Обкрыть &базу... + Обкрыть &базу... Datenbank &schließen - &Закрыть базу + &Закрыть базу Hauptschlüssel ändern... - Изменить главный ключ... + Изменить главный ключ... Gruppe &löschen - &Удалить категорию + &Удалить категорию U&RL öffnen - Открыть U&RL + Открыть U&RL Eintrag &hinzufügen... - Добавить &запись... + Добавить &запись... Eintrag l&öschen - &Удалить запись + &Удалить запись Über... @@ -1478,39 +1560,110 @@ als Übersetzung für Keepass fest. Letzte Änderung - Последее изменение + Последее изменение Importieren aus - Импорт из + Импорт из Über Keepass... - О Keepass... + О Keepass... PwManager-Datei (*.pwm)... - Файл PwManager (*.pwm)... + Файл PwManager (*.pwm)... Dokumentation... - Документация... + Документация... Passwörter verbergen - Спрятать пароли + Спрятать пароли Benutzernamen verbergen - Спрятать имена пользователей + Спрятать имена пользователей KWallet XML-Datei (*.xml)... - Файл KWallet XML (*.xml)... + Файл KWallet XML (*.xml)... Über QT... - О QT... + О QT... + + + + MainWindow + + Keepass Passwort-Manager + + + + Ansicht + Вид + + + Extras + Дополнительно + + + Hilfe + Помощь + + + Bearbeiten + Редактирование + + + Datei + Файл + + + Importieren aus + Импорт из + + + Neue Datenbank... + + + + Datenbank öffnen... + + + + Datenbank schließen... + + + + Datenbank speichern + Сохранить базу + + + Datenbank speichern unter... + Сохранить базу как... + + + Datenbank-Einstellungen... + Настройки базы... + + + Hauptschlüssel ändern... + Изменить главный ключ... + + + Beenden + Выход + + + PwManager-Datei (*.pwm) + + + + KWallet XML-Datei (*.xml) + @@ -1525,11 +1678,11 @@ als Übersetzung für Keepass fest. O&K - O&K + O&K Alt+K - Alt+K + Alt+K Schlüssel @@ -1561,7 +1714,7 @@ als Übersetzung für Keepass fest. Abbre&chen - &Отмена + &Отмена Abb&rechen @@ -1569,7 +1722,7 @@ als Übersetzung für Keepass fest. Datenbank öffnen - Открыть базу + Открыть базу Geben Sie das Passwort ein oder wählen Sie eine Schlüsseldatei. @@ -1589,11 +1742,31 @@ als Übersetzung für Keepass fest. Alt+ä - Alt+B + Alt+B Passwort <b>und</b> Schlüsseldatei verwenden - Использовать пароль <b>и</b> ключевой файл + Использовать пароль <b>и</b> ключевой файл + + + TextLabel + + + + OK + OK + + + Abbrechen + + + + Alt+Ä + + + + Passwort UND Schlüsseldatei benutzen + @@ -1631,7 +1804,7 @@ als Übersetzung für Keepass fest. QObject Fehler - Ошбка + Ошбка Das Datenbankformat Version 0.1 wird nicht unterstützt. @@ -1683,7 +1856,7 @@ als Übersetzung für Keepass fest. ungültiger RGB-Farbwert: - некорректное RGB значение цвета: + некорректное RGB значение цвета: '/dev/random' bzw. '/dev/urandom' konnte nicht zum lesen geöffnet werden. @@ -1762,6 +1935,19 @@ als Übersetzung für Keepass fest. Sie Schreibrechte im Verzeichnis ~/.keepass besitzen. Невозможно сохранить файл конфигурации. + + dd'.'MM'.'yy' 'hh':'mm + + + + Die Datei '%1' konnte nicht gefunden werden. + + + + ungültiger RGB-Farbwert. + + + Search_Dlg