예제 #1
0
파일: FlyFrame.py 프로젝트: iambus/PyLoad
    def __init__(self, parent, **vars):
        wx.Panel.__init__(self, parent, -1)

        self.vars = vars

        self.editor = EditorPanel(self, -1)
        self.testButton = wx.Button(self, -1, "Run Script")

        if vars:
            welcome = '# You can use the following variables:\n'
            for k in sorted(vars.keys()):
                welcome += '# %s: %s\n' % (k, vars[k].__class__)
            welcome += '#\n'
            welcome += '# For example:\n'
            welcome += '# print %s\n' % sorted(vars.keys())[0]
            welcome += '#\n\n\n'

            self.editor.SetValue(welcome)

            # set caret position after the comments
            pos = len(welcome) - 1
            #			self.editor.editor.SetCurrentPos(pos)
            self.editor.editor.SetSelection(pos, pos)

        # Layout
        self.SetAutoLayout(True)
        self.editor.SetConstraints(
            wx.lib.layoutf.Layoutf('t=t10#1;l=l10#1;b%b90#1;r=r10#1',
                                   (self, )))
        self.testButton.SetConstraints(
            wx.lib.layoutf.Layoutf('t_10#2;l=l10#1;h*;w*',
                                   (self, self.editor)))

        self.editor.saveButton.Hide()
        self.Bind(wx.EVT_BUTTON, self.OnPlay, self.testButton)
예제 #2
0
    def __init__(self, parent, controler, window, tagname=""):
        EditorPanel.__init__(self, parent, tagname, window, controler)

        icon_name = self.Controler.GetIconName()
        if icon_name is not None:
            self.SetIcon(GetBitmap(icon_name))
        else:
            self.SetIcon(GetBitmap("Extension"))
예제 #3
0
    def __init__(self, parent, controler, window, tagname=""):
        EditorPanel.__init__(self, parent, tagname, window, controler)

        icon_name = self.Controler.GetIconName()
        if icon_name is not None:
            self.SetIcon(GetBitmap(icon_name))
        else:
            self.SetIcon(GetBitmap("Extension"))
예제 #4
0
    def ClearHighlights(self, highlight_type=None):
        EditorPanel.ClearHighlights(self, highlight_type)

        self.TasksTable.ClearHighlights(highlight_type)
        self.InstancesTable.ClearHighlights(highlight_type)
        self.TasksTable.ResetView(self.TasksGrid)
        self.InstancesTable.ResetView(self.InstancesGrid)
 def __init__(self, parent, controler, name, folder, enable_dragndrop=False):
     self.Folder = os.path.realpath(folder)
     self.EnableDragNDrop = enable_dragndrop
     
     if wx.Platform == '__WXMSW__':
         self.HomeDirectory = "/"
     else:
         self.HomeDirectory = os.path.expanduser("~")
     
     EditorPanel.__init__(self, parent, name, None, None)
     
     self.Controler = controler
     
     self.EditableFileExtensions = []
     self.EditButton.Hide()
     
     self.SetIcon(GetBitmap("FOLDER"))
예제 #6
0
    def AddHighlight(self, infos, start, end, highlight_type):
        EditorPanel.AddHighlight(self, infos, start, end, highlight_type)

        highlight_type = HIGHLIGHT_TYPES.get(highlight_type, None)
        if infos[0] == "body" and highlight_type is not None:
            self.Highlights.append((infos[1], start, end, highlight_type))
            self.Editor.GotoPos(self.Editor.PositionFromLine(start[0]) + start[1])
            self.RefreshHighlightsTimer.Start(int(REFRESH_HIGHLIGHT_PERIOD * 1000), oneShot=True)
예제 #7
0
    def RemoveHighlight(self, infos, start, end, highlight_type):
        EditorPanel.RemoveHighlight(self, infos, start, end, highlight_type)

        highlight_type = HIGHLIGHT_TYPES.get(highlight_type, None)
        if infos[0] == "body" and highlight_type is not None and \
           (infos[1], start, end, highlight_type) in self.Highlights:
            self.Highlights.remove((infos[1], start, end, highlight_type))
            self.RefreshHighlightsTimer.Start(int(REFRESH_HIGHLIGHT_PERIOD * 1000), oneShot=True)
    def AddHighlight(self, infos, start, end, highlight_type):
        EditorPanel.AddHighlight(self, infos, start, end, highlight_type)

        if infos[0] == "task":
            self.TasksTable.AddHighlight(infos[1:], highlight_type)
        elif infos[0] == "instance":
            self.InstancesTable.AddHighlight(infos[1:], highlight_type)
        self.RefreshHighlightsTimer.Start(int(REFRESH_HIGHLIGHT_PERIOD * 1000), oneShot=True)
예제 #9
0
 def __init__(self, parent, controler, name, folder, enable_dragndrop=False):
     self.Folder = os.path.realpath(folder)
     self.EnableDragNDrop = enable_dragndrop
     
     if wx.Platform == '__WXMSW__':
         self.HomeDirectory = "/"
     else:
         self.HomeDirectory = os.path.expanduser("~")
     
     EditorPanel.__init__(self, parent, name, None, None)
     
     self.Controler = controler
     
     self.EditableFileExtensions = []
     self.EditButton.Hide()
     
     self.SetIcon(GetBitmap("FOLDER"))
예제 #10
0
 def RefreshView(self):
     EditorPanel.RefreshView(self)
     if self.SHOW_BASE_PARAMS:
         self.ConfNodeName.ChangeValue(
             self.Controler.MandatoryParams[1].getName())
         self.RefreshIECChannelControlsState()
     if self.ParamsEditor is not None:
         self.RefreshConfNodeParamsSizer()
         self.RefreshScrollbars()
예제 #11
0
    def ClearHighlights(self, highlight_type=None):
        EditorPanel.ClearHighlights(self, highlight_type)

        if highlight_type is None:
            self.Highlights = []
        else:
            highlight_type = HIGHLIGHT_TYPES.get(highlight_type, None)
            if highlight_type is not None:
                self.Highlights = [(infos, start, end, highlight) for (infos, start, end, highlight) in self.Highlights if highlight != highlight_type]
        self.RefreshView()
예제 #12
0
    def RefreshView(self, variablepanel=True):
        EditorPanel.RefreshView(self, variablepanel)

        tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName)
        self.TasksTable.SetData(tasks)
        self.InstancesTable.SetData(instances)
        self.RefreshTypeList()
        self.RefreshTaskList()
        self.RefreshVariableList()
        self.TasksTable.ResetView(self.TasksGrid)
        self.InstancesTable.ResetView(self.InstancesGrid)
        self.TasksGrid.RefreshButtons()
        self.InstancesGrid.RefreshButtons()
예제 #13
0
    def __init__(self, parent, tagname, window, controler, debug = False, instancepath = ""):
        if tagname != "" and controler is not None:
            self.VARIABLE_PANEL_TYPE = controler.GetPouType(tagname.split("::")[1])

        EditorPanel.__init__(self, parent, tagname, window, controler, debug)

        self.Keywords = []
        self.Variables = {}
        self.Functions = {}
        self.TypeNames = []
        self.Jumps = []
        self.EnumeratedValues = []
        self.DisableEvents = True
        self.TextSyntax = None
        self.CurrentAction = None

        self.InstancePath = instancepath
        self.ContextStack = []
        self.CallStack = []

        self.ResetSearchResults()

        self.RefreshHighlightsTimer = wx.Timer(self, -1)
        self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer)
예제 #14
0
    def __init__(self, parent, tagname, window, controler, debug=False, instancepath=""):
        if tagname != "" and controler is not None:
            self.VARIABLE_PANEL_TYPE = controler.GetPouType(tagname.split("::")[1])

        EditorPanel.__init__(self, parent, tagname, window, controler, debug)

        self.Keywords = []
        self.Variables = {}
        self.Functions = {}
        self.TypeNames = []
        self.Jumps = []
        self.EnumeratedValues = []
        self.DisableEvents = True
        self.TextSyntax = None
        self.CurrentAction = None

        self.InstancePath = instancepath
        self.ContextStack = []
        self.CallStack = []

        self.ResetSearchResults()

        self.RefreshHighlightsTimer = wx.Timer(self, -1)
        self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer)
예제 #15
0
    def RefreshView(self, variablepanel=True):
        EditorPanel.RefreshView(self, variablepanel)

        if self.Controler is not None:
            self.ResetBuffer()
            self.DisableEvents = True
            old_cursor_pos = self.GetCurrentPos()
            line = self.Editor.GetFirstVisibleLine()
            column = self.Editor.GetXOffset()
            old_text = self.GetText()
            new_text = self.Controler.GetEditedElementText(self.TagName, self.Debug)
            if old_text != new_text:
                self.SetText(new_text)
                new_cursor_pos = GetCursorPos(old_text, new_text)
                self.Editor.LineScroll(column, line)
                if new_cursor_pos is not None:
                    self.Editor.GotoPos(new_cursor_pos)
                else:
                    self.Editor.GotoPos(old_cursor_pos)
                self.RefreshJumpList()
                self.Editor.EmptyUndoBuffer()
            self.DisableEvents = False

            self.RefreshVariableTree()

            self.TypeNames = [typename.upper() for typename in self.Controler.GetDataTypes(self.TagName, True, self.Debug)]
            self.EnumeratedValues = [value.upper() for value in self.Controler.GetEnumeratedDataValues()]

            self.Functions = {}
            for category in self.Controler.GetBlockTypes(self.TagName, self.Debug):
                for blocktype in category["list"]:
                    blockname = blocktype["name"].upper()
                    if blocktype["type"] == "function" and blockname not in self.Keywords and blockname not in self.Variables.keys():
                        interface = dict([(name, {}) for name, type, modifier in blocktype["inputs"] + blocktype["outputs"] if name != ''])
                        for param in ["EN", "ENO"]:
                            if param not in interface:
                                interface[param] = {}
                        if blockname in self.Functions:
                            self.Functions[blockname]["interface"].update(interface)
                            self.Functions[blockname]["extensible"] |= blocktype["extensible"]
                        else:
                            self.Functions[blockname] = {"interface": interface,
                                                         "extensible": blocktype["extensible"]}

        self.Colourise(0, -1)
예제 #16
0
    def __init__(self, parent, tagname, window, controler):
        EditorPanel.__init__(self, parent, tagname, window, controler)

        self.StructureElementDefaultValue = {
            "Name": "",
            "Type": DefaultType,
            "Initial Value": ""
        }
        self.StructureElementsTable = ElementsTable(self, [],
                                                    GetElementsTableColnames())
        self.StructureColSizes = [40, 150, 100, 250]
        self.StructureColAlignements = [
            wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT
        ]

        self.StructureElementsGrid.SetTable(self.StructureElementsTable)
        self.StructureElementsGrid.SetButtons({
            "Add": self.StructureAddButton,
            "Delete": self.StructureDeleteButton,
            "Up": self.StructureUpButton,
            "Down": self.StructureDownButton
        })

        def _AddStructureElement(new_row):
            self.StructureElementsTable.InsertRow(
                new_row, self.StructureElementDefaultValue.copy())
            self.RefreshTypeInfos()
            self.StructureElementsTable.ResetView(self.StructureElementsGrid)
            return new_row

        setattr(self.StructureElementsGrid, "_AddRow", _AddStructureElement)

        def _DeleteStructureElement(row):
            self.StructureElementsTable.RemoveRow(row)
            self.RefreshTypeInfos()
            self.StructureElementsTable.ResetView(self.StructureElementsGrid)

        setattr(self.StructureElementsGrid, "_DeleteRow",
                _DeleteStructureElement)

        def _MoveStructureElement(row, move):
            new_row = self.StructureElementsTable.MoveRow(row, move)
            if new_row != row:
                self.RefreshTypeInfos()
                self.StructureElementsTable.ResetView(
                    self.StructureElementsGrid)
            return new_row

        setattr(self.StructureElementsGrid, "_MoveRow", _MoveStructureElement)

        self.StructureElementsGrid.SetRowLabelSize(0)
        for col in range(self.StructureElementsTable.GetNumberCols()):
            attr = wx.grid.GridCellAttr()
            attr.SetAlignment(self.StructureColAlignements[col],
                              wx.ALIGN_CENTRE)
            self.StructureElementsGrid.SetColAttr(col, attr)
            self.StructureElementsGrid.SetColMinimalWidth(
                col, self.StructureColSizes[col])
            self.StructureElementsGrid.AutoSizeColumn(col, False)
        self.StructureElementsGrid.RefreshButtons()

        for datatype in GetDatatypeTypes():
            self.DerivationType.Append(_(datatype))
        self.SubrangePanel.Hide()
        self.EnumeratedPanel.Hide()
        self.ArrayPanel.Hide()
        self.StructurePanel.Hide()
        self.CurrentPanel = "Directly"
        self.Highlights = []
        self.Initializing = False

        self.HighlightControls = {
            ("Directly", "base"): self.DirectlyBaseType,
            ("Directly", "initial"): self.DirectlyInitialValue,
            ("Subrange", "base"): self.SubrangeBaseType,
            ("Subrange", "lower"): self.SubrangeMinimum,
            ("Subrange", "upper"): self.SubrangeMaximum,
            ("Subrange", "initial"): self.SubrangeInitialValue,
            ("Enumerated", "value"): self.EnumeratedValues,
            ("Enumerated", "initial"): self.EnumeratedInitialValue,
            ("Array", "initial"): self.ArrayInitialValue,
            ("Array", "base"): self.ArrayBaseType,
            ("Array", "range"): self.ArrayDimensions,
        }

        self.RefreshHighlightsTimer = wx.Timer(self, -1)
        self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer,
                  self.RefreshHighlightsTimer)
예제 #17
0
class MainFrame(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self,
                          parent,
                          -1,
                          title,
                          size=(970, 720),
                          style=wx.DEFAULT_FRAME_STYLE
                          | wx.NO_FULL_REPAINT_ON_RESIZE)
        self.SetMinSize((640, 480))

        pnl = wx.Panel(self)
        self.pnl = pnl
        self.mgr = wx.aui.AuiManager()
        self.mgr.SetManagedWindow(pnl)

        self.Centre(wx.BOTH)
        self.CreateStatusBar(1, wx.ST_SIZEGRIP)

        def EmptyHandler(evt):
            pass

        # build menu bar
        self.BuildMenuBar()

        # Create a TreeCtrl
        leftPanel = wx.Panel(pnl, style=wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN)
        self.tree = DivsTree(leftPanel, self)
        self.RecreateTree()
        leftBox = wx.BoxSizer(wx.VERTICAL)
        leftBox.Add(self.tree, 1, wx.EXPAND)
        leftPanel.SetSizer(leftBox)

        # Create a shape TreeCtrl
        leftPanel2 = wx.Panel(pnl, style=wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN)
        self.shapetree = ShapeTree(leftPanel2, self)
        leftBox2 = wx.BoxSizer(wx.VERTICAL)
        leftBox2.Add(self.shapetree, 1, wx.EXPAND)
        leftPanel2.SetSizer(leftBox2)

        #create a attrctrl
        attrpanel = wx.Panel(pnl, style=wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN)
        self.attr = AttrPanel(attrpanel)
        attrBox = wx.BoxSizer(wx.VERTICAL)
        attrBox.Add(self.attr, 1, wx.EXPAND)
        attrpanel.SetSizer(attrBox)

        # Create a Notebook
        self.nb = wx.Notebook(pnl, -1, style=wx.CLIP_CHILDREN)
        self.nb.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)

        # Add editor panel tab page
        self.editorPage = EditorPanel(self.nb, self, self.attr, self.tree)
        self.nb.AddPage(self.editorPage, 'Editor', imageId=-1)
        self.attr.SetEditor(self.editorPage.GetEditor())

        # Add source code tab page
        #self.codePage = CodePanel(self.nb, self)
        #self.nb.AddPage(self.codePage, 'source code', imageId=-1)

        # Add overview tab page
        panel = wx.Panel(self.nb, -1, style=wx.CLIP_CHILDREN)
        self.viewPage = OverviewPanel(panel, self.tree,
                                      self.editorPage.GetEditor())
        self.nb.AddPage(panel, 'Overview', imageId=-1)

        def OnOvrSize(evt, ovr=self.viewPage):
            ovr.SetSize(evt.GetSize())

        panel.Bind(wx.EVT_SIZE, OnOvrSize)
        panel.Bind(wx.EVT_ERASE_BACKGROUND, EmptyHandler)

        self.editorPage.SetListener(self.viewPage)

        # select initial items
        self.nb.SetSelection(0)

        self.mgr.AddPane(self.nb,
                         wx.aui.AuiPaneInfo().CenterPane().Name("Notebook"))
        self.mgr.AddPane(
            leftPanel,
            wx.aui.AuiPaneInfo().Left().Layer(2).BestSize((240, -1)).MinSize(
                (160, -1)).Floatable(False).FloatingSize(
                    (240, 700)).Caption("Dialog resource list").CloseButton(
                        False).Name("UIItemTree"))
        self.mgr.AddPane(
            leftPanel2,
            wx.aui.AuiPaneInfo().Left().Layer(2).BestSize((240, -1)).MinSize(
                (160, -1)).Floatable(False).FloatingSize((240, 700)).Caption(
                    "Shape children").CloseButton(False).Name("ShapeTree"))
        self.mgr.AddPane(
            attrpanel,
            wx.aui.AuiPaneInfo().Right().Layer(2).BestSize((240, -1)).MinSize(
                (160, -1)).Floatable(False).FloatingSize((240, 700)).Caption(
                    "UI item attr").CloseButton(False).Name("Itemattr"))
        self.mgr.Update()
        self.mgr.SetFlags(self.mgr.GetFlags()
                          ^ wx.aui.AUI_MGR_TRANSPARENT_DRAG)

    def OnPageChanged(self, evt):
        if evt.GetSelection() == 1:
            self.viewPage.PreView()

    def BuildMenuBar(self):
        # Make a File menu
        self.mainmenu = wx.MenuBar()

        menu = wx.Menu()
        exitItem = wx.MenuItem(menu, -1, 'E&xit\tCtrl-Q',
                               'Get the heck outta here!')
        menu.AppendItem(exitItem)
        self.Bind(wx.EVT_MENU, self.OnFileExit, exitItem)
        wx.App.SetMacExitMenuItemId(exitItem.GetId())
        self.mainmenu.Append(menu, '&File')

        self.SetMenuBar(self.mainmenu)

    def GetEditorPanel(self):
        return self.editorPage

    def GetShapeTree(self):
        return self.shapetree

    def OnCloseMe(self, event):
        self.Close(True)

    def OnCloseWindow(self, event):
        self.Destroy()

    def OnIdle(self, event):
        pass

    def OnFileExit(self, *event):
        self.Close()

    def RecreateTree(self):
        self.tree.RecreateTree()

    def SetTitle(self, title):
        global G_APP_NAME
        global G_APP_VER
        if title == '':
            label = G_APP_NAME + ' ' + G_APP_VER
        else:
            label = G_APP_NAME + ' ' + G_APP_VER + ' <' + title + '>'
        self.SetLabel(label)
예제 #18
0
    def __init__(self, parent, tagname, window, controler):
        EditorPanel.__init__(self, parent, tagname, window, controler)

        self.RefreshHighlightsTimer = wx.Timer(self, -1)
        self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer,
                  self.RefreshHighlightsTimer)

        self.TasksDefaultValue = {
            "Name": "",
            "Triggering": "",
            "Single": "",
            "Interval": "",
            "Priority": 0
        }
        self.TasksTable = ResourceTable(self, [], GetTasksTableColnames())
        self.TasksTable.SetColAlignements([
            wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT,
            wx.ALIGN_RIGHT
        ])
        self.TasksTable.SetColSizes([200, 100, 100, 150, 100])
        self.TasksGrid.SetTable(self.TasksTable)
        self.TasksGrid.SetButtons({
            "Add": self.AddTaskButton,
            "Delete": self.DeleteTaskButton,
            "Up": self.UpTaskButton,
            "Down": self.DownTaskButton
        })

        def _AddTask(new_row):
            self.TasksTable.InsertRow(new_row, self.TasksDefaultValue.copy())
            self.RefreshModel()
            self.RefreshView()
            return new_row

        setattr(self.TasksGrid, "_AddRow", _AddTask)

        def _DeleteTask(row):
            self.TasksTable.RemoveRow(row)
            self.RefreshModel()
            self.RefreshView()

        setattr(self.TasksGrid, "_DeleteRow", _DeleteTask)

        def _MoveTask(row, move):
            new_row = self.TasksTable.MoveRow(row, move)
            if new_row != row:
                self.RefreshModel()
                self.RefreshView()
            return new_row

        setattr(self.TasksGrid, "_MoveRow", _MoveTask)

        self.TasksGrid.SetRowLabelSize(0)
        self.TasksTable.ResetView(self.TasksGrid)
        self.TasksGrid.RefreshButtons()

        self.InstancesDefaultValue = {"Name": "", "Type": "", "Task": ""}
        self.InstancesTable = ResourceTable(self, [],
                                            GetInstancesTableColnames())
        self.InstancesTable.SetColAlignements(
            [wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT])
        self.InstancesTable.SetColSizes([200, 150, 150])
        self.InstancesGrid.SetTable(self.InstancesTable)
        self.InstancesGrid.SetButtons({
            "Add": self.AddInstanceButton,
            "Delete": self.DeleteInstanceButton,
            "Up": self.UpInstanceButton,
            "Down": self.DownInstanceButton
        })

        def _AddInstance(new_row):
            self.InstancesTable.InsertRow(new_row,
                                          self.InstancesDefaultValue.copy())
            self.RefreshModel()
            self.RefreshView()
            return new_row

        setattr(self.InstancesGrid, "_AddRow", _AddInstance)

        def _DeleteInstance(row):
            self.InstancesTable.RemoveRow(row)
            self.RefreshModel()
            self.RefreshView()

        setattr(self.InstancesGrid, "_DeleteRow", _DeleteInstance)

        def _MoveInstance(row, move):
            new_row = max(
                0, min(row + move,
                       self.InstancesTable.GetNumberRows() - 1))
            if new_row != row:
                if self.InstancesTable.GetValueByName(
                        row, "Task") != self.InstancesTable.GetValueByName(
                            new_row, "Task"):
                    return row
                self.InstancesTable.MoveRow(row, move)
                self.RefreshModel()
                self.RefreshView()
            return new_row

        setattr(self.InstancesGrid, "_MoveRow", _MoveInstance)

        def _RefreshInstanceButtons():
            if self:
                rows = self.InstancesTable.GetNumberRows()
                row = self.InstancesGrid.GetGridCursorRow()
                self.DeleteInstanceButton.Enable(rows > 0)
                self.UpInstanceButton.Enable(
                    row > 0
                    and self.InstancesTable.GetValueByName(row, "Task")
                    == self.InstancesTable.GetValueByName(row - 1, "Task"))
                self.DownInstanceButton.Enable(
                    0 <= row < rows - 1
                    and self.InstancesTable.GetValueByName(row, "Task")
                    == self.InstancesTable.GetValueByName(row + 1, "Task"))

        setattr(self.InstancesGrid, "RefreshButtons", _RefreshInstanceButtons)

        self.InstancesGrid.SetRowLabelSize(0)
        self.InstancesTable.ResetView(self.InstancesGrid)
        self.InstancesGrid.RefreshButtons()

        self.TasksGrid.SetFocus()
예제 #19
0
    def __init__(self, parent, title):
        wx.Frame.__init__(self,
                          parent,
                          -1,
                          title,
                          size=(970, 720),
                          style=wx.DEFAULT_FRAME_STYLE
                          | wx.NO_FULL_REPAINT_ON_RESIZE)
        self.SetMinSize((640, 480))

        pnl = wx.Panel(self)
        self.pnl = pnl
        self.mgr = wx.aui.AuiManager()
        self.mgr.SetManagedWindow(pnl)

        self.Centre(wx.BOTH)
        self.CreateStatusBar(1, wx.ST_SIZEGRIP)

        def EmptyHandler(evt):
            pass

        # build menu bar
        self.BuildMenuBar()

        # Create a TreeCtrl
        leftPanel = wx.Panel(pnl, style=wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN)
        self.tree = DivsTree(leftPanel, self)
        self.RecreateTree()
        leftBox = wx.BoxSizer(wx.VERTICAL)
        leftBox.Add(self.tree, 1, wx.EXPAND)
        leftPanel.SetSizer(leftBox)

        # Create a shape TreeCtrl
        leftPanel2 = wx.Panel(pnl, style=wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN)
        self.shapetree = ShapeTree(leftPanel2, self)
        leftBox2 = wx.BoxSizer(wx.VERTICAL)
        leftBox2.Add(self.shapetree, 1, wx.EXPAND)
        leftPanel2.SetSizer(leftBox2)

        #create a attrctrl
        attrpanel = wx.Panel(pnl, style=wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN)
        self.attr = AttrPanel(attrpanel)
        attrBox = wx.BoxSizer(wx.VERTICAL)
        attrBox.Add(self.attr, 1, wx.EXPAND)
        attrpanel.SetSizer(attrBox)

        # Create a Notebook
        self.nb = wx.Notebook(pnl, -1, style=wx.CLIP_CHILDREN)
        self.nb.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)

        # Add editor panel tab page
        self.editorPage = EditorPanel(self.nb, self, self.attr, self.tree)
        self.nb.AddPage(self.editorPage, 'Editor', imageId=-1)
        self.attr.SetEditor(self.editorPage.GetEditor())

        # Add source code tab page
        #self.codePage = CodePanel(self.nb, self)
        #self.nb.AddPage(self.codePage, 'source code', imageId=-1)

        # Add overview tab page
        panel = wx.Panel(self.nb, -1, style=wx.CLIP_CHILDREN)
        self.viewPage = OverviewPanel(panel, self.tree,
                                      self.editorPage.GetEditor())
        self.nb.AddPage(panel, 'Overview', imageId=-1)

        def OnOvrSize(evt, ovr=self.viewPage):
            ovr.SetSize(evt.GetSize())

        panel.Bind(wx.EVT_SIZE, OnOvrSize)
        panel.Bind(wx.EVT_ERASE_BACKGROUND, EmptyHandler)

        self.editorPage.SetListener(self.viewPage)

        # select initial items
        self.nb.SetSelection(0)

        self.mgr.AddPane(self.nb,
                         wx.aui.AuiPaneInfo().CenterPane().Name("Notebook"))
        self.mgr.AddPane(
            leftPanel,
            wx.aui.AuiPaneInfo().Left().Layer(2).BestSize((240, -1)).MinSize(
                (160, -1)).Floatable(False).FloatingSize(
                    (240, 700)).Caption("Dialog resource list").CloseButton(
                        False).Name("UIItemTree"))
        self.mgr.AddPane(
            leftPanel2,
            wx.aui.AuiPaneInfo().Left().Layer(2).BestSize((240, -1)).MinSize(
                (160, -1)).Floatable(False).FloatingSize((240, 700)).Caption(
                    "Shape children").CloseButton(False).Name("ShapeTree"))
        self.mgr.AddPane(
            attrpanel,
            wx.aui.AuiPaneInfo().Right().Layer(2).BestSize((240, -1)).MinSize(
                (160, -1)).Floatable(False).FloatingSize((240, 700)).Caption(
                    "UI item attr").CloseButton(False).Name("Itemattr"))
        self.mgr.Update()
        self.mgr.SetFlags(self.mgr.GetFlags()
                          ^ wx.aui.AUI_MGR_TRANSPARENT_DRAG)
예제 #20
0
 def GetTitle(self):
     if self.Debug or self.TagName == "":
         if len(self.InstancePath) > 15:
             return "..." + self.InstancePath[-12:]
         return self.InstancePath
     return EditorPanel.GetTitle(self)
예제 #21
0
    def __init__(self, parent, tagname, window, controler):
        EditorPanel.__init__(self, parent, tagname, window, controler)

        self.RefreshHighlightsTimer = wx.Timer(self, -1)
        self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer)

        self.TasksDefaultValue = {"Name" : "", "Triggering" : "", "Single" : "", "Interval" : "", "Priority" : 0}
        self.TasksTable = ResourceTable(self, [], GetTasksTableColnames())
        self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT])
        self.TasksTable.SetColSizes([200, 100, 100, 150, 100])
        self.TasksGrid.SetTable(self.TasksTable)
        self.TasksGrid.SetButtons({"Add": self.AddTaskButton,
                                   "Delete": self.DeleteTaskButton,
                                   "Up": self.UpTaskButton,
                                   "Down": self.DownTaskButton})

        def _AddTask(new_row):
            self.TasksTable.InsertRow(new_row, self.TasksDefaultValue.copy())
            self.RefreshModel()
            self.RefreshView()
            return new_row
        setattr(self.TasksGrid, "_AddRow", _AddTask)

        def _DeleteTask(row):
            self.TasksTable.RemoveRow(row)
            self.RefreshModel()
            self.RefreshView()
        setattr(self.TasksGrid, "_DeleteRow", _DeleteTask)

        def _MoveTask(row, move):
            new_row = self.TasksTable.MoveRow(row, move)
            if new_row != row:
                self.RefreshModel()
                self.RefreshView()
            return new_row
        setattr(self.TasksGrid, "_MoveRow", _MoveTask)

        self.TasksGrid.SetRowLabelSize(0)
        self.TasksTable.ResetView(self.TasksGrid)
        self.TasksGrid.RefreshButtons()

        self.InstancesDefaultValue = {"Name" : "", "Type" : "", "Task" : ""}
        self.InstancesTable = ResourceTable(self, [], GetInstancesTableColnames())
        self.InstancesTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT])
        self.InstancesTable.SetColSizes([200, 150, 150])
        self.InstancesGrid.SetTable(self.InstancesTable)
        self.InstancesGrid.SetButtons({"Add": self.AddInstanceButton,
                                       "Delete": self.DeleteInstanceButton,
                                       "Up": self.UpInstanceButton,
                                       "Down": self.DownInstanceButton})

        def _AddInstance(new_row):
            self.InstancesTable.InsertRow(new_row, self.InstancesDefaultValue.copy())
            self.RefreshModel()
            self.RefreshView()
            return new_row
        setattr(self.InstancesGrid, "_AddRow", _AddInstance)

        def _DeleteInstance(row):
            self.InstancesTable.RemoveRow(row)
            self.RefreshModel()
            self.RefreshView()
        setattr(self.InstancesGrid, "_DeleteRow", _DeleteInstance)

        def _MoveInstance(row, move):
            new_row = max(0, min(row + move, self.InstancesTable.GetNumberRows() - 1))
            if new_row != row:
                if self.InstancesTable.GetValueByName(row, "Task") != self.InstancesTable.GetValueByName(new_row, "Task"):
                    return row
                self.InstancesTable.MoveRow(row, move)
                self.RefreshModel()
                self.RefreshView()
            return new_row
        setattr(self.InstancesGrid, "_MoveRow", _MoveInstance)

        def _RefreshInstanceButtons():
            if self:
                rows = self.InstancesTable.GetNumberRows()
                row = self.InstancesGrid.GetGridCursorRow()
                self.DeleteInstanceButton.Enable(rows > 0)
                self.UpInstanceButton.Enable(row > 0 and
                    self.InstancesTable.GetValueByName(row, "Task") == self.InstancesTable.GetValueByName(row - 1, "Task"))
                self.DownInstanceButton.Enable(0 <= row < rows - 1 and
                    self.InstancesTable.GetValueByName(row, "Task") == self.InstancesTable.GetValueByName(row + 1, "Task"))
        setattr(self.InstancesGrid, "RefreshButtons", _RefreshInstanceButtons)

        self.InstancesGrid.SetRowLabelSize(0)
        self.InstancesTable.ResetView(self.InstancesGrid)
        self.InstancesGrid.RefreshButtons()

        self.TasksGrid.SetFocus()
예제 #22
0
    def __init__(self, parent, tagname, window, controler):
        EditorPanel.__init__(self, parent, tagname, window, controler)

        self.StructureElementDefaultValue = {"Name" : "", "Type" : DefaultType, "Initial Value" : ""}
        self.StructureElementsTable = ElementsTable(self, [], GetElementsTableColnames())
        self.StructureColSizes = [40, 150, 100, 250]
        self.StructureColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]

        self.StructureElementsGrid.SetTable(self.StructureElementsTable)
        self.StructureElementsGrid.SetButtons({"Add": self.StructureAddButton,
                                               "Delete": self.StructureDeleteButton,
                                               "Up": self.StructureUpButton,
                                               "Down": self.StructureDownButton})

        def _AddStructureElement(new_row):
            self.StructureElementsTable.InsertRow(new_row, self.StructureElementDefaultValue.copy())
            self.RefreshTypeInfos()
            self.StructureElementsTable.ResetView(self.StructureElementsGrid)
            return new_row
        setattr(self.StructureElementsGrid, "_AddRow", _AddStructureElement)

        def _DeleteStructureElement(row):
            self.StructureElementsTable.RemoveRow(row)
            self.RefreshTypeInfos()
            self.StructureElementsTable.ResetView(self.StructureElementsGrid)
        setattr(self.StructureElementsGrid, "_DeleteRow", _DeleteStructureElement)

        def _MoveStructureElement(row, move):
            new_row = self.StructureElementsTable.MoveRow(row, move)
            if new_row != row:
                self.RefreshTypeInfos()
                self.StructureElementsTable.ResetView(self.StructureElementsGrid)
            return new_row
        setattr(self.StructureElementsGrid, "_MoveRow", _MoveStructureElement)

        self.StructureElementsGrid.SetRowLabelSize(0)
        for col in range(self.StructureElementsTable.GetNumberCols()):
            attr = wx.grid.GridCellAttr()
            attr.SetAlignment(self.StructureColAlignements[col], wx.ALIGN_CENTRE)
            self.StructureElementsGrid.SetColAttr(col, attr)
            self.StructureElementsGrid.SetColMinimalWidth(col, self.StructureColSizes[col])
            self.StructureElementsGrid.AutoSizeColumn(col, False)
        self.StructureElementsGrid.RefreshButtons()

        for datatype in GetDatatypeTypes():
            self.DerivationType.Append(_(datatype))
        self.SubrangePanel.Hide()
        self.EnumeratedPanel.Hide()
        self.ArrayPanel.Hide()
        self.StructurePanel.Hide()
        self.CurrentPanel = "Directly"
        self.Highlights = []
        self.Initializing = False

        self.HighlightControls = {
            ("Directly", "base"): self.DirectlyBaseType,
            ("Directly", "initial"): self.DirectlyInitialValue,
            ("Subrange", "base"): self.SubrangeBaseType,
            ("Subrange", "lower"): self.SubrangeMinimum,
            ("Subrange", "upper"): self.SubrangeMaximum,
            ("Subrange", "initial"): self.SubrangeInitialValue,
            ("Enumerated", "value"): self.EnumeratedValues,
            ("Enumerated", "initial"): self.EnumeratedInitialValue,
            ("Array", "initial"): self.ArrayInitialValue,
            ("Array", "base"): self.ArrayBaseType,
            ("Array", "range"): self.ArrayDimensions,
        }

        self.RefreshHighlightsTimer = wx.Timer(self, -1)
        self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer)