]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/QTocDialog.C
* ControlToc.[Ch]
[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         update();
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 void QTocDialog::selectionChanged(const QModelIndex & current,
62                                                                   const QModelIndex & previous)
63 {
64         lyxerr[Debug::GUI]
65                 << "selectionChanged index " << current.row() << ", " << current.column()
66                 << endl;
67
68         form_->goTo(current);
69 }
70
71
72 void QTocDialog::on_tocTV_clicked(const QModelIndex & index )
73 {
74         lyxerr[Debug::GUI]
75                 << "on_tocTV_clicked index " << index.row() << ", " << index.column()
76                 << endl;
77
78         form_->goTo(index);
79 }
80
81
82 void QTocDialog::on_closePB_clicked()
83 {
84         accept();
85 }
86
87
88 void QTocDialog::on_updatePB_clicked()
89 {
90         form_->update();
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_->move(operation, index);
149         select(index);
150         enableButtons();
151 }
152
153 void QTocDialog::select(QModelIndex const & index)
154 {
155         tocTV->setModel(form_->tocModel());
156
157         if (index.isValid()) {
158                 tocTV->scrollTo(index);
159                 tocTV->selectionModel()->select(index, QItemSelectionModel::Select);
160         }
161 }
162
163 void QTocDialog::enableButtons(bool enable)
164 {
165         updatePB->setEnabled(enable);
166
167         if (!form_->canOutline())
168                 enable = false;
169
170         moveUpPB->setEnabled(enable);
171         moveDownPB->setEnabled(enable);
172         moveInPB->setEnabled(enable);
173         moveOutPB->setEnabled(enable);
174 }
175
176
177 void QTocDialog::update()
178 {
179         typeCO->setModel(form_->typeModel());
180         tocTV->setModel(form_->tocModel());
181         tocTV->showColumn(0);
182         // hide the pointless QHeader for now
183         // in the future, new columns may appear 
184         // like labels, bookmarks, etc...
185         // tocTV->header()->hide();
186         tocTV->header()->setVisible(true);
187         enableButtons();
188
189         connect(tocTV->selectionModel(),
190                 SIGNAL(currentChanged(const QModelIndex &,
191                         const QModelIndex &)),
192                 this, SLOT(selectionChanged(const QModelIndex &,
193                         const QModelIndex &)));
194
195         lyxerr[Debug::GUI]
196                 << "form_->tocModel()->rowCount " << form_->tocModel()->rowCount()
197                 << "\nform_->tocModel()->columnCount " << form_->tocModel()->columnCount()
198                 << endl;
199 //      setTitle(form_->guiname())
200 }
201
202
203 void QTocDialog::apply()
204 {
205         // Nothing to do here... for now.
206         // Ideas welcome... (Abdel, 17042006)
207 }
208
209
210 void QTocDialog::hide()
211 {
212         accept();
213 }
214
215
216 void QTocDialog::show()
217 {
218         form_->update();
219         update();
220         QDialog::show();
221 }
222
223
224 bool QTocDialog::isVisible() const
225 {
226         return QDialog::isVisible();
227 }
228
229
230 } // namespace frontend
231 } // namespace lyx