X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInset.cpp;h=7d05c8ef1fa3097e8ae9cc8af773232e894ad969;hb=eeb36e808c9726fd3689926a3c20457e3b801341;hp=75991cd7de1f971f983dac21f06992fce9790820;hpb=bcfa3547be10bcec952fcc31537f89adf0ac625c;p=lyx.git diff --git a/src/insets/Inset.cpp b/src/insets/Inset.cpp index 75991cd7de..7d05c8ef1f 100644 --- a/src/insets/Inset.cpp +++ b/src/insets/Inset.cpp @@ -27,10 +27,13 @@ #include "DispatchResult.h" #include "FuncRequest.h" #include "FuncStatus.h" +#include "InsetLayout.h" #include "MetricsInfo.h" #include "output_xhtml.h" +#include "xml.h" #include "Text.h" #include "TextClass.h" +#include "TocBackend.h" #include "frontends/Application.h" #include "frontends/Painter.h" @@ -61,7 +64,7 @@ static InsetName insetnames[INSET_CODE_SIZE]; // This list should be kept in sync with the list of dialogs in -// src/frontends/qt4/GuiView.cpp, I.e., if a dialog goes with an +// src/frontends/qt/GuiView.cpp, I.e., if a dialog goes with an // inset, the dialog should have the same name as the inset. // Changes should be also recorded in LFUN_DIALOG_SHOW doxygen // docs in LyXAction.cpp. @@ -73,6 +76,7 @@ static void build_translator() insetnames[TOC_CODE] = InsetName("toc"); insetnames[QUOTE_CODE] = InsetName("quote"); insetnames[REF_CODE] = InsetName("ref"); + insetnames[COUNTER_CODE] = InsetName("counter"); insetnames[HYPERLINK_CODE] = InsetName("href"); insetnames[SEPARATOR_CODE] = InsetName("separator"); insetnames[ENDING_CODE] = InsetName("ending"); @@ -116,7 +120,7 @@ static void build_translator() insetnames[MATH_MACROARG_CODE] = InsetName("mathmacroarg"); insetnames[LISTINGS_CODE] = InsetName("listings"); insetnames[INFO_CODE] = InsetName("info", _("Info")); - insetnames[COLLAPSABLE_CODE] = InsetName("collapsable"); + insetnames[COLLAPSIBLE_CODE] = InsetName("collapsible"); insetnames[NEWPAGE_CODE] = InsetName("newpage"); insetnames[SCRIPT_CODE] = InsetName("script"); insetnames[CELL_CODE] = InsetName("tablecell"); @@ -172,7 +176,6 @@ static void build_translator() insetnames[MATH_UNDERSET_CODE] = InsetName("mathunderset"); insetnames[MATH_UNKNOWN_CODE] = InsetName("mathunknown"); insetnames[MATH_XARROW_CODE] = InsetName("mathxarrow"); - insetnames[MATH_XYARROW_CODE] = InsetName("mathxyarrow"); insetnames[MATH_XYMATRIX_CODE] = InsetName("mathxymatrix"); insetnames[MATH_DIAGRAM_CODE] = InsetName("mathdiagram"); insetnames[MATH_MACRO_CODE] = InsetName("mathmacro"); @@ -187,6 +190,12 @@ void Inset::setBuffer(Buffer & buffer) } +void Inset::resetBuffer() +{ + buffer_ = nullptr; +} + + Buffer & Inset::buffer() { if (!buffer_) { @@ -196,7 +205,7 @@ Buffer & Inset::buffer() << " name: " << iname); s << "LyX Code: " << lyxCode() << " name: " << from_ascii(iname); LATTEST(false); - throw ExceptionMessage(BufferException, + throw ExceptionMessage(BufferException, from_ascii("Inset::buffer_ member not initialized!"), s.str()); } return *buffer_; @@ -217,8 +226,8 @@ bool Inset::isBufferLoaded() const bool Inset::isBufferValid() const { - return buffer_ - && (isBufferLoaded() || buffer_->isClone()); + return buffer_ + && (isBufferLoaded() || buffer_->isInternal() || buffer_->isClone()); } @@ -228,7 +237,21 @@ docstring Inset::layoutName() const } -bool Inset::isFreeSpacing() const +InsetLayout const & Inset::getLayout() const +{ + if (!buffer_) + return DocumentClass::plainInsetLayout(); + return buffer().params().documentClass().insetLayout(layoutName()); +} + + +bool Inset::isPassThru() const +{ + return getLayout().isPassThru(); +} + + +bool Inset::isFreeSpacing() const { return getLayout().isFreeSpacing(); } @@ -240,7 +263,7 @@ bool Inset::allowEmpty() const } -bool Inset::forceLTR() const +bool Inset::forceLTR(OutputParams const &) const { return getLayout().forceLTR(); } @@ -252,6 +275,18 @@ bool Inset::isInToc() const } +FontInfo Inset::getFont() const +{ + return getLayout().font(); +} + + +FontInfo Inset::getLabelfont() const +{ + return getLayout().labelfont(); +} + + docstring Inset::toolTip(BufferView const &, int, int) const { return docstring(); @@ -292,14 +327,14 @@ InsetCode insetCode(string const & name) } -string insetName(InsetCode c) +string insetName(InsetCode c) { build_translator(); return insetnames[c].name; } -docstring insetDisplayName(InsetCode c) +docstring insetDisplayName(InsetCode c) { build_translator(); return insetnames[c].display_name; @@ -308,9 +343,9 @@ docstring insetDisplayName(InsetCode c) void Inset::dispatch(Cursor & cur, FuncRequest & cmd) { - if (buffer_ == 0) { + if (buffer_ == nullptr) { lyxerr << "Unassigned buffer_ member in Inset::dispatch()" << std::endl; - lyxerr << "LyX Code: " << lyxCode() << " name: " + lyxerr << "LyX Code: " << lyxCode() << " name: " << insetName(lyxCode()) << std::endl; } else if (cur.buffer() != buffer_) lyxerr << "cur.buffer() != buffer_ in Inset::dispatch()" << std::endl; @@ -350,7 +385,7 @@ void Inset::doDispatch(Cursor & cur, FuncRequest &cmd) // if the derived inset did not explicitly handle mouse_release, // we assume we request the settings dialog if (!cur.selection() && cmd.button() == mouse_button::button1 - && clickable(cmd.x(), cmd.y()) && hasSettings()) { + && clickable(cur.bv(), cmd.x(), cmd.y()) && hasSettings()) { FuncRequest tmpcmd(LFUN_INSET_SETTINGS); dispatch(cur, tmpcmd); } @@ -373,7 +408,7 @@ void Inset::doDispatch(Cursor & cur, FuncRequest &cmd) bool Inset::getStatus(Cursor &, FuncRequest const & cmd, - FuncStatus & flag) const + FuncStatus & status) const { // LFUN_INSET_APPLY is sent from the dialogs when the data should // be applied. This is either changed to LFUN_INSET_MODIFY (if the @@ -388,33 +423,33 @@ bool Inset::getStatus(Cursor &, FuncRequest const & cmd, // Allow modification of our data. // This needs to be handled in the doDispatch method of our // instantiatable children. - flag.setEnabled(true); + status.setEnabled(true); return true; case LFUN_INSET_INSERT: // Don't allow insertion of new insets. // Every inset that wants to allow new insets from open // dialogs needs to override this. - flag.setEnabled(false); + status.setEnabled(false); return true; case LFUN_INSET_SETTINGS: if (cmd.argument().empty() || cmd.getArg(0) == insetName(lyxCode())) { bool const enable = hasSettings(); - flag.setEnabled(enable); + status.setEnabled(enable); return true; } else { return false; } case LFUN_IN_MATHMACROTEMPLATE: - // By default we're not in a MathMacroTemplate inset - flag.setEnabled(false); + // By default we're not in a InsetMathMacroTemplate inset + status.setEnabled(false); return true; case LFUN_IN_IPA: // By default we're not in an IPA inset - flag.setEnabled(false); + status.setEnabled(false); return true; default: @@ -437,7 +472,7 @@ Inset * Inset::editXY(Cursor &, int x, int y) } -Inset::idx_type Inset::index(row_type row, col_type col) const +idx_type Inset::index(row_type row, col_type col) const { if (row != 0) LYXERR0("illegal row: " << row); @@ -459,13 +494,13 @@ bool Inset::idxUpDown(Cursor &, bool) const } -int Inset::docbook(odocstream &, OutputParams const &) const +void Inset::docbook(XMLStream & xs, OutputParams const &) const { - return 0; + xs << "[[Inset: " << from_ascii(insetName(lyxCode())) << "]]"; } -docstring Inset::xhtml(XHTMLStream & xs, OutputParams const &) const +docstring Inset::xhtml(XMLStream & xs, OutputParams const &) const { xs << "[[Inset: " << from_ascii(insetName(lyxCode())) << "]]"; return docstring(); @@ -521,6 +556,16 @@ void Inset::metricsMarkers2(Dimension & dim, int framesize) const } +void Inset::drawBackground(PainterInfo & pi, int x, int y) const +{ + if (pi.full_repaint && backgroundColor(pi) == Color_none) + return; + Dimension const dim = dimension(*pi.base.bv); + pi.pain.fillRectangle(x, y - dim.asc, dim.wid, dim.asc + dim.des, + pi.backgroundColor(this)); +} + + void Inset::drawMarkers(PainterInfo & pi, int x, int y) const { ColorCode pen_color = mouseHovered(pi.base.bv) || editing(pi.base.bv)? @@ -534,24 +579,6 @@ void Inset::drawMarkers(PainterInfo & pi, int x, int y) const pi.pain.line(t, d - 3, t, d, pen_color); pi.pain.line(x, d, x + 3, d, pen_color); pi.pain.line(t - 3, d, t, d, pen_color); - setPosCache(pi, x, y); -} - - -void Inset::drawMarkers2(PainterInfo & pi, int x, int y) const -{ - ColorCode pen_color = mouseHovered(pi.base.bv) || editing(pi.base.bv)? - Color_mathframe : Color_mathcorners; - - drawMarkers(pi, x, y); - Dimension const dim = dimension(*pi.base.bv); - int const t = x + dim.width() - 1; - int const a = y - dim.ascent(); - pi.pain.line(x, a + 3, x, a, pen_color); - pi.pain.line(t, a + 3, t, a, pen_color); - pi.pain.line(x, a, x + 3, a, pen_color); - pi.pain.line(t - 3, a, t, a, pen_color); - setPosCache(pi, x, y); } @@ -579,18 +606,16 @@ bool Inset::covers(BufferView const & bv, int x, int y) const } -InsetLayout const & Inset::getLayout() const +bool Inset::undefined() const { - if (!buffer_) - return DocumentClass::plainInsetLayout(); - return buffer().params().documentClass().insetLayout(layoutName()); + docstring const & n = getLayout().name(); + return n.empty() || n == DocumentClass::plainInsetLayout().name(); } -bool Inset::undefined() const +CtObject Inset::getCtObject(OutputParams const &) const { - docstring const & n = getLayout().name(); - return n.empty() || n == DocumentClass::plainInsetLayout().name(); + return CtObject::Normal; } @@ -612,19 +637,6 @@ ColorCode Inset::labelColor() const } -void Inset::setPosCache(PainterInfo const & pi, int x, int y) const -{ - //LYXERR("Inset: set position cache to " << x << " " << y); - pi.base.bv->coordCache().insets().add(this, x, y); -} - - -void Inset::setDimCache(MetricsInfo const & mi, Dimension const & dim) const -{ - mi.base.bv->coordCache().insets().add(this, dim); -} - - Buffer const * Inset::updateFrontend() const { //FIXME (Abdel 03/12/10): see bugs #6814 and #6949 @@ -632,8 +644,8 @@ Buffer const * Inset::updateFrontend() const // are in the CutAndPaste stack. See InsetGraphics, RenderGraphics and // RenderPreview. if (!buffer_) - return 0; - return theApp() ? theApp()->updateInset(this) : 0; + return nullptr; + return theApp() ? theApp()->updateInset(this) : nullptr; } @@ -643,7 +655,7 @@ bool Inset::resetFontEdit() const } -docstring Inset::completionPrefix(Cursor const &) const +docstring Inset::completionPrefix(Cursor const &) const { return docstring(); }