lhs_lib/GUI/lhs_dialog.pbi

170 lines
No EOL
5.5 KiB
Text

;************************************************
;*
;* Advanced Dialog V0.1
;*
;* (c) 2019 by René Linder
;* (c) 2019 by Linder Hard- und Software
;*
;* Lizenz: LGPL V2.1
DeclareModule lhs_lib_adv_diag
Enumeration Dialogtypes
#lhs_adv_dialog_text
#lhs_adv_dialog_string
#lhs_adv_dialog_edit
EndEnumeration
Declare dialog() ;Dialog darstellen und abwarten
Declare init(Titel.s)
Declare add(Descrition.s, UID.s, Type.i, Lines.i, Content.s="") ;Element zum Dialog hinzufügen
Declare reset() ;dialog Liste leeren.
Declare.s get_explizit(UID.s) ;Respronse exlpizit zurückgeben
Declare get_init() ;get() Initilaiseren beim ersten element
Declare.s get() ;gibt das Aktuelle element zurück
EndDeclareModule
Module lhs_lib_adv_diag
Structure lhs_adv_dialog
Lines.i
Id.i
Text_Id.i
UID.s
Description.s
Type.i
Response.s
EndStructure
Global NewList lhs_adv_diag_content.lhs_adv_dialog()
Global Current_Element, Total_Elements
Procedure reset()
ClearList(lhs_adv_diag_content())
EndProcedure
Procedure add(Descrition.s, UID.s, Type.i, Lines.i, Content.s="")
AddElement(lhs_adv_diag_content())
lhs_adv_diag_content()\Description = Descrition
lhs_adv_diag_content()\UID = UID
lhs_adv_diag_content()\Type= Type
lhs_adv_diag_content()\Lines = Lines
lhs_adv_diag_content()\Response = Content
EndProcedure
Procedure init(Titel.s)
reset()
AddElement(lhs_adv_diag_content())
lhs_adv_diag_content()\Description = Titel
Total_Elements = 0
Current_Element = 0
EndProcedure
Procedure dialog()
Define Dialog, Dialog_Height, Event, PosY, Lines_curr, Current, Button_Ok, Button_Cancel
ResetList(lhs_adv_diag_content())
NextElement(lhs_adv_diag_content())
Current_Element = 0
PosY = 0
Lines_curr = 0
Height = 0
Dialog_Height = 50
Dialog = OpenWindow(#PB_Any, 0,0, 400, Dialog_Height, lhs_adv_diag_content()\Description, #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
While NextElement(lhs_adv_diag_content())
Current_Element + 1
If lhs_adv_diag_content()\Lines = 1
Lines_curr + 1
PoSY = (Lines_curr * 50) - 45
Height = 40
Dialog_Height + 50
Else
Lines_curr + lhs_adv_diag_content()\Lines
Height = (lhs_adv_diag_content()\Lines * 50)
Dialog_Height + Height
Height - 15
PosY = (Lines_curr * 50) - Height
EndIf
ResizeWindow(Dialog, #PB_Ignore, #PB_Ignore, #PB_Ignore, Dialog_Height)
WindowBounds(Dialog, 400, Dialog_Height, 400, Dialog_Height)
Select lhs_adv_diag_content()\Type
Case #lhs_adv_dialog_text
lhs_adv_diag_content()\Id = TextGadget(#PB_Any, 5, PoSY , 390, Height, lhs_adv_diag_content()\Description)
Case #lhs_adv_dialog_string
lhs_adv_diag_content()\Text_Id = TextGadget(#PB_Any, 5, PoSY , 90, Height, lhs_adv_diag_content()\Description)
lhs_adv_diag_content()\Id = StringGadget(#PB_Any, 100, PoSY , 290, Height, lhs_adv_diag_content()\Response)
Case #lhs_adv_dialog_edit
lhs_adv_diag_content()\Text_Id = TextGadget(#PB_Any, 5, PoSY , 90, Height, lhs_adv_diag_content()\Description)
lhs_adv_diag_content()\Id = EditorGadget(#PB_Any, 100, PoSY , 290, Height)
SetGadgetText(lhs_adv_diag_content()\Id, lhs_adv_diag_content()\Response)
Default
;Reines Text Element
EndSelect
Wend
; Ok und Cancel Button
PosY + Height + 10
Button_Ok = ButtonGadget(#PB_Any, 5, PosY, 190, 40, "Ok")
Button_Cancel = ButtonGadget(#PB_Any, 205, PosY, 190, 40, "Cancel")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
Quit=1
Case #PB_Event_Gadget
Select EventGadget()
Case Button_Cancel
CloseWindow(dialog)
ProcedureReturn #False
Case Button_Ok
ResetList(lhs_adv_diag_content())
NextElement(lhs_adv_diag_content())
While NextElement(lhs_adv_diag_content())
lhs_adv_diag_content()\Response = GetGadgetText(lhs_adv_diag_content()\Id)
Wend
CloseWindow(dialog)
ProcedureReturn #True
EndSelect
EndSelect
Until Quit=1
EndProcedure
Procedure.s get_explizit(UID.s)
ResetList(lhs_adv_diag_content())
While NextElement(lhs_adv_diag_content())
If lhs_adv_diag_content()\UID = UID
ProcedureReturn lhs_adv_diag_content()\Response
EndIf
Wend
ProcedureReturn UID
EndProcedure
Procedure get_init()
Current_Element = 1
EndProcedure
Procedure.s get()
EndProcedure
EndModule
; lhs_lib_adv_diag::init("Test Dialog")
; lhs_lib_adv_diag::add("Test", "test", lhs_lib_adv_diag::#lhs_adv_dialog_edit, 2)
; lhs_lib_adv_diag::add("Test2", "test2", lhs_lib_adv_diag::#lhs_adv_dialog_string, 1)
; lhs_lib_adv_diag::add("Test3", "test3", lhs_lib_adv_diag::#lhs_adv_dialog_edit, 1)
; lhs_lib_adv_diag::add("Test4", "test4", lhs_lib_adv_diag::#lhs_adv_dialog_string, 1)
; If lhs_lib_adv_diag::dialog()
; MessageRequester("Info", "Ok")
; Else
; MessageRequester("Info", "Cancel")
; EndIf
; MessageRequester("Test", lhs_lib_adv_diag::get_explizit("test"))