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