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:
Jens Finke 2001-05-21 21:28:18 +00:00
parent 2bc2b44f3e
commit ec12052218
6 changed files with 205 additions and 7 deletions

View file

@ -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

View file

@ -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),

View file

@ -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;
}

View file

@ -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 */

View file

@ -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;
}

View file

@ -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);