import wx import metrics class StoryMetadataFrame(wx.Frame): """ Changes automatically update as the user makes them; """ def __init__(self, app, parent = None): self.app = app self.parent = parent wx.Frame.__init__(self, parent, wx.ID_ANY, title = parent.title + ' Metadata', \ style = wx.MINIMIZE_BOX | wx.CLOSE_BOX | wx.CAPTION | wx.SYSTEM_MENU) panel = wx.Panel(parent = self, id = wx.ID_ANY) borderSizer = wx.BoxSizer(wx.VERTICAL) panel.SetSizer(borderSizer) panelSizer = wx.FlexGridSizer(8, 1, metrics.size('relatedControls'), metrics.size('relatedControls')) borderSizer.Add(panelSizer, flag = wx.ALL, border = metrics.size('windowBorder')) for name, desc in [ ("identity", ("What your work identifies as:", "Is it a game, a story, a poem, or something else?\n(This is used for dialogs and error messages only.)", False)), ("description", ("A short description of your work:", "This is inserted in the HTML file's description tag, used by\nsearch engines and other automated tools.", True)) ]: textlabel = wx.StaticText(panel, label = desc[0]) if desc[2]: textctrl = wx.TextCtrl(panel, size=(200,60), style=wx.TE_MULTILINE) else: textctrl = wx.TextCtrl(panel, size=(200,-1)) textctrl.SetValue(parent.metadata.get(name, '')) textctrl.Bind(wx.EVT_TEXT, lambda e, name=name, textctrl=textctrl: self.saveSetting(name,textctrl.GetValue())) hSizer = wx.BoxSizer(wx.HORIZONTAL) hSizer.Add(textlabel,1,wx.ALIGN_LEFT|wx.ALIGN_TOP) hSizer.Add(textctrl,1,wx.EXPAND) panelSizer.Add(hSizer,flag=wx.ALL|wx.EXPAND) panelSizer.Add(wx.StaticText(panel, label = desc[1])) panelSizer.Add((1,2)) panelSizer.Fit(self) borderSizer.Fit(self) self.SetIcon(self.app.icon) self.Show() self.panelSizer = panelSizer self.borderSizer = borderSizer def saveSetting(self, name, value): self.parent.metadata[name]=value self.parent.setDirty(True)