[gtkmm/gtkmm-3-24] SizeGroup demo: Derive from Gtk::Window instead of Dialog



commit d5344e2364dae52a82595c5d1b7802c276cdcce8
Author: Kjell Ahlstedt <kjellahlstedt gmail com>
Date:   Sun Jun 27 15:10:59 2021 +0200

    SizeGroup demo: Derive from Gtk::Window instead of Dialog
    
    and set active items in the combo boxes, so something is shown.

 demos/gtk-demo/example_sizegroup.cc | 90 ++++++++++++++++---------------------
 1 file changed, 39 insertions(+), 51 deletions(-)
---
diff --git a/demos/gtk-demo/example_sizegroup.cc b/demos/gtk-demo/example_sizegroup.cc
index 065313c7..f11c5f40 100644
--- a/demos/gtk-demo/example_sizegroup.cc
+++ b/demos/gtk-demo/example_sizegroup.cc
@@ -1,13 +1,13 @@
 /* Size Groups
  *
- * GtkSizeGroup provides a mechanism for grouping a number of
+ * Gtk::SizeGroup provides a mechanism for grouping a number of
  * widgets together so they all request the same amount of space.
  * This is typically useful when you want a column of widgets to
- * have the same size, but you can't use a GtkGrid widget.
+ * have the same size, but you can't use a Gtk::Grid widget.
  *
  * Note that size groups only affect the amount of space requested,
  * not the size that the widgets finally receive. If you want the
- * widgets in a GtkSizeGroup to actually be the same size, you need
+ * widgets in a Gtk::SizeGroup to actually be the same size, you need
  * to pack them in such a way that they get the size they request
  * and not more. For example, if you are packing your widgets
  * into a table, you would not include the Gtk::FILL flag.
@@ -16,7 +16,7 @@
 #include <gtkmm.h>
 #include <list>
 
-class Example_SizeGroup : public Gtk::Dialog
+class Example_SizeGroup : public Gtk::Window
 {
 public:
   Example_SizeGroup();
@@ -24,21 +24,21 @@ public:
 
 protected:
   //Signal handlers:
-  virtual void on_checkbutton_toggled();
+  void on_checkbutton_toggled();
+  void on_close();
 
-  typedef std::list<Glib::ustring> type_listStrings;
-  virtual void add_row(Gtk::Grid& grid, int row, const Glib::RefPtr<Gtk::SizeGroup>& size_group, const 
Glib::ustring& label_text, const std::list<Glib::ustring>& options);
-  virtual Gtk::ComboBoxText* create_combobox(const std::list<Glib::ustring>& strings);
-
-  void on_response(int response_id) override;
+  using type_listStrings = std::list<Glib::ustring>;
+  void add_row(Gtk::Grid& grid, int row, const Glib::RefPtr<Gtk::SizeGroup>& size_group,
+    const Glib::ustring& label_text, const std::list<Glib::ustring>& options);
+  Gtk::ComboBoxText* create_combobox(const std::list<Glib::ustring>& strings);
 
   //Member widgets:
   Gtk::Frame m_Frame_Color, m_Frame_Line;
   Gtk::Box m_VBox;
-  Gtk::Box m_HBox;
   Glib::RefPtr<Gtk::SizeGroup> m_refSizeGroup;
   Gtk::Grid m_Grid_Color, m_Grid_Line;
   Gtk::CheckButton m_CheckButton;
+  Gtk::Button m_CloseButton;
 };
 
 //Called by DemoWindow;
@@ -48,23 +48,21 @@ Gtk::Window* do_sizegroup()
 }
 
 Example_SizeGroup::Example_SizeGroup()
-: Gtk::Dialog("Gtk::SizeGroup"),
-  m_Frame_Color("Color Options"),
+: m_Frame_Color("Color Options"),
   m_Frame_Line("Line Options"),
   m_VBox(Gtk::ORIENTATION_VERTICAL, 5),
-  m_HBox(Gtk::ORIENTATION_HORIZONTAL, 5),
-  m_CheckButton("_Enable grouping", true)
+  m_CheckButton("_Enable grouping", true),
+  m_CloseButton("_Close", true)
 {
+  set_title("Gtk::SizeGroup");
   set_resizable(false);
-  add_button("_Close", Gtk::RESPONSE_CLOSE);
 
-  get_content_area()->pack_start(m_VBox);
+  add(m_VBox);
   m_VBox.set_border_width(5);
 
   m_refSizeGroup = Gtk::SizeGroup::create(Gtk::SIZE_GROUP_HORIZONTAL),
 
-  /* Create one frame holding color options
-   */
+  // Create one frame holding color options
   m_VBox.pack_start(m_Frame_Color);
 
   m_Grid_Color.set_border_width(5);
@@ -72,16 +70,11 @@ Example_SizeGroup::Example_SizeGroup()
   m_Grid_Color.set_column_spacing(10);
   m_Frame_Color.add(m_Grid_Color);
 
-  type_listStrings color_options;
-  color_options.push_back("Red");
-  color_options.push_back("Green");
-  color_options.push_back("Blue");
-
+  const type_listStrings color_options{"Red", "Green", "Blue"};
   add_row(m_Grid_Color, 0, m_refSizeGroup, "_Foreground", color_options);
   add_row(m_Grid_Color, 1, m_refSizeGroup, "_Background", color_options);
 
-  /* And another frame holding line style options
-   */
+  // and another frame holding line style options
   m_VBox.pack_start(m_Frame_Line, Gtk::PACK_SHRINK);
 
   m_Grid_Line.set_border_width(5);
@@ -89,26 +82,22 @@ Example_SizeGroup::Example_SizeGroup()
   m_Grid_Line.set_column_spacing(10);
   m_Frame_Line.add(m_Grid_Line);
 
-
-  type_listStrings dash_options;
-  dash_options.push_back("Solid");
-  dash_options.push_back("Dashed");
-  dash_options.push_back("Dotted");
-
+  const type_listStrings dash_options{"Solid", "Dashed", "Dotted"};
   add_row(m_Grid_Line, 0, m_refSizeGroup, "_Dashing", dash_options);
 
-  type_listStrings end_options;
-  end_options.push_back("Square");
-  end_options.push_back("Round");
-  end_options.push_back("Arrow");
-
+  const type_listStrings end_options{"Square", "Round", "Double Arrow"};
   add_row(m_Grid_Line, 1, m_refSizeGroup, "_Line ends", end_options);
 
-  /* And a check button to turn grouping on and off */
+  // and a check button to turn grouping on and off
   m_VBox.pack_start(m_CheckButton, Gtk::PACK_SHRINK);
   m_CheckButton.set_active();
   m_CheckButton.signal_toggled().connect(sigc::mem_fun(*this, &Example_SizeGroup::on_checkbutton_toggled));
 
+  // and finally a close button
+  m_VBox.pack_start(m_CloseButton, Gtk::PACK_SHRINK);
+  m_CloseButton.set_halign(Gtk::ALIGN_END);
+  m_CloseButton.signal_clicked().connect(sigc::mem_fun(*this, &Example_SizeGroup::on_close));
+
   show_all();
 }
 
@@ -118,11 +107,10 @@ Example_SizeGroup::~Example_SizeGroup()
 
 void Example_SizeGroup::on_checkbutton_toggled()
 {
+  // Gtk::SIZE_GROUP_NONE is not generally useful, but is useful
+  // here to show the effect of Gtk::SIZE_GROUP_HORIZONTAL by contrast.
   Gtk::SizeGroupMode new_mode = Gtk::SIZE_GROUP_HORIZONTAL;
-
-  if(m_CheckButton.get_active())
-    new_mode = Gtk::SIZE_GROUP_HORIZONTAL;
-  else
+  if (!m_CheckButton.get_active())
     new_mode = Gtk::SIZE_GROUP_NONE;
 
   m_refSizeGroup->set_mode(new_mode);
@@ -133,34 +121,34 @@ void Example_SizeGroup::add_row(Gtk::Grid& grid, int row,
                                 const Glib::ustring& label_text,
                                 const std::list<Glib::ustring>& options)
 {
-  Gtk::Label* pLabel = Gtk::make_managed<Gtk::Label>(label_text, Gtk::ALIGN_START, Gtk::ALIGN_END, true);
+  auto pLabel = Gtk::make_managed<Gtk::Label>(label_text, Gtk::ALIGN_START, Gtk::ALIGN_BASELINE, true);
 
-  grid.attach(*pLabel, 0, row, 1, 1);
   pLabel->set_hexpand();
+  grid.attach(*pLabel, 0, row, 1, 1);
 
-  Gtk::ComboBoxText* pComboBoxText = create_combobox(options);
+  auto pComboBoxText = create_combobox(options);
   pLabel->set_mnemonic_widget(*pComboBoxText);
+  pComboBoxText->set_halign(Gtk::ALIGN_END);
+  pComboBoxText->set_valign(Gtk::ALIGN_BASELINE);
   size_group->add_widget(*pComboBoxText);
-
   grid.attach(*pComboBoxText, 1, row, 1, 1);
 }
 
-/* Convenience function to create an option menu holding a number of strings
- */
+// Convenience function to create an option menu holding a number of strings
 Gtk::ComboBoxText* Example_SizeGroup::create_combobox(const std::list<Glib::ustring>& strings)
 {
-  Gtk::ComboBoxText* pCombo = Gtk::make_managed<Gtk::ComboBoxText>();
+  auto pCombo = Gtk::make_managed<Gtk::ComboBoxText>();
 
   for(const auto& str : strings)
   {
     pCombo->append(str);
   }
+  pCombo->set_active(0);
 
   return pCombo;
 }
 
-void Example_SizeGroup::on_response(int)
+void Example_SizeGroup::on_close()
 {
   hide();
 }
-


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]