diff options
author | Havoc Pennington <hp@redhat.com> | 2000-07-25 22:58:17 +0000 |
---|---|---|
committer | Havoc Pennington <hp@src.gnome.org> | 2000-07-25 22:58:17 +0000 |
commit | f56297c5346cddb72b383161bbde9168824acb94 (patch) | |
tree | acf176b40ef8c399ed120d3c01687f2a3a3252f9 /gtk/gtkprogressbar.c | |
parent | d1a4a1ea28f0a3b87332874c68eccbe2d6272ea9 (diff) | |
download | gtk+-f56297c5346cddb72b383161bbde9168824acb94.tar.gz |
Implement new sane, 5-function API for using GtkProgressBar. See
2000-07-25 Havoc Pennington <hp@redhat.com>
* gtk/gtkprogressbar.h: Implement new sane, 5-function API for
using GtkProgressBar. See Changes-2.0.txt for details.
* gtk/gtkprogressbar.c: Add object arguments "fraction" and
"pulse_step" which are the equivalent of
gtk_progress_bar_set_pulse_step and gtk_progress_bar_set_fraction.
Implement new API.
* gtk/gtkprogress.h (struct _GtkProgress): Add a field
(use_text_format) to mark whether text set on the progress bar is
a format string. Deprecate entire GtkProgress interface.
* gtk/gtkprogress.c (gtk_progress_init): init use_text_format to TRUE
(gtk_progress_build_string): make this a no-op if use_text_format
is FALSE
* docs/Changes-2.0.txt: Describe progress bar changes.
Diffstat (limited to 'gtk/gtkprogressbar.c')
-rw-r--r-- | gtk/gtkprogressbar.c | 106 |
1 files changed, 99 insertions, 7 deletions
diff --git a/gtk/gtkprogressbar.c b/gtk/gtkprogressbar.c index e1db4c6b93..562fd3d3a2 100644 --- a/gtk/gtkprogressbar.c +++ b/gtk/gtkprogressbar.c @@ -52,7 +52,9 @@ enum { ARG_BAR_STYLE, ARG_ACTIVITY_STEP, ARG_ACTIVITY_BLOCKS, - ARG_DISCRETE_BLOCKS + ARG_DISCRETE_BLOCKS, + ARG_FRACTION, + ARG_PULSE_STEP }; static void gtk_progress_bar_class_init (GtkProgressBarClass *klass); @@ -130,7 +132,15 @@ gtk_progress_bar_class_init (GtkProgressBarClass *class) GTK_TYPE_UINT, GTK_ARG_READWRITE, ARG_DISCRETE_BLOCKS); - + gtk_object_add_arg_type ("GtkProgressBar::fraction", + GTK_TYPE_FLOAT, + GTK_ARG_READWRITE, + ARG_FRACTION); + gtk_object_add_arg_type ("GtkProgressBar::pulse_step", + GTK_TYPE_FLOAT, + GTK_ARG_READWRITE, + ARG_FRACTION); + object_class->set_arg = gtk_progress_bar_set_arg; object_class->get_arg = gtk_progress_bar_get_arg; @@ -148,6 +158,7 @@ gtk_progress_bar_init (GtkProgressBar *pbar) pbar->blocks = 10; pbar->in_block = -1; pbar->orientation = GTK_PROGRESS_LEFT_TO_RIGHT; + pbar->pulse_fraction = 0.1; pbar->activity_pos = 0; pbar->activity_dir = 1; pbar->activity_step = 3; @@ -183,6 +194,12 @@ gtk_progress_bar_set_arg (GtkObject *object, case ARG_DISCRETE_BLOCKS: gtk_progress_bar_set_discrete_blocks (pbar, GTK_VALUE_UINT (*arg)); break; + case ARG_FRACTION: + gtk_progress_bar_set_fraction (pbar, GTK_VALUE_FLOAT (*arg)); + break; + case ARG_PULSE_STEP: + gtk_progress_bar_set_pulse_step (pbar, GTK_VALUE_FLOAT (*arg)); + break; default: break; } @@ -217,6 +234,12 @@ gtk_progress_bar_get_arg (GtkObject *object, case ARG_DISCRETE_BLOCKS: GTK_VALUE_UINT (*arg) = pbar->blocks; break; + case ARG_FRACTION: + GTK_VALUE_FLOAT (*arg) = gtk_progress_get_current_percentage (GTK_PROGRESS (pbar)); + break; + case ARG_PULSE_STEP: + GTK_VALUE_FLOAT (*arg) = pbar->pulse_fraction; + break; default: arg->type = GTK_TYPE_INVALID; break; @@ -266,12 +289,16 @@ gtk_progress_bar_real_update (GtkProgress *progress) if (GTK_PROGRESS (pbar)->activity_mode) { guint size; - + /* advance the block */ if (pbar->orientation == GTK_PROGRESS_LEFT_TO_RIGHT || pbar->orientation == GTK_PROGRESS_RIGHT_TO_LEFT) { + /* Update our activity step. */ + + pbar->activity_step = widget->allocation.width * pbar->pulse_fraction; + size = MAX (2, widget->allocation.width / pbar->activity_blocks); if (pbar->activity_dir == 0) @@ -298,6 +325,10 @@ gtk_progress_bar_real_update (GtkProgress *progress) } else { + /* Update our activity step. */ + + pbar->activity_step = widget->allocation.height * pbar->pulse_fraction; + size = MAX (2, widget->allocation.height / pbar->activity_blocks); if (pbar->activity_dir == 0) @@ -747,16 +778,77 @@ gtk_progress_bar_paint (GtkProgress *progress) /*******************************************************************/ void +gtk_progress_bar_set_fraction (GtkProgressBar *pbar, + gfloat fraction) +{ + g_return_if_fail (pbar != NULL); + g_return_if_fail (GTK_IS_PROGRESS_BAR (pbar)); + + /* If we know the percentage, we don't want activity mode. */ + gtk_progress_set_activity_mode (GTK_PROGRESS (pbar), FALSE); + + /* We use the deprecated GtkProgress interface internally. + * Once everything's been deprecated for a good long time, + * we can clean up all this code. + */ + gtk_progress_set_percentage (GTK_PROGRESS (pbar), fraction); +} + +void +gtk_progress_bar_pulse (GtkProgressBar *pbar) +{ + g_return_if_fail (pbar != NULL); + g_return_if_fail (GTK_IS_PROGRESS_BAR (pbar)); + + /* If we don't know the percentage, we must want activity mode. */ + gtk_progress_set_activity_mode (GTK_PROGRESS (pbar), TRUE); + + /* Sigh. */ + gtk_progress_bar_real_update (GTK_PROGRESS (pbar)); +} + +void +gtk_progress_bar_set_text (GtkProgressBar *pbar, + const gchar *text) +{ + g_return_if_fail (pbar != NULL); + g_return_if_fail (GTK_IS_PROGRESS_BAR (pbar)); + + /* We don't support formats in this interface */ + GTK_PROGRESS (pbar)->use_text_format = FALSE; + + if (text && *text) + { + gtk_progress_set_show_text (GTK_PROGRESS (pbar), TRUE); + gtk_progress_set_format_string (GTK_PROGRESS (pbar), text); + } + else + { + gtk_progress_set_show_text (GTK_PROGRESS (pbar), FALSE); + gtk_progress_set_format_string (GTK_PROGRESS (pbar), ""); + } +} + +void +gtk_progress_bar_set_pulse_step (GtkProgressBar *pbar, + gfloat fraction) +{ + g_return_if_fail (pbar != NULL); + g_return_if_fail (GTK_IS_PROGRESS_BAR (pbar)); + + pbar->pulse_fraction = fraction; +} + +void gtk_progress_bar_update (GtkProgressBar *pbar, gfloat percentage) { g_return_if_fail (pbar != NULL); g_return_if_fail (GTK_IS_PROGRESS_BAR (pbar)); - /*********************************************************************** - * Use of gtk_progress_bar_update() is deprecated ! * - * Use gtk_progress_set_value or gtk_progress_set_percentage instead. * - ***********************************************************************/ + /* Use of gtk_progress_bar_update() is deprecated ! + * Use gtk_progress_bar_set_percentage () + */ gtk_progress_set_percentage (GTK_PROGRESS (pbar), percentage); } |