Exemplo n.º 1
0
    def BuildUI(self):
        main_sizer = wx.BoxSizer(wx.VERTICAL)

        topbar = wx.Panel(self)
        topbar.SetBackgroundColour("#424242")

        topbar_sizer = wx.GridBagSizer(vgap=1, hgap=1)

        self.area_icon = wx.StaticBitmap(topbar, bitmap=ICON_NODEGRAPH_PANEL.GetBitmap())
        self.area_label = wx.StaticText(topbar, label="")
        self.area_label.SetForegroundColour("#fff")
        self.area_label.SetFont(self.area_label.GetFont().Bold())

        self.zoom_field = NumberField(topbar, default_value=100, label=_("Zoom"),
                                      min_value=25, max_value=250, suffix="%",
                                      show_p=False)
        self.menu_button = Button(topbar, label="", flat=True,
                                  bmp=(ICON_MORE_MENU_SMALL.GetBitmap(), 'left'))

        topbar_sizer.Add(self.area_icon, (0, 0), flag=wx.LEFT | wx.TOP | wx.BOTTOM, border=8)
        topbar_sizer.Add(self.area_label, (0, 1), flag=wx.ALL, border=8)
        topbar_sizer.Add(self.zoom_field, (0, 3), flag=wx.ALL, border=3)
        topbar_sizer.Add(self.menu_button, (0, 4), flag=wx.ALL, border=3)
        topbar_sizer.AddGrowableCol(2)

        topbar.SetSizer(topbar_sizer)

        self.nodegraph = NodeGraph(self, self.registry, size=(-1, self.Size[0]-20))

        # here for testing
        self.nodegraph.AddNode('image_node', wx.Point(100, 10))
        self.nodegraph.AddNode('image_node', wx.Point(400, 100))
        self.nodegraph.AddNode('blur_node', wx.Point(600, 200))
        self.nodegraph.AddNode('mix_node', wx.Point(100, 200))
        self.nodegraph.AddNode('output_node', wx.Point(300, 270))
        self.nodegraph.AddNode('flip_node', wx.Point(400, 270))

        main_sizer.Add(topbar, flag=wx.EXPAND | wx.LEFT | wx.RIGHT)
        main_sizer.Add(self.nodegraph, 1, flag=wx.EXPAND | wx.BOTH)

        self.SetSizer(main_sizer)

        self.nodegraph.Bind(EVT_GSNODEGRAPH_NODESELECT, self.UpdateNodePropertiesPnl)
        self.nodegraph.Bind(EVT_GSNODEGRAPH_NODECONNECT, self.NodeConnectEvent)
        self.nodegraph.Bind(EVT_GSNODEGRAPH_NODEDISCONNECT, self.NodeDisconnectEvent)
        self.nodegraph.Bind(EVT_GSNODEGRAPH_MOUSEZOOM, self.ZoomNodeGraph)
        self.zoom_field.Bind(EVT_NUMBERFIELD_CHANGE, self.ChangeZoom)
        self.menu_button.Bind(EVT_BUTTON, self.OnAreaMenuButton)
        self.Bind(wx.EVT_MENU, self.OnMenuUndockPanel, id=ID_MENU_UNDOCKPANEL)
        self.Bind(wx.EVT_MENU, self.OnMenuHidePanel, id=ID_MENU_HIDEPANEL)
        self.nodegraph.Bind(wx.EVT_ENTER_WINDOW, self.OnAreaFocus)
Exemplo n.º 2
0
    def CreateUI(self, parent, sizer):
        fold_panel = self.CreateFoldPanel(sizer)
        fold_panel.SetBackgroundColour(wx.Colour("#464646"))

        self.numberfield = NumberField(fold_panel,
                                       default_value=self.GetValue(),
                                       label=self.GetLabel(),
                                       min_value=self.GetMinValue(),
                                       max_value=self.GetMaxValue(),
                                       suffix="px",
                                       show_p=False,
                                       size=(-1, 32))

        self.AddToFoldPanel(sizer, fold_panel, self.numberfield, spacing=10)

        self.numberfield.Bind(EVT_NUMBERFIELD, self.WidgetEvent)
Exemplo n.º 3
0
class PositiveIntegerProp(Property):
    """ Allows the user to select a positive integer. """
    def __init__(self,
                 idname,
                 default=0,
                 min_val=0,
                 max_val=10,
                 widget="slider",
                 label="",
                 visible=True):
        Property.__init__(self, idname, default, label, visible)
        self.min_value = min_val
        self.max_value = max_val
        self.widget = widget

        self._RunErrorCheck()

    def _RunErrorCheck(self):
        if self.value > self.max_value:
            raise TypeError(
                "PositiveIntegerField value must be set to an integer less than 'max_val'"
            )
        if self.value < self.min_value:
            raise TypeError(
                "PositiveIntegerField value must be set to an integer greater than 'min_val'"
            )

    def GetMinValue(self):
        return self.min_value

    def GetMaxValue(self):
        return self.max_value

    def CreateUI(self, parent, sizer):
        fold_panel = self.CreateFoldPanel(sizer)
        fold_panel.SetBackgroundColour(wx.Colour("#464646"))

        self.numberfield = NumberField(fold_panel,
                                       default_value=self.GetValue(),
                                       label=self.GetLabel(),
                                       min_value=self.GetMinValue(),
                                       max_value=self.GetMaxValue(),
                                       suffix="px",
                                       show_p=False,
                                       size=(-1, 32))

        self.AddToFoldPanel(sizer, fold_panel, self.numberfield, spacing=10)

        self.numberfield.Bind(EVT_NUMBERFIELD, self.WidgetEvent)

    def WidgetEvent(self, event):
        self.SetValue(event.value)
Exemplo n.º 4
0
class NodeGraphPanel(wx.Panel):
    def __init__(self,
                 parent,
                 registry,
                 id=wx.ID_ANY,
                 pos=wx.DefaultPosition,
                 size=wx.DefaultSize,
                 style=wx.NO_BORDER | wx.TAB_TRAVERSAL):
        wx.Panel.__init__(self, parent, id, pos, size, style)

        self.parent = parent
        self.registry = registry

        self.SetBackgroundColour(wx.Colour("#464646"))

        self.BuildUI()

    def BuildUI(self):
        main_sizer = wx.BoxSizer(wx.VERTICAL)

        topbar = wx.Panel(self)
        topbar.SetBackgroundColour("#424242")

        topbar_sizer = wx.GridBagSizer(vgap=1, hgap=1)

        self.area_icon = wx.StaticBitmap(
            topbar, bitmap=ICON_NODEGRAPH_PANEL.GetBitmap())
        self.area_label = wx.StaticText(topbar, label="")
        self.area_label.SetForegroundColour("#fff")
        self.area_label.SetFont(self.area_label.GetFont().Bold())

        self.zoom_field = NumberField(topbar,
                                      default_value=100,
                                      label=_("Zoom"),
                                      min_value=25,
                                      max_value=250,
                                      suffix="%",
                                      show_p=False)
        self.menu_button = Button(topbar,
                                  label="",
                                  flat=True,
                                  bmp=(ICON_MORE_MENU_SMALL.GetBitmap(),
                                       'left'))

        topbar_sizer.Add(self.area_icon, (0, 0),
                         flag=wx.LEFT | wx.TOP | wx.BOTTOM,
                         border=8)
        topbar_sizer.Add(self.area_label, (0, 1), flag=wx.ALL, border=8)
        topbar_sizer.Add(self.zoom_field, (0, 3), flag=wx.ALL, border=3)
        topbar_sizer.Add(self.menu_button, (0, 4), flag=wx.ALL, border=3)
        topbar_sizer.AddGrowableCol(2)

        topbar.SetSizer(topbar_sizer)

        self.nodegraph = NodeGraph(self,
                                   self.registry,
                                   size=(-1, self.Size[0] - 20))

        # here for testing
        self.nodegraph.AddNode('image_node', wx.Point(100, 10))
        self.nodegraph.AddNode('image_node', wx.Point(400, 100))
        self.nodegraph.AddNode('blur_node', wx.Point(600, 200))
        self.nodegraph.AddNode('mix_node', wx.Point(100, 200))
        self.nodegraph.AddNode('output_node', wx.Point(300, 270))

        main_sizer.Add(topbar, flag=wx.EXPAND | wx.LEFT | wx.RIGHT)
        main_sizer.Add(self.nodegraph, 1, flag=wx.EXPAND | wx.BOTH)

        self.SetSizer(main_sizer)

        self.nodegraph.Bind(EVT_GSNODEGRAPH_NODESELECT,
                            self.UpdateNodePropertiesPnl)
        self.nodegraph.Bind(EVT_GSNODEGRAPH_NODECONNECT, self.NodeConnectEvent)
        self.nodegraph.Bind(EVT_GSNODEGRAPH_NODEDISCONNECT,
                            self.NodeDisconnectEvent)
        self.nodegraph.Bind(EVT_GSNODEGRAPH_MOUSEZOOM, self.ZoomNodeGraph)
        self.zoom_field.Bind(EVT_NUMBERFIELD_CHANGE, self.ChangeZoom)
        self.menu_button.Bind(EVT_BUTTON, self.OnAreaMenuButton)
        self.Bind(wx.EVT_MENU, self.OnMenuUndockPanel, id=ID_MENU_UNDOCKPANEL)
        self.Bind(wx.EVT_MENU, self.OnMenuHidePanel, id=ID_MENU_HIDEPANEL)
        self.nodegraph.Bind(wx.EVT_ENTER_WINDOW, self.OnAreaFocus)

    @property
    def AUIManager(self):
        return self.parent._mgr

    @property
    def NodeGraph(self):
        return self.nodegraph

    @property
    def PropertiesPanel(self):
        return self.parent.prop_pnl

    @property
    def Statusbar(self):
        return self.parent.statusbar

    @property
    def ImageViewport(self):
        return self.parent.imageviewport_pnl

    def UpdateNodePropertiesPnl(self, event):
        self.PropertiesPanel.UpdatePanelContents(event.value)

    def NodeConnectEvent(self, event):
        self.parent.Render()

    def NodeDisconnectEvent(self, event):
        pass

    def ChangeZoom(self, event):
        level = event.value / 100.0
        self.nodegraph.SetZoomLevel(level)

    def ZoomNodeGraph(self, event):
        self.zoom_field.SetValue(event.value)
        self.zoom_field.UpdateDrawing()
        self.zoom_field.Refresh()

    def OnAreaFocus(self, event):
        self.Statusbar.PushContextHints(2,
                                        mouseicon=ICON_MOUSE_LMB_MOVEMENT,
                                        text=_("Box Select Nodes"),
                                        clear=True)
        self.Statusbar.PushContextHints(3,
                                        mouseicon=ICON_MOUSE_LMB,
                                        text=_("Select Node"))
        self.Statusbar.PushContextHints(
            4,
            mouseicon=ICON_MOUSE_LMB,
            keyicon=ICON_KEY_CTRL,
            text=_("Connect Selected Node To Output"))
        self.Statusbar.PushContextHints(5,
                                        mouseicon=ICON_MOUSE_MMB_MOVEMENT,
                                        text=_("Pan Nodegraph"))
        self.Statusbar.PushContextHints(6,
                                        mouseicon=ICON_MOUSE_RMB,
                                        text=_("Node Context Menu"))
        self.Statusbar.PushMessage(_("Nodegraph Area"))
        self.Statusbar.UpdateStatusBar()

    def OnAreaMenuButton(self, event):
        self.CreateAreaMenu()
        pos = ComputeMenuPosAlignedLeft(self.area_dropdownmenu,
                                        self.menu_button)
        self.area_dropdownmenu.Popup(pos, self)

    def OnMenuUndockPanel(self, event):
        self.AUIManager.GetPane("nodegraph").Float()
        self.AUIManager.Update()

    def OnMenuHidePanel(self, event):
        self.AUIManager.GetPane("nodegraph").Hide()
        self.AUIManager.Update()

    def CreateAreaMenu(self):
        self.area_dropdownmenu = flatmenu.FlatMenu()

        undockpanel_menuitem = flatmenu.FlatMenuItem(self.area_dropdownmenu,
                                                     ID_MENU_UNDOCKPANEL,
                                                     _("Undock panel"), "",
                                                     wx.ITEM_NORMAL)
        self.area_dropdownmenu.AppendItem(undockpanel_menuitem)

        hidepanel_menuitem = flatmenu.FlatMenuItem(self.area_dropdownmenu,
                                                   ID_MENU_HIDEPANEL,
                                                   _("Hide panel"), "",
                                                   wx.ITEM_NORMAL)
        self.area_dropdownmenu.AppendItem(hidepanel_menuitem)
Exemplo n.º 5
0
    def __init__(self, *args, **kwds):
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.SetSize((600, 800))
        self.SetBackgroundColour(wx.Colour("#464646"))

        sz = wx.BoxSizer(wx.VERTICAL)

        ctrl1 = NumberField(self,
                            default_value=10,
                            label="Resolution",
                            min_value=0,
                            max_value=25,
                            suffix="px")
        ctrl2 = NumberField(self,
                            default_value=98,
                            label="Opacity",
                            min_value=0,
                            max_value=100,
                            suffix="%")

        ctrl3 = NumberField(self,
                            default_value=0,
                            label="Radius",
                            min_value=0,
                            max_value=10,
                            suffix="",
                            show_p=False)

        ctrl4 = NumberField(self,
                            default_value=50,
                            label="X:",
                            min_value=0,
                            max_value=100,
                            suffix="",
                            show_p=False)
        ctrl5 = NumberField(self,
                            default_value=13,
                            label="Y:",
                            min_value=0,
                            max_value=100,
                            suffix="",
                            show_p=False)

        ctrl6 = TextCtrl(self,
                         value="",
                         style=wx.BORDER_SIMPLE,
                         placeholder="",
                         size=(-1, 24))
        ctrl7 = NativeTextCtrl(self, size=(-1, 26))

        ctrl8 = ColorPickerButton(self, label="Background Color:")
        ctrl9 = ColorPickerButton(self,
                                  label="Highlight Color:",
                                  default=(0, 54, 78, 215))
        ctrl10 = ColorPickerButton(self,
                                   label="Text Color:",
                                   default=(255, 255, 255, 255))

        ctrl11 = Button(self,
                        label="Contrast",
                        bmp=(TEST_ICON.GetBitmap(), 'left'))
        ctrl12 = Button(self, label="Render Image")
        ctrl13 = Button(self,
                        label="Contrast",
                        bmp=(TEST_ICON.GetBitmap(), 'top'))
        ctrl14 = Button(self,
                        label="Choose Layer",
                        bmp=(TEST_ICON.GetBitmap(), 'left'))

        sz2 = wx.BoxSizer(wx.HORIZONTAL)

        ctrl15 = Button(self, label="", bmp=(TEST_ICON.GetBitmap(), 'left'))
        ctrl16 = Button(self, label="", bmp=(TEST_ICON.GetBitmap(), 'left'))
        ctrl17 = Button(self, label="", bmp=(TEST_ICON.GetBitmap(), 'left'))
        ctrl18 = Button(self, label="", bmp=(TEST_ICON.GetBitmap(), 'left'))

        sz2.Add(ctrl15, flag=wx.EXPAND | wx.ALL, border=6)
        sz2.Add(ctrl16, flag=wx.EXPAND | wx.ALL, border=6)
        sz2.Add(ctrl17, flag=wx.EXPAND | wx.ALL, border=6)
        sz2.Add(ctrl18, flag=wx.EXPAND | wx.ALL, border=6)

        sz.Add(ctrl1, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl2, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl3, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl4, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl5, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl6, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl7, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl8, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl9, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl10, flag=wx.EXPAND | wx.ALL, border=6)

        sz.Add(ctrl11, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl12, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl13, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(ctrl14, flag=wx.EXPAND | wx.ALL, border=6)
        sz.Add(sz2, border=20)

        self.SetSizer(sz)

        # Events
        self.Bind(EVT_NUMBERFIELD_CHANGE, self.OnFieldChange, ctrl1)
        self.Bind(EVT_NUMBERFIELD, self.OnField, ctrl1)
        self.Bind(EVT_BUTTON, self.OnColorChosen, ctrl8)
        self.Bind(EVT_BUTTON, self.OnColorChosen, ctrl9)
        self.Bind(EVT_BUTTON, self.OnColorChosen, ctrl10)
        self.Bind(EVT_BUTTON, self.OnButtonClick, ctrl11)
        self.Bind(EVT_BUTTON, self.OnButtonClick, ctrl12)
        self.Bind(EVT_BUTTON, self.OnButtonClick, ctrl13)
        self.Bind(EVT_BUTTON, self.OnButtonClick, ctrl14)