diff --git a/src/PwManager.cpp b/src/PwManager.cpp index edc81cb..a35624c 100755 --- a/src/PwManager.cpp +++ b/src/PwManager.cpp @@ -420,6 +420,17 @@ entry->GroupID=dst->ID; } +CEntry* PwDatabase::cloneEntry(CEntry* entry){ +CEntry *Dolly=addEntry(); +Q_UINT8 ID[16]; +Q_UINT32 sid=Dolly->sID; +memcpy(ID,Dolly->ID,16); +*Dolly=*entry; +Dolly->sID=sid; +memcpy(Dolly->ID,ID,16); +return Dolly; +} + bool CGroup::ReadGroupField(Q_UINT16 FieldType, Q_UINT32 FieldSize, Q_UINT8 *pData) { diff --git a/src/PwManager.h b/src/PwManager.h index 93bd48d..b2a726b 100755 --- a/src/PwManager.h +++ b/src/PwManager.h @@ -63,6 +63,7 @@ public: int getGroupIndex(unsigned long ID); int getNumberOfChilds(CGroup* pGroup); + CEntry* cloneEntry(CEntry* pEntry); void deleteEntry(CEntry* pEntry); void moveEntry(CEntry* pEntry,CGroup* pDstGroup); CEntry* addEntry(); diff --git a/src/lib/EntryView.cpp b/src/lib/EntryView.cpp index 5b5ed23..418fc3c 100644 --- a/src/lib/EntryView.cpp +++ b/src/lib/EntryView.cpp @@ -84,6 +84,47 @@ for(int i=0; ipEntry; +if(entry->GroupID==CurrentGroup){ + 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.toString(DateTimeFormat));} + if(config.Columns[6]){ + tmp->setText(j++,entry->Creation.toString(DateTimeFormat));} + if(config.Columns[7]){ + tmp->setText(j++,entry->LastMod.toString(DateTimeFormat));} + if(config.Columns[8]){ + tmp->setText(j++,entry->LastAccess.toString(DateTimeFormat));} + if(config.Columns[9]){ + tmp->setText(j++,entry->BinaryDesc);} + tmp->setIcon(0,EntryIcons[entry->ImageID]); +} +} + +} + + void KeepassEntryView::updateColumns(){ QStringList cols; if(config.Columns[0]){ diff --git a/src/lib/EntryView.h b/src/lib/EntryView.h index 86ae349..8ad2789 100644 --- a/src/lib/EntryView.h +++ b/src/lib/EntryView.h @@ -29,6 +29,7 @@ class KeepassEntryView:public QTreeWidget{ public: KeepassEntryView(QWidget* parent=0); void updateItems(); + void refreshVisibleItems(); void setCurrentGroup(uint GroupID); void updateColumns(); PwDatabase* db; diff --git a/src/main.cpp b/src/main.cpp index 0275b41..2839db7 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -269,7 +269,7 @@ int i=1; i++; } for(i; irefreshVisibleItems(); if(dlg.ModFlag)setStateFileModified(true); } @@ -425,7 +429,31 @@ if(dlg.exec()){ EntryView->updateItems(); setStateFileModified(true); } +} + +void KeepassMainWindow::OnEditEditEntry(){ +Q_ASSERT(EntryView->selectedItems().size()==1); +editEntry(static_cast(EntryView->selectedItems()[0])->pEntry); +} +void KeepassMainWindow::OnEditCloneEntry(){ +Q_ASSERT(EntryView->selectedItems().size()>0); +QList entries=EntryView->selectedItems(); +for(int i=0; icloneEntry(((EntryViewItem*)entries[i])->pEntry); +} +setStateFileModified(true); +EntryView->updateItems(); +} + +void KeepassMainWindow::OnEditDeleteEntry(){ +Q_ASSERT(EntryView->selectedItems().size()>0); +QList entries=EntryView->selectedItems(); +for(int i=0; ideleteEntry(((EntryViewItem*)entries[i])->pEntry); +} +setStateFileModified(true); +EntryView->updateItems(); } CGroup* KeepassMainWindow::currentGroup(){ diff --git a/src/mainwindow.h b/src/mainwindow.h index 90d4e91..f849d06 100755 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -65,6 +65,9 @@ private slots: void OnEditEditGroup(); void OnEditDeleteGroup(); void OnEditNewEntry(); + void OnEditEditEntry(); + void OnEditCloneEntry(); + void OnEditDeleteEntry(); void OnCurrentGroupChanged(QTreeWidgetItem*,QTreeWidgetItem*); void OnEntryItemDoubleClicked(QTreeWidgetItem* item,int column); void OnEntrySelectionChanged();