You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
249 lines
4.8 KiB
249 lines
4.8 KiB
/* |
|
* Xournal++ |
|
* |
|
* Handler for actions, every menu action, tool button etc. is defined here |
|
* |
|
* @author Xournal++ Team |
|
* https://github.com/xournalpp/xournalpp |
|
* |
|
* @license GNU GPLv2 or later |
|
*/ |
|
|
|
#pragma once |
|
|
|
#include <XournalType.h> |
|
|
|
#include <gtk/gtk.h> |
|
#include <list> |
|
|
|
enum ActionType |
|
{ |
|
ACTION_NONE = 0, |
|
|
|
// Menu file |
|
ACTION_NEW = 100, |
|
ACTION_OPEN, |
|
ACTION_ANNOTATE_PDF, |
|
ACTION_SAVE, |
|
ACTION_SAVE_AS, |
|
ACTION_EXPORT_AS_PDF, |
|
ACTION_EXPORT_AS, |
|
ACTION_PRINT, |
|
ACTION_QUIT, |
|
|
|
// Menu edit |
|
ACTION_UNDO = 200, |
|
ACTION_REDO, |
|
ACTION_CUT, |
|
ACTION_COPY, |
|
ACTION_PASTE, |
|
ACTION_SEARCH, |
|
ACTION_DELETE, |
|
ACTION_SETTINGS, |
|
|
|
// Menu navigation |
|
ACTION_GOTO_FIRST = 300, |
|
ACTION_GOTO_BACK, |
|
ACTION_GOTO_PAGE, |
|
ACTION_GOTO_NEXT, |
|
ACTION_GOTO_LAST, |
|
ACTION_GOTO_NEXT_LAYER, |
|
ACTION_GOTO_PREVIOUS_LAYER, |
|
ACTION_GOTO_TOP_LAYER, |
|
ACTION_GOTO_NEXT_ANNOTATED_PAGE, |
|
ACTION_GOTO_PREVIOUS_ANNOTATED_PAGE, |
|
|
|
//Menu Journal |
|
ACTION_NEW_PAGE_BEFORE = 400, |
|
ACTION_NEW_PAGE_AFTER, |
|
ACTION_NEW_PAGE_AT_END, |
|
|
|
ACTION_CONFIGURE_PAGE_TEMPLATE, |
|
|
|
ACTION_DELETE_PAGE, |
|
ACTION_NEW_LAYER, |
|
ACTION_DELETE_LAYER, |
|
ACTION_PAPER_FORMAT, |
|
ACTION_PAPER_BACKGROUND_COLOR, |
|
|
|
// Menu Tools |
|
// Has to be in the same order as in Tool.h: ToolType! |
|
ACTION_TOOL_PEN = 500, |
|
ACTION_TOOL_ERASER, |
|
ACTION_TOOL_HILIGHTER, |
|
ACTION_TOOL_TEXT, |
|
ACTION_TOOL_IMAGE, |
|
ACTION_TOOL_SELECT_RECT, |
|
ACTION_TOOL_SELECT_REGION, |
|
ACTION_TOOL_SELECT_OBJECT, |
|
ACTION_TOOL_PLAY_OBJECT, |
|
ACTION_TOOL_VERTICAL_SPACE, |
|
ACTION_TOOL_HAND, |
|
ACTION_TOOL_DEFAULT, |
|
|
|
ACTION_SHAPE_RECOGNIZER, |
|
ACTION_TOOL_DRAW_RECT, |
|
ACTION_TOOL_DRAW_CIRCLE, |
|
ACTION_TOOL_DRAW_ARROW, |
|
ACTION_RULER, |
|
|
|
ACTION_SIZE_VERY_THIN, |
|
ACTION_SIZE_FINE, |
|
ACTION_SIZE_MEDIUM, |
|
ACTION_SIZE_THICK, |
|
ACTION_SIZE_VERY_THICK, |
|
|
|
ACTION_TOOL_ERASER_STANDARD, |
|
ACTION_TOOL_ERASER_WHITEOUT, |
|
ACTION_TOOL_ERASER_DELETE_STROKE, |
|
|
|
ACTION_TOOL_ERASER_SIZE_FINE, |
|
ACTION_TOOL_ERASER_SIZE_MEDIUM, |
|
ACTION_TOOL_ERASER_SIZE_THICK, |
|
|
|
ACTION_TOOL_PEN_SIZE_VERY_THIN, |
|
ACTION_TOOL_PEN_SIZE_FINE, |
|
ACTION_TOOL_PEN_SIZE_MEDIUM, |
|
ACTION_TOOL_PEN_SIZE_THICK, |
|
ACTION_TOOL_PEN_SIZE_VERY_THICK, |
|
|
|
ACTION_TOOL_PEN_FILL, |
|
ACTION_TOOL_PEN_FILL_TRANSPARENCY, |
|
|
|
ACTION_TOOL_HILIGHTER_SIZE_FINE, |
|
ACTION_TOOL_HILIGHTER_SIZE_MEDIUM, |
|
ACTION_TOOL_HILIGHTER_SIZE_THICK, |
|
|
|
ACTION_TOOL_HILIGHTER_FILL, |
|
ACTION_TOOL_HILIGHTER_FILL_TRANSPARENCY, |
|
|
|
ACTION_ROTATION_SNAPPING, |
|
ACTION_GRID_SNAPPING, |
|
|
|
// Used for all colors |
|
ACTION_SELECT_COLOR, |
|
ACTION_SELECT_COLOR_CUSTOM, |
|
|
|
ACTION_SELECT_FONT, |
|
ACTION_FONT_BUTTON_CHANGED, |
|
ACTION_TEX, |
|
|
|
// Menu View |
|
ACTION_ZOOM_IN = 600, |
|
ACTION_ZOOM_OUT, |
|
ACTION_ZOOM_FIT, |
|
ACTION_ZOOM_100, |
|
ACTION_FULLSCREEN, |
|
ACTION_VIEW_TWO_PAGES, |
|
ACTION_VIEW_PRESENTATION_MODE, |
|
ACTION_MANAGE_TOOLBAR, |
|
ACTION_CUSTOMIZE_TOOLBAR, |
|
ACTION_RECSTOP, |
|
|
|
// Menu Help |
|
ACTION_ABOUT = 800, |
|
ACTION_HELP, |
|
|
|
// Footer, not really an action, but need an identifier too |
|
ACTION_FOOTER_PAGESPIN = 900, |
|
ACTION_FOOTER_ZOOM_SLIDER, |
|
ACTION_FOOTER_LAYER, |
|
|
|
// Used to select no item in a group... |
|
ACTION_NOT_SELECTED = 1 |
|
}; |
|
|
|
enum ActionGroup |
|
{ |
|
GROUP_NOGROUP = 0, |
|
GROUP_TOOL = 1, |
|
GROUP_COLOR, |
|
GROUP_SIZE, |
|
GROUP_ERASER_MODE, |
|
GROUP_ERASER_SIZE, |
|
GROUP_PEN_SIZE, |
|
GROUP_PEN_FILL, |
|
GROUP_HILIGHTER_SIZE, |
|
GROUP_HILIGHTER_FILL, |
|
|
|
// Need group for toggle button, this is the first Toggle Group |
|
GROUP_TOGGLE_GROUP, |
|
|
|
GROUP_TWOPAGES, |
|
GROUP_PRESENTATION_MODE, |
|
|
|
GROUP_FULLSCREEN, |
|
|
|
GROUP_RULER, |
|
|
|
GROUP_REC, |
|
|
|
GROUP_SNAPPING, |
|
|
|
GROUP_GRID_SNAPPING, |
|
}; |
|
|
|
class ActionHandler; |
|
|
|
class ActionEnabledListener |
|
{ |
|
public: |
|
ActionEnabledListener(); |
|
virtual ~ActionEnabledListener(); |
|
|
|
public: |
|
virtual void actionEnabledAction(ActionType action, bool enabled) = 0; |
|
|
|
void registerListener(ActionHandler* handler); |
|
void unregisterListener(); |
|
|
|
private: |
|
XOJ_TYPE_ATTRIB; |
|
|
|
|
|
ActionHandler* handler; |
|
}; |
|
|
|
class ActionSelectionListener |
|
{ |
|
public: |
|
ActionSelectionListener(); |
|
virtual ~ActionSelectionListener(); |
|
|
|
virtual void actionSelected(ActionGroup group, ActionType action) = 0; |
|
|
|
void registerListener(ActionHandler* handler); |
|
void unregisterListener(); |
|
|
|
private: |
|
XOJ_TYPE_ATTRIB; |
|
|
|
|
|
ActionHandler* handler; |
|
}; |
|
|
|
class ActionHandler |
|
{ |
|
public: |
|
ActionHandler(); |
|
virtual ~ActionHandler(); |
|
|
|
public: |
|
virtual void actionPerformed(ActionType type, ActionGroup group, |
|
GdkEvent* event, GtkMenuItem* menuitem, |
|
GtkToolButton* toolbutton, bool enabled) = 0; |
|
|
|
void fireEnableAction(ActionType action, bool enabled); |
|
void addListener(ActionEnabledListener* listener); |
|
void removeListener(ActionEnabledListener* listener); |
|
|
|
void fireActionSelected(ActionGroup group, ActionType action); |
|
void addListener(ActionSelectionListener* listener); |
|
void removeListener(ActionSelectionListener* listener); |
|
|
|
private: |
|
XOJ_TYPE_ATTRIB; |
|
|
|
std::list<ActionEnabledListener*> enabledListener; |
|
std::list<ActionSelectionListener*> selectionListener; |
|
};
|
|
|