#include "qt_helpers.h"
#include "TocModel.h"
+#include "Buffer.h"
#include "FuncRequest.h"
#include "LyXFunc.h"
// The toc types combo won't change its model.
typeCO->setModel(gui_view_.tocModels().nameModel());
+
+ // Make sure the buttons are disabled when first shown without a loaded
+ // Buffer.
+ enableControls(false);
}
}
+void TocWidget::on_sortCB_stateChanged(int state)
+{
+ gui_view_.tocModels().sort(current_type_, state == Qt::Checked);
+ updateView();
+}
+
/* FIXME (Ugras 17/11/06):
I have implemented a indexDepth function to get the model indices. In my
opinion, somebody should derive a new qvariant class for tocModelItem
// but my qt 4.1.2 doesn't have expandAll()..
//tocTV->expandAll();
QModelIndexList indices = tocTV->model()->match(
- tocTV->model()->index(0,0),
+ tocTV->model()->index(0, 0),
Qt::DisplayRole, "*", -1,
Qt::MatchFlags(Qt::MatchWildcard|Qt::MatchRecursive));
void TocWidget::enableControls(bool enable)
{
updateTB->setEnabled(enable);
+ sortCB->setEnabled(enable);
if (!canOutline(current_type_))
enable = false;
moveDownTB->setEnabled(enable);
moveInTB->setEnabled(enable);
moveOutTB->setEnabled(enable);
+ if (!enable) {
+ depthSL->setMaximum(0);
+ depthSL->setValue(0);
+ }
+}
+
- depthSL->setEnabled(enable);
+/// Test if synchronized navigation is possible
+static bool canNavigate(QString const & type)
+{
+ // It is not possible to have synchronous navigation in a correctl
+ // and efficient way with the label type because Toc::item() do a linear
+ // seatch. Even if fixed, it might even not be desirable to do so if we
+ // want to support drag&drop of labels and references.
+ return type != "label";
}
void TocWidget::updateView()
{
- LYXERR(Debug::GUI, "In TocWidget::updateView()");
- setTocModel();
- setTreeDepth(depth_);
- select(gui_view_.tocModels().currentIndex(current_type_));
+ if (!gui_view_.view()) {
+ enableControls(false);
+ typeCO->setEnabled(false);
+ tocTV->setModel(0);
+ tocTV->setEnabled(false);
+ return;
+ }
+ typeCO->setEnabled(true);
+ tocTV->setEnabled(false);
+ tocTV->setUpdatesEnabled(false);
+
+ QAbstractItemModel * toc_model = gui_view_.tocModels().model(current_type_);
+ if (tocTV->model() != toc_model) {
+ tocTV->setModel(toc_model);
+ tocTV->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ setTreeDepth(depth_);
+ }
+
+ sortCB->blockSignals(true);
+ sortCB->setChecked(gui_view_.tocModels().isSorted(current_type_));
+ sortCB->blockSignals(false);
+
+ bool controls_enabled = toc_model && toc_model->rowCount() > 0
+ && !gui_view_.buffer()->isReadonly();
+ enableControls(controls_enabled);
+
+ depthSL->setMaximum(gui_view_.tocModels().depth(current_type_));
+ depthSL->setValue(depth_);
+ if (canNavigate(current_type_))
+ select(gui_view_.tocModels().currentIndex(current_type_));
+ tocTV->setEnabled(true);
+ tocTV->setUpdatesEnabled(true);
}
void TocWidget::init(QString const & str)
{
- if (!gui_view_.view()) {
- enableControls(false);
- typeCO->setEnabled(false);
- tocTV->setModel(0);
- tocTV->setEnabled(false);
- return;
- }
-
- typeCO->setEnabled(true);
- tocTV->setEnabled(true);
-
- typeCO->blockSignals(true);
-
int new_index;
if (str.isEmpty())
new_index = typeCO->findData(current_type_);
new_index = typeCO->findData(current_type_);
}
+ typeCO->blockSignals(true);
typeCO->setCurrentIndex(new_index);
typeCO->blockSignals(false);
}
-
-void TocWidget::setTocModel()
-{
- QStandardItemModel * toc_model = gui_view_.tocModels().model(current_type_);
-
- if (tocTV->model() != toc_model) {
- tocTV->setModel(toc_model);
- tocTV->setEditTriggers(QAbstractItemView::NoEditTriggers);
- }
-
- bool controls_enabled = toc_model && toc_model->rowCount() > 0;;
- enableControls(controls_enabled);
-
- if (controls_enabled) {
- depthSL->setMaximum(gui_view_.tocModels().depth(current_type_));
- depthSL->setValue(depth_);
- }
-}
-
} // namespace frontend
} // namespace lyx