mirror of
https://github.com/kk7ds/chirp.git
synced 2024-09-21 02:27:21 +00:00
Improve "driver messages" dialog
Jamming a hundred errors into a MessageBox is not scalable and looks pretty dumb after a few. This makes it into a proper dialog that shows the first line of each and lets the user select each for better readability. Related to #11519
This commit is contained in:
parent
3ed39bfdfa
commit
355c0c52d0
@ -22,7 +22,6 @@ import os
|
||||
import platform
|
||||
import shutil
|
||||
import tempfile
|
||||
import textwrap
|
||||
import threading
|
||||
|
||||
import wx
|
||||
@ -711,8 +710,51 @@ def temporary_debug_log():
|
||||
return dst
|
||||
|
||||
|
||||
class MultiErrorDialog(wx.Dialog):
|
||||
def __init__(self, *args, **kw):
|
||||
super().__init__(*args, **kw)
|
||||
vbox = wx.BoxSizer(wx.VERTICAL)
|
||||
self.SetSizer(vbox)
|
||||
|
||||
self.choices = []
|
||||
self.choice_box = wx.ListBox(self)
|
||||
vbox.Add(self.choice_box, border=10, proportion=0,
|
||||
flag=wx.EXPAND | wx.ALL)
|
||||
|
||||
self.message = wx.TextCtrl(self)
|
||||
self.message.SetEditable(False)
|
||||
vbox.Add(self.message, border=10, proportion=1,
|
||||
flag=wx.EXPAND | wx.ALL)
|
||||
|
||||
buttons = self.CreateButtonSizer(wx.OK)
|
||||
vbox.Add(buttons, border=10, flag=wx.ALL)
|
||||
|
||||
self.Bind(wx.EVT_BUTTON, self._button)
|
||||
self.choice_box.Bind(wx.EVT_LISTBOX, self._selected)
|
||||
|
||||
self.SetMinSize((600, 400))
|
||||
self.Fit()
|
||||
self.Center()
|
||||
|
||||
def _button(self, event):
|
||||
self.EndModal(wx.ID_OK)
|
||||
|
||||
def select(self, index):
|
||||
error = self.choices[index]
|
||||
self.message.SetValue('%s in %s:\n%s' % (
|
||||
error.levelname, error.module, error.getMessage()))
|
||||
|
||||
def _selected(self, event):
|
||||
self.select(event.GetInt())
|
||||
|
||||
def set_errors(self, errors):
|
||||
self.choices = errors
|
||||
self.choice_box.Set([x.getMessage() for x in self.choices])
|
||||
self.select(0)
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def expose_logs(level, root, label, maxlen=128):
|
||||
def expose_logs(level, root, label, maxlen=128, parent=None):
|
||||
if not isinstance(root, tuple):
|
||||
root = (root,)
|
||||
|
||||
@ -725,9 +767,7 @@ def expose_logs(level, root, label, maxlen=128):
|
||||
lines = list(itertools.chain.from_iterable(x.get_history()
|
||||
for x in histories))
|
||||
if lines:
|
||||
msg = os.linesep.join(textwrap.shorten(x.getMessage(), maxlen)
|
||||
for x in lines)
|
||||
d = wx.MessageDialog(
|
||||
None, str(msg), label,
|
||||
style=wx.OK | wx.ICON_INFORMATION)
|
||||
d = MultiErrorDialog(parent)
|
||||
d.SetTitle(label)
|
||||
d.set_errors(lines)
|
||||
d.ShowModal()
|
||||
|
@ -551,7 +551,8 @@ class ChirpMain(wx.Frame):
|
||||
self.enable_bugreport()
|
||||
CSVRadio = directory.get_radio('Generic_CSV')
|
||||
label = _('Driver messages')
|
||||
with common.expose_logs(logging.WARNING, 'chirp.drivers', label):
|
||||
with common.expose_logs(logging.WARNING, 'chirp.drivers', label,
|
||||
parent=self):
|
||||
if exists:
|
||||
if not os.path.exists(filename):
|
||||
raise FileNotFoundError(
|
||||
@ -1356,7 +1357,7 @@ class ChirpMain(wx.Frame):
|
||||
r = d.ShowModal()
|
||||
if r == wx.ID_YES:
|
||||
with common.expose_logs(logging.WARNING, 'chirp.drivers',
|
||||
_('Import messages')):
|
||||
_('Import messages'), parent=self):
|
||||
radio = directory.get_radio_by_image(filename)
|
||||
self.current_editorset.current_editor.memedit_import_all(radio)
|
||||
elif r == wx.ID_NO:
|
||||
|
Loading…
Reference in New Issue
Block a user