#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 *);
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))) {
+ ||(last_drawn_width != insetWidth)))
+ {
// Condition necessary to eliminate bug 59 attachment 37
- if (baseline > 0) clearInset(bv, baseline, cleared);
+ if (baseline > 0)
+ clearInset(bv, baseline, cleared);
}
- top_x = int(x);
- topx_set = true;
if (cleared)
frame_is_visible = false;
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) {
inset_y = cy(bv) + drawTextYOffset;
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 = 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)
}
reinitLyXText();
}
+
+
+void InsetText::getDrawFont(LyXFont & font) const
+{
+ if (!owner())
+ return;
+ owner()->getDrawFont(font);
+}