Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  testlist.c

  Sprache: C
 

#include <gtk/gtk.h>

#include <string.h>

G_GNUC_BEGIN_IGNORE_DEPRECATIONS

typedef struct _Row Row;
typedef struct _RowClass RowClass;

struct _Row
{
  GtkListBoxRow parent_instance;
  GtkWidget *label;
  int sort_id;
};

struct _RowClass
{
  GtkListBoxRowClass parent_class;
};

const char *css =
  "list row {"
  " border-width: 1px;"
  " border-style: solid;"
  " border-color: blue;"
  "}"
  "list row:hover {"
  "background-color: green;"
  "}"
  "list row:active {"
  "background-color: red;"
  "}";

static GType row_get_type (void);
G_DEFINE_TYPE (Row, row, GTK_TYPE_LIST_BOX_ROW)

static void
row_init (Row *row)
{
}

static void
row_class_init (RowClass *class)
{
}

static GtkWidget *
row_new (const char * text, int sort_id) {
  Row *row;

  row = g_object_new (row_get_type (), NULL);
  if (text != NULL)
    {
      row->label = gtk_label_new (text);
      gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), row->label);
    }
  row->sort_id = sort_id;

  return GTK_WIDGET (row);
}


static void
update_header_cb (Row *row, Row *before, gpointer data)
{
  GtkWidget *hbox, *l, *b;

  if (before == NULL ||
      (row->label != NULL &&
       strcmp (gtk_label_get_text (GTK_LABEL (row->label)), "blah3") == 0))
    {
      /* Create header if needed */
      if (gtk_list_box_row_get_header (GTK_LIST_BOX_ROW (row)) == NULL)
        {
          hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
          l = gtk_label_new ("Header");
          gtk_box_append (GTK_BOX (hbox), l);
          b = gtk_button_new_with_label ("button");
          gtk_box_append (GTK_BOX (hbox), b);
          gtk_list_box_row_set_header (GTK_LIST_BOX_ROW (row), hbox);
      }

      hbox = gtk_list_box_row_get_header(GTK_LIST_BOX_ROW (row));

      l = gtk_widget_get_first_child (hbox);
      gtk_label_set_text (GTK_LABEL (l), g_strdup_printf ("Header %d", row->sort_id));
    }
  else
    {
      gtk_list_box_row_set_header(GTK_LIST_BOX_ROW (row), NULL);
    }
}

static int
sort_cb (Row *a, Row *b, gpointer data)
{
  return a->sort_id - b->sort_id;
}

static int
reverse_sort_cb (Row *a, Row *b, gpointer data)
{
  return b->sort_id - a->sort_id;
}

static gboolean
filter_cb (Row *row, gpointer data)
{
  const char *text;

  if (row->label != NULL)
    {
      text = gtk_label_get_text (GTK_LABEL (row->label));
      return strcmp (text, "blah3") != 0;
    }

  return TRUE;
}

static void
row_activated_cb (GtkListBox *list_box,
                  GtkListBoxRow *row)
{
  g_print ("activated row %p\n", row);
}

static void
row_selected_cb (GtkListBox *list_box,
                 GtkListBoxRow *row)
{
  g_print ("selected row %p\n", row);
}

static void
sort_clicked_cb (GtkButton *button,
                 gpointer data)
{
  GtkListBox *list = data;

  gtk_list_box_set_sort_func (list, (GtkListBoxSortFunc)sort_cb, NULL, NULL);
}

static void
reverse_sort_clicked_cb (GtkButton *button,
                         gpointer data)
{
  GtkListBox *list = data;

  gtk_list_box_set_sort_func (list, (GtkListBoxSortFunc)reverse_sort_cb, NULL, NULL);
}

static void
filter_clicked_cb (GtkButton *button,
                   gpointer data)
{
  GtkListBox *list = data;

  gtk_list_box_set_filter_func (list, (GtkListBoxFilterFunc)filter_cb, NULL, NULL);
}

static void
unfilter_clicked_cb (GtkButton *button,
                   gpointer data)
{
  GtkListBox *list = data;

  gtk_list_box_set_filter_func (list, NULL, NULL, NULL);
}

static void
change_clicked_cb (GtkButton *button,
                   gpointer data)
{
  Row *row = data;

  if (strcmp (gtk_label_get_text (GTK_LABEL (row->label)), "blah3") == 0)
    {
      gtk_label_set_text (GTK_LABEL (row->label), "blah5");
      row->sort_id = 5;
    }
  else
    {
      gtk_label_set_text (GTK_LABEL (row->label), "blah3");
      row->sort_id = 3;
    }
  gtk_list_box_row_changed (GTK_LIST_BOX_ROW (row));
}

static void
add_clicked_cb (GtkButton *button,
                gpointer data)
{
  GtkListBox *list = data;
  GtkWidget *new_row;
  static int new_button_nr = 1;

  new_row = row_new( g_strdup_printf ("blah2 new %d", new_button_nr), new_button_nr);
  gtk_list_box_insert (GTK_LIST_BOX (list), new_row, -1);
  new_button_nr++;
}

static void
separate_clicked_cb (GtkButton *button,
                     gpointer data)
{
  GtkListBox *list = data;

  gtk_list_box_set_header_func (list, (GtkListBoxUpdateHeaderFunc)update_header_cb, NULL, NULL);
}

static void
unseparate_clicked_cb (GtkButton *button,
                       gpointer data)
{
  GtkListBox *list = data;

  gtk_list_box_set_header_func (list, NULL, NULL, NULL);
}

static void
visibility_clicked_cb (GtkButton *button,
                       gpointer data)
{
  GtkWidget *row = data;

  gtk_widget_set_visible (row, !gtk_widget_get_visible (row));
}

static void
selection_mode_changed (GtkComboBox *combo, gpointer data)
{
  GtkListBox *list = data;

  gtk_list_box_set_selection_mode (list, gtk_combo_box_get_active (combo));
}

static void
single_click_clicked (GtkButton *check, gpointer data)
{
  GtkListBox *list = data;

  g_print ("single: %d\n", gtk_check_button_get_active (GTK_CHECK_BUTTON (check)));
  gtk_list_box_set_activate_on_single_click (list, gtk_check_button_get_active (GTK_CHECK_BUTTON (check)));
}

int
main (int argc, char *argv[])
{
  GtkCssProvider *provider;
  GtkWidget *window, *hbox, *vbox, *list, *row, *row3, *row_vbox, *row_hbox, *l;
  GtkWidget *check, *button, *combo, *scrolled;

  gtk_init ();

  window = gtk_window_new ();
  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
  gtk_window_set_child (GTK_WINDOW (window), hbox);

  provider = gtk_css_provider_new ();
  gtk_css_provider_load_from_data (provider, css, -1);
  gtk_style_context_add_provider_for_display (gtk_widget_get_display (window),
                                              GTK_STYLE_PROVIDER (provider),
                                              GTK_STYLE_PROVIDER_PRIORITY_USER);


  list = gtk_list_box_new ();

  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
  gtk_box_append (GTK_BOX (hbox), vbox);

  combo = gtk_combo_box_text_new ();
  gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo),
                                  "GTK_SELECTION_NONE");
  gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo),
                                  "GTK_SELECTION_SINGLE");
  gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo),
                                  "GTK_SELECTION_BROWSE");
  g_signal_connect (combo, "changed", G_CALLBACK (selection_mode_changed), list);
  gtk_box_append (GTK_BOX (vbox), combo);
  gtk_combo_box_set_active (GTK_COMBO_BOX (combo), gtk_list_box_get_selection_mode (GTK_LIST_BOX (list)));
  check = gtk_check_button_new_with_label ("single click mode");
  gtk_check_button_set_active (GTK_CHECK_BUTTON (check), gtk_list_box_get_activate_on_single_click (GTK_LIST_BOX (list)));
  g_signal_connect (check, "toggled", G_CALLBACK (single_click_clicked), list);
  gtk_box_append (GTK_BOX (vbox), check);

  scrolled = gtk_scrolled_window_new ();
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
  gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolled), list);
  gtk_box_append (GTK_BOX (hbox), scrolled);

  g_signal_connect (list, "row-activated", G_CALLBACK (row_activated_cb), NULL);
  g_signal_connect (list, "row-selected", G_CALLBACK (row_selected_cb), NULL);

  row = row_new ("blah4"4);
  gtk_list_box_insert (GTK_LIST_BOX (list), row, -1);
  row3 = row = row_new ("blah3"3);
  gtk_list_box_insert (GTK_LIST_BOX (list), row, -1);
  row = row_new ("blah1"1);
  gtk_list_box_insert (GTK_LIST_BOX (list), row, -1);
  row = row_new ("blah2"2);
  gtk_list_box_insert (GTK_LIST_BOX (list), row, -1);

  row = row_new (NULL, 0);
  row_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
  row_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
  l = gtk_label_new ("da box for da man");
  gtk_box_append (GTK_BOX (row_hbox), l);
  check = gtk_check_button_new ();
  gtk_box_append (GTK_BOX (row_hbox), check);
  button = gtk_button_new_with_label ("ya!");
  gtk_box_append (GTK_BOX (row_hbox), button);
  gtk_box_append (GTK_BOX (row_vbox), row_hbox);
  check = gtk_check_button_new ();
  gtk_box_append (GTK_BOX (row_vbox), check);
  gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), row_vbox);
  gtk_list_box_insert (GTK_LIST_BOX (list), row, -1);

  row = row_new (NULL, 0);
  button = gtk_button_new_with_label ("focusable row");
  gtk_widget_set_hexpand (button, FALSE);
  gtk_widget_set_halign (button, GTK_ALIGN_START);
  gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), button);
  gtk_list_box_insert (GTK_LIST_BOX (list), row, -1);

  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
  gtk_box_append (GTK_BOX (hbox), vbox);

  button = gtk_button_new_with_label ("sort");
  gtk_box_append (GTK_BOX (vbox), button);
  g_signal_connect (button, "clicked", G_CALLBACK (sort_clicked_cb), list);

  button = gtk_button_new_with_label ("reverse");
  gtk_box_append (GTK_BOX (vbox), button);
  g_signal_connect (button, "clicked", G_CALLBACK (reverse_sort_clicked_cb), list);

  button = gtk_button_new_with_label ("change");
  gtk_box_append (GTK_BOX (vbox), button);
  g_signal_connect (button, "clicked", G_CALLBACK (change_clicked_cb), row3);

  button = gtk_button_new_with_label ("filter");
  gtk_box_append (GTK_BOX (vbox), button);
  g_signal_connect (button, "clicked", G_CALLBACK (filter_clicked_cb), list);

  button = gtk_button_new_with_label ("unfilter");
  gtk_box_append (GTK_BOX (vbox), button);
  g_signal_connect (button, "clicked", G_CALLBACK (unfilter_clicked_cb), list);

  button = gtk_button_new_with_label ("add");
  gtk_box_append (GTK_BOX (vbox), button);
  g_signal_connect (button, "clicked", G_CALLBACK (add_clicked_cb), list);

  button = gtk_button_new_with_label ("separate");
  gtk_box_append (GTK_BOX (vbox), button);
  g_signal_connect (button, "clicked", G_CALLBACK (separate_clicked_cb), list);

  button = gtk_button_new_with_label ("unseparate");
  gtk_box_append (GTK_BOX (vbox), button);
  g_signal_connect (button, "clicked", G_CALLBACK (unseparate_clicked_cb), list);

  button = gtk_button_new_with_label ("visibility");
  gtk_box_append (GTK_BOX (vbox), button);
  g_signal_connect (button, "clicked", G_CALLBACK (visibility_clicked_cb), row3);

  gtk_window_present (GTK_WINDOW (window));

  while (TRUE)
    g_main_context_iteration (NULL, TRUE);

  return 0;
}

Messung V0.5 in Prozent
C=99 H=94 G=96

¤ Dauer der Verarbeitung: 0.14 Sekunden  (vorverarbeitet am  2026-07-03) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik