1 /***************************************************************************
2 * Copyright (C) 2007 by BOP *
3 * *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
8 * *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
18 ***************************************************************************/
19
20 #include "book.h"
21 #include "groupwidget.h"
22
23 #include <QHBoxLayout>
24 #include <QLabel>
25 #include <QLineEdit>
26 #include <QPushButton>
27
GroupWidget(QList<Group * > * group,QWidget * parent)28 GroupWidget::GroupWidget(QList <Group*> *group, QWidget *parent)
29 : QWidget(parent), groupList(group)
30 {
31 QHBoxLayout *h1 = new QHBoxLayout();
32
33 {
34 QLabel *l = new QLabel(tr("Group: "));
35 addGroupEdit = new QLineEdit(this);
36 connect(addGroupEdit, SIGNAL(editingFinished()), SLOT(createGroup()));
37 addButton = new QPushButton(tr("Create"), this);
38 connect(addGroupEdit, SIGNAL(textChanged(QString)),
39 SLOT(changeAddGroup(QString)));
40 connect(addButton, SIGNAL(clicked()), SLOT(createGroup()));
41 addButton->setEnabled(false);
42 h1->addWidget(l);
43 h1->addWidget(addGroupEdit);
44 h1->addWidget(addButton);
45 }
46 QHBoxLayout *h2 = new QHBoxLayout();
47 {
48 h2->setMargin(0);
49 upButton = new QPushButton(this);
50 upButton->setIcon(QIcon(":images/uparrow.png"));
51 downButton = new QPushButton(this);
52 downButton->setIcon(QIcon(":images/downarrow.png"));
53 h2->addStretch();
54 h2->addWidget(upButton);
55 h2->addWidget(downButton);
56 editButton = new QPushButton(this);
57 editButton->setIcon(QIcon(":images/edit.png"));
58 h2->addWidget(editButton);
59 delButton = new QPushButton(this);
60 delButton->setIcon(QIcon(":images/delete.png"));
61 h2->addWidget(delButton);
62 }
63 groupListWidget = new QListWidget(this);
64 QVBoxLayout *v = new QVBoxLayout;
65 v->setMargin(0);
66 v->setSpacing(0);
67 v->addLayout(h1);
68 v->addWidget(groupListWidget);
69 v->addLayout(h2);
70 setLayout(v);
71 //qDebug() << "BookWidget 3";
72 connect(upButton, SIGNAL(clicked()), SLOT(upItem()));
73 connect(downButton, SIGNAL(clicked()), SLOT(downItem()));
74 connect(editButton, SIGNAL(clicked()), SLOT(editItem()));
75 connect(delButton, SIGNAL(clicked()), SLOT(delItem()));
76 connect(groupListWidget, SIGNAL(currentRowChanged(int)),
77 SLOT(changeRow(int)));
78 connect(groupListWidget, SIGNAL(itemChanged(QListWidgetItem*)),
79 SLOT(changeName(QListWidgetItem*)));
80 connect(groupListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
81 SLOT(editItem(QListWidgetItem*)));
82 connect(groupListWidget,
83 SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem*)),
84 SLOT(changeSelect(QListWidgetItem *, QListWidgetItem*)));
85 initGroup();
86 resetButtons();
87 }
88
initGroup()89 void GroupWidget::initGroup()
90 {
91 int cnt = groupListWidget->count();
92 for (int i = 0; i < cnt; i++) {
93 groupListWidget->takeItem(0);
94 }
95 for (int i = 0; i < groupList->count(); i++) {
96 groupListWidget->addItem((*groupList)[i]);
97 }
98 if ( groupListWidget->count() > 0 ) {
99 groupListWidget->setCurrentRow(0);
100 emit rowChanged(0);
101 //qDebug() << "emit changeRow";
102 }
103 }
104
resetButtons()105 void GroupWidget::resetButtons()
106 {
107 int row = currentRow();
108 int cnt = groupListWidget->count();
109
110 upButton->setEnabled(row > 0 );
111 downButton->setEnabled((( cnt - row) > 1 ) && ( row >= 0 ));
112 editButton->setEnabled(row >= 0);
113 if (delButton) delButton->setEnabled(row >= 0);
114 emit rowChanged(row);
115 }
116
upItem()117 void GroupWidget::upItem()
118 {
119 int row = currentRow();
120 Group *grp = (Group*)groupListWidget->takeItem(row);
121
122 groupListWidget->insertItem(row - 1, grp);
123 groupList->takeAt(row);
124 groupList->insert(row -1, grp);
125 groupListWidget->setCurrentItem(grp);
126 }
127
downItem()128 void GroupWidget::downItem()
129 {
130 int row = currentRow();
131 Group *grp = (Group*)groupListWidget->takeItem(row);
132
133 groupListWidget->insertItem(row + 1, grp);
134 groupList->takeAt(row);
135 groupList->insert(row + 1, grp);
136 groupListWidget->setCurrentItem(grp);
137 }
138
delItem()139 void GroupWidget::delItem()
140 {
141 int row = currentRow();
142 Group *grp = (Group *)groupListWidget->takeItem(row);
143
144 groupList->takeAt(row);
145 delete grp;
146 // resetButtons();
147 }
148
changeAddGroup(const QString & str)149 void GroupWidget::changeAddGroup(const QString &str)
150 {
151 if (str.isEmpty() || str == "/")
152 addButton->setEnabled(false);
153 else
154 addButton->setEnabled(true);
155 }
156
createGroup()157 void GroupWidget::createGroup()
158 {
159 if (addGroupEdit->text().isEmpty()){
160 return;
161 }
162 Group *grp = new Group(addGroupEdit->text());
163
164 *groupList << grp;
165 groupListWidget->addItem(grp);
166 groupListWidget->setCurrentItem(grp);
167 addGroupEdit->clear();
168 }
169
170