void BuildProjectColumns()
{
m_projectsTreeView.RowSeparatorFunc = delegate (TreeModel model, TreeIter iter) {
var project = (Project)model.GetValue (iter, 0);
return (project == null);
};
var column = new TreeViewColumn ();
column.Title = Catalog.GetString ("Projects");
column.Alignment = 0.5f;
var cpix = new CellRendererPixbuf ();
column.PackStart (cpix, false);
column.SetCellDataFunc (cpix, (TreeCellDataFunc) ProjectIconCellDataFunc);
var ctext = new CellRendererText ();
ctext.Ellipsize = Pango.EllipsizeMode.End;
ctext.Editable = true;
ctext.Edited += OnProjectTitleEdited;
ctext.EditingStarted += delegate {
this.OnEditingStarted (ctext);
};
ctext.EditingCanceled += delegate {
this.OnEditingStopped ();
};
column.PackStart (ctext, true);
column.SetCellDataFunc (ctext, (TreeCellDataFunc) ProjectTitleCellDataFunc);
m_projectsTreeView.RowSeparatorFunc = ProjectRowSeparatorFunc;
m_projectsTreeView.AppendColumn (column);
var targetEntries = new TargetEntry[] {
new TargetEntry ("application/adroit-task", TargetFlags.App, 0),
};
this.m_projectsTreeView.EnableModelDragDest (targetEntries, Gdk.DragAction.Default | Gdk.DragAction.Move);
this.m_projectsTreeView.DragDataReceived += delegate(object o, DragDataReceivedArgs args) {
var tree = o as Gtk.TreeView;
TreeViewDropPosition pos;
TreePath path;
if (tree.GetDestRowAtPos (args.X, args.Y, out path, out pos)) {
TreeIter iter;
tree.Model.GetIter (out iter, path);
var project = tree.Model.GetValue (iter, 0) as Project;
if (project == null)
return;
var model = m_tasksTreeView.Model;
var taskId = BitConverter.ToInt32 (args.SelectionData.Data, 0);
model.Foreach (delegate (TreeModel m, TreePath p, TreeIter i) {
var task = m.GetValue (i, 0) as Task;
if (task != null && task.Id == taskId) {
var command = new EditTaskCommand () {
Task = task,
Property = "ProjectId",
Value = project.Id,
Storage = m_storage
};
var commands = ServiceManager.Get<CommandService> ().Commands;
commands.Do (command);
return true;
}
return false;
});
}
};
}