*next_text_y = current_text_y;
// Add sublist depth if it is expanded
- if( item->get_sublist() && item->get_columns() &&
- item->get_expand() ) {
+ if( item->sublist_active() && item->get_columns() ) {
calculate_last_coords_recursive(item->get_sublist(),
icon_x, next_icon_x, next_icon_y, next_text_y, 0);
}
if( dt > row_descent ) row_descent = dt;
// printf("BC_ListBox::calculate_item_coords_recursive %p %d %d %d %d %s \n",
-// item->get_sublist(), item->get_columns(), item->get_expand(),
+// item->sublist, item->get_columns(), item->get_expand(),
// next_text_x, *next_text_y, item->get_text());
// Increment position of next column
if( j < columns - 1 ) {
// Set up a sublist
BC_ListBoxItem *item = data[master_column].values[i];
- if( item->get_sublist() && item->get_columns() &&
- item->get_expand() ) {
+ if( item->sublist_active() && item->get_columns() ) {
calculate_item_coords_recursive( item->get_sublist(),
icon_x, next_icon_x, next_icon_y, next_text_y, 0);
}
get_text_mask(item, x, y, w, h);
*result += h;
// Descend into sublist
- if( item->get_sublist() && item->get_expand() ) {
- get_items_height(item->get_sublist(),
- item->get_columns(),
- result);
- }
+ if( item->sublist_active() )
+ get_items_height(item->get_sublist(), item->get_columns(), result);
break;
case LISTBOX_ICONS:
case LISTBOX_ICONS_PACKED:
{
for( int i=0; i<data[master_column].total; ++i ) {
BC_ListBoxItem *item = data[master_column].values[i];
- if( item->get_sublist() && item->expand ) {
+ if( item->sublist_active() ) {
item->expand = 0;
collapse_recursive(item->get_sublist(), master_column);
}
}
BC_ListBoxItem *item = data[master_column].values[i];
- if( item->get_sublist() ) {
+ if( item->sublist_active() ) {
set_autoplacement(item->get_sublist(), do_icons, do_text);
}
}
}
}
- if( item->get_sublist() ) {
+ if( item->sublist_active() ) {
BC_ListBoxItem *result = get_selection_recursive(item->get_sublist(),
column,
selection_number);
return (*counter);
}
}
- if( item->get_sublist() ) {
+ if( item->sublist_active() ) {
int result = get_selection_number_recursive(item->get_sublist(),
column, selection_number, counter);
if( result >= 0 ) return result;
do {
for( int i=data[master_column].total-1; i>=0; --i ) {
BC_ListBoxItem *current_item = data[master_column].values[i];
- if( current_item->get_sublist() &&
- current_item->get_expand() ) {
+ if( current_item->sublist_active() ) {
int result = select_previous(skip, selected_item, counter,
current_item->get_sublist(), got_first, got_second);
if( *got_second )
}
// Descend into expanded level
- if( current_item->get_sublist() &&
- current_item->get_expand() ) {
+ if( current_item->sublist_active() ) {
int result = select_next(skip, selected_item, counter,
current_item->get_sublist(), got_first, got_second);
if( *got_second ) {
}
// Descend
- if( item->get_sublist() ) {
- int result = center_selection(selection,
- item->get_sublist(),
- counter);
+ if( item->sublist_active() ) {
+ int result = center_selection(selection, item->get_sublist(), counter);
if( result ) return result;
}
}
}
BC_ListBoxItem *item = data[master_column].values[i];
- if( item->get_sublist() &&
- item->get_expand() )
+ if( item->sublist_active() ) {
result |= select_rectangle(item->get_sublist(),
x1, y1, x2, y2);
+ }
}
return result;
}
continue;
}
// Descend into sublist
- if( item->get_sublist() ) {
- move_selection(dst,
- item->get_sublist());
+ if( item->sublist_active() ) {
+ move_selection(dst, item->get_sublist());
}
++i;
}
}
BC_ListBoxItem *item = data[master_column].values[i];
- if( item->get_sublist() ) {
- if( put_selection(item->get_sublist(),
- src,
- destination,
- counter) )
+ if( item->sublist_active() ) {
+ if( put_selection(item->get_sublist(), src, destination, counter) )
return 1;
}
}
}
BC_ListBoxItem *new_item = data[master_column].values[i];
- if( new_item->get_sublist() ) {
- if( item_to_index(new_item->get_sublist(),
- item,
- counter) >= 0 )
+ if( new_item->sublist_active() ) {
+ if( item_to_index(new_item->get_sublist(), item, counter) >= 0 )
return (*counter);
}
}
return data[column].values[i];
}
BC_ListBoxItem *item = data[master_column].values[i];
- if( item->get_sublist() ) {
+ if( item->sublist_active() ) {
BC_ListBoxItem *result = index_to_item(item->get_sublist(),
number, column, counter);
if( result ) return result;
cursor_y < get_item_y(item) + get_item_h(item) ) {
//printf("BC_ListBox::get_cursor_item %d %d %p\n", master_column, i, item);
if( item_return ) (*item_return) = item;
+ if( expanded < 0 ) (*counter) = i;
return (*counter);
}
// Descend into sublist
- if( item->get_sublist() ) {
+ if( item->sublist_active() ) {
if( get_cursor_item(item->get_sublist(),
cursor_x, cursor_y, item_return, counter,
- item->get_expand()) >= 0 )
+ item->get_expand()) >= 0 ) {
+ if( expanded < 0 ) (*counter) = i;
return (*counter);
+ }
}
}
}
}
// short version
-int BC_ListBox::get_cursor_item()
+int BC_ListBox::get_cursor_item_no()
{
int rx, ry;
gui->get_relative_cursor(rx, ry);
return get_cursor_item(data, rx, ry, 0, 0);
}
+int BC_ListBox::get_cursor_data_item_no(BC_ListBoxItem **item_return)
+{
+ int rx, ry;
+ gui->get_relative_cursor(rx, ry);
+ return get_cursor_item(data, rx, ry, item_return, 0, -1);
+}
+
int BC_ListBox::repeat_event(int64_t duration)
{
switch( current_operation ) {
BC_ListBoxItem *item = data[master_column].values[i];
(*result)++;
if( item->selected ) return (*result);
- if( item->get_sublist() ) {
+ if( item->sublist_active() ) {
if( get_first_selection(item->get_sublist(), result) >= 0 )
return (*result);
}
for( int i=0; i<data[master_column].total; ++i ) {
(*result)++;
- if( data[master_column].values[i]->get_sublist() )
+ if( data[master_column].values[i]->sublist_active() )
get_total_items(data[master_column].values[i]->get_sublist(),
result,
master_column);
return (*result);
}
- if( item->get_sublist() ) {
+ if( item->sublist_active() ) {
if( get_last_selection(item->get_sublist(), result) >= 0 ) {
if( top_level )
return get_total_items(data, 0, master_column) - (*result) /* - 1 */;
data[j].values[i]->selected = 1;
}
BC_ListBoxItem *item = data[master_column].values[i];
- if( item->get_sublist() )
+ if( item->sublist_active() )
select_range(item->get_sublist(), start, end, current);
}
}
}
// Descend into sublist
- if( item->get_sublist() ) {
+ if( item->sublist_active() ) {
if( toggle_item_selection(item->get_sublist(),
selection_number, counter) )
return 1;
}
BC_ListBoxItem *item = data[master_column].values[i];
- if( item->get_sublist() ) {
+ if( item->sublist_active() ) {
set_selected(item->get_sublist(), item_number, value, counter);
}
}
for( int j=0; j<columns; ++j )
data[j].values[i]->selected = 0;
}
- if( item->get_sublist() )
+ if( item->sublist_active() )
result |= update_selection(item->get_sublist(),
selection_number,
counter);
if( item->selected == old_value ) item->selected = new_value;
}
BC_ListBoxItem *item = data[master_column].values[i];
- if( item->get_sublist() )
+ if( item->sublist_active() )
promote_selections(item->get_sublist(), old_value, new_value);
}
}
//printf("BC_ListBox::button_release_event 10\n");
current_operation = NO_OPERATION;
if( gui ) {
- selection_number1 = selection_number = get_cursor_item();
+ selection_number1 = selection_number = get_cursor_item_no();
//printf("BC_ListBox::button_release_event %d %d\n", selection_number2, selection_number1);
}
// Moved out of item area
if( old_highlighted_item != highlighted_item ) {
- redraw_items = 1;
+ if( !mouse_over_event(highlighted_item) )
+ redraw_items = 1;
}
//printf("BC_ListBox::cursor_motion_event 1 %d\n", highlighted_item);
{
switch( current_operation ) {
case SELECT:
+ if( expander_active() ) break;
if( gui && gui->is_event_win() && allow_drag ) {
BC_ListBoxItem *item_return = 0;
selection_number = get_cursor_item(data,
return active;
}
+int BC_ListBox::expander_active()
+{
+ for( int i=0; i<expanders.total; ++i ) {
+ if( expanders.values[i]->value ) return 1;
+ }
+ return 0 ;
+}
+
int BC_ListBox::keypress_event()
{
if( !active ) return 0;
item->set_in_view(0);
// Descend into sublist
- if( first_item->get_expand() ) {
+ if( first_item->sublist_active() ) {
draw_text_recursive(first_item->get_sublist(),
column,
indent + LISTBOX_INDENT,