diff options
-rw-r--r-- | shell/ChangeLog | 40 | ||||
-rw-r--r-- | shell/Evolution-Storage.idl | 21 | ||||
-rw-r--r-- | shell/Makefile.am | 29 | ||||
-rw-r--r-- | shell/e-shell-view-menu.c | 19 | ||||
-rw-r--r-- | shell/evolution-storage-listener.h | 6 | ||||
-rw-r--r-- | shell/evolution-storage.c | 104 | ||||
-rw-r--r-- | shell/evolution-storage.h | 5 | ||||
-rw-r--r-- | shell/evolution-test-component.c | 84 | ||||
-rw-r--r-- | shell/glade/Makefile.am | 11 | ||||
-rw-r--r-- | shell/glade/e-shell-shared-folder-picker-dialog.glade | 301 |
10 files changed, 571 insertions, 49 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog index b6f2efee9d..e306621303 100644 --- a/shell/ChangeLog +++ b/shell/ChangeLog @@ -1,3 +1,43 @@ +2002-05-10 Ettore Perazzoli <ettore@ximian.com> + + * evolution-test-component.c: Added some tests for the custom + storage. + + * evolution-storage.c: New signal DISCOVER_SHARED_FOLDER. + (impl_Storage_asyncXferFolder): Renamed from + impl_Storage_async_xfer_folder. + (impl_Storage_asyncRemoveFolder): Renamed from + impl_Storage_async_remove_folder. + (impl_Storage_asyncCreateFolder): Renamed from + impl_Storage_async_create_folder. + (impl_Storage_asyncOpenFolder): Renamed from + impl_storage_async_open_folder. + (impl_Storage_addListener): Renamed from + impl_Storage_add_listener. + (impl_Storage_removeListener): Renamed from + impl_Storage_remove_listener. + (impl_Storage_asyncDiscoverSharedFolder): New, implementation for + ::asyncDiscoverSharedFolder. + (evolution_storage_get_epv): Install the CORBA method here. + (class_init): Set up the "discover_shared_folder" signal here. + (e_marshal_NONE__POINTER_POINTER): Yet Another Marshaller. Die + die die. + + * Evolution-Storage.idl (Storage::asyncDiscoverSharedFolder): New + method. + (StorageListener::notifySharedFolderDiscovered): New method. + + * e-shell-shared-folder-picker-dialog.c: New. + * e-shell-shared-folder-picker-dialog.h: New. + + * e-shell-view-menu.c (command_open_other_users_folder): New, + implementation for the FileOpenOtherUsersFolder verb. + + * Makefile.am: Generate stubs and skels for + Evolution::Addressbook::SelectNames as well. + + * glade/e-shell-shared-folder-picker-dialog.glade: New. + 2002-05-09 Ettore Perazzoli <ettore@ximian.com> * e-local-storage.c (construct): Pass %FALSE as diff --git a/shell/Evolution-Storage.idl b/shell/Evolution-Storage.idl index be6eaafcab..3660e3d74d 100644 --- a/shell/Evolution-Storage.idl +++ b/shell/Evolution-Storage.idl @@ -37,6 +37,13 @@ module Evolution { string path; }; + struct DiscoverSharedFolderResult { + Result result; + string storagePath; + string physicalURI; + string type; + }; + /* The name of the storage. */ readonly attribute string name; @@ -46,6 +53,8 @@ module Evolution { /* Flat list of the folders in the storage. */ readonly attribute FolderList folderList; + /* Folder Operations. */ + void asyncCreateFolder (in string path, in string type, in string description, @@ -61,11 +70,23 @@ module Evolution { in boolean remove_source, in Bonobo::Listener listener); + /* Open remote nodes. */ + void asyncOpenFolder (in string path); + /* Set unread count. */ + void updateFolder (in string path, in long unread_count); + /* Shared folders. */ + + void asyncDiscoverSharedFolder (in string user, + in string folder_name, + in Bonobo::Listener listener); + + /* Listener handling. */ + void addListener (in StorageListener listener) raises (AlreadyListening); diff --git a/shell/Makefile.am b/shell/Makefile.am index ea885f7233..c86fff6633 100644 --- a/shell/Makefile.am +++ b/shell/Makefile.am @@ -13,7 +13,7 @@ INCLUDES = -O \ -DG_LOG_DOMAIN=\"evolution-shell\" \ $(SHELL_CFLAGS) -# CORBA stuff +# Shell CORBA stuff IDLS = \ Evolution-Activity.idl \ @@ -43,6 +43,21 @@ $(IDL_GENERATED): $(IDLS) $(ORBIT_IDL) -I $(srcdir) -I $(datadir)/idl `$(GNOME_CONFIG) --cflags idl` \ $(srcdir)/Evolution.idl +# SelectNames CORBA stuff + +SELECT_NAMES_IDL = \ + $(top_srcdir)/addressbook/gui/component/select-names/Evolution-Addressbook-SelectNames.idl + +SELECT_NAMES_IDL_GENERATED = \ + Evolution-Addressbook-SelectNames.h \ + Evolution-Addressbook-SelectNames-common.c \ + Evolution-Addressbook-SelectNames-skels.c \ + Evolution-Addressbook-SelectNames-stubs.c + +$(SELECT_NAMES_IDL_GENERATED): $(SELECT_NAMES_IDL) + $(ORBIT_IDL) -I $(srcdir) -I $(datadir)/idl `$(GNOME_CONFIG) --cflags idl` \ + $(SELECT_NAMES_IDL) + # IDL install idldir = $(datadir)/idl @@ -102,6 +117,7 @@ libeshell_la_SOURCES = \ bin_PROGRAMS = evolution evolution_SOURCES = \ + $(SELECT_NAMES_IDL_GENERATED) \ e-activity-handler.c \ e-activity-handler.h \ e-component-info.c \ @@ -151,6 +167,8 @@ evolution_SOURCES = \ e-shell-offline-handler.h \ e-shell-settings-dialog.c \ e-shell-settings-dialog.h \ + e-shell-shared-folder-picker-dialog.c \ + e-shell-shared-folder-picker-dialog.h \ e-shell-startup-wizard.c \ e-shell-startup-wizard.h \ e-shell-user-creatable-items-handler.c \ @@ -223,7 +241,10 @@ oaf_in_files = GNOME_Evolution_Shell.oaf.in oaf_DATA = $(oaf_in_files:.oaf.in=.oaf) etspecdir = $(datadir)/evolution/etspec/ -etspec_DATA = e-storage-set-view.etspec e-storage-set-view-checkboxes.etstate e-storage-set-view-no-checkboxes.etstate +etspec_DATA = \ + e-storage-set-view.etspec \ + e-storage-set-view-checkboxes.etstate \ + e-storage-set-view-no-checkboxes.etstate @XML_I18N_MERGE_OAF_RULE@ @@ -248,8 +269,8 @@ evolution.pure: evolution endif -CLEANFILES = $(IDL_GENERATED) -BUILT_SOURCES = $(IDL_GENERATED) +CLEANFILES = $(IDL_GENERATED) $(SELECT_NAMES_IDL_GENERATED) +BUILT_SOURCES = $(IDL_GENERATED) $(SELECT_NAMES_IDL_GENERATED) dist-hook: cd $(distdir); rm -f $(BUILT_SOURCES) diff --git a/shell/e-shell-view-menu.c b/shell/e-shell-view-menu.c index 5869048abf..eff7aa0817 100644 --- a/shell/e-shell-view-menu.c +++ b/shell/e-shell-view-menu.c @@ -30,6 +30,7 @@ #include "e-shell-view-menu.h" +#include "e-shell-shared-folder-picker-dialog.h" #include "e-shell-folder-creation-dialog.h" #include "e-shell-folder-selection-dialog.h" @@ -399,6 +400,23 @@ command_add_folder_to_shortcut_bar (BonoboUIComponent *uih, } +/* Opening other users' folders. */ + +static void +command_open_other_users_folder (BonoboUIComponent *uih, + void *data, + const char *path) +{ + EShellView *shell_view; + EShell *shell; + + shell_view = E_SHELL_VIEW (data); + shell = e_shell_view_get_shell (shell_view); + + e_shell_show_shared_folder_picker_dialog (shell, shell_view); +} + + /* Going to a folder. */ static void @@ -627,6 +645,7 @@ static BonoboUIVerb new_verbs [] = { static BonoboUIVerb file_verbs [] = { BONOBO_UI_VERB ("FileImporter", (BonoboUIVerbFn) show_import_wizard), + BONOBO_UI_VERB ("FileOpenOtherUsersFolder", command_open_other_users_folder), BONOBO_UI_VERB ("FileGoToFolder", command_goto_folder), BONOBO_UI_VERB ("FileCreateFolder", command_create_folder), BONOBO_UI_VERB ("FileClose", command_close), diff --git a/shell/evolution-storage-listener.h b/shell/evolution-storage-listener.h index 8e9bee5df7..e48a3243f8 100644 --- a/shell/evolution-storage-listener.h +++ b/shell/evolution-storage-listener.h @@ -64,6 +64,12 @@ struct _EvolutionStorageListenerClass { void (* has_subfolders) (EvolutionStorageListener *storage_listener, const char *path, const char *message); + + void (* shared_folder_discovery_result) (EvolutionStorageListener *storage_listener, + const char *user, + const char *folder_name, + const char *storage_path, + const char *physical_uri); }; diff --git a/shell/evolution-storage.c b/shell/evolution-storage.c index 79930b17f9..317812ab3c 100644 --- a/shell/evolution-storage.c +++ b/shell/evolution-storage.c @@ -68,6 +68,7 @@ enum { XFER_FOLDER, UPDATE_FOLDER, OPEN_FOLDER, + DISCOVER_SHARED_FOLDER, LAST_SIGNAL }; @@ -320,13 +321,13 @@ impl_Storage__get_folderList (PortableServer_Servant servant, } static void -impl_Storage_async_create_folder (PortableServer_Servant servant, - const CORBA_char *path, - const CORBA_char *type, - const CORBA_char *description, - const CORBA_char *parent_physical_uri, - const Bonobo_Listener listener, - CORBA_Environment *ev) +impl_Storage_asyncCreateFolder (PortableServer_Servant servant, + const CORBA_char *path, + const CORBA_char *type, + const CORBA_char *description, + const CORBA_char *parent_physical_uri, + const Bonobo_Listener listener, + CORBA_Environment *ev) { BonoboObject *bonobo_object; CORBA_Object obj_dup; @@ -342,11 +343,11 @@ impl_Storage_async_create_folder (PortableServer_Servant servant, static void -impl_Storage_async_remove_folder (PortableServer_Servant servant, - const CORBA_char *path, - const CORBA_char *physical_uri, - const Bonobo_Listener listener, - CORBA_Environment *ev) +impl_Storage_asyncRemoveFolder (PortableServer_Servant servant, + const CORBA_char *path, + const CORBA_char *physical_uri, + const Bonobo_Listener listener, + CORBA_Environment *ev) { BonoboObject *bonobo_object; EvolutionStorage *storage; @@ -361,12 +362,12 @@ impl_Storage_async_remove_folder (PortableServer_Servant servant, } static void -impl_Storage_async_xfer_folder (PortableServer_Servant servant, - const CORBA_char *source_path, - const CORBA_char *destination_path, - const CORBA_boolean remove_source, - const Bonobo_Listener listener, - CORBA_Environment *ev) +impl_Storage_asyncXferFolder (PortableServer_Servant servant, + const CORBA_char *source_path, + const CORBA_char *destination_path, + const CORBA_boolean remove_source, + const Bonobo_Listener listener, + CORBA_Environment *ev) { BonoboObject *bonobo_object; EvolutionStorage *storage; @@ -425,9 +426,9 @@ impl_Storage_updateFolder (PortableServer_Servant servant, } static void -impl_Storage_async_open_folder (PortableServer_Servant servant, - const CORBA_char *path, - CORBA_Environment *ev) +impl_Storage_asyncOpenFolder (PortableServer_Servant servant, + const CORBA_char *path, + CORBA_Environment *ev) { BonoboObject *bonobo_object; EvolutionStorage *storage; @@ -439,9 +440,26 @@ impl_Storage_async_open_folder (PortableServer_Servant servant, } static void -impl_Storage_add_listener (PortableServer_Servant servant, - const GNOME_Evolution_StorageListener listener, - CORBA_Environment *ev) +impl_Storage_asyncDiscoverSharedFolder (PortableServer_Servant servant, + const CORBA_char *user, + const CORBA_char *folder_name, + Bonobo_Listener listener, + CORBA_Environment *ev) +{ + BonoboObject *bonobo_object; + EvolutionStorage *storage; + + bonobo_object = bonobo_object_from_servant (servant); + storage = EVOLUTION_STORAGE (bonobo_object); + + gtk_signal_emit (GTK_OBJECT (storage), signals[DISCOVER_SHARED_FOLDER], + user, folder_name, listener); +} + +static void +impl_Storage_addListener (PortableServer_Servant servant, + const GNOME_Evolution_StorageListener listener, + CORBA_Environment *ev) { BonoboObject *bonobo_object; EvolutionStorage *storage; @@ -454,9 +472,9 @@ impl_Storage_add_listener (PortableServer_Servant servant, } static void -impl_Storage_remove_listener (PortableServer_Servant servant, - const GNOME_Evolution_StorageListener listener, - CORBA_Environment *ev) +impl_Storage_removeListener (PortableServer_Servant servant, + const GNOME_Evolution_StorageListener listener, + CORBA_Environment *ev) { BonoboObject *bonobo_object; EvolutionStorage *storage; @@ -646,6 +664,17 @@ class_init (EvolutionStorageClass *klass) GTK_TYPE_NONE, 1, GTK_TYPE_STRING); + signals[DISCOVER_SHARED_FOLDER] = gtk_signal_new ("discover_shared_folder", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (EvolutionStorageClass, + discover_shared_folder), + e_marshal_NONE__POINTER_POINTER_POINTER, + GTK_TYPE_NONE, 3, + GTK_TYPE_STRING, + GTK_TYPE_STRING, + GTK_TYPE_POINTER); + gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); corba_class_init (); @@ -673,16 +702,17 @@ evolution_storage_get_epv (void) POA_GNOME_Evolution_Storage__epv *epv; epv = g_new0 (POA_GNOME_Evolution_Storage__epv, 1); - epv->_get_name = impl_Storage__get_name; - epv->_get_hasSharedFolders = impl_Storage__get_hasSharedFolders; - epv->_get_folderList = impl_Storage__get_folderList; - epv->asyncCreateFolder = impl_Storage_async_create_folder; - epv->asyncRemoveFolder = impl_Storage_async_remove_folder; - epv->asyncXferFolder = impl_Storage_async_xfer_folder; - epv->asyncOpenFolder = impl_Storage_async_open_folder; - epv->updateFolder = impl_Storage_updateFolder; - epv->addListener = impl_Storage_add_listener; - epv->removeListener = impl_Storage_remove_listener; + epv->_get_name = impl_Storage__get_name; + epv->_get_hasSharedFolders = impl_Storage__get_hasSharedFolders; + epv->_get_folderList = impl_Storage__get_folderList; + epv->asyncCreateFolder = impl_Storage_asyncCreateFolder; + epv->asyncRemoveFolder = impl_Storage_asyncRemoveFolder; + epv->asyncXferFolder = impl_Storage_asyncXferFolder; + epv->asyncOpenFolder = impl_Storage_asyncOpenFolder; + epv->updateFolder = impl_Storage_updateFolder; + epv->asyncDiscoverSharedFolder = impl_Storage_asyncDiscoverSharedFolder; + epv->addListener = impl_Storage_addListener; + epv->removeListener = impl_Storage_removeListener; return epv; } diff --git a/shell/evolution-storage.h b/shell/evolution-storage.h index 004aedebbe..59d46f7a44 100644 --- a/shell/evolution-storage.h +++ b/shell/evolution-storage.h @@ -105,6 +105,11 @@ struct _EvolutionStorageClass { void (*update_folder) (EvolutionStorage *storage, const char *path, int unread_count); + + void (*discover_shared_folder) (EvolutionStorage *storage, + const char *user, + const char *folder_name, + Bonobo_Listener listener); }; diff --git a/shell/evolution-test-component.c b/shell/evolution-test-component.c index d083248395..58056de5d4 100644 --- a/shell/evolution-test-component.c +++ b/shell/evolution-test-component.c @@ -27,8 +27,10 @@ #endif #include "evolution-shell-component.h" + #include "evolution-activity-client.h" #include "evolution-config-control.h" +#include "evolution-storage.h" #include <bonobo/bonobo-exception.h> #include <bonobo/bonobo-generic-factory.h> @@ -56,7 +58,7 @@ static EvolutionShellClient *parent_shell = NULL; static int timeout_id = 0; -/* Test the configuration control. */ +/* TEST #1: Configuration Control. */ static BonoboObject * create_configuration_page (void) @@ -94,7 +96,7 @@ register_configuration_control_factory (void) } -/* Test the ::Shortcut interface. */ +/* TEST #2: The ::Shortcut interface. */ static void spit_out_shortcuts (EvolutionShellClient *shell_client) @@ -146,7 +148,7 @@ spit_out_shortcuts (EvolutionShellClient *shell_client) } -/* Test the multiple folder selector. */ +/* TEST #4: The multiple folder selector. */ static void dialog_clicked_callback (GnomeDialog *dialog, @@ -257,6 +259,80 @@ create_new_folder_selector (EvolutionShellComponent *shell_component) } +/* TEST #5: Test custom storage. */ + +static int +shared_folder_discovery_timeout_callback (void *data) +{ + CORBA_Environment ev; + Bonobo_Listener listener; + CORBA_any any; + GNOME_Evolution_Storage_DiscoverSharedFolderResult result; + + listener = (Bonobo_Listener) data; + + result.result = GNOME_Evolution_Storage_OK; + result.storagePath = "/Shared Folders/The Public Folder"; + result.physicalURI = "blah://bleh.net:3764/bluh/bleh/blih"; + result.type = "test"; + + any._type = TC_GNOME_Evolution_Storage_DiscoverSharedFolderResult; + any._value = &result; + + CORBA_exception_init (&ev); + + Bonobo_Listener_event (listener, "result", &any, &ev); + if (BONOBO_EX (&ev)) + g_warning ("Cannot report result for shared folder discovery -- %s", + BONOBO_EX_ID (&ev)); + + CORBA_Object_release (listener, &ev); + + CORBA_exception_free (&ev); + + return FALSE; +} + +static void +storage_discover_shared_folder_callback (EvolutionStorage *storage, + const char *user, + const char *folder_name, + Bonobo_Listener listener, + void *data) +{ + CORBA_Environment ev; + Bonobo_Listener listener_copy; + + CORBA_exception_init (&ev); + listener_copy = CORBA_Object_duplicate (listener, &ev); + CORBA_exception_free (&ev); + + g_timeout_add (1000, shared_folder_discovery_timeout_callback, listener_copy); +} + +static void +setup_custom_storage (EvolutionShellClient *shell_client) +{ + EvolutionStorage *the_storage; + EvolutionStorageResult result; + + the_storage = evolution_storage_new ("TestStorage", TRUE); + + gtk_signal_connect (GTK_OBJECT (the_storage), "discover_shared_folder", + GTK_SIGNAL_FUNC (storage_discover_shared_folder_callback), shell_client); + + result = evolution_storage_register_on_shell (the_storage, BONOBO_OBJREF (shell_client)); + if (result != EVOLUTION_STORAGE_OK) { + g_warning ("Cannot register storage on the shell."); + bonobo_object_unref (BONOBO_OBJECT (the_storage)); + return; + } + + evolution_storage_new_folder (the_storage, "/FirstFolder", "FirstFolder", "mail", "file:///tmp/blah", "", 0); + evolution_storage_new_folder (the_storage, "/SecondFolder", "SecondFolder", "calendar", "file:///tmp/bleh", "", 0); +} + + /* Callbacks. */ static void @@ -432,6 +508,8 @@ owner_set_callback (EvolutionShellComponent *shell_component, g_warning ("Shell doesn't have a ::Activity interface -- weird!"); spit_out_shortcuts (shell_client); + + setup_custom_storage (shell_client); } static int diff --git a/shell/glade/Makefile.am b/shell/glade/Makefile.am index ada34672bd..a7e1ac69d3 100644 --- a/shell/glade/Makefile.am +++ b/shell/glade/Makefile.am @@ -1,10 +1,11 @@ gladedir = $(datadir)/evolution/glade -glade_DATA = \ - e-active-connection-dialog.glade \ - e-shell-config-default-folders.glade \ - e-shell-folder-creation-dialog.glade \ - evolution-startup-wizard.glade \ +glade_DATA = \ + e-active-connection-dialog.glade \ + e-shell-config-default-folders.glade \ + e-shell-folder-creation-dialog.glade \ + e-shell-shared-folder-picker-dialog.glade \ + evolution-startup-wizard.glade \ e-folder-list.glade EXTRA_DIST = $(glade_DATA) diff --git a/shell/glade/e-shell-shared-folder-picker-dialog.glade b/shell/glade/e-shell-shared-folder-picker-dialog.glade new file mode 100644 index 0000000000..0275f66a0e --- /dev/null +++ b/shell/glade/e-shell-shared-folder-picker-dialog.glade @@ -0,0 +1,301 @@ +<?xml version="1.0"?> +<GTK-Interface> + +<project> + <name>Project1</name> + <program_name>project1</program_name> + <directory>../../../../home/ettore/Projects/project1</directory> + <source_directory>../../../../home/ettore/Projects/project1/src</source_directory> + <pixmaps_directory>../../../../home/ettore/Projects/project1/pixmaps</pixmaps_directory> + <language>C</language> + <gnome_support>True</gnome_support> + <gettext_support>True</gettext_support> + <translatable_strings_file>../../../../home/ettore/Projects/project1</translatable_strings_file> +</project> + +<widget> + <class>GnomeDialog</class> + <name>dialog</name> + <width>350</width> + <title>Open Other User's Folder</title> + <type>GTK_WINDOW_TOPLEVEL</type> + <position>GTK_WIN_POS_NONE</position> + <modal>False</modal> + <allow_shrink>False</allow_shrink> + <allow_grow>False</allow_grow> + <auto_shrink>False</auto_shrink> + <auto_close>False</auto_close> + <hide_on_close>False</hide_on_close> + + <widget> + <class>GtkVBox</class> + <child_name>GnomeDialog:vbox</child_name> + <name>dialog-vbox1</name> + <homogeneous>False</homogeneous> + <spacing>8</spacing> + <child> + <padding>4</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkHButtonBox</class> + <child_name>GnomeDialog:action_area</child_name> + <name>dialog-action_area1</name> + <layout_style>GTK_BUTTONBOX_END</layout_style> + <spacing>8</spacing> + <child_min_width>85</child_min_width> + <child_min_height>27</child_min_height> + <child_ipad_x>7</child_ipad_x> + <child_ipad_y>0</child_ipad_y> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + <pack>GTK_PACK_END</pack> + </child> + + <widget> + <class>GtkButton</class> + <name>button1</name> + <can_default>True</can_default> + <has_default>True</has_default> + <can_focus>True</can_focus> + <stock_button>GNOME_STOCK_BUTTON_OK</stock_button> + </widget> + + <widget> + <class>GtkButton</class> + <name>button3</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> + </widget> + </widget> + + <widget> + <class>GtkVBox</class> + <name>vbox1</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkLabel</class> + <name>label4</name> + <label>Blah blah.</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + </widget> + + <widget> + <class>GtkLabel</class> + <name>label5</name> + <label>Insert some explanatory text here.</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + </widget> + </widget> + + <widget> + <class>GtkTable</class> + <name>table1</name> + <rows>3</rows> + <columns>2</columns> + <homogeneous>False</homogeneous> + <row_spacing>3</row_spacing> + <column_spacing>3</column_spacing> + <child> + <padding>2</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkLabel</class> + <name>label1</name> + <label>Server:</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkLabel</class> + <name>label2</name> + <label>User:</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkLabel</class> + <name>label3</name> + <label>Folder Name:</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>2</top_attach> + <bottom_attach>3</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkOptionMenu</class> + <name>server-option-menu</name> + <can_focus>True</can_focus> + <items></items> + <initial_choice>0</initial_choice> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkCombo</class> + <name>folder-name-combo</name> + <value_in_list>False</value_in_list> + <ok_if_empty>True</ok_if_empty> + <case_sensitive>False</case_sensitive> + <use_arrows>True</use_arrows> + <use_arrows_always>False</use_arrows_always> + <items></items> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>2</top_attach> + <bottom_attach>3</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + + <widget> + <class>GtkEntry</class> + <child_name>GtkCombo:entry</child_name> + <name>folder-name-entry</name> + <can_focus>True</can_focus> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> + </widget> + </widget> + + <widget> + <class>GtkHBox</class> + <name>user-picker-placeholder</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + + <widget> + <class>Placeholder</class> + </widget> + </widget> + </widget> + </widget> +</widget> + +</GTK-Interface> |