remove Inset::getParagraphs()

cache 'outermost' inset font


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8192 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2003-12-03 18:17:20 +00:00
parent 2d61ce9b85
commit 8fa8cfb4a3
20 changed files with 118 additions and 160 deletions

View File

@ -1,4 +1,14 @@
2003-12-03 André Pönitz <poenitz@gmx.net>
* PosIterator.C:
* iterators.C:
* lyxtext.h:
* output_latex.C:
* paragraph_funcs.C:
* text.C:
* text2.C: use Inset::getText instead of Inset::getParagraph
2003-12-03 André Pönitz <poenitz@gmx.net>
* buffer.[Ch]:

View File

@ -33,12 +33,11 @@ PosIterator & PosIterator::operator++()
PosIteratorItem & p = stack_.back();
if (p.pos < p.pit->size()) {
InsetOld * inset = p.pit->getInset(p.pos);
if (inset) {
ParagraphList * pl = inset->getParagraphs(p.index);
if (pl) {
if (InsetOld * inset = p.pit->getInset(p.pos)) {
if (LyXText * text = inset->getText(p.index)) {
ParagraphList & pl = text->paragraphs();
p.index++;
stack_.push_back(PosIteratorItem(pl, pl->begin(), 0));
stack_.push_back(PosIteratorItem(&pl, pl.begin(), 0));
return *this;
}
}
@ -86,10 +85,10 @@ PosIterator & PosIterator::operator--()
if (q.pos < q.pit->size()) {
InsetOld * inset = q.pit->getInset(q.pos);
if (inset && q.index > 0) {
ParagraphList *
pl = inset->getParagraphs(q.index - 1);
BOOST_ASSERT(pl);
stack_.push_back(PosIteratorItem(pl, prior(pl->end()), pl->back().size()));
LyXText * text = inset->getText(q.index - 1);
BOOST_ASSERT(text);
ParagraphList & pl = text->paragraphs();
stack_.push_back(PosIteratorItem(&pl, prior(pl.end()), pl.back().size()));
}
}
return *this;
@ -156,7 +155,8 @@ int distance(PosIterator const & cur, PosIterator const & end)
{
PosIterator p = cur;
int count = 0;
for (; p != end; ++p, ++count);
for (; p != end; ++p, ++count)
;
return count;
}

View File

@ -1,3 +1,14 @@
2003-12-03 André Pönitz <poenitz@gmx.net>
* inset.h: remove getParagraphs()
* insetcollapsable.[Ch]:
* insetert.[Ch]:
* insetnote.[Ch]:
* insettabular.[Ch]:
* insettext.C: use getText() instead of getParagraphs()
2003-12-03 Martin Vermeer <martin.vermeer@hut.fi>
* insetert.C: fix label text updating bug

View File

@ -25,7 +25,6 @@ class LColor_color;
class FuncRequest;
class OutputParams;
class LyXCursor;
class LyXFont;
class LyXLex;
class LyXText;
class Painter;
@ -223,10 +222,7 @@ public:
/// returns the actual scroll-value
virtual int scroll(bool recursive = true) const;
/// if this insets owns paragraphs (f.ex. InsetText) then it
/// should return it's very first one!
virtual ParagraphList * getParagraphs(int /*num*/) const { return 0; }
///
/// if this insets owns text cells (e.g. InsetText) return cell num
virtual LyXText * getText(int /*num*/) const { return 0; }
///
virtual int numParagraphs() const { return 0; }
@ -256,8 +252,6 @@ public:
be closed before generating this inset. This is needed for
insets that may contain several paragraphs */
virtual bool noFontChange() const { return false; }
//
virtual void getDrawFont(LyXFont &) const {}
/// mark the inset contents as erased (for change tracking)
virtual void markErased() {}

View File

@ -375,12 +375,6 @@ int InsetCollapsable::scroll(bool recursive) const
}
ParagraphList * InsetCollapsable::getParagraphs(int i) const
{
return inset.getParagraphs(i);
}
int InsetCollapsable::numParagraphs() const
{
return inset.numParagraphs();

View File

@ -99,8 +99,6 @@ public:
///
void scroll(BufferView *bv, int offset) const;
///
ParagraphList * getParagraphs(int) const;
///
int numParagraphs() const;
///
LyXText * getText(int) const;

View File

@ -385,12 +385,10 @@ int InsetERT::docbook(Buffer const &, ostream & os,
void InsetERT::edit(BufferView * bv, bool left)
{
if (status_ == Inlined) {
if (status_ == Inlined)
inset.edit(bv, left);
} else {
else
InsetCollapsable::edit(bv, left);
}
setLatexFont(bv);
updateStatus();
}
@ -400,9 +398,6 @@ InsetERT::priv_dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos)
{
BufferView * bv = cmd.view();
if (inset.paragraphs().begin()->empty())
setLatexFont(bv);
switch (cmd.action) {
case LFUN_INSET_MODIFY: {
@ -428,17 +423,6 @@ InsetERT::priv_dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos)
bv->owner()->setLayout(inset.paragraphs().begin()->layout()->name());
return DispatchResult(true);
case LFUN_BREAKPARAGRAPH:
case LFUN_BREAKPARAGRAPHKEEPLAYOUT:
case LFUN_BACKSPACE:
case LFUN_BACKSPACE_SKIP:
case LFUN_DELETE:
case LFUN_DELETE_SKIP:
case LFUN_DELETE_LINE_FORWARD:
case LFUN_CUT:
setLatexFont(bv);
return InsetCollapsable::priv_dispatch(cmd, idx, pos);
default:
return InsetCollapsable::priv_dispatch(cmd, idx, pos);
}
@ -459,25 +443,20 @@ bool InsetERT::insetAllowed(InsetOld::Code code) const
void InsetERT::metrics(MetricsInfo & mi, Dimension & dim) const
{
LyXFont tmpfont = mi.base.font;
getDrawFont(mi.base.font);
InsetCollapsable::metrics(mi, dim);
mi.base.font = tmpfont;
dim_ = dim;
}
void InsetERT::draw(PainterInfo & pi, int x, int y) const
{
LyXFont tmpfont = pi.base.font;
getDrawFont(pi.base.font);
InsetCollapsable::draw(pi, x, y);
}
void InsetERT::setLatexFont(BufferView * /*bv*/)
{
#ifdef SET_HARD_FONT
LyXFont font(LyXFont::ALL_INHERIT, latex_language);
font.setFamily(LyXFont::TYPEWRITER_FAMILY);
font.setColor(LColor::latex);
inset.text_.setFont(bv, font, false);
#endif
pi.base.font = tmpfont;
}

View File

@ -98,8 +98,6 @@ private:
void init();
///
void setButtonLabel() const;
///
void setLatexFont(BufferView *);
/// update status on button
void updateStatus(bool = false) const;
///

View File

@ -111,18 +111,6 @@ void InsetNote::setButtonLabel()
}
void InsetNote::metrics(MetricsInfo & mi, Dimension & dim) const
{
InsetCollapsable::metrics(mi, dim);
// Contrary to Greyedout, these cannot be construed as part of the
// running text: make them stand on their own
if (params_.type == "Note" || params_.type == "Comment")
if (isOpen())
dim.wid = mi.base.textwidth;
dim_ = dim;
}
bool InsetNote::showInsetDialog(BufferView * bv) const
{
InsetNoteMailer("note", const_cast<InsetNote &>(*this)).showDialog(bv);

View File

@ -31,8 +31,6 @@ struct InsetNoteParams {
class InsetNote : public InsetCollapsable {
public:
///
InsetNote(BufferParams const &, std::string const &);
/// Copy constructor
InsetNote(InsetNote const &);
@ -50,22 +48,20 @@ public:
void read(Buffer const & buf, LyXLex & lex);
///
void setButtonLabel();
///
void metrics(MetricsInfo &, Dimension &) const;
/// show the note dialog
bool showInsetDialog(BufferView * bv) const;
///
int latex(Buffer const &, std::ostream &,
OutputParams const &) const;
OutputParams const &) const;
///
int linuxdoc(Buffer const &, std::ostream &,
OutputParams const &) const;
OutputParams const &) const;
///
int docbook(Buffer const &, std::ostream &,
OutputParams const &) const;
OutputParams const &) const;
///
int plaintext(Buffer const &, std::ostream &,
OutputParams const &) const;
OutputParams const &) const;
///
void validate(LaTeXFeatures &) const;
///

View File

@ -1965,14 +1965,6 @@ void InsetTabular::getSelection(int & srow, int & erow,
}
ParagraphList * InsetTabular::getParagraphs(int i) const
{
return i < tabular.getNumberOfCells()
? tabular.getCellInset(i).getParagraphs(0)
: 0;
}
int InsetTabular::numParagraphs() const
{
return tabular.getNumberOfCells();

View File

@ -125,18 +125,16 @@ public:
/// Appends \c list with all labels found within this inset.
void getLabelList(Buffer const &, std::vector<std::string> & list) const;
///
int scroll(bool recursive=true) const;
int scroll(bool recursive = true) const;
///
void scroll(BufferView *bv, float sx) const {
void scroll(BufferView * bv, float sx) const {
UpdatableInset::scroll(bv, sx);
}
///
void scroll(BufferView *bv, int offset) const {
void scroll(BufferView * bv, int offset) const {
UpdatableInset::scroll(bv, offset);
}
///
ParagraphList * getParagraphs(int) const;
///
int numParagraphs() const;
///
LyXText * getText(int) const;

View File

@ -176,14 +176,16 @@ void InsetText::read(Buffer const & buf, LyXLex & lex)
void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const
{
//lyxerr << "InsetText::metrics: width: " << mi.base.textwidth << endl;
mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET;
setViewCache(mi.base.bv);
mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET;
text_.metrics(mi, dim);
dim.asc += TEXT_TO_INSET_OFFSET;
dim.des += TEXT_TO_INSET_OFFSET;
dim.wid += 2 * TEXT_TO_INSET_OFFSET;
mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET;
dim_ = dim;
font_ = mi.base.font;
text_.font_ = mi.base.font;
}
@ -270,9 +272,8 @@ extern LCursor theTempCursor;
void InsetText::edit(BufferView * bv, bool left)
{
lyxerr << "InsetText: edit left/right" << endl;
setViewCache(bv);
old_par = -1;
setViewCache(bv);
if (left)
text_.setCursorIntern(0, 0);
@ -289,6 +290,7 @@ void InsetText::edit(BufferView * bv, int x, int y)
{
lyxerr << "InsetText::edit xy" << endl;
old_par = -1;
sanitizeEmptyText(bv);
text_.setCursorFromCoordinates(x - text_.xo_, y + bv->top_y()
- text_.yo_);
@ -534,12 +536,6 @@ void InsetText::clearInset(Painter & pain, int x, int y) const
}
ParagraphList * InsetText::getParagraphs(int i) const
{
return (i == 0) ? const_cast<ParagraphList*>(&paragraphs()) : 0;
}
LyXText * InsetText::getText(int i) const
{
return (i == 0) ? const_cast<LyXText*>(&text_) : 0;
@ -577,13 +573,6 @@ void InsetText::collapseParagraphs(BufferView * bv)
}
void InsetText::getDrawFont(LyXFont & font) const
{
if (owner())
owner()->getDrawFont(font);
}
void InsetText::appendParagraphs(Buffer * buffer, ParagraphList & plist)
{
#warning FIXME Check if Changes stuff needs changing here. (Lgb)

View File

@ -15,6 +15,7 @@
#include "updatableinset.h"
#include "ParagraphList_fwd.h"
#include "RowList_fwd.h"
#include "lyxfont.h"
#include "lyxtext.h"
#include "support/types.h"
@ -125,8 +126,6 @@ public:
UpdatableInset::scroll(bv, offset);
}
///
ParagraphList * getParagraphs(int) const;
///
LyXText * getText(int) const;
/// mark as erased for change tracking
@ -140,8 +139,6 @@ public:
*/
void markNew(bool track_changes = false);
///
void getDrawFont(LyXFont &) const;
/// append text onto the existing text
void appendParagraphs(Buffer * bp, ParagraphList &);
@ -199,5 +196,7 @@ private:
public:
///
mutable LyXText text_;
///
mutable LyXFont font_;
};
#endif

View File

@ -110,26 +110,31 @@ ParIterator & ParIterator::operator++()
// Does the current inset contain more "cells" ?
if (p.index) {
++(*p.index);
ParagraphList * plist = (*p.it)->inset->getParagraphs(*p.index);
if (plist && !plist->empty()) {
pimpl_->positions.push_back(ParPosition(plist->begin(), *plist));
return *this;
if (LyXText * text = (*p.it)->inset->getText(*p.index)) {
ParagraphList & plist = text->paragraphs();
if (!plist.empty()) {
pimpl_->positions.push_back(ParPosition(plist.begin(), plist));
return *this;
}
}
++(*p.it);
} else
} else {
// The following line is needed because the value of
// p.it may be invalid if inset was added/removed to
// the paragraph pointed by the iterator
p.it.reset(p.pit->insetlist.begin());
}
// Try to find the next inset that contains paragraphs
InsetList::iterator end = p.pit->insetlist.end();
for (; *p.it != end; ++(*p.it)) {
ParagraphList * plist = (*p.it)->inset->getParagraphs(0);
if (plist && !plist->empty()) {
p.index.reset(0);
pimpl_->positions.push_back(ParPosition(plist->begin(), *plist));
return *this;
if (LyXText * text = (*p.it)->inset->getText(0)) {
ParagraphList & plist = text->paragraphs();
if (!plist.empty()) {
p.index.reset(0);
pimpl_->positions.push_back(ParPosition(plist.begin(), plist));
return *this;
}
}
}
@ -265,26 +270,31 @@ ParConstIterator & ParConstIterator::operator++()
// Does the current inset contain more "cells" ?
if (p.index) {
++(*p.index);
ParagraphList * plist = (*p.it)->inset->getParagraphs(*p.index);
if (plist && !plist->empty()) {
pimpl_->positions.push_back(ParPosition(plist->begin(), *plist));
return *this;
if (LyXText * text = (*p.it)->inset->getText(*p.index)) {
ParagraphList & plist = text->paragraphs();
if (!plist.empty()) {
pimpl_->positions.push_back(ParPosition(plist.begin(), plist));
return *this;
}
}
++(*p.it);
} else
} else {
// The following line is needed because the value of
// p.it may be invalid if inset was added/removed to
// the paragraph pointed by the iterator
p.it.reset(p.pit->insetlist.begin());
}
// Try to find the next inset that contains paragraphs
InsetList::iterator end = p.pit->insetlist.end();
for (; *p.it != end; ++(*p.it)) {
ParagraphList * plist = (*p.it)->inset->getParagraphs(0);
if (plist && !plist->empty()) {
p.index.reset(0);
pimpl_->positions.push_back(ParPosition(plist->begin(), *plist));
return *this;
if (LyXText * text = (*p.it)->inset->getText(*p.index)) {
ParagraphList & plist = text->paragraphs();
if (!plist.empty()) {
p.index.reset(0);
pimpl_->positions.push_back(ParPosition(plist.begin(), plist));
return *this;
}
}
}

View File

@ -426,6 +426,9 @@ public:
mutable int xo_;
mutable int yo_;
/// our 'outermost' Font
LyXFont font_;
private:
/// rebreaks the given par

View File

@ -426,7 +426,7 @@ TeXOnePar(Buffer const & buf,
return ++pit;
}
} //anon namespace
} // anon namespace
//
// LaTeX all paragraphs from par to endpar, if endpar == 0 then to the end

View File

@ -564,11 +564,10 @@ ParagraphList::iterator outerPar(Buffer const & buf, InsetOld const * inset)
ParIterator pit = const_cast<Buffer &>(buf).par_iterator_begin();
ParIterator end = const_cast<Buffer &>(buf).par_iterator_end();
for ( ; pit != end; ++pit) {
ParagraphList * plist;
LyXText * text;
// the second '=' below is intentional
for (int i = 0; (plist = inset->getParagraphs(i)); ++i)
if (plist == &pit.plist())
for (int i = 0; (text = inset->getText(i)); ++i)
if (&text->paragraphs() == &pit.plist())
return pit.outerPar();
InsetList::iterator ii = pit->insetlist.begin();
@ -588,10 +587,10 @@ Paragraph const & ownerPar(Buffer const & buf, InsetOld const * inset)
ParConstIterator pit = buf.par_iterator_begin();
ParConstIterator end = buf.par_iterator_end();
for ( ; pit != end; ++pit) {
ParagraphList * plist;
LyXText * text;
// the second '=' below is intentional
for (int i = 0; (plist = inset->getParagraphs(i)); ++i)
if (plist == &pit.plist())
for (int i = 0; (text = inset->getText(i)); ++i)
if (&text->paragraphs() == &pit.plist())
return *pit.pit();
InsetList::const_iterator ii = pit->insetlist.begin();

View File

@ -314,25 +314,25 @@ int LyXText::leftMargin(ParagraphList::iterator pit, pos_type pos) const
align = pit->params().align();
// set the correct parindent
if (pos == 0) {
if ((layout->labeltype == LABEL_NO_LABEL
|| layout->labeltype == LABEL_TOP_ENVIRONMENT
|| layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT
|| (layout->labeltype == LABEL_STATIC
&& layout->latextype == LATEX_ENVIRONMENT
&& !isFirstInSequence(pit, paragraphs())))
&& align == LYX_ALIGN_BLOCK
&& !pit->params().noindent()
// in tabulars and ert paragraphs are never indented!
&& (!pit->inInset() || !pit->inInset()->owner() ||
(pit->inInset()->owner()->lyxCode() != InsetOld::TABULAR_CODE &&
pit->inInset()->owner()->lyxCode() != InsetOld::ERT_CODE))
&& (pit->layout() != tclass.defaultLayout() ||
bv()->buffer()->params().paragraph_separation ==
BufferParams::PARSEP_INDENT)) {
x += font_metrics::signedWidth(parindent,
tclass.defaultfont());
}
if (pos == 0
&& (layout->labeltype == LABEL_NO_LABEL
|| layout->labeltype == LABEL_TOP_ENVIRONMENT
|| layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT
|| (layout->labeltype == LABEL_STATIC
&& layout->latextype == LATEX_ENVIRONMENT
&& !isFirstInSequence(pit, paragraphs())))
&& align == LYX_ALIGN_BLOCK
&& !pit->params().noindent()
// in tabulars and ert paragraphs are never indented!
&& (!pit->inInset()
|| !pit->inInset()->owner()
|| (pit->inInset()->owner()->lyxCode() != InsetOld::TABULAR_CODE
&& pit->inInset()->owner()->lyxCode() != InsetOld::ERT_CODE))
&& (pit->layout() != tclass.defaultLayout()
|| bv()->buffer()->params().paragraph_separation ==
BufferParams::PARSEP_INDENT))
{
x += font_metrics::signedWidth(parindent, tclass.defaultfont());
}
return x;

View File

@ -118,8 +118,8 @@ LyXFont LyXText::getFont(ParagraphList::iterator pit, pos_type pos) const
// We specialize the 95% common case:
if (!pit->getDepth()) {
LyXFont f = pit->getFontSettings(params, pos);
if (pit->inInset())
pit->inInset()->getDrawFont(f);
if (in_inset_)
f.realize(font_);
if (layout->labeltype == LABEL_MANUAL && pos < body_pos)
return f.realize(layout->reslabelfont);
else
@ -136,8 +136,8 @@ LyXFont LyXText::getFont(ParagraphList::iterator pit, pos_type pos) const
LyXFont font = pit->getFontSettings(params, pos);
font.realize(layoutfont);
if (pit->inInset())
pit->inInset()->getDrawFont(font);
if (in_inset_)
font.realize(font_);
// Realize with the fonts of lesser depth.
//font.realize(outerFont(pit, paragraphs()));