home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0682.ZIP / CCE_0682.PD / DSPSHELL / C_SOURCE / POWERGEM.H < prev    next >
C/C++ Source or Header  |  1993-10-08  |  10KB  |  255 lines

  1. /* ---------------------------------------------------------------------- */
  2. /*    Window Manager Header File                                                       */
  3. /*                                                                                                  */
  4. /*      written by Boris Sander                                           */
  5. /*                                                                                                  */
  6. /* Copyright (c) 1992 by ICP - Innovativ Computer-Presse GmbH & Co. KG    */
  7. /* ---------------------------------------------------------------------- */
  8. #define min(a,b) ((a) < (b) ? (a) : (b))
  9. #define max(a,b) ((a) > (b) ? (a) : (b))
  10.  
  11. #define DATA_WINDOW  0    /* Fenster-Typen */
  12. #define DIAL_WINDOW  1
  13. #define PANEL_WINDOW 2
  14. #define MODAL        4
  15. #define UNMODAL         0
  16.             /* Falls kein anderes Fenster getoppt werden darf */
  17. #define CLOSED       8
  18.  
  19. #define ALIGN_X   0          /* Flags für PANEL_WINDOW */
  20. #define ALIGN_Y   1          /* Gibt an, ob Panel in x- oder y-Richtung an-  */
  21.                           /* geglichen wird */
  22.  
  23. /* Flags für Sliderverwaltung */
  24. #define PAGE_UP 0
  25. #define PAGE_DN 1
  26. #define ROW_UP  2
  27. #define ROW_DN  3
  28. #define PAGE_LF 4
  29. #define PAGE_RT 5
  30. #define CLMN_LF 6
  31. #define CLMN_RT 7
  32. #define H_SLIDE 8
  33. #define V_SLIDE 9
  34.  
  35. /* Zugriff auf den Objektbaum eines Dialogfensters */                                                             
  36. #define ObjTree(a) a->dialog->tree
  37.  
  38. enum _bool
  39. {
  40.     FALSE,
  41.     TRUE
  42. };
  43.  
  44. typedef enum _bool boolean;
  45.  
  46. struct BUTTON_LIST
  47. {
  48.     OBJECT *tree;                  /* Objektbaumadresse */
  49.     int obj_index;                   /* Nr. des Buttons */
  50.     int mb;                        /* Status der Maustaste */
  51.     int ks;                           /* Status der Tastatur */
  52.     void (*action)(void);          /* Zeiger auf Funktion */
  53.     boolean redraw;                 /* Redraw-Flag */
  54.     struct BUTTON_LIST *next;     /* Zeiger auf nächste Struktur */
  55. };
  56.  
  57. struct KEY_LIST
  58. {
  59.     int code;                  /* Scan-Code der Taste */
  60.     void (*action)(void);    /* Zeiger auf Funktion */
  61.     struct KEY_LIST *next;    /* Zeiger auf nächste Struktur */
  62. };
  63.  
  64. struct MSG_LIST
  65. {
  66.     int event;              /* Nr. des Ereignisses */
  67.     void (*action)(int *);    /* Zeiger auf Funktion */
  68.     struct MSG_LIST *next;    /* Zeiger auf nächste Struktur */
  69. }; 
  70.  
  71.  
  72. struct MENU_LIST
  73. {
  74.     int title;                 /* Nr. des Menütitels                 */
  75.     int item;                 /* Nr. des Menüeintrags             */
  76.     int menu_flag;             /* nur für interne Verwaltung !        
  77.                                 (siehe menu_all_change)*/
  78.     int scan_code;             /* Scan-Code f. Tastatur-Shortcut  */
  79.     void (*action)(void);     /* Zeiger auf Funktion             */
  80.     struct MENU_LIST *next;     /* Zeiger auf nächste Struktur     */
  81. };
  82.  
  83. struct dial
  84. {
  85.     OBJECT *tree;     /* Objektbaumadresse */
  86.     int start_obj;      /* Nr. des ersten Edit-Feldes */
  87.     int edit_obj;      /* reserv. */
  88.     int next_obj;      /*    "    */
  89.     int idx;          /*    "    */
  90.     int align;          /*    "    */
  91.     boolean cont;     /*    "    */
  92.     boolean topped;   /*    "    */
  93.     struct BUTTON_LIST *button_start; /* Button-Aktions-Liste */
  94.     void (*release)(int obj_index, int obj_state); /* Auswertungsfunktion */
  95. };
  96.  
  97. struct slide_def
  98. {
  99.     int x_elements;  /* Spalten */
  100.     int y_elements;  /* Zeilen  */
  101.     int x_size;         /* Spaltengröße */
  102.     int y_size;      /* Zeilengröße  */
  103.     int x_offset;    /* akt. x-Pos. */
  104.     int y_offset;     /* akt. y-Pos. */
  105.     int x_cursor;     /* Speicher f. Cursorverwaltung */
  106.     int y_cursor;    /*              "               */
  107. };
  108.  
  109.  
  110.  
  111.  
  112. struct WINDOW 
  113. {
  114.     int w_handle;             /* AES-Window-Handle */
  115.     char name[80], info[80];  /* Titel, Infozeile */
  116.     int flags;                  /* AES-Fensterelemente */
  117.     int type;                  /* Windowtyp */
  118.     int min_w, min_h;         /* Minimale Breite/Höhe */
  119.     boolean fulled;           /* Flag für volle Größe */
  120.     GRECT workarea;              /* Arbeitsbereich des Fensters */
  121.     GRECT actual_position;      /* Außenmaße des Fensters */
  122.     struct dial *dialog;      /* Zeiger auf Dialogstruktur */
  123.     struct slide_def *slider; /* Zeiger auf Sliderstruktur */
  124.     void (*draw_code)(struct WINDOW *win); /* Zeichenfunktion */
  125.     void (*slide_code)(struct WINDOW *win, int message); /* Sliderfunktion */
  126.           /* Funktion bei Klick innerhalb der Arbeitsfläche eines Fensters */
  127.     void (*button_code)(struct WINDOW *win, int mx, int my, int mb, int ks);
  128.         /* Funktion zur Verarbeitung von druckbaren Zeichen */
  129.     void (*key_code)(struct WINDOW *win, char ascii);
  130.     void (*wtop_code)(struct WINDOW *win); /* erste Reaktion,nach toppen
  131.             des Fensers z.B.- Paletteänderung */                            
  132.     int  (*close_code)(struct WINDOW *win);/* Zeiger auf Funktion
  133.               vor Schließen des Fensters (für eigene Freigaben usw.)*/      
  134.     struct WINDOW *next;   /* Zeiger auf nächste Fensterstruktur */
  135. };
  136.  
  137. struct A_CNTRL
  138. {
  139.     int    ap_id;          /* Application Identifikationsnummer           */
  140.     int    vdi_handle;     /* virtueller Bildschirmhandle                 */
  141.     int    gl_wchar;       /* Zeichenbreite                                  */
  142.     int    gl_hchar;       /* Zeichenhöhe                                 */
  143.     int    gl_wbox;           /* Zeichenboxbreite                            */
  144.     int    gl_hbox;        /* Zeichenboxhöhe                              */
  145.     int    w_handle;       /* Aktives Fenster                             */
  146.     OBJECT *menu;          /* Menü der Applikation                        */
  147.     struct WINDOW *modal;  /* falls modales Fenster aktiviert              */
  148.     GRECT  workarea;       /* Arbeitsfläche des Desktops                  */
  149.     int    multi_flags;    /* Aktionen, die ausgewertet werden              */
  150.     int    mb_clicks;      /* Anzahl Mausklicks, die erfolgen können      */
  151.     int    mb_mask;           /* Maustasten, die Ereignis auslösen           */
  152.     int    mb_state;        /* Maustasten gedrückt = 1, nicht gedrückt = 0 */
  153.  
  154.     int    m1_flag;           /* Parameter für MU_M1                           */
  155.     GRECT  m1;
  156.     void   (*m1_code)(void); 
  157.     int    m2_flag;        /* Parameter für MU_M2                                  */
  158.     GRECT  m2;
  159.     void   (*m2_code)(void);
  160.  
  161.     int    mt_locount;     /* Parameter für MU_TIMER                      */
  162.     int    mt_hicount;
  163.     void   (*time_code)(void);
  164.     void   (*button_code)(int m_x, int m_y, int mb_state, int k_state);
  165.     int    quit;           /* Flag für Programmende                       */
  166. };
  167.  
  168. /* Prototypen der User-Funktionen --------------------------------------- */
  169. boolean init_powergem(char *rsc_name, int menu_index);
  170. boolean init_desktop(int desk);
  171. void exit_powergem(void);                            
  172. struct A_CNTRL *get_app_cntrl(void);
  173. MFDB *get_screen(void);        /* zusätzlich eingefügte Routine */
  174. int get_handle(void);
  175.  
  176. struct WINDOW *create_window(GRECT *max, GRECT *real, int min_w, int min_h,
  177.                              int flags, int type,
  178.                              void (*draw_code)(struct WINDOW *win),
  179.                              void (*slide_code)(struct WINDOW *win,
  180.                                    int message),
  181.                              void (*button_code)(struct WINDOW *win, int mx,
  182.                                                  int my, int mb, int ks),
  183.                              void (*key_code)(struct WINDOW *win,
  184.                                                 char ascii),
  185.                                void (*wtop_code)(struct WINDOW *win),
  186.                              int(*close_code)(struct WINDOW *win));
  187.  
  188. struct WINDOW *create_pwindow(int obj_name, GRECT *max, GRECT *real, 
  189.                               int min_w, int min_h, int flags,int modal,int align,
  190.                               void (*draw_code)(struct WINDOW *win),
  191.                               void (*slide_code)(struct WINDOW *win,
  192.                                                   int message),
  193.                               void (*button_code)(struct WINDOW *win, int mx,
  194.                                                   int my, int mb, int ks),
  195.                               void (*key_code)(struct WINDOW *win,
  196.                                                char ascii),
  197.                                 void (*wtop_code)(struct WINDOW *win),
  198.                               void (*release)(int obj_index, int obj_state));
  199.  
  200. struct WINDOW *create_dial(int obj_name, int start_obj, int wi_flags,int modal,
  201.                            void (*slide_code)(struct WINDOW *win, 
  202.                                                 int message),
  203.                            void (*button_code)(struct WINDOW *win, int mx,
  204.                                                int my, int mb, int ks),
  205.                            void (*key_code)(struct WINDOW *win,
  206.                                             char ascii),
  207.                            
  208.                                 void (*wtop_code)(struct WINDOW *win),
  209.                            void (*release)(int obj_index, int obj_state));
  210.  
  211. void open_window(struct WINDOW *win, char *name, char *info);
  212. struct WINDOW *get_winfh(int wh);
  213. struct WINDOW *get_winfn(char *name);
  214. struct WINDOW *get_lastwin(int typ); 
  215. void untop_win(void);
  216.  
  217. void break_dial(void);
  218. void break_win(struct WINDOW *win);
  219.  
  220. void set_text(struct WINDOW *win, int obj_index, char *buf, 
  221.                                             int length, boolean redraw);
  222. void select_btn(struct WINDOW *win, int obj_index, boolean redraw);
  223. void unselect_btn(struct WINDOW *win, int obj_index, boolean redraw);
  224. boolean get_objstate(struct WINDOW *win, int obj_index);
  225. boolean init_slider(struct WINDOW *win, int x_elements, int y_elements,
  226.                     int x_size, int y_size); 
  227. void set_mousepos(int x,int y);
  228. void set_y_slider(struct WINDOW *win,int new_y_offset);
  229.                       /* Neue x-Sliderposition setzen und updaten */
  230. void set_x_slider(struct WINDOW *win,int new_x_offset);
  231.                      /* Neue y-Sliderposition setzen und updaten */
  232.  
  233. int get_y_slider(struct WINDOW *win);/* y-Sliderpostion erfragen */
  234. int get_x_slider(struct WINDOW *win);/* x-Sliderpostion erfragen */
  235. void get_workarea(struct WINDOW *win, GRECT *rc);
  236. void get_winpos(struct WINDOW *win, GRECT *rc);
  237. void add_row(struct WINDOW *win, int count);
  238. void add_column(struct WINDOW *win, int count);
  239.  
  240. void watch_r1(int flag, GRECT *rc, void (*code)(void ));
  241. void watch_r2(int flag, GRECT *rc, void (*code)(void ));
  242. void watch_timer(int low, int high, void (*code)(void));
  243. void watch_events(int flags, int clicks, int mask, int state);
  244. void multi(void);
  245.  
  246. void set_button_fnc(void (*button_code)(int m_x, int m_y, int mb_state, 
  247.                                         int k_state));
  248. void button_action(struct WINDOW *win, int obj_index, void (*action)(void),
  249.                    boolean redraw);
  250. void key_action(int code, void (*action)(void));
  251. void menu_action(int title, int item, int scan_code, 
  252.                  void (*action)(void));
  253. void msg_action(int event, void (*action)(int *));
  254. void blank(struct WINDOW *, int x, int y, int w, int h);
  255.