--- nfo/projects/netfraggle/bin/FraggleTopicFrame.py 2004/08/26 17:23:30 1.1 +++ nfo/projects/netfraggle/bin/FraggleTopicFrame.py 2004/09/21 18:11:05 1.10 @@ -1,25 +1,187 @@ #Boa:MDIChild:FraggleTopicFrame -# $Id: FraggleTopicFrame.py,v 1.1 2004/08/26 17:23:30 joko Exp $ +# $Id: FraggleTopicFrame.py,v 1.10 2004/09/21 18:11:05 xabbu Exp $ # $Log: FraggleTopicFrame.py,v $ +# Revision 1.10 2004/09/21 18:11:05 xabbu +# + started work on the final tree Controll to display contenttypes and their items +# +# Revision 1.9 2004/09/17 20:51:24 xabbu +# + function initTreeList() will init a TreeList +# + function loadContent(contentkey) moved from FraggleListFrame +# +# Revision 1.8 2004/09/17 09:46:30 xabbu +# U function OnUpdateButtonButton items will be added in the correct order now +# +# Revision 1.7 2004/09/15 22:31:27 xabbu +# + in function OnUpdateButtonButton call to fraggleSync replaced with syncTopics +# + topics are being recieved from the server now +# +# Revision 1.6 2004/08/31 02:25:34 joko +# U removed FraggleTopicDetailFrame in favor of FraggleItemFrame and FraggleListFrame +# U now clearing topicListBox before updating it +# +# Revision 1.5 2004/08/30 13:06:16 joko +# U now gets config via self.engine +# +# Revision 1.4 2004/08/27 21:14:02 xabbu +# TopicDetails can now be closed. +# GUI change on Preferences Dialog in order to prepare multiple server profiles. +# Small bugfixes to get the new topic windows working on posix platform. +# +# Revision 1.3 2004/08/27 04:47:35 joko +# instance of FraggleEngine now available in self.engine +# added event handler "OnTopicListBoxListboxDclick" and logic to open "FraggleTopicDetailFrame"s +# +# Revision 1.2 2004/08/27 03:13:50 joko +# added listbox for topics and button for update/sync +# # Revision 1.1 2004/08/26 17:23:30 joko # initial commit # from wxPython.wx import * +from wxPython.stc import * + +import FraggleItemFrame +import FraggleListFrame def create(parent): return FraggleTopicFrame(parent) -[wxID_FRAGGLETOPICFRAME] = map(lambda _init_ctrls: wxNewId(), range(1)) +[wxID_FRAGGLETOPICFRAME, wxID_FRAGGLETOPICFRAMETOPICLISTBOX, + wxID_FRAGGLETOPICFRAMETREECTRL1, wxID_FRAGGLETOPICFRAMEUPDATEBUTTON, +] = map(lambda _init_ctrls: wxNewId(), range(4)) class FraggleTopicFrame(wxMDIChildFrame): def _init_ctrls(self, prnt): # generated method, don't edit wxMDIChildFrame.__init__(self, id=wxID_FRAGGLETOPICFRAME, name='', - parent=prnt, pos=wxPoint(352, 280), size=wxSize(138, 215), + parent=prnt, pos=wxPoint(494, 328), size=wxSize(424, 219), style=wxSIMPLE_BORDER | wxDEFAULT_FRAME_STYLE, title='Topics') - self.SetClientSize(wxSize(130, 188)) + self.SetClientSize(wxSize(416, 192)) + + self.updateButton = wxButton(id=wxID_FRAGGLETOPICFRAMEUPDATEBUTTON, + label=u'&Update', name=u'updateButton', parent=self, + pos=wxPoint(0, 168), size=wxSize(168, 23), style=0) + EVT_BUTTON(self.updateButton, wxID_FRAGGLETOPICFRAMEUPDATEBUTTON, + self.OnUpdateButtonButton) + + self.topicListBox = wxListBox(choices=[], + id=wxID_FRAGGLETOPICFRAMETOPICLISTBOX, name=u'topicListBox', + parent=self, pos=wxPoint(0, 0), size=wxSize(168, 168), style=0) + EVT_LISTBOX_DCLICK(self.topicListBox, + wxID_FRAGGLETOPICFRAMETOPICLISTBOX, + self.OnTopicListBoxListboxDclick) + + self.treeCtrl1 = wxTreeCtrl(id=wxID_FRAGGLETOPICFRAMETREECTRL1, + name='treeCtrl1', parent=self, pos=wxPoint(176, 0), + size=wxSize(160, 168), style=wxTR_HAS_BUTTONS) + self.treeCtrl1.Enable(True) + EVT_LEFT_DCLICK(self.treeCtrl1, self.OnTreeCtrl1LeftDclick) def __init__(self, parent): + self.parent = parent + + # render widgets self._init_ctrls(parent) + + # get engine-instance (singleton) + import __main__ + self.engine = __main__.engine + + def OnUpdateButtonButton(self, event): + #event.Skip() + self.engine.syncTopics() + topics = self.engine.getTopics() + #print topics + self.topicListBox.Clear() + self.treeCtrl1.Clear() + i = 0 + for topic in topics: + self.topicListBox.Append(topics[str(i)], i) + i = i + 1 + self.initTreeList() + + def initTreeList(self): + topics = self.engine.getTopics() + i = 0 + self.treeItems = {} + self.rootItem = self.treeCtrl1.AddRoot('Root') + self.treeItems[topics[str(i)]] = {} + for topic in topics: + self.treeItems[topics[str(i)]] = self.treeCtrl1.AppendItem(self.rootItem, topics[str(i)]) + self.load_content(topics[str(i)]) + i = i + 1 + + + def load_content(self,contentkey): + self.payload = self.engine.listItems(contentkey) + self.columns = self.payload['2'] + topics = self.engine.getTopics() + + entries = self.payload['1'] + itemid = 0 + columnlist = self.columns + for entry in entries: + data = entries[entry] + itemData = wxTreeItemData() + itemData.SetData(data) + #print columnlist + #columnlist.pop() + if entries[entry]['1'] == '1': + self.treeCtrl1.AppendItem(self.treeItems[contentkey], + str(entries[entry]['2']+' - English'), + -1, + -1, + itemData) + elif entries[entry]['1'] == '2': + self.treeCtrl1.AppendItem(self.treeItems[contentkey], + str(entries[entry]['2']+' - Deutsch'), + -1, + -1, + itemData) + #print self.treeItems + itemid += 1 + + def OnTopicListBoxListboxDclick(self, event): + #event.Skip() + #print event + + # get "ClientData" of current selected entry from widget + sel = self.topicListBox.GetSelection() + seldata = self.topicListBox.GetClientData(sel) + + # determine if to activate an existing window or if to create a new one + win = self.parent.FindWindowByName(str(seldata)) + if win: + win.Raise() + win.SetFocus() + return + + # resolve associated topic entry + topics = self.engine.getTopics() + title = topics[str(seldata)] + #print title + print topics + + frame = FraggleListFrame.create(self.parent) + frame.SetName(str(seldata)) + frame.SetTitle(title) + + # calculate new position (right beside the TopicFrame (us)) + pos = self.GetPosition() + wxPoint(self.GetSize().GetWidth() + 5, 0) + frame.Move(pos) + self.parent.Fit() + + frame.load_content(topics[str(seldata)]) + + def OnTreeCtrl1LeftDclick(self, event): + sel = self.treeCtrl1.GetSelection() + selitem = self.treeCtrl1.GetItemData(sel) + seldata = selitem.GetData() + selparent = self.treeCtrl1.GetItemParent(sel) + seltype = self.treeCtrl1.GetItemText(selparent) + self.engine.modules.Dispatch(seldata,seltype) + event.Skip() + +