diff --git a/src/control/Actions.h b/src/control/Actions.h index 5d413c95..f52154d8 100644 --- a/src/control/Actions.h +++ b/src/control/Actions.h @@ -177,7 +177,6 @@ enum ActionGroup GROUP_FULLSCREEN, - GROUP_SHAPE_RECOGNIZER, GROUP_RULER, }; diff --git a/src/control/Control.cpp b/src/control/Control.cpp index 0d350120..2b9990b7 100644 --- a/src/control/Control.cpp +++ b/src/control/Control.cpp @@ -1160,7 +1160,7 @@ void Control::setShapeRecognizerEnabled(bool enabled) } this->toolHandler->setShapeRecognizer(enabled); - fireActionSelected(GROUP_SHAPE_RECOGNIZER, enabled ? ACTION_SHAPE_RECOGNIZER : ACTION_NONE); + fireActionSelected(GROUP_RULER, enabled ? ACTION_SHAPE_RECOGNIZER : ACTION_NONE); if (enabled) { @@ -2090,16 +2090,29 @@ void Control::toolChanged() toolColorChanged(); } - fireActionSelected(GROUP_SHAPE_RECOGNIZER, - toolHandler->isShapeRecognizer() ? ACTION_SHAPE_RECOGNIZER : ACTION_NOT_SELECTED); - fireActionSelected(GROUP_RULER, - toolHandler->isRuler() ? ACTION_RULER : ACTION_NOT_SELECTED); - fireActionSelected(GROUP_RULER, - toolHandler->isRectangle() ? ACTION_TOOL_DRAW_RECT : ACTION_NOT_SELECTED); - fireActionSelected(GROUP_RULER, - toolHandler->isCircle() ? ACTION_TOOL_DRAW_CIRCLE : ACTION_NOT_SELECTED); - fireActionSelected(GROUP_RULER, - toolHandler->isArrow() ? ACTION_TOOL_DRAW_ARROW : ACTION_NOT_SELECTED); + ActionType rulerAction = ACTION_NOT_SELECTED; + if (toolHandler->isShapeRecognizer()) + { + rulerAction = ACTION_SHAPE_RECOGNIZER; + } + else if (toolHandler->isRuler()) + { + rulerAction = ACTION_RULER; + } + else if (toolHandler->isRectangle()) + { + rulerAction = ACTION_TOOL_DRAW_RECT; + } + else if (toolHandler->isCircle()) + { + rulerAction = ACTION_TOOL_DRAW_CIRCLE; + } + else if (toolHandler->isArrow()) + { + rulerAction = ACTION_TOOL_DRAW_ARROW; + } + + fireActionSelected(GROUP_RULER, rulerAction); getCursor()->updateCursor(); diff --git a/src/gui/toolbarMenubar/ToolDrawCombocontrol.cpp b/src/gui/toolbarMenubar/ToolDrawCombocontrol.cpp index 28a6c77f..b2afbd7a 100644 --- a/src/gui/toolbarMenubar/ToolDrawCombocontrol.cpp +++ b/src/gui/toolbarMenubar/ToolDrawCombocontrol.cpp @@ -6,67 +6,37 @@ #include #include -ToolDrawCombocontrol::ToolDrawCombocontrol(ToolMenuHandler* th, ActionHandler* handler, GladeGui* gui, string id) : - ToolButton(handler, gui, id, ACTION_TOOL_DRAW_RECT, GROUP_RULER, false, "rect-draw.png", _("Draw Rectangle")) +ToolDrawCombocontrol::ToolDrawCombocontrol(ToolMenuHandler* toolMenuHandler, ActionHandler* handler, GladeGui* gui, string id) + : ToolButton(handler, gui, id, ACTION_TOOL_DRAW_RECT, GROUP_RULER, false, "rect-draw.png", _("Draw Rectangle")) { - XOJ_INIT_TYPE(ToolDrawCombocontrol); + this->toolMenuHandler = toolMenuHandler; this->labelWidget = NULL; this->iconWidget = NULL; - GtkWidget* popup = gtk_menu_new(); - - GtkWidget* menuItem; - this->iconDrawRect = gui->loadIconPixbuf("rect-draw.svg"); - this->iconDrawCirc = gui->loadIconPixbuf("circle-draw.svg"); - this->iconDrawArr = gui->loadIconPixbuf("arrow-draw.svg"); - this->iconDrawLine = gui->loadIconPixbuf("ruler.svg"); - this->iconAutoDrawLine = gui->loadIconPixbuf("shape_recognizer.svg"); g_object_ref(this->iconDrawRect); - g_object_ref(this->iconDrawCirc); - g_object_ref(this->iconDrawArr); - g_object_ref(this->iconDrawLine); - g_object_ref(this->iconAutoDrawLine); - menuItem = gtk_image_menu_item_new_with_label(_C("Draw Rectangle")); - gtk_container_add(GTK_CONTAINER(popup), menuItem); - th->registerMenupoint(menuItem, ACTION_TOOL_DRAW_RECT, GROUP_RULER); - gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(menuItem), true); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem), gui->loadIcon("rect-draw.svg")); - gtk_widget_show_all(menuItem); - - menuItem = gtk_image_menu_item_new_with_label(_C("Draw Circle")); - gtk_container_add(GTK_CONTAINER(popup), menuItem); - th->registerMenupoint(menuItem, ACTION_TOOL_DRAW_CIRCLE, GROUP_RULER); - gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(menuItem), true); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem), gui->loadIcon("circle-draw.svg")); - gtk_widget_show_all(menuItem); + this->iconDrawCirc = gui->loadIconPixbuf("circle-draw.svg"); + g_object_ref(this->iconDrawCirc); - menuItem = gtk_image_menu_item_new_with_label(_C("Draw Arrow")); - gtk_container_add(GTK_CONTAINER(popup), menuItem); - th->registerMenupoint(menuItem, ACTION_TOOL_DRAW_ARROW, GROUP_RULER); - gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(menuItem), true); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem), gui->loadIcon("arrow-draw.svg")); - gtk_widget_show_all(menuItem); + this->iconDrawArr = gui->loadIconPixbuf("arrow-draw.svg"); + g_object_ref(this->iconDrawArr); - menuItem = gtk_image_menu_item_new_with_label(_C("Draw Line")); - gtk_container_add(GTK_CONTAINER(popup), menuItem); - th->registerMenupoint(menuItem, ACTION_RULER, GROUP_RULER); - gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(menuItem), true); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem), gui->loadIcon("ruler.svg")); - gtk_widget_show_all(menuItem); + this->iconDrawLine = gui->loadIconPixbuf("ruler.svg"); + g_object_ref(this->iconDrawLine); - menuItem = gtk_image_menu_item_new_with_label(_C("Recognize Lines")); - gtk_container_add(GTK_CONTAINER(popup), menuItem); - th->registerMenupoint(menuItem, ACTION_SHAPE_RECOGNIZER, GROUP_SHAPE_RECOGNIZER); - gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(menuItem), true); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem), gui->loadIcon("shape_recognizer.svg")); - gtk_widget_show_all(menuItem); + this->iconAutoDrawLine = gui->loadIconPixbuf("shape_recognizer.svg"); + g_object_ref(this->iconAutoDrawLine); + setPopupMenu(gtk_menu_new()); - setPopupMenu(popup); + createMenuItem(_("Draw Rectangle"), "rect-draw.svg", ACTION_TOOL_DRAW_RECT); + createMenuItem(_C("Draw Circle"), "circle-draw.svg", ACTION_TOOL_DRAW_CIRCLE); + createMenuItem(_C("Draw Arrow"), "arrow-draw.svg", ACTION_TOOL_DRAW_ARROW); + createMenuItem(_C("Draw Line"), "ruler.svg", ACTION_RULER); + createMenuItem(_C("Recognize Lines"), "shape_recognizer.svg", ACTION_SHAPE_RECOGNIZER); } ToolDrawCombocontrol::~ToolDrawCombocontrol() @@ -91,6 +61,19 @@ ToolDrawCombocontrol::~ToolDrawCombocontrol() XOJ_RELEASE_TYPE(ToolDrawCombocontrol); } +void ToolDrawCombocontrol::createMenuItem(string name, string icon, ActionType type) +{ + GtkWidget* menuItem = gtk_menu_item_new (); + GtkWidget* box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); + gtk_container_add(GTK_CONTAINER(box), gui->loadIcon(icon)); + gtk_container_add(GTK_CONTAINER(box), gtk_label_new(name.c_str())); + gtk_container_add(GTK_CONTAINER(menuItem), box); + + gtk_container_add(GTK_CONTAINER(popupMenu), menuItem); + toolMenuHandler->registerMenupoint(menuItem, type, GROUP_RULER); + gtk_widget_show_all(menuItem); +} + void ToolDrawCombocontrol::selected(ActionGroup group, ActionType action) { XOJ_CHECK_TYPE(ToolDrawCombocontrol); @@ -157,12 +140,10 @@ GtkToolItem* ToolDrawCombocontrol::newItem() { XOJ_CHECK_TYPE(ToolDrawCombocontrol); - GtkToolItem* it; - labelWidget = gtk_label_new(_C("Draw Rectangle")); iconWidget = gtk_image_new_from_pixbuf(this->iconDrawRect); - it = gtk_menu_tool_toggle_button_new(iconWidget, "test0"); + GtkToolItem* it = gtk_menu_tool_toggle_button_new(iconWidget, "test0"); gtk_tool_button_set_label_widget(GTK_TOOL_BUTTON(it), labelWidget); gtk_menu_tool_toggle_button_set_menu(GTK_MENU_TOOL_TOGGLE_BUTTON(it), popupMenu); return it; diff --git a/src/gui/toolbarMenubar/ToolDrawCombocontrol.h b/src/gui/toolbarMenubar/ToolDrawCombocontrol.h index 5ae5e8bb..87d3b96f 100644 --- a/src/gui/toolbarMenubar/ToolDrawCombocontrol.h +++ b/src/gui/toolbarMenubar/ToolDrawCombocontrol.h @@ -21,7 +21,7 @@ class ToolMenuHandler; class ToolDrawCombocontrol : public ToolButton { public: - ToolDrawCombocontrol(ToolMenuHandler* th, ActionHandler* handler, GladeGui* gui, string id); + ToolDrawCombocontrol(ToolMenuHandler* toolMenuHandler, ActionHandler* handler, GladeGui* gui, string id); virtual ~ToolDrawCombocontrol(); public: @@ -29,10 +29,13 @@ public: protected: virtual GtkToolItem* newItem(); + void createMenuItem(string name, string icon, ActionType type); private: XOJ_TYPE_ATTRIB; + ToolMenuHandler* toolMenuHandler; + GtkWidget* iconWidget; GtkWidget* labelWidget; diff --git a/src/gui/toolbarMenubar/ToolMenuHandler.cpp b/src/gui/toolbarMenubar/ToolMenuHandler.cpp index f2c3ebdc..22038526 100644 --- a/src/gui/toolbarMenubar/ToolMenuHandler.cpp +++ b/src/gui/toolbarMenubar/ToolMenuHandler.cpp @@ -438,7 +438,7 @@ void ToolMenuHandler::initToolItems() 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, + addToolItem(new ToolButton(listener, gui, "SHAPE_RECOGNIZER", ACTION_SHAPE_RECOGNIZER, GROUP_RULER, 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")));