]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/TocWidget.cpp
TOC context menu (part 3)
[lyx.git] / src / frontends / qt4 / TocWidget.cpp
index 59bd1df43676f0870b1925a10f8f6e0b9b6d8c05..688c7fe74a06ce26554e48474b125b753511c000 100644 (file)
 #include "TocModel.h"
 
 #include "Buffer.h"
+#include "CutAndPaste.h"
 #include "FuncRequest.h"
 #include "LyXFunc.h"
 #include "Menus.h"
+#include "TocBackend.h"
+
+#include "insets/InsetCommand.h"
+#include "insets/InsetRef.h"
 
 #include "support/debug.h"
 #include "support/lassert.h"
@@ -90,9 +95,29 @@ void TocWidget::showContextMenu(const QPoint & pos)
 }
 
 
-void TocWidget::doDispatch(Cursor const & cur, FuncRequest const & cmd)
+void TocWidget::doDispatch(Cursor & cur, FuncRequest const & cmd)
 {
        switch(cmd.action) {
+       
+       case LFUN_COPY_LABEL_AS_REF:
+       case LFUN_INSERT_LABEL_AS_REF: {
+               QModelIndex index = tocTV->currentIndex();
+               TocItem const & item =
+                       gui_view_.tocModels().currentItem(current_type_, index);
+               if (!item.str().empty()) {
+                       InsetCommandParams p(REF_CODE, "ref");
+                       p["reference"] =  item.str();
+                       if (cmd.action == LFUN_COPY_LABEL_AS_REF) {
+                               cap::clearSelection();
+                               cap::copyInset(cur, new InsetRef(*cur.buffer(), p), item.str());
+                       } else {
+                               string const data = InsetCommand::params2string("ref", p);
+                               dispatch(FuncRequest(LFUN_INSET_INSERT, data));
+                       }
+               }
+               break;
+       }
+
        default:
                break;
        }