#include "FuncRequest.h"
#include "FuncStatus.h"
#include "Lexer.h"
+#include "LyX.h"
#include "OutputParams.h"
#include "output_xhtml.h"
#include "TextClass.h"
#include "support/gettext.h"
#include "support/lstrings.h"
+#include "frontends/alert.h"
#include "frontends/Application.h"
#include <sstream>
docstring symb = docstring(1, char_type(master_selected ? 0x2714 : 0x2716));
if (inchild && master_selected != child_selected)
symb += char_type(child_selected ? 0x2714 : 0x2716);
- s = symb + s;
if (decoration() == InsetLayout::CLASSIC)
- return isOpen(bv) ? s : getNewLabel(s);
+ return symb + (isOpen(bv) ? s : getNewLabel(s));
else
- return params_.branch + ": " + getNewLabel(s);
+ return symb + params_.branch + ": " + getNewLabel(s);
}
// call recordUndo..., because the master may be hidden, and
// the code presently assumes that hidden documents can never
// be dirty. See GuiView::closeBufferAll(), for example.
+ // An option would be to check if the master is hidden.
+ // If it is, unhide.
if (!master)
buffer().undo().recordUndoFullDocument(cur);
+ else
+ // at least issue a warning for now (ugly, but better than dataloss).
+ frontend::Alert::warning(_("Branch state changes in master document"),
+ lyx::support::bformat(_("The state of the branch '%1$s' "
+ "was changed in the master file. "
+ "Please make sure to save the master."), params_.branch), true);
our_branch->setSelected(activate);
- cur.forceBufferUpdate();
+ // cur.forceBufferUpdate() is not enough
+ buf->updateBuffer();
}
break;
}
+ case LFUN_BRANCH_ADD:
+ lyx::dispatch(FuncRequest(LFUN_BRANCH_ADD, params_.branch));
+ 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
{
+ bool const known_branch =
+ buffer().params().branchlist().find(params_.branch);
+
switch (cmd.action()) {
case LFUN_INSET_MODIFY:
flag.setEnabled(true);
break;
case LFUN_BRANCH_ACTIVATE:
- flag.setEnabled(!isBranchSelected(true));
+ flag.setEnabled(known_branch && !isBranchSelected(true));
+ break;
+
+ case LFUN_BRANCH_ADD:
+ flag.setEnabled(!known_branch);
break;
case LFUN_BRANCH_DEACTIVATE:
break;
case LFUN_BRANCH_MASTER_ACTIVATE:
- flag.setEnabled(buffer().parent() && !isBranchSelected());
+ flag.setEnabled(buffer().parent()
+ && buffer().masterBuffer()->params().branchlist().find(params_.branch)
+ && !isBranchSelected());
break;
case LFUN_BRANCH_MASTER_DEACTIVATE:
}
-int InsetBranch::plaintext(odocstream & os,
- OutputParams const & runparams) const
+int InsetBranch::plaintext(odocstringstream & os,
+ OutputParams const & runparams, size_t max_length) const
{
if (!isBranchSelected())
return 0;
- int len = InsetText::plaintext(os, runparams);
+ int len = InsetText::plaintext(os, runparams, max_length);
return len;
}
}
-void InsetBranch::addToToc(DocIterator const & cpit) const
+void InsetBranch::addToToc(DocIterator const & cpit, bool output_active) const
{
DocIterator pit = cpit;
pit.push_back(CursorSlice(const_cast<InsetBranch &>(*this)));
Toc & toc = buffer().tocBackend().toc("branch");
docstring str = params_.branch + ": ";
text().forToc(str, TOC_ENTRY_LENGTH);
- toc.push_back(TocItem(pit, 0, str, toolTipText(docstring(), 3, 60)));
+ toc.push_back(TocItem(pit, 0, str, output_active, toolTipText(docstring(), 3, 60)));
// Proceed with the rest of the inset.
- InsetCollapsable::addToToc(cpit);
+ bool const doing_output = output_active && isBranchSelected();
+ InsetCollapsable::addToToc(cpit, doing_output);
}