diff options
author | Mike Engber <engber@src.gnome.org> | 2000-06-28 00:43:02 +0000 |
---|---|---|
committer | Mike Engber <engber@src.gnome.org> | 2000-06-28 00:43:02 +0000 |
commit | 4f6956f9c0cc45b9c366d316d36a4c0dcb3efd2e (patch) | |
tree | 31d1c566771c994e635ace4b464a5e5786e77faa | |
parent | bcdb61d8ce12dfc3e5d91a9c2c5ee734d7b12449 (diff) | |
download | nautilus-4f6956f9c0cc45b9c366d316d36a4c0dcb3efd2e.tar.gz |
Added get_preferred_zoom_levels. Fixed zoom-control to use this info to
* libnautilus/nautilus-view-component.idl:
* libnautilus/nautilus-zoomable.c:
(nautilus_g_list_from_ZoomLevelList),
(nautilus_ZoomLevelList_from_zoom_levels),
(impl_Nautilus_Zoomable__get_is_continuous),
(impl_Nautilus_Zoomable__get_preferred_zoom_level_list),
(nautilus_zoomable_initialize_class), (nautilus_zoomable_set_arg),
(nautilus_zoomable_get_arg), (nautilus_zoomable_new),
(nautilus_zoomable_new_from_bonobo_control),
(nautilus_zoomable_destroy):
* libnautilus/nautilus-zoomable.h:
* src/file-manager/fm-directory-view.c:
(fm_directory_view_initialize):
* src/nautilus-view-frame.c:
(nautilus_view_frame_get_max_zoom_level),
(nautilus_view_frame_get_preferred_zoom_levels):
* src/nautilus-view-frame.h:
* src/nautilus-window.c:
(nautilus_window_zoom_level_changed_callback):
* src/nautilus-zoom-control.c: (nautilus_zoom_control_initialize),
(create_zoom_menu_item), (create_zoom_menu),
(nautilus_zoom_control_set_max_zoom_level),
(nautilus_zoom_control_set_preferred_zoom_levels):
* src/nautilus-zoom-control.h:
Added get_preferred_zoom_levels. Fixed zoom-control to
use this info to generate it's right click menu.
-rw-r--r-- | ChangeLog | 29 | ||||
-rw-r--r-- | libnautilus/nautilus-view-component.idl | 7 | ||||
-rw-r--r-- | libnautilus/nautilus-zoomable.c | 92 | ||||
-rw-r--r-- | libnautilus/nautilus-zoomable.h | 30 | ||||
-rw-r--r-- | src/file-manager/fm-directory-view.c | 19 | ||||
-rw-r--r-- | src/nautilus-navigation-window.c | 1 | ||||
-rw-r--r-- | src/nautilus-object-window.c | 1 | ||||
-rw-r--r-- | src/nautilus-spatial-window.c | 1 | ||||
-rw-r--r-- | src/nautilus-view-frame.c | 25 | ||||
-rw-r--r-- | src/nautilus-view-frame.h | 3 | ||||
-rw-r--r-- | src/nautilus-window.c | 1 | ||||
-rw-r--r-- | src/nautilus-zoom-control.c | 44 | ||||
-rw-r--r-- | src/nautilus-zoom-control.h | 4 |
13 files changed, 214 insertions, 43 deletions
@@ -1,3 +1,32 @@ +2000-06-27 Michael Engber <engber@eazel.com> + + * libnautilus/nautilus-view-component.idl: + * libnautilus/nautilus-zoomable.c: + (nautilus_g_list_from_ZoomLevelList), + (nautilus_ZoomLevelList_from_zoom_levels), + (impl_Nautilus_Zoomable__get_is_continuous), + (impl_Nautilus_Zoomable__get_preferred_zoom_level_list), + (nautilus_zoomable_initialize_class), (nautilus_zoomable_set_arg), + (nautilus_zoomable_get_arg), (nautilus_zoomable_new), + (nautilus_zoomable_new_from_bonobo_control), + (nautilus_zoomable_destroy): + * libnautilus/nautilus-zoomable.h: + * src/file-manager/fm-directory-view.c: + (fm_directory_view_initialize): + * src/nautilus-view-frame.c: + (nautilus_view_frame_get_max_zoom_level), + (nautilus_view_frame_get_preferred_zoom_levels): + * src/nautilus-view-frame.h: + * src/nautilus-window.c: + (nautilus_window_zoom_level_changed_callback): + * src/nautilus-zoom-control.c: (nautilus_zoom_control_initialize), + (create_zoom_menu_item), (create_zoom_menu), + (nautilus_zoom_control_set_max_zoom_level), + (nautilus_zoom_control_set_preferred_zoom_levels): + * src/nautilus-zoom-control.h: + Added get_preferred_zoom_levels. Fixed zoom-control to + use this info to generate it's right click menu. + 2000-06-27 Andy Hertzfeld <andy@eazel.com> * libnautilus-extensions/nautilus-icon-factory.c: diff --git a/libnautilus/nautilus-view-component.idl b/libnautilus/nautilus-view-component.idl index 111399e20..505681740 100644 --- a/libnautilus/nautilus-view-component.idl +++ b/libnautilus/nautilus-view-component.idl @@ -87,8 +87,8 @@ module Nautilus { oneway void set_title (in string new_title); }; - /* FIXME: Implement "preferred zoom levels" or delete. */ - typedef sequence<double> ZoomLevelList; + typedef double ZoomLevel; + typedef sequence<ZoomLevel> ZoomLevelList; /* The interface for something zoomable. Nautilus looks for * this interface on Bonobo controls that it uses as views. If @@ -104,8 +104,7 @@ module Nautilus { readonly attribute double min_zoom_level; readonly attribute double max_zoom_level; readonly attribute boolean is_continuous; - /* FIXME: Implement "preferred zoom levels" or delete. */ - /* readonly attribute ZoomLevelList preferred_zoom_levels; */ + readonly attribute ZoomLevelList preferred_zoom_levels; /* High level operations. * These can cause a change in the zoom level. diff --git a/libnautilus/nautilus-zoomable.c b/libnautilus/nautilus-zoomable.c index 9b997961f..1c756be20 100644 --- a/libnautilus/nautilus-zoomable.c +++ b/libnautilus/nautilus-zoomable.c @@ -38,10 +38,12 @@ NautilusZoomable *foo; struct NautilusZoomableDetails { BonoboControl *control; - gdouble zoom_level; - gdouble min_zoom_level; - gdouble max_zoom_level; + double zoom_level; + double min_zoom_level; + double max_zoom_level; gboolean is_continuous; + + Nautilus_ZoomLevelList *preferred_zoom_levels; Nautilus_ZoomableFrame zoomable_frame; }; @@ -60,6 +62,7 @@ enum { ARG_MIN_ZOOM_LEVEL, ARG_MAX_ZOOM_LEVEL, ARG_IS_CONTINUOUS, + ARG_PREFERRED_ZOOM_LEVELS, }; static guint signals[LAST_SIGNAL]; @@ -85,6 +88,9 @@ static CORBA_double impl_Nautilus_Zoomable__get_max_zoom_level (impl_POA_Nautil CORBA_Environment *ev); static CORBA_boolean impl_Nautilus_Zoomable__get_is_continuous (impl_POA_Nautilus_Zoomable *servant, CORBA_Environment *ev); +static Nautilus_ZoomLevelList* impl_Nautilus_Zoomable__get_preferred_zoom_level_list + (impl_POA_Nautilus_Zoomable *servant, + CORBA_Environment *ev); static void impl_Nautilus_Zoomable_zoom_in (impl_POA_Nautilus_Zoomable *servant, CORBA_Environment *ev); static void impl_Nautilus_Zoomable_zoom_out (impl_POA_Nautilus_Zoomable *servant, @@ -100,6 +106,7 @@ POA_Nautilus_Zoomable__epv libnautilus_Nautilus_Zoomable_epv = (gpointer) &impl_Nautilus_Zoomable__get_min_zoom_level, (gpointer) &impl_Nautilus_Zoomable__get_max_zoom_level, (gpointer) &impl_Nautilus_Zoomable__get_is_continuous, + (gpointer) &impl_Nautilus_Zoomable__get_preferred_zoom_level_list, (gpointer) &impl_Nautilus_Zoomable_zoom_in, (gpointer) &impl_Nautilus_Zoomable_zoom_out, (gpointer) &impl_Nautilus_Zoomable_zoom_to_fit @@ -113,6 +120,41 @@ static POA_Nautilus_Zoomable__vepv impl_Nautilus_Zoomable_vepv = &libnautilus_Nautilus_Zoomable_epv }; + +GList * +nautilus_g_list_from_ZoomLevelList (const Nautilus_ZoomLevelList *zoom_level_list) +{ + GList *list; + int i; + double* zoom_level_ptr; + + list = NULL; + for (i = 0; i < zoom_level_list->_length; ++i) { + zoom_level_ptr = g_new (double, 1); + *zoom_level_ptr = zoom_level_list->_buffer[i]; + list = g_list_prepend (list, zoom_level_ptr); + } + return g_list_reverse (list); +} + +static Nautilus_ZoomLevelList * +nautilus_ZoomLevelList_from_zoom_levels (const double *zoom_levels, int num_levels) +{ + int i; + Nautilus_ZoomLevelList *list; + + list = Nautilus_ZoomLevelList__alloc (); + list->_maximum = num_levels; + list->_length = num_levels; + list->_buffer = CORBA_sequence_Nautilus_ZoomLevel_allocbuf (num_levels); + for (i = 0; i < num_levels; ++i) { + list->_buffer[i] = zoom_levels[i]; + } + CORBA_sequence_set_release (list, TRUE); + + return list; +} + static CORBA_double impl_Nautilus_Zoomable__get_zoom_level (impl_POA_Nautilus_Zoomable *servant, CORBA_Environment *ev) @@ -144,11 +186,18 @@ impl_Nautilus_Zoomable__get_max_zoom_level (impl_POA_Nautilus_Zoomable *servant, static CORBA_boolean impl_Nautilus_Zoomable__get_is_continuous (impl_POA_Nautilus_Zoomable *servant, - CORBA_Environment *ev) + CORBA_Environment *ev) { return servant->gtk_object->details->is_continuous; } +static Nautilus_ZoomLevelList * +impl_Nautilus_Zoomable__get_preferred_zoom_level_list (impl_POA_Nautilus_Zoomable *servant, + CORBA_Environment *ev) +{ + return servant->gtk_object->details->preferred_zoom_levels; +} + static void impl_Nautilus_Zoomable_zoom_in (impl_POA_Nautilus_Zoomable *servant, CORBA_Environment *ev) @@ -303,6 +352,10 @@ nautilus_zoomable_initialize_class (NautilusZoomableClass *klass) GTK_TYPE_BOOL, GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT | GTK_ARG_CONSTRUCT_ONLY, ARG_IS_CONTINUOUS); + gtk_object_add_arg_type ("NautilusZoomable::preferred_zoom_levels", + GTK_TYPE_POINTER, + GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT | GTK_ARG_CONSTRUCT_ONLY, + ARG_PREFERRED_ZOOM_LEVELS); } static void @@ -329,6 +382,9 @@ nautilus_zoomable_set_arg (GtkObject *object, case ARG_IS_CONTINUOUS: zoomable->details->is_continuous = GTK_VALUE_BOOL (*arg); break; + case ARG_PREFERRED_ZOOM_LEVELS: + zoomable->details->preferred_zoom_levels = GTK_VALUE_POINTER (*arg); + break; } } @@ -354,6 +410,9 @@ nautilus_zoomable_get_arg (GtkObject *object, case ARG_IS_CONTINUOUS: GTK_VALUE_BOOL (*arg) = NAUTILUS_ZOOMABLE (object)->details->is_continuous; break; + case ARG_PREFERRED_ZOOM_LEVELS: + GTK_VALUE_POINTER (*arg) = NAUTILUS_ZOOMABLE (object)->details->preferred_zoom_levels; + break; } } @@ -372,22 +431,29 @@ nautilus_zoomable_initialize (NautilusZoomable *zoomable) NautilusZoomable * nautilus_zoomable_new (GtkWidget *widget, - gdouble min_zoom_level, - gdouble max_zoom_level, - gboolean is_continuous) + double min_zoom_level, + double max_zoom_level, + gboolean is_continuous, + double *preferred_zoom_levels, + int num_preferred_zoom_levels) + { return nautilus_zoomable_new_from_bonobo_control (bonobo_control_new (widget), min_zoom_level, - max_zoom_level, - is_continuous); + max_zoom_level, + is_continuous, + preferred_zoom_levels, + num_preferred_zoom_levels); } NautilusZoomable * nautilus_zoomable_new_from_bonobo_control (BonoboControl *bonobo_control, - gdouble min_zoom_level, - gdouble max_zoom_level, - gboolean is_continuous) + double min_zoom_level, + double max_zoom_level, + gboolean is_continuous, + double *preferred_zoom_levels, + int num_preferred_zoom_levels) { NautilusZoomable *zoomable; @@ -396,6 +462,7 @@ nautilus_zoomable_new_from_bonobo_control (BonoboControl *bonobo_control, "min_zoom_level", min_zoom_level, "max_zoom_level", max_zoom_level, "is_continuous", is_continuous, + "preferred_zoom_levels", nautilus_ZoomLevelList_from_zoom_levels (preferred_zoom_levels, num_preferred_zoom_levels), NULL)); return zoomable; @@ -404,6 +471,7 @@ nautilus_zoomable_new_from_bonobo_control (BonoboControl *bonobo_control, static void nautilus_zoomable_destroy (NautilusZoomable *view) { + CORBA_free (view->details->preferred_zoom_levels); g_free (view->details); NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, GTK_OBJECT (view)); diff --git a/libnautilus/nautilus-zoomable.h b/libnautilus/nautilus-zoomable.h index 1b17b1e6c..3028b3783 100644 --- a/libnautilus/nautilus-zoomable.h +++ b/libnautilus/nautilus-zoomable.h @@ -70,22 +70,28 @@ struct NautilusZoomable }; GtkType nautilus_zoomable_get_type (void); -NautilusZoomable *nautilus_zoomable_new (GtkWidget *widget, - gdouble min_zoom_level, - gdouble max_zoom_level, - gboolean is_continuous); -NautilusZoomable *nautilus_zoomable_new_from_bonobo_control (BonoboControl *bonobo_control, - gdouble min_zoom_level, - gdouble max_zoom_level, - gboolean is_continuous); -void nautilus_zoomable_set_parameters (NautilusZoomable *view, - double zoom_level, +NautilusZoomable *nautilus_zoomable_new (GtkWidget *widget, + double min_zoom_level, + double max_zoom_level, + gboolean is_continuous, + double *preferred_zoom_levels, + int num_preferred_zoom_levels); +NautilusZoomable *nautilus_zoomable_new_from_bonobo_control (BonoboControl *bonobo_control, double min_zoom_level, - double max_zoom_level); + double max_zoom_level, + gboolean is_continuous, + double *preferred_zoom_levels, + int num_preferred_zoom_levels); +void nautilus_zoomable_set_parameters (NautilusZoomable *view, + double zoom_level, + double min_zoom_level, + double max_zoom_level); void nautilus_zoomable_set_zoom_level (NautilusZoomable *view, - gdouble zoom_level); + double zoom_level); BonoboControl *nautilus_zoomable_get_bonobo_control (NautilusZoomable *view); +GList *nautilus_g_list_from_ZoomLevelList (const Nautilus_ZoomLevelList *zoom_level_list); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c index df9166e37..c03cca954 100644 --- a/src/file-manager/fm-directory-view.c +++ b/src/file-manager/fm-directory-view.c @@ -684,6 +684,16 @@ bonobo_control_activate_callback (BonoboObject *control, gboolean state, gpointe */ } +static double fm_directory_view_preferred_zoom_levels[] = { + (double) NAUTILUS_ICON_SIZE_SMALLEST / NAUTILUS_ICON_SIZE_STANDARD, + (double) NAUTILUS_ICON_SIZE_SMALLER / NAUTILUS_ICON_SIZE_STANDARD, + (double) NAUTILUS_ICON_SIZE_SMALL / NAUTILUS_ICON_SIZE_STANDARD, + (double) NAUTILUS_ICON_SIZE_STANDARD / NAUTILUS_ICON_SIZE_STANDARD, + (double) NAUTILUS_ICON_SIZE_LARGE / NAUTILUS_ICON_SIZE_STANDARD, + (double) NAUTILUS_ICON_SIZE_LARGER / NAUTILUS_ICON_SIZE_STANDARD, + (double) NAUTILUS_ICON_SIZE_LARGEST / NAUTILUS_ICON_SIZE_STANDARD, +}; + static void fm_directory_view_initialize (FMDirectoryView *directory_view) { @@ -697,8 +707,13 @@ fm_directory_view_initialize (FMDirectoryView *directory_view) directory_view->details->nautilus_view = nautilus_view_new (GTK_WIDGET (directory_view)); - directory_view->details->zoomable = nautilus_zoomable_new_from_bonobo_control - (get_bonobo_control (directory_view), .25, 4.0, FALSE); + directory_view->details->zoomable = nautilus_zoomable_new_from_bonobo_control ( + get_bonobo_control (directory_view), + .25, + 4.0, + FALSE, + fm_directory_view_preferred_zoom_levels, + sizeof (fm_directory_view_preferred_zoom_levels) / sizeof (*fm_directory_view_preferred_zoom_levels)); gtk_signal_connect (GTK_OBJECT (directory_view->details->nautilus_view), "stop_loading", diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c index 9a19f1f8c..993641f8a 100644 --- a/src/nautilus-navigation-window.c +++ b/src/nautilus-navigation-window.c @@ -1140,6 +1140,7 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view, if (!GTK_WIDGET_VISIBLE(window->zoom_control)) { nautilus_zoom_control_set_min_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_min_zoom_level (view)); nautilus_zoom_control_set_max_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_max_zoom_level (view)); + nautilus_zoom_control_set_preferred_zoom_levels (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_preferred_zoom_levels (view)); gtk_widget_show (window->zoom_control); } } diff --git a/src/nautilus-object-window.c b/src/nautilus-object-window.c index 9a19f1f8c..993641f8a 100644 --- a/src/nautilus-object-window.c +++ b/src/nautilus-object-window.c @@ -1140,6 +1140,7 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view, if (!GTK_WIDGET_VISIBLE(window->zoom_control)) { nautilus_zoom_control_set_min_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_min_zoom_level (view)); nautilus_zoom_control_set_max_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_max_zoom_level (view)); + nautilus_zoom_control_set_preferred_zoom_levels (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_preferred_zoom_levels (view)); gtk_widget_show (window->zoom_control); } } diff --git a/src/nautilus-spatial-window.c b/src/nautilus-spatial-window.c index 9a19f1f8c..993641f8a 100644 --- a/src/nautilus-spatial-window.c +++ b/src/nautilus-spatial-window.c @@ -1140,6 +1140,7 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view, if (!GTK_WIDGET_VISIBLE(window->zoom_control)) { nautilus_zoom_control_set_min_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_min_zoom_level (view)); nautilus_zoom_control_set_max_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_max_zoom_level (view)); + nautilus_zoom_control_set_preferred_zoom_levels (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_preferred_zoom_levels (view)); gtk_widget_show (window->zoom_control); } } diff --git a/src/nautilus-view-frame.c b/src/nautilus-view-frame.c index 8bd644e51..3aa9035c7 100644 --- a/src/nautilus-view-frame.c +++ b/src/nautilus-view-frame.c @@ -38,6 +38,7 @@ #include <gtk/gtk.h> #include <libnautilus-extensions/nautilus-undo-manager.h> #include <libnautilus/nautilus-view.h> +#include <libnautilus/nautilus-zoomable.h> enum { OPEN_LOCATION, @@ -506,6 +507,30 @@ nautilus_view_frame_get_max_zoom_level (NautilusViewFrame *view) return retval; } +GList * +nautilus_view_frame_get_preferred_zoom_levels (NautilusViewFrame *view) +{ + CORBA_Environment ev; + GList *retval; + Nautilus_ZoomLevelList *zoom_levels; + + g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0); + + CORBA_exception_init (&ev); + + if (!CORBA_Object_is_nil (view->zoomable, &ev)) { + zoom_levels = Nautilus_Zoomable__get_preferred_zoom_levels (view->zoomable, &ev); + retval = nautilus_g_list_from_ZoomLevelList (zoom_levels); + CORBA_free (zoom_levels); + } else { + retval = NULL; + } + + CORBA_exception_free (&ev); + + return retval; +} + void nautilus_view_frame_zoom_in (NautilusViewFrame *view) { diff --git a/src/nautilus-view-frame.h b/src/nautilus-view-frame.h index b331975ac..7263d7d79 100644 --- a/src/nautilus-view-frame.h +++ b/src/nautilus-view-frame.h @@ -131,6 +131,9 @@ void nautilus_view_frame_set_zoom_level (NautilusViewFrame * gdouble nautilus_view_frame_get_min_zoom_level (NautilusViewFrame *view); gdouble nautilus_view_frame_get_max_zoom_level (NautilusViewFrame *view); gboolean nautilus_view_frame_get_is_continuous (NautilusViewFrame *view); +GList * nautilus_view_frame_get_preferred_zoom_levels + (NautilusViewFrame *view); + void nautilus_view_frame_zoom_in (NautilusViewFrame *view); void nautilus_view_frame_zoom_out (NautilusViewFrame *view); void nautilus_view_frame_zoom_to_fit (NautilusViewFrame *view); diff --git a/src/nautilus-window.c b/src/nautilus-window.c index 9a19f1f8c..993641f8a 100644 --- a/src/nautilus-window.c +++ b/src/nautilus-window.c @@ -1140,6 +1140,7 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view, if (!GTK_WIDGET_VISIBLE(window->zoom_control)) { nautilus_zoom_control_set_min_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_min_zoom_level (view)); nautilus_zoom_control_set_max_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_max_zoom_level (view)); + nautilus_zoom_control_set_preferred_zoom_levels (NAUTILUS_ZOOM_CONTROL (window->zoom_control), nautilus_view_frame_get_preferred_zoom_levels (view)); gtk_widget_show (window->zoom_control); } } diff --git a/src/nautilus-zoom-control.c b/src/nautilus-zoom-control.c index cb320c8c9..02f7ec9c6 100644 --- a/src/nautilus-zoom-control.c +++ b/src/nautilus-zoom-control.c @@ -154,10 +154,14 @@ nautilus_zoom_control_initialize (NautilusZoomControl *zoom_control) char *file_name; GtkWidget *pix_widget; - zoom_control->zoom_level = 1.0; + zoom_control->zoom_level = 1.0; zoom_control->min_zoom_level = 0.0; zoom_control->max_zoom_level = 2.0; - + zoom_control->preferred_zoom_levels = NULL; + /* FIXME + * need to nautilus_g_list_free_deep(zoom_control->preferred_zoom_levels) on destructions + */ + /* allocate the pixmap that holds the image */ file_name = nautilus_pixmap_file ("zoom.png"); @@ -260,12 +264,18 @@ zoom_menu_callback (GtkMenuItem *item, gpointer callback_data) } static void -create_zoom_menu_item (GtkMenu *menu, GtkWidget *zoom_control, - const char *item_text, double zoom_level) +create_zoom_menu_item (GtkMenu *menu, GtkWidget *zoom_control, double zoom_level) { GtkWidget *menu_item; double *zoom_level_ptr; - + char *item_text; + + item_text = (char*) g_malloc(8); + /* FIXME + * need to make sure item_text is freed somewhere + */ + g_snprintf(item_text, 8, _("%.0f%%"), 100.0 * zoom_level); + menu_item = gtk_menu_item_new_with_label (item_text); zoom_level_ptr = g_new (double, 1); @@ -283,15 +293,17 @@ create_zoom_menu_item (GtkMenu *menu, GtkWidget *zoom_control, static GtkMenu* create_zoom_menu(GtkWidget *zoom_control) { - GtkMenu *menu = GTK_MENU (gtk_menu_new ()); + GList *p; + GtkMenu *menu; + + menu = GTK_MENU (gtk_menu_new ()); + + p = NAUTILUS_ZOOM_CONTROL (zoom_control)->preferred_zoom_levels; - create_zoom_menu_item(menu, zoom_control, _("25%"), (double) NAUTILUS_ICON_SIZE_SMALLEST / NAUTILUS_ICON_SIZE_STANDARD); - create_zoom_menu_item(menu, zoom_control, _("50%"), (double) NAUTILUS_ICON_SIZE_SMALLER / NAUTILUS_ICON_SIZE_STANDARD); - create_zoom_menu_item(menu, zoom_control, _("75%"), (double) NAUTILUS_ICON_SIZE_SMALL / NAUTILUS_ICON_SIZE_STANDARD); - create_zoom_menu_item(menu, zoom_control, _("100%"), (double) NAUTILUS_ICON_SIZE_STANDARD / NAUTILUS_ICON_SIZE_STANDARD); - create_zoom_menu_item(menu, zoom_control, _("150%"), (double) NAUTILUS_ICON_SIZE_LARGE / NAUTILUS_ICON_SIZE_STANDARD); - create_zoom_menu_item(menu, zoom_control, _("200%"), (double) NAUTILUS_ICON_SIZE_LARGER / NAUTILUS_ICON_SIZE_STANDARD); - create_zoom_menu_item(menu, zoom_control, _("400%"), (double) NAUTILUS_ICON_SIZE_LARGEST / NAUTILUS_ICON_SIZE_STANDARD); + while (p != NULL) { + create_zoom_menu_item(menu, zoom_control, *(double*)p->data); + p = g_list_next (p); + } return menu; } @@ -357,6 +369,12 @@ nautilus_zoom_control_set_max_zoom_level (NautilusZoomControl *zoom_control, dou gtk_widget_queue_draw (GTK_WIDGET (zoom_control)); } +void +nautilus_zoom_control_set_preferred_zoom_levels (NautilusZoomControl *zoom_control, GList* zoom_levels) +{ + zoom_control->preferred_zoom_levels = zoom_levels; +} + double nautilus_zoom_control_get_zoom_level (NautilusZoomControl *zoom_control) { diff --git a/src/nautilus-zoom-control.h b/src/nautilus-zoom-control.h index 6fac63819..9b4ba7a2f 100644 --- a/src/nautilus-zoom-control.h +++ b/src/nautilus-zoom-control.h @@ -48,6 +48,7 @@ struct NautilusZoomControl { double zoom_level; double min_zoom_level; double max_zoom_level; + GList *preferred_zoom_levels; }; struct NautilusZoomControlClass { @@ -68,6 +69,9 @@ void nautilus_zoom_control_set_min_zoom_level (NautilusZoomControl *zoom_c double zoom_level); void nautilus_zoom_control_set_max_zoom_level (NautilusZoomControl *zoom_control, double zoom_level); +void nautilus_zoom_control_set_preferred_zoom_levels + (NautilusZoomControl *zoom_control, + GList* zoom_levels); double nautilus_zoom_control_get_zoom_level (NautilusZoomControl *zoom_control); double nautilus_zoom_control_get_min_zoom_level (NautilusZoomControl *zoom_control); |