diff --git a/src/import/Import_KWalletXml.cpp b/src/import/Import_KWalletXml.cpp index b3262a1..aeef653 100755 --- a/src/import/Import_KWalletXml.cpp +++ b/src/import/Import_KWalletXml.cpp @@ -21,59 +21,50 @@ #include "Import_KWalletXml.h" #include #include +#include -/* -bool Import_KWalletXml::importFile(QString FileName,StandardDatabase* pwm,QString& err){ -QFile file(FileName); -if(!file.exists()){ - err+=QObject::tr("File not found."); - return false;} -if(!file.open(QIODevice::ReadOnly)){ - err+=QObject::tr("Could not open file."); - return false;} -int len=file.size(); -if(len==0){ - err+=QObject::tr("File is empty."); - return false;} -quint8* buffer=new quint8[len]; -file.read((char*)buffer,len); -file.close(); -QDomDocument doc; -QString xmlerr; -int col,line; -if(!doc.setContent(QString::fromUtf8((char*)buffer,len),false,&xmlerr,&line,&col)){ - qWarning("Import_PwManager::parseXmlContent():\n"); - qWarning(((xmlerr+" (Line:%1 Column:%2)").arg(line).arg(col)+QString('\n')).toAscii()); - err+=QObject::tr("Invalid XML file (see stdout for details)."); +bool Import_KWalletXml::importDatabase(QWidget* GuiParent, IDatabase* db){ + QFile* file=openFile(GuiParent,identifier(),QStringList()<size(); + quint8* buffer=new quint8[len]; + file->read((char*)buffer,len); + file->close(); + delete file; + QDomDocument doc; + QString xmlerr; + int col,line; + if(!doc.setContent(QString::fromUtf8((char*)buffer,len),false,&xmlerr,&line,&col)){ + qWarning("Import_PwManager::parseXmlContent():\n"); + qWarning(((xmlerr+" (Line:%1 Column:%2)").arg(line).arg(col)+QString('\n')).toAscii()); + QMessageBox::critical(GuiParent,tr("Import Failed"),tr("Invalid XML data (see stdout for details).")); + delete [] buffer; + return false;} delete [] buffer; - return false;} -delete [] buffer; -QDomElement root=doc.documentElement(); -if(root.tagName()!="wallet"){err+=QObject::tr("Invalid XML file."); return false;} -QDomNodeList groups=root.elementsByTagName("folder"); -if(!groups.length()){err+=QObject::tr("Document does not contain data."); return false;} -for(int i=0;iaddGroup(NULL); - NewGroup->Name=CurrGroup.attribute("name"); - QDomNodeList entries=CurrGroup.elementsByTagName("password"); - for(int j=0;jaddEntry(); - NewEntry->Title=CurrEntry.attribute("name"); - NewEntry->GroupID=NewGroup->ID; - QString pw=CurrEntry.text(); - NewEntry->Password.setString(pw,true); - } -} -pwm->file=NULL; -pwm->SearchGroupID=-1; -pwm->CryptoAlgorithmus=ALGO_AES; -pwm->KeyEncRounds=6000; -return true; -}*/ \ No newline at end of file + QDomElement root=doc.documentElement(); + if(root.tagName()!="wallet"){QMessageBox::critical(GuiParent,tr("Import Failed"),tr("Invalid XML file.")); return false;} + QDomNodeList groups=root.elementsByTagName("folder"); + if(!groups.length()){QMessageBox::critical(GuiParent,tr("Import Failed"),tr("Document does not contain data.")); return false;} + for(int i=0;iaddGroup(&NewGroup,NULL); + QDomNodeList entries=CurrGroup.elementsByTagName("password"); + for(int j=0;jnewEntry(NewGroupHandle); + NewEntry->setTitle(CurrEntry.attribute("name")); + QString pw=CurrEntry.text(); + SecString pws; + pws.setString(pw,true); + NewEntry->setPassword(pws); + } + } + return true; +} \ No newline at end of file diff --git a/src/import/Import_KWalletXml.h b/src/import/Import_KWalletXml.h index da133f4..ab66172 100755 --- a/src/import/Import_KWalletXml.h +++ b/src/import/Import_KWalletXml.h @@ -20,14 +20,14 @@ #ifndef _IMPORT_KWALLET_H_ #define _IMPORT_KWALLET_H_ -#include -#include "StandardDatabase.h" - -class Import_KWalletXml{ -public: - bool importFile(QString FileName,StandardDatabase* db,QString& err); -private: +#include "Database.h" +#include "Import.h" +class Import_KWalletXml:public IImport, public ImporterBase{ + public: + virtual bool importDatabase(QWidget* GuiParent, IDatabase* Database); + virtual QString identifier(){return "KWalletXml";} + virtual QString title(){return "KWallet XML File (*.xml)";} }; #endif diff --git a/src/lib/EntryView.cpp b/src/lib/EntryView.cpp index 9748e4a..fea82fc 100644 --- a/src/lib/EntryView.cpp +++ b/src/lib/EntryView.cpp @@ -224,7 +224,7 @@ void KeepassEntryView::updateEntry(EntryViewItem* item){ item->setText(j++,entry->lastAccess().dateToString(Qt::LocalDate));} if(Columns[9]){ item->setText(j++,entry->binaryDesc());} - if(Columns[10]){ + if(Columns[10] && ViewMode==ShowSearchResults){ item->setText(j,entry->group()->title()); item->setIcon(j++,db->icon(entry->group()->image()));} } @@ -339,7 +339,11 @@ void KeepassEntryView::resizeEvent(QResizeEvent* e){ void KeepassEntryView::showSearchResults(){ - ViewMode=ShowSearchResults; + if(ViewMode==Normal){ + ViewMode=ShowSearchResults; + if(Columns[10])ColumnOrder[10]--; + updateColumns(); + } clear(); Items.clear(); createItems(SearchResults); @@ -347,7 +351,10 @@ void KeepassEntryView::showSearchResults(){ void KeepassEntryView::showGroup(IGroupHandle* group){ - ViewMode=Normal; + if(ViewMode==ShowSearchResults){ + ViewMode=Normal; + updateColumns(); + } clear(); Items.clear(); if(group==NULL)return; @@ -393,7 +400,7 @@ void KeepassEntryView::createItems(QList& entries){ item->setText(j++,entries[i]->lastAccess().dateToString(Qt::LocalDate));} if(Columns[9]){ item->setText(j++,entries[i]->binaryDesc());} - if(Columns[10]){ + if(Columns[10] && ViewMode==ShowSearchResults){ item->setText(j,entries[i]->group()->title()); item->setIcon(j++,db->icon(entries[i]->group()->image()));} } @@ -433,10 +440,14 @@ void KeepassEntryView::updateColumns(){ cols << tr("Last Access");} if(Columns[9]){ cols << tr("Attachment");} - if(Columns[10]){ + if(Columns[10] && ViewMode==ShowSearchResults){ cols << tr("Group");} setHeaderLabels(cols); + for(int i=0;i Order; for(int i=NUM_COLUMNS-1;i>=0;i--) Order.insertMulti(ColumnOrder[i],i); @@ -463,6 +474,7 @@ int KeepassEntryView::logicalColIndex(int LstIndex){ int c=-1; for(int i=0;iwidth(); int sum=0; + + for(int i=0;icount();i++){ sum+=ColumnSizes[columnListIndex(i)]; } @@ -484,7 +503,6 @@ void KeepassEntryView::resizeColumns(){ if(i==header()->count()-1){ NewSize+=(w-sum); // add rounding difference to the last column } - //qDebug("i=%i lstIndex=%i NewSize=%f",i,lstIndex,NewSize); header()->resizeSection(header()->logicalIndex(i),NewSize); ColumnSizes[lstIndex]=NewSize; } @@ -495,6 +513,7 @@ int KeepassEntryView::columnListIndex(int LogicalIndex){ int c=-1; int i=0; for(i;isortColumn(); - if(SortCol < 5 || SortCol==9 || SortCol==10){ //columns with string values (Title, Username, Password, URL, Comment, Group) + int SortCol=treeWidget()->header()->sortIndicatorSection(); + int ListIndex=((KeepassEntryView*)treeWidget())->columnListIndex(SortCol); + if(ListIndex < 5 || ListIndex==9 || ListIndex==10){ //columns with string values (Title, Username, Password, URL, Comment, Group) if(QString::localeAwareCompare(text(SortCol),other.text(SortCol)) < 0) return true; else diff --git a/src/lib/EntryView.h b/src/lib/EntryView.h index 1b01d7a..f6d9238 100644 --- a/src/lib/EntryView.h +++ b/src/lib/EntryView.h @@ -43,17 +43,17 @@ class KeepassEntryView:public QTreeWidget{ void showSearchResults(); void showGroup(IGroupHandle* group); void updateColumns(); + int columnListIndex(int LogicalIndex); IDatabase* db; QListItems; QList SearchResults; QMenu *ContextMenu; - QVarLengthArrayColumns; + QVarLengthArrayColumns; private: void setEntry(IEntryHandle* entry); void updateEntry(EntryViewItem*); void editEntry(EntryViewItem*); void createItems(QList& entries); - int columnListIndex(int LogicalIndex); int logicalColIndex(int ListIndex); QClipboard* Clipboard; @@ -68,6 +68,7 @@ class KeepassEntryView:public QTreeWidget{ EntryViewMode ViewMode; QVarLengthArrayColumnSizes; QVarLengthArrayColumnOrder; + float GroupColumnSize; virtual void contextMenuEvent(QContextMenuEvent *event); virtual void paintEvent(QPaintEvent* event); diff --git a/src/main.cpp b/src/main.cpp index bba1d34..2bd60a5 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -307,7 +307,6 @@ void loadImages(){ bool small=true; QString ThemeDir=AppDir+"/../share/keepass/icons/nuvola/32x32"; - QPixmap tmpImg; //----------------------- diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 105868d..cb69aba 100755 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -66,6 +66,7 @@ QDBusConnection* dbusCon; Import_KeePassX_Xml import_KeePassX_Xml; Import_PwManager import_PwManager; +Import_KWalletXml import_KWalletXml; Export_Txt export_Txt; Export_KeePassX_Xml export_KeePassX_Xml; @@ -288,6 +289,7 @@ void KeepassMainWindow::setupMenus(){ _add_import(import_KeePassX_Xml) _add_import(import_PwManager) + _add_import(import_KWalletXml) _add_export(export_Txt); _add_export(export_KeePassX_Xml);