Re: Extended Layout and Size Groups

2008-01-07 Thread Behdad Esfahbod
On Mon, 2008-01-07 at 16:38 -0500, Mathias Hasselmann wrote:
 
 3) Add some property to GtkSizeGroup to switch between
minimum-size, and natural-size mode? Minimum-size mode is
 the
current behavior, in natural-size mode the group would use
the maximum natural size of its widgets as size request.

To me, size groups should work on natural-size mode.  Not sure what the
implications will be.

-- 
behdad
http://behdad.org/

Those who would give up Essential Liberty to purchase a little
 Temporary Safety, deserve neither Liberty nor Safety.
-- Benjamin Franklin, 1759

___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Extended Layout and Size Groups

2007-12-21 Thread Mathias Hasselmann
Seems GtkSizeGroup has to be modified to cache and modify natural sizes.
See attached picture for details.

Ciao,
Mathias
-- 
Mathias Hasselmann [EMAIL PROTECTED]
Openismus GmbH: http://www.openismus.com/
Personal Site: http://taschenorakel.de/
inline: extended-layout-and-size-groups.png#include gtk/gtk.h
#include math.h

static void
size_group_toggled_cb (GtkToggleButton *button,
   GtkSizeGroup*group)
{
  if (gtk_toggle_button_get_active (button))
gtk_size_group_set_mode (group, GTK_SIZE_GROUP_HORIZONTAL);
  else
gtk_size_group_set_mode (group, GTK_SIZE_GROUP_NONE);
}

static void
ellipsize_toggled_cb (GtkToggleButton *button,
  GtkWidget   *vbox)
{
  GList *rows, *cells, *iter;
  PangoEllipsizeMode mode;

  if (gtk_toggle_button_get_active (button))
mode = PANGO_ELLIPSIZE_END;
  else
mode = PANGO_ELLIPSIZE_NONE;

  rows = gtk_container_get_children (GTK_CONTAINER (vbox));
  for (iter = rows; iter; iter = iter-next)
{
  if (!GTK_IS_CONTAINER (iter-data))
break;

  cells = gtk_container_get_children (iter-data);

  if (cells  GTK_IS_LABEL (cells-data))
gtk_label_set_ellipsize (cells-data, mode);

  g_list_free (cells);
}

  g_list_free (rows);
}

int
main (int   argc,
  char *argv[])
{
  GtkWidget *window, *vbox, *button;
  GtkSizeGroup *groups[2];
  gint x, y;

  gtk_init (argc, argv);

  for (x = 0; x  G_N_ELEMENTS (groups); ++x)
groups[x] = gtk_size_group_new (GTK_SIZE_GROUP_NONE);

  vbox = gtk_vbox_new (FALSE, 6);
  gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);

  for (y = 0; y  4; ++y)
{
  GtkWidget *hbox = gtk_hbox_new (FALSE, 6);

  for (x = 0; x  2; ++x)
{
  gchar *text = g_strdup_printf (Label #%.0f.%d, pow(10, y), x + 1);
  GtkWidget *label = gtk_label_new (text);
  g_free (text);

  if (!x)
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
  else
gtk_box_pack_start (GTK_BOX (hbox), gtk_vseparator_new (), FALSE, TRUE, 0);

  gtk_box_pack_start (GTK_BOX (hbox), label, 1 == x, TRUE, 0);
  gtk_size_group_add_widget (groups[x], label);
}

  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
}

  gtk_box_pack_start (GTK_BOX (vbox), gtk_hseparator_new (), FALSE, TRUE, 0);

  for (x = 0; x  G_N_ELEMENTS (groups); ++x)
{
  gchar *text = g_strdup_printf (Size Group #%d, x + 1);

  button = gtk_check_button_new_with_label (text);
  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);
  g_free (text);

  g_signal_connect (button, toggled, G_CALLBACK (size_group_toggled_cb), groups[x]);
  }

  button = gtk_check_button_new_with_label (Ellipsize);
  gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);

  g_signal_connect (button, toggled,
G_CALLBACK (ellipsize_toggled_cb),
vbox);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_container_add (GTK_CONTAINER (window), vbox);
  gtk_widget_show_all (window);

  g_signal_connect (window, destroy,
G_CALLBACK (gtk_main_quit),
NULL);

  gtk_main ();

  return 0;
}


signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil
___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list