]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetBranch.cpp
Restore XHTML output for InsetListings.
[lyx.git] / src / insets / InsetBranch.cpp
index 12d5e4845e3f5568a09bbb368e4c62ab9de81be4..24cc7c92361aaffb32dae951703a92f2b9e7b2b1 100644 (file)
@@ -16,7 +16,7 @@
 #include "BufferParams.h"
 #include "BufferView.h"
 #include "BranchList.h"
-#include "Color.h"
+#include "ColorSet.h"
 #include "Counters.h"
 #include "Cursor.h"
 #include "DispatchResult.h"
 #include "FuncStatus.h"
 #include "Lexer.h"
 #include "OutputParams.h"
+#include "output_xhtml.h"
 #include "TextClass.h"
 #include "TocBackend.h"
 
 #include "support/debug.h"
 #include "support/gettext.h"
+#include "support/lstrings.h"
 
 #include "frontends/Application.h"
 
@@ -39,8 +41,8 @@ using namespace std;
 
 namespace lyx {
 
-InsetBranch::InsetBranch(Buffer const & buf, InsetBranchParams const & params)
-       : InsetCollapsable(buf), params_(params)
+InsetBranch::InsetBranch(Buffer * buf, InsetBranchParams const & params)
+       : InsetCollapsable(buf, InsetText::DefaultLayout), params_(params)
 {}
 
 
@@ -50,12 +52,6 @@ InsetBranch::~InsetBranch()
 }
 
 
-docstring InsetBranch::editMessage() const
-{
-       return _("Opened Branch Inset");
-}
-
-
 void InsetBranch::write(ostream & os) const
 {
        params_.write(os);
@@ -70,25 +66,41 @@ void InsetBranch::read(Lexer & lex)
 }
 
 
-docstring InsetBranch::toolTip(BufferView const &, int, int) const
+docstring InsetBranch::toolTip(BufferView const & bv, int x, int y) const
 {
-       return _("Branch: ") + params_.branch;
+       docstring const status = isBranchSelected() ? 
+               _("active") : _("non-active");
+       docstring const heading = 
+               support::bformat(_("Branch (%1$s): %2$s"), status, params_.branch);
+       docstring const contents = InsetCollapsable::toolTip(bv, x, y);
+       if (isOpen(bv) || contents.empty())
+               return heading;
+       else
+               return heading + from_ascii("\n") + contents;
 }
 
 
-void InsetBranch::setButtonLabel()
+docstring const InsetBranch::buttonLabel(BufferView const & bv) const
 {
        docstring s = _("Branch: ") + params_.branch;
+       Buffer const & realbuffer = *buffer().masterBuffer();
+       BranchList const & branchlist = realbuffer.params().branchlist();
+       if (!branchlist.find(params_.branch)
+           && buffer().params().branchlist().find(params_.branch))
+               s = _("Branch (child only): ") + params_.branch;
+       else if (!branchlist.find(params_.branch))
+               s = _("Branch (undefined): ") + params_.branch;
        if (!params_.branch.empty()) {
                // FIXME UNICODE
                ColorCode c = lcolor.getFromLyXName(to_utf8(params_.branch));
                if (c == Color_none)
                        s = _("Undef: ") + s;
        }
-       if (decoration() == InsetLayout::Classic)
-               setLabel(isOpen() ? s : getNewLabel(s) );
+       s = char_type(isBranchSelected() ? 0x2714 : 0x2716) + s;
+       if (decoration() == InsetLayout::CLASSIC)
+               return isOpen(bv) ? s : getNewLabel(s);
        else
-               setLabel(params_.branch + ": " + getNewLabel(s));
+               return params_.branch + ": " + getNewLabel(s);
 }
 
 
@@ -119,36 +131,32 @@ void InsetBranch::doDispatch(Cursor & cur, FuncRequest & cmd)
                InsetBranchParams params;
                InsetBranch::string2params(to_utf8(cmd.argument()), params);
                params_.branch = params.branch;
-               setLayout(cur.buffer().params());
                break;
        }
 
-       case LFUN_MOUSE_PRESS:
-               if (cmd.button() != mouse_button::button3)
-                       InsetCollapsable::doDispatch(cur, cmd);
-               else
-                       cur.undispatched();
-               break;
-
        case LFUN_INSET_DIALOG_UPDATE:
                cur.bv().updateDialog("branch", params2string(params()));
                break;
 
-       case LFUN_INSET_TOGGLE:
-               if (cmd.argument() == "assign") {
-                       // The branch inset uses "assign".
-                       if (isBranchSelected()) {
-                               if (status() != Open)
-                                       setStatus(cur, Open);
-                               else
-                                       cur.undispatched();
-                       } else {
-                               if (status() != Collapsed)
-                                       setStatus(cur, Collapsed);
-                               else
-                                       cur.undispatched();
-                       }
+       case LFUN_BRANCH_ACTIVATE:
+       case LFUN_BRANCH_DEACTIVATE: {
+               // FIXME: I do not like this cast, but have no other idea...
+               Buffer const * buf = buffer().masterBuffer();
+               BranchList const & branchlist = buf->params().branchlist();
+               Branch * our_branch = const_cast<Branch *>(branchlist.find(params_.branch));
+               if (!our_branch) {
+                       // child only?
+                       our_branch = buffer().params().branchlist().find(params_.branch);
+                       if (!our_branch)
+                               break;
                }
+               our_branch->setSelected(cmd.action == LFUN_BRANCH_ACTIVATE);
+               break;
+       }
+
+       case LFUN_INSET_TOGGLE:
+               if (cmd.argument() == "assign")
+                       setStatus(cur, isBranchSelected() ? Open : Collapsed);
                else
                        InsetCollapsable::doDispatch(cur, cmd);
                break;
@@ -169,18 +177,19 @@ bool InsetBranch::getStatus(Cursor & cur, FuncRequest const & cmd,
                flag.setEnabled(true);
                break;
 
+       case LFUN_BRANCH_ACTIVATE:
+               flag.setEnabled(!isBranchSelected());
+               break;
+
+       case LFUN_BRANCH_DEACTIVATE:
+               flag.setEnabled(isBranchSelected());
+               break;
+
        case LFUN_INSET_TOGGLE:
-               if (cmd.argument() == "open" || cmd.argument() == "close" ||
-                   cmd.argument() == "toggle")
-                       flag.setEnabled(true);
-               else if (cmd.argument() == "assign" || cmd.argument().empty()) {
-                       if (isBranchSelected())
-                               flag.setEnabled(status() != Open);
-                       else
-                               flag.setEnabled(status() != Collapsed);
-               } else
+               if (cmd.argument() == "assign")
                        flag.setEnabled(true);
-               break;
+               else
+                       return InsetCollapsable::getStatus(cur, cmd, flag);     
 
        default:
                return InsetCollapsable::getStatus(cur, cmd, flag);
@@ -194,8 +203,13 @@ bool InsetBranch::isBranchSelected() const
        Buffer const & realbuffer = *buffer().masterBuffer();
        BranchList const & branchlist = realbuffer.params().branchlist();
        Branch const * ourBranch = branchlist.find(params_.branch);
-       if (!ourBranch)
-               return false;
+
+       if (!ourBranch) {
+               // this branch is defined in child only
+               ourBranch = buffer().params().branchlist().find(params_.branch);
+               if (!ourBranch)
+                       return false;
+       }
        return ourBranch->isSelected();
 }
 
@@ -227,16 +241,31 @@ int InsetBranch::docbook(odocstream & os,
 }
 
 
-void InsetBranch::textString(odocstream & os) const
+docstring InsetBranch::xhtml(XHTMLStream & xs, OutputParams const & rp) const
 {
        if (isBranchSelected())
-               os << paragraphs().begin()->asString(AS_STR_LABEL | AS_STR_INSETS);
+                return InsetText::xhtml(xs, rp);
+       return docstring();
+}
+
+
+void InsetBranch::tocString(odocstream & os) const
+{
+       if (isBranchSelected())
+               InsetCollapsable::tocString(os);
 }
 
 
 void InsetBranch::validate(LaTeXFeatures & features) const
 {
-       InsetText::validate(features);
+       if (isBranchSelected())
+               InsetCollapsable::validate(features);
+}
+
+
+docstring InsetBranch::contextMenu(BufferView const &, int, int) const
+{
+       return from_ascii("context-branch");
 }
 
 
@@ -292,7 +321,8 @@ void InsetBranchParams::write(ostream & os) const
 
 void InsetBranchParams::read(Lexer & lex)
 {
-       lex >> branch;
+       lex.eatLine();
+       branch = lex.getDocString();
 }
 
 } // namespace lyx