]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetLabel.cpp
Remove all BufferParam arguments in InsetXXX methods (since insets know about their...
[lyx.git] / src / insets / InsetLabel.cpp
index 823a22fefc297c4899a5bf20b587274e7ee5d29c..93ccc40b28abc591ef469875ba958b064e548d60 100644 (file)
 #include "buffer_funcs.h"
 #include "Buffer.h"
 #include "BufferView.h"
+#include "CutAndPaste.h"
 #include "DispatchResult.h"
 #include "FuncRequest.h"
+#include "FuncStatus.h"
 #include "InsetIterator.h"
+#include "LyXFunc.h"
+#include "output_xhtml.h"
 #include "ParIterator.h"
 #include "sgml.h"
 #include "Text.h"
@@ -81,17 +85,16 @@ void InsetLabel::updateCommand(docstring const & new_label, bool updaterefs)
        buffer().undo().endUndoGroup();
 
        // We need an update of the Buffer reference cache. This is achieved by
-       // updateLabel().
-       lyx::updateLabels(buffer());
+       // updateLabels().
+       buffer().updateLabels();
 }
 
 
 ParamInfo const & InsetLabel::findInfo(string const & /* cmdName */)
 {
        static ParamInfo param_info_;
-       if (param_info_.empty()) {
+       if (param_info_.empty())
                param_info_.add("name", ParamInfo::LATEX_REQUIRED);
-       }
        return param_info_;
 }
 
@@ -134,6 +137,24 @@ void InsetLabel::addToToc(DocIterator const & cpit)
 }
 
 
+bool InsetLabel::getStatus(Cursor & cur, FuncRequest const & cmd,
+                          FuncStatus & status) const
+{
+       bool enabled;
+       switch (cmd.action) {
+       case LFUN_LABEL_INSERT_AS_REF:
+       case LFUN_LABEL_COPY_AS_REF:
+               enabled = true;
+               break;
+       default:
+               return InsetCommand::getStatus(cur, cmd, status);
+       }
+
+       status.setEnabled(enabled);
+       return true;
+}
+
+
 void InsetLabel::doDispatch(Cursor & cur, FuncRequest & cmd)
 {
        switch (cmd.action) {
@@ -151,6 +172,22 @@ void InsetLabel::doDispatch(Cursor & cur, FuncRequest & cmd)
                break;
        }
 
+       case LFUN_LABEL_COPY_AS_REF: {
+               InsetCommandParams p(REF_CODE, "ref");
+               p["reference"] = getParam("name");
+               cap::clearSelection();
+               cap::copyInset(cur, new InsetRef(buffer(), p), getParam("name"));
+               break;
+       }
+
+       case LFUN_LABEL_INSERT_AS_REF: {
+               InsetCommandParams p(REF_CODE, "ref");
+               p["reference"] = getParam("name");
+               string const data = InsetCommand::params2string("ref", p);
+               lyx::dispatch(FuncRequest(LFUN_INSET_INSERT, data));
+               break;
+       }
+
        default:
                InsetCommand::doDispatch(cur, cmd);
                break;
@@ -182,4 +219,10 @@ int InsetLabel::docbook(odocstream & os, OutputParams const & runparams) const
 }
 
 
+docstring InsetLabel::xhtml(odocstream & os, OutputParams const &) const
+{
+       os << "<a name=\"" << html::htmlize(getParam("name")) << "\"></a>";
+       return docstring();
+}
+
 } // namespace lyx