#include "FuncStatus.h"
#include "Lexer.h"
#include "OutputParams.h"
+#include "output_xhtml.h"
#include "TextClass.h"
#include "TocBackend.h"
namespace lyx {
-InsetBranch::InsetBranch(Buffer const & buf, InsetBranchParams const & params)
+InsetBranch::InsetBranch(Buffer * buf, InsetBranchParams const & params)
: InsetCollapsable(buf, InsetText::DefaultLayout), params_(params)
{}
-InsetBranch::~InsetBranch()
-{
- hideDialogs("branch", this);
-}
-
-
-docstring InsetBranch::editMessage() const
-{
- return _("Opened Branch Inset");
-}
-
-
void InsetBranch::write(ostream & os) const
{
+ os << "Branch ";
params_.write(os);
+ os << '\n';
InsetCollapsable::write(os);
}
}
-docstring InsetBranch::toolTip(BufferView const &, int, int) const
+docstring InsetBranch::toolTip(BufferView const & bv, int, int) const
{
docstring const status = isBranchSelected() ?
_("active") : _("non-active");
- return support::bformat(_("Branch (%1$s): %2$s"),
- status,
- params_.branch);
+ docstring const heading =
+ support::bformat(_("Branch (%1$s): %2$s"), status, params_.branch);
+ if (isOpen(bv))
+ return heading;
+ return toolTipText(heading + from_ascii("\n"));
}
docstring s = _("Branch: ") + params_.branch;
Buffer const & realbuffer = *buffer().masterBuffer();
BranchList const & branchlist = realbuffer.params().branchlist();
- if (!branchlist.find(params_.branch))
+ 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));
}
-ColorCode InsetBranch::backgroundColor() const
+ColorCode InsetBranch::backgroundColor(PainterInfo const & pi) const
{
if (params_.branch.empty())
- return Inset::backgroundColor();
+ return Inset::backgroundColor(pi);
// FIXME UNICODE
ColorCode c = lcolor.getFromLyXName(to_utf8(params_.branch));
if (c == Color_none)
}
-bool InsetBranch::showInsetDialog(BufferView * bv) const
-{
- bv->showDialog("branch", params2string(params()),
- const_cast<InsetBranch *>(this));
- return true;
-}
-
-
void InsetBranch::doDispatch(Cursor & cur, FuncRequest & cmd)
{
- switch (cmd.action) {
+ switch (cmd.action()) {
case LFUN_INSET_MODIFY: {
InsetBranchParams params;
InsetBranch::string2params(to_utf8(cmd.argument()), params);
+
+ cur.recordUndoInset(ATOMIC_UNDO, this);
params_.branch = params.branch;
- setLayout(cur.buffer()->params());
+ // what we really want here is a TOC update, but that means
+ // a full buffer update
+ cur.forceBufferUpdate();
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_BRANCH_ACTIVATE:
case LFUN_BRANCH_DEACTIVATE: {
// FIXME: I do not like this cast, but have no other idea...
- Buffer * realbuffer = const_cast<Buffer *>(buffer().masterBuffer());
- BranchList & branchlist = realbuffer->params().branchlist();
- Branch * ourBranch = branchlist.find(params_.branch);
- if (!ourBranch)
- break;
- ourBranch->setSelected(cmd.action == LFUN_BRANCH_ACTIVATE);
+ 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;
+ }
+ bool const activate = (cmd.action() == LFUN_BRANCH_ACTIVATE);
+ if (our_branch->isSelected() != activate) {
+ our_branch->setSelected(activate);
+ cur.forceBufferUpdate();
+ }
break;
}
-
case LFUN_INSET_TOGGLE:
if (cmd.argument() == "assign")
setStatus(cur, isBranchSelected() ? Open : Collapsed);
bool InsetBranch::getStatus(Cursor & cur, FuncRequest const & cmd,
FuncStatus & flag) const
{
- switch (cmd.action) {
+ switch (cmd.action()) {
case LFUN_INSET_MODIFY:
- case LFUN_INSET_DIALOG_UPDATE:
- case LFUN_INSET_SETTINGS:
flag.setEnabled(true);
break;
flag.setEnabled(true);
else
return InsetCollapsable::getStatus(cur, cmd, flag);
+ break;
default:
return InsetCollapsable::getStatus(cur, cmd, flag);
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();
}
-int InsetBranch::latex(odocstream & os, OutputParams const & runparams) const
+void InsetBranch::latex(otexstream & os, OutputParams const & runparams) const
{
- return isBranchSelected() ? InsetText::latex(os, runparams) : 0;
+ if (isBranchSelected())
+ InsetText::latex(os, runparams);
}
if (!isBranchSelected())
return 0;
- os << '[' << buffer().B_("branch") << ' ' << params_.branch << ":\n";
- InsetText::plaintext(os, runparams);
- os << "\n]";
-
- return PLAINTEXT_NEWLINE + 1; // one char on a separate line
+ int len = InsetText::plaintext(os, runparams);
+ return len;
}
}
-void InsetBranch::tocString(odocstream & os) const
+docstring InsetBranch::xhtml(XHTMLStream & xs, OutputParams const & rp) const
+{
+ if (isBranchSelected())
+ xhtmlParagraphs(text(), buffer(), xs, rp);
+ return docstring();
+}
+
+
+void InsetBranch::toString(odocstream & os) const
+{
+ if (isBranchSelected())
+ InsetCollapsable::toString(os);
+}
+
+
+void InsetBranch::forToc(docstring & os, size_t maxlen) const
{
if (isBranchSelected())
- InsetCollapsable::tocString(os);
+ InsetCollapsable::forToc(os, maxlen);
}
}
-docstring InsetBranch::contextMenu(BufferView const &, int, int) const
+docstring InsetBranch::contextMenuName() const
{
return from_ascii("context-branch");
}
string InsetBranch::params2string(InsetBranchParams const & params)
{
ostringstream data;
- data << "branch" << ' ';
params.write(data);
return data.str();
}
Lexer lex;
lex.setStream(data);
lex.setContext("InsetBranch::string2params");
- lex >> "branch" >> "Branch";
params.read(lex);
}
-void InsetBranch::addToToc(DocIterator const & cpit)
+void InsetBranch::addToToc(DocIterator const & cpit) const
{
DocIterator pit = cpit;
- pit.push_back(CursorSlice(*this));
+ pit.push_back(CursorSlice(const_cast<InsetBranch &>(*this)));
Toc & toc = buffer().tocBackend().toc("branch");
- docstring const str = params_.branch + ": " + text().getPar(0).asString();
- toc.push_back(TocItem(pit, 0, str));
+ docstring str = params_.branch + ": ";
+ text().forToc(str, TOC_ENTRY_LENGTH);
+ toc.push_back(TocItem(pit, 0, str, toolTipText(docstring(), 3, 60)));
// Proceed with the rest of the inset.
InsetCollapsable::addToToc(cpit);
}
void InsetBranchParams::write(ostream & os) const
{
- os << "Branch " << to_utf8(branch) << '\n';
+ os << to_utf8(branch);
}
void InsetBranchParams::read(Lexer & lex)
{
- lex.eatLine();
- branch = lex.getDocString();
+ lex >> branch;
}
} // namespace lyx