3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
7 * \author Abdelrazak Younes
9 * Full author contact details are available in file CREDITS.
14 #include "QTocDialog.h"
17 #include "qt_helpers.h"
18 #include "controllers/ControlToc.h"
22 #include <QTreeWidget>
23 #include <QTreeWidgetItem>
24 #include <QPushButton>
25 #include <QCloseEvent>
40 QTocDialog::QTocDialog(QToc * form)
41 : form_(form), depth_(2)
45 // Manage the cancel/close button
46 form_->bcview().setCancel(closePB);
49 tocTW->setSortingEnabled(false);
50 tocTW->setColumnCount(1);
52 // hide the pointless QHeader
53 // QWidget * w = static_cast<QWidget*>(tocTW->child("list view header"));
57 // connect(closePB, SIGNAL(clicked()),
58 // form, SLOT(slotClose()));
62 QTocDialog::~QTocDialog()
67 void QTocDialog::on_tocTW_currentItemChanged(QTreeWidgetItem * current,
68 QTreeWidgetItem * previous)
70 form_->select(fromqstr(current->text(0)));
73 void QTocDialog::on_closePB_clicked()
78 void QTocDialog::on_updatePB_clicked()
83 void QTocDialog::on_depthSL_valueChanged(int depth)
92 void QTocDialog::on_typeCO_activated(int value)
97 void QTocDialog::on_moveUpPB_clicked()
104 void QTocDialog::on_moveDownPB_clicked()
106 enableButtons(false);
111 void QTocDialog::on_moveInPB_clicked()
113 enableButtons(false);
118 void QTocDialog::on_moveOutPB_clicked()
120 enableButtons(false);
125 void QTocDialog::enableButtons(bool enable)
127 moveUpPB->setEnabled(enable);
128 moveDownPB->setEnabled(enable);
129 moveInPB->setEnabled(enable);
130 moveOutPB->setEnabled(enable);
131 updatePB->setEnabled(enable);
134 void QTocDialog::updateType()
138 vector<string> const & choice = form_->controller().getTypes();
139 string const & type = toc::getType(form_->controller().params().getCmdName());
141 for (vector<string>::const_iterator it = choice.begin();
142 it != choice.end(); ++it) {
143 string const & guiname = form_->controller().getGuiName(*it);
144 typeCO->insertItem(toqstr(guiname));
146 typeCO->setCurrentItem(it - choice.begin());
147 form_->setTitle(guiname);
152 void QTocDialog::updateToc(bool newdepth)
154 vector<string> const & choice = form_->controller().getTypes();
157 type = choice[typeCO->currentItem()];
159 toc::Toc const & contents = form_->controller().getContents(type);
161 // Check if all elements are the same.
162 if (!newdepth && form_->get_toclist() == contents) {
168 form_->get_toclist() = contents;
170 if (form_->get_toclist().empty())
173 tocTW->setUpdatesEnabled(false);
175 QTreeWidgetItem * topLevelItem;
177 toc::Toc::const_iterator iter = form_->get_toclist().begin();
179 while (iter != form_->get_toclist().end()) {
181 if (iter->depth == 1) {
182 topLevelItem = new QTreeWidgetItem(tocTW);
183 topLevelItem->setText(0, toqstr(iter->str));
184 if (iter->depth > depth_)
185 tocTW->collapseItem(topLevelItem);
186 else if (iter->depth <= depth_)
187 tocTW->expandItem(topLevelItem);
190 << "Table of contents\n"
191 << "Added Top Level item " << iter->str
192 << " at depth " << iter->depth
195 populateItem(topLevelItem, iter);
198 if (iter == form_->get_toclist().end())
204 tocTW->setUpdatesEnabled(true);
206 form_->setTitle(fromqstr(typeCO->currentText()));
210 void QTocDialog::populateItem(QTreeWidgetItem * parentItem, toc::Toc::const_iterator & iter)
212 int curdepth = iter->depth + 1;
213 QTreeWidgetItem * item;
215 while (iter != form_->get_toclist().end()) {
219 if (iter == form_->get_toclist().end())
222 if (iter->depth < curdepth) {
226 if (iter->depth > curdepth) {
231 item = new QTreeWidgetItem(parentItem);
232 item->setText(0, toqstr(iter->str));
234 if (iter->depth > depth_)
235 tocTW->collapseItem(item);
236 else if (iter->depth <= depth_)
237 tocTW->expandItem(item);
240 << "Table of contents: Added item " << iter->str
241 << " at depth " << iter->depth
243 << fromqstr(parentItem->text(0)) << '"'
244 << "expanded: " << tocTW->isItemExpanded(item)
247 populateItem(item, iter);
252 void QTocDialog::closeEvent(QCloseEvent * e)
258 } // namespace frontend