2014-02-26  Bernhard Reiter  <ockham@raz.or.at>

        * Fix a number of regressions in html_exporter.py.
        * Update ChangeLog.

2014-02-25  Bernhard Reiter  <ockham@raz.or.at>

        * Remove redundant newlines from error message.
        * Update *.po[t] files and add/fix some German and Austrian strings.
        * Update ChangeLog.
        * Fix a translation bug in de_DE.po.
        * Remove *.mo files that ware accidentally added to git.

2014-02-24  Bernhard Reiter  <ockham@raz.or.at>

        * Update gourmet.desktop.in.
        * Shorten years listing in copyright notice.
        * Add Flattr donations button to About dialog.

2014-02-23  Bernhard Reiter  <ockham@raz.or.at>

        * Fix loading of FAQ from recipe card and shopping UI.
        * Fix web browser invocation from About dialog under Windows.
        * Remove obsolete exception clause.
        * Under Windows, use Adobe Reader to print reportlab created PDF.

2014-02-22  Bernhard Reiter  <ockham@raz.or.at>

        * Simplify loading of LICENSE file into About dialog.
        * Add donations text and buttons to the About dialog.
        * Update ChangeLog.

2014-02-20  Bernhard Reiter  <ockham@raz.or.at>

        * Add 2014 to copyright years.

2014-02-18  Bernhard Reiter  <ockham@raz.or.at>

        * Some gourmet/backends/db.py cleanup.
        * When connecting to a MySQL database, force UTF-8 charset.

2014-02-09  Bernhard Reiter  <ockham@raz.or.at>

        * Replace deprecated PoolListener by @event.listens_for decorator.

2014-02-08  Bernhard Reiter  <ockham@raz.or.at>

        * Remove \r escape sequence from sl.po.
        * Change Yield unit accelerator in batch editor, update po files.
        * Fix a translation bug in nl.po.
        * Fix bug in Dutch translation.

2014-01-23  Bernhard Reiter  <ockham@raz.or.at>

        * UTF-8-decode ingkey in shopping_key_editor_plugin.

2014-01-21  Bernhard Reiter  <ockham@raz.or.at>

        * Fix a regression introduced by the last commit.

2014-01-20  Bernhard Reiter  <ockham@raz.or.at>

        * When de-activating Browse Recipes plugin, remove its tab.

2014-01-12  Bernhard Reiter  <ockham@raz.or.at>

        * Fix a typo.

2014-01-11  Lyra  <lyra2108@gmail.com>

        * FIX: Create a shopping list even if one entry hasn't an amount

2014-01-06  Bernhard Reiter  <ockham@raz.or.at>

        * Some cleanup.
        * Clean up gourmet/exporters/exporter.py a bit.
        * Update MANIFEST.in.
        * Remove tools/ directory.
        * Remove an obsolete reportlab version check and related code.

2014-01-05  Thomas M. Hinkle <tmhinkle@gmail.com>

        * Hackishly remove indents needed after if statement to workaround build error.
        * Allow null units to be looked up. Otherwise, we can never get conversions for things like "3 eggs."
        * Remove GourmetWindows.pyw

2014-01-05  Bernhard Reiter  <ockham@raz.or.at>

        * Revert "Fix stupid mistake."

2014-01-04  Bernhard Reiter  <ockham@raz.or.at>

        * Check if active_plugin is really there.

2014-01-03  Bernhard Reiter  <ockham@raz.or.at>

        * Add myself as maintainer in setup.py.
        * Add 2012, 2013 to copyright years.
        * Add comment to setup.py.
        * Remove obsolete README.windows.md.
        * Fix stupid mistake.
        * Fix a typo in INSTALL.md.
        * Update TODO, rename to TODO.md.
        * Update CODING.
        * Add more Windows building instructions to INSTALL.md.
        * Disable the PDFPrintPlugin under Windows as poppler doesn't work there.
        * Use Python logging instead of printing a traceback.
        * Migrate from py2exe to cx_Freeze.
        * Set data_dir correctly if Gourmet is frozen.
        * Update IPython requirement in INSTALL.md.
        * Update ChangelLog.

2014-01-02  Bernhard Reiter  <ockham@raz.or.at>

        * Remove NSIS related files.

2014-01-01  Bernhard Reiter  <ockham@raz.or.at>

        * Replace PIL by Pillow requirement.
        * Move *.gourmet-plugin.in files to gourmet/plugins/.
        * Remove an obsolete line.
        * Replace pywin32 requirement by a ctypes function call.
        * Small whitespace fix.
        * Remove missing signal handlers.
        * Bump version to 0.17.0.
        * Fix a translation bug in po/de.po.

2013-12-15  Bernhard Reiter  <ockham@raz.or.at>

        * Add reportlab packages to setup.py so py2exe includes them.

2013-11-19  Bernhard Reiter  <ockham@raz.or.at>

        * De-dupe AboutDotComWebParser class.
        * Move duplicate code into a common base class member.
        * Remove some redundant code.
        * Remove obsolete KeyManagerOldSchool class.
        * Remove duplicate code from gourmet/recipeManager.py.
        * Remove duplicate file gourmet/convertGui.py.

2013-11-15  Bernhard Reiter  <ockham@raz.or.at>

        * Fix wildcard imports.

2013-11-13  Bernhard Reiter  <ockham@raz.or.at>

        * Fix another PIL import.

2013-11-02  Joe Sapp  <joe@babyjoe>

        * Remove "Application" from desktop entry

2013-01-11  Bernhard Reiter  <ockham@raz.or.at>

        * s/options/args/ to make bin/gourmet launch.

2013-01-11  Jeff Raber  <jeff.raber@gmail.com>

        * Replace deprecated optparse with argparse, per issue 683 [1]

2013-10-12  Bernhard Reiter  <ockham@raz.or.at>

        * Fix a typo that broke the nutritional information plugin DB upgrade.

2013-10-11  Bernhard Reiter  <ockham@raz.or.at>

        * Remove some more metakit remnants.
        * Update po[t] files.
        * Remove legacy_db (i.e. metakit) stuff.

2013-10-10  Bernhard Reiter  <ockham@raz.or.at>

        * Clean up recindex.py.
        * Clean up GourmetRecipeManager.py.
        * Clean up reccard.py

2013-09-30  Bernhard Reiter  <ockham@raz.or.at>

        * In PDF export, print title only once (as heading).

2013-09-20  Bernhard Reiter  <ockham@raz.or.at>

        * Only set_current_folder if get_user_special_dir(USER_DIRECTORY_PICTURES) isn't None.

2013-09-09  Bernhard Reiter  <ockham@raz.or.at>

        * Update *.po[t] files.
        * Fix batch editing of categories.
        * Translate attributes in batch editor's confirmation message box.
        * In Batch Editor, replace "Servings" by "Yield" and "Yield Unit" rows.
        * Small fix to ui/catalog/README.
        * Remove some obsolete code checking for old gtk versions.
        * Remove some spurious imports from recindex.py.

2013-09-06  Bernhard Reiter  <ockham@raz.or.at>

        * s/ui/ui_string/ fix in a couple of files.

2013-09-01  Bernhard Reiter  <ockham@raz.or.at>

        * Remove some spurious Image (i.e. PIL) imports.

2013-08-30  Bernhard Reiter  <ockham@raz.or.at>

        * Update Changelog.

2013-08-29  Bernhard Reiter  <ockham@raz.or.at>

    * Update version to 0.16.1 in gourmet/version.py.
    * Update MANIFEST.in.
    * Update translation files.

2013-08-28  Bernhard Reiter  <ockham@raz.or.at>

    * Little schema.org parser improvement.
    * Properly raise an exception in print_plugin.py.
    * Fix a translation bug in po/de_AT.po.
    * Update allrecipes.com test recipe URL.
      In (commented out and still dysfunctional part of) testImporters.py.

2013-08-27  Bernhard Reiter  <ockham@raz.or.at>

    * Drop Python version 2.6 in INSTALL.md.
    * Add PYTHON_ARGCOMPLETE_OK string to bin/gourmet.
    * Remove some obsolete imports from gourmet/importers/html_importer.py.
    * Fix testImporters.py.
    * Merge pull request #724 from sappjw/master
      Replace more 'Image' imports with Pillow-compatible blocks
    * Fix allrecipes.com importer, by extending our newly created schema_org_parser.
      Also add a test gourmet/test/test_allrecipes_com_plugin.py which is capable of
      testing the importer offline, using gourmet/test/recipe_files/allrecipes_com.html.
      (Trying to integrate such an offline test into the existing, commented-out
      allrecipes.com test in gourmet/test/testImporters.py proved a nightmare as
      the importer code is tightly interwoven with the web page download and interactive
      importer functions.)
      Fixes #261
    * Make ica.se importer aware of a recipe's yields property.
    * Scrap more schema.org/Recipe fields.
    * Remove obsolete gtk import from gourmet/importers/generic_recipe_parser.py.
    * Have ica_se tests check for presence of category field.
    * Factor schema.org parsing out of ica_se_plugin.py into a newly created schema_org_parser.py.
    * Have gourmet/test/test_ica_se_plugin.py also test for cooktime parsing.
    * Small fix for more a expressive test result.
    * Small fix, mainly for future BeautifulSoup4 compliance.
    * Move foodnetwork and ica.se importer tests to gourmet/test/.

2013-08-27  Joe Sapp  <joe@babyjoe>

    * Replace more 'Image' imports with Pillow-compatible blocks

2013-08-25  Bernhard Reiter  <ockham@raz.or.at>

    * Fix testImporters.py.
      Among other things, use a temporary in-memory SQLite database for testing.

2013-08-24  Bernhard Reiter  <ockham@raz.or.at>

    * Truncate Source field in PDF export.
      Fixes #721

2013-08-10  Bernhard Reiter  <ockham@raz.or.at>

    * One more string exception to fix.

2013-08-09  Bernhard Reiter  <ockham@raz.or.at>

    * s/thinkle.github.com/thinkle.github.io/

2013-08-06  Bernhard Reiter  <ockham@raz.or.at>

    * Merge pull request #723 from gyp/master
      importing gettext in exportManager as it has localized strings

2013-08-06  Peter Gyongyosi  <gyp@balabit.hu>

    * importing gettext in exportManager as it has localized strings
      This fixes https://bugs.launchpad.net/gourmet/+bug/1157969

2013-08-04  Bernhard Reiter  <ockham@raz.or.at>

    * Add INSTALL.md.

2013-07-30  Bernhard Reiter  <ockham@raz.or.at>

    * Add db upgrade logic for the fix introduced with the previous commit.
      Fixes #711.
    * Merge pull request #722 from rleibman/master
      Fixing issue with mysql, VARCHAR requires a length

2013-07-30  Roberto Leibman  <roberto@leibmanland.com>

    * Fixing issue with mysql, VARCHAR requires a length, I figure 255 is probably good enough

2013-06-01  Bernhard Reiter  <ockham@raz.or.at>

    * Remove obsolete tools/upgrade_pre_script.py.
    * Remove hardwired sys.path.append('/usr/share/gourmet') lines.

2013-05-27  Bernhard Reiter  <ockham@raz.or.at>

    * Additional fix for plugins/python_shell/ipython_view.py.
    * Fix interactive shell plugin to work with current IPython versions.
      Achieved by updating plugins/python_shell/ipython_view.py
      (which was taken from the Accerciser project)
      to the commit before Accerciser's Python3 migration [1],
      reverting their previous PyGI migration [2].
      [1] https://git.gnome.org/browse/accerciser/commit/?id=b9bb2f48eebbf9f21ca633b6ecd6a58d6befe04a
      [2] https://git.gnome.org/browse/accerciser/commit/?id=48b8c06d598f84943ab7a0af1259408b7409484d
    * Prepare plugins/python_shell/ipython_view.py for update.

2013-05-17  Bernhard Reiter  <ockham@raz.or.at>

    * Remove a bunch of unused imports.
    * Fix setup.py so it works on non-Windows platforms again.
    * Remove obsolete checks for PyGTK version < 2.8.
    * Remove obsolete gtk_extras/ThumbnailGenerator.py.
    * Remove obsolete gtk_extras/chooserNotebook.py.
    * Remove obsolete gtk_extras/fauxDruid.py.
    * Remove obsolete gtk_extras/FauxActionGroups.py.

2013-05-07  jens persson  <jens@persson.cx>

    * Buglet found with tests and som whitespace triming in foodnetwork plugin
    * Add tests for foodnetwork plugin
    * Fix buglet discovered due to tests
    * Add tests for ica.se plugin

2013-04-20  Bernhard Reiter  <ockham@raz.or.at>

    * Merge pull request #715 from MrShark/master
      An importer for ica.se (Swedish storechain)

2013-04-11  jens persson  <jens@persson.cx>

    * First shot on an importer for ica.se

2013-04-06  Bernhard Reiter  <ockham@raz.or.at>

    * Revert "Add back gnomeprinter.py." (Accidental commit, meant to be in a new branch.)
      This reverts commit acad0d848f7c0567bf553dae27d7e6bbd3fe67a4.
    * Add FAQ item about Gourmet's data storage location.
    * Add back gnomeprinter.py.
    * Remove obsolete PIL import.
    * Add 'Francouzská' and 'Indická' (French and Indian) to defaults_sk.py
    * Add "French" and "Asian/Indian" to Cuisine defaults.
      Fixes #713.

2013-03-25  Bernhard Reiter  <ockham@raz.or.at>

    * Add Development Tools section (taken from the Wiki).
    * Move Windows version warning to README.windows.md.

2013-03-23  Bernhard Reiter  <ockham@raz.or.at>

    * Fix a bug in defaults_ru.py

2013-03-12  Bernhard Reiter  <ockham@raz.or.at>

    * Merge setup_win.py into setup.py.
      Also add some extra functionality to include required Gtk+ Theme files.
    * Add __init__.py to web_plugin to turn it into a module.
      Otherwise, there's an error with py2exe.

2013-03-10  Bernhard Reiter  <ockham@raz.or.at>

    * Add (Eclipse's) .settings/ dir to .gitignore
    * Fix a bug in get_pluralized_form.

2013-03-09  Bernhard Reiter  <ockham@raz.or.at>

    * Remove some obsolete imports from gourmet/importers/html_importer.py.
    * Remove obsolete Queue import from gourmet/importers/imageBrowser.py.
      This was causing problems with py2exe.
    * Add *.pyo files to .gitignore.

2013-03-06  Bernhard Reiter  <ockham@raz.or.at>

    * Fix a bug that caused gourmet to fail when LC_ALL=C

2013-03-06  Bernhard Reiter  <ockham@raz.or.at>

	* Remove -dev suffix from version in gourmet/version.py.
	* Update MANIFEST.in.
	  Running "python setup.py sdist" will now exactly reproduce
	  the current git state.
	* Add .project to .gitignore.
	* Remove gourmet/.gitignore as omission of *.pyc files is recursively
	  covered by our root .gitignore
	* Remove bin/gourmet-importer and bin/gourmet-importer-profile.
	  Both are apparently unused, unmaintained and severely outdated.
	* Remove translation scripts from po/ as they're obsoleted
	  by distutils-extra (see CODING file).
	* Replace 'import Image' by 'try: from PIL import Image
	  except ImportError: import Image'.
	  Rationale: http://lists.debian.org/debian-python/2013/02/msg00017.html
	* Update Gourmet and Python version in windows/gourmet-installer.nsi.
	* Update *.po files to match current source.
	* Update *.po files from Launchpad Translations.
	* Add author_email field to setup.py.
	* Update MANIFEST.in.
	* Remove windows/Gourmet.pyw from po/POTFILES.in.

2013-03-04  Bernhard Reiter  <ockham@raz.or.at>

	* Remove obsolete files.
	* Update LICENSE (new FSF address).
	* Remove windows/Gourmet.pyw as it's obsoleted by bin/gourmet.
	* Fix some py2exe parameters.

2013-03-03  Bernhard Reiter  <ockham@raz.or.at>

	* Fix directory locations in setup_win.py.
	* Fix import path in setup_win.py

2013-02-27  Bernhard Reiter  <ockham@raz.or.at>

	* Backup when upgrading the DB to v0.16.
	* Remove obsolete comment.
	* Remove obsolete file gourmet/PngImagePluginUpToDate.py.
	* Simplify a conditional expression.
	* Avoid a KeyError when pressing Enter on an empty search entry.
	* Remove gourmet/importers/mealmaster_importer.py from po/POTFILES.in.

2013-02-20  Bernhard Reiter  <ockham@raz.or.at>

	* Remove gourmet/importers/mealmaster_importer.py as it's obsolete.
	  That file lives now in gourmet/plugins/import_export/mealmaster_plugin/.
	* Remove shebangs from non-executable files.
	* Change wording of README.md a bit.
	* Merge pull request #694 from MrShark/master
	  Make working in a virtualenv easier

2013-02-14  jens persson  <jens@persson.cx>

	* Update documentation
	* changed /usr/bin/python to /usr/bin/env python to alow usage in virtualenvs
	* Remove hardcoded install path

2013-02-06  Bernhard Reiter  <ockham@raz.or.at>

	Fix #288.

2013-02-05  Bernhard Reiter  <ockham@raz.or.at>

	* Remove some clauses that checked for SQLALchemy < 0.6 as we're relying on >= 0.7 anyway now.
	* Add Integer primary key columns (named 'id') to all remaining tables.

2013-02-04  Bernhard Reiter  <ockham@raz.or.at>

	Remove pickle_key and pickle_val options from dbDic.

2013-02-03  Thomas Mills Hinkle  <tom@pebble>

	* gourmet/convert.py (integerp): Restore NUMBER_END_NO_RANGE_REGEXP
	(integerp): Quick fix to NumberEnry

	* gourmet/backends/db.py (regexp): Fix sqlite custom function
	error -- regexp searching now works. This closes #691. This bug
	was caused by a change in SQLAlchemy behavior 0.6->0.7.
	

2013-02-02  Thomas Mills Hinkle  <tom@pebble>

	* gourmet/plugins/import_export/mealmaster_plugin/mealmaster_importer.py (mmf_constants.__init__): servings->yields

	* gourmet/plugins/import_export/krecipe_plugin/krecipe_importer.py (KrecHandler): servingsyields->

	* gourmet/importers/importer.py (Importer.commit_rec): Update servings->yields.

	* gourmet/backends/db.py (RecData.add_rec): Update servings/yields
	code.

	* gourmet/exporters/exportManager.py
	(ExportManager.offer_multiple_export): Fix bug #234, #691.

2013-02-01  Bernhard Reiter  <ockham@raz.or.at>

	Unpickle Booleans and Strings that have erroneously remained pickled in the
	database during previous Metakit -> SQLite -> SQLAlchemy database migrations.

	Fixes #678.

2013-01-30  Bernhard Reiter  <ockham@raz.or.at>

	* Rename gourmet/sound_gnome.py to gourmet/sound_gst.py.
	* Restructure directory layout once again.
	  Move images, icons, sound, and style directories to data/;
	  this is in preparation of a possible future move to DistutilExtra's
	  auto setup (see #679).
	* Install FAQ and LICENSE to share/doc/gourmet/.
	* Prepend chromium-browser to list of *.html document launchers.
	* Prepend libreoffice to list of *.rtf document launchers.
	* When exporting, point Save as dialog to user's Documents directory by default.

2013-01-29  Thomas Mills Hinkle  <tom@pebble>

	* gourmet/plugins/nutritional_information/nutrition.py
	(NutritionData.get_matches): Make sure get_matches returns a list
	as expected, not None.
	(NutritionData.get_nutinfo_for_item): Handle empty units correctly.
	(NutritionData.get_conversion_for_amt): Handle empty units correctly.

	* gourmet/plugins/import_export/mealmaster_plugin/mealmaster_exporter.py (mealmaster_exporter.__init__): Fix boneheaded typo.
	(mealmaster_exporter.write_attr): Update servings-->yields
	(mealmaster_exporter.write_attr): Reduce padding to conform to MMF standard
	(mealmaster_exporter.write_categories): Reduce padding to conform to MMF standard
	(mealmaster_exporter.write_ing): Allow for empty units (fix boneheaded error)

	* gourmet/plugins/import_export/html_plugin/html_exporter.py
	(html_exporter.write_text): Fix NAME_TO_ATTR lookup issue w/
	plugins.

	* gourmet/plugins/field_editor/fieldEditor.py
	(FieldEditor.fieldChangedCB): Fix possible issue with NAME_TO_ATTR
	lookups and plugins searching for attributes that don't exist
	there.

	* gourmet/plugins/import_export/mealmaster_plugin/mealmaster_importer.py
	(mmf_constants.__init__): Respect new Gourmet norms regarding
	standard ingredient abbreviations (remove periods, mostly)
	* gourmet/plugins/import_export/mealmaster_plugin/mealmaster_exporter.py
	(mealmaster_exporter.__init__): Make sure category comes first as
	per mealmaster specs.
	(mealmaster_exporter.__init__): Remove redundant/stupid code
	(mealmaster_exporter.write_ing): Fix ingredient code and make more
	robust against future changes in defaults.

2013-01-25  Bernhard Reiter  <ockham@raz.or.at>

	* Mention BeautifulSoup in the Extra Requirements section of README.md.
	* Merge pull request #689 from jraber/unbundleBeautifulSoup
	  Removed bundled (old) versions of BeautifulSoup.py
	* Change back perms for bin/gourmet to 755.

2013-01-17  Jeff Raber  <jeff.raber@gmail.com>

	Removed bundled (old) versions of BeautifulSoup.py

	BeautifulSoup.py seems to be available in the common linux distros. Otherwise, it can
	be installed with 'pip install BeautifulSoup'

	Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=895228

2013-01-15  Bernhard Reiter  <ockham@raz.or.at>

	Add slogan to README.md ;-)

2013-01-12  Thomas Mills Hinkle  <tom@pebble>

	* gourmet/importers/importManager.py: gettext fix

2013-01-12  Bernhard Reiter  <ockham@raz.or.at>

	* Add new Integer primary keys to the shopcats, shopcatsorder, and pantry tables.
	  Those tables had Text columns as primary keys, which, when used with MySQL,
	  requires an extra parameter specifying the length of the substring that MySQL
	  is supposed to use for the key. Thus, we're adding columns named id of type
	  Integer and make them the new primary keys instead.
	  Fixes #681.

	* Move *.gourmet-plugin files to plugins/, install to share/gourmet/plugins.
	  This is required for python-distutils-extra to be able
	  to translate and install *.gourmet-plugin files properly.

2013-01-09  Bernhard Reiter  <ockham@raz.or.at>

	* Change data/recipe.dtd perms from 755 to 644.
	* .gitignore: Remove obsolete lines, add .pydevproject. .cvsignore: Delete.

2013-01-07  Bernhard Reiter  <ockham@raz.or.at>

	* Enable building of *.mo and *.gourmet-plugin files during development.
	  Furthermore, update CODING with instructions, and remove
	  bin/gourmet_in_place as it's now obsolete.
	* Modify file locations in built settings.py, not the one in the source tree.

2013-01-06  Thomas Mills Hinkle  <tom@pebble>

	* gourmet/GourmetRecipeManager.py (RecGui.setup_main_window): Make sure search entry has focus.

	* gourmet/plugins/listsaver/shoppingSaverPlugin.py: gettext fix

	* gourmet/plugins/key_editor/recipeEditorPlugin.py: gettext fix

	* gourmet/plugins/import_export/pdf_plugin/print_plugin.py: Fix gettext

2013-01-06  Bernhard Reiter  <ockham@raz.or.at>

	* Remove obsolete cruft from windows/ directory.
	* Update website, download link and Tom's email address in NSIS script.
	* In the HTML output, don't translate class names.

	  Otherwise, this would require CSS selectors to be also localized and would
	  not work across languages. That's obviously not how it should be done.
	* Remove modules_check and other cruft from setup.py
	  This hasn't been used or updated for a while, and as it isn't really
	  supported by distutils, it has been more a source of redundancy (read
	  confusion and maintenance burden) in conjunction with dependencies
	  listed in our README.
	* Rename README to README.md, and use Markdown to style it.
	* Remove bin/__init__.py as it's obsolete now.
	* Minor line layout fix.
	* Replace our custom tools/gourmet_distutils.py by a python-distutils-extra dependency.
	* Update po/POTFILES.in and po/gourmet.pot.

2013-01-05  Bernhard Reiter  <ockham@raz.or.at>

	* Replace some wildcard imports.
	* Remove some cruft from gourmet/__init__.py.

2013-01-02  Bernhard Reiter  <ockham@raz.or.at>

	* Update requirements in the README file.
	* Update setup.cfg to at least somewhat reflect current RPM based distributions.
	* Remove rpm/gourmet.fedora.spec and rpm_build.sh.
	  This stuff was severely outdated, duplicates information from setup.py and
	  setup.cfg (if we're really going to keep providing RPMs which hasn't been done
	  during the past releases), and is maintained better at Fedora anyway.
	* Change more URLS from Sourceforge to GitHub.

2013-01-01  Bernhard Reiter  <ockham@raz.or.at>

	* Change old SourceForge URLs to new GitHub ones where applicable.
	* Move practically all program information to version.py and import it from there into setup.py and setup_win.py.
	* Fix some install locations.
	* Add back toolbar, with an option in the preferences dialog to hide it.
	* Don't fall back to version = 0.11.0 in setup.py.
	* Simplify some code.

2012-12-31  Bernhard Reiter  <ockham@raz.or.at>

	Remove BUG_URL link from gglobals.py as its both outdated and not used anywhere.

2012-12-30  Bernhard Reiter  <ockham@raz.or.at>

	* Don't use Gtk.InfoBar yet as it requires pyGtk >= 2.22. We'll keep this in a branch for now.
	* Remove obsolete line from gglobals.py
	* Move info.py contents back into version.py as we got rid of the critical circular dependency with OptionParser.py.
	* Remove checks for gtk.CellRendererCombo as it has been part of GTK since v2.6.
	* Determine location of installed files properly.
	* Another stylesheet path fix in html_exporter.py.

2012-12-28  Bernhard Reiter  <ockham@raz.or.at>

	* Add *.html pattern to html_exporter_plugin.py's saveas_filters.
	* Fix default.css location in HTML exporter plugin.
	* Remove custom file type widget from FileSelectorDialog.
	* Remove FileChooserSaveAs.py as it has long been obsoleted by gtk_extras/dialog_extras.py.

2012-12-25  Bernhard Reiter  <ockham@raz.or.at>

	* Let tools.gourmet_distutils.py take care of translation and installation of gourmet.desktop.
	* Install png and svg icons to locations that enable desktop environments to pick proper file.
	  See http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html#directory_layout

2012-12-19  Bernhard Reiter  <ockham@raz.or.at>

	Remove obsolete GourmetFauxThreads.py and GourmetThreads.py.

2012-12-17  Bernhard Reiter  <ockham@raz.or.at>

	* Fix db.py to allow (dev) version suffices like 0.16.0-dev.
	* Add patch to include schema.org metadata for HTML exporter by SF user freedo.
	  See https://sourceforge.net/tracker/?func=detail&aid=3519632&group_id=108118&atid=649654
	  and http://www.schema.org/Recipe, respectively.
	* Add plurals handling fix by A. Katz.
	  "Just a quick patch to fix a bug in default.py.
	  The function for converting a plural to a singular unit had two issues.
	  a) WORD_TO_SING_PLUR_PAIR keys are lowercase but the word being handed to the function could be in any case
	  b) if the word is not in WORD_TO_SING_PLUR_PAIR it does nothing, this patch tries lang.guess_singulars before
	  giving up."
	  See https://sourceforge.net/tracker/?func=detail&aid=3420657&group_id=108118&atid=649654

2012-11-27  Bernhard Reiter  <ockham@raz.or.at>

	Remove obsolete line from setup.py

2012-11-26  Bernhard Reiter  <ockham@raz.or.at>

	* Fix gourmet/backends/db.py so it works with SQLAlchemy >= 0.7.
	* Remove po/*/LC_MESSAGES/gourmet.mo files as they are generated at build time from po/*.po files.

2012-11-22  Bernhard Reiter  <ockham@raz.or.at>

	Remove obsolete file (now in gourmet/plugins/import_export/mastercook_import_plugin/)

2012-05-25  Thomas Hinkle  <tmhinkle@gmail.com>

	* Fixed conflict
	* ++gettext

2012-04-27  Tom  <tom@localhost6.localdomain6>

	* gourmet/plugins/unit_display_prefs/__init__.py: import gettext

	* gourmet/plugins/python_shell/__init__.py: import gettext

	* gourmet/plugins/nutritional_information/nutrition.py (NutritionData.get_nutinfo): remove verbosity

	* gourmet/plugins/nutritional_information/nutPrefsPlugin.py: import gettext

	* gourmet/plugins/nutritional_information/main_plugin.py: import gettext

	* gourmet/plugins/field_editor/__init__.py: import gettext

	* gourmet/plugins/email_plugin/emailer_plugin.py: import gettext

	* gourmet/plugins/duplicate_finder/recipeMergerPlugin.py: import gettext

	* gourmet/plugin_gui.py: import gettext

	* gourmet/info.py: import gettext

	* gourmet/plugin_loader.py (Pluggable.get_plugin_by_module): Add
	convenience function for grabbing plugin instances.

2012-04-22  Bernhard Reiter  <ockham@raz.or.at>

	Bump version number to 0.16.0-dev

2012-03-06  Bernhard Reiter  <ockham@raz.or.at>

	* Remove gettext_setup.py as its logic has been split in settings.py and gglobals.py (and info.py)
	* Remove some obsolete logic from setup.py.
	* Move localized stuff from version.py to newly created info.py to avoid circular dependencies.
	* Move logic that searches for the data files path from gglobals.py to newly created settings.py.
	* Wrap the path finding stuff in bin/_preamble.py in a function
	* Add __init__.py to the bin/ directory so we can import it as a module.
	* Rename --data-directory cmdline option to --gourmet-base.
	* Fix occurrences of HELP_FILE constant.

2012-02-27  Bernhard Reiter  <ockham@raz.or.at>

	* Remove --image-directory and --ui-directory cmd line options, as those are now subdirectories of --data-directory.
	* Replace custom inquiry if existing file should be overwritten by GTK one.

2012-02-26  Bernhard Reiter  <ockham@raz.or.at>

	* Replace create_manifest.py by MANIFEST.in
	* Remove some more duplicates

2012-02-20  Bernhard Reiter  <ockham@raz.or.at>

	Minor setup.py fix

2012-02-16  Bernhard Reiter  <ockham@raz.or.at>

	Remove tools/gourmet_distutils as it's unused (there's still tools/gourmet_distutils.py)

2012-02-12  Bernhard Reiter  <ockham@raz.or.at>

	* Move website URL from GRM.py to version.py
	* Replace old splash screen by new one
	* Change directory layout once more. Looks good now, but still a lot of code fixes ahead.

2012-02-11  Bernhard Reiter  <ockham@raz.or.at>

	* Un-hardwire intltool's path under windows in setup.py
	* Fix FAQ and LICENSE locations in code
	* Update setup.cfg, mostly to use .bz2 compression
	* Restructure data/ directory
	* Add images/gourmet.svg, and remove a couple of outdated images.
	* Rename glade/ directory to ui/
	* Restructure directory layout to comply more to
	  http://as.ynchrono.us/2007/12/filesystem-structure-of-python-project_21.html

2012-02-10  Thomas Hinkle  <tmhinkle@gmail.com>

	* Fixed density of sugar (I think I'd used the density from a chemistry,
	  rather than a cooking, site, which didn't account for the air between
	  the sugar crystals when you measure it)
	* Don't fail if elib.intl isn't present -- print a warning instead.
	* Glade-->UI

2012-02-09  Bernhard Reiter  <ockham@raz.or.at>

	Rename i18n/ directory to po/ so intltool-update --maintain will work

2012-02-08  Bernhard Reiter  <ockham@raz.or.at>

	* Images cleanup
	* Remove a stray .po file
	* Rename gladed command line option to uid
	* Rename some more methods from glade to ui (or builder)
	* s/gladebase/uibase/g
	* Use updated i18n/de.po from Launchpad

2012-02-07  Bernhard Reiter  <ockham@raz.or.at>

	* Replace custom hack in setup_gettext.py by elib.intl module
	* Add Lauchpad header to i18n/de.po

2012-02-06  Bernhard Reiter  <ockham@raz.or.at>

	Update i18n/gourmet.pot translation template

2012-02-05  Bernhard Reiter  <ockham@raz.or.at>

	* New German translations by nobody (at) t4b.me
	* i18n string unification fixes by nobody (at) t4b.me
	* Another i18n fix

2012-02-01  Bernhard Reiter  <ockham@raz.or.at>

	* Yet another (somewhat prominent) i18n fix.
	* Internationalize src/lib/plugins/import_export/archive_plugin/zip_importer_plugin.py
	* s/ = /=/ in the *.gourmet-plugin.in files, which previously impeded
	  localization, as intltool-merge can't deal with whitespaces on the wrong places.

2012-01-31  Bernhard Reiter  <ockham@raz.or.at>

	* Fix i18n/POTFILES.in to properly include .gourmet-plugin.in files
	* Add Russian localization files i18n/ru.po and src/lib/defaults/defaults_ru.py
	  by Alexander Prokoudine, from our Sourceforge patch tracker: see 
	  https://sourceforge.net/tracker/?func=detail&aid=2858486&group_id=108118&atid=649654
	  and https://sourceforge.net/tracker/?func=detail&aid=2858485&group_id=108118&atid=649654
	* Fix sort of a typo
	* Replace occurrences of .props.someproperty by {g|s}et_property('someproperty') to fix bug #3480177
	* Replace occurrences of .props.someproperty by {g|s}et_property('someproperty') to fix bug #3480177
	* Another fix to make i18n work.

2012-01-30  Bernhard Reiter  <ockham@raz.or.at>

	Small i18n related fix.

2012-01-29  Bernhard Reiter  <ockham@raz.or.at>

	* Add domain=gourmet attribute to the interface tag in the .ui files
	* Update i18n/POTFILES.in to reflect .glade -> .ui file conversion
	* Add [type: gettext/glade] prefix to .ui files in i18n/POTFILES.in
	  so that they're actually searched for strings by intltool.
	* Add locale.bindtextdomain('gourmet',DIR) so that the strings from
	  our .ui (and glade) files are actually translated -- which they previously weren't.

2012-01-21  Bernhard Reiter  <ockham@raz.or.at>

	* Add i18n/generate_mo.sh as i18n/generate_mo.py doesn't seem to work for me.
	* In src/lib/version.py, import gettext_setup so trings get translated.
	* Make ImageSelectorDialog open the user's Pictures directory when launching it.

2012-01-19  Bernhard Reiter  <ockham@raz.or.at>

	* Remove obsolete cmd line options documentation from gourmet.1
	* Move LICENSE displaying logic from version.py to GourmetRecipeManager.py
	  as it requires some imports; and add LICENSE to setup.py

2012-01-17  Bernhard Reiter  <ockham@raz.or.at>

	Add LICENSE to MANIFEST as it's needed by the About dialog.

2012-01-12  Bernhard Reiter  <ockham@raz.or.at>

	Comment out an obsolete windows workaround.

2012-01-11  Bernhard Reiter  <ockham@raz.or.at>

	Remove a stray file that had sneaked into MANIFEST and i18n/POTFILES.in

2012-01-10  Bernhard Reiter  <ockham@raz.or.at>

	* Regenerate i18n/gourmet.pot and i18n/*.po files by running i18n/grab_strings.sh
	* Update i18n/POTFILES.in based on MANIFEST contents
	* Update MANIFEST
	* Update POTFILES, translation template (gourmet.pot), and merge into individual *.po files
	* Fix Nutritional Information plugin

2012-01-07  Bernhard Reiter  <ockham@raz.or.at>

	Remove make_star_button and make_star_image functions as they aren't needed anymore.

2012-01-06  Bernhard Reiter  <ockham@raz.or.at>

	* Replace gnome.sound_* stuff with gstreamer (gst) stuff.
	  This should conclude our removal of (python-)gnome dependencies.
	  We now need pygtk >= 2.16 and (py)gst instead (which is much less heavy-weight than gnome).
	* Remove gnome stuff from the pdf_exporter.py test code.
	* Replace gnome-open by the cross-desktop xdg-open command.
	* Remove gnomeprint import from gglobals.py
	* Remove obsolete 'printer' command line option.
	* Remove call to gnome.url_show as we can assume gtk.show_uri to exist in PyGTK >= 2.16

2011-12-30  Bernhard Reiter  <ockham@raz.or.at>

	Replace gnome.ui.About dialog by gtk.AboutDialog

2011-12-27  Bernhard Reiter  <ockham@raz.or.at>

	Use an InfoBar to display deletion warning message

2011-12-19  Bernhard Reiter  <ockham@raz.or.at>

	Add alignment objects to recCardDisplay.ui as that information got lost during gtk.Builder migration.

2011-12-17  Bernhard Reiter  <ockham@raz.or.at>

	Add NutritionLabel widget back to nut_recipe_card_display.ui which got lost in the migration to gtk.Builder

2011-12-16  Bernhard Reiter  <ockham@raz.or.at>

	* Fix a signal handler related bug due to gtk.Builder migration
	* Remove import gtk.glade statements everywhere.
	* Remove custom_handlers stuff as it's obsolete now after migrating to gtk.Builder.
	* Migrate even the faux stuff to gtk.Builder
	* Remove references to *.glade files in setup.py and create_manifest.py; recreate MANIFEST.
	* Migrate the Nutritional Information plugin to gtk.Builder. This requires still some polishing.
	* Change NumberEntry's default_to_fractions argument default value to False
	  (as that's what it's set to practically everywhere, and it will make migration to gtk.Builder easier).
	* Forgot to add keyeditor.ui and remove keyeditor.glade
	* Migrate recipeMerger.py to gtk.Builder
	* Migrate keyEditor.py to gtk.Builder
	* Remove app.glade (in favor of app.gui)
	* Migrate chooserNotebook.py to gtk.Builder (though currently unused)
	* Remove recipeMerger.py from src/lib as it's now in a plugin subdirectory
	* Replace remaining glade.XML occurrences in GRM.py by gtk.Builder equivalents.
	* Migration to gtk.Builder: Add app.ui and change remaining occurrences of app.glade to app.ui
	* Replace checks for app.glade by checks for app.ui
	* Remove an unnecessary import from src/lib/reccard.py
	* Migrate batchEditor from glade to gtk.Builder
	* Remove glade/keyeditor.glade as that files is already in src/lib/plugins/key_editor/
	* Remove glade/*.glade and glade/*.gladep files for which conversion to *.ui is complete.
	* Migrate recipe card to gtk.Builder

2011-12-15  Bernhard Reiter  <ockham@raz.or.at>

	* Fix reccard.py after migration to gtk.Builder; plus two fixes to ratingWidget.py
	* Add a README to glade/catalog
	* More recCardDisplay to gtk.Builder fixes
	* Properly migrate recCardDisplay to gtk.Builder
	* Create gourmetwidgets catalog for glade, adapt widgets code.

2011-12-13  Bernhard Reiter  <ockham@raz.or.at>

	Start migrating recCardDisplay to gtk.Builder

2011-07-01  Tom  <tom@localhost6.localdomain6>

	* src/lib/convert.py (NUMBER_FINDER_REGEXP): Avoid seeing things
	with a terminal . or , as numbers, thus avoiding seeing numbered
	lists as ingredients.

2011-06-28  Tom  <tom@localhost6.localdomain6>

	* src/lib/reccard.py (IngredientController.commit_ingredients.commit_iter):
	Fix attr lookup error in corner cases.

2011-03-20  Tom  <tom@localhost6.localdomain6>

	* src/lib/version.py (version): Version --> 0.15.9

	* src/lib/shopgui.py (ShopGui.show): Make sure window shows up
	when something's added.

	* src/lib/backends/db.py (RecData.initialize_connection): Remove
	threadlocal strategy. This may be a mistake, but it seems to clear
	up the commit errors numerous people were experiencing.

	* src/lib/shopgui.py (ShopGui.__init__): Make sure popup menu gets
	set-up for changing categories in shopping list.

	* src/lib/reccard.py (shop_for_recipe_cb): Fix shopping list, and improve error messages.

	* src/lib/GourmetRecipeManager.py (StuffThatShouldBePlugins.shop_recs): fix shopping list.

	* src/lib/shopping.py: Fix refactoring error.

	* src/lib/shopgui.py (ShopGui.getOptionalIngDic): Fix refactoring
	error that broke "add-to-shopping list" behavior

2011-03-08  Tom  <tom@localhost6.localdomain6>

	* src/lib/version.py (version): Version --> 0.15.8

2011-03-07  Tom  <tom@localhost6.localdomain6>

	* src/lib/backends/db.py (RecData._force_unicode): Don't unicode-ify images!

2011-02-02  Tom  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_importer.py: 
	Adapt mealmaster plugin to handle 'Windows Gourmet' file (who
	knows what this program was, but we appreciate their name!). The
	adaptations shouldn't do any harm to mealmaster, and may help with
	imports of some of the many broken mealmaster files that exist on
	the internet.

2011-01-05  Tom  <Thomas_Hinkle@sf.net>

	* create_manifest.py: 
	(write_lst_to_file): Include *.ui files!
	* README: Remove obsolete material about Gnomeprint.
	* src/lib/plugin.py (RecEditorModule.grab_focus): Add method for
	editor modules to setup focus for editing.
	* src/lib/reccard.py (RecEditor.present): Add code to allow each
	module to grab focus programatically to set up editing.
	(DescriptionEditorModule.grab_focus): Make DescriptionEditorModule
	grab focus for the "title" box right away, so that when you open
	the editor window you can start typing.

	* src/lib/backends/db.py (RecData.get_unique_values): Fix bug in
	DB code that caused a SQL error.

2010-12-16  Tom  <Thomas_Hinkle@sf.net>

	* src/lib/version.py (version): Version->0.15.7
	* src/lib/backends/db.py (RecData.get_unique_values): Patch from
	Steve Langasek for Ubuntu bug #534088
	(RecData.get_unique_values): Fix handling of null criteria.

2010-12-10  Tom  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/web_plugin/gourmetweb/templates/shop.html: Add forms to add/remove from pantry.

	* src/lib/plugins/web_plugin/gourmetweb/recview/views.py (MyShoppingList.get_shopper): Use database for shopping list so we can store e.g. pantry data.
	(multiply_rec): Use 'yields' when possible; otherwise use multiply
	(shop_to_pantry): Add callback to move items to pantry
	(shop_to_list): Add callback to remove items from pantry

	* src/lib/plugins/web_plugin/gourmetweb/urls.py: Add shopping list
	callbacks (move to/from pantry)

2010-12-09  Tom  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/key_editor/keyEditor.py (KeyEditor.isearchCB):
	Set cursor to busy while searching.

	* src/lib/recindex.py (RecIndex.search): Fix busy cursor while searching.

	* src/lib/backends/db.py (RecData.get_ingkeys_with_count): Fix bug
	that broke IngredientEditor view entirely.

	* src/lib/plugins/key_editor/keyEditor.py (KeyStore.reset_views):
	Don't undo search when resetting view after applying an edit.

	* src/lib/backends/db.py (RecData.do_modify): Force unicode (Fixes #3120915)

2010-11-28  Thomas Mills Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (RecData.update_version_info): Patch from Jeff Raber to remove sqlite3 reference
	(RecData.get_unique_values): Patch from buergi to get working with MySQL

2010-11-16  Thomas Mills Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/reccard.py (DescriptionEditorModule.update_from_database):
	Fix signal used for spinbutton for yield and any other
	spinbuttons. (patch from Saulius Lukauskas)

	* src/lib/plugins/import_export/mastercook_import_plugin/mastercook_plaintext_importer.py:
	Patch from Saulius Lukauskas fixing column-matching/dash-matching
	conflict that broke ingredient import.

2010-10-20  Thomas Hinkle  <tom@grenville>

	* src/lib/plugins/web_plugin/gourmetweb/templates/rec.html: Start
	adding some style to web-based recipe view.

	* src/lib/backends/db.py (RecData.add_column_to_table): Workaround
	sqlalchemy 0.6.0 incompatability

	* src/lib/plugins/nutritional_information/nutrition.py (NutritionData.get_nutinfo_for_ing):
	Take into account amounts on recipes called as ingredients.

2010-08-01  Thomas Mills Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/web_plugin/gourmetweb/templates/rec.html: Add
	AJAX magic to do multiplication ajax-style when javascript is
	available.

2010-07-30  Thomas Mills Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/shopping.py: Refactor code -- move some code from
	shopgui classes to front-end neutral ShoppingList class that can
	be base class for HTML front-end.

	* src/lib/shopgui.py: Refactor code to allow web-front-end


	* src/lib/plugins/web_plugin/: Start a django-based web-front-end
	to Gourmet

2010-07-21  Thomas M. Hinkle  <tom@grenville>

	* src/lib/version.py (version): Version->0.15.6

2010-07-20  Thomas M. Hinkle  <tom@grenville>

	* src/lib/plugins/import_export/web_import_plugin/generic_web_importer_plugin.py (GenericWebImporter.mimetypes):
	Fixed bug in mimetypes, by adding expected application/xhtml+xml
	type.

	* src/lib/backends/db.py (RecData.get_criteria): Fix another
	sqlalchemy-API-change-caused bug.

2010-07-13  Thomas M. Hinkle  <tom@grenville>

	* src/lib/backends/db.py (RecData.save): Try to work around
	sqlalchemy bug that seems to through error on some (extra?)
	commits.

2010-07-10  Thomas M. Hinkle  <tom@grenville>

	* src/lib/version.py (version): Version-->0.15.5

	* src/lib/recindex.py (RecIndex.tree_keypress_cb): Handle Page-Up,
	Page-Down, Home and End properly for our multiple page interface.

2010-07-09  Thomas M. Hinkle  <tom@grenville>

	* src/lib/backends/db.py (RecipeManager.parse_ingredient): Fix
	typo/logic-error that prevented some units from being recognized.

	* src/lib/* Get rid of raise + string calls, as python 2.6
	prohibits them (patch from #2979619)

	* src/lib/recindex.py (RecIndex.make_search_dic): Look anywhere in
	text, not just at beginning. (fixes bug #3021913)

	* src/lib/reccard.py (DescriptionEditorModule.save): Remove old
	debug statements. Note to self: leaving in print statements is
	dangerous, as it can raise unicode errors and create bugs where
	all was well, as in bug #3018283

	* glade/recCardIngredientsEditor.glade: Update ingredient editor tooltip.

2010-06-07  Thomas Mills Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (map_type_to_sqlalchemy): Use LargeBinary type if available (sqlalchemy 0.6+)
	(RecData.get_unique_values): Fix boolean-related sqlalchemy 0.6+ bug.

	* src/lib/importers/interactive_importer.py (InteractiveImporter.label_selection):
	Fix error (we needed iter, we got mark) (patch from Jeff Spaleta)
	(InteractiveImporter.set_text): Fix logic error (remove extra
	newlines before parsing when it still matters).(patch from Jeff
	Spaleta)

	* src/lib/plugins/import_export/web_import_plugin/generic_web_importer_plugin.py (GenericWebImporter.test_url):
	Check that content_type is iterable (modified version of patch
	from Jeff Spaleta).

2010-05-19  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/db.py: Change name of ingredient_parser to
	parse_ingredient (following naming conventions used everyone else
	by pretty much everyone alive). Make this change throughout other
	source files.

	* src/lib/importers/generic_recipe_parser.py (RecipeParser): Fix
	unicode/regexp issue with ing_matcher

2010-03-25  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (RecData.update_version_info): Make sure
	recipe_id doesn't already exist as a column before altering old
	databases -- apparently we were wrong about when this change was
	made.

2010-03-05  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/gglobals.py (FLOAT_REC_ATTRS): Add list of recipe
	attributes that are floats (as opposed to ints, text, etc)

	* src/lib/reccard.py (DescriptionEditorModule.save): Make sure
	floating attributes (e.g. yields) get grabbed as values and not as
	text.

	* glade/recCardDescriptionEditor.glade: Make yields amount entry
	accept decimals.
	* src/lib/defaults/defaults_en.py (UNITS): ++drops
	* src/lib/defaults/defaults_en_GB.py (UNITS): ++drops

	* src/lib/reccard.py (IngredientTreeUI.ingtree_keypress_cb): Make
	delete-key in ingredient editor view only work in treeview (same
	as change made for main view on 2/9/2010).

2010-03-03  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/GourmetRecipeManager.py (GourmetApplication.get_attribute_model):
	Don't bother caching the attribute models. It results in
	inconsistency for the user and it's not that expensive to just
	regenerate the lists each time we need them.

	* defaults_en.py defaults_en_GB.py ++T. and t. as abbreviations
	for Tablespoon and teaspoon

2010-02-09  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/GourmetRecipeManager.py (RecGui): Make
	delete-key-deletes-recipe behavior a callback on keypresses only
	in treeview. This prevents users using the delete key in the
	search box from accidentally deleting recipes. Also, let backspace
	delete recipes as well for convenience. 

	* src/lib/backends/db.py (RecData.get_criteria): Make sure search
	strings are proper unicode objects. Fixes bug #2948135.

2010-01-16  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/version.py Version->0.15.4
	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.postparse):
	Strip extra newlines.
	(MenuAndAdStrippingWebParser.cut_menus): Add more common website
	nav class ID's (footer, header, sitemap).
	(MenuAndAdStrippingWebParser.cut_menus): Don't ignore the whole
	body tag, no matter what (fixes epicurious import)

	* src/lib/importers/interactive_importer.py (InteractiveImporter.set_text):
	Strip extra newlines.

2010-01-15  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/gtk_extras/thumbnail.py (check_for_thumbnail): Catch
	non-ASCII characters in URLs.

2010-01-06  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/importers/interactive_importer.py (InteractiveImporter):
	Replace text-tags in buffers with ComboBox widget that allows user
	to change tag of marked-up region. Also, separated out giant list
	of buttons into categories and made more suitable for wider and
	shorter screens.

2010-01-02  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/key_editor/recipeEditorPlugin.py (IngredientKeyEditor.setup_tree):
	Wrap text in treeview when it is too long; automatically reflow as
	window is resized.

2009-12-29  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/import_export/web_import_plugin/generic_web_importer_plugin.py (GenericWebImporter.test_file):
	Add support for xhtml. Be fallback option whenever we match a file
	pattern.

	* src/lib/plugins/import_export/plaintext_plugin/plaintext_importer_plugin.py (PlainTextImporterPlugin.test_file):
	Don't match *all* files as fallback options -- have a list of
	"antipatterns" to exclude.

2009-12-18  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/gtk_extras/dialog_extras.py (SimpleFaqDialog.NESTED_MATCHER):
	Fix bug in REGEXP in number-header parsing.

	* src/lib/plugins/nutritional_information/databaseGrabber.py (DatabaseGrabber.parse_abbrevfile):
	Remove old code.

	* FAQ: Update FAQ (which was pretty seriously out-of-date).

2009-12-17  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (RecData.validate_recdic): Ensure recipe
	info is unicode.

	* src/lib/check_encodings.py: Be less verbose.

	* Version -> 0.15.3

	* src/lib/plugins/nutritional_information/parser_data.py (NUTRITION_FIELDS): Update fields for SR21.

	* src/lib/plugins/nutritional_information/nutritionGrabberGui.py (check_for_db):
	Update DBs from SR20 (check if there are choline entries to see if
	the DB is old).

	* src/lib/plugins/nutritional_information/databaseGrabber.py (DatabaseGrabber.parse_abbrevfile):
	Update fields when adding doesn't work.

	* src/lib/plugins/nutritional_information/data_plugin.py (NutritionDataPlugin.update_version): Add new field (choline)

	* src/lib/backends/db.py (RecData.update_version_info): Fix update
	from versions < 0.11.x
	
	* i18n/gourmet.pot: Update.

	* i18n/POTFILES.in: Update to reflect current MANIFEST

	* src/lib/plugins/nutritional_information/parser_data.py (NUTRITION_FIELDS):
	Reorder fields and add choline for SR21 (they changed more than I
	had first thought!)

2009-12-14  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (RecData.update_version_info): Fix update
	from versions < 0.11.x

2009-12-11  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/nutritional_information/nutrition.py (foo.SimpleInterface.print_info):
	Be less verbose.
	* src/lib/importers/importer.py (Importer.commit_rec): Make sure
	we provide unicode strings to db.
	* src/lib/reccard.py (IngredientEditorModule.quick_add): Make sure
	we provide unicode strings to DB.
	(DescriptionEditorModule.save): Make sure we provide unicode strings.

2009-12-02  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/check_encodings.py (GetFile.__init__): Divide lines
	using built-in splitlines() function -- this fixes problems with
	line breaks on e.g. mac text files.

	* src/lib/importers/importManager.py (ImportManager.finish_web_import):
	Print information about importer being used.


2009-12-01  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/GourmetRecipeManager.py (RecGui.setup_main_window): Add
	right-click menu back to main interface (we use the contents of
	the action menu for the right-click).

	* src/lib/reccard.py (RecCardDisplay.update_yields_multiplier):
	Fix updating of yield_unit on yield_change.

2009-11-29  Thomas M Hinkle  <tom@minime>

	* src/lib/prefsGui.py (PreferencesGui): Make PreferencesGui
	pluggable.

	* src/lib/plugins/nutritional_information/__init__.py: ++
	preferences plugin

	* src/lib/plugins/nutritional_information/export_plugin.py (NutritionBaseExporterPlugin):
	Add preference that allows user to turn off nutritional export
	altogether or to turn it off when information is only partial.

	* src/lib/plugin.py (BaseExporterPlugin.add_field): Add parameter
	write_empty_field (which defaults to False) to determine whether
	we add custom fields with no content.
	(DatabasePlugin.remove): Change "deactivate" call to "remove",
	which was what was intended (deactivate is called when the
	pluggable is destroyed; remove is called when the plugin is
	deactivated).
	(PrefsPlugin): Add base class for adding tabs to preferences
	dialog.

	* src/lib/plugin_loader.py (MasterLoader.register_pluggable): Fix
	typo.

	* glade/preferenceDialog.glade: Remove hardcoded email
	preferences (if we want them back, they belong in the email
	plugin).
	
2009-11-22  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (CustomUnitOption):
	Add custom widget for setting margins that allows adjusting of
	units (cm/inch/points).
	(PdfPrefGetter.get_args_from_opts): Save page layout preferences
	correctly.

	* src/lib/gtk_extras/optionTable.py (OptionTable.createOptionWidgets):
	Add CustomOption option for callers who want to provide their own
	widget for setting an option.

	* src/lib/plugins/nutritional_information/export_plugin.py (NutritionBaseExporterPlugin.get_nutritional_info_as_text_blob):
	Escape items in case they have &s or other characters that screw
	up XML.

2009-11-21  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/pdf_plugin/print_plugin.py (PDFRecipePrinter.begin_print):
	Try to raise an error if there's a problem with the PDF.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (PdfPrefTable):
	Use prefs to save pdf settings automatically.

	* src/lib/gtk_extras/optionTable.py (OptionTable.createOptionWidgets):
	Fix bug where having a default value of 0 made any other value
	unsettable.

	* src/lib/reccard.py (RecCardDisplay.print_cb): Move repetitive
	code to printmanager.

	* src/lib/exporters/printer.py (PrintManager.print_recipes): Move
	basic printing code to PrintManager.

	* src/lib/GourmetRecipeManager.py (ImporterExporter.print_recs):
	Move repetitive print code to print manager so we can do things
	like handle exceptions elegantly there.

2009-11-20  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/nutritional_information/export_plugin.py (NutritionBaseExporterPlugin.get_nutritional_info_as_text_blob):
	Fix typo that broke printing.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.setup_recipes):
	Clarify code around autosave.


	* src/lib/plugins/nutritional_information/reccard_plugin.py (NutritionDisplayModule.enter_page):
	Fix keyError bug on initialization.

	* src/lib/plugins/nutritional_information/nutritionLabel.py (NutritionLabel.setup_yield_label):
	Use singular form for "amount per ___" yield unit.

	* src/lib/plugins/nutritional_information/export_plugin.py (NutritionBaseExporterPlugin.get_nutritional_info_as_text_blob):
	Use singular form for "amount per ____" yield unit.

	* src/lib/shopgui.py (ShopGui.setup_main): Don't show window
	initially.

	* src/lib/reccard.py (RecCardDisplay.update_yields_multiplier):
	Use singular forms when settings yields to 1.

2009-11-19  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (write_ingref):
	Only write links that will work -- we do this by tracking which
	recipes are going into our document and checking links against
	that list of recipes.

	* src/lib/plugins/import_export/pdf.gourmet-plugin.in: Change name
	and description to reflect this plugin's new status as the primary
	printing provider.

	* src/lib/exporters/printer.py: Add simple message telling user
	which plugin to install to get printing if there is no printing.

	* src/lib/exporters/exporter.py (ExporterMultirec.append_referenced_recipes):
	Add method to automatically append referenced recipes to the list
	of recipes to be exported.

	* src/lib/plugin_loader.py (MasterLoader.deactivate_plugin_set):
	Fix typo that broke deactivation of plugins.

2009-11-17  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/GourmetRecipeManager.py (ImporterExporter.print_recs):
	Use new printing API to print.
	* src/lib/plugin.py (PrinterPlugin): Add new plugin for printing.
	* src/lib/reccard.py (RecCardDisplay.print_cb): Use new printing
	API to print.
	* src/lib/shopgui.py (ShopGui.doSave): No longer use "lprprinter"
	to do text save.
	(ShopGui.printList): Use new printing API to print.
	* src/lib/exporters/printer.py: Rewrite printer.py to use a plugin
	architecture. If no plugins are available, no printing. The
	expected plugin will be the PDF plugin using Reportlab.
	* plugins/import_export/pdf_plugin/print_plugin.py: Create plugin
	for new printing plugin architecture.

2009-11-06  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/import_export/website_import_plugins/__init__.py (plugins):
	++new AllRecipes plugin

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (PdfPrefTable):
	Add preference widget that can be embedded in print preview
	dialog (in preparation for new printing back-end using
	poppler+reportlab)

	* src/lib/backends/db.py (RecData.update_version_info): Make sure
	we do updates for 0.14.7 ++ for people updatings from versions
	before 0.14

2009-11-01  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* lib/GourmetRecipeManager.py Make sure all actions w/o icons are
	marked as important (fixes Gourmet in horizontal-toolbar mode)
	* lib/plugin.py ditto (fix Gourmet in horizontal-toolbar mode)
	* lib/reccard.py ditto (fix Gourmet in horizontal-toolbar mode)
	* lib/shopgui.py  ditto (fix Gourmet in horizontal-toolbar mode)
	* lib/gtk_extras/__init__.py (fix_action_group_importance): New
	convenience method to make sure all actions in an ActionGroup that
	don't have icons are marked important

2009-10-31  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/key_editor/recipeEditorPlugin.py (IngredientKeyEditor.update_from_ingredient_editor_cb.process_row):
	Handle groups correctly.

	* README: Fix sql dependencies.

2009-08-26  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* data/ABBREV.txt
	* data/WEIGHT.txt
	* data/FOOD_DES.txt update nutritional database version to SR21

2009-08-22  Thomas M Hinkle  <tom@minime>

	* glade/recCardDisplay.glade: Fix add-to-shopping-list button (use stock id)

2009-08-18  Thomas M Hinkle  <tom@minime>

	* src/lib/shopgui.py (ShopGui.__init__): Fix bug that screwed up
	positions of panes in shopping list view.

2009-08-15  Thomas M Hinkle  <tom@minime>

	* src/lib/version.py (version): Push version to 0.15.0 (will be
	stable release -- dependencies, alas, have changed enough that
	0.13.x has become unstable on up-to-date systems.

	* create_manifest.py: Add style/ directory to manifest.

	* src/test_gui.py (BasicTests.tearDown): Make sure processes
	really die.

	* src/lib/threadManager.py (ThreadManagerGui.__init__): Add title
	to default dialog.

	* src/lib/reccard.py (TextFieldEditor.setup_main_interface): Add
	a11y names for all entries to help make dogtail-based testing
	easier.

	* src/lib/importers/interactive_importer.py: Fix default tags to
	include tags for all text fields.

	* src/lib/importers/importManager.py (ImportManager.offer_web_import):
	Remove "." from dialog title (Enter website address)

	* src/lib/importers/generic_recipe_parser.py (RecipeParser):
	Include notes in list of fields automatically parsed.
	(RecipeParser.ing_matcher): Fix typo in regexp that made any line
	starting with the letter "a" look like in ingredient (require a
	space between number or article and word)

	* src/lib/gglobals.py (REC_ATTRS): Fix typo that put extra colon in yield unit field.

2009-08-06  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.IGNORE):
	Ignore style tag.

	* src/lib/plugins/import_export/web_import_plugin/generic_web_importer_plugin.py (GenericWebImporter.get_importer):
	Fix typo (get_web_importer -> self.get_web_importer

2009-08-03  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/key_editor/keyEditor.py (KeyEditor.__init__):
	Fix case of 'key' (error caused extra search to be run on
	launching keyEditor.py)
	(KeyStore.limit): Only limit if text has changed.
	(KeyStore.get_recs): Fix recipe fetching (old DB change --
	id->recipe_id in ingredients table)

2009-07-28  Thomas M Hinkle  <tom@minime>

	* src/lib/reccard.py (RecCardDisplay.multiplication_change_cb):
	Implement multiplication again.

2009-07-15  Thomas M Hinkle  <tom@minime>

	* src/lib/ImageExtras.py (get_pixbuf_from_jpg): Create one unique
	tempfile per session, rather than hardcoding name
	gourmet_tempfile, which breaks Gourmet in multiuser
	environments (bug #271712)

	* windows/gtkrc: Remove custom theme to try to work around bug
	with vertical notebooks (see bug #2768204)

	* src/lib/plugin_loader.py (MasterLoader.load_plugin_directories):
	Fix hardcoded / in glob path. Fix from Julianne Sharer.

2009-07-14  Thomas M Hinkle  <tom@minime>

	* src/lib/importers/interactive_importer.py (InteractiveImporter.commit_changes):
	Fix syntax error in last commit (parens).
	* src/lib/defaults/defaults_de.py: Unicodify strings (u'')
	* src/lib/convert.py (float_to_metric): Use integer format
	code (%i) instead of string format-code which allows decimals to
	slip through formatting algorithm when they shouldn't (and
	non-localized decimals at that)
	(float_string): Allow people with commas as decimal separators to
	correctly parse recipes from period-separated locales where
	unambiguous (e.g. 23.00 and not 23.000).

2009-06-27  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/importers/interactive_importer.py (InteractiveImporter.commit_changes.mark_sorter):
	Handle markup in title of recipe in imageBrowser dialog window.

2009-06-18  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/* Get rid of old debugging print statements throughout library.

	* src/lib/importers/interactive_importer.py (InteractiveImporter.setup_window):
	Set parent to threadManagerGui dialog.

	* src/lib/version.py: version->0.14.10

	* src/lib/threadManager.py (ThreadManagerGui.__init__): Make
	thread manager dialog transient for main Gourmet window if not
	told who its transient for.

2009-06-17  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/gxml_plugin/gxml_exporter_plugin.py (GourmetExportChecker.check_attrs):
	Fix tests (read files as utf-8)

	* src/lib/plugins/nutritional_information/reccard_plugin.py: servings->yields
	* src/lib/plugins/nutritional_information/nutritionLabel.py: servings->yields
	* src/lib/plugins/nutritional_information/export_plugin.py (NutritionBaseExporterPlugin.get_nutritional_info_as_text_blob): servings->yields
	* src/lib/GourmetRecipeManager.py (StuffThatShouldBePlugins.batch_edit_recs):
	Remove obsolete FieldEditor (moved to plugin).

2009-06-17  Thomas M Hinkle  <tom@minime>

	* src/lib/keymanager.py (KeyManager.__init__): Initialize categories again.

2009-06-16  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/nutritional_information/nutritionDruid.py (NutritionInfoDruid.apply_custom):
	Fix custom information for fat.

2009-06-07  Thomas M Hinkle  <tom@minime>

	* src/lib/recipeManager.py (DatabaseShopper.init_orgdic): Use new
	initailize method of dbDic
	(DatabaseShopper.init_pantry): Use new initialize method of dbDic

	* src/lib/plugin_loader.py (MasterLoader.default_active_plugin_sets):
	Fix typo in list of plugins (missing comma).

	* src/lib/backends/db.py (dbDic.initialize): Add fast method for
	initializing a dbDic from defaults (faster than adding rows one at
	a time)

	* src/lib/keyEditor: Get rid of cruft (moved to plugin long ago)

	* src/lib/keymanager.py (KeyManager.__init__): Speed up
	initialization of keydic. Don't initialize each word in keydic
	from defaults (this should be part of the key editor plugin -- in
	our default mode, our users don't really care about keys (they
	always get the defaults) so we don't need to worry about setting
	up the DB for search (which is costly and makes first load seem
	unduly slow).

	* src/lib/version.py (version): Version->0.14.9

2009-06-04  Thomas M Hinkle  <tom@minime>

	* src/lib/plugin_loader.py (MasterLoader.default_active_plugin_sets):
	Add spellcheck to plugins that default to on.

	* src/lib/gtk_extras/TextBufferMarkup.py (PangoBuffer.get_text):
	Ignore tags that we didn't put there (such as those from
	gtkspell).

	* src/lib/plugins/spellcheck*: Add spellcheck plugin (adds
	automatic spell checking to all TextViews in recipe card editor.

	* src/lib/convert.py (NUM_AND_FRACTION_REGEXP): Fix typo for
	langauges without fraction support (ubuntu bug #352678)

	* test_deb.sh: Wipe out packages installed by python2.6 as well.

	* src/lib/reccard.py (RecCard.__init__): ++ get app if not handed
	GRM instance.

	* src/lib/plugin.py (RecEditorPlugin): ++documentation

	* src/lib/gtk_extras/dialog_extras.py (MessageDialog.setup_dialog):
	++title on dialog (helps out with testing w/ dogtail + just makes
	sense).

2009-06-04  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/importers/interactive_importer.py: Add support for old
	style "servings" tags to support legacy importer/markup scripts.

	* src/lib/importers/importer.py (Importer.commit_rec): Make sure
	yields is floated.

2009-05-30  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/reccard.py (RecSelector.ok): If recipe has a yields
	value, ask user how much they would like to add (this allows user
	to specify e.g. "3 cups" or "2 crusts", which is easier than
	changing the amount of recipes, which is what shows up in the
	ingredient list.
	(YieldSelector): Dialog for selecting amount of recipe based on
	yields value.
	(getYieldSelection): Convenience function for grabbing amount of
	recipe based on yields value (or not).

2009-05-30  Thomas M Hinkle  <tom@minime>

	* src/lib/test_plugin_loader.py: Add simple plugin_loader test
	file.
	* src/lib/gtk_extras/dialog_extras.py (ProgressDialog.setup_buttons):
	Bypass strange bug in pygtk with python2.6 which effectively
	changes ToggleButton API
	* Release 0.14.8

2009-05-29  Thomas M Hinkle  <tom@minime>

	* gourmet.desktop.in (_Comment): Update description of app.

	* setup.py (maybe_intltool): Apply patch from Rupert Swarbrick
	<rswarbrick@googlemail.com> which avoids running intltool-merge
	when not necessary.

2009-05-28  Thomas M Hinkle  <tom@minime>

	* MANIFEST: Don't include test_* files in MANIFEST.

2009-05-26  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/browse_recipes/browser.py (RecipeBrowserView.build_base_model):
	Don't include yields in browser.

2009-05-25  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_importer_plugin.py (test_dir):
	Look for sample recs in src/tests/recipe_files...

	* src/lib/exporters/test_exportManager.py (TestExports.testSingleExport):
	Improve error message when plugin's check_export method throws an
	error.

2009-05-24  Thomas M Hinkle  <tom@minime>

	* src/lib/importers/xml_importer.py (Converter.do_run): Make sure
	we get added_recs from recHandler class.

	* src/lib/importers/importer.py (Importer.__init__): Get
	keymanager using new singleton access method.

	* src/lib/importers/importManager.py (ImportManager.import_filenames):
	make import_filenames return a list of importer instances that we
	used.

2009-05-24  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/exportManager.py (ExportManager.get_extra_prefs):
	Add method for handling of extra prefs (through UI or
	automagically).
	(do_multiple_export): Use get_extra_prefs / extra_prefs parameter
	(ExportManager.do_single_export): Use get_extra_prefs /
	extra_prefs parameter

2009-05-24  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/import_export/gxml_plugin/gxml_exporter_plugin.py (GourmetExportChecker):
	Add class for testing exports for validity.
	(GourmetExporterPlugin.check_export): Run export checker.

	* src/lib/exporters/test_exportManager.py (TestExports.testSingleExport):
	Run plugin's check_export script if it has one (allows plugins to
	implement their own test).

	* src/lib/reccard.py (IngredientController.get_extra_ingredient_attributes):
	Don't throw error if item is blank/None

2009-05-23  Thomas M Hinkle  <tom@minime>

	* src/tests/recipe_files/mealmaster.mmf: Add custom yield (6 puffs
	for Almond puff)

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_importer.py (mmf_importer.handle_line):
	Add support for yields units other than servingts.

2009-05-19  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/exporter.py (exporter.__init__._grab_attr_):
	Fix handling of yield/yield unit output.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter_plugin.py (PdfExporterPlugin.get_default_prefs):
	Use DEFAULT_PDF_ARGS for default PDF prefs.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py: Update default PDF args.

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_exporter_plugin.py (MealmasterExporterPlugin.get_multiple_exporter):
	Remove obsolete args (conv/prog)

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_exporter.py (mealmaster_exporter.__init__):
	Get mealmaster_importer from plugin, not from obsolete location
	inside Gourmet's main libraries.

	* src/lib/plugins/import_export/html_plugin/html_exporter.py (website_exporter): Update servings->yields

	* (Head): Rename test suites (*_tests.py -> test_*). I had
	preferred the alphabetization of *_tests.py, but a number of
	unittest tools are written to work only the other way.

2009-05-17  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/nutritional_information/nutrition.py (NutritionData.get_nutinfo_for_ing):
	Catch very unusual corner case where i.rangeamount and i.amount
	don't add cleanly (this means something's wrong with the inputs --
	but the least we can do is display a nicer error message).

	* src/lib/backends/db_tests.py (TestMoreDataStuff.test_modify_rec):
	Add test to make sure modify_rec is working.
	(TestMoreDataStuff.test_modify_ing): Add test to make sure
	modify_ing is working (this would have caught the regression in my
	last commit).

	* src/lib/backends/db.py (RecData.add_ings): Move fix previously
	put in validate_ingdic here (putting it in validate_ingdic has bad
	side effects -- oops)
	(validate_ingdic): Remove code put here earlier today (it caused
	modify_ing, etc. to delete data)

	* src/lib/importers/importer_tests.py: Add new test suites for
	base import class (including test against regression of today's
	new bugfix)

	* src/test_gourmet.py: Add new tests suites.

	* src/lib/importers/interactive_importer_tests.py: basic test
	suite for interactive importer (created to track down bug with
	"disappearing" ingredient units).

	* src/lib/importers/importer.py (RatingConverter.get_conversions):
	Fix converter (bad import call)

	* src/lib/backends/db.py (RecData.validate_ingdic): Make sure
	ingdic includes keys for all columns. This avoids a very nasty bug
	when executing an insert statement with more than one
	row (basically, we'd drop random columns if the rows didn't all
	have the same columns).

2009-05-16  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/test_gourmet.py: Add unit testing script (currently tests DB
	and convert backends.)

	* src/lib/backends/db_tests.py: Convert db tests to use unittest
	module.

	* src/lib/convert_tests.py: Add testing file for our convert module.

2009-05-15  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/tests/recipe_files/athenos.mx2: Add test mastercook file for importing.

	src/lib/plugins/import_export/gxml_plugin/gxml2_importer.py (RecHandler.endElement):
	Add code for parsing yields field into yields and yields_unit.

	* src/lib/plugins/import_export/gxml_plugin/gxml2_exporter.py (recipe_table_to_xml.__init__):
	Change servings to yields.

	* src/lib/backends/db_tests.py (test_unicode): Extend tests of
	unicode support.

2009-05-10  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/importers/xml_importer.py (Converter.__init__): Get rid
	of self.name assignment (Thread throws an error otherwise)

	* src/lib/backends/db.py (RecData._force_unicode): Force unicode
	for modify methods as well (fixes traceback on import with
	non-unicode text that was getting fed straight to sqlite.

2009-05-07  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/exporter.py (exporter_mult._grab_attr_): Add yields/yield_unit
	(exporter.__init__._grab_attr_): Add support for yields/yield_unit

2009-05-05  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/threadManager.py (SuspendableThread.__init__): Don't set name attribute on Thread (pass it to Thread.__init__() call (setting name throws an error in python 2.6)

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.__init__):
	No longer set name attribute (this breaks the python 2.6
	implementation of Thread)

	* src/lib/importers/interactive_importer.py: Add yield_unit to
	buttons.

2009-05-01  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/recipeIdentifier.py (get_ingredient_hash): md5 ->
	hashlib (remove deprecated md5 lib)

	* src/lib/gtk_extras/thumbnail.py (check_for_thumbnail): md5 ->
	hashlib (remove deprecated md5 lib)

	* src/lib/backends/db.py : Fix unicode type errors from sqlalchemy.
	* src/lib/*: Change servings->yields

2009-03-27  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/exportManager.py (ExportManager.offer_multiple_export):
	Include any recipes linked to in your recipes in your export.

	* src/lib/backends/db.py (RecData.include_linked_recipes): Add
	convenience method to append linked recipes (from
	recipe-as-ingredient) to a list of recipes.

2009-03-26  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/gtk_extras/dialog_extras.py (saveas_file): If we can't
	guess our file type based on the extension, use whatever is
	selected in the filetype combo box as fallback.

	* src/lib/exporters/exportManager.py (ExportManager.offer_multiple_export):
	Show error message if we don't get an export type.

	* src/lib/backends/db.py (RecData.get_amount_and_unit): Don't
	require conv argument to be passed (switching to singleton design
	pattern...)

2009-03-26  Artis Rozentāls  <artis.rozentals@gmail.com>

	* src/lib/plugins/nutritional_information/nutrition.py (NutritionData.set_key_from_ndbno):
	Fix association editing.

2009-03-24  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/html_plugin/html_exporter_plugin.py (HtmlExporterPlugin.get_multiple_exporter):
	Eliminate obsolete arguments (progress_func is no longer needed
	with our new signal interface and converters are now gotten using
	a singleton design pattern.

2009-03-14  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugin_gui.py (PluginChooser.do_change_plugin): Display
	error to user when loading a plugin fails. Give suggestions as to
	how to install dependencies in case of import error.

	* src/lib/plugin_loader.py (MasterLoader): Remove key_editor from
	default plugin set. This is a lot of functionality to put on
	people who don't want it -- removing it greatly simplifies Gourmet
	for those not interested.
	(MasterLoader.__init__): Add class variable 'errors' to keep track
	of errors raised in instantiating plugins, etc. This allows
	plugin_gui to display these errors to users. Use this variable
	when instantiating PluginSets to keep track of error messages our
	users may want.

2009-03-07  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/shopgui.py (ShopGui): Prevent ShopGui window from
	getting destroyed on delete-event (when user closes window from WM
	control).

2009-03-01  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/shopgui.py (ShopGui.item_added): Make sure added items
	don't end up in the pantry.

2009-02-28  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/listsaver: Added plugin (this was in the tarball
	released earlier, but had accidentally not been added to CVS).

2009-02-22  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/key_editor/recipeEditorPlugin.py (IngredientKeyEditor.update_from_ingredient_editor_cb):
	Fix typo that caused weirdness in ingredient key editor
	view (where key of last ingredient in list got propogated to
	ingredients as they were added).
	(IngredientKeyEditor.update_from_ingredient_editor_cb): Actually
	guess the key using keyManager rather than just cutting off key
	after the semicolon.

	* src/lib/reccard.py (IngredientEditor): Remove old
	IngredientEditor class (This has all been simplified or moved to
	plugins).

	* src/lib/keymanager.py (KeyManager.look_for_key): Change math on
	key lookup slightly so that multi-word keys such as "chocolate
	chips" get penalized when matching on single-word
	items ("chocolate"), just as we would punish "chocolate" for being
	only one word in "chocolate chips".

	* src/lib/plugins/key_editor/keyEditor.py (KeyEditor.__init__):
	Create our own keymodel (old use of rg.rd.inginfo is obsolete).

2009-02-21  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/version.py - Version-> 0.14.7. Released 0.14.7
	tarball+deb to SF

2009-02-21  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/nutritional_information/main_plugin.py (NutritionMainPlugin.activate):
	Fix add_icon call.

	* src/lib/plugins/nutritional_information/__init__.py (plugins): Add shopping list plugin
	* src/lib/shopgui.py (ui): Add placeholder to file menu for
	plugins to add things above "close".
	(ShopGui.__init__): Add ShoppingListPlugin

	* src/lib/reccard.py (IngredientEditorModule.add_ingredient_from_line):
	Fix ingredient-adding for lines with no amount.

	* src/lib/plugin.py (ShoppingListPlugin.__init__): Fix
	ShoppingListPlugin API (no menu_bars params necessary, just a ui
	string)

	* src/lib/gglobals.py (add_icon): Fix add_icon to work as
	advertised.

2009-02-19  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/GourmetRecipeManager.py (GourmetApplication.setup_prefs):
	Use singleton method to get prefs
	(GourmetApplication.setup_shopping): No arguments necessary now to
	get ShopGUI

2009-02-18  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugin.py (ShoppingListPlugin): Add ShoppingListPlugin
	class.

	* src/lib/shopgui.py: Complete overhaul of the shopping UI -- we
	now use a UIManager based GUI in place of the glade-based one from
	previous Gourmet versions. This allows us to be easily pluggable,
	among other things. In addition to converting the interface, a
	"Change Category" button has been added to the toolbar so that it
	does not require right-clicking to discover (those right-clicking
	still works).

2009-02-16  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/python_shell/ipython_view.py: Import IPython
	outright -- if there's an ImportError, let the plugin fail to
	instantiate (this makes sense, since the plugin won't work without
	IPython)

	* src/lib/exporters/exporter.py (exporter.__init__.handle_markup):
	Handle case where handle_markup is handed None

	* Release 0.14.6 tarball and .deb to SF.net
	
	* src/lib/check_encodings.py (EncodingDialog): Fix type on encodings.
	(EncodingDialog.diff_texts): Make sure we base our diffs on the
	encoding with the most lines. Otherwise, utf-16 screws us up in
	most cases so the diff-view no longer works properly.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (PdfExporter.__init__):
	Sshhh.

	* src/lib/gtk_extras/dialog_extras.py (MessageDialog): Allow
	passing modal=False to make this a non-modal dialog.

	* src/lib/GourmetRecipeManager.py (RecGui.offer_url): Make dialog
	non-modal -- the modal dialog was freezing up Gourmet after user
	clicked "Jump to" button.

2009-02-15  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/nutritional_information/databaseGrabber.py (DatabaseGrabber.parse_abbrevfile):
	Use new do_add_fast and commit_fast_adds method to drastically
	speed-up initial population of nutritional DB
	(DatabaseGrabber.parse_weightfile): Use new do_add_fast and
	commit_fast_adds method to drastically speed-up initial population
	of nutritional DB.
	* src/lib/backends/db.py (RecData.do_add_fast): Add method that
	uses sqlite (bypassing sqlalchemy) to add to the DB. This
	substantially speeds up adding things to the DB. The method
	returns nothing (unlike do_add, which returns a reference to the
	added object) and we need to call commit_fast_adds in order to
	commit the additions to the DB.
	(RecData.commit_fast_adds): A method to commit anything added
	using do_add_fast

2009-02-13  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/shopping_associations/shopping_key_editor_plugin.py (KeyEditorPlugin):
	Add text box that allows editing shopping category for multiple
	selected ingredient keys at a time.

	* src/lib/plugins/nutritional_information/data_plugin.py (NutritionDataPlugin.create_tables):
	Use Text() type from sqlalchemy instead of deprecated
	String(length=None)

	* src/lib/plugins/key_editor/recipeEditorPlugin.py (IngredientKeyEditor.setup_main_interface):
	Make TreeView allow multiple selections so we can do actions on
	multiple keys at once.
	(IngredientKeyEditor.setup_main_interface): Setup any extra
	widgets provided by plugins.

	* src/lib/plugins/key_editor/keyEditorPluggable.py (KeyEditorPlugin):
	Update API to allow plugins to provide a widget for changing value
	for all selected rows.

	* src/lib/backends/db.py (RecData.alter_table): Use embedded
	select in insert statement rather than pythonic for-loop to loop
	through data -- this is enormously faster.

	* src/lib/reccard.py (RecEditor.ui): Remove KeyEditor (moved to plugin)
	(UndoableTreeStuff.record_positions): Fix mess with attribute name changes.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.show_about):
	Remove colons from strings marked for translation.

2009-02-08  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/key_editor/keyEditor.py (KeyEditor.tree_edited):
	rd.update -> rd.update_by_criteria (correct method name)

	* src/lib/defaults/defaults.py: Fix SF bug #1947796 where calling
	Gourmet with an unsupported locale broke Gourmet and made it fail
	to start.

2009-02-07  Thomas Mills Hinkle  <tom@hydrophax>

	* glade/recCardIngredientsEditor.glade: Simplify ingredient
	interface -- remove detailed expander widget. We now simply have
	an "Add" textbox and a list of ingredients. All of the complexity
	of ingredient keys is hidden in this view now, leaving our basic
	interface simpler and cleaner.

	* src/lib/plugin.py (RecEditorPlugin): Create RecEditorPlugin
	class.
	(RecEditorModule.__gsignals__): Add signals 'saved' and
	'toggle-edited' to RecEditorModule for communicating state-changes
	of individual modules.
	(IngredientControllerPlugin): ++IngredientControllerPlugin.

	* src/lib/reccard.py (RecEditor.add_plugin): Rework
	plugin-interface as part of making ingkey-editor plugin a recipe
	card editor module.
	(DescriptionEditorModule.save): Use new signal interface to
	indicate saved.
	(IngredientController): Make controller pluggable so that plugins
	can add info to ingredients if they like.
	(IngredientTreeUI.setup_columns): Remove ingredient key and
	shopping category from standard treeview -- these are now only
	visible with plugins.

	* src/lib/version.py (version): Version->0.14.6

2009-02-03  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/defaults/defaults_en_GB.py: Replace missing
	comma (syntax error)

	* src/lib/version.py: Version->0.14.5 for release

	* src/lib/reccard.py: Change icon to new recipe card/editor icons.

2009-02-01  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/key_editor/keyeditor.glade: Remove "Edit
	nutritional info" button.

	* src/lib/plugins/key_editor/keyEditor.py (KeyEditor): Remove
	references to nutritional info. Update to work with current DB
	front-end.

	* src/lib/gtk_extras/treeview_extras.py (selectionSaver.add_selection):
	Fix mysterious bug that occurred when we tried to use sqlalchemy
	0.5 rowobjects as dictionary keys.
	(selectionSaver.restore_selections): Fix mysterious bug that
	occurred when we tried to use sqlalchemy 0.5 rowobjects as
	dictionary keys.

	* src/lib/backends/db.py (RecData.get_ingkeys_with_count):
	Implement the functionality needed for a keyEditor interface.

	* src/lib/gglobals.py: ++ png icons for reccard and reccard_edit.

2009-01-31  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/unit_display_prefs: New plugin that allows user
	to specify which kinds of units to display, resulting in
	displaying e.g. all metric units without the need to tinker with
	the underlying data.

	* src/lib/defaults/defaults_en_GB.py (CONVERTER_TABLE): Add units for
	non-American cups (Japanese cup, metric cup, imperial cup,
	imperial pint).

	* src/lib/defaults/defaults_en.py (CONVERTER_TABLE): same change as defaults_en.py

	* src/lib/defaults/defaults.py (unit_rounding_guide): Add
	parameter unit_rounding_guide (which can be overridden in the
	defaults_XX files). This allows us to hone what kinds of decimal
	values we show for different units.

	* src/lib/backends/db.py (RecData.get_amount_and_unit): Make
	get_amount_and_unit take arguments favor_current_unit and
	preferred_unit_group to allow further control over how it handles
	conversion. Also make pluggable, enabling our new
	unit_display_prefs plugin to do its work.

	* src/lib/shopping.py (Shopper._ing_compare): Disable special
	ingorder comparisons, falling back to alphabetical. In the future,
	it would be worth looking into what was implemented and why it was
	failing -- I've simply disabled the functionality since it wasn't
	working properly anyway.

	* src/lib/reccard.py (RecCardDisplay.toggle_readable_units_cb):
	Fix reference to obsolete method resetIngList (replaced by
	display_ingredients)

	* src/lib/plugin_loader.py (Pluggable.run_pre_hook): Changed API
	around pre_hook -- pre-hooks can now modify the args fed to the
	function they're hooking around by returning args,kwargs as the
	return value. If they don't return a tuple and a dictionary, then
	we fail with a warning (this means the old API will fail with a
	warning until I update old plugins that use this).
	(pluggable_method._): Changed pre-hook API (see above)

	* src/lib/convert.py (float_to_metric): Changes to float-to-metric
	to allow rounding based on an approx value rather than always
	assuming we want 2 decimal points.
	(float_to_frac): Return a simple integer if we're within approx of
	an integer.
	(Converter.adjust_unit): Accept a parameter
	preferred_unit_groups. If we have this parameter, we look for
	conversions within our preferred groups and convert if possible. A
	group could be, e.g. metric mass, metric volume, imperial volume,
	etc., as defined in UNIT_GROUPS in defaults.
	(Converter.readability_score): Adjust scoring algorithm: being a
	weird decimal is less bad than being out of the defined range (I
	was getting values like 2034 mL instead of 2 L because it
	preferred the integer (2034) to the decimal even though the
	integer was outside the preferred range for mL).

2009-01-28  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/reccard.py: Add shop-recipe to menus. Add key commands
	for most menu items.

	* glade/shopList.glade: Remove nutritional info button/icon (this
	should become a plugin anyway)

	* test_deb.sh (LATEST_DEB): Remove python version specificity.

	* Released 0.14.4 to SF as .deb and .tar.gz

	* src/lib/gtk_extras/treeview_extras.py (selectionSaver.restore_selections):
	Change variable names from iter->itr (to avoid unintended
	consequences). Unsuccessfully trying to get at mysterious
	traceback in restore_selections and add_selection (somehow builtin
	dictionary method get() is not working).

	* images/reccard.ico: Added reccard icon

	* images/Nutrition.png: Moved to the plugin

	* src/lib/plugins/nutritional_information/images/Nutrition.png: Moved from images/

2009-01-27  Thomas Mills Hinkle  <tom@hydrophax>

	* create_manifest.py: Add png's to plugin files to include; add images/*.ico to included files.

	* gourmet.desktop.in (Categories): Category->Utility

	* setup.py: Apply debian patch; include png etc.

	* src/lib/plugins/nutritional_information/main_plugin.py (NutritionMainPlugin.activate):
	Add nutritional icon.

	* src/lib/plugins/import_export/website_import_plugins/foodnetwork_plugin.py (test_url):
	Be less verbose.

	* src/lib/plugins/import_export/website_import_plugins/about_dot_com_plugin.py (test_url):
	Be less verbose.

	* src/lib/gtk_extras/treeview_extras.py: Remove python version
	dependency

	* src/lib/version.py (version): Version->0.14.4
	(copyright): ++2009

	* src/lib/threadManager.py (ThreadManagerGui): Fix resizing
	ugliness on table (it's still ugly, but less so)

	* src/lib/reccard.py (RecCardDisplay.setup_main_window): Add icon
	(RecEditor.setup_main_interface): Add icon

	* src/lib/gglobals.py (add_icon): Rework code for adding icons to
	make it easy for plugins to add stock icons using the convenience
	function add_icon

	* src/lib/gdebug.py: Remove python version dependency.

	* src/lib/GourmetRecipeManager.py (RecGui.setup_main_window): Add icon to window.

2009-01-19  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/timeScanner.py (make_time_links): Remove line that
	escaped text automatically (caller can handle escaping)

2009-01-18  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/gtk_extras/TextBufferMarkup.py (PangoBuffer.set_text):
	Give a better error message when we have problems with unescaped
	text.

	* src/lib/gtk_extras/LinkedTextView.py (set_text): Remove line
	that unescapes incoming text (this was an attempt to fix another
	bug in the wrong place, but it causes problems when the clients
	are behaving properly...)
	(set_text): Remove line that unescapes incoming text (see above
	comment about dumb fixes creating more problems than they solve).

	* src/lib/plugins/python_shell/ipython_view.py: Eitan Isaacson's
	IPython console widget, with a few modifications.

	* src/lib/plugins/python_shell/__init__.py (ConsolePlugin): Plugin
	to allow access to a python shell from within Gourmet. This is
	incredibly handy for testing/development. It also allows a
	super-geeky user to modify their DB on the fly etc.

	* src/lib/plugins/field_editor/__init__.py (FieldEditorPlugin.show_field_editor):
	Grab GourmetApplication singleton rather than relying on pluggable
	being the GourmetApp, which it isn't always.

	* src/lib/plugins/browse_recipes/browser.py (RecipeBrowserView):
	to selection-multiple mode
	(RecipeBrowserView.get_selected_recipes): Add handy method to grab
	selected recs.
	(RecipeBrowserView.reset_model): Add handy method to reset model
	in response to DB updates.

	* src/lib/plugins/browse_recipes/__init__.py (BrowserPlugin): Set
	up hooks so that actions-on-recipes work (add-to-shopping list,
	delete, etc)

	* src/lib/backends/db.py (RecData.fetch_count): Fix fetch_count to
	actually work as described. Previously, it ignored criteria.
	(RecData.fetch_len): Fix fetch_len to actually use criteria.

	* src/lib/plugin_loader.py (Pluggable.run_post_hook): Post hooks
	should be allowed to modify the return value -- now they're
	required to do so (otherwise they change the return value of the
	method to None, of course.

	* src/lib/GourmetRecipeManager.py (RecGui.get_selected_recs_from_rec_tree):
	Add this method here as a pluggable_method so that plugins can
	implement recipe browsers/search of their own and have it work
	with actions that require selected recipes.
	(RecGui.update_recipe): Make pluggable
	(RecGui.redo_search): Make pluggable
	(RecGui.delete_open_card_carefully): Use
	get_selected_recs_from_rec_tree for deletion (this allows plugins
	to simply modify get_selected_recs_from_rec_tree and have deletion
	of selected recipes work right)
	(RecGui.rec_tree_delete_recs): Add call to show user a message
	telling them they've deleted recipes and offering undo.
	(RecGui.setup_delete_messagebox): Method to set up a message to
	user offering undo after delete.

2009-01-16  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/field_editor.gourmet-plugin.in: Added field
	editor plugin (provides material previously in valueEditor
	module).

	* src/lib/GourmetRecipeManager.py (showValueEditor): Removed value
	editor -- this is now a plugin (field-editor).

	* src/lib/ValueEditor.py - removed file (moved to field_editor plugin)

2009-01-13  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/browse_recipes/images/cooktime_empty_clock.png:
	Adjust pixel height so preptime and cooktime clock-pie-wedges can
	be drawn with same size and position
	
	* src/lib/batchEditor.py (BatchEditor.setup_glade): Use new
	gglobals-based custom handler system.

	* src/lib/GourmetRecipeManager.py (StuffThatShouldBePlugins.batch_edit_recs):
	Fix batch edit callback (self.update_rec_iter ->
	self.rmodel.update_recipe

2009-01-13  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/backends/db.py (RecData.fetch_count): Correctly alias
	select "COUNT AS COUNT" using sqlalchemy's "label" keyword,
	avoiding ugly hack that fails in 0.5 anyway.

	* src/lib/exporters/exportManager.py (ExportManager.do_single_export):
	Fix API for exporting single recipes (this fixes recipe export
	from recipe card view).

2009-01-12  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/backends/db.py (make_order_by): Sort nulls last
	(RecData.search_recipes): Special case sorting of 'rating' (the
	default feels backwards)

2009-01-11  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/browse_recipes/browser.py (RecipeBrowser.append_button):
	Use i18n'd text rather than attribute names themselves for
	breadcrumbs buttons.
	(RecipeBrowserView.get_pixbuf): Use generic icons differentiated
	by attribute (source, category, etc)
	(RecipeBrowserView.build_base_model): Don't browse by link attribute.
	(RecipeBrowserView.get_base_icon): Use base icons from icon_helpers.py

	* src/lib/plugins/browse_recipes/icon_helpers.py (get_pixbuf_from_image):
	Add the rest of the icons.

2009-01-11  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/importers/imageBrowser.py (ImageBrowserDialog.setup_dialog):
	Fix giant-dialog-window problem caused when Progressbar gets
	super-long text (e.g. if an image name is gigantic). Fixes Ubuntu
	bug #289861

	* src/lib/backends/db.py (make_simple_select_arg): Update in_()
	call to comply with SQLAlchemy 0.5 API change.

2009-01-10  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/backends/db.py (RecData._setup_object_for_table): All
	tables need an explicit primary key declared now -- sqlalchemy no
	longer supports implicit oid/rowid in 0.5
	(RecData.setup_info_table): Add sqlite rowid column to table
	explicitly.

	* src/lib/plugin.py (MainPlugin): Add base methods to MainPlugin
	to make it easy to add a tab to main interface (add_tab)

	* src/lib/GourmetRecipeManager.py (RecGui.setup_main_window): Add
	notebook to which plugins can add tabs.

2009-01-07  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/nutritional_information/parser_data.py (ABBREVS):
	Remove RED as abbreviation (and add more specification
	abbreviations like RED NA, RED FAT, RED CAL). (bug # 2492442)

	* src/lib/plugins/browse_recipes/* Implement basic recipe browsing
	interface as alternative to search (a new plugin).

2009-01-03  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/duplicate_finder/recipeMerger.glade: Add
	auto-merge button to glade file. Rename some buttons for
	convenient handling from recipeMerger dialog.

	* src/lib/importers/plaintext_importer.py (TextImporter.pre_run):
	Change attribute total to total_lines to avoid confusing ourbase
	class into thinking that we know how many recipes have based on
	how many lines we have (this fixes a bug where users would see
	something like "Imported 56 of 5000 recipes" for a 5000 lines text
	file with 56 recipes in it).

	* src/lib/importers/importManager.py (ImportManager.__init__): Add
	support for ImportManager plugins (which are separate from our
	standard ImporterPlugins). This allows our RecipeMerger plugin to
	add a post-import hook.

	* src/lib/plugin.py (ImportManagerPlugin): Add base class for
	plugings that modify the ImportManager itself (not new import
	plugins which are already covered by the ImporterPlugin)

	* src/lib/plugins/duplicate_finder/recipeMergerPlugin.py (RecipeMergerImportManagerPlugin):
	Separate out plugin that adds a check for duplicates after new
	imports

	* src/lib/plugins/duplicate_finder/recipeMerger.py (RecipeMergerDialog.merge_next_recipe):
	Add label to interface showing how many recipes have been merged
	so far (giving user a sense of progress).
	(RecipeMergerDialog): Add last_modified time to list of attributes
	shown to user so they can see which recipe is older/newer.
	(RecipeMergerDialog.offer_auto_merge): Add option to automatically
	merge, always selecting for newer or older recipes.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.setup_recipes):
	Remove misleading catchall database connection error message

	* src/lib/check_encodings.py (getEncoding): Fix typo that broke
	encoding dialog by always returning ascii

2008-12-28  Thomas Mills Hinkle  <tom@hydrophax>

	* README: Cut down README to keep it from going out of date so
	fast; update README to describe plugin system; add reportlab as a
	requirement.


2008-12-22  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_exporter_plugin.py (MealmasterExporterPlugin):
	Mealmaster file are text/plain, not text/html

	* src/lib/plugins/import_export/gxml_plugin/gxml_exporter_plugin.py (GourmetExporterPlugin.get_multiple_exporter):
	Remove obsolete references to progress_func

	* src/lib/plugins/import_export/gxml_plugin/gxml2_exporter.py (__init__):
	Remove obsolete references to progress_func

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter_plugin.py (PdfExporterPlugin.get_default_prefs):
	Add method to bypass prefs dialog when necessary.

	* src/lib/gtk_extras/dialog_extras.py (get_type_for_filters):
	Separate function to grab the type of a file based on the filters
	used to save it. Split this out of the functions that get the
	actual file.

	* src/lib/exporters/exportManager.py (ExportManager): Split off
	separate do_multiple_export and do_single_export methods to allow
	outside functions/plugins to use exporters without having the user
	select the file name/type through the UI.

	* src/lib/backends/db.py (RecData.backup_db): Warn user when doing
	a DB update with little/no feedback on progress.

	* src/lib/plugin.py (ExporterPlugin): Add get_default_prefs method
	as alternative to run_extra_prefs_dialog (to enable full
	automation, for example, of libraries that like to ask users for
	prefs)

	* src/lib/plugins/email_plugin/*: Pluginify email
	functionality. We now just support PDF and plain text (the HTML
	was a failed attempt to write HTML email anyway)

	* TESTS: Add some more tests we should do before stable releases.

2008-12-21  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/plaintext.gourmet-plugin.in (_Comment):
	++export.

	* src/lib/plugins/import_export/plaintext_plugin/__init__.py: Add
	plaintext_exporter to plaintext_plugin.

	* src/lib/backends/db.py (RecData.backup_db): Let user know when
	we're doing a potentially slow DB upgrade (note that this is
	implemented directly in GTK so the DB code now depends on GTK at
	least in the upgrade spot; if we ever properly abstract the DB for
	another front-end we'll need to rework this.

	* src/lib/plugin.py (BaseExporterPlugin.add_field.do_write): Don't
	pass mark-up to exporters that expect plain text.

2008-12-19  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/tests/testImporters.py (ImportTestCase.testArchive): Add
	test of archive plugin

	* src/lib/plugins/import_export/archive_plugin/zip_importer_plugin.py (ArchiveImporterPlugin.test_file):
	Fix file pattern matching using fnmatch.

	* glade/preferenceDialog.glade: Hide label for removing items you
	don't use from recipe card interface, since this interface isn't
	currently functional anyway.

	* src/lib/exporters/exporter.py (exporter): Create new
	ALLOW_PLUGINS_TO_WRITE_NEW_FIELDS attribute (defaults to True).

	* src/lib/plugins/import_export/gxml_plugin/gxml2_exporter.py (rec_to_xml):
	Don't allow plugins to create new fields since supposedly we could
	be creating valid XML and plugins would create a moving target.

	* src/lib/plugin.py (BaseExporterPlugin.add_field.do_write):
	Respect new exporter attribute ALLOW_PLUGINS_TO_WRITE_NEW_FIELDS
	which allows exporters to prevent their write_attr/write_text
	methods from being called with new plugin-invented fields

	* src/lib/importers/importManager.py (ImportManager.get_filters):
	Remove repeat filetypes in file dialog filter dropdown + add "All
	importable files" filter as default file filter.

	* src/lib/check_encodings.py (EncodingDialog.create_options): Make
	encodings in encoding choosing dialog follow order given in source
	code for encodings/all_encodings (presumably the order of common
	to uncommon).
	(getEncoding): If user cancels dialog, give them the first
	encoding on the list rather than throwing an error.

2008-12-19  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/check_encodings.py: Fix bug #2446589 by adding utf-16 to
	our list of commonly tried encodings. Also, fix a bug in
	check-encodings/diffy code.

2008-12-16  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.__init__):
	Instantiate InteractiveImporter in __init__.py call.

	* src/lib/importers/imageBrowser.py (grab_thumbnail): Ignore errors
	in thumbnail creation (with warning).

	* src/lib/plugins/nutritional_information/data_plugin.py (NutritionDataPlugin.do_add_nutrition):
	Add do_add_nutrition convenience method (fix bug #2405494)

2008-12-15  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugin_loader.py (MasterLoader.register_pluggable):
	Fixed warning message.

	* src/lib/GourmetRecipeManager.py (SuspendableDeletions): Create
	class for running deletions in their own thread. This used to be
	in the moribund GourmetThreads module.
	(purge_selected_recs): Update deletion code to work with new
	threadManager module.
	(ImporterExporter): Get rid of unused old code.
	(purge_rec_tree): Remove old lock-checking code.
	(RecGui.purge_rec_tree): Update deletion code to work with new
	threadManager module.

	* src/lib/gtk_extras/LinkedTextView.py (LinkedPangoBuffer.set_text):
	Unescape all text so that markup outside of links works
	properly (fixes bug where <span> tags showed up in recipe card
	display view.)

2008-12-13  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/exportManager.py (ExportManager.offer_single_export):
	Give us a useful error message when ignoring an invalid file mode.

	* src/lib/backends/db.py (RecData._format_amount_string_from_amount):
	Don't set default here to be FRACTIONS_ALL. Instead, default to
	use the converter default (whatever that has been set to). This
	will be correct as far as i18n etc.

2008-12-13  Thomas Mills Hinkle  <tom@hydrophax>

	* src/tests/testImporters.py: Update testImporters to work with
	importManager.

	* src/tests/test.py: Use same method gourmet_in_place uses for
	making sure we use our version of Gourmet libraries and not ones
	installed elsewhere in system.
	(profile): Add convenience function for profiling calls.

	* src/lib/plugins/unit_converter/convertGui.py (ConvGui.__init__):
	Use new convert.get_converter() method instead of
	convert.Converter()

	* src/lib/plugins/nutritional_information/enter_nutritional_defaults.py:
	Use new get_converter() method.

	* src/lib/plugins/import_export/mastercook_import_plugin/mastercook_importer_plugin.py (MastercookTextImporterPlugin.get_importer):
	Fix typo (actually return an importer object instead of none).

	* src/lib/plugins/import_export/mastercook_import_plugin/mastercook_importer.py (MastercookXMLHandler.IngR_handler):
	Update start_ing() call (we no longer set recipe_ids before
	commit-time.

	* src/lib/plugins/import_export/gxml_plugin/gxml2_importer.py (RecHandler.endElement):
	Make sure our keys in our dictionary rec are all strings and not
	unicode objects (this throws an error on the DB side).

	* src/lib/version.py (version): 0.14.3 - Get ready for another release soon.
	* src/lib/importers/importer.py (Importer.__init__): use new
	get_converter() method to get Converter singleton. This speeds up
	import by a factor of 3 or so (we were wasting a lot of time
	instantiating new Converter classes all the time because we
	weren't passing it around as designed. It's easier just to use the
	singleton and not have to worry about remembering to pass the
	converter instance back and forth.
	(Importer.check_for_sleep): Fix name error (we no longer import
	anything as gt)
	(Importer.start_rec): Add a warning when ingredients are left from
	previous recipe at start of next recipe.
	(Importer.start_rec): Don't generate new id in start_rec code.
	(Importer.commit_rec): Fix IDs here -- if we have an ID from our
	importer, we add it here to our ID converter (or get it from our
	ID converter if we already created it -- if, for example, another
	recipe in the import referenced this recipe before it was
	created).  We also add ingredients to the database all at once now
	rather than making separate INSERT calls for each ingredient.
	(Importer.start_ing): No longer set recipe_id up in start_ing --
	it will be handled in commit_rec now.
	(Importer.finish_ing): Change commit_ing to finish_ing as we no
	longer commit our ingredients here (we commit all ingredients
	together in commit_rec. This should help speed up imports.
	(Importer.commit_ing): commit_ing is now an alias for finish_ing
	-- this enables all our old code to keep working. However, if any
	old code actually depended on commit_ing commiting the ingredient
	to the database, it will break. The model now is that we run
	start_ing and finish_ing for each ing before running commit_rec.
	(MultipleImporter): Remove MultipleImporter class. This is now
	handled in importManager (and has been for some time)

	* src/lib/importers/importManager.py (ImportManager.__init__):
	Singleton exception should be the first thing that happens here.
	(ImportManager.get_app_and_prefs): Move the get_application() call
	out of __init__ for convenience of subclassing (this allows the
	creation of non-gui-dependant subclasses easily.

	* src/lib/gtk_extras/timeEntry.py (TimeEntry.__init__): use new
	get_converter() method to get Converter singleton.

	* src/lib/exporters/exporter.py (exporter.__init__): use new
	get_converter() method to get Converter singleton.

	* src/lib/backends/db.py (RecData.initialize_connection): Run
	commit() once after initialization. This appears to fix a problem
	where some importers were throwing a "database locked" error on
	import if no recipe had been created yet in that instance of the
	application.
	(RecData.add_rec): Always return ID of recipe (it was
	unpredictable before whether this would return an ID or an object.

	* src/lib/timeScanner.py (c): use new get_converter() method to
	get Converter singleton

	* src/lib/recipeManager.py (DatabaseShopper.init_converter): use
	new get_converter() method to get Converter singleton

	* src/lib/recipeIdentifier.py (hash_recipe): use new
	get_converter() method to get Converter singleton

	* src/lib/convertGui.py (ConvGui.__init__): Converter is now a singleton.
	(get_converter): Convenience method to get the Converter singleton.

	* src/lib/convert.py (Converter.__single): Converter is now a singleton.
	(get_converter): Convenience method to get the Converter singleton.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.__init__):
	use new get_converter() method to get Converter singleton

	(GourmetApplication.setup_prefs): Make sure that we set
	useFractions the same way from prefs and from user toggling.

2008-12-06  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/importers/importManager.py: Remove broken import of
	zip_importer (this has moved into a plugin)

	* test_tarball.sh: Print contents of TESTS as a reminder of what
	to test.

	* create_manifest.py (STARTER_LIST): Include TESTS file in MANIFEST

	* MANIFEST: Include TESTS file in MANIFEST (list of common tests
	we should run on releases -- this might be something downstream
	packages want to make sure they run through.

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.get_images):
	Ignore <img> tags with no src= attribute (I didn't realize there
	were such tags)

	* src/lib/recipeIdentifier.py (apply_line_markup): Don't throw
	error when we get diff markup we don't expect

	* src/lib/gglobals.py (launch_url): Project Ridley -
	gnome.url_show -> gtk.show_uri

	* MANIFEST Update manifest.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter_plugin.py (PdfExporterPlugin.do_single_export):
	Fix name of method.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (PdfExporter.__init__):
	Fix handling of output arg that is an open file.

2008-12-04  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/gtk_extras/treeview_extras.py (print_tree): Add a handy
	convenience function for debugging treeview changes
	(move_iter): Fix destination description on drag-n-drop
	calls. This should fix dnd.

	* src/lib/gdebug.py (debug_decorator): Add handy decorator for
	quick debugging.

2008-12-02  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/import_export/html_plugin/html_exporter_plugin.py (HtmlExporterPlugin.do_single_export):
	Fix single export (export from recipe card view)

	* src/lib/reccard.py (RecCardDisplay.ui): Eliminate KeyEditor (it's a plugin now).
	(IngredientEditorModule.setup_action_groups): Shorten button names
	for ingredient editing toolbar.
	(TextEditor): Add generic TextEditor base class with copy/paste/cut support.
	(DescriptionEditorModule.ui): Add "Cut" item
	(TextFieldEditor.ui): Add "Cut" item
	(TextFieldEditor.setup_action_groups): Add rich text editing (bold/italic/underline)
	(IngredientController.get_path_from_persistent_ref): Avoid
	throwing error when we don't find an iter (return None instead)
	(IngredientController.commit_ingredients.commit_iter): Save new
	ingredient object into ListStore -- this fixes bug that broke
	editing of new ingredients once committed.
	(UndoableTreeStuff.record_positions): Fix typo (rc->re)

2008-12-01  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (RecData.setup_info_table): String->Text
	fix to avoid annoying warning.
	(make_simple_select_arg): Make sure we use unicode in our select
	args.

2008-11-23  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* setup.py: Fix typo that prevented new import/export .in files from being i18n'd.

2008-11-23  Thomas Mills Hinkle  <tom@hydrophax>

	* setup.py (crawl): Automate addition of plugin directories to
	setup.py script.

2008-11-23  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/krecipe_plugin.gourmet-plugin.in:
	Port old krecipe importer to new plugin system.

	* src/lib/plugins/import_export/krecipe_plugin/ New krecipe plugin.

	* src/lib/threadManager.py (ThreadManagerGui.thread_done): Handle
	case where there is no text when we're done with progress bar;
	show completed processes as progress 100% no matter what.

	* src/lib/plugin_loader.py (MasterLoader): Add all import/export
	as defaults (these don't clog up the interface, so why not include
	them).

	* src/lib/GourmetRecipeManager.py (GourmetApplication.quit): Fix
	error saving recipe card on quit.

2008-11-22  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	This is the warning-fix edition, where we get rid of all the
	annoying warnings on Gourmet startup!

	* src/lib/backends/db.py: Use Text() class explicitly for strings
	without length limit instead of deprecated String(length=None

	* src/lib/GourmetRecipeManager.py (RecGui.__init__): Add action
	group search_action before calling setup_main_window -- this gets
	rid of annoying warning about missing actions on startup.

	* src/lib/recindex.py (RecIndex.setup_reccolumns.get_colnum): cell
	renderers take pango.WRAP_* enums, not gtk.WRAP_* enums

	* src/lib/reccard.py (IngredientDisplay.setup_widgets): cell
	renderers take pango.WRAP_ enums, not gtk.WRAP_* enums.

	* glade/preferenceDialog.glade: Fix deprecation error about
	setting an adjustment with non-zero page size.

2008-11-20  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py:
	Change back to BeautifulSoup instead of BeautifulStoneSoup -- this
	makes sure we know about, e.g., standard self-closing tags.

2008-11-17  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/import_export/gxml_plugin/gxml2_exporter.py (rec_to_xml.write_text):
	Make sure we don't create element names with spaces in them.

2008-11-15  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.add_buffer_to_parsed):
	Add code to cycle through MS chars and eliminate those that
	remain/were foobarred by beautifupsoup.

2008-11-11  Thomas Mills Hinkle  <thomas_hinkle@users.sf.net>

	* src/lib/importers/importManager.py (ImportManager.finish_web_import):
	Recognize mimetypes with ;'s and encoding declarations to fix
	issue reported at
	https://sourceforge.net/forum/message.php?msg_id=5619998

2008-11-08  Thomas Mills Hinkle  <thomas_hinkle@users.sf.net>

	* src/lib/plugin_loader.py: Catch plugin errors and display as
	warning; don't let plugin failures bring down whole app at
	start-up.

2008-10-27  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* Version->0.14.2

	* src/lib/importers/html_importer.py: Don't import old
	html_plugins directory

v	* setup.py (result): Add new plugins.
	(data_files): Fix data files.

	* src/lib/backends/db.py (RecData.backup_db): Automatically make a
	copy of the database when we're about to do a DB update, just in
	case something ugly happens.

2008-10-27  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugin_loader.py: Add debug calls to make it easy to see
	what plugins are being loaded from where with a -v flag.

	* src/lib/backends/db.py (RecData.do_add): On ValueError, try
	coercing our dictionary of column->values into proper types or
	None and reinserting. This fixes a bug with the update code, where
	empty strings were being passed where we needed null (None).

2008-10-25  Thomas Hinkle  <thomas_hinkle@users.sourceforge.net>

	* Release 0.14.1

2008-10-25  Thomas Mills HInkle  <tom@hydrophax>

	* src/lib/recindex.py (RecIndex.setup_widgets): Make
	search-as-you-type the default.

	* create_manifest.py: Add data directory
	* src/lib/plugins/import_export/gxml.gourmet-plugin.in: This is an
	import and export plugin

2008-10-25  Thomas Mills HInkle  <thomas_hinkle@users.sourceforge.net>

	* MANIFEST: Include data/ directory.

	* src/lib/legacy_db/db_085/rdatabase.py (mkConverter.create_conv_table):
	Fix capitalization of converter.Converter

2008-10-18  Thomas Mills HInkle  <thomas_hinkle@users.sourceforge.net>
	* src/lib/gtk_extras/mnemonic_manager.py: Fix mnemonic-manager's
	handling of submenus. Automatically add TreeViews to mnemonic
	manager.

	* src/lib/GourmetRecipeManager.py: Add mnemonic-manager calls to
	resolve conflicts.

	* src/lib/reccard.py: Add mnemonic-manager calls to resolve
	mnemonic conflicts.

2008-10-16  Thomas Mills HInkle  <thomas_hinkle@users.sourceforge.net>

	* src/lib/plugins/import_export/web_import_plugin/* - Add web
	import plugin. We've removed the fully-automated web import in
	favor of a preparser to the interactive importer; this means that
	work we do building scrapers can only help, since users can always
	fall-back to fully manual marking up if the scraper does a bad
	job.

	* src/lib/plugins/import_export/website_import_plugins/* - Add web
	import plugin plugin for helping scrape specific websites (food
	channel, about.com, etc).

	* src/lib/importers/interactive_importer.py
	(InteractiveImporter.commit_changes): Add image browser dialog
	back to interactive importer (if self.images is populated)

	* src/lib/plugin_loader.py (MasterLoader.activate_plugin_set):
	Don't iterate over the dictionary since we might modify it.

	* src/lib/plugin.py (PluginPlugin): Create PluginPlugin class for
	allowing Pluggables in plugin classes -- we have plugin plugins
	specify a target string so that different pluggable plugins can
	differentiate among themselves. (This is currently used only for
	allowing the web importer to accept plugins).

2008-10-13  Thomas Mills HInkle  <thinkle@sf.net>

	* src/lib/plugin_loader.py (Pluggable.__init__): Be less verbose...

	* src/lib/GourmetRecipeManager.py (print_recs): Remove gt.* calls.

	* src/lib/exporters/gnomeprinter.py: Correct printing (we were
	using old exporter API in which exporter's did export on
	instantiation. We now work with the new API, though printing is
	not properly threaded (this is a one-line fix to get printing back
	for now -- printing should be reworked with the different printers
	written as plug-ins etc).

	* src/lib/gglobals.py (GladeCustomHandlers.__init__.custom_handler):
	Be less verbose.

2008-10-12  Thomas Mills HInkle  <thomas_hinkle@users.sourceforge.net>

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py: Move
	finish-up code out of PdfExporter.__init__ and into write_foot, so
	that it happens after writing the recipe (this reflects a change
	in the design of exporters -- everything used to happen on
	instantiation, but with threading, everything should happen in the
	do_run call that can be run as a separate thread.

	* src/lib/plugin_loader.py: Fix dependency checking. Add
	check_if_depended_upon and make deactivating a dependee plugin
	deactivate depender plugins well.

	* src/lib/plugin_gui.py (PluginChooser): Check dependencies when
	activating and deactivating and act appropriately. Automatically
	activate dependencies. Ask users when deactivating a
	depeneded-upon plugin.

	* src/lib/sound.py (Player.play_file): Remove debug print statement

2008-10-12  Thomas Mills Hinkle  <thomas_hinkle@sf.net>

	* src/lib/reccard.py (IngredientController.commit_ingredients.commit_iter):
	Fix null amounts (they should be None, not the empty string). 

2008-10-12  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/plugin_loader.py: Remove excess print statements. Don't
	write duplicate entries for plugins in saved_plugins file.

	* src/lib/GourmetRecipeManager.py: Remove all obsolete
	gt.threads calls

	* style/default.css: Make title sans-serif
	* src/lib/exporters/gnomeprinter.py (renderer.write_paragraph):
	Catch IndexErrors if we're trying to break a string with no spaces
	in it.

2008-10-03  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/importers/interactive_importer.py Add support for
	'ignore' tag in parsed data. This will lead to "hidden" text (we
	display a button to un-hide it if the user so chooses).
	* src/lib/importers/generic_recipe_parser.py (RecipeParser.parse):
	Add 'ignored' keyword to base parser (this allows a preparser to
	mark some text not worth the user seeing (for example, banner ads
	in HTML import)
	* src/lib/backends/db
	* src/lib/plugins/import_export/web_import_plugin Port basic
        web import plugin to plugin system. Still not clear on how
        we'll do web import plugin plugins.

2008-08-10  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/xml_exporter.py (XmlExporter.append_text):
	Raise a clear type error when handed non-text.

	* src/lib/backends/db.py (RecData): Fix alter table and
	add-column-to-table routines. Add new table plugin_info for
	storing version info on plugins, so that plugins know the Gourmet
	version and Plugin version at the last time of
	instantiation (since a plugin could have been in use, then out of
	use, then reactivated after an upgrade).

	* src/lib/plugin_loader.py (MasterLoader.activate_plugin_set):
	Avoid activating a plugin set twice.

	* src/lib/plugin.py (DatabasePlugin.activate): Update database
	plugin code to work with new versioning code for telling plugins
	about version changes reliably. Fix bug in exporter plugin when we
	get a None where we expect text.

2008-08-10  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/xml_exporter.py (XmlExporter.append_text):
	Raise a clear type error when handed non-text.

	* src/lib/backends/db.py (RecData): Fix alter table and
	add-column-to-table routines. Add new table plugin_info for
	storing version info on plugins, so that plugins know the Gourmet
	version and Plugin version at the last time of
	instantiation (since a plugin could have been in use, then out of
	use, then reactivated after an upgrade).

	* src/lib/plugin_loader.py (MasterLoader.activate_plugin_set):
	Avoid activating a plugin set twice.

	* src/lib/plugin.py (DatabasePlugin.activate): Update database
	plugin code to work with new versioning code for telling plugins
	about version changes reliably. Fix bug in exporter plugin when we
	get a None where we expect text.

2008-07-24  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_importer_plugin.py (MealmasterImporterPlugin.test_file):
	Fix typo but that made no file look like a Mealmaster file.

	* src/lib/importers/xml_importer.py: Stop passing around recData
	instances (use singleton pattern instead). Also, fix
	capitalization of classes.

	* src/lib/importers/interactive_importer.py: Rewrite interactive
	importer to allow removing tags once applied and to include
	auto-markup of recipes. The UI is basic but functional now, with a
	number of obvious improvements yet-to-be-made. Once this UI is
	mature, it is likely many imprecise importers will be implemented
	as preparsers for the interactive importer rather than as their
	own importers.

	* src/lib/importers/importManager.py (ImportManager): Add code to
	handle web-based import (asking user for URL, fetching file,
	finding importer)

	* src/lib/importers/generic_recipe_parser.py (RecipeParser.parse):
	Update code to work with threadManager based progress-reporting

	* src/lib/backends/db.py (RecData.update_version_info): Fix
	indentation error bug in version update that meant that in new
	installations, the version was being set to an old verison,
	resulting in an attempt to run upgrade code on the 2nd run.

	* src/lib/threadManager.py (NotThreadSafe): Add class
	NotThreadSafe for the somewhat hackish purpose of allowing
	e.g. importer classes that touch the GUI. By inheriting
	NotThreadSafe, subclasses will ensure that such classes are not
	run in their own threads, no matter what, even when they look like
	they should be.

	* src/lib/plugin.py (ImporterPlugin.test_url): Add web methods
	test_url and get_web_importer to ImporterPlugin base class. By
	default, these methods act on normal files (which our
	importManager will retrieve for us), so nothing special has to
	happen except for importers that might, for example, need to know
	the URL whence a file came.

	* src/lib/GourmetRecipeManager.py (ImporterExporter.import_webpageg):
	Move import code for web import to importManager where it belongs

2008-07-08  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/importers/importManager.py (ImportFileList): Add a way
	to handle an importer calling more importers -- specifically, we
	allow ourselves to raise an exception that contains a list of
	files, thus circumventing any threading problems that would happen
	from calling importManager methods within an importer.

	* src/lib/plugin.py (ImporterPlugin.get_importer): Update method
	name in accordance with actual usage (we return an importer class
	rather than doing the import here, so the import manager can
	handle threading etc.

	* src/lib/importers/plaintext_importer.py (TextImporter.__init__):
	Remove rd argument from TextImporter.

	* src/lib/plugins/import_export/ Add mealmaster plugin to cvs. Add
	plugin to handle zip archives and tarballs.

	* src/lib/recipeManager.py (get_recipe_manager): Add
	get_recipe_manager name as alias for poorly named
	default_rec_manager (the right thing would be just to replace the
	name, but I'm lazy just now)

	* src/lib/importers/importer.py (Importer): Rename class Importer
	in accord with conventions. Remove rd argument (as we move to
	singleton pattern to handle this). Remove prog arguments (as we
	move to SuspendableThread to handle this). Move convenience
	function add_to_fn to this file

2008-06-01  Thomas Hinkle   <tmhinkle@gmail.com>

	* Release 0.14.0
	
	* src/lib/plugins/duplicate_finder/recipeMergerPlugin.py: Get rid
	of all GourmetThreads calls (as we plan to delete that module).

	* src/lib/importers/importManager.py (ImportManager.offer_import):
	Call make_rec_visible when we're done importing to show newly
	imported recipes.

	* src/lib/version.py (copyright): ++ last 2 years

	* src/lib/gglobals.py: Get rid of attempts to use gnomevfs

	* setup.py: Remove obsolete nutrition module

	* create_manifest.py: Create a script to generate a MANIFEST
	automatically (this is what MANIFEST.in should do, but trying to
	use MANIFEST.in was turning into a living hell, so I gave up and
	hand-coded a script to do the job more easily)
	* test_tarball.sh: Add call to new MANIFEST-generating script +
	clear out old directories from /tmp/ before starting.

	* src/lib/reccard.py (RecCardDisplay.ui): Remove e-mail
	stuff (this will be reimplemented as a plugin).
	* src/lib/GourmetRecipeManager.py: Remove all e-mail stuff (this
	will be reimplemented in a plugin).

2008-05-24  Thomas Mills Hinkle  <tmhinkle@gmail.com>

	* setup.py (result): Change location of import/export plugins.
	* src/lib/reccard.py (RecCardDisplay.update_image): Show/hide
	image when image has been created or removed.
	(ImageBox.commit): Fix typo that raised error.

2008-05-20  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/backends/db.py (RecData.initialize_connection): Handle
	newer sqlalchemy API
	* src/lib/threadManager.py: Add Terminated exception class
	* src/lib/GourmetRecipeManager.py: Make use of new threading for
	export and import
	* src/lib/gglobals.py: Remove old threading stuff
	* src/lib/prefs.py: Make Prefs a singleton
	* src/lib/exporters/exportManager.py: Use threadManager
	* src/lib/exporters/exporter.py: Use threadManager
	* src/lib/gtk_extras/dialog_extras.py (ModalDialog.setup_expander):
	Put expander into a scrolled window so we don't create monstrous
	dialogs that exceed the screenspace.
	* src/lib/importers/*: Continue working to port importers to
	threadManager and to plugins...

2008-04-26  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_exporter.py (mealmaster_exporter.write_text):
	Fix from Christopher Donham (#1151150)

2008-04-23  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/gtk_extras/dialog_extras.py (ModalDialog.setup_expander):
	Add expander text in scrolled window in case it's too big to fit
	in one dialog

2008-03-05  Thomas Mills HInkle  <tmhinkle@gmail.com>

	** Note - I'm half-way through re-implementing importers and
	import plugins.

	* src/lib/threadManager.py : Create a new module to handle
	threading (so we can move this out of GourmetRecipeManager.py and
	handle it more carefully. This will lead to the elimination of
	GourmetThreads.py and GourmetFauxThreads.py

	* src/lib/importers/__init__.py (Module): Remove importer set-up
	code from here. It now belongs in the new file name
	importManager.py

	* src/lib/keymanager.py (get_keymanager): Make KeyManager a singleton.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.__init__):
	Use new import manager to do imports.

2008-02-25  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* glade/recCardDescriptionEditor.glade: Put recipe card
	description into its own Glade file (part of UIManager rewrite)
	* glade/recCardDisplay.glade UIManager rewrite
	* glade/recCardIngredientsEditor.glade  UIManager rewrite
	* glade/recipe_index.glade - Move recipe index view into its own
	individual glade file
	* src/gourmet_in_place Update gourmet_in_place script to i18n .in files.
	* src/lib/gtk_extras/timeEntry.py (make_time_entry): Rename
	makeTimeEntry to make_time_entry for consistency with new coding
	style.
	* MANIFEST: Add many of plugins to Manifest. (This probably isn't
	all-the-way-updated yet though).

	* Various-other-files-I'm-too-lazy-to-track Making the change to a
	plugin system, this means adding logs of plugins and moving around
	import/export modules. As of this commit, exporters have been
	fully plugin-a-fied; importers have yet to be converted properly.

2008-02-24  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* gourmet.desktop.in: This is now the gourmet desktop file (built
	into an i18n'd version with intltool).

	* setup.py : Add calls to intltool to build desktop files. Add new
	export_plugins.
	
	
2008-01-26  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/gglobals.py: Add our own icons as stock icons.
	* src/lib/backends/db.py (RecData.get_amount_as_float): Our new
	SQLAlchemy class can make amounts show up as floats *or* integers.

2008-01-18  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* setup.py: Proper i18n of desktop file and plugin information files.
	* gourmet.desktop.in: Proper i18n of desktop file.
	* glade/app.glade Remove app.glade
	* glade/converter.glade Remove converter.glade -- this now belongs
	in the UnitConverter plugin.
	* glade/recCardDescriptionEditor.glade Break recCard.glade into pieces
	* glade/recCardDisplay.glade Break recCard.glade into pieces.
	* glade/recCardIngredientsEditor.glade Break recCard.glade up
	* glade/recipe_index.glade Main search view (replaces app.glade)
	* src/lib/plugins/key_editor/*: Create keyEditorPlugin (move
	keyEditor from src/lib/keyEditor to here).
	* src/lib/plugins/key_editor.gourmet-plugin.in: Add Key Editor
	plugin.
	* src/lib/plugins/unit_converter.gourmet-plugin.in: Add Unit
	Converter plugin.
	* src/lib/plugins/nutritional_information.gourmet-plugin.in: Add
	nutritional information plugin.
	* src/lib/plugins/nutritional_information/* Move files from
	src/lib/nutrition/ here. Create reccard_plugin, main_plugin and
	data_plugin
	* src/lib/plugins/duplicate_finder.gourmet-plugin.in: Add
	duplicate_finder plugin.
	* src/lib/gtk_extras/timeEntry.py (make_time_entry): Use proper
	function_or_method_style name for function (was makeTimeEntry)
	* src/lib/exporters/*: Fix Converter capitalization.
	* src/lib/backends/db.py (RecData): Make RecData pluggable.
	(RecData.__init__): Make RecData a singleton (on a per-file basis
	-- that is, we keep a dictionary of database files and only allow
	one instance to be created per file. Also, add a _created flag so
	plugins can tell if they're being plugged in before or after the
	creation of the DB.
	(RecData.setup_tables): Make setup_tables pluggable.
	(setup_nutrition_tables): Remove all nutrition table setup code -
	this is now implemented in the nutrition plugin.
	(RecData.update_version_info): Add code to run the plugin method
	update_version()
	(get_database): Add method to grab singleton database.
	* src/lib/shopgui.py: Remove nutritional information code -- will
	be reimplemented as part of our plugin.
	* src/lib/recipeManager.py (default_rec_manager): Return singleton
	RecipeManager() (singleton for a given db file, that is)
	* src/lib/reccard.py: Remove nutrition items and import new plugin
	framework -- nutrition is now a plugin!
	(GladeCustomHandlers): Remove GladeCustomHandlers -- this is now
	part of gglobals. Update code to use gglobals.gladeCustomHandlers.
	(RecCard.set_edited): Allow edited property to be set (when
	GourmetApplication saves, it does this)
	(RecCardDisplay): Make RecCardDisplay pluggable.
	(RecCardDisplay.setup_style): Make widgets white.
	(RecCardDisplay.remove_plugin_to_left_notebook): Make it possible
	to remove plugin
	(RecEditor): Make RecEditor pluggable.
	(DescriptionEditorModule.setup_main_interface): Use separate glade
	file - recCardDescriptionEditor.glade
	(TextFieldEditor.setup_main_interface): Workaround textview bug by
	setting scroll policy to AUTOMATIC,AUTOMATIC even though we don't
	really want it that way.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.__init__):
	Make GourmetApplication a singleton -- this simplifies life here
	on out.
	(setup_nutrition): Remove - nutrition into a plugin
	(quit): Update reccard calls to work with new recipe card.
	(ImporterExporter.import_cleanup): Add plugin
	hook (pluggable_method decorator) so that the recipeMerger plugin
	can hook into imports.
	(UnitModel): Move UnitModel from convertGui (which is now a
	plugin) here.
	(show_duplicate_finder): Remove - now a plugin
	(show_duplicate_editor): Remove - now a plugin
	(RecGui.__init__): Make Pluggable
	(RecGui.setup_actions): Add show_plugin_chooser action. Remove
	items that are now plugins
	(get_application): Create convenience method to get our singleton
	application.

	* src/lib/Undo.py (UndoHistoryList.set_sensitive): Be less verbose.
	(Module): 

	* src/lib/gglobals.py (GladeCustomHandlers): Add custom handler
	code for glade here. Now anyone who needs a custom handler
	registers it through the gladeCustomHandlers instance that's
	instantiated in gglobals.
	(Module): 

	* src/lib/plugin.py New plugin module. This provides the base
	classes that plugins need to subclass.
	(Module): 

	* src/lib/plugin_gui.py Dialog for turning plugins on and off.
	* src/lib/plugin_loader.py Plugin management module. This provides
	the base class that pluggables need to subclass, as well as
	providing a nice decorator function for making individual methods
	"pluggable" (i.e. for adding pre-hooks and post-hooks)


2008-01-17  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/gtk_extras/timeEntry.py (make_time_entry): Update
	function name to new underscore_function_name norm

2008-01-09  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/convertGui.py: 

	* src/lib/recipeMerger.py: 

2008-01-06  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* glade/recCard.glade (Module): Reorganize glade file as we move
	more of the UI construction into code and out of glade.

	* src/lib/GourmetRecipeManager.py (Module): Reorganize module in
	preparation for coming change to plugin basis. Separate out
	various bits of RecGui class into sub-classes that make more sense
	-- ImporterExporter, GourmetApplication, and so on. Use UIManager
	and ActionManager to build UI rather than glade -- now we use
	UIManager's nifty merging to handle our updated Go menu (formerly
	View menu)

	* src/lib/Undo.py (Module): Move undo stuff that was in reccard.py here.

	* src/lib/batchEditor.py (Module): changed method names (from GourmetRecipeManager.py)

	* src/lib/reccard.py (Module): Completely rearrange module. We
	break recipe editor and recipe display into separate classes. We
	use UIManager and ActionManager for the UI in preparation for the
	coming plugin interface.

	* src/lib/recindex.py (Module): Setup searchActions action group
	for user with uimanager.

	setup_search_views - respect the default_searches parameter.

	searchentry_activate_cb - this callback belongs here and not in
	subclasses.

	* src/lib/backends/db.py: Allow sorting by category.  Implement
	duplicate-finding methods.  make_simple_select_arg now supports
	operators including "in"

	* src/lib/defaults/defaults_en.py: Remove periods from units.

	* src/lib/defaults/defaults_en_GB.py: Remove periods from units.

	* src/lib/gtk_extras/ratingWidget.py: Don't throw an error when we
	receive a click event w/ no selected row

	* src/lib/nutrition/nutritionDruid.py: Use proper exception class
	so that unicode doesn't throw an error in the error-throwing.


2008-01-04  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/exporters/lprprinter.py (Module): Fix import statement
	for dialog_extras (moved to gtk_extras)
	* src/lib/exporters/winprinter.py (Module): Fix import statement
	for dialog_extras (moved to gtk_extras)


2007-12-29  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/convert.py (Module): adjust_amount - if we somehow have
	units in our unit list that don't convert, print warning rather
	than defaulting to no conversion.

	* src/lib/defaults/defaults_en_GB.py (Module): Fix tsp/Tbs. Remove
	periods after imperial unit names.

	* src/lib/defaults/defaults_en.py (Module): Fix tsp/Tbs
	conversion. Remove periods after imperial unit names.

	* src/lib/backends/db.py (Module): Fix category modifications. Fix
	amount-fetching convenience methods (apparently sqlalchemy can
	return an integer out of a float field!?!) Fix dbDic.


2007-12-28  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* Everywhere Change names of database tables from views (metakit
	legacy) to table (current reality). Capitalize all classes.

	* MANIFEST - Remove old database modules; add new one.

	* test_tarball.sh - Assume python2.5 rather than python2.4

	* glade/app.glade - Move search options to menus; hide and
	simplify search interface by default (now that we have "search
	anywhere")

	* src/gourmet_in_place - Some improvements to make sure this gets
	its glade and data files from the source directory.

	* src/lib/convertGui.py (Module): Fix import statement to work
	with the new code organization (gtk_extras.cb_extras)

	* src/lib/gglobals.py (Module): Remove old database stuff (metakit
	v sqlite etc), replace with new.

	* src/lib/GourmetRecipeManager.py (Module) - Break up giant
	__init__ method so it is more readable. Make hitting return work
	if we are not in search-as-you-type mode.

	* src/lib/OptionParser.py (Module) - Remove old database
	options. Add --database-url argument for custom database
	arguments.

	* src/lib/recindex.py (Module): Add "anywhere" to search options
	-- this allows us to search for a string in any of the columns
	without specifying! Also, fix search-as-you-type toggle.
	
	* src/lib/recipeManager.py (Module): Update to use new database.

	* src/lib/timeScanner.py (Module): Update to use capitalized Converter class name.

	* src/lib/upgradeHandler.py (Module): Fix import dialog_extras statement.
	
	* src/lib/backends/__init__.py (Module): Remove inaccurate comments
	
	* src/lib/backends/db.py (Module) - New database backend class
	based on sqlalchemy. This provides at least the basis for support
	for all sql dialects that sqlalchemy supports. You can try other
	database settings by using the database-url argument to Gourmet.

	* src/lib/backends/db_tests.py (Module) - Move tests that were at the
	bottom of rdatabase.py to a separate test file.

	* src/lib/backends/db/* - Remove old legacy database files.

	* src/lib/gtk_extras/timeEntry.py (Module): Fix reference to
	capitalized Converter() class

	* src/lib/exporters/__init__.py (Module): Change rview_to_xml to
	recipe_table_to_xml in accordance with our new freedom from
	metakit semantics.
	
	* src/lib/importers/imageBrowser.py (Module): Fix gtk_extras import.

	* src/lib/importers/importer.py (Module): Fix gtk_extras import.

	* src/lib/nutrition/nutritionDruid.py (Module): Fix up various import
	statements for modules now in gtk_extras.


2007-11-19  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/FileChooserSaveAs.py Class renaming - capitalize all class names.
	* src/lib/convert.py Class renaming - capitalize all class names.
	* src/lib/convertGui.py Class renaming - capitalize all class names.
	* src/lib/reccard.py Class renaming - capitalize all class names.
	* src/lib/recipeManager.py Class renaming - capitalize all class names.
	* src/lib/shopgui.py Class renaming - capitalize all class names.
	* src/lib/shopping.py Class renaming - capitalize all class names.
	* src/lib/backends/rdatabase.py Class renaming - capitalize all class names.
	* src/tests/reference_setup/recipes.db Class renaming - capitalize all class names.

2007-11-19  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/exporters/gxml2_exporter.py Rearrange order of
	attributes to be slightly more logical (with link following
	source, since they are related).

2007-11-11  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* everything or close to it: Rearrange code -- move all defaults_*
	files into defaults/. Move all widgety convenience libraries into
	gtk_extras

2007-10-12  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* Fix non-GNOME fallback about dialog in GourmetRecipeManager.py

2007-09-12  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* i18n/ca.po Updated Catalan translation from Raul Cambero.

2007-09-10  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/defaults_de.py patch from SF user enfant_terribly fixing
	up some problems in the German translation.
	* src/lib/defaults.py  patch from SF user enfant_terrible
	fixing language support on Windows.
	* src/lib/gettext_setup.py patch from SF user enfant_terrible
	fixing language support on Windows.
	* src/lib/GourmetRecipeManager.py patch from SF user
	enfant_terrible fixing language support on Windows.
	* src/lib/recipeMerger.py Properly destroy dialog on close.
	* src/lib/exporters/html_exporter.py Actually apply the changes
	logged on 8/25
	* i18n/de_AT.po Updates from enfant_terrible
	* i18n/de_DE.po Updates from enfant_terrible	

2007-08-25  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/exporters/html_exporter.py Make recipe links hyperlinks.
	
2007-08-25  Thomas M. Hinkle  <thomas_hinkle@sf.net>
	
	* RELEASE 0.13.7
	* TODO Update todo list.
	* glade/nutritionDruid.glade Fix reversion/bug introduced in UI
	cleanup from Jeff/Kiddo
	* src/lib/version.py Upped version to 0.13.7
	* src/lib/backends/sql_db.py Respect SQL libraries different
	paramstyles rather than hardcoding the question mark.
	* src/lib/backends/sqlite_db.py Make sqlite3 (built-into
	python2.5) the default and fallback to pysqlite2 only as
	needed. Respect SQL libraries different paramstyles rather than
	hardcoding the question mark.
	* src/lib/exporters/exporter.py Update exporter so that if two
	recipes have the same name, they can both be exported
	(generate_filename now gets a flag -- if we are exporting multiple
	recipes, we automatically append ID numbers, otherwise we don't,
	since they are unnecessarily ugly if someone just wants to e-mail
	a copy of a single recipe to their mom or whatnot.
	* src/lib/exporters/pdf_exporter.py Fix bug 1776930 (formatting
	broken in PDF). Add links for recipe references and for webpages.
	* src/lib/exporters/html_exporter.py Use the changes in exporter.py
	to avoid screwing up if more than one recipe have the same name.
	* src/lib/exporters/gxml2_exporter.py Export the link field.
	* src/lib/nutrition/nutritionDruid.py Fix nutrition labels per
	ingredients so they don't say "per recipe". Fix bug that broke the
	nutrition druid when user changed an ingredient key.
	* src/tests/testExporters.py Update export tests.
	* src/tests/reference_setup/recipes.db Add a webpage to export
	test suite.
	
2007-08-20  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/defaults_en.py Call granulated sugar granulated sugar,
	not white sugar.
	* src/lib/GourmetRecipeManager When threaded quitting fails, save
	our database just in case the user force-quits and loses
	data. Also, purge deleted ingredients on quit since they won't be
	of any use (they're already lost to the UI--why keep them in the DB)
	* src/lib/backends/sql_db.py Don't return deleted ingredients in
	list of ingredient keys (in get_ingkeys_with_count)
	
2007-08-15  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/backends/sql_db.py Applied patch from Anthony Foglia to
	fix typo bug in find_dupliaces

2007-08-08  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/timer.py Backwards compatability for pre-2.8 versions:
	set_urgency_hint.

2007-08-08  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/Undo.py Fix potential bug that prevents action_hooks
	from being run correctly -- we grab a reference to the action
	directly in case carrying the action out modifies the history list
	itself.
	* src/tests/testRecCard.py Reduce repetition of try/except blocks
	by abstracting out the try/except-with-informative-message
	pattern. Also, make VERBOSE into a global variable (again,
	simplifies).

2007-08-04  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/mastercook_importer.py Make Notes import as
	Notes rather than instructions (bug report from Anthony Foglia).

2007-08-03  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/prefs.py Handle broken config files gracefully. Namely,
	if there is an error loading, print the error to the screen and
	save a backup of the broken file. Then proceed as if there had
	been no original config file (overwriting the old one on a clean
	close with a new, clean config file).

	* src/lib/importers/mastercook_importer.py Fix for attributes with
	< or > signs - path from Anthony Foglia.

2007-07-30  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/recSelector.glade Fix reversion introduced in Jeff/Kiddo
	patch (ShowingLabel had gone missing)

2007-07-19  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/app.glade Glade cleanup from Jeff/Kiddo
	* glade/generic_importer.glade Glade cleanup from Jeff/Kiddo
	* glade/nutritionDruid.glade Glade cleanup from Jeff/Kiddo
	* glade/recMerger.glade Glade cleanup from Jeff/Kiddo
	* glade/recSelector.glade Glade cleanup from Jeff/Kiddo
	* glade/valueEditor.glade Glade cleanup from Jeff/Kiddo
	* src/lib/nutrition/nutritionInfoEditor.py: Add to CVS.

2007-07-19  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/GourmetRecipeManager Use default DEFAULT_HIDDEN_COLUMNS
	for hidden columns (so that not all columns are shown by default).
	* src/lib/cb_extras.py Don't screw up the alignment of combo boxes.
	* src/lib/gglobals.py Add DEFAULT_HIDDEN_COLUMNS so that link,
	servings, preptime and cooktime are not included in index views by
	default.
	* src/lib/recindex.py Use DEFAULT_HIDDEN_COLUMNS
	variable. Ellipsize links when they are shown rather than wraping
	them.
	
2007-07-17  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/gourmet Update copyright dates.
	* src/gourmet_in_place Add convenient script to run Gourmet from
	source in tree.
	* glade/app.glade Change name of ingredient editor, since now it
	edits nutritional info as well as keys.
	* src/lib/ImageExtras.py Commit method needed in bugfix committed
	on on 6/29

2007-07-15  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* MANIFEST Added nutritionInfoEditor.py
	* src/lib/defaults_en_GB.py Declared encoding (PEP 263)

2007-06-29  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/reccard.py Fix bug that prevented images from being
	deleted. While we're at it, remove confirmation dialog on image
	deletion, since it is undo-able.

2007-06-29  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/keyeditor.glade Add button to edit nutritional
	information.
	* glade/nutritionDruid.glade Fix name collisions between two
	different treeview setups that are now in this druid. Make various
	tweaks to nutritional info display page.
	* glade/recCard.glade Add generic "edit nutritional info" button
	(in parallel with all other edit buttons).
	* src/lib/keyEditor.py Add check mark to show whether there is
	nutritional info. Also add callbacks to handle editing nutritional
	info from this view. Wrap text if possible to avoid horizontal
	scrolling.
	* src/lib/reccard.py Add edit_nutrition callback.
	* src/lib/backends/rdatabase.py Add fetch_join method.
	* src/lib/backends/sql_db.py Tweak make_where_statement call to
	allow "in (foo, bar)" SQL queries. Also change handling of "OR"
	and "AND" syntax. Add fetch_join method to allow simple joins.
	* src/lib/nutrition/nutrition.py Allow modifying of existing
	ingkey->ndbno association and conversions. Change from "g." to "g"
	everywhere.
	* src/lib/nutrition/nutritionDruid.py We now allow editing
	nutritional information (and viewing and searching existing info
	in the database). Change "g." to "g" everywhere. Added methods for
	display of nutrtional information. Reconceptualize "back" button
	to work with a simpler stack model.
	* src/lib/nutrition/nutritionLabel.py Add generic show_druid
	method to show druid even when there is no vapor.
	
2007-06-28  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* nutritionDruid.py Clean up code for nutrition druid (part way to
	a complete rewrite).

2007-06-27  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/mastercook_importer.py Fixed order of
	encodings, fixing bug #1721376

2007-06-23  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/recipeMerger.glade Add label for possible message when
	merger window is used as a dialog. Fix close and cancel buttons.
	* src/lib/backends/sql_db.py Fix behavior of find_duplicates and
	find_complete_duplicates when given a recipes parameter.
	* src/lib/importers.py Make MulipleImporter track added_recs
	* src/lib/importers/xml_importer.py Give converters added_ings and
	added_rec attributes (references to underlying importer class)
	* src/lib/GourmetRecipeManager.py Fix typo bug in progress_dialog
	close callback. Add importer callback to bring up duplicates
	dialog when we import recipes that look like duplicates. Fix
	normal RecipeMergerDialog call (from Tools->Find Duplicates) so
	that it uses our new callbacks that will try to show whatever kind
	of duplicate there is rather than show an empty list.

	* src/lib/recipeMerger Merge identical recipes in one-click rather
	than making user click "Apply". Add show_if_there_are_dups
	callback to show the dialog only if there are duplicates found
	(i.e. for use as a post-importer dialog). Also add
	populate_tree_if_possible callback to attempt to set the
	searchType combo box so there will be something to show. Add a
	parameter for a on_close_callback that allows our creator to do
	something when we're closed. Add very lame image display (namely,
	text that says "An image" or "No image").

	* src/lib/version.py Up version to 0.13.6
	
2007-06-18  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* MANIFEST Added recipeMerger stuff.

2007-06-18  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/app.glade Add button to get to recipe merger tool
	(duplicate finder)
	* glade/recipeMerger.glade Make cancel buttons visible. Hide
	tabs. Improve spacing.
	* src/lib/GourmetRecipeManager.py Add callback to show duplicate
	finder/recipe merger.
	* src/lib/recipeIdentifier.py Added header comment.
	* src/lib/recipeMerger.py Fix bug that made ingredient selection
	fail. Add close callback. Remove print statements and add better
	documentation.
	* src/lib/version.py Bring version to 0.13.5 -- we'll up to 0.14
	when we have a "stable" version with our handy new features.

2007-06-17  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/defaults_* Remove . from SI units (such as g, kg, etc.).
	
2007-05-19  Thomas Hinkle  <thomas_hinkle@sf.net>

	* src/lib/convert.py Fix bug in regexp in time parser that would
	through error on some misidentified times.

2007-05-18  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/dialog_extras.py Improve docstring
	* src/lib/mnemonic_manager.py Improve crawling algorithm for
	finding mnemonic labels.
	* src/lib/nutrition/nutritionDruid.py Behave better when user
	cancels out of a dialog.
	* src/lib/reccard.py Move selection down when user adds an
	ingredient.
	* src/lib/recipeIdentifier.py Rework API as I work on writing a
	recipeMerger dialog.
	* src/lib/recipeMerger.py Check in incomplete duplicate-recipe
	merger/eliminator code.
	* glade/recipeMerger.glade Check in incomplete duplicate-recipe
	merger/eliminator code.
	* src/lib/recindex.py Expand title column by default (rather than
	letting the last column take up all the extra space)
	* src/lib/version.py Bump up version number - When we finish this
	merger stuff &c this will be a new .x version (0.14.0)
	* src/lib/backends/rdatabase.py Add methods for finding duplicates
	* src/lib/backends/sql_db.py Improve duplicate-finding SQL
	* src/lib/exporters/recipe_emailer.py Allow e-mailing PDFs.
	
	
2007-03-25  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/rezkonv_importer.py Fix encoding on top. Also
	fix some other errors -- import convert module and fix a regexp.

2007-03-18  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/mnemonic_manager.py Improve documentation.

2007-03-17  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/exporters/xml_exporter.py Patch [ 1682624 ] Remove
	double escaping in xml export from Lennart Fricke
	* src/lib/exporters/exporter.py Fix Bug [ 1682613 ] Export with
	German locale Servings multiplied by 10. We avoid unnecessary
	float->text->float conversion in mult_exporter.py. Hopefully this
	fixes the issue (not yet tested in German Locale)


2007-03-09  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/interactive_importer.py Fix bug where, when
	unknown units are put into the item string, a space was omitted.

	

2007-02-11  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/convert.py Fix bug in timestring_to_seconds that threw
	error in some unparseable times.

2007-02-10  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/recipeIdentifier.py Only round when we have something to
	round.

2007-01-21  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/backends/rdatabase.py Fix bug in update code that kept
	us from properly updating if a version was not stored correctly.
	* src/lib/recipeIdentifier.py Fix bug in standardize_ingredient
	that threw an exception with g. or ml. and no amount
	
2007-01-20  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/shopgui.py Clarify logic around optional ingredient
	adding.
	* src/lib/recipeIdentifier.py Some more work toward a diff-ing
	interface (not done)
	
2007-01-17  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/html_importer.py Raise more useful error
	message when a rule is malformed. If custom ingdic has ['text']
	but not ['item'], make sure we end up with an item.
	
	* src/lib/importers/html_plugins/recipezaar.py Update importer
	script for updated website. Add import for cuisine and category
	and servings.

2007-01-17  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* MANIFEST add batchEditor.py and batchEditor.glade
	* glade/app.glade Add menu items for launching batch editor 
	* glade/recCard.glade Fix alignment of items on Recipe Details page.
	* src/lib/GourmetRecipeManager.py Add batch editor. Create new
	methods to store models for attributes (cuisine, category, etc) in
	one place, rather than re-creating them in each recipe card,
	etc. that needs them.
	* src/lib/reccard.py Use new methods for creating global attribute
	models.
	* src/lib/recindex.py Fix type error that cropped up in update_recipe
	* src/lib/backends/sql_db.py
	* src/lib/importers/html_importer.py When dealing with pre-parsed
	ingredient dictionaries, only use our own parsing to fill in gaps
	(this allows html importer scripts to do some but not all parsing
	on their own).
	

2007-01-11  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/html_importer.py When scrapers fail, display
	the error, but fallback to a generic importer -- this is really
	important since scrapers will certainly fail as websites change.

2007-01-06  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* MANIFEST add valueEditor.glade and valueEditor.py
	* glade/app.glade add button to open valueEditor (called fieldEditor)
	* glade/valueEditor.glade Fix typo in "title" label. Add interface
	for changing *other* values (i.e. so that you can change the
	cuisine from foo->bar wherever the source is set to baz.)
	* src/lib/GourmetRecipeManager.py Add valueEditor to main interface.
	* src/lib/valueEditor.py Add ability to change *other* fields that
	the field selected for (i.e. so that you can change the cuisine
	from foo->bar wherever the source is set to baz.) Make sure the
	recipe index is updated when we make a change.

2007-01-04  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/valueEditor.glade Create basic value editor for editing
	values of e.g. categories throughout the database.	
	* src/lib/backends/sql_db.py Make get_unique_values() sort
	results.  Allow new syntax for criteria for make_where_statement
	whereby we can have a list of "and"/"or" values for a single
	column. Add update_by_criteria alias for update since that's what
	the rdatabase.py parent class uses.
	* src/lib/defaults_es.py Added gr. abbreviation.
	* src/lib/defaults_en.py Added gr. abbreviation.
	* src/lib/valueEditor.py Create basic value editor for editing
	values of e.g. categories throughout the database.

2007-01-03  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/recindex.py Hide First/Last/Prev/Next buttons when there
	are only 1 page's worth of recipes.

2007-01-02  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/html_plugins/allrecipes.py Disable this plugin
	temporarily -- it isn't working properly and I don't have time to
	fix it.
	* src/lib/reccard.py Fix up group undo/redo so that ingredient
	group editing works again. This started with a simple typo fix
	(self.history->self.rc.history), but in the process of fixing it,
	I realized the undo was more fundamentally broken and had to be
	updated to properly use "permanent references"
	* src/lib/reccard.py Disable ingredient group toggling from the UI
	since it does not work and cannot be easily made to sensibly work
	given the structure of our ingredient DB.
	* src/lib/version.py Version 0.13.3
	* src/tests/testExporters.py Update to work with fancy PDF Export.
	* src/tests/testImporters.py Disable AllRecipes test since it's
	broken and we're disabling the plugin. Also, improve message on
	failure of import to produce a recipe with the expected title.
	* src/tests/reference_setup/recipes.db Update to latest DB.
	* src/tests/testRecCard.py Add a test for group editing. Exit when
	tests complete successfully.

	
2007-01-01  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/convert.py Fix i18n related bug in new unit-parsing
	regular expression. Also, keep new code for debugging bug (this
	will make us fail more verbosely if we haven't caught all such
	bugs with our new unicode() call
	* src/lib/defaults_es.py Fix some typos in Spanish defaults.
	
2006-12-29  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/recCard.glade Move scrollbar inside of notebook so that
	nutrition/Recipe tabs are always in view.
	* src/lib/backends/rdatabase.py Only update if we have a new
	database.
	* src/lib/backends/sqlite_db.py	Set a flag if we are a new database.
	* src/lib/exports/pdf_exporter.py Fix typo in get_pdf_prefs that
	required extra nonsense argument.
	* src/lib/defaults_en.py Fix fl. oz.
	* src/lib/nutrition/databaseGrabber.py Be less verbose.
	* src/lib/nutrition/nutritionLabel.py Improve formatting
	* src/lib/reccard.py Respect "Allow Units to Change" preference
	(previously, we were always adjusting the units in the recipe card
	display and never adjusting them in the nutritional info
	display). Properly handle redrawing and flowing with changed
	reccard glade layout.
	* src/lib/version.py Version 0.13.2

2006-12-28  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/defaults_en.py Fix tablespoons (standardized to Tbs.)

2006-12-27  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/backends/rdatabase.py Fix bug in URL-finding code in updater.
	* src/lib/ratingWidget.py Prevent warning about integer v. float
	* src/lib/shopgui.py Fix typo which prevented add-to-shopping-list
	from working with optional ingredients in some cases.
	* src/lib/shopping.py Fix ingredients when a range is being added
	to "None"
	* src/lib/TextBufferMarkup.py Make sure we are using unicode for
	text we get from textbuffer. (This seems to prevent unicode
	conversion errors elsewhere).
	* src/lib/version.py Set version to 0.13.1
	
2006-12-26  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/backends/rdatabase.py Fix bug in new installations (this
	change was actually made before 0.13.0 went up to SF but not
	committed to cvs). Also, fix bug in ingredient parser that meant
	the space between two words in an ingredient got eliminated.
	* src/lib/Undo.py Catch all "Too many changes" errors that can
	happen in our text-change undo routine.

2006-12-24  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/reccard Hide "Website:" label when there is no link.

2006-12-23  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* data/recipe.dtd Add link
	* glade/recCard.glade Move title and shopping-list button above
	other stuff to un-clutter ingredient text and keep title in view
	at all times.
	* src/lib/reccard.py Default to highlighting calories, and save
	last-highlighted nutritional item as a preference. Update flowing
	to take into account different default widths (so that our title,
	which is not the width of the whole card, can be wrapped
	appropriately). Highlight ingredients with boldness as well as
	color. Also, change color highlighting so that all items with some
	of the content will have a visible amount of yellow behind them.
	* src/lib/nutrition/nutritionLabel.py Hide MINOR items for which
	there is no nutritional content. Also, track toggles in a
	dictionary so that callers can programatically toggle highlighting
	(i.e. so that we can store preferences for which nutritional info
	to highlight)

2006-12-22  Thomas M. Hinkle  <thomas_hinkle@sf.net>


	* glade/recCard.glade Less confusing naming of notebook widgets.
	* src/lib/nutrition/nutrition.py Allow nested
	NutritionInfoLists. Handle embedded recipes from here. rather than
	forcing caller to deal with them.
	* src/lib/nutrition/nutritionLabel.py Set up label to work as
	button for selecting one part of nutrition to focus on elsewhere
	(e.g. to choose "Calories" or "Protein" or what have you.
	* src/lib/reccard.py Set up nutritional highlighting of ingredients.
	* src/lib/shopgui.py Use modify_ing method to modify ings (not assignment).
	* src/lib/TextBufferMarkup.py Fix bug in setting background color.


2006-12-16  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/recCard.glade Move nutrition into a separate tab to reduce clutter/scrolling.
	* src/lib/LinkedTextView.py Fix links with escaped characters (e.g. &)
	* src/lib/defaults_en.py Add fluid ounces
	* src/lib/reccard.py Comment on text-wrapping code. Fix title display.
	* src/lib/recindex.py Set up text wrapping for index view
	* src/lib/backends/rdatabase.py Add last-modified timestamp. Add some methods for dealing with dups.
	* src/lib/backends/sql_db.py Raise an error if we set attributes on read-only RowObject
	* src/lib/recipeIdentifier.py Updates in still-experimental-and-incomplete recipeIdentifier code
	* src/lib/importers/html_importer.py Automatically add 'link' attribute to all HTML imports

