glom r1549 - in trunk: . docs/user-guide/C glom



Author: arminb
Date: Thu Apr 10 16:09:16 2008
New Revision: 1549
URL: http://svn.gnome.org/viewvc/glom?rev=1549&view=rev

Log:
2008-04-10  Armin Burgmeier  <armin openismus com>

	* glom/glom.glade: Added a help button, reordered Quit/Select buttons,
	remove mnemonics from the tab labels as suggested by the HIG. Removed
	the separator and added a tooltip for the select button.

	* glom/dialog_existing_or_new.h:
	* glom/dialog_existing_or_new.cc (constructor): Reordered items in
	existing_model, use a cell data func for the item's title so we can
	change the color when necessary, expand the recent items by default.
	Add a dummy item telling that there are no documents in this category
	if there are none.
	(on_service_found, on_service_removed): Create/Remove that dummy item
	accordingly.
	(on_stream_read): Remove the dummy item for the "New From Template"
	category, expand the "New From Template" category if this was the first
	item discovered.

	* glom/application.cc (offer_new_or_existing): Use
	Utils::dialog_run_with_help() to make the Help button work.

	* docs/user-guide/C/glom.xml: Added an initial text for the Help
	button of the initial dialog.


Modified:
   trunk/ChangeLog
   trunk/docs/user-guide/C/glom.xml
   trunk/glom/application.cc
   trunk/glom/dialog_existing_or_new.cc
   trunk/glom/dialog_existing_or_new.h
   trunk/glom/glom.glade

Modified: trunk/docs/user-guide/C/glom.xml
==============================================================================
--- trunk/docs/user-guide/C/glom.xml	(original)
+++ trunk/docs/user-guide/C/glom.xml	Thu Apr 10 16:09:16 2008
@@ -557,6 +557,12 @@
 
 <sect1 id="dialogs">
 <title>Dialogs</title>
+
+<sect2 id="dialog_existing_or_new">
+<title>Dialog: Initial dialog</title>
+<para>This dialog lets the user choose what document to open. It is possible to open an existing Glom document by selecting it from several recently modified documents or by opening another document by choosing a .glom file. Documents can also be opened via the network, if other users are running glom on the local network. Finally, a new document can be created, either by opening a template file which already contains some tables and records to start from, or by creating an empty document.</para>
+</sect2>
+
 <sect2 id="dialog_new_database">
 <title>Dialog: New database</title>
 <para></para>

Modified: trunk/glom/application.cc
==============================================================================
--- trunk/glom/application.cc	(original)
+++ trunk/glom/application.cc	Thu Apr 10 16:09:16 2008
@@ -1192,7 +1192,7 @@
   bool ask_again = true;
   while(ask_again)
   {
-    const int response_id = dialog->run();
+    const int response_id = Utils::dialog_run_with_help(dialog.get(), "dialog_existing_or_new");
     dialog->hide();
 
     if(response_id == Gtk::RESPONSE_ACCEPT)

Modified: trunk/glom/dialog_existing_or_new.cc
==============================================================================
--- trunk/glom/dialog_existing_or_new.cc	(original)
+++ trunk/glom/dialog_existing_or_new.cc	Thu Apr 10 16:09:16 2008
@@ -40,6 +40,17 @@
 namespace
 {
 
+const char* RECENT_DUMMY_TEXT = "No recently used documents available";
+const char* TEMPLATE_DUMMY_TEXT = "No templates available";
+const char* NETWORK_DUMMY_TEXT = "No sessions found on the local network";
+
+/*bool has_dummy(const Gtk::TreeIter& parent, const std::auto_ptr<Gtk::TreeIter>& dummy)
+{
+  if(dummy.get() == NULL) return false;
+  const Gtk::TreeNodeChildren& children = parent->children();
+  return children.begin() == *dummy;
+}*/
+
 // Reads the title of an example from the first few characters of the XML
 class Parser: public xmlpp::SaxParser
 {
@@ -108,7 +119,7 @@
   m_existing_column_title.pack_start(m_existing_icon_renderer, false);
   m_existing_column_title.pack_start(m_existing_title_renderer, true);
   m_existing_column_title.set_cell_data_func(m_existing_icon_renderer, sigc::mem_fun(*this, &Dialog_ExistingOrNew::existing_icon_data_func));
-  m_existing_column_title.add_attribute(m_existing_title_renderer, "text", m_existing_columns.m_col_title.index());
+  m_existing_column_title.set_cell_data_func(m_existing_title_renderer, sigc::mem_fun(*this, &Dialog_ExistingOrNew::existing_title_data_func));
   m_existing_view->append_column(m_existing_column_title);
 
   m_existing_column_button.pack_end(m_existing_button_renderer, false);
@@ -119,7 +130,7 @@
   m_new_column_title.pack_start(m_new_icon_renderer, false);
   m_new_column_title.pack_start(m_new_title_renderer, true);
   m_new_column_title.set_cell_data_func(m_new_icon_renderer, sigc::mem_fun(*this, &Dialog_ExistingOrNew::new_icon_data_func));
-  m_new_column_title.add_attribute(m_new_title_renderer, "text", m_new_columns.m_col_title.index());
+  m_new_column_title.set_cell_data_func(m_new_title_renderer, sigc::mem_fun(*this, &Dialog_ExistingOrNew::new_title_data_func));
   m_new_view->append_column(m_new_column_title);
 
   m_new_column_button.pack_end(m_new_button_renderer, false);
@@ -133,15 +144,15 @@
   m_new_view->signal_row_activated().connect(sigc::mem_fun(*this, &Dialog_ExistingOrNew::on_new_row_activated));
   m_new_button_renderer.signal_clicked().connect(sigc::mem_fun(*this, &Dialog_ExistingOrNew::on_new_button_clicked));
 
-  m_iter_existing_recent = m_existing_model->append();
-  (*m_iter_existing_recent)[m_existing_columns.m_col_title] = _("Recently Opened");
-  
-  m_iter_existing_network = m_existing_model->append();
-  (*m_iter_existing_network)[m_existing_columns.m_col_title] = _("Local Network");
-
   m_iter_existing_other = m_existing_model->append();
   (*m_iter_existing_other)[m_existing_columns.m_col_title] = _("Other");
   (*m_iter_existing_other)[m_existing_columns.m_col_button_text] = _("Select Fileâ");
+
+  m_iter_existing_network = m_existing_model->append();
+  (*m_iter_existing_network)[m_existing_columns.m_col_title] = _("Local Network");
+
+  m_iter_existing_recent = m_existing_model->append();
+  (*m_iter_existing_recent)[m_existing_columns.m_col_title] = _("Recently Opened");
   
   m_iter_new_empty = m_new_model->append();
   (*m_iter_new_empty)[m_new_columns.m_col_title] = _("New Empty Document");
@@ -196,6 +207,17 @@
     }
   }
 
+  const Gtk::TreeNodeChildren& children = m_iter_existing_recent->children();
+  if(children.begin() == children.end())
+    m_iter_existing_recent_dummy = create_dummy_item_existing(m_iter_existing_recent, _(RECENT_DUMMY_TEXT));
+
+  // Will be removed when items are added:
+  m_iter_existing_network_dummy = create_dummy_item_existing(m_iter_existing_network, _(NETWORK_DUMMY_TEXT));
+  m_iter_new_template_dummy = create_dummy_item_new(m_iter_new_template, _(TEMPLATE_DUMMY_TEXT));
+
+  // Expand recently used files
+  m_existing_view->expand_row(m_existing_model->get_path(m_iter_existing_recent), false);
+
   m_select_button->signal_clicked().connect(sigc::mem_fun(*this, &Dialog_ExistingOrNew::on_select_clicked));
   m_notebook->signal_switch_page().connect(sigc::mem_fun(*this, &Dialog_ExistingOrNew::on_switch_page));
   m_existing_view->get_selection()->signal_changed().connect(sigc::mem_fun(*this, &Dialog_ExistingOrNew::on_existing_selection_changed));
@@ -214,6 +236,7 @@
 
 #ifndef G_OS_WIN32
   // Release the service infos in the treestore
+  if(!m_iter_existing_network_dummy.get())
   {
     const Gtk::TreeNodeChildren& children = m_iter_existing_network->children();
     for(Gtk::TreeIter iter = children.begin(); iter != children.end(); ++ iter)
@@ -223,6 +246,7 @@
 
   // Release the recent infos (see comment in the header for why these
   // have to be dynamically allocated)
+  if(!m_iter_existing_recent_dummy.get())
   {
     const Gtk::TreeNodeChildren& children = m_iter_existing_recent->children();
     for(Gtk::TreeIter iter = children.begin(); iter != children.end(); ++ iter)
@@ -320,6 +344,20 @@
     throw std::logic_error("Dialog_ExistingOrNew::get_service_name: action is not OPEN_REMOTE");
 }
 
+std::auto_ptr<Gtk::TreeIter> Dialog_ExistingOrNew::create_dummy_item_existing(const Gtk::TreeIter& parent, const Glib::ustring& text)
+{
+  Gtk::TreeIter iter = m_existing_model->append(parent->children());
+  (*iter)[m_existing_columns.m_col_title] = text;
+  return std::auto_ptr<Gtk::TreeIter>(new Gtk::TreeIter(iter));
+}
+
+std::auto_ptr<Gtk::TreeIter> Dialog_ExistingOrNew::create_dummy_item_new(const Gtk::TreeIter& parent, const Glib::ustring& text)
+{
+  Gtk::TreeIter iter = m_new_model->append(parent->children());
+  (*iter)[m_new_columns.m_col_title] = text;
+  return std::auto_ptr<Gtk::TreeIter>(new Gtk::TreeIter(iter));
+}
+
 void Dialog_ExistingOrNew::existing_icon_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter)
 {
   Gtk::CellRendererPixbuf* pixbuf_renderer = dynamic_cast<Gtk::CellRendererPixbuf*>(renderer);
@@ -328,13 +366,17 @@
   pixbuf_renderer->property_stock_size() = Gtk::ICON_SIZE_BUTTON;
   pixbuf_renderer->property_stock_id() = "";
   pixbuf_renderer->property_pixbuf() = Glib::RefPtr<Gdk::Pixbuf>();
-      
+
   if(iter == m_iter_existing_recent)
     pixbuf_renderer->property_stock_id() = Gtk::Stock::INDEX.id; // TODO: More meaningful icon?
   else if(iter == m_iter_existing_network)
     pixbuf_renderer->property_stock_id() = Gtk::Stock::NETWORK.id;
   else if(iter == m_iter_existing_other)
     pixbuf_renderer->property_stock_id() = Gtk::Stock::OPEN.id;
+  else if(m_iter_existing_recent_dummy.get() != NULL && iter == *m_iter_existing_recent_dummy)
+    pixbuf_renderer->property_stock_id() = Gtk::Stock::DIALOG_ERROR.id; // TODO: Use Stock::STOP instead?
+  else if(m_iter_existing_network_dummy.get() != NULL && iter == *m_iter_existing_network_dummy)
+    pixbuf_renderer->property_stock_id() = Gtk::Stock::DIALOG_ERROR.id; // TODO: Use Stock::STOP instead?
   else
   {
     if(m_existing_model->is_ancestor(m_iter_existing_recent, iter))
@@ -355,6 +397,23 @@
   }
 }
 
+void Dialog_ExistingOrNew::existing_title_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter)
+{
+  Gtk::CellRendererText* text_renderer = dynamic_cast<Gtk::CellRendererText*>(renderer);
+  if(!text_renderer) throw std::logic_error("Renderer not a text renderer in existing_title_data_func");
+
+  text_renderer->property_text() = (*iter)[m_existing_columns.m_col_title];
+
+  // Default: Use default color
+  text_renderer->property_foreground_set() = false;
+  // Use grey if parent item has no children
+  if( (iter == m_iter_existing_network && m_iter_existing_network_dummy.get()) ||
+      (iter == m_iter_existing_recent && m_iter_existing_recent_dummy.get()))
+  {
+    text_renderer->property_foreground() = "grey";
+  }
+}
+
 void Dialog_ExistingOrNew::new_icon_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter)
 {
   Gtk::CellRendererPixbuf* pixbuf_renderer = dynamic_cast<Gtk::CellRendererPixbuf*>(renderer);
@@ -368,6 +427,8 @@
     pixbuf_renderer->property_stock_id() = Gtk::Stock::NEW.id;
   else if(iter == m_iter_new_template)
     pixbuf_renderer->property_stock_id() = Gtk::Stock::EDIT.id; // TODO: More meaningful icon?
+  else if(m_iter_new_template_dummy.get() != NULL && iter == *m_iter_new_template_dummy)
+    pixbuf_renderer->property_stock_id() = Gtk::Stock::DIALOG_ERROR.id; // TODO: Use Stock::STOP instead?
   else
   {
     if(m_new_model->is_ancestor(m_iter_new_template, iter))
@@ -381,6 +442,22 @@
   }
 }
 
+void Dialog_ExistingOrNew::new_title_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter)
+{
+  Gtk::CellRendererText* text_renderer = dynamic_cast<Gtk::CellRendererText*>(renderer);
+  if(!text_renderer) throw std::logic_error("Renderer not a text renderer in new_title_data_func");
+
+  text_renderer->property_text() = (*iter)[m_new_columns.m_col_title];
+
+  // Default: Use default color
+  text_renderer->property_foreground_set() = false;
+  // Use grey if parent item has no children
+  if( (iter == m_iter_new_template && m_iter_new_template_dummy.get()))
+  {
+    text_renderer->property_foreground() = "grey";
+  }
+}
+
 void Dialog_ExistingOrNew::on_switch_page(GtkNotebookPage* page, guint page_num)
 {
   update_ui_sensitivity();
@@ -411,7 +488,9 @@
     else
     {
       Gtk::TreeIter sel = m_existing_view->get_selection()->get_selected();
-      sensitivity = (sel != m_iter_existing_recent && sel != m_iter_existing_network);
+      sensitivity = (sel != m_iter_existing_recent && sel != m_iter_existing_network &&
+                     (!m_iter_existing_recent_dummy.get() || sel != *m_iter_existing_recent_dummy) &&
+                     (!m_iter_existing_network_dummy.get() || sel != *m_iter_existing_network_dummy));
     }
   }
   else
@@ -425,7 +504,8 @@
     else
     {
       Gtk::TreeIter sel = m_new_view->get_selection()->get_selected();
-      sensitivity = (sel != m_iter_new_template);
+      sensitivity = (sel != m_iter_new_template &&
+                     (!m_iter_new_template_dummy.get() || sel != *m_iter_new_template_dummy));
     }
   }
 
@@ -523,11 +603,22 @@
     }
     else
     {
+      const bool is_first_item = m_iter_new_template_dummy.get() != NULL;
+
       // Add to list
       Gtk::TreeIter iter = m_new_model->append(m_iter_new_template->children());
       (*iter)[m_new_columns.m_col_title] = title;
       (*iter)[m_new_columns.m_col_button_text] = _("Create");
       (*iter)[m_new_columns.m_col_template_uri] = m_current_example->get_uri();
+
+      if(is_first_item)
+      {
+        // Remove dummy
+        m_new_model->erase(*m_iter_new_template_dummy);
+        m_iter_new_template_dummy.reset();
+        // Expand if this is the first item
+        m_new_view->expand_row(m_new_model->get_path(m_iter_new_template), false);
+      }
     }
   }
   catch(const Glib::Exception& ex)
@@ -556,6 +647,13 @@
 
   epc_service_info_ref(info);
   g_free(title);
+  
+  // Remove dummy item
+  if(m_iter_existing_network_dummy.get())
+  {
+    m_existing_model->erase(*m_iter_existing_network_dummy);
+    m_iter_existing_network_dummy.reset();
+  }
 }
 
 void Dialog_ExistingOrNew::on_service_removed(const Glib::ustring& name, const Glib::ustring& type)
@@ -566,9 +664,14 @@
   {
     if((*iter)[m_existing_columns.m_col_service_name] == name)
     {
+      const bool was_expanded = m_existing_view->row_expanded(m_existing_model->get_path(iter));
       // Remove from store
       epc_service_info_unref((*iter)[m_existing_columns.m_col_service_info]);
       m_existing_model->erase(iter);
+      // Reinsert dummy, if necessary
+      if(children.begin() == children.end())
+        m_iter_existing_network_dummy = create_dummy_item_existing(m_iter_existing_network, _(NETWORK_DUMMY_TEXT));
+      if(was_expanded) m_existing_view->expand_row(m_existing_model->get_path(iter), false);
       break;
     }
   }

Modified: trunk/glom/dialog_existing_or_new.h
==============================================================================
--- trunk/glom/dialog_existing_or_new.h	(original)
+++ trunk/glom/dialog_existing_or_new.h	Thu Apr 10 16:09:16 2008
@@ -66,8 +66,13 @@
 protected:
   Action get_action_impl(Gtk::TreeIter& iter) const;
 
+  std::auto_ptr<Gtk::TreeIter> create_dummy_item_existing(const Gtk::TreeIter& parent, const Glib::ustring& text);
+  std::auto_ptr<Gtk::TreeIter> create_dummy_item_new(const Gtk::TreeIter& parent, const Glib::ustring& text);
+
   void existing_icon_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter);
+  void existing_title_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter);
   void new_icon_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter);
+  void new_title_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter);
 
   void on_switch_page(GtkNotebookPage* page, guint page_num);
   void on_existing_selection_changed();
@@ -171,7 +176,12 @@
 
   Gtk::TreeIter m_iter_new_empty;
   Gtk::TreeIter m_iter_new_template;
-  
+
+  // Dummy children to indicate that a parent item has no (real) children
+  std::auto_ptr<Gtk::TreeIter> m_iter_existing_network_dummy;
+  std::auto_ptr<Gtk::TreeIter> m_iter_existing_recent_dummy;
+  std::auto_ptr<Gtk::TreeIter> m_iter_new_template_dummy;
+
   Glib::RefPtr<Gio::File> m_examples_dir;
   Glib::RefPtr<Gio::FileEnumerator> m_examples_enumerator;
   Glib::RefPtr<Gio::File> m_current_example;

Modified: trunk/glom/glom.glade
==============================================================================
--- trunk/glom/glom.glade	(original)
+++ trunk/glom/glom.glade	Thu Apr 10 16:09:16 2008
@@ -196,6 +196,7 @@
     <property name="default_width">480</property>
     <property name="default_height">320</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
     <child internal-child="vbox">
       <widget class="GtkVBox" id="dialog-vbox1">
         <property name="visible">True</property>
@@ -228,7 +229,7 @@
                     <property name="can_focus">True</property>
                     <property name="xalign">0</property>
                     <property name="yalign">0</property>
-                    <property name="label" translatable="yes">&lt;span weight="bold" size="larger"&gt;Please open an existing document or create new document&lt;/span&gt;</property>
+                    <property name="label" translatable="yes">&lt;span weight="bold" size="larger"&gt;Open or create a Document&lt;/span&gt;</property>
                     <property name="use_markup">True</property>
                     <property name="wrap">True</property>
                     <property name="selectable">True</property>
@@ -248,7 +249,7 @@
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
                         <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                        <property name="shadow_type">GTK_SHADOW_IN</property>
+                        <property name="window_placement_set">True</property>
                         <child>
                           <widget class="GtkTreeView" id="existing_or_new_existing_treeview">
                             <property name="visible">True</property>
@@ -263,7 +264,7 @@
                     <child>
                       <widget class="GtkLabel" id="label2">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">Open _Existing Document</property>
+                        <property name="label" translatable="yes">Open Existing Document</property>
                         <property name="use_underline">True</property>
                       </widget>
                       <packing>
@@ -278,7 +279,6 @@
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
                         <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                        <property name="shadow_type">GTK_SHADOW_IN</property>
                         <child>
                           <widget class="GtkTreeView" id="existing_or_new_new_treeview">
                             <property name="visible">True</property>
@@ -295,7 +295,7 @@
                     <child>
                       <widget class="GtkLabel" id="label3">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">Create _New Document</property>
+                        <property name="label" translatable="yes">Create New Document</property>
                         <property name="use_underline">True</property>
                       </widget>
                       <packing>
@@ -328,6 +328,8 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
+                <property name="has_tooltip">True</property>
+                <property name="tooltip_text">Applies the currently selected item. Depending on the item, this might create a new document or open an existing document.</property>
                 <property name="response_id">0</property>
                 <child>
                   <widget class="GtkHBox" id="hbox1">
@@ -354,6 +356,10 @@
                   </widget>
                 </child>
               </widget>
+              <packing>
+                <property name="pack_type">GTK_PACK_END</property>
+                <property name="position">2</property>
+              </packing>
             </child>
             <child>
               <widget class="GtkButton" id="cancelbutton1">
@@ -365,7 +371,23 @@
                 <property name="response_id">-7</property>
               </widget>
               <packing>
+                <property name="pack_type">GTK_PACK_END</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkButton" id="button1">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="label" translatable="yes">gtk-help</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">-11</property>
+              </widget>
+              <packing>
+                <property name="pack_type">GTK_PACK_END</property>
                 <property name="position">1</property>
+                <property name="secondary">True</property>
               </packing>
             </child>
           </widget>
@@ -445,125 +467,125 @@
                     <property name="column_spacing">6</property>
                     <property name="row_spacing">6</property>
                     <child>
-                      <widget class="GtkEntry" id="entry_host">
+                      <widget class="GtkLabel" id="label_database">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
+                        <property name="xalign">0</property>
                       </widget>
                       <packing>
                         <property name="left_attach">1</property>
                         <property name="right_attach">2</property>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
+                        <property name="x_options">GTK_FILL</property>
                         <property name="y_options"></property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkLabel" id="label64">
+                      <widget class="GtkLabel" id="label68">
                         <property name="visible">True</property>
                         <property name="xalign">0</property>
-                        <property name="label" translatable="yes">_Host</property>
-                        <property name="use_underline">True</property>
+                        <property name="label" translatable="yes">Database</property>
                         <property name="justify">GTK_JUSTIFY_RIGHT</property>
-                        <property name="mnemonic_widget">entry_host</property>
-                        <accessibility>
-                          <atkrelation target="entry_host" type="label-for"/>
-                        </accessibility>
                       </widget>
                       <packing>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
                         <property name="x_options">GTK_FILL</property>
                         <property name="y_options"></property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkLabel" id="label66">
+                      <widget class="GtkLabel" id="label65">
                         <property name="visible">True</property>
                         <property name="xalign">0</property>
-                        <property name="label" translatable="yes">_Password</property>
+                        <property name="label" translatable="yes">_User</property>
                         <property name="use_underline">True</property>
                         <property name="justify">GTK_JUSTIFY_RIGHT</property>
-                        <property name="mnemonic_widget">entry_password</property>
+                        <property name="mnemonic_widget">entry_user</property>
                         <accessibility>
-                          <atkrelation target="entry_password" type="label-for"/>
+                          <atkrelation target="entry_user" type="label-for"/>
                         </accessibility>
                       </widget>
                       <packing>
-                        <property name="top_attach">3</property>
-                        <property name="bottom_attach">4</property>
+                        <property name="top_attach">2</property>
+                        <property name="bottom_attach">3</property>
                         <property name="x_options">GTK_FILL</property>
                         <property name="y_options"></property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkEntry" id="entry_password">
+                      <widget class="GtkEntry" id="entry_user">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="has_focus">True</property>
-                        <property name="visibility">False</property>
-                        <property name="activates_default">True</property>
                       </widget>
                       <packing>
                         <property name="left_attach">1</property>
                         <property name="right_attach">2</property>
-                        <property name="top_attach">3</property>
-                        <property name="bottom_attach">4</property>
+                        <property name="top_attach">2</property>
+                        <property name="bottom_attach">3</property>
                         <property name="y_options"></property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkEntry" id="entry_user">
+                      <widget class="GtkEntry" id="entry_password">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
+                        <property name="has_focus">True</property>
+                        <property name="visibility">False</property>
+                        <property name="activates_default">True</property>
                       </widget>
                       <packing>
                         <property name="left_attach">1</property>
                         <property name="right_attach">2</property>
-                        <property name="top_attach">2</property>
-                        <property name="bottom_attach">3</property>
+                        <property name="top_attach">3</property>
+                        <property name="bottom_attach">4</property>
                         <property name="y_options"></property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkLabel" id="label65">
+                      <widget class="GtkLabel" id="label66">
                         <property name="visible">True</property>
                         <property name="xalign">0</property>
-                        <property name="label" translatable="yes">_User</property>
+                        <property name="label" translatable="yes">_Password</property>
                         <property name="use_underline">True</property>
                         <property name="justify">GTK_JUSTIFY_RIGHT</property>
-                        <property name="mnemonic_widget">entry_user</property>
+                        <property name="mnemonic_widget">entry_password</property>
                         <accessibility>
-                          <atkrelation target="entry_user" type="label-for"/>
+                          <atkrelation target="entry_password" type="label-for"/>
                         </accessibility>
                       </widget>
                       <packing>
-                        <property name="top_attach">2</property>
-                        <property name="bottom_attach">3</property>
+                        <property name="top_attach">3</property>
+                        <property name="bottom_attach">4</property>
                         <property name="x_options">GTK_FILL</property>
                         <property name="y_options"></property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkLabel" id="label68">
+                      <widget class="GtkLabel" id="label64">
                         <property name="visible">True</property>
                         <property name="xalign">0</property>
-                        <property name="label" translatable="yes">Database</property>
+                        <property name="label" translatable="yes">_Host</property>
+                        <property name="use_underline">True</property>
                         <property name="justify">GTK_JUSTIFY_RIGHT</property>
+                        <property name="mnemonic_widget">entry_host</property>
+                        <accessibility>
+                          <atkrelation target="entry_host" type="label-for"/>
+                        </accessibility>
                       </widget>
                       <packing>
-                        <property name="top_attach">1</property>
-                        <property name="bottom_attach">2</property>
                         <property name="x_options">GTK_FILL</property>
                         <property name="y_options"></property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkLabel" id="label_database">
+                      <widget class="GtkEntry" id="entry_host">
                         <property name="visible">True</property>
-                        <property name="xalign">0</property>
+                        <property name="can_focus">True</property>
                       </widget>
                       <packing>
                         <property name="left_attach">1</property>
                         <property name="right_attach">2</property>
-                        <property name="top_attach">1</property>
-                        <property name="bottom_attach">2</property>
-                        <property name="x_options">GTK_FILL</property>
                         <property name="y_options"></property>
                       </packing>
                     </child>
@@ -1240,12 +1262,9 @@
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkButton" id="button_find_all">
+                      <widget class="GtkLabel" id="label_records_count">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="label" translatable="yes">Find All</property>
-                        <property name="use_underline">True</property>
-                        <property name="response_id">0</property>
+                        <property name="label" translatable="yes">0</property>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
@@ -1255,9 +1274,12 @@
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkLabel" id="label_records_count">
+                      <widget class="GtkButton" id="button_find_all">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">0</property>
+                        <property name="can_focus">True</property>
+                        <property name="label" translatable="yes">Find All</property>
+                        <property name="use_underline">True</property>
+                        <property name="response_id">0</property>
                       </widget>
                       <packing>
                         <property name="expand">False</property>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]