예제 #1
0
    def show_options(
        self, a, b, c
    ):  # additional parameters a b c needed because it is called by Trace function
        gui_ut.clear_results(self)
        if self.related_type.get() != "No related OGC type":
            field_names = gui_ut.get_fields_names(self.related_type.get())
        elif self.related_type.get() == "No related OGC type":
            field_names = gui_ut.get_fields_names(self.selected_type.get())

        self.show_fields = gui_ut.Listbox(self.main_view.main_area,
                                          selectmode=gui_ut.MULTIPLE)

        self.show_fields.insert(gui_ut.END, "@iot.id")

        for item in field_names:
            self.show_fields.insert(gui_ut.END, item)

        self.show_fields.grid(column=1, row=8)
        self.view_elements.append({
            "item": self.show_fields,
            "row": 5,
            "column": 0,
            "name": "show_fields"
        })

        search_btn = gui_ut.Button(self.main_view.main_area,
                                   text="Search!",
                                   command=lambda: search(self),
                                   bg=gui_ut.action_color)
        self.view_elements.append({"item": search_btn, "row": 6, "column": 1})

        gui_ut.populate(self.view_elements, self.main_view.main_area)
예제 #2
0
def search(self):
    gui_ut.clear_results(self)
    b = True
    selected_items = gui_ut.get_items(self, b)
    if selected_items != "error":
        self.result = gui_ut.scrollable_results(selected_items,
                                                self.main_view.main_area)

        self.view_elements.append({
            "item": self.result,
            "row": 5,
            "column": 1,
            "name": "result"
        })

        self.result_info = gui_ut.Label(
            self.main_view.main_area,
            borderwidth=2,
            relief="solid",
            text=f"found {len(selected_items)} results")
        self.view_elements.append({
            "item": self.result_info,
            "row": 4,
            "column": 1
        })
        gui_ut.populate(self.view_elements, self.main_view.main_area)
예제 #3
0
def change_address_main(self):
    self.new_address_entry = gui_ut.Entry(self.top_bar, width=40)
    self.new_address_entry.insert(0, string=self.model.GOST_address)
    self.view_elements.append({
        "item": self.new_address_entry,
        "row": 0,
        "column": 1,
        "name": "new_address_entry"
    })

    self.confirm_address_button = gui_ut.Button(
        self.top_bar,
        text="Confirm changes",
        command=lambda: try_address(self))
    self.view_elements.append({
        "item": self.confirm_address_button,
        "row": 0,
        "column": 2,
        "name": "new_address_button"
    })

    self.keep_old_address_button = gui_ut.Button(
        self.top_bar,
        text="Keep old address",
        command=lambda: keep_address(self))
    self.view_elements.append({
        "item": self.keep_old_address_button,
        "row": 0,
        "column": 3,
        "name": "keep_old_address_button"
    })
    self.new_address_entry.grid(row=0, column=1)
    self.confirm_address_button.grid(row=0, column=2)
    self.keep_old_address_button.grid(row=0, column=4)
    gui_ut.populate(self.view_elements, self.main_area)
예제 #4
0
    def __init__(self, main_view):
        self.view_elements = []
        self.create_values = {}
        self.create_entries = []
        self.selected_type = None
        self.save_btn = None
        self.save_and_post_btn = None
        self.number_to_create = None
        self.result = None
        self.main_view = main_view
        self.created_items = []
        self.selected_items = []
        self.post_btn = None
        self.storage_file = None
        self.post_from_file_btn = None
        self.error_message = ""

        main_view.current_command_view = self

        types_menu_description = gui_ut.Label(
            self.main_view.main_area,
            text="Select OGC entity type of the items\n"
            "you are going to create or post\n"
            "(mandatory field)")
        self.view_elements.append({
            "item": types_menu_description,
            "row": 1,
            "column": 0
        })

        self.selected_type = gui_ut.StringVar(self.main_view.main_area)
        types = gui_ut.get_ogc_types()
        self.selected_type.set("Select an OGC type")

        self.selected_type.trace("w", self.show_options)

        types_menu = gui_ut.OptionMenu(self.main_view.main_area,
                                       self.selected_type, *types)
        self.view_elements.append({"item": types_menu, "row": 1, "column": 1})

        number_to_create_description = gui_ut.Label(
            self.main_view.main_area, text="Select how many items create")

        self.view_elements.append({
            "item": number_to_create_description,
            "row": 2,
            "column": 0
        })
        self.number_to_create = gui_ut.Entry(self.main_view.main_area,
                                             width=10)
        self.view_elements.append({
            "item": self.number_to_create,
            "row": 2,
            "column": 1
        })

        gui_ut.populate(self.view_elements, self.main_view.main_area)
예제 #5
0
def restore_main(self):
    self.back_button.grid_remove()
    if bool(self.current_command_view):
        self.current_command_view.hide()
    gui_ut.reset_attribute(self, [
        "selected_items", "selected_type", "selected_boolean_expression",
        "selected_identifiers", "show_fields", "patch_values", "create_values",
        "create_entries", "created_items", "storage_file"
    ])
    gui_ut.populate(self.main_view_elements)
예제 #6
0
def show_preview(self):
    preview = gui_ut.scrollable_results(self.created_items["created_items"],
                                        self.main_view.main_area,
                                        editable=False)
    self.view_elements.append({
        "item": preview,
        "row": 3,
        "column": 0,
        "name": "preview"
    })
    gui_ut.populate(self.view_elements, self.main_view.main_area)
예제 #7
0
def confirm_patching(self):
    address = self.main_view.model.GOST_address + "/"
    patches = {}

    for i in self.patch_values:
        if bool(i["field_entry"].get()):
            patches[i["field_name"]] = i["field_entry"].get()

    patched_items = False  # flag for the final success message

    # FixMe: There is an error if you try to patch a JSON element like "observedArea" because it is stringed
    for i in self.selected_items:
        if "@iot.id" in i:
            if ("name" in patches) and bool(
                    ogc_util.check.item_is_already_present(
                        patches["name"],
                        self.selected_type.get())):  # checking
                # for name duplicates
                self.error_message += f"\nTrying to patch the item with id {i['@iot.id']} name " \
                                      f"with {patches['name']}, but that name is already present.\n" \
                                      f"patching of the selected item aborted\n"
            else:
                patch_result = ogc_util.patch_item(patches,
                                                   str(i.get("@iot.id")),
                                                   self.selected_type.get(),
                                                   address=address)
                if "error" in patch_result:
                    self.error_message += f"\n{patch_result['error']} \n"
                else:
                    patched_items = True

    self.patch_btn.config(
        text=
        "Click here to Patch\nwith the following values:\n(an ogc entity type must be selected)",
        command=lambda: patch(self))
    indexes_to_delete = []
    for index, val in enumerate(self.view_elements):
        if "name" in val:
            if val["name"] in [
                    "abort_patching_button", "result", "show_fields"
            ]:
                indexes_to_delete.append(index)
    for i in sorted(indexes_to_delete, reverse=True):
        self.view_elements[i]["item"].grid_forget()
        del self.view_elements[i]

    gui_ut.populate(self.view_elements, self.main_view.main_area)
    if bool(self.error_message):
        gui_ut.messagebox.showinfo("ERROR", self.error_message)
    if patched_items:
        gui_ut.messagebox.showinfo("Patch", "PATCH CONFIRMED")

    patch_finished(self)
예제 #8
0
def clear_before_creation(self):
    self.create_values = {}
    self.error_message = ""
    self.create_entries = []
    self.created_items = []
    indexes_to_delete = []
    for index, val in enumerate(self.view_elements):
        if "name" in val:
            if val["name"] in [
                    "create_field_name", "create_field_value", "save_button",
                    "post_button", "save_and_post_button",
                    "post_from_file_button", "mandatory_field"
            ]:
                indexes_to_delete.append(index)
    for i in sorted(indexes_to_delete, reverse=True):
        self.view_elements[i]["item"].grid_forget()
        del self.view_elements[i]
    gui_ut.populate(self.view_elements, self.main_view.main_area)
    self.selected_type.set("Select an OGC type")
예제 #9
0
def abort_patching(self):
    self.patch_btn.config(
        text=
        "Click here to Patch the selected items\nwith the following values:\n"
        "(an ogc entity type must be selected)",
        command=lambda: patch(self))
    indexes_to_delete = []
    for index, val in enumerate(self.view_elements):
        if "name" in val:
            if val["name"] in [
                    "abort_patching_button", "result", "show_fields"
            ]:
                indexes_to_delete.append(index)
    for i in sorted(indexes_to_delete, reverse=True):
        self.view_elements[i]["item"].grid_forget()
        del self.view_elements[i]

    gui_ut.clear_results(self)
    gui_ut.populate(self.view_elements, self.main_view.main_area)
    gui_ut.messagebox.showinfo("Patch", "PATCH ABORTED")

    patch_finished(self)
예제 #10
0
    def show_options(
        self, a, b, c
    ):  # additional parameters a b c needed because it is called by Trace function
        gui_ut.clear_results(self)

        self.patch_btn = gui_ut.Button(
            self.main_view.main_area,
            text="Patch the selected items\nwith the following values:\n"
            "(empty fields will not be modified)",
            command=lambda: patch(self),
            bg=gui_ut.action_color)
        self.view_elements.append({
            "item": self.patch_btn,
            "row": 5,
            "column": 1,
            "name": "patching_button"
        })

        clear_old_patch_values(self)

        set_patches_fields(self)

        gui_ut.populate(self.view_elements, self.main_view.main_area)
예제 #11
0
def try_address(self):
    new_address = self.new_address_entry.get(
    )  # checking if the new address works
    working_conn = conn_conf.test_connection(new_address)
    if working_conn:
        self.model.GOST_address = new_address

        conn_conf.set_GOST_address(new_address)  # saving the new address works

        self.address_preview.configure(
            text=f"Current GOST address: {self.model.GOST_address} "
            f"\nclick here to change address")
        indexes_to_delete = []
        for index, val in enumerate(self.view_elements):
            if "name" in val:
                if val["name"] in [
                        "new_address_entry", "new_address_button",
                        "keep_old_address_button", "confirm_address_button",
                        "confirm_port_button", "new_port_entry",
                        "new_port_button", "old_port_button"
                ]:
                    indexes_to_delete.append(index)
        for i in sorted(indexes_to_delete, reverse=True):
            self.view_elements[i]["item"].grid_forget()
            del self.view_elements[i]
        self.port_button = gui_ut.Button(
            self.top_bar,
            text="Change port number",
            command=lambda: change_port_number(self),
            bg=gui_ut.change_address_color)
        self.port_button.grid(row=0, column=4)
        gui_ut.populate(self.view_elements, self.main_area)

    else:
        gui_ut.messagebox.showinfo("Error", "invalid GOST address")
        self.address_preview.configure(
            text="Invalid address, insert a new address")
예제 #12
0
    def __init__(self, main_view):
        self.view_elements = []
        self.selected_type = None
        self.selected_boolean_expression = None
        self.selected_identifiers = None
        self.result = None
        self.main_view = main_view
        self.show_fields = None
        self.selected_items = None
        self.patch_btn = None
        self.abort_patch_btn = None
        self.result = None
        self.patch_values = []
        self.error_message = ""

        main_view.current_command_view = self

        types_menu_description = gui_ut.Label(
            main_view.main_area,
            text="Select OGC entity type (mandatory field)")
        self.view_elements.append({
            "item": types_menu_description,
            "row": 0,
            "column": 0
        })

        self.selected_type = gui_ut.StringVar(main_view.main_area)
        types = gui_ut.get_ogc_types()
        self.selected_type.set("Select an OGC type")

        self.selected_type.trace("w", self.show_options)

        types_menu = gui_ut.OptionMenu(main_view.main_area, self.selected_type,
                                       *types)
        self.view_elements.append({"item": types_menu, "row": 0, "column": 1})

        select_introduction = gui_ut.Label(main_view.main_area,
                                           text="Select the items to Patch")
        self.view_elements.append({
            "item": select_introduction,
            "row": 1,
            "column": 1,
            "name": "select_introduction"
        })

        selected_identifiers_description = gui_ut.Label(
            main_view.main_area, text=gui_ut.select_id_text)

        self.view_elements.append({
            "item": selected_identifiers_description,
            "row": 2,
            "column": 0,
            "name": "selected_identifiers_description"
        })
        self.selected_identifiers = gui_ut.Entry(main_view.main_area, width=10)
        self.view_elements.append({
            "item": self.selected_identifiers,
            "row": 2,
            "column": 1,
            "name": "selected_identifiers"
        })

        selected_boolean_expression_description = gui_ut.Label(
            main_view.main_area, text=gui_ut.select_conditions_text)
        self.view_elements.append({
            "item":
            selected_boolean_expression_description,
            "row":
            3,
            "column":
            0,
            "name":
            "selected_boolean_expression_description"
        })
        self.selected_boolean_expression = gui_ut.Entry(main_view.main_area,
                                                        width=50)
        self.view_elements.append({
            "item": self.selected_boolean_expression,
            "row": 3,
            "column": 1,
            "name": "selected_boolean_expression"
        })

        gui_ut.populate(self.view_elements, self.main_view.main_area)
예제 #13
0
    def show_options(
        self, a, b, c
    ):  # additional parameters a b c needed because it is called by Trace function
        if not (self.selected_type.get() == "Select an OGC type"
                ):  # needed to avoid the restoring of action
            # buttons before action execution
            indexes_to_delete = []  # clearing the previously set patch options
            for index, val in enumerate(self.view_elements):
                if "name" in val:
                    if val["name"] in [
                            "create_field_name", "create_field_value",
                            "mandatory_field"
                    ]:
                        indexes_to_delete.append(index)
            for i in sorted(indexes_to_delete, reverse=True):
                self.view_elements[i]["item"].grid_forget()
                del self.view_elements[i]

            field_names = gui_ut.get_fields_names(self.selected_type.get(),
                                                  needed_for_editing=True)

            row = 11

            for item in field_names:
                temp_label = gui_ut.Label(self.main_view.main_area, text=item)
                self.view_elements.append({
                    "item": temp_label,
                    "row": row,
                    "column": 0,
                    "name": "create_field_name"
                })
                temp_entry = gui_ut.Entry(self.main_view.main_area, width=50)
                self.view_elements.append({
                    "item": temp_entry,
                    "row": row,
                    "column": 1,
                    "name": "create_field_value"
                })
                row += 1
                self.create_entries.append({
                    "field_name": item,
                    "field_entry": temp_entry
                })

            self.save_btn = gui_ut.Button(self.main_view.main_area,
                                          text="Save to a file",
                                          command=lambda: save(self))
            self.view_elements.append({
                "item": self.save_btn,
                "row": 10,
                "column": 0,
                "name": "save_button"
            })

            self.post_btn = gui_ut.Button(self.main_view.main_area,
                                          text="Post to GOST",
                                          command=lambda: direct_post(self))
            self.view_elements.append({
                "item": self.post_btn,
                "row": 10,
                "column": 1,
                "name": "post_button"
            })

            self.save_and_post_btn = gui_ut.Button(
                self.main_view.main_area,
                text="Save to a file\nand Post to GOST",
                command=lambda: save_and_post(self))
            self.view_elements.append({
                "item": self.save_and_post_btn,
                "row": 10,
                "column": 2,
                "name": "save_and_post_button"
            })
            self.post_from_file_btn = gui_ut.Button(
                self.main_view.main_area,
                text="POST records \ndefined in a file",
                command=lambda: post_from_file(self))
            self.view_elements.append({
                "item": self.post_from_file_btn,
                "row": 11,
                "column": 2,
                "name": "post_from_file_button"
            })
            if self.selected_type.get() == "Datastreams":
                red_label = gui_ut.Label(
                    self.main_view.main_area,
                    text="* Fields Things_id, ObservedProperty_id, "
                    "Sensor_id are mandatory",
                    fg="#FF0000",
                    font=(None, 15),
                    width=60)
                self.view_elements.append({
                    "item": red_label,
                    "row": row,
                    "column": 0,
                    "name": "mandatory_field"
                })
            elif self.selected_type.get() == "Observations":
                red_label = gui_ut.Label(
                    self.main_view.main_area,
                    text="* Fields Datastream_id and FeatureOfInterest(id) "
                    "are mandatory",
                    fg="#FF0000",
                    font=(None, 15),
                    width=60)
                self.view_elements.append({
                    "item": red_label,
                    "row": row,
                    "column": 0,
                    "name": "mandatory_field"
                })
            gui_ut.populate(self.view_elements, self.main_view.main_area)
예제 #14
0
    def __init__(self):
        self.view_elements = []
        self.window = gui_ut.Tk()
        self.width = 1000
        self.height = 600
        self.current_command_view = None
        self.model = Model()
        self.window.title("GOST-CONTROLLER")

        self.window.geometry(f'{str(self.width)}x{str(self.height)}')

        # setting the general layout

        self.top_bar = gui_ut.Frame(self.window,
                                    width=self.width,
                                    bg="#ababab")
        main_area_frame = gui_ut.Frame(self.window,
                                       width=self.width,
                                       bg="#ababab")
        self.main_area = scroll.Scrollable(main_area_frame, width=16)
        self.top_bar.pack(side="top", fill="both")
        main_area_frame.pack(side="top", fill="both", expand=True)

        self.address_preview = None
        self.confirm_address_button = None
        self.new_address_entry = None
        self.keep_old_address_button = None
        self.back_button = None

        if bool(self.model.GOST_address):
            info_text = f"Current GOST address: {self.model.GOST_address}"
        else:
            info_text = "Invalid GOST address"

        self.address_preview = gui_ut.Button(
            self.top_bar,
            text=f"{info_text} \nclick here to change address",
            command=lambda: change_address_main(self),
            bg=gui_ut.change_address_color)
        self.port_button = gui_ut.Button(
            self.top_bar,
            text="Change port number",
            command=lambda: change_port_number(self),
            bg=gui_ut.change_address_color)
        self.ping_button = gui_ut.Button(
            self.top_bar,
            text="Ping Connection",
            command=lambda: ping_connection(self, self.model.GOST_address, True
                                            ),
            bg=gui_ut.change_address_color)
        self.ping_button.grid(row=0, column=5)
        self.address_preview.grid(row=0, column=0)
        self.port_button.grid(row=0, column=4)

        button_height = int(int(self.height) / 99)
        button_width = int(int(self.width) / 40)

        myFont = Font(family='Helvetica', size=20, weight='bold')

        GET_btn = gui_ut.Button(self.main_area,
                                text="GET",
                                height=button_height,
                                width=button_width,
                                command=lambda: get_command(self),
                                bg='#86f986')
        GET_btn["font"] = myFont

        DELETE_btn = gui_ut.Button(self.main_area,
                                   height=button_height,
                                   width=button_width,
                                   text="DELETE",
                                   command=lambda: delete_command(self),
                                   bg='#f17e7e')
        DELETE_btn["font"] = myFont

        PATCH_btn = gui_ut.Button(self.main_area,
                                  text="PATCH",
                                  command=lambda: patch_command(self),
                                  bg='#efca8c')
        PATCH_btn["font"] = myFont

        CREATE_btn = gui_ut.Button(self.main_area,
                                   text="CREATE/POST",
                                   height=button_height,
                                   width=button_width,
                                   command=lambda: create_command(self),
                                   bg='#9ea9f0')
        CREATE_btn["font"] = myFont

        SETTINGS_btn = gui_ut.Button(self.main_area,
                                     text="SETTINGS",
                                     command=lambda: change_settings(self),
                                     bg='#fff1c1')
        SETTINGS_btn["font"] = myFont

        self.main_view_elements = []

        self.main_view_elements.append({
            "item": GET_btn,
            "row": 0,
            "column": 0
        })
        self.main_view_elements.append({
            "item": DELETE_btn,
            "row": 1,
            "column": 0
        })
        self.main_view_elements.append({
            "item": PATCH_btn,
            "row": 0,
            "column": 1
        })
        self.main_view_elements.append({
            "item": CREATE_btn,
            "row": 1,
            "column": 1
        })
        self.main_view_elements.append({
            "item": SETTINGS_btn,
            "row": 2,
            "column": 0
        })

        self.main_area.columnconfigure(0, weight=1)
        self.main_area.columnconfigure(1, weight=1)
        self.main_area.rowconfigure(0, weight=1)
        self.main_area.rowconfigure(1, weight=1)
        self.main_area.rowconfigure(2, weight=1)
        self.main_area.rowconfigure(3, weight=1)

        gui_ut.populate(self.main_view_elements, self.main_area)

        self.back_button = gui_ut.Button(self.top_bar,
                                         text="Back to Main Menu",
                                         command=lambda: restore_main(self),
                                         bg='#ff502f')
        self.back_button.grid(row=0, column=6, sticky=gui_ut.N + gui_ut.S)
        self.back_button.grid_remove()

        self.window.mainloop()
예제 #15
0
    def __init__(self, main_view):
        self.view_elements = []
        self.selected_type = None
        self.selected_boolean_expression = None
        self.selected_identifiers = None
        self.result = None
        self.result_info = None
        self.main_view = main_view
        self.show_fields = "all"
        self.selected_items = None
        self.delete_btn = None
        self.result = None

        main_view.current_command_view = self

        types_menu_description = gui_ut.Label(
            main_view.main_area,
            borderwidth=2,
            relief="solid",
            text="Select OGC entity type (mandatory field)")
        self.view_elements.append({
            "item": types_menu_description,
            "row": 0,
            "column": 0
        })

        self.selected_type = gui_ut.StringVar(main_view.main_area)
        types = gui_ut.get_ogc_types()
        self.selected_type.set("Select an OGC type")

        self.selected_type.trace("w", self.show_options)

        types_menu = gui_ut.OptionMenu(main_view.main_area, self.selected_type,
                                       *types)
        self.view_elements.append({"item": types_menu, "row": 0, "column": 1})

        selected_identifiers_description = gui_ut.Label(
            main_view.main_area,
            borderwidth=2,
            relief="solid",
            text=gui_ut.select_id_text)

        self.view_elements.append({
            "item": selected_identifiers_description,
            "row": 1,
            "column": 0
        })
        self.selected_identifiers = gui_ut.Entry(main_view.main_area, width=10)
        self.view_elements.append({
            "item": self.selected_identifiers,
            "row": 1,
            "column": 1
        })

        selected_boolean_expression_description = gui_ut.Label(
            main_view.main_area,
            borderwidth=2,
            relief="solid",
            text=gui_ut.select_conditions_text)

        self.view_elements.append({
            "item": selected_boolean_expression_description,
            "row": 2,
            "column": 0
        })
        self.selected_boolean_expression = gui_ut.Entry(main_view.main_area,
                                                        width=50)

        self.view_elements.append({
            "item": self.selected_boolean_expression,
            "row": 2,
            "column": 1
        })

        types_menu_description = gui_ut.Label(
            main_view.main_area,
            borderwidth=2,
            relief="solid",
            text="Select Related OGC entity type (optional field)")
        self.view_elements.append({
            "item": types_menu_description,
            "row": 3,
            "column": 0
        })

        self.related_type = gui_ut.StringVar(main_view.main_area)
        types = gui_ut.get_ogc_types(True)
        self.related_type.set("No related OGC type")

        self.related_type.trace("w", self.show_options)

        types_menu = gui_ut.OptionMenu(main_view.main_area, self.related_type,
                                       *types)
        self.view_elements.append({"item": types_menu, "row": 3, "column": 1})

        fields_menu_description = gui_ut.Label(
            main_view.main_area,
            borderwidth=2,
            relief="solid",
            text="Select fields to show (default: all)")
        self.view_elements.append({
            "item": fields_menu_description,
            "row": 4,
            "column": 0
        })

        gui_ut.populate(self.view_elements, self.main_view.main_area)
예제 #16
0
    def __init__(self, main_view):
        self.view_elements = []
        self.main_view = main_view
        self.confirm_address_button = None

        main_view.current_command_view = self  # needed for hide() function to work on the current elements

        if bool(main_view.model.GOST_address):
            current_address = f"[Current GOST address: {self.main_view.model.GOST_address}]"
        else:
            current_address = "[Current GOST address is not working]"

        self.change_address_description = Label(
            self.main_view.main_area,
            text=f"Insert a new address\n"
            f"format: http://x.x.x.x:port_number/v1.0\n{current_address}")
        self.view_elements.append({
            "item": self.change_address_description,
            "row": 1,
            "column": 0
        })
        self.change_port_description = Label(self.main_view.main_area,
                                             text=f"Insert a new port")
        self.view_elements.append({
            "item": self.change_port_description,
            "row": 3,
            "column": 0
        })
        self.new_port = Entry(self.main_view.main_area, width=40)
        self.new_port.insert(0, conn_conf.try_port(take=1))
        self.new_address = Entry(self.main_view.main_area, width=40)
        self.new_address.insert(0, self.main_view.model.GOST_address)
        self.view_elements.append({
            "item": self.new_address,
            "row": 1,
            "column": 2
        })
        self.view_elements.append({
            "item": self.new_port,
            "row": 3,
            "column": 2
        })
        self.confirm_address_button = gui_ut.Button(
            self.main_view.main_area,
            text="Confirm change",
            command=lambda: change_address(self),
            bg=gui_ut.action_color)
        self.view_elements.append({
            "item": self.confirm_address_button,
            "row": 1,
            "column": 3
        })
        self.confirm_port_button = gui_ut.Button(
            self.main_view.main_area,
            text="Confirm change",
            command=lambda: conn_conf.try_port(self, self.new_port.get(), b=1),
            bg=gui_ut.action_color)
        self.view_elements.append({
            "item": self.confirm_port_button,
            "row": 3,
            "column": 3
        })
        self.ping_button = gui_ut.Button(
            self.main_view.main_area,
            text="Ping Connection",
            command=lambda: ping_connection(self, self.main_view.model.
                                            GOST_address),
            bg=gui_ut.action_color)
        self.view_elements.append({
            "item": self.ping_button,
            "row": 4,
            "column": 0
        })
        gui_ut.populate(self.view_elements)
예제 #17
0
def patch(self):
    if patch_values_not_available(self):
        pass
    else:
        gui_ut.clear_results(self)
        self.selected_items = gui_ut.get_items(self)

        if len(self.selected_items) > 1 and gui_ut.name_in_patch(
                self.patch_values):  # control to avoid to patch two
            # items with the same name
            gui_ut.messagebox.showinfo(
                "ERROR",
                "Trying to patch multiple items with the same name\nItems not patched"
            )
        else:
            if self.selected_items != "error":
                self.result = gui_ut.scrollable_results(
                    self.selected_items, self.main_view.main_area)

                self.view_elements.append({
                    "item": self.result,
                    "row": 1,
                    "column": 1,
                    "name": "result"
                })
                self.patch_btn.config(
                    text=
                    "Click here to confirm \nthe Patching of the selected elements",
                    command=lambda: confirm_patching(self))
                self.abort_patch_btn = gui_ut.Button(
                    self.main_view.main_area,
                    text="Click here to abort the patching",
                    command=lambda: abort_patching(self),
                    bg='#ff502f')
                self.view_elements.append({
                    "item": self.abort_patch_btn,
                    "row": 6,
                    "column": 1,
                    "name": "abort_patching_button"
                })
                gui_ut.populate(self.view_elements, self.main_view.main_area)

                indexes_to_delete = [
                ]  # Deleting select item fields from the view
                for index, val in enumerate(self.view_elements):
                    if "name" in val:
                        if val["name"] in [
                                "select_introduction",
                                "selected_identifiers_description",
                                "selected_identifiers",
                                "selected_boolean_expression_description",
                                "selected_boolean_expression"
                        ]:
                            indexes_to_delete.append(index)
                for i in sorted(indexes_to_delete, reverse=True):
                    self.view_elements[i]["item"].grid_forget()

            for i in self.patch_values:
                if bool(i["field_entry"].get()):
                    i["field_entry"].config(state=gui_ut.DISABLED)
                else:
                    i["field_entry"].grid_forget()