Re: #PB_ProgressBar_Unknown SetGadgetState() in StatusBarProgress
Posted: Sun Dec 29, 2024 1:02 am
I've seen your name online, outside of these forums. One example -> https://www.imdb.com/name/nm0917916/
http://www.purebasic.com
https://www.purebasic.fr/english/
I've seen your name online, outside of these forums. One example -> https://www.imdb.com/name/nm0917916/
I have extended my previous MacOS example with a toggle button. You are now able to switch between Indeterminate and Determinate state. You are also able to control the length of the not moving determinated bar by setting the new variable ProgressBarValue (0.0: tiny small bar at the beginning, 50.0: bar with half length, 100.0: bar with full length).DannyWeijermans wrote: Sun Dec 29, 2024 12:57 am Hi Shardik!
1 more question about it:
how to set it in Determinate mode again?
Code: Select all
EnableExplicit
Define i.I
Define ProgressBarField.I
Define ProgressBarValue.D = 0.0 ; 100.0 for full bar
Define StatusBarField.I
Define SubViewArray.I
Define SubViewCount.I
OpenWindow(0, 270, 100, 300, 70, "StatusBarField with ProgressBar")
ButtonGadget(0, 50, 15, 200, 25, "Disable indeterminate state")
; ----- Create StatusBar and StatusBarFields
CreateStatusBar(0, WindowID(0))
AddStatusBarField(188)
StatusBarText(0, 0, " StatusBar with ProgressBar:")
AddStatusBarField(WindowWidth(0) - 200)
StatusBarProgress(0, 1, 50)
; ----- Get StatusBarField containing ProgressBar
SubViewArray = CocoaMessage(0, StatusBarID(0), "subviews")
If SubViewArray
SubViewCount = CocoaMessage(0, SubViewArray, "count")
If SubViewCount
For i = 0 To SubViewCount - 1
StatusBarField = CocoaMessage(0, SubViewArray, "objectAtIndex:", i)
If PeekS(CocoaMessage(0, CocoaMessage(0, StatusBarField, "className"),
"UTF8String"), -1, #PB_UTF8) = "NSProgressIndicator"
ProgressBarField = StatusBarField
; ----- Set ProgressBarField to indeterminate
CocoaMessage(0, ProgressBarField, "setIndeterminate:", #YES)
CocoaMessage(0, ProgressBarField, "startAnimation:", 0)
Break
EndIf
Next i
EndIf
EndIf
If ProgressBarField = #False
MessageRequester("Error",
"No StatusBarField with ProgressBar found!")
End
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If CocoaMessage(0, ProgressBarField, "isIndeterminate") = #YES
; ----- Set ProgressBarField status to determinate
CocoaMessage(0, ProgressBarField, "setIndeterminate:", #NO)
CocoaMessage(0, ProgressBarField, "setDoubleValue:@", @ProgressBarValue)
SetGadgetText(0, "Enable indeterminate state")
Else
; ----- Set ProgressBarField status to indeterminate
CocoaMessage(0, ProgressBarField, "setIndeterminate:", #YES)
CocoaMessage(0, ProgressBarField, "startAnimation:", #NO)
SetGadgetText(0, "Disable indeterminate state")
EndIf
EndSelect
ForEver
Code: Select all
CocoaMessage(0, ProgressBarField, "setIndeterminate:", #NO) ; ----- UnSet ProgressBarField to indeterminate
CocoaMessage(0, ProgressBarField, "stopAnimation:", 0)
Code: Select all
Case #PB_Event_Gadget
If CocoaMessage(0, ProgressBarField, "isIndeterminate") = #YES
; ----- Set ProgressBarField status to determinate
CocoaMessage(0, ProgressBarField, "setIndeterminate:", #NO)
ProgressBarValue + 10
CocoaMessage(0, ProgressBarField, "setDoubleValue:@", @ProgressBarValue)
SetGadgetText(0, "Enable indeterminate state")
Code: Select all
ProgressBarField = StatusBarField
Code: Select all
CocoaMessage(0, ProgressBarField, "setUsesThreadedAnimation:", #NO)
Code: Select all
StatusBarProgress(0, 1, MyProgress)