def _createSnippetPanel(self, mainSizer): self._snippetPanel = wx.Panel(self) # Snippet editor self.snippetEditor = SnippetEditor(self._snippetPanel) # Buttons for snippet snippetButtonsSizer = wx.BoxSizer(wx.HORIZONTAL) self._createSnippetButtons(snippetButtonsSizer, self._snippetPanel) # Errors messages self.errorsTextCtrl = wx.TextCtrl(self._snippetPanel, style=wx.TE_MULTILINE | wx.TE_READONLY) self.errorsTextCtrl.SetMinSize((-1, 100)) # SnippetSizer snippetSizer = wx.FlexGridSizer(cols=1) snippetSizer.AddGrowableRow(1) snippetSizer.AddGrowableCol(0) snippetSizer.Add(snippetButtonsSizer, 1, wx.EXPAND, border=2) snippetSizer.Add(self.snippetEditor, 1, wx.EXPAND, border=2) snippetSizer.Add(self.errorsTextCtrl, 1, wx.EXPAND, border=2) self._snippetPanel.SetSizer(snippetSizer) mainSizer.Add(self._snippetPanel, 1, wx.ALL | wx.EXPAND, border=2)
def _createGUI(self): mainSizer = wx.FlexGridSizer(cols=1) mainSizer.AddGrowableCol(0) mainSizer.AddGrowableRow(0) # Panel with variables self._varPanel = VaraiblesPanel(self) self._varPanel.Hide() self._notebook = wx.Notebook(self) # Result panel self._resultEditor = TextEditorBase(self._notebook) self._notebook.AddPage(self._resultEditor, _(u'Preview')) # Snippet panel self._snippetEditor = SnippetEditor(self._notebook) self._notebook.AddPage(self._snippetEditor, _(u'Snippet')) # Checkbox for wiki command self._wikiCommandCheckBox = wx.CheckBox( self, label=_(u'Insert as wiki command')) # OK / Cancel buttons self.ok_button = wx.Button(self, wx.ID_OK) self.ok_button.SetDefault() btn_sizer = self.CreateStdDialogButtonSizer(wx.CANCEL) btn_sizer.Add(self.ok_button) # Fill mainSizer self.topPanel = wx.FlexGridSizer(cols=2) self.topPanel.AddGrowableCol(0) self.topPanel.AddGrowableCol(1) self.topPanel.AddGrowableRow(0) self.bottomPanel = wx.FlexGridSizer(cols=2) self.bottomPanel.AddGrowableCol(0) self.bottomPanel.AddGrowableCol(1) self.bottomPanel.AddGrowableRow(0) self.topPanel.Add(self._varPanel, 1, flag=wx.ALL | wx.EXPAND, border=2) self.topPanel.Add(self._notebook, 1, flag=wx.ALL | wx.EXPAND, border=2) self.bottomPanel.Add(self._wikiCommandCheckBox, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=2) self.bottomPanel.Add(btn_sizer, flag=wx.ALL | wx.ALIGN_RIGHT, border=2) mainSizer.Add(self.topPanel, 1, flag=wx.ALL | wx.EXPAND, border=2) mainSizer.Add(self.bottomPanel, 1, flag=wx.ALL | wx.EXPAND, border=2) self.SetSizer(mainSizer) self.Layout()
class EditSnippetsDialog(TestedDialog): ''' Dialog to create, edit and remove snippets and folders. ''' def __init__(self, parent): super(EditSnippetsDialog, self).__init__(parent, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) global _ _ = get_() self.ICON_WIDTH = 16 self.ICON_HEIGHT = 16 self._imagesPath = getImagesPath() self._dirImageId = None self._snippetImageId = None self.addGroupBtn = None self.addSnippetBtn = None self._varMenuItems = [ (_(u'Selected text'), defines.VAR_SEL_TEXT), (_(u'Current date'), defines.VAR_DATE), (_(u'Page title'), defines.VAR_TITLE), (_(u'Page type'), defines.VAR_PAGE_TYPE), (_(u'Page tags list'), defines.VAR_TAGS), (_(u'Attachments path'), defines.VAR_ATTACH), (_(u'Path to page'), defines.VAR_FOLDER), (_(u'Relative page path'), defines.VAR_SUBPATH), (_(u'Page creation date'), defines.VAR_DATE_CREATING), (_(u'Page modification date'), defines.VAR_DATE_EDITIND), (_(u'Page Id'), defines.VAR_PAGE_ID), (_(u'Attachments list'), defines.VAR_ATTACHLIST), (_(u'Child pages'), defines.VAR_CHILDLIST), ] self._blocksMenuItems = [ (_('{% if %}'), (u'{% if %}', '{% elif %}{% else %}{% endif %}')), (_('{% include %}'), (u"{% include '", u"' %}")), (_('{# comment #}'), (u'{# ', ' #}')), ] self._createGUI() self.SetTitle(_(u'Snippets management')) self.disableSnippetEditor() def disableSnippetEditor(self): self.snippetEditor.SetText(u'') self._snippetPanel.Disable() self.runSnippetBtn.Disable() def enableSnippetEditor(self): self._snippetPanel.Enable() self.runSnippetBtn.Enable() def appendDirTreeItem(self, parentItem, name, data): itemData = wx.TreeItemData(data) if parentItem is not None: newItemId = self.snippetsTree.AppendItem(parentItem, name, self._dirImageId, data=itemData) else: newItemId = self.snippetsTree.AddRoot(name, self._dirImageId, data=itemData) return newItemId def appendSnippetTreeItem(self, parentItem, name, data): itemData = wx.TreeItemData(data) newItemId = self.snippetsTree.AppendItem(parentItem, name, self._snippetImageId, data=itemData) return newItemId def _createTreeButtons(self, groupButtonsSizer): # Add a group button self.addGroupBtn = wx.BitmapButton( self, bitmap=wx.Bitmap(os.path.join(self._imagesPath, "folder_add.png"))) self.addGroupBtn.SetToolTipString(_(u"Add new snippets group")) groupButtonsSizer.Add(self.addGroupBtn, flag=wx.ALL, border=0) # Add a snippet button self.addSnippetBtn = wx.BitmapButton( self, bitmap=wx.Bitmap(os.path.join(self._imagesPath, "snippet_add.png"))) self.addSnippetBtn.SetToolTipString(_(u"Create new snippet")) groupButtonsSizer.Add(self.addSnippetBtn, flag=wx.ALL, border=0) # Rename group or snippet button self.renameBtn = wx.BitmapButton( self, bitmap=wx.Bitmap(os.path.join(self._imagesPath, "rename.png"))) self.renameBtn.SetToolTipString(_(u"Rename")) groupButtonsSizer.Add(self.renameBtn, flag=wx.ALL, border=0) # Remove group or snippet button self.removeBtn = wx.BitmapButton( self, bitmap=wx.Bitmap(os.path.join(self._imagesPath, "remove.png"))) self.removeBtn.SetToolTipString(_(u"Remove")) groupButtonsSizer.Add(self.removeBtn, flag=wx.ALL, border=0) # Run snippet self.runSnippetBtn = wx.BitmapButton( self, bitmap=wx.Bitmap(os.path.join(self._imagesPath, "run.png"))) self.runSnippetBtn.SetToolTipString(_(u"Run snippet")) groupButtonsSizer.Add(self.runSnippetBtn, flag=wx.ALL, border=0) # Open help self.openHelpBtn = wx.BitmapButton( self, bitmap=wx.Bitmap(os.path.join(self._imagesPath, "help.png"))) self.openHelpBtn.SetToolTipString(_(u"Open help...")) groupButtonsSizer.Add(self.openHelpBtn, flag=wx.ALL, border=0) def _createImagesList(self): self._imagelist = SafeImageList(self.ICON_WIDTH, self.ICON_HEIGHT) self._dirImageId = self._imagelist.Add( wx.Bitmap(os.path.join(self._imagesPath, u'folder.png'))) self._snippetImageId = self._imagelist.Add( wx.Bitmap(os.path.join(self._imagesPath, u'snippet.png'))) def _createTreePanel(self, mainSizer): self._createImagesList() self.snippetsTree = wx.TreeCtrl(self, style=wx.TR_HAS_BUTTONS | wx.TR_EDIT_LABELS | wx.SUNKEN_BORDER) self.snippetsTree.SetMinSize((200, 200)) self.snippetsTree.AssignImageList(self._imagelist) # Buttons for the snippets tree groupButtonsSizer = wx.BoxSizer(wx.HORIZONTAL) self._createTreeButtons(groupButtonsSizer) # TreeSizer treeSizer = wx.FlexGridSizer(cols=1) treeSizer.AddGrowableRow(1) treeSizer.AddGrowableCol(0) treeSizer.Add(groupButtonsSizer, 1, wx.EXPAND, border=2) treeSizer.Add(self.snippetsTree, 1, wx.EXPAND, border=2) mainSizer.Add(treeSizer, 1, wx.ALL | wx.EXPAND, border=2) def _createSnippetButtons(self, snippetButtonsSizer, parent): # Insert variable self.insertVariableBtn = PopupButton(parent, bitmap=wx.Bitmap( os.path.join( self._imagesPath, "variables-menu.png"))) self.insertVariableBtn.SetToolTipString(_(u"Insert variable")) for menuitem in self._varMenuItems: data = u'{{' + menuitem[1] + u'}}' title = u'{var} - {title}'.format(var=data, title=menuitem[0]) self.insertVariableBtn.appendMenuItem(title, data) self.insertVariableBtn.appendMenuItem(_(u'Other variable...'), None) snippetButtonsSizer.Add(self.insertVariableBtn, flag=wx.ALL, border=0) # Insert block self.insertBlockBtn = PopupButton( parent, bitmap=wx.Bitmap(os.path.join(self._imagesPath, "block-menu.png"))) self.insertBlockBtn.SetToolTipString(_(u"Insert block")) for menuitem in self._blocksMenuItems: data = menuitem[1] title = menuitem[0] self.insertBlockBtn.appendMenuItem(title, data) snippetButtonsSizer.Add(self.insertBlockBtn, flag=wx.ALL, border=0) def _createSnippetPanel(self, mainSizer): self._snippetPanel = wx.Panel(self) # Snippet editor self.snippetEditor = SnippetEditor(self._snippetPanel) # Buttons for snippet snippetButtonsSizer = wx.BoxSizer(wx.HORIZONTAL) self._createSnippetButtons(snippetButtonsSizer, self._snippetPanel) # Errors messages self.errorsTextCtrl = wx.TextCtrl(self._snippetPanel, style=wx.TE_MULTILINE | wx.TE_READONLY) self.errorsTextCtrl.SetMinSize((-1, 100)) # SnippetSizer snippetSizer = wx.FlexGridSizer(cols=1) snippetSizer.AddGrowableRow(1) snippetSizer.AddGrowableCol(0) snippetSizer.Add(snippetButtonsSizer, 1, wx.EXPAND, border=2) snippetSizer.Add(self.snippetEditor, 1, wx.EXPAND, border=2) snippetSizer.Add(self.errorsTextCtrl, 1, wx.EXPAND, border=2) self._snippetPanel.SetSizer(snippetSizer) mainSizer.Add(self._snippetPanel, 1, wx.ALL | wx.EXPAND, border=2) def _createBottomButtons(self, mainSizer): mainSizer.AddStretchSpacer() self.closeBtn = wx.Button(self, id=wx.ID_CLOSE, label=_(u'Close')) mainSizer.Add(self.closeBtn, flag=wx.ALL | wx.ALIGN_RIGHT, border=2) self.SetEscapeId(wx.ID_CLOSE) def _createGUI(self): # Main Sizer mainSizer = wx.FlexGridSizer(cols=2) mainSizer.AddGrowableCol(0, 1) mainSizer.AddGrowableCol(1, 3) mainSizer.AddGrowableRow(0) self._createTreePanel(mainSizer) self._createSnippetPanel(mainSizer) self._createBottomButtons(mainSizer) self.SetSizer(mainSizer) self.Layout() @property def currentSnippet(self): return self.snippetEditor.GetText() def setError(self, text): self.errorsTextCtrl.SetValue(text)
class VariablesDialog(TestedDialog): ''' Dialog to enter variables and preview result ''' def __init__(self, parent): super(VariablesDialog, self).__init__( parent, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER ) global _ _ = get_() self._shortTemplateName = None self._createGUI() self.SetTitle(u'Snippet variables') def _createGUI(self): mainSizer = wx.FlexGridSizer(cols=1) mainSizer.AddGrowableCol(0) mainSizer.AddGrowableRow(0) # Panel with variables self._varPanel = VaraiblesPanel(self) self._varPanel.Hide() self._notebook = wx.Notebook(self) # Result panel self._resultEditor = TextEditorBase(self._notebook) self._notebook.AddPage(self._resultEditor, _(u'Preview')) # Snippet panel self._snippetEditor = SnippetEditor(self._notebook) self._notebook.AddPage(self._snippetEditor, _(u'Snippet')) # Checkbox for wiki command self._wikiCommandCheckBox = wx.CheckBox( self, label=_(u'Insert as wiki command')) # OK / Cancel buttons self.ok_button = wx.Button(self, wx.ID_OK) self.ok_button.SetDefault() btn_sizer = self.CreateStdDialogButtonSizer(wx.CANCEL) btn_sizer.Add(self.ok_button) # Fill mainSizer self.topPanel = wx.FlexGridSizer(cols=2) self.topPanel.AddGrowableCol(0) self.topPanel.AddGrowableCol(1) self.topPanel.AddGrowableRow(0) self.bottomPanel = wx.FlexGridSizer(cols=2) self.bottomPanel.AddGrowableCol(0) self.bottomPanel.AddGrowableCol(1) self.bottomPanel.AddGrowableRow(0) self.topPanel.Add(self._varPanel, 1, flag=wx.ALL | wx.EXPAND, border=2) self.topPanel.Add(self._notebook, 1, flag=wx.ALL | wx.EXPAND, border=2) self.bottomPanel.Add(self._wikiCommandCheckBox, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=2) self.bottomPanel.Add(btn_sizer, flag=wx.ALL | wx.ALIGN_RIGHT, border=2) mainSizer.Add(self.topPanel, 1, flag=wx.ALL | wx.EXPAND, border=2) mainSizer.Add(self.bottomPanel, 1, flag=wx.ALL | wx.EXPAND, border=2) self.SetSizer(mainSizer) self.Layout() def hideVarPanel(self): self._varPanel.Hide() self.Layout() def setSnippetText(self, text): self._snippetEditor.SetReadOnly(False) self._snippetEditor.SetText(text) self._snippetEditor.SetReadOnly(True) self._varPanel.clear() def addStringVariable(self, varname): self._varPanel.Show() self._varPanel.addStringVariable(varname) self._notebook.MoveAfterInTabOrder(self._varPanel) self.Layout() def setStringVariable(self, varname, value): self._varPanel.setVarString(varname, value) def getVarDict(self): return self._varPanel.getVarDict() def setResult(self, text): self._resultEditor.SetText(text) def getResult(self): return self._resultEditor.GetText() def setWikiCommandSetVisible(self, visible): if not visible: self._wikiCommandCheckBox.SetValue(False) self._wikiCommandCheckBox.Show(visible) @property def wikiCommandChecked(self): return self._wikiCommandCheckBox.IsChecked() @wikiCommandChecked.setter def wikiCommandChecked(self, value): self._wikiCommandCheckBox.SetValue(value) @property def templateFileName(self): return self._shortTemplateName @templateFileName.setter def templateFileName(self, shortTemplateName): title = _(u'{} | Snippet variables').format(shortTemplateName) self._shortTemplateName = shortTemplateName self.SetTitle(title) def setFocusToFirstVariable(self): self._varPanel.setFocusToFirstVariable()