fix typo. (impl_StorageSetView_remove_listener): same.

2000-10-02  Chris Toshok  <toshok@helixcode.com>

	* evolution-storage-set-view.c (impl_StorageSetView_add_listener): fix typo.
	(impl_StorageSetView_remove_listener): same.
	(impl_StorageSetView__get_show_folders): implementation of getter for show_folders.
	(impl_StorageSetView__set_show_folders): implementation of setter for show_folders.
	(corba_class_init): install _set_show_folders and _get_show_folders.

	* Evolution-StorageSetView.idl: add show_folders attribute to
	StorageSetView.

	* e-storage-set-view.h: add prototypes for
	e_storage_set_view_{get,set}_show_folders.

	* e-storage-set-view.c (insert_storages): split this code out from
	e_storage_set_view_construct so we can call it when "show_folders"
	has been changed.
	(e_storage_set_view_construct): remove the code to insert
	storages.
	(e_storage_set_view_set_show_folders): new function.  tears down
	existing tree and node/path hashtable and calls insert_storages.
	(e_storage_set_view_get_show_folders): new function, retrieves
	current show_folders state.

svn path=/trunk/; revision=5684
This commit is contained in:
Chris Toshok
2000-10-03 01:29:43 +00:00
committed by Chris Toshok
parent 11aa32cb03
commit 1ad5f19df9
5 changed files with 143 additions and 29 deletions

View File

@ -1,3 +1,27 @@
2000-10-02 Chris Toshok <toshok@helixcode.com>
* evolution-storage-set-view.c (impl_StorageSetView_add_listener): fix typo.
(impl_StorageSetView_remove_listener): same.
(impl_StorageSetView__get_show_folders): implementation of getter for show_folders.
(impl_StorageSetView__set_show_folders): implementation of setter for show_folders.
(corba_class_init): install _set_show_folders and _get_show_folders.
* Evolution-StorageSetView.idl: add show_folders attribute to
StorageSetView.
* e-storage-set-view.h: add prototypes for
e_storage_set_view_{get,set}_show_folders.
* e-storage-set-view.c (insert_storages): split this code out from
e_storage_set_view_construct so we can call it when "show_folders"
has been changed.
(e_storage_set_view_construct): remove the code to insert
storages.
(e_storage_set_view_set_show_folders): new function. tears down
existing tree and node/path hashtable and calls insert_storages.
(e_storage_set_view_get_show_folders): new function, retrieves
current show_folders state.
2000-10-02 Chris Toshok <toshok@helixcode.com>
* evolution-storage-set-view-factory.c

View File

@ -20,6 +20,8 @@ module Evolution {
exception AlreadyListening {};
exception NotFound {};
attribute boolean show_folders;
void add_listener (in StorageSetViewListener listener)
raises (AlreadyListening);
void remove_listener (in StorageSetViewListener listener)

View File

@ -62,6 +62,8 @@ struct _EStorageSetViewPrivate {
/* Path of the row selected by the latest "cursor_change" signal. */
const char *selected_row_path;
gboolean show_folders;
};
@ -695,6 +697,7 @@ init (EStorageSetView *storage_set_view)
priv->path_to_etree_node = g_hash_table_new (g_str_hash, g_str_equal);
priv->type_name_to_pixbuf = g_hash_table_new (g_str_hash, g_str_equal);
priv->selected_row_path = NULL;
priv->show_folders = TRUE;
storage_set_view->priv = priv;
}
@ -799,6 +802,42 @@ insert_folders (EStorageSetView *storage_set_view,
e_free_string_list (folder_path_list);
}
static void
insert_storages (EStorageSetView *storage_set_view)
{
EStorageSetViewPrivate *priv;
EStorageSet *storage_set;
GList *storage_list;
GList *p;
priv = storage_set_view->priv;
storage_set = priv->storage_set;
storage_list = e_storage_set_get_storage_list (storage_set);
for (p = storage_list; p != NULL; p = p->next) {
EStorage *storage = E_STORAGE (p->data);
const char *name;
char *path;
ETreePath *parent;
name = e_storage_get_name (storage);
path = g_strconcat ("/", name, NULL);
parent = e_tree_model_node_insert_id (priv->etree_model, priv->root_node,
-1, path, path);
e_tree_model_node_set_expanded (priv->etree_model, parent, TRUE);
g_hash_table_insert (priv->path_to_etree_node, path, parent);
if (priv->show_folders)
insert_folders (storage_set_view, parent, storage, "/");
}
e_free_object_list (storage_list);
}
static void
right_click (EStorageSetView *storage_set_view, int row, int col,
GdkEventButton *event, gboolean *ret)
@ -835,13 +874,6 @@ e_storage_set_view_construct (EStorageSetView *storage_set_view,
EStorageSet *storage_set)
{
EStorageSetViewPrivate *priv;
ETreePath *parent;
EStorage *storage;
GList *storage_list;
GList *p;
const char *name;
char *text[2];
char *path;
ETableCol *ecol;
ETableHeader *e_table_header;
ECell *cell_left_just;
@ -913,26 +945,7 @@ e_storage_set_view_construct (EStorageSetView *storage_set_view,
gtk_signal_connect (GTK_OBJECT (storage_set_view), "table_drag_data_get",
GTK_SIGNAL_FUNC (etable_drag_data_get), GTK_OBJECT(storage_set_view));
storage_list = e_storage_set_get_storage_list (storage_set);
text[1] = NULL;
for (p = storage_list; p != NULL; p = p->next) {
storage = E_STORAGE (p->data);
name = e_storage_get_name (storage);
path = g_strconcat ("/", name, NULL);
parent = e_tree_model_node_insert_id (priv->etree_model, priv->root_node,
-1, path, path);
e_tree_model_node_set_expanded (priv->etree_model, parent, TRUE);
g_hash_table_insert (priv->path_to_etree_node, path, parent);
insert_folders (storage_set_view, parent, storage, "/");
}
e_free_object_list (storage_list);
insert_storages (storage_set_view);
}
GtkWidget *
@ -998,5 +1011,40 @@ e_storage_set_view_get_current_folder (EStorageSetView *storage_set_view)
return path;
}
void
e_storage_set_view_set_show_folders (EStorageSetView *storage_set_view,
gboolean show)
{
EStorageSetViewPrivate *priv;
g_return_if_fail (storage_set_view != NULL);
g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
priv = storage_set_view->priv;
if (show == priv->show_folders)
return;
/* tear down existing tree and hash table mappings */
e_tree_model_node_remove (priv->etree_model, priv->root_node);
g_hash_table_foreach (priv->path_to_etree_node, path_free_func, NULL);
/* now re-add the root node */
priv->root_node = e_tree_model_node_insert (priv->etree_model, NULL, -1, "/Root Node");
/* then reinsert the storages after setting the "show_folders"
flag. insert_storages will call insert_folders if
show_folders is TRUE */
priv->show_folders = show;
insert_storages (storage_set_view);
}
gboolean
e_storage_set_view_get_show_folders (EStorageSetView *storage_set_view)
{
return storage_set_view->priv->show_folders;
}
E_MAKE_TYPE (e_storage_set_view, "EStorageSetView", EStorageSetView, class_init, init, PARENT_TYPE)

View File

@ -71,6 +71,10 @@ void e_storage_set_view_set_current_folder (EStorageSetView *storage_set
const char *path);
const char *e_storage_set_view_get_current_folder (EStorageSetView *storage_set_view);
void e_storage_set_view_set_show_folders (EStorageSetView *storage_set_view,
gboolean show);
gboolean e_storage_set_view_get_show_folders (EStorageSetView *storage_set_view);
#ifdef __cplusplus
}
#endif /* __cplusplus */

View File

@ -184,7 +184,7 @@ impl_StorageSetView_add_listener (PortableServer_Servant servant,
EvolutionStorageSetView *storage_set_view;
bonobo_object = bonobo_object_from_servant (servant);
storage_set_view = EVOLUTION_STORAGE_SET_VIEW (servant);
storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
if (! add_listener (storage_set_view, listener))
CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
@ -200,13 +200,47 @@ impl_StorageSetView_remove_listener (PortableServer_Servant servant,
EvolutionStorageSetView *storage_set_view;
bonobo_object = bonobo_object_from_servant (servant);
storage_set_view = EVOLUTION_STORAGE_SET_VIEW (servant);
storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
if (! remove_listener (storage_set_view, listener))
CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
ex_Evolution_StorageSetView_NotFound, NULL);
}
static CORBA_boolean
impl_StorageSetView__get_show_folders (PortableServer_Servant servant,
CORBA_Environment * ev)
{
BonoboObject *bonobo_object;
EvolutionStorageSetView *storage_set_view;
EvolutionStorageSetViewPrivate *priv;
bonobo_object = bonobo_object_from_servant (servant);
storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
priv = storage_set_view->priv;
return (CORBA_boolean)e_storage_set_view_get_show_folders (
E_STORAGE_SET_VIEW(priv->storage_set_view_widget));
}
static void
impl_StorageSetView__set_show_folders (PortableServer_Servant servant,
const CORBA_boolean value,
CORBA_Environment * ev)
{
BonoboObject *bonobo_object;
EvolutionStorageSetView *storage_set_view;
EvolutionStorageSetViewPrivate *priv;
bonobo_object = bonobo_object_from_servant (servant);
storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
priv = storage_set_view->priv;
e_storage_set_view_set_show_folders (
E_STORAGE_SET_VIEW(priv->storage_set_view_widget),
(gboolean)value);
}
/* GtkObject methods. */
@ -254,6 +288,8 @@ corba_class_init (void)
epv = g_new0 (POA_Evolution_StorageSetView__epv, 1);
epv->add_listener = impl_StorageSetView_add_listener;
epv->remove_listener = impl_StorageSetView_remove_listener;
epv->_set_show_folders = impl_StorageSetView__set_show_folders;
epv->_get_show_folders = impl_StorageSetView__get_show_folders;
vepv = &StorageSetView_vepv;
vepv->_base_epv = base_epv;