#include "support/debug.h"
#include <QHeaderView>
+#include <QTimer>
#include <vector>
: QWidget(parent), depth_(0), form_(form)
{
setupUi(this);
- setWindowTitle(qt_("Outline"));
-
- connect(&form_, SIGNAL(modelReset()), SLOT(updateGui()));
moveOutTB->setIcon(QIcon(":/images/promote.png"));
moveInTB->setIcon(QIcon(":/images/demote.png"));
void TocWidget::updateView()
{
LYXERR(Debug::GUI, "In TocWidget::updateView()");
+ setTreeDepth();
select(form_.currentIndex(typeCO->currentIndex()));
}
-void TocWidget::updateGui()
+void TocWidget::updateGui(int selected_type)
{
- vector<docstring> const & type_names = form_.typeNames();
- if (type_names.empty()) {
+ QStringList const & type_names = form_.typeNames();
+ if (type_names.isEmpty()) {
enableControls(false);
typeCO->clear();
tocTV->setModel(new QStandardItemModel);
return;
}
- QString current_text = typeCO->currentText();
- //lyxerr << "current_text " << fromqstr(current_text) << endl;
+ QString const current_text = typeCO->currentText();
typeCO->blockSignals(true);
typeCO->clear();
- int current_type = -1;
- for (size_t i = 0; i != type_names.size(); ++i) {
- QString item = toqstr(type_names[i]);
- typeCO->addItem(item);
- if (item == current_text)
- current_type = i;
+ for (int i = 0; i != type_names.size(); ++i)
+ typeCO->addItem(type_names[i]);
+ if (selected_type != -1)
+ typeCO->setCurrentIndex(selected_type);
+ else {
+ int const new_index = typeCO->findText(current_text);
+ if (new_index != -1)
+ typeCO->setCurrentIndex(new_index);
}
- if (current_type != -1)
- typeCO->setCurrentIndex(current_type);
- else
- typeCO->setCurrentIndex(form_.selectedType());
+
typeCO->blockSignals(false);
setTocModel(typeCO->currentIndex());
+
+ // setTocModel produce QTreeView reset and setting depth again
+ // is needed. That must be done after all Qt updates are processed.
+ QTimer::singleShot(0, this, SLOT(updateView()));
}