Added a collection argument to this to set the GalViewCollection.
2001-01-17 Christopher James Lahey <clahey@helixcode.com> * gal-define-views-dialog.c, gal-define-views-dialog.h: Added a collection argument to this to set the GalViewCollection. Connected up the modify, delete, and copy buttons. Documented. * gal-define-views-model.c, gal-define-views-model.h: Added gal_define_views_model_get_view, gal_define_views_model_delete_view, and gal_define_views_model_copy_view methods. Documented. * gal-view-collection.c: Documented. * gal-view-etable.c, gal-view-etable.h: Documented. Implemented edit and clone methods of GalView. Initialized state to a non-NULL value. Added a name parameter to gal_view_etable_new. * gal-view-factory-etable.c: Documented. Added the name argument to gal_view_etable_new. * gal-view-factory.c: Fixed the g_return_val_if_fails to check for GalViewFactory as the type instead of GalView. * gal-view.c, gal-view.h: Added the clone method. svn path=/trunk/; revision=7599
This commit is contained in:
committed by
Chris Lahey
parent
f3cd904e2b
commit
1a6bb41b0d
@ -38,6 +38,7 @@ static GnomeDialogClass *parent_class = NULL;
|
||||
/* The arguments we take */
|
||||
enum {
|
||||
ARG_0,
|
||||
ARG_COLLECTION,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
@ -82,10 +83,13 @@ gal_define_views_dialog_class_init (GalDefineViewsDialogClass *klass)
|
||||
object_class->set_arg = gal_define_views_dialog_set_arg;
|
||||
object_class->get_arg = gal_define_views_dialog_get_arg;
|
||||
object_class->destroy = gal_define_views_dialog_destroy;
|
||||
|
||||
gtk_object_add_arg_type("GalDefineViewsDialog::collection", GTK_TYPE_OBJECT,
|
||||
GTK_ARG_READWRITE, ARG_COLLECTION);
|
||||
}
|
||||
|
||||
/* ETable creation */
|
||||
#define SPEC "<ETableSpecification cursor-mode=\"line\" draw-grid=\"true\">" \
|
||||
#define SPEC "<ETableSpecification cursor-mode=\"line\" draw-grid=\"true\" selection-mode=\"single\">" \
|
||||
"<ETableColumn model_col= \"0\" _title=\"Name\" expansion=\"1.0\" minimum_width=\"18\" resizable=\"true\" cell=\"string\" compare=\"string\"/>" \
|
||||
"<ETableState> <column source=\"0\"/> <grouping> </grouping> </ETableState>" \
|
||||
"</ETableSpecification>"
|
||||
@ -138,6 +142,62 @@ gdvd_button_new_callback(GtkWidget *widget, GalDefineViewsDialog *dialog)
|
||||
gtk_widget_show(GTK_WIDGET(view_new_dialog));
|
||||
}
|
||||
|
||||
static void
|
||||
gdvd_button_modify_callback(GtkWidget *widget, GalDefineViewsDialog *dialog)
|
||||
{
|
||||
int row;
|
||||
GtkWidget *scrolled;
|
||||
ETable *etable;
|
||||
|
||||
scrolled = glade_xml_get_widget(dialog->gui, "custom-table");
|
||||
etable = e_table_scrolled_get_table(E_TABLE_SCROLLED(scrolled));
|
||||
row = e_table_get_cursor_row (E_TABLE(etable));
|
||||
|
||||
if (row != -1) {
|
||||
GalView *view;
|
||||
view = gal_define_views_model_get_view(GAL_DEFINE_VIEWS_MODEL(dialog->model),
|
||||
row);
|
||||
gal_view_edit(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gdvd_button_delete_callback(GtkWidget *widget, GalDefineViewsDialog *dialog)
|
||||
{
|
||||
int row;
|
||||
GtkWidget *scrolled;
|
||||
ETable *etable;
|
||||
|
||||
scrolled = glade_xml_get_widget(dialog->gui, "custom-table");
|
||||
etable = e_table_scrolled_get_table(E_TABLE_SCROLLED(scrolled));
|
||||
row = e_table_get_cursor_row (E_TABLE(etable));
|
||||
|
||||
if (row != -1) {
|
||||
gal_define_views_model_delete_view(GAL_DEFINE_VIEWS_MODEL(dialog->model),
|
||||
row);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gdvd_button_copy_callback(GtkWidget *widget, GalDefineViewsDialog *dialog)
|
||||
{
|
||||
int row;
|
||||
GtkWidget *scrolled;
|
||||
ETable *etable;
|
||||
|
||||
scrolled = glade_xml_get_widget(dialog->gui, "custom-table");
|
||||
etable = e_table_scrolled_get_table(E_TABLE_SCROLLED(scrolled));
|
||||
row = e_table_get_cursor_row (E_TABLE(etable));
|
||||
|
||||
if (row != -1) {
|
||||
gal_define_views_model_copy_view(GAL_DEFINE_VIEWS_MODEL(dialog->model),
|
||||
row);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gdvd_connect_signal(GalDefineViewsDialog *dialog, char *widget_name, char *signal, GtkSignalFunc handler)
|
||||
{
|
||||
@ -173,7 +233,10 @@ gal_define_views_dialog_init (GalDefineViewsDialog *dialog)
|
||||
GNOME_STOCK_BUTTON_CANCEL,
|
||||
NULL);
|
||||
|
||||
gdvd_connect_signal(dialog, "button-new", "clicked", GTK_SIGNAL_FUNC(gdvd_button_new_callback));
|
||||
gdvd_connect_signal(dialog, "button-new", "clicked", GTK_SIGNAL_FUNC(gdvd_button_new_callback));
|
||||
gdvd_connect_signal(dialog, "button-modify", "clicked", GTK_SIGNAL_FUNC(gdvd_button_modify_callback));
|
||||
gdvd_connect_signal(dialog, "button-delete", "clicked", GTK_SIGNAL_FUNC(gdvd_button_delete_callback));
|
||||
gdvd_connect_signal(dialog, "button-copy", "clicked", GTK_SIGNAL_FUNC(gdvd_button_copy_callback));
|
||||
|
||||
dialog->model = NULL;
|
||||
etable = glade_xml_get_widget(dialog->gui, "custom-table");
|
||||
@ -187,10 +250,17 @@ gal_define_views_dialog_init (GalDefineViewsDialog *dialog)
|
||||
static void
|
||||
gal_define_views_dialog_destroy (GtkObject *object) {
|
||||
GalDefineViewsDialog *gal_define_views_dialog = GAL_DEFINE_VIEWS_DIALOG(object);
|
||||
|
||||
|
||||
gtk_object_unref(GTK_OBJECT(gal_define_views_dialog->gui));
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_define_views_dialog_new
|
||||
*
|
||||
* Returns a new dialog for defining views.
|
||||
*
|
||||
* Returns: The GalDefineViewsDialog.
|
||||
*/
|
||||
GtkWidget*
|
||||
gal_define_views_dialog_new (void)
|
||||
{
|
||||
@ -201,11 +271,18 @@ gal_define_views_dialog_new (void)
|
||||
static void
|
||||
gal_define_views_dialog_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
|
||||
{
|
||||
GalDefineViewsDialog *editor;
|
||||
GalDefineViewsDialog *dialog;
|
||||
|
||||
editor = GAL_DEFINE_VIEWS_DIALOG (o);
|
||||
dialog = GAL_DEFINE_VIEWS_DIALOG (o);
|
||||
|
||||
switch (arg_id){
|
||||
case ARG_COLLECTION:
|
||||
if (GTK_VALUE_OBJECT(*arg))
|
||||
dialog->collection = GAL_VIEW_COLLECTION(GTK_VALUE_OBJECT(*arg));
|
||||
else
|
||||
dialog->collection = NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@ -214,11 +291,18 @@ gal_define_views_dialog_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
|
||||
static void
|
||||
gal_define_views_dialog_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
|
||||
{
|
||||
GalDefineViewsDialog *gal_define_views_dialog;
|
||||
GalDefineViewsDialog *dialog;
|
||||
|
||||
gal_define_views_dialog = GAL_DEFINE_VIEWS_DIALOG (object);
|
||||
dialog = GAL_DEFINE_VIEWS_DIALOG (object);
|
||||
|
||||
switch (arg_id) {
|
||||
case ARG_COLLECTION:
|
||||
if (dialog->collection)
|
||||
GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(dialog->collection);
|
||||
else
|
||||
GTK_VALUE_OBJECT(*arg) = NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
arg->type = GTK_TYPE_INVALID;
|
||||
break;
|
||||
|
||||
@ -51,7 +51,7 @@ typedef struct _GalDefineViewsDialogClass GalDefineViewsDialogClass;
|
||||
struct _GalDefineViewsDialog
|
||||
{
|
||||
GnomeDialog parent;
|
||||
|
||||
|
||||
/* item specific fields */
|
||||
GladeXML *gui;
|
||||
ETableModel *model;
|
||||
@ -67,8 +67,6 @@ struct _GalDefineViewsDialogClass
|
||||
GtkWidget *gal_define_views_dialog_new (void);
|
||||
GtkType gal_define_views_dialog_get_type (void);
|
||||
|
||||
void gal_define_views_dialog_add_section (GalDefineViewsDialog *gal_define_views_dialog);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
@ -130,6 +130,13 @@ gdvm_value_to_string (ETableModel *etc, int col, const void *value)
|
||||
return g_strdup(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_define_views_model_append
|
||||
* @model: The model to add to.
|
||||
* @view: The view to add.
|
||||
*
|
||||
* Adds the given view to the gal define views model.
|
||||
*/
|
||||
void
|
||||
gal_define_views_model_append (GalDefineViewsModel *model,
|
||||
GalView *view)
|
||||
@ -157,7 +164,7 @@ gal_define_views_model_class_init (GtkObjectClass *object_class)
|
||||
|
||||
gtk_object_add_arg_type ("GalDefineViewsModel::editable", GTK_TYPE_BOOL,
|
||||
GTK_ARG_READWRITE, ARG_EDITABLE);
|
||||
|
||||
|
||||
model_class->column_count = gdvm_col_count;
|
||||
model_class->row_count = gdvm_row_count;
|
||||
model_class->value_at = gdvm_value_at;
|
||||
@ -187,7 +194,7 @@ gal_define_views_model_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
|
||||
GalDefineViewsModel *model;
|
||||
|
||||
model = GAL_DEFINE_VIEWS_MODEL (o);
|
||||
|
||||
|
||||
switch (arg_id){
|
||||
case ARG_EDITABLE:
|
||||
model->editable = GTK_VALUE_BOOL (*arg);
|
||||
@ -235,12 +242,78 @@ gal_define_views_model_get_type (void)
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_define_views_model_new
|
||||
*
|
||||
* Returns a new define views model. This is a list of views as an
|
||||
* ETable for use in the GalDefineViewsDialog.
|
||||
*
|
||||
* Returns: The new GalDefineViewsModel.
|
||||
*/
|
||||
ETableModel *
|
||||
gal_define_views_model_new (void)
|
||||
{
|
||||
GalDefineViewsModel *et;
|
||||
|
||||
et = gtk_type_new (gal_define_views_model_get_type ());
|
||||
|
||||
|
||||
return E_TABLE_MODEL(et);
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_define_views_model_get_view:
|
||||
* @model: The GalDefineViewsModel.
|
||||
* @n: Which view to get.
|
||||
*
|
||||
* Gets the nth view.
|
||||
*
|
||||
* Returns: The view.
|
||||
*/
|
||||
GalView *
|
||||
gal_define_views_model_get_view (GalDefineViewsModel *model,
|
||||
int n)
|
||||
{
|
||||
return model->data[n];
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_define_views_model_delete_view:
|
||||
* @model: The GalDefineViewsModel.
|
||||
* @n: Which view to delete.
|
||||
*
|
||||
* Deletes the nth view.
|
||||
*/
|
||||
void
|
||||
gal_define_views_model_delete_view (GalDefineViewsModel *model,
|
||||
int n)
|
||||
{
|
||||
e_table_model_pre_change(E_TABLE_MODEL(model));
|
||||
gtk_object_unref(GTK_OBJECT(model->data[n]));
|
||||
model->data_count --;
|
||||
memmove(model->data + n, model->data + n + 1, (model->data_count - n) * sizeof(*model->data));
|
||||
model->data = g_renew(GalView *, model->data, model->data_count);
|
||||
e_table_model_row_deleted(E_TABLE_MODEL(model), n);
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_define_views_model_copy_view:
|
||||
* @model: The GalDefineViewsModel.
|
||||
* @n: Which view to copy.
|
||||
*
|
||||
* Copys the nth view.
|
||||
*/
|
||||
void
|
||||
gal_define_views_model_copy_view (GalDefineViewsModel *model,
|
||||
int n)
|
||||
{
|
||||
ETableModel *etm = E_TABLE_MODEL(model);
|
||||
GalView *view;
|
||||
|
||||
view = gal_view_clone (model->data[n]);
|
||||
|
||||
e_table_model_pre_change(etm);
|
||||
model->data = g_renew(GalView *, model->data, model->data_count + 1);
|
||||
model->data[model->data_count] = view;
|
||||
model->data_count++;
|
||||
e_table_model_row_inserted(etm, model->data_count - 1);
|
||||
}
|
||||
|
||||
@ -34,10 +34,16 @@ typedef struct {
|
||||
} GalDefineViewsModelClass;
|
||||
|
||||
|
||||
GtkType gal_define_views_model_get_type (void);
|
||||
ETableModel *gal_define_views_model_new (void);
|
||||
GtkType gal_define_views_model_get_type (void);
|
||||
ETableModel *gal_define_views_model_new (void);
|
||||
|
||||
void gal_define_views_model_append (GalDefineViewsModel *model,
|
||||
GalView *view);
|
||||
void gal_define_views_model_append (GalDefineViewsModel *model,
|
||||
GalView *view);
|
||||
GalView *gal_define_views_model_get_view (GalDefineViewsModel *model,
|
||||
int i);
|
||||
void gal_define_views_model_delete_view (GalDefineViewsModel *model,
|
||||
int i);
|
||||
void gal_define_views_model_copy_view (GalDefineViewsModel *model,
|
||||
int i);
|
||||
|
||||
#endif /* _GAL_DEFINE_VIEWS_MODEL_H_ */
|
||||
|
||||
@ -83,6 +83,10 @@ gal_view_collection_init (GalViewCollection *collection)
|
||||
collection->factory_list = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_view_collection_get_type:
|
||||
*
|
||||
*/
|
||||
guint
|
||||
gal_view_collection_get_type (void)
|
||||
{
|
||||
@ -108,20 +112,44 @@ gal_view_collection_get_type (void)
|
||||
return type;
|
||||
}
|
||||
|
||||
GalViewCollection *gal_view_collection_new (void)
|
||||
/**
|
||||
* gal_view_collection_new:
|
||||
*
|
||||
* A collection of views and view factories.
|
||||
*/
|
||||
GalViewCollection *
|
||||
gal_view_collection_new (void)
|
||||
{
|
||||
return gtk_type_new(gal_view_collection_get_type());
|
||||
}
|
||||
|
||||
/* Set up the view collection */
|
||||
void gal_view_collection_set_storage_directories (GalViewCollection *collection,
|
||||
char *system_dir,
|
||||
char *local_dir)
|
||||
/**
|
||||
* gal_view_collection_set_storage_directories
|
||||
* @collection: The view collection to initialize
|
||||
* @system_dir: The location of the system built in views
|
||||
* @local_dir: The location to store the users set up views
|
||||
*
|
||||
* Sets up the GalViewCollection.
|
||||
*/
|
||||
void
|
||||
gal_view_collection_set_storage_directories (GalViewCollection *collection,
|
||||
char *system_dir,
|
||||
char *local_dir)
|
||||
{
|
||||
}
|
||||
|
||||
void gal_view_collection_add_factory (GalViewCollection *collection,
|
||||
GalViewFactory *factory)
|
||||
/**
|
||||
* gal_view_collection_add_factory
|
||||
* @collection: The view collection to add a factory to
|
||||
* @factory: The factory to add
|
||||
*
|
||||
* Adds the given factory to this collection. This list is used both
|
||||
* when loading views from their xml description as well as when the
|
||||
* user tries to create a new view.
|
||||
*/
|
||||
void
|
||||
gal_view_collection_add_factory (GalViewCollection *collection,
|
||||
GalViewFactory *factory)
|
||||
{
|
||||
gtk_object_ref(GTK_OBJECT(factory));
|
||||
collection->factory_list = g_list_prepend(collection->factory_list, factory);
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
*/
|
||||
#include <config.h>
|
||||
#include "gal-view-etable.h"
|
||||
#include <gal/e-table/e-table-config.h>
|
||||
|
||||
#define PARENT_TYPE gal_view_get_type ()
|
||||
|
||||
@ -17,7 +18,10 @@ static GalViewClass *gal_view_etable_parent_class;
|
||||
static void
|
||||
gal_view_etable_edit (GalView *view)
|
||||
{
|
||||
|
||||
GalViewEtable *etable_view = GAL_VIEW_ETABLE(view);
|
||||
e_table_config_new(etable_view->title,
|
||||
etable_view->spec,
|
||||
etable_view->state);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -40,6 +44,23 @@ gal_view_etable_get_title (GalView *view)
|
||||
return GAL_VIEW_ETABLE(view)->title;
|
||||
}
|
||||
|
||||
static GalView *
|
||||
gal_view_etable_clone (GalView *view)
|
||||
{
|
||||
GalViewEtable *gve, *new;
|
||||
|
||||
gve = GAL_VIEW_ETABLE(view);
|
||||
|
||||
new = gtk_type_new (gal_view_etable_get_type ());
|
||||
new->spec = gve->spec;
|
||||
new->title = g_strdup (gve->title);
|
||||
new->state = e_table_state_duplicate(gve->state);
|
||||
|
||||
gtk_object_ref(GTK_OBJECT(new->spec));
|
||||
|
||||
return GAL_VIEW(new);
|
||||
}
|
||||
|
||||
static void
|
||||
gal_view_etable_destroy (GtkObject *object)
|
||||
{
|
||||
@ -61,6 +82,7 @@ gal_view_etable_class_init (GtkObjectClass *object_class)
|
||||
gal_view_class->load_from_node = gal_view_etable_load_from_node;
|
||||
gal_view_class->save_to_node = gal_view_etable_save_to_node ;
|
||||
gal_view_class->get_title = gal_view_etable_get_title ;
|
||||
gal_view_class->clone = gal_view_etable_clone ;
|
||||
|
||||
object_class->destroy = gal_view_etable_destroy ;
|
||||
}
|
||||
@ -69,23 +91,47 @@ static void
|
||||
gal_view_etable_init (GalViewEtable *gve)
|
||||
{
|
||||
gve->spec = NULL;
|
||||
gve->state = NULL;
|
||||
gve->state = e_table_state_new();
|
||||
gve->title = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_view_etable_new
|
||||
* @spec: The ETableSpecification that this view will be based upon.
|
||||
* @title: The name of the new view.
|
||||
*
|
||||
* Returns a new GalViewEtable. This is primarily for use by
|
||||
* GalViewFactoryEtable.
|
||||
*
|
||||
* Returns: The new GalViewEtable.
|
||||
*/
|
||||
GalView *
|
||||
gal_view_etable_new (ETableSpecification *spec)
|
||||
gal_view_etable_new (ETableSpecification *spec,
|
||||
const gchar *title)
|
||||
{
|
||||
return gal_view_etable_construct (gtk_type_new (gal_view_etable_get_type ()), spec);
|
||||
return gal_view_etable_construct (gtk_type_new (gal_view_etable_get_type ()), spec, title);
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_view_etable_construct
|
||||
* @view: The view to construct.
|
||||
* @spec: The ETableSpecification that this view will be based upon.
|
||||
* @title: The name of the new view.
|
||||
*
|
||||
* constructs the GalViewEtable. To be used by subclasses and
|
||||
* language bindings.
|
||||
*
|
||||
* Returns: The GalViewEtable.
|
||||
*/
|
||||
GalView *
|
||||
gal_view_etable_construct (GalViewEtable *view,
|
||||
ETableSpecification *spec)
|
||||
ETableSpecification *spec,
|
||||
const gchar *title)
|
||||
{
|
||||
if (spec)
|
||||
gtk_object_ref(GTK_OBJECT(spec));
|
||||
view->spec = spec;
|
||||
view->title = g_strdup(title);
|
||||
return GAL_VIEW(view);
|
||||
}
|
||||
|
||||
|
||||
@ -27,8 +27,10 @@ typedef struct {
|
||||
|
||||
/* Standard functions */
|
||||
GtkType gal_view_etable_get_type (void);
|
||||
GalView *gal_view_etable_new (ETableSpecification *spec);
|
||||
GalView *gal_view_etable_new (ETableSpecification *spec,
|
||||
const gchar *title);
|
||||
GalView *gal_view_etable_construct (GalViewEtable *view,
|
||||
ETableSpecification *spec);
|
||||
ETableSpecification *spec,
|
||||
const gchar *title);
|
||||
|
||||
#endif /* _GAL_VIEW_ETABLE_H_ */
|
||||
|
||||
@ -29,7 +29,7 @@ static GalView *
|
||||
gal_view_factory_etable_new_view (GalViewFactory *factory,
|
||||
const char *name)
|
||||
{
|
||||
return gal_view_etable_new(GAL_VIEW_FACTORY_ETABLE(factory)->spec);
|
||||
return gal_view_etable_new(GAL_VIEW_FACTORY_ETABLE(factory)->spec, name);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -59,12 +59,31 @@ gal_view_factory_etable_init (GalViewFactoryEtable *factory)
|
||||
factory->spec = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_view_etable_new
|
||||
* @spec: The spec to create GalViewEtables based upon.
|
||||
*
|
||||
* A new GalViewFactory for creating ETable views. Create one of
|
||||
* these and pass it to GalViewCollection for use.
|
||||
*
|
||||
* Returns: The new GalViewFactoryEtable.
|
||||
*/
|
||||
GalViewFactory *
|
||||
gal_view_factory_etable_new (ETableSpecification *spec)
|
||||
{
|
||||
return gal_view_factory_etable_construct (gtk_type_new (gal_view_factory_etable_get_type ()), spec);
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_view_etable_construct
|
||||
* @factory: The factory to construct
|
||||
* @spec: The spec to create GalViewEtables based upon.
|
||||
*
|
||||
* constructs the GalViewFactoryEtable. To be used by subclasses and
|
||||
* language bindings.
|
||||
*
|
||||
* Returns: The GalViewFactoryEtable.
|
||||
*/
|
||||
GalViewFactory *
|
||||
gal_view_factory_etable_construct (GalViewFactoryEtable *factory,
|
||||
ETableSpecification *spec)
|
||||
|
||||
@ -30,7 +30,7 @@ const char *
|
||||
gal_view_factory_get_title (GalViewFactory *factory)
|
||||
{
|
||||
g_return_val_if_fail (factory != NULL, 0);
|
||||
g_return_val_if_fail (GAL_IS_VIEW (factory), 0);
|
||||
g_return_val_if_fail (GAL_IS_VIEW_FACTORY (factory), 0);
|
||||
|
||||
if (GVF_CLASS (factory)->get_title)
|
||||
return GVF_CLASS (factory)->get_title (factory);
|
||||
@ -50,7 +50,7 @@ gal_view_factory_new_view (GalViewFactory *factory,
|
||||
const char *name)
|
||||
{
|
||||
g_return_val_if_fail (factory != NULL, 0);
|
||||
g_return_val_if_fail (GAL_IS_VIEW (factory), 0);
|
||||
g_return_val_if_fail (GAL_IS_VIEW_FACTORY (factory), 0);
|
||||
|
||||
if (GVF_CLASS (factory)->new_view)
|
||||
return GVF_CLASS (factory)->new_view (factory, name);
|
||||
|
||||
@ -85,16 +85,35 @@ gal_view_get_title (GalView *view)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* gal_view_clone
|
||||
* @view: The view to clone.
|
||||
*
|
||||
* Returns: The clone.
|
||||
*/
|
||||
GalView *
|
||||
gal_view_clone (GalView *view)
|
||||
{
|
||||
g_return_val_if_fail (view != NULL, NULL);
|
||||
g_return_val_if_fail (GAL_IS_VIEW (view), NULL);
|
||||
|
||||
if (GV_CLASS (view)->clone)
|
||||
return GV_CLASS (view)->clone (view);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gal_view_class_init (GtkObjectClass *object_class)
|
||||
{
|
||||
GalViewClass *klass = GAL_VIEW_CLASS(object_class);
|
||||
GalViewClass *klass = GAL_VIEW_CLASS(object_class);
|
||||
gal_view_parent_class = gtk_type_class (PARENT_TYPE);
|
||||
|
||||
klass->edit = NULL;
|
||||
klass->load_from_node = NULL;
|
||||
klass->save_to_node = NULL;
|
||||
klass->get_title = NULL;
|
||||
klass->clone = NULL;
|
||||
}
|
||||
|
||||
GtkType
|
||||
|
||||
@ -27,6 +27,7 @@ typedef struct {
|
||||
void (*save_to_node) (GalView *view,
|
||||
xmlNode *parent);
|
||||
const char *(*get_title) (GalView *view);
|
||||
GalView *(*clone) (GalView *view);
|
||||
} GalViewClass;
|
||||
|
||||
/* Standard functions */
|
||||
@ -44,5 +45,8 @@ void gal_view_save_to_node (GalView *view,
|
||||
/* Query functions */
|
||||
const char *gal_view_get_title (GalView *view);
|
||||
|
||||
/* Cloning the view */
|
||||
GalView *gal_view_clone (GalView *view);
|
||||
|
||||
|
||||
#endif /* _GAL_VIEW_H_ */
|
||||
|
||||
Reference in New Issue
Block a user