// Generated by gmmproc 2.66.8 -- DO NOT MODIFY!
#ifndef _GTKMM_TOOLBAR_H
#define _GTKMM_TOOLBAR_H

#include <gtkmmconfig.h>


#include <glibmm/ustring.h>
#include <sigc++/sigc++.h>

/* Copyright (C) 1998-2002 The gtkmm 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 <https://www.gnu.org/licenses/>.
 */

// This is for including the config header before any code (such as
// the #ifndef GTKMM_DISABLE_DEPRECATED in deprecated classes) is generated:


#include <gtkmm/toolshell.h>
#include <gtkmm/toolitem.h>
#include <gtkmm/toolbutton.h>
#include <gtkmm/toggletoolbutton.h>
#include <gtkmm/container.h>


#ifndef DOXYGEN_SHOULD_SKIP_THIS
using GtkToolbar = struct _GtkToolbar;
using GtkToolbarClass = struct _GtkToolbarClass;
#endif /* DOXYGEN_SHOULD_SKIP_THIS */


#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Gtk
{ class GTKMM_API Toolbar_Class; } // namespace Gtk
#endif //DOXYGEN_SHOULD_SKIP_THIS

namespace Gtk
{

//TODO: Derive from Toolshell when we can break ABI.
/** Bars of buttons and other widgets.
 * @ingroup Widgets
 * @ingroup Containers
 * @ingroup Toolbars
 */

class GTKMM_API Toolbar
 : public Container,
   public ToolShell
{
  public:
#ifndef DOXYGEN_SHOULD_SKIP_THIS
  typedef Toolbar CppObjectType;
  typedef Toolbar_Class CppClassType;
  typedef GtkToolbar BaseObjectType;
  typedef GtkToolbarClass BaseClassType;
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

  Toolbar(Toolbar&& src) noexcept;
  Toolbar& operator=(Toolbar&& src) noexcept;

  // noncopyable
  Toolbar(const Toolbar&) = delete;
  Toolbar& operator=(const Toolbar&) = delete;

  ~Toolbar() noexcept override;

#ifndef DOXYGEN_SHOULD_SKIP_THIS

private:
  friend class GTKMM_API Toolbar_Class;
  static CppClassType toolbar_class_;

protected:
  explicit Toolbar(const Glib::ConstructParams& construct_params);
  explicit Toolbar(GtkToolbar* castitem);

#endif /* DOXYGEN_SHOULD_SKIP_THIS */

public:

  /** Get the GType for this class, for use with the underlying GObject type system.
   */
  static GType get_type()      G_GNUC_CONST;

#ifndef DOXYGEN_SHOULD_SKIP_THIS


  static GType get_base_type() G_GNUC_CONST;
#endif

  /// Provides access to the underlying C GObject.
  GtkToolbar*       gobj()       { return reinterpret_cast<GtkToolbar*>(gobject_); }

  /// Provides access to the underlying C GObject.
  const GtkToolbar* gobj() const { return reinterpret_cast<GtkToolbar*>(gobject_); }


public:
  //C++ methods used to invoke GTK+ virtual functions:

protected:
  //GTK+ Virtual Functions (override these to change behaviour):

  //Default Signal Handlers::
  /// This is a default handler for the signal signal_orientation_changed().
  virtual void on_orientation_changed(Orientation orientation);
  /// This is a default handler for the signal signal_toolbar_style_changed().
  virtual void on_toolbar_style_changed(ToolbarStyle style);
  /// This is a default handler for the signal signal_popup_context_menu().
  virtual bool on_popup_context_menu(int x, int y, int button_number);


private:

  
public:
  Toolbar();

  
  /** Insert a Gtk::ToolItem into the toolbar at position @a pos. If @a pos is
   * 0 the item is prepended to the start of the toolbar. If @a pos is
   * negative, the item is appended to the end of the toolbar.
   * 
   * @newin{2,4}
   * 
   * @param item A Gtk::ToolItem.
   * @param pos The position of the new item.
   */
  void insert(ToolItem& item, int pos);
  void insert(ToolButton& item, int pos, const sigc::slot<void>& clicked_slot);
  void insert(ToggleToolButton& item, int pos, const sigc::slot<void>& toggled_slot);

  void append(ToolItem& item);
  void append(ToolButton& item, const sigc::slot<void>& clicked_slot);
  void append(ToggleToolButton& item, const sigc::slot<void>& toggled_slot);

  void prepend(ToolItem& item);
  void prepend(ToolButton& item, const sigc::slot<void>& clicked_slot);
  void prepend(ToggleToolButton& item, const sigc::slot<void>& toggled_slot);

  
  /** Returns the position of @a item on the toolbar, starting from 0.
   * It is an error if @a item is not a child of the toolbar.
   * 
   * @newin{2,4}
   * 
   * @param item A Gtk::ToolItem that is a child of @a toolbar.
   * @return The position of item on the toolbar.
   */
  int get_item_index(const ToolItem& item) const;
  
  /** Returns the number of items on the toolbar.
   * 
   * @newin{2,4}
   * 
   * @return The number of items on the toolbar.
   */
  int get_n_items() const;
  
  /** Returns the @a n'th item on @a toolbar, or <tt>nullptr</tt> if the
   * toolbar does not contain an @a n'th item.
   * 
   * @newin{2,4}
   * 
   * @param n A position on the toolbar.
   * @return The @a n'th Gtk::ToolItem on @a toolbar,
   * or <tt>nullptr</tt> if there isn’t an @a n'th item.
   */
  ToolItem* get_nth_item(int n);
  
  /** Returns the @a n'th item on @a toolbar, or <tt>nullptr</tt> if the
   * toolbar does not contain an @a n'th item.
   * 
   * @newin{2,4}
   * 
   * @param n A position on the toolbar.
   * @return The @a n'th Gtk::ToolItem on @a toolbar,
   * or <tt>nullptr</tt> if there isn’t an @a n'th item.
   */
  const ToolItem* get_nth_item(int n) const;
  
  /** Returns whether the toolbar has an overflow menu.
   * See set_show_arrow().
   * 
   * @newin{2,4}
   * 
   * @return <tt>true</tt> if the toolbar has an overflow menu.
   */
  bool get_show_arrow() const;
  
  /** Sets whether to show an overflow menu when @a toolbar isn’t allocated enough
   * size to show all of its items. If <tt>true</tt>, items which can’t fit in @a toolbar,
   * and which have a proxy menu item set by Gtk::ToolItem::set_proxy_menu_item()
   * or Gtk::ToolItem::signal_create_menu_proxy(), will be available in an overflow menu,
   * which can be opened by an added arrow button. If <tt>false</tt>, @a toolbar will
   * request enough size to fit all of its child items without any overflow.
   * 
   * @newin{2,4}
   * 
   * @param show_arrow Whether to show an overflow menu.
   */
  void set_show_arrow(bool show_arrow =  true);

/* Style methods */

  
  /** Alters the view of @a toolbar to display either icons only, text only, or both.
   * 
   * @param style The new style for @a toolbar.
   */
  void set_toolbar_style(ToolbarStyle style);
  
  /** Retrieves whether the toolbar has text, icons, or both . See
   * set_style().
   * 
   * @return The current style of @a toolbar.
   */
  ToolbarStyle get_toolbar_style() const;

  
  /** Unsets a toolbar style set with set_style(), so that
   * user preferences will be used to determine the toolbar style.
   */
  void unset_toolbar_style();

  //Note that gtk_toolbar_set_icon_size() and gtk_toolbar_unset_icon_size() were
  //deprecated sometime before GTK+ 2.4, but were undeprecated in GTK+ 2.12.
  
  /** This function sets the size of stock icons in the toolbar. You
   * can call it both before you add the icons and after they’ve been
   * added. The size you set will override user preferences for the default
   * icon size.
   * 
   * This should only be used for special-purpose toolbars, normal
   * application toolbars should respect the user preferences for the
   * size of icons.
   * 
   * @param icon_size The Gtk::IconSize that stock icons in the toolbar shall have.
   */
  void set_icon_size(IconSize icon_size);
  
  /** Unsets toolbar icon size set with set_icon_size(), so that
   * user preferences will be used to determine the icon size.
   */
  void unset_icon_size();

  
  /** Retrieves the icon size for the toolbar. See set_icon_size().
   * 
   * @return The current icon size for the icons on the toolbar.
   */
  IconSize get_icon_size() const;

  
  /** Returns the relief style of buttons on @a toolbar. See
   * Gtk::Button::set_relief().
   * 
   * @newin{2,4}
   * 
   * @return The relief style of buttons on @a toolbar.
   */
  ReliefStyle get_relief_style() const;
  
  /** Returns the position corresponding to the indicated point on
   *  @a toolbar. This is useful when dragging items to the toolbar:
   * this function returns the position a new item should be
   * inserted.
   * 
   *  @a x and @a y are in @a toolbar coordinates.
   * 
   * @newin{2,4}
   * 
   * @param x X coordinate of a point on the toolbar.
   * @param y Y coordinate of a point on the toolbar.
   * @return The position corresponding to the point ( @a x, @a y) on the toolbar.
   */
  int get_drop_index(int x, int y) const;
  
  /** Highlights @a toolbar to give an idea of what it would look like
   * if @a item was added to @a toolbar at the position indicated by @a index.
   * If @a item is <tt>nullptr</tt>, highlighting is turned off. In that case @a index 
   * is ignored.
   * 
   * The @a tool_item passed to this function must not be part of any widget
   * hierarchy. When an item is set as drop highlight item it can not
   * added to any widget hierarchy or used as highlight item for another
   * toolbar.
   * 
   * @newin{2,4}
   * 
   * @param tool_item A Gtk::ToolItem, or <tt>nullptr</tt> to turn of highlighting.
   * @param index A position on @a toolbar.
   */
  void set_drop_highlight_item(ToolItem& tool_item, int index);
  void unset_drop_highlight_item();

  
  /**
   * @par Slot Prototype:
   * <tt>void on_my_%orientation_changed(Orientation orientation)</tt>
   *
   * Flags: Run First
   *
   * Emitted when the orientation of the toolbar changes.
   * 
   * @param orientation The new Gtk::Orientation of the toolbar.
   */

  Glib::SignalProxy< void,Orientation > signal_orientation_changed();

  
  /**
   * @par Slot Prototype:
   * <tt>void on_my_%toolbar_style_changed(ToolbarStyle style)</tt>
   *
   * Flags: Run First
   *
   * Emitted when the style of the toolbar changes.
   * 
   * @param style The new Gtk::ToolbarStyle of the toolbar.
   */

  Glib::SignalProxy< void,ToolbarStyle > signal_toolbar_style_changed();

  
  /**
   * @par Slot Prototype:
   * <tt>bool on_my_%popup_context_menu(int x, int y, int button_number)</tt>
   *
   * Flags: Run Last
   *
   * Emitted when the user right-clicks the toolbar or uses the
   * keybinding to display a popup menu.
   * 
   * Application developers should handle this signal if they want
   * to display a context menu on the toolbar. The context-menu should
   * appear at the coordinates given by @a x and @a y. The mouse button
   * number is given by the @a button_number parameter. If the menu was popped
   * up using the keybaord, @a button_number is -1.
   * 
   * @param x The x coordinate of the point where the menu should appear.
   * @param y The y coordinate of the point where the menu should appear.
   * @param button_number The mouse button the user pressed, or -1.
   * @return Return <tt>true</tt> if the signal was handled, <tt>false</tt> if not.
   */

  Glib::SignalProxy< bool,int,int,int > signal_popup_context_menu();


  /** How to draw the toolbar.
   *
   * Default value: Gtk::TOOLBAR_BOTH_HORIZ
   *
   * @return A PropertyProxy that allows you to get or set the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy< ToolbarStyle > property_toolbar_style() ;

/** How to draw the toolbar.
   *
   * Default value: Gtk::TOOLBAR_BOTH_HORIZ
   *
   * @return A PropertyProxy_ReadOnly that allows you to get the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< ToolbarStyle > property_toolbar_style() const;

  /** If an arrow should be shown if the toolbar doesn't fit.
   *
   * Default value: <tt>true</tt>
   *
   * @return A PropertyProxy that allows you to get or set the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy< bool > property_show_arrow() ;

/** If an arrow should be shown if the toolbar doesn't fit.
   *
   * Default value: <tt>true</tt>
   *
   * @return A PropertyProxy_ReadOnly that allows you to get the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< bool > property_show_arrow() const;

  /** The size of the icons in a toolbar is normally determined by
   * the toolbar-icon-size setting. When this property is set, it 
   * overrides the setting. 
   * 
   * This should only be used for special-purpose toolbars, normal
   * application toolbars should respect the user preferences for the
   * size of icons.
   * 
   * @newin{2,10}
   *
   * Default value: Gtk::ICON_SIZE_LARGE_TOOLBAR
   *
   * @return A PropertyProxy that allows you to get or set the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy< IconSize > property_icon_size() ;

/** The size of the icons in a toolbar is normally determined by
   * the toolbar-icon-size setting. When this property is set, it 
   * overrides the setting. 
   * 
   * This should only be used for special-purpose toolbars, normal
   * application toolbars should respect the user preferences for the
   * size of icons.
   * 
   * @newin{2,10}
   *
   * Default value: Gtk::ICON_SIZE_LARGE_TOOLBAR
   *
   * @return A PropertyProxy_ReadOnly that allows you to get the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< IconSize > property_icon_size() const;

  /** Is <tt>true</tt> if the icon-size property has been set.
   * 
   * @newin{2,10}
   *
   * Default value: <tt>false</tt>
   *
   * @return A PropertyProxy that allows you to get or set the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy< bool > property_icon_size_set() ;

/** Is <tt>true</tt> if the icon-size property has been set.
   * 
   * @newin{2,10}
   *
   * Default value: <tt>false</tt>
   *
   * @return A PropertyProxy_ReadOnly that allows you to get the value of the property,
   * or receive notification when the value of the property changes.
   */
  Glib::PropertyProxy_ReadOnly< bool > property_icon_size_set() const;


  /** Whether the item should receive extra space when the toolbar grows.
   *
   * Default value: <tt>false</tt>
   *
   * @return A ChildPropertyProxy that allows you to get or set the value of the property,
   * or receive notification when the value of the property changes.
   */
  Gtk::ChildPropertyProxy< bool > child_property_expand(Gtk::Widget& child) ;

/** Whether the item should receive extra space when the toolbar grows.
   *
   * Default value: <tt>false</tt>
   *
   * @return A ChildPropertyProxy_ReadOnly that allows you to get the value of the property,
   * or receive notification when the value of the property changes.
   */
  Gtk::ChildPropertyProxy_ReadOnly< bool > child_property_expand(const Gtk::Widget& child) const;

  /** Whether the item should be the same size as other homogeneous items.
   *
   * Default value: <tt>false</tt>
   *
   * @return A ChildPropertyProxy that allows you to get or set the value of the property,
   * or receive notification when the value of the property changes.
   */
  Gtk::ChildPropertyProxy< bool > child_property_homogeneous(Gtk::Widget& child) ;

/** Whether the item should be the same size as other homogeneous items.
   *
   * Default value: <tt>false</tt>
   *
   * @return A ChildPropertyProxy_ReadOnly that allows you to get the value of the property,
   * or receive notification when the value of the property changes.
   */
  Gtk::ChildPropertyProxy_ReadOnly< bool > child_property_homogeneous(const Gtk::Widget& child) const;


};

} // namespace Gtk


namespace Glib
{
  /** A Glib::wrap() method for this object.
   *
   * @param object The C instance.
   * @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref.
   * @result A C++ instance that wraps this C instance.
   *
   * @relates Gtk::Toolbar
   */
  GTKMM_API
  Gtk::Toolbar* wrap(GtkToolbar* object, bool take_copy = false);
} //namespace Glib


#endif /* _GTKMM_TOOLBAR_H */

