summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Engber <engber@src.gnome.org>2000-06-28 00:43:02 +0000
committerMike Engber <engber@src.gnome.org>2000-06-28 00:43:02 +0000
commit4f6956f9c0cc45b9c366d316d36a4c0dcb3efd2e (patch)
tree31d1c566771c994e635ace4b464a5e5786e77faa
parentbcdb61d8ce12dfc3e5d91a9c2c5ee734d7b12449 (diff)
downloadnautilus-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--ChangeLog29
-rw-r--r--libnautilus/nautilus-view-component.idl7
-rw-r--r--libnautilus/nautilus-zoomable.c92
-rw-r--r--libnautilus/nautilus-zoomable.h30
-rw-r--r--src/file-manager/fm-directory-view.c19
-rw-r--r--src/nautilus-navigation-window.c1
-rw-r--r--src/nautilus-object-window.c1
-rw-r--r--src/nautilus-spatial-window.c1
-rw-r--r--src/nautilus-view-frame.c25
-rw-r--r--src/nautilus-view-frame.h3
-rw-r--r--src/nautilus-window.c1
-rw-r--r--src/nautilus-zoom-control.c44
-rw-r--r--src/nautilus-zoom-control.h4
13 files changed, 214 insertions, 43 deletions
diff --git a/ChangeLog b/ChangeLog
index 473c73874..4614f7ba6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);