#include "support/textutils.h"
#include "support/LAssert.h"
#include "support/lstrings.h"
+#include "support/lyxalgo.h" // lyx::count
#include <fstream>
#include <algorithm>
using std::max;
using std::make_pair;
using std::vector;
+using std::pair;
using lyx::pos_type;
-using lyx::layout_type;
using lyx::textclass_type;
extern unsigned char getCurrentTextClass(Buffer *);
continue;
if (token == "\\end_inset") {
#ifndef NO_COMPABILITY
- const_cast<Buffer*>(buf)->insertErtContents(par, pos, font, false);
+ const_cast<Buffer*>(buf)->insertErtContents(par, pos, false);
#endif
break;
}
int old_x = top_x;
if (top_x != int(x)) {
top_x = int(x);
+ topx_set = true;
int nw = getMaxWidth(bv, this);
if (nw > 0 && old_max_width != nw) {
need_update = INIT;
old_max_width = nw;
bv->text->status(bv, LyXText::CHANGED_IN_DRAW);
- topx_set = true;
return;
- } else {
- top_x = old_x;
}
}
// repaint the background if needed
if (cleared && backgroundColor() != LColor::background) {
- top_x = int(x);
clearInset(bv, baseline, cleared);
- top_x = old_x;
}
// no draw is necessary !!!
if ((drawFrame_ == LOCKED) && !locked && !par->size()) {
- top_x = int(x);
- topx_set = true;
top_baseline = baseline;
x += width(bv, f);
if (need_update & CLEAR_FRAME)
x += static_cast<float>(scroll());
// if top_x differs we did it already
- if (!cleared && (top_x == int(x))
+ if (!cleared && (old_x == int(x))
&& ((need_update&(INIT|FULL)) || (top_baseline != baseline)
- ||(last_drawn_width != insetWidth))) {
- clearInset(bv, baseline, cleared);
+ ||(last_drawn_width != insetWidth)))
+ {
+ // Condition necessary to eliminate bug 59 attachment 37
+ if (baseline > 0)
+ clearInset(bv, baseline, cleared);
}
- top_x = int(x);
- topx_set = true;
if (cleared)
frame_is_visible = false;
lt = 0;
if (flag)
bv->updateInset(const_cast<InsetText *>(this), mark_dirty);
+ else
+ bv->fitCursor();
+
if (need_update == CURSOR)
need_update = NONE;
bv->owner()->showState();
+ bv->owner()->updateMenubar();
+ bv->owner()->updateToolbar();
if (old_par != cpar(bv)) {
- bv->owner()->setLayout(cpar(bv)->getLayout());
+ bv->owner()->setLayout(cpar(bv)->layout());
old_par = cpar(bv);
}
}
showInsetCursor(bv);
if (clear)
lt = 0;
- updateLocal(bv, CURSOR, false);
+
+ int code = CURSOR;
+ if (drawFrame_ == LOCKED)
+ code = CURSOR|DRAW_FRAME;
+ updateLocal(bv, code, false);
}
showInsetCursor(bv);
if (clear)
lt = 0;
- updateLocal(bv, CURSOR, false);
+ int code = CURSOR;
+ if (drawFrame_ == LOCKED)
+ code = CURSOR|DRAW_FRAME;
+ updateLocal(bv, code, false);
}
code = FULL;
} else if (owner()) {
bv->owner()->setLayout(owner()->getLyXText(bv)
- ->cursor.par()->getLayout());
+ ->cursor.par()->layout());
} else
- bv->owner()->setLayout(bv->text->cursor.par()->getLayout());
+ bv->owner()->setLayout(bv->text->cursor.par()->layout());
// hack for deleteEmptyParMech
- lt->setCursor(bv, par, 0);
+ if (par->size()) {
+ lt->setCursor(bv, par, 0);
+ } else if (par->next()) {
+ lt->setCursor(bv, par->next(), 0);
+ }
if (clear)
lt = 0;
updateLocal(bv, code, false);
}
if ((*it)->getInsetFromID(id)) {
getLyXText(bv)->setCursorIntern(bv, p, it.getPos());
- lockInset(bv, static_cast<UpdatableInset *>(*it));
+ (*it)->edit(bv);
return the_locking_inset->lockInsetInInset(bv, inset);
}
}
if (the_locking_inset) {
if (the_locking_inset == inset) {
the_locking_inset->insetButtonPress(bv,
- x - inset_x,
- y - inset_y,
- button);
+ x - inset_x,
+ y - inset_y,
+ button);
no_selection = false;
return;
} else if (inset) {
the_locking_inset->insetUnlock(bv);
inset_x = cx(bv) - top_x + drawTextXOffset;
inset_y = cy(bv) + drawTextYOffset;
- the_locking_inset = static_cast<UpdatableInset*>(inset);
+ the_locking_inset = 0;
inset->insetButtonPress(bv, x - inset_x,
- y - inset_y, button);
+ y - inset_y, button);
inset->edit(bv, x - inset_x, y - inset_y, button);
if (the_locking_inset)
updateLocal(bv, CURSOR, false);
}
lt->setCursorFromCoordinates(bv, x - drawTextXOffset,
- y + insetAscent);
+ y + insetAscent);
// set the selection cursor!
lt->selection.cursor = lt->cursor;
lt->cursor.x_fix(lt->cursor.x());
lt->clearSelection();
if (clear)
lt = 0;
+ updateLocal(bv, CURSOR, false);
}
- bv->owner()->setLayout(cpar(bv)->getLayout());
+ bv->owner()->setLayout(cpar(bv)->layout());
old_par = cpar(bv);
// Insert primary selection with middle mouse
// if there is a local selection in the current buffer,
updateLocal(bv, CURSOR_PAR, false);
return result;
} else if (result >= FINISHED) {
- switch(result) {
+ switch (result) {
case FINISHED_RIGHT:
moveRightIntern(bv, false, false);
result = DISPATCHED;
case LFUN_LAYOUT:
// do not set layouts on non breakable textinsets
if (autoBreakRows) {
- layout_type cur_layout = cpar(bv)->layout;
+ string cur_layout = cpar(bv)->layout();
// Derive layout number from given argument (string)
// and current buffer's textclass (number). */
textclass_type tclass = bv->buffer()->params.textclass;
- std::pair <bool, layout_type> layout =
- textclasslist.NumberOfLayout(tclass, arg);
+ string layout = lowercase(arg);
+ bool hasLayout = textclasslist[tclass].hasLayout(layout);
// If the entry is obsolete, use the new one instead.
- if (layout.first) {
- string obs = textclasslist.Style(tclass,layout.second).
+ if (hasLayout) {
+ string const & obs =
+ textclasslist[tclass][layout].
obsoleted_by();
if (!obs.empty())
- layout = textclasslist.NumberOfLayout(tclass, obs);
+ layout = lowercase(obs);
}
// see if we found the layout number:
- if (!layout.first) {
+ if (!hasLayout) {
string const msg = string(N_("Layout ")) + arg + N_(" not known");
bv->owner()->getLyXFunc()->dispatch(LFUN_MESSAGE, msg);
break;
}
- if (cur_layout != layout.second) {
- cur_layout = layout.second;
- lt->setLayout(bv, layout.second);
- bv->owner()->setLayout(cpar(bv)->getLayout());
+ if (cur_layout != layout) {
+ cur_layout = layout;
+ lt->setLayout(bv, layout);
+ bv->owner()->setLayout(cpar(bv)->layout());
updwhat = CURSOR_PAR;
updflag = true;
}
} else {
// reset the layout box
- bv->owner()->setLayout(cpar(bv)->getLayout());
+ bv->owner()->setLayout(cpar(bv)->layout());
}
break;
case LFUN_PARAGRAPH_SPACING:
while (p) {
string const tmp = buf->asciiParagraph(p, linelen, p->previous()==0);
- lines += countChar(tmp, '\n');
+ lines += lyx::count(tmp.begin(), tmp.end(), '\n');
os << tmp;
p = p->next();
}
int desc_on = 0; // description mode
LyXLayout const & style =
- textclasslist.Style(buf->params.textclass,
- p->layout);
+ textclasslist[buf->params.textclass][p->layout()];
// environment tag closing
for (; depth > p->params().depth(); --depth) {
}
if (environment_stack[depth] != style.latexname()) {
- if(environment_stack.size() == depth + 1) {
+ if (environment_stack.size() == depth + 1) {
environment_stack.push_back("!-- --");
environment_inner.push_back("!-- --");
}
if (style.latextype == LATEX_ENVIRONMENT) {
if (!style.latexparam().empty()) {
- if(style.latexparam() == "CDATA")
+ if (style.latexparam() == "CDATA")
os << "<![CDATA[";
else
buf->sgmlOpenTag(os, depth + command_depth,
switch (style.latextype) {
case LATEX_ENVIRONMENT:
if (!style.latexparam().empty()) {
- if(style.latexparam() == "CDATA")
+ if (style.latexparam() == "CDATA")
os << "]]>";
else
buf->sgmlCloseTag(os, depth + command_depth,
int InsetText::beginningOfMainBody(Buffer const * buf, Paragraph * p) const
{
- if (textclasslist.Style(buf->params.textclass,
- p->getLayout()).labeltype != LABEL_MANUAL)
+ if (textclasslist[buf->params.textclass][p->layout()].labeltype != LABEL_MANUAL)
return 0;
else
return p->beginningOfMainBody();
}
-std::vector<string> const InsetText::getLabelList() const
+vector<string> const InsetText::getLabelList() const
{
- std::vector<string> label_list;
+ vector<string> label_list;
Paragraph * tpar = par;
while (tpar) {
Paragraph::inset_iterator beg = tpar->inset_iterator_begin();
Paragraph::inset_iterator end = tpar->inset_iterator_end();
for (; beg != end; ++beg) {
- std::vector<string> const l = (*beg)->getLabelList();
+ vector<string> const l = (*beg)->getLabelList();
label_list.insert(label_list.end(), l.begin(), l.end());
}
tpar = tpar->next();
if (!recursive && (cached_bview == lbv)) {
LyXText * lt = cached_text.get();
lyx::Assert(lt && lt->firstRow()->par() == par);
- return cached_text.get();
+ return lt;
}
// Super UGLY! (Lgb)
Cache::iterator it = cache.find(bv);
if (it != cache.end()) {
- if (do_reinit)
+ if (do_reinit) {
reinitLyXText();
- else if (do_resize)
+ } else if (do_resize) {
resizeLyXText(do_resize);
- if (lt || !it->second.remove) {
- lyx::Assert(it->second.text.get());
- cached_text = it->second.text;
- if (recursive && the_locking_inset) {
- return the_locking_inset->getLyXText(bv, true);
- }
- return cached_text.get();
- } else if (it->second.remove) {
- if (locked) {
- saveLyXTextState(it->second.text.get());
- } else {
- sstate.lpar = 0;
+ } else {
+ if (lt || !it->second.remove) {
+ lyx::Assert(it->second.text.get());
+ cached_text = it->second.text;
+ if (recursive && the_locking_inset) {
+ return the_locking_inset->getLyXText(bv, true);
+ }
+ return cached_text.get();
+ } else if (it->second.remove) {
+ if (locked) {
+ saveLyXTextState(it->second.text.get());
+ } else {
+ sstate.lpar = 0;
+ }
}
+ //
+ // when we have to reinit the existing LyXText!
+ //
+ it->second.text->init(bv);
+ restoreLyXTextState(bv, it->second.text.get());
+ it->second.remove = false;
}
+ cached_text = it->second.text;
+ if (the_locking_inset && recursive) {
+ return the_locking_inset->getLyXText(bv);
+ }
+ return cached_text.get();
}
-
+ ///
+ // we are here only if we don't have a BufferView * in the cache!!!
+ ///
cached_text.reset(new LyXText(const_cast<InsetText *>(this)));
cached_text->init(bv);
restoreLyXTextState(bv, cached_text.get());
lt = 0;
return str;
}
-#warning Dekel please have a look on this one RTL? (Jug)
-#warning DEKEL!
- // we have to go on checking so move cusor to the right
+ // we have to go on checking so move cusor to the next char
lt->cursor.pos(lt->cursor.pos() + 1);
}
str = lt->selectNextWordToSpellcheck(bv, value);
}
reinitLyXText();
}
+
+
+void InsetText::getDrawFont(LyXFont & font) const
+{
+ if (!owner())
+ return;
+ owner()->getDrawFont(font);
+}