* buffer.[Ch]:

* lyxtext.h: move ParagraphList member to LyXText
	rename LyXText::ownerParagraphs to LyXText::paragraph

	* CutAndPaste.C:
	* bufferview_funcs.C:
	* iterators.[Ch]:
	* lyx_cb.C:
	* paragraph.C:
	* rowpainter.C:
	* tabular.C:
	* text.C:
	* text2.C:
	* text3.C: adjust

	* lyxfunc.C: move LFUN_INSET_TOGGLE handling to insets.

	* undo.C: fix cursor positioning
	* insetbase.h: whitespace

	* inset.[Ch]: remove latexTextWidth
	make setBackgroundColor virtual

	* insettext.[Ch]:  move ParagraphList member to LyXText

	* insetcollapsable.[Ch]: handle LFUN_INSET_TOGGLE

	* insetcharstyle.C:
	* insetenv.C:
	* insetert.[Ch]:
	* insetfloat.[Ch]:
	* insetminipage.[Ch]:
	* insettabular.C:
	* insetwrap.[Ch]: adjust paragraphs and background color handling,


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8166 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2003-12-01 13:35:49 +00:00
parent 220317063e
commit 4b2c271e23
36 changed files with 357 additions and 435 deletions

View File

@ -308,7 +308,7 @@ void BufferView::gotoLabel(string const & label)
if (find(labels.begin(),labels.end(),label) != labels.end()) {
text()->clearSelection();
text()->setCursor(
std::distance(text()->ownerParagraphs().begin(), it.getPar()),
std::distance(text()->paragraphs().begin(), it.getPar()),
it.getPos());
text()->selection.cursor = text()->cursor;
update();
@ -413,7 +413,7 @@ Encoding const * BufferView::getEncoding() const
return t->cursorPar()->getFont(
buffer()->params(),
t->cursor.pos(),
outerFont(t->cursorPar(), t->ownerParagraphs())
outerFont(t->cursorPar(), t->paragraphs())
).language()->encoding();
}

View File

@ -1,3 +1,25 @@
2003-12-01 André Pönitz <poenitz@gmx.net>
* buffer.[Ch]:
* lyxtext.h: move ParagraphList member to LyXText
rename LyXText::ownerParagraphs to LyXText::paragraph
* CutAndPaste.C:
* bufferview_funcs.C:
* iterators.[Ch]:
* lyx_cb.C:
* paragraph.C:
* rowpainter.C:
* tabular.C:
* text.C:
* text2.C:
* text3.C: adjust
* lyxfunc.C: move LFUN_INSET_TOGGLE handling to insets.
* undo.C: fix cursor positioning
2003-12-01 John Levon <levon@movementarian.org>
* BufferView_pimpl.C: fix a crash on exit with

View File

@ -182,12 +182,11 @@ bool CutAndPaste::copySelection(ParagraphList::iterator startpit,
BOOST_ASSERT(0 <= end && end <= endpit->size());
BOOST_ASSERT(startpit != endpit || start <= end);
ParagraphList paragraphs;
// Clone the paragraphs within the selection.
ParagraphList::iterator postend = boost::next(endpit);
paragraphs.assign(startpit, postend);
ParagraphList paragraphs(startpit, postend);
for_each(paragraphs.begin(), paragraphs.end(), resetOwnerAndChanges());
// Cut out the end of the last paragraph.

View File

@ -146,7 +146,6 @@ struct Buffer::Impl
limited_stack<Undo> undostack;
limited_stack<Undo> redostack;
BufferParams params;
ParagraphList paragraphs;
LyXVC lyxvc;
string temppath;
bool nicefile;
@ -190,7 +189,7 @@ Buffer::Impl::Impl(Buffer & parent, string const & file, bool readonly_)
: nicefile(true),
lyx_clean(true), bak_clean(true), unnamed(false), read_only(readonly_),
filename(file), filepath(OnlyPath(file)), file_fully_loaded(false),
text(0, 0, 0, paragraphs)
text(0, 0)
{
lyxvc.buffer(&parent);
if (readonly_ || lyxrc.use_tempdir)
@ -218,8 +217,6 @@ Buffer::~Buffer()
bformat(_("Could not remove the temporary directory %1$s"), temppath()));
}
paragraphs().clear();
// Remove any previewed LaTeX snippets associated with this buffer.
lyx::graphics::Previews::get().removeLoader(*this);
}
@ -269,13 +266,13 @@ BufferParams const & Buffer::params() const
ParagraphList & Buffer::paragraphs()
{
return pimpl_->paragraphs;
return pimpl_->text.paragraphs();
}
ParagraphList const & Buffer::paragraphs() const
{
return pimpl_->paragraphs;
return pimpl_->text.paragraphs();
}
@ -527,7 +524,7 @@ int Buffer::readParagraph(LyXLex & lex, string const & token,
// needed to insert the selection
void Buffer::insertStringAsLines(ParagraphList::iterator & par, pos_type & pos,
LyXFont const & fn,string const & str)
LyXFont const & fn, string const & str)
{
LyXLayout_ptr const & layout = par->layout();

View File

@ -288,7 +288,7 @@ void put_selection_at(BufferView * bv, PosIterator const & cur,
bv->getLyXText()->clearSelection();
LyXText * text = par.text(bv);
LyXText * text = par.text(*bv->buffer());
par.lockPath(bv);
//hack for the chicken and egg problem
if (par.inset())

View File

@ -1,3 +1,23 @@
2003-12-01 André Pönitz <poenitz@gmx.net>
* insetbase.h: whitespace
* inset.[Ch]: remove latexTextWidth
make setBackgroundColor virtual
* insettext.[Ch]: move ParagraphList member to LyXText
* insetcollapsable.[Ch]: handle LFUN_INSET_TOGGLE
* insetcharstyle.C:
* insetenv.C:
* insetert.[Ch]:
* insetfloat.[Ch]:
* insetminipage.[Ch]:
* insettabular.C:
* insetwrap.[Ch]: adjust paragraphs and background color handling,
2003-11-28 Angus Leeming <leeming@lyx.org>
* insetvspace.[Ch] (d-tor, priv_dispatch): new member functions,

View File

@ -26,15 +26,16 @@ using std::string;
InsetOld::InsetOld()
: InsetBase(),
xo_(0), yo_(0), scx(0), owner_(0),
background_color_(LColor::inherit)
xo_(0), yo_(0), scx(0), owner_(0),
//background_color_(LColor::inherit)
background_color_(LColor::background)
{}
InsetOld::InsetOld(InsetOld const & in)
: InsetBase(),
xo_(0), yo_(0), scx(0), owner_(0),
name_(in.name_), background_color_(in.background_color_)
xo_(0), yo_(0), scx(0), owner_(0), name_(in.name_),
background_color_(in.background_color_)
{}
@ -56,18 +57,6 @@ bool InsetOld::autoDelete() const
}
#if 0
LyXFont const InsetOld::convertFont(LyXFont const & font) const
{
#if 1
return font;
#else
return LyXFont(font);
#endif
}
#endif
string const InsetOld::editMessage() const
{
return _("Opened inset");
@ -82,13 +71,7 @@ void InsetOld::setBackgroundColor(LColor_color color)
LColor_color InsetOld::backgroundColor() const
{
if (background_color_ == LColor::inherit) {
if (owner())
return owner()->backgroundColor();
else
return LColor::background;
} else
return LColor::color(background_color_);
return LColor::color(background_color_);
}
@ -99,13 +82,6 @@ bool InsetOld::forceDefaultParagraphs(InsetOld const * inset) const
return false;
}
int InsetOld::latexTextWidth(BufferView * bv) const
{
if (owner())
return (owner()->latexTextWidth(bv));
return bv->workWidth();
}
int InsetOld::ascent() const
{
@ -131,12 +107,6 @@ bool InsetOld::insetAllowed(InsetOld * in) const
}
bool InsetOld::checkInsertChar(LyXFont &)
{
return false;
}
int InsetOld::scroll(bool recursive) const
{
if (!recursive || !owner_)

View File

@ -213,7 +213,7 @@ public:
///
UpdatableInset * owner() const { return owner_; }
///
void setBackgroundColor(LColor_color);
virtual void setBackgroundColor(LColor_color);
///
LColor_color backgroundColor() const;
///
@ -238,9 +238,6 @@ public:
virtual void open() {}
/// close the inset
virtual void close() const {}
/// check if the font of the char we want inserting is correct
/// and modify it if it is not.
virtual bool checkInsertChar(LyXFont &);
// should this inset be handled like a normal charater
virtual bool isChar() const { return false; }
// is this equivalent to a letter?
@ -261,11 +258,6 @@ public:
virtual bool noFontChange() const { return false; }
//
virtual void getDrawFont(LyXFont &) const {}
/* needed for widths which are % of something
returns the value of \textwidth in this inset. Most of the
time this is the width of the workarea, but if there is a
minipage somewhere, it will be the width of this minipage */
virtual int latexTextWidth(BufferView *) const;
/// mark the inset contents as erased (for change tracking)
virtual void markErased() {}

View File

@ -50,8 +50,7 @@ public:
DispatchResult
dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos);
// the real dispatcher
DispatchResult
dispatch(FuncRequest const & cmd);
DispatchResult dispatch(FuncRequest const & cmd);
/// cursor enters
virtual void edit(BufferView * bv, bool left);

View File

@ -126,8 +126,8 @@ namespace {
int outputVerbatim(std::ostream & os, InsetText inset)
{
int lines = 0;
ParagraphList::iterator par = inset.paragraphs.begin();
ParagraphList::iterator end = inset.paragraphs.end();
ParagraphList::iterator par = inset.paragraphs().begin();
ParagraphList::iterator end = inset.paragraphs().end();
while (par != end) {
lyx::pos_type siz = par->size();
for (lyx::pos_type i = 0; i < siz; ++i) {

View File

@ -149,7 +149,7 @@ void InsetCollapsable::draw(PainterInfo & pi, int x, int y, bool inlined) const
xo_ = x;
yo_ = y;
if (!isOpen()) {
if (collapsed_) {
draw_collapsed(pi, x, y);
return;
}
@ -171,7 +171,7 @@ void InsetCollapsable::draw(PainterInfo & pi, int x, int y, bool inlined) const
void InsetCollapsable::draw(PainterInfo & pi, int x, int y) const
{
// by default, we are not inlined-drawing
// by default we don't draw inline
draw(pi, x, y, false);
}
@ -274,16 +274,13 @@ void InsetCollapsable::edit(BufferView * bv, int x, int y)
lyxerr << "InsetCollapsable: edit xy" << endl;
if (collapsed_) {
collapsed_ = false;
// set this only here as it should be recollapsed only if
// it was already collapsed!
inset.edit(bv, x, y);
} else {
if (y <= button_dim.y2)
inset.edit(bv, x, 0);
y = 0;
else
inset.edit(bv, x, ascent() + y - height_collapsed() + inset.ascent());
y += inset.ascent() - height_collapsed();
}
inset.edit(bv, x, y);
bv->cursor().push(this);
}
@ -311,6 +308,11 @@ InsetCollapsable::priv_dispatch(FuncRequest const & cmd, idx_type &, pos_type &)
return lfunMouseRelease(cmd);
return DispatchResult(true, true);
case LFUN_INSET_TOGGLE:
if (!inset.text_.toggleInset())
close();
return DispatchResult(true, true);
default:
return inset.dispatch(adjustCommand(cmd));
}
@ -326,7 +328,7 @@ void InsetCollapsable::validate(LaTeXFeatures & features) const
void InsetCollapsable::getCursorPos(int & x, int & y) const
{
inset.getCursorPos(x , y);
inset.getCursorPos(x, y);
y += - ascent() + height_collapsed() + inset.ascent();
}
@ -369,18 +371,12 @@ LyXText * InsetCollapsable::getText(int i) const
void InsetCollapsable::open()
{
if (!collapsed_)
return;
collapsed_ = false;
}
void InsetCollapsable::close() const
{
if (collapsed_)
return;
collapsed_ = true;
}
@ -420,6 +416,7 @@ void InsetCollapsable::setLabelFont(LyXFont & f)
labelfont_ = f;
}
#if 0
void InsetCollapsable::setAutoCollapse(bool f)
{
@ -427,13 +424,14 @@ void InsetCollapsable::setAutoCollapse(bool f)
}
#endif
void InsetCollapsable::scroll(BufferView *bv, float sx) const
void InsetCollapsable::scroll(BufferView * bv, float sx) const
{
UpdatableInset::scroll(bv, sx);
}
void InsetCollapsable::scroll(BufferView *bv, int offset) const
void InsetCollapsable::scroll(BufferView * bv, int offset) const
{
UpdatableInset::scroll(bv, offset);
}
@ -450,3 +448,9 @@ Box const & InsetCollapsable::buttonDim() const
return button_dim;
}
void InsetCollapsable::setBackgroundColor(LColor_color color)
{
InsetOld::setBackgroundColor(color);
inset.setBackgroundColor(color);
}

View File

@ -110,6 +110,8 @@ public:
void markErased();
///
void addPreview(lyx::graphics::PreviewLoader &) const;
///
void setBackgroundColor(LColor_color);
protected:
///

View File

@ -71,7 +71,7 @@ int InsetEnvironment::latex(Buffer const & buf, ostream & os,
{
os << layout_->latexheader;
TexRow texrow;
latexParagraphs(buf, paragraphs, os, texrow, runparams,
latexParagraphs(buf, paragraphs(), os, texrow, runparams,
layout_->latexparagraph);
os << layout_->latexfooter;
return texrow.rows();

View File

@ -94,7 +94,7 @@ InsetERT::InsetERT(BufferParams const & bp,
string::const_iterator end = contents.end();
pos_type pos = 0;
for (; cit != end; ++cit) {
inset.paragraphs.begin()->insertChar(pos++, *cit, font);
inset.paragraphs().begin()->insertChar(pos++, *cit, font);
}
// the init has to be after the initialization of the paragraph
// because of the label settings (draw_label for ert insets).
@ -142,8 +142,8 @@ void InsetERT::read(Buffer const & buf, LyXLex & lex)
font.setFamily(LyXFont::TYPEWRITER_FAMILY);
font.setColor(LColor::latex);
ParagraphList::iterator pit = inset.paragraphs.begin();
ParagraphList::iterator pend = inset.paragraphs.end();
ParagraphList::iterator pit = inset.paragraphs().begin();
ParagraphList::iterator pend = inset.paragraphs().end();
for (; pit != pend; ++pit) {
pos_type siz = pit->size();
for (pos_type i = 0; i < siz; ++i) {
@ -182,8 +182,8 @@ void InsetERT::write(Buffer const & buf, ostream & os) const
//inset.writeParagraphData(buf, os);
string const layout(buf.params().getLyXTextClass().defaultLayoutName());
ParagraphList::iterator par = inset.paragraphs.begin();
ParagraphList::iterator end = inset.paragraphs.end();
ParagraphList::iterator par = inset.paragraphs().begin();
ParagraphList::iterator end = inset.paragraphs().end();
for (; par != end; ++par) {
os << "\n\\begin_layout " << layout << "\n";
pos_type siz = par->size();
@ -296,8 +296,8 @@ void InsetERT::lfunMouseMotion(FuncRequest const & cmd)
int InsetERT::latex(Buffer const &, ostream & os,
OutputParams const &) const
{
ParagraphList::iterator par = inset.paragraphs.begin();
ParagraphList::iterator end = inset.paragraphs.end();
ParagraphList::iterator par = inset.paragraphs().begin();
ParagraphList::iterator end = inset.paragraphs().end();
int lines = 0;
while (par != end) {
@ -335,8 +335,8 @@ int InsetERT::plaintext(Buffer const &, ostream &,
int InsetERT::linuxdoc(Buffer const &, ostream & os,
OutputParams const &)const
{
ParagraphList::iterator par = inset.paragraphs.begin();
ParagraphList::iterator end = inset.paragraphs.end();
ParagraphList::iterator par = inset.paragraphs().begin();
ParagraphList::iterator end = inset.paragraphs().end();
int lines = 0;
while (par != end) {
@ -363,8 +363,8 @@ int InsetERT::linuxdoc(Buffer const &, ostream & os,
int InsetERT::docbook(Buffer const &, ostream & os,
OutputParams const &) const
{
ParagraphList::iterator par = inset.paragraphs.begin();
ParagraphList::iterator end = inset.paragraphs.end();
ParagraphList::iterator par = inset.paragraphs().begin();
ParagraphList::iterator end = inset.paragraphs().end();
int lines = 0;
while (par != end) {
@ -405,7 +405,7 @@ InsetERT::priv_dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos)
{
BufferView * bv = cmd.view();
if (inset.paragraphs.begin()->empty())
if (inset.paragraphs().begin()->empty())
setLatexFont(bv);
switch (cmd.action) {
@ -431,7 +431,7 @@ InsetERT::priv_dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos)
return DispatchResult(true, true);
case LFUN_LAYOUT:
bv->owner()->setLayout(inset.paragraphs.begin()->layout()->name());
bv->owner()->setLayout(inset.paragraphs().begin()->layout()->name());
return DispatchResult(true);
case LFUN_BREAKPARAGRAPH:
@ -455,17 +455,17 @@ string const InsetERT::getNewLabel() const
{
string la;
pos_type const max_length = 15;
pos_type const p_siz = inset.paragraphs.begin()->size();
pos_type const p_siz = inset.paragraphs().begin()->size();
pos_type const n = min(max_length, p_siz);
pos_type i = 0;
pos_type j = 0;
for( ; i < n && j < p_siz; ++j) {
if (inset.paragraphs.begin()->isInset(j))
if (inset.paragraphs().begin()->isInset(j))
continue;
la += inset.paragraphs.begin()->getChar(j);
la += inset.paragraphs().begin()->getChar(j);
++i;
}
if (inset.paragraphs.size() > 1 || (i > 0 && j < p_siz)) {
if (inset.paragraphs().size() > 1 || (i > 0 && j < p_siz)) {
la += "...";
}
if (la.empty()) {
@ -481,17 +481,6 @@ void InsetERT::setButtonLabel() const
}
bool InsetERT::checkInsertChar(LyXFont & /* font */)
{
#ifdef SET_HARD_FONT
LyXFont font(LyXFont::ALL_INHERIT, latex_language);
font.setFamily(LyXFont::TYPEWRITER_FAMILY);
font.setColor(LColor::latex);
#endif
return true;
}
void InsetERT::metrics(MetricsInfo & mi, Dimension & dim) const
{
setButtonLabel();

View File

@ -77,8 +77,6 @@ public:
///
void validate(LaTeXFeatures &) const {}
///
bool checkInsertChar(LyXFont &);
///
// these are needed here because of the label/inlined functionallity
///
bool isOpen() const { return status_ == Open || status_ == Inlined; }

View File

@ -145,15 +145,10 @@ InsetFloat::InsetFloat(BufferParams const & bp, string const & type)
setInsetName(type);
LyXTextClass const & tclass = bp.getLyXTextClass();
if (tclass.hasLayout(caplayout))
inset.paragraphs.begin()->layout(tclass[caplayout]);
inset.paragraphs().begin()->layout(tclass[caplayout]);
}
InsetFloat::InsetFloat(InsetFloat const & in)
: InsetCollapsable(in), params_(in.params_)
{}
InsetFloat::~InsetFloat()
{
InsetFloatMailer(*this).hideDialog();
@ -363,11 +358,9 @@ int InsetFloat::docbook(Buffer const & buf, ostream & os,
bool InsetFloat::insetAllowed(InsetOld::Code code) const
{
if (code == InsetOld::FLOAT_CODE)
return false;
if (code == InsetOld::FOOT_CODE || code == InsetOld::MARGIN_CODE)
return false;
return true;
return code != InsetOld::FLOAT_CODE
&& code != InsetOld::FOOT_CODE
&& code != InsetOld::MARGIN_CODE;
}
@ -391,8 +384,8 @@ void InsetFloat::wide(bool w, BufferParams const & bp)
void InsetFloat::addToToc(lyx::toc::TocList & toclist, Buffer const & buf) const
{
ParIterator pit(inset.paragraphs.begin(), inset.paragraphs);
ParIterator end(inset.paragraphs.end(), inset.paragraphs);
ParIterator pit(inset.paragraphs().begin(), inset.paragraphs());
ParIterator end(inset.paragraphs().end(), inset.paragraphs());
// Find a caption layout in one of the (child inset's) pars
for (; pit != end; ++pit) {

View File

@ -41,8 +41,6 @@ public:
///
InsetFloat(BufferParams const &, std::string const &);
///
InsetFloat(InsetFloat const &);
///
~InsetFloat();
///
void write(Buffer const & buf, std::ostream & os) const;

View File

@ -281,16 +281,8 @@ bool InsetMinipage::showInsetDialog(BufferView * bv) const
}
int InsetMinipage::latexTextWidth(BufferView * bv) const
{
return params_.width.inPixels(InsetCollapsable::latexTextWidth(bv));
}
InsetMinipage::Params::Params()
: pos(center),
inner_pos(inner_center),
width(100, LyXLength::PCW)
: pos(center), inner_pos(inner_center), width(100, LyXLength::PCW)
{}

View File

@ -83,8 +83,6 @@ public:
///
bool showInsetDialog(BufferView *) const;
///
int latexTextWidth(BufferView *) const;
///
void params(Params const & p) { params_ = p; }
///
Params const & params() const { return params_; }

View File

@ -1160,7 +1160,7 @@ bool InsetTabular::moveNextCell(BufferView * bv, bool lock)
++actcell;
}
if (lock) {
bool rtl = tabular.getCellInset(actcell).paragraphs.begin()->
bool rtl = tabular.getCellInset(actcell).paragraphs().begin()->
isRightToLeftPar(bv->buffer()->params());
activateCellInset(bv, 0, 0, !rtl);
}
@ -1193,7 +1193,7 @@ bool InsetTabular::movePrevCell(BufferView * bv, bool lock)
}
lyxerr << "move prevcell 2" << endl;
if (lock) {
bool rtl = tabular.getCellInset(actcell).paragraphs.begin()->
bool rtl = tabular.getCellInset(actcell).paragraphs().begin()->
isRightToLeftPar(bv->buffer()->params());
activateCellInset(bv, 0, 0, !rtl);
}
@ -2082,7 +2082,7 @@ bool InsetTabular::insertAsciiString(BufferView * bv, string const & buf,
if (cols < columns) {
InsetText & inset = loctab->getCellInset(cell);
LyXFont const font = inset.text_.
getFont(inset.paragraphs.begin(), 0);
getFont(inset.paragraphs().begin(), 0);
inset.setText(buf.substr(op, p - op), font);
++cols;
++cell;
@ -2093,7 +2093,7 @@ bool InsetTabular::insertAsciiString(BufferView * bv, string const & buf,
if (cols < columns) {
InsetText & inset = tabular.getCellInset(cell);
LyXFont const font = inset.text_.
getFont(inset.paragraphs.begin(), 0);
getFont(inset.paragraphs().begin(), 0);
inset.setText(buf.substr(op, p - op), font);
}
cols = ocol;
@ -2108,7 +2108,7 @@ bool InsetTabular::insertAsciiString(BufferView * bv, string const & buf,
// check for the last cell if there is no trailing '\n'
if (cell < cells && op < len) {
InsetText & inset = loctab->getCellInset(cell);
LyXFont const font = inset.text_.getFont(inset.paragraphs.begin(), 0);
LyXFont const font = inset.text_.getFont(inset.paragraphs().begin(), 0);
inset.setText(buf.substr(op, len - op), font);
}

View File

@ -71,23 +71,19 @@ using std::vector;
InsetText::InsetText(BufferParams const & bp)
: UpdatableInset(),
paragraphs(1),
autoBreakRows_(false),
drawFrame_(NEVER),
frame_color_(LColor::insetframe),
text_(0, this, true, paragraphs)
: autoBreakRows_(false), drawFrame_(NEVER),
frame_color_(LColor::insetframe), text_(0, true)
{
paragraphs.begin()->layout(bp.getLyXTextClass().defaultLayout());
paragraphs().push_back(Paragraph());
paragraphs().begin()->layout(bp.getLyXTextClass().defaultLayout());
if (bp.tracking_changes)
paragraphs.begin()->trackChanges();
paragraphs().begin()->trackChanges();
init();
}
InsetText::InsetText(InsetText const & in)
: UpdatableInset(in),
text_(in.text_.bv_owner, this, true, paragraphs)
: UpdatableInset(in), text_(in.text_.bv_owner, true)
{
// this is ugly...
operator=(in);
@ -97,22 +93,21 @@ InsetText::InsetText(InsetText const & in)
void InsetText::operator=(InsetText const & in)
{
UpdatableInset::operator=(in);
paragraphs = in.paragraphs;
autoBreakRows_ = in.autoBreakRows_;
drawFrame_ = in.drawFrame_;
frame_color_ = in.frame_color_;
text_ = LyXText(in.text_.bv_owner, this, true, paragraphs);
text_ = LyXText(in.text_.bv_owner, true);
text_.paragraphs() = in.text_.paragraphs();
init();
}
void InsetText::init()
{
ParagraphList::iterator pit = paragraphs.begin();
ParagraphList::iterator end = paragraphs.end();
ParagraphList::iterator pit = paragraphs().begin();
ParagraphList::iterator end = paragraphs().end();
for (; pit != end; ++pit)
pit->setInsetOwner(this);
text_.paragraphs_ = &paragraphs;
old_par = -1;
in_insetAllowed = false;
}
@ -120,21 +115,22 @@ void InsetText::init()
void InsetText::clear(bool just_mark_erased)
{
ParagraphList & pars = paragraphs();
if (just_mark_erased) {
ParagraphList::iterator it = paragraphs.begin();
ParagraphList::iterator end = paragraphs.end();
ParagraphList::iterator it = pars.begin();
ParagraphList::iterator end = pars.end();
for (; it != end; ++it)
it->markErased();
return;
}
// This is a gross hack...
LyXLayout_ptr old_layout = paragraphs.begin()->layout();
LyXLayout_ptr old_layout = pars.begin()->layout();
paragraphs.clear();
paragraphs.push_back(Paragraph());
paragraphs.begin()->setInsetOwner(this);
paragraphs.begin()->layout(old_layout);
pars.clear();
pars.push_back(Paragraph());
pars.begin()->setInsetOwner(this);
pars.begin()->layout(old_layout);
}
@ -153,8 +149,8 @@ void InsetText::write(Buffer const & buf, ostream & os) const
void InsetText::writeParagraphData(Buffer const & buf, ostream & os) const
{
ParagraphList::const_iterator it = paragraphs.begin();
ParagraphList::const_iterator end = paragraphs.end();
ParagraphList::const_iterator it = paragraphs().begin();
ParagraphList::const_iterator end = paragraphs().end();
Paragraph::depth_type dth = 0;
for (; it != end; ++it) {
it->write(buf, os, buf.params(), dth);
@ -171,12 +167,12 @@ void InsetText::read(Buffer const & buf, LyXLex & lex)
#warning John, look here. Doesnt make much sense.
if (buf.params().tracking_changes)
paragraphs.begin()->trackChanges();
paragraphs().begin()->trackChanges();
// delete the initial paragraph
Paragraph oldpar = *paragraphs.begin();
paragraphs.clear();
ParagraphList::iterator pit = paragraphs.begin();
Paragraph oldpar = *paragraphs().begin();
paragraphs().clear();
ParagraphList::iterator pit = paragraphs().begin();
while (lex.isOK()) {
lex.nextToken();
@ -193,11 +189,11 @@ void InsetText::read(Buffer const & buf, LyXLex & lex)
}
// FIXME: ugly.
const_cast<Buffer&>(buf).readParagraph(lex, token, paragraphs, pit, depth);
const_cast<Buffer&>(buf).readParagraph(lex, token, paragraphs(), pit, depth);
}
pit = paragraphs.begin();
ParagraphList::iterator const end = paragraphs.end();
pit = paragraphs().begin();
ParagraphList::iterator const end = paragraphs().end();
for (; pit != end; ++pit)
pit->setInsetOwner(this);
@ -208,8 +204,8 @@ void InsetText::read(Buffer const & buf, LyXLex & lex)
// sanity check
// ensure we have at least one par.
if (paragraphs.empty())
paragraphs.push_back(oldpar);
if (paragraphs().empty())
paragraphs().push_back(oldpar);
}
@ -270,7 +266,7 @@ void InsetText::updateLocal(BufferView * bv)
if (!bv)
return;
if (!autoBreakRows_ && paragraphs.size() > 1)
if (!autoBreakRows_ && paragraphs().size() > 1)
collapseParagraphs(bv);
if (!text_.selection.set())
@ -294,8 +290,8 @@ string const InsetText::editMessage() const
void InsetText::sanitizeEmptyText(BufferView * bv)
{
if (paragraphs.size() == 1
&& paragraphs.begin()->empty()
if (paragraphs().size() == 1
&& paragraphs().begin()->empty()
&& bv->getParentLanguage(this) != text_.current_font.language()) {
LyXFont font(LyXFont::ALL_IGNORE);
font.setLanguage(bv->getParentLanguage(this));
@ -317,7 +313,7 @@ void InsetText::edit(BufferView * bv, bool left)
if (left)
text_.setCursorIntern(0, 0);
else
text_.setCursor(paragraphs.size() - 1, paragraphs.back().size());
text_.setCursor(paragraphs().size() - 1, paragraphs().back().size());
sanitizeEmptyText(bv);
updateLocal(bv);
@ -352,7 +348,7 @@ DispatchResult InsetText::priv_dispatch(FuncRequest const & cmd,
DispatchResult result;
result.dispatched(true);
bool was_empty = paragraphs.begin()->empty() && paragraphs.size() == 1;
bool was_empty = paragraphs().begin()->empty() && paragraphs().size() == 1;
switch (cmd.action) {
case LFUN_MOUSE_PRESS:
@ -366,8 +362,8 @@ DispatchResult InsetText::priv_dispatch(FuncRequest const & cmd,
// If the action has deleted all text in the inset, we need
// to change the language to the language of the surronding
// text.
if (!was_empty && paragraphs.begin()->empty() &&
paragraphs.size() == 1) {
if (!was_empty && paragraphs().begin()->empty() &&
paragraphs().size() == 1) {
LyXFont font(LyXFont::ALL_IGNORE);
font.setLanguage(bv->getParentLanguage(this));
text_.setFont(font, false);
@ -382,7 +378,7 @@ int InsetText::latex(Buffer const & buf, ostream & os,
OutputParams const & runparams) const
{
TexRow texrow;
latexParagraphs(buf, paragraphs, os, texrow, runparams);
latexParagraphs(buf, paragraphs(), os, texrow, runparams);
return texrow.rows();
}
@ -390,8 +386,8 @@ int InsetText::latex(Buffer const & buf, ostream & os,
int InsetText::plaintext(Buffer const & buf, ostream & os,
OutputParams const & runparams) const
{
ParagraphList::const_iterator beg = paragraphs.begin();
ParagraphList::const_iterator end = paragraphs.end();
ParagraphList::const_iterator beg = paragraphs().begin();
ParagraphList::const_iterator end = paragraphs().end();
ParagraphList::const_iterator it = beg;
for (; it != end; ++it)
asciiParagraph(buf, *it, os, runparams, it == beg);
@ -404,7 +400,7 @@ int InsetText::plaintext(Buffer const & buf, ostream & os,
int InsetText::linuxdoc(Buffer const & buf, ostream & os,
OutputParams const & runparams) const
{
linuxdocParagraphs(buf, paragraphs, os, runparams);
linuxdocParagraphs(buf, paragraphs(), os, runparams);
return 0;
}
@ -412,14 +408,14 @@ int InsetText::linuxdoc(Buffer const & buf, ostream & os,
int InsetText::docbook(Buffer const & buf, ostream & os,
OutputParams const & runparams) const
{
docbookParagraphs(buf, paragraphs, os, runparams);
docbookParagraphs(buf, paragraphs(), os, runparams);
return 0;
}
void InsetText::validate(LaTeXFeatures & features) const
{
for_each(paragraphs.begin(), paragraphs.end(),
for_each(paragraphs().begin(), paragraphs().end(),
boost::bind(&Paragraph::validate, _1, boost::ref(features)));
}
@ -467,8 +463,8 @@ bool InsetText::showInsetDialog(BufferView *) const
void InsetText::getLabelList(Buffer const & buffer,
std::vector<string> & list) const
{
ParagraphList::const_iterator pit = paragraphs.begin();
ParagraphList::const_iterator pend = paragraphs.end();
ParagraphList::const_iterator pit = paragraphs().begin();
ParagraphList::const_iterator pend = paragraphs().end();
for (; pit != pend; ++pit) {
InsetList::const_iterator beg = pit->insetlist.begin();
InsetList::const_iterator end = pit->insetlist.end();
@ -480,8 +476,8 @@ void InsetText::getLabelList(Buffer const & buffer,
void InsetText::markNew(bool track_changes)
{
ParagraphList::iterator pit = paragraphs.begin();
ParagraphList::iterator end = paragraphs.end();
ParagraphList::iterator pit = paragraphs().begin();
ParagraphList::iterator end = paragraphs().end();
for (; pit != end; ++pit) {
if (track_changes) {
pit->trackChanges();
@ -497,7 +493,7 @@ void InsetText::setText(string const & data, LyXFont const & font)
{
clear(false);
for (unsigned int i = 0; i < data.length(); ++i)
paragraphs.begin()->insertChar(i, data[i], font);
paragraphs().begin()->insertChar(i, data[i], font);
}
@ -541,8 +537,8 @@ void InsetText::setViewCache(BufferView const * bv) const
void InsetText::removeNewlines()
{
ParagraphList::iterator it = paragraphs.begin();
ParagraphList::iterator end = paragraphs.end();
ParagraphList::iterator it = paragraphs().begin();
ParagraphList::iterator end = paragraphs().end();
for (; it != end; ++it)
for (int i = 0; i < it->size(); ++i)
if (it->isNewline(i))
@ -576,7 +572,7 @@ void InsetText::clearInset(Painter & pain, int x, int y) const
ParagraphList * InsetText::getParagraphs(int i) const
{
return (i == 0) ? const_cast<ParagraphList*>(&paragraphs) : 0;
return (i == 0) ? const_cast<ParagraphList*>(&paragraphs()) : 0;
}
@ -586,16 +582,10 @@ LyXText * InsetText::getText(int i) const
}
bool InsetText::checkInsertChar(LyXFont & font)
{
return owner() ? owner()->checkInsertChar(font) : true;
}
void InsetText::collapseParagraphs(BufferView * bv)
{
while (paragraphs.size() > 1) {
ParagraphList::iterator const first = paragraphs.begin();
while (paragraphs().size() > 1) {
ParagraphList::iterator const first = paragraphs().begin();
ParagraphList::iterator second = first;
++second;
size_t const first_par_size = first->size();
@ -618,7 +608,7 @@ void InsetText::collapseParagraphs(BufferView * bv)
}
}
mergeParagraph(bv->buffer()->params(), paragraphs, first);
mergeParagraph(bv->buffer()->params(), paragraphs(), first);
}
}
@ -636,20 +626,20 @@ void InsetText::appendParagraphs(Buffer * buffer, ParagraphList & plist)
// And it probably does. You have to take a look at this John. (Lgb)
#warning John, have a look here. (Lgb)
ParagraphList::iterator pit = plist.begin();
ParagraphList::iterator ins = paragraphs.insert(paragraphs.end(), *pit);
ParagraphList::iterator ins = paragraphs().insert(paragraphs().end(), *pit);
++pit;
mergeParagraph(buffer->params(), paragraphs, boost::prior(ins));
mergeParagraph(buffer->params(), paragraphs(), boost::prior(ins));
ParagraphList::iterator pend = plist.end();
for (; pit != pend; ++pit)
paragraphs.push_back(*pit);
paragraphs().push_back(*pit);
}
void InsetText::addPreview(PreviewLoader & loader) const
{
ParagraphList::const_iterator pit = paragraphs.begin();
ParagraphList::const_iterator pend = paragraphs.end();
ParagraphList::const_iterator pit = paragraphs().begin();
ParagraphList::const_iterator pend = paragraphs().end();
for (; pit != pend; ++pit) {
InsetList::const_iterator it = pit->insetlist.begin();
@ -658,3 +648,9 @@ void InsetText::addPreview(PreviewLoader & loader) const
it->inset->addPreview(loader);
}
}
ParagraphList & InsetText::paragraphs() const
{
return const_cast<ParagraphList &>(text_.paragraphs());
}

View File

@ -142,8 +142,6 @@ public:
*/
void markNew(bool track_changes = false);
///
bool checkInsertChar(LyXFont &);
///
void getDrawFont(LyXFont &) const;
/// append text onto the existing text
@ -160,7 +158,8 @@ public:
///
int numParagraphs() const { return 1; }
///
mutable ParagraphList paragraphs;
ParagraphList & paragraphs() const;
private:
///
DispatchResult

View File

@ -69,7 +69,7 @@ InsetWrap::InsetWrap(BufferParams const & bp, string const & type)
setInsetName(type);
LyXTextClass const & tclass = bp.getLyXTextClass();
if (tclass.hasLayout(caplayout))
inset.paragraphs.begin()->layout(tclass[caplayout]);
inset.paragraphs().begin()->layout(tclass[caplayout]);
}
@ -218,18 +218,10 @@ bool InsetWrap::insetAllowed(InsetOld::Code code) const
}
int InsetWrap::latexTextWidth(BufferView * bv) const
{
return params_.width.inPixels(InsetCollapsable::latexTextWidth(bv));
}
bool InsetWrap::showInsetDialog(BufferView * bv) const
{
if (!inset.showInsetDialog(bv)) {
InsetWrap * tmp = const_cast<InsetWrap *>(this);
InsetWrapMailer(*tmp).showDialog(bv);
}
if (!inset.showInsetDialog(bv))
InsetWrapMailer(const_cast<InsetWrap &>(*this)).showDialog(bv);
return true;
}
@ -237,8 +229,8 @@ bool InsetWrap::showInsetDialog(BufferView * bv) const
void InsetWrap::addToToc(lyx::toc::TocList & toclist, Buffer const & buf) const
{
// Now find the caption in the float...
ParagraphList::iterator tmp = inset.paragraphs.begin();
ParagraphList::iterator end = inset.paragraphs.end();
ParagraphList::iterator tmp = inset.paragraphs().begin();
ParagraphList::iterator end = inset.paragraphs().end();
for (; tmp != end; ++tmp) {
if (tmp->layout()->name() == caplayout) {

View File

@ -9,9 +9,8 @@
* Full author contact details are available in file CREDITS.
*/
#ifndef InsetWrap_H
#define InsetWrap_H
#ifndef INSETWRAP_H
#define INSETWRAP_H
#include "insetcollapsable.h"
#include "toc.h"
@ -64,9 +63,7 @@ public:
///
void addToToc(lyx::toc::TocList &, Buffer const &) const;
///
bool showInsetDialog(BufferView *) const;
///
int latexTextWidth(BufferView *) const;
bool showInsetDialog(BufferView *) const;
///
InsetWrapParams const & params() const { return params_; }
protected:

View File

@ -15,6 +15,7 @@
#include "paragraph.h"
#include "PosIterator.h"
#include "cursor.h"
#include "buffer.h"
#include "BufferView.h"
#include "dispatchresult.h"
@ -149,11 +150,11 @@ ParIterator & ParIterator::operator++()
}
LyXText * ParIterator::text(BufferView * bv) const
LyXText * ParIterator::text(Buffer & buf) const
{
//lyxerr << "positions.size: " << pimpl_->positions.size() << std::endl;
if (pimpl_->positions.size() <= 1)
return bv->text();
return &buf.text();
ParPosition const & pos = pimpl_->positions[pimpl_->positions.size() - 2];
return (*pos.it)->inset->getText(*pos.index);
@ -355,7 +356,8 @@ PosIterator ParIterator::asPosIterator(lyx::pos_type pos) const
for (int i = 0; i < last; ++i) {
ParPosition & pp = pimpl_->positions[i];
p.stack_.push_back(
PosIteratorItem(const_cast<ParagraphList *>(pp.plist), pp.pit, (*pp.it)->pos, *pp.index + 1));
PosIteratorItem(const_cast<ParagraphList *>(pp.plist),
pp.pit, (*pp.it)->pos, *pp.index + 1));
}
ParPosition const & pp = pimpl_->positions[last];
p.stack_.push_back(

View File

@ -20,6 +20,7 @@
class LyXText;
class InsetOld;
class Cursor;
class Buffer;
class BufferView;
class PosIterator;
@ -49,7 +50,7 @@ public:
///
ParagraphList & plist() const;
/// returns 'innermost' LyXText
LyXText * text(BufferView *) const;
LyXText * text(Buffer &) const;
/// returns innermost inset
InsetOld * inset() const;
/// returns index of cell in innermost inset

View File

@ -428,7 +428,7 @@ string getContentsOfAsciiFile(BufferView * bv, string const & f, bool asParagrap
string const getPossibleLabel(BufferView const & bv)
{
ParagraphList::iterator pit = bv.getLyXText()->cursorPar();
ParagraphList & plist = bv.getLyXText()->ownerParagraphs();
ParagraphList & plist = bv.getLyXText()->paragraphs();
LyXLayout_ptr layout = pit->layout();

View File

@ -459,15 +459,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
disable = !buf->params().tracking_changes;
break;
case LFUN_INSET_TOGGLE: {
LyXText * lt = view()->getLyXText();
disable = !(isEditableInset(lt->getInset())
|| (lt->inset_owner
&& lt->inset_owner->owner()
&& lt->inset_owner->owner()->isOpen()));
break;
}
case LFUN_INSET_SETTINGS: {
disable = true;
UpdatableInset * inset = view()->cursor().innerInset();
@ -1166,7 +1157,7 @@ void LyXFunc::dispatch(FuncRequest const & func, bool verbose)
}
par.lockPath(view());
LyXText * lt = par.text(view());
LyXText * lt = par.text(*view()->buffer());
// Set the cursor
lt->setCursor(par.pit(), 0);

View File

@ -30,7 +30,6 @@ class BufferParams;
class BufferView;
class Dimension;
class LColor_color;
class InsetText;
class LyXCursor;
class MetricsInfo;
class Paragraph;
@ -53,7 +52,7 @@ class LyXText : public TextCursor {
// Public Functions
public:
/// Constructor
LyXText(BufferView *, InsetText *, bool ininset, ParagraphList & plist);
LyXText(BufferView *, bool ininset);
///
void init(BufferView *);
@ -131,7 +130,7 @@ public:
/// draw text (only used for insets)
void draw(PainterInfo & pi, int x, int y) const;
///
/// try to handle that request
DispatchResult dispatch(FuncRequest const & cmd);
BufferView * bv();
@ -252,8 +251,8 @@ public:
/// Change the case of the word at cursor position.
void changeCase(TextCase action);
///
void toggleInset();
/// returns success
bool toggleInset();
///
void cutSelection(bool doclear = true, bool realcut = true);
///
@ -334,7 +333,7 @@ public:
//
// special owner functions
///
ParagraphList & ownerParagraphs() const;
ParagraphList & paragraphs() const;
/// return true if this is owned by an inset.
bool isInInset() const;
@ -405,7 +404,7 @@ public:
/// our buffer's default layout font
LyXFont defaultfont_;
///
InsetText * inset_owner;
int background_color_;
/// only the top-level LyXText has this non-zero
BufferView * bv_owner;
@ -415,7 +414,7 @@ public:
///
bool in_inset_;
///
ParagraphList * paragraphs_;
ParagraphList paragraphs_;
/// absolute document pixel coordinates of this LyXText
mutable int xo_;

View File

@ -271,10 +271,8 @@ void Paragraph::insert(pos_type start, string const & str,
}
bool Paragraph::checkInsertChar(LyXFont & font)
bool Paragraph::checkInsertChar(LyXFont &)
{
if (pimpl_->inset_owner)
return pimpl_->inset_owner->checkInsertChar(font);
return true;
}
@ -593,9 +591,7 @@ int Paragraph::stripLeadingSpaces()
bool Paragraph::hasSameLayout(Paragraph const & par) const
{
return
par.layout() == layout() &&
params().sameLayout(par.params());
return par.layout() == layout() && params().sameLayout(par.params());
}
@ -718,8 +714,8 @@ InsetBibitem * Paragraph::bibitem() const
namespace {
/* paragraphs inside floats need different alignment tags to avoid
unwanted space */
// paragraphs inside floats need different alignment tags to avoid
// unwanted space
bool noTrivlistCentering(UpdatableInset const * inset)
{
@ -1278,8 +1274,7 @@ void Paragraph::simpleLinuxDocOnePar(Buffer const & buf,
if (c == Paragraph::META_INSET) {
InsetOld const * inset = getInset(i);
inset->linuxdoc(buf, os, runparams);
getInset(i)->linuxdoc(buf, os, runparams);
font_old = font;
continue;
}
@ -1296,8 +1291,7 @@ void Paragraph::simpleLinuxDocOnePar(Buffer const & buf,
if (ws && !isFreeSpacing()) {
// in freespacing mode, spaces are
// non-breaking characters
if (desc_on) {// if char is ' ' then...
if (desc_on) { // if char is ' ' then...
++char_line_count;
sgmlLineBreak(os, char_line_count, 6);
os << "</tag>";
@ -1338,10 +1332,11 @@ void Paragraph::simpleDocBookOnePar(Buffer const & buf,
bool emph_flag = false;
LyXLayout_ptr const & style = layout();
LyXLayout_ptr const & defaultstyle
= buf.params().getLyXTextClass().defaultLayout();
LyXLayout_ptr const & defaultstyle =
buf.params().getLyXTextClass().defaultLayout();
LyXFont font_old = (style->labeltype == LABEL_MANUAL ? style->labelfont : style->font);
LyXFont font_old =
style->labeltype == LABEL_MANUAL ? style->labelfont : style->font;
int char_line_count = depth;
bool label_closed = true;

View File

@ -599,7 +599,7 @@ void RowPainter::paintFirst()
LyXLayout_ptr const & layout = pit_->layout();
if (buffer.params().paragraph_separation == BufferParams::PARSEP_SKIP) {
if (pit_ != text_.ownerParagraphs().begin()) {
if (pit_ != text_.paragraphs().begin()) {
if (layout->latextype == LATEX_PARAGRAPH
&& !pit_->getDepth()) {
y_top += buffer.params().getDefSkip().inPixels(bv_);
@ -618,7 +618,7 @@ void RowPainter::paintFirst()
int const ww = bv_.workWidth();
bool const is_rtl = pit_->isRightToLeftPar(bv_.buffer()->params());
bool const is_seq = isFirstInSequence(pit_, text_.ownerParagraphs());
bool const is_seq = isFirstInSequence(pit_, text_.paragraphs());
//lyxerr << "paintFirst: " << pit_->id() << " is_seq: " << is_seq << std::endl;
// should we print a label?
@ -712,7 +712,7 @@ void RowPainter::paintLast()
{
int const ww = bv_.workWidth();
bool const is_rtl = pit_->isRightToLeftPar(bv_.buffer()->params());
int const endlabel = getEndLabel(pit_, text_.ownerParagraphs());
int const endlabel = getEndLabel(pit_, text_.paragraphs());
// draw an endlabel
switch (endlabel) {
@ -860,7 +860,7 @@ int paintPars(BufferView const & bv, LyXText const & text,
int const y2 = bv.painter().paperHeight();
y -= bv.top_y();
ParagraphList::iterator end = text.ownerParagraphs().end();
ParagraphList::iterator end = text.paragraphs().end();
for ( ; pit != end; ++pit) {
RowList::iterator row = pit->rows.begin();
@ -890,5 +890,5 @@ int paintText(BufferView const & bv)
void paintTextInset(BufferView const & bv, LyXText const & text, int xo, int yo)
{
paintPars(bv, text, text.ownerParagraphs().begin(), xo, yo, 0);
paintPars(bv, text, text.paragraphs().begin(), xo, yo, 0);
}

View File

@ -241,9 +241,7 @@ bool getTokenValue(string const & str, const char * token, int & num)
bool getTokenValue(string const & str, const char * token, LyXAlignment & num)
{
string tmp;
if (!getTokenValue(str, token, tmp))
return false;
return string2type(tmp, num);
return getTokenValue(str, token, tmp) && string2type(tmp, num);
}
@ -251,9 +249,7 @@ bool getTokenValue(string const & str, const char * token,
LyXTabular::VAlignment & num)
{
string tmp;
if (!getTokenValue(str, token, tmp))
return false;
return string2type(tmp, num);
return getTokenValue(str, token, tmp) && string2type(tmp, num);
}
@ -261,9 +257,7 @@ bool getTokenValue(string const & str, const char * token,
LyXTabular::BoxType & num)
{
string tmp;
if (!getTokenValue(str, token, tmp))
return false;
return string2type(tmp, num);
return getTokenValue(str, token, tmp) && string2type(tmp, num);
}
@ -273,9 +267,7 @@ bool getTokenValue(string const & str, const char * token, bool & flag)
// not in the file-format.
flag = false;
string tmp;
if (!getTokenValue(str, token, tmp))
return false;
return string2type(tmp, flag);
return getTokenValue(str, token, tmp) && string2type(tmp, flag);
}
@ -285,9 +277,7 @@ bool getTokenValue(string const & str, const char * token, LyXLength & len)
// in the file format.
len = LyXLength();
string tmp;
if (!getTokenValue(str, token, tmp))
return false;
return isValidLength(tmp, &len);
return getTokenValue(str, token, tmp) && isValidLength(tmp, &len);
}
@ -1397,7 +1387,7 @@ void LyXTabular::setMultiColumn(Buffer * buffer, int cell, int number)
for (int i = 1; i < number; ++i) {
cellstruct & cs1 = cellinfo_of_cell(cell + i);
cs1.multicolumn = CELL_PART_OF_MULTICOLUMN;
cs.inset.appendParagraphs(buffer, cs1.inset.paragraphs);
cs.inset.appendParagraphs(buffer, cs1.inset.paragraphs());
cs1.inset.clear(false);
}
set_row_column_number_info();
@ -2018,8 +2008,8 @@ int LyXTabular::TeXRow(ostream & os, int i, Buffer const & buf,
ret += TeXCellPreamble(os, cell);
InsetText & inset = getCellInset(cell);
bool rtl = inset.paragraphs.begin()->isRightToLeftPar(bufferparams) &&
!inset.paragraphs.begin()->empty() && getPWidth(cell).zero();
bool rtl = inset.paragraphs().begin()->isRightToLeftPar(bufferparams) &&
!inset.paragraphs().begin()->empty() && getPWidth(cell).zero();
if (rtl)
os << "\\R{";
@ -2601,7 +2591,7 @@ void LyXTabular::getLabelList(Buffer const & buffer,
LyXTabular::BoxType LyXTabular::useParbox(int cell) const
{
ParagraphList const & parlist = getCellInset(cell).paragraphs;
ParagraphList const & parlist = getCellInset(cell).paragraphs();
ParagraphList::const_iterator cit = parlist.begin();
ParagraphList::const_iterator end = parlist.end();

View File

@ -108,8 +108,8 @@ BufferView * LyXText::bv() const
void LyXText::updateParPositions()
{
ParagraphList::iterator pit = ownerParagraphs().begin();
ParagraphList::iterator end = ownerParagraphs().end();
ParagraphList::iterator pit = paragraphs().begin();
ParagraphList::iterator end = paragraphs().end();
for (height = 0; pit != end; ++pit) {
pit->y = height;
height += pit->height;
@ -192,9 +192,9 @@ int LyXText::leftMargin(ParagraphList::iterator pit, pos_type pos) const
if (pit->getDepth() == 0) {
if (pit->layout() == tclass.defaultLayout()) {
// find the previous same level paragraph
if (pit != ownerParagraphs().begin()) {
if (pit != paragraphs().begin()) {
ParagraphList::iterator newpit =
depthHook(pit, ownerParagraphs(), pit->getDepth());
depthHook(pit, paragraphs(), pit->getDepth());
if (newpit == pit && newpit->layout()->nextnoindent)
parindent.erase();
}
@ -202,16 +202,16 @@ int LyXText::leftMargin(ParagraphList::iterator pit, pos_type pos) const
} else {
// find the next level paragraph
ParagraphList::iterator newpar =
outerHook(pit, ownerParagraphs());
outerHook(pit, paragraphs());
// Make a corresponding row. Need to call leftMargin()
// to check whether it is a sufficent paragraph.
if (newpar != ownerParagraphs().end()
if (newpar != paragraphs().end()
&& newpar->layout()->isEnvironment()) {
x = leftMargin(newpar);
}
if (newpar != ownerParagraphs().end()
if (newpar != paragraphs().end()
&& pit->layout() == tclass.defaultLayout()) {
if (newpar->params().noindent())
parindent.erase();
@ -266,7 +266,7 @@ int LyXText::leftMargin(ParagraphList::iterator pit, pos_type pos) const
// theorems (JMarc)
|| (layout->labeltype == LABEL_STATIC
&& layout->latextype == LATEX_ENVIRONMENT
&& !isFirstInSequence(pit, ownerParagraphs()))) {
&& !isFirstInSequence(pit, paragraphs()))) {
x += font_metrics::signedWidth(layout->leftmargin,
labelfont);
} else if (layout->labeltype != LABEL_TOP_ENVIRONMENT
@ -298,11 +298,8 @@ int LyXText::leftMargin(ParagraphList::iterator pit, pos_type pos) const
}
}
if (!pit->params().leftIndent().zero()) {
int const tw = inset_owner ?
inset_owner->latexTextWidth(bv()) : textWidth();
x += pit->params().leftIndent().inPixels(tw);
}
if (!pit->params().leftIndent().zero())
x += pit->params().leftIndent().inPixels(textWidth());
LyXAlignment align;
@ -318,7 +315,7 @@ int LyXText::leftMargin(ParagraphList::iterator pit, pos_type pos) const
|| layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT
|| (layout->labeltype == LABEL_STATIC
&& layout->latextype == LATEX_ENVIRONMENT
&& !isFirstInSequence(pit, ownerParagraphs())))
&& !isFirstInSequence(pit, paragraphs())))
&& align == LYX_ALIGN_BLOCK
&& !pit->params().noindent()
// in tabulars and ert paragraphs are never indented!
@ -578,9 +575,7 @@ int LyXText::labelFill(ParagraphList::iterator pit, Row const & row) const
LColor_color LyXText::backgroundColor() const
{
if (inset_owner)
return inset_owner->backgroundColor();
return LColor::background;
return LColor_color(LColor::color(background_color_));
}
@ -649,7 +644,7 @@ void LyXText::setHeightOfRow(ParagraphList::iterator pit, Row & row)
// some parksips VERY EASY IMPLEMENTATION
if (bv()->buffer()->params().paragraph_separation
== BufferParams::PARSEP_SKIP
&& pit != ownerParagraphs().begin()
&& pit != paragraphs().begin()
&& ((layout->isParagraph() && pit->getDepth() == 0)
|| (boost::prior(pit)->layout()->isParagraph()
&& boost::prior(pit)->getDepth() == 0)))
@ -671,7 +666,7 @@ void LyXText::setHeightOfRow(ParagraphList::iterator pit, Row & row)
if ((layout->labeltype == LABEL_TOP_ENVIRONMENT
|| layout->labeltype == LABEL_BIBLIO
|| layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)
&& isFirstInSequence(pit, ownerParagraphs())
&& isFirstInSequence(pit, paragraphs())
&& !pit->getLabelstring().empty())
{
labeladdon = int(
@ -686,22 +681,22 @@ void LyXText::setHeightOfRow(ParagraphList::iterator pit, Row & row)
// environment.
ParagraphList::iterator prev =
depthHook(pit, ownerParagraphs(), pit->getDepth());
depthHook(pit, paragraphs(), pit->getDepth());
if (prev != pit
&& prev->layout() == layout
&& prev->getDepth() == pit->getDepth()
&& prev->getLabelWidthString() == pit->getLabelWidthString())
{
layoutasc = layout->itemsep * dh;
} else if (pit != ownerParagraphs().begin() || row.pos() != 0) {
} else if (pit != paragraphs().begin() || row.pos() != 0) {
if (layout->topsep > 0)
layoutasc = layout->topsep * dh;
}
prev = outerHook(pit, ownerParagraphs());
if (prev != ownerParagraphs().end()) {
prev = outerHook(pit, paragraphs());
if (prev != paragraphs().end()) {
maxasc += int(prev->layout()->parsep * dh);
} else if (pit != ownerParagraphs().begin()) {
} else if (pit != paragraphs().begin()) {
ParagraphList::iterator prior_pit = boost::prior(pit);
if (prior_pit->getDepth() != 0 ||
prior_pit->layout() == layout) {
@ -716,14 +711,14 @@ void LyXText::setHeightOfRow(ParagraphList::iterator pit, Row & row)
// a section, or between the items of a itemize or enumerate
// environment
ParagraphList::iterator nextpit = boost::next(pit);
if (nextpit != ownerParagraphs().end()) {
if (nextpit != paragraphs().end()) {
ParagraphList::iterator cpit = pit;
double usual = 0;
double unusual = 0;
if (cpit->getDepth() > nextpit->getDepth()) {
usual = cpit->layout()->bottomsep * dh;
cpit = depthHook(cpit, ownerParagraphs(), nextpit->getDepth());
cpit = depthHook(cpit, paragraphs(), nextpit->getDepth());
if (cpit->layout() != nextpit->layout()
|| nextpit->getLabelWidthString() != cpit->getLabelWidthString())
{
@ -1242,7 +1237,7 @@ void LyXText::changeCase(LyXText::TextCase action)
pos_type pos = from.pos();
int par = from.par();
while (par != int(ownerParagraphs().size()) &&
while (par != int(paragraphs().size()) &&
(pos != to.pos() || par != to.par())) {
ParagraphList::iterator pit = getPar(par);
if (pos == pit->size()) {
@ -1400,8 +1395,8 @@ ParagraphList::iterator LyXText::getPar(LyXCursor const & cur) const
ParagraphList::iterator LyXText::getPar(int par) const
{
BOOST_ASSERT(par >= 0);
BOOST_ASSERT(par < int(ownerParagraphs().size()));
ParagraphList::iterator pit = ownerParagraphs().begin();
BOOST_ASSERT(par < int(paragraphs().size()));
ParagraphList::iterator pit = paragraphs().begin();
std::advance(pit, par);
return pit;
}
@ -1413,8 +1408,8 @@ LyXText::getRowNearY(int y, ParagraphList::iterator & pit) const
//lyxerr << "getRowNearY: y " << y << endl;
#if 1
ParagraphList::iterator const
pend = boost::prior(ownerParagraphs().end());
pit = ownerParagraphs().begin();
pend = boost::prior(paragraphs().end());
pit = paragraphs().begin();
while (int(pit->y + pit->height) < y && pit != pend)
++pit;
@ -1426,7 +1421,7 @@ LyXText::getRowNearY(int y, ParagraphList::iterator & pit) const
return rit;
#else
pit = boost::prior(ownerParagraphs().end());
pit = boost::prior(paragraphs().end());
RowList::iterator rit = lastRow();
RowList::iterator rbegin = firstRow();
@ -1447,13 +1442,13 @@ int LyXText::getDepth() const
RowList::iterator LyXText::firstRow() const
{
return ownerParagraphs().front().rows.begin();
return paragraphs().front().rows.begin();
}
ParagraphList::iterator LyXText::firstPar() const
{
return ownerParagraphs().begin();
return paragraphs().begin();
}
@ -1471,13 +1466,13 @@ ParagraphList::iterator LyXText::lastPar() const
RowList::iterator LyXText::endRow() const
{
return ownerParagraphs().back().rows.end();
return paragraphs().back().rows.end();
}
ParagraphList::iterator LyXText::endPar() const
{
return ownerParagraphs().end();
return paragraphs().end();
}
@ -1487,7 +1482,7 @@ void LyXText::nextRow(ParagraphList::iterator & pit,
++rit;
if (rit == pit->rows.end()) {
++pit;
if (pit == ownerParagraphs().end())
if (pit == paragraphs().end())
--pit;
else
rit = pit->rows.begin();
@ -1501,7 +1496,7 @@ void LyXText::previousRow(ParagraphList::iterator & pit,
if (rit != pit->rows.begin())
--rit;
else {
BOOST_ASSERT(pit != ownerParagraphs().begin());
BOOST_ASSERT(pit != paragraphs().begin());
--pit;
rit = boost::prior(pit->rows.end());
}
@ -1540,7 +1535,7 @@ string LyXText::selectionAsString(Buffer const & buffer, bool label) const
int LyXText::parOffset(ParagraphList::iterator pit) const
{
return std::distance(ownerParagraphs().begin(), pit);
return std::distance(paragraphs().begin(), pit);
}
@ -1603,7 +1598,7 @@ void LyXText::redoParagraph(ParagraphList::iterator pit)
void LyXText::fullRebreak()
{
redoParagraphs(ownerParagraphs().begin(), ownerParagraphs().end());
redoParagraphs(paragraphs().begin(), paragraphs().end());
redoCursor();
selection.cursor = cursor;
}
@ -1618,9 +1613,9 @@ void LyXText::metrics(MetricsInfo & mi, Dimension & dim)
// << " textWidth: " << textWidth() << "\nfont: " << mi.base.font << endl;
// Rebuild row cache. This recomputes height as well.
redoParagraphs(ownerParagraphs().begin(), ownerParagraphs().end());
redoParagraphs(paragraphs().begin(), paragraphs().end());
width = maxParagraphWidth(ownerParagraphs());
width = maxParagraphWidth(paragraphs());
// final dimension
dim.asc = firstRow()->ascent_of_text();
@ -1641,13 +1636,13 @@ void LyXText::draw(PainterInfo & pi, int x, int y) const
bool LyXText::isLastRow(ParagraphList::iterator pit, Row const & row) const
{
return row.endpos() >= pit->size()
&& boost::next(pit) == ownerParagraphs().end();
&& boost::next(pit) == paragraphs().end();
}
bool LyXText::isFirstRow(ParagraphList::iterator pit, Row const & row) const
{
return row.pos() == 0 && pit == ownerParagraphs().begin();
return row.pos() == 0 && pit == paragraphs().begin();
}
@ -1671,7 +1666,7 @@ void LyXText::cursorLeftOneWord(LyXCursor & cursor)
pit->isHfill(pos - 1))) {
--pos;
} else if (!pos) {
if (pit != ownerParagraphs().begin()) {
if (pit != paragraphs().begin()) {
--pit;
pos = pit->size();
}
@ -1692,7 +1687,7 @@ void LyXText::cursorRightOneWord(LyXCursor & cursor)
pos_type pos = cursor.pos();
if (pos == pit->size() &&
boost::next(pit) != ownerParagraphs().end()) {
boost::next(pit) != paragraphs().end()) {
++pit;
pos = 0;
} else {

View File

@ -37,6 +37,7 @@
#include "funcrequest.h"
#include "gettext.h"
#include "language.h"
#include "LColor.h"
#include "lyxrc.h"
#include "lyxrow.h"
#include "lyxrow_funcs.h"
@ -71,11 +72,10 @@ using std::ostringstream;
using std::string;
LyXText::LyXText(BufferView * bv, InsetText * inset, bool in_inset,
ParagraphList & paragraphs)
LyXText::LyXText(BufferView * bv, bool in_inset)
: height(0), width(0), textwidth_(bv ? bv->workWidth() : 100),
inset_owner(inset), bv_owner(bv),
in_inset_(in_inset), paragraphs_(&paragraphs), xo_(0), yo_(0)
background_color_(LColor::background),
bv_owner(bv), in_inset_(in_inset), xo_(0), yo_(0)
{}
@ -83,8 +83,8 @@ void LyXText::init(BufferView * bview)
{
bv_owner = bview;
ParagraphList::iterator const beg = ownerParagraphs().begin();
ParagraphList::iterator const end = ownerParagraphs().end();
ParagraphList::iterator const beg = paragraphs().begin();
ParagraphList::iterator const end = paragraphs().end();
for (ParagraphList::iterator pit = beg; pit != end; ++pit)
pit->rows.clear();
@ -140,7 +140,7 @@ LyXFont LyXText::getFont(ParagraphList::iterator pit, pos_type pos) const
pit->inInset()->getDrawFont(font);
// Realize with the fonts of lesser depth.
//font.realize(outerFont(pit, ownerParagraphs()));
//font.realize(outerFont(pit, paragraphs()));
font.realize(defaultfont_);
return font;
@ -156,7 +156,7 @@ LyXFont LyXText::getLayoutFont(ParagraphList::iterator pit) const
LyXFont font = layout->font;
// Realize with the fonts of lesser depth.
//font.realize(outerFont(pit, ownerParagraphs()));
//font.realize(outerFont(pit, paragraphs()));
font.realize(defaultfont_);
return font;
@ -172,7 +172,7 @@ LyXFont LyXText::getLabelFont(ParagraphList::iterator pit) const
LyXFont font = layout->labelfont;
// Realize with the fonts of lesser depth.
font.realize(outerFont(pit, ownerParagraphs()));
font.realize(outerFont(pit, paragraphs()));
font.realize(defaultfont_);
return font;
@ -197,10 +197,10 @@ void LyXText::setCharFont(
if (pit->getDepth()) {
ParagraphList::iterator tp = pit;
while (!layoutfont.resolved() &&
tp != ownerParagraphs().end() &&
tp != paragraphs().end() &&
tp->getDepth()) {
tp = outerHook(tp, ownerParagraphs());
if (tp != ownerParagraphs().end())
tp = outerHook(tp, paragraphs());
if (tp != paragraphs().end())
layoutfont.realize(tp->layout()->font);
}
}
@ -226,21 +226,12 @@ InsetOld * LyXText::getInset() const
}
void LyXText::toggleInset()
bool LyXText::toggleInset()
{
InsetOld * inset = getInset();
// is there an editable inset at cursor position?
if (!isEditableInset(inset)) {
// No, try to see if we are inside a collapsable inset
if (inset_owner && inset_owner->owner()
&& inset_owner->owner()->isOpen()) {
finishUndo();
inset_owner->owner()->close();
bv()->getLyXText()->cursorRight(true);
bv()->updateParagraphDialog();
}
return;
}
if (!isEditableInset(inset))
return false;
//bv()->owner()->message(inset->editMessage());
// do we want to keep this?? (JMarc)
@ -251,6 +242,7 @@ void LyXText::toggleInset()
inset->close();
else
inset->open();
return true;
}
@ -283,7 +275,7 @@ LyXText::setLayout(LyXCursor & cur, LyXCursor & sstart_cur,
{
ParagraphList::iterator endpit = boost::next(getPar(send_cur));
ParagraphList::iterator undoendpit = endpit;
ParagraphList::iterator pars_end = ownerParagraphs().end();
ParagraphList::iterator pars_end = paragraphs().end();
if (endpit != pars_end && endpit->getDepth()) {
while (endpit != pars_end && endpit->getDepth()) {
@ -312,7 +304,7 @@ LyXText::setLayout(LyXCursor & cur, LyXCursor & sstart_cur,
makeFontEntriesLayoutSpecific(bufparams, *pit);
if (lyxlayout->margintype == MARGIN_MANUAL)
pit->setLabelWidthString(lyxlayout->labelstring());
cur.par(std::distance(ownerParagraphs().begin(), pit));
cur.par(std::distance(paragraphs().begin(), pit));
++pit;
} while (pit != epit);
@ -391,7 +383,7 @@ bool LyXText::changeDepthAllowed(bv_funcs::DEPTH_CHANGE type)
ParagraphList::iterator beg, end;
getSelectionSpan(*this, beg, end);
int max_depth = 0;
if (beg != ownerParagraphs().begin())
if (beg != paragraphs().begin())
max_depth = boost::prior(beg)->getMaxDepthAfter();
for (ParagraphList::iterator pit = beg; pit != end; ++pit) {
@ -411,7 +403,7 @@ void LyXText::changeDepth(bv_funcs::DEPTH_CHANGE type)
recUndo(parOffset(beg), parOffset(end) - 1);
int max_depth = 0;
if (beg != ownerParagraphs().begin())
if (beg != paragraphs().begin())
max_depth = boost::prior(beg)->getMaxDepthAfter();
for (ParagraphList::iterator pit = beg; pit != end; ++pit) {
@ -464,8 +456,8 @@ void LyXText::setFont(LyXFont const & font, bool toggleall)
ParagraphList::iterator beg = getPar(selection.start.par());
ParagraphList::iterator end = getPar(selection.end.par());
PosIterator pos(&ownerParagraphs(), beg, selection.start.pos());
PosIterator posend(&ownerParagraphs(), end, selection.end.pos());
PosIterator pos(&paragraphs(), beg, selection.start.pos());
PosIterator posend(&paragraphs(), end, selection.end.pos());
BufferParams const & params = bv()->buffer()->params();
@ -524,14 +516,14 @@ void LyXText::cursorEnd()
void LyXText::cursorTop()
{
setCursor(ownerParagraphs().begin(), 0);
setCursor(paragraphs().begin(), 0);
}
void LyXText::cursorBottom()
{
ParagraphList::iterator lastpit =
boost::prior(ownerParagraphs().end());
boost::prior(paragraphs().end());
setCursor(lastpit, lastpit->size());
}
@ -599,7 +591,7 @@ string LyXText::getStringToIndex()
}
// the DTP switches for paragraphs. LyX will store them in the first
// the DTP switches for paragraphs(). LyX will store them in the first
// physical paragraph. When a paragraph is broken, the top settings rest,
// the bottom settings are given to the new one. So I can make sure,
// they do not duplicate themself and you cannot play dirty tricks with
@ -615,7 +607,7 @@ void LyXText::setParagraph(
// make sure that the depth behind the selection are restored, too
ParagraphList::iterator endpit = boost::next(getPar(selection.end));
ParagraphList::iterator undoendpit = endpit;
ParagraphList::iterator pars_end = ownerParagraphs().end();
ParagraphList::iterator pars_end = paragraphs().end();
if (endpit != pars_end && endpit->getDepth()) {
while (endpit != pars_end && endpit->getDepth()) {
@ -765,7 +757,7 @@ void LyXText::setCounter(Buffer const & buf, ParagraphList::iterator pit)
BufferParams const & bufparams = buf.params();
LyXTextClass const & textclass = bufparams.getLyXTextClass();
LyXLayout_ptr const & layout = pit->layout();
ParagraphList::iterator first_pit = ownerParagraphs().begin();
ParagraphList::iterator first_pit = paragraphs().begin();
Counters & counters = textclass.counters();
// Always reset
@ -866,7 +858,7 @@ void LyXText::setCounter(Buffer const & buf, ParagraphList::iterator pit)
// the caption hack:
if (layout->labeltype == LABEL_SENSITIVE) {
ParagraphList::iterator end = ownerParagraphs().end();
ParagraphList::iterator end = paragraphs().end();
ParagraphList::iterator tmppit = pit;
InsetOld * in = 0;
bool isOK = false;
@ -923,8 +915,8 @@ void LyXText::updateCounters()
bool update_pos = false;
ParagraphList::iterator beg = ownerParagraphs().begin();
ParagraphList::iterator end = ownerParagraphs().end();
ParagraphList::iterator beg = paragraphs().begin();
ParagraphList::iterator end = paragraphs().end();
for (ParagraphList::iterator pit = beg; pit != end; ++pit) {
string const oldLabel = pit->params().labelString();
size_t maxdepth = 0;
@ -992,7 +984,7 @@ void LyXText::cutSelection(bool doclear, bool realcut)
// make sure that the depth behind the selection are restored, too
ParagraphList::iterator endpit = boost::next(getPar(selection.end.par()));
ParagraphList::iterator undoendpit = endpit;
ParagraphList::iterator pars_end = ownerParagraphs().end();
ParagraphList::iterator pars_end = paragraphs().end();
if (endpit != pars_end && endpit->getDepth()) {
while (endpit != pars_end && endpit->getDepth()) {
@ -1012,13 +1004,13 @@ void LyXText::cutSelection(bool doclear, bool realcut)
BufferParams const & bufparams = bv()->buffer()->params();
boost::tie(endpit, endpos) = realcut ?
CutAndPaste::cutSelection(bufparams,
ownerParagraphs(),
paragraphs(),
getPar(selection.start.par()), endpit,
selection.start.pos(), endpos,
bufparams.textclass,
doclear)
: CutAndPaste::eraseSelection(bufparams,
ownerParagraphs(),
paragraphs(),
getPar(selection.start.par()), endpit,
selection.start.pos(), endpos,
doclear);
@ -1083,7 +1075,7 @@ void LyXText::pasteSelection(size_t sel_index)
boost::tie(ppp, endpit) =
CutAndPaste::pasteSelection(*bv()->buffer(),
ownerParagraphs(),
paragraphs(),
cursorPar(), cursor.pos(),
bv()->buffer()->params().textclass,
sel_index, el);
@ -1168,8 +1160,8 @@ void LyXText::insertStringAsLines(string const & str)
}
// turns double-CR to single CR, others where converted into one
// blank. Then InsertStringAsLines is called
// turn double CR to single CR, others are converted into one
// blank. Then insertStringAsLines is called
void LyXText::insertStringAsParagraphs(string const & str)
{
string linestr(str);
@ -1180,7 +1172,7 @@ void LyXText::insertStringAsParagraphs(string const & str)
if (linestr[i] == '\n') {
if (newline_inserted) {
// we know that \r will be ignored by
// InsertStringA. Of course, it is a dirty
// insertStringAsLines. Of course, it is a dirty
// trick, but it works...
linestr[i - 1] = '\r';
linestr[i] = '\n';
@ -1202,7 +1194,8 @@ void LyXText::setCursor(ParagraphList::iterator pit, pos_type pos)
}
bool LyXText::setCursor(paroffset_type par, pos_type pos, bool setfont, bool boundary)
bool LyXText::setCursor(paroffset_type par, pos_type pos, bool setfont,
bool boundary)
{
LyXCursor old_cursor = cursor;
setCursorIntern(par, pos, setfont, boundary);
@ -1228,14 +1221,14 @@ void LyXText::redoCursor()
void LyXText::setCursor(LyXCursor & cur, paroffset_type par,
pos_type pos, bool boundary)
{
BOOST_ASSERT(par != int(ownerParagraphs().size()));
BOOST_ASSERT(par != int(paragraphs().size()));
cur.par(par);
cur.pos(pos);
cur.boundary(boundary);
// no rows, no fun...
if (ownerParagraphs().begin()->rows.empty())
if (paragraphs().begin()->rows.empty())
return;
// get the cursor y position in text
@ -1413,8 +1406,7 @@ pos_type LyXText::getColumnNearX(ParagraphList::iterator pit,
double last_tmpx = tmpx;
if (body_pos > 0 &&
(body_pos > end ||
!pit->isLineSeparator(body_pos - 1)))
(body_pos > end || !pit->isLineSeparator(body_pos - 1)))
body_pos = 0;
// check for empty row
@ -1557,7 +1549,7 @@ DispatchResult LyXText::moveLeft()
DispatchResult LyXText::moveRightIntern(bool front, bool activate_inset, bool selecting)
{
ParagraphList::iterator c_par = cursorPar();
if (boost::next(c_par) == ownerParagraphs().end()
if (boost::next(c_par) == paragraphs().end()
&& cursor.pos() >= c_par->size())
return DispatchResult(false, FINISHED_RIGHT);
if (activate_inset && checkAndActivateInset(front))
@ -1639,7 +1631,7 @@ bool LyXText::cursorRight(bool internal)
return true;
}
if (cursor.par() + 1 != int(ownerParagraphs().size())) {
if (cursor.par() + 1 != int(paragraphs().size())) {
setCursor(cursor.par() + 1, 0);
return true;
}
@ -1685,7 +1677,7 @@ void LyXText::cursorUpParagraph()
ParagraphList::iterator cpit = cursorPar();
if (cursor.pos() > 0)
setCursor(cpit, 0);
else if (cpit != ownerParagraphs().begin())
else if (cpit != paragraphs().begin())
setCursor(boost::prior(cpit), 0);
}
@ -1695,7 +1687,7 @@ void LyXText::cursorDownParagraph()
ParagraphList::iterator pit = cursorPar();
ParagraphList::iterator next_pit = boost::next(pit);
if (next_pit != ownerParagraphs().end())
if (next_pit != paragraphs().end())
setCursor(next_pit, 0);
else
setCursor(pit, pit->size());
@ -1747,7 +1739,7 @@ bool LyXText::deleteEmptyParagraphMechanism(LyXCursor const & old_cursor)
Copy and Paste to hopefully do some sensible things.
There are still some small problems that can lead to
double spaces stored in the document file or space at
the beginning of paragraphs. This happens if you have
the beginning of paragraphs(). This happens if you have
the cursor between to spaces and then save. Or if you
cut and paste and the selection have a space at the
beginning and then save right after the paste. I am
@ -1794,7 +1786,7 @@ bool LyXText::deleteEmptyParagraphMechanism(LyXCursor const & old_cursor)
}
// don't delete anything if this is the ONLY paragraph!
if (ownerParagraphs().size() == 1)
if (paragraphs().size() == 1)
return false;
// Do not delete empty paragraphs with keepempty set.
@ -1824,7 +1816,7 @@ bool LyXText::deleteEmptyParagraphMechanism(LyXCursor const & old_cursor)
cursor = old_cursor; // that undo can restore the right cursor position
ParagraphList::iterator endpit = boost::next(old_pit);
while (endpit != ownerParagraphs().end() && endpit->getDepth())
while (endpit != paragraphs().end() && endpit->getDepth())
++endpit;
recUndo(parOffset(old_pit), parOffset(endpit) - 1);
@ -1833,7 +1825,7 @@ bool LyXText::deleteEmptyParagraphMechanism(LyXCursor const & old_cursor)
// cache cursor pit
ParagraphList::iterator tmppit = cursorPar();
// delete old par
ownerParagraphs().erase(old_pit);
paragraphs().erase(old_pit);
// update cursor par offset
cursor.par(parOffset(tmppit));
redoParagraph();
@ -1860,9 +1852,9 @@ bool LyXText::deleteEmptyParagraphMechanism(LyXCursor const & old_cursor)
}
ParagraphList & LyXText::ownerParagraphs() const
ParagraphList & LyXText::paragraphs() const
{
return *paragraphs_;
return const_cast<ParagraphList &>(paragraphs_);
}
@ -1880,13 +1872,11 @@ void LyXText::recUndo(lyx::paroffset_type par) const
bool LyXText::isInInset() const
{
// Sub-level has non-null bv owner and non-null inset owner.
return inset_owner != 0;
return in_inset_;
}
int defaultRowHeight()
{
LyXFont const font(LyXFont::ALL_SANE);
return int(font_metrics::maxHeight(font) * 1.2);
return int(font_metrics::maxHeight(LyXFont(LyXFont::ALL_SANE)) * 1.2);
}

View File

@ -258,7 +258,7 @@ InsetOld * LyXText::checkInsetHit(int x, int y)
ParagraphList::iterator pit;
ParagraphList::iterator end;
getParsInRange(ownerParagraphs(),
getParsInRange(paragraphs(),
bv()->top_y() - yo_,
bv()->top_y() - yo_ + bv()->workHeight(),
pit, end);
@ -293,7 +293,7 @@ InsetOld * LyXText::checkInsetHit(int x, int y)
bool LyXText::gotoNextInset(vector<InsetOld::Code> const & codes,
string const & contents)
{
ParagraphList::iterator end = ownerParagraphs().end();
ParagraphList::iterator end = paragraphs().end();
ParagraphList::iterator pit = cursorPar();
pos_type pos = cursor.pos();
@ -337,7 +337,7 @@ void LyXText::gotoInset(vector<InsetOld::Code> const & codes,
}
if (!gotoNextInset(codes, contents)) {
if (cursor.pos() || cursorPar() != ownerParagraphs().begin()) {
if (cursor.pos() || cursorPar() != paragraphs().begin()) {
LyXCursor tmp = cursor;
cursor.par(0);
cursor.pos(0);
@ -467,8 +467,8 @@ DispatchResult LyXText::dispatch(FuncRequest const & cmd)
bool start = !pit->params().startOfAppendix();
// ensure that we have only one start_of_appendix in this document
ParagraphList::iterator tmp = ownerParagraphs().begin();
ParagraphList::iterator end = ownerParagraphs().end();
ParagraphList::iterator tmp = paragraphs().begin();
ParagraphList::iterator end = paragraphs().end();
for (; tmp != end; ++tmp) {
if (tmp->params().startOfAppendix()) {
@ -889,7 +889,8 @@ DispatchResult LyXText::dispatch(FuncRequest const & cmd)
case LFUN_INSET_TOGGLE:
clearSelection();
toggleInset();
if (!toggleInset())
return DispatchResult(false);
bv->update();
bv->switchKeyMap();
break;
@ -996,14 +997,14 @@ DispatchResult LyXText::dispatch(FuncRequest const & cmd)
break;
case LFUN_BEGINNINGBUFSEL:
if (inset_owner)
if (in_inset_)
return DispatchResult(false);
cursorTop();
finishChange(bv, true);
break;
case LFUN_ENDBUFSEL:
if (inset_owner)
if (in_inset_)
return DispatchResult(false);
cursorBottom();
finishChange(bv, true);

View File

@ -61,15 +61,14 @@ std::ostream & operator<<(std::ostream & os, Undo const & undo)
// translates LyXText pointer into offset count from document begin
ParIterator text2pit(BufferView * bv, LyXText * text, int & tcount)
ParIterator text2pit(Buffer & buf, LyXText * text, int & tcount)
{
tcount = 0;
Buffer * buf = text->bv()->buffer();
ParIterator pit = buf->par_iterator_begin();
ParIterator end = buf->par_iterator_end();
ParIterator pit = buf.par_iterator_begin();
ParIterator end = buf.par_iterator_end();
for ( ; pit != end; ++pit, ++tcount)
if (pit.text(bv) == text)
if (pit.text(buf) == text)
return pit;
lyxerr << "undo: should not happen" << std::endl;
return end;
@ -77,11 +76,10 @@ ParIterator text2pit(BufferView * bv, LyXText * text, int & tcount)
// translates offset from buffer begin to ParIterator
ParIterator num2pit(BufferView * bv, int num)
ParIterator num2pit(Buffer & buf, int num)
{
Buffer * buf = bv->buffer();
ParIterator pit = buf->par_iterator_begin();
ParIterator end = buf->par_iterator_end();
ParIterator pit = buf.par_iterator_begin();
ParIterator end = buf.par_iterator_end();
for ( ; num && pit != end; ++pit, --num)
;
@ -92,7 +90,7 @@ ParIterator num2pit(BufferView * bv, int num)
// don't crash early...
lyxerr << "undo: num2pit: num: " << num << std::endl;
BOOST_ASSERT(false);
return buf->par_iterator_begin();
return buf.par_iterator_begin();
}
@ -100,19 +98,19 @@ void recordUndo(Undo::undo_kind kind,
LyXText * text, paroffset_type first_par, paroffset_type last_par,
limited_stack<Undo> & stack)
{
Buffer * buf = text->bv()->buffer();
Buffer & buf = *text->bv()->buffer();
int const end_par = text->ownerParagraphs().size() - last_par;
int const end_par = text->paragraphs().size() - last_par;
// Undo::ATOMIC are always recorded (no overlapping there).
// overlapping only with insert and delete inside one paragraph:
// nobody wants all removed character appear one by one when undoing.
if (!undo_finished && kind != Undo::ATOMIC) {
// Check whether storing is needed.
if (!buf->undostack().empty()
&& buf->undostack().top().kind == kind
&& buf->undostack().top().first_par == first_par
&& buf->undostack().top().end_par == end_par) {
if (!buf.undostack().empty()
&& buf.undostack().top().kind == kind
&& buf.undostack().top().first_par == first_par
&& buf.undostack().top().end_par == end_par) {
// No additonal undo recording needed -
// effectively, we combine undo recordings to one.
return;
@ -121,7 +119,7 @@ void recordUndo(Undo::undo_kind kind,
// make and push the Undo entry
int textnum;
ParIterator pit = text2pit(text->bv(), text, textnum);
ParIterator pit = text2pit(buf, text, textnum);
stack.push(Undo(kind, textnum, pit.index(),
first_par, end_par, text->cursor.par(), text->cursor.pos()));
lyxerr << "undo record: " << stack.top() << std::endl;
@ -129,7 +127,7 @@ void recordUndo(Undo::undo_kind kind,
// record the relevant paragraphs
ParagraphList & undo_pars = stack.top().pars;
ParagraphList & plist = text->ownerParagraphs();
ParagraphList & plist = text->paragraphs();
ParagraphList::iterator first = plist.begin();
advance(first, first_par);
ParagraphList::iterator last = plist.begin();
@ -147,10 +145,11 @@ void recordUndo(Undo::undo_kind kind,
// returns false if no undo possible
bool performUndoOrRedo(BufferView * bv, Undo const & undo)
{
Buffer & buf = *bv->buffer();
lyxerr << "undo, performing: " << undo << std::endl;
ParIterator pit = num2pit(bv, undo.text);
LyXText * text = pit.text(bv);
ParagraphList & plist = text->ownerParagraphs();
ParIterator pit = num2pit(buf, undo.text);
LyXText * text = pit.text(buf);
ParagraphList & plist = text->paragraphs();
// remove new stuff between first and last
{
@ -171,7 +170,7 @@ bool performUndoOrRedo(BufferView * bv, Undo const & undo)
}
// set cursor
lyxerr << "undo, text: " << undo.text
lyxerr << "undo, text: " << undo.text
<< " inset: " << pit.inset()
<< " index: " << undo.index
<< " par: " << undo.cursor_par
@ -188,9 +187,10 @@ bool performUndoOrRedo(BufferView * bv, Undo const & undo)
text->updateCounters();
// rebreak the entire lyxtext
bv->text()->fullRebreak();
buf.text().fullRebreak();
pit.lockPath(bv);
text->setCursor(undo.cursor_par, undo.cursor_pos);
finishUndo();
return true;
@ -201,6 +201,7 @@ bool performUndoOrRedo(BufferView * bv, Undo const & undo)
bool textUndoOrRedo(BufferView * bv,
limited_stack<Undo> & stack, limited_stack<Undo> & otherstack)
{
Buffer & buf = *bv->buffer();
if (stack.empty()) {
// nothing to do
finishUndo();
@ -214,7 +215,7 @@ bool textUndoOrRedo(BufferView * bv,
if (!undo_frozen) {
otherstack.push(undo);
otherstack.top().pars.clear();
ParIterator pit = num2pit(bv, undo.text);
ParIterator pit = num2pit(buf, undo.text);
ParagraphList & plist = pit.plist();
if (undo.first_par + undo.end_par <= int(plist.size())) {
ParagraphList::iterator first = plist.begin();
@ -223,7 +224,7 @@ bool textUndoOrRedo(BufferView * bv,
advance(last, plist.size() - undo.end_par + 1);
otherstack.top().pars.insert(otherstack.top().pars.begin(), first, last);
}
LyXText * text = pit.text(bv);
LyXText * text = pit.text(buf);
otherstack.top().cursor_pos = text->cursor.pos();
otherstack.top().cursor_par = text->cursor.par();
lyxerr << " undo other: " << otherstack.top() << std::endl;