1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
/*********
*
* This file is part of BibleTime's source code, http://www.bibletime.info/.
*
* Copyright 1999-2009 by the BibleTime developers.
* The BibleTime source code is licensed under the GNU General Public License version 2.0.
*
**********/
#include "frontend/bookshelfmanager/installpage/btinstallmodulechooserdialog.h"
#include <QBrush>
#include <QDebug>
#include <QList>
#include <QPushButton>
#include <QString>
#include <QTreeWidgetItem>
#include <QWidget>
#include "backend/btmoduletreeitem.h"
#include "backend/drivers/cswordmoduleinfo.h"
#include "frontend/cmodulechooserdialog.h"
BtInstallModuleChooserDialog::BtInstallModuleChooserDialog(QWidget* parent, QString title, QString label, QList<CSwordModuleInfo*>* empty)
: CModuleChooserDialog(parent, title, label, empty) {
qDebug() << "BtInstallModuleChooserDialog::BtInstallModuleChooserDialog start";
init();
okButton()->setText(tr("Install"));
m_nameList = QStringList();
}
// Do nothing, the tree is initialized outside this class.
void BtInstallModuleChooserDialog::initModuleItem(BTModuleTreeItem*, QTreeWidgetItem*) {}
void BtInstallModuleChooserDialog::initModuleItem(QString name, QTreeWidgetItem* sourceItem) {
/// \todo Use new bookshelf model instead
/// \bug Valgrind reports memory leak:
QTreeWidgetItem* moduleItem = new QTreeWidgetItem(sourceItem);
moduleItem->setText(0, name);
moduleItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
moduleItem->setCheckState(0, Qt::Checked);
// prevent double items
if (m_nameList.contains(name)) {
qDebug() << "item already in list:" << name;
//moduleItem->setCheckState(0, Qt::Unchecked);
QBrush bg(Qt::red);
moduleItem->setBackground(0, bg);
//find and change the other offending items
foreach (QTreeWidgetItem* doubleItem, treeWidget()->findItems(name, Qt::MatchFixedString | Qt::MatchCaseSensitive | Qt::MatchRecursive, 0)) {
//doubleItem->setCheckState(0, Qt::Unchecked);
//qDebug() << "CInstallModuleChooserDialog::initModuleItem" << doubleItem;
doubleItem->setBackground(0, bg);
}
m_doubleCheckedModules[name] = true;
enableOk(false);
}
m_nameList << name;
}
void BtInstallModuleChooserDialog::slotItemChecked(QTreeWidgetItem* item, int column) {
QString moduleName = item->text(0);
qDebug() << "BtInstallModuleChooserDialog::slotItemChecked start";
// handle only non-toplevel items which has duplicates and where the first column was changed
if (item->parent() && column == 0 && (findModuleItemsByName(moduleName).count() > 1)) {
//prevent handling when the color is changed
if (item->data(1, Qt::UserRole).toBool() == false) {
qDebug() << "was not updating";
item->setData(1, Qt::UserRole, true);
}
else {
qDebug() << "was updating";
item->setData(1, Qt::UserRole, false);
return;
}
QList<QTreeWidgetItem*> doubleNameItems = findModuleItemsByName(moduleName);
QList<QTreeWidgetItem*> doubleCheckedItems;
foreach (QTreeWidgetItem* nItem, doubleNameItems) {
if (nItem->checkState(0) == Qt::Checked) {
doubleCheckedItems << nItem;
}
}
if (doubleCheckedItems.count() > 1) {
enableOk(false);
// color the items
qDebug() << "there were more than 1 item of the name" << moduleName;
foreach (QTreeWidgetItem* i, doubleNameItems) {
QBrush bg(Qt::red);
i->setBackground(0, bg);
}
m_doubleCheckedModules[moduleName] = true;
}
else if (doubleCheckedItems.count() == 1) {
qDebug() << "there were 1 checked items of the name" << moduleName;
// uncolor the items
foreach (QTreeWidgetItem* i, doubleNameItems) {
i->setBackground(0, i->parent()->background(0));
}
m_doubleCheckedModules.remove(moduleName);
if (m_doubleCheckedModules.count() == 0) {
enableOk(true);
}
}
}
}
QList<QTreeWidgetItem*> BtInstallModuleChooserDialog::findModuleItemsByName(QString name) {
qDebug() << "BtInstallModuleChooserDialog::findModuleItemsByName:" << name << treeWidget()->topLevelItemCount();
QList<QTreeWidgetItem*> doubleNamedAllItems = treeWidget()->findItems(name, Qt::MatchFixedString | Qt::MatchCaseSensitive | Qt::MatchRecursive);
//qDebug() << "doubleNamedAllItems: " << doubleNamedAllItems.count();
QList<QTreeWidgetItem*> doubleNamedModuleItems;
foreach (QTreeWidgetItem* item, doubleNamedAllItems) {
//qDebug() << "item:" << item;
if (item->parent()) {
doubleNamedModuleItems << item;
}
}
//qDebug() << "module items:" << doubleNamedModuleItems.count();
return doubleNamedModuleItems;
}
void BtInstallModuleChooserDialog::enableOk(bool enabled) {
qDebug() << "BtInstallModuleChooserDialog::enableOk" << enabled;
okButton()->setEnabled(enabled);
}
|