import PySimpleGUI as sg

"""
    Demo - Add and "Delete" Rows from a window

    This is cut-down version of the Fed-Ex package tracking demo

    The purpose is to show a technique for making windows that grow by clicking an "Add Row" button
    Each row can be individually "deleted".

    The reason for using the quotes are "deleted" is that the elements are simply hidden.  The effect is the same as deleting them.

    Copyright 2022 PySimpleGUI
"""


def item_row(item_num):
    """
    A "Row" in this case is a Button with an "X", an Input element and a Text element showing the current counter
    :param item_num: The number to use in the tuple for each element
    :type:           int
    :return:         List
    """
    row =  [sg.pin(sg.Col([[sg.B(sg.SYMBOL_X, border_width=0, button_color=(sg.theme_text_color(), sg.theme_background_color()), k=('-DEL-', item_num), tooltip='Delete this item'),
                            sg.In(size=(20,1), k=('-DESC-', item_num)),
                            sg.T(f'Key number {item_num}', k=('-STATUS-', item_num))]], k=('-ROW-', item_num)))]
    return row


def make_window():

    layout = [  [sg.Text('Add and "Delete" Rows From a Window', font='_ 15')],
                [sg.Col([item_row(0)], k='-TRACKING SECTION-')],
                [sg.pin(sg.Text(size=(35,1), font='_ 8', k='-REFRESHED-',))],
                [sg.T(sg.SYMBOL_X, enable_events=True, k='Exit', tooltip='Exit Application'), sg.T('↻', enable_events=True, k='Refresh',  tooltip='Save Changes & Refresh'), sg.T('+', enable_events=True, k='Add Item', tooltip='Add Another Item')]]

    right_click_menu = [[''], ['Add Item',  'Edit Me', 'Version']]

    window = sg.Window('Window Title', layout,  right_click_menu=right_click_menu, use_default_focus=False, font='_ 15', metadata=0)

    return window


def main():

    window = make_window()
    while True:
        event, values = window.read()     # wake every hour
        print(event, values)
        if event == sg.WIN_CLOSED or event == 'Exit':
            break
        if event == 'Add Item':
            window.metadata += 1
            window.extend_layout(window['-TRACKING SECTION-'], [item_row(window.metadata)])
        elif event == 'Edit Me':
            sg.execute_editor(__file__)
        elif event == 'Version':
            sg.popup_scrolled(__file__, sg.get_versions(), location=window.current_location(), keep_on_top=True, non_blocking=True)
        elif event[0] == '-DEL-':
                window[('-ROW-', event[1])].update(visible=False)
    window.close()


if __name__ == '__main__':
    main()