[blam/gtk-builder] Start working on a a cleaner replacement for ItemList, FeedList
- From: Carlos Martín Nieto <cmartin src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [blam/gtk-builder] Start working on a a cleaner replacement for ItemList, FeedList
- Date: Sat, 23 Mar 2013 05:39:35 +0000 (UTC)
commit c30ee04f1be435938ae41adbdf8f36ab06cef827
Author: Carlos Martín Nieto <cmn dwim me>
Date: Sat Mar 23 05:37:34 2013 +0100
Start working on a a cleaner replacement for ItemList, FeedList
src/Blam.cs | 9 +++--
src/ChannelCollection.cs | 20 +++++++------
src/ChannelList.cs | 73 +++++++++++++++++++++++++++++++++++++++++++++-
src/ItemList.cs | 8 ++---
4 files changed, 91 insertions(+), 19 deletions(-)
---
diff --git a/src/Blam.cs b/src/Blam.cs
index 8b216a3..ff20f42 100644
--- a/src/Blam.cs
+++ b/src/Blam.cs
@@ -7,12 +7,13 @@ using Defines = Imendio.Blam.Defines;
namespace Blam
{
using Channel = Imendio.Blam.Channel;
+ using IChannel = Imendio.Blam.IChannel;
public class BlamApplication
{
Window MainWindow;
ItemList ItemList;
- ChannelList FeedList;
+ FeedList FeedList;
ItemView ItemView;
ScrolledWindow FeedListSw;
@@ -31,7 +32,7 @@ namespace Blam
channels = ChannelCollection.LoadFromFile (Defines.APP_HOMEDIR + "/collection.xml");
FeedListSw = bld.GetObject<ScrolledWindow>("feed-list-scroll");
- var FeedList = new ChannelList(channels.Channels, channels.Groups);
+ FeedList = new FeedList(channels.Channels, channels.Groups);
FeedListSw.Child = FeedList;
ItemList = new ItemList();
@@ -63,12 +64,12 @@ namespace Blam
TreeSelection selection = (TreeSelection)obj;
TreeIter iter;
TreeModel model;
- Channel channel;
+ IChannel channel;
if (!selection.GetSelected(out model, out iter))
return;
- channel = model.GetValue(iter, 0) as Channel;
+ channel = model.GetValue(iter, 0) as IChannel;
ItemList.Channel = channel;
}
diff --git a/src/ChannelCollection.cs b/src/ChannelCollection.cs
index 9a23c02..d7fb0f9 100644
--- a/src/ChannelCollection.cs
+++ b/src/ChannelCollection.cs
@@ -7,6 +7,7 @@
using System;
using System.Collections;
+using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Reflection;
@@ -37,9 +38,9 @@ namespace Imendio.Blam {
static XmlSerializer serializer = new XmlSerializer (typeof (ChannelCollection));
- private ArrayList mChannels;
+ List<Channel> mChannels;
[XmlElement ("Channel", typeof (Channel))]
- public ArrayList Channels {
+ public List<Channel> Channels {
get {
return mChannels;
}
@@ -48,7 +49,8 @@ namespace Imendio.Blam {
}
}
- [XmlElement("Group", typeof(ChannelGroup))] public ArrayList Groups;
+ [XmlElement("Group", typeof(ChannelGroup))]
+ public List<ChannelGroup> Groups {get; private set; }
public int NrOfUnreadItems {
get {
@@ -97,8 +99,8 @@ namespace Imendio.Blam {
collection = RealLoadFromFile (Defines.APP_DATADIR + "/collection.xml");
} catch {
collection = new ChannelCollection ();
- collection.mChannels = new ArrayList ();
- collection.Groups = new ArrayList ();
+ collection.mChannels = new List<Channel>();
+ collection.Groups = new List<ChannelGroup>();
}
}
@@ -134,7 +136,7 @@ namespace Imendio.Blam {
reader.Close ();
if (collection.Channels == null) {
- collection.mChannels = new ArrayList ();
+ collection.mChannels = new List<Channel>();
}
return collection;
@@ -181,7 +183,7 @@ namespace Imendio.Blam {
channel.Name = channel.Url;
}
- mChannels.Add (channel);
+ mChannels.Add (channel as Channel);
channel.RefreshAsync(updated => {
MarkAsDirty(true);
if (ChannelAdded != null)
@@ -216,9 +218,9 @@ namespace Imendio.Blam {
{
/* Try to find out from which list we need to remove. */
if(mChannels.Contains(channel)){
- mChannels.Remove (channel);
+ mChannels.Remove (channel as Channel);
} else if(Groups.Contains(channel)){
- Groups.Remove(channel);
+ Groups.Remove(channel as ChannelGroup);
} else {
/* It's not a first-level channel or group. Dig deeper. */
foreach(ChannelGroup group in Groups){
diff --git a/src/ChannelList.cs b/src/ChannelList.cs
index 2a9a51e..1a76dc0 100644
--- a/src/ChannelList.cs
+++ b/src/ChannelList.cs
@@ -10,9 +10,80 @@ using Gtk;
using GtkSharp;
using System;
using System.Collections;
+using System.Collections.Generic;
using System.Runtime.InteropServices;
using Mono.Unix;
+namespace Blam
+{
+ using Channel = Imendio.Blam.Channel;
+ using IChannel = Imendio.Blam.IChannel;
+ using ChannelGroup = Imendio.Blam.ChannelGroup;
+
+ public class FeedList : Gtk.TreeView
+ {
+ TreeViewColumn name_col;
+
+ public FeedList(IEnumerable<Channel> channels, IEnumerable<ChannelGroup> groups)
+ {
+ name_col = new TreeViewColumn();
+ var renderer = new CellRendererText();
+ name_col.PackStart(renderer, true);
+ name_col.Sizing = TreeViewColumnSizing.GrowOnly;
+ name_col.Expand = true;
+ name_col.SetCellDataFunc(renderer, NamesCellDataFunc);
+ AppendColumn(name_col);
+
+ var items_col = new TreeViewColumn();
+ renderer = new CellRendererText();
+ items_col.PackStart(renderer, true);
+ items_col.SetCellDataFunc(renderer, ItemsCellDataFunc);
+ AppendColumn(items_col);
+
+ RulesHint = true;
+ Model = new TreeStore (typeof(IChannel));
+ HeadersVisible = false;
+
+ var model = Model as TreeStore;
+
+ foreach (IChannel chan in channels)
+ chan.Iter = model.AppendValues(chan);
+
+ foreach (ChannelGroup group in groups) {
+ var iter = model.AppendValues(group);
+ group.Iter = iter;
+ //SetDragDestRow(Model.GetPath(iter), TreeViewDropPosition.IntoOrAfter);
+
+ foreach(IChannel chan in group.Channels)
+ chan.Iter = model.AppendValues(group.Iter, chan);
+ }
+ }
+
+ void NamesCellDataFunc(TreeViewColumn col, CellRenderer _cell, TreeModel model, TreeIter iter)
+ {
+ IChannel channel = model.GetValue(iter, 0) as IChannel;
+ var cell = _cell as CellRendererText;
+ var weight = channel.NrOfUnreadItems > 0 ? Pango.Weight.Bold : Pango.Weight.Normal;
+
+ cell.Text = channel.Name;
+ cell.Ellipsize = Pango.EllipsizeMode.End;
+ cell.Weight = (int)weight;
+ }
+
+ private void ItemsCellDataFunc(TreeViewColumn col, CellRenderer _cell, TreeModel model,
TreeIter iter)
+ {
+ IChannel channel = model.GetValue(iter, 0) as IChannel;
+ var cell = _cell as CellRendererText;
+ var weight = channel.NrOfUnreadItems > 0 ? Pango.Weight.Bold : Pango.Weight.Normal;
+
+ cell.Text = String.Format("{0}/{1}", channel.NrOfUnreadItems, channel.NrOfItems);
+ cell.Xalign = 1.0f;
+ cell.Weight = (int)weight;
+ }
+
+ }
+}
+
namespace Imendio.Blam {
public class ChannelList : Gtk.TreeView {
@@ -36,7 +107,7 @@ namespace Imendio.Blam {
new TargetEntry("channel", TargetFlags.Widget, (uint)TargetType.Channel)
};
- public ChannelList(IList channels, IList groups)
+ public ChannelList(IEnumerable<Channel> channels, IEnumerable<ChannelGroup> groups)
{
TreeViewColumn col;
CellRenderer cell;
diff --git a/src/ItemList.cs b/src/ItemList.cs
index 44135ff..0b18b2f 100644
--- a/src/ItemList.cs
+++ b/src/ItemList.cs
@@ -17,6 +17,7 @@ using System.ServiceModel.Syndication;
namespace Blam
{
using Channel = Imendio.Blam.Channel;
+ using IChannel = Imendio.Blam.IChannel;
using ItemView = Imendio.Blam.ItemView;
using Item = Imendio.Blam.Item;
using ItemStore = Imendio.Blam.ItemStore;
@@ -25,7 +26,7 @@ namespace Blam
public class ItemList : Gtk.TreeView
{
- public Channel Channel {
+ public IChannel Channel {
get {
return current;
}
@@ -35,7 +36,7 @@ namespace Blam
}
}
- Channel current;
+ IChannel current;
TreeViewColumn column;
public event OnChange OnChangeEvent;
@@ -68,9 +69,6 @@ namespace Blam
void UpdateList()
{
- if (current == null)
- return;
-
var list = Model as ListStore;
var store = ItemStore.GetInstance();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]