2 #include "bcresources.h"
9 #define TUMBLEBOTTOM_DN 2
10 #define TUMBLETOP_DN 3
11 #define TOTAL_STATES 4
13 BC_Tumbler::BC_Tumbler(int x, int y, VFrame **data)
14 : BC_SubWindow(x, y, 0, 0, -1)
16 for(int i = 0; i < TOTAL_STATES; i++)
24 BC_Tumbler::~BC_Tumbler()
26 for(int i = 0; i < TOTAL_STATES; i ++)
32 int BC_Tumbler::initialize()
38 set_images(get_resources()->tumble_data);
39 w = images[TUMBLE_UP]->get_w();
40 h = images[TUMBLE_UP]->get_h();
42 // Create the subwindow
43 BC_SubWindow::initialize();
50 int BC_Tumbler::reposition_window(int x, int y, int w, int h)
53 printf("BC_Tumbler::reposition_window - w & h haven't been implemented yet!! (probably never will be)");
55 BC_WindowBase::reposition_window(x, y);
61 int BC_Tumbler::update_bitmaps(VFrame **data)
64 draw_top_background(parent_window, 0, 0, w, h);
69 int BC_Tumbler::set_images(VFrame **data)
71 for(int i = 0; i < TOTAL_STATES; i++)
73 if(images[i]) delete images[i];
74 images[i] = new BC_Pixmap(parent_window, data[i], PIXMAP_ALPHA);
80 int BC_Tumbler::draw_face()
82 draw_top_background(parent_window, 0, 0, w, h);
83 pixmap->draw_pixmap(images[status],
94 int BC_Tumbler::repeat_event(int64_t duration)
96 //printf("BC_Tumbler::repeat_event 1 %d\n", duration);
97 if(duration == top_level->get_resources()->tooltip_delay)
99 if(tooltip_text[0] != 0 &&
100 status == TUMBLE_UPHI &&
109 if(duration == top_level->get_resources()->tumble_duration)
111 //printf("BC_Tumbler::repeat_event 2\n");
113 if(repeat_count == 2) return 0;
114 if(status == TUMBLETOP_DN)
120 if(status == TUMBLEBOTTOM_DN)
129 int BC_Tumbler::cursor_enter_event()
131 if(top_level->event_win == win)
134 if(! top_level->button_down && status == TUMBLE_UP)
136 status = TUMBLE_UPHI;
143 int BC_Tumbler::cursor_leave_event()
146 if(status == TUMBLE_UPHI)
154 int BC_Tumbler::button_press_event()
157 if(top_level->event_win == win)
159 //printf("BC_Tumbler::button_press_event 1 %d\n", get_buttonpress());
160 if(get_buttonpress() == 4)
162 status = TUMBLETOP_DN;
167 // repeat_event(top_level->get_resources()->tumble_duration);
170 if(get_buttonpress() == 5)
172 status = TUMBLEBOTTOM_DN;
177 // repeat_event(top_level->get_resources()->tumble_duration);
181 if(top_level->cursor_y < get_h() / 2)
183 status = TUMBLETOP_DN;
187 status = TUMBLEBOTTOM_DN;
193 top_level->set_repeat(top_level->get_resources()->tumble_duration);
195 repeat_event(top_level->get_resources()->tumble_duration);
196 //printf("BC_Tumbler::button_press_event 2 %d\n", get_buttonpress());
203 int BC_Tumbler::button_release_event()
206 if(top_level->event_win == win)
208 if(status == TUMBLEBOTTOM_DN || status == TUMBLETOP_DN)
210 top_level->unset_repeat(top_level->get_resources()->tumble_duration);
212 status = TUMBLE_UPHI;
221 int BC_Tumbler::cursor_motion_event()
223 if(top_level->button_down && top_level->event_win == win &&
225 !(status == TUMBLETOP_DN || status == TUMBLEBOTTOM_DN))
236 BC_ITumbler::BC_ITumbler(BC_TextBox *textbox, int64_t min, int64_t max, int x, int y)
239 this->textbox = textbox;
245 BC_ITumbler::~BC_ITumbler()
249 void BC_ITumbler::set_increment(float value)
251 this->increment = (int64_t)value;
252 if(increment < 1) increment = 1;
255 int BC_ITumbler::handle_up_event()
257 int64_t value = atol(textbox->get_text());
259 if(value > max) value = max;
260 textbox->update(value);
261 textbox->handle_event();
265 int BC_ITumbler::handle_down_event()
267 int64_t value = atol(textbox->get_text());
269 if(value < min) value = min;
270 textbox->update(value);
271 textbox->handle_event();
275 void BC_ITumbler::set_boundaries(int64_t min, int64_t max)
290 BC_FTumbler::BC_FTumbler(BC_TextBox *textbox,
297 this->textbox = textbox;
300 this->increment = 1.0;
303 BC_FTumbler::~BC_FTumbler()
307 int BC_FTumbler::handle_up_event()
309 float value = atof(textbox->get_text());
311 if(value > max) value = max;
312 textbox->update(value);
313 textbox->handle_event();
317 int BC_FTumbler::handle_down_event()
319 float value = atof(textbox->get_text());
321 if(value < min) value = min;
322 textbox->update(value);
323 textbox->handle_event();
327 void BC_FTumbler::set_boundaries(float min, float max)
333 void BC_FTumbler::set_increment(float value)
335 this->increment = value;