Gtk Properties(1)
Gtk Properties(2)
#include <gtk/gtk.h>
static GtkWidget *createWindow(gint, gint, gchar *);
void pnt_property_values(const GValue *value)
{
GType type;
GEnumClass *enum_class;
const GEnumValue *enum_value;
const gchar *value_name;
/// Get the type of the value
type = G_VALUE_TYPE(value);
/// Get the EnumClass of the type
enum_class = g_type_class_ref(type);
/// Get n values
guint n_values = enum_class->n_values;
for (guint i = 0; i < n_values; ++i)
{
enum_value = &enum_class->values[i];
value_name = enum_value->value_name;
g_print("%u = %s\n", i, value_name);
}
}
int main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
GtkWidget *window;
GtkWidget *button;
GParamSpec *pspec;
const gchar *const property = "relief";
const GValue *default_value;
/// *** window
window = createWindow(200, 200, "Properties");
/// ***button
button = gtk_button_new_with_label("Click");
pspec = g_object_class_find_property(G_OBJECT_GET_CLASS(button), property);
default_value = g_param_spec_get_default_value(pspec);
pnt_property_values(default_value);
gtk_container_add(GTK_CONTAINER(window), button);
gtk_widget_show_all(window);
gtk_main();
}
static GtkWidget *createWindow(gint width, gint height, gchar *title)
{
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request(window, width, height);
gtk_window_set_title(GTK_WINDOW(window), title);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window), 25);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
return window;
}