[chirp_devel] [PATCH] Set alternative button order on dialogboxes conforming with GNU guidelines. #8271

Kosta A.
Mon Jan 18 10:46:06 PST 2021


# HG changeset patch
# User Kosta A. <ve7kcy at gmail.com>
# Date 1610993502 28800
#      Mon Jan 18 10:11:42 2021 -0800
# Node ID 7d96e985768fea578a7cef39209e755ff23a22bd
# Parent  449b7221660c5de1a7b2a61ce8766083c645715c
Set alternative button order on dialogboxes conforming with GNU guidelines. #8271

diff --git a/chirp/ui/clone.py b/chirp/ui/clone.py
--- a/chirp/ui/clone.py
+++ b/chirp/ui/clone.py
@@ -45,7 +45,8 @@
 
 class CloneSettingsDialog(gtk.Dialog):
     def __make_field(self, label, widget):
-        l = gtk.Label(label)
+        l = gtk.Label(label + ":")
+        l.set_alignment(1.0, 0.5)
         self.__table.attach(l, 0, 1, self.__row, self.__row+1)
         self.__table.attach(widget, 1, 2, self.__row, self.__row+1)
         self.__row += 1
@@ -151,14 +152,12 @@
                    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/importdialog.py b/chirp/ui/importdialog.py
--- a/chirp/ui/importdialog.py
+++ b/chirp/ui/importdialog.py
@@ -578,12 +578,15 @@
     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),
+                            buttons=buttons,
                             title=self.TITLE,
                             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
@@ -33,6 +33,8 @@
 
         self.label = gtk.Label()
         self.label.set_size_request(300, 100)
+        self.label.set_alignment(0.0, 0.5)
+
         # pylint: disable-msg=E1101
         self.vbox.pack_start(self.label, 1, 1, 0)
 
@@ -53,8 +55,13 @@
                    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.label = gtk.Label()
         self.label.set_size_request(300, 100)
+        self.label.set_alignment(0.0, 0.5)
         # pylint: disable-msg=E1101
         self.vbox.pack_start(self.label, 1, 1, 0)
         self.label.show()
@@ -69,8 +76,6 @@
         self.vbox.pack_start(self.choice, 1, 1, 0)
         self.choice.show()
 
-        self.set_default_response(gtk.RESPONSE_OK)
-
 
 class EditableChoiceDialog(ChoiceDialog):
     editable = True
@@ -85,6 +90,7 @@
     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))
 
@@ -97,15 +103,17 @@
 
 
 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)
+    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.set_default_response(gtk.RESPONSE_OK)
-
-        gtk.Dialog.__init__(self, **kwargs)
 
     def response(self, _):
         LOG.debug("Blocking response")
@@ -114,7 +122,8 @@
     def add_field(self, label, widget, validator=None):
         box = gtk.HBox(True, 2)
 
-        lab = gtk.Label(label)
+        lab = gtk.Label(label + ":")
+        lab.set_alignment(1.0, 0.5)
         lab.show()
 
         widget.set_size_request(150, -1)
@@ -135,9 +144,12 @@
 
 class OverwriteDialog(gtk.MessageDialog):
     def __init__(self, filename):
-        gtk.Dialog.__init__(self,
-                            buttons=(_("Overwrite"), gtk.RESPONSE_OK,
-                                     gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+
+        buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                   gtk.STOCK_OK, gtk.RESPONSE_OK)
+        gtk.Dialog.__init__(self, buttons=buttons)
+        self.set_alternative_button_order([gtk.RESPONSE_OK,
+                                           gtk.RESPONSE_CANCEL])
 
         self.set_property("text", _("File Exists"))
 
@@ -146,12 +158,3 @@
               "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
@@ -160,10 +160,14 @@
         for i in range(0, self.tabs.get_n_pages()):
             esets.append(self.tabs.get_nth_page(i))
 
+        buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                   gtk.STOCK_OK, gtk.RESPONSE_OK)
         d = gtk.Dialog(title="Diff Radios",
-                       buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
-                                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
+                       buttons=buttons,
                        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 " +
@@ -295,9 +299,13 @@
         lab.show()
         choice = miscwidgets.make_choice(sorted(radiolist.keys()), False,
                                          sorted(radiolist.keys())[0])
+        buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                   gtk.STOCK_OK, gtk.RESPONSE_OK)
         d = gtk.Dialog(title="Detection Failed",
-                       buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
-                                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+                       buttons=buttons)
+        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)
@@ -811,11 +819,16 @@
             return False
 
         if eset.is_modified():
+            buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                       gtk.STOCK_NO, gtk.RESPONSE_NO,
+                       gtk.STOCK_YES, gtk.RESPONSE_YES)
             dlg = miscwidgets.YesNoDialog(
                 title=_("Save Changes?"), parent=self,
-                buttons=(gtk.STOCK_YES, gtk.RESPONSE_YES,
-                         gtk.STOCK_NO, gtk.RESPONSE_NO,
-                         gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+                buttons=buttons)
+            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()
@@ -1603,10 +1616,14 @@
         radio_name = "%s %s %s" % (eset.rthread.radio.VENDOR,
                                    eset.rthread.radio.MODEL,
                                    eset.rthread.radio.VARIANT)
+        buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                   gtk.STOCK_OK, gtk.RESPONSE_OK)
         d = gtk.Dialog(title=_("Select Columns"),
                        parent=self,
-                       buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
-                                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+                       buttons=buttons)
+        d.set_default_response(gtk.RESPONSE_OK)
+        d.set_alternative_button_order([gtk.RESPONSE_OK,
+                                        gtk.RESPONSE_CANCEL])
 
         vbox = gtk.VBox()
         vbox.show()
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)
@@ -288,12 +288,16 @@
 
     def __init__(self, features, memory, parent=None):
         self._memory = memory
+        buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                   gtk.STOCK_OK, gtk.RESPONSE_OK)
         gtk.Dialog.__init__(self,
                             title="Memory Properties",
                             flags=gtk.DIALOG_MODAL,
                             parent=parent,
-                            buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
-                                     gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+                            buttons=buttons)
+        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
@@ -57,6 +57,7 @@
 class ValueErrorDialog(gtk.MessageDialog):
     def __init__(self, exception, **args):
         gtk.MessageDialog.__init__(self, buttons=gtk.BUTTONS_OK, **args)
+        self.set_default_response(gtk.RESPONSE_OK)
         self.set_property("text", _("Invalid value for this field"))
         self.format_secondary_text(str(exception))
 
@@ -1471,20 +1472,27 @@
             loc, filled = store.get(iter,
                                     self.col(_("Loc")), self.col("_filled"))
             if filled and not always:
+                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 = miscwidgets.YesNoDialog(title=_("Overwrite?"),
-                                            buttons=(gtk.STOCK_YES, 1,
-                                                     gtk.STOCK_NO, 2,
-                                                     gtk.STOCK_CANCEL, 3,
-                                                     "All", 4))
+                                            parent=None,
+                                            buttons=buttons)
+                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
 
@@ -1502,16 +1510,20 @@
                 errs = [x for x in msgs
                         if isinstance(x, chirp_common.ValidationError)]
                 if errs:
+                    buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                               gtk.STOCK_OK, gtk.RESPONSE_OK)
                     d = miscwidgets.YesNoDialog(title=_("Incompatible Memory"),
-                                                buttons=(gtk.STOCK_OK, 1,
-                                                         gtk.STOCK_CANCEL, 2))
+                                                buttons=buttons)
+                    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,9 +603,13 @@
 
 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._label = gtk.Label("")
+        self._label.set_alignment(0.0, 0.5)
         self._label.show()
 
         # pylint: disable-msg=E1101
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
@@ -26,10 +26,11 @@
 
 class ShiftDialog(gtk.Dialog):
     def __init__(self, rthread, parent=None):
+        buttons = (gtk.STOCK_CLOSE, gtk.RESPONSE_OK)
         gtk.Dialog.__init__(self,
                             title=_("Shift"),
-                            buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_OK))
-
+                            buttons=buttons)
+        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