A couple of changing resulting from gcc 3.4 debug mode testing.

Dont copy singular iterators.
Dont compare iterators from different containers.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8121 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 2003-11-22 14:44:59 +00:00
parent e506fc5915
commit 7dd8cd705b
12 changed files with 205 additions and 131 deletions

View File

@ -1350,5 +1350,3 @@ void BufferView::Pimpl::updateParagraphDialog()
data = "update " + tostr(accept) + '\n' + data;
bv_->owner()->getDialogs().update("paragraph", data);
}

View File

@ -1,3 +1,22 @@
2003-11-22 Lars Gullik Bjonnes <larsbj@gullik.net>
* text3.C (dispatch): [PRIOR] make sure that we do not compare
iterators from different ParagraphList containers.
[NEXT] ditto
* text2.C (LyXText): change order of initialization slightly
(operator=): new function. copy all variables except cache_par_
(moveUp): make sure that we do not compare iterators from
different ParagraphList constainers.
(moveDown): ditto
* text.C (firstPar): new function
(lastPar): new function
(endPar): new function
* lyxtext.h: move things around and group public functions, public
variables, private functions, private variables
2003-11-21 Michael Schmitt <michael.schmitt@teststep.org>
* factory.C: change call to InsetERT constructor to avoid

View File

@ -212,4 +212,3 @@ void InsetCharStyleParams::read(LyXLex & lex)
type = lex.getString();
}
}

View File

@ -49,23 +49,16 @@ class VSpace;
// The inheritance from TextCursor should go. It's just there to ease
// transition...
class LyXText : public TextCursor {
// Public Functions
public:
/// Constructor
LyXText(BufferView *, InsetText *, bool ininset, ParagraphList & plist);
// Copy assignment
LyXText & operator=(LyXText const &);
void init(BufferView *);
///
int height;
///
unsigned int width;
/// the current font settings
LyXFont current_font;
/// the current font
LyXFont real_current_font;
/// our buffer's default layout font
LyXFont defaultfont_;
///
InsetText * inset_owner;
/// update all cached row positions
void updateRowPositions();
@ -120,10 +113,6 @@ public:
/// rebreaks the cursor par
void redoParagraph();
private:
/// rebreaks the given par
void redoParagraphInternal(ParagraphList::iterator pit);
public:
///
void toggleFree(LyXFont const &, bool toggleall = false);
@ -152,10 +141,6 @@ public:
friend class LyXScreen;
public:
/// only the top-level LyXText has this non-zero
BufferView * bv_owner;
/// returns an iterator pointing to a cursor paragraph
ParagraphList::iterator getPar(LyXCursor const & cursor) const;
///
@ -320,24 +305,6 @@ public:
///
int workWidth() const;
private:
///
float getCursorX(ParagraphList::iterator pit,
Row const & row, lyx::pos_type pos, bool boundary) const;
/// used in setlayout
void makeFontEntriesLayoutSpecific(BufferParams const &, Paragraph & par);
/// Calculate and set the height of the row
void setHeightOfRow(ParagraphList::iterator, Row & row);
// fix the cursor `cur' after a characters has been deleted at `where'
// position. Called by deleteEmptyParagraphMechanism
void fixCursorAfterDelete(LyXCursor & cur, LyXCursor const & where);
/// delete double space (false) or empty paragraphs (true) around old_cursor
bool deleteEmptyParagraphMechanism(LyXCursor const & old_cursor);
public:
/** Updates all counters starting BEHIND the row. Changed paragraphs
* with a dynamic left margin will be rebroken. */
void updateCounters();
@ -369,46 +336,6 @@ public:
* the cursor and when creating a visible row */
void prepareToPrint(ParagraphList::iterator pit, Row & row) const;
private:
///
void setCounter(Buffer const &, ParagraphList::iterator pit);
///
void deleteWordForward();
///
void deleteWordBackward();
///
void deleteLineForward();
/// sets row.end to the pos value *after* which a row should break.
/// for example, the pos after which isNewLine(pos) == true
void rowBreakPoint(ParagraphList::iterator pit, Row & row) const;
/// sets row.witdh to the minimum space a row needs on the screen in pixel
void fill(ParagraphList::iterator pit, Row & row, int workwidth) const;
/**
* returns the minimum space a manual label needs on the
* screen in pixels
*/
int labelFill(ParagraphList::iterator pit, Row const & row) const;
/// FIXME
int labelEnd(ParagraphList::iterator pit, Row const & row) const;
///
void charInserted();
/// set 'number' font property
void number();
/// is the cursor paragraph right-to-left?
bool rtl() const;
public:
///
mutable Bidi bidi;
///
bool in_inset_;
///
ParagraphList * paragraphs_;
//
// special owner functions
///
@ -417,6 +344,13 @@ public:
/// return true if this is owned by an inset.
bool isInInset() const;
///
ParagraphList::iterator firstPar() const;
///
ParagraphList::iterator lastPar() const;
///
ParagraphList::iterator endPar() const;
/// return first row of text
RowList::iterator firstRow() const;
/// return last row of text
@ -461,6 +395,91 @@ public:
///
bool checkAndActivateInset(bool front);
// Public Variables
public:
///
int height;
///
unsigned int width;
/// the current font settings
LyXFont current_font;
/// the current font
LyXFont real_current_font;
/// our buffer's default layout font
LyXFont defaultfont_;
///
InsetText * inset_owner;
/// only the top-level LyXText has this non-zero
BufferView * bv_owner;
///
mutable Bidi bidi;
///
bool in_inset_;
///
ParagraphList * paragraphs_;
/// absolute document pixel coordinates of this LyXText
int xo_;
int yo_;
// Private Functions
private:
/// rebreaks the given par
void redoParagraphInternal(ParagraphList::iterator pit);
///
float getCursorX(ParagraphList::iterator pit,
Row const & row, lyx::pos_type pos, bool boundary) const;
/// used in setlayout
void makeFontEntriesLayoutSpecific(BufferParams const &, Paragraph & par);
/// Calculate and set the height of the row
void setHeightOfRow(ParagraphList::iterator, Row & row);
// fix the cursor `cur' after a characters has been deleted at `where'
// position. Called by deleteEmptyParagraphMechanism
void fixCursorAfterDelete(LyXCursor & cur, LyXCursor const & where);
/// delete double space (false) or empty paragraphs (true) around old_cursor
bool deleteEmptyParagraphMechanism(LyXCursor const & old_cursor);
///
void setCounter(Buffer const &, ParagraphList::iterator pit);
///
void deleteWordForward();
///
void deleteWordBackward();
///
void deleteLineForward();
/// sets row.end to the pos value *after* which a row should break.
/// for example, the pos after which isNewLine(pos) == true
void rowBreakPoint(ParagraphList::iterator pit, Row & row) const;
/// sets row.witdh to the minimum space a row needs on the screen in pixel
void fill(ParagraphList::iterator pit, Row & row, int workwidth) const;
/**
* returns the minimum space a manual label needs on the
* screen in pixels
*/
int labelFill(ParagraphList::iterator pit, Row const & row) const;
/// FIXME
int labelEnd(ParagraphList::iterator pit, Row const & row) const;
///
void charInserted();
/// set 'number' font property
void number();
/// is the cursor paragraph right-to-left?
bool rtl() const;
// Private Variables
private:
/// prohibit this as long as there are back pointers...
@ -469,11 +488,6 @@ private:
// cache for cursorPar()
mutable ParagraphList::iterator cache_par_;
mutable int cache_pos_;
public:
/// absolute document pixel coordinates of this LyXText
int xo_;
int yo_;
};
/// return the default height of a row in pixels, considering font zoom

View File

@ -1507,18 +1507,36 @@ RowList::iterator LyXText::firstRow() const
}
ParagraphList::iterator LyXText::firstPar() const
{
return ownerParagraphs().begin();
}
RowList::iterator LyXText::lastRow() const
{
return boost::prior(endRow());
}
ParagraphList::iterator LyXText::lastPar() const
{
return boost::prior(endPar());
}
RowList::iterator LyXText::endRow() const
{
return ownerParagraphs().back().rows.end();
}
ParagraphList::iterator LyXText::endPar() const
{
return ownerParagraphs().end();
}
void LyXText::nextRow(ParagraphList::iterator & pit,
RowList::iterator & rit) const
{

View File

@ -73,11 +73,37 @@ using std::string;
LyXText::LyXText(BufferView * bv, InsetText * inset, bool ininset,
ParagraphList & paragraphs)
: height(0), width(0), inset_owner(inset), bv_owner(bv),
in_inset_(ininset), paragraphs_(&paragraphs),
cache_pos_(-1), xo_(0), yo_(0)
in_inset_(ininset), paragraphs_(&paragraphs), xo_(0), yo_(0),
cache_pos_(-1)
{}
LyXText & LyXText::operator=(LyXText const & lt)
{
// Copy all public variables
height = lt.height;
width = lt.width;
current_font = lt.current_font;
real_current_font = lt.real_current_font;
defaultfont_ = lt.defaultfont_;
inset_owner = lt.inset_owner;
bv_owner = lt.bv_owner;
bidi = lt.bidi;
in_inset_ = lt.in_inset_;
paragraphs_ = lt.paragraphs_;
xo_ = lt.xo_;
yo_ = lt.yo_;
// Copy all the private variables
// we cannot initailize a iterator with a singular iterator.
//cache_par_ = lt.cache_par_;
cache_pos_ = lt.cache_pos_;
return *this;
}
void LyXText::init(BufferView * bview)
{
bv_owner = bview;
@ -1642,7 +1668,7 @@ DispatchResult LyXText::moveLeftIntern(bool front,
DispatchResult LyXText::moveUp()
{
if (cursorRow() == firstRow())
if (cursorPar() == firstPar() && cursorRow() == firstRow())
return DispatchResult(false, FINISHED_UP);
cursorUp(false);
clearSelection();
@ -1652,7 +1678,7 @@ DispatchResult LyXText::moveUp()
DispatchResult LyXText::moveDown()
{
if (cursorRow() == lastRow())
if (cursorPar() == lastPar() && cursorRow() == lastRow())
return DispatchResult(false, FINISHED_DOWN);
cursorDown(false);
clearSelection();

View File

@ -679,7 +679,7 @@ DispatchResult LyXText::dispatch(FuncRequest const & cmd)
if (!selection.mark())
clearSelection();
finishChange(bv, false);
if (cursorRow() == firstRow())
if (cursorPar() == firstPar() && cursorRow() == firstRow())
return DispatchResult(false, FINISHED_UP);
cursorPrevious();
break;
@ -688,7 +688,7 @@ DispatchResult LyXText::dispatch(FuncRequest const & cmd)
if (!selection.mark())
clearSelection();
finishChange(bv, false);
if (cursorRow() == lastRow())
if (cursorPar() == lastPar() && cursorRow() == lastRow())
return DispatchResult(false, FINISHED_DOWN);
cursorNext();
break;