*
* LyX, The Document Processor
*
- * Copyright 1995 Matthias Ettrich
- * Copyright 1995-1999 the LyX Team.
+ * Copyright 1995-2000 the LyX Team.
*
* ====================================================== */
#pragma interface
#endif
+#include <X11/Xlib.h>
+
#include "gettext.h"
#include "lyxfont.h"
#include "lyxlex.h"
-#include "lyxscreen.h"
-
-//#define USE_PAINTER 1
-#ifdef USE_PAINTER
class Painter;
-#endif
-
class Buffer;
+class BufferView;
+
struct LaTeXFeatures;
+
+
/// Insets
class Inset {
public:
///
PARENT_CODE,
///
- BIBTEX_CODE
+ BIBTEX_CODE,
+ ///
+ TEXT_CODE,
+ ///
+ ERT_CODE,
+ ///
+ FOOT_CODE,
+ ///
+ MARGIN_CODE,
+ ///
+ SPECIALCHAR_CODE,
+ ///
+ TABULAR_CODE
};
+ enum EDITABLE {
+ NOT_EDITABLE = 0,
+ IS_EDITABLE,
+ HIGHLY_EDITABLE
+ };
+
+ ///
+ Inset() { owner_ = 0; }
///
virtual ~Inset() {}
-#ifdef USE_PAINTER
///
virtual int ascent(Painter &, LyXFont const &) const = 0;
///
///
virtual void draw(Painter &, LyXFont const &,
int baseline, float & x) const = 0;
-#else
///
- virtual int Ascent(LyXFont const & font) const = 0;
+ virtual LyXFont ConvertFont(LyXFont font);
+ /// what appears in the minibuffer when opening
+ virtual const char * EditMessage() const;
///
- virtual int Descent(LyXFont const & font) const = 0;
+ virtual void Edit(BufferView *, int x, int y, unsigned int button);
///
- virtual int Width(LyXFont const & font) const = 0;
+ virtual EDITABLE Editable() const;
///
- virtual void Draw(LyXFont font, LyXScreen & scr,
- int baseline, float & x) = 0;
-#endif
+ virtual void InsetButtonPress(BufferView *, int, int, int) {}
///
- virtual LyXFont ConvertFont(LyXFont font);
- /// what appears in the minibuffer when opening
- virtual char const * EditMessage() const {return _("Opened inset");}
+ virtual void InsetButtonRelease(BufferView *, int, int, int) {}
///
- virtual void Edit(int, int);
+ virtual void InsetMotionNotify(BufferView *, int , int , int) {}
///
- virtual unsigned char Editable() const;
+ bool IsTextInset() const;
///
virtual bool AutoDelete() const;
///
- virtual void Write(ostream &) = 0;
+ virtual void Write(std::ostream &) const = 0;
///
virtual void Read(LyXLex & lex) = 0;
/** returns the number of rows (\n's) of generated tex code.
- fragile != 0 means, that the inset should take care about
+ fragile == true means, that the inset should take care about
fragile commands by adding a \protect before.
+ If the free_spc (freespacing) variable is set, then this inset
+ is in a free-spacing paragraph.
*/
- virtual int Latex(ostream &, signed char fragile) = 0;
+ virtual int Latex(std::ostream &, bool fragile,
+ bool free_spc) const = 0;
///
- virtual int Latex(string & file, signed char fragile) = 0;
+ virtual int Ascii(std::ostream &) const = 0;
///
- virtual int Linuxdoc(string & /*file*/) = 0;
+ virtual int Linuxdoc(std::ostream &) const = 0;
///
- virtual int DocBook(string & /*file*/) = 0;
+ virtual int DocBook(std::ostream &) const = 0;
/// Updates needed features for this inset.
virtual void Validate(LaTeXFeatures & features) const;
///
virtual bool Deletable() const;
/// returns LyX code associated with the inset. Used for TOC, ...)
- virtual Inset::Code LyxCode() const = 0;
+ virtual Inset::Code LyxCode() const { return NO_CODE; }
/// Get the label that appears at screen
virtual string getLabel(int) const {
virtual int GetNumberOfLabels() const {
return 0;
}
-
+ ///
+ virtual bool InsertInsetAllowed(Inset *) const { return false; }
+ ///
+ virtual void setInsetName(const char * s) { name = s; }
+ ///
+ virtual string getInsetName() const { return name; }
+ ///
+ virtual void setOwner(Inset * inset) { owner_ = inset; }
+ ///
+ virtual Inset * owner() const { return owner_; }
+ ///
+private:
+ ///
+ Inset * owner_;
+ ///
+ string name;
};
*/
class UpdatableInset: public Inset {
public:
+ /** Dispatch result codes
+ Now that nested updatable insets are allowed, the local dispatch
+ becomes a bit complex, just two possible results (boolean)
+ are not enough.
+
+ DISPATCHED = the inset catched the action
+ DISPATCHED_NOUPDATE = the inset catched the action and no update
+ is needed here to redraw the inset
+ FINISHED = the inset must be unlocked as a result
+ of the action
+ UNDISPATCHED = the action was not catched, it should be
+ dispatched by lower level insets
+ */
+ enum RESULT {
+ UNDISPATCHED = 0,
+ DISPATCHED,
+ DISPATCHED_NOUPDATE,
+ FINISHED
+ };
+
+ /// To convert old binary dispatch results
+ RESULT DISPATCH_RESULT(bool b) {
+ return b ? DISPATCHED : FINISHED;
+ }
+
+ ///
+ UpdatableInset() { scx = mx_scx = 0; }
///
//virtual ~UpdatableInset() {}
///
- virtual unsigned char Editable() const;
+ virtual EDITABLE Editable() const;
/// may call ToggleLockedInsetCursor
- virtual void ToggleInsetCursor();
+ virtual void ToggleInsetCursor(BufferView *);
+ ///
+ virtual void ShowInsetCursor(BufferView *);
+ ///
+ virtual void HideInsetCursor(BufferView *);
///
virtual void GetCursorPos(int &, int &) const {}
///
- virtual void InsetButtonPress(int x, int y, int button);
+ virtual void InsetButtonPress(BufferView *, int x, int y, int button);
///
- virtual void InsetButtonRelease(int x, int y, int button);
-
+ virtual void InsetButtonRelease(BufferView *,
+ int x, int y, int button);
///
virtual void InsetKeyPress(XKeyEvent * ev);
///
- virtual void InsetMotionNotify(int x, int y, int state);
+ virtual void InsetMotionNotify(BufferView *, int x, int y, int state);
///
- virtual void InsetUnlock();
-
+ virtual void InsetUnlock(BufferView *);
+ ///
+ virtual void Edit(BufferView *, int x, int y, unsigned int button);
+ ///
+ virtual void draw(Painter &, LyXFont const &,
+ int baseline, float & x) const;
+ ///
+ virtual void SetFont(BufferView *, LyXFont const &,
+ bool toggleall = false);
+ ///
+ virtual bool InsertInset(BufferView *, Inset *) { return false; }
+ ///
+ virtual bool InsertInsetAllowed(Inset *) const { return true; }
+ ///
+ virtual UpdatableInset * GetLockingInset() { return this; }
+ ///
+ virtual int InsetInInsetY() { return 0; }
+ ///
+ virtual bool UpdateInsetInInset(BufferView *, Inset *)
+ { return false; }
+ ///
+ virtual bool LockInsetInInset(BufferView *, UpdatableInset *)
+ { return false; }
+ ///
+ virtual bool UnlockInsetInInset(BufferView *, UpdatableInset *,
+ bool /*lr*/ = false)
+ { return false; }
/// An updatable inset could handle lyx editing commands
- virtual bool LocalDispatch(int, char const *) { return false; };
- //
- bool isCursorVisible() const { return cursor_visible; }
+ virtual RESULT LocalDispatch(BufferView *, int, string const &);
+ ///
+ virtual bool isCursorVisible() const { return cursor_visible; }
+ ///
+ virtual int getMaxWidth(Painter & pain, UpdatableInset const *) const;
+
protected:
///
+ // virtual void UpdateLocal(bool flag=true);
+ ///
+ mutable int top_x;
+ mutable int top_baseline;
mutable bool cursor_visible;
+
+private:
+ ///
+ int mx_scx;
+ mutable int scx;
};
#endif