def __show_all_airplane_types():
        ComponentUI.print_header(AirplanesUI.__FRAME_IN_USE_STR)
        print(TextEditor.format_text("All airplane types", TextEditor.UNDERLINE_TEXT))
        user_input = ""

        

        while user_input not in AirplanesUI.__NAVIGATION_BAR_OPTIONS:
            table_header_tuple = ("Type", "Manufacturer", "Seats")
                  
           
            airplane_type_list = LogicAPI.get_all_airplane_types()
            airplanes_type_getfunctions_tuple = ([aircraft_type.get_plane_type() for aircraft_type in airplane_type_list],[aircraft_type.get_manufacturer() for aircraft_type in airplane_type_list],\
                [aircraft_type.get_seat_count() for aircraft_type in airplane_type_list])
            table_height = len(airplane_type_list)

            ### - ONLY DISPLAY TABLE - ##

            ComponentUI.fill_in_table(table_header_tuple, airplanes_type_getfunctions_tuple, False)
            ComponentUI.fill_window_and_print_action_line(table_height+2) 


            #ComponentUI.print_frame_table_menu(table_header_tuple, airplanes_type_getfunctions_tuple, table_height, ComponentUI.print_header(AirplanesUI.__FRAME_IN_USE_STR),"All airplane types")
            user_input = ComponentUI.get_user_input()
            user_input = ComponentUI.remove_brackets(user_input)
            if not user_input.isdigit() or int(user_input) > table_height:
                    continue
            table_index = int(user_input)-1
            airplane = airplane_type_list[table_index]        

            user_input = AirplanesUI.__show_airplane(airplane)

        return user_input
Example #2
0
    def __airplane_type_picker(header="License"):

        #### PICK AIRPLANE TYPE BY TABLE LIST ###
        table_header_tuple = ("Type", "Manufacturer", "Seats")

        airplane_type_list = LogicAPI.get_all_airplane_types()
        airplanes_type_getfunctions_tuple = ([aircraft_type.get_plane_type() for aircraft_type in airplane_type_list],[aircraft_type.get_manufacturer() for aircraft_type in airplane_type_list],\
            [aircraft_type.get_seat_count() for aircraft_type in airplane_type_list])
        table_height = len(airplane_type_list)


        ComponentUI.print_frame_table_menu(table_header_tuple, airplanes_type_getfunctions_tuple, table_height,\
            ComponentUI.get_main_options()[2], header)

        user_input = ComponentUI.get_user_input(
            "Insert number of desired type: ")

        user_input = ComponentUI.remove_brackets(user_input)
        if not user_input.isdigit() or int(
                user_input) > table_height or not user_input:
            return None

        table_index = int(user_input) - 1
        chosen_table_line = airplane_type_list[table_index]
        ###                LINE PICKED           ##
        return chosen_table_line.get_plane_type()
    def __show_new_airplane_constructor():
               
        option_tuple = ("Name", "Type", "Manufacturer", "Seating capacity")

        valid_user_inputs = ComponentUI.make_valid_menu_options_tuple(len(option_tuple))

        input_message_tuple = ("Insert Name: ", "Insert Type: ", "Insert Manufacturer: ", "Insert Seating capacity: ")

        user_input_list = [""] * len(option_tuple)
        user_input_list.append(State.get_airplane_states()[0]) #State default value
        valid_for_submit_list = [False, False] # only 2 chosse here * len(option_tuple) #list that contains bools if all true then ok to submit


        user_input = ""



        while user_input not in AirplanesUI.__NAVIGATION_BAR_OPTIONS:

            ComponentUI.print_frame_constructor_menu(option_tuple, ComponentUI.get_main_options()[2],\
                 "New airplane", user_input_list, True, 1000, [2,3], True)

            user_input = ComponentUI.get_user_input()

            if not user_input:
                continue

            user_input = ComponentUI.remove_brackets(user_input)

            if user_input in valid_user_inputs:
                index = int(user_input) - 1


                if index == 0:
                    ComponentUI.print_frame_constructor_menu(option_tuple, ComponentUI.get_main_options()[2],\
                     "New airplane", user_input_list, False, index)
                    user_input = input(input_message_tuple[index]).strip()
                elif index == 1:

                    #### PICK AIRPLANE TYPE BY TABLE LIST ###
                    table_header_tuple = ("Type", "Manufacturer", "Seats")
                 
                    airplane_type_list = LogicAPI.get_all_airplane_types()
                    airplanes_type_getfunctions_tuple = ([aircraft_type.get_plane_type() for aircraft_type in airplane_type_list],[aircraft_type.get_manufacturer() for aircraft_type in airplane_type_list],\
                        [aircraft_type.get_seat_count() for aircraft_type in airplane_type_list])
                    table_height = len(airplane_type_list)


                    ComponentUI.print_frame_table_menu(table_header_tuple, airplanes_type_getfunctions_tuple, table_height,\
                        ComponentUI.get_main_options()[2], "New airplane")

                    user_input = ComponentUI.get_user_input("Insert number of desired type: ")

                    user_input = ComponentUI.remove_brackets(user_input)
                    if not user_input.isdigit() or int(user_input) > table_height or not user_input:
                        continue

                    table_index = int(user_input) - 1
                    chosen_table_line = airplane_type_list[table_index]
                    ###                LINE PICKED           ##


                    user_input_list[1] = chosen_table_line.get_plane_type()
                    user_input_list[2] = chosen_table_line.get_manufacturer()
                    user_input_list[3] = chosen_table_line.get_seat_count()
                    valid_for_submit_list[1] = True

                #Check if airplane name already exists
                if index == 0: 
                    user_input = user_input.capitalize()
                    if not LogicAPI.is_airplane_name_available(user_input):
                        user_input = user_input + " " + TextEditor.color_text_background("Airplane name already exists, another input is required", TextEditor.RED_BACKGROUND)
                        valid_for_submit_list[0] = False
                    else:
                        valid_for_submit_list[0] = True

                if index == 0:
                    user_input_list[index] = user_input
                
                user_input = ""

            elif user_input.startswith('s'):
                if all(valid_for_submit_list):

                    new_airplane = Airplane(
                        user_input_list[0],
                        user_input_list[1],
                        user_input_list[2],
                        user_input_list[3],
                        user_input_list[4]
                    )
                    LogicAPI.save_new_airplane(new_airplane)
                    user_input = "A new airplane has been registered"

                    break

        return user_input