Module cStatusPanel.pkg
1// cStausPanel.pkg
2
3// This is an abstract class that can be used to create status panels. The interface at this level
4// is very simple. You can start, stop, request a cancel and allow the object to paint.
5//
6// Interface:
7//
8// Get/Set pbCancel - set true if you want to request a cancel.
9// Send Activate - activate the panel
10// Send Deactivate - deactivate the panel
11// Send ProcessEvents - allows panel to paint in a tight loop
12// Send Close_panel - sets pbCancel, indicating that you'd like to cancel the panel.
13//
14// Look at cProcessStatusPanel.pkg to see how this is used.
15
16use Windows.pkg
17
18
19{ HelpTopic=cStatusPanel }
20{ ClassType=Abstract }
21{ DesignerClass=cDTModalPanel }
22
23{ OverrideProperty=Attach_Parent_State DesignTime=False }
24{ OverrideProperty=Auto_Locate_State DesignTime=False }
25{ OverrideProperty=Block_Mouse_State DesignTime=False }
26{ OverrideProperty=Client_Area_State DesignTime=False }
27{ OverrideProperty=Column_Offset DesignTime=True }
28{ OverrideProperty=FontItalics DesignTime=False }
29{ OverrideProperty=FontUnderline DesignTime=False }
30{ OverrideProperty=FontWeight DesignTime=False }
31{ OverrideProperty=Physical_FontSize DesignTime=False }
32{ OverrideProperty=Modal_State DesignTime=False }
33{ OverrideProperty=Popup_State DesignTime=False }
34{ OverrideProperty=Ring_State DesignTime=False }
35{ OverrideProperty=Row_Offset DesignTime=True }
36{ OverrideProperty=Scope_State DesignTime=False }
37{ OverrideProperty=Search_Case DesignTime=False }
38{ OverrideProperty=Transparent_State DesignTime=False }
39{ OverrideProperty=Icon DesignTime=False }
40{ OverrideProperty=Visible_State DesignTime=False }
41{ OverrideProperty=Enabled_State DesignTime=False }
42
43Class cStatusPanel is a FloatingPanel
44
45 Procedure Construct_Object
46 Forward Send Construct_object
47
48 { Visibility=Private }
49 Property boolean pbCancel False
50
51 Set Extended_Window_Style To WS_EX_DLGMODALFRAME True // kills sysmenu as long as there is no icon
52 Set Icon to '' // this must be cleared so there will be no icon
53 Set locate_mode to CENTER_ON_PANEL
54 Set Border_Style to Border_Dialog
55 // should be scoped so it will not try to change the focus if there is no focusable button inside
56 Set Scope_State to True
57
58 On_key KEXIT_APPLICATION Send Close_Panel
59 end_procedure
60
61 // this is private and required. Never send this.
62 { NoDoc=True }
63 Procedure Deactivate_Group
64 If (Active_State(self)) begin
65 Send SuspendGUI of Desktop False
66 end
67 Forward Send Deactivate_Group
68 End_procedure
69
70 // Send this message to stop the panel
71 Procedure Deactivate
72 If (Active_State(self)) begin
73 Send SuspendGUI of Desktop False
74 end
75 Forward Send Deactivate
76 End_procedure
77
78 // Send this message to start the panel
79 Procedure Activate
80 If not (Active_State(self)) begin
81 Set pbCancel to False
82 Send SuspendGUI of Desktop True
83 end
84 Forward send Activate
85 End_procedure
86
87 // This allows the panel to paint when used in a tight loop, which is what status panels are
88 // used for. Any time you update the panel or wish to check for a cancel, you should call this.
89 Procedure ProcessEvents
90 If (Active_State(self)) begin
91 Send PumpMsgQueue of Desktop
92 end
93 End_Procedure
94
95 // note close panel does not actually close the panel. It just sets pbCancel to True, informing the
96 // process using this that it wants to close. It is then up the process close the panel.
97 Procedure Close_Panel
98 set pbCancel to True
99 End_procedure
100
101End_Class
102