# HG changeset patch
# User K. Arvanitis <kosta@alumni.uvic.ca>
# Date 1422776304 28800
# Parent  511bcfb8df4f6ab9d182ad58d7cdf32a3193a0d8
[PATCH] Updated Memory Edit View #3
Updated column picker dialog to utilize treeview.  Updated spacing on
generic yesno dialogs.  Provides overall better readability.

Feature #2273
diff -r 511bcfb8df4f -r 692c2f783c89 chirpui/mainapp.py
--- a/chirpui/mainapp.py Sat Jan 31 12:27:19 2015 -0800
+++ b/chirpui/mainapp.py Sat Jan 31 23:38:24 2015 -0800
@@ -725,12 +725,13 @@
             return False
 
         if eset.is_modified():
-            dlg = miscwidgets.YesNoDialog(title=_("Save Changes?"),
+            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))
-            dlg.set_text(_("File is modified, save changes before closing?"))
+            dlg.set_text(_("Save changes to %s?") % eset.filename)
+
             res = dlg.run()
             dlg.destroy()
 
@@ -1220,27 +1221,38 @@
         radio_name = "%s %s %s" % (eset.rthread.radio.VENDOR,
                                    eset.rthread.radio.MODEL,
                                    eset.rthread.radio.VARIANT)
-        d = gtk.Dialog(title=_("Select Columns"),
-                       parent=self,
-                       buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
-                                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+        dlg = gtk.Dialog(title=_("Choose Columns"),
+                            parent=self,
+                            buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
+                                    gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+        dlg.set_size_request(-1, 300)
+        dlg.set_resizable(False)
 
-        vbox = gtk.VBox()
-        vbox.show()
+        store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_INT)
+        view = gtk.TreeView(store)
+        view.set_headers_visible(False)
+        rend = gtk.CellRendererToggle()
+        def toggle(render, path, column):
+            store[path][column] = not store[path][column]
+        rend.connect("toggled", toggle, 1)
+        col = gtk.TreeViewColumn(None, rend, active=1)
+        view.append_column(col)
+        rend = gtk.CellRendererText()
+        col = gtk.TreeViewColumn(None, rend, text=0)
+        view.append_column(col)
+        view.show()
+
         sw = gtk.ScrolledWindow()
         sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
-        sw.add_with_viewport(vbox)
+        sw.add_with_viewport(view)
         sw.show()
-        d.vbox.pack_start(sw, 1, 1, 1)
-        d.set_size_request(-1, 300)
-        d.set_resizable(False)
+        dlg.vbox.pack_start(sw, 1, 1, 1)
 
-        label = gtk.Label(_("Visible columns for {radio}").format(radio=radio_name))
+        label = gtk.Label(_("Select the visible columns for {radio}").format(radio=radio_name))
         label.show()
-        vbox.pack_start(label)
+        dlg.vbox.pack_start(label, 0, 0, 6)
 
-        fields = []
-        memedit = eset.get_current_editor() #.editors["memedit"]
+        memedit = eset.get_current_editor()
         unsupported = memedit.get_unsupported_columns()
         for colspec in memedit.cols:
             if colspec[0].startswith("_"):
@@ -1248,25 +1260,25 @@
             elif colspec[0] in unsupported:
                 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()
+            colnum = memedit.col(label)
+            visible = memedit.get_column_visible(colnum)
+            iter = store.append()
+            store.set(iter, 0, label, 1, visible, 2, colnum)
 
-        res = d.run()
-        selected_columns = []
+        res = dlg.run()
+
+        lst = []
         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())
+            def func(_store, path, iter):
+                label, visible, colnum = _store.get(iter, 0, 1, 2)
+                memedit.set_column_visible(colnum, visible)
+                if visible:
+                    lst.append(label)
+            store.foreach(func)
                                                
-        d.destroy()
+        dlg.destroy()
 
-        CONF.set(driver, ",".join(selected_columns), "memedit_columns")
+        CONF.set(driver, ",".join(lst), "memedit_columns")
 
     def do_hide_unused(self, action):
         eset = self.get_current_editorset()
@@ -1469,6 +1481,7 @@
     </menu>
     <menu action="view">
       <menuitem action="columns"/>
+      <separator/>
       <menuitem action="hide_unused"/>
       <menuitem action="no_smart_tmode"/>
       <menu action="viewdeveloper">
@@ -1476,6 +1489,7 @@
         <menuitem action="devdiffraw"/>
         <menuitem action="devdifftab"/>
       </menu>
+      <separator/>
       <menuitem action="language"/>
     </menu>
     <menu action="radio" name="radio">
@@ -1532,7 +1546,7 @@
             ('exchange', None, _("E_xchange"), "<Control><Shift>x", None, self.mh),
             ('properties', None, _("P_roperties"), None, None, self.mh),
             ('view', None, _("_View"), None, None, self.mh),
-            ('columns', None, _("Columns"), None, None, self.mh),
+            ('columns', None, _("C_hoose Columns..."), None, None, self.mh),
             ('viewdeveloper', None, _("Developer"), None, None, self.mh),
             ('devshowraw', None, _('Show raw memory'), "<Control><Shift>r", None, self.mh),
             ('devdiffraw', None, _("Diff raw memories"), "<Control><Shift>d", None, self.mh),
diff -r 511bcfb8df4f -r 692c2f783c89 chirpui/memedit.py
--- a/chirpui/memedit.py Sat Jan 31 12:27:19 2015 -0800
+++ b/chirpui/memedit.py Sat Jan 31 23:38:24 2015 -0800
@@ -1448,7 +1448,7 @@
             loc, filled = store.get(iter,
                                     self.col(_("Loc")), self.col("_filled"))
             if filled and not always:
-                d = miscwidgets.YesNoDialog(title=_("Overwrite?"),
+                d = miscwidgets.YesNoDialog(title=_("Overwrite"),
                                             buttons=(gtk.STOCK_YES, 1,
                                                      gtk.STOCK_NO, 2,
                                                      gtk.STOCK_CANCEL, 3,
diff -r 511bcfb8df4f -r 692c2f783c89 chirpui/miscwidgets.py
--- a/chirpui/miscwidgets.py Sat Jan 31 12:27:19 2015 -0800
+++ b/chirpui/miscwidgets.py Sat Jan 31 23:38:24 2015 -0800
@@ -599,7 +599,7 @@
         self._label.show()
 
         # pylint: disable-msg=E1101
-        self.vbox.pack_start(self._label, 1, 1, 1)
+        self.vbox.pack_start(self._label, 1, 1, 6)
 
     def set_text(self, text):
         self._label.set_text(text)