File: INCLUDE\MANJUST\MJ_GUI.H
1 //#############################################################################
2 // //
3 // MJ_GUI.H //
4 // //
5 // Subsystem : neue Manuelle Justage / Oberfläche //
6 // Benutung durch andere Subsysteme erforderlich: JA //
7 //---------------------------------------------------------------------------//
8 // Autoren: Thomas Kullmann, Günther Reinecker //
9 // Stand : 21.04.2002 //
10 // //
11 //#############################################################################
12
13 #ifndef __MJ_GUI_H
14 #define __MJ_GUI_H
15
16 #include "manjust\mj_funk.h" // die Funktionalität
17
18 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
19
20 //#############################################################################
21 // globale Typdeklarationen
22 //#############################################################################
23
24 enum ETB { tb1= 1, tb2= 2, tb3= 3 }; // 0 für "unbekannter Teilbereich"
25 enum ERessourceId{ riMotorList, //Kombinationsfeld: Antriebsauswahl
26 riStart, riSetRelativeZero, riResetRelativeZero, riOffset, //Schaltfläche: Start/ Stop; Relative Null setzen, aufheben; "Offset..."
27 riDirectMode, riDriveMode, riStepMode, //Optionsfelder: Betriebsart
28 riAngleDest, riSpeed, riStepWidth, //Eingabefelder: Bewegungsparameter
29 riAngle, riOffsetState, //Eingabefelder: Istposition, Offset
30 riRelativePos, //Bildlaufleiste: relative Positionierung
31 riRelativePosMin, riRelativePosMax, //Textfelder: Min-, Maxposition
32 riAngleDestUnit, riSpeedUnit, riStepWidthUnit, riAngleUnit, riRelativePosUnit, //Textfelder: Einheit des Antriebs
33 riRefPoint //Textfeld: fehlender Referenzpunkt
34 };
35
36 //#############################################################################
37 // TManJustageDlg
38 //#############################################################################
39
40 class TManJustageDlg : public TModalDlg, public ITimer
41 { // Hauptdialogfenster Manuelle Justage
42
43 //*****************************************************************************
44 // KONSTRUKTOR-DESTRUKTOR
45 public:
46
47 // Konstruktor/Destruktor
48 TManJustageDlg ( void );
49 virtual ~TManJustageDlg ( void );
50
51 //*****************************************************************************
52 // EREIGNISSE DER BASISKLASSE
53 protected:
54
55 // stellt die Oberfläche wieder her, wie sie verlassen wurde (nach Aufruf des Dialogfensters aufgerufen)
56 virtual BOOL Dlg_OnInit ( HWND, HWND, LPARAM );
57
58 // zum Verarbeiten von benutzerdefinierten Botschaften
59 virtual LRESULT OnEvent ( HWND, UINT, WPARAM, LPARAM );
60
61 // hier kommen die Windows-Botschaften an; die für die Teilereiche werden an CheckLeft, CheckMiddle, CheckRight weitergeleitet
62 virtual void Dlg_OnCommand ( HWND, int, HWND, UINT );
63
64 // hier kommen die Bildlaufleistenbotschaften an (nur Fahr-/ Schrittbetrieb)
65 virtual void Dlg_OnHScrollBar ( HWND, HWND, UINT, int );
66
67 // darf der Dialog beendet werden
68 virtual void LeaveDialog ( void );
69
70 // POLLING-Timer Ereignis das die Antriebsbewegung und Makroverarbeitung überwacht und den Fortschritt darstellt
71 // ruft dazu die weiter unten genannten Ereignisse
72 virtual void OnTimer ( TBasicTimer *const );
73
74 private:
75
76 // die Bewegung des angegebenen Antriebs hat begonnen
77 void OnMotionStarts ( const UINT );
78
79 // die Bewegung ist im vollen Gange
80 void OnMotionProgress ( const UINT );
81
82 // die Bewegung hatgestoppt
83 void OnMotionStops ( const UINT );
84
85
86 // die Makroverarbeitung wurde gestartet
87 void OnMeasureStarts ( void );
88
89 // ... ist in vollem Gange
90 void OnMeasureProgress ( void );
91
92 // ... ist beendet
93 void OnMeasureStops ( void );
94
95 //*****************************************************************************
96 // Verhalten aller Steuerelemente außerhalb der Teilbereiche
97 private:
98
99 // Psd-Offset definieren
100 void OnPsdOffset ( void );
101
102 // Teilbereich wechseln (Tastenkombination Ctrl+Tab)
103 void OnChooseTB ( void );
104
105 // Meldung ausgeben, wenn die gewünschte Aktion nicht ausgeführt werden kann
106 void OnNoAction ( void );
107
108 //*****************************************************************************
109 // Verhalten aller Steuerelemente innerhalb der Teilbereiche
110 private:
111
112 // ==> TRUE <--> Botschaft durch eines der hier behandelten Steuerelemente verarbeitet
113 BOOL TB_CheckLeft ( const ETB, const int ); // Auswahlliste Antrieb, Betriebsarten
114 BOOL TB_CheckMiddle ( const ETB, const int ); // Start/ Stop und Betriebsarten, wenn [ENTER] gedrückt wurde
115 BOOL TB_CheckRight ( const ETB, const int ); // Relative Null setzen, aufheben; Offset setzen
116 BOOL TB_CheckExit ( const ETB, const int ); // Verhalten für's Verlassen von Sollposition, Bewegungsgeschwindigkeit und Schrittweite
117
118 //*****************************************************************************
119 // Verhalten für ausgewählter Steuerelemente innerhalb der Teilbereiche
120 private:
121
122 // Start bzw. Stop
123 void TB_StartStopClicked ( const ETB );
124
125 // der Parameter ist der Index des Antriebs, dessen Parameter gesetzt werden sollen
126 void TB_AngleDestEntered ( const ETB ); // Zielposition wird in die Funktionalität übernommen
127 void TB_SpeedEntered ( const ETB ); // Bewegungsgeschwindigkeit
128 void TB_StepWidthEntered ( const ETB ); // Schrittweite
129
130 // <Antrieb auswählen> wurde benutzt
131 void TB_MotorChanged ( const ETB );
132
133 //*****************************************************************************
134 // quasiparallele Aktualisierung (Inhalt und Zustand) aller Steuerelemente
135 private:
136
137 // sendet eine "USR_"-Botschaft an den Dialog, dementsprechend wird dort eine der folgenden Methoden aufgerufen,
138 // so dass die quasiparallel verarbeitet werden können
139 void Notice( const int, const ETB, const BOOL= FALSE );
140
141 // Inhalt aller Steuerelemente innerhalb des angegebenen Teilbereichs aktualisieren
142 // Wenn der zweite Parameter mit TRUE ist, wird auch der Zustand der Steuerelemente aktualisiert.
143 void OnTB_Controls ( const ETB, const BOOL ); // alle Steuerelemente
144 void OnTB_KindOfMove ( const ETB, const BOOL ); // Betriebsart
145 void OnTB_StartStop ( const ETB, const BOOL ); // Start bzw. Stop
146 void OnTB_MotionParam ( const ETB, const BOOL ); // Bewegungsparameter
147 void OnTB_Positions ( const ETB, const BOOL ); // Min-, Ist-, Soll-, Maximalposition und Bildlaufleiste
148 void OnTB_Offset ( const ETB, const BOOL ); // Offset, Relative Null setzen und aufheben
149 void OnTB_Units ( const ETB ); // Einheiten
150
151 // Zustand aller Steuerelemente innerhalb des Teilbereichs aktualisieren
152 void OnTB_ControlsEnable ( const ETB ); // alle Steuerelemente
153 void OnTB_MotorListEnable ( const ETB ) const; // Antriebsauswahlliste
154 void OnTB_KindOfMoveEnable ( const ETB ) const; // Betriebsart
155 void OnTB_StartStopEnable ( const ETB ) const; // Start bzw. Stop
156 void OnTB_MotionParamEnable ( const ETB ) const; // Bewegungsparameter
157 void OnTB_PositionsEnable ( const ETB ) const; // Sollposition und Bildlaufleiste (Min-, Ist-, Maximalposition sind und bleiben gesperrt und ausgegraut)
158 void OnTB_OffsetEnable ( const ETB ) const; // Offset, Relative Null setzen und aufheben
159
160 // aktualisiert (Inhalt und Zustand) alle Steuerelemente außerhalb der Teilbereiche
161 // "Psd-Offset" und "Halbwertsbreite messen"
162 void OtherControls ( void ) const;
163
164 //*****************************************************************************
165 // Verwaltung der Teilbereiche
166 private:
167 // ==> der Antrieb, der im angegebenen Teilbereich angezeigt wird; ggf. GetMotorCount() (d.h. "kein Antrieb")
168 UINT TB2Selection ( const ETB ) const;
169
170 // ==> Teilbereich, in dem der angebene Antrieb ausgewählt wird; ggf. (ETB)0
171 ETB Selection2TB ( const UINT ) const;
172
173 // ==> SetSelection-Aufruf zulässig
174 BOOL CanSetSelection ( const ETB, const UINT ) const;
175
176 // wählt den angegebenen Antrieb im angegebenen Teilbereich aus und alle Steuerelemente im Teilbereich werden aktualisiert (Inhalt und Zustand)
177 BOOL SetSelection ( const ETB, const UINT );
178
179 // ==> Fensterhandle einer Ressource im Teilbereich; ggf. 0
180 HWND GetCtrl ( const ETB, const ERessourceId ) const;
181
182 // ==> Ressourcen-ID einer Ressource im Teilbereich; ggf. 0
183 static int GetResId ( const ETB, const ERessourceId );
184
185 //*****************************************************************************
186 // zur Verwaltung der Teilbereiche
187 private:
188 // der im ersten Parameter angegebenen Teilbereich wird um eins erhöht und zurückgegeben
189 // ist der erste Parameter "(TAxisType)0", wird der erste Teilbereich zurückgegeben
190 // ==> FALSE <--> der übergebene Parameter kann nicht weiter inkrementiert werden (ist bereits der letzte Teilbereich)
191 static BOOL TB_Next ( ETB& );
192
193 // ==> Anzahl der Teilbereiche
194 static UINT TB_Count ( void );
195
196 // ==> Nummer des angegebenen Teilbereichs, beginnend bei 0
197 static UINT TB_GetId ( const ETB );
198
199 // gibt "Teilbereich<Nummer des Teilbereichs, beginnend bei 1>" in <aReturn> zurück;
200 // Dort sollten mind. 13 Zeichen Platz reserviert sein!
201 static void TB_GetName ( const ETB aTB, LPSTR aReturn );
202
203 //*****************************************************************************
204 // Winkelwerte in Position auf der Bildlaufleiste umrechnen
205 private:
206 // Winkelwerte des Antriebs ins Intervall [0..32.000] der Bildlaufleiste einpassen und
207 // die umgerechneten Werte in den letzten drei Parametern zurückgeben
208 static void ScrollbarCalculate ( const TAngle, const TAngle, const TAngle,
209 int&, int&, int& );
210
211 //*****************************************************************************
212 // ATTRIBUTE
213 private:
214
215 TManJustage *m_lnkManJustage; // die Funktionalität
216 TInterfaceTimer *m_lnkTimer; // POLLING-Timer
217 UINT *m_Selection; // enthält für jeden Teilbereich, welcher Index zuletzt ausgewählt war
218
219 // Einstellungen zur Verbesserung des Reaktionsverhalens auf langsamen Rechnersystemen
220 BOOL m_Parallel; // quasiparallele Nachrichtenverarbeitung?
221 BOOL m_StateRefresh; // Steuerelementsperrung zulassen?
222 BOOL m_DisplayNoActionMsg; // Meldung ausgeben, wenn die gewünschte Aktion nicht ausgeführt werden kann
223 };
224
225 //##############################################################################
226 // TMotorOffsetDlg
227 //##############################################################################
228
229 class TMotorOffsetDlg : public TModalDlg
230 { // Dialogfenster 'Offset für <Antrieb>', Teil der Manuellen Justage
231
232 //*****************************************************************************
233 // Konstruktor-Destruktor
234 public:
235
236 TMotorOffsetDlg ( const UINT, TManJustage* );
237
238 //------------------------------------------------------------------------------
239 // Ereignisse der Basisklasse
240 protected:
241
242 BOOL Dlg_OnInit ( HWND, HWND, LPARAM ); // Initialisierungen
243 void Dlg_OnCommand ( HWND, int, HWND, UINT ); // Eingabeverarbeitung
244
245 //*****************************************************************************
246 // Attribute
247 private:
248
249 TManJustage *m_lnkManJustage; // die Funktionalität
250 UINT m_Idx; // Index des Antriebs, dessen Offset gesetzt werden soll
251 UINT m_Digits; // Nachkommastellen
252
253 //*****************************************************************************
254 // Methoden
255 private:
256
257 void ChooseAngleMode ( BOOL ); // Parameter gibt an ob nun Winkel- (Parameter==TRUE) oder Offset-Eingabe (FALSE) erlaubt sind
258 BOOL CalcValue ( BOOL ); // lokale Berechnung von Offset oder Winkel, Übernahmen wenn Parameter==TRUE
259 BOOL IsAngleMode ( void ); // welche Eingabemöglichkeit besteht; TRUE <--> Winkeleingabe
260 };
261
262 //#############################################################################
263 //TPsdOffsetDlg
264 //#############################################################################
265
266 class TPsdOffsetDlg : public TModalDlg
267 { // Dialogfenster 'Offset für PSD', Teil der Manuellen Justage
268
269 //*****************************************************************************
270 // KONSTRUKTOR-DESTRUKTOR
271 public:
272
273 TPsdOffsetDlg ( const UINT, TManJustage* );
274
275 //*****************************************************************************
276 // EREIGNISSE DER BASISKLASSE
277 protected:
278
279 // Ereignisse der Basisklasse
280 BOOL Dlg_OnInit ( HWND, HWND, LPARAM );
281 void Dlg_OnCommand ( HWND, int, HWND, UINT );
282
283 //*****************************************************************************
284 // ATTRIBUTE
285 private:
286
287 TManJustage *m_lnkManJustage; // die Funktionalität
288 UINT m_Idx; // Index des Antriebs, dessen Offset gesetzt werden soll
289 UINT m_Digits; // Nachkommastellen
290 UINT m_PSDDigits; // Kanalbreite Nachkommastellen
291
292 //*****************************************************************************
293 // Methoden
294 private:
295
296 BOOL CalcValue( BOOL );
297 };
298
299 #endif //__MJ_GUI.H
300
301 //#############################################################################
302 // LastLine
303 //#############################################################################
304