﻿from TSMaster import *
import sys
blacklist = ["tkinter"] # modules such as tkinter will release GIL by itself, which is not allowed in TSMster Toolbox
for mod in blacklist:
    if sys.modules.get(mod):
        tmp_import = __import__ (mod)
        sys.modules[mod] = None



class AutoGLable():
    def __init__(self,Parent= None,label_number=6,firstLeft=0,firtTop=0,Name="A"):
        self.label_number = label_number
        self.firstLeft = firstLeft
        self.firtTop = firtTop
        self.Parent = Parent
        self.Name = Name
        self.labellist=['']*self.label_number
        for i in range(self.label_number):
            self.labellist[i] = Label(self.Parent)
            self.labellist[i].Name = f"{self.Name}{i}"
            self.labellist[i].Parent = self.Parent
            self.labellist[i].Left = self.firstLeft+i*24
            self.labellist[i].Top = self.firtTop
            self.labellist[i].Width = 24
            self.labellist[i].Height = 32
            self.labellist[i].Cursor = crArrow
            self.labellist[i].ParentCustomHint = "False"
            self.labellist[i].Alignment = "taCenter"
            self.labellist[i].AutoSize = False
            self.labellist[i].Caption = '0'
            self.labellist[i].Font.Charset = DEFAULT_CHARSET
            self.labellist[i].Font.Color = clWindowText
            self.labellist[i].Font.Height = -17
            self.labellist[i].Font.Name = 'Segoe UI'
            self.labellist[i].Font.Style = ["fsBold"]
            self.labellist[i].ParentFont = False
            self.labellist[i].ParentShowHint = "False"
            self.labellist[i].ShowHint = "False"
            self.labellist[i].Layout = "tlCenter"
            self.labellist[i].OnClick = self.labeloncl
        self.Label1 = Label(self.Parent)
        self.Label1.Name = f"{Name}"
        self.Label1.Parent = self.Parent
        self.Label1.Left = self.firstLeft+self.label_number*12
        self.Label1.Top = self.firtTop+33
        self.Label1.Width = 91
        self.Label1.Height = 15
        self.Label1.Cursor = crArrow
        self.Label1.Caption = "0x0"
    def labeloncl(self,sender):
        if sender.Caption == "0":
            sender.Caption = "1"
        elif sender.Caption == "1":
            sender.Caption = "0"
        else:
            pass
        svalue = ''.join([i.Caption for i in self.labellist]).lstrip('0')
        self.Label1.Caption = hex(int(svalue,2))

    def getvalue(self):
        return ''.join([i.Caption for i in self.labellist])


# Auto Generated Python Code, do not modify START [UI] --------------
class Dynamic_Creation(frmTSForm):
    def __init__(self):
        # set type name internally
        self.ExternalTypeName = type(self).__name__
        try:
            # Form properties
            if not self.IsConfigurationLoaded:
                self.Left = 17
                self.Top = 172
                self.Caption = 'Dynamic_Creation'
                self.ClientHeight = 827
                self.ClientWidth = 1532
            self.Color = clBtnFace
            self.DoubleBuffered = True
            self.Font.Charset = DEFAULT_CHARSET
            self.Font.Color = clWindowText
            self.Font.Height = -12
            self.Font.Name = 'Segoe UI'
            self.Font.Style = []
            self.KeyPreview = True
            self.Position = "poDesigned"
            self.Visible = True
            self.TextHeight = 15
            # Create control: Splitter1 = Splitter(self)
            self.Splitter1 = Splitter(self)
            self.Splitter1.Name = "Splitter1"
            self.Splitter1.Parent = self
            self.Splitter1.Left = 168
            self.Splitter1.Top = 0
            self.Splitter1.Cursor = crArrow
            # Create control: ListBox1 = ListBox(self)
            self.ListBox1 = ListBox(self)
            self.ListBox1.Name = "ListBox1"
            self.ListBox1.Parent = self
            self.ListBox1.Left = 0
            self.ListBox1.Top = 0
            self.ListBox1.Width = 168
            self.ListBox1.Height = 827
            self.ListBox1.Cursor = crArrow
            self.ListBox1.Align = "alLeft"
            self.ListBox1.Font.Charset = DEFAULT_CHARSET
            self.ListBox1.Font.Color = clWindowText
            self.ListBox1.Font.Height = -16
            self.ListBox1.Font.Name = 'Segoe UI'
            self.ListBox1.Font.Style = []
            self.ListBox1.ItemHeight = 21
            self.ListBox1.Items.Assign(['button_image','label array'])
            self.ListBox1.ParentFont = False
            self.ListBox1.TabOrder = 0
            # Create control: PageControl1 = PageControl(self)
            self.PageControl1 = PageControl(self)
            self.PageControl1.Name = "PageControl1"
            self.PageControl1.Parent = self
            self.PageControl1.Left = 171
            self.PageControl1.Top = 0
            self.PageControl1.Width = 1361
            self.PageControl1.Height = 827
            self.PageControl1.Cursor = crArrow
            self.PageControl1.Align = "alClient"
            self.PageControl1.Images = app.get_system_imagelist_16px()
            self.PageControl1.TabOrder = 1
            # Create control: TabSheet1 = TabSheet(self)
            self.TabSheet1 = TabSheet(self)
            self.TabSheet1.Name = "TabSheet1"
            self.TabSheet1.PageControl = self.PageControl1
            self.TabSheet1.Cursor = crArrow
            self.TabSheet1.Caption = 'Sheet 1'
            self.TabSheet1.TabVisible = False
            # Create control: TabSheet2 = TabSheet(self)
            self.TabSheet2 = TabSheet(self)
            self.TabSheet2.Name = "TabSheet2"
            self.TabSheet2.PageControl = self.PageControl1
            self.TabSheet2.Cursor = crArrow
            self.TabSheet2.Caption = 'Sheet 2'
            self.TabSheet2.TabVisible = False
            # Create control: Label1 = Label(self)
            self.Label1 = Label(self)
            self.Label1.Name = "Label1"
            self.Label1.Parent = self.TabSheet2
            self.Label1.Left = 56
            self.Label1.Top = 112
            self.Label1.Width = 91
            self.Label1.Height = 15
            self.Label1.Cursor = crArrow
            self.Label1.Caption = "动态生成示例："
        finally:
            # End UI auto creation
            self.EndUIAutoCreation()
# Auto Generated Python Code, do not modify END [UI] ----------------
        # your init code starts here...
        self.PageControl1.ActivePageIndex = 0
        self.gennerateallbutton()
        AutoGLable(self.TabSheet2,firstLeft=self.Label1.Left+self.Label1.Width+1,firtTop=self.Label1.Top-self.Label1.Height/2,Name="L")
        self.ListBox1.OnClick = self.ListBox1Single

    def ListBox1Single(self,sender):
        if sender.ItemIndex == 0:
            self.PageControl1.ActivePageIndex = 0
        elif sender.ItemIndex == 1:
            self.PageControl1.ActivePageIndex = 1
        else:
            pass

    def gennerateallbutton(self):
        Buttonlist = ['']*520
        for i in range(520): #
            Buttonlist[i] =Button(self)
            Buttonlist[i].Parent = self.TabSheet1
            Buttonlist[i].Left = int(i/30)*80
            Buttonlist[i].Top = 25*(i%30)
            Buttonlist[i].Width = 77
            Buttonlist[i].Height = 25
            Buttonlist[i].Cursor = crArrow
            Buttonlist[i].Caption = f'Button{i}'
            Buttonlist[i].ImageIndex = i
            Buttonlist[i].Images = app.get_system_imagelist_16px()
        
# Auto Generated Python Code, do not modify START [MAIN] ------------
if __name__ == "__main__":
    try:
        Dynamic_Creation().Show()
        Application.Run()
    except SystemExit:
        pass
# Auto Generated Python Code, do not modify END [MAIN] --------------
