X-Git-Url: http://git.maemo.org/git/?p=gonvert;a=blobdiff_plain;f=src%2Fgonvert_glade.py;h=6ea04815e25acce39478d5ce5e1fd2efa0b3b072;hp=f9676729f674a01906fa0a28e9a7e126b17b6bb2;hb=83944706904fb8dddf400ddf68b722b9d7568c37;hpb=f2c6bb106a57a43861584b290a950194754e3d34 diff --git a/src/gonvert_glade.py b/src/gonvert_glade.py index f967672..6ea0481 100755 --- a/src/gonvert_glade.py +++ b/src/gonvert_glade.py @@ -3,7 +3,6 @@ import os import pickle -import string import gettext import logging @@ -13,10 +12,13 @@ import gtk.glade import gtk.gdk import constants +import hildonize import unit_data _moduleLogger = logging.getLogger("gonvert_glade") +PROFILE_STARTUP = False +FORCE_HILDON_LIKE = True gettext.bindtextdomain('gonvert', '/usr/share/locale') gettext.textdomain('gonvert') @@ -47,7 +49,7 @@ class Gonvert(object): self._find_result = [] # empty find result list self._findIndex = 0 # default to find result number zero - self._selectedCategory = '' # preset to no selected category + self._selectedCategoryName = '' # preset to no selected category self._defaultUnitForCategory = {} # empty dictionary for later use #check to see if glade file is in current directory (user must be @@ -64,12 +66,13 @@ class Gonvert(object): return self._mainWindow = widgets.get_widget('mainWindow') + self._app = hildonize.get_app_class()() + self._mainWindow = hildonize.hildonize_window(self._app, self._mainWindow) change_menu_label(widgets, 'fileMenuItem', _('File')) change_menu_label(widgets, 'exitMenuItem', _('Exit')) change_menu_label(widgets, 'toolsMenuItem', _('Tools')) change_menu_label(widgets, 'clearSelectionMenuItem', _('Clear selections')) - change_menu_label(widgets, 'writeUnitsMenuItem', _('Write Units')) change_menu_label(widgets, 'helpMenuItem', _('Help')) change_menu_label(widgets, 'aboutMenuItem', _('About')) change_menu_label(widgets, 'findButton', _('Find')) @@ -82,18 +85,22 @@ class Gonvert(object): self._unitsView = widgets.get_widget('unitsView') self._unitsView.set_property('rules_hint', 1) self._unitsView_selection = self._unitsView.get_selection() + if hildonize.IS_HILDON_SUPPORTED or FORCE_HILDON_LIKE: + self._unitsView.set_headers_visible(False) self._unitName = widgets.get_widget('unitName') self._unitValue = widgets.get_widget('unitValue') self._previousUnitName = widgets.get_widget('previousUnitName') self._previousUnitValue = widgets.get_widget('previousUnitValue') - messagebox = widgets.get_widget('msgbox') - messageboxtext = widgets.get_widget('msgboxtext') + if hildonize.IS_HILDON_SUPPORTED or FORCE_HILDON_LIKE: + self._previousUnitName.get_parent().hide() self._unitSymbol = widgets.get_widget('unitSymbol') self._previousUnitSymbol = widgets.get_widget('previousUnitSymbol') self._unitDescription = widgets.get_widget('unitDescription') + if hildonize.IS_HILDON_SUPPORTED or FORCE_HILDON_LIKE: + self._unitDescription.get_parent().get_parent().hide() self._searchLayout = widgets.get_widget('searchLayout') self._searchLayout.hide() @@ -157,12 +164,10 @@ class Gonvert(object): "on_categoryView_select_row": self._on_click_category, "on_unitValue_changed": self._on_unit_value_changed, "on_previousUnitValue_changed": self._on_previous_unit_value_changed, - "on_writeUnitsMenuItem_activate": self._on_user_write_units, "on_findButton_clicked": self._on_find_activate, "on_findEntry_activated": self._on_find_activate, "on_findEntry_changed": self._on_findEntry_changed, "on_aboutMenuItem_activate": self._on_about_clicked, - "on_messagebox_ok_clicked": self.messagebox_ok_clicked, "on_clearSelectionMenuItem_activate": self._on_user_clear_selections, "on_unitsView_cursor_changed": self._on_click_unit, "on_shortlistcheck_toggled": self._on_shortlist_changed, @@ -191,14 +196,6 @@ class Gonvert(object): if 'size' in saved_window: a, b = saved_window['size'] self._mainWindow.resize(a, b) - else: - #Maximize if no previous size was found - #self._mainWindow.maximize() - pass - else: - #Maximize if no previous window.dat file was found - #self._mainWindow.maximize() - pass #Restore selections from previously saved settings if it exists and is valid. historical_catergory_found = False @@ -210,7 +207,7 @@ class Gonvert(object): #If the 'selected_unts' has been stored, then extract self._defaultUnitForCategory from selections. if 'selected_units' in selections: self._defaultUnitForCategory = selections['selected_units'] - #Make sure that the 'self._selectedCategory' has been stored. + #Make sure that the 'self._selectedCategoryName' has been stored. if 'selected_category' in selections: #Match an available category to the previously selected category. for counter in range(len(unit_data.UNIT_CATEGORIES)): @@ -235,16 +232,16 @@ class Gonvert(object): should therefore only be called when exiting the program. Update selections dictionary which consists of the following keys: - 'self._selectedCategory': full name of selected category + 'self._selectedCategoryName': full name of selected category 'self._defaultUnitForCategory': self._defaultUnitForCategory dictionary which contains: [categoryname: #1 displayed unit, #2 displayed unit] """ #Determine the contents of the selected category row selected, iter = self._categoryView.get_selection().get_selected() - self._selectedCategory = self._categoryModel.get_value(iter, 0) + self._selectedCategoryName = self._categoryModel.get_value(iter, 0) selections = { - 'selected_category': self._selectedCategory, + 'selected_category': self._selectedCategoryName, 'selected_units': self._defaultUnitForCategory } selectionsDatPath = "/".join((constants._data_path_, "selections.dat")) @@ -268,7 +265,7 @@ class Gonvert(object): def _find_first(self): assert len(self._find_result) == 0 assert self._findIndex == 0 - findString = string.lower(string.strip(self._findEntry.get_text())) + findString = self._findEntry.get_text().strip().lower() if not findString: return @@ -284,7 +281,7 @@ class Gonvert(object): assert 0 < len(self._find_result) #check if next find is in a new category (prevent category changes when unnecessary - if self._selectedCategory != self._find_result[self._findIndex][0]: + if self._selectedCategoryName != self._find_result[self._findIndex][0]: self._categoryView.set_cursor( self._find_result[self._findIndex][2], self._categoryColumn, False ) @@ -294,18 +291,6 @@ class Gonvert(object): ) def _find_next(self): - """ - check if 'new find' or 'last find' or 'next-find' - - new-find = run the find algorithm which also selects the first found unit - = self._findIndex = 0 and self._find_result = [] - - last-find = restart from top again - = self._findIndex = len(self._find_result) - - next-find = continue to next found location - = self._findIndex = 0 and len(self._find_result)>0 - """ if len(self._find_result) == 0: self._find_first() else: @@ -324,18 +309,6 @@ class Gonvert(object): ) def _find_previous(self): - """ - check if 'new find' or 'last find' or 'next-find' - - new-find = run the find algorithm which also selects the first found unit - = self._findIndex = 0 and self._find_result = [] - - last-find = restart from top again - = self._findIndex = len(self._find_result) - - next-find = continue to next found location - = self._findIndex = 0 and len(self._find_result)>0 - """ if len(self._find_result) == 0: self._find_first() else: @@ -371,7 +344,7 @@ class Gonvert(object): def _value_model_cmp(self, sortedModel, leftItr, rightItr): #special sorting exceptions for ascii values (instead of float values) - if self._selectedCategory == "Computer Numbers": + if self._selectedCategoryName == "Computer Numbers": leftValue = self._unitModel.get_value(leftItr, 1) rightValue = self._unitModel.get_value(rightItr, 1) else: @@ -391,12 +364,12 @@ class Gonvert(object): return columns def _switch_category(self, category): - self._selectedCategory = category - self._unitDataInCategory = unit_data.UNIT_DESCRIPTIONS[self._selectedCategory] + self._selectedCategoryName = category + self._unitDataInCategory = unit_data.UNIT_DESCRIPTIONS[self._selectedCategoryName] #Fill up the units descriptions and clear the value cells self._clear_visible_unit_data() - for key in unit_data.get_units(self._selectedCategory): + for key in unit_data.get_units(self._selectedCategoryName): iter = self._unitModel.append() self._unitModel.set(iter, 0, key, 1, '', 2, self._unitDataInCategory[key][1]) self._sortedUnitModel.sort_column_changed() @@ -418,25 +391,32 @@ class Gonvert(object): def _select_default_unit(self): # Restore the previous historical settings of previously selected units # in this newly selected category - if self._selectedCategory in self._defaultUnitForCategory: - units = unit_data.get_units(self._selectedCategory) - - #Restore oldest selection first. - if self._defaultUnitForCategory[self._selectedCategory][1]: - unitIndex = units.index(self._defaultUnitForCategory[self._selectedCategory][1]) - self._unitsView.set_cursor(unitIndex, self._unitNameColumn, True) - - #Restore newest selection second. - if self._defaultUnitForCategory[self._selectedCategory][0]: - unitIndex = units.index(self._defaultUnitForCategory[self._selectedCategory][0]) - self._unitsView.set_cursor(unitIndex, self._unitNameColumn, True) + defaultPrimary = unit_data.get_base_unit(self._selectedCategoryName) + defaultSecondary = "" + if self._selectedCategoryName in self._defaultUnitForCategory: + if self._defaultUnitForCategory[self._selectedCategoryName][0]: + defaultPrimary = self._defaultUnitForCategory[self._selectedCategoryName][0] + if self._defaultUnitForCategory[self._selectedCategoryName][1]: + defaultSecondary = self._defaultUnitForCategory[self._selectedCategoryName][1] + + units = unit_data.get_units(self._selectedCategoryName) + + #Restore oldest selection first. + if defaultPrimary: + unitIndex = units.index(defaultPrimary) + self._unitsView.set_cursor(unitIndex, self._unitNameColumn, True) + + #Restore newest selection second. + if defaultSecondary: + unitIndex = units.index(defaultSecondary) + self._unitsView.set_cursor(unitIndex, self._unitNameColumn, True) # select the text so user can start typing right away self._unitValue.grab_focus() self._unitValue.select_region(0, -1) def _sanitize_value(self, userEntry): - if self._selectedCategory == "Computer Numbers": + if self._selectedCategoryName == "Computer Numbers": if userEntry == '': value = '0' else: @@ -519,7 +499,7 @@ class Gonvert(object): except Exception: _moduleLogger.exception("") - def _on_click_unit_column(self, *args): + def _on_click_unit_column(self, col): """ Sort the contents of the col when the user clicks on the title. """ @@ -550,6 +530,9 @@ class Gonvert(object): def _on_click_category(self, *args): try: selected, iter = self._categoryView.get_selection().get_selected() + if iter is None: + # User is typing in an invalid string, not selecting any category + return selectedCategory = self._categoryModel.get_value(iter, 0) self._switch_category(selectedCategory) except Exception: @@ -571,14 +554,18 @@ class Gonvert(object): buffer = self._unitDescription.get_buffer() buffer.set_text(unit_spec[2]) self._unitSymbol.set_text(unit_spec[1]) # put units into label text + if unit_spec[1]: + self._unitSymbol.show() + else: + self._unitSymbol.hide() if self._unitValue.get_text() == '': - if self._selectedCategory == "Computer Numbers": + if self._selectedCategoryName == "Computer Numbers": self._unitValue.set_text("0") else: self._unitValue.set_text("0.0") - self._defaultUnitForCategory[self._selectedCategory] = [ + self._defaultUnitForCategory[self._selectedCategoryName] = [ self._unitName.get_text(), self._previousUnitName.get_text() ] @@ -588,99 +575,52 @@ class Gonvert(object): except Exception: _moduleLogger.exception("") - def _on_unit_value_changed(self, a): - if self._unitName.get_text() == '': - return - - # determine if value to be calculated is empty - value = self._sanitize_value(self._unitValue.get_text()) - - func, arg = self._unitDataInCategory[self._unitName.get_text()][0] #retrieve the conversion function and value from the selected unit - base = apply(func.to_base, (value, arg, )) #determine the base unit value - - keys = self._unitDataInCategory.keys() - keys.sort() - del keys[0] - row = 0 - - #point to the first row - iter = self._unitModel.get_iter_first() + def _on_unit_value_changed(self, *args): + try: + if self._unitName.get_text() == '': + return + if not self._unitValue.is_focus(): + return - while iter: - #get the formula from the name at the row - func, arg = self._unitDataInCategory[self._unitModel.get_value(iter, 0)][0] + #retrieve the conversion function and value from the selected unit + value = self._sanitize_value(self._unitValue.get_text()) + func, arg = self._unitDataInCategory[self._unitName.get_text()][0] + base = func.to_base(value, arg) - #set the result in the value column - self._unitModel.set(iter, 1, str(apply(func.from_base, (base, arg, )))) + #point to the first row + for row in self._unitModel: + func, arg = self._unitDataInCategory[row[0]][0] + row[1] = str(func.from_base(base, arg)) + + # Update the secondary unit entry + if self._previousUnitName.get_text() != '': + func, arg = self._unitDataInCategory[self._previousUnitName.get_text()][0] + self._previousUnitValue.set_text(str(func.from_base(base, arg, ))) + except Exception: + _moduleLogger.exception("") - #point to the next row in the self._unitModel - iter = self._unitModel.iter_next(iter) + def _on_previous_unit_value_changed(self, *args): + try: + if self._previousUnitName.get_text() == '': + return + if not self._previousUnitValue.is_focus(): + return - # if the second row has a unit then update its value - if self._previousUnitName.get_text() != '': + #retrieve the conversion function and value from the selected unit + value = self._sanitize_value(self._previousUnitValue.get_text()) func, arg = self._unitDataInCategory[self._previousUnitName.get_text()][0] - self._previousUnitValue.set_text(str(apply(func.from_base, (base, arg, )))) - - def _on_previous_unit_value_changed(self, a): - value = self._sanitize_value(self._previousUnitValue.get_text()) - - if self._previousUnitName.get_text() != '': - func, arg = self._unitDataInCategory[self._previousUnitName.get_text()][0] #retrieve the conversion function and value from the selected unit - base = apply(func.to_base, (value, arg, )) #determine the base unit value - - keys = self._unitDataInCategory.keys() - keys.sort() - del keys[0] - row = 0 + base = func.to_base(value, arg) #point to the first row - iter = self._unitModel.get_iter_first() - - while iter: - #get the formula from the name at the row - func, arg = self._unitDataInCategory[self._unitModel.get_value(iter, 0)][0] - - #set the result in the value column - self._unitModel.set(iter, 1, str(apply(func.from_base, (base, arg, )))) - - #point to the next row in the self._unitModel - iter = self._unitModel.iter_next(iter) - - # if the second row has a unit then update its value - if self._unitName.get_text() != '': - func, arg = self._unitDataInCategory[self._unitName.get_text()][0] - self._unitValue.set_text(str(apply(func.from_base, (base, arg, )))) - - def messagebox_ok_clicked(self, a): - messagebox.hide() - - def _on_user_write_units(self, a): - ''"Write the list of categories and units to stdout for documentation purposes.''" - messagebox_model = gtk.TextBuffer(None) - messageboxtext.set_buffer(messagebox_model) - messagebox_model.insert_at_cursor(_(u'The units are being written to stdout. You can capture this printout by starting gonvert from the command line as follows: \n$ gonvert > file.txt'), -1) - messagebox.show() - while gtk.events_pending(): - gtk.mainiteration(False) - - total_categories = 0 - total_units = 0 - print 'gonvert-%s%s' % ( - constants.__version__, - _(u' - Unit Conversion Utility - Convertible units listing: ') - ) - for category_key in unit_data.UNIT_CATEGORIES: - total_categories = total_categories + 1 - print category_key, ": " - self._unitDataInCategory = unit_data.UNIT_DESCRIPTIONS[category_key] - unit_keys = self._unitDataInCategory.keys() - unit_keys.sort() - del unit_keys[0] # do not display .base_unit description key - for unit_key in unit_keys: - total_units = total_units + 1 - print "\t", unit_key - print total_categories, ' categories' - print total_units, ' units' + for row in self._unitModel: + func, arg = self._unitDataInCategory[row[0]][0] + row[1] = str(func.from_base(base, arg)) + + # Update the primary unit entry + func, arg = self._unitDataInCategory[self._unitName.get_text()][0] + self._unitValue.set_text(str(func.from_base(base, arg, ))) + except Exception: + _moduleLogger.exception("") def _on_about_clicked(self, a): dlg = gtk.AboutDialog() @@ -711,7 +651,8 @@ def main(): raise gonvert = Gonvert() - gtk.main() + if not PROFILE_STARTUP: + gtk.main() if __name__ == "__main__":