replace tkinter errormessage with custom create error dialog

This commit is contained in:
Huy Pham 2020-02-05 15:09:33 -08:00
parent 9216683902
commit 0407645061
15 changed files with 132 additions and 56 deletions

View file

@ -65,8 +65,13 @@ class ConfigServiceConfigDialog(Dialog):
self.config_frame = None
self.default_config = None
self.config = None
self.has_error = False
self.load()
self.draw()
if not self.has_error:
self.draw()
def load(self):
try:
@ -106,7 +111,8 @@ class ConfigServiceConfigDialog(Dialog):
self.modified_files.add(file)
self.temp_service_files[file] = data
except grpc.RpcError as e:
show_grpc_error(e)
self.has_error = True
show_grpc_error(e, self.app, self.app)
def draw(self):
self.top.columnconfigure(0, weight=1)
@ -327,7 +333,7 @@ class ConfigServiceConfigDialog(Dialog):
all_current = current_listbox.get(0, tk.END)
current_listbox.itemconfig(all_current.index(self.service_name), bg="green")
except grpc.RpcError as e:
show_grpc_error(e)
show_grpc_error(e, self.top, self.app)
self.destroy()
def handle_template_changed(self, event: tk.Event):

View file

@ -65,14 +65,17 @@ class EmaneModelDialog(Dialog):
self.model = f"emane_{model}"
self.interface = interface
self.config_frame = None
self.error = False
try:
self.config = self.app.core.get_emane_model_config(
self.node.id, self.model, self.interface
)
except grpc.RpcError as e:
show_grpc_error(e)
show_grpc_error(e, self.app, self.app)
self.error = True
self.destroy()
self.draw()
if not self.error:
self.draw()
def draw(self):
self.top.columnconfigure(0, weight=1)
@ -225,7 +228,8 @@ class EmaneConfigDialog(Dialog):
dialog = EmaneModelDialog(
self, self.app, self.canvas_node.core_node, model_name
)
dialog.show()
if not dialog.error:
dialog.show()
def emane_model_change(self, event: tk.Event):
"""

View file

@ -29,12 +29,14 @@ class MobilityConfigDialog(Dialog):
self.canvas_node = canvas_node
self.node = canvas_node.core_node
self.config_frame = None
self.has_error = False
try:
self.config = self.app.core.get_mobility_config(self.node.id)
self.draw()
except grpc.RpcError as e:
show_grpc_error(e)
self.has_error = True
show_grpc_error(e, self.app, self.app)
self.destroy()
self.draw()
def draw(self):
self.top.columnconfigure(0, weight=1)

View file

@ -153,7 +153,7 @@ class MobilityPlayerDialog(Dialog):
session_id, self.node.id, MobilityAction.START
)
except grpc.RpcError as e:
show_grpc_error(e)
show_grpc_error(e, self.top, self.app)
def click_pause(self):
self.set_pause()
@ -163,7 +163,7 @@ class MobilityPlayerDialog(Dialog):
session_id, self.node.id, MobilityAction.PAUSE
)
except grpc.RpcError as e:
show_grpc_error(e)
show_grpc_error(e, self.top, self.app)
def click_stop(self):
self.set_stop()
@ -173,4 +173,4 @@ class MobilityPlayerDialog(Dialog):
session_id, self.node.id, MobilityAction.STOP
)
except grpc.RpcError as e:
show_grpc_error(e)
show_grpc_error(e, self.top, self.app)

View file

@ -124,7 +124,8 @@ class NodeConfigServiceDialog(Dialog):
service_name=self.current.listbox.get(current_selection[0]),
node_id=self.node_id,
)
dialog.show()
if not dialog.has_error:
dialog.show()
else:
messagebox.showinfo(
"Node service configuration", "Select a service to configure"

View file

@ -140,7 +140,12 @@ class NodeServiceDialog(Dialog):
service_name=self.current.listbox.get(current_selection[0]),
node_id=self.node_id,
)
dialog.show()
# if error occurred when creating ServiceConfigDialog, don't show the dialog
if not dialog.error:
dialog.show()
else:
dialog.destroy()
else:
messagebox.showinfo(
"Node service configuration", "Select a service to configure"

View file

@ -64,10 +64,16 @@ class ServiceConfigDialog(Dialog):
self.original_service_files = {}
self.temp_service_files = {}
self.modified_files = set()
self.load()
self.draw()
def load(self):
self.error = True
load_result = self.load()
if load_result:
self.draw()
self.error = False
def load(self) -> bool:
result = False
try:
self.app.core.create_nodes_and_links()
default_config = self.app.core.get_node_service(
@ -108,8 +114,10 @@ class ServiceConfigDialog(Dialog):
):
for file, data in file_configs[self.node_id][self.service_name].items():
self.temp_service_files[file] = data
result = True
except grpc.RpcError as e:
show_grpc_error(e)
show_grpc_error(e, self.master, self.app)
return result
def draw(self):
self.top.columnconfigure(0, weight=1)
@ -444,7 +452,7 @@ class ServiceConfigDialog(Dialog):
all_current = current_listbox.get(0, tk.END)
current_listbox.itemconfig(all_current.index(self.service_name), bg="green")
except grpc.RpcError as e:
show_grpc_error(e)
show_grpc_error(e, self.top, self.app)
self.destroy()
def display_service_file_data(self, event: tk.Event):

View file

@ -17,8 +17,10 @@ class SessionOptionsDialog(Dialog):
def __init__(self, master: "Application", app: "Application"):
super().__init__(master, app, "Session Options", modal=True)
self.config_frame = None
self.has_error = False
self.config = self.get_config()
self.draw()
if not self.has_error:
self.draw()
def get_config(self):
try:
@ -26,7 +28,8 @@ class SessionOptionsDialog(Dialog):
response = self.app.core.client.get_session_options(session_id)
return response.config
except grpc.RpcError as e:
show_grpc_error(e)
self.has_error = True
show_grpc_error(e, self.app, self.app)
self.destroy()
def draw(self):
@ -53,5 +56,5 @@ class SessionOptionsDialog(Dialog):
response = self.app.core.client.set_session_options(session_id, config)
logging.info("saved session config: %s", response)
except grpc.RpcError as e:
show_grpc_error(e)
show_grpc_error(e, self.top, self.app)
self.destroy()

View file

@ -25,8 +25,10 @@ class SessionsDialog(Dialog):
self.selected = False
self.selected_id = None
self.tree = None
self.error = False
self.sessions = self.get_sessions()
self.draw()
if not self.error:
self.draw()
def get_sessions(self) -> Iterable[core_pb2.SessionSummary]:
try:
@ -34,7 +36,8 @@ class SessionsDialog(Dialog):
logging.info("sessions: %s", response)
return response.sessions
except grpc.RpcError as e:
show_grpc_error(e)
show_grpc_error(e, self.app, self.app)
self.error = True
self.destroy()
def draw(self):
@ -211,7 +214,7 @@ class SessionsDialog(Dialog):
item = self.tree.selection()
if item:
sid = int(self.tree.item(item, "text"))
self.app.core.delete_session(sid)
self.app.core.delete_session(sid, self.top)
self.tree.delete(item[0])
if sid == self.app.core.session_id:
self.click_new()

View file

@ -27,12 +27,14 @@ class WlanConfigDialog(Dialog):
self.canvas_node = canvas_node
self.node = canvas_node.core_node
self.config_frame = None
self.error = False
try:
self.config = self.app.core.get_wlan_config(self.node.id)
self.draw()
except grpc.RpcError as e:
show_grpc_error(e)
show_grpc_error(e, self.app, self.app)
self.error = True
self.destroy()
self.draw()
def draw(self):
self.top.columnconfigure(0, weight=1)