ec0e2bf5f37d95d6488cbd22a55c7f24d7091e29
[situare] / src / ui / tagsdialog.cpp
1 #include <QDebug>
2 #include <QDialogButtonBox>
3 #include <QGridLayout>
4 #include <QLineEdit>
5 #include <QListWidget>
6 #include <QListWidgetItem>
7 #include <QPushButton>
8
9 #include "tagsdialog.h"
10
11 TagsDialog::TagsDialog(const QHash<QString, QString> &tags)
12 {
13     qDebug() << __PRETTY_FUNCTION__;
14
15     setWindowTitle(tr("Edit tags"));
16
17     QGridLayout *gridLayout = new QGridLayout;
18     m_addTagEdit = new QLineEdit("");
19     QDialogButtonBox *buttonBox = new QDialogButtonBox(Qt::Vertical);
20
21     QPushButton *addButton = buttonBox->addButton(tr("Add"), QDialogButtonBox::ActionRole);
22     QPushButton *deleteButton = buttonBox->addButton(tr("Delete"),
23                                                      QDialogButtonBox::ActionRole);
24     QPushButton *cancelButton = buttonBox->addButton(QDialogButtonBox::Cancel);
25     QPushButton *okButton = buttonBox->addButton(tr("Ok"), QDialogButtonBox::AcceptRole);
26
27     m_tagsView = new QListWidget(this);
28
29     gridLayout->addWidget(m_addTagEdit, 0, 0, 1, 1);
30     gridLayout->addWidget(m_tagsView, 1, 0, 2, 1);
31     gridLayout->addWidget(buttonBox, 0, 1, 2, 1);
32
33     foreach (QString tag, tags)
34         m_tagsView->addItem(tag);
35
36     setLayout(gridLayout);
37
38     connect(okButton, SIGNAL(clicked()),
39             this, SLOT(accept()));
40
41     connect(cancelButton, SIGNAL(clicked()),
42             this, SLOT(reject()));
43
44     connect(addButton, SIGNAL(clicked()),
45             this, SLOT(addTagToList()));
46
47     connect(deleteButton, SIGNAL(clicked()),
48             this, SLOT(deleteTagFromList()));
49 }
50
51 void TagsDialog::addTagToList()
52 {
53     qDebug() << __PRETTY_FUNCTION__;
54
55     QList<QListWidgetItem *> findItems = m_tagsView->findItems(m_addTagEdit->text(),
56                                                                Qt::MatchExactly);
57
58     if (findItems.isEmpty()) {
59         m_tagsView->insertItem(0, m_addTagEdit->text());
60         m_newTags.append(m_addTagEdit->text());
61     }
62
63     m_addTagEdit->setText("");
64 }
65
66 void TagsDialog::deleteTagFromList()
67 {
68     qDebug() << __PRETTY_FUNCTION__;
69
70     QList<QListWidgetItem *> selectedItems = m_tagsView->selectedItems();
71
72     if (!selectedItems.isEmpty()) {
73         QListWidgetItem *selectedItem = selectedItems.at(0);
74         m_tagsView->takeItem(m_tagsView->row(selectedItem));
75
76         if (m_newTags.contains(selectedItem->text()))
77             m_newTags.removeOne(selectedItem->text());
78         else
79             m_removedTags.append(selectedItem->text());
80     }
81 }
82
83 QStringList TagsDialog::newTags()
84 {
85     qDebug() << __PRETTY_FUNCTION__;
86
87     return m_newTags;
88 }
89
90 QStringList TagsDialog::removedTags()
91 {
92     qDebug() << __PRETTY_FUNCTION__;
93
94     return m_removedTags;
95 }