forked from AuroraMiddleware/gtk
gtk-demo: Add GtkListBox demo
This commit is contained in:
parent
136f6b15be
commit
b18c938b14
@ -30,6 +30,7 @@ demos = \
|
||||
images.c \
|
||||
infobar.c \
|
||||
links.c \
|
||||
listbox.c \
|
||||
list_store.c \
|
||||
menus.c \
|
||||
offscreen_window.c \
|
||||
@ -116,6 +117,7 @@ RESOURCES= $(demos) \
|
||||
stack.ui \
|
||||
revealer.ui \
|
||||
theming.ui \
|
||||
listbox.ui \
|
||||
alphatest.png \
|
||||
apple-red.png \
|
||||
background.jpg \
|
||||
@ -132,6 +134,7 @@ RESOURCES= $(demos) \
|
||||
gtk-logo-24.png \
|
||||
gtk-logo-48.png \
|
||||
gtk-logo-old.png \
|
||||
messages.txt \
|
||||
css_accordion.css \
|
||||
css_basics.css \
|
||||
css_multiplebgs.css \
|
||||
|
@ -104,6 +104,7 @@
|
||||
<file>images.c</file>
|
||||
<file>infobar.c</file>
|
||||
<file>links.c</file>
|
||||
<file>listbox.c</file>
|
||||
<file>list_store.c</file>
|
||||
<file>menus.c</file>
|
||||
<file>offscreen_window.c</file>
|
||||
@ -133,4 +134,10 @@
|
||||
<file>floppybuddy.gif</file>
|
||||
<file>gtk-logo-old.png</file>
|
||||
</gresource>
|
||||
<gresource prefix="/listbox">
|
||||
<file>listbox.ui</file>
|
||||
<file>messages.txt</file>
|
||||
<file>gtk-logo-48.png</file>
|
||||
<file>apple-red.png</file>
|
||||
</gresource>
|
||||
</gresources>
|
||||
|
376
demos/gtk-demo/listbox.c
Normal file
376
demos/gtk-demo/listbox.c
Normal file
@ -0,0 +1,376 @@
|
||||
/* ListBox
|
||||
*
|
||||
* GtkListBox allows lists with complicated layouts, using
|
||||
* regular widgets supporting sorting and filtering.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
static GdkPixbuf *avatar_pixbuf_gtk;
|
||||
static GdkPixbuf *avatar_pixbuf_other;
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
#define GTK_TYPE_MESSAGE (gtk_message_get_type ())
|
||||
#define GTK_MESSAGE(message) (G_TYPE_CHECK_INSTANCE_CAST ((message), GTK_TYPE_MESSAGE, GtkMessage))
|
||||
#define GTK_MESSAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_MESSAGE, GtkMessageClass))
|
||||
#define GTK_IS_MESSAGE(message) (G_TYPE_CHECK_INSTANCE_TYPE ((message), GTK_TYPE_MESSAGE))
|
||||
#define GTK_IS_MESSAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_MESSAGE))
|
||||
#define GTK_MESSAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_MESSAGE, GtkMessageClass))
|
||||
|
||||
#define GTK_TYPE_MESSAGE_ROW (gtk_message_row_get_type ())
|
||||
#define GTK_MESSAGE_ROW(message_row) (G_TYPE_CHECK_INSTANCE_CAST ((message_row), GTK_TYPE_MESSAGE_ROW, GtkMessageRow))
|
||||
#define GTK_MESSAGE_ROW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_MESSAGE_ROW, GtkMessageRowClass))
|
||||
#define GTK_IS_MESSAGE_ROW(message_row) (G_TYPE_CHECK_INSTANCE_TYPE ((message_row), GTK_TYPE_MESSAGE_ROW))
|
||||
#define GTK_IS_MESSAGE_ROW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_MESSAGE_ROW))
|
||||
#define GTK_MESSAGE_ROW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_MESSAGE_ROW, GtkMessageRowClass))
|
||||
|
||||
typedef struct _GtkMessage GtkMessage;
|
||||
typedef struct _GtkMessageClass GtkMessageClass;
|
||||
typedef struct _GtkMessageRow GtkMessageRow;
|
||||
typedef struct _GtkMessageRowClass GtkMessageRowClass;
|
||||
typedef struct _GtkMessageRowPrivate GtkMessageRowPrivate;
|
||||
|
||||
|
||||
struct _GtkMessage
|
||||
{
|
||||
GObject parent;
|
||||
|
||||
guint id;
|
||||
char *sender_name;
|
||||
char *sender_nick;
|
||||
char *message;
|
||||
gint64 time;
|
||||
guint reply_to;
|
||||
char *resent_by;
|
||||
int n_favorites;
|
||||
int n_reshares;
|
||||
};
|
||||
|
||||
struct _GtkMessageClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
struct _GtkMessageRow
|
||||
{
|
||||
GtkListBoxRow parent;
|
||||
|
||||
GtkMessageRowPrivate *priv;
|
||||
};
|
||||
|
||||
struct _GtkMessageRowClass
|
||||
{
|
||||
GtkListBoxRowClass parent_class;
|
||||
};
|
||||
|
||||
struct _GtkMessageRowPrivate
|
||||
{
|
||||
GtkMessage *message;
|
||||
GtkRevealer *details_revealer;
|
||||
GtkImage *avatar_image;
|
||||
GtkWidget *extra_buttons_box;
|
||||
GtkLabel *content_label;
|
||||
GtkLabel *source_name;
|
||||
GtkLabel *source_nick;
|
||||
GtkLabel *short_time_label;
|
||||
GtkLabel *detailed_time_label;
|
||||
GtkBox *resent_box;
|
||||
GtkLinkButton *resent_by_button;
|
||||
GtkLabel *n_favorites_label;
|
||||
GtkLabel *n_reshares_label;
|
||||
GtkButton *expand_button;
|
||||
};
|
||||
|
||||
GType gtk_message_get_type (void) G_GNUC_CONST;
|
||||
GType gtk_message_row_get_type (void) G_GNUC_CONST;
|
||||
|
||||
G_DEFINE_TYPE (GtkMessage, gtk_message, G_TYPE_OBJECT);
|
||||
|
||||
static void
|
||||
gtk_message_class_init (GtkMessageClass *klass)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_message_init (GtkMessage *msg)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_message_parse (GtkMessage *msg, const char *str)
|
||||
{
|
||||
char **strv;
|
||||
int i;
|
||||
|
||||
strv = g_strsplit (str, "|", 0);
|
||||
|
||||
i = 0;
|
||||
msg->id = strtol (strv[i++], NULL, 10);
|
||||
msg->sender_name = g_strdup (strv[i++]);
|
||||
msg->sender_nick = g_strdup (strv[i++]);
|
||||
msg->message = g_strdup (strv[i++]);
|
||||
msg->time = strtol (strv[i++], NULL, 10);
|
||||
if (strv[i])
|
||||
{
|
||||
msg->reply_to = strtol (strv[i++], NULL, 10);
|
||||
if (strv[i])
|
||||
{
|
||||
if (*strv[i])
|
||||
msg->resent_by = g_strdup (strv[i]);
|
||||
i++;
|
||||
if (strv[i])
|
||||
{
|
||||
msg->n_favorites = strtol (strv[i++], NULL, 10);
|
||||
if (strv[i])
|
||||
{
|
||||
msg->n_reshares = strtol (strv[i++], NULL, 10);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
g_strfreev (strv);
|
||||
}
|
||||
|
||||
static GtkMessage *
|
||||
gtk_message_new (const char *str)
|
||||
{
|
||||
GtkMessage *msg;
|
||||
msg = g_object_new (gtk_message_get_type (), NULL);
|
||||
gtk_message_parse (msg, str);
|
||||
return msg;
|
||||
}
|
||||
|
||||
G_DEFINE_TYPE (GtkMessageRow, gtk_message_row, GTK_TYPE_LIST_BOX_ROW);
|
||||
|
||||
|
||||
static void
|
||||
gtk_message_row_update (GtkMessageRow *row)
|
||||
{
|
||||
GtkMessageRowPrivate *priv = row->priv;
|
||||
GDateTime *t;
|
||||
char *s;
|
||||
|
||||
gtk_label_set_text (priv->source_name, priv->message->sender_name);
|
||||
gtk_label_set_text (priv->source_nick, priv->message->sender_nick);
|
||||
gtk_label_set_text (priv->content_label, priv->message->message);
|
||||
t = g_date_time_new_from_unix_utc (priv->message->time);
|
||||
s = g_date_time_format (t, "%e %b %y");
|
||||
gtk_label_set_text (priv->short_time_label, s);
|
||||
g_free (s);
|
||||
s = g_date_time_format (t, "%X - %e %b %Y");
|
||||
gtk_label_set_text (priv->detailed_time_label, s);
|
||||
g_free (s);
|
||||
|
||||
gtk_widget_set_visible (GTK_WIDGET(priv->n_favorites_label),
|
||||
priv->message->n_favorites != 0);
|
||||
s = g_strdup_printf ("<b>%d</b>\nFavorites", priv->message->n_favorites);
|
||||
gtk_label_set_markup (priv->n_favorites_label, s);
|
||||
g_free (s);
|
||||
|
||||
gtk_widget_set_visible (GTK_WIDGET(priv->n_reshares_label),
|
||||
priv->message->n_reshares != 0);
|
||||
s = g_strdup_printf ("<b>%d</b>\nReshares", priv->message->n_reshares);
|
||||
gtk_label_set_markup (priv->n_reshares_label, s);
|
||||
g_free (s);
|
||||
|
||||
gtk_widget_set_visible (GTK_WIDGET (priv->resent_box), priv->message->resent_by != NULL);
|
||||
if (priv->message->resent_by)
|
||||
gtk_button_set_label (GTK_BUTTON (priv->resent_by_button), priv->message->resent_by);
|
||||
|
||||
if (strcmp (priv->message->sender_nick, "@GTKtoolkit") == 0)
|
||||
gtk_image_set_from_pixbuf (priv->avatar_image, avatar_pixbuf_gtk);
|
||||
else
|
||||
gtk_image_set_from_pixbuf (priv->avatar_image, avatar_pixbuf_other);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_message_row_expand (GtkMessageRow *row)
|
||||
{
|
||||
GtkMessageRowPrivate *priv = row->priv;
|
||||
gboolean expand;
|
||||
|
||||
expand = !gtk_revealer_get_reveal_child (priv->details_revealer);
|
||||
|
||||
gtk_revealer_set_reveal_child (priv->details_revealer, expand);
|
||||
if (expand)
|
||||
gtk_button_set_label (priv->expand_button, "Hide");
|
||||
else
|
||||
gtk_button_set_label (priv->expand_button, "Expand");
|
||||
}
|
||||
|
||||
static void
|
||||
expand_clicked (GtkMessageRow *row,
|
||||
GtkButton *button)
|
||||
{
|
||||
gtk_message_row_expand (row);
|
||||
}
|
||||
|
||||
static void
|
||||
reshare_clicked (GtkMessageRow *row,
|
||||
GtkButton *button)
|
||||
{
|
||||
GtkMessageRowPrivate *priv = row->priv;
|
||||
|
||||
priv->message->n_reshares++;
|
||||
gtk_message_row_update (row);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
favorite_clicked (GtkMessageRow *row,
|
||||
GtkButton *button)
|
||||
{
|
||||
GtkMessageRowPrivate *priv = row->priv;
|
||||
|
||||
priv->message->n_favorites++;
|
||||
gtk_message_row_update (row);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_message_row_state_flags_changed (GtkWidget *widget,
|
||||
GtkStateFlags previous_state_flags)
|
||||
{
|
||||
GtkMessageRowPrivate *priv = GTK_MESSAGE_ROW (widget)->priv;
|
||||
GtkStateFlags flags;
|
||||
|
||||
flags = gtk_widget_get_state_flags (widget);
|
||||
|
||||
gtk_widget_set_visible (priv->extra_buttons_box,
|
||||
flags & (GTK_STATE_FLAG_PRELIGHT | GTK_STATE_FLAG_SELECTED));
|
||||
|
||||
GTK_WIDGET_CLASS (gtk_message_row_parent_class)->state_flags_changed (widget, previous_state_flags);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_message_row_class_init (GtkMessageRowClass *klass)
|
||||
{
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GtkMessageRowPrivate));
|
||||
|
||||
gtk_widget_class_set_template_from_resource (widget_class, "/listbox/listbox.ui");
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, content_label);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, source_name);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, source_nick);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, short_time_label);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, detailed_time_label);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, extra_buttons_box);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, details_revealer);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, avatar_image);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, resent_box);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, resent_by_button);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, n_reshares_label);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, n_favorites_label);
|
||||
gtk_widget_class_bind_child(widget_class, GtkMessageRowPrivate, expand_button);
|
||||
gtk_widget_class_bind_callback (widget_class, expand_clicked);
|
||||
gtk_widget_class_bind_callback (widget_class, reshare_clicked);
|
||||
gtk_widget_class_bind_callback (widget_class, favorite_clicked);
|
||||
|
||||
widget_class->state_flags_changed = gtk_message_row_state_flags_changed;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_message_row_init (GtkMessageRow *row)
|
||||
{
|
||||
GtkMessageRowPrivate *priv;
|
||||
|
||||
row->priv = priv =
|
||||
G_TYPE_INSTANCE_GET_PRIVATE (row, GTK_TYPE_MESSAGE_ROW, GtkMessageRowPrivate);
|
||||
|
||||
gtk_widget_init_template (GTK_WIDGET (row));
|
||||
}
|
||||
|
||||
static GtkMessageRow *
|
||||
gtk_message_row_new (GtkMessage *message)
|
||||
{
|
||||
GtkMessageRow *row;
|
||||
|
||||
row = g_object_new (gtk_message_row_get_type (), NULL);
|
||||
row->priv->message = message;
|
||||
gtk_message_row_update (row);
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
static int
|
||||
gtk_message_row_sort (GtkMessageRow *a, GtkMessageRow *b, gpointer data)
|
||||
{
|
||||
return a->priv->message->time - b->priv->message->time;
|
||||
}
|
||||
|
||||
static void
|
||||
row_activated (GtkListBox *listbox, GtkListBoxRow *row)
|
||||
{
|
||||
gtk_message_row_expand (GTK_MESSAGE_ROW (row));
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_listbox (GtkWidget *do_widget)
|
||||
{
|
||||
GtkWidget *scrolled, *listbox, *vbox, *label;
|
||||
GtkMessage *message;
|
||||
GtkMessageRow *row;
|
||||
GBytes *data;
|
||||
char **lines;
|
||||
int i;
|
||||
|
||||
if (!window)
|
||||
{
|
||||
avatar_pixbuf_gtk = gdk_pixbuf_new_from_resource_at_scale ("/listbox/gtk-logo-48.png", 32, 32, FALSE, NULL);
|
||||
avatar_pixbuf_other = gdk_pixbuf_new_from_resource_at_scale ("/listbox/apple-red.png", 32, 32, FALSE, NULL);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "ListBox");
|
||||
gtk_window_set_default_size (GTK_WINDOW (window),
|
||||
400, 600);
|
||||
|
||||
/* NULL window variable when window is closed */
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed),
|
||||
&window);
|
||||
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
||||
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||
label = gtk_label_new ("Messages from Gtk+ and friends");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
|
||||
scrolled = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scrolled, TRUE, TRUE, 0);
|
||||
listbox = gtk_list_box_new ();
|
||||
gtk_container_add (GTK_CONTAINER (scrolled), listbox);
|
||||
|
||||
gtk_list_box_set_sort_func (GTK_LIST_BOX (listbox), (GtkListBoxSortFunc)gtk_message_row_sort, listbox, NULL);
|
||||
gtk_list_box_set_activate_on_single_click (GTK_LIST_BOX (listbox), FALSE);
|
||||
g_signal_connect (listbox, "row-activated", G_CALLBACK (row_activated), NULL);
|
||||
|
||||
gtk_widget_show_all (vbox);
|
||||
|
||||
data = g_resources_lookup_data ("/listbox/messages.txt", 0, NULL);
|
||||
lines = g_strsplit (g_bytes_get_data (data, NULL), "\n", 0);
|
||||
|
||||
for (i = 0; lines[i] != NULL && *lines[i]; i++)
|
||||
{
|
||||
message = gtk_message_new (lines[i]);
|
||||
row = gtk_message_row_new (message);
|
||||
gtk_widget_show (GTK_WIDGET (row));
|
||||
gtk_container_add (GTK_CONTAINER (listbox), GTK_WIDGET (row));
|
||||
}
|
||||
|
||||
g_strfreev (lines);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
gtk_widget_show (window);
|
||||
else
|
||||
gtk_widget_destroy (window);
|
||||
|
||||
return window;
|
||||
}
|
425
demos/gtk-demo/listbox.ui
Normal file
425
demos/gtk-demo/listbox.ui
Normal file
@ -0,0 +1,425 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface domain="gtk30">
|
||||
<!-- interface-requires gtk+ 3.10 -->
|
||||
<!-- interface-requires gtkdemo 3.10 -->
|
||||
<object class="GtkMenu" id="menu1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="menuitem1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Email message</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="menuitem2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Embed message</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<template class="GtkMessageRow" parent="GtkListBoxRow">
|
||||
<child>
|
||||
<object class="GtkGrid" id="grid1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="avatar_image">
|
||||
<property name="width_request">32</property>
|
||||
<property name="height_request">32</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">start</property>
|
||||
<property name="margin_top">8</property>
|
||||
<property name="margin_bottom">8</property>
|
||||
<property name="margin_left">8</property>
|
||||
<property name="margin_right">8</property>
|
||||
<property name="stock">gtk-missing-image</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="box1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="baseline_position">top</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="valign">baseline</property>
|
||||
<property name="relief">none</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="source_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">baseline</property>
|
||||
<property name="label" translatable="no">Username</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="source_nick">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">baseline</property>
|
||||
<property name="label" translatable="no">@nick</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="short_time_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">baseline</property>
|
||||
<property name="label" translatable="yes">38m</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="content_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">start</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0</property>
|
||||
<property name="label" translatable="no">Message</property>
|
||||
<property name="wrap">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="resent_box">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">media-playlist-repeat</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Resent by</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLinkButton" id="resent_by_button">
|
||||
<property name="label" translatable="no">reshareer</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="relief">none</property>
|
||||
<property name="uri">http://www.gtk.org</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="box3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="expand_button">
|
||||
<property name="label" translatable="yes">Expand</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="relief">none</property>
|
||||
<signal name="clicked" handler="expand_clicked" swapped="yes"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="extra_buttons_box">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="reply-button">
|
||||
<property name="label" translatable="yes">Reply</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="relief">none</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reshare-button">
|
||||
<property name="label" translatable="yes">Reshare</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="relief">none</property>
|
||||
<signal name="clicked" handler="reshare_clicked" swapped="yes"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="favorite-buttton">
|
||||
<property name="label" translatable="yes">Favorite</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="relief">none</property>
|
||||
<signal name="clicked" handler="favorite_clicked" swapped="yes"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuButton" id="more-button">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="relief">none</property>
|
||||
<property name="popup">menu1</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label7">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">More...</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="details_revealer">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="box5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="box7">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_top">2</property>
|
||||
<property name="margin_bottom">2</property>
|
||||
<property name="spacing">8</property>
|
||||
<child>
|
||||
<object class="GtkFrame" id="frame1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="n_reshares_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="no"><b>2</b>
|
||||
Reshares</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label_item">
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFrame" id="frame2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="n_favorites_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="no"><b>2</b>
|
||||
FAVORITES</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label_item">
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="box6">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="detailed_time_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="no">4:25 AM - 14 Jun 13 </property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button5">
|
||||
<property name="label" translatable="yes">Details</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="relief">none</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="width">1</property>
|
||||
<property name="height">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</template>
|
||||
</interface>
|
8
demos/gtk-demo/messages.txt
Normal file
8
demos/gtk-demo/messages.txt
Normal file
@ -0,0 +1,8 @@
|
||||
1|GTK+ and friends|@GTKtoolkit|GTK+ 3.8.0 (STABLE) released: wayland, Multi-application Broadway, improved CSS support and more ... http://ur1.ca/d6yms #gtk #gtk3|1364338800|0||4|2
|
||||
2|Daniel Svensson|@dsvensson|Bringing an application up to the new features in GTK 3.x = tons of negative diffs, awesome work by @GTKtoolkit devs <3|1382565600|0|GTK+ and friends|0|1
|
||||
3|GTK+ and friends|@GTKtoolkit|GLib status update and a warning: http://ur1.ca/awsm1 #glib|1384383600
|
||||
4|GTK+ and friends|@GTKtoolkit|GProperty status: http://ur1.ca/awslh #glib|1384383300
|
||||
5|GTK+ and friends|@GTKtoolkit|GTK+ 3.6.2 (STABLE) available: http://ur1.ca/awsl2 #gtk #gtk3|1384383000
|
||||
6|GTK+ and friends|@GTKtoolkit|GLib 2.34.2 (STABLE) available: http://ur1.ca/awskn #glib|1384383000
|
||||
7|GTK+ and friends|@GTKtoolkit|GTK+ 3.6.0 (STABLE) released: http://ur1.ca/aj4e0 #gtk #gtk3|1381528800
|
||||
8|GTK+ and friends|@GTKtoolkit|GLib 2.34.0 (STABLE) released: http://ur1.ca/aj4du #glib|1381522800
|
Loading…
Reference in New Issue
Block a user