X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetbranch.C;h=d39d69c718adfa5716e679c9fdecbfba235e1e53;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=a2e67e0e3c0978f88d8c2cd430dd3ac304ac9d9a;hpb=1cad117882dc393b2d55174c6f2ab67920a54ce1;p=lyx.git diff --git a/src/insets/insetbranch.C b/src/insets/insetbranch.C index a2e67e0e3c..d39d69c718 100644 --- a/src/insets/insetbranch.C +++ b/src/insets/insetbranch.C @@ -15,17 +15,20 @@ #include "buffer.h" #include "bufferparams.h" #include "BranchList.h" -#include "BufferView.h" +#include "cursor.h" #include "dispatchresult.h" #include "funcrequest.h" +#include "FuncStatus.h" #include "gettext.h" #include "LColor.h" #include "lyxlex.h" #include "paragraph.h" -#include "support/std_sstream.h" +#include +namespace lyx { + using std::string; using std::auto_ptr; using std::istringstream; @@ -35,7 +38,7 @@ using std::ostringstream; void InsetBranch::init() { - setInsetName("Branch"); + setInsetName(from_utf8("Branch")); setButtonLabel(); } @@ -61,13 +64,13 @@ InsetBranch::~InsetBranch() } -auto_ptr InsetBranch::clone() const +auto_ptr InsetBranch::doClone() const { return auto_ptr(new InsetBranch(*this)); } -string const InsetBranch::editMessage() const +docstring const InsetBranch::editMessage() const { return _("Opened Branch Inset"); } @@ -94,12 +97,19 @@ void InsetBranch::setButtonLabel() font.decSize(); font.decSize(); - setLabel("Branch: " + params_.branch); + docstring s = _("Branch: ") + params_.branch; font.setColor(LColor::foreground); - if (!params_.branch.empty()) - setBackgroundColor(lcolor.getFromLyXName(params_.branch)); - else + if (!params_.branch.empty()) { + // FIXME UNICODE + LColor_color c = lcolor.getFromLyXName(to_utf8(params_.branch)); + if (c == LColor::none) { + c = LColor::error; + s = _("Undef: ") + s; + } + setBackgroundColor(c); + } else setBackgroundColor(LColor::background); + setLabel(isOpen() ? s : getNewLabel(s) ); setLabelFont(font); } @@ -111,106 +121,145 @@ bool InsetBranch::showInsetDialog(BufferView * bv) const } -DispatchResult -InsetBranch::priv_dispatch(FuncRequest const & cmd, - idx_type & idx, pos_type & pos) +void InsetBranch::doDispatch(LCursor & cur, FuncRequest & cmd) { - BufferView * bv = cmd.view(); switch (cmd.action) { case LFUN_INSET_MODIFY: { InsetBranchParams params; - InsetBranchMailer::string2params(cmd.argument, params); + InsetBranchMailer::string2params(to_utf8(cmd.argument()), params); params_.branch = params.branch; setButtonLabel(); - return DispatchResult(true, true); + break; } case LFUN_MOUSE_PRESS: if (cmd.button() != mouse_button::button3) - return InsetCollapsable::priv_dispatch(cmd, idx, pos); - return DispatchResult(false); + InsetCollapsable::doDispatch(cur, cmd); + else + cur.undispatched(); + break; case LFUN_INSET_DIALOG_UPDATE: - InsetBranchMailer(*this).updateDialog(bv); - return DispatchResult(true); + InsetBranchMailer(*this).updateDialog(&cur.bv()); + break; case LFUN_MOUSE_RELEASE: - if (cmd.button() == mouse_button::button3 && hitButton(cmd)) { - InsetBranchMailer(*this).showDialog(bv); - return DispatchResult(true); + if (cmd.button() == mouse_button::button3 && hitButton(cmd)) + InsetBranchMailer(*this).showDialog(&cur.bv()); + else + InsetCollapsable::doDispatch(cur, cmd); + break; + + + case LFUN_INSET_TOGGLE: + if (cmd.argument() == "assign" || cmd.argument().empty()) { + // The branch inset uses "assign". + if (isBranchSelected(cur.buffer())) { + if (status() != Open) + setStatus(cur, Open); + else + cur.undispatched(); + } else { + if (status() != Collapsed) + setStatus(cur, Collapsed); + else + cur.undispatched(); + } } - return InsetCollapsable::priv_dispatch(cmd, idx, pos); - + else + InsetCollapsable::doDispatch(cur, cmd); + break; + default: - return InsetCollapsable::priv_dispatch(cmd, idx, pos); + InsetCollapsable::doDispatch(cur, cmd); + break; } } -namespace { - -struct SameBranch { - SameBranch(string const & branch_name) : bn(branch_name) {} - bool operator()(Branch const & branch) const - { return bn == branch.getBranch(); } -private: - string bn; -}; +bool InsetBranch::getStatus(LCursor & cur, FuncRequest const & cmd, + FuncStatus & flag) const +{ + switch (cmd.action) { + case LFUN_INSET_MODIFY: + case LFUN_INSET_DIALOG_UPDATE: + flag.enabled(true); + break; + + case LFUN_INSET_TOGGLE: + if (cmd.argument() == "open" || cmd.argument() == "close" || + cmd.argument() == "toggle") + flag.enabled(true); + else if (cmd.argument() == "assign" + || cmd.argument().empty()) { + if (isBranchSelected(cur.buffer())) + flag.enabled(status() != Open); + else + flag.enabled(status() != Collapsed); + } else + flag.enabled(true); + break; -} // namespace anon + default: + return InsetCollapsable::getStatus(cur, cmd, flag); + } + return true; +} -bool InsetBranch::isBranchSelected(BranchList const & branchlist) const +bool InsetBranch::isBranchSelected(Buffer const & buffer) const { - BranchList::const_iterator it = branchlist.begin(); + Buffer const & realbuffer = *buffer.getMasterBuffer(); + BranchList const & branchlist = realbuffer.params().branchlist(); BranchList::const_iterator const end = branchlist.end(); - it = std::find_if(it, end, SameBranch(params_.branch)); + BranchList::const_iterator it = + std::find_if(branchlist.begin(), end, + BranchNamesEqual(params_.branch)); if (it == end) return false; return it->getSelected(); } -int InsetBranch::latex(Buffer const & buf, ostream & os, +int InsetBranch::latex(Buffer const & buf, odocstream & os, OutputParams const & runparams) const { - return isBranchSelected(buf.params().branchlist()) ? - inset.latex(buf, os, runparams) : 0; + return isBranchSelected(buf) ? + InsetText::latex(buf, os, runparams) : 0; } -int InsetBranch::linuxdoc(Buffer const & buf, std::ostream & os, - OutputParams const & runparams) const +int InsetBranch::docbook(Buffer const & buf, odocstream & os, + OutputParams const & runparams) const { - return isBranchSelected(buf.params().branchlist()) ? - inset.linuxdoc(buf, os, runparams) : 0; + return isBranchSelected(buf) ? + InsetText::docbook(buf, os, runparams) : 0; } -int InsetBranch::docbook(Buffer const & buf, std::ostream & os, - OutputParams const & runparams) const +int InsetBranch::plaintext(Buffer const & buf, odocstream & os, + OutputParams const & runparams) const { - return isBranchSelected(buf.params().branchlist()) ? - inset.docbook(buf, os, runparams) : 0; + return isBranchSelected(buf) ? + InsetText::plaintext(buf, os, runparams): 0; } -int InsetBranch::plaintext(Buffer const & buf, std::ostream & os, - OutputParams const & runparams) const +void InsetBranch::textString(Buffer const & buf, odocstream & os) const { - return isBranchSelected(buf.params().branchlist()) ? - inset.plaintext(buf, os, runparams): 0; + if (isBranchSelected(buf)) + os << paragraphs().begin()->asString(buf, true); } void InsetBranch::validate(LaTeXFeatures & features) const { - inset.validate(features); + InsetText::validate(features); } -string const InsetBranchMailer:: name_("branch"); +string const InsetBranchMailer::name_("branch"); InsetBranchMailer::InsetBranchMailer(InsetBranch & inset) : inset_(inset) @@ -261,7 +310,7 @@ void InsetBranchMailer::string2params(string const & in, void InsetBranchParams::write(ostream & os) const { - os << "Branch " << branch << '\n'; + os << "Branch " << to_utf8(branch) << '\n'; } @@ -269,3 +318,5 @@ void InsetBranchParams::read(LyXLex & lex) { lex >> branch; } + +} // namespace lyx