From: Vincent van Ravesteijn Date: Wed, 8 Apr 2009 21:40:42 +0000 (+0000) Subject: Add "Copy label as reference" to context menu of the TOC. X-Git-Tag: 2.0.0~6899 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=695870771f30c7151422c3de8ba9eeeed8c947b5;p=lyx.git Add "Copy label as reference" to context menu of the TOC. (Note: it is not perfect yet for references in the same model as the labels). git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29156 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/lib/ui/stdcontext.inc b/lib/ui/stdcontext.inc index 552d54b115..21215af4a2 100644 --- a/lib/ui/stdcontext.inc +++ b/lib/ui/stdcontext.inc @@ -413,4 +413,12 @@ Menuset OptItem "Settings...|S" "inset-settings" End +# +# InsetTocLabel context menu +# + + Menu "context-toc-label" + Item "Copy Label as Reference|C" "copy-label-as-reference" + End + End diff --git a/src/frontends/qt4/TocModel.cpp b/src/frontends/qt4/TocModel.cpp index 1301e8d174..a78f2ae325 100644 --- a/src/frontends/qt4/TocModel.cpp +++ b/src/frontends/qt4/TocModel.cpp @@ -299,6 +299,20 @@ void TocModels::goTo(QString const & type, QModelIndex const & index) const } +TocItem const TocModels::currentItem(QString const & type, + QModelIndex const & index) const +{ + const_iterator it = models_.find(type); + if (it == models_.end() || !index.isValid()) { + LYXERR(Debug::GUI, "TocModels::currentItem(): QModelIndex is invalid!"); + return TocItem(); + } + LASSERT(index.model() == it.value()->model(), return TocItem()); + + return it.value()->tocItem(index); +} + + void TocModels::updateBackend() const { bv_->buffer().masterBuffer()->tocBackend().update(); diff --git a/src/frontends/qt4/TocModel.h b/src/frontends/qt4/TocModel.h index c8c8c46bf4..bc479c7de1 100644 --- a/src/frontends/qt4/TocModel.h +++ b/src/frontends/qt4/TocModel.h @@ -118,6 +118,9 @@ public: void sort(QString const & type, bool sort_it); /// bool isSorted(QString const & type) const; + /// the item that is currently selected + TocItem const currentItem(QString const & type, + QModelIndex const & index) const; Q_SIGNALS: /// Signal that the internal toc_models_ has been reset. diff --git a/src/frontends/qt4/TocWidget.cpp b/src/frontends/qt4/TocWidget.cpp index 59bd1df436..7c985d4d9e 100644 --- a/src/frontends/qt4/TocWidget.cpp +++ b/src/frontends/qt4/TocWidget.cpp @@ -19,9 +19,14 @@ #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" @@ -93,6 +98,19 @@ void TocWidget::showContextMenu(const QPoint & pos) void TocWidget::doDispatch(Cursor const & cur, FuncRequest const & cmd) { switch(cmd.action) { + case LFUN_COPY_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(); + cap::clearSelection(); + cap::copyInset(cur, new InsetRef(*cur.buffer(), p), item.str()); + } + break; + } + default: break; }