Class: Wads::MultiSelectTable

Inherits:
Table show all
Defined in:
lib/wads/widgets.rb

Overview

A table where the user can select multiple rows at a time. Selected rows have a background color specified by the selection color of the current theme.

Instance Attribute Summary collapse

Attributes inherited from Table

#can_delete_rows, #current_row, #data_rows, #headers, #max_visible_rows, #row_colors

Attributes inherited from Widget

#base_z, #children, #gui_theme, #height, #is_selected, #layout, #overlay_widget, #override_color, #text_input_fields, #visible, #width, #x, #y

Instance Method Summary collapse

Methods inherited from Table

#add_row, #add_table_delete_button, #clear_rows, #determine_row_number, #handle_update, #number_of_rows, #remove_table_delete_button, #scroll_down, #scroll_up, #uses_layout

Methods inherited from Widget

#add, #add_axis_lines, #add_button, #add_child, #add_delete_button, #add_document, #add_graph_display, #add_image, #add_multi_select_table, #add_overlay, #add_panel, #add_plot, #add_single_select_table, #add_table, #add_text, #border_color, #bottom_edge, #button_down, #button_up, #center_children, #center_x, #center_y, #clear_children, #contains_click, #debug, #disable_background, #disable_border, #draw, #draw_background, #draw_border, #enable_background, #enable_border, #error, #get_layout, #get_theme, #graphics_color, #handle_key_held_down, #handle_key_press, #handle_key_up, #handle_mouse_up, #handle_right_mouse, #handle_update, #info, #intercept_widget_event, #left_edge, #move_recursive_absolute, #move_recursive_delta, #overlaps_with, #pad, #relative_x, #relative_y, #relative_z_order, #remove_child, #remove_children, #remove_children_by_type, #right_edge, #selection_color, #set_absolute_position, #set_dimensions, #set_layout, #set_selected, #set_theme, #text_color, #top_edge, #unset_selected, #update, #uses_layout, #warn, #x_pixel_to_screen, #y_pixel_to_screen, #z_order

Constructor Details

#initialize(x, y, width, height, headers, max_visible_rows = 10, args = {}) ⇒ MultiSelectTable

Returns a new instance of MultiSelectTable.



2532
2533
2534
2535
# File 'lib/wads/widgets.rb', line 2532

def initialize(x, y, width, height, headers, max_visible_rows = 10, args = {}) 
    super(x, y, width, height, headers, max_visible_rows, args) 
    @selected_rows = []
end

Instance Attribute Details

#selected_rowsObject

Returns the value of attribute selected_rows.



2530
2531
2532
# File 'lib/wads/widgets.rb', line 2530

def selected_rows
  @selected_rows
end

Instance Method Details

#handle_mouse_down(mouse_x, mouse_y) ⇒ Object



2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
# File 'lib/wads/widgets.rb', line 2588

def handle_mouse_down mouse_x, mouse_y
    if contains_click(mouse_x, mouse_y)
        row_number = determine_row_number(mouse_y)
        if row_number.nil? 
            return WidgetResult.new(false)
        end
        # First check if its the delete button that got this
        delete_this_row = false
        @delete_buttons.each do |db|
            if db.contains_click(mouse_x, mouse_y)
                delete_this_row = true 
            end 
        end 
        if delete_this_row
            if not row_number.nil?
               data_set_row_to_delete = @current_row + row_number
               data_set_name_to_delete = @data_rows[data_set_row_to_delete][1]
               @data_rows.delete_at(data_set_row_to_delete)
               return WidgetResult.new(false, EVENT_TABLE_ROW_DELETE, [data_set_name_to_delete])                       
            end
        else
            if is_row_selected(mouse_y)
                unset_selected_row(mouse_y, 0)
                return WidgetResult.new(false, EVENT_TABLE_UNSELECT, @data_rows[row_number])
            else
                set_selected_row(mouse_y, 0)
                return WidgetResult.new(false, EVENT_TABLE_SELECT, @data_rows[row_number])
            end
        end
    end
end

#is_row_selected(mouse_y) ⇒ Object



2537
2538
2539
2540
2541
2542
2543
# File 'lib/wads/widgets.rb', line 2537

def is_row_selected(mouse_y)
    row_number = determine_row_number(mouse_y)
    if row_number.nil?
        return false
    end
    @selected_rows.include?(@current_row + row_number)
end

#renderObject



2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
# File 'lib/wads/widgets.rb', line 2565

def render 
    super 
    y = @y + 30
    row_count = @current_row
    while row_count < @data_rows.size
        if @selected_rows.include? row_count 
            width_of_selection_background = @width - 30
            if @can_delete_rows 
                width_of_selection_background = width_of_selection_background - 20
            end
            Gosu::draw_rect(@x + 20, y, width_of_selection_background, 28,
                            @gui_theme.selection_color,
                            relative_z_order(Z_ORDER_SELECTION_BACKGROUND)) 
        end 
        y = y + 30
        row_count = row_count + 1
    end
end

#set_selected_row(mouse_y, column_number) ⇒ Object



2545
2546
2547
2548
2549
2550
2551
2552
2553
# File 'lib/wads/widgets.rb', line 2545

def set_selected_row(mouse_y, column_number)
    row_number = determine_row_number(mouse_y)
    if not row_number.nil?
        this_selected_row = @current_row + row_number
        @selected_rows << this_selected_row
        return @data_rows[this_selected_row][column_number]
    end
    nil
end

#unset_selected_row(mouse_y, column_number) ⇒ Object



2555
2556
2557
2558
2559
2560
2561
2562
2563
# File 'lib/wads/widgets.rb', line 2555

def unset_selected_row(mouse_y, column_number) 
    row_number = determine_row_number(mouse_y) 
    if not row_number.nil?
        this_selected_row = @current_row + row_number
        @selected_rows.delete(this_selected_row)
        return @data_rows[this_selected_row][column_number]
    end 
    nil
end

#widget_zObject



2584
2585
2586
# File 'lib/wads/widgets.rb', line 2584

def widget_z 
    Z_ORDER_TEXT
end