This weekend and this evening I did some more TopReader development. I got stuck on the right mouse click popup (context menu) for creating folders,adding feeds, … I asked #gnome and Murray pointed me to the UIManager class. I have to say this is a nifty thing!!
For those out there who (like me) didn’t know about this Factory, it reads an xml file like the following
<ui>
<popup name="channelpopupmenu" action="channelpopup">
<menuitem name="MarkRead" action="MarkRead"/>
</popup>
<popup name="folderpopupmenu" action="folderpopupmenu">
<menuitem name="CreateFolder" action="CreateFolder"/>
<menuitem name="AddFeed" action="AddFeed"/>
</popup>
</ui>
In your code you just do this for initializing it
uim = new UIManager ();
uim.AddUiFromResource("FeedMenu.xml");
And if you want to show a context menu, you intercept the right mouse click event on your widget and do this little piece of code
Menu w = (Menu)uim.GetWidget("ui/channelpopupmenu");
w.Popup();
The widget is retrieved by the tagname or its actual name
As easy as that!!!
Now we take it a step further. During initalisation we do this
uim = new UIManager ();
uim.InsertActionGroup (group, 0);
uim.AddUiFromResource("FeedMenu.xml");
Where the action group represents a group of Action objects (Duh)
ActionEntry[] entries = new ActionEntry[] {
new ActionEntry ("MarkRead", Stock.Cut, "MarkRead", null,
"MarkRead",
new EventHandler (OnMarkRead)),
new ActionEntry ("CreateFolder", Stock.Cut, "CreateFolder", null,
"CreateFolder",
new EventHandler (OnCreateFolder)),
new ActionEntry ("AddFeed", Stock.Cut, "AddFeed", null,
"AddFeed",
new EventHandler (OnAddFeed))
};
I haven’t configured them as you can see, all are the Cut Stock item.
So we linked the selection of the context menu item with the designed EventHandler.
One word: SWEET
What can I do so far with my app, well I can create folders, add feeds, read feeds, mark a whole feed as read. In the backend the feeds get updated automatically. As I mentioned everything is stored in a small sqlite3 database, for 318 items it’s 600 k, not tho much if you ask me. I wonder how much feeds I can archive before I reach the limit of sqlite (thought that was 2 gigs,but not sure)
I’ll keep you posted (offcourse it’s gonna be opensourced, LGPL probably as I like it more than the GPL)
Like this:
Like Loading...