/* Copyright (C) 2012 The giomm Development Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ _CONFIGINCLUDE(giommconfig.h) #include #include #include _DEFS(giomm,gio) _PINCLUDE(glibmm/private/object_p.h) namespace Gio { /** A menu item for use with Gio::Menu. * * @newin{2,32} */ class GIOMM_API MenuItem : public Glib::Object { _CLASS_GOBJECT(MenuItem, GMenuItem, G_MENU_ITEM, Glib::Object, GObject, , , GIOMM_API) protected: /** Creates a new MenuItem. * * If @a label is not empty it is used to set the "label" attribute of the * new item. * * If @a detailed_action is not empty it is used to set the "action" and * possibly the "target" attribute of the new item. See * set_detailed_action() for more information. * * @param label The section label. * @param detailed_action: The detailed action string. */ explicit MenuItem(const Glib::ustring& label = {}, const Glib::ustring& detailed_action = {}); _IGNORE(g_menu_item_new) /** Creates a new MenuItem representing a submenu. * * This is a convenience API around the MenuItem(label, detailed_action) constructor and * set_submenu(). * * @param label The section label. * @param submenu A MenuModel with the items of the submenu. */ explicit MenuItem(const Glib::ustring& label, const Glib::RefPtr& submenu); /** Creates a new MenuItem representing a submenu. * * This is a convenience API around the MenuItem(label, detailed_action) constructor and * set_submenu(). * * @param submenu A MenuModel with the items of the submenu. */ explicit MenuItem(const Glib::RefPtr& submenu); _IGNORE(g_menu_item_new_submenu) public: _WRAP_CREATE(const Glib::ustring& label, const Glib::ustring& detailed_action) _WRAP_CREATE(const Glib::ustring& label{?}, const Glib::RefPtr& submenu) /* TODO: GMenuItem * g_menu_item_new_from_model (GMenuModel *model, gint item_index); GMenuItem * g_menu_item_new_submenu (const Glib::ustring& label, GMenuModel *submenu); GMenuItem * g_menu_item_new_section (const Glib::ustring& label, GMenuModel *section); */ //TODO: GMenuItem * g_menu_item_new_section (const Glib::ustring& label, // const Glib::RefPtr& section); //TODO: Add a set_attribute() templated method to get values directly instead //of requiring a Glib::VariantBase, when we can break ABI: //template //void set_attribute(const Glib::ustring& attribute, const T_Value& value) const; _WRAP_METHOD(void set_attribute_value(const Glib::ustring& attribute, const Glib::VariantBase& value), g_menu_item_set_attribute_value) _IGNORE(g_menu_item_set_attribute) //These are documented as transfer-full, so we don't need to use refreturn. _WRAP_METHOD(Glib::RefPtr get_link(const Glib::ustring& link), g_menu_item_get_link) _WRAP_METHOD(Glib::RefPtr get_link(const Glib::ustring& link) const, g_menu_item_get_link, constversion) _WRAP_METHOD(void set_link(const Glib::ustring& link, const Glib::RefPtr& model), g_menu_item_set_link) _WRAP_METHOD(void set_label(const Glib::ustring& label), g_menu_item_set_label) _WRAP_METHOD(void set_submenu(const Glib::RefPtr& submenu), g_menu_item_set_submenu) _WRAP_METHOD(void set_section(const Glib::RefPtr& section), g_menu_item_set_section) //TODO: Add a get_attribute() templated method to get values directly instead //of returning a Glib::VariantBase, when we can break ABI. //template //void get_attribute(const Glib::ustring& attribute, T_Value& value) const; //_WRAP_METHOD(Glib::VariantBase get_attribute_value(const Glib::ustring& attribute, const Glib::VariantType& expected_type{?}) const, g_menu_item_get_attribute_value) _WRAP_METHOD(Glib::VariantBase get_attribute_value(const Glib::ustring& attribute, const Glib::VariantType& expected_type{?}) const, g_menu_item_get_attribute_value) // Ignore varargs function. _IGNORE(g_menu_item_get_attribute) /** Sets the action for the menu item. * See set_action_and_target(). * * @newin{2,38} */ void set_action(const Glib::ustring& action); /** Unsets the target for the menu item. * See set_action_and_target(). * * @newin{2,38} */ void unset_target(); /** Unsets the action and target for the menu item. * See set_action_and_target(). * * @newin{2,38} */ void unset_action_and_target(); _WRAP_METHOD(void set_action_and_target(const Glib::ustring& action, const Glib::VariantBase& target_value), g_menu_item_set_action_and_target_value) _IGNORE(g_menu_item_set_action_and_target) _WRAP_METHOD(void set_detailed_action(const Glib::ustring& detailed_action), g_menu_item_set_detailed_action) _WRAP_METHOD(void set_icon(const Glib::RefPtr& icon), g_menu_item_set_icon) /** Unset the icon on the menu item. * * See set_icon(). * * @newin{2,38} */ void unset_icon(); }; } // namespace Gio