1
1
Fork 0
mirror of https://github.com/FellippeHeitor/InForm.git synced 2025-01-15 11:59:34 +00:00
InForm/UI.bas

1536 lines
69 KiB
QBasic
Raw Normal View History

2016-10-02 03:27:10 +00:00
OPTION _EXPLICIT
$RESIZE:ON
_RESIZE OFF
2016-10-02 03:27:10 +00:00
TYPE ObjectTYPE
ID AS LONG
ParentID AS LONG
Type AS INTEGER
Name AS STRING * 256
Top AS INTEGER
Left AS INTEGER
Width AS INTEGER
Height AS INTEGER
Font AS INTEGER
2016-10-02 03:27:10 +00:00
BackColor AS _UNSIGNED LONG
ForeColor AS _UNSIGNED LONG
BackStyle AS _BYTE
HasBorder AS _BYTE
Align AS _BYTE
2016-10-02 03:27:10 +00:00
BorderColor AS _UNSIGNED LONG
Value AS _FLOAT
Min AS _FLOAT
Max AS _FLOAT
InputViewStart AS LONG
Cursor AS LONG
PrevCursor AS LONG
FieldArea AS LONG
Selected AS _BYTE
SelectionStart AS LONG
2016-10-02 03:27:10 +00:00
Resizable AS _BYTE
CanDrag AS _BYTE
CanHaveFocus AS _BYTE
2016-10-02 03:27:10 +00:00
Enabled AS _BYTE
END TYPE
REDIM SHARED __UI_Captions(1 TO 100) AS STRING
REDIM SHARED __UI_Texts(1 TO 100) AS STRING
REDIM SHARED __UI_Controls(0 TO 100) AS ObjectTYPE
DIM SHARED __UI_Fonts(2) AS LONG
__UI_Fonts(0) = 16
__UI_Fonts(1) = 8
__UI_Fonts(2) = __UI_LoadFont("cyberbit.ttf", 14, "")
2016-10-02 03:27:10 +00:00
DIM SHARED __UI_MouseX AS INTEGER, __UI_MouseY AS INTEGER
DIM SHARED __UI_PrevMouseX AS INTEGER, __UI_PrevMouseY AS INTEGER
2016-10-02 03:27:10 +00:00
DIM SHARED __UI_MouseButton1 AS _BYTE, __UI_MouseButton2 AS _BYTE
DIM SHARED __UI_PrevMouseButton1 AS _BYTE, __UI_PrevMouseButton2 AS _BYTE
DIM SHARED __UI_PreviewTop AS INTEGER, __UI_PreviewLeft AS INTEGER
DIM SHARED __UI_MouseIsDown AS _BYTE, __UI_MouseDownOnID AS LONG
DIM SHARED __UI_KeyIsDown AS _BYTE, __UI_KeyDownOnID AS LONG
DIM SHARED __UI_ShiftIsDown AS _BYTE, __UI_CtrlIsDown AS _BYTE
DIM SHARED __UI_AltIsDown AS _BYTE
DIM SHARED __UI_LastMouseClick AS DOUBLE
DIM SHARED __UI_DragX AS INTEGER, __UI_DragY AS INTEGER
DIM SHARED __UI_DefaultButtonID AS LONG
2016-10-02 03:27:10 +00:00
DIM SHARED __UI_KeyHit AS LONG
DIM SHARED __UI_Focus AS LONG
DIM SHARED __UI_HoveringID AS LONG
DIM SHARED __UI_IsDragging AS _BYTE, __UI_DraggingID AS LONG
2016-10-02 03:36:31 +00:00
DIM SHARED __UI_IsSelectingText AS _BYTE, __UI_IsSelectingTextOnID AS LONG
DIM SHARED __UI_HasInput AS _BYTE
DIM SHARED __UI_UnloadSignal AS _BYTE
DIM SHARED __UI_ExitTriggered AS _BYTE
DIM SHARED __UI_Loaded AS _BYTE
DIM SHARED __UI_FirstDisplay AS _BYTE
DIM SHARED __UI_SelectedText AS STRING
2016-10-02 03:27:10 +00:00
'Object types:
CONST __UI_Type_Form = 1
CONST __UI_Type_Frame = 2
CONST __UI_Type_Button = 3
CONST __UI_Type_Label = 4
2016-10-02 03:27:10 +00:00
CONST __UI_Type_CheckBox = 5
CONST __UI_Type_RadioButton = 6
CONST __UI_Type_ComboBox = 7
CONST __UI_Type_TextBox = 8
CONST __UI_Type_MultiLineTextBox = 9
CONST __UI_Type_ListBox = 10
CONST __UI_Type_Menu = 11
CONST __UI_Type_ProgressBar = 12
CONST __UI_Type_HScrollBar = 13
CONST __UI_Type_VScrollBar = 14
'Back styles:
2016-10-02 03:27:10 +00:00
CONST __UI_Opaque = 0
CONST __UI_Transparent = -1
'Text alignment
CONST __UI_Left = 0
CONST __UI_Center = 1
CONST __UI_Right = 2
2016-10-02 03:27:10 +00:00
'Global constants
CONST __UI_True = -1
CONST __UI_False = 0
DIM NewID AS LONG, ParentID AS LONG
NewID = __UI_NewObject(__UI_Type_Form, "Form1", 0)
__UI_Controls(NewID).Width = 640
__UI_Controls(NewID).Height = 400
__UI_Controls(NewID).ForeColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).BackColor = _RGB32(235, 233, 237)
__UI_Controls(NewID).Enabled = __UI_True
2016-10-02 03:27:10 +00:00
__UI_SetCaption "Form1", "Hello, world!"
NewID = __UI_NewObject(__UI_Type_Button, "Button1", 0)
__UI_Controls(NewID).Top = 100
__UI_Controls(NewID).Left = 100
__UI_Controls(NewID).Width = 200
__UI_Controls(NewID).Height = 20
__UI_Controls(NewID).ForeColor = _RGB32(255, 255, 255)
__UI_Controls(NewID).BackColor = _RGB32(105, 177, 94)
__UI_Controls(NewID).CanHaveFocus = __UI_True
__UI_Controls(NewID).Enabled = __UI_True
2016-10-02 03:27:10 +00:00
__UI_SetCaption "Button1", "Click me"
NewID = __UI_NewObject(__UI_Type_Button, "Button2", 0)
__UI_Controls(NewID).Top = 200
__UI_Controls(NewID).Left = 100
__UI_Controls(NewID).Width = 200
__UI_Controls(NewID).Height = 20
__UI_Controls(NewID).ForeColor = _RGB32(255, 255, 255)
__UI_Controls(NewID).BackColor = _RGB32(51, 152, 219)
__UI_Controls(NewID).CanHaveFocus = __UI_True
__UI_Controls(NewID).Enabled = __UI_True
__UI_SetCaption "Button2", "Make this form resizable"
NewID = __UI_NewObject(__UI_Type_TextBox, "Textbox1", 0)
__UI_Controls(NewID).Top = 250
__UI_Controls(NewID).Left = 30
__UI_Controls(NewID).Width = 300
__UI_Controls(NewID).Height = 20
__UI_Controls(NewID).Font = 0
__UI_Controls(NewID).ForeColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).ForeColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).BackColor = __UI_Controls(__UI_GetID("Form1")).BackColor
__UI_Controls(NewID).HasBorder = __UI_True
__UI_Controls(NewID).BorderColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).CanHaveFocus = __UI_True
__UI_Controls(NewID).Enabled = __UI_True
__UI_SetCaption "Textbox1", "Edit me"
NewID = __UI_NewObject(__UI_Type_Button, "DragButton", 0)
__UI_Controls(NewID).Top = 300
__UI_Controls(NewID).Left = 100
__UI_Controls(NewID).Width = 200
__UI_Controls(NewID).Height = 20
__UI_Controls(NewID).ForeColor = _RGB32(255, 255, 255)
__UI_Controls(NewID).BackColor = _RGB32(188, 152, 116)
__UI_Controls(NewID).CanHaveFocus = __UI_True
__UI_Controls(NewID).Enabled = __UI_True
__UI_SetCaption "DragButton", "Make frame draggable"
NewID = __UI_NewObject(__UI_Type_Label, "Label1", 0)
__UI_Controls(NewID).Top = 30
__UI_Controls(NewID).Left = 10
__UI_Controls(NewID).Width = 400
__UI_Controls(NewID).Height = 20
__UI_Controls(NewID).Font = 2
__UI_Controls(NewID).ForeColor = _RGB32(238, 238, 200)
__UI_Controls(NewID).BackColor = _RGB32(33, 100, 78)
__UI_Controls(NewID).Align = __UI_Center
__UI_Controls(NewID).Enabled = __UI_True
2016-10-02 03:27:10 +00:00
__UI_SetCaption "Label1", "Waiting for you to click"
NewID = __UI_NewObject(__UI_Type_Label, "FocusLabel", 0)
__UI_Controls(NewID).Top = 55
__UI_Controls(NewID).Left = 10
__UI_Controls(NewID).Width = 400
__UI_Controls(NewID).Height = 20
__UI_Controls(NewID).ForeColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).Enabled = __UI_True
__UI_SetCaption "FocusLabel", "No object has focus now"
__UI_Controls(NewID).Font = 1
NewID = __UI_NewObject(__UI_Type_Label, "HoverLabel", 0)
__UI_Controls(NewID).Top = 75
__UI_Controls(NewID).Left = 10
__UI_Controls(NewID).Width = 400
__UI_Controls(NewID).Height = 20
__UI_Controls(NewID).ForeColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).Enabled = __UI_True
__UI_Controls(NewID).Font = 1
NewID = __UI_NewObject(__UI_Type_Label, "Label2", 0)
__UI_Controls(NewID).Top = 350
__UI_Controls(NewID).Left = 30
__UI_Controls(NewID).Width = 300
__UI_Controls(NewID).Height = 20
__UI_Controls(NewID).ForeColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).BackStyle = __UI_Transparent
__UI_Controls(NewID).HasBorder = __UI_False
__UI_Controls(NewID).BorderColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).Enabled = __UI_True
NewID = __UI_NewObject(__UI_Type_Frame, "Frame1", 0)
__UI_Controls(NewID).Top = 30
__UI_Controls(NewID).Left = 430
__UI_Controls(NewID).Width = 200
__UI_Controls(NewID).Height = 110
__UI_Controls(NewID).ForeColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).BackColor = __UI_Controls(__UI_GetID("Form1")).BackColor
__UI_Controls(NewID).HasBorder = __UI_True
__UI_Controls(NewID).BorderColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).Enabled = __UI_True
__UI_SetCaption "Frame1", "A cute container"
NewID = __UI_NewObject(__UI_Type_RadioButton, "Option1", __UI_GetID("Frame1"))
__UI_Controls(NewID).Top = 15
__UI_Controls(NewID).Left = 15
__UI_Controls(NewID).Width = 110
__UI_Controls(NewID).Height = 10
__UI_Controls(NewID).ForeColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).Enabled = __UI_True
__UI_Controls(NewID).Value = __UI_True
__UI_Controls(NewID).CanHaveFocus = __UI_True
__UI_SetCaption "Option1", "Option 1"
__UI_Controls(NewID).Font = 2
NewID = __UI_NewObject(__UI_Type_RadioButton, "Option2", __UI_GetID("Frame1"))
__UI_Controls(NewID).Top = 40
__UI_Controls(NewID).Left = 15
__UI_Controls(NewID).Width = 110
__UI_Controls(NewID).Height = 10
__UI_Controls(NewID).ForeColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).Enabled = __UI_True
__UI_Controls(NewID).CanHaveFocus = __UI_True
__UI_SetCaption "Option2", "Option 2"
__UI_Controls(NewID).Font = 2
NewID = __UI_NewObject(__UI_Type_CheckBox, "Check1", __UI_GetID("Frame1"))
__UI_Controls(NewID).Top = 65
__UI_Controls(NewID).Left = 15
__UI_Controls(NewID).Width = 110
__UI_Controls(NewID).Height = 10
__UI_Controls(NewID).ForeColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).Enabled = __UI_True
__UI_Controls(NewID).CanHaveFocus = __UI_True
__UI_SetCaption "Check1", "Checkbox 1"
__UI_Controls(NewID).Font = 2
NewID = __UI_NewObject(__UI_Type_CheckBox, "Check2", __UI_GetID("Frame1"))
__UI_Controls(NewID).Top = 90
__UI_Controls(NewID).Left = 15
__UI_Controls(NewID).Width = 110
__UI_Controls(NewID).Height = 10
__UI_Controls(NewID).ForeColor = _RGB32(0, 0, 0)
__UI_Controls(NewID).Enabled = __UI_True
__UI_Controls(NewID).Value = __UI_True
__UI_Controls(NewID).CanHaveFocus = __UI_True
__UI_SetCaption "Check2", "Checkbox 2"
__UI_Controls(NewID).Font = 2
NewID = __UI_NewObject(__UI_Type_Button, "OkButton", 0)
__UI_Controls(NewID).Top = 350
__UI_Controls(NewID).Left = 550
__UI_Controls(NewID).Width = 70
__UI_Controls(NewID).Height = 20
__UI_Controls(NewID).ForeColor = _RGB32(255, 255, 255)
__UI_Controls(NewID).BackColor = _RGB32(51, 152, 219)
__UI_Controls(NewID).CanHaveFocus = __UI_True
__UI_Controls(NewID).Enabled = __UI_True
__UI_SetCaption "OkButton", "OK"
__UI_DefaultButtonID = NewID
2016-10-02 03:27:10 +00:00
'Main loop
DO
IF __UI_Loaded = __UI_False THEN __UI_Load
__UI_ProcessInput
IF __UI_HasInput OR __UI_FirstDisplay = __UI_False OR _
__UI_Controls(__UI_Focus).Type = __UI_Type_TextBox THEN
__UI_FirstDisplay = __UI_True
__UI_EventDispatcher
__UI_UpdateDisplay
END IF
2016-10-02 03:27:10 +00:00
_LIMIT 30
LOOP
'---------------------------------------------------------------------------------
SUB __UI_Load
DIM i AS LONG
SCREEN _NEWIMAGE(__UI_Controls(__UI_GetID("Form1")).Width, __UI_Controls(__UI_GetID("Form1")).Height, 32)
DO UNTIL _SCREENEXISTS: _LIMIT 10: LOOP
FOR i = 1 TO UBOUND(__UI_Controls)
IF __UI_Controls(i).ParentID THEN
IF __UI_Controls(i).Width + __UI_Controls(i).Left > __UI_Controls(__UI_Controls(i).ParentID).Width THEN
__UI_Controls(i).Width = __UI_Controls(__UI_Controls(i).ParentID).Width - __UI_Controls(i).Left
END IF
END IF
IF __UI_Controls(i).Type = __UI_Type_TextBox THEN
__UI_Controls(i).FieldArea = __UI_Controls(i).Width \ _FONTWIDTH(__UI_Fonts(__UI_Controls(i).Font))
END IF
NEXT
__UI_Loaded = __UI_True
__UI_OnLoad
END SUB
2016-10-02 03:27:10 +00:00
'Event procedures: ---------------------------------------------------------------
'Generated at design time - code inside CASE statements to be added by programmer.
'---------------------------------------------------------------------------------
SUB __UI_Click (id AS LONG)
SELECT CASE UCASE$(RTRIM$(__UI_Controls(id).Name))
2016-10-02 03:27:10 +00:00
CASE "FORM1"
CASE "OKBUTTON"
SYSTEM
2016-10-02 03:27:10 +00:00
CASE "BUTTON1"
2016-10-02 03:29:24 +00:00
STATIC State AS _BYTE, TotalStops AS _BYTE
2016-10-02 03:27:10 +00:00
State = State + 1: IF State > 3 THEN State = 1
SELECT CASE State
CASE 1
__UI_Controls(__UI_GetID("Label1")).Enabled = __UI_True
2016-10-02 03:27:10 +00:00
__UI_Captions(__UI_GetID("Label1")) = "You clicked the button!"
CASE 2
2016-10-02 03:29:24 +00:00
__UI_Captions(__UI_GetID("Label1")) = "Aren't you the clicker? You'd better stop it"
2016-10-02 03:27:10 +00:00
CASE 3
__UI_Controls(__UI_GetID("Label1")).Enabled = __UI_False
2016-10-02 03:27:10 +00:00
__UI_Captions(__UI_GetID("Label1")) = "Stop it."
IF TotalStops < 2 THEN
2016-10-02 03:29:24 +00:00
TotalStops = TotalStops + 1
ELSE
__UI_Controls(__UI_GetID("Button1")).Enabled = __UI_False
2016-10-02 03:29:24 +00:00
__UI_Captions(__UI_GetID("Label1")) = "I told you to stop it."
END IF
2016-10-02 03:27:10 +00:00
END SELECT
CASE "BUTTON2"
__UI_Controls(__UI_GetID("Form1")).Resizable = NOT __UI_Controls(__UI_GetID("Form1")).Resizable
IF __UI_Controls(__UI_GetID("Form1")).Resizable THEN
__UI_Captions(__UI_GetID("Button2")) = "Form is resizable"
ELSE
__UI_Captions(__UI_GetID("Button2")) = "Form is not resizable"
END IF
CASE "DRAGBUTTON"
__UI_Controls(__UI_GetID("frame1")).CanDrag = NOT __UI_Controls(__UI_GetID("frame1")).CanDrag
IF __UI_Controls(__UI_GetID("frame1")).CanDrag THEN
__UI_Captions(__UI_GetID("DragButton")) = "Frame is draggable"
2016-10-02 03:27:10 +00:00
ELSE
__UI_Captions(__UI_GetID("DragButton")) = "Frame is not draggable"
2016-10-02 03:27:10 +00:00
END IF
CASE "LABEL1"
__UI_Captions(__UI_GetID("Label1")) = "I'm not a button..."
END SELECT
END SUB
SUB __UI_MouseEnter (id AS LONG)
SELECT CASE UCASE$(RTRIM$(__UI_Controls(id).Name))
2016-10-02 03:27:10 +00:00
CASE "FORM1"
CASE "BUTTON1"
CASE "LABEL1"
IF __UI_Controls(__UI_GetID("Label1")).Enabled THEN
__UI_Controls(__UI_GetID("Label1")).BackColor = _RGB32(127, 172, 127)
2016-10-02 03:29:24 +00:00
END IF
2016-10-02 03:27:10 +00:00
END SELECT
END SUB
SUB __UI_MouseLeave (id AS LONG)
SELECT CASE UCASE$(RTRIM$(__UI_Controls(id).Name))
2016-10-02 03:27:10 +00:00
CASE "FORM1"
CASE "BUTTON1"
CASE "LABEL1"
IF __UI_Controls(__UI_GetID("Label1")).Enabled THEN
__UI_Controls(__UI_GetID("Label1")).BackColor = _RGB32(33, 100, 78)
2016-10-02 03:29:24 +00:00
END IF
2016-10-02 03:27:10 +00:00
END SELECT
END SUB
SUB __UI_FocusIn (id AS LONG)
SELECT CASE UCASE$(RTRIM$(__UI_Controls(id).Name))
2016-10-02 03:27:10 +00:00
CASE "FORM1"
CASE "BUTTON1"
CASE "LABEL1"
END SELECT
END SUB
SUB __UI_FocusOut (id AS LONG)
SELECT CASE UCASE$(RTRIM$(__UI_Controls(id).Name))
2016-10-02 03:27:10 +00:00
CASE "FORM1"
CASE "BUTTON1"
CASE "LABEL1"
END SELECT
END SUB
SUB __UI_MouseDown (id AS LONG)
SELECT CASE UCASE$(RTRIM$(__UI_Controls(id).Name))
2016-10-02 03:27:10 +00:00
CASE "FORM1"
CASE "BUTTON1"
CASE "LABEL1"
END SELECT
END SUB
SUB __UI_MouseUp (id AS LONG)
SELECT CASE UCASE$(RTRIM$(__UI_Controls(id).Name))
CASE "FORM1"
CASE "BUTTON1"
CASE "LABEL1"
END SELECT
END SUB
SUB __UI_BeforeUpdateDisplay
STATIC Iterations AS LONG
Iterations = Iterations + 1
IF __UI_Focus THEN
__UI_SetCaption "FocusLabel", "Focus is on " + RTRIM$(__UI_Controls(__UI_Focus).Name)
2016-10-02 03:36:31 +00:00
IF LEN(__UI_SelectedText) THEN
__UI_SetCaption "FocusLabel", "Selected text: " + __UI_SelectedText
END IF
END IF
IF __UI_HoveringID THEN
__UI_SetCaption "HoverLabel", "Hovering " + RTRIM$(__UI_Controls(__UI_HoveringID).Name)
END IF
IF __UI_IsDragging = __UI_False THEN
2016-10-02 03:36:31 +00:00
IF __UI_Controls(__UI_Focus).Type = __UI_Type_TextBox THEN
IF __UI_IsSelectingText THEN
__UI_SetCaption "Label2", "Sel.Start=" + STR$(__UI_Controls(__UI_IsSelectingTextOnID).SelectionStart) + " Cursor=" + STR$(__UI_Controls(__UI_Focus).Cursor)
__UI_SetCaption "HoverLabel", "Selected?" + STR$(__UI_Controls(__UI_IsSelectingTextOnID).Selected)
ELSE
__UI_SetCaption "Label2", "Editing text on " + RTRIM$(__UI_Controls(__UI_Focus).Name)
END IF
ELSE
__UI_SetCaption "Label2", "Screen repainted" + STR$(Iterations) + " times."
END IF
ELSE
__UI_SetCaption "Label2", "Dragging..." + STR$(__UI_PreviewLeft) + "," + STR$(__UI_PreviewTop)
END IF
END SUB
SUB __UI_BeforeUnload
'STATIC it
'it = it + 1
'IF it < 3 THEN __UI_UnloadSignal = __UI_False
END SUB
SUB __UI_OnLoad
END SUB
SUB __UI_BeginDrag (id AS LONG)
SELECT CASE UCASE$(RTRIM$(__UI_Controls(id).Name))
2016-10-02 03:27:10 +00:00
CASE "FORM1"
CASE "BUTTON1"
CASE "LABEL1"
CASE "LABEL2"
END SELECT
END SUB
SUB __UI_EndDrag (id AS LONG)
SELECT CASE UCASE$(RTRIM$(__UI_Controls(id).Name))
CASE "FORM1"
CASE "BUTTON1"
CASE "LABEL1"
CASE "LABEL2"
2016-10-02 03:27:10 +00:00
END SELECT
END SUB
'---------------------------------------------------------------------------------
'Internal procedures: ------------------------------------------------------------
'---------------------------------------------------------------------------------
SUB __UI_ProcessInput
2016-10-02 03:29:24 +00:00
DIM OldScreen&, OldFont&
2016-10-02 03:27:10 +00:00
STATIC __UI_CurrentTitle AS STRING
2016-10-02 03:29:24 +00:00
STATIC __UI_CurrentResizeStatus AS _BYTE
2016-10-02 03:27:10 +00:00
__UI_HasInput = __UI_False
__UI_ExitTriggered = _EXIT
IF __UI_ExitTriggered AND 1 THEN __UI_ExitTriggered = __UI_True: __UI_HasInput = __UI_True
'Mouse input:
WHILE _MOUSEINPUT
WEND
__UI_MouseX = _MOUSEX
__UI_MouseY = _MOUSEY
__UI_MouseButton1 = _MOUSEBUTTON(1)
__UI_MouseButton2 = _MOUSEBUTTON(2)
IF __UI_PrevMouseX <> __UI_MouseX THEN _
__UI_HasInput = __UI_True: __UI_PrevMouseX = __UI_MouseX
IF __UI_PrevMouseY <> __UI_MouseY THEN _
__UI_HasInput = __UI_True: __UI_PrevMouseY = __UI_MouseY
IF __UI_PrevMouseButton1 <> __UI_MouseButton1 THEN _
__UI_HasInput = __UI_True: __UI_PrevMouseButton1 = __UI_MouseButton1
IF __UI_PrevMouseButton2 <> __UI_MouseButton2 THEN _
__UI_HasInput = __UI_True: __UI_PrevMouseButton2 = __UI_MouseButton2
'Keyboard input:
__UI_KeyHit = _KEYHIT
IF __UI_KeyHit THEN __UI_HasInput = __UI_True
'Resize event:
'1- Triggered programatically:
IF __UI_Controls(__UI_GetID("Form1")).Resizable <> __UI_CurrentResizeStatus THEN
__UI_CurrentResizeStatus = __UI_Controls(__UI_GetID("Form1")).Resizable
2016-10-02 03:29:24 +00:00
IF __UI_CurrentResizeStatus THEN
_RESIZE ON
ELSE
_RESIZE OFF
END IF
END IF
'2- Triggered by manually resizing:
IF _RESIZE AND __UI_Controls(__UI_GetID("Form1")).Resizable THEN
__UI_Controls(__UI_GetID("Form1")).Width = _RESIZEWIDTH
__UI_Controls(__UI_GetID("Form1")).Height = _RESIZEHEIGHT
OldScreen& = _DEST
OldFont& = _FONT
SCREEN _NEWIMAGE(__UI_Controls(__UI_GetID("Form1")).Width, __UI_Controls(__UI_GetID("Form1")).Height, 32)
IF LEN(__UI_CurrentTitle) THEN _TITLE __UI_CurrentTitle
_FONT OldFont&
_FREEIMAGE OldScreen&
__UI_HasInput = __UI_True
END IF
'Update main window title if needed
IF __UI_CurrentTitle <> __UI_Captions(__UI_GetID("Form1")) THEN
2016-10-02 03:27:10 +00:00
__UI_CurrentTitle = __UI_Captions(__UI_GetID("Form1"))
_TITLE __UI_CurrentTitle
__UI_HasInput = __UI_True
2016-10-02 03:27:10 +00:00
END IF
END SUB
'---------------------------------------------------------------------------------
SUB __UI_UpdateDisplay
DIM i AS LONG, TempCaption$, TempColor~&
DIM CaptionIndent AS INTEGER
DIM ContainerOffsetLeft AS INTEGER, ContainerOffsetTop AS INTEGER
__UI_BeforeUpdateDisplay
2016-10-02 03:27:10 +00:00
'Main window:
COLOR __UI_Controls(__UI_GetID("Form1")).ForeColor, __UI_Controls(__UI_GetID("Form1")).BackColor
2016-10-02 03:27:10 +00:00
CLS
IF __UI_IsDragging AND NOT (_KEYDOWN(100305) OR _KEYDOWN(100306)) THEN
'Draw the alignment grid
DIM GridX AS INTEGER, GridY AS INTEGER
FOR GridX = 0 TO __UI_Controls(__UI_GetID("Form1")).Width STEP 10
FOR GridY = 0 TO __UI_Controls(__UI_GetID("Form1")).Height STEP 10
PSET (GridX, GridY), __UI_Controls(__UI_GetID("Form1")).ForeColor
NEXT
NEXT
LINE (__UI_PreviewLeft, __UI_PreviewTop)-STEP(__UI_Controls(__UI_DraggingID).Width - 1, __UI_Controls(__UI_DraggingID).Height - 1), __UI_Darken(__UI_Controls(__UI_GetID("Form1")).BackColor, 80), B
END IF
'Hover detection
FOR i = 1 TO UBOUND(__UI_Controls)
IF __UI_Controls(i).ID THEN
IF __UI_Controls(i).ParentID THEN
ContainerOffsetTop = __UI_Controls(__UI_Controls(i).ParentID).Top
ContainerOffsetLeft = __UI_Controls(__UI_Controls(i).ParentID).Left
ELSE
ContainerOffsetTop = 0
ContainerOffsetLeft = 0
END IF
IF __UI_MouseX >= ContainerOffsetLeft + __UI_Controls(i).Left AND _
__UI_MouseX <= ContainerOffsetLeft + __UI_Controls(i).Left + __UI_Controls(i).Width - 1 AND _
__UI_MouseY >= ContainerOffsetTop + __UI_Controls(i).Top AND _
__UI_MouseY <= ContainerOffsetTop + __UI_Controls(i).Top + __UI_Controls(i).Height - 1 THEN
2016-10-02 03:27:10 +00:00
__UI_HoveringID = i
END IF
END IF
NEXT
FOR i = 1 TO UBOUND(__UI_Controls)
IF __UI_Controls(i).ID THEN
2016-10-02 03:36:31 +00:00
_FONT __UI_Fonts(__UI_Controls(i).Font)
2016-10-02 03:27:10 +00:00
TempCaption$ = __UI_Captions(i)
DO WHILE _PRINTWIDTH(TempCaption$) > __UI_Controls(i).Width
2016-10-02 03:27:10 +00:00
TempCaption$ = MID$(TempCaption$, 1, LEN(TempCaption$) - 1)
LOOP
IF __UI_Controls(i).ParentID THEN
ContainerOffsetTop = __UI_Controls(__UI_Controls(i).ParentID).Top
ContainerOffsetLeft = __UI_Controls(__UI_Controls(i).ParentID).Left
2016-10-02 03:27:10 +00:00
ELSE
ContainerOffsetTop = 0
ContainerOffsetLeft = 0
2016-10-02 03:27:10 +00:00
END IF
SELECT CASE __UI_Controls(i).Type
2016-10-02 03:27:10 +00:00
CASE __UI_Type_Button
IF ((__UI_MouseIsDown AND i = __UI_MouseDownOnID) OR _
(__UI_KeyIsDown AND i = __UI_KeyDownOnID)) AND _
__UI_Controls(i).Enabled THEN
TempColor~& = __UI_Darken(__UI_Controls(i).BackColor, 70)
ELSEIF i = __UI_HoveringID AND __UI_Controls(i).Enabled THEN
TempColor~& = __UI_Darken(__UI_Controls(i).BackColor, 90)
ELSEIF __UI_Controls(i).Enabled = __UI_False THEN
TempColor~& = _RGB32(208, 213, 216)
ELSE
TempColor~& = __UI_Controls(i).BackColor
END IF
IF ((__UI_HoveringID = i OR __UI_Focus = i) AND _
__UI_Controls(i).Enabled AND __UI_MouseDownOnID <> i AND _
__UI_KeyDownOnID <> i) OR _
(__UI_DefaultButtonID = i AND __UI_Controls(__UI_Focus).Type <> __UI_Type_Button) THEN
__UI_DrawRectangle __UI_Controls(i).Left + 2, __UI_Controls(i).Top + 2, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BorderColor, __UI_Darken(__UI_Controls(__UI_GetID("Form1")).BackColor, 50), __UI_True
END IF
2016-10-02 03:27:10 +00:00
__UI_DrawRectangle ContainerOffsetLeft + __UI_Controls(i).Left, ContainerOffsetTop + __UI_Controls(i).Top, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BorderColor, TempColor~&, __UI_True
2016-10-02 03:27:10 +00:00
IF __UI_Controls(i).Enabled THEN
COLOR __UI_Controls(i).ForeColor, TempColor~&
2016-10-02 03:29:24 +00:00
ELSE
COLOR __UI_Darken(__UI_Controls(__UI_GetID("Form1")).BackColor, 80), TempColor~&
2016-10-02 03:29:24 +00:00
END IF
2016-10-02 03:27:10 +00:00
_PRINTMODE _FILLBACKGROUND
_PRINTSTRING (ContainerOffsetLeft + __UI_Controls(i).Left + (__UI_Controls(i).Width \ 2 - _PRINTWIDTH(TempCaption$) \ 2), ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2)), TempCaption$
2016-10-02 03:27:10 +00:00
CASE __UI_Type_Label
IF __UI_Controls(i).BackStyle = __UI_Opaque THEN
_PRINTMODE _FILLBACKGROUND
ELSE
2016-10-02 03:27:10 +00:00
_PRINTMODE _KEEPBACKGROUND
END IF
CaptionIndent = 0
IF __UI_Controls(i).BackStyle = __UI_Opaque THEN
__UI_DrawRectangle ContainerOffsetLeft + __UI_Controls(i).Left, ContainerOffsetTop + __UI_Controls(i).Top, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BackColor, __UI_Controls(i).BackColor, __UI_True
END IF
IF __UI_Controls(i).HasBorder = __UI_True THEN
CaptionIndent = 5
__UI_DrawRectangle ContainerOffsetLeft + __UI_Controls(i).Left, ContainerOffsetTop + __UI_Controls(i).Top, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BorderColor, TempColor~&, __UI_False
END IF
IF __UI_Controls(i).Enabled THEN
COLOR __UI_Controls(i).ForeColor, __UI_Controls(i).BackColor
2016-10-02 03:27:10 +00:00
ELSE
COLOR __UI_Darken(__UI_Controls(__UI_GetID("Form1")).BackColor, 80), __UI_Controls(i).BackColor
END IF
SELECT CASE __UI_Controls(i).Align
CASE __UI_Left
_PRINTSTRING (ContainerOffsetLeft + __UI_Controls(i).Left + CaptionIndent, ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2)), TempCaption$
CASE __UI_Center
_PRINTSTRING (ContainerOffsetLeft + __UI_Controls(i).Left + (__UI_Controls(i).Width \ 2 - _PRINTWIDTH(TempCaption$) \ 2), ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2)), TempCaption$
CASE __UI_Right
_PRINTSTRING (ContainerOffsetLeft + __UI_Controls(i).Left + (__UI_Controls(i).Width - _PRINTWIDTH(TempCaption$)) - CaptionIndent, ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2)), TempCaption$
END SELECT
CASE __UI_Type_Frame
IF __UI_Controls(i).BackStyle = __UI_Opaque THEN
2016-10-02 03:27:10 +00:00
_PRINTMODE _FILLBACKGROUND
ELSE
_PRINTMODE _KEEPBACKGROUND
END IF
IF __UI_Controls(i).BackStyle = __UI_Opaque THEN
__UI_DrawRectangle __UI_Controls(i).Left, __UI_Controls(i).Top, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BackColor, __UI_Controls(i).BackColor, __UI_True
END IF
CaptionIndent = 0
IF __UI_Controls(i).HasBorder = __UI_True THEN
CaptionIndent = 5
__UI_DrawRectangle __UI_Controls(i).Left, __UI_Controls(i).Top, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BorderColor, TempColor~&, __UI_False
END IF
IF __UI_Controls(i).Enabled THEN
COLOR __UI_Controls(i).ForeColor, __UI_Controls(i).BackColor
ELSE
COLOR __UI_Darken(__UI_Controls(__UI_GetID("Form1")).BackColor, 80), __UI_Controls(i).BackColor
END IF
SELECT CASE __UI_Controls(i).Align
CASE __UI_Left
_PRINTSTRING (__UI_Controls(i).Left + CaptionIndent, __UI_Controls(i).Top - _FONTHEIGHT \ 2), TempCaption$
CASE __UI_Center
_PRINTSTRING (__UI_Controls(i).Left + (__UI_Controls(i).Width \ 2 - _PRINTWIDTH(TempCaption$) \ 2), __UI_Controls(i).Top - _FONTHEIGHT \ 2), TempCaption$
CASE __UI_Right
_PRINTSTRING (__UI_Controls(i).Left + (__UI_Controls(i).Width - _PRINTWIDTH(TempCaption$)) - CaptionIndent, __UI_Controls(i).Top - _FONTHEIGHT \ 2), TempCaption$
END SELECT
CASE __UI_Type_RadioButton
IF __UI_Controls(i).BackStyle = __UI_Opaque THEN
_PRINTMODE _FILLBACKGROUND
ELSE
_PRINTMODE _KEEPBACKGROUND
END IF
DIM CircleDiameter AS INTEGER
__UI_DrawRadioButton __UI_Controls(i).Value, _
ContainerOffsetLeft + __UI_Controls(i).Left, _
ContainerOffsetTop + __UI_Controls(i).Top + __UI_Controls(i).Height \ 2, _
CircleDiameter
CaptionIndent = 0
IF __UI_Controls(i).BackStyle = __UI_Opaque THEN
__UI_DrawRectangle ContainerOffsetLeft + __UI_Controls(i).Left, ContainerOffsetTop + __UI_Controls(i).Top, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BackColor, __UI_Controls(i).BackColor, __UI_True
2016-10-02 03:27:10 +00:00
END IF
IF __UI_Controls(i).HasBorder = __UI_True THEN
CaptionIndent = 5
__UI_DrawRectangle ContainerOffsetLeft + __UI_Controls(i).Left, ContainerOffsetTop + __UI_Controls(i).Top, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BorderColor, TempColor~&, __UI_False
2016-10-02 03:27:10 +00:00
END IF
CaptionIndent = CaptionIndent + CircleDiameter
IF __UI_Controls(i).Enabled THEN
COLOR __UI_Controls(i).ForeColor, __UI_Controls(i).BackColor
ELSE
COLOR __UI_Darken(__UI_Controls(__UI_GetID("Form1")).BackColor, 80), __UI_Controls(i).BackColor
END IF
_PRINTSTRING (ContainerOffsetLeft + __UI_Controls(i).Left + CaptionIndent, ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2)), TempCaption$
IF __UI_Focus = i THEN
LINE (ContainerOffsetLeft + __UI_Controls(i).Left + CaptionIndent - 2, ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2) - 2)-STEP(_PRINTWIDTH(TempCaption$) + 4, _FONTHEIGHT + 4), __UI_Darken(__UI_Controls(i).BackColor, 70), B , 63
END IF
CASE __UI_Type_CheckBox
IF __UI_Controls(i).BackStyle = __UI_Opaque THEN
_PRINTMODE _FILLBACKGROUND
ELSE
_PRINTMODE _KEEPBACKGROUND
END IF
DIM CheckBoxSize AS INTEGER
__UI_DrawCheckBox __UI_Controls(i).Value, _
ContainerOffsetLeft + __UI_Controls(i).Left, _
ContainerOffsetTop + __UI_Controls(i).Top + __UI_Controls(i).Height \ 3, _
CheckBoxSize
CaptionIndent = 0
IF __UI_Controls(i).BackStyle = __UI_Opaque THEN
__UI_DrawRectangle ContainerOffsetLeft + __UI_Controls(i).Left, ContainerOffsetTop + __UI_Controls(i).Top, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BackColor, __UI_Controls(i).BackColor, __UI_True
END IF
IF __UI_Controls(i).HasBorder = __UI_True THEN
CaptionIndent = 5
__UI_DrawRectangle ContainerOffsetLeft + __UI_Controls(i).Left, ContainerOffsetTop + __UI_Controls(i).Top, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BorderColor, TempColor~&, __UI_False
END IF
CaptionIndent = CaptionIndent + CheckBoxSize
IF __UI_Controls(i).Enabled THEN
COLOR __UI_Controls(i).ForeColor, __UI_Controls(i).BackColor
2016-10-02 03:29:24 +00:00
ELSE
COLOR __UI_Darken(__UI_Controls(__UI_GetID("Form1")).BackColor, 80), __UI_Controls(i).BackColor
2016-10-02 03:29:24 +00:00
END IF
_PRINTSTRING (ContainerOffsetLeft + __UI_Controls(i).Left + CaptionIndent, ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2)), TempCaption$
IF __UI_Focus = i THEN
LINE (ContainerOffsetLeft + __UI_Controls(i).Left + CaptionIndent - 2, ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2) - 2)-STEP(_PRINTWIDTH(TempCaption$) + 4, _FONTHEIGHT + 4), __UI_Darken(__UI_Controls(i).BackColor, 70), B , 63
END IF
CASE __UI_Type_TextBox
IF __UI_Controls(i).InputViewStart = 0 THEN __UI_Controls(i).InputViewStart = 1
IF __UI_Controls(i).BackStyle = __UI_Opaque THEN
_PRINTMODE _FILLBACKGROUND
ELSE
_PRINTMODE _KEEPBACKGROUND
END IF
IF (__UI_HoveringID = i OR __UI_Focus = i) AND _
__UI_Controls(i).Enabled THEN
__UI_DrawRectangle ContainerOffsetLeft + __UI_Controls(i).Left + 2, ContainerOffsetTop + __UI_Controls(i).Top + 2, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BorderColor, __UI_Darken(__UI_Controls(__UI_GetID("Form1")).BackColor, 50), __UI_True
END IF
CaptionIndent = 0
IF __UI_Controls(i).BackStyle = __UI_Opaque THEN
__UI_DrawRectangle ContainerOffsetLeft + __UI_Controls(i).Left, ContainerOffsetTop + __UI_Controls(i).Top, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BackColor, __UI_Controls(i).BackColor, __UI_True
END IF
IF __UI_Controls(i).HasBorder = __UI_True THEN
CaptionIndent = 5
__UI_DrawRectangle ContainerOffsetLeft + __UI_Controls(i).Left, ContainerOffsetTop + __UI_Controls(i).Top, __UI_Controls(i).Width, __UI_Controls(i).Height, __UI_Controls(i).BorderColor, TempColor~&, __UI_False
END IF
IF __UI_Controls(i).Enabled AND LEN(__UI_Texts(i)) THEN
COLOR __UI_Controls(i).ForeColor, __UI_Controls(i).BackColor
ELSE
COLOR __UI_Darken(__UI_Controls(__UI_GetID("Form1")).BackColor, 80), __UI_Controls(i).BackColor
END IF
IF LEN(__UI_Texts(i)) THEN
_PRINTSTRING (ContainerOffsetLeft + __UI_Controls(i).Left + CaptionIndent, ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2)), MID$(__UI_Texts(i), __UI_Controls(i).InputViewStart, __UI_Controls(i).FieldArea)
ELSE
_PRINTSTRING (ContainerOffsetLeft + __UI_Controls(i).Left + CaptionIndent, ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2)), TempCaption$
END IF
IF __UI_Controls(i).Selected THEN
DIM s1 AS LONG, s2 AS LONG
DIM ss1 AS LONG, ss2 AS LONG
s1 = __UI_Controls(i).SelectionStart
s2 = __UI_Controls(i).Cursor
IF s1 > s2 THEN
SWAP s1, s2
IF __UI_Controls(i).InputViewStart > 1 THEN
ss1 = s1 - __UI_Controls(i).InputViewStart + 1
ELSE
ss1 = s1
END IF
ss2 = s2 - s1
IF ss1 + ss2 > __UI_Controls(__UI_Focus).FieldArea THEN ss2 = __UI_Controls(__UI_Focus).FieldArea - ss1
ELSE
ss1 = s1
ss2 = s2 - s1
IF ss1 < __UI_Controls(i).InputViewStart THEN ss1 = 0: ss2 = s2 - __UI_Controls(i).InputViewStart + 1
IF ss1 > __UI_Controls(i).InputViewStart THEN ss1 = ss1 - __UI_Controls(i).InputViewStart + 1: ss2 = s2 - s1
END IF
__UI_SelectedText = MID$(__UI_Texts(i), s1 + 1, s2 - s1)
LINE (ContainerOffsetLeft + __UI_Controls(i).Left + CaptionIndent + ss1 * _FONTWIDTH, ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2))-STEP(ss2 * _FONTWIDTH, _FONTHEIGHT), _RGBA32(0, 0, 0, 50), BF
END IF
IF __UI_Focus = i THEN
STATIC SetCursor#, cursorBlink%%
IF TIMER - SetCursor# > .4 THEN
SetCursor# = TIMER
cursorBlink%% = NOT cursorBlink%%
END IF
IF cursorBlink%% THEN
LINE (ContainerOffsetLeft + __UI_Controls(i).Left + CaptionIndent + (__UI_Controls(i).Cursor - (__UI_Controls(i).InputViewStart - 1)) * _FONTWIDTH, ContainerOffsetTop + __UI_Controls(i).Top + ((__UI_Controls(i).Height \ 2) - _FONTHEIGHT \ 2))-STEP(0, _FONTHEIGHT), _RGB32(0, 0, 0)
END IF
END IF
2016-10-02 03:27:10 +00:00
END SELECT
END IF
NEXT
_DISPLAY
END SUB
'---------------------------------------------------------------------------------
FUNCTION __UI_Darken~& (WhichColor~&, ByHowMuch%)
__UI_Darken~& = _RGB32(_RED(WhichColor~&) * (ByHowMuch% / 100), _GREEN(WhichColor~&) * (ByHowMuch% / 100), _BLUE(WhichColor~&) * (ByHowMuch% / 100))
END FUNCTION
SUB __UI_DrawRectangle (x1 AS SINGLE, y1 AS SINGLE, Width&, Height&, BorderColor~&, BackColor~&, Fill%%)
'Rounded rectangles code adapted from stylin
'(http://www.qb64.net/forum/index.php?topic=4168.msg42352#msg42352)
'Rounded rectangles filling code provided courtesy of ___vincent
DIM x2 AS SINGLE, y2 AS SINGLE
DIM radius AS SINGLE, ul_radius AS SINGLE, ur_radius AS SINGLE
DIM a AS SINGLE, b AS SINGLE, e AS SINGLE
DIM ll_radius AS SINGLE, lr_radius AS SINGLE
radius = 5
ul_radius = radius
ur_radius = radius
ll_radius = radius
lr_radius = radius
x2 = x1 + Width& - 1
y2 = y1 + Height& - 1
IF (x2 < x1) THEN SWAP x1, x2
IF (y2 < y1) THEN SWAP y1, y2
DIM w AS SINGLE: w = x2 - x1 + 1
DIM h AS SINGLE: h = y2 - y1 + 1
IF Fill%% THEN
LINE (x1, y1 + radius)-(x2, y2 - radius), BackColor~&, BF
a = radius
b = 0
e = -a
DO WHILE a >= b
LINE (x1 + radius - b, y1 + radius - a)-(x2 - radius + b, y1 + radius - a), BackColor~&, BF
LINE (x1 + radius - a, y1 + radius - b)-(x2 - radius + a, y1 + radius - b), BackColor~&, BF
LINE (x1 + radius - b, y2 - radius + a)-(x2 - radius + b, y2 - radius + a), BackColor~&, BF
LINE (x1 + radius - a, y2 - radius + b)-(x2 - radius + a, y2 - radius + b), BackColor~&, BF
b = b + 1
e = e + b + b
IF e > 0 THEN
a = a - 1
e = e - a - a
END IF
LOOP
END IF
' Top.
LINE (x1 + ul_radius - 1, y1)-(x2 - ur_radius + 1, y1), BorderColor~&
' Bottom.
LINE (x1 + ll_radius - 1, y2)-(x2 - lr_radius + 1, y2), BorderColor~&
' Left.
LINE (x1, y1 + ul_radius - 1)-(x1, y2 - ll_radius + 1), BorderColor~&
' Right.
LINE (x2, y1 + ur_radius - 1)-(x2, y2 - lr_radius + 1), BorderColor~&
' Upper-left.
CIRCLE (x1 + ul_radius, y1 + ul_radius), ul_radius, BorderColor~&, _PI * 0.5, _PI, 1
' Upper-right.
CIRCLE (x2 - ur_radius, y1 + ur_radius), ur_radius, BorderColor~&, 0.0, _PI * 0.5, 1
' Lower-left.
CIRCLE (x1 + ll_radius, y2 - ll_radius), ll_radius, BorderColor~&, _PI, _PI * 1.5, 1
' Lower-right.
CIRCLE (x2 - lr_radius, y2 - lr_radius), lr_radius, BorderColor~&, _PI * 1.5, 0.0, 1
END SUB
2016-10-02 03:27:10 +00:00
SUB __UI_EventDispatcher
2016-10-02 03:29:24 +00:00
STATIC __UI_LastHoveringID AS LONG
DIM i AS LONG
2016-10-02 03:27:10 +00:00
IF __UI_HoveringID = 0 THEN EXIT SUB
$IF WIN THEN
'Alt+F4 - Windows
IF ((_KEYDOWN(100308) OR _KEYDOWN(100307)) AND __UI_KeyHit = -15872) OR __UI_ExitTriggered THEN
__UI_UnloadSignal = __UI_True
__UI_BeforeUnload
IF __UI_UnloadSignal THEN SYSTEM
END IF
$ELSE
IF __UI_ExitTriggered THEN
__UI_UnloadSignal = __UI_True
__UI_BeforeUnload
IF __UI_UnloadSignal THEN SYSTEM
END IF
$END IF
'MouseEnter, MouseLeave
2016-10-02 03:27:10 +00:00
IF __UI_LastHoveringID <> __UI_HoveringID THEN
IF __UI_LastHoveringID THEN __UI_MouseLeave __UI_LastHoveringID
__UI_MouseEnter __UI_HoveringID
END IF
IF __UI_Controls(__UI_HoveringID).CanDrag THEN _MOUSESHOW "link" ELSE _MOUSESHOW "default"
'FocusIn, FocusOut
IF __UI_KeyHit = 9 AND __UI_IsDragging = __UI_False THEN 'TAB
DIM __UI_FocusSearch AS LONG
__UI_FocusSearch = __UI_Focus
DO
IF _KEYDOWN(100304) OR _KEYDOWN(100303) THEN
__UI_FocusSearch = (__UI_FocusSearch + UBOUND(__UI_Controls) - 2) MOD UBOUND(__UI_Controls) + 1
ELSE
__UI_FocusSearch = __UI_FocusSearch MOD UBOUND(__UI_Controls) + 1
END IF
IF __UI_FocusSearch = __UI_Focus THEN
'Full circle. No objects can have focus
EXIT DO
END IF
IF __UI_Controls(__UI_FocusSearch).CanHaveFocus AND __UI_Controls(__UI_FocusSearch).Enabled THEN
IF __UI_Focus THEN __UI_FocusOut __UI_Focus
__UI_Focus = __UI_FocusSearch
__UI_FocusIn __UI_Focus
EXIT DO
END IF
LOOP
END IF
'MouseDown, MouseUp, BeginDrag
2016-10-02 03:27:10 +00:00
IF __UI_MouseButton1 THEN
IF __UI_MouseIsDown = __UI_False THEN
IF __UI_Controls(__UI_HoveringID).CanHaveFocus AND __UI_Controls(__UI_HoveringID).Enabled THEN __UI_Focus = __UI_HoveringID
2016-10-02 03:27:10 +00:00
__UI_MouseIsDown = __UI_True
__UI_MouseDownOnID = __UI_HoveringID
IF __UI_Controls(__UI_HoveringID).CanDrag THEN
IF __UI_IsDragging = __UI_False THEN
__UI_IsDragging = __UI_True
__UI_DraggingID = __UI_HoveringID
__UI_BeginDrag __UI_DraggingID
__UI_DragY = __UI_MouseY
__UI_DragX = __UI_MouseX
END IF
2016-10-02 03:36:31 +00:00
END IF
IF __UI_Controls(__UI_HoveringID).Type = __UI_Type_TextBox THEN
_FONT __UI_Fonts(__UI_Controls(__UI_HoveringID).Font)
2016-10-02 03:36:31 +00:00
IF __UI_IsSelectingText = __UI_False THEN
__UI_Controls(__UI_HoveringID).Selected = __UI_False
__UI_SelectedText = ""
__UI_Controls(__UI_HoveringID).SelectionStart = ((__UI_MouseX - __UI_Controls(__UI_HoveringID).Left) / _FONTWIDTH) + (__UI_Controls(__UI_HoveringID).InputViewStart - 1)
__UI_Controls(__UI_HoveringID).Cursor = __UI_Controls(__UI_HoveringID).SelectionStart
2016-10-02 03:36:31 +00:00
IF __UI_Controls(__UI_HoveringID).SelectionStart > LEN(__UI_Texts(__UI_HoveringID)) THEN __UI_Controls(__UI_HoveringID).SelectionStart = LEN(__UI_Texts(__UI_HoveringID))
IF __UI_Controls(__UI_HoveringID).Cursor > LEN(__UI_Texts(__UI_HoveringID)) THEN __UI_Controls(__UI_HoveringID).Cursor = LEN(__UI_Texts(__UI_HoveringID))
__UI_IsSelectingText = __UI_True
__UI_IsSelectingTextOnID = __UI_HoveringID
END IF
END IF
2016-10-02 03:27:10 +00:00
__UI_MouseDown __UI_HoveringID
ELSE
IF __UI_MouseDownOnID <> __UI_HoveringID AND __UI_MouseDownOnID > 0 THEN
__UI_MouseDownOnID = 0
2016-10-02 03:36:31 +00:00
ELSE
IF __UI_IsSelectingText THEN
_FONT __UI_Fonts(__UI_Controls(__UI_IsSelectingTextOnID).Font)
IF __UI_MouseX <= __UI_Controls(__UI_IsSelectingTextOnID).Left AND __UI_Controls(__UI_IsSelectingTextOnID).InputViewStart > 1 THEN
__UI_Controls(__UI_IsSelectingTextOnID).InputViewStart = __UI_Controls(__UI_IsSelectingTextOnID).InputViewStart - 1
__UI_Controls(__UI_IsSelectingTextOnID).Cursor = __UI_Controls(__UI_IsSelectingTextOnID).InputViewStart
ELSE
__UI_Controls(__UI_IsSelectingTextOnID).Cursor = ((__UI_MouseX - __UI_Controls(__UI_IsSelectingTextOnID).Left) / _FONTWIDTH) + (__UI_Controls(__UI_IsSelectingTextOnID).InputViewStart - 1)
IF __UI_Controls(__UI_IsSelectingTextOnID).Cursor < 0 THEN __UI_Controls(__UI_IsSelectingTextOnID).Cursor = 0
IF __UI_Controls(__UI_IsSelectingTextOnID).Cursor > LEN(__UI_Texts(__UI_IsSelectingTextOnID)) THEN __UI_Controls(__UI_IsSelectingTextOnID).Cursor = LEN(__UI_Texts(__UI_IsSelectingTextOnID))
IF __UI_Controls(__UI_IsSelectingTextOnID).Cursor <> __UI_Controls(__UI_IsSelectingTextOnID).SelectionStart THEN
__UI_Controls(__UI_IsSelectingTextOnID).Selected = __UI_True
END IF
END IF
END IF
2016-10-02 03:27:10 +00:00
END IF
END IF
ELSE
IF __UI_MouseIsDown THEN
IF __UI_IsDragging THEN
__UI_EndDrag __UI_DraggingID
__UI_IsDragging = __UI_False
'Snap the previously dragged object to the grid (unless Ctrl is down):
__UI_Controls(__UI_DraggingID).Top = __UI_PreviewTop
__UI_Controls(__UI_DraggingID).Left = __UI_PreviewLeft
__UI_DraggingID = 0
END IF
'Click
IF TIMER - __UI_LastMouseClick > .2 THEN
IF __UI_MouseDownOnID = __UI_HoveringID AND __UI_HoveringID > 0 THEN
IF __UI_Controls(__UI_HoveringID).Enabled THEN
SELECT CASE __UI_Controls(__UI_HoveringID).Type
CASE __UI_Type_RadioButton
__UI_SetRadioButtonValue __UI_HoveringID
CASE __UI_Type_CheckBox
__UI_Controls(__UI_HoveringID).Value = NOT __UI_Controls(__UI_HoveringID).Value
CASE __UI_Type_TextBox
_FONT __UI_Fonts(__UI_Controls(__UI_HoveringID).Font)
__UI_Controls(__UI_HoveringID).Cursor = ((__UI_MouseX - __UI_Controls(__UI_HoveringID).Left) / _FONTWIDTH) + (__UI_Controls(__UI_HoveringID).InputViewStart - 1)
IF __UI_Controls(__UI_HoveringID).Cursor > LEN(__UI_Texts(__UI_HoveringID)) THEN __UI_Controls(__UI_HoveringID).Cursor = LEN(__UI_Texts(__UI_HoveringID))
2016-10-02 03:36:31 +00:00
__UI_IsSelectingText = __UI_False
__UI_IsSelectingTextOnID = 0
END SELECT
__UI_Click __UI_HoveringID
__UI_LastMouseClick = TIMER
__UI_MouseDownOnID = 0
END IF
END IF
END IF
2016-10-02 03:36:31 +00:00
__UI_IsSelectingText = __UI_False
__UI_IsSelectingTextOnID = 0
2016-10-02 03:27:10 +00:00
__UI_MouseIsDown = __UI_False
__UI_MouseUp __UI_HoveringID
END IF
END IF
'Drag update
IF __UI_IsDragging AND __UI_DraggingID > 0 THEN
__UI_Controls(__UI_DraggingID).Top = __UI_Controls(__UI_DraggingID).Top + (__UI_MouseY - __UI_DragY)
__UI_DragY = __UI_MouseY
__UI_Controls(__UI_DraggingID).Left = __UI_Controls(__UI_DraggingID).Left + (__UI_MouseX - __UI_DragX)
__UI_DragX = __UI_MouseX
'Draw preview rectangle to show where the object will be snapped
'(Ctrl overrides snapping):
IF _KEYDOWN(100305) OR _KEYDOWN(100306) THEN
__UI_PreviewTop = __UI_Controls(__UI_DraggingID).Top
__UI_PreviewLeft = __UI_Controls(__UI_DraggingID).Left
ELSE
__UI_PreviewTop = __UI_Controls(__UI_DraggingID).Top
DO UNTIL __UI_PreviewTop MOD 10 = 0
__UI_PreviewTop = __UI_PreviewTop - 1
LOOP
IF ABS(__UI_PreviewTop - __UI_Controls(__UI_DraggingID).Top) > 5 THEN
__UI_PreviewTop = __UI_Controls(__UI_DraggingID).Top
DO UNTIL __UI_PreviewTop MOD 10 = 0
__UI_PreviewTop = __UI_PreviewTop + 1
LOOP
END IF
__UI_PreviewLeft = __UI_Controls(__UI_DraggingID).Left
DO UNTIL __UI_PreviewLeft MOD 10 = 0
__UI_PreviewLeft = __UI_PreviewLeft - 1
LOOP
IF ABS(__UI_PreviewLeft - __UI_Controls(__UI_DraggingID).Left) > 5 THEN
__UI_PreviewLeft = __UI_Controls(__UI_DraggingID).Left
DO UNTIL __UI_PreviewLeft MOD 10 = 0
__UI_PreviewLeft = __UI_PreviewLeft + 1
LOOP
2016-10-02 03:29:24 +00:00
END IF
2016-10-02 03:27:10 +00:00
END IF
END IF
'Keyboard handler
IF __UI_KeyHit = 100303 OR __UI_KeyHit = 100304 THEN __UI_ShiftIsDown = __UI_True
IF __UI_KeyHit = -100303 OR __UI_KeyHit = -100304 THEN __UI_ShiftIsDown = __UI_False
IF __UI_KeyHit = 100305 OR __UI_KeyHit = 100306 THEN __UI_CtrlIsDown = __UI_True
IF __UI_KeyHit = -100305 OR __UI_KeyHit = -100306 THEN __UI_CtrlIsDown = __UI_False
IF __UI_KeyHit = 100307 OR __UI_KeyHit = 100308 THEN __UI_AltIsDown = __UI_True
IF __UI_KeyHit = -100307 OR __UI_KeyHit = -100308 THEN __UI_AltIsDown = __UI_False
IF __UI_Focus THEN
'Enter activates the default button, if any
IF __UI_IsDragging = __UI_False AND _
__UI_KeyHit = -13 AND _
__UI_DefaultButtonID > 0 AND _
__UI_Controls(__UI_Focus).Type <> __UI_Type_MultiLineTextBox AND _
__UI_Controls(__UI_Focus).Type <> __UI_Type_Button THEN
'Enter released and there is a default button
__UI_Click __UI_DefaultButtonID
ELSE
SELECT CASE __UI_Controls(__UI_Focus).Type
CASE __UI_Type_Button, __UI_Type_RadioButton, __UI_Type_CheckBox
'Emulate mouse down/click
IF __UI_IsDragging = __UI_False AND _
__UI_KeyHit = 32 AND _
__UI_Controls(__UI_Focus).Enabled THEN
'Space bar down on a button
IF __UI_KeyIsDown = __UI_False AND __UI_KeyDownOnID = 0 THEN
__UI_KeyDownOnID = __UI_Focus
__UI_KeyIsDown = __UI_True
END IF
ELSEIF __UI_IsDragging = __UI_False AND _
__UI_KeyHit = -32 AND _
__UI_Controls(__UI_Focus).Enabled THEN
'Space bar released and a button has focus
IF __UI_KeyIsDown AND __UI_Focus = __UI_KeyDownOnID THEN
IF __UI_Controls(__UI_KeyDownOnID).Type = __UI_Type_RadioButton THEN
__UI_SetRadioButtonValue __UI_KeyDownOnID
ELSEIF __UI_Controls(__UI_KeyDownOnID).Type = __UI_Type_CheckBox THEN
__UI_Controls(__UI_KeyDownOnID).Value = NOT __UI_Controls(__UI_KeyDownOnID).Value
END IF
__UI_Click __UI_Focus
END IF
__UI_KeyDownOnID = 0
__UI_KeyIsDown = __UI_False
END IF
CASE __UI_Type_TextBox
DIM Clip$, FindLF%
DIM s1 AS LONG, s2 AS LONG
SELECT CASE __UI_KeyHit
CASE 32 TO 126 'Printable ASCII characters
IF __UI_KeyHit = ASC("v") OR __UI_KeyHit = ASC("V") THEN 'Paste from clipboard (Ctrl+V)
IF __UI_CtrlIsDown THEN
Clip$ = _CLIPBOARD$
FindLF% = INSTR(Clip$, CHR$(13))
IF FindLF% > 0 THEN Clip$ = LEFT$(Clip$, FindLF% - 1)
FindLF% = INSTR(Clip$, CHR$(10))
IF FindLF% > 0 THEN Clip$ = LEFT$(Clip$, FindLF% - 1)
IF LEN(RTRIM$(LTRIM$(Clip$))) > 0 THEN
IF NOT __UI_Controls(__UI_Focus).Selected THEN
IF __UI_Controls(__UI_Focus).Cursor = LEN(__UI_Texts(__UI_Focus)) THEN
__UI_Texts(__UI_Focus) = __UI_Texts(__UI_Focus) + Clip$
__UI_Controls(__UI_Focus).Cursor = LEN(__UI_Texts(__UI_Focus))
ELSE
__UI_Texts(__UI_Focus) = LEFT$(__UI_Texts(__UI_Focus), __UI_Controls(__UI_Focus).Cursor) + Clip$ + MID$(__UI_Texts(__UI_Focus), __UI_Controls(__UI_Focus).Cursor + 1)
__UI_Controls(__UI_Focus).Cursor = __UI_Controls(__UI_Focus).Cursor + LEN(Clip$)
END IF
ELSE
s1 = __UI_Controls(__UI_Focus).SelectionStart
s2 = __UI_Controls(__UI_Focus).Cursor
IF s1 > s2 THEN SWAP s1, s2
__UI_Texts(__UI_Focus) = LEFT$(__UI_Texts(__UI_Focus), s1) + Clip$ + MID$(__UI_Texts(__UI_Focus), s2 + 1)
__UI_Controls(__UI_Focus).Cursor = s1 + LEN(Clip$)
__UI_Controls(__UI_Focus).Selected = __UI_False
2016-10-02 03:36:31 +00:00
__UI_SelectedText = ""
END IF
END IF
__UI_KeyHit = 0
END IF
ELSEIF __UI_KeyHit = ASC("c") OR __UI_KeyHit = ASC("C") THEN 'Copy selection to clipboard (Ctrl+C)
IF __UI_CtrlIsDown THEN
_CLIPBOARD$ = __UI_SelectedText
__UI_KeyHit = 0
END IF
ELSEIF __UI_KeyHit = ASC("x") OR __UI_KeyHit = ASC("X") THEN 'Cut selection to clipboard (Ctrl+X)
IF __UI_CtrlIsDown THEN
_CLIPBOARD$ = __UI_SelectedText
__UI_DeleteSelection
__UI_KeyHit = 0
END IF
ELSEIF __UI_KeyHit = ASC("a") OR __UI_KeyHit = ASC("A") THEN 'Select all text (Ctrl+A)
IF __UI_CtrlIsDown THEN
__UI_Controls(__UI_Focus).Cursor = LEN(__UI_Texts(__UI_Focus))
__UI_Controls(__UI_Focus).SelectionStart = 0
__UI_Controls(__UI_Focus).Selected = __UI_True
__UI_KeyHit = 0
END IF
END IF
IF __UI_KeyHit THEN
IF NOT __UI_Controls(__UI_Focus).Selected THEN
IF __UI_Controls(__UI_Focus).Cursor = LEN(__UI_Texts(__UI_Focus)) THEN
__UI_Texts(__UI_Focus) = __UI_Texts(__UI_Focus) + CHR$(__UI_KeyHit)
__UI_Controls(__UI_Focus).Cursor = __UI_Controls(__UI_Focus).Cursor + 1
ELSE
__UI_Texts(__UI_Focus) = LEFT$(__UI_Texts(__UI_Focus), __UI_Controls(__UI_Focus).Cursor) + CHR$(__UI_KeyHit) + MID$(__UI_Texts(__UI_Focus), __UI_Controls(__UI_Focus).Cursor + 1)
__UI_Controls(__UI_Focus).Cursor = __UI_Controls(__UI_Focus).Cursor + 1
END IF
ELSE
2016-10-02 03:36:31 +00:00
s1 = __UI_Controls(__UI_Focus).SelectionStart
s2 = __UI_Controls(__UI_Focus).Cursor
IF s1 > s2 THEN SWAP s1, s2
__UI_Texts(__UI_Focus) = LEFT$(__UI_Texts(__UI_Focus), s1) + CHR$(__UI_KeyHit) + MID$(__UI_Texts(__UI_Focus), s2 + 1)
__UI_Controls(__UI_Focus).Selected = __UI_False
__UI_SelectedText = ""
__UI_Controls(__UI_Focus).Cursor = s1 + 1
END IF
END IF
CASE 8 'Backspace
IF LEN(__UI_Texts(__UI_Focus)) > 0 THEN
IF NOT __UI_Controls(__UI_Focus).Selected THEN
IF __UI_Controls(__UI_Focus).Cursor = LEN(__UI_Texts(__UI_Focus)) THEN
__UI_Texts(__UI_Focus) = LEFT$(__UI_Texts(__UI_Focus), LEN(__UI_Texts(__UI_Focus)) - 1)
__UI_Controls(__UI_Focus).Cursor = __UI_Controls(__UI_Focus).Cursor - 1
ELSEIF __UI_Controls(__UI_Focus).Cursor > 1 THEN
__UI_Texts(__UI_Focus) = LEFT$(__UI_Texts(__UI_Focus), __UI_Controls(__UI_Focus).Cursor - 1) + MID$(__UI_Texts(__UI_Focus), __UI_Controls(__UI_Focus).Cursor + 1)
__UI_Controls(__UI_Focus).Cursor = __UI_Controls(__UI_Focus).Cursor - 1
ELSEIF __UI_Controls(__UI_Focus).Cursor = 1 THEN
__UI_Texts(__UI_Focus) = RIGHT$(__UI_Texts(__UI_Focus), LEN(__UI_Texts(__UI_Focus)) - 1)
__UI_Controls(__UI_Focus).Cursor = __UI_Controls(__UI_Focus).Cursor - 1
END IF
ELSE
__UI_DeleteSelection
END IF
END IF
CASE 21248 'Delete
IF NOT __UI_Controls(__UI_Focus).Selected THEN
IF LEN(__UI_Texts(__UI_Focus)) > 0 THEN
IF __UI_Controls(__UI_Focus).Cursor = 0 THEN
__UI_Texts(__UI_Focus) = RIGHT$(__UI_Texts(__UI_Focus), LEN(__UI_Texts(__UI_Focus)) - 1)
ELSEIF __UI_Controls(__UI_Focus).Cursor > 0 AND __UI_Controls(__UI_Focus).Cursor <= LEN(__UI_Texts(__UI_Focus)) - 1 THEN
__UI_Texts(__UI_Focus) = LEFT$(__UI_Texts(__UI_Focus), __UI_Controls(__UI_Focus).Cursor) + MID$(__UI_Texts(__UI_Focus), __UI_Controls(__UI_Focus).Cursor + 2)
END IF
END IF
ELSE
__UI_DeleteSelection
END IF
CASE 19200 'Left arrow key
__UI_CheckSelection __UI_Focus
IF __UI_Controls(__UI_Focus).Cursor > 0 THEN __UI_Controls(__UI_Focus).Cursor = __UI_Controls(__UI_Focus).Cursor - 1
CASE 19712 'Right arrow key
__UI_CheckSelection __UI_Focus
IF __UI_Controls(__UI_Focus).Cursor < LEN(__UI_Texts(__UI_Focus)) THEN __UI_Controls(__UI_Focus).Cursor = __UI_Controls(__UI_Focus).Cursor + 1
CASE 18176 'Home
__UI_CheckSelection __UI_Focus
__UI_Controls(__UI_Focus).Cursor = 0
CASE 20224 'End
__UI_CheckSelection __UI_Focus
__UI_Controls(__UI_Focus).Cursor = LEN(__UI_Texts(__UI_Focus))
END SELECT
__UI_CursorAdjustments
END SELECT
END IF
ELSE
'Enter activates the default button, if any
IF __UI_IsDragging = __UI_False AND _
__UI_KeyHit = -13 AND _
__UI_DefaultButtonID > 0 THEN
'Enter released and there is a default button
__UI_Click __UI_DefaultButtonID
END IF
END IF
2016-10-02 03:27:10 +00:00
__UI_LastHoveringID = __UI_HoveringID
END SUB
'---------------------------------------------------------------------------------
SUB __UI_CheckSelection (id)
IF __UI_ShiftIsDown THEN
IF NOT __UI_Controls(id).Selected THEN
__UI_Controls(id).Selected = __UI_True
__UI_Controls(id).SelectionStart = __UI_Controls(id).Cursor
END IF
ELSE
__UI_Controls(id).Selected = __UI_False
2016-10-02 03:36:31 +00:00
__UI_SelectedText = ""
END IF
END SUB
2016-10-02 03:27:10 +00:00
'---------------------------------------------------------------------------------
FUNCTION __UI_GetID (ObjectName$)
DIM i AS LONG
FOR i = 1 TO UBOUND(__UI_Controls)
IF __UI_Controls(i).ID > 0 AND UCASE$(RTRIM$(__UI_Controls(i).Name)) = UCASE$(ObjectName$) THEN
2016-10-02 03:27:10 +00:00
__UI_GetID = i
EXIT FUNCTION
END IF
NEXT
ERROR 5
END FUNCTION
'---------------------------------------------------------------------------------
FUNCTION __UI_NewObject (ObjType AS INTEGER, ObjName AS STRING, ParentID AS LONG)
2016-10-02 03:27:10 +00:00
DIM NextSlot AS LONG, i AS LONG
IF ObjType = __UI_Type_Form THEN
'Make sure no other Form object exists, as Form is the main window
FOR i = 1 TO UBOUND(__UI_Controls)
IF __UI_Controls(i).Type = __UI_Type_Form THEN ERROR 5: EXIT FUNCTION
2016-10-02 03:27:10 +00:00
NEXT
END IF
'Make sure this ObjName is unique:
FOR i = 1 TO UBOUND(__UI_Controls)
IF UCASE$(RTRIM$(__UI_Controls(i).Name)) = UCASE$(RTRIM$(ObjName)) THEN ERROR 5: EXIT FUNCTION
NEXT
2016-10-02 03:27:10 +00:00
'Find an empty slot for the new object
FOR NextSlot = 1 TO UBOUND(__UI_Controls)
IF __UI_Controls(NextSlot).ID = __UI_False THEN EXIT FOR
2016-10-02 03:27:10 +00:00
NEXT
IF NextSlot > UBOUND(__UI_Controls) THEN
'No empty slots. We must increase __UI_Controls() and its helper arrays
REDIM _PRESERVE __UI_Controls(0 TO NextSlot + 99) AS ObjectTYPE
2016-10-02 03:27:10 +00:00
REDIM _PRESERVE __UI_Captions(1 TO NextSlot + 99) AS STRING
REDIM _PRESERVE __UI_Texts(1 TO NextSlot + 99) AS STRING
END IF
'__UI_DestroyObject __UI_Controls(NextSlot)
__UI_Controls(NextSlot).ID = NextSlot
__UI_Controls(NextSlot).ParentID = ParentID
__UI_Controls(NextSlot).Type = ObjType
__UI_Controls(NextSlot).Name = ObjName
2016-10-02 03:27:10 +00:00
__UI_NewObject = NextSlot
END FUNCTION
'---------------------------------------------------------------------------------
'SUB __UI_DestroyObject (__UI_EmptyObject AS ObjectTYPE)
' __UI_EmptyObject.ID = 0
' __UI_EmptyObject.ParentID = 0
' __UI_EmptyObject.Type = 0
' __UI_EmptyObject.Name = ""
' __UI_EmptyObject.Top = 0
' __UI_EmptyObject.Left = 0
' __UI_EmptyObject.Width = 0
' __UI_EmptyObject.Height = 0
' __UI_EmptyObject.BackColor = 0
' __UI_EmptyObject.ForeColor = 0
' __UI_EmptyObject.BackStyle = 0
' __UI_EmptyObject.Value = 0
' __UI_EmptyObject.Min = 0
' __UI_EmptyObject.Max = 0
' __UI_EmptyObject.Enabled = 0
' __UI_EmptyObject.Event.Click = 0
' __UI_EmptyObject.Event.DoubleClick = 0
' __UI_EmptyObject.Event.Hover = 0
' __UI_EmptyObject.Event.FocusIn = 0
' __UI_EmptyObject.Event.FocusOut = 0
' __UI_EmptyObject.Event.Load = 0
' __UI_EmptyObject.Event.Unload = 0
' __UI_EmptyObject.Event.Error = 0
' __UI_EmptyObject.Event.MouseDown = 0
' __UI_EmptyObject.Event.MouseUp = 0
' __UI_EmptyObject.Event.Wheel = 0
' __UI_EmptyObject.Event.KeyHit = 0
'END SUB
''---------------------------------------------------------------------------------
'FUNCTION __UI_ParentID& (Object$)
' __UI_ParentID& = __UI_Controls(__UI_GetID(Object$)).ParentID
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_Type% (Object$)
' __UI_Type% = __UI_Controls(__UI_GetID(Object$)).ParentID
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_Name$ (ID)
' __UI_Name$ = RTRIM$(__UI_Controls(ID).Name)
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_Top% (Object$)
' __UI_Top% = __UI_Controls(__UI_GetID(Object$)).Top
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_Left% (Object$)
' __UI_Left% = __UI_Controls(__UI_GetID(Object$)).Left
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_Width% (Object$)
' __UI_Width% = __UI_Controls(__UI_GetID(Object$)).Width
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_Height% (Object$)
' __UI_Height% = __UI_Controls(__UI_GetID(Object$)).Height
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_BackColor~& (Object$)
' __UI_BackColor~& = __UI_Controls(__UI_GetID(Object$)).BackColor
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_ForeColor~& (Object$)
' __UI_ForeColor~& = __UI_Controls(__UI_GetID(Object$)).ForeColor
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_BackStyle%% (Object$)
' __UI_BackStyle%% = __UI_Controls(__UI_GetID(Object$)).BackStyle
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_Value## (Object$)
' __UI_Value## = __UI_Controls(__UI_GetID(Object$)).Value
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_Min## (Object$)
' __UI_Min## = __UI_Controls(__UI_GetID(Object$)).Min
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_Max## (Object$)
' __UI_Max## = __UI_Controls(__UI_GetID(Object$)).Max
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_Enabled%% (Object$)
' __UI_Enabled%% = __UI_Controls(__UI_GetID(Object$)).Enabled
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_CanDrag%% (Object$)
' __UI_CanDrag%% = __UI_Controls(__UI_GetID(Object$)).CanDrag
'END FUNCTION
''---------------------------------------------------------------------------------
'FUNCTION __UI_Caption$ (Object$)
' __UI_Caption$ = __UI_Captions(__UI_GetID(Object$))
'END FUNCTION
2016-10-02 03:27:10 +00:00
'---------------------------------------------------------------------------------
SUB __UI_SetCaption (Object$, NewCaption$)
__UI_Captions(__UI_GetID(Object$)) = NewCaption$
END SUB
2016-10-02 03:27:10 +00:00
'---------------------------------------------------------------------------------
SUB __UI_SetText (Object$, NewText$)
__UI_Texts(__UI_GetID(Object$)) = NewText$
END SUB
2016-10-02 03:27:10 +00:00
'---------------------------------------------------------------------------------
FUNCTION __UI_LoadFont& (FontFile$, Size%, Parameters$)
DIM Handle&
Handle& = _LOADFONT(FontFile$, Size%, Parameters$)
IF Handle& <= 0 THEN Handle& = 16
__UI_LoadFont& = Handle&
2016-10-02 03:27:10 +00:00
END FUNCTION
'---------------------------------------------------------------------------------
SUB __UI_DrawRadioButton (Checked%%, Left&, Top&, CircleDiameter%)
DIM i AS SINGLE
CircleDiameter% = 10
2016-10-02 03:27:10 +00:00
CIRCLE (Left& + CircleDiameter% / 3, Top&), CircleDiameter% / 2, _RGB32(0, 0, 0)
2016-10-02 03:27:10 +00:00
IF Checked%% THEN
FOR i = CircleDiameter% / 3 TO 1 STEP -.1
CIRCLE (Left& + CircleDiameter% / 3, Top&), i, _RGB32(0, 0, 0)
NEXT
END IF
END SUB
2016-10-02 03:27:10 +00:00
'---------------------------------------------------------------------------------
SUB __UI_SetRadioButtonValue (id)
'Radio buttons will change value of others in the same group
DIM i AS LONG
2016-10-02 03:27:10 +00:00
FOR i = 1 TO UBOUND(__UI_Controls)
IF __UI_Controls(i).Type = __UI_Type_RadioButton AND _
__UI_Controls(i).ParentID = __UI_Controls(id).ParentID THEN
__UI_Controls(i).Value = __UI_False
END IF
NEXT
__UI_Controls(id).Value = __UI_True
END SUB
2016-10-02 03:27:10 +00:00
'---------------------------------------------------------------------------------
SUB __UI_DrawCheckBox (Checked%%, Left&, Top&, BoxSize%)
DIM i AS SINGLE
BoxSize% = 10
LINE (Left&, Top& - BoxSize% / 2)-STEP(BoxSize%, BoxSize%), _RGB32(0, 0, 0), B
2016-10-02 03:27:10 +00:00
IF Checked%% THEN
LINE (Left&, Top& - BoxSize% / 2)-STEP(BoxSize%, BoxSize%), _RGB32(0, 0, 0)
LINE (Left&, Top& + BoxSize% / 2)-STEP(BoxSize%, -BoxSize%), _RGB32(0, 0, 0)
END IF
2016-10-02 03:27:10 +00:00
END SUB
'---------------------------------------------------------------------------------
SUB __UI_DeleteSelection
DIM s1 AS LONG, s2 AS LONG
s1 = __UI_Controls(__UI_Focus).SelectionStart
s2 = __UI_Controls(__UI_Focus).Cursor
IF s1 > s2 THEN SWAP s1, s2
__UI_Texts(__UI_Focus) = LEFT$(__UI_Texts(__UI_Focus), s1) + MID$(__UI_Texts(__UI_Focus), s2 + 1)
__UI_Controls(__UI_Focus).Selected = __UI_False
2016-10-02 03:36:31 +00:00
__UI_SelectedText = ""
__UI_Controls(__UI_Focus).Cursor = s1
2016-10-02 03:27:10 +00:00
END SUB
SUB __UI_CursorAdjustments
IF __UI_Controls(__UI_Focus).Cursor > __UI_Controls(__UI_Focus).PrevCursor THEN
IF __UI_Controls(__UI_Focus).Cursor - __UI_Controls(__UI_Focus).InputViewStart + 2 > __UI_Controls(__UI_Focus).FieldArea THEN __UI_Controls(__UI_Focus).InputViewStart = (__UI_Controls(__UI_Focus).Cursor - __UI_Controls(__UI_Focus).FieldArea) + 2
ELSEIF __UI_Controls(__UI_Focus).Cursor < __UI_Controls(__UI_Focus).PrevCursor THEN
IF __UI_Controls(__UI_Focus).Cursor < __UI_Controls(__UI_Focus).InputViewStart - 1 THEN __UI_Controls(__UI_Focus).InputViewStart = __UI_Controls(__UI_Focus).Cursor
END IF
__UI_Controls(__UI_Focus).PrevCursor = __UI_Controls(__UI_Focus).Cursor
IF __UI_Controls(__UI_Focus).InputViewStart < 1 THEN __UI_Controls(__UI_Focus).InputViewStart = 1
END SUB