Easy Tabber ist eine Funnktionssammlung, um sich das arbeiten mit Tabbern zu erleichtern.
Funktionen:
Zitat:ETab = ET_Add( Tabber ) - Erstellt einen neuen ETabber Eintrag.
Suc = ET_AddGadget( ETab, Gadget, TabID ) - Fügt ein neues Gadget zu [ETab] hinzu.
Suc = ET_Remove( Tabber ) - Entfernt alle ETabs die [Tabber] benutzen.
Suc = ET_RemoveGadget( ETab, Gadget ) - Entfernt alle einträge in [ETab] die das Gadget [Gadget] betreffen.
ET_UpdateTabber( Optimize ) - Aktualisiert die Tabber. Mit [Optimize] könnt ihr angeben, ob die Type sortiert werden soll.
ET_Sort( ) - Sortiert die Tabber-Gadget Liste.
Variablen:
Zitat:ET_FreeRemovedTabber - Wenn ETabber gelöscht werden, sollen die angehörigen Objekte gelöscht werden(Tabber, Gadgets)?
ET_FreeRemoved - Wenn Gadgets aus ETabbern entfernt werden, sollen die Gadgets gelöscht werden?
ET_LastOptimize - Letzte Sortierung der Type
ET_WaitOptimize - Wartezeit zwischen Sortierungen
Code:
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Type ET_Tabber Field hTabber Field MaxshowID End Type
Type EG_Gadget Field hGadget Field showID Field ET.ET_Tabber End Type
Type EG_Sort_Gadget Field hGadget Field showID Field ET.ET_Tabber End Type
Global ET_FreeRemovedTabber = True Global ET_FreeRemoved = True Global ET_LastOptimize = MilliSecs() Global ET_WaitOptimize = 5*1000
Function ET_Add(hTabber) If hTabber <> 0 ET.ET_Tabber = New ET_Tabber ET\hTabber = hTabber Return Handle(ET.ET_Tabber) EndIf Return False End Function
Function ET_AddGadget(ETI, hGadget, showID) Local ET.ET_Tabber = Object.ET_Tabber(ETI) If ET <> Null And hGadget <> 0 If showID > ET\MaxshowID Then ET\MaxshowID = showID EG.EG_Gadget = New EG_Gadget EG\hGadget = hGadget EG\showID = showID EG\ET = ET Return True EndIf ET_UpdateTabber() Return False End Function
Function ET_Remove(hTabber) Local ET.ET_Tabber, EG.EG_Gadget For EG = Each EG_Gadget If EG\ET\hTabber = hTabber If ET_FreeRemovedTabber = True Then FreeGadget EG\hGadget Delete EG.EG_Gadget EndIf Next For ET = Each ET_Tabber If ET\hTabber = hTabber Delete ET.ET_Tabber EndIf Next If ET_FreeRemovedTabber = True Then FreeGadget hTabber End Function
Function ET_RemoveGadget(ETI, hGadget) Local ET.ET_Tabber = Object.ET_Tabber(ETI),EG.EG_Gadget = Null,ET_GG_Count = 0 For EG = Each EG_Gadget If EG\ET = ET If EG\hGadget = hGadget If ET_FreeRemoved = True Then FreeGadget EG\hGadget Delete EG ET_GG_Count = ET_GG_Count + 1 EndIf EndIf Next Return ET_GG_Count End Function
Function ET_UpdateTabber(Optimize = False) Local ET.ET_Tabber = Null,EG.EG_Gadget = Null If Optimize = True And MilliSecs()-ET_LastOptimize > ET_WaitOptimize ET_Sort() EndIf For ET = Each ET_Tabber ET_Selected = SelectedGadgetItem(ET\hTabber) For EG = Each EG_Gadget If ET = EG\ET And EG\showID = ET_Selected ShowGadget EG\hGadget EnableGadget EG\hGadget ElseIf ET = EG\ET And EG\showID <> ET_Selected HideGadget EG\hGadget DisableGadget EG\hGadget EndIf Next Next End Function
Function ET_Sort() Local ET.ET_Tabber,EG.EG_Gadget,ESG.EG_Sort_Gadget For ET = Each ET_Tabber For showID = 0 To ET\MaxshowID For EG = Each EG_Gadget If EG\ET = ET And EG\showID = showID ESG = New EG_Sort_Gadget ESG\ET = EG\ET ESG\hGadget = EG\hGadget ESG\showID = EG\showID EndIf Next Next Next Delete Each EG_Gadget For ESG = Each EG_Sort_Gadget EG = New EG_Gadget EG\ET = ESG\ET EG\hGadget = ESG\hGadget EG\showID = ESG\showID Next ET_LastOptimize = MilliSecs() End Function
Beispiel:
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Type ET_Tabber Field hTabber Field MaxshowID End Type
Type EG_Gadget Field hGadget Field showID Field ET.ET_Tabber End Type
Type EG_Sort_Gadget Field hGadget Field showID Field ET.ET_Tabber End Type
Global ET_FreeRemovedTabber = True Global ET_FreeRemoved = True Global ET_LastOptimize = MilliSecs() Global ET_WaitOptimize = 5*1000
Function ET_Add(hTabber) If hTabber <> 0 ET.ET_Tabber = New ET_Tabber ET\hTabber = hTabber Return Handle(ET.ET_Tabber) EndIf Return False End Function
Function ET_AddGadget(ETI, hGadget, showID) Local ET.ET_Tabber = Object.ET_Tabber(ETI) If ET <> Null And hGadget <> 0 If showID > ET\MaxshowID Then ET\MaxshowID = showID EG.EG_Gadget = New EG_Gadget EG\hGadget = hGadget EG\showID = showID EG\ET = ET Return True EndIf ET_UpdateTabber() Return False End Function
Function ET_Remove(hTabber) Local ET.ET_Tabber, EG.EG_Gadget For EG = Each EG_Gadget If EG\ET\hTabber = hTabber If ET_FreeRemovedTabber = True Then FreeGadget EG\hGadget Delete EG.EG_Gadget EndIf Next For ET = Each ET_Tabber If ET\hTabber = hTabber Delete ET.ET_Tabber EndIf Next If ET_FreeRemovedTabber = True Then FreeGadget hTabber End Function
Function ET_RemoveGadget(ETI, hGadget) Local ET.ET_Tabber = Object.ET_Tabber(ETI),EG.EG_Gadget = Null,ET_GG_Count = 0 For EG = Each EG_Gadget If EG\ET = ET If EG\hGadget = hGadget If ET_FreeRemoved = True Then FreeGadget EG\hGadget Delete EG ET_GG_Count = ET_GG_Count + 1 EndIf EndIf Next Return ET_GG_Count End Function
Function ET_UpdateTabber(Optimize = False) Local ET.ET_Tabber = Null,EG.EG_Gadget = Null If Optimize = True And MilliSecs()-ET_LastOptimize > ET_WaitOptimize ET_Sort() EndIf For ET = Each ET_Tabber ET_Selected = SelectedGadgetItem(ET\hTabber) For EG = Each EG_Gadget If ET = EG\ET And EG\showID = ET_Selected ShowGadget EG\hGadget EnableGadget EG\hGadget ElseIf ET = EG\ET And EG\showID <> ET_Selected HideGadget EG\hGadget DisableGadget EG\hGadget EndIf Next Next End Function
Function ET_Sort() Local ET.ET_Tabber,EG.EG_Gadget,ESG.EG_Sort_Gadget For ET = Each ET_Tabber For showID = 0 To ET\MaxshowID For EG = Each EG_Gadget If EG\ET = ET And EG\showID = showID ESG = New EG_Sort_Gadget ESG\ET = EG\ET ESG\hGadget = EG\hGadget ESG\showID = EG\showID EndIf Next Next Next Delete Each EG_Gadget For ESG = Each EG_Sort_Gadget EG = New EG_Gadget EG\ET = ESG\ET EG\hGadget = ESG\hGadget EG\showID = ESG\showID Next ET_LastOptimize = MilliSecs() End Function
Win = CreateWindow("Easy Tabber Testing", 100, 100, 400,400, Desktop(), 32+1+2) Tab = CreateTabber(0,0,400,400,Win)
TabI = ET_Add(Tab)
For A = 0 To 15 AddGadgetItem(Tab, "Tab "+A) For B = 0 To 4 hBut = CreateButton("Button "+(B+A*5), B*80, A*20, 80,20,Tab) ET_AddGadget(TabI, hBut, A) Next Next
Repeat windowevent = WaitEvent() Select windowevent Case $803 End Case $401 If EventSource() = Tab ET_UpdateTabber(True) Else ET_RemoveGadget(TabI, EventSource()) EndIf End Select Forever
|