58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
import tkinter as tk
|
|
from tkinter import ttk
|
|
|
|
from shared_libs.wp_app_config import Msg
|
|
|
|
|
|
class TunnelList(ttk.Frame):
|
|
def __init__(self, container, selection_callback, **kwargs):
|
|
super().__init__(container, **kwargs)
|
|
|
|
self.list_frame = ttk.LabelFrame(self, text=Msg.STR["tunnels"])
|
|
self.list_frame.grid(
|
|
column=0, row=0, sticky="nsew", padx=(10, 0), pady=(0, 8))
|
|
|
|
self.list_box = tk.Listbox(self.list_frame, selectmode="single")
|
|
self.list_box.config(
|
|
relief="flat",
|
|
font=("Ubuntu", 12, "bold"),
|
|
)
|
|
self.list_box.grid(column=0, row=0, sticky="nsew")
|
|
self.list_box.event_add("<<ClickEvent>>", "<Button-1>")
|
|
self.list_box.bind("<<ClickEvent>>", selection_callback)
|
|
|
|
self.scrollbar = ttk.Scrollbar(
|
|
self.list_frame, orient="vertical", command=self.list_box.yview
|
|
)
|
|
self.scrollbar.grid(column=1, row=0, sticky="ns")
|
|
self.list_box.configure(yscrollcommand=self.scrollbar.set)
|
|
|
|
self.columnconfigure(0, weight=5)
|
|
self.rowconfigure(0, weight=5)
|
|
self.list_frame.columnconfigure(0, weight=5)
|
|
self.list_frame.rowconfigure(0, weight=5)
|
|
|
|
def populate(self, tunnels):
|
|
self.list_box.delete(0, tk.END)
|
|
for tunnel in tunnels:
|
|
self.list_box.insert("end", tunnel)
|
|
self.list_box.update()
|
|
|
|
def get_selected(self):
|
|
selection_indices = self.list_box.curselection()
|
|
if not selection_indices:
|
|
return None
|
|
return self.list_box.get(selection_indices[0])
|
|
|
|
def get_size(self):
|
|
return self.list_box.size()
|
|
|
|
def set_selection(self, index):
|
|
self.list_box.selection_clear(0, tk.END)
|
|
self.list_box.selection_set(index)
|
|
|
|
def delete_selected(self):
|
|
selection_indices = self.list_box.curselection()
|
|
if selection_indices:
|
|
self.list_box.delete(selection_indices[0])
|