Ozgur Ugras BARAN wrote:
Attached patch solves two TOC dialog bugs 3528 and 3534. Can smb
review (Abdel?, Juergen?, John?) and commit it (Jose?)
I took the time to look at what was wrong. The results is the attached.
The solution was simple, I just had to get rid of the type_model_ for
the combo box and add emit the signal Buffer::structureChanged().
I will commit soon.
Abdel.
Index: controllers/ControlToc.cpp
===================================================================
--- controllers/ControlToc.cpp (revision 18257)
+++ controllers/ControlToc.cpp (working copy)
@@ -117,6 +117,7 @@
void ControlToc::updateBackend()
{
kernel().buffer().tocBackend().update();
+ kernel().buffer().structureChanged();
}
Index: qt4/QToc.cpp
===================================================================
--- qt4/QToc.cpp (revision 18257)
+++ qt4/QToc.cpp (working copy)
@@ -67,7 +67,7 @@
}
LYXERR(Debug::GUI)
- << "QToc: type_ " << type
+ << "QToc: type " << type
<< " toc_models_.size() " << toc_models_.size()
<< endl;
@@ -110,33 +110,13 @@
if (!ControlToc::initialiseParams(data))
return false;
update();
+ modelReset();
return true;
}
void QToc::update()
{
- updateType();
- updateToc();
- modelReset();
-}
-
-
-void QToc::updateType()
-{
- QStringList type_list;
-
- vector<docstring> const & type_names = typeNames();
- BOOST_ASSERT(!type_names.empty());
- for (size_t i = 0; i != type_names.size(); ++i)
- type_list.append(toqstr(type_names[i]));
-
- type_model_.setStringList(type_list);
-}
-
-
-void QToc::updateToc()
-{
toc_models_.clear();
TocList::const_iterator it = tocs().begin();
TocList::const_iterator end = tocs().end();
Index: qt4/QToc.h
===================================================================
--- qt4/QToc.h (revision 18257)
+++ qt4/QToc.h (working copy)
@@ -39,17 +39,9 @@
///
void update();
///
- void updateToc();
- ///
- void updateType();
-
bool canOutline(int type) const;
QStandardItemModel * tocModel(int type);
-
- QStringListModel * typeModel()
- { return &type_model_; }
-
///
QModelIndex const getCurrentIndex(int type) const;
///
@@ -66,10 +58,6 @@
private:
///
std::vector<TocModel *> toc_models_;
- ///
- QStringListModel type_model_;
- ///
- int type_;
};
} // namespace frontend
Index: qt4/TocWidget.cpp
===================================================================
--- qt4/TocWidget.cpp (revision 18257)
+++ qt4/TocWidget.cpp (working copy)
@@ -91,9 +91,10 @@
void TocWidget::on_updateTB_clicked()
{
+ // The backend update can take some time so we disable
+ // the controls while waiting.
+ enableControls(false);
form_->updateBackend();
- form_->update();
- update();
}
/* FIXME (Ugras 17/11/06):
@@ -139,8 +140,7 @@
}
}
-
-void TocWidget::on_typeCO_activated(int value)
+void TocWidget::on_typeCO_currentIndexChanged(int value)
{
setTocModel(value);
}
@@ -240,22 +240,30 @@
void TocWidget::updateGui()
{
- QStringListModel * type_model = form_->typeModel();
- if (type_model->stringList().isEmpty()) {
+ vector<docstring> const & type_names = form_->typeNames();
+ if (type_names.empty()) {
enableControls(false);
- typeCO->setModel(type_model);
+ typeCO->clear();
tocTV->setModel(new QStandardItemModel);
tocTV->setEditTriggers(QAbstractItemView::NoEditTriggers);
return;
}
QString current_text = typeCO->currentText();
- typeCO->setModel(type_model);
- int const current_type = typeCO->findText(current_text);
+ lyxerr << "current_text " << fromqstr(current_text) << endl;
+ typeCO->blockSignals(true);
+ 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;
+ }
if (current_type != -1)
typeCO->setCurrentIndex(current_type);
else
typeCO->setCurrentIndex(form_->selectedType());
+ typeCO->blockSignals(false);
setTocModel(typeCO->currentIndex());
}
Index: qt4/TocWidget.h
===================================================================
--- qt4/TocWidget.h (revision 18257)
+++ qt4/TocWidget.h (working copy)
@@ -43,7 +43,7 @@
void on_updateTB_clicked();
void on_depthSL_valueChanged(int depth);
- void on_typeCO_activated(int value);
+ void on_typeCO_currentIndexChanged(int value);
void on_moveUpTB_clicked();
void on_moveDownTB_clicked();
void on_moveInTB_clicked();