]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/QTocDialog.C
* TocBackend.[Ch]: new files defining class TocBackend. This class contains adapted...
[lyx.git] / src / frontends / qt4 / QTocDialog.C
1 /**
2  * \file QTocDialog.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author John Levon
7  * \author Abdelrazak Younes
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 #include <config.h>
13
14 #include "QTocDialog.h"
15 #include "QToc.h"
16 #include "Qt2BC.h"
17 #include "qt_helpers.h"
18 #include "controllers/ControlToc.h"
19
20 #include "debug.h"
21
22 #include <QTreeWidgetItem>
23 #include <QPushButton>
24 #include <QCloseEvent>
25 #include <QHeaderView>
26
27 #include <vector>
28 #include <string>
29 #include <stack>
30
31 using std::endl;
32 using std::pair;
33 using std::stack;
34 using std::vector;
35 using std::string;
36
37
38 namespace lyx {
39 namespace frontend {
40
41 QTocDialog::QTocDialog(Dialog & dialog, QToc * form)
42         : Dialog::View(dialog, "Toc"), form_(form), depth_(2)
43 {
44         setupUi(this);
45
46         updateGui();
47
48         connect(tocTV->selectionModel(),
49                 SIGNAL(currentChanged(const QModelIndex &,
50                         const QModelIndex &)),
51                 this, SLOT(selectionChanged(const QModelIndex &,
52                         const QModelIndex &)));
53 }
54
55
56 QTocDialog::~QTocDialog()
57 {
58         accept();
59 }
60
61
62 void QTocDialog::selectionChanged(const QModelIndex & current,
63                                                                   const QModelIndex & previous)
64 {
65         lyxerr[Debug::GUI]
66                 << "selectionChanged index " << current.row() << ", " << current.column()
67                 << endl;
68
69         form_->goTo(current);
70 }
71
72
73 void QTocDialog::on_tocTV_clicked(const QModelIndex & index )
74 {
75         lyxerr[Debug::GUI]
76                 << "on_tocTV_clicked index " << index.row() << ", " << index.column()
77                 << endl;
78
79         form_->goTo(index);
80 }
81
82
83 void QTocDialog::on_closePB_clicked()
84 {
85         accept();
86 }
87
88
89 void QTocDialog::on_updatePB_clicked()
90 {
91         update();
92 }
93
94
95 void QTocDialog::on_depthSL_valueChanged(int depth)
96 {
97         if (depth == depth_)
98                 return;
99
100         depth_ = depth;
101
102 /*
103         while (
104         tocTv->setExpanded();
105                         if (iter->depth() > depth_)
106                                 tocTV->collapseItem(topLevelItem);
107                         else if (iter->depth() <= depth_)
108                                 tocTV->expandItem(topLevelItem);
109 */
110 }
111
112
113 void QTocDialog::on_typeCO_activated(int value)
114 {
115         form_->setTocModel(value);
116         enableButtons();
117 }
118
119
120 void QTocDialog::on_moveUpPB_clicked()
121 {
122         move(toc::UP);
123 }
124
125
126 void QTocDialog::on_moveDownPB_clicked()
127 {
128         move(toc::DOWN);
129 }
130
131
132 void QTocDialog::on_moveInPB_clicked()
133 {
134         move(toc::IN);
135 }
136
137
138 void QTocDialog::on_moveOutPB_clicked()
139 {
140         move(toc::OUT);
141 }
142
143
144 void QTocDialog::move(toc::OutlineOp const operation)
145 {
146         enableButtons(false);
147         QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
148         form_->goTo(index);
149         form_->move(operation);
150         updateGui();
151 //      select(index);
152 //      enableButtons();
153 }
154
155
156 void QTocDialog::select(QModelIndex const & index)
157 {
158 //      tocTV->setModel(form_->tocModel());
159
160         if (!index.isValid()) {
161                 lyxerr[Debug::GUI]
162                         << "QTocDialog::select(): QModelIndex is invalid!" << endl;
163                 return;
164         }
165
166         tocTV->scrollTo(index);
167         tocTV->selectionModel()->select(index, QItemSelectionModel::Select);
168 }
169
170
171 void QTocDialog::enableButtons(bool enable)
172 {
173         updatePB->setEnabled(enable);
174
175         if (!form_->canOutline())
176                 enable = false;
177
178         moveUpPB->setEnabled(enable);
179         moveDownPB->setEnabled(enable);
180         moveInPB->setEnabled(enable);
181         moveOutPB->setEnabled(enable);
182 }
183
184
185 void QTocDialog::update()
186 {
187         form_->update();
188         updateGui();
189 }
190
191
192 void QTocDialog::updateGui()
193 {
194         typeCO->setModel(form_->typeModel());
195         tocTV->setModel(form_->tocModel());
196         tocTV->showColumn(0);
197         // hide the pointless QHeader for now
198         // in the future, new columns may appear 
199         // like labels, bookmarks, etc...
200         // tocTV->header()->hide();
201         tocTV->header()->setVisible(true);
202         enableButtons();
203
204         connect(tocTV->selectionModel(),
205                 SIGNAL(currentChanged(const QModelIndex &,
206                         const QModelIndex &)),
207                 this, SLOT(selectionChanged(const QModelIndex &,
208                         const QModelIndex &)));
209
210         select(form_->getCurrentIndex());
211
212         lyxerr[Debug::GUI]
213                 << "form_->tocModel()->rowCount " << form_->tocModel()->rowCount()
214                 << "\nform_->tocModel()->columnCount " << form_->tocModel()->columnCount()
215                 << endl;
216 //      setTitle(form_->guiname())
217 }
218
219
220 void QTocDialog::apply()
221 {
222         // Nothing to do here... for now.
223         // Ideas welcome... (Abdel, 17042006)
224 }
225
226
227 void QTocDialog::hide()
228 {
229         accept();
230 }
231
232
233 void QTocDialog::show()
234 {
235         update();
236         QDialog::show();
237 }
238
239
240 bool QTocDialog::isVisible() const
241 {
242         return QDialog::isVisible();
243 }
244
245
246 } // namespace frontend
247 } // namespace lyx