Nice and clean. I always thought why you have chosen that many update functions for tocwidget/toc. I always feel myself into a labyrinth of update functions while debugging the code. I had always an intention to change it myself, but you know, don't touch if it is working.. :-)
I will test it and inform you today. Maybe we need that labyrinth at the end.. :-) Ugras On 5/10/07, Abdelrazak Younes <[EMAIL PROTECTED]> wrote:
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();