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.
 
 
 
 
 
 

135 lines
3.5 KiB

#include "ToolButton.h"
#include "gui/widgets/gtkmenutooltogglebutton.h"
ToolButton::ToolButton(ActionHandler* handler, string id, ActionType type, string iconName, string description,
GtkWidget* menuitem)
: AbstractToolItem(id, handler, type, menuitem)
{
XOJ_INIT_TYPE(ToolButton);
this->iconName = iconName;
this->description = description;
}
ToolButton::ToolButton(ActionHandler* handler, string id, ActionType type, ActionGroup group,
bool toolToggleOnlyEnable, string iconName, string description,
GtkWidget* menuitem)
: AbstractToolItem(id, handler, type, menuitem)
{
XOJ_INIT_TYPE(ToolButton);
this->iconName = iconName;
this->description = description;
this->group = group;
this->toolToggleOnlyEnable = toolToggleOnlyEnable;
}
ToolButton::~ToolButton()
{
XOJ_RELEASE_TYPE(ToolButton);
}
/**
* Register a popup menu entry, create a popup menu, if none is there
*
* @param name The name of the item
* @return The created menu item
*/
GtkWidget* ToolButton::registerPopupMenuEntry(string name, string iconName)
{
XOJ_CHECK_TYPE(ToolButton);
if (this->popupMenu == NULL)
{
setPopupMenu(gtk_menu_new());
}
GtkWidget* menuItem = NULL;
if (iconName == "")
{
menuItem = gtk_check_menu_item_new_with_label(name.c_str());
}
else
{
menuItem = gtk_check_menu_item_new();
GtkWidget* box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
gtk_container_add(GTK_CONTAINER(box), gtk_image_new_from_icon_name(iconName.c_str(), GTK_ICON_SIZE_SMALL_TOOLBAR));
GtkWidget* label = gtk_label_new(name.c_str());
gtk_label_set_xalign(GTK_LABEL(label), 0.0);
gtk_box_pack_end(GTK_BOX(box), label, true, true, 0);
gtk_container_add(GTK_CONTAINER(menuItem), box);
}
gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(menuItem), true);
gtk_widget_show_all(menuItem);
gtk_container_add(GTK_CONTAINER(this->popupMenu), menuItem);
return menuItem;
}
void ToolButton::updateDescription(string description)
{
XOJ_CHECK_TYPE(ToolButton);
this->description = description;
if (GTK_IS_TOOL_ITEM(item))
{
gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(item), description.c_str());
gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), description.c_str());
}
}
GtkToolItem* ToolButton::newItem()
{
XOJ_CHECK_TYPE(ToolButton);
GtkToolItem* it;
if (group != GROUP_NOGROUP)
{
if (popupMenu)
{
it = gtk_menu_tool_toggle_button_new(gtk_image_new_from_icon_name(iconName.c_str(), GTK_ICON_SIZE_SMALL_TOOLBAR), description.c_str());
gtk_menu_tool_toggle_button_set_menu(GTK_MENU_TOOL_TOGGLE_BUTTON(it), popupMenu);
}
else
{
it = gtk_toggle_tool_button_new();
gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(it), gtk_image_new_from_icon_name(iconName.c_str(), GTK_ICON_SIZE_SMALL_TOOLBAR));
}
}
else
{
if (popupMenu)
{
it = gtk_menu_tool_button_new(gtk_image_new_from_icon_name(iconName.c_str(), GTK_ICON_SIZE_SMALL_TOOLBAR), description.c_str());
gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(it), popupMenu);
}
else
{
it = gtk_tool_button_new(gtk_image_new_from_icon_name(iconName.c_str(), GTK_ICON_SIZE_SMALL_TOOLBAR), description.c_str());
}
}
gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(it), description.c_str());
gtk_tool_button_set_label(GTK_TOOL_BUTTON(it), description.c_str());
return it;
}
string ToolButton::getToolDisplayName()
{
XOJ_CHECK_TYPE(ToolButton);
return this->description;
}
GtkWidget* ToolButton::getNewToolIcon()
{
XOJ_CHECK_TYPE(ToolButton);
return gtk_image_new_from_icon_name(iconName.c_str(), GTK_ICON_SIZE_SMALL_TOOLBAR);
}