#include "insets/insetbib.h"
#include "insets/insettext.h"
-#include "insets/inseturl.h"
#include "insets/insetlatexaccent.h"
#include "insets/insettoc.h"
-#include "insets/insetref.h"
-#include "insets/insetparent.h"
#include "insets/insetindex.h"
+#include "insets/insetref.h"
#include "insets/insetinclude.h"
#include "insets/insetcite.h"
#include "insets/insetgraphics.h"
#include "insets/insetmarginal.h"
-#include "insets/insetcaption.h"
#include "insets/insetfloatlist.h"
#include "mathed/formulabase.h"
{
lyxerr[Debug::GUI] << "scrollDocView of " << value << endl;
- if (!buffer_) return;
+ if (!buffer_)
+ return;
screen().draw(bv_->text, bv_, value);
- if (!lyxrc.cursor_follows_scrollbar) {
+ if (!lyxrc.cursor_follows_scrollbar)
return;
- }
LyXText * vbt = bv_->text;
}
-int BufferView::Pimpl::scroll(long time)
+void BufferView::Pimpl::scroll(int lines)
{
- if (!buffer_)
- return 0;
+ if (!buffer_) {
+ return;
+ }
LyXText const * t = bv_->text;
+ int const line_height = t->defaultHeight();
- double const diff = t->defaultHeight()
- + double(time) * double(time) * 0.125;
+ // The new absolute coordinate
+ int new_first_y = t->first_y + lines * line_height;
- scrollDocView(int(diff));
+ // Restrict to a valid value
+ new_first_y = std::min(t->height - 4 * line_height, new_first_y);
+ new_first_y = std::max(0, new_first_y);
+
+ scrollDocView(new_first_y);
+
+ // Update the scrollbar.
workarea().setScrollbarParams(t->height, t->first_y, t->defaultHeight());
- return 0;
}
<< " button[" << ev.button() << "]"
<< endl;
+ // e.g. Qt mouse press when no buffer
+ if (!buffer_)
+ return false;
+
LyXTextClass const & tclass = buffer_->params.getLyXTextClass();
switch (ev.action) {
- case LFUN_TOC_INSERT:
- {
- InsetCommandParams p;
- p.setCmdName("tableofcontents");
- Inset * inset = new InsetTOC(p);
- if (!insertInset(inset, tclass.defaultLayoutName()))
- delete inset;
- break;
- }
-
case LFUN_SCROLL_INSET:
// this is not handled here as this function is only active
// if we have a locking_inset and that one is (or contains)
}
break;
- case LFUN_HTMLURL:
- case LFUN_URL:
- {
- InsetCommandParams p;
- if (ev.action == LFUN_HTMLURL)
- p.setCmdName("htmlurl");
- else
- p.setCmdName("url");
- owner_->getDialogs().createUrl(p.getAsString());
- }
- break;
-
- case LFUN_INSERT_URL:
- {
- InsetCommandParams p;
- p.setFromString(ev.argument);
-
- InsetUrl * inset = new InsetUrl(p);
- if (!insertInset(inset))
- delete inset;
- else
- updateInset(inset, true);
- }
- break;
-
- case LFUN_INSET_CAPTION:
- {
- // Do we have a locking inset...
- if (bv_->theLockingInset()) {
- lyxerr << "Locking inset code: "
- << static_cast<int>(bv_->theLockingInset()->lyxCode());
- InsetCaption * new_inset =
- new InsetCaption(buffer_->params);
- new_inset->setOwner(bv_->theLockingInset());
- new_inset->setAutoBreakRows(true);
- new_inset->setDrawFrame(0, InsetText::LOCKED);
- new_inset->setFrameColor(0, LColor::captionframe);
- if (insertInset(new_inset))
- new_inset->edit(bv_);
- else
- delete new_inset;
- }
- }
- break;
-
-
// --- accented characters ---------------------------
case LFUN_UMLAUT:
InsetCitation * inset = new InsetCitation(p);
if (!insertInset(inset))
delete inset;
- else
+ else {
+ inset->setLoadingBuffer(bv_->buffer(), false);
updateInset(inset, true);
+ }
+
}
break;
{
InsetBibtex * inset =
static_cast<InsetBibtex*>(getInsetByCode(Inset::BIBTEX_CODE));
- if (inset) {
+ if (inset)
inset->delDatabase(ev.argument);
- }
}
break;
{
InsetBibtex * inset =
static_cast<InsetBibtex*>(getInsetByCode(Inset::BIBTEX_CODE));
- if (inset) {
+ if (inset)
inset->setOptions(ev.argument);
- }
}
break;
- case LFUN_INDEX_INSERT:
- {
- string entry = ev.argument;
- if (entry.empty())
- entry = bv_->getLyXText()->getStringToIndex(bv_);
-
- if (entry.empty()) {
- owner_->getDialogs().createIndex();
- break;
- }
-
- InsetIndex * inset = new InsetIndex(InsetCommandParams("index", entry));
-
- if (!insertInset(inset)) {
- delete inset;
- } else {
- updateInset(inset, true);
- }
- }
- break;
-
- case LFUN_INDEX_PRINT:
- {
- InsetCommandParams p("printindex");
- Inset * inset = new InsetPrintIndex(p);
- if (!insertInset(inset, tclass.defaultLayoutName()))
- delete inset;
- }
- break;
-
- case LFUN_PARENTINSERT:
- {
- InsetCommandParams p("lyxparent", ev.argument);
- Inset * inset = new InsetParent(p, *buffer_);
- if (!insertInset(inset, tclass.defaultLayoutName()))
- delete inset;
- }
-
- break;
-
case LFUN_CHILD_INSERT:
{
InsetInclude::Params p;
- p.cparams.setFromString(ev.argument);
+ if (!ev.argument.empty())
+ p.cparams.setFromString(ev.argument);
p.masterFilename_ = buffer_->fileName();
InsetInclude * inset = new InsetInclude(p);
// inset there otherwise this is a illegal function now
if (bv_->theLockingInset()) {
if (bv_->theLockingInset()->insetAllowed(inset))
- return bv_->theLockingInset()->insertInset(bv_, inset);
+ return bv_->theLockingInset()->insertInset(bv_, inset);
return false;
}