-
Notifications
You must be signed in to change notification settings - Fork 0
/
modMain.bas
1107 lines (846 loc) · 43.6 KB
/
modMain.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Attribute VB_Name = "modMain"
'@IgnoreModule IntegerDataType, ModuleWithoutFolder
' volumeForm_BubblingEvent ' leaving that here so I can copy/paste to find it
Option Explicit
'------------------------------------------------------ STARTS
' for SetWindowPos z-ordering
Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public Const HWND_TOP As Long = 0 ' for SetWindowPos z-ordering
Public Const HWND_TOPMOST As Long = -1
Public Const HWND_BOTTOM As Long = 1
Private Const SWP_NOMOVE As Long = &H2
Private Const SWP_NOSIZE As Long = &H1
Public Const OnTopFlags As Long = SWP_NOMOVE Or SWP_NOSIZE
'------------------------------------------------------ ENDS
'------------------------------------------------------ STARTS
' to set the full window Opacity
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const WS_EX_LAYERED As Long = &H80000
Private Const GWL_EXSTYLE As Long = (-20)
Private Const LWA_COLORKEY As Long = &H1 'to transparent
Private Const LWA_ALPHA As Long = &H2 'to semi transparent
'------------------------------------------------------ ENDS
Public fMain As New cfMain
Public aboutWidget As cwAbout
Public helpWidget As cwHelp
Public licenceWidget As cwLicence
Public revealWidgetTimerCount As Integer
Public fVolume As New cfVolume
Public overlayWidget As cwOverlay
Public widgetName As String
Private B() As Byte
'---------------------------------------------------------------------------------------
' Procedure : Main
' Author : beededea
' Date : 27/04/2023
' Purpose :
'---------------------------------------------------------------------------------------
'
Private Sub Main()
On Error GoTo Main_Error
Call mainRoutine(False)
On Error GoTo 0
Exit Sub
Main_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Main of Module modMain"
End Sub
'---------------------------------------------------------------------------------------
' Procedure : main_routine
' Author : beededea
' Date : 27/06/2023
' Purpose : called by sub main() to allow this routine to be called elsewhere,
' a reload for example.
'---------------------------------------------------------------------------------------
'
Public Sub mainRoutine(ByVal restart As Boolean)
Dim extractCommand As String: extractCommand = vbNullString
Dim thisPSDFullPath As String: thisPSDFullPath = vbNullString
Dim licenceState As Integer: licenceState = 0
On Error GoTo main_routine_Error
widgetName = "Diesel Volume Control"
thisPSDFullPath = App.path & "\Res\dieselVolumeMerged.psd"
fVolume.FX = 222 'init position- and zoom-values (directly set on Public-Props of the Form-hosting Class)
fVolume.FY = 111
fVolume.FZ = 0.4
prefsCurrentWidth = 9075
prefsCurrentHeight = 16450
tzDelta = 0
tzDelta1 = 0
extractCommand = Command$ ' capture any parameter passed, remove if a soft reload
If restart = True Then extractCommand = vbNullString
' initialise global vars
Call initialiseGlobalVars
'add Resources to the global ImageList
Call addImagesToImageList
' check the Windows version
classicThemeCapable = fTestClassicThemeCapable
' get this tool's entry in the trinkets settings file and assign the app.path
Call getTrinketsFile
' get the location of this tool's settings file (appdata)
Call getToolSettingsFile
' read the dock settings from the new configuration file
Call readSettingsFile("Software\DieselVolumeControl", gblSettingsFile)
' validate the inputs of any data from the input settings file
Call validateInputs
' check first usage via licence acceptance value and then set initial DPI awareness
licenceState = fLicenceState()
If licenceState = 0 Then
Call testDPIAndSetInitialAwareness ' determine High DPI awareness or not by default on first run
Else
Call setDPIaware ' determine the user settings for DPI awareness, for this program and all its forms.
End If
'load the collection for storing the overlay surfaces with its relevant keys direct from the PSD
If restart = False Then Call loadExcludePathCollection ' no need to reload the collPSDNonUIElements layer name keys on a reload
' start the load of the PSD file using the RC6 PSD-Parser.instance
Call fVolume.InitFromPSD(thisPSDFullPath) ' no optional close layer as 3rd param
' resolve VB6 sizing width bug
Call determineScreenDimensions
' initialise and create the three main RC forms on the current display
Call createRCFormsOnCurrentDisplay
' check the selected monitor properties
Call monitorProperties(fVolume.volumeForm) ' might use RC6 for this?
' place the form at the saved location
Call makeVisibleFormElements
' run the functions that are also called at reload time.
Call adjustMainControls ' this needs to be here after the initialisation of the Cairo forms and widgets
' move/hide onto/from the main screen
Call mainScreen
' if the program is run in unhide mode, write the settings and exit
Call handleUnhideMode(extractCommand)
' if the parameter states re-open prefs then shows the prefs
If extractCommand = "prefs" Then
Call makeProgramPreferencesAvailable
extractCommand = vbNullString
End If
'load the preferences form but don't yet show it, speeds up access to the prefs via the menu
Load widgetPrefs
'load the message form but don't yet show it, speeds up access to the message form when needed.
Load frmMessage
' display licence screen on first usage
Call showLicence(fLicenceState)
' make the prefs appear on the first time running
Call checkFirstTime
' configure any global timers here
Call configureTimers
' RC message pump will auto-exit when Cairo Forms > 0 so we run it only when 0, this prevents message interruption
' when running twice on reload.
If Cairo.WidgetForms.Count = 0 Then Cairo.WidgetForms.EnterMessageLoop
On Error GoTo 0
Exit Sub
main_routine_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure main_routine of Module modMain at "
End Sub
'---------------------------------------------------------------------------------------
' Procedure : checkFirstTime
' Author : beededea
' Date : 12/05/2023
' Purpose : check for first time running, first time run shows prefs
'---------------------------------------------------------------------------------------
'
Private Sub checkFirstTime()
On Error GoTo checkFirstTime_Error
If gblFirstTimeRun = "true" Then
'MsgBox "checkFirstTime"
Call makeProgramPreferencesAvailable
gblFirstTimeRun = "false"
sPutINISetting "Software\DieselVolumeControl", "firstTimeRun", gblFirstTimeRun, gblSettingsFile
End If
On Error GoTo 0
Exit Sub
checkFirstTime_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure checkFirstTime of Module modMain"
End Sub
'---------------------------------------------------------------------------------------
' Procedure : initialiseGlobalVars
' Author : beededea
' Date : 12/05/2023
' Purpose : initialise global vars
'---------------------------------------------------------------------------------------
'
Private Sub initialiseGlobalVars()
On Error GoTo initialiseGlobalVars_Error
' general
gblStartup = vbNullString
gblWidgetFunctions = vbNullString
gblNumericDisplay = vbNullString
gblSmoothSecondHand = vbNullString
' config
gblEnableTooltips = vbNullString
gblEnablePrefsTooltips = vbNullString
gblEnableBalloonTooltips = vbNullString
gblShowTaskbar = vbNullString
gblDpiAwareness = vbNullString
gblGaugeSize = vbNullString
gblScrollWheelDirection = vbNullString
' position
gblAspectHidden = vbNullString
gblWidgetPosition = vbNullString
gblWidgetLandscape = vbNullString
gblWidgetPortrait = vbNullString
gblLandscapeFormHoffset = vbNullString
gblLandscapeFormVoffset = vbNullString
gblPortraitHoffset = vbNullString
gblPortraitYoffset = vbNullString
gblvLocationPercPrefValue = vbNullString
gblhLocationPercPrefValue = vbNullString
' sounds
gblEnableSounds = vbNullString
' development
gblDebug = vbNullString
gblDblClickCommand = vbNullString
gblOpenFile = vbNullString
gblDefaultEditor = vbNullString
' font
gblClockFont = vbNullString
gblPrefsFont = vbNullString
gblPrefsFontSizeHighDPI = vbNullString
gblPrefsFontSizeLowDPI = vbNullString
gblPrefsFontItalics = vbNullString
gblPrefsFontColour = vbNullString
' window
gblWindowLevel = vbNullString
gblPreventDragging = vbNullString
gblOpacity = vbNullString
gblWidgetHidden = vbNullString
gblHidingTime = vbNullString
gblIgnoreMouse = vbNullString
gblFirstTimeRun = vbNullString
' general storage variables declared
gblSettingsDir = vbNullString
gblSettingsFile = vbNullString
gblTrinketsDir = vbNullString
gblTrinketsFile = vbNullString
gblClockHighDpiXPos = vbNullString
gblClockHighDpiYPos = vbNullString
gblClockLowDpiXPos = vbNullString
gblClockLowDpiYPos = vbNullString
gblLastSelectedTab = vbNullString
gblSkinTheme = vbNullString
' general variables declared
'toolSettingsFile = vbNullString
classicThemeCapable = False
storeThemeColour = 0
windowsVer = vbNullString
' vars to obtain correct screen width (to correct VB6 bug) STARTS
screenTwipsPerPixelX = 0
screenTwipsPerPixelY = 0
screenWidthTwips = 0
screenHeightTwips = 0
screenHeightPixels = 0
screenWidthPixels = 0
oldScreenHeightPixels = 0
oldScreenWidthPixels = 0
' key presses
CTRL_1 = False
SHIFT_1 = False
' other globals
debugFlg = 0
minutesToHide = 0
aspectRatio = vbNullString
revealWidgetTimerCount = 0
oldgblSettingsModificationTime = #1/1/2000 12:00:00 PM#
On Error GoTo 0
Exit Sub
initialiseGlobalVars_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure initialiseGlobalVars of Module modMain"
End Sub
'---------------------------------------------------------------------------------------
' Procedure : addImagesToImageList
' Author : beededea
' Date : 27/04/2023
' Purpose : add Resources to the global ImageList
'---------------------------------------------------------------------------------------
'
Private Sub addImagesToImageList()
'Dim useloop As Integer: useloop = 0
On Error GoTo addImagesToImageList_Error
' add Resources to the global ImageList that are not being pulled from the PSD directly
Cairo.ImageList.AddImage "about", App.path & "\Resources\images\about.png"
Cairo.ImageList.AddImage "help", App.path & "\Resources\images\diesel-volume-help.png"
Cairo.ImageList.AddImage "licence", App.path & "\Resources\images\frame.png"
Cairo.ImageList.AddImage "frmIcon", App.path & "\Resources\images\Icon.png"
' prefs icons
Cairo.ImageList.AddImage "about-icon-dark", App.path & "\Resources\images\about-icon-dark-1010.jpg"
Cairo.ImageList.AddImage "about-icon-light", App.path & "\Resources\images\about-icon-light-1010.jpg"
Cairo.ImageList.AddImage "config-icon-dark", App.path & "\Resources\images\config-icon-dark-1010.jpg"
Cairo.ImageList.AddImage "config-icon-light", App.path & "\Resources\images\config-icon-light-1010.jpg"
Cairo.ImageList.AddImage "development-icon-light", App.path & "\Resources\images\development-icon-light-1010.jpg"
Cairo.ImageList.AddImage "development-icon-dark", App.path & "\Resources\images\development-icon-dark-1010.jpg"
Cairo.ImageList.AddImage "general-icon-dark", App.path & "\Resources\images\general-icon-dark-1010.jpg"
Cairo.ImageList.AddImage "general-icon-light", App.path & "\Resources\images\general-icon-light-1010.jpg"
Cairo.ImageList.AddImage "sounds-icon-light", App.path & "\Resources\images\sounds-icon-light-1010.jpg"
Cairo.ImageList.AddImage "sounds-icon-dark", App.path & "\Resources\images\sounds-icon-dark-1010.jpg"
Cairo.ImageList.AddImage "windows-icon-light", App.path & "\Resources\images\windows-icon-light-1010.jpg"
Cairo.ImageList.AddImage "windows-icon-dark", App.path & "\Resources\images\windows-icon-dark-1010.jpg"
Cairo.ImageList.AddImage "font-icon-dark", App.path & "\Resources\images\font-icon-dark-1010.jpg"
Cairo.ImageList.AddImage "font-icon-light", App.path & "\Resources\images\font-icon-light-1010.jpg"
Cairo.ImageList.AddImage "position-icon-light", App.path & "\Resources\images\position-icon-light-1010.jpg"
Cairo.ImageList.AddImage "position-icon-dark", App.path & "\Resources\images\position-icon-dark-1010.jpg"
Cairo.ImageList.AddImage "general-icon-dark-clicked", App.path & "\Resources\images\general-icon-dark-600-clicked.jpg"
Cairo.ImageList.AddImage "config-icon-dark-clicked", App.path & "\Resources\images\config-icon-dark-600-clicked.jpg"
Cairo.ImageList.AddImage "font-icon-dark-clicked", App.path & "\Resources\images\font-icon-dark-600-clicked.jpg"
Cairo.ImageList.AddImage "sounds-icon-dark-clicked", App.path & "\Resources\images\sounds-icon-dark-600-clicked.jpg"
Cairo.ImageList.AddImage "position-icon-dark-clicked", App.path & "\Resources\images\position-icon-dark-600-clicked.jpg"
Cairo.ImageList.AddImage "development-icon-dark-clicked", App.path & "\Resources\images\development-icon-dark-600-clicked.jpg"
Cairo.ImageList.AddImage "windows-icon-dark-clicked", App.path & "\Resources\images\windows-icon-dark-600-clicked.jpg"
Cairo.ImageList.AddImage "about-icon-dark-clicked", App.path & "\Resources\images\about-icon-dark-600-clicked.jpg"
Cairo.ImageList.AddImage "general-icon-light-clicked", App.path & "\Resources\images\general-icon-light-600-clicked.jpg"
Cairo.ImageList.AddImage "config-icon-light-clicked", App.path & "\Resources\images\config-icon-light-600-clicked.jpg"
Cairo.ImageList.AddImage "font-icon-light-clicked", App.path & "\Resources\images\font-icon-light-600-clicked.jpg"
Cairo.ImageList.AddImage "sounds-icon-light-clicked", App.path & "\Resources\images\sounds-icon-light-600-clicked.jpg"
Cairo.ImageList.AddImage "position-icon-light-clicked", App.path & "\Resources\images\position-icon-light-600-clicked.jpg"
Cairo.ImageList.AddImage "development-icon-light-clicked", App.path & "\Resources\images\development-icon-light-600-clicked.jpg"
Cairo.ImageList.AddImage "windows-icon-light-clicked", App.path & "\Resources\images\windows-icon-light-600-clicked.jpg"
Cairo.ImageList.AddImage "about-icon-light-clicked", App.path & "\Resources\images\about-icon-light-600-clicked.jpg"
On Error GoTo 0
Exit Sub
addImagesToImageList_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure addImagesToImageList of Module modMain"
End Sub
'---------------------------------------------------------------------------------------
' Procedure : adjustMainControls
' Author : beededea
' Date : 27/04/2023
' Purpose : called at runtime and on restart, sets the characteristics of the gauge, individual controls and menus
'---------------------------------------------------------------------------------------
'
Public Sub adjustMainControls()
On Error GoTo adjustMainControls_Error
' validate the inputs of any data from the input settings file
Call validateInputs
fVolume.AdjustZoom Val(gblGaugeSize) / 100
' overlayWidget.ZoomDirection = gblScrollWheelDirection
If gblWidgetFunctions = "1" Then
menuForm.mnuSwitchOff.Checked = False
menuForm.mnuTurnFunctionsOn.Checked = True
Else
menuForm.mnuSwitchOff.Checked = True
menuForm.mnuTurnFunctionsOn.Checked = False
End If
If gblDefaultEditor <> vbNullString And gblDebug = "1" Then
menuForm.mnuEditWidget.Caption = "Edit Widget using " & gblDefaultEditor
menuForm.mnuEditWidget.Visible = True
Else
menuForm.mnuEditWidget.Visible = False
End If
If gblShowTaskbar = "0" Then
fVolume.volumeForm.ShowInTaskbar = False
Else
fVolume.volumeForm.ShowInTaskbar = True
End If
' set the characteristics of the interactive areas
' Note: set the Hover colour close to the original layer to avoid too much intrusion, 0 being grey
With fVolume.volumeForm.Widgets("speaker").Widget
.HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
.MousePointer = IDC_HAND
.Alpha = Val(gblOpacity) / 100
.Tag = 0.01
End With
With fVolume.volumeForm.Widgets("bell").Widget
.HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
.MousePointer = IDC_HAND
.Alpha = Val(gblOpacity) / 100
.Tag = 0.01
End With
With fVolume.volumeForm.Widgets("bellpushed").Widget
.HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
.MousePointer = IDC_HAND
.Alpha = Val(gblOpacity) / 100
.Tag = 0.01
End With
With fVolume.volumeForm.Widgets("indicatorred").Widget
.HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
.MousePointer = IDC_HAND
.Alpha = Val(gblOpacity) / 100
.Tag = 0.01
End With
With fVolume.volumeForm.Widgets("indicatorgreen").Widget
.HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
.MousePointer = IDC_HAND
.Alpha = Val(gblOpacity) / 100
.Tag = 0.01
End With
' With fVolume.volumeForm.Widgets("cable").Widget
' .HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
' .MousePointer = IDC_HAND
' .Alpha = Val(gblOpacity) / 100
' .Tag = 0.01
' End With
' With fVolume.volumeForm.Widgets("sliderset").Widget
' .HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
' .MousePointer = IDC_HAND
' .Tag = 0.01
' '.Moveable = True
' End With
With fVolume.volumeForm.Widgets("bar").Widget
.HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
.MousePointer = IDC_SIZEALL
.Alpha = Val(gblOpacity) / 100
.Tag = 0.01
End With
With fVolume.volumeForm.Widgets("pipes").Widget
.HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
.MousePointer = IDC_SIZEALL
.Alpha = Val(gblOpacity) / 100
.Tag = 0.01
End With
With fVolume.volumeForm.Widgets("cablewheelset").Widget
.HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
.MousePointer = IDC_SIZEALL
.Alpha = Val(gblOpacity) / 100
.Tag = 0.01
End With
With fVolume.volumeForm.Widgets("lockingpin").Widget
.HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
.MousePointer = IDC_HAND
.Alpha = Val(gblOpacity) / 100
.Tag = 0.01
End With
With fVolume.volumeForm.Widgets("lockingpinunlocked").Widget
.HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
.MousePointer = IDC_HAND
.Alpha = Val(gblOpacity) / 100
.Tag = 0.01
End With
With fVolume.volumeForm.Widgets("helppin").Widget
.HoverColor = 0 ' set the hover colour to grey - this may change later with new RC6
.MousePointer = IDC_HAND
.Alpha = Val(gblOpacity) / 100
.Tag = 0.01
End With
If gblPreventDragging = "0" Then
menuForm.mnuLockWidget.Checked = False
overlayWidget.Locked = False
fVolume.volumeForm.Widgets("lockingpin").Widget.Alpha = Val(gblOpacity) / 100
fVolume.volumeForm.Widgets("lockingpinunlocked").Widget.Alpha = 0
Else
menuForm.mnuLockWidget.Checked = True
overlayWidget.Locked = True ' this is just here for continuity's sake, it is also set at the time the control is selected
fVolume.volumeForm.Widgets("lockingpin").Widget.Alpha = 0
fVolume.volumeForm.Widgets("lockingpinunlocked").Widget.Alpha = Val(gblOpacity) / 100
End If
If fVolume.Mute = True Then
fVolume.volumeForm.Widgets("indicatorgreen").Widget.Alpha = 0
fVolume.volumeForm.Widgets("indicatorred").Widget.Alpha = Val(gblOpacity) / 100
Else
fVolume.volumeForm.Widgets("indicatorgreen").Widget.Alpha = Val(gblOpacity) / 100
fVolume.volumeForm.Widgets("indicatorred").Widget.Alpha = 0
End If
' obtain the system volume and set the slider position accordingly
fVolume.VolumePerc = fVolume.SystemAudioLevel
' refresh the form in order to show the above changes immediately
fVolume.volumeForm.Refresh
' set the z-ordering of the window
Call setAlphaFormZordering
' set the tooltips on the main screen
Call setMainTooltips
' set the hiding time for the hiding timer, can't read the minutes from comboxbox as the prefs isn't yet open
Call setHidingTime
If minutesToHide > 0 Then menuForm.mnuHideWidget.Caption = "Hide Widget for " & minutesToHide & " min."
On Error GoTo 0
Exit Sub
adjustMainControls_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure adjustMainControls of Module modMain"
End Sub
'---------------------------------------------------------------------------------------
' Procedure : setAlphaFormZordering
' Author : beededea
' Date : 02/05/2023
' Purpose : set the z-ordering of the window
'---------------------------------------------------------------------------------------
'
Public Sub setAlphaFormZordering()
On Error GoTo setAlphaFormZordering_Error
If Val(gblWindowLevel) = 0 Then
Call SetWindowPos(fVolume.volumeForm.hwnd, HWND_BOTTOM, 0&, 0&, 0&, 0&, OnTopFlags)
ElseIf Val(gblWindowLevel) = 1 Then
Call SetWindowPos(fVolume.volumeForm.hwnd, HWND_TOP, 0&, 0&, 0&, 0&, OnTopFlags)
ElseIf Val(gblWindowLevel) = 2 Then
Call SetWindowPos(fVolume.volumeForm.hwnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, OnTopFlags)
End If
On Error GoTo 0
Exit Sub
setAlphaFormZordering_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure setAlphaFormZordering of Module modMain"
End Sub
'---------------------------------------------------------------------------------------
' Procedure : readSettingsFile
' Author : beededea
' Date : 12/05/2020
' Purpose : read the application's setting file and assign values to public vars
'---------------------------------------------------------------------------------------
'
Public Sub readSettingsFile(ByVal location As String, ByVal gblSettingsFile As String)
On Error GoTo readSettingsFile_Error
If fFExists(gblSettingsFile) Then
' general
gblStartup = fGetINISetting(location, "startup", gblSettingsFile)
gblWidgetFunctions = fGetINISetting(location, "widgetFunctions", gblSettingsFile)
gblNumericDisplay = fGetINISetting(location, "numericDisplay", gblSettingsFile)
gblSmoothSecondHand = fGetINISetting(location, "smoothSecondHand", gblSettingsFile)
' gblClockFaceSwitchPref = fGetINISetting(location, "clockFaceSwitchPref", gblSettingsFile)
'gblSecondaryGaugeTimeZone = fGetINISetting(location, "secondaryGaugeTimeZone", gblSettingsFile)
'gblSecondaryDaylightSaving = fGetINISetting(location, "secondaryDaylightSaving", gblSettingsFile)
' configuration
gblEnableTooltips = fGetINISetting(location, "enableTooltips", gblSettingsFile)
gblEnablePrefsTooltips = fGetINISetting(location, "enablePrefsTooltips", gblSettingsFile)
gblEnableBalloonTooltips = fGetINISetting(location, "enableBalloonTooltips", gblSettingsFile)
gblShowTaskbar = fGetINISetting(location, "showTaskbar", gblSettingsFile)
gblDpiAwareness = fGetINISetting(location, "dpiAwareness", gblSettingsFile)
gblGaugeSize = fGetINISetting(location, "gaugeSize", gblSettingsFile)
gblScrollWheelDirection = fGetINISetting(location, "scrollWheelDirection", gblSettingsFile)
' position
gblAspectHidden = fGetINISetting(location, "aspectHidden", gblSettingsFile)
gblWidgetPosition = fGetINISetting(location, "widgetPosition", gblSettingsFile)
gblWidgetLandscape = fGetINISetting(location, "widgetLandscape", gblSettingsFile)
gblWidgetPortrait = fGetINISetting(location, "widgetPortrait", gblSettingsFile)
gblLandscapeFormHoffset = fGetINISetting(location, "landscapeHoffset", gblSettingsFile)
gblLandscapeFormVoffset = fGetINISetting(location, "landscapeYoffset", gblSettingsFile)
gblPortraitHoffset = fGetINISetting(location, "portraitHoffset", gblSettingsFile)
gblPortraitYoffset = fGetINISetting(location, "portraitYoffset", gblSettingsFile)
gblvLocationPercPrefValue = fGetINISetting(location, "vLocationPercPrefValue", gblSettingsFile)
gblhLocationPercPrefValue = fGetINISetting(location, "hLocationPercPrefValue", gblSettingsFile)
' font
gblClockFont = fGetINISetting(location, "clockFont", gblSettingsFile)
gblPrefsFont = fGetINISetting(location, "prefsFont", gblSettingsFile)
gblPrefsFontSizeHighDPI = fGetINISetting(location, "prefsFontSizeHighDPI", gblSettingsFile)
gblPrefsFontSizeLowDPI = fGetINISetting(location, "prefsFontSizeLowDPI", gblSettingsFile)
gblPrefsFontItalics = fGetINISetting(location, "prefsFontItalics", gblSettingsFile)
gblPrefsFontColour = fGetINISetting(location, "prefsFontColour", gblSettingsFile)
' sound
gblEnableSounds = fGetINISetting(location, "enableSounds", gblSettingsFile)
' development
gblDebug = fGetINISetting(location, "debug", gblSettingsFile)
gblDblClickCommand = fGetINISetting(location, "dblClickCommand", gblSettingsFile)
gblOpenFile = fGetINISetting(location, "openFile", gblSettingsFile)
gblDefaultEditor = fGetINISetting(location, "defaultEditor", gblSettingsFile)
' other
gblClockHighDpiXPos = fGetINISetting("Software\DieselVolumeControl", "clockHighDpiXPos", gblSettingsFile)
gblClockHighDpiYPos = fGetINISetting("Software\DieselVolumeControl", "clockHighDpiYPos", gblSettingsFile)
gblClockLowDpiXPos = fGetINISetting("Software\DieselVolumeControl", "clockLowDpiXPos", gblSettingsFile)
gblClockLowDpiYPos = fGetINISetting("Software\DieselVolumeControl", "clockLowDpiYPos", gblSettingsFile)
gblLastSelectedTab = fGetINISetting(location, "lastSelectedTab", gblSettingsFile)
gblSkinTheme = fGetINISetting(location, "skinTheme", gblSettingsFile)
' window
gblWindowLevel = fGetINISetting(location, "windowLevel", gblSettingsFile)
gblPreventDragging = fGetINISetting(location, "preventDragging", gblSettingsFile)
gblOpacity = fGetINISetting(location, "opacity", gblSettingsFile)
' we do not want the widget to hide at startup
'gblWidgetHidden = fGetINISetting(location, "widgetHidden", gblSettingsFile)
gblWidgetHidden = "0"
gblHidingTime = fGetINISetting(location, "hidingTime", gblSettingsFile)
gblIgnoreMouse = fGetINISetting(location, "ignoreMouse", gblSettingsFile)
gblFirstTimeRun = fGetINISetting(location, "firstTimeRun", gblSettingsFile)
End If
On Error GoTo 0
Exit Sub
readSettingsFile_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure readSettingsFile of Module common2"
End Sub
'---------------------------------------------------------------------------------------
' Procedure : validateInputs
' Author : beededea
' Date : 17/06/2020
' Purpose : validate the relevant entries from the settings.ini file in user appdata
'---------------------------------------------------------------------------------------
'
Public Sub validateInputs()
On Error GoTo validateInputs_Error
' general
If gblWidgetFunctions = vbNullString Then gblWidgetFunctions = "1" ' always turn
' If gblAnimationInterval = vbNullString Then gblAnimationInterval = "130"
If gblStartup = vbNullString Then gblStartup = "1"
If gblNumericDisplay = vbNullString Then gblNumericDisplay = "1"
If gblSmoothSecondHand = vbNullString Then gblSmoothSecondHand = "0"
'If gblClockFaceSwitchPref = vbNullString Then gblClockFaceSwitchPref = "0"
'If gblSecondaryGaugeTimeZone = vbNullString Then gblSecondaryGaugeTimeZone = "1"
'If gblSecondaryDaylightSaving = vbNullString Then gblSecondaryDaylightSaving = "1"
' Configuration
If gblEnableTooltips = vbNullString Then gblEnableTooltips = "0"
If gblEnablePrefsTooltips = vbNullString Then gblEnablePrefsTooltips = "1"
If gblEnableBalloonTooltips = vbNullString Then gblEnableBalloonTooltips = "1"
If gblShowTaskbar = vbNullString Then gblShowTaskbar = "0"
If gblDpiAwareness = vbNullString Then gblDpiAwareness = "0"
If gblGaugeSize = vbNullString Then gblGaugeSize = "25"
If gblScrollWheelDirection = vbNullString Then gblScrollWheelDirection = "1"
' fonts
If gblPrefsFont = vbNullString Then gblPrefsFont = "times new roman"
If gblClockFont = vbNullString Then gblClockFont = gblPrefsFont
If gblPrefsFontSizeHighDPI = vbNullString Then gblPrefsFontSizeHighDPI = "8"
If gblPrefsFontSizeLowDPI = vbNullString Then gblPrefsFontSizeLowDPI = "8"
If gblPrefsFontItalics = vbNullString Then gblPrefsFontItalics = "false"
If gblPrefsFontColour = vbNullString Then gblPrefsFontColour = "0"
' sounds
If gblEnableSounds = vbNullString Then gblEnableSounds = "1"
' position
If gblAspectHidden = vbNullString Then gblAspectHidden = "0"
If gblWidgetPosition = vbNullString Then gblWidgetPosition = "0"
If gblWidgetLandscape = vbNullString Then gblWidgetLandscape = "0"
If gblWidgetPortrait = vbNullString Then gblWidgetPortrait = "0"
If gblLandscapeFormHoffset = vbNullString Then gblLandscapeFormHoffset = vbNullString
If gblLandscapeFormVoffset = vbNullString Then gblLandscapeFormVoffset = vbNullString
If gblPortraitHoffset = vbNullString Then gblPortraitHoffset = vbNullString
If gblPortraitYoffset = vbNullString Then gblPortraitYoffset = vbNullString
If gblvLocationPercPrefValue = vbNullString Then gblvLocationPercPrefValue = vbNullString
If gblhLocationPercPrefValue = vbNullString Then gblhLocationPercPrefValue = vbNullString
' development
If gblDebug = vbNullString Then gblDebug = "0"
If gblDblClickCommand = vbNullString Then gblDblClickCommand = "mmsys.cpl"
If gblOpenFile = vbNullString Then gblOpenFile = vbNullString
If gblDefaultEditor = vbNullString Then gblDefaultEditor = vbNullString
' window
If gblWindowLevel = vbNullString Then gblWindowLevel = "1" 'WindowLevel", gblSettingsFile)
If gblOpacity = vbNullString Then gblOpacity = "100"
If gblWidgetHidden = vbNullString Then gblWidgetHidden = "0"
If gblHidingTime = vbNullString Then gblHidingTime = "0"
If gblIgnoreMouse = vbNullString Then gblIgnoreMouse = "0"
If gblPreventDragging = vbNullString Then gblPreventDragging = "0"
' other
If gblFirstTimeRun = vbNullString Then gblFirstTimeRun = "true"
If gblLastSelectedTab = vbNullString Then gblLastSelectedTab = "general"
If gblSkinTheme = vbNullString Then gblSkinTheme = "dark"
On Error GoTo 0
Exit Sub
validateInputs_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure validateInputs of form modMain"
End Sub
'---------------------------------------------------------------------------------------
' Procedure : getTrinketsFile
' Author : beededea
' Date : 17/10/2019
' Purpose : get this tool's entry in the trinkets settings file and assign the app.path
'---------------------------------------------------------------------------------------
'
Private Sub getTrinketsFile()
On Error GoTo getTrinketsFile_Error
Dim iFileNo As Integer: iFileNo = 0
gblTrinketsDir = fSpecialFolder(feUserAppData) & "\trinkets" ' just for this user alone
gblTrinketsFile = gblTrinketsDir & "\" & widgetName & ".ini"
'if the folder does not exist then create the folder
If Not fDirExists(gblTrinketsDir) Then
MkDir gblTrinketsDir
End If
'if the settings.ini does not exist then create the file by copying
If Not fFExists(gblTrinketsFile) Then
iFileNo = FreeFile
'open the file for writing
Open gblTrinketsFile For Output As #iFileNo
Write #iFileNo, App.path & "\" & App.EXEName & ".exe"
Write #iFileNo,
Close #iFileNo
End If
On Error GoTo 0
Exit Sub
getTrinketsFile_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure getTrinketsFile of Form modMain"
End Sub
'---------------------------------------------------------------------------------------
' Procedure : getToolSettingsFile
' Author : beededea
' Date : 17/10/2019
' Purpose : get this tool's settings file and assign to a global var
'---------------------------------------------------------------------------------------
'
Private Sub getToolSettingsFile()
On Error GoTo getToolSettingsFile_Error
''If debugflg = 1 Then Debug.Print "%getToolSettingsFile"
Dim iFileNo As Integer: iFileNo = 0
gblSettingsDir = fSpecialFolder(feUserAppData) & "\DieselVolumeControl" ' just for this user alone
gblSettingsFile = gblSettingsDir & "\settings.ini"
'if the folder does not exist then create the folder
If Not fDirExists(gblSettingsDir) Then
MkDir gblSettingsDir
End If
'if the settings.ini does not exist then create the file by copying
If Not fFExists(gblSettingsFile) Then
iFileNo = FreeFile
'open the file for writing
Open gblSettingsFile For Output As #iFileNo
Close #iFileNo
End If
On Error GoTo 0
Exit Sub
getToolSettingsFile_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure getToolSettingsFile of Form modMain"
End Sub
'
'---------------------------------------------------------------------------------------
' Procedure : configureTimers
' Author : beededea
' Date : 07/05/2023
' Purpose : configure any global timers here
'---------------------------------------------------------------------------------------
'
Private Sub configureTimers()
On Error GoTo configureTimers_Error
oldgblSettingsModificationTime = FileDateTime(gblSettingsFile)
frmTimer.rotationTimer.Enabled = True
frmTimer.settingsTimer.Enabled = True
On Error GoTo 0
Exit Sub
configureTimers_Error:
With Err
If .Number <> 0 Then
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure configureTimers of Module modMain"
Resume Next
End If
End With
End Sub
'
'---------------------------------------------------------------------------------------
' Procedure : setHidingTime
' Author : beededea
' Date : 07/05/2023
' Purpose : set the hiding time for the hiding timer, can't read the minutes from comboxbox as the prefs isn't yet open
'---------------------------------------------------------------------------------------
'
Private Sub setHidingTime()
On Error GoTo setHidingTime_Error
If gblHidingTime = "0" Then minutesToHide = 1
If gblHidingTime = "1" Then minutesToHide = 5
If gblHidingTime = "2" Then minutesToHide = 10
If gblHidingTime = "3" Then minutesToHide = 20
If gblHidingTime = "4" Then minutesToHide = 30
If gblHidingTime = "5" Then minutesToHide = 60
On Error GoTo 0
Exit Sub
setHidingTime_Error:
With Err
If .Number <> 0 Then
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure setHidingTime of Module modMain"
Resume Next
End If
End With
End Sub
'---------------------------------------------------------------------------------------
' Procedure : createRCFormsOnCurrentDisplay
' Author : beededea
' Date : 07/05/2023
' Purpose :
'---------------------------------------------------------------------------------------
'
Private Sub createRCFormsOnCurrentDisplay()
On Error GoTo createRCFormsOnCurrentDisplay_Error
With New_c.Displays(1) 'get the current Display
Call fMain.initAndShowAboutForm(.WorkLeft, .WorkTop, 1000, 1000, widgetName)
End With
With New_c.Displays(1) 'get the current Display
Call fMain.initAndShowHelpForm(.WorkLeft, .WorkTop, 1000, 1000, widgetName)
End With
With New_c.Displays(1) 'get the current Display
Call fMain.initAndShowLicenceForm(.WorkLeft, .WorkTop, 1000, 1000, widgetName)
End With
On Error GoTo 0
Exit Sub
createRCFormsOnCurrentDisplay_Error:
With Err
If .Number <> 0 Then
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure createRCFormsOnCurrentDisplay of Module modMain"
Resume Next
End If
End With
End Sub
'---------------------------------------------------------------------------------------
' Procedure : handleUnhideMode
' Author : beededea
' Date : 13/05/2023
' Purpose : when run in 'unhide' mode it writes the settings file then exits, the other
' running but hidden process will unhide itself by timer.
'---------------------------------------------------------------------------------------
'
Private Sub handleUnhideMode(ByVal thisUnhideMode As String)
On Error GoTo handleUnhideMode_Error
If thisUnhideMode = "unhide" Then 'parse the command line
gblUnhide = "true"
sPutINISetting "Software\DieselVolumeControl", "unhide", gblUnhide, gblSettingsFile
Call thisForm_Unload
End
End If
On Error GoTo 0
Exit Sub
handleUnhideMode_Error:
With Err
If .Number <> 0 Then
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure handleUnhideMode of Module modMain"
Resume Next
End If
End With
End Sub
'---------------------------------------------------------------------------------------
' Procedure : loadExcludePathCollection
' Author : beededea