]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/QTocDialog.C
2e15f12c28b7ffadc90400730e40e0bb4344dd3e
[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_closePB_clicked()
74 {
75         accept();
76 }
77
78
79 void QTocDialog::on_updatePB_clicked()
80 {
81         update();
82 }
83
84
85 void QTocDialog::on_depthSL_valueChanged(int depth)
86 {
87         if (depth == depth_)
88                 return;
89
90         depth_ = depth;
91
92 /*
93         while (
94         tocTv->setExpanded();
95                         if (iter->depth() > depth_)
96                                 tocTV->collapseItem(topLevelItem);
97                         else if (iter->depth() <= depth_)
98                                 tocTV->expandItem(topLevelItem);
99 */
100 }
101
102
103 void QTocDialog::on_typeCO_activated(int value)
104 {
105         form_->setTocModel(value);
106         enableButtons();
107 }
108
109
110 void QTocDialog::on_moveUpPB_clicked()
111 {
112         enableButtons(false);
113         QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
114         form_->goTo(index);
115         form_->outlineUp();
116         update();
117 }
118
119
120 void QTocDialog::on_moveDownPB_clicked()
121 {
122         enableButtons(false);
123         QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
124         form_->goTo(index);
125         form_->outlineDown();
126         update();
127 }
128
129
130 void QTocDialog::on_moveInPB_clicked()
131 {
132         enableButtons(false);
133         QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
134         form_->goTo(index);
135         form_->outlineIn();
136         update();
137 }
138
139
140 void QTocDialog::on_moveOutPB_clicked()
141 {
142         enableButtons(false);
143         QModelIndex index = tocTV->selectionModel()->selectedIndexes()[0];
144         form_->goTo(index);
145         form_->outlineOut();
146         update();
147 }
148
149
150 void QTocDialog::select(QModelIndex const & index)
151 {
152 //      tocTV->setModel(form_->tocModel());
153
154         if (!index.isValid()) {
155                 lyxerr[Debug::GUI]
156                         << "QTocDialog::select(): QModelIndex is invalid!" << endl;
157                 return;
158         }
159
160         tocTV->scrollTo(index);
161         tocTV->selectionModel()->select(index, QItemSelectionModel::Select);
162 }
163
164
165 void QTocDialog::enableButtons(bool enable)
166 {
167         updatePB->setEnabled(enable);
168
169         if (!form_->canOutline())
170                 enable = false;
171
172         moveUpPB->setEnabled(enable);
173         moveDownPB->setEnabled(enable);
174         moveInPB->setEnabled(enable);
175         moveOutPB->setEnabled(enable);
176 }
177
178
179 void QTocDialog::update()
180 {
181         form_->update();
182         updateGui();
183 }
184
185
186 void QTocDialog::updateGui()
187 {
188         typeCO->setModel(form_->typeModel());
189         tocTV->setModel(form_->tocModel());
190         tocTV->showColumn(0);
191         // hide the pointless QHeader for now
192         // in the future, new columns may appear 
193         // like labels, bookmarks, etc...
194         // tocTV->header()->hide();
195         tocTV->header()->setVisible(true);
196         enableButtons();
197
198         connect(tocTV->selectionModel(),
199                 SIGNAL(currentChanged(const QModelIndex &,
200                         const QModelIndex &)),
201                 this, SLOT(selectionChanged(const QModelIndex &,
202                         const QModelIndex &)));
203
204         select(form_->getCurrentIndex());
205
206         lyxerr[Debug::GUI]
207                 << "form_->tocModel()->rowCount " << form_->tocModel()->rowCount()
208                 << "\nform_->tocModel()->columnCount " << form_->tocModel()->columnCount()
209                 << endl;
210 //      setTitle(form_->guiname())
211 }
212
213
214 void QTocDialog::apply()
215 {
216         // Nothing to do here... for now.
217         // Ideas welcome... (Abdel, 17042006)
218 }
219
220
221 void QTocDialog::hide()
222 {
223         accept();
224 }
225
226
227 void QTocDialog::show()
228 {
229         update();
230         QDialog::show();
231 }
232
233
234 bool QTocDialog::isVisible() const
235 {
236         return QDialog::isVisible();
237 }
238
239
240 } // namespace frontend
241 } // namespace lyx
242
243 #include "QTocDialog_moc.cpp"