#include "gettext.h"
#include "intl.h"
#include "iterators.h"
+#include "Lsstream.h"
#include "lyx_cb.h" // added for Dispatch functions
#include "lyx_main.h"
#include "lyxfind.h"
#include "graphics/Previews.h"
#include "support/LAssert.h"
-#include "support/lstrings.h"
+#include "support/tostr.h"
#include "support/filetools.h"
#include <boost/bind.hpp>
#include <boost/signals/connection.hpp>
-#include "support/BoostFormat.h"
#include <unistd.h>
#include <sys/wait.h>
using std::min;
using lyx::pos_type;
+using namespace bv_funcs;
extern BufferList bufferlist;
// FIXME: needed when ?
bv_->text->top_y(screen().topCursorVisible(bv_->text->cursor, bv_->text->top_y()));
- // Similarly, buffer-dependent dialogs should be updated or
+ // Buffer-dependent dialogs should be updated or
// hidden. This should go here because some dialogs (eg ToC)
// require bv_->text.
owner_->getDialogs().updateBufferDependent(true);
owner_->updateLayoutChoice();
owner_->updateWindowTitle();
+ if (buffer_) {
+ // Don't forget to update the Layout
+ string const layoutname =
+ bv_->text->cursor.par()->layout()->name();
+ owner_->setLayout(layoutname);
+ }
+
if (grfx::Previews::activated() && buffer_)
grfx::Previews::get().generateBufferPreviews(*buffer_);
}
owner_->message(_("Formatting document..."));
if (bv_->text) {
- par = bv_->text->cursor.par();
+ par = &*bv_->text->cursor.par();
pos = bv_->text->cursor.pos();
- selstartpar = bv_->text->selection.start.par();
+ selstartpar = &*bv_->text->selection.start.par();
selstartpos = bv_->text->selection.start.pos();
- selendpar = bv_->text->selection.end.par();
+ selendpar = &*bv_->text->selection.end.par();
selendpos = bv_->text->selection.end.pos();
selection = bv_->text->selection.set();
mark_set = bv_->text->selection.mark();
switchKeyMap();
owner_->busy(false);
+ // reset the "Formatting..." message
+ owner_->clearMessage();
+
updateScrollbar();
return 0;
if (!buffer_)
return;
+ screen().hideCursor();
+
screen().draw(bv_->text, bv_, value);
if (!lyxrc.cursor_follows_scrollbar)
key_modifier::state state)
{
bv_->owner()->getLyXFunc().processKeySym(key, state);
+
+ /* This is perhaps a bit of a hack. When we move
+ * around, or type, it's nice to be able to see
+ * the cursor immediately after the keypress. So
+ * we reset the toggle timeout and force the visibility
+ * of the cursor. Note we cannot do this inside
+ * dispatch() itself, because that's called recursively.
+ */
+ if (available()) {
+ cursor_timeout.restart();
+ screen().showCursor(*bv_);
+ }
}
void BufferView::Pimpl::selectionLost()
{
if (available()) {
- hideCursor();
+ screen().hideCursor();
toggleSelection();
bv_->getLyXText()->clearSelection();
- showCursor();
bv_->text->xsel_cache.set(false);
}
}
return;
}
- if (!bv_->theLockingInset()) {
- screen().cursorToggle(bv_);
- } else {
- bv_->theLockingInset()->toggleInsetCursor(bv_);
- }
+ screen().toggleCursor(*bv_);
cursor_timeout.restart();
}
saved_positions[i] = Position(buffer_->fileName(),
bv_->text->cursor.par()->id(),
bv_->text->cursor.pos());
- if (i > 0) {
- ostringstream str;
-#if USE_BOOST_FORMAT
- str << boost::format(_("Saved bookmark %1$d")) % i;
-#else
- str << _("Saved bookmark ") << i;
-#endif
- owner_->message(STRCONV(str.str()));
- }
+ if (i > 0)
+ owner_->message(bformat(_("Saved bookmark %1$s"), tostr(i)));
}
if (b != 0) buffer(b);
}
- Paragraph * par = buffer_->getParFromID(saved_positions[i].par_id);
- if (!par)
+ ParIterator par = buffer_->getParFromID(saved_positions[i].par_id);
+ if (par == buffer_->par_iterator_end())
return;
- bv_->text->setCursor(par,
- min(par->size(), saved_positions[i].par_pos));
+ bv_->text->setCursor(*par,
+ min((*par)->size(), saved_positions[i].par_pos));
update(BufferView::SELECT);
- if (i > 0) {
- ostringstream str;
-#if USE_BOOST_FORMAT
- str << boost::format(_("Moved to bookmark %1$d")) % i;
-#else
- str << _("Moved to bookmark ") << i;
-#endif
- owner_->message(STRCONV(str.str()));
- }
+ if (i > 0)
+ owner_->message(bformat(_("Moved to bookmark %1$s"), tostr(i)));
}
}
-void BufferView::Pimpl::showCursor()
-{
- if (bv_->theLockingInset())
- bv_->theLockingInset()->showInsetCursor(bv_);
- else
- screen().showCursor(bv_->text, bv_);
-}
-
-
-void BufferView::Pimpl::hideCursor()
-{
- if (!bv_->theLockingInset())
- screen().hideCursor();
-}
-
-
void BufferView::Pimpl::toggleSelection(bool b)
{
if (bv_->theLockingInset())
// necessary
filename = FileSearch(string(), filename, "lyx");
- string const disp_fn(MakeDisplayPath(filename));
-
- ostringstream s1;
-#if USE_BOOST_FORMAT
- s1 << boost::format(_("Inserting document %1$s...")) % disp_fn;
-#else
- s1 << _("Inserting document ") << disp_fn << _("...");
-#endif
- owner_->message(STRCONV(s1.str()));
+ string const disp_fn = MakeDisplayPath(filename);
+ owner_->message(bformat(_("Inserting document %1$s..."), disp_fn));
bool const res = bv_->insertLyXFile(filename);
- if (res) {
- ostringstream str;
-#if USE_BOOST_FORMAT
- str << boost::format(_("Document %1$s inserted.")) % disp_fn;
-#else
- str << _("Document ") << disp_fn << _(" inserted.");
-#endif
- owner_->message(STRCONV(str.str()));
- } else {
- ostringstream str;
-#if USE_BOOST_FORMAT
- str << boost::format(_("Could not insert document %1$s")) % disp_fn;
-#else
- str << _("Could not insert document ") << disp_fn;
-#endif
- owner_->message(STRCONV(str.str()));
- }
+ if (res)
+ owner_->message(bformat(_("Document %1$s inserted."), disp_fn));
+ else
+ owner_->message(bformat(_("Could not insert document %1$s"), disp_fn));
}
buf->undostack.clear();
} else {
update(BufferView::SELECT);
- bv_->text->setCursor(&(*buf->paragraphs.begin()), 0);
+ bv_->text->setCursor(buf->paragraphs.begin(), 0);
#warning changes FIXME
//moveCursorUpdate(false);
if (!available())
return false;
+ screen().hideCursor();
+
bool const res = dispatch(ev_in);
+ // see workAreaKeyPress
+ cursor_timeout.restart();
+ screen().showCursor(*bv_);
+
+ // FIXME: we should skip these when selecting
bv_->owner()->updateLayoutChoice();
+ bv_->owner()->updateToolbar();
bv_->fitCursor();
+ // slight hack: this is only called currently when
+ // we clicked somewhere, so we force through the display
+ // of the new status here.
+ bv_->owner()->clearMessage();
+
return res;
}
// a tabular-inset
break;
- case LFUN_LAYOUT_COPY:
- bv_->copyEnvironment();
- break;
-
- case LFUN_LAYOUT_PASTE:
- bv_->pasteEnvironment();
- switchKeyMap();
- break;
-
case LFUN_FILE_INSERT:
MenuInsertLyXFile(ev.argument);
break;
break;
case LFUN_LAYOUT_PARAGRAPH: {
- Paragraph const * par = bv_->getLyXText()->cursor.par();
+ Paragraph const * par = &*bv_->getLyXText()->cursor.par();
if (!par)
break;
}
case LFUN_PARAGRAPH_UPDATE: {
- Paragraph const * par = bv_->getLyXText()->cursor.par();
+ Paragraph const * par = &*bv_->getLyXText()->cursor.par();
if (!par)
break;
case LFUN_ACCEPT_ALL_CHANGES: {
update(BufferView::SELECT);
- bv_->text->setCursor(&(*bv_->buffer()->paragraphs.begin()), 0);
+ bv_->text->setCursor(bv_->buffer()->paragraphs.begin(), 0);
#warning FIXME changes
//moveCursorUpdate(false);
case LFUN_REJECT_ALL_CHANGES: {
update(BufferView::SELECT);
- bv_->text->setCursor(&(*bv_->buffer()->paragraphs.begin()), 0);
+ bv_->text->setCursor(bv_->buffer()->paragraphs.begin(), 0);
#warning FIXME changes
//moveCursorUpdate(false);
Inset * tl_inset = inset;
while (tl_inset->owner())
tl_inset = tl_inset->owner();
- hideCursor();
if (tl_inset == inset) {
update(BufferView::UPDATE);
if (bv_->text->updateInset(inset)) {