#include "ParagraphParameters.h"
#include "undo_funcs.h"
#include "funcrequest.h"
-#include "box.h"
#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"
boost::signals::connection lostcon;
- /**
- * Return the on-screen dimensions of the inset at the cursor.
- * Pre-condition: the cursor must be at an inset.
- */
-Box insetDimensions(BufferView * bv, LyXText const & text,
- LyXCursor const & cursor)
-{
- Paragraph /*const*/ & par = *cursor.par();
- pos_type const pos = cursor.pos();
-
- lyx::Assert(par.getInset(pos));
-
- Inset const & inset(*par.getInset(pos));
-
- LyXFont const & font = text.getFont(bv->buffer(), &par, pos);
-
- int const width = inset.width(bv, font);
- int const inset_x = font.isVisibleRightToLeft()
- ? (cursor.ix() - width) : cursor.ix();
-
- return Box(
- inset_x + inset.scroll(),
- inset_x + width,
- cursor.iy() - inset.ascent(bv, font),
- cursor.iy() + inset.descent(bv, font));
-}
-
-
-/**
- * check if the given co-ordinates are inside an inset at the
- * given cursor, if one exists. If so, the inset is returned,
- * and the co-ordinates are made relative. Otherwise, 0 is returned.
- */
-Inset * checkInset(BufferView * bv, LyXText const & text,
- LyXCursor const & cursor, int & x, int & y)
-{
- pos_type const pos = cursor.pos();
- Paragraph /*const*/ & par(*cursor.par());
-
- if (pos >= par.size() || !par.isInset(pos)) {
- return 0;
- }
-
- Inset /*const*/ * inset = par.getInset(pos);
-
- if (!isEditableInset(inset))
- return 0;
-
- Box b = insetDimensions(bv, text, cursor);
-
- if (!b.contained(x, y)) {
- lyxerr[Debug::GUI] << "Missed inset at x,y " << x << "," << y
- << " box " << b << endl;
- return 0;
- }
-
- text.setCursor(bv, &par, pos, true);
-
- x -= b.x1;
- // The origin of an inset is on the baseline
- y -= text.cursor.iy();
-
- return inset;
-}
-
} // anon namespace
{
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;
}
-
-Inset * BufferView::Pimpl::checkInsetHit(LyXText * text, int & x, int & y)
-{
- int y_tmp = y + text->first_y;
-
- LyXCursor cursor;
- text->setCursorFromCoordinates(bv_, cursor, x, y_tmp);
-
- Inset * inset = checkInset(bv_, *text, cursor, x, y_tmp);
-
- if (inset) {
- y = y_tmp;
- return inset;
- }
-
- // look at previous position
- if (cursor.pos() == 0) {
- return 0;
- }
-
- // move back one
- text->setCursor(bv_, cursor, cursor.par(), cursor.pos() - 1, true);
-
- inset = checkInset(bv_, *text, cursor, x, y_tmp);
- if (inset) {
- y = y_tmp;
- }
- return inset;
-}
-
-
void BufferView::Pimpl::workAreaResize()
{
static int work_area_width;
<< " 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:
{
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;
// 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;
}