]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/TocWidget.cpp
* fix spelling in comments to please John.
[lyx.git] / src / frontends / qt4 / TocWidget.cpp
index a5850f5c3634cf5b4c7a4d4f89c53d96388d3425..538c04c177cb894dd2f4045301e7db29fb640087 100644 (file)
@@ -19,6 +19,7 @@
 #include "TocModel.h"
 
 #include "Buffer.h"
+#include "BufferView.h"
 #include "CutAndPaste.h"
 #include "FuncRequest.h"
 #include "FuncStatus.h"
@@ -111,7 +112,7 @@ Inset * TocWidget::itemInset() const
                inset = dit.nextInset();
 
        else if (current_type_ == "branch"
-                    || current_type_ == "index"
+                        || current_type_ == "index"
                         || current_type_ == "change")
                inset = &dit.inset();
 
@@ -132,6 +133,10 @@ bool TocWidget::getStatus(Cursor & cur, FuncRequest const & cmd,
        Inset * inset = itemInset();
        FuncRequest tmpcmd(cmd);
 
+       QModelIndex const & index = tocTV->currentIndex();
+       TocItem const & item =
+               gui_view_.tocModels().currentItem(current_type_, index);
+
        switch (cmd.action)
        {
        case LFUN_CHANGE_ACCEPT:
@@ -144,6 +149,13 @@ bool TocWidget::getStatus(Cursor & cur, FuncRequest const & cmd,
                status.setEnabled(true);
                return true;
 
+       case LFUN_LABEL_COPY_AS_REF: {
+               // For labels in math, we need to supply the label as a string
+               FuncRequest label_copy(LFUN_LABEL_COPY_AS_REF, item.asString());
+               if (inset)
+                       return inset->getStatus(cur, label_copy, status);
+       }
+
        default:
                if (inset)
                        return inset->getStatus(cur, tmpcmd, status);
@@ -162,6 +174,9 @@ void TocWidget::doDispatch(Cursor & cur, FuncRequest const & cmd)
        TocItem const & item =
                gui_view_.tocModels().currentItem(current_type_, index);
 
+       // Start an undo group.
+       cur.beginUndoGroup();
+
        switch (cmd.action)
        {
        case LFUN_CHANGE_ACCEPT:
@@ -170,6 +185,14 @@ void TocWidget::doDispatch(Cursor & cur, FuncRequest const & cmd)
                dispatch(item.action());
                cur.dispatch(tmpcmd);
                break;
+
+       case LFUN_LABEL_COPY_AS_REF: {
+               // For labels in math, we need to supply the label as a string
+               FuncRequest label_copy(LFUN_LABEL_COPY_AS_REF, item.asString());
+               if (inset)
+                       inset->dispatch(cur, label_copy);
+               break;
+       }
        
        case LFUN_OUTLINE_UP:
        case LFUN_OUTLINE_DOWN:
@@ -182,6 +205,7 @@ void TocWidget::doDispatch(Cursor & cur, FuncRequest const & cmd)
                if (inset)
                        inset->dispatch(cur, tmpcmd);
        }
+       cur.endUndoGroup();
 }
 
 
@@ -225,6 +249,7 @@ void TocWidget::on_sortCB_stateChanged(int state)
        updateView();
 }
 
+
 void TocWidget::on_persistentCB_stateChanged(int state)
 {
        persistent_ = state == Qt::Checked;
@@ -375,9 +400,16 @@ static bool canNavigate(QString const & type)
 }
 
 
+/// Test whether sorting is possible
+static bool isSortable(QString const & type)
+{
+       return type != "tableofcontents";
+}
+
+
 void TocWidget::updateView()
 {
-       if (!gui_view_.view()) {
+       if (!gui_view_.documentBufferView()) {
                enableControls(false);
                typeCO->setEnabled(false);
                tocTV->setModel(0);
@@ -389,7 +421,7 @@ void TocWidget::updateView()
                depthSL->setEnabled(false);
                return;
        }
-       sortCB->setEnabled(true);
+       sortCB->setEnabled(isSortable(current_type_));
        depthSL->setEnabled(true);
        typeCO->setEnabled(true);
        tocTV->setEnabled(false);
@@ -404,7 +436,8 @@ void TocWidget::updateView()
        }
 
        sortCB->blockSignals(true);
-       sortCB->setChecked(gui_view_.tocModels().isSorted(current_type_));
+       sortCB->setChecked(isSortable(current_type_)
+               && gui_view_.tocModels().isSorted(current_type_));
        sortCB->blockSignals(false);
 
        
@@ -412,7 +445,7 @@ void TocWidget::updateView()
        persistentCB->setEnabled(can_navigate_);
 
        bool controls_enabled = toc_model && toc_model->rowCount() > 0
-               && !gui_view_.buffer()->isReadonly();
+               && !gui_view_.documentBufferView()->buffer().isReadonly();
        enableControls(controls_enabled);
 
        depthSL->setMaximum(gui_view_.tocModels().depth(current_type_));