diff options
author | Felix Geyer <debfx@fobos.de> | 2010-10-06 21:40:50 +0400 |
---|---|---|
committer | Felix Geyer <debfx@fobos.de> | 2010-10-06 21:40:50 +0400 |
commit | 0c91be8eacd49a570cb2304228a66a61f0d31bdd (patch) | |
tree | ad15b9f9e17611bae4cb975c704b4aac0008eb05 /src | |
parent | e3da80fcc61476a931564cac98ea56186dabacce (diff) |
Add initial UI for entry editing.
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/gui/DatabaseWidget.cpp | 34 | ||||
-rw-r--r-- | src/gui/DatabaseWidget.h | 12 | ||||
-rw-r--r-- | src/gui/EditEntryWidget.cpp | 87 | ||||
-rw-r--r-- | src/gui/EditEntryWidget.h | 63 | ||||
-rw-r--r-- | src/gui/EditEntryWidget.ui | 52 | ||||
-rw-r--r-- | src/gui/EditEntryWidgetMain.ui | 51 | ||||
-rw-r--r-- | src/gui/EditEntryWidgetNotes.ui | 28 | ||||
-rw-r--r-- | src/gui/EntryView.cpp | 2 | ||||
-rw-r--r-- | src/gui/GroupView.cpp | 11 |
10 files changed, 334 insertions, 10 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index aa8fc04ca..6f5defb8b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -35,6 +35,7 @@ set(keepassx_SOURCES format/KeePass2XmlReader.cpp format/KeePass2XmlWriter.cpp gui/DatabaseWidget.cpp + gui/EditEntryWidget.cpp gui/EntryModel.cpp gui/EntryView.cpp gui/GroupModel.cpp @@ -49,6 +50,9 @@ set(keepassx_SOURCES ) set(keepassx_FORMS + gui/EditEntryWidget.ui + gui/EditEntryWidgetMain.ui + gui/EditEntryWidgetNotes.ui gui/MainWindow.ui ) diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 1a4d16450..d1d2a81ee 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -20,14 +20,16 @@ #include <QtGui/QHBoxLayout> #include <QtGui/QSplitter> +#include "EditEntryWidget.h" #include "EntryView.h" #include "GroupView.h" DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent) - : QWidget(parent) + : QStackedWidget(parent) { - QLayout* layout = new QHBoxLayout(this); - QSplitter* splitter = new QSplitter(this); + m_mainWidget = new QWidget(this); + QLayout* layout = new QHBoxLayout(m_mainWidget); + QSplitter* splitter = new QSplitter(m_mainWidget); m_groupView = new GroupView(db, splitter); m_entryView = new EntryView(splitter); @@ -42,11 +44,31 @@ DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent) policy.setHorizontalStretch(70); m_entryView->setSizePolicy(policy); - connect(m_groupView, SIGNAL(groupChanged(Group*)), m_entryView, SLOT(setGroup(Group*))); - splitter->addWidget(m_groupView); splitter->addWidget(m_entryView); layout->addWidget(splitter); - setLayout(layout); + m_mainWidget->setLayout(layout); + + m_editWidget = new EditEntryWidget(); + + addWidget(m_mainWidget); + addWidget(m_editWidget); + + connect(m_groupView, SIGNAL(groupChanged(Group*)), m_entryView, SLOT(setGroup(Group*))); + connect(m_entryView, SIGNAL(entryActivated(Entry*)), SLOT(switchToEdit(Entry*))); + connect(m_editWidget, SIGNAL(editFinished()), SLOT(switchToView())); + + setCurrentIndex(0); +} + +void DatabaseWidget::switchToView() +{ + setCurrentIndex(0); +} + +void DatabaseWidget::switchToEdit(Entry* entry) +{ + m_editWidget->loadEntry(entry); + setCurrentIndex(1); } diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h index 2aa76a496..e9529989c 100644 --- a/src/gui/DatabaseWidget.h +++ b/src/gui/DatabaseWidget.h @@ -18,20 +18,28 @@ #ifndef KEEPASSX_DATABASEWIDGET_H #define KEEPASSX_DATABASEWIDGET_H -#include <QtGui/QWidget> +#include <QtGui/QStackedWidget> class Database; +class EditEntryWidget; +class Entry; class EntryView; class GroupView; -class DatabaseWidget : public QWidget +class DatabaseWidget : public QStackedWidget { Q_OBJECT public: explicit DatabaseWidget(Database* db, QWidget* parent = 0); +private Q_SLOTS: + void switchToView(); + void switchToEdit(Entry* entry); + private: + QWidget* m_mainWidget; + EditEntryWidget* m_editWidget; GroupView* m_groupView; EntryView* m_entryView; }; diff --git a/src/gui/EditEntryWidget.cpp b/src/gui/EditEntryWidget.cpp new file mode 100644 index 000000000..ff2a4e524 --- /dev/null +++ b/src/gui/EditEntryWidget.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2010 Felix Geyer <debfx@fobos.de> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "EditEntryWidget.h" +#include "ui_EditEntryWidget.h" +#include "ui_EditEntryWidgetMain.h" +#include "ui_EditEntryWidgetNotes.h" + +#include <QtGui/QListWidget> +#include <QtGui/QStackedLayout> + +#include "core/Entry.h" + +EditEntryWidget::EditEntryWidget(QWidget* parent) + : QWidget(parent) + , m_entry(0) + , m_ui(new Ui::EditEntryWidget()) + , m_mainUi(new Ui::EditEntryWidgetMain()) + , m_notesUi(new Ui::EditEntryWidgetNotes()) + , m_mainWidget(new QWidget(this)) + , m_notesWidget(new QWidget(this)) +{ + m_ui->setupUi(this); + + m_ui->categoryList->addItem(tr("Entry")); + m_ui->categoryList->addItem(tr("Description")); + + m_mainUi->setupUi(m_mainWidget); + m_ui->stackedWidget->addWidget(m_mainWidget); + + m_notesUi->setupUi(m_notesWidget); + m_ui->stackedWidget->addWidget(m_notesWidget); + + Q_ASSERT(m_ui->categoryList->model()->rowCount() == m_ui->stackedWidget->count()); + + connect(m_ui->categoryList, SIGNAL(currentRowChanged(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int))); + connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(saveEntry())); + connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(cancel())); +} + +EditEntryWidget::~EditEntryWidget() +{ +} + +void EditEntryWidget::loadEntry(Entry* entry) +{ + m_entry = entry; + + m_mainUi->titleEdit->setText(entry->title()); + m_mainUi->usernameEdit->setText(entry->username()); + m_mainUi->urlEdit->setText(entry->url()); + + m_notesUi->notesEdit->setPlainText(entry->notes()); + + m_ui->categoryList->setCurrentRow(0); +} + +void EditEntryWidget::saveEntry() +{ + m_entry->setTitle(m_mainUi->titleEdit->text()); + m_entry->setUsername(m_mainUi->usernameEdit->text()); + m_entry->setUrl(m_mainUi->urlEdit->text()); + + m_entry->setNotes(m_notesUi->notesEdit->toPlainText()); + + cancel(); +} + +void EditEntryWidget::cancel() +{ + m_entry = 0; + Q_EMIT editFinished(); +} diff --git a/src/gui/EditEntryWidget.h b/src/gui/EditEntryWidget.h new file mode 100644 index 000000000..e760bfa8e --- /dev/null +++ b/src/gui/EditEntryWidget.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2010 Felix Geyer <debfx@fobos.de> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef KEEPASSX_EDITENTRYWIDGET_H +#define KEEPASSX_EDITENTRYWIDGET_H + +#include <QtCore/QScopedPointer> +#include <QtGui/QWidget> + +class Entry; +class QListWidget; +class QStackedLayout; + +namespace Ui { + class EditEntryWidget; + class EditEntryWidgetMain; + class EditEntryWidgetNotes; +} + +class EditEntryWidget : public QWidget +{ + Q_OBJECT + +public: + explicit EditEntryWidget(QWidget* parent = 0); + ~EditEntryWidget(); + + void loadEntry(Entry* entry); + +Q_SIGNALS: + void editFinished(); + +private Q_SLOTS: + void saveEntry(); + void cancel(); + +private: + Entry* m_entry; + + QScopedPointer<Ui::EditEntryWidget> m_ui; + QScopedPointer<Ui::EditEntryWidgetMain> m_mainUi; + QScopedPointer<Ui::EditEntryWidgetNotes> m_notesUi; + QWidget* m_mainWidget; + QWidget* m_notesWidget; + + Q_DISABLE_COPY(EditEntryWidget) +}; + +#endif // KEEPASSX_EDITENTRYWIDGET_H diff --git a/src/gui/EditEntryWidget.ui b/src/gui/EditEntryWidget.ui new file mode 100644 index 000000000..047bfa490 --- /dev/null +++ b/src/gui/EditEntryWidget.ui @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>EditEntryWidget</class> + <widget class="QWidget" name="EditEntryWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QListWidget" name="categoryList"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>20</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item> + <widget class="QStackedWidget" name="stackedWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>80</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="currentIndex"> + <number>-1</number> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/gui/EditEntryWidgetMain.ui b/src/gui/EditEntryWidgetMain.ui new file mode 100644 index 000000000..26ec53968 --- /dev/null +++ b/src/gui/EditEntryWidgetMain.ui @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>EditEntryWidgetMain</class> + <widget class="QWidget" name="EditEntryWidgetMain"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>372</width> + <height>301</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="titleLabel"> + <property name="text"> + <string>Title:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="titleEdit"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="usernameLabel"> + <property name="text"> + <string>Username:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLineEdit" name="usernameEdit"/> + </item> + <item row="2" column="1"> + <widget class="QLineEdit" name="urlEdit"/> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="urlLabel"> + <property name="text"> + <string>URL:</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/gui/EditEntryWidgetNotes.ui b/src/gui/EditEntryWidgetNotes.ui new file mode 100644 index 000000000..d2e7ab944 --- /dev/null +++ b/src/gui/EditEntryWidgetNotes.ui @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>EditEntryWidgetNotes</class> + <widget class="QWidget" name="EditEntryWidgetNotes"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="notesLabel"> + <property name="text"> + <string>Notes:</string> + </property> + </widget> + </item> + <item> + <widget class="QPlainTextEdit" name="notesEdit"/> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/gui/EntryView.cpp b/src/gui/EntryView.cpp index ac3130f27..b041c1848 100644 --- a/src/gui/EntryView.cpp +++ b/src/gui/EntryView.cpp @@ -27,6 +27,8 @@ EntryView::EntryView(QWidget* parent) setUniformRowHeights(true); setRootIsDecorated(false); + + connect(this, SIGNAL(activated(const QModelIndex&)), SLOT(emitEntryActivated(const QModelIndex&))); } void EntryView::setGroup(Group* group) diff --git a/src/gui/GroupView.cpp b/src/gui/GroupView.cpp index 617c3adc3..46a269108 100644 --- a/src/gui/GroupView.cpp +++ b/src/gui/GroupView.cpp @@ -17,6 +17,8 @@ #include "GroupView.h" +#include <QtCore/QMetaObject> + #include "core/Database.h" #include "core/Group.h" #include "gui/GroupModel.h" @@ -26,12 +28,17 @@ GroupView::GroupView(Database* db, QWidget* parent) { m_model = new GroupModel(db, this); QTreeView::setModel(m_model); - recInitExpanded(db->rootGroup()); setHeaderHidden(true); + setUniformRowHeights(true); connect(this, SIGNAL(clicked(const QModelIndex&)), SLOT(emitGroupChanged(const QModelIndex&))); - setUniformRowHeights(true); + recInitExpanded(db->rootGroup()); + + setCurrentIndex(m_model->index(0, 0)); + // invoke later so the EntryView is connected + QMetaObject::invokeMethod(this, "emitGroupChanged", Qt::QueuedConnection, + Q_ARG(QModelIndex, m_model->index(0, 0))); } void GroupView::expandedChanged(const QModelIndex& index) |