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.
 
 
 
 
 
 

626 lines
24 KiB

#include "ToolMenuHandler.h"
#include "FontButton.h"
#include "MenuItem.h"
#include "ToolButton.h"
#include "ToolDrawCombocontrol.h"
#include "ToolPageLayer.h"
#include "ToolPageSpinner.h"
#include "ToolSelectCombocontrol.h"
#include "ToolZoomSlider.h"
#include "control/Actions.h"
#include "gui/ToolitemDragDrop.h"
#include "model/ToolbarData.h"
#include "model/ToolbarModel.h"
#include <config.h>
#include <config-features.h>
#include <i18n.h>
#include <glib.h>
ToolMenuHandler::ToolMenuHandler(ActionHandler* listener, ZoomControl* zoom, GladeGui* gui, ToolHandler* toolHandler,
GtkWindow* parent)
{
XOJ_INIT_TYPE(ToolMenuHandler);
this->parent = parent;
this->listener = listener;
this->zoom = zoom;
this->gui = gui;
this->toolHandler = toolHandler;
this->undoButton = NULL;
this->redoButton = NULL;
this->toolPageSpinner = NULL;
this->toolPageLayer = NULL;
this->tbModel = new ToolbarModel();
initToolItems();
}
ToolMenuHandler::~ToolMenuHandler()
{
XOJ_CHECK_TYPE(ToolMenuHandler);
delete this->tbModel;
this->tbModel = NULL;
for (MenuItem* it : this->menuItems)
{
delete it;
it = NULL;
}
freeDynamicToolbarItems();
for (AbstractToolItem* it : this->toolItems)
{
delete it;
it = NULL;
}
XOJ_RELEASE_TYPE(ToolMenuHandler);
}
void ToolMenuHandler::freeDynamicToolbarItems()
{
XOJ_CHECK_TYPE(ToolMenuHandler);
for (AbstractToolItem* it : this->toolItems)
{
it->setUsed(false);
}
for (ColorToolItem* it : this->toolbarColorItems)
{
delete it;
}
this->toolbarColorItems.clear();
}
void ToolMenuHandler::unloadToolbar(GtkWidget* toolbar)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
for (int i = gtk_toolbar_get_n_items(GTK_TOOLBAR(toolbar)) - 1; i >= 0; i--)
{
GtkToolItem* tbItem = gtk_toolbar_get_nth_item(GTK_TOOLBAR(toolbar), i);
gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(tbItem));
}
gtk_widget_hide(toolbar);
}
void ToolMenuHandler::load(ToolbarData* d, GtkWidget* toolbar, const char* toolbarName, bool horizontal)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
int count = 0;
for (ToolbarEntry* e : d->contents)
{
if (e->getName() == toolbarName)
{
for (ToolbarItem* dataItem : e->getItems())
{
string name = dataItem->getName();
if (name == "SEPARATOR")
{
GtkToolItem* it = gtk_separator_tool_item_new();
gtk_widget_show(GTK_WIDGET(it));
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), it, -1);
ToolitemDragDrop::attachMetadata(GTK_WIDGET(it), dataItem->getId(), TOOL_ITEM_SEPARATOR);
continue;
}
if (name == "SPACER")
{
GtkToolItem* toolItem = gtk_separator_tool_item_new();
gtk_separator_tool_item_set_draw(GTK_SEPARATOR_TOOL_ITEM(toolItem), false);
gtk_tool_item_set_expand(toolItem, true);
gtk_widget_show(GTK_WIDGET(toolItem));
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), toolItem, -1);
ToolitemDragDrop::attachMetadata(GTK_WIDGET(toolItem), dataItem->getId(), TOOL_ITEM_SPACER);
continue;
}
if (ba::starts_with(name, "COLOR(") && name.length() == 15)
{
string color = name.substr(6, 8);
if (!ba::starts_with(color, "0x"))
{
g_warning("Toolbar:COLOR(...) has to start with 0x, get color: %s", color.c_str());
continue;
}
count++;
color = color.substr(2);
gint c = g_ascii_strtoll(color.c_str(), NULL, 16);
ColorToolItem* item = new ColorToolItem(listener, toolHandler, this->parent, c);
this->toolbarColorItems.push_back(item);
GtkToolItem* it = item->createItem(horizontal);
gtk_widget_show_all(GTK_WIDGET(it));
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), it, -1);
ToolitemDragDrop::attachMetadataColor(GTK_WIDGET(it), dataItem->getId(), c, item);
continue;
}
bool found = false;
for (AbstractToolItem* item : this->toolItems)
{
if (name == item->getId())
{
if (item->isUsed())
{
g_warning("You can use the toolbar item \"%s\" only once!", item->getId().c_str());
found = true;
continue;
}
item->setUsed(true);
count++;
GtkToolItem* it = item->createItem(horizontal);
gtk_widget_show_all(GTK_WIDGET(it));
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(it), -1);
ToolitemDragDrop::attachMetadata(GTK_WIDGET(it), dataItem->getId(), item);
found = true;
break;
}
}
if (!found)
{
g_warning("Toolbar item \"%s\" not found!", name.c_str());
}
}
break;
}
}
if (count == 0)
{
gtk_widget_hide(toolbar);
}
else
{
gtk_widget_show(toolbar);
}
}
void ToolMenuHandler::removeColorToolItem(AbstractToolItem* it)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
g_return_if_fail(it != NULL);
for (unsigned int i = 0; i < this->toolbarColorItems.size(); i++)
{
if (this->toolbarColorItems[i] == it)
{
this->toolbarColorItems.erase(this->toolbarColorItems.begin() + i);
break;
}
}
delete (ColorToolItem*) it;
}
void ToolMenuHandler::addColorToolItem(AbstractToolItem* it)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
g_return_if_fail(it != NULL);
this->toolbarColorItems.push_back((ColorToolItem*) it);
}
void ToolMenuHandler::setTmpDisabled(bool disabled)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
for (AbstractToolItem* it : this->toolItems) it->setTmpDisabled(disabled);
for (MenuItem* it : this->menuItems) it->setTmpDisabled(disabled);
for (ColorToolItem* it : this->toolbarColorItems) it->setTmpDisabled(disabled);
GtkWidget* menuViewSidebarVisible = gui->get("menuViewSidebarVisible");
gtk_widget_set_sensitive(menuViewSidebarVisible, !disabled);
}
void ToolMenuHandler::addToolItem(AbstractToolItem* it)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
this->toolItems.push_back(it);
}
void ToolMenuHandler::registerMenupoint(GtkWidget* widget, ActionType type)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
MenuItem* it = new MenuItem(listener, widget, type);
this->menuItems.push_back(it);
}
void ToolMenuHandler::registerMenupoint(GtkWidget* widget, ActionType type, ActionGroup group)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
MenuItem* it = new MenuItem(listener, widget, type, group);
this->menuItems.push_back(it);
}
void ToolMenuHandler::initEraserToolItem()
{
XOJ_CHECK_TYPE(ToolMenuHandler);
ToolButton* tbEraser = new ToolButton(listener, gui, "ERASER", ACTION_TOOL_ERASER, GROUP_TOOL, true,
"tool_eraser.svg", _C("Eraser"), gui->get("menuToolsEraser"));
GtkWidget* eraserPopup = gtk_menu_new();
GtkWidget* eraserPopupStandard = gtk_check_menu_item_new_with_label(_C("standard"));
gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(eraserPopupStandard), true);
gtk_widget_show(eraserPopupStandard);
gtk_container_add(GTK_CONTAINER(eraserPopup), eraserPopupStandard);
registerMenupoint(gui->get("eraserStandard"), ACTION_TOOL_ERASER_STANDARD, GROUP_ERASER_MODE);
registerMenupoint(eraserPopupStandard, ACTION_TOOL_ERASER_STANDARD, GROUP_ERASER_MODE);
GtkWidget* eraserPopupWhiteout = gtk_check_menu_item_new_with_label(_C("whiteout"));
gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(eraserPopupWhiteout), true);
gtk_widget_show(eraserPopupWhiteout);
gtk_container_add(GTK_CONTAINER(eraserPopup), eraserPopupWhiteout);
registerMenupoint(gui->get("eraserWhiteout"), ACTION_TOOL_ERASER_WHITEOUT, GROUP_ERASER_MODE);
registerMenupoint(eraserPopupWhiteout, ACTION_TOOL_ERASER_WHITEOUT, GROUP_ERASER_MODE);
GtkWidget* eraserPopupDeleteStroke = gtk_check_menu_item_new_with_label(_C("delete stroke"));
gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(eraserPopupDeleteStroke), true);
gtk_widget_show(eraserPopupDeleteStroke);
gtk_container_add(GTK_CONTAINER(eraserPopup), eraserPopupDeleteStroke);
registerMenupoint(gui->get("eraserDeleteStrokes"), ACTION_TOOL_ERASER_DELETE_STROKE, GROUP_ERASER_MODE);
registerMenupoint(eraserPopupDeleteStroke, ACTION_TOOL_ERASER_DELETE_STROKE, GROUP_ERASER_MODE);
tbEraser->setPopupMenu(eraserPopup);
addToolItem(tbEraser);
}
void ToolMenuHandler::initToolItems()
{
XOJ_CHECK_TYPE(ToolMenuHandler);
addToolItem(new ToolButton(listener, "SAVE", ACTION_SAVE, "document-save", _C("Save"), gui->get("menuFileSave")));
addToolItem(new ToolButton(listener, "NEW", ACTION_NEW, "document-new", _C("New Xournal"), gui->get("menuFileNew")));
addToolItem(new ToolButton(listener, "OPEN", ACTION_OPEN, "document-open", _C("Open file"), gui->get("menuFileOpen")));
addToolItem(new ToolButton(listener, "CUT", ACTION_CUT, "edit-cut", _C("Cut"), gui->get("menuEditCut")));
addToolItem(new ToolButton(listener, "COPY", ACTION_COPY, "edit-copy", _C("Copy"), gui->get("menuEditCopy")));
addToolItem(new ToolButton(listener, "PASTE", ACTION_PASTE, "edit-paste", _C("Paste"), gui->get("menuEditPaste")));
addToolItem(new ToolButton(listener, "SEARCH", ACTION_SEARCH, "edit-find", _C("Search"), gui->get("menuEditSearch")));
undoButton = new ToolButton(listener, "UNDO", ACTION_UNDO, "edit-undo", _C("Undo"), gui->get("menuEditUndo"));
redoButton = new ToolButton(listener, "REDO", ACTION_REDO, "edit-redo", _C("Redo"), gui->get("menuEditRedo"));
addToolItem(undoButton);
addToolItem(redoButton);
addToolItem(new ToolButton(listener, "GOTO_FIRST", ACTION_GOTO_FIRST, "go-first", _C("Go to first page"),
gui->get("menuViewFirstPage")));
addToolItem(new ToolButton(listener, "GOTO_BACK", ACTION_GOTO_BACK, "go-previous", _C("Back"),
gui->get("menuNavigationPreviousPage")));
addToolItem(new ToolButton(listener, "GOTO_BACK", ACTION_GOTO_BACK, "go-previous", _C("Back"),
gui->get("menuNavigationPreviousPage")));
addToolItem(new ToolButton(listener, gui, "GOTO_PAGE", ACTION_GOTO_PAGE, "goto.svg", _C("Go to page"),
gui->get("menuNavigationGotoPage")));
addToolItem(new ToolButton(listener, "GOTO_NEXT", ACTION_GOTO_NEXT, "go-next", _C("Next"),
gui->get("menuNavigationNextPage")));
addToolItem(new ToolButton(listener, "GOTO_LAST", ACTION_GOTO_LAST, "go-last", _C("Go to last page"),
gui->get("menuNavigationLastPage")));
addToolItem(new ToolButton(listener, "GOTO_PREVIOUS_LAYER", ACTION_GOTO_PREVIOUS_LAYER, "go-previous", _C("Go to previous layer"),
gui->get("menuNavigationPreviousLayer")));
addToolItem(new ToolButton(listener, "GOTO_NEXT_LAYER", ACTION_GOTO_NEXT_LAYER, "go-next", _C("Go to next layer"),
gui->get("menuNavigationNextLayer")));
addToolItem(new ToolButton(listener, "GOTO_TOP_LAYER", ACTION_GOTO_TOP_LAYER, "go-top", _C("Go to top layer"),
gui->get("menuNavigationTopLayer")));
addToolItem(new ToolButton(listener, gui, "GOTO_NEXT_ANNOTATED_PAGE", ACTION_GOTO_NEXT_ANNOTATED_PAGE,
"nextAnnotatedPage.svg", _C("Next annotated page"),
gui->get("menuNavigationNextAnnotatedPage")));
addToolItem(new ToolButton(listener, "ZOOM_OUT", ACTION_ZOOM_OUT, "zoom-out", _C("Zoom out"),
gui->get("menuViewZoomOut")));
addToolItem(new ToolButton(listener, "ZOOM_IN", ACTION_ZOOM_IN, "zoom-in", _C("Zoom in"),
gui->get("menuViewZoomIn")));
addToolItem(new ToolButton(listener, "ZOOM_FIT", ACTION_ZOOM_FIT, "zoom-fit-best", _C("Zoom fit to screen"),
gui->get("menuViewZoomFit")));
addToolItem(new ToolButton(listener, "ZOOM_100", ACTION_ZOOM_100, "zoom-original", _C("Zoom to 100%"),
gui->get("menuViewZoom100")));
addToolItem(new ToolButton(listener, gui, "FULLSCREEN", ACTION_FULLSCREEN, GROUP_FULLSCREEN, false,
"fullscreen.svg", _C("Toggle fullscreen"), gui->get("menuViewFullScreen")));
addToolItem(new ColorToolItem(listener, toolHandler, this->parent, 0xff0000, true));
addToolItem(new ToolButton(listener, gui, "PEN", ACTION_TOOL_PEN, GROUP_TOOL, true, "tool_pencil.svg", _C("Pen"),
gui->get("menuToolsPen")));
initEraserToolItem();
addToolItem(new ToolButton(listener, gui, "DELETE_CURRENT_PAGE", ACTION_DELETE_PAGE, "delPage.svg", _C("Delete current page")));
addToolItem(new ToolSelectCombocontrol(this, listener, gui, "SELECT"));
addToolItem(new ToolDrawCombocontrol(this, listener, gui, "DRAW"));
ToolButton* tbInsertNewPage = new ToolButton(listener, gui, "INSERT_NEW_PAGE", ACTION_NEW_PAGE_AFTER,
"addPage.svg", _C("Insert page"));
addToolItem(tbInsertNewPage);
GtkWidget* newPagePopup = gtk_menu_new();
GtkWidget* newPagePopupPlain = gtk_check_menu_item_new_with_label(_C("Plain"));
gtk_widget_show(newPagePopupPlain);
gtk_container_add(GTK_CONTAINER(newPagePopup), newPagePopupPlain);
gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(newPagePopupPlain), true);
registerMenupoint(newPagePopupPlain, ACTION_NEW_PAGE_PLAIN, GROUP_PAGE_INSERT_TYPE);
registerMenupoint(gui->get("menuJournalNewPageAfterPlain"), ACTION_NEW_PAGE_PLAIN, GROUP_PAGE_INSERT_TYPE);
GtkWidget* newPagePopupLined = gtk_check_menu_item_new_with_label(_C("Lined"));
gtk_widget_show(newPagePopupLined);
gtk_container_add(GTK_CONTAINER(newPagePopup), newPagePopupLined);
gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(newPagePopupLined), true);
registerMenupoint(newPagePopupLined, ACTION_NEW_PAGE_LINED, GROUP_PAGE_INSERT_TYPE);
registerMenupoint(gui->get("menuJournalNewPageAfterLined"), ACTION_NEW_PAGE_LINED, GROUP_PAGE_INSERT_TYPE);
GtkWidget* newPagePopupRuled = gtk_check_menu_item_new_with_label(_C("Ruled"));
gtk_widget_show(newPagePopupRuled);
gtk_container_add(GTK_CONTAINER(newPagePopup), newPagePopupRuled);
gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(newPagePopupRuled), true);
registerMenupoint(newPagePopupRuled, ACTION_NEW_PAGE_RULED, GROUP_PAGE_INSERT_TYPE);
registerMenupoint(gui->get("menuJournalNewPageAfterRuled"), ACTION_NEW_PAGE_RULED, GROUP_PAGE_INSERT_TYPE);
GtkWidget* newPagePopupGraph = gtk_check_menu_item_new_with_label(_C("Graph"));
gtk_widget_show(newPagePopupGraph);
gtk_container_add(GTK_CONTAINER(newPagePopup), newPagePopupGraph);
gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(newPagePopupGraph), true);
registerMenupoint(newPagePopupGraph, ACTION_NEW_PAGE_GRAPH, GROUP_PAGE_INSERT_TYPE);
registerMenupoint(gui->get("menuJournalNewPageAfterGraph"), ACTION_NEW_PAGE_GRAPH, GROUP_PAGE_INSERT_TYPE);
GtkWidget* newPagePopupCopyCurrent = gtk_check_menu_item_new_with_label(_C("Copy current"));
gtk_widget_show(newPagePopupCopyCurrent);
gtk_container_add(GTK_CONTAINER(newPagePopup), newPagePopupCopyCurrent);
gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(newPagePopupCopyCurrent), true);
registerMenupoint(newPagePopupCopyCurrent, ACTION_NEW_PAGE_COPY, GROUP_PAGE_INSERT_TYPE);
registerMenupoint(gui->get("menuJournalNewPageAfterCopy"), ACTION_NEW_PAGE_COPY, GROUP_PAGE_INSERT_TYPE);
GtkWidget* newPagePopupWithPDFBackground = gtk_check_menu_item_new_with_label(_C("With PDF background"));
gtk_widget_show(newPagePopupWithPDFBackground);
gtk_container_add(GTK_CONTAINER(newPagePopup), newPagePopupWithPDFBackground);
gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(newPagePopupWithPDFBackground), true);
registerMenupoint(newPagePopupWithPDFBackground, ACTION_NEW_PAGE_PDF_BACKGROUND, GROUP_PAGE_INSERT_TYPE);
registerMenupoint(gui->get("menuJournalNewPageAfterWithPdf"), ACTION_NEW_PAGE_PDF_BACKGROUND, GROUP_PAGE_INSERT_TYPE);
tbInsertNewPage->setPopupMenu(newPagePopup);
addToolItem(new ToolButton(listener, gui, "HILIGHTER", ACTION_TOOL_HILIGHTER, GROUP_TOOL, true,
"tool_highlighter.svg", _C("Highlighter"), gui->get("menuToolsHighlighter")));
addToolItem(new ToolButton(listener, gui, "TEXT", ACTION_TOOL_TEXT, GROUP_TOOL, true,
"tool_text.svg", _C("Text"), gui->get("menuToolsText")));
addToolItem(new ToolButton(listener, gui, "IMAGE", ACTION_TOOL_IMAGE, GROUP_TOOL, true,
"tool_image.svg", _C("Image"), gui->get("menuToolsImage")));
addToolItem(new ToolButton(listener, gui, "SELECT_REGION", ACTION_TOOL_SELECT_REGION, GROUP_TOOL, true,
"lasso.svg", _C("Select Region"), gui->get("menuToolsSelectRegion")));
addToolItem(new ToolButton(listener, gui, "SELECT_RECTANGLE", ACTION_TOOL_SELECT_RECT, GROUP_TOOL, true,
"rect-select.svg", _C("Select Rectangle"), gui->get("menuToolsSelectRectangle")));
addToolItem(new ToolButton(listener, gui, "SELECT_OBJECT", ACTION_TOOL_SELECT_OBJECT, GROUP_TOOL, true,
"object-select.svg", _C("Select Object"), gui->get("menuToolsSelectObject")));
addToolItem(new ToolButton(listener, gui, "DRAW_CIRCLE", ACTION_TOOL_DRAW_CIRCLE, GROUP_RULER, false,
"circle-draw.svg", _C("Draw Circle"), gui->get("menuToolsDrawCircle")));
addToolItem(new ToolButton(listener, gui, "DRAW_RECTANGLE", ACTION_TOOL_DRAW_RECT, GROUP_RULER, false,
"rect-draw.svg", _C("Draw Rectangle"), gui->get("menuToolsDrawRect")));
addToolItem(new ToolButton(listener, gui, "DRAW_ARROW", ACTION_TOOL_DRAW_ARROW, GROUP_RULER, false,
"arrow-draw.svg", _C("Draw Arrow"), gui->get("menuToolsDrawArrow")));
addToolItem(new ToolButton(listener, gui, "VERTICAL_SPACE", ACTION_TOOL_VERTICAL_SPACE, GROUP_TOOL, true,
"stretch.svg", _C("Vertical Space"), gui->get("menuToolsVerticalSpace")));
addToolItem(new ToolButton(listener, gui, "HAND", ACTION_TOOL_HAND, GROUP_TOOL, true, "hand.svg", _C("Hand"),
gui->get("menuToolsHand")));
addToolItem(new ToolButton(listener, gui, "SHAPE_RECOGNIZER", ACTION_SHAPE_RECOGNIZER, GROUP_SHAPE_RECOGNIZER, false,
"shape_recognizer.svg", _C("Shape Recognizer"), gui->get("menuToolsShapeRecognizer")));
addToolItem(new ToolButton(listener, gui, "RULER", ACTION_RULER, GROUP_RULER, false,
"ruler.svg", _C("Ruler"), gui->get("menuToolsRuler")));
addToolItem(new ToolButton(listener, gui, "FINE", ACTION_SIZE_FINE, GROUP_SIZE, true,
"thickness_thin.svg", _C("Thin")));
addToolItem(new ToolButton(listener, gui, "MEDIUM", ACTION_SIZE_MEDIUM, GROUP_SIZE, true,
"thickness_medium.svg", _C("Medium")));
addToolItem(new ToolButton(listener, gui, "THICK", ACTION_SIZE_THICK, GROUP_SIZE, true,
"thickness_thick.svg", _C("Thick")));
addToolItem(new ToolButton(listener, gui, "DEFAULT_TOOL", ACTION_TOOL_DEFAULT, GROUP_NOGROUP, false,
"default.svg", _C("Default Tool"), gui->get("menuToolsDefault")));
fontButton = new FontButton(listener, gui, "SELECT_FONT", ACTION_FONT_BUTTON_CHANGED, _C("Select Font"));
addToolItem(fontButton);
// Footer tools
toolPageSpinner = new ToolPageSpinner(gui, listener, "PAGE_SPIN", ACTION_FOOTER_PAGESPIN);
addToolItem(toolPageSpinner);
ToolZoomSlider* toolZoomSlider = new ToolZoomSlider(listener, "ZOOM_SLIDER", ACTION_FOOTER_ZOOM_SLIDER, zoom);
addToolItem(toolZoomSlider);
addToolItem(new ToolButton(listener, gui, "TWO_PAGES", ACTION_VIEW_TWO_PAGES, GROUP_TWOPAGES, false,
"showtwopages.svg", _C("Two pages"), gui->get("menuViewTwoPages")));
addToolItem(new ToolButton(listener, gui, "PRESENTATION_MODE", ACTION_VIEW_PRESENTATION_MODE, GROUP_PRESENTATION_MODE, false,
"showtwopages.svg", _C("Presentation mode"), gui->get("menuViewPresMode")));
toolPageLayer = new ToolPageLayer(gui, listener, "LAYER", ACTION_FOOTER_LAYER);
addToolItem(toolPageLayer);
registerMenupoint(gui->get("menuEditSettings"), ACTION_SETTINGS);
registerMenupoint(gui->get("menuFileAnnotate"), ACTION_ANNOTATE_PDF);
registerMenupoint(gui->get("menuFileSaveAs"), ACTION_SAVE_AS);
registerMenupoint(gui->get("menuFileExportPdf"), ACTION_EXPORT_AS_PDF);
registerMenupoint(gui->get("menuFileExportAs"), ACTION_EXPORT_AS);
registerMenupoint(gui->get("menuFilePrint"), ACTION_PRINT);
registerMenupoint(gui->get("menuFileQuit"), ACTION_QUIT);
registerMenupoint(gui->get("menuJournalNewLayer"), ACTION_NEW_LAYER);
registerMenupoint(gui->get("menuJournalDeleteLayer"), ACTION_DELETE_LAYER);
registerMenupoint(gui->get("menuJournalNewPageBefore"), ACTION_NEW_PAGE_BEFORE);
registerMenupoint(gui->get("menuJournalNewPageAfter"), ACTION_NEW_PAGE_AFTER);
registerMenupoint(gui->get("menuJournalNewPageAtEnd"), ACTION_NEW_PAGE_AT_END);
registerMenupoint(gui->get("menuDeletePage"), ACTION_DELETE_PAGE);
registerMenupoint(gui->get("menuJournalPaperFormat"), ACTION_PAPER_FORMAT);
registerMenupoint(gui->get("menuJournalPaperColor"), ACTION_PAPER_BACKGROUND_COLOR);
registerMenupoint(gui->get("menuJournalPaperPlain"), ACTION_SET_PAPER_BACKGROUND_PLAIN);
registerMenupoint(gui->get("menuJournalPaperBackgroundLined"), ACTION_SET_PAPER_BACKGROUND_LINED);
registerMenupoint(gui->get("menuJournalPaperRuled"), ACTION_SET_PAPER_BACKGROUND_RULED);
registerMenupoint(gui->get("menuJournalPaperGraph"), ACTION_SET_PAPER_BACKGROUND_GRAPH);
registerMenupoint(gui->get("menuJournalPaperImage"), ACTION_SET_PAPER_BACKGROUND_IMAGE);
registerMenupoint(gui->get("menuJournalPaperPdf"), ACTION_SET_PAPER_BACKGROUND_PDF);
registerMenupoint(gui->get("menuEditDelete"), ACTION_DELETE);
registerMenupoint(gui->get("menuNavigationPreviousAnnotatedPage"), ACTION_GOTO_PREVIOUS_ANNOTATED_PAGE);
registerMenupoint(gui->get("eraserFine"), ACTION_TOOL_ERASER_SIZE_FINE, GROUP_ERASER_SIZE);
registerMenupoint(gui->get("eraserMedium"), ACTION_TOOL_ERASER_SIZE_MEDIUM, GROUP_ERASER_SIZE);
registerMenupoint(gui->get("eraserThick"), ACTION_TOOL_ERASER_SIZE_THICK, GROUP_ERASER_SIZE);
registerMenupoint(gui->get("penthicknessVeryFine"), ACTION_TOOL_PEN_SIZE_VERY_THIN, GROUP_PEN_SIZE);
registerMenupoint(gui->get("penthicknessFine"), ACTION_TOOL_PEN_SIZE_FINE, GROUP_PEN_SIZE);
registerMenupoint(gui->get("penthicknessMedium"), ACTION_TOOL_PEN_SIZE_MEDIUM, GROUP_PEN_SIZE);
registerMenupoint(gui->get("penthicknessThick"), ACTION_TOOL_PEN_SIZE_THICK, GROUP_PEN_SIZE);
registerMenupoint(gui->get("penthicknessVeryThick"), ACTION_TOOL_PEN_SIZE_VERY_THICK, GROUP_PEN_SIZE);
registerMenupoint(gui->get("highlighterFine"), ACTION_TOOL_HILIGHTER_SIZE_FINE, GROUP_HILIGHTER_SIZE);
registerMenupoint(gui->get("highlighterMedium"), ACTION_TOOL_HILIGHTER_SIZE_MEDIUM, GROUP_HILIGHTER_SIZE);
registerMenupoint(gui->get("highlighterThick"), ACTION_TOOL_HILIGHTER_SIZE_THICK, GROUP_HILIGHTER_SIZE);
registerMenupoint(gui->get("menuToolsTextFont"), ACTION_SELECT_FONT);
#ifdef ENABLE_MATHTEX
registerMenupoint(gui->get("menuEditTex"), ACTION_TEX);
#endif
registerMenupoint(gui->get("menuViewToolbarManage"), ACTION_MANAGE_TOOLBAR);
registerMenupoint(gui->get("menuViewToolbarCustomize"), ACTION_CUSTOMIZE_TOOLBAR);
// Menu Help
registerMenupoint(gui->get("menuHelpAbout"), ACTION_ABOUT);
registerMenupoint(gui->get("menuHelpHelp"), ACTION_HELP);
}
void ToolMenuHandler::setFontButtonFont(XojFont& font)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
this->fontButton->setFont(font);
}
XojFont ToolMenuHandler::getFontButtonFont()
{
XOJ_CHECK_TYPE(ToolMenuHandler);
return this->fontButton->getFont();
}
void ToolMenuHandler::showFontSelectionDlg()
{
XOJ_CHECK_TYPE(ToolMenuHandler);
this->fontButton->showFontDialog();
}
void ToolMenuHandler::setUndoDescription(string description)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
this->undoButton->updateDescription(description);
gtk_menu_item_set_label(GTK_MENU_ITEM(gui->get("menuEditUndo")), description.c_str());
}
void ToolMenuHandler::setRedoDescription(string description)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
this->redoButton->updateDescription(description);
gtk_menu_item_set_label(GTK_MENU_ITEM(gui->get("menuEditRedo")), description.c_str());
}
SpinPageAdapter* ToolMenuHandler::getPageSpinner()
{
XOJ_CHECK_TYPE(ToolMenuHandler);
return this->toolPageSpinner->getPageSpinner();
}
void ToolMenuHandler::setPageText(string text)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
this->toolPageSpinner->setText(text);
}
int ToolMenuHandler::getSelectedLayer()
{
XOJ_CHECK_TYPE(ToolMenuHandler);
return this->toolPageLayer->getSelectedLayer();
}
void ToolMenuHandler::setLayerCount(int count, int selected)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
this->toolPageLayer->setLayerCount(count, selected);
}
ToolbarModel* ToolMenuHandler::getModel()
{
XOJ_CHECK_TYPE(ToolMenuHandler);
return this->tbModel;
}
bool ToolMenuHandler::isColorInUse(int color)
{
XOJ_CHECK_TYPE(ToolMenuHandler);
for (ColorToolItem* it : this->toolbarColorItems)
{
if (it->getColor() == color)
{
return true;
}
}
return false;
}
AbstractToolItemVector* ToolMenuHandler::getToolItems()
{
XOJ_CHECK_TYPE(ToolMenuHandler);
return &this->toolItems;
}