def __init__(self, parent, group): self.group = group isNoGroup = group == parent.L["GROUP_NONE"] super().__init__(parent, size=wx.Size(-1, 20), tag=group, func=None if isNoGroup else self.ShowNameChange, edge="D") # DialogFrame - Main - Outer - Inner - Title self.Main = parent.GetGrandParent() if not isNoGroup: self.Text = UI.Text(self, style=wx.TE_CENTER | wx.SIMPLE_BORDER | wx.TE_PROCESS_ENTER) self.Text.SetMaxLength(24) self.Text.Hide() self.Text.Bind(wx.EVT_KILL_FOCUS, self.OnTextLost) self.Text.Bind(wx.EVT_TEXT_ENTER, self.OnTextEnter) Sizer = wx.BoxSizer(wx.HORIZONTAL) Sizer.Add( UI.ToolNormal(self, size=wx.Size(20, 20), pics=self.R["AP_TRIANGLE_U"], func=(self.OnMove, "U"), edge=("", "LTB"))) Sizer.Add(self.Text, 1, wx.EXPAND) Sizer.Add(0, 0, 1) Sizer.Add( UI.ToolNormal(self, size=wx.Size(20, 20), pics=self.R["AP_TRIANGLE_D"], func=(self.OnMove, "D"), edge=("", "RTB"))) self.SetSizer(Sizer)
def __init__(self, parent, tag, pic, func): super().__init__(parent=parent, size=(-1, 20), tag=(tag, "L", 20), pic=(pic, "L"), func=func, fg="B", edge="D", res="R") Sizer = wx.BoxSizer(wx.HORIZONTAL) Sizer.AddMany(( (4, 4, 1), (UI.ToolNormal(self, size=SIZE_BTN, pics=self.R["DIALOG_DTCH"], edge=("", "TB"), func=func[1].Detach)), (UI.ToolNormal(self, size=SIZE_BTN, pics=self.R["DIALOG_LOCA"], edge=("", "TB"), func=func[1].Locate)), (UI.ToolNormal(self, size=SIZE_BTN, pics=self.R["AP_EXIT"], edge=("", "RTB"), func=func[1].OnClose, res="R")) )) self.SetSizer(Sizer)
def __init__(self, parent, help): super().__init__(parent, buttons=False) size = UI.SETTINGS["DLG_HEAD_BTN"] Sizer = self.GetSizer() Sizer.Insert(1, UI.ToolNormal(self, size=size, pics=self.R["DIALOG_LOCA"], func=self.Frame.Main.Locate), self.SizerFlags) Sizer.Insert(1, UI.ToolNormal(self, size=size, pics=self.R["DIALOG_ATCH"], func=self.Frame.Main.Attach), self.SizerFlags) if help: Sizer.Insert(0, UI.ToolNormal(self, size=size, pics=self.R["AP_HELP"], func=(self.GetGrandParent().OnSimpleDialog, "GENERAL_HEAD_HELP", help)), self.SizerFlags) Sizer.Insert(0, 3, 0) self.SetTagOffset(self.TagOffset[0] + size[0], self.TagOffset[1])
def __init__(self, path): self.path = path self.pathInstalled = os.path.join(path, "installed") self.pathDownloaded = os.path.join(path, "downloaded") self.pathTemporary = os.path.join(path, "temporary") self.pathDatabase = os.path.join(path, "database") self.ok = all((UI.FindOrCreateDirectory(self.path), UI.FindOrCreateDirectory(self.pathInstalled), UI.FindOrCreateDirectory(self.pathDownloaded), UI.FindOrCreateDirectory(self.pathTemporary), UI.FindOrCreateDirectory(self.pathDatabase)))
def MakeWidgetDialog(widget): Frame = UI.BaseDialog(parent=widget.Canvas.F, title=widget.NAME, style=wx.FRAME_FLOAT_ON_PARENT, main=(widget.DIALOG, {"widget": widget}), head=(DetachedHead, {"help": widget.DIALOG.HELP}), grip={"minSize": widget.DIALOG.MIN_SIZE}, ) x, y = widget.DialogSize or Frame.GetEffectiveMinSize() Frame.SetSize((max(x, widget.DIALOG.MIN_SIZE[0]), max(y, UI.SETTINGS["DLG_HEAD"] + widget.DIALOG.MIN_SIZE[1]))) Frame.SetPosition(widget.DialogPos or UI.EnsureWindowInScreen(widget.Canvas.ClientToScreen(widget.GetPosition() + wx.Point(64, 0)), (x, y))) Frame.Main.GetData() Frame.Play("FADEIN") return Frame.Main
def Attach(self): if self.detached: self.detached = False self.Frame.Hide() self.Frame.Main = None self.Frame.GetSizer().Detach(self) self[0].Hide() self.Layout() if 1 in self: self[1].Func = self.OnBegin if not self.IsShown(): self.Show() self.Reparent(self.Harbor.Inner) self.Head = AttachedHead(self.Harbor.Inner, tag=self.Widget.NAME, pic=self.R["AP_ABORT"][0], func=(self.Harbor.OnChild, self)) self.Sash = UI.Sash(self.Harbor.Inner, target=self, direction="T", vRange=(2, 600), func=((self.Harbor.SetActualSize,), self.Harbor.Inner.Layout, self.Harbor.ReDraw), res="D") self.Harbor.Inner.GetSizer().AddMany(( (self.Head, SF_HEAD), (self, SF_MAIN), (self.Sash, SF_SASH) )) self.Harbor.SetActualSize() self.Harbor.ReDraw() if not self.Harbor.IsShown(): self.Harbor.GetParent().HiderR.Click() self.Widget.Canvas.ReDraw()
def Extract(self, fp): pathTmp = UI.CreateRandomDirectory(self.pathTemporary) try: with zipfile.ZipFile(fp) as z: z.extractall(pathTmp) return pathTmp except Exception: shutil.rmtree(pathTmp) self.F.OnSimpleDialog("GENERAL_HEAD_FAIL", "MSG_PKG_EXTRACT_FAIL", textData=fp)
def AutoSetData(self): ok = True for field in self.Widget.INTERNAL: if isinstance(field, BaseField): v = field.Validate(UI.Do(self.AutoGet[field.key])) if v is None: ok = False self.Widget[field.key] = None else: self.Widget[field.key] = v return ok
def MakeDialog(parent, title, main, head=None): Dialog = UI.BaseDialog(parent=parent, title=title, main=main, head=head or {}, style=wx.FRAME_NO_TASKBAR) x, y = Dialog.GetEffectiveMinSize() Dialog.SetSize((max(x, 120), max(y, UI.SETTINGS["DLG_HEAD"] + 10))) Dialog.CenterOnParent() Dialog.Play("FADEIN") return Dialog
def Start(self): m = Manager(self.path) r = Resource(os.path.join(self.path, "resources.json")) s = Setting(os.path.join(self.path, "settings.json")) l = Locale(Ut.Find("lang", "%s.json" % s["LANGUAGE"])) if not (m.ok and r.ok and s.ok and l.ok): return UI.ShowSimpleMessageDialog( None, l["MSG_WORKSPACE_FAIL"] % self.path, l["GENERAL_HEAD_FAIL"]) Frame = MainFrame(r, s, l, m) Frame.Show() self.MainLoop()
def NewGroup(self, group=None, layout=False): if group is None: while "%s %s" % (self.L["GROUP_NEW"], self.newGroupIndex) in self.Groups: self.newGroupIndex += 1 group = "%s %s" % (self.L["GROUP_NEW"], self.newGroupIndex) else: if group in self.Groups: return group panel = UI.BaseControl(self.Inner) title = GroupTitle(self.Inner, group) groupSizer = wx.WrapSizer() btnAdd = UI.Button(panel, size=wx.Size(36, 36), pic=self.R["MANAGE_ADD"], func=None, edge=None, res="L") groupSizer.Add(btnAdd, SF_ITEM) btnDel = UI.Button(panel, size=wx.Size(36, 36), pic=self.R["MANAGE_DEL"], func=(self.DelGroup, title), edge=None, res="L") groupSizer.Add(btnDel, SF_ITEM) panel.SetSizer(groupSizer) self.Inner.GetSizer().AddMany(((title, SF_TITLE), (panel, SF_PANEL))) self.Groups[group] = { "TITLE": title, "PANEL": panel, "ADD": btnAdd, "DEL": btnDel } if self["NEW"]: self.Inner.GetSizer().Detach(self["NEW"]) self.Inner.GetSizer().Add(self["NEW"], SF_NEW) if layout: self.OnArrangement() return group
def OnMouse(self, evt): # TODO Multiple screen see wx.Display if evt.GetEventType() == wx.wxEVT_MOTION and self.lastMousePos: newPos = self.lastFramePos - self.lastMousePos + self.Frame.ClientToScreen(evt.GetPosition()) size = self.Frame.GetSize() UI.EnsureWindowInScreen(newPos, size, 12) l, t = newPos b = t + size[1] r = l + size[0] closestH = closestV = UI.SETTINGS["DLG_HEAD"] // 2 for frame in wx.GetTopLevelWindows(): if isinstance(frame, UI.BaseDialog) and frame != self.Frame and frame.IsShown(): _l, _t = frame.GetPosition() _b = _t + frame.GetSize()[1] _r = _l + frame.GetSize()[0] if _l <= l < _r or _l < r <= _r: d = abs(t - _b) if d < closestV: closestV = d newPos[1] = _b d = abs(b - _t) if d < closestV: closestV = d newPos[1] = _t - size[1] d = abs(t - _t) if d < closestV: closestV = d newPos[1] = _t d = abs(b - _b) if d < closestV: closestV = d newPos[1] = _b - size[1] if _t <= t < _b or _t < b <= _b: d = abs(l - _r) if d < closestH: closestH = d newPos[0] = _r d = abs(r - _l) if d < closestH: closestH = d newPos[0] = _l - size[0] d = abs(l - _l) if d < closestH: closestH = d newPos[0] = _l d = abs(r - _r) if d < closestH: closestH = d newPos[0] = _r - size[0] self.Frame.SetPosition(newPos) else: super().OnMouse(evt)
def _DrawWidget(self, mdc, cls): brush = wx.Brush(cls.__COLOR__) bitmap, w2, h2 = self._PrepareWidgetIcon(cls.__ICON__) self.WidgetPen.SetColour(UI.AlphaBlend("#ffffff", cls.__COLOR__, 0.75)) cls.__RES__ = { "CANVAS": { "IDLE": self.MaskCanvas.GetSubBitmap(self.RectCanvas) }, # large icon for canvas "BUTTON": self.MaskGadget.GetSubBitmap( self.RectGadget), # small icon for gadget/manage panel, "CURSOR": self.MaskCursor.GetSubBitmap( self.RectCursor), # cursor for drag and add widget "DIALOG": None } # icon for dialog # For Canvas mdc.SelectObject(cls.__RES__["CANVAS"]["IDLE"]) mgc = wx.GraphicsContext.Create(mdc) mgc.SetPen(self.WidgetPen) mgc.SetBrush(brush) mgc.DrawRectangle(4, 4, 48, 48) mdc.DrawBitmap(bitmap, 28 - w2, 28 - h2) mdc.DrawBitmap(self["INDICATOR"][3], 5, 5) if cls.UNIQUE: mdc.DrawBitmap(self["INDICATOR"][0], 42, 42) if cls.PROVIDER: mdc.DrawBitmap(self["INDICATOR"][0], 5, 42) mdc.SelectObject(wx.NullBitmap) for state in ("DONE", "FAIL", "WAIT", "WORK"): cls.__RES__["CANVAS"][state] = cls.__RES__["CANVAS"][ "IDLE"].GetSubBitmap(self.RectCanvas) mdc.SelectObject(cls.__RES__["CANVAS"][state]) mgc = wx.GraphicsContext.Create(mdc) mgc.SetBrush(self["BRUSH_WIDGET_" + state]) mgc.DrawRectangle(8, 8, 6, 6) # For Gadget mdc.SelectObject(cls.__RES__["BUTTON"]) mgc = wx.GraphicsContext.Create(mdc) mgc.SetPen(self.WidgetPen) mgc.SetBrush(brush) mgc.DrawRectangle(0, 0, 30, 30) mdc.DrawBitmap(bitmap, 15 - w2, 15 - h2) cls.__RES__["DIALOG"] = wx.Icon(cls.__RES__["BUTTON"]) # For Cursor mdc.SelectObject(cls.__RES__["CURSOR"]) mgc = wx.GraphicsContext.Create(mdc) mgc.SetPen(self.WidgetPen) mgc.SetBrush(wx.Brush(cls.__COLOR__ + "60")) mdc.DrawBitmap(bitmap, 15 - w2, 15 - h2) mgc.DrawRectangle(0, 0, 29, 29) cls.__RES__["CURSOR"] = wx.Cursor( cls.__RES__["CURSOR"].ConvertToImage())
def __init__(self, parent): super().__init__(parent=parent, title=parent.L["MANAGE_TITLE"], size=wx.Size(720, 480), main=Main, style=wx.FRAME_NO_TASKBAR) self.Head.GetSizer().Insert( 0, UI.ToolNormal(self.Head, size=UI.SETTINGS["DLG_HEAD_BTN"], pics=self.R["AP_HELP"], func=(parent.OnSimpleDialog, "MANAGE_HELP_HEAD", "MANAGE_HELP_TEXT")), 0, wx.ALL, 3) self.Head.SetTagOffset(24, 0) self.Center() self.Layout() self.Play("FADEIN")
def SimpleDialog(parent, title, text, onOK=None): Dialog = UI.BaseDialog(parent=parent, title=title, head={"buttons": False}, style=wx.FRAME_NO_TASKBAR) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(wx.StaticText(Dialog.Main, label=text), 1, wx.EXPAND | wx.ALL, 8) if onOK: Dialog.Main.AddStdButton(sizer, onOK=((UI.DoNothing, ), onOK, Dialog.OnClose), onCancel=Dialog.OnClose) else: Dialog.Main.AddStdButton(sizer, onOK=Dialog.OnClose) Dialog.Main.SetSizer(sizer) x, y = Dialog.GetEffectiveMinSize() Dialog.SetSize((max(x, 120), max(y, UI.SETTINGS["DLG_HEAD"] + 10))) Dialog.Layout() Dialog.Center() Dialog.Play("FADEIN") return Dialog
def AddItems(self, args): self.Freeze() group = self.NewGroup(self.L["GROUP_NONE"]) for arg in args: if isinstance(arg, str): group = self.NewGroup(arg or self.L["GROUP_NONE"]) else: self.AddItem( WidgetItem(self.Groups[group]["PANEL"], item=arg, group=group)) if self["NEW"] is None: self["NEW"] = UI.Button(self.Inner, size=wx.Size(-1, 64), tag=self.L["MANAGE_NEW_GROUP"], func=(self.NewGroup, None, True), res="L", edge="D") self.Inner.GetSizer().Add(self["NEW"], SF_NEW) self.Inner.Layout() self.OnSize() self.Thaw()
def AddStdButton(self, sizer): size = wx.Size(40, self.LINE_HEIGHT) self[0] = UI.ToolNormal(self, size=size, pics=self.R["AP_CROSS"], edge="D", func=self.OnClose) if self.Widget.THREAD: self[3] = UI.ToolNormal(self, size=size, pics=self.R["AP_BEGIN"], edge="D", func=self.OnBegin) self[4] = UI.ToolNormal(self, size=size, pics=self.R["AP_ABORT"], edge="D", func=self.OnAbort) elif self.TASK: self[3] = UI.ToolNormal(self, size=size, pics=self.R["AP_BEGIN"], edge="D", func=self.OnBegin) else: self[1] = UI.ToolNormal(self, size=size, pics=self.R["AP_CHECK"], edge="D", func=self.OnReady) if self.Widget.INTERNAL or self.Widget.INCOMING: self[2] = UI.ToolNormal(self, size=size, pics=self.R["AP_APPLY"], edge="D", func=self.OnApply) if sizer.GetOrientation() == wx.HORIZONTAL: subSizer = sizer sizer.Add(4, 4, 1) else: subSizer = self.AddPerpendicularSizer(sizer, 0, wx.ALIGN_RIGHT | wx.ALL, 0) for i in (3, 4, 1, 0, 2): if i in self: subSizer.Add(self[i], 0, wx.ALL, self.MARGIN)
def OnMouse(self, evt): super().OnMouse(evt) evtType = evt.GetEventType() if evtType == wx.wxEVT_LEFT_DOWN: self.SetCursor(self.Item.__RES__["CURSOR"]) elif evtType == wx.wxEVT_LEFT_UP: UI.Do(self.todo) if self.pointing: self.pointing.Play("LEAVE") self.todo = None self.pointing = None self.SetCursor(self.R["CURSOR_NORMAL"]) elif evtType == wx.wxEVT_MOTION and self.leftDown: pos = self.ClientToScreen(evt.GetPosition()) if self.Main.Groups[self.group]["PANEL"].GetScreenRect().Contains( pos): if self.Main.Groups[ self.group]["DEL"].GetScreenRect().Contains(pos): self.todo = (wx.CallAfter, self.Main.DelItem, self, True) pointing = self.Main.Groups[self.group]["DEL"] else: W, H = self.Main.Groups[self.group]["PANEL"].GetSize() C, R = W // 108, H // 36 x, y = self.Main.Groups[ self.group]["PANEL"].ScreenToClient(pos) c, r = max(min(x // 108, C), 0), max(min(y // 36, R), 0) index = r * C + c if index != self.currentIndex: self.GetParent().GetSizer().Detach(self) self.Main.AddItem(self, max(0, index), True) self.todo = None pointing = self.Main.Groups[self.group]["TITLE"] elif self.Main.Groups[ self.group]["TITLE"].GetScreenRect().Contains(pos): self.todo = None pointing = self.Main.Groups[self.group]["TITLE"] else: for group in self.Main.Groups: if group != self.group: if self.Main.Groups[group]["TITLE"].GetScreenRect( ).Contains(pos): self.todo = None pointing = self.Main.Groups[group]["TITLE"] self.ChangeGroup(group) break if self.Main.Groups[group]["PANEL"].GetScreenRect( ).Contains(pos): self.todo = None pointing = self.Main.Groups[group]["TITLE"] self.ChangeGroup(group) break else: if self.Main["NEW"].GetScreenRect().Contains(pos): self.todo = self.ChangeGroup pointing = self.Main["NEW"] else: self.todo = None pointing = None if pointing != self.pointing: if pointing: pointing.Play("ENTER") if self.pointing: self.pointing.Play("LEAVE") self.pointing = pointing
def __init__(self, parent): super().__init__(parent, edge=None) self.F = parent.GetParent() # MainFrame -> BaseDialog -> Main self.AddScrollBar((0, 12)) SizerLeft = wx.BoxSizer(wx.VERTICAL) self.Installed = UI.ListCtrl(self, data=(), width=(-1, )) SizerLeft.AddMany(( (self.Installed, 1, wx.EXPAND | wx.ALL, 4), (UI.ToolNormal(self, size=SIZE_B, pics=(self.R["AP_CLOUD"], "L", 8), tag=(self.L["MANAGE_PKG_REMOTE"], "L", 32), edge="D", func=self.OnRemote, showTag=True), SF_S), (UI.ToolNormal(self, size=SIZE_B, pics=(self.R["AP_LOCAL"], "L", 8), tag=(self.L["MANAGE_PKG_BROWSE"], "L", 32), edge="D", func=self.OnBrowse, showTag=True), SF_S), (UI.ToolNormal(self, size=SIZE_B, pics=(self.R["AP_TRASH"], "L", 8), tag=(self.L["MANAGE_PKG_REMOVE"], "L", 32), edge="D", func=self.OnRemove, showTag=True), SF_S), )) SizerButton = wx.BoxSizer(wx.HORIZONTAL) SizerButton.AddMany( ((UI.ToolNormal(self, size=SIZE_S, pics=(self.R["AP_RESET"], "L", 8), tag=(self.L["GENERAL_RESET"], "L", 32), edge="D", func=self.OnReset, showTag=True), SF_B), (UI.ToolNormal(self, size=SIZE_S, pics=(self.R["AP_CROSS"], "L", 8), tag=(self.L["GENERAL_CLOSE"], "L", 32), edge="D", func=self.OnClose, showTag=True), SF_B), (UI.ToolNormal(self, size=SIZE_S, pics=(self.R["AP_CHECK"], "L", 8), tag=(self.L["GENERAL_READY"], "L", 32), edge="D", func=self.OnReady, showTag=True), SF_B), (UI.ToolNormal(self, size=SIZE_S, pics=(self.R["AP_APPLY"], "L", 8), tag=(self.L["GENERAL_APPLY"], "L", 32), edge="D", func=self.OnApply, showTag=True), SF_B))) SizerRight = wx.BoxSizer(wx.VERTICAL) self.Outer = wx.Panel(self) self.Inner = wx.Panel(self.Outer, pos=(0, 0)) self.Inner.R = self.R self.Inner.S = self.S self.Inner.L = self.L InnerSizer = wx.BoxSizer(wx.VERTICAL) self.Inner.SetSizer(InnerSizer) SizerRight.Add(self.Outer, 1, wx.EXPAND) SizerRight.Add(SizerButton, 0, wx.EXPAND | wx.ALL, 2) Sizer = wx.BoxSizer(wx.HORIZONTAL) Sizer.Add(SizerLeft, 0, wx.EXPAND | wx.ALL, 4) Sizer.Add(UI.Separator(self), 0, wx.EXPAND | wx.ALL, 8) Sizer.Add(SizerRight, 1, wx.EXPAND | wx.ALL, 4) Sizer.Add(UI.SETTINGS["SCROLL_DIAMETER"], 4) self.SetSizer(Sizer) self.newGroupIndex = 1 self["NEW"] = None self.Groups = {} self.UpdatePackageList() self.AddItems(self.F.M.Groups)
def OnBrowse(self): fp = UI.ShowOpenFileDialog(self, self.L["MSG_PKG_INSTALL_HEAD"], "Zip files (*.zip)|*.zip") if fp is not None: self.DoInstall(fp)
def __init__(self, r, s, l, m): super().__init__(parent=None, title=l["TITLE"], pos=s["LAST_POS"], size=s["LAST_SIZE"], style=wx.DEFAULT_FRAME_STYLE | wx.FULL_REPAINT_ON_RESIZE) self.R = r self.S = s self.L = l self.M = m self.D = {} self.T = { "LAST_FILE": "", } self.SetStatus = UI.DoNothing self.SetDoubleBuffered(True) self.SetMinSize(wx.Size(800, 600)) self.SetIcon(self.R["__LabPype__"]) self.SetFont(self.R["FONT_N"]) self.Bind(wx.EVT_CLOSE, self.OnClose) if self.S["MAXIMIZED"]: self.Maximize() self.Tool = UI.Tool(self, edge=("", "B")) self.Info = UI.Info(self, edge=("T", "")) self.Gadget = Gadget(self, size=wx.Size(self.S["WIDTH_GADGET"], -1)) self.Canvas = Canvas(self) self.Harbor = Harbor(self, size=wx.Size(self.S["WIDTH_HARBOR"], -1)) self.Manage = None self.Center = UI.BaseControl(self, size=wx.Size(-1, self.S["HEIGHT_CENTER"]), edge=("LR", "")) self.Record = Record(self.Center) self.SashC = UI.Sash(self, target=self.Center, direction="B", vRange=(0, 250), edge=("LR", "T")) self.SashL = UI.Sash(self, target=self.Gadget, direction="L", vRange=(0, 384), edge=("T", "RB")) self.SashR = UI.Sash(self, target=self.Harbor, direction="R", vRange=(0, 600), edge=("T", "LB")) self.HiderC = UI.Hider(self, targets=(self.Center, self.SashC), orientation="H", edge=("LR", "B")) self.HiderL = UI.Hider(self, targets=(self.Gadget, self.SashL), edge="H") self.HiderR = UI.Hider(self, targets=(self.Harbor, self.SashR), edge="H") self.HiderC.SetTip(self.SetStatus, self.L["HIDER_CENTER"]) self.HiderL.SetTip(self.SetStatus, self.L["HIDER_GADGET"]) self.HiderR.SetTip(self.SetStatus, self.L["HIDER_HARBOR"]) self.AcceleratorEntries = [] for flags, keyCode, func in ( (wx.ACCEL_NORMAL, wx.WXK_F3, self.HiderL.Click), (wx.ACCEL_NORMAL, wx.WXK_F4, self.HiderC.Click), (wx.ACCEL_NORMAL, wx.WXK_F5, self.HiderR.Click), (wx.ACCEL_CTRL, ord("F"), lambda evt: self.Gadget.Tool["GADGET_SEARCH"].SetFocus()), (wx.ACCEL_CTRL, ord("D"), self.Gadget.Tool["GADGET_CANCEL"].Click), (wx.ACCEL_CTRL, ord("E"), self.Gadget.Tool["TOOL_T_SHOW"].Click), (wx.ACCEL_CTRL, ord("R"), self.Gadget.Tool["TOOL_T_TEXT"].Click), (wx.ACCEL_CTRL, ord("W"), self.Gadget.Tool["TOOL_MANAGE"].Click), (wx.ACCEL_CTRL, ord("A"), lambda evt: self.Canvas.SelectAll()), ): cmd = wx.NewId() self.Bind(wx.EVT_MENU, func, id=cmd) self.AcceleratorEntries.append( wx.AcceleratorEntry(flags=flags, keyCode=keyCode, cmd=cmd)) self.Tool.AddItemsWithHotKey( ("N", "TOOL_OPTION", self.OnOption, wx.ACCEL_CTRL | wx.ACCEL_ALT, ord("S")), "|", ("N", "TOOL_FILE_N", self.OnNew, wx.ACCEL_CTRL, ord("N")), ("N", "TOOL_FILE_O", (self.OnMakeDialog, "DIALOG_HEAD_LOAD", LoadDialog, { "buttons": False }), wx.ACCEL_CTRL, ord("O")), ("N", "TOOL_FILE_S", (self.OnMakeDialog, "DIALOG_HEAD_SAVE", SaveDialog, { "buttons": False }), wx.ACCEL_CTRL, ord("S")), "|", ("T", "TOOL_T_ANCR", (self.OnToggle, "TOGGLE_ANCR"), wx.ACCEL_NORMAL, wx.WXK_F6, { "toggle": self.S["TOGGLE_ANCR"] }), ("T", "TOOL_T_NAME", (self.OnToggle, "TOGGLE_NAME"), wx.ACCEL_NORMAL, wx.WXK_F7, { "toggle": self.S["TOGGLE_NAME"] }), ("T", "TOOL_T_SNAP", (self.OnToggle, "TOGGLE_SNAP"), wx.ACCEL_NORMAL, wx.WXK_F8, { "toggle": self.S["TOGGLE_SNAP"] }), ("T", "TOOL_T_CURV", self.Canvas.ToggleLinkType, wx.ACCEL_NORMAL, wx.WXK_F9, { "toggle": self.S["TOGGLE_CURV"] }), ("T", "TOOL_T_DIAG", self.OnToggleDialogSize, wx.ACCEL_NORMAL, wx.WXK_F10, { "toggle": 0 }), ("T", "TOOL_T_FSCN", self.OnToggleFullScreen, wx.ACCEL_NORMAL, wx.WXK_F11, { "toggle": 0 }), "|", ("N", "TOOL_ALGN_L", (self.Canvas.Align, Ut.AlignL), wx.ACCEL_CTRL, wx.WXK_NUMPAD4), ("N", "TOOL_ALGN_V", (self.Canvas.Align, Ut.AlignV), wx.ACCEL_CTRL, wx.WXK_NUMPAD5), ("N", "TOOL_ALGN_R", (self.Canvas.Align, Ut.AlignR), wx.ACCEL_CTRL, wx.WXK_NUMPAD6), ("N", "TOOL_ALGN_T", (self.Canvas.Align, Ut.AlignT), wx.ACCEL_CTRL, wx.WXK_NUMPAD8), ("N", "TOOL_ALGN_H", (self.Canvas.Align, Ut.AlignH), wx.ACCEL_CTRL, wx.WXK_NUMPAD0), ("N", "TOOL_ALGN_B", (self.Canvas.Align, Ut.AlignB), wx.ACCEL_CTRL, wx.WXK_NUMPAD2), "|", ("N", "TOOL_DIST_H", (self.Canvas.Distribute, Ut.DistributeH), wx.ACCEL_CTRL, ord("H")), ("N", "TOOL_DIST_V", (self.Canvas.Distribute, Ut.DistributeV), wx.ACCEL_CTRL, ord("V")), "|", ("N", "TOOL_MOVE_T", (self.Canvas.AlterLayer, "T"), wx.ACCEL_CTRL, wx.WXK_NUMPAD9), ("N", "TOOL_MOVE_U", (self.Canvas.AlterLayer, "U"), wx.ACCEL_CTRL, wx.WXK_NUMPAD7), ("N", "TOOL_MOVE_D", (self.Canvas.AlterLayer, "D"), wx.ACCEL_CTRL, wx.WXK_NUMPAD1), ("N", "TOOL_MOVE_B", (self.Canvas.AlterLayer, "B"), wx.ACCEL_CTRL, wx.WXK_NUMPAD3), "|", ("N", "TOOL_CANCEL", self.OnDismissAllDialog, wx.ACCEL_CTRL, wx.WXK_DELETE, { "res": "R" }), ("N", "TOOL_DELETE", self.Canvas.DeleteSelected, wx.ACCEL_NORMAL, wx.WXK_DELETE, { "res": "R" }), ) self.Info.AddItems((wx.StaticText(self.Info, size=(268, 16)), 0), (wx.StaticText(self.Info, size=(-1, 16)), 1), (wx.StaticText(self.Info, size=(268, 16)), 0)) self.SetAcceleratorTable(wx.AcceleratorTable(self.AcceleratorEntries)) CenterSizer = wx.BoxSizer(wx.HORIZONTAL) CenterSizer.Add(self.Record, 1, wx.EXPAND | wx.ALL, 1) self.Center.SetSizer(CenterSizer) MiddleSizer = wx.BoxSizer(wx.VERTICAL) MiddleSizer.AddMany(( (self.Canvas, 1, wx.EXPAND), (self.SashC, 0, wx.EXPAND), (self.Center, 0, wx.EXPAND), (self.HiderC, 0, wx.EXPAND), )) MainSizer = wx.BoxSizer(wx.HORIZONTAL) MainSizer.AddMany(( (self.HiderL, 0, wx.EXPAND), (self.Gadget, 0, wx.EXPAND), (self.SashL, 0, wx.EXPAND), (MiddleSizer, 1, wx.EXPAND), (self.SashR, 0, wx.EXPAND), (self.Harbor, 0, wx.EXPAND), (self.HiderR, 0, wx.EXPAND), )) FrameSizer = wx.BoxSizer(wx.VERTICAL) FrameSizer.AddMany(( (self.Tool, 0, wx.EXPAND), (MainSizer, 1, wx.EXPAND), (self.Info, 0, wx.EXPAND), )) self.SetSizer(FrameSizer) self.Layout() if not self.S["SHOW_GADGET"]: self.HiderL.OnHider() if not self.S["SHOW_HARBOR"]: self.HiderR.OnHider() if not self.S["SHOW_CENTER"]: self.HiderC.OnHider() self.M.Init(self)
def __init__(self, fp): super().__init__(fp) self["__LabPype__"] = Img.LabPype.GetIcon() if self["FONTFACE_CANVAS"] == "": self["FONTFACE_CANVAS"] = wx.SystemSettings().GetFont( wx.SYS_DEFAULT_GUI_FONT).GetFaceName() if self["FONTFACE_FIXED"] == "": self["FONTFACE_FIXED"] = wx.SystemSettings().GetFont( wx.SYS_ANSI_FIXED_FONT).GetFaceName() # GUI self["PEN_CONNECTION"] = wx.Pen(self["COLOR_CONNECTION"], 3) self["PEN_CONNECTION_SELECTION1"] = wx.Pen(self["COLOR_SELECTION"], 11) self["PEN_CONNECTION_SELECTION2"] = wx.Pen( UI.AlphaBlend(self["COLOR_BG_B"], self["COLOR_SELECTION"], 0.5), 9) self["PEN_SELECTION"] = wx.Pen(self["COLOR_SELECTION"], 1) self["BRUSH_SELECTION"] = wx.Brush( UI.AlphaBlend(self["COLOR_BG_B"], self["COLOR_SELECTION"], 0.3)) # Brush self["BRUSH_WIDGET_DONE"] = wx.Brush(self["COLOR_WIDGET_DONE"]) self["BRUSH_WIDGET_WAIT"] = wx.Brush(self["COLOR_WIDGET_WAIT"]) self["BRUSH_WIDGET_WORK"] = wx.Brush(self["COLOR_WIDGET_WORK"]) self["BRUSH_WIDGET_FAIL"] = wx.Brush(self["COLOR_WIDGET_FAIL"]) self["BRUSH_ANCHOR_RECV"] = wx.Brush(self["COLOR_ANCHOR_RECV"]) self["BRUSH_ANCHOR_SEND"] = wx.Brush(self["COLOR_ANCHOR_SEND"]) self["BRUSH_ANCHOR_PASS"] = wx.Brush(self["COLOR_ANCHOR_PASS"]) self["BRUSH_ANCHOR_FAIL"] = wx.Brush(self["COLOR_ANCHOR_FAIL"]) # Font self.SetMainFont(9, self["FONTFACE_MAIN"]) self["FONT_H1"] = wx.Font(24, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, self["FONTFACE_MAIN"]) self["FONT_H2"] = wx.Font(20, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, self["FONTFACE_MAIN"]) self["FONT_H3"] = wx.Font(16, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, self["FONTFACE_MAIN"]) self["FONT_H4"] = wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, self["FONTFACE_MAIN"]) self["FONT_CANVAS"] = wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, self["FONTFACE_CANVAS"]) self["FONT_FIXED"] = wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, self["FONTFACE_FIXED"]) # Bitmap for key in ( "TOOL_OPTION", "TOOL_DELETE", "TOOL_FILE_N", "TOOL_FILE_O", "TOOL_FILE_S", "TOOL_ALGN_L", "TOOL_ALGN_V", "TOOL_ALGN_R", "TOOL_ALGN_T", "TOOL_ALGN_H", "TOOL_ALGN_B", "TOOL_DIST_H", "TOOL_DIST_V", "TOOL_MOVE_U", "TOOL_MOVE_D", "TOOL_MOVE_T", "TOOL_MOVE_B", "TOOL_T_ANCR", "TOOL_T_NAME", "TOOL_T_SNAP", "TOOL_T_CURV", "TOOL_T_DIAG", "TOOL_T_FSCN", "TOOL_CANCEL", "TOOL_T_SHOW", "TOOL_T_TEXT", "TOOL_MANAGE", "DIALOG_MISC", "DIALOG_ATCH", "DIALOG_DTCH", "DIALOG_LOCA", ): self[key] = UI.GetBitmaps(self.GetBitmap(key), 20, 20) for key in ("MANAGE_ADD", "MANAGE_DEL"): self[key] = self.GetBitmap(key) # Resources for widget drawing self["INDICATOR"] = UI.GetBitmaps(self.GetBitmap("INDICATOR"), 10, 10) self.DefaultIcon = Img.WIDGET.GetBitmap() self.MaskCanvas = Img.MASK_CANVAS.GetBitmap() self.MaskGadget = Img.MASK_GADGET.GetBitmap() self.MaskCursor = Img.MASK_CURSOR.GetBitmap() self.RectCanvas = wx.Rect(0, 0, 56, 56) self.RectGadget = wx.Rect(0, 0, 32, 32) self.RectCursor = wx.Rect(0, 0, 30, 30) self.WidgetPen = wx.Pen("#000000", 1)