scroller.hpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #ifndef _SCROLLER_HPP_
  2. #define _SCROLLER_HPP_
  3. #include "input.hpp"
  4. class scroller : public ifield
  5. {
  6. protected :
  7. int l,h,drag,vert,last_click;
  8. int bh();
  9. int bw();
  10. void drag_area(int &x1, int &y1, int &x2, int &y2);
  11. void dragger_area(int &x1, int &y1, int &x2, int &y2);
  12. int b1x() { if (vert) return x+l; else return x; }
  13. int b1y() { if (vert) return y; else return y+h; }
  14. int b2x() { if (vert) return x+l; else return x+l-bw(); }
  15. int b2y() { if (vert) return y+h-bh(); else return y+h; }
  16. unsigned char *b1();
  17. unsigned char *b2();
  18. void wig_area(int &x1, int &y1, int &x2, int &y2);
  19. int wig_x();
  20. int darea() { return (l-bw()-2)-bw()-bw(); }
  21. void draw_wiget(image *screen, window_manager *wm, int erase);
  22. int mouse_to_drag(int mx,int my);
  23. public :
  24. int t,sx;
  25. scroller(int X, int Y, int ID, int L, int H, int Vert, int Total_items, ifield *Next);
  26. virtual void area(int &x1, int &y1, int &x2, int &y2, window_manager *wm);
  27. virtual void draw_first(image *screen, window_manager *wm);
  28. virtual void draw(int active, image *screen, window_manager *wm);
  29. virtual void handle_event(event &ev, image *screen, window_manager *wm, input_manager *im);
  30. virtual char *read() { return (char *)&sx; }
  31. virtual int activate_on_mouse_move() { return 1; }
  32. virtual void handle_inside_event(event &ev, image *screen, window_manager *wm, input_manager *inm) {;}
  33. virtual void scroll_event(int newx, image *screen, window_manager *wm);
  34. virtual void handle_up(image *screen, window_manager *wm, input_manager *inm);
  35. virtual void handle_down(image *screen, window_manager *wm, input_manager *inm);
  36. virtual void handle_left(image *screen, window_manager *wm, input_manager *inm);
  37. virtual void handle_right(image *screen, window_manager *wm, input_manager *inm);
  38. virtual void area_config(window_manager *wm) { ; }
  39. void set_size(int width, int height) { l=width; h=height; }
  40. virtual void set_x(int x, image *screen, window_manager *wm);
  41. } ;
  42. class spicker : public scroller
  43. {
  44. protected :
  45. int r,c,m,last_sel,cur_sel;
  46. uchar *select;
  47. public :
  48. spicker(int X, int Y, int ID, int Rows, int Cols, int Vert, int MultiSelect, ifield *Next);
  49. int vis() { if (vert) return r; else return c; }
  50. virtual void area_config(window_manager *wm);
  51. void set_select(int x, int on);
  52. int get_select(int x);
  53. int first_selected();
  54. virtual void scroll_event(int newx, image *screen, window_manager *wm);
  55. virtual void handle_inside_event(event &ev, image *screen, window_manager *wm, input_manager *inm);
  56. // you should define \/
  57. virtual void draw_background(window_manager *wm, image *screen);
  58. virtual void draw_item(window_manager *wm, image *screen, int x, int y, int num, int active) = 0;
  59. virtual int total() = 0;
  60. virtual int item_width(window_manager *wm) = 0;
  61. virtual int item_height(window_manager *wm) = 0;
  62. virtual void note_selection(window_manager *wm, image *screen, input_manager *inm, int x) { ; }
  63. virtual void note_new_current(window_manager *wm, image *screen, input_manager *inm, int x) { ; }
  64. virtual int ok_to_select(int num) { return 1; }
  65. virtual void handle_up(image *screen, window_manager *wm, input_manager *inm);
  66. virtual void handle_down(image *screen, window_manager *wm, input_manager *inm);
  67. virtual void handle_left(image *screen, window_manager *wm, input_manager *inm);
  68. virtual void handle_right(image *screen, window_manager *wm, input_manager *inm);
  69. virtual void set_x(int x, image *screen, window_manager *wm);
  70. void reconfigure(); // should be called by constructor after class is ready to take virtual calls
  71. ~spicker() { if (select) jfree(select); }
  72. } ;
  73. struct pick_list_item
  74. {
  75. char *name;
  76. int number;
  77. } ;
  78. class pick_list : public scroller
  79. {
  80. int last_sel,cur_sel,th,wid;
  81. pick_list_item *lis;
  82. char key_hist[20],key_hist_total;
  83. image *tex;
  84. public :
  85. pick_list(int X, int Y, int ID, int height,
  86. char **List, int num_entries, int start_yoffset, ifield *Next, image *texture=NULL);
  87. virtual void handle_inside_event(event &ev, image *screen, window_manager *wm, input_manager *inm);
  88. virtual void scroll_event(int newx, image *screen, window_manager *wm);
  89. virtual char *read() { return (char *)this; }
  90. virtual void area_config(window_manager *wm);
  91. virtual void handle_up(image *screen, window_manager *wm, input_manager *inm);
  92. virtual void handle_down(image *screen, window_manager *wm, input_manager *inm);
  93. int get_selection() { return lis[cur_sel].number; }
  94. ~pick_list() { jfree(lis); }
  95. } ;
  96. #endif