#include "bcsignals.h" #include "cursors.h" #include "mwindow.h" #include "mwindowgui.h" #include "panedividers.h" #include "theme.h" PaneDivider::PaneDivider(MWindow *mwindow, int x, int y, int length, int is_x) : BC_SubWindow(x, y, is_x ? mwindow->theme->pane_w : length, is_x ? length : mwindow->theme->pane_h, mwindow->theme->pane_color) { this->mwindow = mwindow; this->is_x = is_x; button_down = 0; is_dragging = 0; images[0] = images[1]= images[2] = 0; status = BUTTON_UP; } PaneDivider::~PaneDivider() { delete images[0]; delete images[1]; delete images[2]; } void PaneDivider::create_objects() { VFrame **image_src; if(is_x) { set_cursor(HSEPARATE_CURSOR, 0, 0); image_src = mwindow->theme->get_image_set("xpane"); } else { set_cursor(VSEPARATE_CURSOR, 0, 0); image_src = mwindow->theme->get_image_set("ypane"); } for(int i = 0; i < 3; i++) { images[i] = new BC_Pixmap(this, image_src[i], PIXMAP_ALPHA); } draw(0); } void PaneDivider::draw(int flush) { if(is_x) { draw_3segmentv(0, 0, get_h(), images[status]); } else { draw_3segmenth(0, 0, get_w(), images[status]); } this->flash(flush); } void PaneDivider::reposition_window(int x, int y, int length) { BC_SubWindow::reposition_window(x, y, is_x ? mwindow->theme->pane_w : length, is_x ? length : mwindow->theme->pane_h); } int PaneDivider::button_press_event() { if(is_event_win()) { origin_x = get_cursor_x(); origin_y = get_cursor_y(); button_down = 1; status = BUTTON_DOWNHI; draw(1); return 0; } return 0; } int PaneDivider::button_release_event() { if(button_down) { button_down = 0; if(is_dragging) { is_dragging = 0; // might be deleted in here mwindow->gui->stop_pane_drag(); status = BUTTON_UPHI; draw(1); } return 1; } return 0; } int PaneDivider::cursor_motion_event() { if(button_down) { if(!is_dragging) { if(is_x && abs(get_cursor_x() - origin_x) > 5) { is_dragging = 1; mwindow->gui->start_x_pane_drag(); } else if(!is_x && abs(get_cursor_y() - origin_y) > 5) { is_dragging = 1; mwindow->gui->start_y_pane_drag(); } } else { mwindow->gui->handle_pane_drag(); } return 1; } return 0; } int PaneDivider::cursor_enter_event() { if(is_event_win()) { if(get_button_down()) { status = BUTTON_DOWNHI; } else if(status == BUTTON_UP) { status = BUTTON_UPHI; } draw(1); } return 0; } int PaneDivider::cursor_leave_event() { if(status == BUTTON_UPHI) { status = BUTTON_UP; draw(1); } return 0; }