Skip to content
This repository has been archived by the owner on Feb 8, 2018. It is now read-only.

Commit

Permalink
* Monsoon/MainWindow.cs:
Browse files Browse the repository at this point in the history
* Monsoon/LabelTreeView.cs: The label treeview only needs to be
  updated when a torrent is added/removed from a label. Use a
  liststore instead of TreeRenderFuncs.

svn path=/trunk/monsoon/; revision=128626
  • Loading branch information
alanmcgovern committed Mar 4, 2009
1 parent ba01356 commit 79a1295
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 58 deletions.
85 changes: 44 additions & 41 deletions Monsoon/LabelTreeView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,23 +38,21 @@ public class LabelTreeView : TreeView
public TreeViewColumn iconColumn;
public TreeViewColumn nameColumn;
public TreeViewColumn sizeColumn;


private bool contextActive;
private Gtk.Menu contextMenu;
private ImageMenuItem createItem;
ImageMenuItem removeItem;

LabelController Controller {
get; set;
}

ImageMenuItem removeItem;

public new ListStore Model {
get { return (ListStore) base.Model; }
set { base.Model = value; }
}

private bool contextActive;

public LabelTreeView(LabelController labels, bool contextActive)
{
Controller = labels;
Expand All @@ -64,8 +62,6 @@ public LabelTreeView(LabelController labels, bool contextActive)
HeadersVisible = false;
HeadersClickable = false;

Model = new ListStore (typeof (TorrentLabel));

buildColumns();
BuildContextMenu();

Expand All @@ -77,19 +73,34 @@ public LabelTreeView(LabelController labels, bool contextActive)
Remove (e.Label);
};

Selection.Changed += delegate(object sender, EventArgs e) {
Selection.Changed += Event.Wrap (delegate(object sender, EventArgs e) {
TreeIter iter;
if (Selection.GetSelected (out iter))
Controller.Selection = ((TorrentLabel) Model.GetValue (iter, 0));
};
});

Controller.Labels.ForEach (Add);
Remove (Controller.Delete);
}

void Add (TorrentLabel label)
{
Model.AppendValues (label);
UpdateSize (Model.AppendValues (label, label.Icon, label.Name, "", !label.Immutable));
label.Added += LabelChanged;
label.Removed += LabelChanged;
}

void LabelChanged (object sender, DownloadAddedEventArgs e)
{
TreeIter iter;
if (Model.GetIterFirst (out iter)) {
do {
if (Model.GetValue (iter, 0) == sender) {
UpdateSize (iter);
return;
}
} while (Model.IterNext (ref iter));
}
}

void Remove (TorrentLabel label)
Expand All @@ -99,7 +110,9 @@ void Remove (TorrentLabel label)
do {
if (Model.GetValue (iter, 0) != label)
continue;


label.Added -= LabelChanged;
label.Removed -= LabelChanged;
Model.Remove (ref iter);
return;
} while (Model.IterNext (ref iter));
Expand All @@ -108,34 +121,37 @@ void Remove (TorrentLabel label)

private void buildColumns()
{
Model = new ListStore (typeof (TorrentLabel), typeof (Gdk.Pixbuf),
typeof (string), typeof (string), typeof (bool));

iconColumn = new TreeViewColumn();
nameColumn = new TreeViewColumn();
sizeColumn = new TreeViewColumn();

Gtk.CellRendererPixbuf iconRendererCell = new Gtk.CellRendererPixbuf ();
Gtk.CellRendererText nameRendererCell = new Gtk.CellRendererText();
Gtk.CellRendererText nameRendererCell = new Gtk.CellRendererText { Editable = true };
Gtk.CellRendererText sizeRendererCell = new Gtk.CellRendererText();

nameRendererCell.Editable = true;
nameRendererCell.Edited += Event.Wrap ((EditedHandler) delegate (object o, Gtk.EditedArgs args) {
Gtk.TreeIter iter;
Model.GetIter (out iter, new Gtk.TreePath (args.Path));

TorrentLabel label = (TorrentLabel) Model.GetValue (iter, 0);
label.Name = args.NewText;
});

iconColumn.PackStart(iconRendererCell, true);
nameColumn.PackStart(nameRendererCell, true);
sizeColumn.PackStart(sizeRendererCell, true);

iconColumn.SetCellDataFunc (iconRendererCell, new Gtk.TreeCellDataFunc (RenderIcon));
nameColumn.SetCellDataFunc (nameRendererCell, new Gtk.TreeCellDataFunc (RenderName));
sizeColumn.SetCellDataFunc (sizeRendererCell, new Gtk.TreeCellDataFunc (RenderSize));
iconColumn.AddAttribute (iconRendererCell, "pixbuf", 1);
nameColumn.AddAttribute (nameRendererCell, "text", 2);
sizeColumn.AddAttribute (sizeRendererCell, "text", 3);
nameColumn.AddAttribute (nameRendererCell, "editable", 4);

AppendColumn (iconColumn);
AppendColumn (nameColumn);
AppendColumn (sizeColumn);

nameRendererCell.Edited += Event.Wrap ((EditedHandler) delegate (object o, Gtk.EditedArgs args) {
Gtk.TreeIter iter;
if (Model.GetIter (out iter, new Gtk.TreePath (args.Path))) {
TorrentLabel label = (TorrentLabel) Model.GetValue (iter, 0);
label.Name = args.NewText;
}
});
}

private void BuildContextMenu ()
Expand Down Expand Up @@ -188,24 +204,11 @@ protected override bool OnButtonPressEvent (Gdk.EventButton e)

return false;
}

private void RenderIcon (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
{
TorrentLabel label = (TorrentLabel) model.GetValue (iter, 0);
(cell as Gtk.CellRendererPixbuf).Pixbuf = label.Icon;
}

private void RenderName (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
{
TorrentLabel label = (TorrentLabel) model.GetValue (iter, 0);
cell.Mode = label.Immutable ? CellRendererMode.Inert : CellRendererMode.Editable;
(cell as Gtk.CellRendererText).Text = label.Name;
}

private void RenderSize (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)

void UpdateSize (TreeIter iter)
{
TorrentLabel label = (TorrentLabel) model.GetValue (iter, 0);
(cell as Gtk.CellRendererText).Text = "(" + label.Size + ")";
TorrentLabel label = (TorrentLabel) Model.GetValue (iter, 0);
Model.SetValue (iter, 3, "(" + label.Size + ")");
}

private static string _(string s)
Expand Down
18 changes: 1 addition & 17 deletions Monsoon/MainWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -998,9 +998,6 @@ private bool updateView ()
// Update General Page
updateGeneralPage ();

// Update Labels
updateLabels ();

// Update peers
updatePeersPage ();

Expand Down Expand Up @@ -1032,20 +1029,7 @@ private void updatePiecesPage()
foreach (Piece piece in pieces)
piecesListStore.AppendValues(piece);
}

private void updateLabels ()
{
TreeIter iter;
TreeModel model = labelTreeView.Model;

if (model.GetIterFirst (out iter)) {
do {
if (((TorrentLabel)model.GetValue (iter, 0)).Immutable)
model.EmitRowChanged(model.GetPath(iter), iter);
} while (model.IterNext(ref iter));
}
}


private void updateGeneralPage ()
{
Download download = TorrentController.SelectedDownload;
Expand Down

0 comments on commit 79a1295

Please sign in to comment.