[chirp_devel] [PATCH] Normalized dialog box affirmative buttons to follow gnome human interface guidelines and added alternative button order for other platforms. Fixes #8271
Kosta A.
Wed Sep 23 02:42:39 PDT 2020
# HG changeset patch
# User Kosta A. <ve7kcy at gmail.com>
# Date 1600853926 25200
# Wed Sep 23 02:38:46 2020 -0700
# Node ID 42b1e50fcf7a40ab591074fba9f3808805590f2f
# Parent 1a49ad2e84e305b56a3bdeb823266e1219f34e02
Normalized dialog box affirmative buttons to follow gnome human interface guidelines and added alternative button order for other platforms. Fixes #8271.
diff --git a/chirp/ui/bandplans.py b/chirp/ui/bandplans.py
--- a/chirp/ui/bandplans.py
+++ b/chirp/ui/bandplans.py
@@ -47,7 +47,7 @@
# Check for duplicates.
duplicates = [x for x in plan.BANDS if x == band]
if len(duplicates) > 1:
- LOG.warn("Bandplan %s has duplicates %s" %
+ LOG.debug("Bandplan %s has duplicates %s" %
(name, duplicates))
# Add repeater inputs.
rpt_input = band.inverse()
diff --git a/chirp/ui/clone.py b/chirp/ui/clone.py
--- a/chirp/ui/clone.py
+++ b/chirp/ui/clone.py
@@ -44,13 +44,16 @@
class CloneSettingsDialog(gtk.Dialog):
- def __make_field(self, label, widget):
- l = gtk.Label(label)
- self.__table.attach(l, 0, 1, self.__row, self.__row+1)
- self.__table.attach(widget, 1, 2, self.__row, self.__row+1)
+ def __make_field(self, text, widget):
+ label = gtk.Label(text)
+ label.set_alignment(1.0, 0.5)
+ self.__table.attach(label, 0, 1, self.__row, self.__row+1,
+ xpadding=6, ypadding=3)
+ self.__table.attach(widget, 1, 2, self.__row, self.__row+1,
+ xpadding=6, ypadding=3)
self.__row += 1
- l.show()
+ label.show()
widget.show()
def __make_port(self, port):
@@ -123,17 +126,15 @@
def __make_ui(self, settings):
self.__table = gtk.Table(3, 2)
- self.__table.set_row_spacings(3)
- self.__table.set_col_spacings(10)
self.__row = 0
self.__port = self.__make_port(settings and settings.port or None)
self.__modl = self.__make_model()
self.__vend = self.__make_vendor(self.__modl)
- self.__make_field(_("Port"), self.__port)
- self.__make_field(_("Vendor"), self.__vend)
- self.__make_field(_("Model"), self.__modl)
+ self.__make_field(_("Serial Port:"), self.__port)
+ self.__make_field(_("Vendor:"), self.__vend)
+ self.__make_field(_("Model:"), self.__modl)
if settings and settings.radio_class:
common.combo_select(self.__vend, settings.radio_class.VENDOR)
@@ -144,21 +145,21 @@
self.__modl.set_sensitive(False)
self.__table.show()
- self.vbox.pack_start(self.__table, 1, 1, 1)
+ self.vbox.pack_start(self.__table, False, True, 2)
def __init__(self, settings=None, parent=None, title=_("Radio")):
buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OK, gtk.RESPONSE_OK)
gtk.Dialog.__init__(self, title,
parent=parent,
+ buttons=buttons,
flags=gtk.DIALOG_MODAL)
+ self.set_default_response(gtk.RESPONSE_OK)
+ self.set_alternative_button_order([gtk.RESPONSE_OK,
+ gtk.RESPONSE_CANCEL])
+
self.__make_ui(settings)
- self.__cancel_button = self.add_button(gtk.STOCK_CANCEL,
- gtk.RESPONSE_CANCEL)
- self.__okay_button = self.add_button(gtk.STOCK_OK,
- gtk.RESPONSE_OK)
- self.__okay_button.grab_default()
- self.__okay_button.grab_focus()
+
def run(self):
r = gtk.Dialog.run(self)
diff --git a/chirp/ui/editorset.py b/chirp/ui/editorset.py
--- a/chirp/ui/editorset.py
+++ b/chirp/ui/editorset.py
@@ -276,7 +276,7 @@
choices = [x.VARIANT for x in devices]
d = inputdialog.ChoiceDialog(choices)
- text = _("The {vendor} {model} has multiple independent sub-devices")
+ text = _("The {vendor} {model} has multiple independent sub-devices.")
d.label.set_text(text.format(vendor=radio.VENDOR, model=radio.MODEL) +
os.linesep + _("Choose one to import from:"))
r = d.run()
diff --git a/chirp/ui/importdialog.py b/chirp/ui/importdialog.py
--- a/chirp/ui/importdialog.py
+++ b/chirp/ui/importdialog.py
@@ -396,19 +396,19 @@
all.connect("clicked", self.__select_all, True)
all.set_size_request(50, 25)
all.show()
- hbox.pack_start(all, 0, 0, 0)
+ hbox.pack_start(all, False, False, 1)
none = gtk.Button(_("None"))
none.connect("clicked", self.__select_all, False)
none.set_size_request(50, 25)
none.show()
- hbox.pack_start(none, 0, 0, 0)
+ hbox.pack_start(none, False, False, 1)
inv = gtk.Button(_("Inverse"))
inv.connect("clicked", self.__select_all, None)
inv.set_size_request(50, 25)
inv.show()
- hbox.pack_start(inv, 0, 0, 0)
+ hbox.pack_start(inv, False, False, 1)
frame = gtk.Frame(_("Select"))
frame.show()
@@ -424,49 +424,49 @@
incr.connect("clicked", self.__incrnew, 100)
incr.set_size_request(50, 25)
incr.show()
- hbox.pack_start(incr, 0, 0, 0)
+ hbox.pack_start(incr, False, False, 1)
incr = gtk.Button("+10")
incr.connect("clicked", self.__incrnew, 10)
incr.set_size_request(50, 25)
incr.show()
- hbox.pack_start(incr, 0, 0, 0)
+ hbox.pack_start(incr, False, False, 1)
incr = gtk.Button("+1")
incr.connect("clicked", self.__incrnew, 1)
incr.set_size_request(50, 25)
incr.show()
- hbox.pack_start(incr, 0, 0, 0)
+ hbox.pack_start(incr, False, False, 1)
decr = gtk.Button("-1")
decr.connect("clicked", self.__incrnew, -1)
decr.set_size_request(50, 25)
decr.show()
- hbox.pack_start(decr, 0, 0, 0)
+ hbox.pack_start(decr, False, False, 1)
decr = gtk.Button("-10")
decr.connect("clicked", self.__incrnew, -10)
decr.set_size_request(50, 25)
decr.show()
- hbox.pack_start(decr, 0, 0, 0)
+ hbox.pack_start(decr, False, False, 1)
decr = gtk.Button("-100")
decr.connect("clicked", self.__incrnew, -100)
decr.set_size_request(50, 25)
decr.show()
- hbox.pack_start(decr, 0, 0, 0)
+ hbox.pack_start(decr, False, False, 1)
auto = gtk.Button(_("Auto"))
auto.connect("clicked", self.__autonew)
auto.set_size_request(50, 25)
auto.show()
- hbox.pack_start(auto, 0, 0, 0)
+ hbox.pack_start(auto, False, False, 1)
revr = gtk.Button(_("Reverse"))
revr.connect("clicked", self.__revrnew)
revr.set_size_request(50, 25)
revr.show()
- hbox.pack_start(revr, 0, 0, 0)
+ hbox.pack_start(revr, False, False, 1)
frame = gtk.Frame(_("Adjust New Location"))
frame.show()
@@ -482,7 +482,7 @@
confirm.connect("toggled", __set_confirm)
confirm.show()
- hbox.pack_start(confirm, 0, 0, 0)
+ hbox.pack_start(confirm, False, False, 1)
frame = gtk.Frame(_("Options"))
frame.add(hbox)
@@ -494,16 +494,16 @@
def make_controls(self):
hbox = gtk.HBox(False, 2)
- hbox.pack_start(self.make_select(), 0, 0, 0)
- hbox.pack_start(self.make_adjust(), 0, 0, 0)
+ hbox.pack_start(self.make_select(), False, False, 1)
+ hbox.pack_start(self.make_adjust(), False, False, 1)
# hbox.pack_start(self.make_options(), 0, 0, 0)
hbox.show()
return hbox
def build_ui(self):
- self.vbox.pack_start(self.make_view(), 1, 1, 1)
- self.vbox.pack_start(self.make_controls(), 0, 0, 0)
+ self.vbox.pack_start(self.make_view(), True, True, 1)
+ self.vbox.pack_start(self.make_controls(), False, False, 0)
def record_use_of(self, number):
lo, hi = self.dst_radio.get_features().memory_bounds
@@ -578,12 +578,17 @@
ACTION = _("Import")
def __init__(self, src_radio, dst_radio, parent=None):
+ buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK)
gtk.Dialog.__init__(self,
- buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
- gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
title=self.TITLE,
+ buttons=buttons,
parent=parent)
+ self.set_default_response(gtk.RESPONSE_OK)
+ self.set_alternative_button_order([gtk.RESPONSE_OK,
+ gtk.RESPONSE_CANCEL])
+
self.col_import = 0
self.col_nloc = 1
self.col_oloc = 2
diff --git a/chirp/ui/inputdialog.py b/chirp/ui/inputdialog.py
--- a/chirp/ui/inputdialog.py
+++ b/chirp/ui/inputdialog.py
@@ -22,69 +22,91 @@
LOG = logging.getLogger(__name__)
-class TextInputDialog(gtk.Dialog):
- def respond_ok(self, _):
- self.response(gtk.RESPONSE_OK)
+class ChoiceDialog(gtk.Dialog):
- def __init__(self, **args):
- buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_OK, gtk.RESPONSE_OK)
- gtk.Dialog.__init__(self, buttons=buttons, **args)
+ def _make_ui(self, choices):
+ self._table = gtk.Table(1, 2)
self.label = gtk.Label()
- self.label.set_size_request(300, 100)
- # pylint: disable-msg=E1101
- self.vbox.pack_start(self.label, 1, 1, 0)
-
- self.text = gtk.Entry()
- self.text.connect("activate", self.respond_ok, None)
- # pylint: disable-msg=E1101
- self.vbox.pack_start(self.text, 1, 1, 0)
-
+ self.label.set_alignment(0.0, 0.5)
+ self.label.set_size_request(384, -1)
self.label.show()
- self.text.show()
-
-
-class ChoiceDialog(gtk.Dialog):
- editable = False
-
- def __init__(self, choices, **args):
- buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_OK, gtk.RESPONSE_OK)
- gtk.Dialog.__init__(self, buttons=buttons, **args)
-
- self.label = gtk.Label()
- self.label.set_size_request(300, 100)
- # pylint: disable-msg=E1101
- self.vbox.pack_start(self.label, 1, 1, 0)
- self.label.show()
+ self._table.attach(self.label, 0, 1, 0, 1, xpadding=6, ypadding=3)
try:
default = choices[0]
except IndexError:
default = None
- self.choice = make_choice(sorted(choices), self.editable, default)
- # pylint: disable-msg=E1101
- self.vbox.pack_start(self.choice, 1, 1, 0)
+ self.choice = make_choice(sorted(choices), False, default)
self.choice.show()
+ self._table.attach(self.choice, 0, 1, 1, 2, xpadding=6, ypadding=3)
+
+ self._table.show()
+ self.vbox.pack_start(self._table, True, True, 2)
+
+ def __init__(self, choices, **args):
+ buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK)
+ gtk.Dialog.__init__(self, buttons=buttons, **args)
self.set_default_response(gtk.RESPONSE_OK)
+ self.set_alternative_button_order([gtk.RESPONSE_OK,
+ gtk.RESPONSE_CANCEL])
+
+ self._make_ui(choices)
-class EditableChoiceDialog(ChoiceDialog):
- editable = True
+class FieldDialog(gtk.Dialog):
+
+ def _make_ui(self):
+ self._table = gtk.Table(1, 2)
+ self._table.show()
+ self._row = 0
+
+ self.vbox.pack_start(self._table, True, True, 2)
+
+ def __init__(self, **args):
+ buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK)
+ gtk.Dialog.__init__(self, buttons=buttons, **args)
+ self.set_default_response(gtk.RESPONSE_OK)
+ self.set_alternative_button_order([gtk.RESPONSE_OK,
+ gtk.RESPONSE_CANCEL])
+
+ self._fields = {}
+
+ self._make_ui()
- def __init__(self, choices, **args):
- ChoiceDialog.__init__(self, choices, **args)
+ def response(self, _):
+ LOG.debug("Blocking response")
+ return
+
+ def add_field(self, name, widget, validator=None):
+ label = gtk.Label(name + ":")
+ label.set_alignment(1.0, 0.5)
+ label.show()
- self.choice.child.set_activates_default(True)
+ widget.set_size_request(160, -1)
+ widget.show()
+
+ self._table.attach(label, 0, 1, self._row, self._row+1,
+ xpadding=6, ypadding=3)
+ self._table.attach(widget, 1, 2, self._row, self._row+1,
+ xpadding=6, ypadding=3)
+ self._row += 1
+
+ self._fields[name] = widget
+
+ def get_field(self, name):
+ return self._fields.get(name, None)
class ExceptionDialog(gtk.MessageDialog):
def __init__(self, exception, **args):
gtk.MessageDialog.__init__(self, buttons=gtk.BUTTONS_OK,
type=gtk.MESSAGE_ERROR, **args)
+ self.set_default_response(gtk.RESPONSE_OK)
self.set_property("text", _("An error has occurred"))
self.format_secondary_text(str(exception))
@@ -94,64 +116,3 @@
LOG.error("--- Exception Dialog: %s ---" % exception)
LOG.error(traceback.format_exc(limit=100))
LOG.error("----------------------------")
-
-
-class FieldDialog(gtk.Dialog):
- def __init__(self, **kwargs):
- if "buttons" not in kwargs.keys():
- kwargs["buttons"] = (gtk.STOCK_OK, gtk.RESPONSE_OK,
- gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
-
- self.__fields = {}
- self.set_default_response(gtk.RESPONSE_OK)
-
- gtk.Dialog.__init__(self, **kwargs)
-
- def response(self, _):
- LOG.debug("Blocking response")
- return
-
- def add_field(self, label, widget, validator=None):
- box = gtk.HBox(True, 2)
-
- lab = gtk.Label(label)
- lab.show()
-
- widget.set_size_request(150, -1)
- widget.show()
-
- box.pack_start(lab, 0, 0, 0)
- box.pack_start(widget, 0, 0, 0)
- box.show()
-
- # pylint: disable-msg=E1101
- self.vbox.pack_start(box, 0, 0, 0)
-
- self.__fields[label] = widget
-
- def get_field(self, label):
- return self.__fields.get(label, None)
-
-
-class OverwriteDialog(gtk.MessageDialog):
- def __init__(self, filename):
- gtk.Dialog.__init__(self,
- buttons=(_("Overwrite"), gtk.RESPONSE_OK,
- gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
-
- self.set_property("text", _("File Exists"))
-
- text = \
- _("The file {name} already exists. "
- "Do you want to overwrite it?").format(name=filename)
-
- self.format_secondary_text(text)
-
-if __name__ == "__main__":
- # pylint: disable-msg=C0103
- d = FieldDialog(buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK))
- d.add_field("Foo", gtk.Entry())
- d.add_field("Bar", make_choice(["A", "B"]))
- d.run()
- gtk.main()
- d.destroy()
diff --git a/chirp/ui/mainapp.py b/chirp/ui/mainapp.py
--- a/chirp/ui/mainapp.py
+++ b/chirp/ui/mainapp.py
@@ -161,9 +161,12 @@
esets.append(self.tabs.get_nth_page(i))
d = gtk.Dialog(title="Diff Radios",
- buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
- gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
+ buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK),
parent=self)
+ d.set_default_response(gtk.RESPONSE_OK)
+ d.set_alternative_button_order([gtk.RESPONSE_OK,
+ gtk.RESPONSE_CANCEL])
label = gtk.Label("")
label.set_markup("<b>-1</b> for either Mem # does a full-file hex " +
@@ -296,8 +299,11 @@
choice = miscwidgets.make_choice(sorted(radiolist.keys()), False,
sorted(radiolist.keys())[0])
d = gtk.Dialog(title="Detection Failed",
- buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
- gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+ buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+ d.set_default_response(gtk.RESPONSE_OK)
+ d.set_alternative_button_order([gtk.RESPONSE_OK,
+ gtk.RESPONSE_CANCEL])
d.vbox.pack_start(lab, 0, 0, 0)
d.vbox.pack_start(choice, 0, 0, 0)
d.vbox.set_spacing(5)
@@ -481,10 +487,22 @@
return
if os.path.exists(fname):
- dlg = inputdialog.OverwriteDialog(fname)
- owrite = dlg.run()
+ dlg = miscwidgets.YesNoDialog(
+ title=_("Save As"),
+ parent=self,
+ buttons=(gtk.STOCK_NO, gtk.RESPONSE_NO,
+ gtk.STOCK_YES, gtk.RESPONSE_YES))
+ dlg.set_default_response(gtk.RESPONSE_NO)
+ dlg.set_alternative_button_order([gtk.RESPONSE_YES,
+ gtk.RESPONSE_NO])
+ dlg.set_text(
+ _("{name} already exists." + os.linesep +
+ "Do you want to replace it?").format(name=fname))
+
+ res = dlg.run()
dlg.destroy()
- if owrite == gtk.RESPONSE_OK:
+
+ if res == gtk.RESPONSE_OK:
break
else:
break
@@ -812,10 +830,16 @@
if eset.is_modified():
dlg = miscwidgets.YesNoDialog(
- title=_("Save Changes?"), parent=self,
- buttons=(gtk.STOCK_YES, gtk.RESPONSE_YES,
+ title=_("Save Changes"),
+ parent=self,
+ buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_NO, gtk.RESPONSE_NO,
- gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+ gtk.STOCK_YES, gtk.RESPONSE_YES))
+ dlg.set_default_response(gtk.RESPONSE_YES)
+ dlg.set_alternative_button_order([gtk.RESPONSE_YES,
+ gtk.RESPONSE_NO,
+ gtk.RESPONSE_CANCEL])
+
dlg.set_text(_("File is modified, save changes before closing?"))
res = dlg.run()
dlg.destroy()
@@ -1407,18 +1431,30 @@
else:
defname = "radio"
- filen = platform.get_platform().gui_save_file(default_name=defname,
+ fname = platform.get_platform().gui_save_file(default_name=defname,
types=types)
- if not filen:
+ if not fname:
return
- if os.path.exists(filen):
- dlg = inputdialog.OverwriteDialog(filen)
- owrite = dlg.run()
+ if os.path.exists(fname):
+ dlg = miscwidgets.YesNoDialog(
+ title=_("Export"),
+ parent=self,
+ buttons=(gtk.STOCK_NO, gtk.RESPONSE_NO,
+ gtk.STOCK_YES, gtk.RESPONSE_YES))
+ dlg.set_default_response(gtk.RESPONSE_NO)
+ dlg.set_alternative_button_order([gtk.RESPONSE_YES,
+ gtk.RESPONSE_NO])
+ dlg.set_text(
+ _("{name} already exists." + os.linesep +
+ "Do you want to replace it?").format(name=fname))
+
+ res = dlg.run()
dlg.destroy()
- if owrite != gtk.RESPONSE_OK:
+
+ if res != gtk.RESPONSE_OK:
return
- os.remove(filen)
+ os.remove(fname)
count = eset.do_export(filen)
reporting.report_model_usage(eset.rthread.radio, "export", count > 0)
@@ -1472,28 +1508,43 @@
radio_name = "%s %s %s" % (eset.rthread.radio.VENDOR,
eset.rthread.radio.MODEL,
eset.rthread.radio.VARIANT)
- d = gtk.Dialog(title=_("Select Columns"),
+ d = gtk.Dialog(title=_("Choose Columns"),
parent=self,
- buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
- gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
-
- vbox = gtk.VBox()
- vbox.show()
- sw = gtk.ScrolledWindow()
- sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
- sw.add_with_viewport(vbox)
- sw.show()
- d.vbox.pack_start(sw, 1, 1, 1)
+ buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+ d.set_default_response(gtk.RESPONSE_OK)
+ d.set_alternative_button_order([gtk.RESPONSE_OK,
+ gtk.RESPONSE_CANCEL])
d.set_size_request(-1, 300)
d.set_resizable(False)
- labelstr = _("Visible columns for {radio}").format(radio=radio_name)
- label = gtk.Label(labelstr)
+ text = _("Select the columns you want to display for {radio}.").format(radio=radio_name)
+ label = gtk.Label(text)
+ label.set_line_wrap(True)
+ label.set_size_request(240, -1)
label.show()
- vbox.pack_start(label)
+ d.vbox.pack_start(label, False, False, 2)
+
+ model = gtk.ListStore(bool, str)
+ view = gtk.TreeView(model)
+ view.set_headers_visible(False)
+ view.show()
- fields = []
- memedit = eset.get_current_editor() # .editors["memedit"]
+ def _toggle(rend, path, model, *ignore):
+ if path is not None:
+ itr = model.get_iter(path)
+ model[itr][0] = not model[itr][0]
+
+ rend = gtk.CellRendererToggle()
+ rend.connect("toggled", _toggle, model)
+ col = gtk.TreeViewColumn(None, rend, active=0)
+ view.append_column(col)
+
+ rend = gtk.CellRendererText()
+ col = gtk.TreeViewColumn(None, rend, text=1)
+ view.append_column(col)
+
+ memedit = eset.get_current_editor()
unsupported = memedit.get_unsupported_columns()
for colspec in memedit.cols:
if colspec[0].startswith("_"):
@@ -1502,20 +1553,22 @@
continue
label = colspec[0]
visible = memedit.get_column_visible(memedit.col(label))
- widget = gtk.CheckButton(label)
- widget.set_active(visible)
- fields.append(widget)
- vbox.pack_start(widget, 1, 1, 1)
- widget.show()
+ model.append([visible, label])
+
+ sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
+ sw.add_with_viewport(view)
+ sw.show()
+ d.vbox.pack_start(sw, True, True, 2)
res = d.run()
selected_columns = []
if res == gtk.RESPONSE_OK:
- for widget in fields:
- colnum = memedit.col(widget.get_label())
- memedit.set_column_visible(colnum, widget.get_active())
- if widget.get_active():
- selected_columns.append(widget.get_label())
+ for row in model:
+ colnum = memedit.col(row[1])
+ memedit.set_column_visible(colnum, row[0])
+ if row[0]:
+ selected_columns.append(row[1])
d.destroy()
@@ -1598,7 +1651,7 @@
d.label.set_text(_("Choose a language or Auto to use the "
"operating system default. You will need to "
"restart the application before the change "
- "will take effect"))
+ "will take effect."))
d.label.set_line_wrap(True)
r = d.run()
if r == gtk.RESPONSE_OK:
diff --git a/chirp/ui/memdetail.py b/chirp/ui/memdetail.py
--- a/chirp/ui/memdetail.py
+++ b/chirp/ui/memdetail.py
@@ -176,7 +176,7 @@
def _add(self, tab, row, name, editor, text, colindex=0):
label = gtk.Label(text + ":")
- label.set_alignment(0.0, 0.5)
+ label.set_alignment(1.0, 0.5)
label.show()
tab.attach(label, colindex, colindex + 1, row, row + 1,
xoptions=gtk.FILL, yoptions=0, xpadding=6, ypadding=3)
@@ -292,8 +292,12 @@
title="Memory Properties",
flags=gtk.DIALOG_MODAL,
parent=parent,
- buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
- gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+ buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+ self.set_default_response(gtk.RESPONSE_OK)
+ self.set_alternative_button_order([gtk.RESPONSE_OK,
+ gtk.RESPONSE_CANCEL])
+
self.set_size_request(-1, 500)
self._tips = gtk.Tooltips()
diff --git a/chirp/ui/memedit.py b/chirp/ui/memedit.py
--- a/chirp/ui/memedit.py
+++ b/chirp/ui/memedit.py
@@ -60,6 +60,8 @@
self.set_property("text", _("Invalid value for this field"))
self.format_secondary_text(str(exception))
+ self.set_default_response(gtk.RESPONSE_OK)
+
def iter_prev(store, iter):
row = store.get_path(iter)[0]
@@ -1477,20 +1479,28 @@
loc, filled = store.get(iter,
self.col(_("Loc")), self.col("_filled"))
if filled and not always:
- d = miscwidgets.YesNoDialog(title=_("Overwrite?"),
- buttons=(gtk.STOCK_YES, 1,
- gtk.STOCK_NO, 2,
- gtk.STOCK_CANCEL, 3,
- "All", 4))
+ d = miscwidgets.YesNoDialog(
+ title=_("Overwrite"),
+ parent=None,
+ buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_NO, gtk.RESPONSE_NO,
+ _("Yes to All"), gtk.RESPONSE_ACCEPT,
+ gtk.STOCK_YES, gtk.RESPONSE_YES))
+ d.set_default_response(gtk.RESPONSE_YES)
+ d.set_alternative_button_order([gtk.RESPONSE_YES,
+ gtk.RESPONSE_ACCEPT,
+ gtk.RESPONSE_NO,
+ gtk.RESPONSE_CANCEL])
+
d.set_text(
_("Overwrite location {number}?").format(number=loc))
r = d.run()
d.destroy()
- if r == 4:
+ if r == gtk.RESPONSE_ACCEPT:
always = True
- elif r == 3:
+ elif r == gtk.RESPONSE_CANCEL:
break
- elif r == 2:
+ elif r == gtk.RESPONSE_NO:
iter = store.iter_next(iter)
continue
@@ -1508,16 +1518,22 @@
errs = [x for x in msgs
if isinstance(x, chirp_common.ValidationError)]
if errs:
- d = miscwidgets.YesNoDialog(title=_("Incompatible Memory"),
- buttons=(gtk.STOCK_OK, 1,
- gtk.STOCK_CANCEL, 2))
+ d = miscwidgets.YesNoDialog(
+ title=_("Incompatible Memory"),
+ parent=None,
+ buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+ d.set_default_response(gtk.RESPONSE_OK)
+ d.set_alternative_button_order([gtk.RESPONSE_OK,
+ gtk.RESPONSE_CANCEL])
+
d.set_text(
_("Pasted memory {number} is not compatible with "
"this radio because:").format(number=src_number) +
os.linesep + os.linesep.join(msgs))
r = d.run()
d.destroy()
- if r == 2:
+ if r == gtk.RESPONSE_CANCEL:
break
else:
iter = store.iter_next(iter)
diff --git a/chirp/ui/miscwidgets.py b/chirp/ui/miscwidgets.py
--- a/chirp/ui/miscwidgets.py
+++ b/chirp/ui/miscwidgets.py
@@ -603,13 +603,24 @@
class YesNoDialog(gtk.Dialog):
def __init__(self, title="", parent=None, buttons=None):
- gtk.Dialog.__init__(self, title=title, parent=parent, buttons=buttons)
+ gtk.Dialog.__init__(self,
+ title=title,
+ parent=parent,
+ buttons=buttons)
+
+ self._table = gtk.Table(1, 2)
self._label = gtk.Label("")
+ self._label.set_alignment(0.0, 0.5)
+ self._label.set_line_wrap(True)
+ self._label.set_size_request(384, -1)
self._label.show()
+ self._table.attach(self._label, 0, 1, 0, 1,
+ xpadding=6, ypadding=3)
+ self._table.show()
# pylint: disable-msg=E1101
- self.vbox.pack_start(self._label, 1, 1, 1)
+ self.vbox.pack_start(self._table, True, True, 2)
def set_text(self, text):
self._label.set_text(text)
diff --git a/chirp/ui/settingsedit.py b/chirp/ui/settingsedit.py
--- a/chirp/ui/settingsedit.py
+++ b/chirp/ui/settingsedit.py
@@ -135,7 +135,7 @@
# Label
label = gtk.Label(element.get_shortname() + ":")
- label.set_alignment(0.0, 0.5)
+ label.set_alignment(1.0, 0.5)
label.show()
table.attach(label, 0, 1, row, row + 1,
diff --git a/chirp/ui/shiftdialog.py b/chirp/ui/shiftdialog.py
--- a/chirp/ui/shiftdialog.py
+++ b/chirp/ui/shiftdialog.py
@@ -30,6 +30,8 @@
title=_("Shift"),
buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_OK))
+ self.set_default_response(gtk.RESPONSE_OK)
+
self.set_position(gtk.WIN_POS_CENTER_ALWAYS)
self.rthread = rthread
More information about the chirp_devel
mailing list