More hildonizing work
[gonvert] / src / gonvert_glade.py
index bad217c..6dbb51d 100755 (executable)
@@ -1,11 +1,25 @@
 #!/usr/bin/env python
 # -*- coding: UTF8 -*-
 
+"""
+@todo Look into using two columns for displaying the value, split by the
+decimal place.  The left one would be right aligned and the right would be left
+aligned (only if not in exponential notation
+OR display everything in engineering notation
+
+@tood Add a unit description dialog for when hildonized
+
+@todo Add support for custom units
+
+@todo Add support for compound units
+"""
+
 import os
 import pickle
 import gettext
 import logging
 
+import pango
 import gobject
 import gtk
 import gtk.glade
@@ -18,7 +32,7 @@ import unit_data
 
 _moduleLogger = logging.getLogger("gonvert_glade")
 PROFILE_STARTUP = False
-FORCE_HILDON_LIKE = True
+FORCE_HILDON_LIKE = False
 
 gettext.bindtextdomain('gonvert', '/usr/share/locale')
 gettext.textdomain('gonvert')
@@ -39,6 +53,10 @@ class Gonvert(object):
                '/usr/lib/gonvert/gonvert.glade',
        ]
 
+       UNITS_NAME_IDX = 0
+       UNITS_VALUE_IDX = 1
+       UNITS_SYMBOL_IDX = 2
+
        def __init__(self):
                self._unitDataInCategory = None
                self._unit_sort_direction = False
@@ -68,6 +86,12 @@ class Gonvert(object):
                self._mainWindow = widgets.get_widget('mainWindow')
                self._app = hildonize.get_app_class()()
                self._mainWindow = hildonize.hildonize_window(self._app, self._mainWindow)
+               for scrollingWidgetName in (
+                       "unitsViewScrolledWindow",
+               ):
+                       scrollingWidget = widgets.get_widget(scrollingWidgetName)
+                       assert scrollingWidget is not None, scrollingWidgetName
+                       hildonize.hildonize_scrollwindow_with_viewport(scrollingWidget)
 
                change_menu_label(widgets, 'fileMenuItem', _('File'))
                change_menu_label(widgets, 'exitMenuItem', _('Exit'))
@@ -117,29 +141,41 @@ class Gonvert(object):
 
                #insert a self._categoryColumnumn into the units list even though the heading will not be seen
                renderer = gtk.CellRendererText()
+               renderer.set_property("ellipsize", pango.ELLIPSIZE_END)
+               renderer.set_property("width-chars", len("grams per cubic cm"))
                hildonize.set_cell_thumb_selectable(renderer)
-               self._unitNameColumn = gtk.TreeViewColumn(_('Unit Name'), renderer)
+               self._unitNameColumn = gtk.TreeViewColumn(_('Name'), renderer)
                self._unitNameColumn.set_property('resizable', 1)
-               self._unitNameColumn.add_attribute(renderer, 'text', 0)
+               self._unitNameColumn.add_attribute(renderer, 'text', self.UNITS_NAME_IDX)
                self._unitNameColumn.set_clickable(True)
                self._unitNameColumn.connect("clicked", self._on_click_unit_column)
                self._unitsView.append_column(self._unitNameColumn)
 
-               self._unitValueColumn = gtk.TreeViewColumn(_('Value'), renderer)
-               self._unitValueColumn.set_property('resizable', 1)
-               self._unitValueColumn.add_attribute(renderer, 'text', 1)
-               self._unitValueColumn.set_clickable(True)
-               self._unitValueColumn.connect("clicked", self._on_click_unit_column)
-               self._unitsView.append_column(self._unitValueColumn)
-
+               renderer = gtk.CellRendererText()
+               renderer.set_property("ellipsize", pango.ELLIPSIZE_END)
+               renderer.set_property("width-chars", len("G ohm"))
+               hildonize.set_cell_thumb_selectable(renderer)
                self._unitSymbolColumn = gtk.TreeViewColumn(_('Units'), renderer)
                self._unitSymbolColumn.set_property('resizable', 1)
-               self._unitSymbolColumn.add_attribute(renderer, 'text', 2)
+               self._unitSymbolColumn.add_attribute(renderer, 'text', self.UNITS_SYMBOL_IDX)
                self._unitSymbolColumn.set_clickable(True)
                self._unitSymbolColumn.connect("clicked", self._on_click_unit_column)
                self._unitsView.append_column(self._unitSymbolColumn)
 
-               self._unitModel = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
+               renderer = gtk.CellRendererText()
+               hildonize.set_cell_thumb_selectable(renderer)
+               self._unitValueColumn = gtk.TreeViewColumn(_('Value'), renderer)
+               self._unitValueColumn.set_property('resizable', 1)
+               self._unitValueColumn.add_attribute(renderer, 'text', self.UNITS_VALUE_IDX)
+               self._unitValueColumn.set_clickable(True)
+               self._unitValueColumn.connect("clicked", self._on_click_unit_column)
+               self._unitsView.append_column(self._unitValueColumn)
+
+               self._unitModel = gtk.ListStore(
+                       gobject.TYPE_STRING, # UNITS_NAME_IDX
+                       gobject.TYPE_STRING, # UNITS_VALUE_IDX
+                       gobject.TYPE_STRING, # UNITS_SYMBOL_IDX
+               )
                self._sortedUnitModel = gtk.TreeModelSort(self._unitModel)
                columns = self._get_column_sort_stuff()
                for columnIndex, (column, sortDirection, col_cmp) in enumerate(columns):
@@ -191,7 +227,7 @@ class Gonvert(object):
                        replacementButtons
                )
                if not hildonize.IS_HILDON_SUPPORTED:
-                       _moduleLogger.warning("No hildonization support")
+                       _moduleLogger.info("No hildonization support")
 
                hildonize.set_application_title(
                        self._mainWindow, "%s - Unit Conversion Utility" % constants.__pretty_app_name__
@@ -586,10 +622,14 @@ class Gonvert(object):
                        selected_unit = selected.get_value(iter, 0)
                        unit_spec = self._unitDataInCategory[selected_unit]
 
+                       showSymbol = False
+
                        if self._unitName.get_text() != selected_unit:
                                self._previousUnitName.set_text(self._unitName.get_text())
                                self._previousUnitValue.set_text(self._unitValue.get_text())
-                               self._previousUnitSymbol.set_text(self._unitSymbol.get())
+                               self._previousUnitSymbol.set_text(self._unitSymbol.get_text())
+                               if self._unitSymbol.get_text():
+                                       showSymbol = True
 
                        self._unitName.set_text(selected_unit)
                        self._unitValue.set_text(selected.get_value(iter, 1))
@@ -597,9 +637,16 @@ class Gonvert(object):
                        buffer.set_text(unit_spec[2])
                        self._unitSymbol.set_text(unit_spec[1]) # put units into label text
                        if unit_spec[1]:
+                               showSymbol = True
+                       else:
+                               showSymbol = False
+
+                       if showSymbol:
                                self._unitSymbol.show()
+                               self._previousUnitSymbol.show()
                        else:
                                self._unitSymbol.hide()
+                               self._previousUnitSymbol.hide()
 
                        if self._unitValue.get_text() == '':
                                if self._selectedCategoryName == "Computer Numbers":
@@ -684,7 +731,16 @@ class Gonvert(object):
                        gtk.main_quit()
 
 
-def main():
+def run_gonvert():
+       gtk.gdk.threads_init()
+       if hildonize.IS_HILDON_SUPPORTED:
+               gtk.set_application_name(constants.__pretty_app_name__)
+       handle = Gonvert()
+       if not PROFILE_STARTUP:
+               gtk.main()
+
+
+if __name__ == "__main__":
        logging.basicConfig(level = logging.DEBUG)
        try:
                os.makedirs(constants._data_path_)
@@ -692,10 +748,4 @@ def main():
                if e.errno != 17:
                        raise
 
-       gonvert = Gonvert()
-       if not PROFILE_STARTUP:
-               gtk.main()
-
-
-if __name__ == "__main__":
-       main()
+       run_gonvert()