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