* Licence details can be found in the file COPYING.
*
* \author Alejandro Aguilar Sierra
- * \author Jürgen Vigna
- * \author Lars Gullik Bjønnes
+ * \author Jürgen Vigna
+ * \author Lars Gullik Bjønnes
* \author Matthias Ettrich
*
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
*/
#include <config.h>
#include "updatableinset.h"
+
#include "BufferView.h"
-#include "funcrequest.h"
+#include "coordcache.h"
+#include "cursor.h"
#include "debug.h"
-#include "lyxfont.h"
-#include "WordLangTuple.h"
+#include "dispatchresult.h"
+#include "funcrequest.h"
#include "lyxtext.h"
-#include "support/lstrings.h"
-
-using namespace lyx::support;
-
-// some stuff for inset locking
-UpdatableInset::UpdatableInset()
- : Inset(), block_drawing_(false)
-{}
+#include "support/convert.h"
-
-UpdatableInset::UpdatableInset(UpdatableInset const & in)
- : Inset(in), block_drawing_(false)
-{}
-
-
-void UpdatableInset::insetUnlock(BufferView *)
-{
- lyxerr[Debug::INFO] << "Inset Unlock" << std::endl;
-}
+#include <boost/assert.hpp>
// An updatable inset is highly editable by definition
-Inset::EDITABLE UpdatableInset::editable() const
+InsetBase::EDITABLE UpdatableInset::editable() const
{
return HIGHLY_EDITABLE;
}
-void UpdatableInset::fitInsetCursor(BufferView *) const
-{}
-
-
-void UpdatableInset::draw(PainterInfo &, int, int) const
+void UpdatableInset::scroll(BufferView & bv, double s) const
{
- // ATTENTION: don't do the following here!!!
- // top_x = x;
- // top_baseline = y;
-}
-
-
-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.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
-Inset::RESULT UpdatableInset::localDispatch(FuncRequest const & ev)
+void UpdatableInset::doDispatch(LCursor & cur, FuncRequest & cmd)
{
- if (ev.action == LFUN_MOUSE_RELEASE)
- return (editable() == IS_EDITABLE) ? DISPATCHED : UNDISPATCHED;
-
- 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>(convert<double>(cmd.argument)));
+ else
+ scroll(cur.bv(), convert<int>(cmd.argument));
+ cur.bv().update();
}
- ev.view()->updateInset(this);
+ break;
- return DISPATCHED;
+ default:
+ InsetBase::dispatch(cur, cmd);
}
- return UNDISPATCHED;
-}
-
-
-LyXCursor const & Inset::cursor(BufferView * bv) const
-{
- if (owner())
- return owner()->getLyXText(bv, false)->cursor;
- return bv->text->cursor;
-}
-
-
-WordLangTuple const
-UpdatableInset::selectNextWordToSpellcheck(BufferView *bv, float & value) const
-{
- // we have to unlock ourself in this function by default!
- bv->unlockInset(const_cast<UpdatableInset *>(this));
- value = 0;
- return WordLangTuple();
-}
-
-
-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);
}