Class: Wads::SingleSelectTable

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

Overview

A table where the user can select one row at a time. The selected row has 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 = {}) ⇒ SingleSelectTable

Returns a new instance of SingleSelectTable.



2409
2410
2411
# File 'lib/wads/widgets.rb', line 2409

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

Instance Attribute Details

#selected_rowObject

Returns the value of attribute selected_row.



2407
2408
2409
# File 'lib/wads/widgets.rb', line 2407

def selected_row
  @selected_row
end

Instance Method Details

#handle_mouse_down(mouse_x, mouse_y) ⇒ Object



2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
# File 'lib/wads/widgets.rb', line 2460

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



2413
2414
2415
2416
2417
2418
2419
2420
# File 'lib/wads/widgets.rb', line 2413

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

#renderObject



2446
2447
2448
2449
2450
2451
2452
2453
2454
# File 'lib/wads/widgets.rb', line 2446

def render 
    super 
    if @selected_row 
        if @selected_row >= @current_row and @selected_row < @current_row + @max_visible_rows
            y = @y + 30 + ((@selected_row - @current_row) * 30)
            Gosu::draw_rect(@x + 20, y, @width - 30, 28, @gui_theme.selection_color, relative_z_order(Z_ORDER_SELECTION_BACKGROUND)) 
        end 
    end
end

#set_selected_row(mouse_y, column_number) ⇒ Object



2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
# File 'lib/wads/widgets.rb', line 2422

def set_selected_row(mouse_y, column_number)
    row_number = determine_row_number(mouse_y)
    if not row_number.nil?
        new_selected_row = @current_row + row_number
        if @selected_row 
            if @selected_row == new_selected_row
                return nil  # You can't select the same row already selected
            end 
        end
        @selected_row = new_selected_row
        @data_rows[@selected_row][column_number]
    end
end

#unset_selected_row(mouse_y, column_number) ⇒ Object



2436
2437
2438
2439
2440
2441
2442
2443
2444
# File 'lib/wads/widgets.rb', line 2436

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_row = this_selected_row
        return @data_rows[this_selected_row][column_number]
    end 
    nil
end

#widget_zObject



2456
2457
2458
# File 'lib/wads/widgets.rb', line 2456

def widget_z 
    Z_ORDER_TEXT
end