]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/TocModel.cpp
Fix the tab ordering of GuiDocument components.
[lyx.git] / src / frontends / qt4 / TocModel.cpp
index b8da14aa22d710348119565583c719257c8eb8dd..508f333da8038b7b600360261a0d9fe00ce73f3b 100644 (file)
@@ -33,22 +33,36 @@ using namespace std;
 namespace lyx {
 namespace frontend {
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// TocTypeModel
-//
-///////////////////////////////////////////////////////////////////////////////
-
-TocTypeModel::TocTypeModel(QObject * parent)
-       : QStandardItemModel(parent)
+/// A QStandardItemModel that gives access to the reset methods.
+/// This is needed in order to fix http://www.lyx.org/trac/ticket/3740
+class TocTypeModel : public QStandardItemModel
 {
-}
-
-
-void TocTypeModel::reset()
-{
-       QStandardItemModel::reset();
-}
+public:
+       ///
+       TocTypeModel(QObject * parent) : QStandardItemModel(parent)
+       {}
+       ///
+       void reset()
+       {
+               QStandardItemModel::reset();
+       }
+       ///
+       void beginResetModel()
+       { 
+       #if QT_VERSION >= 0x040600
+               QStandardItemModel::beginResetModel(); 
+       #endif
+       }
+       ///
+       void endResetModel()
+       { 
+       #if QT_VERSION >= 0x040600
+               QStandardItemModel::endResetModel(); 
+       #else
+               QStandardItemModel::reset();
+       #endif
+       }
+};
 
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -134,6 +148,7 @@ void TocModel::updateItem(DocIterator const & dit)
        QModelIndex index = modelIndex(dit);
        TocItem const & toc_item = tocItem(index);
        model_->setData(index, toqstr(toc_item.str()), Qt::DisplayRole);
+       model_->setData(index, toqstr(toc_item.tooltip()), Qt::ToolTipRole);
 }
 
 
@@ -148,6 +163,7 @@ void TocModel::reset(Toc const & toc)
        }
 
        model_->blockSignals(true);
+       model_->beginResetModel();
        model_->insertColumns(0, 1);
        maxdepth_ = 0;
        mindepth_ = INT_MAX;
@@ -162,6 +178,7 @@ void TocModel::reset(Toc const & toc)
                QModelIndex top_level_item = model_->index(current_row, 0);
                model_->setData(top_level_item, toqstr(item.str()), Qt::DisplayRole);
                model_->setData(top_level_item, index, Qt::UserRole);
+               model_->setData(top_level_item, toqstr(item.tooltip()), Qt::ToolTipRole);
 
                LYXERR(Debug::GUI, "Toc: at depth " << item.depth()
                        << ", added item " << item.str());
@@ -175,7 +192,7 @@ void TocModel::reset(Toc const & toc)
        if (is_sorted_)
                sorted_model_->sort(0);
        model_->blockSignals(false);
-       reset();
+       model_->endResetModel();
 //     emit headerDataChanged();
 }
 
@@ -203,6 +220,7 @@ void TocModel::populate(unsigned int & index, QModelIndex const & parent)
                child_item = model_->index(current_row, 0, parent);
                model_->setData(child_item, toqstr(item.str()), Qt::DisplayRole);
                model_->setData(child_item, index, Qt::UserRole);
+               model_->setData(child_item, toqstr(item.tooltip()), Qt::ToolTipRole);
                populate(index, child_item);
                if (index >= end)
                        break;
@@ -228,7 +246,7 @@ TocModels::TocModels()
        : bv_(0)
 {
        names_ = new TocTypeModel(this);
-       names_sorted_ = new QSortFilterProxyModel(this);
+       names_sorted_ = new TocModelSortProxyModel(this);
        names_sorted_->setSourceModel(names_);
 #if QT_VERSION >= 0x040300
        names_sorted_->setSortLocaleAware(true);
@@ -338,6 +356,7 @@ void TocModels::reset(BufferView const * bv)
        }
 
        names_->blockSignals(true);
+       names_->beginResetModel();
        names_->insertColumns(0, 1);
        TocList const & tocs = bv_->buffer().masterBuffer()->tocBackend().tocs();
        TocList::const_iterator it = tocs.begin();
@@ -360,7 +379,7 @@ void TocModels::reset(BufferView const * bv)
                names_->setData(index, type, Qt::UserRole);
        }
        names_->blockSignals(false);
-       names_->reset();
+       names_->endResetModel();
 }