list_highlighted = 0;
disabled = 0;
+ scroll_repeat = 0;
allow_drag_scroll = 1;
process_drag = 1;
{
this->is_suggestions = value;
}
+void BC_ListBox::set_scroll_repeat()
+{
+ if( scroll_repeat ) return;
+ scroll_repeat = 1;
+ set_repeat(get_resources()->scroll_repeat);
+}
+
+void BC_ListBox::unset_scroll_repeat()
+{
+ if( !scroll_repeat ) return;
+ scroll_repeat = 0;
+ unset_repeat(get_resources()->scroll_repeat);
+}
void BC_ListBox::set_use_button(int value)
{
if( debug ) printf("BC_ListBox::button_press_event %d\n", __LINE__);
}
+ if( current_operation != NO_OPERATION ) {
+ switch( current_operation ) {
+ case DRAG_ITEM:
+ case COLUMN_DRAG:
+ return drag_stop_event();
+ }
+ }
+
// Wheel mouse pressed
if( get_buttonpress() == 4 ) {
if( current_operation == NO_OPERATION ) {
int cursor_x, cursor_y;
int do_event = 0;
new_value = 0;
+ unset_scroll_repeat();
//printf("BC_ListBox::button_release_event 1 %d\n", current_operation);
switch( current_operation ) {
case BUTTON_DOWN_SELECT:
case SELECT:
//printf("BC_ListBox::button_release_event 10\n");
- unset_repeat(get_resources()->scroll_repeat);
current_operation = NO_OPERATION;
if( gui ) {
translate_coordinates(top_level->event_win, gui->win,
case SELECT_RECT:
- unset_repeat(get_resources()->scroll_repeat);
if( data ) {
// Demote selections from rectangle selection
promote_selections(data, 2, 1);
break; }
case SELECT_RECT: {
- if( test_drag_scroll(get_cursor_x(), get_cursor_y()) ) {
- set_repeat(get_resources()->scroll_repeat);
- }
+ if( test_drag_scroll(get_cursor_x(), get_cursor_y()) )
+ set_scroll_repeat();
int old_x1 = MIN(rect_x1, rect_x2);
int old_x2 = MAX(rect_x1, rect_x2);
case SELECT: {
int old_highlighted_item = highlighted_item;
- if( test_drag_scroll(get_cursor_x(),
- get_cursor_y()) ) {
- set_repeat(get_resources()->scroll_repeat);
- }
-
+ if( test_drag_scroll(get_cursor_x(), get_cursor_y()) )
+ set_scroll_repeat();
highlighted_item = selection_number = get_cursor_item(data,
get_cursor_x(), get_cursor_y(), &highlighted_ptr);
int cx, cy;
get_abs_cursor(cx, cy);
if( item_return->icon_vframe ) {
- cx -= item_return->icon_vframe->get_w() / 2,
- cy -= item_return->icon_vframe->get_h() / 2;
drag_popup = new BC_DragWindow(this,
item_return->icon_vframe, cx, cy);
}
else
-// this probably works not!
if( item_return->icon ) {
- cx -= item_return->icon->get_w() / 2,
- cy -= item_return->icon->get_h() / 2;
drag_popup = new BC_DragWindow(this,
item_return->icon, cx, cy);
}
else {
- cx -= drag_icon_vframe->get_w() / 2,
- cy -= drag_icon_vframe->get_h() / 2;
drag_popup = new BC_DragWindow(this,
drag_icon_vframe, cx, cy);
}
current_operation = DRAG_ITEM;
// require shift down for scrolling
if( allow_drag < 0 && shift_down() )
- set_repeat(get_resources()->scroll_repeat);
+ set_scroll_repeat();
return 1;
}
}
int BC_ListBox::drag_stop_event()
{
+ int result = 0;
+ unset_scroll_repeat();
switch( current_operation ) {
case DRAG_ITEM:
- unset_repeat(get_resources()->scroll_repeat);
// Inside window boundary
if( top_level->cursor_x > 0 &&
top_level->cursor_x < gui->get_w() - drag_popup->get_w() / 2 &&
if( display_format == LISTBOX_ICONS ) {
reposition_item(data,
selection_number,
- top_level->cursor_x + drag_popup->get_offset_x() -
+ top_level->cursor_x - drag_popup->get_w() / 2 -
LISTBOX_MARGIN - 2 + xposition,
- top_level->cursor_y + drag_popup->get_offset_y() -
+ top_level->cursor_y - drag_popup->get_h() / 2 -
LISTBOX_MARGIN - 2 + yposition);
}
else
}
else
drag_popup->drag_failure_event();
-
- delete drag_popup;
- flush();
- drag_popup = 0;
- current_operation = NO_OPERATION;
- new_value = 0;
- return 1;
+ result = 1;
+ break;
case COLUMN_DRAG:
if( dragged_title != highlighted_title ) {
else
drag_popup->drag_failure_event();
}
+ result = 1;
+ }
+
+ if( result ) {
current_operation = NO_OPERATION;
delete drag_popup;
flush();
drag_popup = 0;
- return 1;
+ new_value = 0;
}
- return 0;
+
+ return result;
}
BC_DragWindow* BC_ListBox::get_drag_popup()