*/
#include <config.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
#include "insetert.h"
#include "insettext.h"
#include "frontends/LyXView.h"
#include "support/LOstream.h"
+#include "support/LAssert.h"
+#include "support/lstrings.h"
using std::ostream;
InsetERT::~InsetERT()
{
- hideDialog();
+ InsetERTMailer mailer(*this);
+ mailer.hideDialog();
}
Paragraph::value_type c = par->getChar(i);
switch (c) {
case Paragraph::META_INSET:
- case Paragraph::META_HFILL:
- lyxerr << "Element is not allowed in insertERT"
- << endl;
- case Paragraph::META_NEWLINE:
- os << "\n\\newline \n";
+ if (par->getInset(i)->lyxCode() != Inset::NEWLINE_CODE) {
+ lyxerr << "Element is not allowed in insertERT"
+ << endl;
+ } else {
+ par->getInset(i)->write(buf, os);
+ }
break;
+
case '\\':
os << "\n\\backslash \n";
break;
pos_type siz = par->size();
for (pos_type i = 0; i < siz; ++i) {
// ignore all struck out text
- if (isDeletedText(par, i))
+ if (isDeletedText(*par, i))
continue;
-
- Paragraph::value_type c = par->getChar(i);
- switch (c) {
- case Paragraph::META_NEWLINE:
+
+ if (par->isNewline(i)) {
os << '\n';
++lines;
- break;
- default:
- os << c;
- break;
+ } else {
+ os << par->getChar(i);
}
}
par = par->next();
while (par) {
pos_type siz = par->size();
for (pos_type i = 0; i < siz; ++i) {
- Paragraph::value_type c = par->getChar(i);
- switch (c) {
- case Paragraph::META_NEWLINE:
+ if (par->isNewline(i)) {
os << '\n';
++lines;
- break;
- default:
- os << c;
- break;
+ } else {
+ os << par->getChar(i);
}
}
par = par->next();
while (par) {
pos_type siz = par->size();
for (pos_type i = 0; i < siz; ++i) {
- Paragraph::value_type c = par->getChar(i);
- switch (c) {
- case Paragraph::META_NEWLINE:
+ if (par->isNewline(i)) {
os << '\n';
++lines;
- break;
- default:
- os << c;
- break;
+ } else {
+ os << par->getChar(i);
}
}
par = par->next();
Inset::RESULT InsetERT::localDispatch(FuncRequest const & cmd)
{
- Inset::RESULT result = DISPATCHED_NOUPDATE;
+ Inset::RESULT result = UNDISPATCHED;
BufferView * bv = cmd.view();
if (inset.paragraph()->empty()) {
}
switch (cmd.action) {
- case LFUN_MOUSE_PRESS:
- lfunMousePress(cmd);
- return DISPATCHED;
+ case LFUN_INSET_MODIFY: {
+ InsetERT::ERTStatus status_;
+ InsetERTMailer::string2params(cmd.argument, status_);
- case LFUN_MOUSE_MOTION:
- lfunMouseMotion(cmd);
- return DISPATCHED;
+ status(bv, status_);
+ bv->updateInset(this);
+ result = DISPATCHED;
+ }
+ break;
- case LFUN_MOUSE_RELEASE:
- lfunMouseRelease(cmd);
- return DISPATCHED;
+ case LFUN_MOUSE_PRESS:
+ lfunMousePress(cmd);
+ result = DISPATCHED;
+ break;
- case LFUN_LAYOUT:
- bv->owner()->setLayout(inset.paragraph()->layout()->name());
- break;
+ case LFUN_MOUSE_MOTION:
+ lfunMouseMotion(cmd);
+ result = DISPATCHED;
+ break;
- default:
- result = InsetCollapsable::localDispatch(cmd);
+ case LFUN_MOUSE_RELEASE:
+ lfunMouseRelease(cmd);
+ result = DISPATCHED;
+ break;
+
+ case LFUN_LAYOUT:
+ bv->owner()->setLayout(inset.paragraph()->layout()->name());
+ result = DISPATCHED_NOUPDATE;
+ break;
+
+ default:
+ result = InsetCollapsable::localDispatch(cmd);
}
switch (cmd.action) {
pos_type const max_length = 15;
pos_type const p_siz = inset.paragraph()->size();
pos_type const n = min(max_length, p_siz);
- int i = 0;
- int j = 0;
+ pos_type i = 0;
+ pos_type j = 0;
for(; i < n && j < p_siz; ++j) {
if (inset.paragraph()->isInset(j))
continue;
void InsetERT::draw(BufferView * bv, LyXFont const & f,
- int baseline, float & x, bool cleared) const
+ int baseline, float & x) const
{
+ lyx::Assert(bv);
+ cache(bv);
+
Painter & pain = bv->painter();
button_length = width_collapsed();
if (!owner())
x += static_cast<float>(scroll());
- if (!cleared && (inset.need_update == InsetText::FULL ||
- inset.need_update == InsetText::INIT ||
- top_x != int(x) ||
- top_baseline != baseline))
- {
- // we don't need anymore to clear here we just have to tell
- // the underlying LyXText that it should do the RowClear!
- inset.setUpdateStatus(bv, InsetText::FULL);
- bv->text->status(bv, LyXText::CHANGED_IN_DRAW);
- return;
- }
-
top_x = int(x);
topx_set = true;
top_baseline = baseline;
int const bl = baseline - ascent(bv, f) + ascent_collapsed();
if (inlined()) {
- inset.draw(bv, f, baseline, x, cleared);
+ inset.draw(bv, f, baseline, x);
} else {
draw_collapsed(pain, bl, old_x);
- inset.draw(bv, f,
- bl + descent_collapsed() + inset.ascent(bv, f),
- x, cleared);
+ inset.draw(bv, f, bl + descent_collapsed() + inset.ascent(bv, f), x);
}
need_update = NONE;
}
bv->unlockInset(const_cast<InsetERT *>(this));
break;
}
- if (bv)
- bv->updateInset(const_cast<InsetERT *>(this), false);
+ if (bv) {
+ bv->updateInset(const_cast<InsetERT *>(this));
+ bv->buffer()->markDirty();
+ }
}
}
bool InsetERT::showInsetDialog(BufferView * bv) const
{
- bv->owner()->getDialogs().showERT(const_cast<InsetERT *>(this));
+ InsetERTMailer mailer(const_cast<InsetERT &>(*this));
+ mailer.showDialog(bv);
return true;
}
}
InsetCollapsable::update(bv, font, reinit);
}
+
+
+string const InsetERTMailer::name_("ert");
+
+InsetERTMailer::InsetERTMailer(InsetERT & inset)
+ : inset_(inset)
+{}
+
+
+string const InsetERTMailer::inset2string() const
+{
+ return params2string(inset_.status());
+}
+
+
+void InsetERTMailer::string2params(string const & in,
+ InsetERT::ERTStatus & status)
+{
+ status = InsetERT::Collapsed;
+
+ string name;
+ string body = split(in, name, ' ');
+
+ if (body.empty())
+ return;
+
+ status = static_cast<InsetERT::ERTStatus>(strToInt(body));
+}
+
+
+string const
+InsetERTMailer::params2string(InsetERT::ERTStatus status)
+{
+ return name_ + ' ' + tostr(status);
+}