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();

Reply via email to