/* $Id: menu.gen_h,v 1.62 2001/07/15 13:33:38 murrayc Exp $ */ /* menu.h * * Copyright (C) 1998-2000 The Gtk-- Development Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <gtk/gtkmenu.h> #include <gtk--/menushell.h> #include <gtk--/menuitem.h> namespace Gtk { class AccelGroup; //: A drop down menu widget. //- A {\class Gtk::Menu} is a {\class Gtk::MenuShell} that implements a drop //- down menu consisting of a list of {\class Gtk::MenuItem} objects which //- can be navigated and activated by the user to perform application functions. //- //- A {\class Gtk::Menu} is most commonly dropped down by activating a //- {\class Gtk::MenuItem} in a {\class Gtk::MenuBar} or popped up by activating //- a {\class Gtk::MenuItem} in another {\class Gtk::Menu}. //- //- A {\class Gtk::Menu} can also be popped up by activating a //- {\class Gtk::OptionMenu}. Other composite widgets such as the //- {\class Gtk::Notebook} can pop up a {\class Gtk::Menu} as well. //- //- Applications can display a {\class Gtk::Menu} as a popup menu by calling //- the {menu_popup()} function. class Menu : public MenuShell { public: typedef Menu CppObjectType; typedef GtkMenu BaseObjectType; public: //: Returns the underlaying gtk+ object. GtkMenu* gtkobj(); const GtkMenu* gtkobj() const; //: Returns true if object is this type. static bool isA(Gtk::Object *object); virtual ~Menu(); private: public: Menu(); /* append, prepend, and insert are defined in MenuShell */ /* Note: GtkMenuPositionFunc is not very good for us */ //: Display the menu on screen // When there is a parent menu void popup(Gtk::MenuShell& parent_menu_shell,Gtk::MenuItem& parent_menu_item,GtkMenuPositionFunc func,gpointer data,guint button,guint32 activate_time); // When there isn't void popup (GtkMenuPositionFunc func, gpointer data, guint button, guint32 activate_time); //: popup a floating menu void popup (guint button, guint32 activate_time); //: Hides the menu away void popdown(); //- Keep track of the last menu item selected, for the purposes //- of the option menu Gtk::MenuItem* get_active() const; void set_active(gint index); //- Position the menu according to it's position function. This wraps //- a function called by gtkmenuitem.c when a menu-item changes //- its allocation. You most likely don't need to care about it. void reposition(); // The accel group may or may not be there void set_accel_group(Gtk::AccelGroup* accel_group=0); void set_accel_group(Gtk::AccelGroup& accel_group); Gtk::AccelGroup* get_accel_group() const; #if GTK_VERSION_GT_MICRO(1,2,0) AccelGroup* get_uline_accel_group () const; AccelGroup* ensure_uline_accel_group () const; #endif void set_tearoff_state(bool torn_off); bool is_torn_off() const { return gtkobj()->torn_off; } //- Sets the window manager title for the window that //- appears when a menu is torn off void set_title(const nstring& title); void reorder_child(const Gtk::MenuItem &child, gint position); protected: //- Attach the menu to a widget. {\var detacher} is a function which takes //- the attached GtkWidget* and GtkMenu* //- ({\b NOTE! NOT the Gtk_Widget and Gtk_Menu!}) //- This is mostly used by other widgets like {\class Gtk_MenuItem} or //- {\class Gtk_NoteBook}. You probably don't need to care about it. void attach_to_widget(Gtk::Widget& widget,GtkMenuDetachFunc detacher); public: Gtk::Widget* get_attach_widget() const; //- Detach the menu from the widget it was attached to //- (calls the passed {\var detacher} function) void detach(); protected: // impl functions }; //+ PROPERTIES(Gtk_Menu) //. name: parent_menu_item //. type: Gtk_Widget* //. get: none //. set: {popup()} //. desc: //. name: accel_group //. type: GtkAccelGroup* //. get: //. set: {set_accel_group()} //. desc: //. name: position_func //. type: GtkMenuPositionFunc //. get: none //. set: {popup()} //. desc: A function taking a GtkMenu* ({\b NOTE! NOT a Gtk_Menu!}), //. pointers to x and y gint coordinates and a pointer to some user //. data. The function should set x and y to where the menu will be //. positioned on the screen //. name: position_func_data //. type: gpointer //. get: none //. set: {popup()} //. desc: user data which will be passed to {position_func} //. name: torn_off //. type: bool //. get: none //. set: {set_tearoff_state()} //. desc: Whether the menu is torn off (detached) or not. }