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_press, #handle_mouse_up, #handle_right_mouse, #handle_update, #info, #intercept_widget_event, #left_edge, #move_recursive_absolute, #move_recursive_delta, #overlaps_with, #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.



2501
2502
2503
2504
# File 'lib/wads/widgets.rb', line 2501

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.



2499
2500
2501
# File 'lib/wads/widgets.rb', line 2499

def selected_rows
  @selected_rows
end

Instance Method Details

#handle_mouse_down(mouse_x, mouse_y) ⇒ Object



2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
# File 'lib/wads/widgets.rb', line 2557

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



2506
2507
2508
2509
2510
2511
2512
# File 'lib/wads/widgets.rb', line 2506

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



2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
# File 'lib/wads/widgets.rb', line 2534

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



2514
2515
2516
2517
2518
2519
2520
2521
2522
# File 'lib/wads/widgets.rb', line 2514

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



2524
2525
2526
2527
2528
2529
2530
2531
2532
# File 'lib/wads/widgets.rb', line 2524

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



2553
2554
2555
# File 'lib/wads/widgets.rb', line 2553

def widget_z 
    Z_ORDER_TEXT
end