00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 #ifndef _C_DISPLAYCONTROL_H
00021 #define _C_DISPLAYCONTROL_H
00022 
00023 #include "C_Semaphore.hpp"
00024 #include "C_SemaphoreTimed.hpp"
00025 #include "C_GeneratorStats.hpp"
00026 #include "C_TaskControl.hpp"
00027 #include "C_DisplayObject.hpp"
00028 #include "list_t.hpp"
00029 
00030 
00031 class C_DisplayControl : public C_TaskControl {
00032 
00033  public:
00034 
00035   C_DisplayControl() ;
00036   ~C_DisplayControl() ;
00037   
00038   void  init (long P_period);
00039   void  init_screens () ;
00040   void  set_screen (char P_key) ;
00041   void  set_sub_screen (int P_increment) ;
00042   void  set_max_sub_screen (int P_id, int P_max_sub_screen) ;
00043   void  pause () ;
00044 
00045   void  add_screen (C_DisplayObject *P_display, 
00046                     char P_key,
00047                     char *P_comment);
00048   void  add_help (char P_key,
00049                   char *P_comment);
00050   int  help_all_screens (int P_counter) ;
00051 
00052   void change_display_period (long P_period);
00053 
00054 private :
00055   
00056   C_GeneratorStats *m_stat;
00057   C_SemaphoreTimed *m_sem ;
00058 
00059   typedef struct _t_screen_data {
00060     C_DisplayObject *m_object ;
00061     char             m_key    ;
00062     char            *m_comment;
00063   } T_ScreenData, *T_pScreenData ;
00064   typedef list_t<T_ScreenData> T_ScreenDataList, *T_pScreenDataList ;
00065 
00066 
00067   typedef struct _t_screen_by_key {
00068     int             m_nb_screen       ;
00069     int             m_current_screen  ;
00070     C_DisplayObject **m_screen_object ;
00071     char            *m_comment        ;
00072   } T_ScreenByKey, *T_pScreenByKey ;
00073 
00074   T_pScreenByKey    m_screen_table ;
00075   C_DisplayObject  *m_current_display ;
00076 
00077   typedef struct _help_info {
00078     char m_key      ;
00079     char *m_comment ;
00080   } T_HelpInfo, *T_pHelpInfo ;
00081   T_pHelpInfo m_help_table      ;
00082   int         m_help_table_size ;
00083   
00084   typedef list_t<T_HelpInfo> T_HelpInfoList, 
00085     *T_pHelpInfoList ;          
00086 
00087   T_pHelpInfoList m_help_list ;
00088   
00089 
00090      
00091   T_pScreenDataList  m_screen_list ;
00092 
00093   int                m_current_screen  ;
00094 
00095   int               m_screen_id  ;
00096   int               m_previous_screen_id ;
00097   C_Semaphore      *m_sem_scr_id ; 
00098 
00099   bool              m_pause ;
00100   C_Semaphore      *m_sem_pause ;
00101   
00102   T_GeneratorError TaskProcedure () ;
00103   T_GeneratorError InitProcedure () ;
00104   T_GeneratorError EndProcedure () ;
00105   T_GeneratorError StoppingProcedure () ;
00106   T_GeneratorError ForcedStoppingProcedure () ;
00107   
00108 } ;
00109 
00110 #endif // _C_DISPLAYCONTROL_H
00111 
00112