diff --git a/gvn/gvn-value.c b/gvn/gvn-value.c index f676379..558f916 100644 --- a/gvn/gvn-value.c +++ b/gvn/gvn-value.c @@ -615,6 +615,8 @@ GValue * gvn_value_new_null () gboolean gvn_value_get_boolean (const GValue * value) { + g_return_val_if_fail (G_IS_VALUE (value), FALSE); + if (!gvn_value_is_null (value)) return g_value_get_boolean (value); @@ -630,6 +632,8 @@ GValue * gvn_value_new_boolean (gboolean value) gint gvn_value_get_int (const GValue * value) { + g_return_val_if_fail (G_IS_VALUE (value), 0); + if (!gvn_value_is_null (value)) return g_value_get_int (value); @@ -645,6 +649,8 @@ GValue * gvn_value_new_int (gint value) glong gvn_value_get_long (const GValue * value) { + g_return_val_if_fail (G_IS_VALUE (value), 0L); + if (!gvn_value_is_null (value)) return g_value_get_long (value); @@ -660,6 +666,8 @@ GValue * gvn_value_new_long (glong value) gdouble gvn_value_get_double (const GValue * value) { + g_return_val_if_fail (G_IS_VALUE (value), 0.0); + if (!gvn_value_is_null (value)) return g_value_get_double (value); @@ -675,6 +683,8 @@ GValue * gvn_value_new_double (gdouble value) const gchar * gvn_value_get_string (const GValue * value) { + g_return_val_if_fail (G_IS_VALUE (value), NULL); + if (!gvn_value_is_null (value)) return g_value_get_string (value); @@ -690,6 +700,8 @@ GValue * gvn_value_new_string (const gchar * value) gpointer gvn_value_get_boxed (const GValue * value) { + g_return_val_if_fail (G_IS_VALUE (value), NULL); + if (!gvn_value_is_null (value)) return g_value_get_boxed (value); @@ -699,7 +711,7 @@ gpointer gvn_value_get_boxed (const GValue * value) GValue * gvn_value_new_boxed (gpointer value) { GValue * gvalue = g_new0 (GValue, 1); - g_value_set_string (g_value_init (gvalue, G_TYPE_BOXED), value); + g_value_set_boxed (g_value_init (gvalue, G_TYPE_BOXED), value); return gvalue; } diff --git a/module/data/Makefile.am b/module/data/Makefile.am index b15b0c5..4ef9122 100644 --- a/module/data/Makefile.am +++ b/module/data/Makefile.am @@ -6,8 +6,8 @@ example_DATA = \ example.xml \ example-menu.xml \ consulter.glade \ - consulter-menu.xml + shelfs.glade \ + consulter-menu.xml \ customer.glade -# signer.glade EXTRA_DIST = $(example_DATA) diff --git a/module/data/example-menu.xml b/module/data/example-menu.xml index c086a5f..957c238 100644 --- a/module/data/example-menu.xml +++ b/module/data/example-menu.xml @@ -8,11 +8,17 @@ consulter F12 + + Shelfs + win.open-form + shelfs + F11 + Customer win.open-form customer - F11 + F10 diff --git a/module/data/example.xml b/module/data/example.xml index 689126d..824d578 100644 --- a/module/data/example.xml +++ b/module/data/example.xml @@ -8,6 +8,12 @@ icon="system-run"> Consulter +
+ Shelfs +
+ + + + + + + + + + + + + + + CALL vn2008.ubicator_beta (#wh, #date, #filter); + batch-items + + + + + model-items + False + + + + True + False + 8 + vertical + 4 + + + True + False + center + 4 + 5 + True + + + True + False + 1 + Title: + + + 0 + 0 + + + + + True + False + + + True + + + + + 1 + 0 + + + + + True + False + + + True + True + half + + + + + 1 + 2 + + + + + True + False + 1 + Date: + + + 0 + 2 + + + + + True + False + 1 + Warehouse: + + + 0 + 1 + + + + + True + False + + + True + 1 + True + + + + + 1 + 1 + + + + + True + False + 1 + Filter: + + + 0 + 3 + + + + + True + False + + + True + + + + + 1 + 3 + + + + + True + False + 0 + + + + + True + False + center + center + True + expand + + + Print + True + True + True + + + + True + True + 1 + + + + + Preview + True + True + True + + + + True + True + 1 + + + + + False + True + 1 + + + + diff --git a/module/src/Makefile.am b/module/src/Makefile.am index 40e943d..c91cfba 100644 --- a/module/src/Makefile.am +++ b/module/src/Makefile.am @@ -12,6 +12,8 @@ libexample_la_LIBADD = $(top_builddir)/vn/libvn.la libexample_la_SOURCES = \ vn-consulter.h \ vn-consulter.c \ + vn-shelfs.h \ + vn-shelfs.c \ vn-customer.h \ vn-customer.c diff --git a/module/src/vn-allocator.c b/module/src/vn-allocator.c new file mode 100644 index 0000000..037b09d --- /dev/null +++ b/module/src/vn-allocator.c @@ -0,0 +1,165 @@ + +#include +#include + +typedef struct _VnAllocator VnAllocator; + +typedef void (*VnAllocatorShelfFunc) (VnAllocator * self, gpointer user_data); +typedef void (*VnAllocatorBoxFunc) (VnAllocator * self, gpointer user_data); + +typedef struct +{ + int height; + int width; + int max_height; + int tray_spacing; + int first_tray_y; + int tray_x; + int vspace; + int hspace; +} +Shelf; + +typedef struct +{ + char * name; + int box_height; + int box_width; + int amount; +} +Item; + +struct _VnAllocator +{ + Shelf shelf; + Item * items; + int nboxes; + int item; + int amount; + int current_shelf; + int current_tray; + int tray_height; + int tray_width; + int tray_y; + int tray_x; + int column_width; + int ntrays; + int first_shelf_box; + int first_tray_box; + + VnAllocatorShelfFunc shelf_func; + VnAllocatorBoxFunc box_func; + gpointer user_data; +}; + +VnAllocator * +vn_allocator_new (const Shelf shelf, Item * items, + VnAllocatorShelfFunc shelf_func, VnAllocatorBoxFunc box_func, gpointer user_data) +{ + VnAllocator * self = g_new (VnAllocator, 1); + self->shelf = shelf; + self->items = items; + self->nboxes = 0; + self->item = 0; + self->amount = 0; + self->current_shelf = -1; + self->current_tray = -1; + self->column_width = 0; + self->ntrays = ceil ( + (double) (self->shelf.height - self->shelf.first_tray_y) / + (self->shelf.tray_spacing + self->shelf.tray_x) + ); + + self->shelf_func = shelf_func; + self->box_func = box_func; + self->user_data = user_data; + return self; +} + +gboolean +vn_allocator_step (VnAllocator * self) +{ + Shelf shelf = self->shelf; + + // Adding a new shelf + + self->current_shelf++; + self->first_shelf_box = TRUE; + + self->current_tray = self->ntrays - 1; + self->tray_width = shelf.hspace / 2; + self->tray_height = shelf.first_tray_y + + (self->ntrays - 1) * shelf.tray_spacing + self->ntrays * shelf.tray_x; + self->tray_x = 0; + self->tray_y = 0; + self->first_tray_box = TRUE; + + if (self->shelf_func) + self->shelf_func (self, self->user_data); + + // Allocating boxes + + for (; self->items[self->item].name; self->item++) + { + Item i = self->items[self->item]; + + for (; self->amount < i.amount; self->amount++) + { + if (self->first_shelf_box) + { + self->column_width = i.box_width; + } + else if ((self->current_tray < self->ntrays - 1 + && self->tray_y + i.box_height > shelf.tray_spacing - shelf.vspace) + || self->tray_height + self->tray_y + i.box_height > shelf.max_height - shelf.vspace + || i.box_width > self->column_width) + { + if (self->tray_x + self->column_width + i.box_width > shelf.width - shelf.hspace) + { + if (self->current_tray > 0) + { + self->tray_height -= shelf.tray_spacing + shelf.tray_x; + self->tray_x = 0; + self->current_tray--; + } + else + return TRUE; + } + else + self->tray_x += self->column_width; + + self->tray_y = 0; + self->first_tray_box = TRUE; + self->column_width = i.box_width; + } + + if (self->box_func) + self->box_func (self, self->user_data); + + self->first_shelf_box = FALSE; + self->first_tray_box = FALSE; + self->tray_y += i.box_height; + self->nboxes++; + } + + self->amount = 0; + } + + return FALSE; +} + +void +vn_allocator_run (VnAllocator * self) +{ + gboolean more_items = TRUE; + + while (more_items) + more_items = vn_allocator_step (self); +} + +void +vn_allocator_free (VnAllocator * self) +{ + g_free (self); +} + diff --git a/module/src/vn-shelfs.c b/module/src/vn-shelfs.c new file mode 100644 index 0000000..749d5eb --- /dev/null +++ b/module/src/vn-shelfs.c @@ -0,0 +1,427 @@ +/* + * Copyright (C) 2012 - Juan Ferrer Toribio + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "vn-shelfs.h" + +#include "vn-allocator.c" + +#define $(self, id) (vn_form_get (VN_FORM (self), id)) + +G_DEFINE_TYPE (VnShelfs, vn_shelfs, VN_TYPE_FORM); + +//+++++++++++++++++++++++++++++++++++++++++++++++++++ Private + +#define LINE_WIDTH 10 +#define WIDGET_MARGIN 0 +#define PAGE_MARGIN 40 +#define HEADER_HEIGHT 80 +#define TITLE_SIZE 40 +#define BOX_TEXT_SIZE 35 +#define BOX_MARGIN 6 + +static GdkRGBA colors[] = { + {0.96, 0.86, 0.86, 1} // Red + ,{0.86, 0.96, 0.86, 1} // Green + ,{0.86, 0.86, 0.96, 1} // Blue + ,{0.96, 0.96, 0.76, 1} // Yellow +}; + +static Shelf shelf = { + 1700 // Height + ,1250 // Width + ,2000 // Max. height + ,620 // Tray spacing + ,150 // First tray height + ,15 // Tray X + ,50 // V. space + ,50 // H. space +}; + +//-------------------------- Drawing methods + +void vn_shelfs_draw_box (VnAllocator * allocator, VnShelfs * self) +{ + cairo_t * cr = self->cr; + Item i = allocator->items[allocator->item]; + + int x = self->shelf_x + allocator->tray_width + allocator->tray_x; + int y = self->shelf_y - (allocator->tray_height + allocator->tray_y); + + cairo_rectangle (cr, x, y, i.box_width, -i.box_height); + + cairo_save (cr); + gint n_color = allocator->item % G_N_ELEMENTS (colors); + gdk_cairo_set_source_rgba (cr, &colors[n_color]); + cairo_fill_preserve (cr); + cairo_restore (cr); + + cairo_stroke (cr); + + if (allocator->amount == 0 || allocator->first_shelf_box) + { + PangoRectangle extents; + + PangoFontDescription * font = pango_font_description_new (); + pango_font_description_set_family (font, "Sans"); + pango_font_description_set_absolute_size (font, BOX_TEXT_SIZE * PANGO_SCALE); + + PangoLayout * layout = pango_cairo_create_layout (cr); + pango_layout_set_font_description (layout, font); + pango_layout_set_width (layout, (i.box_width - BOX_MARGIN * 2) * PANGO_SCALE); + pango_layout_set_height (layout, (i.box_height - BOX_MARGIN * 2) * PANGO_SCALE); + pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_START); + pango_layout_set_text (layout, i.name, -1); + pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER); + pango_layout_get_extents (layout, NULL, &extents); + + cairo_move_to (cr + ,x + BOX_MARGIN + ,y - BOX_MARGIN - i.box_height / 2 - (extents.height / PANGO_SCALE) / 2 + ); + pango_cairo_show_layout (cr, layout); + + g_object_unref (layout); + pango_font_description_free (font); + } + + cairo_stroke (cr); +} + +void +vn_shelfs_draw_shelf (VnAllocator * allocator, VnShelfs * self) +{ + int y; + cairo_t * cr = self->cr; + + // Drawing page + + int page_x = 0; + int page_y = 0; + + cairo_save (cr); + cairo_scale (cr, self->scale / self->shelf_scale, self->scale / self->shelf_scale); +/* + page_x = width / self->scale / 2 - self->page_width / 2; + page_y = (self->widget_margin + self->page_height) * current_shelf + self->widget_margin; + + cairo_rectangle (cr, page_x, page_y, self->page_width, self->page_height); + cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); + cairo_fill (cr); + + cairo_rectangle (cr, page_x, page_y, self->page_width, self->page_height); + cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); + cairo_set_line_width (cr, 0.1); +*/ + // Drawing the title + + cairo_text_extents_t extents; + + const gchar * title = gvn_param_get_string ($(self, "title")); + + cairo_set_font_size (cr, TITLE_SIZE); + cairo_text_extents (cr, title, &extents); + y = page_y + PAGE_MARGIN + extents.height; + + cairo_move_to (cr, page_x + PAGE_MARGIN, y); + cairo_show_text (cr, title); + + char * shelf_number = g_strdup_printf ("%d", allocator->current_shelf + 1); + cairo_text_extents (cr, shelf_number, &extents); + cairo_move_to (cr, page_x + self->page_width - PAGE_MARGIN - extents.width, y); + cairo_show_text (cr, shelf_number); + g_free (shelf_number); + + cairo_restore (cr); + + // Calculating the shelf bottom left coordinates + + Shelf shelf = allocator->shelf; + + int shelf_x = page_x + self->page_width / 2; + int shelf_y = page_y + PAGE_MARGIN + HEADER_HEIGHT + + (self->page_height - PAGE_MARGIN * 2 - HEADER_HEIGHT) / 2; + + shelf_x = shelf_x / self->shelf_scale * self->scale; + shelf_y = shelf_y / self->shelf_scale * self->scale; + + shelf_x -= shelf.width / 2; + shelf_y += shelf.max_height / 2; + + // Drawing the shelf + + cairo_move_to (cr, shelf_x, shelf_y); + cairo_line_to (cr, shelf_x, shelf_y - shelf.height); + + cairo_move_to (cr, shelf_x + shelf.width, shelf_y); + cairo_line_to (cr, shelf_x + shelf.width, shelf_y - shelf.height); + + // Drawing trays + + int last_tray_y = shelf.first_tray_y; + + if (shelf.tray_spacing > 0) + while (last_tray_y + shelf.tray_x < shelf.height) + { + y = shelf_y - last_tray_y; + + cairo_move_to (cr, shelf_x, y); + cairo_line_to (cr, shelf_x + shelf.width, y); + + cairo_move_to (cr, shelf_x, y - shelf.tray_x); + cairo_line_to (cr, shelf_x + shelf.width, y - shelf.tray_x); + + last_tray_y += shelf.tray_spacing + shelf.tray_x; + } + + self->page_x = page_x; + self->page_y = page_y; + self->shelf_x = shelf_x; + self->shelf_y = shelf_y; + + cairo_stroke (cr); +} + +void +vn_shelfs_on_begin_print (GtkPrintOperation * op, GtkPrintContext * context, VnShelfs * self) +{ + // XXX + + gint i; + DbIterator * iter = $(self, "items"); + gint nitems = db_iterator_get_nrows (iter); + + if (!db_iterator_is_ready (iter) || nitems == 0) + { + gtk_print_operation_cancel (op); + return; + } + + Item * items = g_new (Item, nitems + 1); + db_iterator_move_iter (iter, NULL); + + for (i = 0; db_iterator_move_next (iter); i++) + { +// int id = gvn_value_get_int (db_iterator_get_value (iter, "Id_Article")); + const gchar * name = gvn_value_get_string (db_iterator_get_value (iter, "Article")); + int size = gvn_value_get_int (db_iterator_get_value (iter, "Medida")); + int width = (int) gvn_value_get_double (db_iterator_get_value (iter, "x")); + int height = (int) gvn_value_get_double (db_iterator_get_value (iter, "z")); + int amount = (int) gvn_value_get_double (db_iterator_get_value (iter, "etiquetas")); + + items[i].name = g_strdup_printf ("%s x%d", name, size); + items[i].box_width = width * 10; + items[i].box_height = height * 10; + items[i].amount = amount; + } + + items[nitems].name = NULL; + + // End + + VnAllocator * allocator = vn_allocator_new (shelf, items + ,(VnAllocatorShelfFunc) vn_shelfs_draw_shelf + ,(VnAllocatorBoxFunc) vn_shelfs_draw_box + ,self + ); + + int width = gtk_print_context_get_width (context); + int height = gtk_print_context_get_height (context); + + self->page_width = gtk_print_context_get_width (context) /* 210 */; + self->page_height = gtk_print_context_get_height (context) /* 297 */; + + self->scale = 0.0; + self->shelf_scale = 0.0; + + // Calculating the page scale + + { + int w = width - WIDGET_MARGIN * 2; + int h = height - WIDGET_MARGIN * 2; + + if (h <= 0 || w <= 0) + return; + + self->scale = (double) h / self->page_height; + + if (self->page_width * self->scale > w) + self->scale = (double) w / self->page_width; + + if (self->scale == 0.0) + return; + + self->widget_margin = WIDGET_MARGIN / self->scale; + } + + // Calculating the shelf scale + + { + int w = self->page_width - PAGE_MARGIN * 2 - HEADER_HEIGHT; + int h = self->page_height - PAGE_MARGIN * 2; + + if (h <= 0.0 || w <= 0.0) + return; + + self->shelf_scale = (double) h / allocator->shelf.max_height; + + if (allocator->shelf.width * self->shelf_scale > w) + self->shelf_scale = (double) w / allocator->shelf.width; + + if (self->shelf_scale == 0.0) + return; + + self->shelf_scale = self->shelf_scale * self->scale; + } + + // Generating the pages + + gboolean more_items = TRUE; + self->pages = NULL; + + while (more_items) + { + cairo_surface_t * surface = cairo_surface_create_similar ( + cairo_get_target (gtk_print_context_get_cairo_context (context)), + CAIRO_CONTENT_COLOR_ALPHA, + width, + height + ); + + cairo_t * cr = self->cr = cairo_create (surface); + cairo_select_font_face (cr, "Sans" + ,CAIRO_FONT_SLANT_NORMAL + ,CAIRO_FONT_WEIGHT_NORMAL + ); +/* + GdkRGBA color; + gtk_style_context_get_color (gtk_widget_get_style_context (GTK_WIDGET (self->window)), 0, &color); + gdk_cairo_set_source_rgba (cr, &color); +*/ + cairo_scale (cr, self->shelf_scale, self->shelf_scale); + cairo_set_line_width (cr, LINE_WIDTH); + + // Getting the number of pages + + more_items = vn_allocator_step (allocator); + self->pages = g_list_append (self->pages, surface); + cairo_destroy (cr); + } + + gtk_print_operation_set_n_pages (op, allocator->current_shelf + 1); + vn_allocator_free (allocator); +} + +void +vn_shelfs_on_end_print (GtkPrintOperation * op, GtkPrintContext * context, VnShelfs * self) +{ + g_list_free_full (self->pages, (GDestroyNotify) cairo_surface_destroy); + g_message ("Print operation ended!"); +} + +void +vn_shelfs_on_draw_page (GtkPrintOperation * op, GtkPrintContext * context, gint page_num, VnShelfs * self) +{ + cairo_t * cr = gtk_print_context_get_cairo_context (context); + cairo_surface_t * surface = g_list_nth_data (self->pages, page_num); + cairo_set_source_surface (cr, surface, 0, 0); + cairo_paint (cr); +} + +void +vn_shelfs_print (VnShelfs * self, GtkPrintOperationAction action) +{ + GtkPrintOperation * op = gtk_print_operation_new (); + + if (self->print_settings) + gtk_print_operation_set_print_settings (op, self->print_settings); + + gtk_print_operation_set_job_name (op, _("Shelfs")); + gtk_print_operation_set_embed_page_setup (op, TRUE); + g_object_connect (op + ,"signal::begin-print", vn_shelfs_on_begin_print, self + ,"signal::end-print", vn_shelfs_on_end_print, self + ,"signal::draw-page", vn_shelfs_on_draw_page, self + ,NULL + ); + + GError * err = NULL; + GtkWindow * parent = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))); + GtkPrintOperationResult result = gtk_print_operation_run (op, action, parent, &err); + + if (result == GTK_PRINT_OPERATION_RESULT_APPLY) + { + self->print_settings = g_object_ref (gtk_print_operation_get_print_settings (op)); + } + else if (result == GTK_PRINT_OPERATION_RESULT_ERROR && err) + { + g_warning (err->message); + g_error_free (err); + } +} + +void +vn_shelfs_preview_clicked (GtkButton * button, VnShelfs * self) +{ + vn_shelfs_print (self, GTK_PRINT_OPERATION_ACTION_PREVIEW); +} + +void +vn_shelfs_print_clicked (GtkButton * button, VnShelfs * self) +{ + vn_shelfs_print (self, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG); +} + +//-------------------------- Form + +void vn_shelfs_on_items_ready (DbIterator * iter, gboolean ready, VnShelfs * self) +{ + if (!ready) + return; + + g_message ("Ready!"); +} + +static void vn_shelfs_open (VnShelfs * self, gpointer user_data) +{ + self->print_settings = NULL; + + gvn_param_set_string ($(self, "title"), "Anthuriums"); + gvn_param_set_string ($(self, "filter"), "a.Article LIKE \\'Ant %\\'"); + gvn_param_set_int ($(self, "wh"), 1); + + GValue date = G_VALUE_INIT; + g_value_init (&date, G_TYPE_DATE_TIME); + g_value_take_boxed (&date, g_date_time_new_now_local ()); + gvn_param_set_value ($(self, "date"), &date); + g_value_unset (&date); +} + +//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class + +static void vn_shelfs_init (VnShelfs * self) {} + +static void vn_shelfs_finalize (VnShelfs * self) +{ + g_clear_object (&self->print_settings); + G_OBJECT_CLASS (vn_shelfs_parent_class)->finalize (G_OBJECT (self)); +} + +static void vn_shelfs_class_init (VnShelfsClass * k) +{ + G_OBJECT_CLASS (k)->finalize = (GObjectFinalizeFunc) vn_shelfs_finalize; + VN_FORM_CLASS (k)->open = (VnFormOpenFunc) vn_shelfs_open; +} diff --git a/module/src/vn-shelfs.h b/module/src/vn-shelfs.h new file mode 100644 index 0000000..75a024e --- /dev/null +++ b/module/src/vn-shelfs.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2012 - Juan Ferrer Toribio + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef VN_SHELFS_H +#define VN_SHELFS_H + +#include + +#define VN_TYPE_SHELFS (vn_shelfs_get_type ()) +#define VN_SHELFS(self) (G_TYPE_CHECK_INSTANCE_CAST (self, VN_TYPE_SHELFS, VnShelfs)) +#define VN_IS_ALLOCATOR(self) (G_TYPE_CHECK_INSTANCE_TYPE (self, VN_TYPE_SHELFS)) + +typedef struct _VnShelfs VnShelfs; +typedef struct _VnShelfsClass VnShelfsClass; + +struct _VnShelfs +{ + VnForm parent; + GtkPrintSettings * print_settings; + + // Cairo + + cairo_t * cr; + GList * pages; + int page_width; + int page_height; + int widget_margin; + double scale; + double shelf_scale; + int page_x; + int page_y; + int shelf_x; + int shelf_y; + int draw_name; +}; + +struct _VnShelfsClass +{ + VnFormClass parent; +}; + +GType vn_shelfs_get_type (); + +#endif \ No newline at end of file diff --git a/vn/vn-login.c b/vn/vn-login.c index 7480aca..704dbb7 100644 --- a/vn/vn-login.c +++ b/vn/vn-login.c @@ -165,11 +165,7 @@ static void vn_login_show (VnLogin * self) */ static void vn_login_set_loading (VnLogin * self, gboolean loading) { - gtk_widget_set_sensitive (GTK_WIDGET (self->connect), !loading); - gtk_widget_set_sensitive (GTK_WIDGET (self->settings_button), !loading); - gtk_widget_set_sensitive (GTK_WIDGET (self->user), !loading); - gtk_widget_set_sensitive (GTK_WIDGET (self->pass), !loading); - gtk_widget_set_sensitive (GTK_WIDGET (self->remember), !loading); + gtk_widget_set_sensitive (GTK_WIDGET (self->window), !loading); gtk_button_set_label (self->connect, NULL); gtk_container_remove (GTK_CONTAINER (self->connect),