[gnome-builder/wip/project-selector: 41/56] project-selector: add page for cloning repository



commit f780345e45f105d40f3028851ee73c368a14813e
Author: Christian Hergert <christian hergert me>
Date:   Thu Apr 2 23:03:46 2015 -0700

    project-selector: add page for cloning repository

 data/ui/gb-new-project-dialog.ui    |   71 ++++++++++++++++++++++++++++++++++-
 src/dialogs/gb-new-project-dialog.c |   29 +++++++++++++-
 2 files changed, 97 insertions(+), 3 deletions(-)
---
diff --git a/data/ui/gb-new-project-dialog.ui b/data/ui/gb-new-project-dialog.ui
index 8ae6ac0..d558462 100644
--- a/data/ui/gb-new-project-dialog.ui
+++ b/data/ui/gb-new-project-dialog.ui
@@ -117,7 +117,7 @@
                           </object>
                         </child>
                         <child>
-                          <object class="GtkListBoxRow" id="row_open_remove_project">
+                          <object class="GtkListBoxRow" id="row_clone_remote">
                             <property name="visible">true</property>
                             <child>
                               <object class="GtkBox">
@@ -280,6 +280,71 @@
             <property name="height-request">500</property>
           </object>
         </child>
+        <child>
+          <object class="GtkBox" id="page_clone_remote">
+            <property name="orientation">horizontal</property>
+            <property name="expand">true</property>
+            <property name="spacing">12</property>
+            <property name="visible">true</property>
+            <child type="center">
+              <object class="GtkBox">
+                <property name="orientation">vertical</property>
+                <property name="spacing">12</property>
+                <property name="halign">center</property>
+                <property name="hexpand">false</property>
+                <property name="valign">center</property>
+                <property name="vexpand">false</property>
+                <property name="visible">true</property>
+                <child>
+                  <object class="GtkEntry" id="clone_uri_entry">
+                    <property name="hexpand">true</property>
+                    <property name="width-chars">35</property>
+                    <property name="placeholder-text" translatable="yes">ssh://user 
host:repository.git</property>
+                    <property name="visible">true</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkFileChooserButton" id="clone_location_button">
+                    <property name="action">select-folder</property>
+                    <property name="hexpand">true</property>
+                    <property name="visible">true</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkBox">
+                <property name="orientation">vertical</property>
+                <property name="spacing">12</property>
+                <property name="hexpand">true</property>
+                <property name="vexpand">true</property>
+                <property name="valign">center</property>
+                <property name="halign">end</property>
+                <property name="visible">true</property>
+                <child>
+                  <object class="GtkLabel" id="clone_uri_label">
+                    <property name="label" translatable="yes">Repository URL</property>
+                    <property name="visible">true</property>
+                    <property name="xalign">1.0</property>
+                    <style>
+                      <class name="dim-label"/>
+                    </style>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="clone_location_label">
+                    <property name="label" translatable="yes">Location</property>
+                    <property name="visible">true</property>
+                    <property name="xalign">1.0</property>
+                    <style>
+                      <class name="dim-label"/>
+                    </style>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
       </object>
     </child>
   </template>
@@ -296,6 +361,10 @@
       <widget name="language_label"/>
       <widget name="pattern_button"/>
       <widget name="pattern_label"/>
+      <widget name="clone_location_label"/>
+      <widget name="clone_location_button"/>
+      <widget name="clone_uri_label"/>
+      <widget name="clone_uri_entry"/>
     </widgets>
   </object>
 </interface>
diff --git a/src/dialogs/gb-new-project-dialog.c b/src/dialogs/gb-new-project-dialog.c
index e4d5d79..946e0f4 100644
--- a/src/dialogs/gb-new-project-dialog.c
+++ b/src/dialogs/gb-new-project-dialog.c
@@ -27,10 +27,14 @@ struct _GbNewProjectDialog
 
   GtkButton            *back_button;
   GtkButton            *cancel_button;
+  GtkFileChooserWidget *clone_location_button;
   GtkButton            *create_button;
   GtkFileChooserWidget *file_chooser;
+  GtkHeaderBar         *header_bar;
   GtkListBox           *open_list_box;
+  GtkListBoxRow        *row_clone_remote;
   GtkListBoxRow        *row_open_local;
+  GtkBox               *page_clone_remote;
   GtkBox               *page_open_project;
   GtkStack             *stack;
 };
@@ -119,6 +123,8 @@ gb_new_project_dialog__open_list_box_row_activated (GbNewProjectDialog *self,
 
   if (row == self->row_open_local)
     gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->file_chooser));
+  else if (row == self->row_clone_remote)
+    gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->page_clone_remote));
 }
 
 static void
@@ -138,13 +144,22 @@ gb_new_project_dialog__stack_notify_visible_child (GbNewProjectDialog *self,
       gtk_widget_hide (GTK_WIDGET (self->cancel_button));
       gtk_widget_show (GTK_WIDGET (self->back_button));
       gtk_widget_set_sensitive (GTK_WIDGET (self->create_button), FALSE);
+      gtk_header_bar_set_title (self->header_bar, _("Select Project File"));
     }
   else if (visible_child == GTK_WIDGET (self->page_open_project))
-  {
+    {
       gtk_widget_hide (GTK_WIDGET (self->back_button));
       gtk_widget_show (GTK_WIDGET (self->cancel_button));
       gtk_widget_set_sensitive (GTK_WIDGET (self->create_button), FALSE);
-  }
+      gtk_header_bar_set_title (self->header_bar, _("New Project"));
+    }
+  else if (visible_child == GTK_WIDGET (self->page_clone_remote))
+    {
+      gtk_widget_hide (GTK_WIDGET (self->cancel_button));
+      gtk_widget_show (GTK_WIDGET (self->back_button));
+      gtk_widget_set_sensitive (GTK_WIDGET (self->create_button), FALSE);
+      gtk_header_bar_set_title (self->header_bar, _("Clone Repository"));
+    }
 }
 
 static GList *
@@ -321,17 +336,23 @@ gb_new_project_dialog_class_init (GbNewProjectDialogClass *klass)
 
   GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, back_button);
   GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, cancel_button);
+  GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, clone_location_button);
   GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, create_button);
   GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, file_chooser);
+  GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, header_bar);
   GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, open_list_box);
+  GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, page_clone_remote);
   GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, page_open_project);
   GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, row_open_local);
+  GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, row_clone_remote);
   GB_WIDGET_CLASS_BIND (klass, GbNewProjectDialog, stack);
 }
 
 static void
 gb_new_project_dialog_init (GbNewProjectDialog *self)
 {
+  g_autofree gchar *path = NULL;
+  GFile *location;
   GList *iter;
   GList *filters;
 
@@ -388,5 +409,9 @@ gb_new_project_dialog_init (GbNewProjectDialog *self)
                                 gb_new_project_dialog__open_list_box_header_func,
                                 NULL, NULL);
 
+  path = g_build_filename (g_get_home_dir (), Q_("Directory|Projects"), NULL);
+  gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (self->file_chooser), path);
+  gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (self->clone_location_button), path);
+
   g_object_notify (G_OBJECT (self->stack), "visible-child");
 }


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