#include "updatableinset.h"
#include "BufferView.h"
+#include "coordcache.h"
+#include "cursor.h"
#include "debug.h"
#include "dispatchresult.h"
#include "funcrequest.h"
#include "support/lstrings.h"
+#include <boost/assert.hpp>
using lyx::support::strToDbl;
using lyx::support::strToInt;
-using std::string;
-
-
-// some stuff for inset locking
-
-void UpdatableInset::insetUnlock(BufferView *)
-{
- lyxerr[Debug::INFO] << "Inset Unlock" << std::endl;
-}
// An updatable inset is highly editable by definition
-InsetOld::EDITABLE UpdatableInset::editable() const
+InsetBase::EDITABLE UpdatableInset::editable() const
{
return HIGHLY_EDITABLE;
}
-void UpdatableInset::fitInsetCursor(BufferView *) const
-{}
-
-
-void UpdatableInset::draw(PainterInfo &, int, int) const
-{
- // ATTENTION: don't do the following here!!!
- // top_x = x;
- // top_baseline = y;
-}
-
-
-void UpdatableInset::scroll(BufferView * bv, float s) const
+void UpdatableInset::scroll(BufferView & bv, float s) const
{
- //LyXFont font;
-
if (!s) {
scx = 0;
return;
}
- int const workW = bv->workWidth();
- int const tmp_top_x = top_x - scx;
+ int const workW = bv.workWidth();
+ int xo_ = theCoords.insets_.x(this);
+ int const tmp_xo_ = xo_ - scx;
- if (tmp_top_x > 0 && tmp_top_x + width() < workW)
+ if (tmp_xo_ > 0 && tmp_xo_ + width() < workW)
return;
- if (s > 0 && top_x > 0)
+ if (s > 0 && xo_ > 0)
return;
scx = int(s * workW / 2);
- // if (!display())
- // scx += 20;
+#ifdef WITH_WARNINGS
#warning metrics?
- if (tmp_top_x + scx + width() < workW / 2) {
- scx += workW / 2 - (tmp_top_x + scx + width());
- }
+#endif
+ if (tmp_xo_ + scx + width() < workW / 2)
+ scx = workW / 2 - tmp_xo_ - width();
}
-void UpdatableInset::scroll(BufferView * bv, int offset) const
+
+void UpdatableInset::scroll(BufferView & bv, int offset) const
{
+ int const xo_ = theCoords.insets_.x(this);
if (offset > 0) {
- if (!scx && top_x >= 20)
+ if (!scx && xo_ >= 20)
return;
- if ((top_x + offset) > 20)
+ if (xo_ + offset > 20)
scx = 0;
- // scx += offset - (top_x - scx + offset - 20);
+ // scx = - xo_;
else
scx += offset;
} else {
+#ifdef WITH_WARNINGS
#warning metrics?
- if (!scx && top_x + width() < bv->workWidth() - 20)
+#endif
+ if (!scx && xo_ + width() < bv.workWidth() - 20)
return;
- if (top_x - scx + offset + width() < bv->workWidth() - 20) {
- scx += bv->workWidth() - width() - top_x - 20;
+ if (xo_ - scx + offset + width() < bv.workWidth() - 20) {
+ scx += bv.workWidth() - width() - xo_ - 20;
} else {
scx += offset;
}
}
-/// An updatable inset could handle lyx editing commands
-DispatchResult
-UpdatableInset::priv_dispatch(FuncRequest const & ev, idx_type &, pos_type &)
+void UpdatableInset::doDispatch(LCursor & cur, FuncRequest & cmd)
{
- if (ev.action == LFUN_MOUSE_RELEASE)
- return DispatchResult(editable() == IS_EDITABLE);
-
- if (!ev.argument.empty() && ev.action == LFUN_SCROLL_INSET) {
- if (ev.argument.find('.') != ev.argument.npos) {
- float const xx = static_cast<float>(strToDbl(ev.argument));
- scroll(ev.view(), xx);
- } else {
- int const xx = strToInt(ev.argument);
- scroll(ev.view(), xx);
+ switch (cmd.action) {
+ //case LFUN_MOUSE_RELEASE:
+ // return DispatchResult(editable() == IS_EDITABLE);
+
+ case LFUN_SCROLL_INSET:
+ if (cmd.argument.empty()) {
+ if (cmd.argument.find('.') != cmd.argument.npos)
+ scroll(cur.bv(), static_cast<float>(strToDbl(cmd.argument)));
+ else
+ scroll(cur.bv(), strToInt(cmd.argument));
+ cur.bv().update();
}
- ev.view()->updateInset(this);
+ break;
- return DispatchResult(true, true);
+ default:
+ InsetBase::dispatch(cur, cmd);
}
- return DispatchResult(false);
-}
-
-
-LyXCursor const & InsetOld::cursor(BufferView * bv) const
-{
- if (owner())
- return owner()->getLyXText(bv, false)->cursor;
- return bv->text->cursor;
-}
-
-
-bool UpdatableInset::nextChange(BufferView * bv, lyx::pos_type &)
-{
- // we have to unlock ourself in this function by default!
- bv->unlockInset(const_cast<UpdatableInset *>(this));
- return false;
-}
-
-
-bool UpdatableInset::searchForward(BufferView * bv, string const &,
- bool, bool)
-{
- // we have to unlock ourself in this function by default!
- bv->unlockInset(const_cast<UpdatableInset *>(this));
- return false;
}
-bool UpdatableInset::searchBackward(BufferView * bv, string const &,
- bool, bool)
+void UpdatableInset::getCursorDim(int &, int &) const
{
- // we have to unlock ourself in this function by default!
- bv->unlockInset(const_cast<UpdatableInset *>(this));
- return false;
+ BOOST_ASSERT(false);
}