More Paolo changes

This commit is contained in:
Joaquín Cuenca Abela 2003-05-17 09:09:25 +00:00
parent 8e90bf3f2c
commit 7a0fb2bbd0
9 changed files with 214 additions and 265 deletions

View File

@ -1,3 +1,19 @@
2003-05-17 Paolo Borelli <pborelli@katamail.com>
* src/glade-clipboard.c: no need to call glade_editor_select_widget,
as it is already called when the selection_changed signal is
emitted. Move gpw->active_placeholder = NULL in the signal handler
in glade-project-window.c.
* src/glade-project.[ch]: decouple the project object from
glade-project-window.
* src/palette.[ch]: make the palette emit a signal when the user
choose a widget class instead of directly messing with the current
project.
* src/glade-project-window.[ch]: move here the things removed
from glade-project. Slightly change some APIs. Connect a handler
to the above signal. See also changes on glade-clipboard.c
* src/main.c: update for the above.
2003-05-14 Joaquin Cuenca Abela <e98cuenc@yahoo.com>
* src/glade-project-window.[ch]: Make the undo/redo toolbar items

View File

@ -22,9 +22,6 @@
* USA.
*/
#include <glib.h>
#include <gtk/gtk.h>
#include "glade.h"
#include "glade-clipboard-view.h"
#include "glade-clipboard.h"
@ -34,16 +31,15 @@
#include "glade-placeholder.h"
#include "glade-project.h"
#include "glade-packing.h"
#include "glade-editor.h"
static void
glade_clipboard_class_init (GladeClipboardClass * klass)
glade_clipboard_class_init (GladeClipboardClass *klass)
{
}
static void
glade_clipboard_init (GladeClipboard * clipboard)
glade_clipboard_init (GladeClipboard *clipboard)
{
clipboard->widgets = NULL;
clipboard->view = NULL;
@ -105,7 +101,7 @@ glade_clipboard_new ()
* Cut/Copy commands.
**/
static void
glade_clipboard_add (GladeClipboard * clipboard, GladeWidget * widget)
glade_clipboard_add (GladeClipboard *clipboard, GladeWidget *widget)
{
/*
* Add the GladeWidget to the list of children. And set the
@ -129,7 +125,7 @@ glade_clipboard_add (GladeClipboard * clipboard, GladeWidget * widget)
* Remove a GladeWidget from the Clipboard
**/
static void
glade_clipboard_remove (GladeClipboard * clipboard, GladeWidget * widget)
glade_clipboard_remove (GladeClipboard *clipboard, GladeWidget *widget)
{
clipboard->widgets = g_list_remove (clipboard->widgets, widget);
clipboard->curr = NULL;
@ -149,7 +145,7 @@ glade_clipboard_remove (GladeClipboard * clipboard, GladeWidget * widget)
* Cut a GladeWidget onto the Clipboard.
**/
GladePlaceholder *
glade_clipboard_cut (GladeClipboard * clipboard, GladeWidget * widget)
glade_clipboard_cut (GladeClipboard *clipboard, GladeWidget *widget)
{
GladePlaceholder *placeholder = NULL;
@ -180,7 +176,7 @@ glade_clipboard_cut (GladeClipboard * clipboard, GladeWidget * widget)
* Copy a GladeWidget onto the Clipboard.
**/
void
glade_clipboard_copy (GladeClipboard * clipboard, GladeWidget * widget)
glade_clipboard_copy (GladeClipboard *clipboard, GladeWidget *widget)
{
GladeWidget *copy;
@ -200,19 +196,25 @@ glade_clipboard_copy (GladeClipboard * clipboard, GladeWidget * widget)
* Paste a GladeWidget from the Clipboard.
**/
void
glade_clipboard_paste (GladeClipboard * clipboard,
GladePlaceholder * placeholder)
glade_clipboard_paste (GladeClipboard *clipboard,
GladePlaceholder *placeholder)
{
GladeProjectWindow *gpw;
GladeWidget *widget;
GladeWidget *parent;
GladeProject *project;
g_return_if_fail (GLADE_IS_CLIPBOARD (clipboard));
gpw = glade_project_window_get ();
widget = clipboard->curr;
/*
* FIXME: I think that GladePlaceholder should have a pointer
* to the project it belongs to, as GladeWidget does. This way
* the clipboard can be independent from glade-project-window.
* Paolo.
*/
project = glade_project_window_get_project ();
parent = glade_placeholder_get_parent (placeholder);
if (!widget)
@ -243,8 +245,7 @@ glade_clipboard_paste (GladeClipboard * clipboard,
glade_widget_set_default_packing_options (widget);
}
glade_widget_select (widget);
glade_editor_select_widget (gpw->editor, widget);
glade_project_selection_set (widget, TRUE);
/*
* This damned 'if' statement caused a 1 month delay.
@ -252,8 +253,6 @@ glade_clipboard_paste (GladeClipboard * clipboard,
if (GTK_IS_WIDGET (widget->widget))
gtk_widget_show_all (GTK_WIDGET (widget->widget));
gpw->active_placeholder = NULL;
/*
* Finally remove widget from clipboard.
*/

View File

@ -36,16 +36,19 @@
#include "glade-project.h"
#include "glade-widget.h"
#include "glade-widget-class.h"
#include "glade-project-window.h"
static void glade_palette_class_init (GladePaletteClass *class);
static void glade_palette_init (GladePalette *glade_palette);
enum
{
WIDGET_CLASS_CHOSEN,
LAST_SIGNAL
};
static guint glade_palette_signals[LAST_SIGNAL] = {0};
static GtkWindowClass *parent_class = NULL;
GType
@ -80,6 +83,17 @@ glade_palette_class_init (GladePaletteClass *class)
object_class = G_OBJECT_CLASS (class);
parent_class = g_type_class_peek_parent (class);
glade_palette_signals[WIDGET_CLASS_CHOSEN] =
g_signal_new ("toggled",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GladePaletteClass, widget_class_chosen),
NULL, NULL,
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE,
1,
G_TYPE_POINTER);
}
static GtkWidget *
@ -136,33 +150,19 @@ glade_palette_widget_create_icon_from_class (GladeWidgetClass *class)
static void
glade_palette_button_clicked (GtkWidget *button, GladePalette *palette)
{
GladeProjectWindow *gpw;
GladeWidgetClass *class;
GladeProject *project;
static gboolean dont_recurse = FALSE;
if (dont_recurse)
return;
if (!GTK_TOGGLE_BUTTON (button)->active)
return;
if (button == palette->dummy_button)
return;
class = g_object_get_data (G_OBJECT (button), "user");
g_return_if_fail (class != NULL);
gpw = glade_project_window_get ();
if (GLADE_WIDGET_CLASS_TOPLEVEL (class)) {
project = gpw->project;
g_return_if_fail (project != NULL);
glade_widget_new_toplevel (project, class);
dont_recurse = TRUE;
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (palette->dummy_button), TRUE);
dont_recurse = FALSE;
glade_project_window_set_add_class (gpw, NULL);
} else {
glade_project_window_set_add_class (gpw, class);
}
g_signal_emit (G_OBJECT (palette),
glade_palette_signals[WIDGET_CLASS_CHOSEN], 0, class);
}
static gboolean

View File

@ -73,6 +73,7 @@ struct _GladePaletteClass
{
GtkVBoxClass parent_class;
void (*widget_class_chosen) (GladePalette *palette, GladeWidgetClass *class);
};
GladePalette *glade_palette_new (GList *catalogs);

View File

@ -25,6 +25,8 @@
#include <config.h>
#endif
#include <string.h>
#include "glade.h"
#include "glade-palette.h"
#include "glade-editor.h"
@ -43,16 +45,47 @@
#include <gdk/gdkkeysyms.h>
#include <gtk/gtkstock.h>
static void
gpw_refresh_title (GladeProjectWindow *gpw)
{
gchar *title;
if (gpw->project)
title = g_strdup_printf ("glade3 - %s", gpw->project->name);
else
title = g_strdup_printf ("glade3");
gtk_window_set_title (GTK_WINDOW (gpw->window), title);
g_free (title);
}
static void
gpw_refresh_project_entry (GladeProject *project)
{
GladeProjectWindow *gpw;
GtkWidget *item;
GtkWidget *label;
gpw = glade_project_window_get ();
item = gtk_item_factory_get_item (gpw->item_factory, project->entry.path);
label = gtk_bin_get_child (GTK_BIN (item));
/* Change the menu item's label */
gtk_label_set_text (GTK_LABEL (label), project->name);
/* Update the path entry, for future changes. */
g_free (project->entry.path);
project->entry.path = g_strdup_printf ("/Project/%s", project->name);
}
static void
gpw_new_cb (void)
{
GladeProjectWindow *gpw;
GladeProject *project;
project = glade_project_new (TRUE);
gpw = glade_project_window_get ();
glade_project_window_add_project (gpw, project);
GladeProject *project;
project = glade_project_new (TRUE);
glade_project_window_add_project (project);
}
static void
@ -60,6 +93,7 @@ gpw_on_open_filesel_ok (GtkWidget *widget, gpointer not_used)
{
GtkWidget *filesel;
const gchar *path;
GladeProject *project;
filesel = gtk_widget_get_toplevel (widget);
@ -70,7 +104,13 @@ gpw_on_open_filesel_ok (GtkWidget *widget, gpointer not_used)
if (!path)
return;
glade_project_open (path);
project = glade_project_open (path);
if (!project) {
glade_util_ui_warn (_("Could not open project."));
return;
}
glade_project_window_add_project (project);
}
static void
@ -94,6 +134,7 @@ gpw_on_save_filesel_ok (GtkWidget *widget, GladeProject *project)
{
GtkWidget *filesel;
const gchar *path;
GladeProjectWindow *gpw;
filesel = gtk_widget_get_toplevel (widget);
@ -104,7 +145,17 @@ gpw_on_save_filesel_ok (GtkWidget *widget, GladeProject *project)
if (!path)
return;
glade_project_save (project, path);
gpw = glade_project_window_get ();
if (!glade_project_save (project, path)) {
glade_util_ui_warn (_("Invalid file name"));
return;
}
gpw_refresh_project_entry (project);
gpw_refresh_title (gpw);
glade_util_flash_message (gpw->statusbar_actions_context_id,
_("Project '%s' saved"), project->name);
}
static void
@ -220,6 +271,7 @@ gpw_close_cb (void)
GladeProjectWindow *gpw;
GladeProject *project;
gboolean close;
gchar *item_path;
GList *list;
gpw = glade_project_window_get ();
@ -234,7 +286,8 @@ gpw_close_cb (void)
return;
}
gtk_item_factory_delete_entry (gpw->item_factory, &(project->entry));
item_path = g_strdup_printf ("/Project/%s", project->name);
gtk_item_factory_delete_item (gpw->item_factory, item_path);
for (list = project->widgets; list; list = list->next) {
GtkWidget *widget;
@ -255,11 +308,11 @@ gpw_close_cb (void)
glade_project_view_set_project (view, NULL);
}
gpw->project = NULL;
glade_project_window_refresh_title (gpw);
gpw_refresh_title (gpw);
return;
}
glade_project_window_set_project (gpw, gpw->projects->data);
glade_project_window_set_project (gpw->projects->data);
}
static void
@ -384,6 +437,24 @@ gpw_hide_palette_on_delete (GtkWidget *palette, gpointer not_used,
return TRUE;
}
static void
gpw_palette_button_clicked (GladePalette *palette, GladeWidgetClass *class)
{
GladeProjectWindow *gpw;
GladeProject *project;
gpw = glade_project_window_get ();
if (GLADE_WIDGET_CLASS_TOPLEVEL (class)) {
project = gpw->project;
g_return_if_fail (project != NULL);
glade_widget_new_toplevel (project, class);
glade_project_window_set_add_class (gpw, NULL);
} else {
glade_project_window_set_add_class (gpw, class);
}
}
static void
gpw_create_palette (GladeProjectWindow *gpw)
{
@ -404,6 +475,9 @@ gpw_create_palette (GladeProjectWindow *gpw)
g_signal_connect (G_OBJECT (gpw->palette_window), "delete_event",
G_CALLBACK (gpw_hide_palette_on_delete), gpw->item_factory);
g_signal_connect (G_OBJECT (gpw->palette), "toggled",
G_CALLBACK (gpw_palette_button_clicked), NULL);
palette_item = gtk_item_factory_get_item (gpw->item_factory,
"<main>/View/Palette");
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (palette_item), TRUE);
@ -1022,6 +1096,7 @@ glade_project_window_selection_changed_cb (GladeProject *project,
if (num == 1) {
glade_editor_select_widget (gpw->editor, list->data);
gpw->active_widget = list->data;
gpw->active_placeholder = NULL;
} else {
glade_editor_select_widget (gpw->editor, NULL);
}
@ -1029,13 +1104,16 @@ glade_project_window_selection_changed_cb (GladeProject *project,
}
void
glade_project_window_set_project (GladeProjectWindow *gpw, GladeProject *project)
glade_project_window_set_project (GladeProject *project)
{
GladeProjectWindow *gpw;
GladeProjectView *view;
GList *list;
g_return_if_fail (GLADE_IS_PROJECT (project));
gpw = glade_project_window_get ();
if (g_list_find (gpw->projects, project) == NULL) {
g_warning ("Could not set project because it could not "
" be found in the gpw->project list\n");
@ -1043,7 +1121,7 @@ glade_project_window_set_project (GladeProjectWindow *gpw, GladeProject *project
}
gpw->project = project;
glade_project_window_refresh_title (gpw);
gpw_refresh_title (gpw);
list = gpw->views;
for (; list != NULL; list = list->next) {
@ -1059,15 +1137,6 @@ glade_project_window_set_project (GladeProjectWindow *gpw, GladeProject *project
glade_project_selection_changed (project);
}
void
glade_project_window_set_project_cb (GladeProject *project)
{
GladeProjectWindow *gpw;
gpw = glade_project_window_get ();
glade_project_window_set_project (gpw, project);
}
static void
gpw_widget_name_changed_cb (GladeProject *project, GladeWidget *widget, GladeEditor *editor)
{
@ -1075,16 +1144,35 @@ gpw_widget_name_changed_cb (GladeProject *project, GladeWidget *widget, GladeEdi
}
void
glade_project_window_add_project (GladeProjectWindow *gpw, GladeProject *project)
{
g_return_if_fail (GLADE_IS_PROJECT_WINDOW (gpw));
g_return_if_fail (GLADE_IS_PROJECT (project));
gpw->projects = g_list_prepend (gpw->projects, project);
glade_project_window_add_project (GladeProject *project)
{
GladeProjectWindow *gpw;
GList *list;
/* Add the project in the /Project menu. */
gtk_item_factory_create_item (gpw->item_factory, &(project->entry),
project, 1);
g_return_if_fail (GLADE_IS_PROJECT (project));
gpw = glade_project_window_get ();
/* If the project was previously loaded, don't re-load */
for (list = gpw->projects; list; list = list->next) {
GladeProject *cur_project = GLADE_PROJECT (list->data);
if (cur_project->path != NULL && !strcmp (cur_project->path, project->path)) {
glade_project_window_set_project (cur_project);
return;
}
}
gpw->projects = g_list_prepend (gpw->projects, project);
/* Add the project in the /Project menu. */
project->entry.path = g_strdup_printf ("/Project/%s", project->name);
project->entry.accelerator = NULL;
project->entry.callback = glade_project_window_set_project;
project->entry.callback_action = 0;
project->entry.item_type = g_strdup ("<Item>");
gtk_item_factory_create_item (gpw->item_factory, &(project->entry), project, 1);
/* connect the widget_changed_name signal to the editor, so that changes to the widget
* name external to the properties editor (as when the user undo a widget name change)
@ -1092,7 +1180,7 @@ glade_project_window_add_project (GladeProjectWindow *gpw, GladeProject *project
g_signal_connect (G_OBJECT (project), "widget_name_changed",
G_CALLBACK (gpw_widget_name_changed_cb), gpw->editor);
glade_project_window_set_project (gpw, project);
glade_project_window_set_project (project);
}
void
@ -1130,8 +1218,6 @@ glade_project_window_change_menu_label (GladeProjectWindow *gpw,
void
glade_project_window_refresh_undo_redo (GladeProjectWindow *gpw)
{
GtkWidget *undo_widget;
GtkWidget *redo_widget;
GList *prev_redo_item;
GList *undo_item;
GList *redo_item;
@ -1140,9 +1226,6 @@ glade_project_window_refresh_undo_redo (GladeProjectWindow *gpw)
GladeProject *project;
g_return_if_fail (GLADE_IS_PROJECT_WINDOW (gpw));
undo_widget = gtk_item_factory_get_item (gpw->item_factory, "<main>/Edit/Undo");
redo_widget = gtk_item_factory_get_item (gpw->item_factory, "<main>/Edit/Redo");
project = gpw->project;
if (project == NULL) {
@ -1164,20 +1247,6 @@ glade_project_window_refresh_undo_redo (GladeProjectWindow *gpw)
gtk_widget_set_sensitive (gpw->toolbar_redo, redo_description != NULL);
}
void
glade_project_window_refresh_title (GladeProjectWindow *gpw)
{
gchar *title;
if (gpw->project)
title = g_strdup_printf ("glade3 - %s", gpw->project->name);
else
title = g_strdup_printf ("glade3");
gtk_window_set_title (GTK_WINDOW (gpw->window), title);
g_free (title);
}
void
glade_project_window_set_add_class (GladeProjectWindow *gpw, GladeWidgetClass *class)
{
@ -1199,8 +1268,12 @@ glade_project_window_get_project (void)
}
void
glade_project_window_show_all (GladeProjectWindow *gpw)
glade_project_window_show_all ()
{
GladeProjectWindow *gpw;
gpw = glade_project_window_get ();
gtk_widget_show_all (gpw->window);
gpw_show_palette (gpw);
gpw_show_editor (gpw);

View File

@ -47,7 +47,7 @@ struct _GladeProjectWindow
* placeholder
*/
GList *views; /* A list of GladeProjectView item */
GList *views; /* A list of GladeProjectView item */
GList *projects; /* The list of Projects */
guint project_selection_changed_signal;
@ -57,16 +57,14 @@ struct _GladeProjectWindow
GladeProjectWindow * glade_project_window_new (GList *catalogs);
GladeProjectWindow * glade_project_window_get ();
GladeProject * glade_project_window_get_project ();
void glade_project_window_show_all (GladeProjectWindow *gpw);
void glade_project_window_show_all ();
void glade_project_window_set_add_class (GladeProjectWindow *gpw, GladeWidgetClass *class);
void glade_project_window_set_project_cb (GladeProject *project);
void glade_project_window_set_project (GladeProject *project);
void glade_project_window_set_project (GladeProjectWindow *project_window,
GladeProject *project);
void glade_project_window_add_project (GladeProjectWindow *gpw,
GladeProject *project);
void glade_project_window_add_project (GladeProject *project);
void glade_project_window_refresh_undo_redo (GladeProjectWindow *gpw);
void glade_project_window_refresh_title (GladeProjectWindow *gpw);

View File

@ -28,7 +28,6 @@
#include "glade.h"
#include "glade-project.h"
#include "glade-project-window.h"
#include "glade-widget.h"
#include "glade-widget-class.h"
#include "glade-xml-utils.h"
@ -37,7 +36,6 @@
static void glade_project_class_init (GladeProjectClass * klass);
static void glade_project_init (GladeProject *project);
static void glade_project_destroy (GtkObject *object);
enum
{
@ -119,11 +117,8 @@ glade_project_class_init (GladeProjectClass * klass)
klass->remove_widget = NULL;
klass->widget_name_changed = NULL;
klass->selection_changed = NULL;
object_class->destroy = glade_project_destroy;
}
static void
glade_project_init (GladeProject * project)
{
@ -132,65 +127,6 @@ glade_project_init (GladeProject * project)
project->selection = NULL;
project->undo_stack = NULL;
project->prev_redo_item = NULL;
/* Setup the /Project menu item */
project->entry.accelerator = NULL;
project->entry.callback = glade_project_window_set_project_cb;
project->entry.callback_action = 0;
project->entry.item_type = g_strdup ("<Item>");
}
static void
glade_project_destroy (GtkObject *object)
{
GladeProject *project;
project = GLADE_PROJECT (object);
}
static GladeProject *
glade_project_check_previously_loaded (const gchar *path)
{
GladeProjectWindow *gpw;
GladeProject *project;
GList *list;
gpw = glade_project_window_get ();
list = gpw->projects;
for (; list; list = list->next) {
project = GLADE_PROJECT (list->data);
if (project->path != NULL && !strcmp (project->path, path))
return project;
}
return NULL;
}
static void
glade_project_update_menu_path (GladeProject *project)
{
g_free (project->entry.path);
project->entry.path = g_strdup_printf ("/Project/%s", project->name);
}
static void
glade_project_refresh_menu_item (GladeProject *project)
{
GladeProjectWindow *gpw;
GtkWidget *label;
gpw = glade_project_window_get ();
label = gtk_bin_get_child (GTK_BIN (gtk_item_factory_get_item (gpw->item_factory, project->entry.path)));
/* Change the menu item's label */
gtk_label_set_text (GTK_LABEL (label), project->name);
/* Update the path entry, for future changes. */
glade_project_update_menu_path (project);
}
GladeProject *
@ -204,17 +140,9 @@ glade_project_new (gboolean untitled)
if (untitled)
project->name = g_strdup_printf ("Untitled %i", i++);
glade_project_update_menu_path (project);
return project;
}
static void
glade_project_set_changed (GladeProject *project, gboolean changed)
{
project->changed = changed;
}
void
glade_project_selection_changed (GladeProject *project)
{
@ -255,7 +183,7 @@ glade_project_add_widget (GladeProject *project,
g_return_if_fail (GTK_IS_OBJECT (project));
glade_project_add_widget_real (project, widget);
glade_project_set_changed (project, TRUE);
project->changed = TRUE;
}
/**
@ -293,11 +221,10 @@ glade_project_remove_widget (GladeWidget *widget)
g_return_if_fail (widget != NULL);
project = widget->project;
glade_project_remove_widget_real (project, widget);
glade_project_remove_widget_real (project, widget);
glade_project_selection_changed (project);
glade_project_set_changed (project, TRUE);
project->changed = TRUE;
}
void
@ -310,7 +237,7 @@ glade_project_widget_name_changed (GladeProject *project,
gtk_signal_emit (GTK_OBJECT (project),
glade_project_signals [WIDGET_NAME_CHANGED], widget);
glade_project_set_changed (project, TRUE);
project->changed = TRUE;
}
/**
@ -378,18 +305,6 @@ glade_project_new_widget_name (GladeProject *project, const char *base_name)
return NULL;
}
void
glade_project_selection_clear (GladeProject *project, gboolean emit_signal)
{
@ -564,8 +479,15 @@ glade_project_new_from_node (GladeXmlNode *node)
return project;
}
static GladeProject *
glade_project_open_from_file (const gchar *path)
/**
* glade_project_open:
* @path:
*
* Open a project at the given path.
* On success returns the opened project else NULL.
**/
GladeProject *
glade_project_open (const gchar *path)
{
GladeXmlContext *context;
GladeXmlDoc *doc;
@ -582,15 +504,20 @@ glade_project_open_from_file (const gchar *path)
project->path = g_strdup_printf ("%s", path);
g_free (project->name);
project->name = g_path_get_basename (project->path);
/* Setup the menu item to be shown in the /Project menu. */
glade_project_update_menu_path (project);
}
return project;
}
static gboolean
glade_project_save_to_file (GladeProject *project, const gchar *full_path)
/**
* glade_project_save:
* @project:
* @path
*
* Save the project to the given path. Returns TRUE on success.
**/
gboolean
glade_project_save (GladeProject *project, const gchar *path)
{
GladeXmlContext *context;
GladeXmlNode *root;
@ -609,14 +536,14 @@ glade_project_save_to_file (GladeProject *project, const gchar *full_path)
return FALSE;
glade_xml_doc_set_root (xml_doc, root);
ret = glade_xml_doc_save (xml_doc, full_path);
ret = glade_xml_doc_save (xml_doc, path);
glade_xml_doc_free (xml_doc);
if (ret < 0)
return FALSE;
g_free (project->path);
project->path = g_strdup_printf ("%s", full_path);
project->path = g_strdup_printf ("%s", path);
g_free (project->name);
project->name = g_path_get_basename (project->path);
@ -625,65 +552,3 @@ glade_project_save_to_file (GladeProject *project, const gchar *full_path)
return TRUE;
}
/**
* glade_project_open:
* @path:
*
* Open a project at the given path. Returns TRUE on success.
**/
gboolean
glade_project_open (const gchar *path)
{
GladeProjectWindow *gpw;
GladeProject *project;
g_return_val_if_fail (path != NULL, FALSE);
gpw = glade_project_window_get ();
/* If the project is previously loaded, don't re-load */
if ((project = glade_project_check_previously_loaded (path)) != NULL) {
glade_project_window_set_project (gpw, project);
return TRUE;
}
project = glade_project_open_from_file (path);
if (!project) {
glade_util_ui_warn (_("Could not open project."));
return FALSE;
}
glade_project_window_add_project (gpw, project);
return TRUE;
}
/**
* glade_project_save:
* @project:
* @path
*
* Save the project to the given path. Returns TRUE on success.
**/
gboolean
glade_project_save (GladeProject *project, const gchar *path)
{
GladeProjectWindow *gpw;
g_return_val_if_fail (GLADE_IS_PROJECT (project), FALSE);
g_return_val_if_fail (path != NULL, FALSE);
gpw = glade_project_window_get ();
if (!glade_project_save_to_file (project, path)) {
glade_util_ui_warn (_("Invalid file name"));
return FALSE;
}
glade_project_refresh_menu_item (project);
glade_project_window_refresh_title (gpw);
glade_util_flash_message (gpw->statusbar_actions_context_id,
_("Project '%s' saved"), project->name);
return TRUE;
}

View File

@ -61,11 +61,8 @@ guint glade_project_get_type (void);
GladeProject *glade_project_new (gboolean untitled);
/* Project operations */
GladeProject *glade_project_open (const gchar *path);
gboolean glade_project_save (GladeProject *project, const gchar *path);
gboolean glade_project_open (const gchar *path);
/* Widget related stuff */
void glade_project_remove_widget (GladeWidget *widget);

View File

@ -109,7 +109,6 @@ glade_init ()
int
main (int argc, char *argv[])
{
GladeProjectWindow *gpw;
GList *files = NULL;
#ifdef G_OS_UNIX
poptContext popt_context;
@ -141,17 +140,18 @@ main (int argc, char *argv[])
return 0;
}
gpw = glade_project_window_get ();
glade_project_window_show_all (gpw);
glade_project_window_show_all ();
if (files) {
for (; files != NULL; files = files->next) {
glade_project_open (files->data);
GladeProject *project;
project = glade_project_open (files->data);
glade_project_window_add_project (project);
}
} else {
GladeProject *project;
project = glade_project_new (TRUE);
glade_project_window_add_project (gpw, project);
glade_project_window_add_project (project);
}
gtk_main ();