diff options
Diffstat (limited to 'tools/glade/glade/glade_project.h')
-rw-r--r-- | tools/glade/glade/glade_project.h | 373 |
1 files changed, 373 insertions, 0 deletions
diff --git a/tools/glade/glade/glade_project.h b/tools/glade/glade/glade_project.h new file mode 100644 index 00000000..f26c5b3e --- /dev/null +++ b/tools/glade/glade/glade_project.h @@ -0,0 +1,373 @@ +/* Gtk+ User Interface Builder + * Copyright (C) 1998-1999 Damon Chaplin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ +#ifndef GLADE_PROJECT_H +#define GLADE_PROJECT_H + +#include "gbwidget.h" +#include "glade.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* + * GladeProject is a subclass of GtkObject and contains a project's data, + * which is viewed in a GladeProjectView. + */ + +#define GLADE_PROJECT(obj) GTK_CHECK_CAST (obj, glade_project_get_type (), GladeProject) +#define GLADE_PROJECT_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, glade_project_get_type (), GladeProjectClass) +#define GLADE_IS_PROJECT(obj) GTK_CHECK_TYPE (obj, glade_project_get_type ()) + + +typedef enum +{ + GLADE_LANGUAGE_C, + GLADE_LANGUAGE_CPP, + GLADE_LANGUAGE_ADA95, + GLADE_LANGUAGE_PERL, + GLADE_LANGUAGE_EIFFEL +} GladeLanguageType; + +extern gchar *GladeLanguages[]; +extern gint GladeNumLanguages; + +typedef struct _GladeProjectClass GladeProjectClass; + +/* All directories are absolute paths in GladeProject, but some are saved in + the XML file as relative paths so the project can be placed in different + directories (e.g. it should still work if multiple developers check it out + from a CVS repository into different directories.) */ +struct _GladeProject +{ + GtkObject object; + + gchar *name; + + /* The name of the executable to build. */ + gchar *program_name; + + /* This is the XML file. */ + gchar *xml_filename; + + /* This is the project directory, which defaults to the directory which the + XML file is in. */ + gchar *directory; + + /* These are the directories for the source code and pixmaps files, and + default to the project directory and the 'pixmaps' subdirectory. */ + gchar *source_directory; + gchar *pixmaps_directory; + + /* The currently selected language of the project, an index into + GladeLanguages[]. */ + GladeLanguageType language; + + /* If the project has changed since the last time it was saved. + FIXME: this isn't completely supported yet. */ + gboolean changed; + + /* The windows, dialogs & popup menus making up the project. */ + GList *components; + + /* A hash table used to ensure that all widget names are unique. */ + GHashTable *unique_id_hash; + + /* A list of absolute pixmap filenames used in the project. The same file + may appear more than once, so we don't need to use refcounting. */ + GList *pixmap_filenames; + + /* This is the project's 'current directory', used when opening/saving + files. We may want separate directories for opening/saving/writing + source. */ + gchar *current_directory; + + /* This is TRUE if we are building a Gnome application. It defaults to + TRUE if Glade has been compiled with Gnome support, though it can be + set to FALSE. If Glade doesn't have Gnome support it must be FALSE, + and we need to check that any projects loaded aren't Gnome projects. */ + gboolean gnome_support; + + /* This is TRUE to add support for Gnome DB. */ + gboolean gnome_db_support; + + + /* + * C Source code options. + */ + + /* This is TRUE if translatable strings are output using the standard + gettext macros, _("") and N_(""). */ + gboolean gettext_support; + + /* This is TRUE if gtk_widget_set_name () is called to set the name of + each widget when they are created. Useful when using rc files. */ + gboolean use_widget_names; + + /* This is TRUE if a main.c file is output with a main() function. + Though an existing main.c will not be overwritten. */ + gboolean output_main_file; + + /* This is TRUE if a support file (support.c by default) is output with the + get_widget() function and other support functions. */ + gboolean output_support_files; + + /* This is TRUE if Makefile.am, configure.in, autogen.sh, m4 macros etc. + are output. */ + gboolean output_build_files; + + /* This is TRUE if backups are made of the source files. */ + gboolean backup_source_files; + + /* This is TRUE to add support for Gnome Help. Currently we just output + the GNOME_UIINFO_HELP macro at the top of the Help GnomeUIInfo structs, + but we will output a template help file with build files in future. */ + gboolean gnome_help_support; + + /* FIXME: These will be deleted soon, when we support better code output. */ + gchar *main_source_file; + gchar *main_header_file; + gchar *handler_source_file; + gchar *handler_header_file; + + gchar *support_source_file; + gchar *support_header_file; + + + /* + * libglade options. + */ + + /* This is TRUE to output a file containing all the translatable strings in + the interface, wrapped in gettext macros. When using libglade, this file + can be added to an app's POTFILES.in so the interface is translated. */ + gboolean output_translatable_strings; + + /* This is the file in which translatable strings are saved, useful when + XML interfaces are loaded dynamically by libglade. */ + gchar *translatable_strings_file; +}; + + +struct _GladeProjectClass +{ + GtkObjectClass parent_class; + + void (*add_component) (GladeProject *project, + GtkWidget *component); + void (*remove_component) (GladeProject *project, + GtkWidget *component); + void (*component_changed) (GladeProject *project, + GtkWidget *component); +}; + + +/* FIXME: Currently we only support one project open at once, and this is it. + But we will support multiple projects in future, so try not to use this + too much. */ +extern GladeProject *current_project; + + +GType glade_project_get_type (void); +GladeProject* glade_project_new (void); + +/* Note that even if this command succeeds, there may be some error messages + which should be displayed (e.g. some widget properties may be invalid). + The list of error messages should be freed, as well as each message. */ +gboolean glade_project_open (const gchar *xml_filename, + GladeProject **project); +GladeError* glade_project_save (GladeProject *project); + +/* If an error occurs a GladeError will be returned, which should be freed. */ +GladeError* glade_project_write_source (GladeProject *project); + +/* This sets/resets the project's changed flag. */ +void glade_project_set_changed (GladeProject *project, + gboolean changed); + +/* + * These are for ensuring that widget names are unique. + */ + +/* This returns a new unique widget name, based on the given base name + (often a widget class name). Any leading 'Gtk' or 'Gnome' is stripped, + it is converted to lower case, and a number is appended to ensure it is + unique. */ +gchar* glade_project_new_widget_name (GladeProject *project, + const gchar *base_name); + +/* This releases the given name, so it may possibly be reused in future. + It is used when a widget is destroyed or its name is changed. */ +void glade_project_release_widget_name (GladeProject *project, + const gchar *name); + +/* This reserves the given name, so that no other widgets will be given it. + It is used when loading the XML file. */ +void glade_project_reserve_name (GladeProject *project, + const gchar *name); + +/* This ensures that the given widget and all its descendants have been named, + creating default names for them if necessary. */ +void glade_project_ensure_widgets_named (GladeProject *project, + GtkWidget *widget); + +/* + * These are for loading & saving the project options to the XML file. + */ +gboolean glade_project_load_options (GladeProject *project); +GladeError* glade_project_save_options (GladeProject *project, + FILE *fp); + + +/* + * Accessor functions. + */ +gchar* glade_project_get_name (GladeProject *project); +void glade_project_set_name (GladeProject *project, + const gchar *name); + +gchar* glade_project_get_program_name (GladeProject *project); +void glade_project_set_program_name (GladeProject *project, + const gchar *program_name); + +gchar* glade_project_get_xml_filename (GladeProject *project); +void glade_project_set_xml_filename (GladeProject *project, + const gchar *filename); + +gchar* glade_project_get_directory (GladeProject *project); +void glade_project_set_directory (GladeProject *project, + const gchar *directory); + +gchar* glade_project_get_source_directory (GladeProject *project); +void glade_project_set_source_directory (GladeProject *project, + const gchar *directory); + +gchar* glade_project_get_pixmaps_directory (GladeProject *project); +void glade_project_set_pixmaps_directory (GladeProject *project, + const gchar *directory); + +gint glade_project_get_language (GladeProject *project); +void glade_project_set_language (GladeProject *project, + GladeLanguageType language); +gboolean glade_project_set_language_name (GladeProject *project, + const gchar *language_name); + +gboolean glade_project_get_gnome_support (GladeProject *project); +void glade_project_set_gnome_support (GladeProject *project, + gboolean gnome_support); + +gboolean glade_project_get_gnome_db_support (GladeProject *project); +void glade_project_set_gnome_db_support (GladeProject *project, + gboolean gnome_db_support); + +void glade_project_add_component (GladeProject *project, + GtkWidget *component); +void glade_project_show_component (GladeProject *project, + GtkWidget *component); +void glade_project_component_changed (GladeProject *project, + GtkWidget *component); +void glade_project_foreach_component (GladeProject *project, + GtkCallback callback, + gpointer callback_data); +void glade_project_remove_component (GladeProject *project, + GtkWidget *component); + +void glade_project_add_associated_window (GladeProject *project, + GtkWidget *window); +void glade_project_remove_associated_window (GladeProject *project, + GtkWidget *window); + +/* These add/remove pixmaps to the project. The same filename can appear + more than once in the project's list of pixmaps, so refcounting isn't + needed. The filename is copied. */ +void glade_project_add_pixmap (GladeProject *project, + const gchar *filename); +void glade_project_remove_pixmap (GladeProject *project, + const gchar *filename); + +/* This ensures that all pixmaps are in the project's pixmaps directory, + by copying them if necessary. */ +GladeError* glade_project_copy_all_pixmaps (GladeProject *project); + +gchar* glade_project_get_current_directory (GladeProject *project); +void glade_project_set_current_directory (GladeProject *project, + const gchar *directory); + + +/* + * C Output options. + */ +gboolean glade_project_get_gettext_support (GladeProject *project); +void glade_project_set_gettext_support (GladeProject *project, + gboolean gettext_support); +gboolean glade_project_get_use_widget_names (GladeProject *project); +void glade_project_set_use_widget_names (GladeProject *project, + gboolean use_widget_names); +gboolean glade_project_get_output_main_file (GladeProject *project); +void glade_project_set_output_main_file (GladeProject *project, + gboolean output_main_file); +gboolean glade_project_get_output_support_files (GladeProject *project); +void glade_project_set_output_support_files (GladeProject *project, + gboolean output_support_files); +gboolean glade_project_get_output_build_files (GladeProject *project); +void glade_project_set_output_build_files (GladeProject *project, + gboolean output_build_files); +gboolean glade_project_get_backup_source_files (GladeProject *project); +void glade_project_set_backup_source_files (GladeProject *project, + gboolean backup_source_files); +gboolean glade_project_get_gnome_help_support (GladeProject *project); +void glade_project_set_gnome_help_support (GladeProject *project, + gboolean gnome_help_support); + +/* These will be removed when the source code output is improved. */ +void glade_project_get_source_files (GladeProject *project, + gchar **main_source_file, + gchar **main_header_file, + gchar **handler_source_file, + gchar **handler_header_file); +void glade_project_set_source_files (GladeProject *project, + const gchar *main_source_file, + const gchar *main_header_file, + const gchar *handler_source_file, + const gchar *handler_header_file); + +gchar* glade_project_get_support_source_file (GladeProject *project); +void glade_project_set_support_source_file (GladeProject *project, + const gchar* support_source_file); + +gchar* glade_project_get_support_header_file (GladeProject *project); +void glade_project_set_support_header_file (GladeProject *project, + const gchar* support_header_file); + + +/* + * libglade options. + */ +gboolean glade_project_get_output_translatable_strings (GladeProject *project); +void glade_project_set_output_translatable_strings (GladeProject *project, + gboolean output_translatable_strings); + +gchar* glade_project_get_translatable_strings_file (GladeProject *project); +void glade_project_set_translatable_strings_file (GladeProject *project, + const gchar* file); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* GLADE_PROJECT_H */ |