derive GimpStatusbar from GtkStatusbar. Use the normal statusbar label for
2008-03-27 Sven Neumann <sven@gimp.org> * app/display/gimpstatusbar.[ch]: derive GimpStatusbar from GtkStatusbar. Use the normal statusbar label for statusbar messages and only show the progressbar when progress is active. * app/display/gimpdisplayshell.c (gimp_display_shell_new): removed spacing from the main vertical box. svn path=/trunk/; revision=25257
This commit is contained in:

committed by
Sven Neumann

parent
afc6fc11ed
commit
81c46c382b
@ -1,3 +1,12 @@
|
||||
2008-03-27 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* app/display/gimpstatusbar.[ch]: derive GimpStatusbar from
|
||||
GtkStatusbar. Use the normal statusbar label for statusbar
|
||||
messages and only show the progressbar when progress is active.
|
||||
|
||||
* app/display/gimpdisplayshell.c (gimp_display_shell_new): removed
|
||||
spacing from the main vertical box.
|
||||
|
||||
2008-03-27 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* plug-ins/common/dicom.c (dicom_loader): cosmetic changes.
|
||||
|
@ -865,7 +865,7 @@ gimp_display_shell_new (GimpDisplay *display,
|
||||
|
||||
/* the vbox containing all widgets */
|
||||
|
||||
main_vbox = gtk_vbox_new (FALSE, 1);
|
||||
main_vbox = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (shell), main_vbox);
|
||||
|
||||
#ifndef GDK_WINDOWING_QUARTZ
|
||||
|
@ -118,7 +118,7 @@ static gchar * gimp_statusbar_vprintf (const gchar *format,
|
||||
va_list args);
|
||||
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (GimpStatusbar, gimp_statusbar, GTK_TYPE_HBOX,
|
||||
G_DEFINE_TYPE_WITH_CODE (GimpStatusbar, gimp_statusbar, GTK_TYPE_STATUSBAR,
|
||||
G_IMPLEMENT_INTERFACE (GIMP_TYPE_PROGRESS,
|
||||
gimp_statusbar_progress_iface_init))
|
||||
|
||||
@ -155,7 +155,7 @@ gimp_statusbar_progress_iface_init (GimpProgressInterface *iface)
|
||||
static void
|
||||
gimp_statusbar_init (GimpStatusbar *statusbar)
|
||||
{
|
||||
GtkBox *box = GTK_BOX (statusbar);
|
||||
GtkWidget *hbox;
|
||||
GimpUnitStore *store;
|
||||
|
||||
statusbar->shell = NULL;
|
||||
@ -173,18 +173,17 @@ gimp_statusbar_init (GimpStatusbar *statusbar)
|
||||
statusbar->progress_active = FALSE;
|
||||
statusbar->progress_shown = FALSE;
|
||||
|
||||
box->spacing = 2;
|
||||
box->homogeneous = FALSE;
|
||||
/* remove the label and insert a hbox */
|
||||
gtk_container_remove (GTK_CONTAINER (GTK_STATUSBAR (statusbar)->frame),
|
||||
g_object_ref (GTK_STATUSBAR (statusbar)->label));
|
||||
|
||||
statusbar->cursor_frame = gtk_hbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (box, statusbar->cursor_frame, FALSE, FALSE, 0);
|
||||
gtk_box_reorder_child (box, statusbar->cursor_frame, 0);
|
||||
gtk_widget_show (statusbar->cursor_frame);
|
||||
hbox = gtk_hbox_new (FALSE, 1);
|
||||
gtk_container_add (GTK_CONTAINER (GTK_STATUSBAR (statusbar)->frame), hbox);
|
||||
gtk_widget_show (hbox);
|
||||
|
||||
statusbar->cursor_label = gtk_label_new ("0, 0");
|
||||
gtk_misc_set_alignment (GTK_MISC (statusbar->cursor_label), 0.5, 0.5);
|
||||
gtk_container_add (GTK_CONTAINER (statusbar->cursor_frame),
|
||||
statusbar->cursor_label);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), statusbar->cursor_label, FALSE, FALSE, 0);
|
||||
gtk_widget_show (statusbar->cursor_label);
|
||||
|
||||
store = gimp_unit_store_new (2);
|
||||
@ -193,8 +192,7 @@ gimp_statusbar_init (GimpStatusbar *statusbar)
|
||||
|
||||
GTK_WIDGET_UNSET_FLAGS (statusbar->unit_combo, GTK_CAN_FOCUS);
|
||||
g_object_set (statusbar->unit_combo, "focus-on-click", FALSE, NULL);
|
||||
gtk_container_add (GTK_CONTAINER (statusbar->cursor_frame),
|
||||
statusbar->unit_combo);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), statusbar->unit_combo, FALSE, FALSE, 0);
|
||||
gtk_widget_show (statusbar->unit_combo);
|
||||
|
||||
g_signal_connect (statusbar->unit_combo, "changed",
|
||||
@ -204,13 +202,18 @@ gimp_statusbar_init (GimpStatusbar *statusbar)
|
||||
statusbar->scale_combo = gimp_scale_combo_box_new ();
|
||||
GTK_WIDGET_UNSET_FLAGS (statusbar->scale_combo, GTK_CAN_FOCUS);
|
||||
g_object_set (statusbar->scale_combo, "focus-on-click", FALSE, NULL);
|
||||
gtk_box_pack_start (box, statusbar->scale_combo, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), statusbar->scale_combo, FALSE, FALSE, 0);
|
||||
gtk_widget_show (statusbar->scale_combo);
|
||||
|
||||
g_signal_connect (statusbar->scale_combo, "changed",
|
||||
G_CALLBACK (gimp_statusbar_scale_changed),
|
||||
statusbar);
|
||||
|
||||
/* put the label back into our hbox */
|
||||
gtk_box_pack_start (GTK_BOX (hbox),
|
||||
GTK_STATUSBAR (statusbar)->label, TRUE, TRUE, 0);
|
||||
g_object_unref (GTK_STATUSBAR (statusbar)->label);
|
||||
|
||||
statusbar->progressbar = gtk_progress_bar_new ();
|
||||
gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (statusbar->progressbar),
|
||||
PANGO_ELLIPSIZE_END);
|
||||
@ -218,8 +221,8 @@ gimp_statusbar_init (GimpStatusbar *statusbar)
|
||||
"text-xalign", 0.0,
|
||||
"text-yalign", 0.5,
|
||||
NULL);
|
||||
gtk_box_pack_start (box, statusbar->progressbar, TRUE, TRUE, 0);
|
||||
gtk_widget_show (statusbar->progressbar);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), statusbar->progressbar, TRUE, TRUE, 0);
|
||||
/* don't show the progress bar */
|
||||
|
||||
g_signal_connect_after (statusbar->progressbar, "style-set",
|
||||
G_CALLBACK (gimp_statusbar_progress_style_set),
|
||||
@ -230,8 +233,10 @@ gimp_statusbar_init (GimpStatusbar *statusbar)
|
||||
|
||||
statusbar->cancel_button = gtk_button_new_with_label (_("Cancel"));
|
||||
gtk_widget_set_sensitive (statusbar->cancel_button, FALSE);
|
||||
gtk_box_pack_start (box, statusbar->cancel_button, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox),
|
||||
statusbar->cancel_button, FALSE, FALSE, 0);
|
||||
GTK_WIDGET_UNSET_FLAGS (statusbar->cancel_button, GTK_CAN_FOCUS);
|
||||
/* don't show the cancel button */
|
||||
|
||||
g_signal_connect (statusbar->cancel_button, "clicked",
|
||||
G_CALLBACK (gimp_statusbar_progress_canceled),
|
||||
@ -281,9 +286,6 @@ gimp_statusbar_size_request (GtkWidget *widget,
|
||||
|
||||
/* also consider the children which can be invisible */
|
||||
|
||||
gtk_widget_size_request (statusbar->cursor_frame, &child_requisition);
|
||||
requisition->height = MAX (requisition->height, child_requisition.height);
|
||||
|
||||
gtk_widget_size_request (statusbar->unit_combo, &child_requisition);
|
||||
requisition->height = MAX (requisition->height, child_requisition.height);
|
||||
|
||||
@ -302,6 +304,9 @@ gimp_statusbar_progress_start (GimpProgress *progress,
|
||||
{
|
||||
GtkWidget *bar = statusbar->progressbar;
|
||||
|
||||
statusbar->progress_active = TRUE;
|
||||
statusbar->progress_value = 0.0;
|
||||
|
||||
gimp_statusbar_push (statusbar, "progress", "%s", message);
|
||||
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (bar), 0.0);
|
||||
gtk_widget_set_sensitive (statusbar->cancel_button, cancelable);
|
||||
@ -309,8 +314,13 @@ gimp_statusbar_progress_start (GimpProgress *progress,
|
||||
if (cancelable)
|
||||
gtk_widget_show (statusbar->cancel_button);
|
||||
|
||||
statusbar->progress_active = TRUE;
|
||||
statusbar->progress_value = 0.0;
|
||||
gtk_widget_show (statusbar->progressbar);
|
||||
gtk_widget_hide (GTK_STATUSBAR (statusbar)->label);
|
||||
|
||||
/* This call is needed so that the progress bar is drawn in the
|
||||
* correct place. Probably due a bug in GTK+.
|
||||
*/
|
||||
gtk_container_resize_children (GTK_CONTAINER (GTK_STATUSBAR (statusbar)->frame));
|
||||
|
||||
if (! GTK_WIDGET_VISIBLE (statusbar))
|
||||
{
|
||||
@ -345,7 +355,11 @@ gimp_statusbar_progress_end (GimpProgress *progress)
|
||||
statusbar->progress_active = FALSE;
|
||||
statusbar->progress_value = 0.0;
|
||||
|
||||
gtk_widget_hide (bar);
|
||||
gtk_widget_show (GTK_STATUSBAR (statusbar)->label);
|
||||
|
||||
gimp_statusbar_pop (statusbar, "progress");
|
||||
|
||||
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (bar), 0.0);
|
||||
gtk_widget_set_sensitive (statusbar->cancel_button, FALSE);
|
||||
gtk_widget_hide (statusbar->cancel_button);
|
||||
@ -459,6 +473,16 @@ gimp_statusbar_progress_canceled (GtkWidget *button,
|
||||
gimp_progress_cancel (GIMP_PROGRESS (statusbar));
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_statusbar_set_text (GimpStatusbar *statusbar,
|
||||
const gchar *text)
|
||||
{
|
||||
if (statusbar->progress_active)
|
||||
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (statusbar->progressbar), text);
|
||||
else
|
||||
gtk_label_set_text (GTK_LABEL (GTK_STATUSBAR (statusbar)->label), text);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_statusbar_update (GimpStatusbar *statusbar)
|
||||
{
|
||||
@ -484,14 +508,13 @@ gimp_statusbar_update (GimpStatusbar *statusbar)
|
||||
if (text && statusbar->temp_timeout_id)
|
||||
{
|
||||
gchar *temp = g_strconcat (statusbar->temp_spaces, text, NULL);
|
||||
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (statusbar->progressbar),
|
||||
temp);
|
||||
|
||||
gimp_statusbar_set_text (statusbar, temp);
|
||||
g_free (temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (statusbar->progressbar),
|
||||
text ? text : "");
|
||||
gimp_statusbar_set_text (statusbar, text ? text : "");
|
||||
}
|
||||
}
|
||||
|
||||
@ -564,7 +587,7 @@ gimp_statusbar_empty (GimpStatusbar *statusbar)
|
||||
{
|
||||
g_return_if_fail (GIMP_IS_STATUSBAR (statusbar));
|
||||
|
||||
gtk_widget_hide (statusbar->cursor_frame);
|
||||
gtk_widget_hide (statusbar->cursor_label);
|
||||
gtk_widget_hide (statusbar->unit_combo);
|
||||
gtk_widget_hide (statusbar->scale_combo);
|
||||
}
|
||||
@ -574,7 +597,7 @@ gimp_statusbar_fill (GimpStatusbar *statusbar)
|
||||
{
|
||||
g_return_if_fail (GIMP_IS_STATUSBAR (statusbar));
|
||||
|
||||
gtk_widget_show (statusbar->cursor_frame);
|
||||
gtk_widget_show (statusbar->cursor_label);
|
||||
gtk_widget_show (statusbar->unit_combo);
|
||||
gtk_widget_show (statusbar->scale_combo);
|
||||
}
|
||||
@ -1122,6 +1145,7 @@ gimp_statusbar_shell_scaled (GimpDisplayShell *shell,
|
||||
static PangoLayout *layout = NULL;
|
||||
|
||||
GimpImage *image = shell->display->image;
|
||||
GtkWidget *parent;
|
||||
GtkTreeModel *model;
|
||||
const gchar *text;
|
||||
gint image_width;
|
||||
@ -1199,14 +1223,15 @@ gimp_statusbar_shell_scaled (GimpDisplayShell *shell,
|
||||
/* find out how many pixels the label's parent frame is bigger than
|
||||
* the label itself
|
||||
*/
|
||||
diff = (statusbar->cursor_frame->allocation.width -
|
||||
parent = gtk_widget_get_parent (statusbar->cursor_label);
|
||||
diff = (parent->allocation.width -
|
||||
statusbar->cursor_label->allocation.width);
|
||||
|
||||
gtk_widget_set_size_request (statusbar->cursor_label, width, -1);
|
||||
|
||||
/* don't resize if this is a new display */
|
||||
if (diff)
|
||||
gtk_widget_set_size_request (statusbar->cursor_frame, width + diff, -1);
|
||||
gtk_widget_set_size_request (parent, width + diff, -1);
|
||||
|
||||
gimp_statusbar_clear_cursor (statusbar);
|
||||
}
|
||||
|
@ -19,7 +19,7 @@
|
||||
#ifndef __GIMP_STATUSBAR_H__
|
||||
#define __GIMP_STATUSBAR_H__
|
||||
|
||||
#include <gtk/gtkhbox.h>
|
||||
#include <gtk/gtkstatusbar.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
@ -38,7 +38,7 @@ typedef struct _GimpStatusbarClass GimpStatusbarClass;
|
||||
|
||||
struct _GimpStatusbar
|
||||
{
|
||||
GtkHBox parent_instance;
|
||||
GtkStatusbar parent_instance;
|
||||
|
||||
GimpDisplayShell *shell;
|
||||
|
||||
@ -53,7 +53,6 @@ struct _GimpStatusbar
|
||||
gchar cursor_format_str[CURSOR_FORMAT_LENGTH];
|
||||
gchar length_format_str[CURSOR_FORMAT_LENGTH];
|
||||
|
||||
GtkWidget *cursor_frame;
|
||||
GtkWidget *cursor_label;
|
||||
GtkWidget *unit_combo;
|
||||
GtkWidget *scale_combo;
|
||||
@ -67,7 +66,7 @@ struct _GimpStatusbar
|
||||
|
||||
struct _GimpStatusbarClass
|
||||
{
|
||||
GtkHBoxClass parent_class;
|
||||
GtkStatusbarClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user