#include "InsetIterator.h"
#include "Language.h"
#include "LaTeXFeatures.h"
-#include "lyx_cb.h" // added for Dispatch functions
+#include "callback.h" // added for Dispatch functions
#include "LyX.h"
#include "lyxfind.h"
#include "LyXFunc.h"
-#include "LyXLayout.h"
-#include "LyXText.h"
-#include "LyXTextClass.h"
+#include "Layout.h"
+#include "Text.h"
+#include "TextClass.h"
#include "LyXRC.h"
#include "Session.h"
#include "Paragraph.h"
#include "insets/InsetRef.h"
#include "insets/InsetText.h"
-#include "frontends/Alert.h"
+#include "frontends/alert.h"
#include "frontends/FileDialog.h"
#include "frontends/FontMetrics.h"
/// Return an inset of this class if it exists at the current cursor position
template <class T>
-T * getInsetByCode(Cursor & cur, InsetBase::Code code)
+T * getInsetByCode(Cursor & cur, Inset::Code code)
{
T * inset = 0;
DocIterator it = cur;
return;
}
- LyXText & t = buffer_->text();
+ Text & t = buffer_->text();
TextMetrics & tm = text_metrics_[&t];
int const parsize = int(t.paragraphs().size() - 1);
if (!buffer_)
return;
- LyXText & t = buffer_->text();
+ Text & t = buffer_->text();
TextMetrics & tm = text_metrics_[&t];
float const bar = value / float(wh_ * t.paragraphs().size());
if (!buffer_)
return;
- LyXText & t = buffer_->text();
+ Text & t = buffer_->text();
int const height = 2 * defaultRowHeight();
int const first = height;
ParIterator par = buffer_->getParFromID(top_id);
if (par != buffer_->par_iterator_end()) {
DocIterator dit = makeDocIterator(par, min(par->size(), top_pos));
- // Some slices of the iterator may not be reachable (e.g. closed collapsable inset)
- // so the dociterator may need to be shortened. Otherwise, setCursor may
- // crash lyx when the cursor can not be set to these insets.
+ // Some slices of the iterator may not be
+ // reachable (e.g. closed collapsable inset)
+ // so the dociterator may need to be
+ // shortened. Otherwise, setCursor may crash
+ // lyx when the cursor can not be set to these
+ // insets.
size_t const n = dit.depth();
for (size_t i = 0; i < n; ++i)
- if (dit[i].inset().editable() != InsetBase::HIGHLY_EDITABLE) {
+ if (dit[i].inset().editable() != Inset::HIGHLY_EDITABLE) {
dit.resize(i);
break;
}
// it will be restored to the left of the outmost inset that contains
// the bookmark.
if (static_cast<size_t>(bottom_pit) < buffer_->paragraphs().size()) {
- ParIterator it = buffer_->par_iterator_begin();
- ParIterator const end = buffer_->par_iterator_end();
- for (; it != end; ++it)
- if (it.pit() == bottom_pit) {
- // restored pos may be bigger than it->size
- setCursor(makeDocIterator(it, min(bottom_pos, it->size())));
- return boost::make_tuple(bottom_pit, bottom_pos, it->id());
- }
+ DocIterator it = doc_iterator_begin(buffer_->inset());
+ it.pit() = bottom_pit;
+ it.pos() = min(bottom_pos, it.paragraph().size());
+ setCursor(it);
+ return boost::make_tuple(it.pit(), it.pos(),
+ it.paragraph().id());
}
// both methods fail
return boost::make_tuple(pit_type(0), pos_type(0), 0);
case LFUN_FILE_INSERT_PLAINTEXT_PARA:
case LFUN_FILE_INSERT_PLAINTEXT:
case LFUN_BOOKMARK_SAVE:
- // FIXME: Actually, these LFUNS should be moved to LyXText
+ // FIXME: Actually, these LFUNS should be moved to Text
flag.enabled(cursor_.inTexted());
break;
case LFUN_FONT_STATE:
case LFUN_LABEL_GOTO: {
flag.enabled(!cmd.argument().empty()
- || getInsetByCode<InsetRef>(cursor_, InsetBase::REF_CODE));
+ || getInsetByCode<InsetRef>(cursor_, Inset::REF_CODE));
break;
}
break;
case LFUN_CHANGES_OUTPUT:
- flag.enabled(buffer_ && LaTeXFeatures::isAvailable("dvipost"));
+ flag.enabled(buffer_);
flag.setOnOff(buffer_->params().outputChanges);
break;
if (label.empty()) {
InsetRef * inset =
getInsetByCode<InsetRef>(cursor_,
- InsetBase::REF_CODE);
+ Inset::REF_CODE);
if (inset) {
label = inset->getParam("reference");
// persistent=false: use temp_bookmark
break;
case LFUN_NOTE_NEXT:
- bv_funcs::gotoInset(this, InsetBase::NOTE_CODE, false);
+ bv_funcs::gotoInset(this, Inset::NOTE_CODE, false);
break;
case LFUN_REFERENCE_NEXT: {
- vector<InsetBase_code> tmp;
- tmp.push_back(InsetBase::LABEL_CODE);
- tmp.push_back(InsetBase::REF_CODE);
+ vector<Inset_code> tmp;
+ tmp.push_back(Inset::LABEL_CODE);
+ tmp.push_back(Inset::REF_CODE);
bv_funcs::gotoInset(this, tmp, true);
break;
}
case LFUN_CHANGES_OUTPUT:
buffer_->params().outputChanges = !buffer_->params().outputChanges;
+ if (buffer_->params().outputChanges) {
+ bool dvipost = LaTeXFeatures::isAvailable("dvipost");
+ bool xcolorsoul = LaTeXFeatures::isAvailable("soul") &&
+ LaTeXFeatures::isAvailable("xcolor");
+
+ if (!dvipost && !xcolorsoul) {
+ Alert::warning(_("Changes not shown in LaTeX output"),
+ _("Changes will not be highlighted in LaTeX output, "
+ "because neither dvipost nor xcolor/soul are installed.\n"
+ "Please install these packages or redefine "
+ "\\lyxadded and \\lyxdeleted in the LaTeX preamble."));
+ } else if (!xcolorsoul) {
+ Alert::warning(_("Changes not shown in LaTeX output"),
+ _("Changes will not be highlighted in LaTeX output "
+ "when using pdflatex, because xcolor and soul are not installed.\n"
+ "Please install both packages or redefine "
+ "\\lyxadded and \\lyxdeleted in the LaTeX preamble."));
+ }
+ }
break;
case LFUN_CHANGE_NEXT:
cursor_.selHandle(true);
buffer_->text().cursorBottom(cursor_);
// accept everything in a single step to support atomic undo
- buffer_->text().acceptOrRejectChanges(cursor_, LyXText::ACCEPT);
+ buffer_->text().acceptOrRejectChanges(cursor_, Text::ACCEPT);
break;
case LFUN_ALL_CHANGES_REJECT:
buffer_->text().cursorBottom(cursor_);
// reject everything in a single step to support atomic undo
// Note: reject does not work recursively; the user may have to repeat the operation
- buffer_->text().acceptOrRejectChanges(cursor_, LyXText::REJECT);
+ buffer_->text().acceptOrRejectChanges(cursor_, Text::REJECT);
break;
case LFUN_WORD_FIND:
case LFUN_BIBTEX_DATABASE_ADD: {
Cursor tmpcur = cursor_;
- bv_funcs::findInset(tmpcur, InsetBase::BIBTEX_CODE, false);
+ bv_funcs::findInset(tmpcur, Inset::BIBTEX_CODE, false);
InsetBibtex * inset = getInsetByCode<InsetBibtex>(tmpcur,
- InsetBase::BIBTEX_CODE);
+ Inset::BIBTEX_CODE);
if (inset) {
if (inset->addDatabase(to_utf8(cmd.argument())))
buffer_->updateBibfilesCache();
case LFUN_BIBTEX_DATABASE_DEL: {
Cursor tmpcur = cursor_;
- bv_funcs::findInset(tmpcur, InsetBase::BIBTEX_CODE, false);
+ bv_funcs::findInset(tmpcur, Inset::BIBTEX_CODE, false);
InsetBibtex * inset = getInsetByCode<InsetBibtex>(tmpcur,
- InsetBase::BIBTEX_CODE);
+ Inset::BIBTEX_CODE);
if (inset) {
if (inset->delDatabase(to_utf8(cmd.argument())))
buffer_->updateBibfilesCache();
FuncRequest tmpcmd = FuncRequest(LFUN_INSET_TOGGLE, cmd.origin);
// if there is an inset at cursor, see whether it
// wants to toggle.
- InsetBase * inset = cur.nextInset();
+ Inset * inset = cur.nextInset();
if (inset && inset->isActive()) {
Cursor tmpcur = cur;
tmpcur.pushLeft(*inset);
}
-InsetBase const * BufferView::getCoveringInset(LyXText const & text, int x, int y)
+Inset const * BufferView::getCoveringInset(Text const & text, int x, int y)
{
pit_type pit = text.getPitNearY(*this, y);
BOOST_ASSERT(pit != -1);
InsetList::const_iterator iit = par.insetlist.begin();
InsetList::const_iterator iend = par.insetlist.end();
for (; iit != iend; ++iit) {
- InsetBase * const inset = iit->inset;
+ Inset * const inset = iit->inset;
if (inset->covers(*this, x, y)) {
if (!inset->descendable())
// No need to go further down if the inset is not
size_t cell_number = inset->nargs();
// Check all the inner cell.
for (size_t i = 0; i != cell_number; ++i) {
- LyXText const * inner_text = inset->getText(i);
+ Text const * inner_text = inset->getText(i);
if (inner_text) {
// Try deeper.
- InsetBase const * inset_deeper =
+ Inset const * inset_deeper =
getCoveringInset(*inner_text, x, y);
if (inset_deeper)
return inset_deeper;
cur.selection() = cursor_.selection();
// Either the inset under the cursor or the
- // surrounding LyXText will handle this event.
+ // surrounding Text will handle this event.
// make sure we stay within the screen...
cmd.y = min(max(cmd.y, -1), height_);
if (cmd.action == LFUN_MOUSE_MOTION && cmd.button() == mouse_button::none) {
// Get inset under mouse, if there is one.
- InsetBase const * covering_inset =
+ Inset const * covering_inset =
getCoveringInset(buffer_->text(), cmd.x, cmd.y);
if (covering_inset == last_inset_)
// Same inset, no need to do anything...
bool need_redraw = false;
// const_cast because of setMouseHover().
- InsetBase * inset = const_cast<InsetBase *>(covering_inset);
+ Inset * inset = const_cast<Inset *>(covering_inset);
if (last_inset_)
// Remove the hint on the last hovered inset (if any).
need_redraw |= last_inset_->setMouseHover(false);
// between background updates and text updates. So we use the hammer
// solution for now. We could also avoid the updateMetrics() below
// by using the first and last pit of the CoordCache. Have a look
- // at LyXText::getPitNearY() to see what I mean.
+ // at Text::getPitNearY() to see what I mean.
//
//metrics_info_.pit1 = first pit of CoordCache;
//metrics_info_.pit2 = last pit of CoordCache;
}
// Build temporary cursor.
- InsetBase * inset = buffer_->text().editXY(cur, cmd.x, cmd.y);
+ Inset * inset = buffer_->text().editXY(cur, cmd.x, cmd.y);
// Put anchor at the same position.
cur.resetAnchor();
// if (!buffer_)
// return;
//
-// LyXText const * t = &buffer_->text();
+// Text const * t = &buffer_->text();
// int const line_height = defaultRowHeight();
//
// // The new absolute coordinate
}
-TextMetrics const & BufferView::textMetrics(LyXText const * t) const
+TextMetrics const & BufferView::textMetrics(Text const * t) const
{
return const_cast<BufferView *>(this)->textMetrics(t);
}
-TextMetrics & BufferView::textMetrics(LyXText const * t)
+TextMetrics & BufferView::textMetrics(Text const * t)
{
TextMetricsCache::iterator tmc_it = text_metrics_.find(t);
if (tmc_it == text_metrics_.end()) {
tmc_it = text_metrics_.insert(
- make_pair(t, TextMetrics(this, const_cast<LyXText *>(t)))).first;
+ make_pair(t, TextMetrics(this, const_cast<Text *>(t)))).first;
}
return tmc_it->second;
}
-ParagraphMetrics const & BufferView::parMetrics(LyXText const * t,
+ParagraphMetrics const & BufferView::parMetrics(Text const * t,
pit_type pit) const
{
return textMetrics(t).parMetrics(pit);
// FIXME: We should split-up updateMetrics() for the singlepar case.
void BufferView::updateMetrics(bool singlepar)
{
- LyXText & buftext = buffer_->text();
+ Text & buftext = buffer_->text();
TextMetrics & tm = textMetrics(&buftext);
pit_type size = int(buftext.paragraphs().size());