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)