Index: libi4uc/Makefile.am
===================================================================
--- libi4uc/Makefile.am	(revision 16031c0c0382e0dec3ff640ff27c96d69a9ff602)
+++ libi4uc/Makefile.am	(revision e7bab963c488e383de4d6c79887ec374f2621765)
@@ -15,4 +15,5 @@
 
 libi4uc_la_SOURCES = \
+	i4ucauthorslist.vala \
 	i4ucbuilder.vala \
 	i4ucbuilderdevicetype.vala \
@@ -34,4 +35,5 @@
 	i4ucmainwindowview.vala \
 	i4ucmainwindowviewiface.vala \
+	i4ucnewprojectdialog.vala \
 	i4ucpage.vala \
 	i4ucpageiface.vala \
Index: libi4uc/i4ucauthorslist.vala
===================================================================
--- libi4uc/i4ucauthorslist.vala	(revision e7bab963c488e383de4d6c79887ec374f2621765)
+++ libi4uc/i4ucauthorslist.vala	(revision e7bab963c488e383de4d6c79887ec374f2621765)
@@ -0,0 +1,107 @@
+/* i4ucauthorslist.vala
+ *
+ * Copyright (C) 2010  Matias De la Puente
+ *
+ * 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 3 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, see <http://www.gnu.org/licenses/>.
+ *
+ * Author:
+ * 	Matias De la Puente <mfpuente.ar@gmail.com>
+ */
+using Gtk;
+using Gee;
+
+public class I4uc.AuthorsList : Gtk.VBox
+{
+	private ListStore _authors_store;
+	private TreeView _authors_view;
+
+	private ArrayList<string> _authors = new ArrayList<string> ();
+
+	public Gee.List<string> authors { owned get { return _authors.read_only_view; } }
+
+	private enum AuthorsColumns
+	{
+		AUTHOR,
+		N_COLUMNS
+	}
+
+	public signal void author_added (string author);
+	public signal void author_removed (string author);
+
+	public AuthorsList ()
+	{
+		_authors_store = new ListStore (AuthorsColumns.N_COLUMNS, typeof (string));
+		_authors_view = new TreeView.with_model (_authors_store);
+
+		var column = new TreeViewColumn ();
+		var renderer = new CellRendererText ();
+ 		column.pack_start (renderer, false);
+		column.add_attribute (renderer, "text", AuthorsColumns.AUTHOR);
+		_authors_view.append_column (column);
+		_authors_view.set_headers_visible (false);
+
+		var add_author_button = new Button.from_stock (STOCK_ADD);
+		var remove_author_button = new Button.from_stock (STOCK_REMOVE);
+
+		var buttons_vbox = new VBox (false, 0);
+		buttons_vbox.pack_start (add_author_button, false, false, 2);
+		buttons_vbox.pack_start (remove_author_button, false, false, 2);
+
+		var authors_hbox = new HBox (false, 0);
+		authors_hbox.pack_start (_authors_view, true, true, 2);
+		authors_hbox.pack_start (buttons_vbox, false, false, 0);
+
+		pack_start (authors_hbox, true, true, 2);
+
+		add_author_button.clicked.connect (on_add_author);
+		remove_author_button.clicked.connect (on_remove_author);
+	}
+
+	private void on_add_author ()
+	{
+		var dialog = new Dialog ();
+		dialog.title = _("Add new author");
+		var label = new Label (_("Insert new author name:"));
+		dialog.vbox.pack_start (label, false, false, 5);
+		var entry = new Entry ();
+		dialog.vbox.pack_start (entry, true, true, 5);
+		dialog.vbox.show_all ();
+		dialog.add_button (STOCK_CANCEL, ResponseType.CANCEL);
+		dialog.add_button (STOCK_OK, ResponseType.OK);
+		dialog.set_default_response (ResponseType.OK);
+
+		if (dialog.run () == ResponseType.OK)
+		{
+			TreeIter iter;
+			_authors_store.append (out iter);
+			_authors_store.set (iter, AuthorsColumns.AUTHOR, entry.text);
+			_authors.add (entry.text);
+			this.author_added (entry.text);
+		}
+		dialog.destroy ();
+	}
+
+	private void on_remove_author ()
+	{
+		TreeIter iter;
+		if (_authors_view.get_selection ().get_selected (null, out iter))
+		{
+			string author;
+			_authors_store.get (iter, AuthorsColumns.AUTHOR, out author);
+			_authors_store.remove (iter);
+			_authors.remove (author);
+			this.author_removed (author);
+		}
+	}
+}
Index: libi4uc/i4ucnewprojectdialog.vala
===================================================================
--- libi4uc/i4ucnewprojectdialog.vala	(revision e7bab963c488e383de4d6c79887ec374f2621765)
+++ libi4uc/i4ucnewprojectdialog.vala	(revision e7bab963c488e383de4d6c79887ec374f2621765)
@@ -0,0 +1,74 @@
+/* i4ucnewprojectdialog.vala
+ *
+ * Copyright (C) 2009-2010  Matias De la Puente
+ *
+ * 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 3 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, see <http://www.gnu.org/licenses/>.
+ *
+ * Author:
+ * 	Matias De la Puente <mfpuente.ar@gmail.com>
+ */
+using Gtk;
+
+public class I4uc.NewProjectDialog : Gtk.Dialog
+{
+	private FileChooserButton _folder_chooser;
+	private Entry _name_entry = new Entry ();
+	private AuthorsList _authors_list = new AuthorsList ();
+
+	public string name { get { return _name_entry.text; } }
+	public string uri { owned get { return _folder_chooser.get_current_folder_file ().get_child_for_display_name (_name_entry.text + ".i4uc").get_uri (); } }
+	public Gee.List authors { owned get { return _authors_list.authors; } }
+
+	public NewProjectDialog ()
+	{
+		//Project folder
+		_folder_chooser = new FileChooserButton (_("New project"), FileChooserAction.SELECT_FOLDER);
+		_folder_chooser.set_current_folder (Environment.get_home_dir ());
+
+		var label_size_group = new SizeGroup (SizeGroupMode.HORIZONTAL);
+		var value_size_group = new SizeGroup (SizeGroupMode.HORIZONTAL);
+
+		//Project folder
+		var hbox = ViewUtils.create_hbox (_("Folder:"), label_size_group, this.vbox);
+		hbox.pack_start (_folder_chooser, false, false, 5);
+		value_size_group.add_widget (_folder_chooser);
+
+		//Project name
+		hbox = ViewUtils.create_hbox (_("Name:"), label_size_group, this.vbox);
+		hbox.pack_start (_name_entry, false, false, 5);
+		value_size_group.add_widget (_name_entry);
+
+		//Authors
+		var authors_label = new Label (_("Authors:"));
+		authors_label.xalign = 0;
+		this.vbox.pack_start (authors_label, false, false, 5);
+		this.vbox.pack_start (_authors_list, true, true, 5);
+
+		//Buttons
+		add_button (STOCK_CANCEL, ResponseType.CANCEL);
+		add_button (STOCK_OK, ResponseType.OK);
+		set_response_sensitive (ResponseType.OK, false);
+		set_default_response (ResponseType.OK);
+		this.vbox.show_all ();
+
+		//Connect signals
+		_name_entry.changed.connect (on_name_changed);
+	}
+	
+	private void on_name_changed ()
+	{
+		var is_valid_name = _name_entry.text != "" || !_name_entry.text.has_prefix (".");
+		set_response_sensitive (ResponseType.OK, is_valid_name);
+	}
+}
Index: libi4uc/i4ucprojectspresenter.vala
===================================================================
--- libi4uc/i4ucprojectspresenter.vala	(revision 7de01d30f19e0a3d6ec5aeb01b43dbe0c3dcc010)
+++ libi4uc/i4ucprojectspresenter.vala	(revision e7bab963c488e383de4d6c79887ec374f2621765)
@@ -35,4 +35,5 @@
 
 		//Connect view signals
+		_view.new_clicked.connect (on_new_clicked);
 		_view.open_clicked.connect (on_open_clicked);
 		_view.close_clicked.connect (on_close_clicked);
@@ -52,4 +53,24 @@
 	{
 		_projects_side_page_presenter.remove_all_projects ();
+	}
+
+	private void on_new_clicked ()
+	{
+		string project_uri;
+		string project_name;
+		Gee.List<string> authors;
+		if (_view.show_new_dialog (out project_uri, out project_name, out authors) == Gtk.ResponseType.OK)
+		{
+			var project = new Project ();
+			project.name = project_name;
+			project.authors.add_all (authors);
+
+			var main_profile = new ProjectProfile ();
+			main_profile.name = "main";
+			project.profiles["main"] = main_profile;
+
+			project.save (project_uri);
+			_projects_side_page_presenter.add_project (project);
+		}
 	}
 
Index: libi4uc/i4ucprojectsview.vala
===================================================================
--- libi4uc/i4ucprojectsview.vala	(revision c5050d606ed30b3d49bfcd42dbbafd7d2244d408)
+++ libi4uc/i4ucprojectsview.vala	(revision e7bab963c488e383de4d6c79887ec374f2621765)
@@ -63,4 +63,17 @@
 	}
 
+	public int show_new_dialog (out string project_uri, out string project_name, out Gee.List<string> authors)
+	{
+		var dialog = new NewProjectDialog ();
+		var response = dialog.run ();
+
+		project_uri = dialog.uri;
+		project_name = dialog.name;
+		authors = dialog.authors;
+
+		dialog.destroy ();
+		return response;
+	}
+
 	public void show_open_dialog (ref string folder_uri, out Gee.List<string> projects)
 	{
@@ -86,4 +99,9 @@
 		dialog.destroy ();
 	}
+
+	private void on_new ()
+	{
+		this.new_clicked ();
+	}
 	
 	private void on_open ()
@@ -100,4 +118,5 @@
 	{
 		{ "ProjectsMenuAction", null, N_("_Projects") },
+		{ "NewProjectAction", STOCK_NEW, null, null, N_("Create a new project"), on_new },
 		{ "OpenProjectAction", STOCK_OPEN, null, null, N_("Open a project"), on_open },
 		{ "CloseProjectAction", STOCK_CLOSE, null, null, N_("Close current project"), on_close }
@@ -109,4 +128,5 @@
 		<placeholder name="MenuBarOps">
 			<menu name="ProjectsMenu" action="ProjectsMenuAction">
+				<menuitem action="NewProjectAction"/>
 				<menuitem action="OpenProjectAction"/>
 				<separator/>
Index: libi4uc/i4ucprojectsviewiface.vala
===================================================================
--- libi4uc/i4ucprojectsviewiface.vala	(revision c5050d606ed30b3d49bfcd42dbbafd7d2244d408)
+++ libi4uc/i4ucprojectsviewiface.vala	(revision e7bab963c488e383de4d6c79887ec374f2621765)
@@ -25,8 +25,10 @@
 	public abstract bool close_sensitive { set; get; }
 
+	public signal void new_clicked ();
 	public signal void open_clicked ();
 	public signal void close_clicked ();
 
 	public abstract void show_error_message (string error_message);
+	public abstract int show_new_dialog (out string project_uri, out string project_name, out Gee.List<string> authors);
 	public abstract void show_open_dialog (ref string folder_uri, out Gee.List<string> projects);
 }
