/*
 * Copyright (C) 2003 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, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */

#include <gtkmm/toggletoolbutton.h>
#include <gtkmm/radiobuttongroup.h>
_DEFS(gtkmm,gtk)
_PINCLUDE(gtkmm/private/toggletoolbutton_p.h)


namespace Gtk
{

/** A toolbar item that contains a radio button.
 *
 * A %Gtk::RadioToolButton is a Gtk::ToolItem that contains a radio button, that is,
 * a button that is part of a group of toggle buttons where only one button can be
 * active at a time.
 *
 * @ingroup Widgets
 */
class RadioToolButton : public ToggleToolButton
{
  _CLASS_GTKOBJECT(RadioToolButton, GtkRadioToolButton, GTK_RADIO_TOOL_BUTTON, Gtk::ToggleToolButton, GtkToggleToolButton)
public:
  using Group = RadioButtonGroup;

  /** Creates a new Gtk::RadioToolButton and a new group.
   *
   * The RadioToolButton will have an empty label and will reside in a newly created group.
   * Use get_group() to retrieve this group and pass it to other radio buttons to assign
   * them to this group, or use join_group().
   *
   * @newin{2,4}
   */
  _CTOR_DEFAULT()

  /** Creates a new Gtk::RadioToolButton and a new group.
   *
   * The RadioToolButton will have the label @a label.
   *
   * @param label The string used to display the label for this RadioToolButton.
   *
   * @newin{3,22}
   */
  explicit RadioToolButton(const Glib::ustring& label);

  /** Creates a new Gtk::RadioToolButton in an existing group.
   *
   * The RadioToolButton will have the label @a label and will be put into the Group
   * @a group.
   *
   * @param group The existing group which will be used for this RadioToolButton.
   * @param label The string used to display the label for this RadioToolButton.
   *
   * @newin{2,4}
   */
  explicit RadioToolButton(Group& group, const Glib::ustring& label = Glib::ustring());
  _IGNORE(gtk_radio_tool_button_new)

  //This would look too much like a copy constructor:
  //_WRAP_CTOR(RadioToolButton(RadioToolButton& group), gtk_radio_tool_button_new_from_widget)
  //People should use second.join_group(first) instead.
  _IGNORE(gtk_radio_tool_button_new_from_widget)

  //This does not correspond to any gtk_radio_tool_button_*_new() function,
  //but it should work (it just sets properties), and it makes this class consistent with the
  //other ToolButton classes.

  /** Creates a new Gtk::RadioToolButton with an image and a new group.
   *
   * The RadioToolButton will have the label @a label and an image widget @a icon_widget.
   *
   * @param icon_widget The widget placed as the RadioToolButton's icon.
   * @param label The string used to display the label for this RadioToolButton.
   *
   * @newin{2,4}
   */
  explicit RadioToolButton(Widget& icon_widget, const Glib::ustring& label = Glib::ustring());


  _WRAP_METHOD(Group get_group(), gtk_radio_tool_button_get_group)

  /** Adds the radio tool button to @a group, removing it from the group it belonged to before.
   * You can obtain a suitable group from another radio tool button by using get_group().
   *
   * @newin{2,4}
   *
   * @param group An existing radio button group.
   */
  void set_group(Group& group);

  /** Removes the radio tool button from the group.
   *
   * @newin{3,10}
   */
  void reset_group();
  _IGNORE(gtk_radio_tool_button_set_group)

  /** Joins a Gtk::RadioToolButton object to the group of another Gtk::RadioToolButton object.
   *
   * @newin{3,22}
   *
   * @param group_source A radio tool button object whose group we are joining.
   */
  void join_group(RadioToolButton& group_source);

  /// Note that %property_group() corresponds to join_group(), rather than to get_group() and set_group().
  _WRAP_PROPERTY("group", RadioToolButton*, newin "3,22")
};

} // namespace Gtk
