konaclient-gtk/konaclient-gtk/previewwidget.c

168 lines
4.9 KiB
C
Raw Normal View History

2015-09-07 18:37:29 +02:00
#include "previewwidget.h"
2016-06-04 22:25:51 +02:00
2015-09-07 18:37:29 +02:00
G_DEFINE_TYPE(PreviewWidget, PreviewWidget, GTK_TYPE_BIN)
2016-06-06 22:01:29 +02:00
// widget = PreviewWidget
// data = KonaImage
2016-06-07 20:14:01 +02:00
void PreviewWidget_download_clicked( GtkWidget *widget, KonaImage* ki )
2015-09-07 18:37:29 +02:00
{
2016-06-06 22:01:29 +02:00
kona_image_meta *meta;
meta = kona_image_get_meta_from_konaimage(ki);
printf("DOWNLOAD %s!\n", meta->image_url);
fflush(stdout);
2016-06-07 20:14:01 +02:00
}
void PreviewWidget_image_clicked( GtkWidget *widget, gint event, KonaImage* ki )
{
kona_image_meta *meta;
meta = kona_image_get_meta_from_konaimage(ki);
2016-06-06 22:01:29 +02:00
2016-06-07 20:14:01 +02:00
printf("IMAGE CLICKED: %d\n", meta->id);
fflush(stdout);
2015-09-07 18:37:29 +02:00
}
2016-06-07 20:14:01 +02:00
2015-09-07 18:37:29 +02:00
void PreviewWidget_set_image(PreviewWidget *widget, gchar *url) {
2016-06-04 23:06:46 +02:00
int height, width;
float iheight, iwidth;
2015-09-07 18:37:29 +02:00
2016-06-05 00:04:16 +02:00
GdkPixbuf *p, *ps;
2016-06-04 22:25:51 +02:00
p = gdk_pixbuf_new_from_file(url, NULL);
2016-06-04 23:06:46 +02:00
iheight = (float) gdk_pixbuf_get_height(p);
iwidth = (float) gdk_pixbuf_get_width(p);
if (gdk_pixbuf_get_width(p) < gdk_pixbuf_get_height(p)) {
height = 150;
width = iwidth / iheight * 150;
}
else {
width = 200;
height = iheight / iwidth * 200;
}
2016-06-05 00:04:16 +02:00
ps = gdk_pixbuf_scale_simple(p, width, height, GDK_INTERP_BILINEAR);
g_object_unref(p);
2016-06-05 17:16:25 +02:00
gtk_image_set_from_pixbuf(GTK_IMAGE(widget->image), ps);
2016-06-04 22:25:51 +02:00
2016-06-05 17:16:25 +02:00
gtk_widget_set_visible(widget->image, TRUE);
2015-09-07 18:37:29 +02:00
2016-06-05 17:16:25 +02:00
gtk_widget_set_visible(widget->spinner, FALSE);
2015-09-07 18:37:29 +02:00
}
2016-06-05 17:16:25 +02:00
enum {
PROP_KI=1,
2016-06-06 21:27:33 +02:00
PROP_COUNT
2016-06-05 17:16:25 +02:00
};
static GParamSpec *properties [PROP_COUNT];
static void preview_widget_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) {
PreviewWidget *self = (PreviewWidget*)object;
switch (prop_id) {
case PROP_KI:
g_value_set_pointer(value, self->ki);
break;
default:
break;
}
}
static void preview_widget_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) {
PreviewWidget *self = (PreviewWidget*)object;
switch (prop_id) {
case PROP_KI:
self->ki = g_value_get_pointer(value);
break;
default:
break;
}
}
2015-09-07 18:37:29 +02:00
void PreviewWidget_class_init(PreviewWidgetClass *klass)
{
2016-06-05 17:16:25 +02:00
GObjectClass *object_class = G_OBJECT_CLASS(klass);
object_class->set_property = preview_widget_set_property;
object_class->get_property = preview_widget_get_property;
2015-09-07 18:37:29 +02:00
2016-06-05 17:16:25 +02:00
properties [PROP_KI] =
g_param_spec_pointer("ki", "ki", "Pointer to corresponding KonaImage struct", G_PARAM_READWRITE);
g_object_class_install_properties(object_class, PROP_COUNT, properties);
2015-09-07 18:37:29 +02:00
}
void PreviewWidget_init(PreviewWidget *klass)
{
GtkWidget *widget;
GtkBuilder *builder;
2016-06-05 17:16:25 +02:00
2015-09-07 18:37:29 +02:00
builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "glade/previewWidget.glade", NULL);
2016-06-07 20:14:01 +02:00
widget = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(builder), "previewWidget"));
2015-09-07 18:37:29 +02:00
gtk_builder_connect_signals(builder, NULL);
2016-06-05 17:16:25 +02:00
gtk_container_add(GTK_CONTAINER(klass), widget);
2015-09-07 18:37:29 +02:00
2016-06-07 20:14:01 +02:00
klass->evBox = GTK_WIDGET(gtk_builder_get_object(builder, "evBox"));;
gtk_widget_set_events (GTK_WIDGET(klass->evBox), GDK_DOUBLE_BUTTON_PRESS); // TODO: Does not work
2016-06-05 17:16:25 +02:00
klass->image = GTK_WIDGET(gtk_builder_get_object(builder, "image"));
klass->button = GTK_WIDGET(gtk_builder_get_object(builder, "button"));
klass->spinner = GTK_WIDGET(gtk_builder_get_object(builder, "spinner"));
2015-09-07 18:37:29 +02:00
2016-06-07 20:14:01 +02:00
//gdk_window_set_cursor(gtk_widget_get_window(klass->evBox), GDK_HAND1); // TODO: Does not work
2015-09-07 18:37:29 +02:00
g_object_unref(G_OBJECT(builder));
}
2016-06-04 22:25:51 +02:00
GtkWidget *PreviewWidget_new(KonaImage* ki)
2015-09-07 18:37:29 +02:00
{
2016-06-05 17:16:25 +02:00
PreviewWidget* w = g_object_new (TYPE_PREVIEWWIDGET, "ki", ki, NULL);
2016-06-06 22:01:29 +02:00
// Connect KonaImage callbacks
2016-06-06 21:27:33 +02:00
g_signal_connect_swapped(ki, "notify::previewFile", (GCallback)previewImage_update_preview_from_konaImage, w);
g_signal_connect_swapped(ki, "notify::meta", (GCallback)previewImage_update_meta_from_konaImage, w);
2016-06-06 22:01:29 +02:00
// Connect UI handlers
2016-06-07 20:14:01 +02:00
g_signal_connect(w->button, "clicked", (GCallback)PreviewWidget_download_clicked, ki);
g_signal_connect(w->evBox, "button_press_event", (GCallback)PreviewWidget_image_clicked, ki); // TODO: Click event foo here
2016-06-06 22:01:29 +02:00
2016-06-06 20:56:44 +02:00
return GTK_WIDGET(w);
2015-09-07 18:37:29 +02:00
}
// TODO: DESTROY etc.
2016-06-04 23:06:46 +02:00
void debugfoo(GtkButton *widget, GtkImage *img)
{
2016-06-05 00:04:16 +02:00
gtk_image_clear(img);
2016-06-05 17:16:25 +02:00
gtk_widget_destroy(GTK_WIDGET(img));
}
2016-06-06 21:27:33 +02:00
/* ------------------------ *
* CALLBACKS FROM KONAIMAGE *
* ------------------------ */
void previewImage_update_preview_from_konaImage(PreviewWidget *pv, guint propId, KonaImage *ki)
2016-06-05 17:16:25 +02:00
{
GValue val = G_VALUE_INIT;
g_value_init(&val, G_TYPE_STRING);
2016-06-06 20:56:44 +02:00
g_object_get_property(G_OBJECT(ki), "previewFile", &val);
2016-06-06 21:27:33 +02:00
PreviewWidget_set_image(pv, (gchar*) g_value_get_string(&val));
}
void previewImage_update_meta_from_konaImage(PreviewWidget *pv, guint propId, KonaImage *ki)
{
kona_image_meta *meta;
2016-06-06 22:01:29 +02:00
gchar* text;
meta = kona_image_get_meta_from_konaimage(ki);
2016-06-06 21:27:33 +02:00
text = g_strdup_printf("Download @ %dx%d", meta->width, meta->height);
gtk_button_set_label(GTK_BUTTON(pv->button), text);
g_free(text);
fflush(stdout);
2016-06-04 23:06:46 +02:00
}