mirror of
https://gitlab.gnome.org/GNOME/eog
synced 2024-10-19 06:24:34 +00:00
2001-05-21 Jens Finke <jens@gnome.org
* eog-collection-control.c (eog_control_construct): Add property bag to control. * eog-collection-model.[ch]: Added a base_uri attribute, which stores the common part of all viewed URIs. Maybe this doesn't work under all conditions. (eog_collection_model_set_uri), (eog_collection_model_set_uri_list): Set base_uri. (eog_collection_model_get_base_uri): New function. * eog-collection-view.[ch]: Added property bag attribute. (eog_collection_view_get_property_bag), (eog_collection_view_get_prop), (eog_collection_view_set_prop): New functions. (update_title_property), (model_interval_size_changed): New functions to update the 'window_title' property correctly. (eog_collection_view_construct): Create property bag and listen to model interval changes.
This commit is contained in:
parent
2bc2b44f3e
commit
ec12052218
|
@ -1,3 +1,25 @@
|
|||
2001-05-21 Jens Finke <jens@gnome.org
|
||||
|
||||
* eog-collection-control.c (eog_control_construct): Add property
|
||||
bag to control.
|
||||
|
||||
* eog-collection-model.[ch]: Added a base_uri attribute, which stores
|
||||
the common part of all viewed URIs. Maybe this doesn't work under
|
||||
all conditions.
|
||||
(eog_collection_model_set_uri),
|
||||
(eog_collection_model_set_uri_list): Set base_uri.
|
||||
(eog_collection_model_get_base_uri): New function.
|
||||
|
||||
* eog-collection-view.[ch]: Added property bag attribute.
|
||||
(eog_collection_view_get_property_bag),
|
||||
(eog_collection_view_get_prop),
|
||||
(eog_collection_view_set_prop): New functions.
|
||||
(update_title_property),
|
||||
(model_interval_size_changed): New functions to update the
|
||||
'window_title' property correctly.
|
||||
(eog_collection_view_construct): Create property bag and listen to
|
||||
model interval changes.
|
||||
|
||||
2001-04-23 Jens Finke <jens@gnome.org>
|
||||
|
||||
This patch enables the collection component to load a bunch of
|
||||
|
|
|
@ -172,6 +172,7 @@ EogControl *
|
|||
eog_control_construct (EogControl *eog_ctrl)
|
||||
{
|
||||
BonoboControl *bctrl;
|
||||
BonoboPropertyBag *property_bag;
|
||||
|
||||
g_return_val_if_fail (eog_ctrl != NULL, NULL);
|
||||
g_return_val_if_fail (EOG_IS_CONTROL (eog_ctrl), NULL);
|
||||
|
@ -193,6 +194,10 @@ eog_control_construct (EogControl *eog_ctrl)
|
|||
gtk_signal_connect (GTK_OBJECT (bctrl), "activate",
|
||||
eog_control_activate, eog_ctrl);
|
||||
|
||||
/* add properties */
|
||||
property_bag = eog_collection_view_get_property_bag (EOG_COLLECTION_VIEW (eog_ctrl));
|
||||
bonobo_control_set_properties (BONOBO_CONTROL (bctrl), property_bag);
|
||||
bonobo_object_unref (BONOBO_OBJECT (property_bag));
|
||||
|
||||
/* connect collection view signals */
|
||||
gtk_signal_connect (GTK_OBJECT (eog_ctrl),
|
||||
|
|
|
@ -38,6 +38,9 @@ struct _EogCollectionModelPrivate {
|
|||
|
||||
/* list of images to load with loader */
|
||||
GSList *images_to_load;
|
||||
|
||||
/* base uri e.g. from a directory */
|
||||
gchar *base_uri;
|
||||
};
|
||||
|
||||
|
||||
|
@ -56,12 +59,10 @@ static void
|
|||
eog_collection_model_destroy (GtkObject *obj)
|
||||
{
|
||||
EogCollectionModel *model;
|
||||
CORBA_Environment ev;
|
||||
|
||||
g_return_if_fail (obj != NULL);
|
||||
g_return_if_fail (EOG_IS_COLLECTION_MODEL (obj));
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
model = EOG_COLLECTION_MODEL (obj);
|
||||
|
||||
if (model->priv->loader)
|
||||
|
@ -77,7 +78,9 @@ eog_collection_model_destroy (GtkObject *obj)
|
|||
g_hash_table_destroy (model->priv->id_image_mapping);
|
||||
model->priv->id_image_mapping = NULL;
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
if (model->priv->base_uri)
|
||||
g_free (model->priv->base_uri);
|
||||
model->priv->base_uri = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -103,6 +106,7 @@ eog_collection_model_init (EogCollectionModel *obj)
|
|||
priv->id_image_mapping = NULL;
|
||||
priv->selected_images = NULL;
|
||||
priv->images_to_load = NULL;
|
||||
priv->base_uri = NULL;
|
||||
obj->priv = priv;
|
||||
}
|
||||
|
||||
|
@ -386,7 +390,7 @@ eog_collection_model_set_uri (EogCollectionModel *model,
|
|||
priv = model->priv;
|
||||
|
||||
ctx = prepare_context (model, uri);
|
||||
|
||||
|
||||
if (ctx != NULL) {
|
||||
if (ctx->type == LC_BONOBO_STORAGE)
|
||||
gtk_idle_add ((GtkFunction) real_storage_loading, ctx);
|
||||
|
@ -395,6 +399,13 @@ eog_collection_model_set_uri (EogCollectionModel *model,
|
|||
} else {
|
||||
g_warning (_("Can't handle URI: %s"), uri);
|
||||
}
|
||||
|
||||
if (priv->base_uri == NULL)
|
||||
priv->base_uri = g_strdup (uri);
|
||||
else {
|
||||
g_free (priv->base_uri);
|
||||
priv->base_uri = g_strdup("multiple"));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -425,6 +436,10 @@ eog_collection_model_set_uri_list (EogCollectionModel *model,
|
|||
|
||||
node = node->next;
|
||||
}
|
||||
|
||||
if (model->priv->base_uri != NULL)
|
||||
g_free (model->priv->base_uri);
|
||||
model->priv->base_uri = g_strdup ("multiple");
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -567,3 +582,14 @@ void eog_collection_model_toggle_select_status (EogCollectionModel *model,
|
|||
}
|
||||
|
||||
|
||||
gchar*
|
||||
eog_collection_model_get_base_uri (EogCollectionModel *model)
|
||||
{
|
||||
g_return_val_if_fail (model != NULL, NULL);
|
||||
g_return_val_if_fail (EOG_IS_COLLECTION_MODEL (model), NULL);
|
||||
|
||||
if (g_strcasecmp ("multiple", model->priv->base_uri) == 0)
|
||||
return NULL;
|
||||
else
|
||||
return model->priv->base_uri;
|
||||
}
|
||||
|
|
|
@ -105,6 +105,9 @@ void
|
|||
eog_collection_model_set_select_status_all (EogCollectionModel *model,
|
||||
gboolean status);
|
||||
|
||||
gchar*
|
||||
eog_collection_model_get_base_uri (EogCollectionModel *model);
|
||||
|
||||
END_GNOME_DECLS
|
||||
|
||||
#endif /* EOG_COLLECTION_MODEL_H */
|
||||
|
|
|
@ -30,8 +30,16 @@ struct _EogCollectionViewPrivate {
|
|||
GtkWidget *wraplist;
|
||||
GtkWidget *root;
|
||||
|
||||
BonoboPropertyBag *property_bag;
|
||||
|
||||
BonoboUIComponent *uic;
|
||||
BonoboPropertyControl *prop_control;
|
||||
|
||||
gint idle_id;
|
||||
};
|
||||
|
||||
enum {
|
||||
PROP_WINDOW_TITLE
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -80,7 +88,7 @@ impl_GNOME_EOG_ImageCollection_openURIList (PortableServer_Servant servant,
|
|||
priv = cview->priv;
|
||||
|
||||
list = NULL;
|
||||
g_print ("uri_list->_lenght: %i\n", uri_list->_length);
|
||||
g_print ("uri_list->_length: %i\n", uri_list->_length);
|
||||
for (i = 0; i < uri_list->_length; i++) {
|
||||
list = g_list_append
|
||||
(list, g_strdup (uri_list->_buffer[i]));
|
||||
|
@ -153,6 +161,10 @@ eog_collection_view_destroy (GtkObject *object)
|
|||
bonobo_object_unref (BONOBO_OBJECT (list_view->priv->prop_control));
|
||||
list_view->priv->prop_control = NULL;
|
||||
|
||||
if (list_view->priv->property_bag)
|
||||
bonobo_object_unref (BONOBO_OBJECT (list_view->priv->property_bag));
|
||||
list_view->priv->property_bag = NULL;
|
||||
|
||||
list_view->priv->wraplist = NULL;
|
||||
list_view->priv->root = NULL;
|
||||
|
||||
|
@ -206,9 +218,10 @@ eog_collection_view_class_init (EogCollectionViewClass *klass)
|
|||
}
|
||||
|
||||
static void
|
||||
eog_collection_view_init (EogCollectionView *image_view)
|
||||
eog_collection_view_init (EogCollectionView *view)
|
||||
{
|
||||
image_view->priv = g_new0 (EogCollectionViewPrivate, 1);
|
||||
view->priv = g_new0 (EogCollectionViewPrivate, 1);
|
||||
view->priv->idle_id = -1;
|
||||
}
|
||||
|
||||
BONOBO_X_TYPE_FUNC_FULL (EogCollectionView,
|
||||
|
@ -236,6 +249,78 @@ handle_item_dbl_click (GtkObject *obj, gint n, gpointer data)
|
|||
g_free (uri);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
eog_collection_view_get_prop (BonoboPropertyBag *bag,
|
||||
BonoboArg *arg,
|
||||
guint arg_id,
|
||||
CORBA_Environment *ev,
|
||||
gpointer user_data)
|
||||
{
|
||||
EogCollectionView *view;
|
||||
|
||||
g_return_if_fail (user_data != NULL);
|
||||
g_return_if_fail (EOG_IS_COLLECTION_VIEW (user_data));
|
||||
|
||||
view = EOG_COLLECTION_VIEW (user_data);
|
||||
|
||||
switch (arg_id) {
|
||||
case PROP_WINDOW_TITLE: {
|
||||
gchar *base_uri;
|
||||
gchar *title;
|
||||
gint length;
|
||||
gchar *buffer;
|
||||
|
||||
base_uri = eog_collection_model_get_base_uri (view->priv->model);
|
||||
length = eog_collection_model_get_length (view->priv->model);
|
||||
if (length == 1)
|
||||
buffer = g_strdup("(1 image)");
|
||||
else {
|
||||
buffer = g_new0 (guchar, 20);
|
||||
g_snprintf (buffer, 20, "(%i images)", length);
|
||||
}
|
||||
|
||||
if (base_uri == NULL)
|
||||
title = g_strconcat (_("Collection View "), buffer, NULL);
|
||||
else {
|
||||
if (g_strncasecmp ("file:", base_uri, 5) == 0)
|
||||
title = g_strconcat ((base_uri+5*sizeof(guchar)), " ",
|
||||
buffer, NULL );
|
||||
else
|
||||
title = g_strconcat (base_uri, " ", buffer, NULL);
|
||||
}
|
||||
|
||||
BONOBO_ARG_SET_STRING (arg, title);
|
||||
g_free (title);
|
||||
g_free (buffer);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
eog_collection_view_set_prop (BonoboPropertyBag *bag,
|
||||
const BonoboArg *arg,
|
||||
guint arg_id,
|
||||
CORBA_Environment *ev,
|
||||
gpointer user_data)
|
||||
{
|
||||
EogCollectionView *view;
|
||||
|
||||
g_return_if_fail (user_data != NULL);
|
||||
g_return_if_fail (EOG_IS_COLLECTION_VIEW (user_data));
|
||||
|
||||
view = EOG_COLLECTION_VIEW (user_data);
|
||||
|
||||
switch (arg_id) {
|
||||
/* all properties are read only yet */
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
prop_control_get_prop (BonoboPropertyBag *bag,
|
||||
BonoboArg *arg,
|
||||
|
@ -291,6 +376,39 @@ prop_control_get_cb (BonoboPropertyControl *property_control,
|
|||
return control;
|
||||
}
|
||||
|
||||
static gint
|
||||
update_title_property (EogCollectionView *view)
|
||||
{
|
||||
BonoboArg *arg;
|
||||
|
||||
arg = bonobo_arg_new (BONOBO_ARG_STRING);
|
||||
|
||||
eog_collection_view_get_prop (NULL, arg,
|
||||
PROP_WINDOW_TITLE,
|
||||
NULL,
|
||||
view);
|
||||
|
||||
bonobo_property_bag_notify_listeners (view->priv->property_bag,
|
||||
"window_title",
|
||||
arg, NULL);
|
||||
|
||||
bonobo_arg_release (arg);
|
||||
view->priv->idle_id = -1;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
model_interval_size_changed (EogCollectionModel *model, GList *id_list, gpointer data)
|
||||
{
|
||||
EogCollectionView *view;
|
||||
|
||||
view = EOG_COLLECTION_VIEW (data);
|
||||
|
||||
if (view->priv->idle_id == -1)
|
||||
view->priv->idle_id = gtk_idle_add ((GtkFunction) update_title_property, view);
|
||||
}
|
||||
|
||||
EogCollectionView *
|
||||
eog_collection_view_construct (EogCollectionView *list_view)
|
||||
{
|
||||
|
@ -304,6 +422,12 @@ eog_collection_view_construct (EogCollectionView *list_view)
|
|||
/* construct widget */
|
||||
priv = list_view->priv;
|
||||
priv->model = eog_collection_model_new ();
|
||||
gtk_signal_connect (GTK_OBJECT (priv->model), "interval_added",
|
||||
GTK_SIGNAL_FUNC (model_interval_size_changed),
|
||||
list_view);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->model), "interval_removed",
|
||||
GTK_SIGNAL_FUNC (model_interval_size_changed),
|
||||
list_view);
|
||||
|
||||
priv->factory = EOG_ITEM_FACTORY (eog_item_factory_simple_new ());
|
||||
|
||||
|
@ -322,6 +446,14 @@ eog_collection_view_construct (EogCollectionView *list_view)
|
|||
gtk_widget_show (priv->wraplist);
|
||||
gtk_widget_show (priv->root);
|
||||
|
||||
/* Property Bag */
|
||||
priv->property_bag = bonobo_property_bag_new (eog_collection_view_get_prop,
|
||||
eog_collection_view_set_prop,
|
||||
list_view);
|
||||
bonobo_property_bag_add (priv->property_bag, "window_title", PROP_WINDOW_TITLE,
|
||||
BONOBO_ARG_STRING, NULL, _("Window Title"),
|
||||
BONOBO_PROPERTY_READABLE);
|
||||
|
||||
/* Property Control */
|
||||
priv->prop_control = bonobo_property_control_new (prop_control_get_cb, 2,
|
||||
list_view);
|
||||
|
@ -364,4 +496,11 @@ eog_collection_view_set_background_color (EogCollectionView *list_view,
|
|||
color);
|
||||
}
|
||||
|
||||
BonoboPropertyBag*
|
||||
eog_collection_view_get_property_bag (EogCollectionView *view)
|
||||
{
|
||||
g_return_val_if_fail (view != NULL, NULL);
|
||||
g_return_val_if_fail (EOG_IS_COLLECTION_VIEW (view), NULL);
|
||||
|
||||
return view->priv->property_bag;
|
||||
}
|
||||
|
|
|
@ -54,6 +54,9 @@ void eog_collection_view_set_ui_container (EogCollectionView
|
|||
Bonobo_UIContainer ui_container);
|
||||
GtkWidget *eog_collection_view_get_widget (EogCollectionView *list_view);
|
||||
|
||||
BonoboPropertyBag *eog_collection_view_get_property_bag (EogCollectionView *view);
|
||||
|
||||
|
||||
void eog_collection_view_set_layout_mode (EogCollectionView *list_view,
|
||||
EogLayoutMode lm);
|
||||
|
||||
|
|
Loading…
Reference in a new issue