mirror of
https://github.com/FellippeHeitor/InForm.git
synced 2025-01-15 11:59:34 +00:00
db04859087
Menus close in one if another menu is opened in the other, for instance. Also: controls in the editor properly lose focus when preview is manipulated.
4158 lines
204 KiB
QBasic
4158 lines
204 KiB
QBasic
OPTION _EXPLICIT
|
|
|
|
$EXEICON:'.\resources\InForm.ico'
|
|
|
|
'Controls: --------------------------------------------------------------------
|
|
'Main form
|
|
DIM SHARED UiEditor AS LONG
|
|
DIM SHARED StatusBar AS LONG
|
|
|
|
'Menus
|
|
DIM SHARED FileMenu AS LONG, EditMenu AS LONG, ViewMenu AS LONG
|
|
DIM SHARED InsertMenu AS LONG, AlignMenu AS LONG, OptionsMenu AS LONG
|
|
DIM SHARED HelpMenu AS LONG, FontSwitchMenu AS LONG
|
|
|
|
'Frames
|
|
DIM SHARED Toolbox AS LONG, ColorMixer AS LONG
|
|
DIM SHARED OpenFrame AS LONG, ZOrdering AS LONG
|
|
DIM SHARED ControlProperties AS LONG, ControlToggles AS LONG
|
|
|
|
'Menu items
|
|
DIM SHARED FileMenuNew AS LONG, FileMenuOpen AS LONG
|
|
DIM SHARED FileMenuSave AS LONG, FileMenuSaveFrm AS LONG
|
|
DIM SHARED FileMenuExit AS LONG
|
|
|
|
DIM SHARED EditMenuUndo AS LONG, EditMenuRedo AS LONG, EditMenuCut AS LONG
|
|
DIM SHARED EditMenuCopy AS LONG, EditMenuPaste AS LONG
|
|
DIM SHARED EditMenuDelete AS LONG, EditMenuSelectAll AS LONG
|
|
DIM SHARED EditMenuCP437 AS LONG, EditMenuCP1252 AS LONG
|
|
DIM SHARED EditMenuSetDefaultButton AS LONG
|
|
DIM SHARED EditMenuRestoreDimensions AS LONG
|
|
DIM SHARED EditMenuAllowMinMax AS LONG, EditMenuZOrdering AS LONG
|
|
|
|
DIM SHARED ViewMenuPreviewDetach AS LONG
|
|
DIM SHARED ViewMenuShowPositionAndSize AS LONG
|
|
DIM SHARED ViewMenuPreview AS LONG, ViewMenuLoadedFonts AS LONG
|
|
|
|
DIM SHARED InsertMenuMenuBar AS LONG, InsertMenuMenuItem AS LONG
|
|
|
|
DIM SHARED OptionsMenuSnapLines AS LONG
|
|
DIM SHARED AlignMenuAlignLeft AS LONG
|
|
DIM SHARED AlignMenuAlignRight AS LONG
|
|
DIM SHARED AlignMenuAlignTops AS LONG
|
|
DIM SHARED AlignMenuAlignBottoms AS LONG
|
|
DIM SHARED AlignMenuAlignCentersV AS LONG
|
|
DIM SHARED AlignMenuAlignCentersH AS LONG
|
|
DIM SHARED AlignMenuAlignCenterV AS LONG
|
|
DIM SHARED AlignMenuAlignCenterH AS LONG
|
|
DIM SHARED AlignMenuDistributeV AS LONG
|
|
DIM SHARED AlignMenuDistributeH AS LONG
|
|
|
|
DIM SHARED OptionsMenuAutoName AS LONG, OptionsMenuSwapButtons AS LONG
|
|
DIM SHARED OptionsMenuCheckUpdates AS LONG
|
|
|
|
DIM SHARED HelpMenuHelp AS LONG, HelpMenuAbout AS LONG
|
|
|
|
DIM SHARED FontSwitchMenuSwitch AS LONG
|
|
|
|
'Toolbox buttons
|
|
DIM SHARED AddButton AS LONG, AddLabel AS LONG
|
|
DIM SHARED AddTextBox AS LONG, AddNumericBox AS LONG
|
|
DIM SHARED AddCheckBox AS LONG, AddRadioButton AS LONG
|
|
DIM SHARED AddListBox AS LONG, AddDropdownList AS LONG
|
|
DIM SHARED AddTrackBar AS LONG, AddProgressBar AS LONG
|
|
DIM SHARED AddPictureBox AS LONG, AddFrame AS LONG
|
|
DIM SHARED AddToggleSwitch AS LONG
|
|
|
|
'Control toggles
|
|
DIM SHARED Stretch AS LONG, HasBorder AS LONG
|
|
DIM SHARED ShowPercentage AS LONG, PasswordMaskCB AS LONG
|
|
DIM SHARED WordWrap AS LONG, CanHaveFocus AS LONG
|
|
DIM SHARED Disabled AS LONG, Transparent AS LONG
|
|
DIM SHARED Hidden AS LONG, CenteredWindow AS LONG
|
|
DIM SHARED Resizable AS LONG, AutoScroll AS LONG
|
|
|
|
'Open dialog
|
|
DIM SHARED DialogBG AS LONG, FileNameLB AS LONG
|
|
DIM SHARED FileNameTextBox AS LONG, PathLB AS LONG
|
|
DIM SHARED FilesLB AS LONG, FileList AS LONG
|
|
DIM SHARED PathsLB AS LONG, DirList AS LONG
|
|
DIM SHARED OpenBT AS LONG, CancelBT AS LONG
|
|
DIM SHARED ShowOnlyFrmbinFilesCB AS LONG
|
|
|
|
'Z-ordering dialog
|
|
DIM SHARED ControlList AS LONG, UpBT AS LONG
|
|
DIM SHARED DownBT AS LONG, CloseZOrderingBT AS LONG
|
|
|
|
'Properties
|
|
DIM SHARED TextAlignLB AS LONG, AlignOptions AS LONG
|
|
DIM SHARED VerticalAlignLB AS LONG, VAlignOptions AS LONG
|
|
DIM SHARED ColorPropertiesList AS LONG, ColorPreview AS LONG
|
|
DIM SHARED Red AS LONG, RedValue AS LONG
|
|
DIM SHARED Green AS LONG, GreenValue AS LONG
|
|
DIM SHARED Blue AS LONG, BlueValue AS LONG
|
|
DIM SHARED NameLB AS LONG, CaptionLB AS LONG
|
|
DIM SHARED TextLB AS LONG, TopLB AS LONG
|
|
DIM SHARED LeftLB AS LONG, WidthLB AS LONG
|
|
DIM SHARED HeightLB AS LONG, FontLB AS LONG
|
|
DIM SHARED TooltipLB AS LONG, ValueLB AS LONG
|
|
DIM SHARED MinLB AS LONG, MaxLB AS LONG
|
|
DIM SHARED IntervalLB AS LONG, MinIntervalLB AS LONG
|
|
DIM SHARED PaddingLeftrightLB AS LONG, NameTB AS LONG
|
|
DIM SHARED CaptionTB AS LONG, TextTB AS LONG
|
|
DIM SHARED TopTB AS LONG, LeftTB AS LONG
|
|
DIM SHARED WidthTB AS LONG, HeightTB AS LONG
|
|
DIM SHARED FontTB AS LONG, TooltipTB AS LONG
|
|
DIM SHARED ValueTB AS LONG, MinTB AS LONG
|
|
DIM SHARED MaxTB AS LONG, IntervalTB AS LONG
|
|
DIM SHARED MinIntervalTB AS LONG, PaddingTB AS LONG
|
|
DIM SHARED MaskTB AS LONG, MaskLB AS LONG
|
|
DIM SHARED BulletOptions AS LONG, BulletOptionsLB AS LONG
|
|
DIM SHARED BooleanLB AS LONG, BooleanOptions AS LONG
|
|
DIM SHARED FontListLB AS LONG, FontList AS LONG, FontSizeList
|
|
'------------------------------------------------------------------------------
|
|
|
|
'Other shared variables:
|
|
DIM SHARED UiPreviewPID AS LONG, TotalSelected AS LONG, FirstSelected AS LONG
|
|
DIM SHARED PreviewFormID AS LONG, PreviewSelectionRectangle AS INTEGER
|
|
DIM SHARED CheckPreviewTimer AS INTEGER, PreviewAttached AS _BYTE, AutoNameControls AS _BYTE
|
|
DIM SHARED LastKeyPress AS DOUBLE, CheckUpdates AS _BYTE
|
|
DIM SHARED UiEditorTitle$, Edited AS _BYTE, ZOrderingDialogOpen AS _BYTE
|
|
DIM SHARED OpenDialogOpen AS _BYTE, OverwriteOldFiles AS _BYTE
|
|
DIM SHARED RevertEdit AS _BYTE, OldColor AS _UNSIGNED LONG
|
|
DIM SHARED ColorPreviewWord$, BlinkStatusBar AS SINGLE, StatusBarBackColor AS _UNSIGNED LONG
|
|
DIM SHARED HostPort AS STRING, Host AS LONG, Client AS LONG
|
|
DIM SHARED Stream$, FormDataReceived AS _BYTE, LastFormData$
|
|
DIM SHARED prevScreenX AS INTEGER, prevScreenY AS INTEGER
|
|
DIM SHARED UndoPointer AS INTEGER, TotalUndoImages AS INTEGER
|
|
|
|
TYPE newInputBox
|
|
ID AS LONG
|
|
LabelID AS LONG
|
|
Signal AS INTEGER
|
|
LastEdited AS SINGLE
|
|
Sent AS _BYTE
|
|
END TYPE
|
|
|
|
CONST OffsetEditorPID = 1
|
|
CONST OffsetPreviewPID = 5
|
|
CONST OffsetWindowLeft = 9
|
|
CONST OffsetWindowTop = 11
|
|
CONST OffsetNewControl = 13
|
|
CONST OffsetNewDataFromEditor = 15
|
|
CONST OffsetNewDataFromPreview = 17
|
|
CONST OffsetTotalControlsSelected = 19
|
|
CONST OffsetFormID = 23
|
|
CONST OffsetFirstSelectedID = 27
|
|
CONST OffsetMenuPanelIsON = 31
|
|
CONST OffsetAutoName = 33
|
|
CONST OffsetShowPosSize = 35
|
|
CONST OffsetSnapLines = 37
|
|
CONST OffsetPropertyChanged = 39
|
|
CONST OffsetMouseSwapped = 41
|
|
CONST OffsetDefaultButtonID = 43
|
|
CONST OffsetOriginalImageWidth = 47
|
|
CONST OffsetOriginalImageHeight = 49
|
|
CONST OffsetSelectionRectangle = 51
|
|
CONST OffsetPropertyValue = 53
|
|
|
|
REDIM SHARED PreviewCaptions(0) AS STRING
|
|
REDIM SHARED PreviewTexts(0) AS STRING
|
|
REDIM SHARED PreviewMasks(0) AS STRING
|
|
REDIM SHARED PreviewTips(0) AS STRING
|
|
REDIM SHARED PreviewFonts(0) AS STRING
|
|
REDIM SHARED PreviewActualFonts(0) AS STRING
|
|
REDIM SHARED PreviewControls(0) AS __UI_ControlTYPE
|
|
REDIM SHARED PreviewParentIDS(0) AS STRING
|
|
REDIM SHARED zOrderIDs(0) AS LONG
|
|
REDIM SHARED InputBox(1 TO 100) AS newInputBox
|
|
REDIM SHARED Toggles(1 TO 100) AS LONG
|
|
REDIM SHARED InputBoxText(1 TO 100) AS STRING
|
|
DIM SHARED PreviewDefaultButtonID AS LONG
|
|
|
|
DIM SHARED HasFontList AS _BYTE, ShowFontList AS _BYTE
|
|
DIM SHARED BypassShowFontList AS _BYTE
|
|
DIM SHARED TotalFontsFound AS LONG
|
|
REDIM SHARED FontFile(0) AS STRING
|
|
|
|
$IF WIN THEN
|
|
CONST PathSep$ = "\"
|
|
$ELSE
|
|
CONST PathSep$ = "/"
|
|
$END IF
|
|
|
|
IF _FILEEXISTS("falcon.h") = 0 THEN RestoreFalcon
|
|
|
|
DIM SHARED CurrentPath$
|
|
DIM SHARED OpenDialog AS LONG
|
|
|
|
'CheckPreviewTimer = _FREETIMER
|
|
'ON TIMER(CheckPreviewTimer, .003) CheckPreview
|
|
|
|
UiEditorTitle$ = "InForm Designer"
|
|
|
|
$IF WIN THEN
|
|
DECLARE DYNAMIC LIBRARY "kernel32"
|
|
FUNCTION OpenProcess& (BYVAL dwDesiredAccess AS LONG, BYVAL bInheritHandle AS LONG, BYVAL dwProcessId AS LONG)
|
|
FUNCTION CloseHandle& (BYVAL hObject AS LONG)
|
|
FUNCTION GetExitCodeProcess& (BYVAL hProcess AS LONG, lpExitCode AS LONG)
|
|
END DECLARE
|
|
|
|
''Registry routines taken from the Wiki: http://www.qb64.net/wiki/index.php/Windows_Libraries#Registered_Fonts
|
|
''Code courtesy of Michael Calkins
|
|
''winreg.h
|
|
CONST HKEY_CLASSES_ROOT = &H80000000~&
|
|
CONST HKEY_CURRENT_USER = &H80000001~&
|
|
CONST HKEY_LOCAL_MACHINE = &H80000002~&
|
|
CONST HKEY_USERS = &H80000003~&
|
|
CONST HKEY_PERFORMANCE_DATA = &H80000004~&
|
|
CONST HKEY_CURRENT_CONFIG = &H80000005~&
|
|
CONST HKEY_DYN_DATA = &H80000006~&
|
|
CONST REG_OPTION_VOLATILE = 1
|
|
CONST REG_OPTION_NON_VOLATILE = 0
|
|
CONST REG_CREATED_NEW_KEY = 1
|
|
CONST REG_OPENED_EXISTING_KEY = 2
|
|
|
|
''http://msdn.microsoft.com/en-us/library/ms724884(v=VS.85).aspx
|
|
CONST REG_NONE = 0
|
|
CONST REG_SZ = 1
|
|
CONST REG_EXPAND_SZ = 2
|
|
CONST REG_BINARY = 3
|
|
CONST REG_DWORD_LITTLE_ENDIAN = 4
|
|
CONST REG_DWORD = 4
|
|
CONST REG_DWORD_BIG_ENDIAN = 5
|
|
CONST REG_LINK = 6
|
|
CONST REG_MULTI_SZ = 7
|
|
CONST REG_RESOURCE_LIST = 8
|
|
CONST REG_FULL_RESOURCE_DESCRIPTOR = 9
|
|
CONST REG_RESOURCE_REQUIREMENTS_LIST = 10
|
|
CONST REG_QWORD_LITTLE_ENDIAN = 11
|
|
CONST REG_QWORD = 11
|
|
CONST REG_NOTIFY_CHANGE_NAME = 1
|
|
CONST REG_NOTIFY_CHANGE_ATTRIBUTES = 2
|
|
CONST REG_NOTIFY_CHANGE_LAST_SET = 4
|
|
CONST REG_NOTIFY_CHANGE_SECURITY = 8
|
|
|
|
''http://msdn.microsoft.com/en-us/library/ms724878(v=VS.85).aspx
|
|
CONST KEY_ALL_ACCESS = &HF003F&
|
|
CONST KEY_CREATE_LINK = &H0020&
|
|
CONST KEY_CREATE_SUB_KEY = &H0004&
|
|
CONST KEY_ENUMERATE_SUB_KEYS = &H0008&
|
|
CONST KEY_EXECUTE = &H20019&
|
|
CONST KEY_NOTIFY = &H0010&
|
|
CONST KEY_QUERY_VALUE = &H0001&
|
|
CONST KEY_READ = &H20019&
|
|
CONST KEY_SET_VALUE = &H0002&
|
|
CONST KEY_WOW64_32KEY = &H0200&
|
|
CONST KEY_WOW64_64KEY = &H0100&
|
|
CONST KEY_WRITE = &H20006&
|
|
|
|
''winerror.h
|
|
''http://msdn.microsoft.com/en-us/library/ms681382(v=VS.85).aspx
|
|
CONST ERROR_SUCCESS = 0
|
|
CONST ERROR_FILE_NOT_FOUND = &H2&
|
|
CONST ERROR_INVALID_HANDLE = &H6&
|
|
CONST ERROR_MORE_DATA = &HEA&
|
|
CONST ERROR_NO_MORE_ITEMS = &H103&
|
|
|
|
DECLARE DYNAMIC LIBRARY "advapi32"
|
|
FUNCTION RegOpenKeyExA& (BYVAL hKey AS _OFFSET, BYVAL lpSubKey AS _OFFSET, BYVAL ulOptions AS _UNSIGNED LONG, BYVAL samDesired AS _UNSIGNED LONG, BYVAL phkResult AS _OFFSET)
|
|
FUNCTION RegCloseKey& (BYVAL hKey AS _OFFSET)
|
|
FUNCTION RegEnumValueA& (BYVAL hKey AS _OFFSET, BYVAL dwIndex AS _UNSIGNED LONG, BYVAL lpValueName AS _OFFSET, BYVAL lpcchValueName AS _OFFSET, BYVAL lpReserved AS _OFFSET, BYVAL lpType AS _OFFSET, BYVAL lpData AS _OFFSET, BYVAL lpcbData AS _OFFSET)
|
|
END DECLARE
|
|
$ELSE
|
|
DECLARE LIBRARY
|
|
FUNCTION PROCESS_CLOSED& ALIAS kill (BYVAL pid AS INTEGER, BYVAL signal AS INTEGER)
|
|
END DECLARE
|
|
$END IF
|
|
|
|
'$include:'ini.bi'
|
|
'$include:'InForm.ui'
|
|
'$include:'xp.uitheme'
|
|
'$include:'UiEditor.frm'
|
|
'$include:'ini.bm'
|
|
|
|
'Event procedures: ---------------------------------------------------------------
|
|
SUB __UI_Click (id AS LONG)
|
|
DIM Answer AS _BYTE, Dummy AS LONG, b$
|
|
STATIC LastClick#, LastClickedID AS LONG
|
|
|
|
SendSignal -8
|
|
|
|
SELECT EVERYCASE id
|
|
CASE AlignMenuAlignLeft: Dummy = 201
|
|
CASE AlignMenuAlignRight: Dummy = 202
|
|
CASE AlignMenuAlignTops: Dummy = 203
|
|
CASE AlignMenuAlignBottoms: Dummy = 204
|
|
CASE AlignMenuAlignCentersV: Dummy = 205
|
|
CASE AlignMenuAlignCentersH: Dummy = 206
|
|
CASE AlignMenuAlignCenterV: Dummy = 207
|
|
CASE AlignMenuAlignCenterH: Dummy = 208
|
|
CASE AlignMenuDistributeV: Dummy = 209
|
|
CASE AlignMenuDistributeH: Dummy = 210
|
|
CASE AlignMenuAlignLeft, AlignMenuAlignRight, AlignMenuAlignTops, _
|
|
AlignMenuAlignBottoms, AlignMenuAlignCentersV, AlignMenuAlignCentersH, _
|
|
AlignMenuAlignCenterV, AlignMenuAlignCenterH, AlignMenuDistributeV, _
|
|
AlignMenuDistributeH
|
|
b$ = MKI$(0)
|
|
SendData b$, Dummy
|
|
CASE OptionsMenuAutoName
|
|
AutoNameControls = NOT AutoNameControls
|
|
Control(id).Value = AutoNameControls
|
|
SaveSettings
|
|
CASE OptionsMenuCheckUpdates
|
|
CheckUpdates = NOT CheckUpdates
|
|
Control(id).Value = CheckUpdates
|
|
SaveSettings
|
|
CASE EditMenuSetDefaultButton
|
|
SendSignal -6
|
|
CASE EditMenuRestoreDimensions
|
|
SendSignal -7
|
|
CASE OptionsMenuSwapButtons
|
|
__UI_MouseButtonsSwap = NOT __UI_MouseButtonsSwap
|
|
Control(id).Value = __UI_MouseButtonsSwap
|
|
SaveSettings
|
|
CASE OptionsMenuSnapLines
|
|
__UI_SnapLines = NOT __UI_SnapLines
|
|
Control(id).Value = __UI_SnapLines
|
|
SaveSettings
|
|
CASE InsertMenuMenuBar
|
|
b$ = "NEWCONTROL>" + MKI$(__UI_Type_MenuBar) + "<END>"
|
|
PUT #Client, , b$
|
|
CASE InsertMenuMenuItem
|
|
b$ = "NEWCONTROL>" + MKI$(__UI_Type_MenuItem) + "<END>"
|
|
PUT #Client, , b$
|
|
CASE ViewMenuPreviewDetach
|
|
PreviewAttached = NOT PreviewAttached
|
|
Control(id).Value = PreviewAttached
|
|
SaveSettings
|
|
CASE AddButton: Dummy = __UI_Type_Button
|
|
CASE AddLabel: Dummy = __UI_Type_Label
|
|
CASE AddTextBox: Dummy = __UI_Type_TextBox
|
|
CASE AddCheckBox: Dummy = __UI_Type_CheckBox
|
|
CASE AddRadioButton: Dummy = __UI_Type_RadioButton
|
|
CASE AddListBox: Dummy = __UI_Type_ListBox
|
|
CASE AddDropdownList: Dummy = __UI_Type_DropdownList
|
|
CASE AddTrackBar: Dummy = __UI_Type_TrackBar
|
|
CASE AddProgressBar: Dummy = __UI_Type_ProgressBar
|
|
CASE AddPictureBox: Dummy = __UI_Type_PictureBox
|
|
CASE AddFrame: Dummy = __UI_Type_Frame
|
|
CASE AddToggleSwitch: Dummy = __UI_Type_ToggleSwitch
|
|
CASE AddButton, AddLabel, AddTextBox, AddCheckBox, _
|
|
AddRadioButton, AddListBox, AddDropdownList, _
|
|
AddTrackBar, AddProgressBar, AddPictureBox, AddFrame, _
|
|
AddToggleSwitch
|
|
b$ = "NEWCONTROL>" + MKI$(Dummy) + "<END>"
|
|
PUT #Client, , b$
|
|
CASE AddNumericBox
|
|
b$ = MKI$(0)
|
|
SendData b$, 222
|
|
CASE Stretch
|
|
b$ = MKI$(Control(id).Value)
|
|
SendData b$, 14
|
|
CASE HasBorder
|
|
b$ = MKI$(Control(id).Value)
|
|
SendData b$, 15
|
|
CASE Transparent
|
|
b$ = MKI$(Control(Transparent).Value)
|
|
SendData b$, 28
|
|
CASE ShowPercentage
|
|
b$ = MKI$(Control(id).Value)
|
|
SendData b$, 16
|
|
CASE WordWrap
|
|
b$ = MKI$(Control(id).Value)
|
|
SendData b$, 17
|
|
CASE CanHaveFocus
|
|
b$ = MKI$(Control(id).Value)
|
|
SendData b$, 18
|
|
CASE ColorPreview
|
|
_CLIPBOARD$ = ColorPreviewWord$
|
|
CASE Disabled
|
|
b$ = MKI$(Control(id).Value)
|
|
SendData b$, 19
|
|
CASE Hidden
|
|
b$ = MKI$(Control(id).Value)
|
|
SendData b$, 20
|
|
CASE CenteredWindow
|
|
b$ = MKI$(Control(id).Value)
|
|
SendData b$, 21
|
|
CASE Resizable
|
|
b$ = MKI$(Control(id).Value)
|
|
SendData b$, 29
|
|
CASE PasswordMaskCB
|
|
b$ = MKI$(Control(id).Value)
|
|
SendData b$, 33
|
|
CASE AutoScroll
|
|
b$ = MKI$(Control(id).Value)
|
|
SendData b$, 38
|
|
CASE ViewMenuPreview
|
|
$IF WIN THEN
|
|
SHELL _DONTWAIT ".\InForm\UiEditorPreview.exe " + HostPort
|
|
$ELSE
|
|
SHELL _DONTWAIT "./InForm/UiEditorPreview " + HostPort
|
|
$END IF
|
|
CASE ViewMenuLoadedFonts
|
|
DIM Temp$
|
|
Temp$ = "These fonts are currently in use in your form:" + CHR$(10)
|
|
FOR Dummy = 1 TO UBOUND(PreviewFonts)
|
|
IF LEN(PreviewFonts(Dummy)) THEN
|
|
Temp$ = Temp$ + CHR$(10)
|
|
Temp$ = Temp$ + PreviewFonts(Dummy)
|
|
END IF
|
|
NEXT
|
|
IF LEN(Temp$) THEN
|
|
Answer = MessageBox(Temp$, "Loaded fonts", MsgBox_OkOnly + MsgBox_Information)
|
|
ELSE
|
|
Answer = MessageBox("There are no fonts loaded.", "", MsgBox_OkOnly + MsgBox_Critical)
|
|
END IF
|
|
CASE FileMenuNew
|
|
IF Edited THEN
|
|
$IF WIN THEN
|
|
Answer = MessageBox("Save the current form?", "", MsgBox_YesNoCancel + MsgBox_Question)
|
|
$ELSE
|
|
Answer = MessageBox("Save the current form?", "", MsgBox_YesNo + MsgBox_Question)
|
|
$END IF
|
|
IF Answer = MsgBox_Cancel THEN
|
|
EXIT SUB
|
|
ELSEIF Answer = MsgBox_Yes THEN
|
|
SaveForm False, False
|
|
END IF
|
|
END IF
|
|
|
|
__UI_Focus = 0
|
|
LastFormData$ = ""
|
|
Stream$ = ""
|
|
FormDataReceived = False
|
|
Edited = False
|
|
SendSignal -5
|
|
CASE FileMenuSaveFrm
|
|
SaveForm True, True
|
|
CASE FileMenuSave
|
|
SaveForm True, False
|
|
CASE HelpMenuAbout
|
|
Answer = MessageBox(UiEditorTitle$ + " " + __UI_Version + CHR$(10) + "by Fellippe Heitor" + CHR$(10) + CHR$(10) + "Twitter: @fellippeheitor" + CHR$(10) + "e-mail: fellippe@qb64.org", "About", MsgBox_OkOnly + MsgBox_Information)
|
|
CASE HelpMenuHelp
|
|
Answer = MessageBox("Design a form and export the resulting code to generate an event-driven QB64 program.", "What's all this?", MsgBox_OkOnly + MsgBox_Information)
|
|
CASE FileMenuExit
|
|
IF Edited THEN
|
|
$IF WIN THEN
|
|
Answer = MessageBox("Save the current form before leaving?", "", MsgBox_YesNoCancel + MsgBox_Question)
|
|
$ELSE
|
|
Answer = MessageBox("Save the current form before leaving?", "", MsgBox_YesNo + MsgBox_Question)
|
|
$END IF
|
|
IF Answer = MsgBox_Cancel THEN
|
|
EXIT SUB
|
|
ELSEIF Answer = MsgBox_Yes THEN
|
|
SaveForm False, False
|
|
END IF
|
|
END IF
|
|
SYSTEM
|
|
CASE EditMenuZOrdering
|
|
'Fill the list:
|
|
Caption(StatusBar) = "Editing z-ordering/tab ordering..."
|
|
DIM j AS LONG, i AS LONG
|
|
STATIC Moving AS _BYTE
|
|
REDIM _PRESERVE zOrderIDs(1 TO UBOUND(PreviewControls)) AS LONG
|
|
ReloadZList:
|
|
ResetList ControlList
|
|
FOR i = 1 TO UBOUND(PreviewControls)
|
|
SELECT CASE PreviewControls(i).Type
|
|
CASE 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 18
|
|
j = j + 1
|
|
zOrderIDs(j) = i
|
|
AddItem ControlList, __UI_Type(PreviewControls(i).Type).Name + RTRIM$(PreviewControls(i).Name)
|
|
END SELECT
|
|
NEXT
|
|
IF Moving THEN RETURN
|
|
Control(DialogBG).Left = 0: Control(DialogBG).Top = 0
|
|
Control(ZOrdering).Left = 18: Control(ZOrdering).Top = 40
|
|
__UI_Focus = ControlList
|
|
ZOrderingDialogOpen = True
|
|
CASE CloseZOrderingBT
|
|
Caption(StatusBar) = "Ready."
|
|
Control(DialogBG).Left = -600: Control(DialogBG).Top = -600
|
|
Control(ZOrdering).Left = -600: Control(ZOrdering).Top = -600
|
|
__UI_Focus = 0
|
|
ZOrderingDialogOpen = False
|
|
CASE UpBT
|
|
DIM PrevListValue AS LONG
|
|
PrevListValue = Control(ControlList).Value
|
|
b$ = MKL$(zOrderIDs(Control(ControlList).Value)) + MKL$(zOrderIDs(Control(ControlList).Value - 1))
|
|
SendData b$, 211
|
|
_DELAY .1
|
|
Moving = True: GOSUB ReloadZList
|
|
Moving = False
|
|
Control(ControlList).Value = PrevListValue - 1
|
|
__UI_Focus = ControlList
|
|
__UI_ValueChanged ControlList
|
|
CASE DownBT
|
|
PrevListValue = Control(ControlList).Value
|
|
b$ = MKL$(zOrderIDs(Control(ControlList).Value)) + MKL$(zOrderIDs(Control(ControlList).Value + 1))
|
|
SendData b$, 212
|
|
_DELAY .1
|
|
Moving = True: GOSUB ReloadZList
|
|
Moving = False
|
|
Control(ControlList).Value = PrevListValue + 1
|
|
__UI_Focus = ControlList
|
|
__UI_ValueChanged ControlList
|
|
CASE FileMenuOpen
|
|
IF Edited THEN
|
|
$IF WIN THEN
|
|
Answer = MessageBox("Save the current form?", "", MsgBox_YesNoCancel + MsgBox_Question)
|
|
$ELSE
|
|
Answer = MessageBox("Save the current form?", "", MsgBox_YesNo + MsgBox_Question)
|
|
$END IF
|
|
IF Answer = MsgBox_Cancel THEN
|
|
EXIT SUB
|
|
ELSEIF Answer = MsgBox_Yes THEN
|
|
SaveForm False, False
|
|
END IF
|
|
END IF
|
|
|
|
'Hide the preview
|
|
SendSignal -2
|
|
|
|
'Refresh the file list control's contents
|
|
DIM TotalFiles%
|
|
IF CurrentPath$ = "" THEN CurrentPath$ = _STARTDIR$
|
|
Text(FileList) = idezfilelist$(CurrentPath$, Control(ShowOnlyFrmbinFilesCB).Value + 1, 1, TotalFiles%)
|
|
Control(FileList).Max = TotalFiles%
|
|
Control(FileList).LastVisibleItem = 0 'Reset it so it's recalculated
|
|
|
|
Control(DialogBG).Left = 0: Control(DialogBG).Top = 0
|
|
Control(OpenFrame).Left = 18: Control(OpenFrame).Top = 40
|
|
OpenDialogOpen = True
|
|
Caption(StatusBar) = "Select a form file to load..."
|
|
__UI_Focus = FileNameTextBox
|
|
IF LEN(Text(FileNameTextBox)) > 0 THEN
|
|
Control(FileNameTextBox).SelectionStart = 0
|
|
Control(FileNameTextBox).Cursor = LEN(Text(FileNameTextBox))
|
|
Control(FileNameTextBox).TextIsSelected = True
|
|
END IF
|
|
__UI_ForceRedraw = True
|
|
CASE CancelBT
|
|
Text(FileNameTextBox) = ""
|
|
Control(DialogBG).Left = -600: Control(DialogBG).Top = -600
|
|
Control(OpenFrame).Left = -600: Control(OpenFrame).Top = -600
|
|
OpenDialogOpen = False
|
|
Caption(StatusBar) = "Ready."
|
|
'Show the preview
|
|
SendSignal -3
|
|
|
|
__UI_Focus = 0
|
|
__UI_ForceRedraw = True
|
|
CASE OpenBT
|
|
OpenFile:
|
|
IF OpenDialogOpen THEN
|
|
DIM FileToOpen$, FreeFileNum AS INTEGER
|
|
FileToOpen$ = CurrentPath$ + PathSep$ + Text(FileNameTextBox)
|
|
IF _FILEEXISTS(FileToOpen$) THEN
|
|
b$ = "OPENFILE>" + FileToOpen$ + "<END>"
|
|
PUT #Client, , b$
|
|
|
|
SendSignal -4
|
|
|
|
Control(DialogBG).Left = -600: Control(DialogBG).Top = -600
|
|
Control(OpenFrame).Left = -600: Control(OpenFrame).Top = -600
|
|
Control(FileList).FirstVisibleLine = 1
|
|
Control(FileList).InputViewStart = 1
|
|
Control(FileList).Value = 0
|
|
Control(FileList).LastVisibleItem = 0 'Reset it so it's recalculated
|
|
Control(DirList).FirstVisibleLine = 1
|
|
Control(DirList).InputViewStart = 1
|
|
Control(DirList).Value = 0
|
|
Control(DirList).LastVisibleItem = 0 'Reset it so it's recalculated
|
|
OpenDialogOpen = False
|
|
Caption(StatusBar) = "Ready."
|
|
__UI_Focus = 0
|
|
Edited = False
|
|
LastFormData$ = ""
|
|
Stream$ = ""
|
|
FormDataReceived = False
|
|
ELSE
|
|
Answer = MessageBox("File not found.", "", MsgBox_OkOnly + MsgBox_Critical)
|
|
Control(FileList).Value = 0
|
|
END IF
|
|
END IF
|
|
CASE FileList
|
|
Text(FileNameTextBox) = GetItem(FileList, Control(FileList).Value)
|
|
Control(DirList).Value = 0
|
|
IF Control(FileList).HoveringVScrollbarButton = 0 AND LastClickedID = id AND TIMER - LastClick# < .3 THEN 'Double click
|
|
IF LEN(Text(FileNameTextBox)) > 0 THEN GOTO OpenFile
|
|
END IF
|
|
CASE DirList
|
|
Text(FileNameTextBox) = GetItem(DirList, Control(DirList).Value)
|
|
Control(FileList).Value = 0
|
|
IF LastClickedID = id AND TIMER - LastClick# < .3 THEN 'Double click
|
|
CurrentPath$ = idezchangepath(CurrentPath$, Text(FileNameTextBox))
|
|
Caption(PathLB) = "Path: " + CurrentPath$
|
|
Text(DirList) = idezpathlist$(CurrentPath$, TotalFiles%)
|
|
Control(DirList).Max = TotalFiles%
|
|
Control(DirList).LastVisibleItem = 0 'Reset it so it's recalculated
|
|
Control(DirList).Value = 0
|
|
GOTO ReloadList
|
|
END IF
|
|
CASE ShowOnlyFrmbinFilesCB
|
|
ReloadList:
|
|
Text(FileList) = idezfilelist$(CurrentPath$, Control(ShowOnlyFrmbinFilesCB).Value + 1, 1, TotalFiles%)
|
|
Control(FileList).Max = TotalFiles%
|
|
Control(FileList).FirstVisibleLine = 1
|
|
Control(FileList).InputViewStart = 1
|
|
Control(FileList).Value = 0
|
|
Control(FileList).LastVisibleItem = 0 'Reset it so it's recalculated
|
|
CASE EditMenuUndo
|
|
SendSignal 214
|
|
CASE EditMenuRedo
|
|
SendSignal 215
|
|
CASE EditMenuCopy
|
|
b$ = MKI$(0)
|
|
SendData b$, 217
|
|
CASE EditMenuPaste
|
|
b$ = MKI$(0)
|
|
SendData b$, 218
|
|
CASE EditMenuCut
|
|
b$ = MKI$(0)
|
|
SendData b$, 219
|
|
CASE EditMenuDelete
|
|
b$ = MKI$(0)
|
|
SendData b$, 220
|
|
CASE EditMenuSelectAll
|
|
b$ = MKI$(0)
|
|
SendData b$, 221
|
|
CASE EditMenuAllowMinMax
|
|
b$ = MKI$(0)
|
|
SendData b$, 223
|
|
CASE EditMenuCP437
|
|
b$ = MKL$(437)
|
|
SendData b$, 34 'Encoding
|
|
CASE EditMenuCP1252
|
|
b$ = MKL$(1252)
|
|
SendData b$, 34 'Encoding
|
|
CASE ViewMenuShowPositionAndSize
|
|
__UI_ShowPositionAndSize = NOT __UI_ShowPositionAndSize
|
|
Control(id).Value = __UI_ShowPositionAndSize
|
|
SaveSettings
|
|
CASE FontSwitchMenuSwitch, FontLB, FontListLB
|
|
ShowFontList = NOT ShowFontList
|
|
IF id <> FontSwitchMenuSwitch THEN __UI_MouseEnter FontLB
|
|
SaveSettings
|
|
__UI_ForceRedraw = True
|
|
END SELECT
|
|
|
|
LastClickedID = id
|
|
LastClick# = TIMER
|
|
IF Caption(StatusBar) = "" THEN Caption(StatusBar) = "Ready."
|
|
END SUB
|
|
|
|
SUB __UI_MouseEnter (id AS LONG)
|
|
SELECT CASE id
|
|
CASE FileMenuNew
|
|
Caption(StatusBar) = "Creates a new project."
|
|
CASE FileMenuOpen
|
|
Caption(StatusBar) = "Loads an existing project from disk."
|
|
CASE FileMenuExit
|
|
Caption(StatusBar) = "Exits the editor."
|
|
CASE FileMenuSave
|
|
Caption(StatusBar) = "Saves the current project to disk."
|
|
CASE FileMenuSaveFrm
|
|
Caption(StatusBar) = "Saves only the current .frm file to disk."
|
|
CASE FileMenuSave
|
|
Caption(StatusBar) = "Saves the current project to disk."
|
|
CASE EditMenuUndo
|
|
Caption(StatusBar) = "Undoes the last edit."
|
|
CASE EditMenuRedo
|
|
Caption(StatusBar) = "Redoes the last undone edit."
|
|
CASE EditMenuCut
|
|
Caption(StatusBar) = "Removes the selected controls and copies them to the Clipboard."
|
|
CASE EditMenuCopy
|
|
Caption(StatusBar) = "Copies the selected controls to the Clipboard."
|
|
CASE EditMenuPaste
|
|
Caption(StatusBar) = "Inserts controls previously cut or copied from the Clipboard."
|
|
CASE EditMenuDelete
|
|
Caption(StatusBar) = "Removes the selected controls."
|
|
CASE EditMenuSelectAll
|
|
Caption(StatusBar) = "Selects all controls."
|
|
CASE EditMenuCP437
|
|
Caption(StatusBar) = "Applies code page 437 to the current form."
|
|
CASE EditMenuCP1252
|
|
Caption(StatusBar) = "Applies code page 1252 to the current form."
|
|
CASE EditMenuSetDefaultButton
|
|
Caption(StatusBar) = "Makes the currently selected button the default button."
|
|
CASE EditMenuRestoreDimensions
|
|
Caption(StatusBar) = "Makes this control have the same dimensions as the loaded image."
|
|
CASE EditMenuAllowMinMax
|
|
Caption(StatusBar) = "Enables the .Min and .Max properties for NumericTextBox controls."
|
|
CASE EditMenuZOrdering
|
|
Caption(StatusBar) = "Allows you to change tab-order/z-ordering of controls."
|
|
CASE ViewMenuPreviewDetach
|
|
Caption(StatusBar) = "Toggles whether the preview form will be moved with the editor."
|
|
CASE ViewMenuShowPositionAndSize
|
|
Caption(StatusBar) = "Toggles whether size and position indicators will be shown in the preview."
|
|
CASE ViewMenuPreview
|
|
Caption(StatusBar) = "Launches the preview window in case it's been closed accidentaly."
|
|
CASE ViewMenuLoadedFonts
|
|
Caption(StatusBar) = "Shows a list of all fonts in use in the current form."
|
|
CASE InsertMenuMenuBar
|
|
Caption(StatusBar) = "Inserts a new MenuBar control."
|
|
CASE InsertMenuMenuItem
|
|
Caption(StatusBar) = "Inserts a new MenuItem control in the currently selected menu panel."
|
|
CASE OptionsMenuSnapLines
|
|
Caption(StatusBar) = "Toggles whether controls edges are automatically snapped to others."
|
|
CASE OptionsMenuAutoName
|
|
Caption(StatusBar) = "Automatically sets control names based on caption and type"
|
|
CASE OptionsMenuSwapButtons
|
|
Caption(StatusBar) = "Toggles left/right mouse buttons."
|
|
CASE FontLB, FontListLB
|
|
Control(FontLB).BackColor = Darken(__UI_DefaultColor(__UI_Type_Form, 2), 90)
|
|
Control(FontListLB).BackColor = Darken(__UI_DefaultColor(__UI_Type_Form, 2), 90)
|
|
Caption(FontLB) = "Font (toggle)"
|
|
Caption(FontListLB) = "Font (toggle)"
|
|
CASE ELSE
|
|
IF Control(id).Type = __UI_Type_MenuItem OR Control(id).Type = __UI_Type_MenuBar THEN
|
|
Caption(StatusBar) = ""
|
|
END IF
|
|
END SELECT
|
|
END SUB
|
|
|
|
SUB __UI_MouseLeave (id AS LONG)
|
|
SELECT CASE id
|
|
CASE FontLB, FontListLB
|
|
Control(FontLB).BackColor = __UI_DefaultColor(__UI_Type_Form, 2)
|
|
Control(FontListLB).BackColor = __UI_DefaultColor(__UI_Type_Form, 2)
|
|
Caption(FontLB) = "Font"
|
|
Caption(FontListLB) = "Font"
|
|
END SELECT
|
|
END SUB
|
|
|
|
SUB __UI_FocusIn (id AS LONG)
|
|
SELECT CASE id
|
|
CASE NameTB, CaptionTB, TextTB, MaskTB, TopTB, LeftTB, WidthTB, HeightTB, FontTB, TooltipTB, ValueTB, MinTB, MaxTB, IntervalTB, PaddingTB, MinIntervalTB
|
|
DIM ThisInputBox AS LONG
|
|
ThisInputBox = GetInputBoxFromID(id)
|
|
InputBoxText(ThisInputBox) = Text(id)
|
|
InputBox(ThisInputBox).Sent = False
|
|
Caption(StatusBar) = "Editing property"
|
|
CASE FileNameTextBox
|
|
IF OpenDialogOpen = False THEN __UI_Focus = AddButton
|
|
CASE ControlList
|
|
IF OpenDialogOpen THEN __UI_Focus = FileNameTextBox
|
|
CASE BlueValue
|
|
IF OpenDialogOpen THEN __UI_Focus = CancelBT
|
|
CASE CloseZOrderingBT
|
|
IF ZOrderingDialogOpen = False THEN __UI_Focus = BlueValue
|
|
CASE AddButton
|
|
IF ZOrderingDialogOpen THEN __UI_Focus = ControlList
|
|
CASE CancelBT
|
|
IF ZOrderingDialogOpen THEN __UI_Focus = CloseZOrderingBT
|
|
END SELECT
|
|
END SUB
|
|
|
|
SUB __UI_FocusOut (id AS LONG)
|
|
SELECT CASE id
|
|
CASE NameTB, CaptionTB, TextTB, MaskTB, TopTB, LeftTB, WidthTB, HeightTB, FontTB, TooltipTB, ValueTB, MinTB, MaxTB, IntervalTB, PaddingTB, MinIntervalTB
|
|
DIM ThisInputBox AS LONG
|
|
ThisInputBox = GetInputBoxFromID(id)
|
|
IF InputBoxText(ThisInputBox) <> Text(id) AND InputBox(ThisInputBox).Sent = False THEN
|
|
__UI_KeepFocus = True
|
|
Caption(StatusBar) = "Hit ENTER to confirm new property value or ESC to cancel changes..."
|
|
BlinkStatusBar = TIMER
|
|
ELSE
|
|
Caption(StatusBar) = "Ready."
|
|
END IF
|
|
END SELECT
|
|
END SUB
|
|
|
|
SUB __UI_MouseDown (id AS LONG)
|
|
SELECT CASE id
|
|
CASE Red, Green, Blue
|
|
Caption(StatusBar) = "Color picker active. Release to apply the new values..."
|
|
DIM TempID AS LONG
|
|
SELECT CASE Control(ColorPropertiesList).Value
|
|
CASE 1
|
|
OldColor = PreviewControls(FirstSelected).ForeColor
|
|
IF OldColor = 0 THEN OldColor = PreviewControls(PreviewFormID).ForeColor
|
|
IF OldColor = 0 THEN OldColor = __UI_DefaultColor(__UI_Type_Form, 1)
|
|
CASE 2
|
|
OldColor = PreviewControls(FirstSelected).BackColor
|
|
IF OldColor = 0 THEN OldColor = PreviewControls(PreviewFormID).BackColor
|
|
IF OldColor = 0 THEN OldColor = __UI_DefaultColor(__UI_Type_Form, 2)
|
|
CASE 3
|
|
OldColor = PreviewControls(FirstSelected).SelectedForeColor
|
|
IF OldColor = 0 THEN OldColor = PreviewControls(PreviewFormID).SelectedForeColor
|
|
IF OldColor = 0 THEN OldColor = __UI_DefaultColor(__UI_Type_Form, 3)
|
|
CASE 4
|
|
OldColor = PreviewControls(FirstSelected).SelectedBackColor
|
|
IF OldColor = 0 THEN OldColor = PreviewControls(PreviewFormID).SelectedBackColor
|
|
IF OldColor = 0 THEN OldColor = __UI_DefaultColor(__UI_Type_Form, 4)
|
|
CASE 5
|
|
OldColor = PreviewControls(FirstSelected).BorderColor
|
|
IF OldColor = 0 THEN OldColor = PreviewControls(PreviewFormID).BorderColor
|
|
IF OldColor = 0 THEN OldColor = __UI_DefaultColor(__UI_Type_Form, 5)
|
|
END SELECT
|
|
END SELECT
|
|
END SUB
|
|
|
|
SUB __UI_MouseUp (id AS LONG)
|
|
SELECT CASE id
|
|
CASE Red, Green, Blue
|
|
'Compose a new color and send it to the preview
|
|
SendNewRGB
|
|
Caption(StatusBar) = "Color changed."
|
|
END SELECT
|
|
END SUB
|
|
|
|
SUB SendNewRGB
|
|
DIM b$, NewColor AS _UNSIGNED LONG
|
|
NewColor = _RGB32(Control(Red).Value, Control(Green).Value, Control(Blue).Value)
|
|
b$ = _MK$(_UNSIGNED LONG, NewColor)
|
|
SendData b$, Control(ColorPropertiesList).Value + 22
|
|
END SUB
|
|
|
|
FUNCTION PropertyFullySelected%% (id AS LONG)
|
|
PropertyFullySelected%% = Control(id).TextIsSelected AND _
|
|
Control(id).SelectionStart = 0 AND _
|
|
Control(id).Cursor = LEN(Text(id))
|
|
END FUNCTION
|
|
|
|
SUB SelectPropertyFully (id AS LONG)
|
|
Control(id).TextIsSelected = True
|
|
Control(id).SelectionStart = 0
|
|
Control(id).Cursor = LEN(Text(id))
|
|
END SUB
|
|
|
|
SUB SelectFontInList (FontSetup$)
|
|
DIM i AS LONG, thisFile$, thisSize%
|
|
|
|
IF FontSetup$ = "" THEN EXIT SUB
|
|
|
|
thisFile$ = UCASE$(LEFT$(FontSetup$, INSTR(FontSetup$, ",") - 1))
|
|
thisSize% = VAL(MID$(FontSetup$, INSTR(FontSetup$, ",") + 1))
|
|
|
|
Control(FontSizeList).Value = thisSize% - 7
|
|
IF LEN(thisFile$) > 0 THEN
|
|
FOR i = 1 TO UBOUND(FontFile)
|
|
IF UCASE$(RIGHT$(FontFile(i), LEN(thisFile$))) = thisFile$ THEN
|
|
Control(FontList).Value = i
|
|
BypassShowFontList = False
|
|
EXIT SUB
|
|
END IF
|
|
NEXT
|
|
END IF
|
|
|
|
'If this line is reached, the currently open form
|
|
'uses a non-system font. In that case we must
|
|
'disable the list.
|
|
BypassShowFontList = True
|
|
END SUB
|
|
|
|
SUB LoseFocus
|
|
IF __UI_ActiveMenu > 0 THEN __UI_DestroyControl Control(__UI_ActiveMenu)
|
|
IF __UI_ActiveDropdownList > 0 THEN __UI_DestroyControl Control(__UI_ActiveDropdownList)
|
|
__UI_Focus = 0
|
|
__UI_ForceRedraw = True
|
|
END SUB
|
|
|
|
SUB __UI_BeforeUpdateDisplay
|
|
DIM b$, c$
|
|
DIM i AS LONG, j AS LONG, Answer AS _BYTE
|
|
STATIC OriginalImageWidth AS INTEGER, OriginalImageHeight AS INTEGER
|
|
STATIC PrevFirstSelected AS LONG, PreviewHasMenuActive AS INTEGER
|
|
STATIC CheckUpdateDone AS _BYTE
|
|
|
|
STATIC LastChange AS SINGLE
|
|
IF TIMER - BlinkStatusBar < 1 THEN
|
|
IF TIMER - LastChange > .2 THEN
|
|
IF Control(StatusBar).BackColor = StatusBarBackColor THEN
|
|
Control(StatusBar).BackColor = _RGB32(222, 194, 127)
|
|
ELSE
|
|
Control(StatusBar).BackColor = StatusBarBackColor
|
|
END IF
|
|
Control(StatusBar).Redraw = True
|
|
LastChange = TIMER
|
|
END IF
|
|
ELSE
|
|
Control(StatusBar).BackColor = StatusBarBackColor
|
|
Control(StatusBar).Redraw = True
|
|
END IF
|
|
|
|
IF __UI_Focus = 0 THEN
|
|
IF Caption(StatusBar) = "" THEN Caption(StatusBar) = "Ready."
|
|
END IF
|
|
|
|
IF CheckUpdates THEN
|
|
IF CheckUpdateDone = False THEN
|
|
STATIC ThisStep AS INTEGER
|
|
DIM Result$, start!
|
|
IF ThisStep = 0 THEN ThisStep = 1
|
|
|
|
SELECT EVERYCASE ThisStep
|
|
CASE 1 'check availability
|
|
start! = TIMER
|
|
Result$ = Download$("www.qb64.org/inform/update/latest.ini", "InForm/InFormUpdate.ini", 30)
|
|
SELECT CASE CVI(LEFT$(Result$, 2))
|
|
CASE 1 'Success
|
|
ThisStep = 2
|
|
CASE 2, 3 'Can't reach server / Timeout
|
|
IF TIMER - start! > 5 THEN
|
|
CheckUpdates = False
|
|
Control(OptionsMenuCheckUpdates).Value = CheckUpdates
|
|
SaveSettings
|
|
END IF
|
|
CheckUpdateDone = True
|
|
END SELECT
|
|
CASE 2 'compare with current version
|
|
DIM localVersionNumber!, localVersionIsBeta%%
|
|
STATIC serverVersion$, isBeta$, serverBeta%%
|
|
STATIC updateDescription$
|
|
|
|
localVersionNumber! = VAL(ReadSetting("InForm/InFormVersion.bas", "", "CONST __UI_VersionNumber"))
|
|
localVersionIsBeta%% = ReadSetting("InForm/InFormVersion.bas", "", "CONST __UI_VersionIsBeta") = "True"
|
|
|
|
serverVersion$ = ReadSetting("InForm/InFormUpdate.ini", "", "version")
|
|
isBeta$ = ReadSetting("InForm/InFormUpdate.ini", "", "beta")
|
|
updateDescription$ = ReadSetting("InForm/InFormUpdate.ini", "", "description")
|
|
IF isBeta$ = "true" THEN isBeta$ = "Beta version " ELSE isBeta$ = ""
|
|
serverBeta%% = True
|
|
|
|
IF localVersionIsBeta%% THEN
|
|
IF serverBeta%% AND VAL(serverVersion$) <= localVersionNumber! THEN
|
|
CheckUpdateDone = True
|
|
END IF
|
|
ELSE
|
|
IF VAL(serverVersion$) <= localVersionNumber! THEN
|
|
CheckUpdateDone = True
|
|
END IF
|
|
END IF
|
|
|
|
ThisStep = 3
|
|
EXIT SUB
|
|
CASE 3 'An update is available.
|
|
Result$ = Download$("", "", 30) 'close connection
|
|
CheckUpdateDone = True
|
|
DIM updaterPath$
|
|
$IF WIN THEN
|
|
updaterPath$ = ".\InForm\updater\InFormUpdater.exe"
|
|
$ELSE
|
|
updaterPath$ = "./InForm/updater/InFormUpdater"
|
|
$END IF
|
|
IF _FILEEXISTS(updaterPath$) THEN
|
|
_DELAY .2
|
|
IF LEN(updateDescription$) THEN
|
|
updateDescription$ = "\n" + CHR$(34) + updateDescription$ + CHR$(34) + "\n"
|
|
END IF
|
|
b$ = "A new version of InForm is available.\n\nCurrent version: " + __UI_Version + "\n" + "New version: " + isBeta$ + serverVersion$ + "\n" + updateDescription$ + "\n" + "Update now?"
|
|
Answer = MessageBox(b$, "", MsgBox_YesNo + MsgBox_Question)
|
|
IF Answer = MsgBox_Yes THEN
|
|
SHELL _DONTWAIT updaterPath$
|
|
SYSTEM
|
|
END IF
|
|
END IF
|
|
END SELECT
|
|
END IF
|
|
END IF
|
|
|
|
CheckPreview
|
|
|
|
DIM incomingData$, Signal$
|
|
|
|
GET #Client, , incomingData$
|
|
Stream$ = Stream$ + incomingData$
|
|
STATIC bytesIn~&, refreshes~&
|
|
refreshes~& = refreshes~& + 1
|
|
bytesIn~& = bytesIn~& + LEN(incomingData$)
|
|
Caption(StatusBar) = LTRIM$(STR$(refreshes~&)) + ": " + LTRIM$(STR$(bytesIn~&)) + " bytes received. (" + Stream$ + "...)"
|
|
|
|
$IF WIN THEN
|
|
IF PreviewAttached THEN
|
|
IF prevScreenX <> _SCREENX OR prevScreenY <> _SCREENY THEN
|
|
prevScreenX = _SCREENX
|
|
prevScreenY = _SCREENY
|
|
b$ = "WINDOWPOSITION>" + MKI$(_SCREENX) + MKI$(_SCREENY) + "<END>"
|
|
PUT #Client, , b$
|
|
END IF
|
|
ELSE
|
|
IF prevScreenX <> -32001 OR prevScreenY <> -32001 THEN
|
|
prevScreenX = -32001
|
|
prevScreenY = -32001
|
|
b$ = "WINDOWPOSITION>" + MKI$(-32001) + MKI$(-32001) + "<END>"
|
|
PUT #Client, , b$
|
|
END IF
|
|
END IF
|
|
$ELSE
|
|
IF PreviewAttached = True THEN
|
|
PreviewAttached = False
|
|
SaveSettings
|
|
END IF
|
|
Control(ViewMenuPreviewDetach).Disabled = True
|
|
Control(ViewMenuPreviewDetach).Value = False
|
|
$END IF
|
|
|
|
STATIC prevAutoName AS _BYTE, prevMouseSwap AS _BYTE
|
|
STATIC prevShowPos AS _BYTE, prevSnapLines AS _BYTE
|
|
STATIC SignalsFirstSent AS _BYTE
|
|
|
|
IF prevAutoName <> AutoNameControls OR SignalsFirstSent = False THEN
|
|
prevAutoName = AutoNameControls
|
|
b$ = "AUTONAME>" + MKI$(AutoNameControls) + "<END>"
|
|
PUT #Client, , b$
|
|
END IF
|
|
|
|
IF prevMouseSwap <> __UI_MouseButtonsSwap OR SignalsFirstSent = False THEN
|
|
prevMouseSwap = __UI_MouseButtonsSwap
|
|
b$ = "MOUSESWAP>" + MKI$(__UI_MouseButtonsSwap) + "<END>"
|
|
PUT #Client, , b$
|
|
END IF
|
|
|
|
IF prevShowPos <> __UI_ShowPositionAndSize OR SignalsFirstSent = False THEN
|
|
prevShowPos = __UI_ShowPositionAndSize
|
|
b$ = "SHOWPOSSIZE>" + MKI$(__UI_ShowPositionAndSize) + "<END>"
|
|
PUT #Client, , b$
|
|
END IF
|
|
|
|
IF prevSnapLines <> __UI_SnapLines OR SignalsFirstSent = False THEN
|
|
prevSnapLines = __UI_SnapLines
|
|
b$ = "SNAPLINES>" + MKI$(__UI_SnapLines) + "<END>"
|
|
PUT #Client, , b$
|
|
END IF
|
|
SignalsFirstSent = True
|
|
|
|
DIM thisData$, thisCommand$
|
|
DO WHILE INSTR(Stream$, "<END>") > 0
|
|
thisData$ = LEFT$(Stream$, INSTR(Stream$, "<END>") - 1)
|
|
Stream$ = MID$(Stream$, INSTR(Stream$, "<END>") + 5)
|
|
thisCommand$ = LEFT$(thisData$, INSTR(thisData$, ">") - 1)
|
|
thisData$ = MID$(thisData$, LEN(thisCommand$) + 2)
|
|
SELECT CASE UCASE$(thisCommand$)
|
|
CASE "TOTALSELECTEDCONTROLS"
|
|
TotalSelected = CVL(thisData$)
|
|
CASE "FORMID"
|
|
PreviewFormID = CVL(thisData$)
|
|
CASE "FIRSTSELECTED"
|
|
FirstSelected = CVL(thisData$)
|
|
LoseFocus
|
|
CASE "DEFAULTBUTTONID"
|
|
PreviewDefaultButtonID = CVL(thisData$)
|
|
CASE "ORIGINALIMAGEWIDTH"
|
|
OriginalImageWidth = CVI(thisData$)
|
|
CASE "ORIGINALIMAGEHEIGHT"
|
|
OriginalImageHeight = CVI(thisData$)
|
|
CASE "SELECTIONRECTANGLE"
|
|
PreviewSelectionRectangle = CVI(thisData$)
|
|
LoseFocus
|
|
CASE "MENUPANELACTIVE"
|
|
PreviewHasMenuActive = CVI(thisData$)
|
|
CASE "SIGNAL"
|
|
Signal$ = Signal$ + thisData$
|
|
CASE "FORMDATA"
|
|
LastFormData$ = thisData$
|
|
LoadPreview
|
|
IF NOT FormDataReceived THEN
|
|
FormDataReceived = True
|
|
ELSE
|
|
Edited = True
|
|
LoseFocus
|
|
END IF
|
|
CASE "UNDOPOINTER"
|
|
UndoPointer = CVI(thisData$)
|
|
CASE "TOTALUNDOIMAGES"
|
|
TotalUndoImages = CVI(thisData$)
|
|
END SELECT
|
|
LOOP
|
|
|
|
IF NOT FormDataReceived THEN EXIT SUB
|
|
|
|
Control(EditMenuRestoreDimensions).Disabled = True
|
|
SetCaption EditMenuRestoreDimensions, "Restore &image dimensions"
|
|
IF TotalSelected = 1 AND PreviewControls(FirstSelected).Type = __UI_Type_PictureBox AND OriginalImageWidth > 0 AND OriginalImageHeight > 0 THEN
|
|
IF PreviewControls(FirstSelected).Height <> OriginalImageHeight OR _
|
|
PreviewControls(FirstSelected).Width <> OriginalImageWidth THEN
|
|
Control(EditMenuRestoreDimensions).Disabled = False
|
|
SetCaption EditMenuRestoreDimensions, "Restore &image dimensions (" + LTRIM$(STR$(OriginalImageWidth)) + "x" + LTRIM$(STR$(OriginalImageHeight)) + ")"
|
|
END IF
|
|
END IF
|
|
|
|
DO WHILE LEN(Signal$)
|
|
'signals -1 and -3 deprecated for now
|
|
b$ = LEFT$(Signal$, 2)
|
|
Signal$ = MID$(Signal$, 3)
|
|
IF CVI(b$) = -2 THEN
|
|
'User attempted to right-click a control but the preview
|
|
'form is smaller than the menu panel. In such case the "Align"
|
|
'menu is shown in the editor.
|
|
IF ZOrderingDialogOpen THEN __UI_Click CloseZOrderingBT
|
|
__UI_ActivateMenu Control(AlignMenu), False
|
|
__UI_ForceRedraw = True
|
|
ELSEIF CVI(b$) = -4 THEN
|
|
'User attempted to load an icon file that couldn't be previewed
|
|
Answer = MessageBox("Icon couldn't be previewed. Make sure it's a valid icon file.", "", MsgBox_OkOnly + MsgBox_Exclamation)
|
|
ELSEIF CVI(b$) = -5 THEN
|
|
'Context menu was successfully shown on the preview
|
|
IF __UI_ActiveMenu > 0 THEN __UI_DestroyControl Control(__UI_ActiveMenu)
|
|
__UI_Focus = 0
|
|
__UI_ForceRedraw = True
|
|
ELSEIF CVI(b$) = -6 THEN
|
|
'User attempted to load an invalid icon file
|
|
Answer = MessageBox("Only .ico files are accepted.", "", MsgBox_OkOnly + MsgBox_Exclamation)
|
|
ELSEIF CVI(b$) = -7 THEN
|
|
'A new empty form has just been created or a file has just finished loading from disk
|
|
Edited = False
|
|
ELSEIF CVI(b$) = -9 THEN
|
|
'User attempted to close the preview form
|
|
__UI_Click FileMenuNew
|
|
EXIT SUB
|
|
END IF
|
|
LOOP
|
|
|
|
IF PrevFirstSelected <> FirstSelected THEN
|
|
PrevFirstSelected = FirstSelected
|
|
__UI_ForceRedraw = True
|
|
|
|
IF ZOrderingDialogOpen AND FirstSelected <> PreviewFormID THEN
|
|
FOR j = 1 TO UBOUND(zOrderIDs)
|
|
IF zOrderIDs(j) = FirstSelected THEN Control(ControlList).Value = j: __UI_ValueChanged ControlList: EXIT FOR
|
|
NEXT
|
|
END IF
|
|
END IF
|
|
|
|
IF LEN(RTRIM$(__UI_TrimAt0$(PreviewControls(PreviewFormID).Name))) > 0 THEN
|
|
Caption(__UI_FormID) = UiEditorTitle$ + " - " + RTRIM$(PreviewControls(PreviewFormID).Name) + ".frm"
|
|
SetCaption FileMenuSaveFrm, "Save &form only ('" + RTRIM$(PreviewControls(PreviewFormID).Name) + ".frm')-"
|
|
END IF
|
|
|
|
IF Edited THEN
|
|
IF RIGHT$(Caption(__UI_FormID), 1) <> "*" THEN Caption(__UI_FormID) = Caption(__UI_FormID) + "*"
|
|
END IF
|
|
|
|
'Ctrl+Z? Ctrl+Y?
|
|
Control(EditMenuUndo).Disabled = True
|
|
Control(EditMenuRedo).Disabled = True
|
|
IF UndoPointer > 0 THEN Control(EditMenuUndo).Disabled = False
|
|
IF UndoPointer < TotalUndoImages THEN Control(EditMenuRedo).Disabled = False
|
|
|
|
IF (__UI_KeyHit = ASC("z") OR __UI_KeyHit = ASC("Z")) AND __UI_CtrlIsDown THEN
|
|
SendSignal 214
|
|
ELSEIF (__UI_KeyHit = ASC("y") OR __UI_KeyHit = ASC("Y")) AND __UI_CtrlIsDown THEN
|
|
SendSignal 215
|
|
END IF
|
|
|
|
'Make ZOrdering menu enabled/disabled according to control list
|
|
Control(EditMenuZOrdering).Disabled = True
|
|
FOR i = 1 TO UBOUND(PreviewControls)
|
|
SELECT CASE PreviewControls(i).Type
|
|
CASE 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 18
|
|
j = j + 1
|
|
IF j > 1 THEN
|
|
Control(EditMenuZOrdering).Disabled = False
|
|
EXIT FOR
|
|
END IF
|
|
END SELECT
|
|
NEXT
|
|
|
|
Control(EditMenuCP1252).Value = False
|
|
Control(EditMenuCP437).Value = False
|
|
Control(FontSwitchMenuSwitch).Value = ShowFontList
|
|
IF BypassShowFontList THEN
|
|
Control(FontSwitchMenuSwitch).Disabled = True
|
|
ELSE
|
|
Control(FontSwitchMenuSwitch).Disabled = False
|
|
END IF
|
|
SELECT CASE PreviewControls(PreviewFormID).Encoding
|
|
CASE 0, 437
|
|
Control(EditMenuCP437).Value = True
|
|
CASE 1252
|
|
Control(EditMenuCP1252).Value = True
|
|
END SELECT
|
|
|
|
IF PreviewHasMenuActive THEN
|
|
Control(InsertMenuMenuItem).Disabled = False
|
|
ELSE
|
|
Control(InsertMenuMenuItem).Disabled = True
|
|
END IF
|
|
|
|
Control(EditMenuSetDefaultButton).Disabled = True
|
|
Control(EditMenuSetDefaultButton).Value = False
|
|
Control(EditMenuAllowMinMax).Disabled = True
|
|
Control(EditMenuAllowMinMax).Value = False
|
|
IF INSTR(LCASE$(PreviewControls(PreviewFormID).Name), "form") = 0 THEN
|
|
Caption(ControlProperties) = "Control properties (Form):"
|
|
ELSE
|
|
Caption(ControlProperties) = "Control properties:"
|
|
END IF
|
|
Caption(AlignMenuAlignCenterV) = "Center Vertically (group)"
|
|
Caption(AlignMenuAlignCenterH) = "Center Horizontally (group)-"
|
|
|
|
Control(EditMenuPaste).Disabled = True
|
|
IF LEFT$(_CLIPBOARD$, LEN(__UI_ClipboardCheck$)) = __UI_ClipboardCheck$ THEN
|
|
Control(EditMenuPaste).Disabled = False
|
|
END IF
|
|
|
|
IF TotalSelected = 0 THEN
|
|
FirstSelected = PreviewFormID
|
|
|
|
Control(EditMenuCut).Disabled = True
|
|
Control(EditMenuCopy).Disabled = True
|
|
Control(EditMenuDelete).Disabled = True
|
|
|
|
Control(AlignMenuAlignLeft).Disabled = True
|
|
Control(AlignMenuAlignRight).Disabled = True
|
|
Control(AlignMenuAlignTops).Disabled = True
|
|
Control(AlignMenuAlignBottoms).Disabled = True
|
|
Control(AlignMenuAlignCenterV).Disabled = True
|
|
Control(AlignMenuAlignCenterH).Disabled = True
|
|
Control(AlignMenuAlignCentersV).Disabled = True
|
|
Control(AlignMenuAlignCentersH).Disabled = True
|
|
Control(AlignMenuDistributeV).Disabled = True
|
|
Control(AlignMenuDistributeH).Disabled = True
|
|
|
|
ELSEIF TotalSelected = 1 THEN
|
|
IF FirstSelected > 0 AND FirstSelected <= UBOUND(PreviewControls) THEN
|
|
Control(EditMenuCut).Disabled = False
|
|
Control(EditMenuCopy).Disabled = False
|
|
Control(EditMenuDelete).Disabled = False
|
|
|
|
IF INSTR(LCASE$(PreviewControls(FirstSelected).Name), LCASE$(RTRIM$(__UI_Type(PreviewControls(FirstSelected).Type).Name))) = 0 THEN
|
|
Caption(ControlProperties) = "Control properties (Type = " + RTRIM$(__UI_Type(PreviewControls(FirstSelected).Type).Name) + "):"
|
|
ELSE
|
|
Caption(ControlProperties) = "Control properties:"
|
|
END IF
|
|
Control(AlignMenuAlignLeft).Disabled = True
|
|
Control(AlignMenuAlignRight).Disabled = True
|
|
Control(AlignMenuAlignTops).Disabled = True
|
|
Control(AlignMenuAlignBottoms).Disabled = True
|
|
IF PreviewControls(FirstSelected).Type <> __UI_Type_MenuBar AND PreviewControls(FirstSelected).Type <> __UI_Type_MenuItem THEN
|
|
Control(AlignMenuAlignCenterV).Disabled = False
|
|
Control(AlignMenuAlignCenterH).Disabled = False
|
|
Caption(AlignMenuAlignCenterV) = "Center Vertically"
|
|
Caption(AlignMenuAlignCenterH) = "Center Horizontally-"
|
|
ELSE
|
|
Control(AlignMenuAlignCenterV).Disabled = True
|
|
Control(AlignMenuAlignCenterH).Disabled = True
|
|
END IF
|
|
Control(AlignMenuAlignCentersV).Disabled = True
|
|
Control(AlignMenuAlignCentersH).Disabled = True
|
|
Control(AlignMenuDistributeV).Disabled = True
|
|
Control(AlignMenuDistributeH).Disabled = True
|
|
|
|
IF PreviewControls(FirstSelected).Type = __UI_Type_Button THEN
|
|
Control(EditMenuSetDefaultButton).Disabled = False
|
|
IF PreviewDefaultButtonID <> FirstSelected THEN
|
|
Control(EditMenuSetDefaultButton).Value = False
|
|
ELSE
|
|
Control(EditMenuSetDefaultButton).Value = True
|
|
END IF
|
|
ELSEIF PreviewControls(FirstSelected).Type = __UI_Type_TextBox THEN
|
|
IF PreviewControls(FirstSelected).NumericOnly = True THEN
|
|
Control(EditMenuAllowMinMax).Disabled = False
|
|
Control(EditMenuAllowMinMax).Value = False
|
|
IF INSTR(PreviewControls(FirstSelected).Name, "NumericTextBox") = 0 THEN Caption(ControlProperties) = "Control properties (Type = NumericTextBox):"
|
|
ELSEIF PreviewControls(FirstSelected).NumericOnly = __UI_NumericWithBounds THEN
|
|
Control(EditMenuAllowMinMax).Disabled = False
|
|
Control(EditMenuAllowMinMax).Value = True
|
|
IF INSTR(PreviewControls(FirstSelected).Name, "NumericTextBox") = 0 THEN Caption(ControlProperties) = "Control properties (Type = NumericTextBox):"
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
ELSEIF TotalSelected = 2 THEN
|
|
Caption(ControlProperties) = "Control properties: (multiple selection)"
|
|
|
|
Control(EditMenuCut).Disabled = False
|
|
Control(EditMenuCopy).Disabled = False
|
|
Control(EditMenuDelete).Disabled = False
|
|
|
|
Control(AlignMenuAlignLeft).Disabled = False
|
|
Control(AlignMenuAlignRight).Disabled = False
|
|
Control(AlignMenuAlignTops).Disabled = False
|
|
Control(AlignMenuAlignBottoms).Disabled = False
|
|
Control(AlignMenuAlignCenterV).Disabled = False
|
|
Control(AlignMenuAlignCenterH).Disabled = False
|
|
Control(AlignMenuAlignCentersV).Disabled = False
|
|
Control(AlignMenuAlignCentersH).Disabled = False
|
|
Control(AlignMenuDistributeV).Disabled = True
|
|
Control(AlignMenuDistributeH).Disabled = True
|
|
|
|
ELSE
|
|
SetCaption ControlProperties, "Control properties: (multiple selection)"
|
|
|
|
Control(EditMenuCut).Disabled = False
|
|
Control(EditMenuCopy).Disabled = False
|
|
Control(EditMenuDelete).Disabled = False
|
|
|
|
Control(AlignMenuAlignLeft).Disabled = False
|
|
Control(AlignMenuAlignRight).Disabled = False
|
|
Control(AlignMenuAlignTops).Disabled = False
|
|
Control(AlignMenuAlignBottoms).Disabled = False
|
|
Control(AlignMenuAlignCenterV).Disabled = False
|
|
Control(AlignMenuAlignCenterH).Disabled = False
|
|
Control(AlignMenuAlignCentersV).Disabled = False
|
|
Control(AlignMenuAlignCentersH).Disabled = False
|
|
Control(AlignMenuDistributeV).Disabled = False
|
|
Control(AlignMenuDistributeH).Disabled = False
|
|
|
|
END IF
|
|
|
|
IF FirstSelected = 0 THEN FirstSelected = PreviewFormID
|
|
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
Control(InputBox(i).ID).Disabled = False
|
|
Control(InputBox(i).ID).Hidden = False
|
|
Control(InputBox(i).LabelID).Hidden = False
|
|
IF __UI_Focus = InputBox(i).ID THEN
|
|
Control(InputBox(i).ID).Height = 22
|
|
Control(InputBox(i).ID).BorderColor = _RGB32(0, 0, 0)
|
|
Control(InputBox(i).ID).HasBorder = 1
|
|
ELSE
|
|
Control(InputBox(i).ID).Height = 23
|
|
Control(InputBox(i).ID).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
Control(InputBox(i).ID).HasBorder = True
|
|
END IF
|
|
NEXT
|
|
Control(FontSizeList).Hidden = True
|
|
|
|
FOR i = 1 TO UBOUND(Toggles)
|
|
Control(Toggles(i)).Disabled = True
|
|
Control(Toggles(i)).Hidden = False
|
|
NEXT
|
|
|
|
DIM ShadeOfGreen AS _UNSIGNED LONG, ShadeOfRed AS _UNSIGNED LONG
|
|
ShadeOfGreen = _RGB32(28, 150, 50)
|
|
ShadeOfRed = _RGB32(233, 44, 0)
|
|
|
|
CONST PropertyUpdateDelay = .1
|
|
|
|
IF FirstSelected > 0 THEN
|
|
DIM ThisInputBox AS LONG
|
|
ThisInputBox = GetInputBoxFromID(__UI_Focus)
|
|
|
|
IF __UI_Focus <> NameTB OR (__UI_Focus = NameTB AND RevertEdit = True) THEN
|
|
Text(NameTB) = RTRIM$(PreviewControls(FirstSelected).Name)
|
|
IF (__UI_Focus = NameTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = NameTB THEN
|
|
IF PropertyFullySelected(NameTB) THEN
|
|
IF Text(NameTB) = RTRIM$(PreviewControls(FirstSelected).Name) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> CaptionTB OR (__UI_Focus = CaptionTB AND RevertEdit = True) THEN
|
|
Text(CaptionTB) = Replace(__UI_TrimAt0$(PreviewCaptions(FirstSelected)), CHR$(10), "\n", False, 0)
|
|
IF (__UI_Focus = CaptionTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = CaptionTB THEN
|
|
IF PropertyFullySelected(CaptionTB) THEN
|
|
IF Text(CaptionTB) = Replace(__UI_TrimAt0$(PreviewCaptions(FirstSelected)), CHR$(10), "\n", False, 0) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> TextTB OR (__UI_Focus = TextTB AND RevertEdit = True) THEN
|
|
IF PreviewControls(FirstSelected).Type = __UI_Type_ListBox OR PreviewControls(FirstSelected).Type = __UI_Type_DropdownList THEN
|
|
Text(TextTB) = Replace(PreviewTexts(FirstSelected), CHR$(13), "\n", False, 0)
|
|
ELSE
|
|
Text(TextTB) = PreviewTexts(FirstSelected)
|
|
IF LEN(PreviewMasks(FirstSelected)) > 0 AND PreviewControls(FirstSelected).Type = __UI_Type_TextBox THEN
|
|
Mask(TextTB) = PreviewMasks(FirstSelected)
|
|
ELSE
|
|
Mask(TextTB) = ""
|
|
END IF
|
|
END IF
|
|
IF (__UI_Focus = TextTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = TextTB THEN
|
|
Control(TextTB).NumericOnly = PreviewControls(FirstSelected).NumericOnly
|
|
IF PropertyFullySelected(TextTB) THEN
|
|
IF ((PreviewControls(FirstSelected).Type = __UI_Type_ListBox OR PreviewControls(FirstSelected).Type = __UI_Type_DropdownList) AND Text(TextTB) = Replace(PreviewTexts(FirstSelected), CHR$(13), "\n", False, 0)) OR _
|
|
((PreviewControls(FirstSelected).Type <> __UI_Type_ListBox AND PreviewControls(FirstSelected).Type <> __UI_Type_DropdownList) AND Text(TextTB) = PreviewTexts(FirstSelected)) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> MaskTB OR (__UI_Focus = MaskTB AND RevertEdit = True) THEN
|
|
Text(MaskTB) = PreviewMasks(FirstSelected)
|
|
IF (__UI_Focus = MaskTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = MaskTB THEN
|
|
IF PropertyFullySelected(MaskTB) THEN
|
|
IF Text(MaskTB) = PreviewMasks(FirstSelected) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> TopTB OR (__UI_Focus = TopTB AND RevertEdit = True) THEN
|
|
Text(TopTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Top))
|
|
IF (__UI_Focus = TopTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = TopTB THEN
|
|
IF PropertyFullySelected(TopTB) THEN
|
|
IF Text(TopTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Top)) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> LeftTB OR (__UI_Focus = LeftTB AND RevertEdit = True) THEN
|
|
Text(LeftTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Left))
|
|
IF (__UI_Focus = LeftTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = LeftTB THEN
|
|
IF PropertyFullySelected(LeftTB) THEN
|
|
IF Text(LeftTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Left)) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> WidthTB OR (__UI_Focus = WidthTB AND RevertEdit = True) THEN
|
|
Text(WidthTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Width))
|
|
IF (__UI_Focus = WidthTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = WidthTB THEN
|
|
IF PropertyFullySelected(WidthTB) THEN
|
|
IF Text(WidthTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Width)) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> HeightTB OR (__UI_Focus = HeightTB AND RevertEdit = True) THEN
|
|
Text(HeightTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Height))
|
|
IF (__UI_Focus = HeightTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = HeightTB THEN
|
|
IF PropertyFullySelected(HeightTB) THEN
|
|
IF Text(HeightTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Height)) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> FontTB OR (__UI_Focus = FontTB AND RevertEdit = True) THEN
|
|
IF LEN(PreviewFonts(FirstSelected)) > 0 THEN
|
|
Text(FontTB) = PreviewFonts(FirstSelected)
|
|
ELSE
|
|
Text(FontTB) = PreviewFonts(PreviewFormID)
|
|
END IF
|
|
IF (__UI_Focus = FontTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = FontTB THEN
|
|
IF PropertyFullySelected(FontTB) THEN
|
|
IF Text(FontTB) = PreviewFonts(FirstSelected) OR Text(FontTB) = PreviewFonts(PreviewFormID) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF LEN(PreviewFonts(FirstSelected)) > 0 THEN
|
|
SelectFontInList PreviewActualFonts(FirstSelected)
|
|
ELSE
|
|
SelectFontInList PreviewActualFonts(PreviewFormID)
|
|
END IF
|
|
IF __UI_Focus <> TooltipTB OR (__UI_Focus = TooltipTB AND RevertEdit = True) THEN
|
|
Text(TooltipTB) = Replace(PreviewTips(FirstSelected), CHR$(10), "\n", False, 0)
|
|
IF (__UI_Focus = TooltipTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = TooltipTB THEN
|
|
IF PropertyFullySelected(FontTB) THEN
|
|
IF Text(TooltipTB) = Replace(PreviewTips(FirstSelected), CHR$(10), "\n", False, 0) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> ValueTB OR (__UI_Focus = ValueTB AND RevertEdit = True) THEN
|
|
Text(ValueTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Value))
|
|
IF (__UI_Focus = ValueTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = ValueTB THEN
|
|
IF PropertyFullySelected(ValueTB) THEN
|
|
IF Text(ValueTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Value)) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> MinTB OR (__UI_Focus = MinTB AND RevertEdit = True) THEN
|
|
Text(MinTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Min))
|
|
IF (__UI_Focus = MinTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = MinTB THEN
|
|
IF PropertyFullySelected(MinTB) THEN
|
|
IF Text(MinTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Min)) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> MaxTB OR (__UI_Focus = MaxTB AND RevertEdit = True) THEN
|
|
Text(MaxTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Max))
|
|
IF (__UI_Focus = MaxTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = MaxTB THEN
|
|
IF PropertyFullySelected(MaxTB) THEN
|
|
IF Text(MaxTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Max)) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> IntervalTB OR (__UI_Focus = IntervalTB AND RevertEdit = True) THEN
|
|
Text(IntervalTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Interval))
|
|
IF (__UI_Focus = IntervalTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = IntervalTB THEN
|
|
IF PropertyFullySelected(IntervalTB) THEN
|
|
IF Text(IntervalTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Interval)) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> MinIntervalTB OR (__UI_Focus = MinIntervalTB AND RevertEdit = True) THEN
|
|
Text(MinIntervalTB) = LTRIM$(STR$(PreviewControls(FirstSelected).MinInterval))
|
|
ELSEIF __UI_Focus = MinIntervalTB THEN
|
|
IF PropertyFullySelected(MinIntervalTB) THEN
|
|
IF Text(MinIntervalTB) = LTRIM$(STR$(PreviewControls(FirstSelected).MinInterval)) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF __UI_Focus <> PaddingTB OR (__UI_Focus = PaddingTB AND RevertEdit = True) THEN
|
|
Text(PaddingTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Padding))
|
|
IF (__UI_Focus = PaddingTB AND RevertEdit = True) THEN RevertEdit = False: SelectPropertyFully __UI_Focus
|
|
ELSEIF __UI_Focus = PaddingTB THEN
|
|
IF PropertyFullySelected(PaddingTB) THEN
|
|
IF Text(PaddingTB) = LTRIM$(STR$(PreviewControls(FirstSelected).Padding)) THEN
|
|
Control(__UI_Focus).BorderColor = ShadeOfGreen
|
|
ELSE
|
|
IF TIMER - InputBox(ThisInputBox).LastEdited < PropertyUpdateDelay THEN
|
|
Control(__UI_Focus).BorderColor = __UI_DefaultColor(__UI_Type_TextBox, 5)
|
|
ELSE
|
|
Control(__UI_Focus).BorderColor = ShadeOfRed
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
Control(TextTB).Max = 0
|
|
Control(TextTB).Min = 0
|
|
IF PreviewControls(FirstSelected).Type = __UI_Type_TextBox AND __UI_Focus = TextTB THEN
|
|
Control(TextTB).Max = PreviewControls(FirstSelected).Max
|
|
Control(TextTB).Min = PreviewControls(FirstSelected).Min
|
|
END IF
|
|
|
|
'Update checkboxes:
|
|
Control(Stretch).Value = PreviewControls(FirstSelected).Stretch
|
|
Control(HasBorder).Value = PreviewControls(FirstSelected).HasBorder
|
|
Control(ShowPercentage).Value = PreviewControls(FirstSelected).ShowPercentage
|
|
Control(WordWrap).Value = PreviewControls(FirstSelected).WordWrap
|
|
Control(CanHaveFocus).Value = PreviewControls(FirstSelected).CanHaveFocus
|
|
Control(Disabled).Value = PreviewControls(FirstSelected).Disabled
|
|
Control(Hidden).Value = PreviewControls(FirstSelected).Hidden
|
|
Control(CenteredWindow).Value = PreviewControls(FirstSelected).CenteredWindow
|
|
Control(PasswordMaskCB).Value = PreviewControls(FirstSelected).PasswordField
|
|
Control(BooleanOptions).Value = ABS(PreviewControls(FirstSelected).Value <> 0) + 1
|
|
Control(AlignOptions).Value = PreviewControls(FirstSelected).Align + 1
|
|
Control(VAlignOptions).Value = PreviewControls(FirstSelected).VAlign + 1
|
|
Control(BulletOptions).Value = PreviewControls(FirstSelected).BulletStyle + 1
|
|
Control(Transparent).Value = PreviewControls(FirstSelected).BackStyle
|
|
Control(Resizable).Value = PreviewControls(FirstSelected).CanResize
|
|
Control(AutoScroll).Value = PreviewControls(FirstSelected).AutoScroll
|
|
|
|
'Disable properties that don't apply
|
|
Control(AlignOptions).Disabled = True
|
|
Control(BooleanOptions).Disabled = True
|
|
Control(VAlignOptions).Disabled = True
|
|
Control(BulletOptions).Disabled = True
|
|
Caption(TextLB) = "Text"
|
|
Caption(ValueLB) = "Value"
|
|
IF TotalSelected > 0 THEN
|
|
SELECT EVERYCASE PreviewControls(FirstSelected).Type
|
|
CASE __UI_Type_ToggleSwitch
|
|
Control(CanHaveFocus).Disabled = False
|
|
Control(Disabled).Disabled = False
|
|
Control(Hidden).Disabled = False
|
|
Control(CaptionTB).Disabled = True
|
|
Control(BooleanOptions).Disabled = False
|
|
Control(TextTB).Disabled = True
|
|
Control(FontTB).Disabled = True
|
|
Control(FontList).Disabled = True
|
|
Control(MinTB).Disabled = True
|
|
Control(MaxTB).Disabled = True
|
|
Control(IntervalTB).Disabled = True
|
|
Control(MinIntervalTB).Disabled = True
|
|
Control(PaddingTB).Disabled = True
|
|
Control(BulletOptions).Disabled = True
|
|
CASE __UI_Type_MenuBar, __UI_Type_MenuItem
|
|
Control(Disabled).Disabled = False
|
|
Control(Hidden).Disabled = False
|
|
CASE __UI_Type_MenuBar
|
|
'Check if this is the last menu bar item so that Align options can be enabled
|
|
FOR i = UBOUND(PreviewControls) TO 1 STEP -1
|
|
IF PreviewControls(i).ID > 0 AND PreviewControls(i).Type = __UI_Type_MenuBar THEN
|
|
EXIT FOR
|
|
END IF
|
|
NEXT
|
|
IF i = FirstSelected THEN
|
|
Control(AlignOptions).Disabled = False
|
|
END IF
|
|
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE NameTB, CaptionTB, TooltipTB, AlignOptions
|
|
Control(InputBox(i).ID).Disabled = False
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = True
|
|
END SELECT
|
|
NEXT
|
|
CASE __UI_Type_MenuItem
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE NameTB, CaptionTB, TextTB, TooltipTB, BulletOptions, BooleanOptions
|
|
Control(InputBox(i).ID).Disabled = False
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = True
|
|
END SELECT
|
|
NEXT
|
|
CASE __UI_Type_PictureBox
|
|
Caption(TextLB) = "Image file"
|
|
Control(AlignOptions).Disabled = False
|
|
Control(VAlignOptions).Disabled = False
|
|
Control(Stretch).Disabled = False
|
|
Control(Transparent).Disabled = False
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE NameTB, TextTB, TopTB, LeftTB, WidthTB, HeightTB, TooltipTB, AlignOptions, VAlignOptions
|
|
Control(InputBox(i).ID).Disabled = False
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = True
|
|
END SELECT
|
|
NEXT
|
|
CASE __UI_Type_Label
|
|
Control(Transparent).Disabled = False
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE NameTB, CaptionTB, TopTB, LeftTB, WidthTB, HeightTB, FontTB, TooltipTB, PaddingTB, AlignOptions, VAlignOptions, FontList
|
|
Control(InputBox(i).ID).Disabled = False
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = True
|
|
END SELECT
|
|
NEXT
|
|
CASE __UI_Type_Frame
|
|
Control(Transparent).Disabled = True
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE NameTB, CaptionTB, TopTB, LeftTB, WidthTB, HeightTB, FontTB, TooltipTB, FontList
|
|
Control(InputBox(i).ID).Disabled = False
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = True
|
|
END SELECT
|
|
NEXT
|
|
CASE __UI_Type_TextBox
|
|
STATIC PreviousNumericState AS _BYTE
|
|
Control(Transparent).Disabled = False
|
|
Control(PasswordMaskCB).Disabled = (PreviewControls(FirstSelected).NumericOnly <> False)
|
|
Caption(MaxLB) = "Max"
|
|
IF PreviousNumericState <> PreviewControls(FirstSelected).NumericOnly THEN
|
|
PreviousNumericState = PreviewControls(FirstSelected).NumericOnly
|
|
__UI_ForceRedraw = True
|
|
END IF
|
|
IF PreviewControls(FirstSelected).NumericOnly = True THEN
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE ValueTB, MinTB, MaxTB, MaskTB, IntervalTB, PaddingTB, AlignOptions, VAlignOptions, MinIntervalTB, BulletOptions, BooleanOptions
|
|
Control(InputBox(i).ID).Disabled = True
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = False
|
|
END SELECT
|
|
NEXT
|
|
ELSEIF PreviewControls(FirstSelected).NumericOnly = __UI_NumericWithBounds THEN
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE ValueTB, MaskTB, IntervalTB, PaddingTB, AlignOptions, VAlignOptions, MinIntervalTB, BulletOptions, BooleanOptions
|
|
Control(InputBox(i).ID).Disabled = True
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = False
|
|
END SELECT
|
|
NEXT
|
|
ELSE
|
|
Caption(MaxLB) = "Max length"
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE ValueTB, MinTB, IntervalTB, PaddingTB, AlignOptions, VAlignOptions, MinIntervalTB, BulletOptions, BooleanOptions
|
|
Control(InputBox(i).ID).Disabled = True
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = False
|
|
END SELECT
|
|
NEXT
|
|
END IF
|
|
CASE __UI_Type_Button, __UI_Type_MenuItem
|
|
Caption(TextLB) = "Image file"
|
|
CASE __UI_Type_Button
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE ValueTB, MinTB, MaxTB, IntervalTB, PaddingTB, MaskTB, AlignOptions, VAlignOptions, MinIntervalTB, BulletOptions, BooleanOptions
|
|
Control(InputBox(i).ID).Disabled = True
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = False
|
|
END SELECT
|
|
NEXT
|
|
CASE __UI_Type_CheckBox, __UI_Type_RadioButton
|
|
Control(Transparent).Disabled = False
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE TextTB, MinTB, MaxTB, IntervalTB, PaddingTB, MaskTB, AlignOptions, VAlignOptions, MinIntervalTB, BulletOptions, ValueTB
|
|
Control(InputBox(i).ID).Disabled = True
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = False
|
|
END SELECT
|
|
NEXT
|
|
CASE __UI_Type_ToggleSwitch
|
|
Control(Transparent).Disabled = True
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE TextTB, MinTB, MaxTB, IntervalTB, PaddingTB, MaskTB, AlignOptions, VAlignOptions, MinIntervalTB, BulletOptions, ValueTB, FontTB, FontList
|
|
Control(InputBox(i).ID).Disabled = True
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = False
|
|
END SELECT
|
|
NEXT
|
|
CASE __UI_Type_ProgressBar
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE TextTB, IntervalTB, PaddingTB, MaskTB, AlignOptions, VAlignOptions, MinIntervalTB, BulletOptions, BooleanOptions
|
|
Control(InputBox(i).ID).Disabled = True
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = False
|
|
END SELECT
|
|
NEXT
|
|
CASE __UI_Type_TrackBar
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE CaptionTB, TextTB, FontTB, PaddingTB, MaskTB, AlignOptions, VAlignOptions, BulletOptions, BooleanOptions, FontList
|
|
Control(InputBox(i).ID).Disabled = True
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = False
|
|
END SELECT
|
|
NEXT
|
|
CASE __UI_Type_ListBox, __UI_Type_DropdownList
|
|
Caption(TextLB) = "List items"
|
|
Caption(ValueLB) = "Selected item"
|
|
Control(Transparent).Disabled = False
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE CaptionTB, MinTB, MaxTB, IntervalTB, PaddingTB, MaskTB, AlignOptions, VAlignOptions, MinIntervalTB, BulletOptions, BooleanOptions
|
|
Control(InputBox(i).ID).Disabled = True
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = False
|
|
END SELECT
|
|
NEXT
|
|
CASE __UI_Type_ListBox
|
|
Control(AutoScroll).Disabled = False
|
|
CASE __UI_Type_Frame, __UI_Type_Label, __UI_Type_TextBox, __UI_Type_ListBox, __UI_Type_DropdownList, __UI_Type_PictureBox
|
|
Control(HasBorder).Disabled = False
|
|
CASE __UI_Type_ProgressBar
|
|
Control(ShowPercentage).Disabled = False
|
|
CASE __UI_Type_Label
|
|
Control(WordWrap).Disabled = False
|
|
CASE __UI_Type_Button, __UI_Type_CheckBox, __UI_Type_RadioButton, __UI_Type_TextBox, __UI_Type_ListBox, __UI_Type_DropdownList, __UI_Type_TrackBar
|
|
Control(CanHaveFocus).Disabled = False
|
|
CASE __UI_Type_Button, __UI_Type_CheckBox, __UI_Type_RadioButton, __UI_Type_TextBox, __UI_Type_ListBox, __UI_Type_DropdownList, __UI_Type_TrackBar, __UI_Type_Label, __UI_Type_ProgressBar
|
|
Control(Disabled).Disabled = False
|
|
CASE __UI_Type_Frame, __UI_Type_Button, __UI_Type_CheckBox, __UI_Type_RadioButton, __UI_Type_TextBox, __UI_Type_ListBox, __UI_Type_DropdownList, __UI_Type_TrackBar, __UI_Type_Label, __UI_Type_ProgressBar, __UI_Type_PictureBox
|
|
Control(Hidden).Disabled = False
|
|
CASE __UI_Type_Label
|
|
Control(AlignOptions).Disabled = False
|
|
Control(VAlignOptions).Disabled = False
|
|
END SELECT
|
|
ELSE
|
|
'Properties relative to the form
|
|
Control(CenteredWindow).Disabled = False
|
|
Control(Resizable).Disabled = False
|
|
Caption(TextLB) = "Icon file"
|
|
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
SELECT CASE InputBox(i).ID
|
|
CASE NameTB, CaptionTB, TextTB, WidthTB, HeightTB, FontTB, FontList
|
|
Control(InputBox(i).ID).Disabled = False
|
|
CASE ELSE
|
|
Control(InputBox(i).ID).Disabled = True
|
|
END SELECT
|
|
NEXT
|
|
END IF
|
|
|
|
IF TotalSelected > 1 THEN Control(NameTB).Disabled = True
|
|
|
|
IF HasFontList AND (ShowFontList = True AND BypassShowFontList = False) THEN
|
|
Control(FontTB).Disabled = True
|
|
ELSE
|
|
Control(FontList).Disabled = True
|
|
END IF
|
|
|
|
DIM LastTopForInputBox AS INTEGER
|
|
LastTopForInputBox = -12
|
|
CONST TopIncrementForInputBox = 22
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
IF Control(InputBox(i).ID).Disabled THEN
|
|
Control(InputBox(i).ID).Hidden = True
|
|
Control(InputBox(i).LabelID).Hidden = True
|
|
ELSE
|
|
LastTopForInputBox = LastTopForInputBox + TopIncrementForInputBox
|
|
Control(InputBox(i).ID).Top = LastTopForInputBox
|
|
Control(InputBox(i).LabelID).Top = LastTopForInputBox
|
|
END IF
|
|
NEXT
|
|
|
|
LastTopForInputBox = -12
|
|
FOR i = 1 TO UBOUND(Toggles)
|
|
IF Control(Toggles(i)).Disabled THEN
|
|
Control(Toggles(i)).Hidden = True
|
|
ELSE
|
|
LastTopForInputBox = LastTopForInputBox + TopIncrementForInputBox
|
|
Control(Toggles(i)).Top = LastTopForInputBox
|
|
END IF
|
|
NEXT
|
|
|
|
Control(FontSizeList).Disabled = Control(FontList).Disabled
|
|
Control(FontSizeList).Hidden = Control(FontList).Hidden
|
|
Control(FontSizeList).Top = Control(FontList).Top
|
|
|
|
'Update the color mixer
|
|
DIM ThisColor AS _UNSIGNED LONG, ThisBackColor AS _UNSIGNED LONG
|
|
|
|
SELECT EVERYCASE Control(ColorPropertiesList).Value
|
|
CASE 1, 2 'ForeColor, BackColor
|
|
ThisColor = PreviewControls(FirstSelected).ForeColor
|
|
IF ThisColor = 0 THEN ThisColor = PreviewControls(PreviewFormID).ForeColor
|
|
IF ThisColor = 0 THEN ThisColor = __UI_DefaultColor(__UI_Type_Form, 1)
|
|
ThisBackColor = PreviewControls(FirstSelected).BackColor
|
|
IF ThisBackColor = 0 THEN ThisBackColor = PreviewControls(PreviewFormID).BackColor
|
|
IF ThisBackColor = 0 THEN ThisBackColor = __UI_DefaultColor(__UI_Type_Form, 2)
|
|
CASE 3, 4 'SelectedForeColor, SelectedBackColor
|
|
ThisColor = PreviewControls(FirstSelected).SelectedForeColor
|
|
IF ThisColor = 0 THEN ThisColor = PreviewControls(PreviewFormID).SelectedForeColor
|
|
IF ThisColor = 0 THEN ThisColor = __UI_DefaultColor(__UI_Type_Form, 3)
|
|
ThisBackColor = PreviewControls(FirstSelected).SelectedBackColor
|
|
IF ThisBackColor = 0 THEN ThisBackColor = PreviewControls(PreviewFormID).SelectedBackColor
|
|
IF ThisBackColor = 0 THEN ThisBackColor = __UI_DefaultColor(__UI_Type_Form, 4)
|
|
CASE 5 'BorderColor
|
|
ThisColor = PreviewControls(FirstSelected).BorderColor
|
|
IF ThisColor = 0 THEN ThisColor = PreviewControls(PreviewFormID).BorderColor
|
|
IF ThisColor = 0 THEN ThisColor = __UI_DefaultColor(__UI_Type_Form, 5)
|
|
ThisBackColor = PreviewControls(FirstSelected).BackColor
|
|
IF ThisBackColor = 0 THEN ThisBackColor = PreviewControls(PreviewFormID).BackColor
|
|
IF ThisBackColor = 0 THEN ThisBackColor = __UI_DefaultColor(__UI_Type_Form, 2)
|
|
CASE 1, 3, 5
|
|
IF __UI_Focus <> Red AND __UI_Focus <> RedValue THEN
|
|
Control(Red).Value = _RED32(ThisColor)
|
|
Text(RedValue) = LTRIM$(STR$(Control(Red).Value))
|
|
END IF
|
|
IF __UI_Focus <> Green AND __UI_Focus <> GreenValue THEN
|
|
Control(Green).Value = _GREEN32(ThisColor)
|
|
Text(GreenValue) = LTRIM$(STR$(Control(Green).Value))
|
|
END IF
|
|
IF __UI_Focus <> Blue AND __UI_Focus <> BlueValue THEN
|
|
Control(Blue).Value = _BLUE32(ThisColor)
|
|
Text(BlueValue) = LTRIM$(STR$(Control(Blue).Value))
|
|
END IF
|
|
CASE 2, 4
|
|
IF __UI_Focus <> Red AND __UI_Focus <> RedValue THEN
|
|
Control(Red).Value = _RED32(ThisBackColor)
|
|
Text(RedValue) = LTRIM$(STR$(Control(Red).Value))
|
|
END IF
|
|
IF __UI_Focus <> Green AND __UI_Focus <> GreenValue THEN
|
|
Control(Green).Value = _GREEN32(ThisBackColor)
|
|
Text(GreenValue) = LTRIM$(STR$(Control(Green).Value))
|
|
END IF
|
|
IF __UI_Focus <> Blue AND __UI_Focus <> BlueValue THEN
|
|
Control(Blue).Value = _BLUE32(ThisBackColor)
|
|
Text(BlueValue) = LTRIM$(STR$(Control(Blue).Value))
|
|
END IF
|
|
END SELECT
|
|
|
|
IF Control(ColorPreview).HelperCanvas = 0 THEN
|
|
Control(ColorPreview).HelperCanvas = _NEWIMAGE(Control(ColorPreview).Width, Control(ColorPreview).Height, 32)
|
|
END IF
|
|
|
|
STATIC PrevPreviewForeColor AS _UNSIGNED LONG, PrevPreviewBackColor AS _UNSIGNED LONG
|
|
STATIC PrevColorPropertiesListValue AS _BYTE
|
|
IF PrevPreviewForeColor <> ThisColor OR PrevPreviewBackColor <> ThisBackColor OR PrevColorPropertiesListValue <> Control(ColorPropertiesList).Value THEN
|
|
PrevPreviewForeColor = ThisColor
|
|
PrevPreviewBackColor = ThisBackColor
|
|
PrevColorPropertiesListValue = Control(ColorPropertiesList).Value
|
|
UpdateColorPreview Control(ColorPropertiesList).Value, ThisColor, ThisBackColor
|
|
END IF
|
|
END SUB
|
|
|
|
SUB __UI_BeforeUnload
|
|
DIM Answer AS _BYTE
|
|
IF Edited THEN
|
|
$IF WIN THEN
|
|
Answer = MessageBox("Save the current form before leaving?", "", MsgBox_YesNoCancel + MsgBox_Question)
|
|
$ELSE
|
|
Answer = MessageBox("Save the current form before leaving?", "", MsgBox_YesNo + MsgBox_Question)
|
|
$END IF
|
|
IF Answer = MsgBox_Cancel THEN
|
|
__UI_UnloadSignal = False
|
|
ELSEIF Answer = MsgBox_Yes THEN
|
|
SaveForm False, False
|
|
END IF
|
|
END IF
|
|
SaveSettings
|
|
END SUB
|
|
|
|
SUB SaveSettings
|
|
DIM value$
|
|
|
|
IF _DIREXISTS("InForm") = 0 THEN EXIT SUB
|
|
|
|
IF PreviewAttached THEN value$ = "True" ELSE value$ = "False"
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Keep preview window attached", value$
|
|
|
|
IF AutoNameControls THEN value$ = "True" ELSE value$ = "False"
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Auto-name controls", value$
|
|
|
|
IF __UI_SnapLines THEN value$ = "True" ELSE value$ = "False"
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Snap to edges", value$
|
|
|
|
IF __UI_ShowPositionAndSize THEN value$ = "True" ELSE value$ = "False"
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Show position and size", value$
|
|
|
|
IF CheckUpdates THEN value$ = "True" ELSE value$ = "False"
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Check for updates", value$
|
|
|
|
IF ShowFontList THEN value$ = "True" ELSE value$ = "False"
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Show font list", value$
|
|
|
|
$IF WIN THEN
|
|
$ELSE
|
|
IF __UI_MouseButtonsSwap THEN value$ = "True" ELSE value$ = "False"
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Swap mouse buttons", value$
|
|
$END IF
|
|
END SUB
|
|
|
|
SUB __UI_BeforeInit
|
|
END SUB
|
|
|
|
SUB __UI_FormResized
|
|
END SUB
|
|
|
|
SUB Handshake
|
|
'Handshake: each module sends the other their PID:
|
|
|
|
DIM b$, i AS INTEGER
|
|
|
|
Stream$ = "" 'clear buffer
|
|
|
|
b$ = "EDITORPID>" + MKL$(__UI_GetPID) + "<END>"
|
|
PUT #Client, , b$
|
|
|
|
DIM start!, incomingData$, thisData$
|
|
start! = TIMER
|
|
DO
|
|
incomingData$ = ""
|
|
GET #Client, , incomingData$
|
|
Stream$ = Stream$ + incomingData$
|
|
IF INSTR(Stream$, "<END>") THEN
|
|
thisData$ = LEFT$(Stream$, INSTR(Stream$, "<END>") - 1)
|
|
Stream$ = MID$(Stream$, LEN(thisData$) + 6)
|
|
IF LEFT$(thisData$, 11) = "PREVIEWPID>" THEN
|
|
UiPreviewPID = CVL(MID$(thisData$, 12))
|
|
END IF
|
|
EXIT DO
|
|
END IF
|
|
LOOP UNTIL TIMER - start! > 10
|
|
|
|
IF UiPreviewPID = 0 THEN
|
|
i = MessageBox("UiEditorPreview component not found or failed to load.", "UiEditor", MsgBox_OkOnly + MsgBox_Critical)
|
|
SYSTEM
|
|
END IF
|
|
END SUB
|
|
|
|
SUB __UI_OnLoad
|
|
DIM i AS LONG, b$
|
|
DIM prevDest AS LONG
|
|
|
|
b$ = "Starting..."
|
|
GOSUB ShowMessage
|
|
|
|
'Load splash image:
|
|
DIM tempIcon AS LONG
|
|
tempIcon = _LOADIMAGE("./InForm/resources/Application-icon-128.png", 32)
|
|
|
|
GOSUB ShowMessage
|
|
|
|
PreviewAttached = True
|
|
AutoNameControls = True
|
|
CheckUpdates = True
|
|
__UI_ShowPositionAndSize = True
|
|
__UI_SnapLines = True
|
|
|
|
DIM FileToOpen$, FreeFileNum AS INTEGER
|
|
|
|
b$ = "Reading settings..."
|
|
GOSUB ShowMessage
|
|
|
|
IF _DIREXISTS("InForm") = 0 THEN MKDIR "InForm"
|
|
|
|
DIM value$
|
|
value$ = ReadSetting("InForm/InForm.ini", "InForm Settings", "Keep preview window attached")
|
|
IF LEN(value$) THEN
|
|
PreviewAttached = (value$ = "True")
|
|
ELSE
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Keep preview window attached", "True"
|
|
PreviewAttached = True
|
|
END IF
|
|
|
|
value$ = ReadSetting("InForm/InForm.ini", "InForm Settings", "Auto-name controls")
|
|
IF LEN(value$) THEN
|
|
AutoNameControls = (value$ = "True")
|
|
ELSE
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Auto-name controls", "True"
|
|
AutoNameControls = True
|
|
END IF
|
|
|
|
value$ = ReadSetting("InForm/InForm.ini", "InForm Settings", "Snap to edges")
|
|
IF LEN(value$) THEN
|
|
__UI_SnapLines = (value$ = "True")
|
|
ELSE
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Snap to edges", "True"
|
|
__UI_SnapLines = True
|
|
END IF
|
|
|
|
value$ = ReadSetting("InForm/InForm.ini", "InForm Settings", "Show position and size")
|
|
IF LEN(value$) THEN
|
|
__UI_ShowPositionAndSize = (value$ = "True")
|
|
ELSE
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Show position and size", "True"
|
|
__UI_ShowPositionAndSize = True
|
|
END IF
|
|
|
|
value$ = ReadSetting("InForm/InForm.ini", "InForm Settings", "Check for updates")
|
|
IF LEN(value$) THEN
|
|
CheckUpdates = (value$ = "True")
|
|
ELSE
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Check for updates", "True"
|
|
CheckUpdates = True
|
|
END IF
|
|
|
|
value$ = ReadSetting("InForm/InForm.ini", "InForm Settings", "Show font list")
|
|
IF LEN(value$) THEN
|
|
ShowFontList = (value$ = "True")
|
|
ELSE
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Show font list", "True"
|
|
ShowFontList = True
|
|
END IF
|
|
|
|
value$ = ReadSetting("InForm/InForm.ini", "InForm Settings", "Recompile updater")
|
|
IF value$ = "True" THEN
|
|
$IF WIN THEN
|
|
SHELL _HIDE _DONTWAIT "qb64.exe -x InForm/updater/InFormUpdater.bas -o InForm/updater/InFormUpdater.exe"
|
|
$ELSE
|
|
SHELL _HIDE _DONTWAIT "./qb64 -x InForm/updater/InFormUpdater.bas -o InForm/updater/InFormUpdater"
|
|
$END IF
|
|
WriteSetting "InForm/InForm.ini", "InForm Settings", "Recompile updater", "False"
|
|
END IF
|
|
|
|
$IF WIN THEN
|
|
$ELSE
|
|
value$ = ReadSetting("InForm/InForm.ini", "InForm Settings", "Swap mouse buttons")
|
|
__UI_MouseButtonsSwap = (value$ = "True")
|
|
Control(OptionsMenuSwapButtons).Value = __UI_MouseButtonsSwap
|
|
$END IF
|
|
|
|
Control(ViewMenuPreviewDetach).Value = PreviewAttached
|
|
Control(OptionsMenuAutoName).Value = AutoNameControls
|
|
Control(OptionsMenuCheckUpdates).Value = CheckUpdates
|
|
Control(OptionsMenuSnapLines).Value = __UI_SnapLines
|
|
Control(ViewMenuShowPositionAndSize).Value = __UI_ShowPositionAndSize
|
|
|
|
IF _FILEEXISTS("InForm/UiEditorPreview.frmbin") THEN KILL "InForm/UiEditorPreview.frmbin"
|
|
|
|
b$ = "Parsing command line..."
|
|
GOSUB ShowMessage
|
|
|
|
IF _FILEEXISTS(COMMAND$) THEN
|
|
SELECT CASE LCASE$(RIGHT$(COMMAND$, 4))
|
|
CASE ".bas"
|
|
'Does this .bas $include a .frm?
|
|
FreeFileNum = FREEFILE
|
|
DIM uB$
|
|
OPEN COMMAND$ FOR BINARY AS #FreeFileNum
|
|
DO
|
|
IF EOF(FreeFileNum) THEN EXIT DO
|
|
LINE INPUT #FreeFileNum, b$
|
|
b$ = LTRIM$(RTRIM$(b$))
|
|
uB$ = UCASE$(b$)
|
|
IF (LEFT$(b$, 1) = "'" OR LEFT$(uB$, 4) = "REM ") AND _
|
|
INSTR(uB$, "$INCLUDE") > 0 THEN
|
|
DIM FirstMark AS INTEGER, SecondMark AS INTEGER
|
|
FirstMark = INSTR(INSTR(uB$, "$INCLUDE") + 8, uB$, "'")
|
|
IF FirstMark > 0 THEN
|
|
SecondMark = INSTR(FirstMark + 1, uB$, "'")
|
|
IF SecondMark > 0 THEN
|
|
uB$ = MID$(uB$, FirstMark + 1, SecondMark - FirstMark - 1)
|
|
IF RIGHT$(uB$, 4) = ".FRM" THEN
|
|
FileToOpen$ = MID$(b$, FirstMark + 1, SecondMark - FirstMark - 1)
|
|
EXIT DO
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
LOOP
|
|
CLOSE #FreeFileNum
|
|
CASE ELSE
|
|
IF LCASE$(RIGHT$(COMMAND$, 7)) = ".frmbin" OR LCASE$(RIGHT$(COMMAND$, 4)) = ".frm" THEN
|
|
FileToOpen$ = COMMAND$
|
|
END IF
|
|
END SELECT
|
|
|
|
IF LEN(FileToOpen$) > 0 THEN
|
|
IF INSTR(FileToOpen$, "/") > 0 OR INSTR(FileToOpen$, "\") > 0 THEN
|
|
FOR i = LEN(FileToOpen$) TO 1 STEP -1
|
|
IF ASC(FileToOpen$, i) = 92 OR ASC(FileToOpen$, i) = 47 THEN
|
|
CurrentPath$ = LEFT$(FileToOpen$, i - 1)
|
|
EXIT FOR
|
|
END IF
|
|
NEXT
|
|
END IF
|
|
FreeFileNum = FREEFILE
|
|
OPEN FileToOpen$ FOR BINARY AS #FreeFileNum
|
|
b$ = SPACE$(LOF(FreeFileNum))
|
|
GET #FreeFileNum, 1, b$
|
|
CLOSE #FreeFileNum
|
|
|
|
OPEN "InForm/UiEditorPreview.frmbin" FOR BINARY AS #FreeFileNum
|
|
PUT #FreeFileNum, 1, b$
|
|
CLOSE #FreeFileNum
|
|
END IF
|
|
END IF
|
|
|
|
b$ = "Starting host (click 'unblock' if your Operating System asks)..."
|
|
GOSUB ShowMessage
|
|
DIM HostAttempts AS INTEGER
|
|
RANDOMIZE TIMER
|
|
DO
|
|
HostAttempts = HostAttempts + 1
|
|
HostPort = LTRIM$(STR$(INT(RND * 5000 + 60000)))
|
|
Host = _OPENHOST("TCP/IP:" + HostPort)
|
|
LOOP UNTIL Host <> 0 OR HostAttempts > 1000
|
|
|
|
IF Host = 0 THEN
|
|
DIM Answer AS INTEGER
|
|
Answer = MessageBox("Can't start as host.", "", MsgBox_OkOnly + MsgBox_Critical)
|
|
SYSTEM
|
|
END IF
|
|
|
|
b$ = "Checking Preview component..."
|
|
GOSUB ShowMessage
|
|
|
|
$IF WIN THEN
|
|
IF _FILEEXISTS("InForm/UiEditorPreview.exe") = 0 THEN
|
|
IF _FILEEXISTS("InForm/UiEditorPreview.bas") = 0 THEN
|
|
GOTO UiEditorPreviewNotFound
|
|
ELSE
|
|
b$ = "Compiling Preview component..."
|
|
GOSUB ShowMessage
|
|
SHELL _HIDE "qb64.exe -x .\InForm\UiEditorPreview.bas -o .\InForm\UiEditorPreview.exe"
|
|
IF _FILEEXISTS("InForm/UiEditorPreview.exe") = 0 THEN GOTO UiEditorPreviewNotFound
|
|
END IF
|
|
END IF
|
|
b$ = "Launching Preview component..."
|
|
GOSUB ShowMessage
|
|
SHELL _DONTWAIT ".\InForm\UiEditorPreview.exe " + HostPort
|
|
$ELSE
|
|
IF _FILEEXISTS("InForm/UiEditorPreview") = 0 THEN
|
|
IF _FILEEXISTS("./InForm/UiEditorPreview.bas") = 0 THEN
|
|
GOTO UiEditorPreviewNotFound
|
|
ELSE
|
|
b$ = "Compiling Preview component..."
|
|
GOSUB ShowMessage
|
|
SHELL _HIDE "./qb64 -x ./InForm/UiEditorPreview.bas -o ./InForm/UiEditorPreview"
|
|
IF _FILEEXISTS("InForm/UiEditorPreview") = 0 THEN GOTO UiEditorPreviewNotFound
|
|
END IF
|
|
END IF
|
|
b$ = "Launching Preview component..."
|
|
GOSUB ShowMessage
|
|
SHELL _DONTWAIT "./InForm/UiEditorPreview " + HostPort
|
|
$END IF
|
|
|
|
b$ = "Reading directory..."
|
|
GOSUB ShowMessage
|
|
|
|
'Fill "open dialog" listboxes:
|
|
'-------------------------------------------------
|
|
DIM TotalFiles%
|
|
IF CurrentPath$ = "" THEN CurrentPath$ = _STARTDIR$
|
|
Text(FileList) = idezfilelist$(CurrentPath$, 0, 1, TotalFiles%)
|
|
Control(FileList).Max = TotalFiles%
|
|
Control(FileList).LastVisibleItem = 0 'Reset it so it's recalculated
|
|
|
|
Text(DirList) = idezpathlist$(CurrentPath$, TotalFiles%)
|
|
Control(DirList).Max = TotalFiles%
|
|
Control(DirList).LastVisibleItem = 0 'Reset it so it's recalculated
|
|
|
|
Caption(PathLB) = "Path: " + CurrentPath$
|
|
'-------------------------------------------------
|
|
|
|
'Load font list
|
|
b$ = "Loading font list..."
|
|
GOSUB ShowMessage
|
|
LoadFontList
|
|
|
|
'Assign InputBox IDs:
|
|
i = 0
|
|
i = i + 1: InputBox(i).ID = NameTB: InputBox(i).LabelID = NameLB: InputBox(i).Signal = 1
|
|
i = i + 1: InputBox(i).ID = CaptionTB: InputBox(i).LabelID = CaptionLB: InputBox(i).Signal = 2
|
|
i = i + 1: InputBox(i).ID = TextTB: InputBox(i).LabelID = TextLB: InputBox(i).Signal = 3
|
|
i = i + 1: InputBox(i).ID = MaskTB: InputBox(i).LabelID = MaskLB: InputBox(i).Signal = 35
|
|
i = i + 1: InputBox(i).ID = TopTB: InputBox(i).LabelID = TopLB: InputBox(i).Signal = 4
|
|
i = i + 1: InputBox(i).ID = LeftTB: InputBox(i).LabelID = LeftLB: InputBox(i).Signal = 5
|
|
i = i + 1: InputBox(i).ID = WidthTB: InputBox(i).LabelID = WidthLB: InputBox(i).Signal = 6
|
|
i = i + 1: InputBox(i).ID = HeightTB: InputBox(i).LabelID = HeightLB: InputBox(i).Signal = 7
|
|
i = i + 1: InputBox(i).ID = FontTB: InputBox(i).LabelID = FontLB: InputBox(i).Signal = 8
|
|
i = i + 1: InputBox(i).ID = FontList: InputBox(i).LabelID = FontListLB: InputBox(i).Signal = 8
|
|
i = i + 1: InputBox(i).ID = TooltipTB: InputBox(i).LabelID = TooltipLB: InputBox(i).Signal = 9
|
|
i = i + 1: InputBox(i).ID = ValueTB: InputBox(i).LabelID = ValueLB: InputBox(i).Signal = 10
|
|
i = i + 1: InputBox(i).ID = BooleanOptions: InputBox(i).LabelID = BooleanLB: InputBox(i).Signal = 10
|
|
i = i + 1: InputBox(i).ID = MinTB: InputBox(i).LabelID = MinLB: InputBox(i).Signal = 11
|
|
i = i + 1: InputBox(i).ID = MaxTB: InputBox(i).LabelID = MaxLB: InputBox(i).Signal = 12
|
|
i = i + 1: InputBox(i).ID = IntervalTB: InputBox(i).LabelID = IntervalLB: InputBox(i).Signal = 13
|
|
i = i + 1: InputBox(i).ID = MinIntervalTB: InputBox(i).LabelID = MinIntervalLB: InputBox(i).Signal = 36
|
|
i = i + 1: InputBox(i).ID = PaddingTB: InputBox(i).LabelID = PaddingLeftrightLB: InputBox(i).Signal = 31
|
|
i = i + 1: InputBox(i).ID = AlignOptions: InputBox(i).LabelID = TextAlignLB
|
|
i = i + 1: InputBox(i).ID = VAlignOptions: InputBox(i).LabelID = VerticalAlignLB
|
|
i = i + 1: InputBox(i).ID = BulletOptions: InputBox(i).LabelID = BulletOptionsLB
|
|
REDIM _PRESERVE InputBox(1 TO i) AS newInputBox
|
|
REDIM InputBoxText(1 TO i) AS STRING
|
|
|
|
'Assign Toggles IDs:
|
|
i = 0
|
|
i = i + 1: Toggles(i) = Stretch
|
|
i = i + 1: Toggles(i) = HasBorder
|
|
i = i + 1: Toggles(i) = ShowPercentage
|
|
i = i + 1: Toggles(i) = PasswordMaskCB
|
|
i = i + 1: Toggles(i) = WordWrap
|
|
i = i + 1: Toggles(i) = CanHaveFocus
|
|
i = i + 1: Toggles(i) = Disabled
|
|
i = i + 1: Toggles(i) = Transparent
|
|
i = i + 1: Toggles(i) = Hidden
|
|
i = i + 1: Toggles(i) = CenteredWindow
|
|
i = i + 1: Toggles(i) = Resizable
|
|
i = i + 1: Toggles(i) = AutoScroll
|
|
REDIM _PRESERVE Toggles(1 TO i) AS LONG
|
|
|
|
ToolTip(FontTB) = "Multiple fonts can be specified by separating them with a question mark (?)." + CHR$(10) + "The first font that can be found/loaded is used."
|
|
ToolTip(FontList) = "System fonts may not be available in all computers. To specify a local font file, right-click 'Font' to the left of this list and disable 'Show system fonts list'."
|
|
ToolTip(ColorPreview) = "Click to copy the current color's hex value to the clipboard."
|
|
|
|
StatusBarBackColor = Darken(__UI_DefaultColor(__UI_Type_Form, 2), 90)
|
|
Control(StatusBar).BackColor = StatusBarBackColor
|
|
|
|
b$ = "Loading images..."
|
|
GOSUB ShowMessage
|
|
|
|
'Load toolbox images:
|
|
DIM CommControls AS LONG
|
|
CommControls = LoadEditorImage("commoncontrols.bmp")
|
|
__UI_ClearColor CommControls, 0, 0
|
|
|
|
i = 0
|
|
Control(AddButton).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
i = i + 1: _PUTIMAGE (0, 0), CommControls, Control(AddButton).HelperCanvas, (0, i * 16 - 16)-STEP(15, 15)
|
|
Control(AddLabel).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
i = i + 1: _PUTIMAGE (0, 0), CommControls, Control(AddLabel).HelperCanvas, (0, i * 16 - 16)-STEP(15, 15)
|
|
Control(AddTextBox).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
i = i + 1: _PUTIMAGE (0, 0), CommControls, Control(AddTextBox).HelperCanvas, (0, i * 16 - 16)-STEP(15, 15)
|
|
Control(AddCheckBox).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
i = i + 1: _PUTIMAGE (0, 0), CommControls, Control(AddCheckBox).HelperCanvas, (0, i * 16 - 16)-STEP(15, 15)
|
|
Control(AddRadioButton).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
i = i + 1: _PUTIMAGE (0, 0), CommControls, Control(AddRadioButton).HelperCanvas, (0, i * 16 - 16)-STEP(15, 15)
|
|
Control(AddListBox).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
i = i + 1: _PUTIMAGE (0, 0), CommControls, Control(AddListBox).HelperCanvas, (0, i * 16 - 16)-STEP(15, 15)
|
|
Control(AddDropdownList).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
i = i + 1: _PUTIMAGE (0, 0), CommControls, Control(AddDropdownList).HelperCanvas, (0, i * 16 - 16)-STEP(15, 15)
|
|
Control(AddTrackBar).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
i = i + 1: _PUTIMAGE (0, 0), CommControls, Control(AddTrackBar).HelperCanvas, (0, i * 16 - 16)-STEP(15, 15)
|
|
Control(AddProgressBar).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
i = i + 1: _PUTIMAGE (0, 0), CommControls, Control(AddProgressBar).HelperCanvas, (0, i * 16 - 16)-STEP(15, 15)
|
|
Control(AddPictureBox).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
i = i + 1: _PUTIMAGE (0, 0), CommControls, Control(AddPictureBox).HelperCanvas, (0, i * 16 - 16)-STEP(15, 15)
|
|
Control(AddFrame).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
i = i + 1: _PUTIMAGE (0, 0), CommControls, Control(AddFrame).HelperCanvas, (0, i * 16 - 16)-STEP(15, 15)
|
|
|
|
'Draw ToggleSwitch icon
|
|
prevDest = _DEST
|
|
Control(AddToggleSwitch).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
_DEST Control(AddToggleSwitch).HelperCanvas
|
|
LINE (2, 4)-(13, 11), _RGB32(0, 128, 255), BF
|
|
LINE (2, 4)-(13, 11), _RGB32(170, 170, 170), B
|
|
LINE (8, 6)-(11, 9), _RGB32(255, 255, 255), BF
|
|
|
|
'Draw AddNumericBox icon
|
|
Control(AddNumericBox).HelperCanvas = _NEWIMAGE(16, 16, 32)
|
|
_DEST Control(AddNumericBox).HelperCanvas
|
|
_FONT 8
|
|
LINE (1, 3)-(15, 13), _RGB32(255, 255, 255), BF
|
|
LINE (1, 3)-(15, 13), _RGB32(132, 165, 189), B
|
|
COLOR _RGB32(55, 55, 55), _RGBA32(0, 0, 0, 0)
|
|
__UI_PrintString 5, 3, "#"
|
|
|
|
'Import Align menu icons from InForm.ui
|
|
Control(AlignMenuAlignLeft).HelperCanvas = Control(__UI_GetID("__UI_PreviewMenuAlignLeft")).HelperCanvas
|
|
Control(AlignMenuAlignRight).HelperCanvas = Control(__UI_GetID("__UI_PreviewMenuAlignRight")).HelperCanvas
|
|
Control(AlignMenuAlignTops).HelperCanvas = Control(__UI_GetID("__UI_PreviewMenuAlignTops")).HelperCanvas
|
|
Control(AlignMenuAlignBottoms).HelperCanvas = Control(__UI_GetID("__UI_PreviewMenuAlignBottoms")).HelperCanvas
|
|
Control(AlignMenuAlignCentersV).HelperCanvas = Control(__UI_GetID("__UI_PreviewMenuAlignCentersV")).HelperCanvas
|
|
Control(AlignMenuAlignCentersH).HelperCanvas = Control(__UI_GetID("__UI_PreviewMenuAlignCentersH")).HelperCanvas
|
|
|
|
_DEST prevDest
|
|
|
|
Control(FileMenuSave).HelperCanvas = LoadEditorImage("disk.png")
|
|
|
|
_FREEIMAGE CommControls
|
|
|
|
b$ = "Connecting to preview component..."
|
|
GOSUB ShowMessage
|
|
DO
|
|
Client = _OPENCONNECTION(Host)
|
|
IF Client THEN EXIT DO
|
|
IF _EXIT THEN SYSTEM 'Can't force user to wait...
|
|
_DISPLAY
|
|
_LIMIT 15
|
|
LOOP
|
|
|
|
b$ = "Connected! Handshaking..."
|
|
GOSUB ShowMessage
|
|
Handshake
|
|
|
|
IF CheckUpdates THEN b$ = "Checking for updates..." ELSE b$ = "InForm Designer"
|
|
GOSUB ShowMessage
|
|
|
|
__UI_RefreshMenuBar
|
|
__UI_ForceRedraw = True
|
|
_FREEIMAGE tempIcon
|
|
|
|
'TIMER(CheckPreviewTimer) ON
|
|
|
|
EXIT SUB
|
|
UiEditorPreviewNotFound:
|
|
i = MessageBox("UiEditorPreview component not found or failed to load.", "UiEditor", MsgBox_OkOnly + MsgBox_Critical)
|
|
SYSTEM
|
|
|
|
ShowMessage:
|
|
DIM PreserveDestMessage AS LONG
|
|
PreserveDestMessage = _DEST
|
|
_DEST 0
|
|
_FONT Control(__UI_FormID).Font
|
|
IF tempIcon < -1 THEN
|
|
CLS , _RGB32(255, 255, 255)
|
|
_PUTIMAGE (_WIDTH / 2 - _WIDTH(tempIcon) / 2, _HEIGHT / 2 - _HEIGHT(tempIcon) / 2), tempIcon
|
|
COLOR __UI_DefaultColor(__UI_Type_Form, 1), _RGBA32(0, 0, 0, 0)
|
|
__UI_PrintString _WIDTH \ 2 - _PRINTWIDTH(b$) \ 2, _HEIGHT / 2 + _HEIGHT(tempIcon) / 2 + _FONTHEIGHT, b$
|
|
_DISPLAY
|
|
ELSE
|
|
CLS , __UI_DefaultColor(__UI_Type_Form, 2)
|
|
COLOR __UI_DefaultColor(__UI_Type_Form, 1), _RGBA32(0, 0, 0, 0)
|
|
__UI_PrintString _WIDTH \ 2 - _PRINTWIDTH(b$) \ 2, _HEIGHT \ 2 - _FONTHEIGHT \ 2, b$
|
|
END IF
|
|
_DISPLAY
|
|
_DEST PreserveDestMessage
|
|
RETURN
|
|
END SUB
|
|
|
|
SUB __UI_KeyPress (id AS LONG)
|
|
LastKeyPress = TIMER
|
|
SELECT EVERYCASE id
|
|
CASE RedValue, GreenValue, BlueValue
|
|
DIM TempID AS LONG
|
|
IF __UI_KeyHit = 18432 THEN
|
|
IF VAL(Text(id)) < 255 THEN
|
|
Text(id) = LTRIM$(STR$(VAL(Text(id)) + 1))
|
|
END IF
|
|
SelectPropertyFully id
|
|
TempID = __UI_GetID(LEFT$(UCASE$(RTRIM$(Control(id).Name)), LEN(UCASE$(RTRIM$(Control(id).Name))) - 5))
|
|
Control(TempID).Value = VAL(Text(id))
|
|
SendNewRGB
|
|
ELSEIF __UI_KeyHit = 20480 THEN
|
|
IF VAL(Text(id)) > 0 THEN
|
|
Text(id) = LTRIM$(STR$(VAL(Text(id)) - 1))
|
|
END IF
|
|
SelectPropertyFully id
|
|
TempID = __UI_GetID(LEFT$(UCASE$(RTRIM$(Control(id).Name)), LEN(UCASE$(RTRIM$(Control(id).Name))) - 5))
|
|
Control(TempID).Value = VAL(Text(id))
|
|
SendNewRGB
|
|
ELSEIF __UI_KeyHit = 13 THEN
|
|
TempID = __UI_GetID(LEFT$(UCASE$(RTRIM$(Control(id).Name)), LEN(UCASE$(RTRIM$(Control(id).Name))) - 5))
|
|
Control(TempID).Value = VAL(Text(id))
|
|
SendNewRGB
|
|
SelectPropertyFully id
|
|
END IF
|
|
Caption(StatusBar) = "Color changed."
|
|
CASE FileNameTextBox
|
|
IF OpenDialogOpen THEN
|
|
IF __UI_KeyHit = 27 THEN
|
|
__UI_KeyHit = 0
|
|
__UI_Click CancelBT
|
|
ELSEIF __UI_KeyHit = 13 THEN
|
|
__UI_KeyHit = 0
|
|
__UI_Click OpenBT
|
|
ELSEIF __UI_KeyHit = 18432 OR __UI_KeyHit = 20480 THEN
|
|
IF Control(FileList).Max > 0 THEN __UI_Focus = FileList
|
|
ELSE
|
|
IF Control(FileList).Max > 0 THEN
|
|
SELECT CASE __UI_KeyHit
|
|
CASE 48 TO 57, 65 TO 90, 97 TO 122 'Alphanumeric
|
|
__UI_ListBoxSearchItem Control(FileList)
|
|
END SELECT
|
|
END IF
|
|
END IF
|
|
END IF
|
|
CASE FileList, DirList, CancelBT, OpenBT, ShowOnlyFrmbinFilesCB
|
|
IF __UI_KeyHit = 27 THEN
|
|
__UI_Click CancelBT
|
|
END IF
|
|
CASE FileList
|
|
IF __UI_KeyHit = 13 THEN
|
|
__UI_KeyHit = 0
|
|
__UI_Click OpenBT
|
|
END IF
|
|
CASE ControlList, UpBT, DownBT, CloseZOrderingBT
|
|
IF __UI_KeyHit = 27 THEN
|
|
__UI_Click CloseZOrderingBT
|
|
END IF
|
|
CASE NameTB, CaptionTB, TextTB, MaskTB, TopTB, LeftTB, WidthTB, HeightTB, FontTB, TooltipTB, ValueTB, MinTB, MaxTB, IntervalTB, PaddingTB, MinIntervalTB
|
|
IF __UI_KeyHit = 13 THEN
|
|
'Send the preview the new property value
|
|
DIM FloatValue AS _FLOAT, b$, TempValue AS LONG, i AS LONG
|
|
STATIC PreviousValue$, PreviousControl AS LONG, PreviousProperty AS INTEGER
|
|
|
|
IF InputBox(GetInputBoxFromID(id)).Sent = False THEN
|
|
PreviousValue$ = Text(id)
|
|
PreviousControl = FirstSelected
|
|
PreviousProperty = id
|
|
TempValue = GetPropertySignal(id)
|
|
SELECT CASE TempValue
|
|
CASE 1, 2, 3, 8, 9, 35 'Name, caption, text, font, tooltips, mask
|
|
b$ = MKL$(LEN(Text(id))) + Text(id)
|
|
CASE 4, 5, 6, 7, 31 'Top, left, width, height, padding
|
|
b$ = MKI$(VAL(Text(id)))
|
|
CASE 10, 11, 12, 13, 36 'Value, min, max, interval, mininterval
|
|
b$ = _MK$(_FLOAT, VAL(Text(id)))
|
|
END SELECT
|
|
SendData b$, TempValue
|
|
SelectPropertyFully id
|
|
InputBoxText(GetInputBoxFromID(id)) = Text(id)
|
|
InputBox(GetInputBoxFromID(id)).LastEdited = TIMER
|
|
InputBox(GetInputBoxFromID(id)).Sent = True
|
|
Caption(StatusBar) = "Ready."
|
|
END IF
|
|
ELSEIF __UI_KeyHit = 32 THEN
|
|
IF id = NameTB THEN
|
|
__UI_KeyHit = 0
|
|
Caption(StatusBar) = "Control names cannot contain spaces"
|
|
ELSE
|
|
InputBox(GetInputBoxFromID(id)).Sent = False
|
|
END IF
|
|
ELSEIF __UI_KeyHit = 27 THEN
|
|
RevertEdit = True
|
|
Caption(StatusBar) = "Previous property value restored."
|
|
ELSE
|
|
InputBox(GetInputBoxFromID(id)).Sent = False
|
|
END IF
|
|
END SELECT
|
|
END SUB
|
|
|
|
FUNCTION GetPropertySignal& (id AS LONG)
|
|
DIM i AS LONG
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
IF InputBox(i).ID = id THEN GetPropertySignal& = InputBox(i).Signal: EXIT FUNCTION
|
|
NEXT
|
|
END FUNCTION
|
|
|
|
FUNCTION GetInputBoxFromID& (id AS LONG)
|
|
DIM i AS LONG
|
|
FOR i = 1 TO UBOUND(InputBox)
|
|
IF InputBox(i).ID = id THEN GetInputBoxFromID& = i: EXIT FUNCTION
|
|
NEXT
|
|
END FUNCTION
|
|
|
|
SUB __UI_TextChanged (id AS LONG)
|
|
SELECT CASE id
|
|
CASE RedValue, GreenValue, BlueValue
|
|
DIM TempID AS LONG
|
|
TempID = __UI_GetID(LEFT$(UCASE$(RTRIM$(Control(id).Name)), LEN(UCASE$(RTRIM$(Control(id).Name))) - 5))
|
|
Control(TempID).Value = VAL(Text(id))
|
|
CASE FileNameTextBox
|
|
PreselectFile
|
|
END SELECT
|
|
END SUB
|
|
|
|
SUB __UI_ValueChanged (id AS LONG)
|
|
DIM b$
|
|
SELECT EVERYCASE id
|
|
CASE AlignOptions
|
|
IF __UI_Focus <> id THEN EXIT SUB
|
|
b$ = MKI$(Control(AlignOptions).Value - 1)
|
|
SendData b$, 22
|
|
CASE VAlignOptions
|
|
IF __UI_Focus <> id THEN EXIT SUB
|
|
b$ = MKI$(Control(VAlignOptions).Value - 1)
|
|
SendData b$, 32
|
|
CASE BulletOptions
|
|
IF __UI_Focus <> id THEN EXIT SUB
|
|
b$ = MKI$(Control(BulletOptions).Value - 1)
|
|
SendData b$, 37
|
|
CASE BooleanOptions
|
|
b$ = _MK$(_FLOAT, -(Control(BooleanOptions).Value - 1))
|
|
SendData b$, GetPropertySignal(BooleanOptions)
|
|
CASE FontList, FontSizeList
|
|
b$ = FontFile(Control(FontList).Value) + "," + LTRIM$(STR$(Control(FontSizeList).Value + 7))
|
|
b$ = MKL$(LEN(b$)) + b$
|
|
SendData b$, 8
|
|
CASE Red
|
|
Text(RedValue) = LTRIM$(STR$(Control(Red).Value))
|
|
CASE Green
|
|
Text(GreenValue) = LTRIM$(STR$(Control(Green).Value))
|
|
CASE Blue
|
|
Text(BlueValue) = LTRIM$(STR$(Control(Blue).Value))
|
|
CASE Red, Green, Blue
|
|
'Compose a new color and preview it
|
|
DIM NewColor AS _UNSIGNED LONG
|
|
NewColor = _RGB32(Control(Red).Value, Control(Green).Value, Control(Blue).Value)
|
|
IF __UI_MouseDownOnID = id THEN QuickColorPreview NewColor
|
|
CASE ControlList
|
|
Control(UpBT).Disabled = False
|
|
Control(DownBT).Disabled = False
|
|
IF Control(ControlList).Value = 1 THEN
|
|
Control(UpBT).Disabled = True
|
|
ELSEIF Control(ControlList).Value = 0 THEN
|
|
Control(UpBT).Disabled = True
|
|
Control(DownBT).Disabled = True
|
|
ELSEIF Control(ControlList).Value = Control(ControlList).Max THEN
|
|
Control(DownBT).Disabled = True
|
|
END IF
|
|
IF Control(ControlList).Value > 0 THEN
|
|
b$ = MKL$(zOrderIDs(Control(ControlList).Value))
|
|
ELSE
|
|
b$ = MKL$(0)
|
|
END IF
|
|
SendData b$, 213
|
|
CASE FileList
|
|
Text(FileNameTextBox) = GetItem(FileList, Control(FileList).Value)
|
|
END SELECT
|
|
END SUB
|
|
|
|
SUB PreselectFile
|
|
DIM b$
|
|
b$ = GetItem(FileList, Control(FileList).Value)
|
|
IF LCASE$(Text(FileNameTextBox)) = LCASE$(LEFT$(b$, LEN(Text(FileNameTextBox)))) THEN
|
|
Text(FileNameTextBox) = Text(FileNameTextBox) + MID$(b$, LEN(Text(FileNameTextBox)) + 1)
|
|
Control(FileNameTextBox).TextIsSelected = True
|
|
Control(FileNameTextBox).SelectionStart = LEN(Text(FileNameTextBox))
|
|
END IF
|
|
END SUB
|
|
|
|
FUNCTION EditorImageData$ (FileName$)
|
|
DIM A$
|
|
|
|
SELECT CASE LCASE$(FileName$)
|
|
CASE "disk.png"
|
|
A$ = MKI$(16) + MKI$(16)
|
|
A$ = A$ + "0000005D@1AA15TB=MdA[`hQ7>c[ZZj<7:HOcPgL^=COc=g<0FGMbd7Nc=cH"
|
|
A$ = A$ + "NiE<:A4A]<eC<eDEBmdE9UDB>0000`0GHIUb854?oWiUFj_iUCno4;\`o;Nh"
|
|
A$ = A$ + "QoOjXSnoXO^ioKNiUo_k]cnoHFIUo7S8Rl?IOaeoQeEFoc3>hLCD:YdCJM5E"
|
|
A$ = A$ + "o33:SPOUC>io5C<an3000hoa7O\oMgMgnS=fHk?fGO]oNk]gn[HR9j?000Po"
|
|
A$ = A$ + "Bi4CkcDB6m?<`\B=7AD@;iTB8m_<\P2om]WNoOZYVn_59T`oYR:ZoSk]gnO]"
|
|
A$ = A$ + "c>kod>k\o[K^in?Mb9go9000n[dA5eoA35do`\b:e04?i`TA35doR\16lcWN"
|
|
A$ = A$ + "jmOYUFjo0000oOZYVn?^gNkod>k\oCk\cn_^iVkob5GLo3000lo@odCoo\S>"
|
|
A$ = A$ + "o_R9VDS=b83Cn\C>oga5D`oK]efoXNjYog7Olm_ZYVjoanj[ooZ[^n_[]fjo"
|
|
A$ = A$ + "b6K\o[FJYm?000`ojLS=mK3=bl_9R8B=bl2;<=3<_lO<^d2o^\R:oODA4m_G"
|
|
A$ = A$ + "L]eoFAeDo;5D@moDA5eoB15Do3UC=m??jTcoahB;o7S;]h?<]`boR8R8el2;"
|
|
A$ = A$ + "\`D<]dbo^\b:l[3>glo>iPcof@c<o_C>gl??jTcolT3>ocS>ilO?jTcood3?"
|
|
A$ = A$ + "oK3=clO;ZTRo^\R:o;R8RD3?iT3C0000o7GK]aOe?kloEk\coG]c>oOe?klo"
|
|
A$ = A$ + "Eo\coGmc>oOe?kloEkLcoSMdAo_aonkojPc=nOb8Rlo:[\B=314?<1000l?Q"
|
|
A$ = A$ + "028oY;^ho?>gLo?iMgmoTgMgoCNgMo?iMgmoTgMgo?NgLo_iOomoKG=eoKd@"
|
|
A$ = A$ + "3eO7JTao`\b:e04?l`4000`o2fGOlSNhQo_hL_moSg=go?NgMoohMcmoSgMg"
|
|
A$ = A$ + "o?NgMo_hLcmoUomgoWmdCo_@01ToJHQ5o_b:[D3@l`3C0000o?8P0b_jUCno"
|
|
A$ = A$ + "To]goG>hOoOiPomoU3ngoG>hOoOiPomoUomgoS^hRo?gGKmo35d?mGA4@lo:"
|
|
A$ = A$ + "[\B=o`3?=1000lOQ2:8o]S>joO^hQo?jS;noX?^hoSnhRo?jS;noX?^hoO^h"
|
|
A$ = A$ + "Ro_jUGnoO_]fn;4@0mO4<``o\`2;d\c>kT40000h5:XPhc>jWg?jT?>oYG>i"
|
|
A$ = A$ + "lWNiTc?jT?NoXCnhmWNiTc?jT?>o[O^ilgMfHo?A294l3000Kg2:XTc9T@2E"
|
|
A$ = A$ + "0000OcUFImoS;^ho:NhQo_8R8noR8Rho;R8Ro_8R8noR8Rho;R8Ro_8R8n_R"
|
|
A$ = A$ + "7NholXC>iW@14X=9P02@<`03FLa5Gh4000`?000001000040000@00000100"
|
|
A$ = A$ + "0040000@000001000040000@0000o@000<D5B81B0000%%70"
|
|
CASE "commoncontrols.bmp"
|
|
A$ = MKI$(16) + MKI$(176)
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_emfjo<ZE:"
|
|
A$ = A$ + "o?G>0loN21`ocU30o_W@0loLi0`ok940o?G>0loN21`ocU30o_W@0loN:1aoFKL[oK?0fo_cmFjoD^F>ok]c6ooooooooooooooo"
|
|
A$ = A$ + "oooooooooooooooooooooooooooooooooooooooo_O^goCiHal_emfjo<ZE:ok]e6ooooooooooooooooooooooooooooooooooo"
|
|
A$ = A$ + "oooooooooooooooooooooooooooooooiFKlo4:E8o?G>0loooooooooooooooooooooooooooooooooooooo0000oooooooooooo"
|
|
A$ = A$ + "oooooooooooooooogOomo_W@0loN21`oooooooooooooooooooooooooooooooooooooo3000loooooooooooooooooooooogOom"
|
|
A$ = A$ + "oOoooooLi0`ocU30ooooooooooooooooo3000l?000`ooooooooooo?000`o0000o3000loooooooooooOomgook_Oook940o_W@"
|
|
A$ = A$ + "0lomooooooooooooooooooooooooo3000loooooo0000oooooooooooo0000oooooook_Ooo_Oomo?G>0loLi0`ogooooOomgooo"
|
|
A$ = A$ + "oooo0000o3000l?000`oooooo3000loooooogOomo3000lomgOooWonkoOnk_ooN21`ok940oonmgooooooo0000oOooooomgOoo"
|
|
A$ = A$ + "0000oOomgo?000`ogOomoOoooo?000`ogooooOni_ooi_onocU30o?G>0lomgOoo_OomoOomgo?000`o0000o3000lomgOoo0000"
|
|
A$ = A$ + "o3000l?000`ogOomoonmgooiWonoNOnio_W@0loN21`o_onkoOomgookgOoogOomoonmgoomgOoo_OomoOomgookgOoogOomoonm"
|
|
A$ = A$ + "goomgOooNOniokmi_ooLi0`okY44ok\c6ook_ono_Oomoonk_ookgOoo_onkoonmgook_ono_Oomoonk_ookgOoo_onkoonmgoO_"
|
|
A$ = A$ + "mFko4:56oK]a]n?SS5comFK[ok\eNo_cFkmo6K]gok\eNo_cFkmo>K]goK\eNo_cFkmo>K]gok\eNoO_mFko<>F<oKM_]n_m0Hoo"
|
|
A$ = A$ + "FKL[oCXDQloN21`ocU30o_W@0loLi0`ok940o?G>0loN21`ocU30o_W@0loLi0`o4:56okL_Un_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK\a6ooHB9eof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fooNk]go0000oK\a6o_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_a6Klo0000o3000lO8HPaof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoo4>gJo_gJSm?000`o0000ok\c>o_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoo6K\ao3128l_a6Klo:9D>o3000lO>aTbof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pmoc9S4n_F:9do"
|
|
A$ = A$ + "f3Pmok\c>o?000`o8000oK\a6o_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_@i4co6K\aoK?0fo_m0HooQP16"
|
|
A$ = A$ + "o3000loHJ9eof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_c>klo0000o[T@ilO>a4co2UC<o3148l?000`o0000ok\c"
|
|
A$ = A$ + ">o_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hooc=VFo?VDBm_m0Hoof3PmoK?0fo_m0Hoo0000o3000loHJ9eof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoof3PmoK?0fo_m0Hoo6K\aoS14@l_a6Klof3PmoK?0fo_m0Hoof3Pmoc8Qkm?000`oQP16oK\a6o_m0Hoof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "6K\ao7C<Yl?28P`oQ426oK\a6o_m0Hoof3PmoK?0fo?000`o0000o3000l?6@0aof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0foO_UBhomb9QoKLY4nO_UBhomF:Qog;W4n_aUBhomF:QogKY4nO_LBho6G:QogKY4nO_UBhomb9QoKLY4n_m0Hoomb9Qoooo"
|
|
A$ = A$ + "ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooO_L^gof3PmoKLY4noooooooooooooooooo"
|
|
A$ = A$ + "oooooooooooooooooooooooooooooooooooooooooooooooooooomF:QoK?0foO_L^gooooooooooooooooooooooooooooooooo"
|
|
A$ = A$ + "0000oooooooooooooooooooooo?000`oooooog;W4n_m0HoomF:Qooooooooooooooooooooooooooooooooo3000loooooooooo"
|
|
A$ = A$ + "oooooooooooo0000oooooo_aUBhof3Pmog;W4nooooooooooo3000l?000`ooooooooooo?000`o0000o3000looooooooooo300"
|
|
A$ = A$ + "0loooooombiNoK?0fo_aUBhoooooo3000looooooooooo3000loooooo0000oooooooooooo0000oooooo?000`oooooogKY4n_m"
|
|
A$ = A$ + "0HoombiNoooooooooooo0000o3000l?000`oooooo3000looooooooooo3000loooooo0000ooooooO_LBhof3PmogKY4noooooo"
|
|
A$ = A$ + "0000oooooooooooo0000oooooo?000`ooooooooooo?000`oooooo3000loooooo6G:QoK?0foO_LBhooooooooooo?000`o0000"
|
|
A$ = A$ + "o3000loooooo0000o3000l?000`ooooooooooo?000`oooooog;Wkm_m0Hoo6G:Qoooooooooooooooooooooooooooooooooooo"
|
|
A$ = A$ + "ooooooooooooooooooooooooooooooooooO_UBhof3Pmog;Wkmoooooooooooooooooooooooooooooooooooooooooooooooooo"
|
|
A$ = A$ + "oooooooooooooooooooomb9QoK?0foO_UBhomb9QoKLY4nO_UBhomF:Qog;W4n_aUBhomF:QogKY4nO_LBho6G:QogKY4nO_UBho"
|
|
A$ = A$ + "mb9QoKLY4n_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoCXDHl?QJ5bo4:56oCXDQl?Q"
|
|
A$ = A$ + "BQao4ZE8oCXDHl?QB5bo4:56oCXFQl?QBQao4:E8oCXDHl_m0Hoof3PmoK?0fo?QB5boNOnioOniWo_gWOnoWonkoOniWooi_ono"
|
|
A$ = A$ + "Wonkoonmgook_onogOomoOomgo?QB5bof3PmoK?0fo_m0Hoo4:56oOnk_o_gWOnoWonkoOnk_ook_ono_onkoOomgookgOoogOom"
|
|
A$ = A$ + "oOomgooooooo4:56oK?0fo_m0Hoof3PmoCXDQl_gWOnoWonkoOniWooi_onoWonkoonmgook_onogOomo7BYQloooooogOomoCXD"
|
|
A$ = A$ + "Ql_m0Hoof3PmoK?0fo?QBQaoWonkoOnk_ook_ono_onkoOomgookgOoogOomo7BYQlO:]Vbooooooooooo?QBQaof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoo4:E8oOniWooi_onoQDJ8oonmgook_onogOomo7BYQlO8U6boQDJ8oooooooooooo4:E8oK?0fo_m0Hoof3PmoCXDHlok_ono"
|
|
A$ = A$ + "_onkoWB[YlO8U6bogOomo7BYQlO:]VboQDJ8oooooooooooooooooCXDHl_m0Hoof3PmoK?0fo?QB5boWonkoonmgoO8U6boQDJ8"
|
|
A$ = A$ + "o7BYQlO8U6boQDJ8oooooooooooooooooooooo?QB5bof3PmoK?0fo_m0Hoo4:56oOomgookgOoogOomo7BYQlO:]VboQDJ8oooo"
|
|
A$ = A$ + "oooooooooooooooooooooooo4:56oK?0fo_m0Hoof3PmoCXDQlok_onogOomoOomgoooooooQDJ8oooooooooooooooooooooooo"
|
|
A$ = A$ + "oooooooooCXDQl_m0Hoof3PmoK?0fo?QBQaogOomoOomgooooooooooooooooooooooooooooooooooooooooooooooooo?QBQao"
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoo4:E8oOomgooooooogOomoooooooooooooooooooooooooooooooooooooooooooo4:E8oK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oCXDHl?QJ5bo4:56oCXDQl?QBQao4ZE8oCXDHl?QB5bo4:56oCXFQl?QBQao4:E8oCXDHl_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_cmFjo]bhHoCXFQl?UkYeo>gKYoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK]cen?QB5boeBiLoKL_]noiWOno>gK[og:U[m?QB5bof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3Pmok]cmnOY4Zeo>KL]oOnk_ook_ono_onkoOomgookgOoomF:QoG:QJm_g>gkof3PmoK?0fo_m0Hoof3PmoK?0fo?Q"
|
|
A$ = A$ + "B5bo>gK[oOniWooi_onoWonkoonmgook_onogOomoOomgo_e>gko4:E8oK?0fo_m0Hoof3PmoK?0fo_cmFjo]BiLoOnk_ook_ono"
|
|
A$ = A$ + "Woniogjien_B6;eoUjMYoonm_ooooooooooooG;Ucm_cmFjof3PmoK?0fo_m0HooD^WFoKL_]noi_onoWonkogji]n_DF;eo2I\B"
|
|
A$ = A$ + "oWB[Yl?WFciogOomoooooo_e>gko<>WBoK?0fo_m0Hoof3PmoCXFQloiWOno_onkoOomgo_B6;eo2i\BoWC_ilO:]VboQ`I:oooo"
|
|
A$ = A$ + "oooooooooooooCXFQl_m0Hoof3PmoK?0foOYD^go>gK[oonmgook_onoUJMYoWB[YlO8UVbo@@94ocYcLnoooooooooook]cmn?S"
|
|
A$ = A$ + "[Ydof3PmoK?0fo_m0Hoo>gKYog:UcmokgOoogOomoonm_o?WFGjoY`I:ocYcLnokgOooooooooooooO]D>go>gKYoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo?QB5boFKL]oOomgooooooogOomoooooooooooooooooooooo_gFKlo4:E8oK?0fo_m0Hoof3PmoK?0fo_m0HooNkL_"
|
|
A$ = A$ + "oG:QJm_g>gkooooooooooooooooooooooooooo_gFKlo]BhHok]cmn_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_g>gko4:E8oG;U"
|
|
A$ = A$ + "cm_e>gkooooook]cmnO]D>go4:E8ok]cmn_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_cmFjo]B9QoCXFQlO["
|
|
A$ = A$ + "D^go>gKYoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "foO_UBhomb9QoKLY4nO_UBhomF:Qog;W4n_aUBhomF:QogKY4nO_LBho6G:QogKY4nO_UBhomb9QoKLY4n_m0Hoomb9Qoooooooo"
|
|
A$ = A$ + "ooooooooooooooooooooooooooooooom>GkookL]oO_aen_cUBiogkL]oo_cenO_L^gof3PmoKLY4noooooooooooooooooooooo"
|
|
A$ = A$ + "oooooooooooooooookL]oO_cen_cUBio0000okL[Dnom>GkomF:QoK?0foO_L^gooooooooooooooooooooooooooooooooooooo"
|
|
A$ = A$ + "oO_aenom>Gko0000oo_cen?000`ogkL]og;W4n_m0HoomF:Qoooooo?000`o0000o3000loooooooooooooooooo>GkogkL]oo_c"
|
|
A$ = A$ + "enom>GkookL]oO_cen_aUBhof3Pmog;W4noooooooooooooooooooooooooooooooooooooogkL]oo_cenom6GkogkL]oO_cenoo"
|
|
A$ = A$ + ">GkombiNoK?0fo_aUBhoooooo3000l?000`o0000o3000l?000`oooooooom_ooo_OnooOokoookWooogonoooniogKY4n_m0Hoo"
|
|
A$ = A$ + "mbiNooooooooooooooooooooooooooooooooooooooom6GkogkL]oO_cenoo>GkogKL]oO_cenO_LBhof3PmogKY4noooooo0000"
|
|
A$ = A$ + "o3000l?000`o0000oooooooooooookL]oO_cenoo>GkogkL]oo_cenom>Gko6G:QoK?0foO_LBhooooooooooooooooooooooooo"
|
|
A$ = A$ + "oooooooooooooO_cenoo>Gko0000oO_cen?000`ookL]og;Wkm_m0Hoo6G:Qoooooooooooooooooooooooooooooooooooooooo"
|
|
A$ = A$ + ">GkogkL]okLYDn?000`o>g:UoO_cenO_UBhof3Pmog;WkmoooooooooooooooooooooooooooooooooooooogKL]oO_cenom>Gko"
|
|
A$ = A$ + ">G:UoO_aenom>Gkomb9QoK?0foO_UBhomb9QoKLY4nO_UBhomF:Qog;W4n_aUBhomF:QogKY4nO_LBho6G:QogKY4nO_UBhomb9Q"
|
|
A$ = A$ + "oKLY4n_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0foO_UBhomb9QoKLY4nO_UBhomF:Qog;W4n_aUBho"
|
|
A$ = A$ + "mF:QogKY4nO_LBho6G:QoCXDHl?QB5bo4:56oCXFQl?QBQaomb9Qoooooooooooooooooooooooooooooooooooooooooooooooo"
|
|
A$ = A$ + "oooooo?QB5bo6K\aoK\a6o_a6Klo4:E8oKLY4noooooooooooooooooooooooooooooooooooooooooooooooooooooo4:56oCXF"
|
|
A$ = A$ + "Ql_a6Klo4:E8oCXDHlO_L^go4:E8oCXDHl?QB5bo4:56oCXDQl?QBQao4:E8oCXDHl?QB5bo4:56oCXDQl?QBQao4:E8oCXDHl?Q"
|
|
A$ = A$ + "B5bof3Pmog;W4noooooooooooooooooooooooooooooooooooooogkL]oo_cenom>Gko>G:UoO_cenoo>GkomF:QoK?0foO_UBho"
|
|
A$ = A$ + "oooooooooooooooooooooooooooooooooooooo_cenom6Gko>G:Uo3000l_cUBiogKL]ogKY4n_m0HoomF:Qoooooo?000`o0000"
|
|
A$ = A$ + "o3000looooooooooooooooom>GkookL]o3000loo>Gko0000oo_cenO_LBhof3PmogKY4noooooooooooooooooooooooooooooo"
|
|
A$ = A$ + "oooooooogkL]oO_cenoo>GkogKL]oO_cenom>GkomF:QoK?0foO_LBhoooooo3000l?000`o0000o3000l?000`oooooog;W4n_a"
|
|
A$ = A$ + "UBhomF:QogKY4nO_LBho6G:QogKY4n_m0HoomF:Qoooooooooooooooooooooooooooooooooooooooo>GkogKL]oO_cenom>Gko"
|
|
A$ = A$ + "okL]oO_aenO_UBhof3PmogKY4noooooo0000o3000l?000`o0000oooooooooooogkL]oo_cen?000`ookL]o3000loo>Gkomb9Q"
|
|
A$ = A$ + "oK?0foO_UBhooooooooooooooooooooooooooooooooooooooO_cenom>Gko>G:Uo3000l_cUBiogkL]ogKY4n_m0Hoomb9Qoooo"
|
|
A$ = A$ + "ooooooooooooooooooooooooooooooooooom>GkookL]oO_cen_cUBiogkL]oo_cenO_UBhof3PmogKY4nO_L^gomF:Qog;W4nO_"
|
|
A$ = A$ + "UBhombiNogKY4nO_LBhomF:Qog;WkmO_UBhomb9QogKY4nO_L^gomF:QoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m"
|
|
A$ = A$ + "0HooQdJ8oSAYQlO8]6boHD:6oC9Skm_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoSAYHl_B>[do"
|
|
A$ = A$ + "2I\Bo[Tc:m?S4>gof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo?Q<Biogooooonk_o_eFKmo4b8U"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoo4b8SoooooooiWOnoFK]eoC8S<n?WUFjoLb9WocIY"
|
|
A$ = A$ + "Un?WLbioLFJYoc9WLn?WUFjoLb9WocIYUnoooooof3PmoC8SDnomooooWonkoK]eFo?Q<Bio_OomoonmoookgOoogooooonmgook"
|
|
A$ = A$ + "gooo_OomoOoooookgOoooooooK?0fo?6URaoLJ=WoOniWo?Smbho4B8Soooooooooooooooooooooooooooooooooooooooooooo"
|
|
A$ = A$ + "oooooooooo_m0Hoo<J=SoSAYHl?U>CioH@96oGJ[]n_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo?SNchoHD:6ocIYUn_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmocIY"
|
|
A$ = A$ + "Un_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pmo_fJ[moJ[]fo[]fJo_fJ[moJ[]fo[]fJ"
|
|
A$ = A$ + "o_fJ[moJ[]fo[]fJo_fJ[moJ[]fo[]fJo_fJ[moJ[]fof3Pmo_fJ[m_gNkmooooooooooooooooooooooooooooooooooooooooo"
|
|
A$ = A$ + "oooooooooooooooooooooooo_onko_fJ[moJ[]foooooo;Ug:m_DN;eoooooo;UgBm_DN[doooooo;Ug:m_DN;eooooooooooooo"
|
|
A$ = A$ + "oooooooooooooooJ[]fo[]fJooooooO>NWcoiHM<ooooooO>NWcoihM>ooooooO>NWcoihM>oooooooooooooooooooooooooooo"
|
|
A$ = A$ + "[]fJo_fJ[mooooooaHM:o7SgalooooooaHM<o7SeYlooooooaHM:o7Sealooooooooooooooooooooooooooo_fJ[moJ[]fooooo"
|
|
A$ = A$ + "o[Tg:m_@N;doooooo;Tg2m_BN[doooooo[Tg2m_@N;dooooooooooooooooooooooooooooJ[]fo[]fJoOniWooooooooooooooo"
|
|
A$ = A$ + "oooooooooooooooooooooooooooooooooooooooooooooooooooiWOno[]fJoK?0fooJ[]fo[]fJo_fJ[moJ[]fo[]fJo_fJ[moJ"
|
|
A$ = A$ + "[]fo[]fJo_fJ[moJ[]fo[]fJo_fJ[moJ[]fo[]fJoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_c]bioFG;WokL[Ln_cebio"
|
|
A$ = A$ + ">g:UokLYDn_aLBhomb9QoG;ScmO]<>go]^gHogjNSmOYc9eoU>WDoK?0fo_m0Hoo>g:Woooooooooooooooooooooooooooooooo"
|
|
A$ = A$ + "oooooooooooooOokooom_oooWkmooO^eoCX@Yl_m0Hoof3PmokL[Lnoooooooooooooooooooooooooooooooo_gNOooa<Vgo7cH"
|
|
A$ = A$ + "No_e6KmooO^eoON_Un?Q:Ubof3PmoK?0fo_c]bioooooooooooooooooooooooooooooooooa<VeogkkoooLmnooQXUeoo_e6o_g"
|
|
A$ = A$ + "eFjo4:D8oK?0fo_m0Hoo>g:UoooooooooooooooooooooooooooooOomo7cHNooL6ooo:AYeo7RD>oooFgkoFg:WoCXBYl_m0Hoo"
|
|
A$ = A$ + "f3PmoKLYDnoooooooooooooooooooooooOokooom_o_e6KmoQXUeoSQD6o_eeFkookL]okL[LnoN2Qaof3PmoK?0fo_aLBhooooo"
|
|
A$ = A$ + "ooooooomWkmoLBhLoG:ScmomNklooO^eoo_g6oooFgkookL]oo_c]n_aUBio4:D8oK?0fo_m0HoomB9Qooooooom_OnoLBhLogji"
|
|
A$ = A$ + "enO]Wgko[=VBokL[LnoJB9doS9U@okM]Lnoo6Gjomb9Uo_G>Hl_m0Hoof3PmoG;Scmom_OnoLF:Qogjien_egkmo]NN]oCXcDnoJ"
|
|
A$ = A$ + "k=foFgK]ok]cmn?000`ogg;WoG;W<n?QiPaof3PmoK?0foO]<^foLF:Qogjien_egKmo]NN]ocXeLnoL6choBEkJo?fLBmO_]Fjo"
|
|
A$ = A$ + "eF:Uo3000lO]Dbhok534oK?0fo_m0Hoo]^gHogjien_egkmo]NN_oCYeLnoN>choSekLo[D[[mO:LZdoBYD>oCiNcm?Uk=go0000"
|
|
A$ = A$ + "o_G>@l_m0Hoof3PmoGjNJmO_WKlo]NN]oCYeLn?Q>CioSekNo;E][mO<L:eoQ@Y@o31Sil_BJUco[YUBo?VD2moNaP`of3PmoK?0"
|
|
A$ = A$ + "foOYc9eoDJ=WocXeLnoN>choSekLo;E][mO<L:eoY@Y@oS1Sil?6<VcoH`H>oWbNil_BiTbok534oK?0fo_m0HooU>WDoCX@Yl?Q"
|
|
A$ = A$ + ":Ubo4:D8oCX@QloN2Qao4:46o_G>HloNiPaok534o_G<@loNaP`ok532o?G:8l_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0HooN[40oK?0fo_g:1`of3Pmok]B0l_m0HooN[40oK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoof3PmoGJYDn?WLBiof3PmoK?0fo_g:1`of3PmoK?0fo_e21`of3PmoK]@0l_m0HooLb9UoGJYDn?W"
|
|
A$ = A$ + "LBiof3PmoGJYLn_m0Hoof3PmoK?0fo_m0HooN[40oK?0fo_m0Hoof3Pmok]B0l_m0Hoof3PmoK?0fo_m0Hoof3Pmoc9WDn?WLBio"
|
|
A$ = A$ + "f3PmoK?0fo_m0HooF;40oK?0fo_e21`of3PmoK?0fo_g:1`of3PmoK?0fo_m0Hoof3PmoK?0foOYUBioUF:UoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0HooLb9Uoc9WDn_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoG:WDnOYUbiof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo?WLBioLb9UoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo_m0HooUF:UoGJYDn_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3Pm"
|
|
A$ = A$ + "oc9WDn?WLBiof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0foOYLBioUF:WoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0HooLb9Uoc9WDn_m0Hoof3PmoK?0fo_m"
|
|
A$ = A$ + "0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoGJYDnOYUBiof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoo"
|
|
A$ = A$ + "f3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo?WLBiof3PmoGJYDn?WLBioUb9Uoc9WDnOYUBioLb9UoG:WDn?WLBioUF:U"
|
|
A$ = A$ + "oc9WDnOYLBioLb9UoGJYDn?WLBiof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0fo_m0Hoof3PmoK?0"
|
|
A$ = A$ + "fo_m0Hoof3PmoK?0%fo?"
|
|
END SELECT
|
|
|
|
EditorImageData$ = A$
|
|
END FUNCTION
|
|
|
|
'---------------------------------------------------------------------------------
|
|
FUNCTION LoadEditorImage& (FileName$)
|
|
DIM MemoryBlock AS _MEM, TempImage AS LONG, NextSlot AS LONG
|
|
DIM NewWidth AS INTEGER, NewHeight AS INTEGER, A$, BASFILE$
|
|
|
|
A$ = EditorImageData$(FileName$)
|
|
IF LEN(A$) = 0 THEN EXIT FUNCTION
|
|
|
|
NewWidth = CVI(LEFT$(A$, 2))
|
|
NewHeight = CVI(MID$(A$, 3, 2))
|
|
A$ = MID$(A$, 5)
|
|
|
|
BASFILE$ = Unpack$(A$)
|
|
|
|
TempImage = _NEWIMAGE(NewWidth, NewHeight, 32)
|
|
MemoryBlock = _MEMIMAGE(TempImage)
|
|
|
|
__UI_MemCopy MemoryBlock.OFFSET, _OFFSET(BASFILE$), LEN(BASFILE$)
|
|
_MEMFREE MemoryBlock
|
|
|
|
LoadEditorImage& = TempImage
|
|
END FUNCTION
|
|
|
|
FUNCTION Unpack$ (PackedData$)
|
|
'Adapted from Dav's BIN2BAS
|
|
'http://www.qbasicnews.com/dav/qb64.php
|
|
DIM A$, i&, B$, C%, F$, C$, t%, B&, X$, btemp$, BASFILE$
|
|
|
|
A$ = PackedData$
|
|
|
|
FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
|
|
IF INSTR(1, B$, "%") THEN
|
|
FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
|
|
IF F$ <> "%" THEN C$ = C$ + F$
|
|
NEXT: B$ = C$
|
|
END IF: FOR t% = LEN(B$) TO 1 STEP -1
|
|
B& = B& * 64 + ASC(MID$(B$, t%)) - 48
|
|
NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
|
|
X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
|
|
NEXT: btemp$ = btemp$ + X$: NEXT
|
|
|
|
Unpack$ = btemp$
|
|
END FUNCTION
|
|
|
|
FUNCTION ReadSequential$ (Txt$, Bytes%)
|
|
ReadSequential$ = LEFT$(Txt$, Bytes%)
|
|
Txt$ = MID$(Txt$, Bytes% + 1)
|
|
END FUNCTION
|
|
|
|
SUB LoadPreview
|
|
DIM a$, b$, i AS LONG, __UI_EOF AS _BYTE, Answer AS _BYTE
|
|
DIM NewType AS INTEGER, NewWidth AS INTEGER, NewHeight AS INTEGER
|
|
DIM NewLeft AS INTEGER, NewTop AS INTEGER, NewName AS STRING
|
|
DIM NewParentID AS STRING, FloatValue AS _FLOAT, Dummy AS LONG
|
|
DIM FormData$
|
|
|
|
TIMER(__UI_EventsTimer) OFF
|
|
TIMER(__UI_RefreshTimer) OFF
|
|
|
|
FormData$ = LastFormData$
|
|
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
|
|
REDIM PreviewCaptions(1 TO CVL(b$)) AS STRING
|
|
REDIM PreviewTexts(1 TO CVL(b$)) AS STRING
|
|
REDIM PreviewMasks(1 TO CVL(b$)) AS STRING
|
|
REDIM PreviewTips(1 TO CVL(b$)) AS STRING
|
|
REDIM PreviewFonts(1 TO CVL(b$)) AS STRING
|
|
REDIM PreviewActualFonts(1 TO CVL(b$)) AS STRING
|
|
REDIM PreviewControls(0 TO CVL(b$)) AS __UI_ControlTYPE
|
|
REDIM PreviewParentIDS(0 TO CVL(b$)) AS STRING
|
|
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
IF CVI(b$) <> -1 THEN GOTO LoadError
|
|
DO
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
Dummy = CVL(b$)
|
|
IF Dummy <= 0 OR Dummy > UBOUND(PreviewControls) THEN EXIT DO 'Corrupted exchange file.
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
NewType = CVI(b$)
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
b$ = ReadSequential$(FormData$, CVI(b$))
|
|
NewName = b$
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
NewWidth = CVI(b$)
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
NewHeight = CVI(b$)
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
NewLeft = CVI(b$)
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
NewTop = CVI(b$)
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
IF CVI(b$) > 0 THEN
|
|
NewParentID = ReadSequential$(FormData$, CVI(b$))
|
|
ELSE
|
|
NewParentID = ""
|
|
END IF
|
|
|
|
PreviewControls(Dummy).ID = Dummy
|
|
PreviewParentIDS(Dummy) = RTRIM$(NewParentID)
|
|
PreviewControls(Dummy).Type = NewType
|
|
PreviewControls(Dummy).Name = NewName
|
|
PreviewControls(Dummy).Width = NewWidth
|
|
PreviewControls(Dummy).Height = NewHeight
|
|
PreviewControls(Dummy).Left = NewLeft
|
|
PreviewControls(Dummy).Top = NewTop
|
|
|
|
DO 'read properties
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
SELECT CASE CVI(b$)
|
|
CASE -2 'Caption
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
b$ = ReadSequential$(FormData$, CVL(b$))
|
|
PreviewCaptions(Dummy) = b$
|
|
CASE -3 'Text
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
b$ = ReadSequential$(FormData$, CVL(b$))
|
|
PreviewTexts(Dummy) = b$
|
|
CASE -4 'Stretch
|
|
PreviewControls(Dummy).Stretch = True
|
|
CASE -5 'Font
|
|
DIM FontSetup$, FindSep AS INTEGER
|
|
DIM NewFontSize$
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
FontSetup$ = ReadSequential$(FormData$, CVI(b$))
|
|
PreviewFonts(Dummy) = FontSetup$
|
|
NewFontSize$ = MID$(FontSetup$, INSTR(FontSetup$, ","))
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
FontSetup$ = ReadSequential$(FormData$, CVI(b$))
|
|
PreviewActualFonts(Dummy) = FontSetup$ + NewFontSize$
|
|
CASE -6 'ForeColor
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
PreviewControls(Dummy).ForeColor = _CV(_UNSIGNED LONG, b$)
|
|
CASE -7 'BackColor
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
PreviewControls(Dummy).BackColor = _CV(_UNSIGNED LONG, b$)
|
|
CASE -8 'SelectedForeColor
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
PreviewControls(Dummy).SelectedForeColor = _CV(_UNSIGNED LONG, b$)
|
|
CASE -9 'SelectedBackColor
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
PreviewControls(Dummy).SelectedBackColor = _CV(_UNSIGNED LONG, b$)
|
|
CASE -10 'BorderColor
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
PreviewControls(Dummy).BorderColor = _CV(_UNSIGNED LONG, b$)
|
|
CASE -11
|
|
PreviewControls(Dummy).BackStyle = __UI_Transparent
|
|
CASE -12
|
|
PreviewControls(Dummy).HasBorder = True
|
|
CASE -13
|
|
b$ = ReadSequential$(FormData$, 1)
|
|
PreviewControls(Dummy).Align = _CV(_BYTE, b$)
|
|
CASE -14
|
|
b$ = ReadSequential$(FormData$, LEN(FloatValue))
|
|
PreviewControls(Dummy).Value = _CV(_FLOAT, b$)
|
|
CASE -15
|
|
b$ = ReadSequential$(FormData$, LEN(FloatValue))
|
|
PreviewControls(Dummy).Min = _CV(_FLOAT, b$)
|
|
CASE -16
|
|
b$ = ReadSequential$(FormData$, LEN(FloatValue))
|
|
PreviewControls(Dummy).Max = _CV(_FLOAT, b$)
|
|
CASE -19
|
|
PreviewControls(Dummy).ShowPercentage = True
|
|
CASE -20
|
|
PreviewControls(Dummy).CanHaveFocus = True
|
|
CASE -21
|
|
PreviewControls(Dummy).Disabled = True
|
|
CASE -22
|
|
PreviewControls(Dummy).Hidden = True
|
|
CASE -23
|
|
PreviewControls(Dummy).CenteredWindow = True
|
|
CASE -24 'Tips
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
b$ = ReadSequential$(FormData$, CVL(b$))
|
|
PreviewTips(Dummy) = b$
|
|
CASE -26
|
|
b$ = ReadSequential$(FormData$, LEN(FloatValue))
|
|
PreviewControls(Dummy).Interval = _CV(_FLOAT, b$)
|
|
CASE -27
|
|
PreviewControls(Dummy).WordWrap = True
|
|
CASE -29
|
|
PreviewControls(Dummy).CanResize = True
|
|
CASE -31
|
|
b$ = ReadSequential$(FormData$, 2)
|
|
PreviewControls(Dummy).Padding = CVI(b$)
|
|
CASE -32
|
|
b$ = ReadSequential$(FormData$, 1)
|
|
PreviewControls(Dummy).VAlign = _CV(_BYTE, b$)
|
|
CASE -33
|
|
PreviewControls(Dummy).PasswordField = True
|
|
CASE -34
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
PreviewControls(Dummy).Encoding = CVL(b$)
|
|
CASE -35
|
|
PreviewDefaultButtonID = Dummy
|
|
CASE -36 'Mask
|
|
b$ = ReadSequential$(FormData$, 4)
|
|
b$ = ReadSequential$(FormData$, CVL(b$))
|
|
PreviewMasks(Dummy) = b$
|
|
CASE -37
|
|
b$ = ReadSequential$(FormData$, LEN(FloatValue))
|
|
PreviewControls(Dummy).MinInterval = _CV(_FLOAT, b$)
|
|
CASE -38
|
|
PreviewControls(Dummy).NumericOnly = True
|
|
CASE -39
|
|
PreviewControls(Dummy).NumericOnly = __UI_NumericWithBounds
|
|
CASE -40
|
|
PreviewControls(Dummy).BulletStyle = __UI_Bullet
|
|
CASE -41
|
|
PreviewControls(Dummy).AutoScroll = True
|
|
CASE -1 'new control
|
|
EXIT DO
|
|
CASE -1024
|
|
__UI_EOF = True
|
|
EXIT DO
|
|
CASE ELSE
|
|
EXIT DO
|
|
END SELECT
|
|
LOOP
|
|
LOOP UNTIL __UI_EOF
|
|
LoadError:
|
|
TIMER(__UI_EventsTimer) ON
|
|
TIMER(__UI_RefreshTimer) ON
|
|
END SUB
|
|
|
|
SUB SendData (b$, Property AS INTEGER)
|
|
IF PreviewSelectionRectangle THEN EXIT SUB
|
|
b$ = "PROPERTY>" + MKI$(Property) + b$ + "<END>"
|
|
PUT #Client, , b$
|
|
END SUB
|
|
|
|
SUB SendSignal (Value AS INTEGER)
|
|
DIM b$
|
|
b$ = "SIGNAL>" + MKI$(Value) + "<END>"
|
|
PUT #Client, , b$
|
|
END SUB
|
|
|
|
SUB UpdateColorPreview (Attribute AS _BYTE, ForeColor AS _UNSIGNED LONG, BackColor AS _UNSIGNED LONG)
|
|
_DEST Control(ColorPreview).HelperCanvas
|
|
_FONT Control(ColorPreview).Font
|
|
IF Attribute = 5 THEN
|
|
CLS , BackColor
|
|
LINE (20, 20)-STEP(_WIDTH - 41, _HEIGHT - 41), ForeColor, B
|
|
LINE (21, 21)-STEP(_WIDTH - 43, _HEIGHT - 43), ForeColor, B
|
|
ColorPreviewWord$ = "#" + MID$(HEX$(ForeColor), 3)
|
|
COLOR ForeColor, BackColor
|
|
__UI_PrintString _WIDTH \ 2 - _PRINTWIDTH(ColorPreviewWord$) \ 2, _HEIGHT \ 2 - _FONTHEIGHT \ 2, ColorPreviewWord$
|
|
ELSE
|
|
CLS , BackColor
|
|
COLOR ForeColor, BackColor
|
|
SELECT CASE Attribute
|
|
CASE 1, 3
|
|
ColorPreviewWord$ = "FG: #" + MID$(HEX$(ForeColor), 3)
|
|
CASE 2, 4
|
|
ColorPreviewWord$ = "BG: #" + MID$(HEX$(BackColor), 3)
|
|
END SELECT
|
|
__UI_PrintString _WIDTH \ 2 - _PRINTWIDTH(ColorPreviewWord$) \ 2, _HEIGHT \ 2 - _FONTHEIGHT \ 2, ColorPreviewWord$
|
|
ColorPreviewWord$ = MID$(ColorPreviewWord$, 5)
|
|
END IF
|
|
_DEST 0
|
|
Control(ColorPreview).Redraw = True 'Force update
|
|
END SUB
|
|
|
|
SUB QuickColorPreview (ThisColor AS _UNSIGNED LONG)
|
|
_DEST Control(ColorPreview).HelperCanvas
|
|
CLS , __UI_DefaultColor(__UI_Type_Form, 2)
|
|
LINE (0, 0)-STEP(_WIDTH, _HEIGHT / 2), ThisColor, BF
|
|
LINE (0, _HEIGHT / 2)-STEP(_WIDTH, _HEIGHT / 2), OldColor, BF
|
|
_DEST 0
|
|
Control(ColorPreview).Redraw = True 'Force update
|
|
END SUB
|
|
|
|
SUB CheckPreview
|
|
'Check if the preview window is still alive
|
|
DIM b$
|
|
|
|
IF OpenDialogOpen THEN EXIT SUB
|
|
|
|
$IF WIN THEN
|
|
DIM hnd&, b&, c&, ExitCode&
|
|
IF UiPreviewPID > 0 THEN
|
|
hnd& = OpenProcess(&H400, 0, UiPreviewPID)
|
|
b& = GetExitCodeProcess(hnd&, ExitCode&)
|
|
c& = CloseHandle(hnd&)
|
|
IF b& = 1 AND ExitCode& = 259 THEN
|
|
'Preview is active.
|
|
Control(ViewMenuPreview).Disabled = True
|
|
ELSE
|
|
'Preview was closed.
|
|
|
|
TIMER(__UI_EventsTimer) OFF
|
|
|
|
__UI_WaitMessage = "Reloading preview window..."
|
|
UiPreviewPID = 0
|
|
__UI_ProcessInputTimer = 0 'Make the "Please wait" message show up immediataly
|
|
|
|
CLOSE Client
|
|
Client = 0
|
|
|
|
__UI_UpdateDisplay
|
|
|
|
SHELL _DONTWAIT ".\InForm\UiEditorPreview.exe " + HostPort
|
|
|
|
DO
|
|
Client = _OPENCONNECTION(Host)
|
|
IF Client THEN EXIT DO
|
|
IF _EXIT THEN SYSTEM 'Can't force user to wait...
|
|
_DISPLAY
|
|
_LIMIT 15
|
|
LOOP
|
|
|
|
Handshake
|
|
|
|
IF LEN(LastFormData$) THEN
|
|
b$ = "RESTORECRASH>" + LastFormData$ + "<END>"
|
|
PUT #Client, , b$
|
|
prevScreenX = -1
|
|
prevScreenY = -1
|
|
UndoPointer = 0
|
|
TotalUndoImages = 0
|
|
END IF
|
|
|
|
TIMER(__UI_EventsTimer) ON
|
|
END IF
|
|
END IF
|
|
$ELSE
|
|
IF UiPreviewPID > 0 THEN
|
|
IF PROCESS_CLOSED(UiPreviewPID, 0) THEN
|
|
'Preview was closed.
|
|
TIMER(__UI_EventsTimer) OFF
|
|
Control(ViewMenuPreview).Disabled = False
|
|
__UI_WaitMessage = "Reloading preview window..."
|
|
UiPreviewPID = 0
|
|
__UI_ProcessInputTimer = 0 'Make the "Please wait" message show up immediataly
|
|
|
|
CLOSE Client
|
|
Client = 0
|
|
|
|
__UI_UpdateDisplay
|
|
|
|
SHELL _DONTWAIT "./InForm/UiEditorPreview " + HostPort
|
|
|
|
DO
|
|
Client = _OPENCONNECTION(Host)
|
|
IF Client THEN EXIT DO
|
|
IF _EXIT THEN SYSTEM 'Can't force user to wait...
|
|
_DISPLAY
|
|
_LIMIT 15
|
|
LOOP
|
|
|
|
Handshake
|
|
|
|
IF LEN(LastFormData$) THEN
|
|
b$ = "RESTORECRASH>" + LastFormData$ + "<END>"
|
|
PUT #Client, , b$
|
|
prevScreenX = -1
|
|
prevScreenY = -1
|
|
UndoPointer = 0
|
|
TotalUndoImages = 0
|
|
END IF
|
|
|
|
TIMER(__UI_EventsTimer) ON
|
|
ELSE
|
|
'Preview is active.
|
|
Control(ViewMenuPreview).Disabled = True
|
|
END IF
|
|
END IF
|
|
$END IF
|
|
END SUB
|
|
|
|
SUB SaveForm (ExitToQB64 AS _BYTE, SaveOnlyFrm AS _BYTE)
|
|
DIM BaseOutputFileName AS STRING
|
|
DIM TextFileNum AS INTEGER, Answer AS _BYTE, b$, i AS LONG
|
|
DIM a$, FontSetup$, FindSep AS INTEGER, NewFontFile AS STRING
|
|
DIM NewFontSize AS INTEGER, Dummy AS LONG, BackupFile$
|
|
DIM PreserveBackup AS _BYTE, BackupCode$
|
|
|
|
BaseOutputFileName = CurrentPath$ + PathSep$ + RTRIM$(PreviewControls(PreviewFormID).Name)
|
|
IF _FILEEXISTS(BaseOutputFileName + ".bas") OR _FILEEXISTS(BaseOutputFileName + ".frm") THEN
|
|
Answer = MessageBox("Some files will be overwritten. Proceed?", "", MsgBox_YesNo + MsgBox_Question)
|
|
IF Answer = MsgBox_No THEN EXIT SUB
|
|
END IF
|
|
|
|
'Backup existing files
|
|
FOR i = 1 TO 2
|
|
IF i = 1 THEN
|
|
IF SaveOnlyFrm THEN
|
|
_CONTINUE
|
|
ELSE
|
|
BackupFile$ = BaseOutputFileName + ".bas"
|
|
END IF
|
|
END IF
|
|
IF i = 2 THEN BackupFile$ = BaseOutputFileName + ".frm"
|
|
|
|
IF _FILEEXISTS(BackupFile$) THEN
|
|
TextFileNum = FREEFILE
|
|
OPEN BackupFile$ FOR BINARY AS #TextFileNum
|
|
b$ = SPACE$(LOF(TextFileNum))
|
|
GET #TextFileNum, 1, b$
|
|
CLOSE #TextFileNum
|
|
|
|
TextFileNum = FREEFILE
|
|
OPEN BackupFile$ + "-backup" FOR BINARY AS #TextFileNum
|
|
PUT #TextFileNum, 1, b$
|
|
CLOSE #TextFileNum
|
|
|
|
IF i = 1 THEN
|
|
IF INSTR(b$, "': External modules: ---------------------------------------------------------------") > 0 THEN
|
|
BackupCode$ = MID$(b$, INSTR(b$, "': External modules: ---------------------------------------------------------------"))
|
|
PreserveBackup = True
|
|
END IF
|
|
END IF
|
|
END IF
|
|
NEXT
|
|
|
|
TextFileNum = FREEFILE
|
|
OPEN BaseOutputFileName + ".frm" FOR OUTPUT AS #TextFileNum
|
|
PRINT #TextFileNum, "': This form was generated by"
|
|
PRINT #TextFileNum, "': InForm - GUI library for QB64 - "; __UI_Version
|
|
PRINT #TextFileNum, "': Fellippe Heitor, 2016-2018 - fellippe@qb64.org - @fellippeheitor"
|
|
PRINT #TextFileNum, "': https://github.com/FellippeHeitor/InForm"
|
|
PRINT #TextFileNum, "'-----------------------------------------------------------"
|
|
PRINT #TextFileNum, "SUB __UI_LoadForm"
|
|
PRINT #TextFileNum,
|
|
IF LEN(PreviewTexts(PreviewFormID)) > 0 THEN
|
|
PRINT #TextFileNum, " $EXEICON:'" + PreviewTexts(PreviewFormID) + "'"
|
|
END IF
|
|
IF PreviewControls(PreviewFormID).CanResize THEN
|
|
PRINT #TextFileNum, " $RESIZE:ON"
|
|
END IF
|
|
PRINT #TextFileNum, " DIM __UI_NewID AS LONG"
|
|
PRINT #TextFileNum,
|
|
|
|
'First pass is for the main form and containers (frames and menubars).
|
|
'Second pass is for the rest of controls.
|
|
'Controls named __UI_+anything are ignored, as they are automatically created.
|
|
DIM ThisPass AS _BYTE
|
|
FOR ThisPass = 1 TO 2
|
|
FOR i = 1 TO UBOUND(PreviewControls)
|
|
IF PreviewControls(i).ID > 0 AND PreviewControls(i).Type <> __UI_Type_MenuPanel AND PreviewControls(i).Type <> __UI_Type_Font AND LEN(RTRIM$(PreviewControls(i).Name)) > 0 THEN
|
|
IF UCASE$(LEFT$(PreviewControls(i).Name, 5)) = "__UI_" THEN GOTO EndOfThisPass 'Internal controls
|
|
a$ = " __UI_NewID = __UI_NewControl("
|
|
SELECT CASE PreviewControls(i).Type
|
|
CASE __UI_Type_Form: a$ = a$ + "__UI_Type_Form, ": IF ThisPass = 2 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_Frame: a$ = a$ + "__UI_Type_Frame, ": IF ThisPass = 2 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_Button: a$ = a$ + "__UI_Type_Button, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_Label: a$ = a$ + "__UI_Type_Label, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_CheckBox: a$ = a$ + "__UI_Type_CheckBox, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_RadioButton: a$ = a$ + "__UI_Type_RadioButton, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_TextBox: a$ = a$ + "__UI_Type_TextBox, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_ProgressBar: a$ = a$ + "__UI_Type_ProgressBar, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_ListBox: a$ = a$ + "__UI_Type_ListBox, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_DropdownList: a$ = a$ + "__UI_Type_DropdownList, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_MenuBar: a$ = a$ + "__UI_Type_MenuBar, ": IF ThisPass = 2 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_MenuItem: a$ = a$ + "__UI_Type_MenuItem, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_PictureBox: a$ = a$ + "__UI_Type_PictureBox, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_TrackBar: a$ = a$ + "__UI_Type_TrackBar, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_ContextMenu: a$ = a$ + "__UI_Type_ContextMenu, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
CASE __UI_Type_ToggleSwitch: a$ = a$ + "__UI_Type_ToggleSwitch, ": IF ThisPass = 1 THEN GOTO EndOfThisPass
|
|
END SELECT
|
|
a$ = a$ + CHR$(34) + RTRIM$(PreviewControls(i).Name) + CHR$(34) + ","
|
|
a$ = a$ + STR$(PreviewControls(i).Width) + ","
|
|
a$ = a$ + STR$(PreviewControls(i).Height) + ","
|
|
a$ = a$ + STR$(PreviewControls(i).Left) + ","
|
|
a$ = a$ + STR$(PreviewControls(i).Top) + ","
|
|
IF LEN(PreviewParentIDS(i)) > 0 THEN
|
|
a$ = a$ + " __UI_GetID(" + CHR$(34) + PreviewParentIDS(i) + CHR$(34) + "))"
|
|
ELSE
|
|
a$ = a$ + " 0)"
|
|
END IF
|
|
PRINT #TextFileNum, a$
|
|
|
|
IF PreviewDefaultButtonID = i THEN
|
|
PRINT #TextFileNum, " __UI_DefaultButtonID = __UI_NewID"
|
|
END IF
|
|
|
|
IF LEN(PreviewCaptions(i)) > 0 THEN
|
|
'IF PreviewControls(i).HotKeyPosition > 0 THEN
|
|
' a$ = LEFT$(PreviewCaptions(i), PreviewControls(i).HotKeyPosition - 1) + "&" + MID$(PreviewCaptions(i), PreviewControls(i).HotKeyPosition)
|
|
'ELSE
|
|
' a$ = PreviewCaptions(i)
|
|
'END IF
|
|
a$ = " SetCaption __UI_NewID, " + __UI_SpecialCharsToCHR$(PreviewCaptions(i))
|
|
PRINT #TextFileNum, a$
|
|
END IF
|
|
|
|
IF LEN(PreviewTips(i)) > 0 THEN
|
|
a$ = " ToolTip(__UI_NewID) = " + __UI_SpecialCharsToCHR$(PreviewTips(i))
|
|
PRINT #TextFileNum, a$
|
|
END IF
|
|
|
|
IF LEN(PreviewTexts(i)) > 0 THEN
|
|
SELECT CASE PreviewControls(i).Type
|
|
CASE __UI_Type_ListBox, __UI_Type_DropdownList
|
|
DIM TempCaption$, TempText$, FindLF&, ThisItem%, ThisItemTop%
|
|
DIM LastVisibleItem AS INTEGER
|
|
|
|
TempText$ = PreviewTexts(i)
|
|
ThisItem% = 0
|
|
DO WHILE LEN(TempText$)
|
|
ThisItem% = ThisItem% + 1
|
|
FindLF& = INSTR(TempText$, CHR$(13))
|
|
IF FindLF& THEN
|
|
TempCaption$ = LEFT$(TempText$, FindLF& - 1)
|
|
TempText$ = MID$(TempText$, FindLF& + 1)
|
|
ELSE
|
|
TempCaption$ = TempText$
|
|
TempText$ = ""
|
|
END IF
|
|
a$ = " AddItem __UI_NewID, " + CHR$(34) + TempCaption$ + CHR$(34)
|
|
PRINT #TextFileNum, a$
|
|
LOOP
|
|
CASE __UI_Type_PictureBox, __UI_Type_Button, __UI_Type_MenuItem
|
|
a$ = " LoadImage Control(__UI_NewID), " + CHR$(34) + PreviewTexts(i) + CHR$(34)
|
|
PRINT #TextFileNum, a$
|
|
CASE ELSE
|
|
a$ = " Text(__UI_NewID) = " + __UI_SpecialCharsToCHR$(PreviewTexts(i))
|
|
PRINT #TextFileNum, a$
|
|
END SELECT
|
|
END IF
|
|
IF LEN(PreviewMasks(i)) > 0 THEN
|
|
a$ = " Mask(__UI_NewID) = " + __UI_SpecialCharsToCHR$(PreviewMasks(i))
|
|
PRINT #TextFileNum, a$
|
|
END IF
|
|
IF PreviewControls(i).TransparentColor > 0 THEN
|
|
PRINT #TextFileNum, " __UI_ClearColor Control(__UI_NewID).HelperCanvas, " + LTRIM$(STR$(PreviewControls(i).TransparentColor)) + ", -1"
|
|
END IF
|
|
IF PreviewControls(i).Stretch = True THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Stretch = True"
|
|
ELSE
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Stretch = False"
|
|
END IF
|
|
'Fonts
|
|
IF LEN(PreviewFonts(i)) > 0 THEN
|
|
FontSetup$ = PreviewFonts(i)
|
|
|
|
'Parse FontSetup$ into Font variables
|
|
FindSep = INSTR(FontSetup$, ",")
|
|
NewFontFile = LEFT$(FontSetup$, FindSep - 1)
|
|
FontSetup$ = MID$(FontSetup$, FindSep + 1)
|
|
|
|
FontSetup$ = "SetFont(" + CHR$(34) + NewFontFile + CHR$(34) + ", " + FontSetup$ + ")"
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Font = " + FontSetup$
|
|
END IF
|
|
'Colors are saved only if they differ from the theme's defaults
|
|
IF PreviewControls(i).ForeColor > 0 AND PreviewControls(i).ForeColor <> __UI_DefaultColor(PreviewControls(i).Type, 1) THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).ForeColor = _RGB32(" + LTRIM$(STR$(_RED32(PreviewControls(i).ForeColor))) + ", " + LTRIM$(STR$(_GREEN32(PreviewControls(i).ForeColor))) + ", " + LTRIM$(STR$(_BLUE32(PreviewControls(i).ForeColor))) + ")"
|
|
END IF
|
|
IF PreviewControls(i).BackColor > 0 AND PreviewControls(i).BackColor <> __UI_DefaultColor(PreviewControls(i).Type, 2) THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).BackColor = _RGB32(" + LTRIM$(STR$(_RED32(PreviewControls(i).BackColor))) + ", " + LTRIM$(STR$(_GREEN32(PreviewControls(i).BackColor))) + ", " + LTRIM$(STR$(_BLUE32(PreviewControls(i).BackColor))) + ")"
|
|
END IF
|
|
IF PreviewControls(i).SelectedForeColor > 0 AND PreviewControls(i).SelectedForeColor <> __UI_DefaultColor(PreviewControls(i).Type, 3) THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).SelectedForeColor = _RGB32(" + LTRIM$(STR$(_RED32(PreviewControls(i).SelectedForeColor))) + ", " + LTRIM$(STR$(_GREEN32(PreviewControls(i).SelectedForeColor))) + ", " + LTRIM$(STR$(_BLUE32(PreviewControls(i).SelectedForeColor))) + ")"
|
|
END IF
|
|
IF PreviewControls(i).SelectedBackColor > 0 AND PreviewControls(i).SelectedBackColor <> __UI_DefaultColor(PreviewControls(i).Type, 4) THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).SelectedBackColor = _RGB32(" + LTRIM$(STR$(_RED32(PreviewControls(i).SelectedBackColor))) + ", " + LTRIM$(STR$(_GREEN32(PreviewControls(i).SelectedBackColor))) + ", " + LTRIM$(STR$(_BLUE32(PreviewControls(i).SelectedBackColor))) + ")"
|
|
END IF
|
|
IF PreviewControls(i).BorderColor > 0 AND PreviewControls(i).BorderColor <> __UI_DefaultColor(PreviewControls(i).Type, 5) THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).BorderColor = _RGB32(" + LTRIM$(STR$(_RED32(PreviewControls(i).BorderColor))) + ", " + LTRIM$(STR$(_GREEN32(PreviewControls(i).BorderColor))) + ", " + LTRIM$(STR$(_BLUE32(PreviewControls(i).BorderColor))) + ")"
|
|
END IF
|
|
IF PreviewControls(i).BackStyle = __UI_Transparent THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).BackStyle = __UI_Transparent"
|
|
END IF
|
|
IF PreviewControls(i).HasBorder THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).HasBorder = True"
|
|
END IF
|
|
IF PreviewControls(i).Align = __UI_Center THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Align = __UI_Center"
|
|
ELSEIF PreviewControls(i).Align = __UI_Right THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Align = __UI_Right"
|
|
END IF
|
|
IF PreviewControls(i).VAlign = __UI_Middle THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).VAlign = __UI_Middle"
|
|
ELSEIF PreviewControls(i).VAlign = __UI_Bottom THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).VAlign = __UI_Bottom"
|
|
END IF
|
|
IF PreviewControls(i).PasswordField = True AND PreviewControls(i).Type = __UI_Type_TextBox THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).PasswordField = True"
|
|
END IF
|
|
IF PreviewControls(i).Value <> 0 THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Value = " + LTRIM$(STR$(PreviewControls(i).Value))
|
|
END IF
|
|
IF PreviewControls(i).Min <> 0 THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Min = " + LTRIM$(STR$(PreviewControls(i).Min))
|
|
END IF
|
|
IF PreviewControls(i).Max <> 0 THEN
|
|
IF PreviewControls(i).Type <> __UI_Type_ListBox AND _
|
|
PreviewControls(i).Type <> __UI_Type_DropdownList THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Max = " + LTRIM$(STR$(PreviewControls(i).Max))
|
|
END IF
|
|
END IF
|
|
IF PreviewControls(i).ShowPercentage THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).ShowPercentage = True"
|
|
END IF
|
|
IF PreviewControls(i).CanHaveFocus THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).CanHaveFocus = True"
|
|
END IF
|
|
IF PreviewControls(i).Disabled THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Disabled = True"
|
|
END IF
|
|
IF PreviewControls(i).Hidden THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Hidden = True"
|
|
END IF
|
|
IF PreviewControls(i).CenteredWindow THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).CenteredWindow = True"
|
|
END IF
|
|
IF PreviewControls(i).ContextMenuID THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).ContextMenuID = __UI_GetID(" + CHR$(34) + RTRIM$(PreviewControls(PreviewControls(i).ContextMenuID).Name) + CHR$(34) + ")"
|
|
END IF
|
|
IF PreviewControls(i).Interval THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Interval = " + LTRIM$(STR$(PreviewControls(i).Interval))
|
|
END IF
|
|
IF PreviewControls(i).MinInterval THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).MinInterval = " + LTRIM$(STR$(PreviewControls(i).MinInterval))
|
|
END IF
|
|
IF PreviewControls(i).WordWrap THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).WordWrap = True"
|
|
END IF
|
|
IF PreviewControls(i).CanResize AND PreviewControls(i).Type = __UI_Type_Form THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).CanResize = True"
|
|
END IF
|
|
IF PreviewControls(i).Padding > 0 THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Padding = " + LTRIM$(STR$(PreviewControls(i).Padding))
|
|
END IF
|
|
IF PreviewControls(i).Encoding > 0 THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).Encoding = " + LTRIM$(STR$(PreviewControls(i).Encoding))
|
|
END IF
|
|
IF PreviewControls(i).NumericOnly = True THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).NumericOnly = True"
|
|
ELSEIF PreviewControls(i).NumericOnly = __UI_NumericWithBounds THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).NumericOnly = __UI_NumericWithBounds"
|
|
END IF
|
|
IF PreviewControls(i).BulletStyle > 0 THEN
|
|
SELECT CASE PreviewControls(i).BulletStyle
|
|
CASE __UI_Bullet
|
|
PRINT #TextFileNum, " Control(__UI_NewID).BulletStyle = __UI_Bullet"
|
|
END SELECT
|
|
END IF
|
|
IF PreviewControls(i).AutoScroll THEN
|
|
PRINT #TextFileNum, " Control(__UI_NewID).AutoScroll = True"
|
|
END IF
|
|
PRINT #TextFileNum,
|
|
END IF
|
|
EndOfThisPass:
|
|
NEXT
|
|
NEXT ThisPass
|
|
|
|
PRINT #TextFileNum, "END SUB"
|
|
PRINT #TextFileNum,
|
|
PRINT #TextFileNum, "SUB __UI_AssignIDs"
|
|
FOR i = 1 TO UBOUND(PreviewControls)
|
|
IF PreviewControls(i).ID > 0 AND PreviewControls(i).Type <> __UI_Type_Font AND PreviewControls(i).Type <> __UI_Type_MenuPanel AND PreviewControls(i).Type <> __UI_Type_ContextMenu THEN
|
|
PRINT #TextFileNum, " " + RTRIM$(__UI_TrimAt0$(PreviewControls(i).Name)) + " = __UI_GetID(" + CHR$(34) + RTRIM$(__UI_TrimAt0$(PreviewControls(i).Name)) + CHR$(34) + ")"
|
|
END IF
|
|
NEXT
|
|
PRINT #TextFileNum, "END SUB"
|
|
CLOSE #TextFileNum
|
|
IF NOT SaveOnlyFrm THEN
|
|
OPEN BaseOutputFileName + ".bas" FOR OUTPUT AS #TextFileNum
|
|
PRINT #TextFileNum, "': This program uses"
|
|
PRINT #TextFileNum, "': InForm - GUI library for QB64 - "; __UI_Version
|
|
PRINT #TextFileNum, "': Fellippe Heitor, 2016-2018 - fellippe@qb64.org - @fellippeheitor"
|
|
PRINT #TextFileNum, "': https://github.com/FellippeHeitor/InForm"
|
|
PRINT #TextFileNum, "'-----------------------------------------------------------"
|
|
PRINT #TextFileNum,
|
|
PRINT #TextFileNum, "': Controls' IDs: ------------------------------------------------------------------"
|
|
IF PreserveBackup THEN
|
|
PRINT #TextFileNum, "REM NOTICE: THIS FORM HAS BEEN RECENTLY EDITED"
|
|
PRINT #TextFileNum, "'>> The controls in the list below may have been added or renamed,"
|
|
PRINT #TextFileNum, "'>> and previously existing controls may have been deleted since"
|
|
PRINT #TextFileNum, "'>> this program's structure was first generated."
|
|
PRINT #TextFileNum, "'>> Make sure to check your code in the events SUBs so that"
|
|
PRINT #TextFileNum, "'>> you can take your recent edits into consideration."
|
|
PRINT #TextFileNum, "': ---------------------------------------------------------------------------------"
|
|
END IF
|
|
FOR i = 1 TO UBOUND(PreviewControls)
|
|
IF PreviewControls(i).ID > 0 AND PreviewControls(i).Type <> __UI_Type_Font AND PreviewControls(i).Type <> __UI_Type_MenuPanel AND PreviewControls(i).Type <> __UI_Type_ContextMenu THEN
|
|
PRINT #TextFileNum, "DIM SHARED " + RTRIM$(__UI_TrimAt0$(PreviewControls(i).Name)) + " AS LONG"
|
|
END IF
|
|
NEXT
|
|
PRINT #TextFileNum,
|
|
IF PreserveBackup THEN
|
|
PRINT #TextFileNum, BackupCode$
|
|
GOTO BackupRestored
|
|
END IF
|
|
PRINT #TextFileNum, "': External modules: ---------------------------------------------------------------"
|
|
PRINT #TextFileNum, "'$INCLUDE:'InForm\InForm.ui'"
|
|
PRINT #TextFileNum, "'$INCLUDE:'InForm\xp.uitheme'"
|
|
PRINT #TextFileNum, "'$INCLUDE:'" + MID$(BaseOutputFileName, LEN(CurrentPath$) + 2) + ".frm'"
|
|
PRINT #TextFileNum,
|
|
PRINT #TextFileNum, "': Event procedures: ---------------------------------------------------------------"
|
|
FOR i = 0 TO 14
|
|
SELECT EVERYCASE i
|
|
CASE 0: PRINT #TextFileNum, "SUB __UI_BeforeInit"
|
|
CASE 1: PRINT #TextFileNum, "SUB __UI_OnLoad"
|
|
CASE 2
|
|
PRINT #TextFileNum, "SUB __UI_BeforeUpdateDisplay"
|
|
PRINT #TextFileNum, " 'This event occurs at approximately 30 frames per second."
|
|
PRINT #TextFileNum, " 'You can change the update frequency by calling SetFrameRate DesiredRate%"
|
|
CASE 3
|
|
PRINT #TextFileNum, "SUB __UI_BeforeUnload"
|
|
PRINT #TextFileNum, " 'If you set __UI_UnloadSignal = False here you can"
|
|
PRINT #TextFileNum, " 'cancel the user's request to close."
|
|
CASE 4: PRINT #TextFileNum, "SUB __UI_Click (id AS LONG)"
|
|
CASE 5: PRINT #TextFileNum, "SUB __UI_MouseEnter (id AS LONG)"
|
|
CASE 6: PRINT #TextFileNum, "SUB __UI_MouseLeave (id AS LONG)"
|
|
CASE 7: PRINT #TextFileNum, "SUB __UI_FocusIn (id AS LONG)"
|
|
CASE 8
|
|
PRINT #TextFileNum, "SUB __UI_FocusOut (id AS LONG)"
|
|
PRINT #TextFileNum, " 'This event occurs right before a control loses focus."
|
|
PRINT #TextFileNum, " 'To prevent a control from losing focus, set __UI_KeepFocus = True below."
|
|
CASE 9: PRINT #TextFileNum, "SUB __UI_MouseDown (id AS LONG)"
|
|
CASE 10: PRINT #TextFileNum, "SUB __UI_MouseUp (id AS LONG)"
|
|
CASE 11
|
|
PRINT #TextFileNum, "SUB __UI_KeyPress (id AS LONG)"
|
|
PRINT #TextFileNum, " 'When this event is fired, __UI_KeyHit will contain the code of the key hit."
|
|
PRINT #TextFileNum, " 'You can change it and even cancel it by making it = 0"
|
|
CASE 12: PRINT #TextFileNum, "SUB __UI_TextChanged (id AS LONG)"
|
|
CASE 13: PRINT #TextFileNum, "SUB __UI_ValueChanged (id AS LONG)"
|
|
CASE 14: PRINT #TextFileNum, "SUB __UI_FormResized"
|
|
|
|
CASE 0, 2, 3, 14
|
|
PRINT #TextFileNum,
|
|
|
|
CASE 1
|
|
IF PreviewDefaultButtonID > 0 THEN
|
|
PRINT #TextFileNum, " __UI_DefaultButtonID = " + RTRIM$(__UI_TrimAt0$(PreviewControls(PreviewDefaultButtonID).Name))
|
|
ELSE
|
|
PRINT #TextFileNum,
|
|
END IF
|
|
|
|
CASE 4 TO 6, 9, 10 'All controls except for Menu panels, and internal context menus
|
|
PRINT #TextFileNum, " SELECT CASE id"
|
|
FOR Dummy = 1 TO UBOUND(PreviewControls)
|
|
IF PreviewControls(Dummy).ID > 0 AND PreviewControls(Dummy).Type <> __UI_Type_Font AND PreviewControls(Dummy).Type <> __UI_Type_ContextMenu THEN
|
|
PRINT #TextFileNum, " CASE " + RTRIM$(PreviewControls(Dummy).Name)
|
|
PRINT #TextFileNum,
|
|
END IF
|
|
NEXT
|
|
PRINT #TextFileNum, " END SELECT"
|
|
|
|
CASE 7, 8, 11 'Controls that can have focus only
|
|
PRINT #TextFileNum, " SELECT CASE id"
|
|
FOR Dummy = 1 TO UBOUND(PreviewControls)
|
|
IF PreviewControls(Dummy).ID > 0 AND PreviewControls(Dummy).CanHaveFocus THEN
|
|
PRINT #TextFileNum, " CASE " + RTRIM$(PreviewControls(Dummy).Name)
|
|
PRINT #TextFileNum,
|
|
END IF
|
|
NEXT
|
|
PRINT #TextFileNum, " END SELECT"
|
|
|
|
CASE 12 'Text boxes
|
|
PRINT #TextFileNum, " SELECT CASE id"
|
|
FOR Dummy = 1 TO UBOUND(PreviewControls)
|
|
IF PreviewControls(Dummy).ID > 0 AND (PreviewControls(Dummy).Type = __UI_Type_TextBox) THEN
|
|
PRINT #TextFileNum, " CASE " + RTRIM$(PreviewControls(Dummy).Name)
|
|
PRINT #TextFileNum,
|
|
END IF
|
|
NEXT
|
|
PRINT #TextFileNum, " END SELECT"
|
|
|
|
CASE 13 'Dropdown list, List box, Track bar, ToggleSwitch, CheckBox
|
|
PRINT #TextFileNum, " SELECT CASE id"
|
|
FOR Dummy = 1 TO UBOUND(PreviewControls)
|
|
IF PreviewControls(Dummy).ID > 0 AND (PreviewControls(Dummy).Type = __UI_Type_ListBox OR PreviewControls(Dummy).Type = __UI_Type_DropdownList OR PreviewControls(Dummy).Type = __UI_Type_TrackBar OR PreviewControls(Dummy).Type = __UI_Type_ToggleSwitch OR PreviewControls(Dummy).Type = __UI_Type_CheckBox OR PreviewControls(Dummy).Type = __UI_Type_RadioButton) THEN
|
|
PRINT #TextFileNum, " CASE " + RTRIM$(PreviewControls(Dummy).Name)
|
|
PRINT #TextFileNum,
|
|
END IF
|
|
NEXT
|
|
PRINT #TextFileNum, " END SELECT"
|
|
END SELECT
|
|
PRINT #TextFileNum, "END SUB"
|
|
PRINT #TextFileNum,
|
|
NEXT
|
|
BackupRestored:
|
|
CLOSE #TextFileNum
|
|
END IF
|
|
|
|
b$ = "Exporting successful. Files output:" + CHR$(10)
|
|
IF NOT SaveOnlyFrm THEN b$ = b$ + " " + MID$(BaseOutputFileName, LEN(CurrentPath$) + 2) + ".bas" + CHR$(10)
|
|
b$ = b$ + " " + MID$(BaseOutputFileName, LEN(CurrentPath$) + 2) + ".frm"
|
|
|
|
IF ExitToQB64 AND NOT SaveOnlyFrm THEN
|
|
$IF WIN THEN
|
|
IF _FILEEXISTS("qb64.exe") THEN
|
|
b$ = b$ + CHR$(10) + CHR$(10) + "Exit to QB64?"
|
|
ELSE
|
|
b$ = b$ + CHR$(10) + CHR$(10) + "Close the editor?"
|
|
END IF
|
|
$ELSE
|
|
IF _FILEEXISTS("qb64") THEN
|
|
b$ = b$ + CHR$(10) + CHR$(10) + "Exit to QB64?"
|
|
ELSE
|
|
b$ = b$ + CHR$(10) + CHR$(10) + "Close the editor?"
|
|
END IF
|
|
$END IF
|
|
Answer = MessageBox(b$, "", MsgBox_YesNo + MsgBox_Question)
|
|
IF Answer = MsgBox_No THEN Edited = False: EXIT SUB
|
|
$IF WIN THEN
|
|
IF _FILEEXISTS("qb64.exe") THEN SHELL _DONTWAIT "qb64.exe " + QuotedFilename$(BaseOutputFileName + ".bas")
|
|
$ELSE
|
|
IF _FILEEXISTS("qb64") THEN SHELL _DONTWAIT "./qb64 " + QuotedFilename$(BaseOutputFileName + ".bas")
|
|
$END IF
|
|
SYSTEM
|
|
ELSE
|
|
Answer = MessageBox(b$, "", MsgBox_OkOnly + MsgBox_Information)
|
|
Edited = False
|
|
END IF
|
|
END SUB
|
|
|
|
$IF WIN THEN
|
|
SUB LoadFontList
|
|
DIM hKey AS _OFFSET
|
|
DIM Ky AS _OFFSET
|
|
DIM SubKey AS STRING
|
|
DIM Value AS STRING
|
|
DIM bData AS STRING
|
|
DIM t AS STRING
|
|
DIM dwType AS _UNSIGNED LONG
|
|
DIM numBytes AS _UNSIGNED LONG
|
|
DIM numTchars AS _UNSIGNED LONG
|
|
DIM l AS LONG
|
|
DIM dwIndex AS _UNSIGNED LONG
|
|
|
|
Ky = HKEY_LOCAL_MACHINE
|
|
SubKey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" + CHR$(0)
|
|
Value = SPACE$(261) 'ANSI Value name limit 260 chars + 1 null
|
|
bData = SPACE$(&H7FFF) 'arbitrary
|
|
|
|
HasFontList = True
|
|
l = RegOpenKeyExA(Ky, _OFFSET(SubKey), 0, KEY_READ, _OFFSET(hKey))
|
|
IF l THEN
|
|
HasFontList = False
|
|
EXIT SUB
|
|
ELSE
|
|
dwIndex = 0
|
|
DO
|
|
numBytes = LEN(bData)
|
|
numTchars = LEN(Value)
|
|
l = RegEnumValueA(hKey, dwIndex, _OFFSET(Value), _OFFSET(numTchars), 0, _OFFSET(dwType), _OFFSET(bData), _OFFSET(numBytes))
|
|
IF l THEN
|
|
IF l <> ERROR_NO_MORE_ITEMS THEN
|
|
HasFontList = False
|
|
EXIT SUB
|
|
END IF
|
|
EXIT DO
|
|
ELSE
|
|
IF UCASE$(RIGHT$(formatData(dwType, numBytes, bData), 4)) = ".TTF" OR UCASE$(RIGHT$(formatData(dwType, numBytes, bData), 4)) = ".OTF" THEN
|
|
TotalFontsFound = TotalFontsFound + 1
|
|
IF TotalFontsFound > UBOUND(FontFile) THEN
|
|
REDIM _PRESERVE FontFile(TotalFontsFound) AS STRING
|
|
END IF
|
|
DIM tempName$
|
|
tempName$ = LEFT$(Value, numTchars)
|
|
IF RIGHT$(tempName$, 11) = " (TrueType)" THEN
|
|
tempName$ = LEFT$(tempName$, LEN(tempName$) - 11)
|
|
END IF
|
|
AddItem FontList, tempName$
|
|
FontFile(TotalFontsFound) = formatData(dwType, numBytes, bData)
|
|
END IF
|
|
END IF
|
|
dwIndex = dwIndex + 1
|
|
LOOP
|
|
l = RegCloseKey(hKey)
|
|
END IF
|
|
|
|
FOR l = 8 TO 120
|
|
AddItem FontSizeList, LTRIM$(STR$(l))
|
|
NEXT
|
|
END SUB
|
|
|
|
FUNCTION whatType$ (dwType AS _UNSIGNED LONG)
|
|
SELECT CASE dwType
|
|
CASE REG_SZ: whatType = "REG_SZ"
|
|
CASE REG_EXPAND_SZ: whatType = "REG_EXPAND_SZ"
|
|
CASE REG_BINARY: whatType = "REG_BINARY"
|
|
CASE REG_DWORD: whatType = "REG_DWORD"
|
|
CASE REG_DWORD_BIG_ENDIAN: whatType = "REG_DWORD_BIG_ENDIAN"
|
|
CASE REG_LINK: whatType = "REG_LINK"
|
|
CASE REG_MULTI_SZ: whatType = "REG_MULTI_SZ"
|
|
CASE REG_RESOURCE_LIST: whatType = "REG_RESOURCE_LIST"
|
|
CASE REG_FULL_RESOURCE_DESCRIPTOR: whatType = "REG_FULL_RESOURCE_DESCRIPTOR"
|
|
CASE REG_RESOURCE_REQUIREMENTS_LIST: whatType = "REG_RESOURCE_REQUIREMENTS_LIST"
|
|
CASE REG_QWORD: whatType = "REG_QWORD"
|
|
CASE ELSE: whatType = "unknown"
|
|
END SELECT
|
|
END FUNCTION
|
|
|
|
FUNCTION whatKey$ (hKey AS _OFFSET)
|
|
SELECT CASE hKey
|
|
CASE HKEY_CLASSES_ROOT: whatKey = "HKEY_CLASSES_ROOT"
|
|
CASE HKEY_CURRENT_USER: whatKey = "HKEY_CURRENT_USER"
|
|
CASE HKEY_LOCAL_MACHINE: whatKey = "HKEY_LOCAL_MACHINE"
|
|
CASE HKEY_USERS: whatKey = "HKEY_USERS"
|
|
CASE HKEY_PERFORMANCE_DATA: whatKey = "HKEY_PERFORMANCE_DATA"
|
|
CASE HKEY_CURRENT_CONFIG: whatKey = "HKEY_CURRENT_CONFIG"
|
|
CASE HKEY_DYN_DATA: whatKey = "HKEY_DYN_DATA"
|
|
END SELECT
|
|
END FUNCTION
|
|
|
|
FUNCTION formatData$ (dwType AS _UNSIGNED LONG, numBytes AS _UNSIGNED LONG, bData AS STRING)
|
|
DIM t AS STRING
|
|
DIM ul AS _UNSIGNED LONG
|
|
DIM b AS _UNSIGNED _BYTE
|
|
SELECT CASE dwType
|
|
CASE REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ
|
|
formatData = LEFT$(bData, numBytes - 1)
|
|
CASE REG_DWORD
|
|
t = LCASE$(HEX$(CVL(LEFT$(bData, 4))))
|
|
formatData = "0x" + STRING$(8 - LEN(t), &H30) + t
|
|
CASE ELSE
|
|
IF numBytes THEN
|
|
b = ASC(LEFT$(bData, 1))
|
|
IF b < &H10 THEN
|
|
t = t + "0" + LCASE$(HEX$(b))
|
|
ELSE
|
|
t = t + LCASE$(HEX$(b))
|
|
END IF
|
|
END IF
|
|
FOR ul = 2 TO numBytes
|
|
b = ASC(MID$(bData, ul, 1))
|
|
IF b < &H10 THEN
|
|
t = t + " 0" + LCASE$(HEX$(b))
|
|
ELSE
|
|
t = t + " " + LCASE$(HEX$(b))
|
|
END IF
|
|
NEXT
|
|
formatData = t
|
|
END SELECT
|
|
END FUNCTION
|
|
$ELSE
|
|
SUB LoadFontList
|
|
DIM TotalFiles%, FontPath$, i AS LONG, ThisFont$, depth%, x AS INTEGER
|
|
|
|
FontPath$ = "/usr/share/fonts"
|
|
depth% = 4
|
|
IF INSTR(_OS$, "MAC") > 0 THEN
|
|
FontPath$ = "/Library/Fonts"
|
|
depth% = 1
|
|
END IF
|
|
Text(FontList) = idezfilelist$(FontPath$, 1, depth%, TotalFiles%)
|
|
Control(FontList).Max = TotalFiles%
|
|
Control(FontList).LastVisibleItem = 0 'Reset it so it's recalculated
|
|
|
|
TotalFontsFound = TotalFiles%
|
|
FOR i = TotalFiles% TO 1 STEP -1
|
|
ThisFont$ = GetItem(FontList, i)
|
|
IF UCASE$(RIGHT$(ThisFont$, 4)) = ".TTF" OR UCASE$(RIGHT$(ThisFont$, 4)) = ".TTC" OR UCASE$(RIGHT$(ThisFont$, 4)) = ".OTF" THEN
|
|
'Valid font
|
|
ELSE
|
|
RemoveItem FontList, i
|
|
TotalFontsFound = TotalFontsFound - 1
|
|
END IF
|
|
NEXT
|
|
|
|
REDIM FontFile(TotalFontsFound) AS STRING
|
|
IF INSTR(_OS$, "MAC") = 0 THEN FontPath$ = "" ELSE FontPath$ = FontPath$ + "/"
|
|
FOR i = 1 TO TotalFontsFound
|
|
ThisFont$ = GetItem(FontList, i)
|
|
FontFile(i) = FontPath$ + GetItem(FontList, i)
|
|
ThisFont$ = LEFT$(ThisFont$, LEN(ThisFont$) - 4) 'Remove extension from list
|
|
|
|
FOR x = LEN(ThisFont$) TO 1 STEP -1
|
|
IF ASC(ThisFont$, x) = 47 THEN '"/"
|
|
ThisFont$ = MID$(ThisFont$, x + 1)
|
|
EXIT FOR
|
|
END IF
|
|
NEXT
|
|
|
|
ReplaceItem FontList, i, ThisFont$
|
|
NEXT
|
|
|
|
FOR i = 8 TO 120
|
|
AddItem FontSizeList, LTRIM$(STR$(i))
|
|
NEXT
|
|
|
|
HasFontList = True
|
|
END SUB
|
|
$END IF
|
|
|
|
SUB RestoreFalcon
|
|
DIM A$, B$, FileNum AS INTEGER
|
|
A$ = ""
|
|
A$ = A$ + "STVKSaFMTE68RTVKdEVL^56K_<f;`5VLd=g;fU6IUmf;VmVKdm2MdIf;c9gH_HVLUE6Mi1GIQeFH\MFH]i2JRdP2_l2EXE68Vm6K"
|
|
A$ = A$ + "\mfMYifIP`FJSEVKcE68Q17L\UFIc12M_1BMdI6>TEfH_AFIXT28Qi6IP4fLcmfHY56MUA68T56MQ1bK^aFN=X`;_0b@_1GNbUfI"
|
|
A$ = A$ + "XA78X<F:P83<`PC;b0C<`0R@ZmFIbi688mFIX9GKQiVKP`SHZmFIbi6@XmFIX9GKQiVK^@FIndP2_l28CEFIPP6Md1W>_lRHZmFI"
|
|
A$ = A$ + "biV;XmFIX9GKQiVK^@FI_D7MVe2>_@FISm6IU9g;TIFH_0RI_978TE6MQU6KciB3:lR:P0EIbeFJc=GJ_i68Y=78XEVLU9FNPLVL"
|
|
A$ = A$ + "Qi6MUA6;PHVLUE68_I68SQFHbMFI\02M_1BH^U78`EVLcmVKPlVHd5FJ^UVKW1BHP<fK`U78_I68dQFJc1bL_I6Mg5VLU1BH^A68"
|
|
A$ = A$ + "Q=gL_=FJQAGIT12I_=FM]EVKd56MYmVKPHFJ\EfLPP2MXE68R<eKVAgMQ9GIRT2;P@gKP@FIQa68Yi68dQFIP<eKVAgMQ9GIPLGJ"
|
|
A$ = A$ + "dQfKeA78bEfLd9GJSAGJ_i6;PTVKSaFMTUVKW1bMYA7J_E7MP`FJ]U6MQAGJ_i68dQFIP8GJWQ6Mc12M_1BMcE6;P<fK`U7;PdfK"
|
|
A$ = A$ + "TUVIia28]EVLWE6;P0GMRaFJcQ6;P@FJcAWLY9FMdE6;P<GMRaFJSEVKcE6;P4VKTmbKb1bLUa6KP<fK`UFIc1bKV12MXE68CmVI"
|
|
A$ = A$ + "dMGHbE6;P4VKT12M_12LU9GKYA78`EVLcmVKc12M_1bMXmFKP@7JU1bD_I6Mg5VLU1BJc1RIe9WKY=7JUA68dm68Tm68cm6;P<GM"
|
|
A$ = A$ + "RYFISA78dm68dQFIPHfK\afKgUVKW1bH_i6IYAGJ_ifLjdP2=X0EXE68Q9fKfE68Sm6Li9GJWQ6MPhfKdUfHU1BH^A68dQFJc12L"
|
|
A$ = A$ + "U9GKY=gLYmVKPhfKdUfHU1bLX56K\1RHU1BJ^=6KeAFIT1BJ^1BH\a68Sm6LYEfLPlVLP<GMR=7MQi6MY56KP0gKbAGJ_ifLPlVI"
|
|
A$ = A$ + "P@7JU1bD_I6Mg5VLUiB3:dP2DQDAP<eC6AeE19EAPTdDP0UD?IEB4E4AP8B@C1BBC92;PLEBDQdCEA58G5TDB5TCDU58?I481iDF"
|
|
A$ = A$ + "P\DB>A4;PD4F@9EAC=58?9589e4D<UDA4a289id@<E5A9idAP8DED1RC?A58<UDC9AEA412E?12E8E48G5TDB5TCDUDAC1bC61BC"
|
|
A$ = A$ + "59e@85TCD5T@9aDBDU5;PHDBDiDAC=586mTDP448@5TDDUd@EaD@B12DE95D?=EAP4TC41RC?iDB>ITD9idA5eDA>AU;PTTCPhdC"
|
|
A$ = A$ + "PDTE5i4EP<5B1a4CP@5B51B@EA5B?9eDPlTDP<dC@UUD9M4BD12B?a4A59eDP8DAP`DB194C51RA?9581iDFP<4C1UDC\02A1eD@"
|
|
A$ = A$ + "7EdDPlTDPl4E8ETDP`DB19DB<U4EIa28GQDADQDAB1BB>1B@>1B@3AEB?i48?I483mTCD9E@3A5;P@eCBA58?958?A5B59eE9=EA"
|
|
A$ = A$ + "\0B@BUdD9idAPHTD?e4;PlDED1bC61bCB1BB>1b@?iTC5=4E9mTCPLEBDQ48DQDAP<eC6AeE19EAPlTDP@5B51BECE48?958?A5B"
|
|
A$ = A$ + "59584ED@<UTC7=589i48DQDAP<eC6AeE19EA^0R:_dP2=X`8TEVIYiFIPD5E6QcG1=d@515EP0C3:<2IUIFJ^E68EAUAhlUD5YDA"
|
|
A$ = A$ + "3A58adP2cAGHdUfHP<fK^=7MPDGJ^A7>OA78eAWIh@fFM1B?P\G3:028``2<\03;``2<\03;``2<\03;``2<\03;``2<\03;``2<"
|
|
A$ = A$ + "\03;``2<\03;``2<\03;``2<\03;``2<\03;``2<\0b;_02<`hR;aHF3:028``2<\03;``2<\03;``2<\03;``2<\03;``2<\03;"
|
|
A$ = A$ + "``2<\03;``2<\03;``2<\03;``2<\03;``2<\03;``2<\0b;_0R<`hR;cHF3:028``2<\03;``2<\03;``2<\03;``2<\03;``2<"
|
|
A$ = A$ + "\03;``2<\03;``2<\03;``2<\03;``2<\03;``2<\03;``2<\0b;_02=`hR;eHF3:028``2<\03;``2<\03;``2<\03;``2<\03;"
|
|
A$ = A$ + "``2<\03;``2<\03;``2<\03;``2<\03;``2<\03;``2<\03;``2<\0b;_0R=`hR;gHF3:028a`B<\43;a`B<\43;a`B<\43;a`B<"
|
|
A$ = A$ + "\43;a`B<\43;a`B>\T3;i`B>\T3;i`B>\T3;i`B>\T3;i`B>\T3;i`B>\0b;_02>`hR;iHF3:028g`b=\L3;g`b=\L3;g`b=\L3;"
|
|
A$ = A$ + "g`b=\L3;g`b=\L3;g`b=\L3;g`b=\L3;g`b=\L3;g`b=\L3;g`b=\L3;g`b=\0b;_0BH`hR;RIF3:028h`2>\83;b`R<\83;b`R<"
|
|
A$ = A$ + "\83;b`R<\83;b`R<\83;b`R<\83;b`R<\83;b`R<\83;b`R<\83;b`R<\83;b`R<\0b;_0bH`hR;TIF3:028`PGH\03Nc`2<h=3;"
|
|
A$ = A$ + "`Pg<\03Nc`2<h=3;`Pg<\03Nc`2<h=3;`Pg<\03Nc`2<h=3;`Pg<\03Nd`2<h=3;`Pg<\0b;_0BI`hR;UIF3:028`PWH\03Nf`2<"
|
|
A$ = A$ + "hI3;`PW=\03Ne`2<hQ3;`P7>\03Nh`2<hQ3;`P7>\03Nh`2<hQ3;`P7>\03Nh`2<hQ3;`P7>\0b;_0RI`hR;VIF3:028`P7<\03N"
|
|
A$ = A$ + "a`2<h93;`Pg<\03Ne`2<hQ3;`Pg=\03Na`2<h53;`PG<\03Nd`2<hI3;`PG<\03Na`2<h53;`PG<\0b;_0bL`hR;c1C3:028a`B<"
|
|
A$ = A$ + "\43;a`B<\43;a`B<\43;a`B<\43;a`B<\43;a`B<\03;a`B<\43;a`B<\03;a`2<\43;a`B<\43;a`B<\0b;_0bLahR;c9C3:028"
|
|
A$ = A$ + "a`R<\43;a`B<\43;a`R<\43;b`B<\43;a`B<\43;a`B<\43;a`B<\43;a`B<\83;a`B<\43;a`B<\43;a`B<\0b;_0bLchR;cAC3"
|
|
A$ = A$ + ":028a`R<\43;a`B<\43;a`B<\43;b`B<\43;a`B<\43;a`B<\43;a`B<\43;a`B<\<3;a`b<\43;a`B<\43;a`B<\0b;_0bLehR;"
|
|
A$ = A$ + "cIC3:028a`b<\43;a`B<\43;a`b<\43;c`B<\43;a`B<\43;a`B<\<3;a`B<\43;a`B<\43;a`B<\43;a`B<\43;a`B<\0b;_0bL"
|
|
A$ = A$ + "ghR;cQC3:dg>=X@3:DGJ^Ag<bl5MPTVK\UVKUeP2eAWIh@FISm6IUQBMYi6Mc8cGdY28cAGHdE6;PDGJ^Ag<bl5MZ0bH_AFI`a28"
|
|
A$ = A$ + "eUVKd=S<OA78RU7MUU28keP2P0BMYi6Mc8cGd12Mi1GIPd38eAWIh@fFRU7MUee>=X@3:028Z<fKTE6LPd38XXbLd56MU1B8m0BE"
|
|
A$ = A$ + "DI4>O5d@3E4DDU28odP2P028PPRHiAGIPH28`Pg<VEG:P`78XXbH_AFI`12?l0R=Y0R>=X08P028X03NVI68nh38dU7LUU28V02:"
|
|
A$ = A$ + "RU7MUUb>=X@3:028Z<7MQAGIPd38eAWIh@fFbDS=P\28Z<7MQAGIZ4S=P\28dU7LUee>=X08P8GIdEWL^1R:cAGHdEf>=X@O=X`;"
|
|
A$ = A$ + "ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXR:ZXb;=X@3:<7MbEgHd1RI"
|
|
A$ = A$ + "_i6McmeLd9GMSA78k1b;_<fK`UFIT1RIbmFKP0GHbAgL_HGJTEfK_HfK^Ag;dAWI_<WLSibH=X08PDGJ^A7>PTVKOEgLU]C3:028"
|
|
A$ = A$ + "eUVKdQ38Z@7MVm5IQAGHkdP2P0BJ^Ag<b02IUIFHea6MO1GJhE6KOQFIYM6Jd]C3:028eUVKdQ38Rm6KT]C3:028eUVKdQ38YAGH"
|
|
A$ = A$ + "\UfHkdP2P0BMYi6Mh0BM^AFIbaFJ^Ef>=X08PDGJ^A7>PdfK^mfL`5fHU]C3:028Yi6Mc838]mVK_=7LQ=FIOMGJTA7JkdP2P0BM"
|
|
A$ = A$ + "Yi6Mh0BM^UfH_AFIkdP2P0b;_dB;]dB;]dB;]dB;]dB;]dB;]dB;]dB;]dB;]dB;]dB;]dP2P0RADmUAQ=FIPPFH^A6KU]C3:028"
|
|
A$ = A$ + "Yi6Mc838R5fLUaFJ^Ef>=X08PH6K_56MP@FIV5FM\AgG`U6NUafGXEFJWQ6MO=gHQaFIkdP2m]C3:D6NdEVL^1BJ]MfGcAWLe=6M"
|
|
A$ = A$ + "PXbMbU6MUm5LQMFIkdP2UQ7MU9WKPTVKd=S<PXRI_i6MkdP2UQ7MU9WKPHfK^AgLO=7MbEgHd1R:VmVKd=g>=X@3:H4EOIDHSE68"
|
|
A$ = A$ + "WE6MOI6JQi6I\E6:Y0bN=X08P8GIdEWL^1RI_i6Mc]UI_i6MKMWLYAGIO1GHWEF;nHfK^AGGMi2JQi6I\Ef>=X@O=X@3:TVKd1bI"
|
|
A$ = A$ + "UAgGTEVIXEFJWQ6MXT28keP2P0RLUAGMbi68VmVKd=gFVmVKd]eMbU6MUm5LQMFI]hSI_i6MMeU;TEVIQE7Kdm5LYQGI\m5JUUfI"
|
|
A$ = A$ + "XAg>=X@O=X@3:TVKd1bI`93LhQBJ^A78W1G:P\G3:028bE6Me9WKPPRI\mFHdUbI`1b;PLFIdmUIX5VKTaFIXTB;nDWKYAgLO1GI"
|
|
A$ = A$ + "bmEA=1R:PLFIdm5IUI6JUUfIXA7:Y\C3:dG3:dP2Yi6MPD7JUUfIXA7:Y0bN=X08P<gMYAgHX12:g9GJdEfG`5fIUeR?VmVKdU28"
|
|
A$ = A$ + "keP2P028P<FHcE68hX38bE6Me9WKPTc>=X08P028S5fLU1B<dX38bE6Me9WKP4C=kdP2P028P<FHcE68aHS>P8GIdEWL^1B<g\C3"
|
|
A$ = A$ + ":028meP2P0RLUAGMbi68W1W<`Q7:WE6MOI6JQi6I\E6:YdR?Q=gHUi6IU978]0bIUAgGVQFH^A6KUQB:]h3IU=gHUi6IU9G:kdP2"
|
|
A$ = A$ + "meP2=X@J^A78e5fLSEVKcUfK^QB:P\G3:028cMGJd=6JPPbMbU6MUm5LQMFI]hSI_i6MY0bN=X08P028S5fLU12>j0RLUAGMbi68"
|
|
A$ = A$ + "i\C3:028P0bHQ=GIP43=j0RLUAGMbi68a<c>=X08P028S5fLU1B<fX38bE6Me9WKP43=kdP2P0BO=X08P8GIdEWL^1bI`93LhQbI"
|
|
A$ = A$ + "UAgGVQFH^A6KUQB:]hCHc=FI^AFIbUb>=X@O=X@3:TVKd1BMc1GHSUVKWQB:P\G3:028YI68XLWLYAGIO1GHWEF;nHfK^A78l0b<"
|
|
A$ = A$ + "bT28bE6Me9WKPLWLYAGIO1GHWEF;nHfK^Ag>=X08P8GIdEWL^1bI`93LhQbIUAgGVQFH^A6KUQB:]h3JUUfIXAG:P\28b\C3:dG3"
|
|
A$ = A$ + ":dP2UQ7MU9WKPDGJ^A7>P<6JQ9gLUA7>hQcFbDS=M]5>M]5>M]C3:D6NdEVL^1BMYi6Mh0bHX5VLcE6MhPG<f\U<eHCGK5S=M]5>"
|
|
A$ = A$ + "M]C3:dP2STVITEVIP4U@f@cGf@C3:HgKYA68e1WLYi6MOE6Nd9GHXTVKd=S<P<7MQ97Mha28Yi6Mc838cAGHbAGN\0BJ^AW=d0bL"
|
|
A$ = A$ + "d9gGYi6;PTVKdI3=P8FNdE6KUi6;PTVKd=S<P\FIbifGg5VKdE6I\0BJ^Ag<b02I_mULUi6IU97;PTVKd=S<PX2MhAgMYA6MXa28"
|
|
A$ = A$ + "Yi6Mf@38SQFHb1gKca28Yi6Mc838Z<6JQ9gL\0BMYi6Mc838Sm6K_EWL\0BJ^Ag<b0BKQQgGgU6IdQF:P\G3:<BI\=GI=XPM_U6I"
|
|
A$ = A$ + "PD7LbUVKdmEIhAWLQQBJ^Ag<b0bLd5VLdQ7;PTVKd=S<P<7MQ97Mia28Yi6Mc838cAWLOUVK\0BJ^AW=d0RHiAGI\EVK\0BJ^Ag<"
|
|
A$ = A$ + "b0bJU9WKOMGH^AGITa28Yi6Mc838TmfGbEVKTEVL\0BJ^Ag<b0R:dQ7MgU6IdQ6;PTVKdI3=P<6JQ97L_=7;PTVKd=S<PXbHX5VL"
|
|
A$ = A$ + "ca28eUVKd=S<P<fK\mFMba28Yi6Mc838]56NOMGJTA7JY0bN=X`8Ui6IYIF3:028Yi6MP8FMYa6MYi68m02<kdP2P0BJV12:g9GJ"
|
|
A$ = A$ + "dEfG`5fIUeR?VmVKd12?P<S<Y0bN=X08P028REGJ\AGJ^1B?P4c>=X08PdG3:0B3:028eUVKdQ38Z<7Mb1B?PPBMYi6Mh0R:Y<7M"
|
|
A$ = A$ + "bmEJ^]C3:028eUVKd=S<P<6LYi6IUQ7;P0WLUIgGcAGHdE68m02<\0bHe9gGcAGHdE68m02<\0bH`]C3:028eUVKdQ38Z8FMYa6M"
|
|
A$ = A$ + "YifGcAGHbAg>=X08PTVKd1bHe9gGS1GJ^AFIh1B?P0c>=X08PH4EOIDHSE68VQFH^A6KU]C3:028Yi6MP0WLUIgGWaFN`Q68m02<"
|
|
A$ = A$ + "\0bI\U7LXmEJ^AFIha28U9WL_97;P\FIbif>=X08PH4EOIEISAgKb1bJU9WKOAFI\AGHkdP2P0BJ^A78`EVKOQ7;P0GI^mEN\02I"
|
|
A$ = A$ + "b5fMOQ7;P@VLQMgGia28`U6N]56LOQ7;P0GJheFH`mENkdP2P0RI\mFHd1BH\17JQ]C3:028eifLYMVKUA68Yi6MP8gIR]C3:dP2"
|
|
A$ = A$ + "P02LUifGh1B?P<7MQ97Mh]C3:028`EVKOU78m0bLd5VLdUg>=X08PTVIPPRHeU6KdUVKY0bN=X08P028`EVKOU78[d38b\C3:028"
|
|
A$ = A$ + "meP2P0BI\=GIP\78P0B3:028P0RIX5VKTaFIPd38WE6MOI6JQi6I\E6:Y\C3:028P02LUifGi1b:m0BMQ=gHUifLYmVKXTb>=X08"
|
|
A$ = A$ + "P028YI68XH4EOQD@CmeB59UC9idAXH6JQi6I\EF:PHR9P\FIbifGg5VKdE6IY0bJU9WKPd38a\38UafLU1bJU9WKPd38`\C3:028"
|
|
A$ = A$ + "meP2PdP2P0BH\17JQ1B?PPbH_afKe978nh38b@C:Pl28bDC=^0c>=X08P8gIR1B?P<fK\mFMb1R9P03NVIVIVIVIkdP2=X08PHfK"
|
|
A$ = A$ + "b12:S1GJ^AFIh1B?P0c>P<6LYi6IUQ78l0RHiAGI\EVKk02LbEVMO=7MQAGIPd38SEWLO=7MQAGI\0bH`UVKTE6N[\B:P\G3:028"
|
|
A$ = A$ + "P0b;_TVIPP2LUifGh1R?PTFK]hcMYA6MX12Ol12LUifGi1R?PTFK]h3JUUfIXAG:P8VLU5fJkdP2P028PTVIPPBKQQgGgU6IdQ68"
|
|
A$ = A$ + "VH28X0GI^m5NPh38cAGHbA7NP\28]56NOMGJTA7JYT28R9GIQ]f>=X08P028YI68X<6JQ97L_=G:PP2:Yi6Mc8S:Y<6JQ97L_=G:"
|
|
A$ = A$ + "K=FMbmeH`UVKTE6NM1B?P0GI^m5NPd28cAGHbA7NkdP2P028=X08P028cMGJd=6JPPBMdI6>TEfH_AFIXHbHe9gGcAGHdE6;PHbH"
|
|
A$ = A$ + "`a28cAWLK=6LYi6IUQGGYT28keP2P028P<FHcE68EAUAhlE@3=DA@AU>=X08P028P0b;_LfK_A68Sm6IU1gKYi6M=X08P028P0bH"
|
|
A$ = A$ + "e9gGS1GJ^AFIh]b:kdP2P028P028R9GIQ]f>=X08P028S5fLU1BEDI4>O9EA:Ed@DYC3:028P028Plb;Sm6IU1gKYi6MPLgKea6I"
|
|
A$ = A$ + "P8FIPDe:6ITA412:bE6L\5fHUeFI^A78SQFHb5fHdEVLYdP2P028P028S178m02<hIVIVAf>=X08P028P0bHe9gGcAGHdE68m0BE"
|
|
A$ = A$ + "DI4>O5d@3E4DD]C3:028P028PTVIPP2LbEVMO=7MQAGIP4B?PD5E6QcG1=d@515EY0bH`UVKTE6N]db>=X08P028P0bHe9gGS1GJ"
|
|
A$ = A$ + "^AFIh]b:kdP2P028P028R9GIQ]f>=X08P028TEVIQE7KdYC3:028P028Plb;^EFIT12M_1RLU56IP<fK^AGJ^EGHdUfK^1RHiAGI"
|
|
A$ = A$ + "ceP2P028P028SmVKdUVKeEf>=X08P028P0RHbEFH[]C3:028P0BO=X08P0B3:028P0BJV12:REGJ\AGJ^U28keP2P028P028YI68"
|
|
A$ = A$ + "XdFHhmeMYA6MX1R9V02:`EVKOQ78[02>Ph38cAGHbA7NP\28]56NOMGJTA7JYT28R9GIQ]f>=X08P028P0BJV12:S178n0R<eDC:"
|
|
A$ = A$ + "P<fK^AGJ^EGIkdP2P028P028cMGJd=6JPPbMbU6MUm5LQMFI]hSI_i6MY0bN=X@2S5fLU12>j0RHeU6KdUVKO=7MQ97MPd38V<6J"
|
|
A$ = A$ + "Q9gLUA7>hQcFS1GGK1CGK1CGk0RHbEFH[]C3:T`HQ=GIP43=j0RHeU6KdUVKO=7MQ97MPd38V<6JQ9gLUA7>h5S=K=6LM]E<M]5<"
|
|
A$ = A$ + "M]38R9GIQ]f>=X@2S5fLU1B<fX38REGJ\AGJ^meLd5VLd1B?PHbHX5VLcE6MhPG<f\eH`eeF`deF`de>P8VLU5fJkdP2P028P028"
|
|
A$ = A$ + "meP2P028P028YI68X@fKO9GI^AFIbU28keP29HfKb12:T9GHgmENPd38`EVKOU7;P0GJheFH`mENPd38`\38`U6N]56LOU78l0bM"
|
|
A$ = A$ + "bU6MUm5LQMFI]hSI_i6Mk02Ib5fMOUg:[`28`U6N]56LOUg:[T28keP29028VmVLPP2Ib5fMOQ78m02LUifGha28`U6N]56LOQ78"
|
|
A$ = A$ + "m02<k02LYQGKQ1gGh12?PPc>P@VLQMgGh]b:\02LYQGKQ1gGh]b:Y0bN=X@2P028PTVIPPR:REGJ\AGJ^meLd5VLd]b:Y02LcE6M"
|
|
A$ = A$ + "O5VKTmeH\U6LX@VLQMgGha28T9GHgmEN\0bH_afKe9G:kdP29028meP29dG3:028P028PdG3:028P028P0GI^m5NP\B?PPc>=X08"
|
|
A$ = A$ + "P028meP2P028PD6KcE68keP2P028P028WaFN`QfGYi6IUQ78m0RADmeAUAgG3QFHbmEB^AFIhQRIX5VKTaFI\0bH`Ub>=X@3:028"
|
|
A$ = A$ + "P028PTVIPPbJU9WKPHR9P0WLUIgGWaFN`Q68VH28WaFN`QfGYi6IUQG:P\G3:028P028P0286AeG7E6MO]DIbiFJ^M6:VQFH^A6K"
|
|
A$ = A$ + "Ua28`9GIfmeI\U7LXa28WaFN`QfGYi6IUQ7;PH4EO]DABiDB>MdG4ETA1E5CDa28V\FIbifGTE6Kd5F:kdP2P028P028P02LUifG"
|
|
A$ = A$ + "h1b:m0bI`93LhQbJU9WKOAFI\AGH^PG:kdP2P028P028meP2PdP2P028P028U9WL_978m0RADm5C_56IOM4Ki17JXH6JQi6I\E6;"
|
|
A$ = A$ + "PL6Ki17JOUVKTE6N\0RADm5C?54AOADA65DE<AE:kdP2P028P028YI68XDVLbmVLY0bH_i6MYiFMU]C3:028P028PDVLbmVLPd38"
|
|
A$ = A$ + "6AeGBEVKTEVLOM4Ki17JXH6JQi6I\EF;nL6Ki17J\0RADmUD5i4A59eG=m4A5mUC?9EC1aD:kdP2P028P028YI68XDVLbmVLY0bH"
|
|
A$ = A$ + "_i6MYiFMU]C3:dP2P028P028YI68XdFHhmeMYA6MX1R9V02:`EVKOQ78[0RIX5VKTaFI]hcI\U7LXeR?RU6M]56L^LGJTA7JPh38"
|
|
A$ = A$ + "cAGHbA7NP\28]56NOMGJTA7JYT28R9GIQ]f>=X08P028P0BJV12:TmfGbEVKTEVLY0bN=X@2VmVLPP2Ib5fMOU78m02LUifGi1B;"
|
|
A$ = A$ + "PH6JQi6I\EF;nL6Ki17J]hSHYAGKQ1gGdm6L\02LYQGKQ1gGi1B?P0c>P0GJheFH`mENP`38VQFH^A6KUeR?WaFN`QF;n8FJdeFH"
|
|
A$ = A$ + "`iRL_MgLk02Ib5fMOUg:[`28`U6N]56LOUg:[T28keP29028VmVLPP2Ib5fMOQ78m02LUifGh1b:PH6JQi6I\EF;nL6Ki17J]hSH"
|
|
A$ = A$ + "YAGKQ1gG\EVIda28`U6N]56LOQ78m02<k02LYQGKQ1gGh12?PH6JQi6I\EF;nL6Ki17J]hSHYAGKQ1W;gU6IdQf>P@VLQMgGh]b:"
|
|
A$ = A$ + "\02LYQGKQ1gGh]b:Y0bN=X@2P028P0gLUAgGQi6IO=6KY17:T9GHgm5N\02Ib5fMOU7;PP2:Yi6MYPRIX5VKTaFI]hcI\U7LXeR?"
|
|
A$ = A$ + "RU6M]56L^8FMVIFIb]5LYQGKQ1gGi1R:PH6JQi6I\EF;nL6Ki17J]hSHYAGKQ1W;gU6IdQ68[02LYQGKQ1gGhe58Z0BH\17JQU28"
|
|
A$ = A$ + "l`38b@C:P`78bMVHY\C3:T08PdG3:T@O=X08P028P0BO=X08P028P02LUifGh1b:m0RIX5VKTaFI]hcI\U7LXeR?QAVMQifHUi2N"
|
|
A$ = A$ + "Pl28f@c>=X08P028P02LbEVMOM6Ki17JPd38WaFN`QfGYi6IUQg>=X08P028meP2P028=X08P028YI68X@7NdMGJTA7JY0R:dQ7M"
|
|
A$ = A$ + "gU6IdQ68m02LUifGh1B;P<7MQ97Mh]C3:028P0BJV12:SQFHb=G:PXbHX5VLc1B?P<FMbmeH`UVKTE6NkdP2P0BO=X08PTVIPPbH"
|
|
A$ = A$ + "X5VL`mfLY02:XTVKd=S<ZTbHX5VL`mfLY\eHe9gGS1GJ^AFIhe58m02LUifGh1B;P<7MQ97Mh]C3:dG3:dP2Yi6Mc838e1WLYi6M"
|
|
A$ = A$ + "XTVKd=S<P<7MQ97Mha28Yi6Mc838cAGHbAGN\0bHX5VLPXbLd9gGYi6;PTVKdI3=P8FNdE6KUi6;PDGJ^Ag<b0bH_afKe97;PTVK"
|
|
A$ = A$ + "d=S<PdFHhmeMYA6MXU28keP2P0BJ^Ag<b02MhAgMYA6MX]C3:<BJVAFIV1BD2I3=OI3==X08PD7LbUVKdmEIhAWLQQbLd5VLdQ7;"
|
|
A$ = A$ + "P<7MQ97Mia28XTVKdI3=Y<7MbmEJ^a28RU7MUaFI^a28]43;P43;PH2MhAgMYA6MXa28``28``28Sm6K_EWL\0BKQQgGgU6IdQF:"
|
|
A$ = A$ + "kdP2SD6KcEF3:028e1WLYi6MOE6Nd9GHX<7MQ97Mha28cAGHbAGN\02:Yi6Mc8C:cAWLOUVK\0RHiAGI\EVK\0B;a`28a`28V@7N"
|
|
A$ = A$ + "dMGJTA7J\02<\02<\0bH_afKe97;PdFHhmeMYA6MXUb>=X`8Ui6IYIF3:028bE6Me9WKP@7NdMGJTA7JkdP2meP2=X@J^Ag<b0BM"
|
|
A$ = A$ + "`9GJ^AgMYA6MXQbHX5VLPXbLd9gGYi6;PTVKdI3=P8FNdE6KUi6;PTVKd=S<PdFHhmeMYA6MXU28keP2P0BJ^Ag<b02MhAgMYA6M"
|
|
A$ = A$ + "X]C3:<BJVAFIV1BD2I3=OI3==X08PD7LbUVKdmEIhAWLQQ2<\02<\02:Yi6Mf@C:cAWLOUVK\0RHiAGI\EVK\0B;a`28``28V@7N"
|
|
A$ = A$ + "dMGJTA7J\02<\02<\02<\0BKQQgGgU6IdQF:kdP2SD6KcEF3:028e1WLYi6MOE6Nd9GHX03;P03;PPBJ^Ag<bTbLd9gGYi6;P8FN"
|
|
A$ = A$ + "dE6KUi6;PdB<\02<\0R9dQ7MgU6IdQ6;P03;P03;P03;PdFHhmeMYA6MXUb>=X`8Ui6IYIF3:028bE6Me9WKP@7NdMGJTA7JkdP2"
|
|
A$ = A$ + "meP2%%%0"
|
|
|
|
B$ = Unpack$(A$)
|
|
FileNum = FREEFILE
|
|
OPEN "falcon.h" FOR BINARY AS #FileNum
|
|
PUT #FileNum, 1, B$
|
|
CLOSE #FileNum
|
|
END SUB
|
|
|
|
'FUNCTION idezfilelist$ and idezpathlist$ (and helper functions) were
|
|
'adapted from ide_methods.bas (QB64):
|
|
FUNCTION idezfilelist$ (path$, method, depth%, TotalFound AS INTEGER) 'method0=*.frm and *.frmbin, method1=*.*
|
|
DIM sep AS STRING * 1, filelist$, a$
|
|
sep = CHR$(13)
|
|
|
|
TotalFound = 0
|
|
$IF WIN THEN
|
|
OPEN "opendlgfiles.dat" FOR OUTPUT AS #150: CLOSE #150
|
|
IF method = 0 THEN SHELL _HIDE "dir /b /ON /A-D " + QuotedFilename$(path$) + "\*.frm >opendlgfiles.dat"
|
|
IF method = 1 THEN SHELL _HIDE "dir /b /ON /A-D " + QuotedFilename$(path$) + "\*.* >opendlgfiles.dat"
|
|
filelist$ = ""
|
|
OPEN "opendlgfiles.dat" FOR INPUT AS #150
|
|
DO UNTIL EOF(150)
|
|
LINE INPUT #150, a$
|
|
IF LEN(a$) THEN 'skip blank entries
|
|
IF filelist$ = "" THEN filelist$ = a$ ELSE filelist$ = filelist$ + sep + a$
|
|
TotalFound = TotalFound + 1
|
|
END IF
|
|
LOOP
|
|
CLOSE #150
|
|
KILL "opendlgfiles.dat"
|
|
idezfilelist$ = filelist$
|
|
EXIT FUNCTION
|
|
$ELSE
|
|
filelist$ = ""
|
|
DIM i AS INTEGER, x AS INTEGER, a2$
|
|
FOR i = 1 TO 2 - method
|
|
OPEN "opendlgfiles.dat" FOR OUTPUT AS #150: CLOSE #150
|
|
IF method = 0 THEN
|
|
IF i = 1 THEN SHELL _HIDE "find " + QuotedFilename$(path$) + " -maxdepth " + LTRIM$(STR$(depth%)) + " -type f -name " + CHR$(34) + "*.frm*" + CHR$(34) + " >opendlgfiles.dat"
|
|
IF i = 2 THEN SHELL _HIDE "find " + QuotedFilename$(path$) + " -maxdepth " + LTRIM$(STR$(depth%)) + " -type f -name " + CHR$(34) + "*.FRM*" + CHR$(34) + " >opendlgfiles.dat"
|
|
END IF
|
|
IF method = 1 THEN
|
|
IF i = 1 THEN SHELL _HIDE "find " + QuotedFilename$(path$) + " -maxdepth " + LTRIM$(STR$(depth%)) + " -type f -name " + CHR$(34) + "*" + CHR$(34) + " >opendlgfiles.dat"
|
|
END IF
|
|
OPEN "opendlgfiles.dat" FOR INPUT AS #150
|
|
DO UNTIL EOF(150)
|
|
LINE INPUT #150, a$
|
|
IF LEN(a$) = 0 THEN EXIT DO
|
|
IF depth% = 1 THEN
|
|
FOR x = LEN(a$) TO 1 STEP -1
|
|
a2$ = MID$(a$, x, 1)
|
|
IF a2$ = "/" THEN
|
|
a$ = RIGHT$(a$, LEN(a$) - x)
|
|
EXIT FOR
|
|
END IF
|
|
NEXT
|
|
END IF
|
|
IF filelist$ = "" THEN filelist$ = a$ ELSE filelist$ = filelist$ + sep + a$
|
|
TotalFound = TotalFound + 1
|
|
LOOP
|
|
CLOSE #150
|
|
NEXT
|
|
KILL "opendlgfiles.dat"
|
|
idezfilelist$ = filelist$
|
|
EXIT FUNCTION
|
|
$END IF
|
|
END FUNCTION
|
|
|
|
FUNCTION idezpathlist$ (path$, TotalFound%)
|
|
DIM sep AS STRING * 1, a$, pathlist$, c AS INTEGER, x AS INTEGER, b$
|
|
DIM i AS INTEGER
|
|
sep = CHR$(13)
|
|
|
|
TotalFound% = 0
|
|
$IF WIN THEN
|
|
OPEN "opendlgfiles.dat" FOR OUTPUT AS #150: CLOSE #150
|
|
a$ = "": IF RIGHT$(path$, 1) = ":" THEN a$ = "\" 'use a \ after a drive letter
|
|
SHELL _HIDE "dir /b /ON /AD " + QuotedFilename$(path$ + a$) + " >opendlgfiles.dat"
|
|
pathlist$ = ""
|
|
OPEN "opendlgfiles.dat" FOR INPUT AS #150
|
|
DO UNTIL EOF(150)
|
|
LINE INPUT #150, a$
|
|
IF pathlist$ = "" THEN pathlist$ = a$ ELSE pathlist$ = pathlist$ + sep + a$
|
|
TotalFound% = TotalFound% + 1
|
|
LOOP
|
|
CLOSE #150
|
|
KILL "opendlgfiles.dat"
|
|
'count instances of / or \
|
|
c = 0
|
|
FOR x = 1 TO LEN(path$)
|
|
b$ = MID$(path$, x, 1)
|
|
IF b$ = PathSep$ THEN c = c + 1
|
|
NEXT
|
|
IF c >= 1 THEN
|
|
IF LEN(pathlist$) THEN pathlist$ = ".." + sep + pathlist$ ELSE pathlist$ = ".."
|
|
TotalFound% = TotalFound% + 1
|
|
END IF
|
|
'add drive paths
|
|
FOR i = 0 TO 25
|
|
IF LEN(pathlist$) THEN pathlist$ = pathlist$ + sep
|
|
pathlist$ = pathlist$ + CHR$(65 + i) + ":"
|
|
TotalFound% = TotalFound% + 1
|
|
NEXT
|
|
idezpathlist$ = pathlist$
|
|
EXIT FUNCTION
|
|
$ELSE
|
|
pathlist$ = ""
|
|
DIM a2$
|
|
OPEN "opendlgfiles.dat" FOR OUTPUT AS #150: CLOSE #150
|
|
SHELL _HIDE "find " + QuotedFilename$(path$) + " -maxdepth 1 -mindepth 1 -type d >opendlgfiles.dat"
|
|
OPEN "opendlgfiles.dat" FOR INPUT AS #150
|
|
DO UNTIL EOF(150)
|
|
LINE INPUT #150, a$
|
|
IF LEN(a$) = 0 THEN EXIT DO
|
|
FOR x = LEN(a$) TO 1 STEP -1
|
|
a2$ = MID$(a$, x, 1)
|
|
IF a2$ = "/" THEN
|
|
a$ = RIGHT$(a$, LEN(a$) - x)
|
|
EXIT FOR
|
|
END IF
|
|
NEXT
|
|
IF pathlist$ = "" THEN pathlist$ = a$ ELSE pathlist$ = pathlist$ + sep + a$
|
|
TotalFound% = TotalFound% + 1
|
|
LOOP
|
|
CLOSE #150
|
|
KILL "opendlgfiles.dat"
|
|
|
|
IF path$ <> "/" THEN
|
|
a$ = ".."
|
|
|
|
IF pathlist$ = "" THEN pathlist$ = a$ ELSE pathlist$ = a$ + sep + pathlist$
|
|
TotalFound% = TotalFound% + 1
|
|
END IF
|
|
|
|
idezpathlist$ = pathlist$
|
|
EXIT FUNCTION
|
|
$END IF
|
|
END FUNCTION
|
|
|
|
FUNCTION idezchangepath$ (path$, newpath$)
|
|
DIM x AS INTEGER, a$
|
|
|
|
idezchangepath$ = path$ 'default (for unsuccessful cases)
|
|
|
|
$IF WIN THEN
|
|
'go back a path
|
|
IF newpath$ = ".." THEN
|
|
FOR x = LEN(path$) TO 1 STEP -1
|
|
a$ = MID$(path$, x, 1)
|
|
IF a$ = "\" THEN
|
|
idezchangepath$ = LEFT$(path$, x - 1)
|
|
EXIT FOR
|
|
END IF
|
|
NEXT
|
|
EXIT FUNCTION
|
|
END IF
|
|
'change drive
|
|
IF LEN(newpath$) = 2 AND RIGHT$(newpath$, 1) = ":" THEN
|
|
idezchangepath$ = newpath$
|
|
EXIT FUNCTION
|
|
END IF
|
|
idezchangepath$ = path$ + "\" + newpath$
|
|
EXIT FUNCTION
|
|
$ELSE
|
|
'go back a path
|
|
IF newpath$ = ".." THEN
|
|
FOR x = LEN(path$) TO 1 STEP -1
|
|
a$ = MID$(path$, x, 1)
|
|
IF a$ = "/" THEN
|
|
idezchangepath$ = LEFT$(path$, x - 1)
|
|
IF x = 1 THEN idezchangepath$ = "/" 'root path cannot be ""
|
|
EXIT FOR
|
|
END IF
|
|
NEXT
|
|
EXIT FUNCTION
|
|
END IF
|
|
IF path$ = "/" THEN idezchangepath$ = "/" + newpath$ ELSE idezchangepath$ = path$ + "/" + newpath$
|
|
EXIT FUNCTION
|
|
$END IF
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION QuotedFilename$ (f$)
|
|
$IF WIN THEN
|
|
QuotedFilename$ = CHR$(34) + f$ + CHR$(34)
|
|
$ELSE
|
|
QuotedFilename$ = "'" + f$ + "'"
|
|
$END IF
|
|
END FUNCTION
|
|
|
|
FUNCTION Download$ (url$, file$, timelimit) STATIC
|
|
'as seen on http://www.qb64.org/wiki/Downloading_Files
|
|
'adapted for use with InForm
|
|
|
|
DIM client AS LONG, l AS LONG
|
|
DIM prevUrl$, prevUrl2$, url2$, x AS LONG
|
|
DIM e$, url3$, x$, t!, a2$, a$, i AS LONG
|
|
DIM i2 AS LONG, i3 AS LONG, d$, fh AS LONG
|
|
|
|
IF url$ <> prevUrl$ THEN
|
|
prevUrl$ = url$
|
|
IF url$ = "" THEN
|
|
IF client THEN CLOSE client: client = 0
|
|
EXIT SUB
|
|
END IF
|
|
url2$ = url$
|
|
x = INSTR(url2$, "/")
|
|
IF x THEN url2$ = LEFT$(url$, x - 1)
|
|
IF url2$ <> prevUrl2$ THEN
|
|
prevUrl2$ = url2$
|
|
IF client THEN CLOSE client: client = 0
|
|
client = _OPENCLIENT("TCP/IP:80:" + url2$)
|
|
IF client = 0 THEN Download = MKI$(2): prevUrl$ = "": EXIT FUNCTION
|
|
END IF
|
|
e$ = CHR$(13) + CHR$(10) ' end of line characters
|
|
url3$ = RIGHT$(url$, LEN(url$) - x + 1)
|
|
x$ = "GET " + url3$ + " HTTP/1.1" + e$
|
|
x$ = x$ + "Host: " + url2$ + e$ + e$
|
|
PUT #client, , x$
|
|
t! = TIMER ' start time
|
|
END IF
|
|
|
|
GET #client, , a2$
|
|
a$ = a$ + a2$
|
|
i = INSTR(a$, "Content-Length:")
|
|
IF i THEN
|
|
i2 = INSTR(i, a$, e$)
|
|
IF i2 THEN
|
|
l = VAL(MID$(a$, i + 15, i2 - i - 14))
|
|
i3 = INSTR(i2, a$, e$ + e$)
|
|
IF i3 THEN
|
|
i3 = i3 + 4 'move i3 to start of data
|
|
IF (LEN(a$) - i3 + 1) = l THEN
|
|
d$ = MID$(a$, i3, l)
|
|
fh = FREEFILE
|
|
OPEN file$ FOR OUTPUT AS #fh: CLOSE #fh 'Warning! Clears data from existing file
|
|
OPEN file$ FOR BINARY AS #fh
|
|
PUT #fh, , d$
|
|
CLOSE #fh
|
|
Download = MKI$(1) + MKL$(l) 'indicates download was successful
|
|
prevUrl$ = ""
|
|
a$ = ""
|
|
EXIT FUNCTION
|
|
END IF ' availabledata = l
|
|
END IF ' i3
|
|
END IF ' i2
|
|
END IF ' i
|
|
IF TIMER > t! + timelimit THEN CLOSE client: client = 0: Download = MKI$(3): prevUrl$ = "": EXIT FUNCTION
|
|
Download = MKI$(0) 'still working
|
|
END FUNCTION
|
|
|