class EE::UI::UICodeEditorPlugin

#include <uicodeeditor.hpp>

class UICodeEditorPlugin {
public:
    // typedefs

    typedef std::function<void(UICodeEditorPlugin*, const Uint32&)> OnReadyCb;

    // construction

    virtual ~UICodeEditorPlugin();

    // methods

    virtual std::string getId() = 0;
    virtual std::string getTitle() = 0;
    virtual std::string getDescription() = 0;
    virtual bool isReady() const = 0;
    virtual bool hasGUIConfig();
    virtual bool hasFileConfig();
    virtual UIWindow* getGUIConfig();
    virtual std::string getFileConfigPath();
    virtual void onRegister(UICodeEditor*) = 0;
    virtual void onUnregister(UICodeEditor*) = 0;
    virtual bool onKeyDown(UICodeEditor*, const KeyEvent&);
    virtual bool onKeyUp(UICodeEditor*, const KeyEvent&);
    virtual bool onTextInput(UICodeEditor*, const TextInputEvent&);
    virtual void update(UICodeEditor*);
    virtual void preDraw(UICodeEditor*, const Vector2f&, const Float&, const TextPosition&);
    virtual void postDraw(UICodeEditor*, const Vector2f&, const Float&, const TextPosition&);
    virtual void onFocus(UICodeEditor*);
    virtual void onFocusLoss(UICodeEditor*);
    virtual bool onMouseDown(UICodeEditor*, const Vector2i&, const Uint32&);
    virtual bool onMouseMove(UICodeEditor*, const Vector2i&, const Uint32&);
    virtual bool onMouseUp(UICodeEditor*, const Vector2i&, const Uint32&);
    virtual bool onMouseClick(UICodeEditor*, const Vector2i&, const Uint32&);
    virtual bool onMouseDoubleClick(UICodeEditor*, const Vector2i&, const Uint32&);
    virtual bool onMouseOver(UICodeEditor*, const Vector2i&, const Uint32&);
    virtual bool onMouseLeave(UICodeEditor*, const Vector2i&, const Uint32&);
    virtual bool onCreateContextMenu(UICodeEditor*, UIPopUpMenu*, const Vector2i&, const Uint32&);
    virtual void drawBeforeLineText(UICodeEditor*, const Int64&, Vector2f, const Float&, const Float&);
    virtual void drawAfterLineText(UICodeEditor*, const Int64&, Vector2f, const Float&, const Float&);

    virtual void minimapDrawBefore(
        UICodeEditor*,
        const DocumentLineRange&,
        const DocumentViewLineRange&,
        const Vector2f&,
        const Vector2f&,
        const Float&,
        const Float&,
        const DrawTextRangesFn&
    );

    virtual void minimapDrawAfter(
        UICodeEditor*,
        const DocumentLineRange&,
        const DocumentViewLineRange&,
        const Vector2f&,
        const Vector2f&,
        const Float&,
        const Float&,
        const DrawTextRangesFn&
    );

    virtual void drawGutter(UICodeEditor*, const Int64&, const Vector2f&, const Float&, const Float&, const Float&);
    virtual void drawTop(UICodeEditor*, const Vector2f&, const Sizef&, const Float&);
    Uint32 addOnReadyCallback(const OnReadyCb& cb);
    void removeReadyCallback(const Uint32& id);
};