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 <QHeaderView>
23 #include <QTreeWidget>
24 #include <QTreeWidgetItem>
25 #include <QPushButton>
26 #include <QCloseEvent>
41 QTocDialog::QTocDialog(QToc * form)
42 : form_(form), depth_(2)
46 // Manage the cancel/close button
47 form_->bcview().setCancel(closePB);
50 tocTW->setSortingEnabled(false);
51 tocTW->setColumnCount(1);
53 // hide the pointless QHeader
54 QHeaderView * w = static_cast<QHeaderView*>(tocTW->header());
58 // connect(closePB, SIGNAL(clicked()),
59 // form, SLOT(slotClose()));
63 QTocDialog::~QTocDialog()
68 void QTocDialog::on_tocTW_currentItemChanged(QTreeWidgetItem * current,
69 QTreeWidgetItem * previous)
71 form_->select(fromqstr(current->text(0)));
74 void QTocDialog::on_closePB_clicked()
79 void QTocDialog::on_updatePB_clicked()
84 void QTocDialog::on_depthSL_valueChanged(int depth)
93 void QTocDialog::on_typeCO_activated(int value)
98 void QTocDialog::on_moveUpPB_clicked()
100 enableButtons(false);
105 void QTocDialog::on_moveDownPB_clicked()
107 enableButtons(false);
112 void QTocDialog::on_moveInPB_clicked()
114 enableButtons(false);
119 void QTocDialog::on_moveOutPB_clicked()
121 enableButtons(false);
126 void QTocDialog::enableButtons(bool enable)
128 moveUpPB->setEnabled(enable);
129 moveDownPB->setEnabled(enable);
130 moveInPB->setEnabled(enable);
131 moveOutPB->setEnabled(enable);
132 updatePB->setEnabled(enable);
135 void QTocDialog::updateType()
139 vector<string> const & choice = form_->controller().getTypes();
140 string const & type = toc::getType(form_->controller().params().getCmdName());
142 for (vector<string>::const_iterator it = choice.begin();
143 it != choice.end(); ++it) {
144 string const & guiname = form_->controller().getGuiName(*it);
145 typeCO->insertItem(toqstr(guiname));
147 typeCO->setCurrentItem(it - choice.begin());
148 form_->setTitle(guiname);
153 void QTocDialog::updateToc(bool newdepth)
155 vector<string> const & choice = form_->controller().getTypes();
158 type = choice[typeCO->currentItem()];
160 toc::Toc const & contents = form_->controller().getContents(type);
162 // Check if all elements are the same.
163 if (!newdepth && form_->get_toclist() == contents) {
169 form_->get_toclist() = contents;
171 if (form_->get_toclist().empty())
174 tocTW->setUpdatesEnabled(false);
176 QTreeWidgetItem * topLevelItem;
178 toc::Toc::const_iterator iter = form_->get_toclist().begin();
180 while (iter != form_->get_toclist().end()) {
182 if (iter->depth == 1) {
183 topLevelItem = new QTreeWidgetItem(tocTW);
184 topLevelItem->setText(0, toqstr(iter->str));
185 if (iter->depth > depth_)
186 tocTW->collapseItem(topLevelItem);
187 else if (iter->depth <= depth_)
188 tocTW->expandItem(topLevelItem);
191 << "Table of contents\n"
192 << "Added Top Level item " << iter->str
193 << " at depth " << iter->depth
196 populateItem(topLevelItem, iter);
199 if (iter == form_->get_toclist().end())
205 tocTW->setUpdatesEnabled(true);
207 form_->setTitle(fromqstr(typeCO->currentText()));
211 void QTocDialog::populateItem(QTreeWidgetItem * parentItem, toc::Toc::const_iterator & iter)
213 int curdepth = iter->depth + 1;
214 QTreeWidgetItem * item;
216 while (iter != form_->get_toclist().end()) {
220 if (iter == form_->get_toclist().end())
223 if (iter->depth < curdepth) {
227 if (iter->depth > curdepth) {
232 item = new QTreeWidgetItem(parentItem);
233 item->setText(0, toqstr(iter->str));
235 if (iter->depth > depth_)
236 tocTW->collapseItem(item);
237 else if (iter->depth <= depth_)
238 tocTW->expandItem(item);
241 << "Table of contents: Added item " << iter->str
242 << " at depth " << iter->depth
244 << fromqstr(parentItem->text(0)) << '"'
245 << "expanded: " << tocTW->isItemExpanded(item)
248 populateItem(item, iter);
253 void QTocDialog::closeEvent(QCloseEvent * e)
259 } // namespace frontend