def remove_inf():
    """
        Автор: 
        \nЦель: удаляет строку из таблицы
        \nВход: корневое окно tkinter для создания окна редактирования, список активных столбцов таблицы
        \nВыход: нет
    """
    # открыта ли база?
    if not glob.is_db_open():
        return "break"
    # пуста ли база?
    if glob.current_base.empty:
        err.error("База пуста")
        return "break"
    ans = err.yes_no(
        "Вы точно хотите удалить данные?\n Это повлечёт полное удаление данных по выбранному вулкану."
    )
    if ans:
        # todo: можно ли оптимизировать?
        index = glob.table4base.index(glob.table4base.selection())
        glob.table4base.delete(list(glob.current_base.index)[-1])
        glob.current_base = glob.current_base.drop(index=index)
        glob.current_base.reset_index(inplace=True, drop=True)
        glob.mark_changes()
        glob.update_workspace()
        glob.update_list()
def accept(root, list4values):

    """
    Автор: Баканов Г., Подкопаева П.
    Цель: Проверка правильности введённых данных в окно
    Вход: Значение переменной любого типа
    Выход: нет
    """

    flag = True
    if (list4values['Day'].get() > 29) and (list4values['Month'].get() == 2):
        flag = False
    elif list4values['Day'].get() > 31 or list4values['Day'].get() < 1:
        flag = False
    if list4values['Elevation'].get() > 6887:
        flag = False
    if (list4values['Latitude'].get() > 180) or (list4values['Latitude'].get() < -180):
        flag = False
    if (list4values['Longitude'].get() > 180) or (list4values['Longitude'].get() < -180):
        flag = False
    if flag:

        glob.current_base = glob.current_base.append({k: v.get() for k,
                                                      v in list4values.items()}, ignore_index=True)
        glob.current_base = glob.correct_base_values(glob.current_base)
        glob.work_list[glob.current_base_name] = glob.current_base
        new_item = glob.table4base.insert('', 'end', iid=len(glob.current_base.index) - 1)
        for i in glob.columns:
            glob.table4base.set(new_item, column=i, value=list4values[i].get())
        mb.showinfo("Сообщение", "Занесено в базу")
        glob.mark_changes()
        glob.update_list()
        root.destroy()
    else:
        err.error("Данные введены некорректно, повторите попытку")
def edit_event(root: tk.Tk):
    """
        Автор:  
        Цель:   обработчик события кнопки изменения поля таблицы, открывает окно для изменения данных
        Вход:   корневое окно tkinter для создания окна редактирования
        Выход:  нет
    """
    # открыта ли база?
    if not glob.is_db_open():
        return "break"
    # пуста ли база?
    if glob.current_base.empty:
        err.error("База пуста")
        return "break"
    # получаем изменяемую строчку
    index = glob.table4base.index(glob.table4base.selection())
    curr_item = glob.current_base.iloc[index, :]
    # создаем дочернее окно
    edit_win = tk.Toplevel(root)
    edit_win.resizable(0, 0)
    edit_win.title("Изменения данных поля таблицы")
    # распологаем все необходимые элементы в этих фреймах
    frame4check4labels = tk.Frame(edit_win)
    frame4check4entries = tk.Frame(edit_win)
    frame4check4button = tk.Frame(edit_win)
    list4changes = {}
    for i in constants.origin_columns:
        # все значения будут строкой
        text = tk.StringVar()
        # если атрибут nan или 0, то вместо него отображаем пустую строчку
        if pd.isna(curr_item[i]) or (i in ['Year', 'Month', 'Day']
                                     and curr_item[i] == 0):
            text.set("")
        else:
            text.set(curr_item[i])
        list4changes[i] = text
        label = tk.Label(frame4check4labels, text=i + ":", anchor="e")
        entry = tk.Entry(frame4check4entries, textvariable=text)
        if i not in glob.columns:
            label.configure(state=tk.DISABLED)
            entry.configure(state='readonly')
        entry.pack(side="top", fill="x", expand=True, pady=5)
        label.pack(side="top", fill="x", expand=True, pady=5)
    save_changes_button = tk.Button(frame4check4button, text="Сохранить")
    save_changes_button.pack(expand=False)
    save_changes_button.bind(
        "<Button-1>",
        lambda *args: make_changes_event(edit_win, index, list4changes))
    edit_win.rowconfigure(0, pad=5)
    edit_win.rowconfigure(1, pad=5)
    edit_win.columnconfigure(0, pad=5)
    edit_win.columnconfigure(1, pad=5)
    frame4check4labels.grid(row=0, column=0, sticky="NSW")
    frame4check4entries.grid(row=0, column=1, sticky="NSW")
    frame4check4button.grid(row=1, column=0, columnspan=2, sticky="NSEW")
def is_db_open() -> bool:
    """
    Автор:  
    Цель: проверка, окрыта ли база
    Вход: Нет
    Выход: true, false
    """
    if current_base is None:
        err.error("База не выбранна!")
        return False
    return True
def apply_column_selection(root: tk.Tk, win: tk.Toplevel, pane: ttk.Panedwindow):
    """
    Автор: Баканов Г.
    Цель: применяет к программме выбор столбцов (изменяет рабочее пространство)
    Вход: главное окно, побочное окно выбора столбцов, растягивающийся виджет
    Выход: нет
    """
    if any(glob.columns_selection.values()):
        glob.columns = [x for x in glob.columns_selection.keys() if glob.columns_selection[x].get() == 1]
        open_base(root, pane, glob.current_base_list_id)
        win.destroy()
    else:
        err.error("Не выбран ни один столбец")
        return "break"
def load_event(*args):
    """
        Автор: Баканов Г.
        Цель: обработка события загрузки новой базы инструментами OS
        Вход: Нет
        Выход: нет
    """
    path = filedialog.askopenfilename(initialdir="../Data/",
                                      filetypes=(("Database files", "*.csv"), ("All files", "*.*")))
    path = path.replace('/', "\\")
    try:
        base_name = hand_base.read_base(path)
        glob.base_list.insert(tk.END, base_name)
    except FileNotFoundError:
        pass
    except Exception as error:
        message = str(error)
        err.error(message[message.find('['):message.find(']') + 1] + " нет в Базе Данных")
    return "break"