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.
 
 
 
 
 
 

124 lines
3.6 KiB

#include "ToolLineStyleCombocontrol.h"
#include "ToolMenuHandler.h"
#include "gui/widgets/gtkmenutooltogglebutton.h"
#include <config.h>
#include <i18n.h>
class ToolLineStyleType {
public:
ToolLineStyleType(string name, string icon, ActionType type)
: name(name), icon(icon), type(type), pixbuf(NULL)
{
}
~ToolLineStyleType()
{
g_object_unref(pixbuf);
pixbuf = NULL;
}
public:
string name;
string icon;
ActionType type;
GdkPixbuf* pixbuf;
};
ToolLineStyleCombocontrol::ToolLineStyleCombocontrol(ToolMenuHandler* toolMenuHandler, ActionHandler* handler, GladeGui* gui, string id)
: ToolButton(handler, gui, id, ACTION_TOOL_LINE_STYLE_PLAIN, GROUP_LINE_STYLE, false, "line-style-plain.svg", _("Line Style"))
{
XOJ_INIT_TYPE(ToolLineStyleCombocontrol);
this->toolMenuHandler = toolMenuHandler;
this->labelWidget = NULL;
this->iconWidget = NULL;
setPopupMenu(gtk_menu_new());
drawTypes.push_back(new ToolLineStyleType(_("Plain line"), "line-style-plain.svg", ACTION_TOOL_LINE_STYLE_PLAIN));
drawTypes.push_back(new ToolLineStyleType(_("Dashed line"), "line-style-dash.svg", ACTION_TOOL_LINE_STYLE_DASH));
drawTypes.push_back(new ToolLineStyleType(_("Dash-doted line"), "line-style-dash-dot.svg", ACTION_TOOL_LINE_STYLE_DASH_DOT));
drawTypes.push_back(new ToolLineStyleType(_("Dotted line"), "line-style-dot.svg", ACTION_TOOL_LINE_STYLE_DOT));
for (ToolLineStyleType* t : drawTypes)
{
createMenuItem(t->name, t->icon, t->type);
t->pixbuf = gui->loadIconPixbuf(t->icon);
g_object_ref(t->pixbuf);
}
}
ToolLineStyleCombocontrol::~ToolLineStyleCombocontrol()
{
XOJ_CHECK_TYPE(ToolLineStyleCombocontrol);
for (ToolLineStyleType* t : drawTypes)
{
delete t;
}
this->drawTypes.clear();
this->toolMenuHandler = NULL;
XOJ_RELEASE_TYPE(ToolLineStyleCombocontrol);
}
void ToolLineStyleCombocontrol::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 ToolLineStyleCombocontrol::selected(ActionGroup group, ActionType action)
{
XOJ_CHECK_TYPE(ToolLineStyleCombocontrol);
if (!this->item)
{
return;
}
if (!GTK_IS_TOGGLE_TOOL_BUTTON(this->item))
{
g_warning("ToolLineStyleCombocontrol: selected action %i which is not a toggle action!", action);
return;
}
string description;
for (ToolLineStyleType* t : drawTypes)
{
if (action == t->type && this->action != t->type)
{
this->action = t->type;
gtk_image_set_from_pixbuf(GTK_IMAGE(iconWidget), t->pixbuf);
description = t->name;
break;
}
}
gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(item), description.c_str());
if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(this->item)) != (this->action == action))
{
this->toolToggleButtonActive = (this->action == action);
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(this->item), this->toolToggleButtonActive);
}
}
GtkToolItem* ToolLineStyleCombocontrol::newItem()
{
XOJ_CHECK_TYPE(ToolLineStyleCombocontrol);
labelWidget = gtk_label_new(_("Line Style"));
iconWidget = gtk_image_new_from_pixbuf(drawTypes[0]->pixbuf);
GtkToolItem* it = gtk_menu_tool_toggle_button_new(iconWidget, _("Line Style"));
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;
}