TODO for mezoGIS

================================================================================
                                                                      MILESTONES
================================================================================ 

[x] show table results
[x] show geometry results
[x] store several result sets and switch between them
[x] superpose several layers of data
[x] save and load projects
[x] python scripting - load and execute plugins
[x] installation scripts
    RELEASE 0.1

[x] zoom and pan the map
[x] custom symbol style
[ ] labels
[ ] improved layer managment
    RELEASE 0.2

[ ] custom line style
[ ] graduated colours by value
[ ] unique colours by value
    RELEASE 0.3

[ ] switch to PCL
    RELEASE 0.4

WISHLIST. LARGE, UNSORTED GOALS:
[ ] visual tool to create and edit geometry
[ ] add support for raster data
[ ] port time critical map drawing code to c
    RELEASE 1.0

================================================================================
                                                                   CURRENT TASKS
================================================================================ 

--------------------------------------------------------------- TODO for v0.1.6:

REFACTORING TASKS
[x] get rid of the separate ListStore for Layer data
    [x] implement a GenericTreeModeld
    [x] enable a way to refresh the model (data as a stream)
    [ ] implement a TreeSortable
    [x] write "geometry" instead of actual geometry
    [x] remove obsolete code
[ ] fix crash when opening laaaaarge tables while layer is loading
    
[x] new class method for Layer: get_data
[x] compute maximum extent while plotting
[x] use Options.configpath+file instead of Options.specialFile everywhere
[x] command line options to turn verbose mode on
[x] internationalyse strings NOW
[x] load and save configfile _options.py

NEW FEATURES
[x] Ask the user if he wants to VACUUM ANALYSE a table before opening it
[x] enable copy and paste operations on layer view
[ ] use UIManager for copy/paste context menues
[ ] enable accelerators on context menues
[x] click on a row in table view: show wkt.
[x] copy and paste layer styles
[x] new 'LabelPlotter' class.
    [x] Layer properties: Label page in notebook
    [ ] add a 'try to convert to [string, int]' option to labels.
    [ ] add an option to add a coloured border to the label
[x] zoom in with mouse wheel
[x] show total table size in tableview

[x] wizard for graduated colour maps
    [x] refresh colour gradient when colours are changed
    [x] add a 'swap order' button

DOCUMENTATION
[ ] content: what is postgis, what is mezogis, for whom is mezogis
[ ] content: quick tour of the features (with screenshots)
[ ] content: view extents, vacuum analyse
[ ] content: rendering speed
[ ] reactivate online help
    [ ] add link in dialog about getting table extent on double click


--------------------------------------------------------------- TODO for v0.1.8:

MAPPING
[ ] map in maps?

[ ] save a pixmap when all drawing is done, then draw label layers
[ ] allow layer grouping, add group API

MISC
[ ] load and save symbol collecions (text format)
[ ] symbol editor (text). forbid editing of standard symbols
[ ] remember map window size and ratio when saving
[ ] add a dialogue to add your own sql shortcuts

FASTER RENDERING
[ ] zoom: plot larger portion of the image?
[ ] pan: only redraw around existing image (save part of the image...)
[ ] save pixmap after drawing every layer -> fast insertion of new layers
[ ] fast way of pulling whole tables - review database api
[ ] speed up drawing of LARGE polygons: make dependent of time, not magicNumber!
[ ] make some experiments with ctx.clip to speed up drawing while zoomed in

GENERAL
[ ] run error dialogue if dependencies not met, review import statements
[ ] enhance pluginLoader: add class methods to get info about loaded plugins.

--------------------------------------------------------------- TODO for v0.2.0:
0.2.0 -> see milestones

MAPPING 
[ ] "hard zoom" feature: narrows SQL queries
    [ ] if ALL queries contain a box in the where statement, join the boxes as extent
       can be makebox3d, makebox2d,
        MakeBox3D(MakePoint(x1,y1),MakePoint(x2,y2))
        MakeBox2D(MakePoint(x1,y1),MakePoint(x2,y2))
        'BOX3D(x1 y1,x2 y2)'::box3d
        'BOX(x1 y1,x2 y2)'::box2d    
    [ ] find bboxes in the query, propose user to update them.
    
[ ] map properties: load/save palette, edit palette, apply palette, etc.
    [ ] make new, better palettes with the GIMP

LAYER PANE
[ ] view/hide layers
[ ] collapsable groups of layers

[ ] add copy/paste operations to the menu bar
    
GENERAL
[ ] window icons for maps, create mini-icon when finished drawing?
[ ] del key deletes layers, asks for permission first
[x] filter .mezo files in file dialogues
[ ] bind return key to ok in file dialogues
[ ] progress while connecting to database

PLUGINS
[x] show plugin progress in a gtk.progressbar
[ ] create external launcher (from the console)
[ ] add more of my plugins to the release

TABLEVIEW
[ ] option to show ewkt in the table, maybe a detail window to show
    only one row of data (embedded canvas widget)


--------------------------------------------------------- POST 0.2.0, WHISHLIST:

TOOLS / WIZARDS
[ ] a 'wizard API' that sets a layer group under wizard control. Options would
    include "Remove From wizard_foo Control".

MAPPING
[ ] engine for line style
    [ ] optional arrow heads on lines to show direction

DATABASE
[ ] change table name in table properties

GENERAL
[ ] option to just draw geometry, and instantly remove it from memory
[ ] built in interface for common geoanalytical tasks: prepares sql statements
[ ] mini navigation window




================================================================================
                                                                            DONE
================================================================================ 

[x] outsource layer properties dialogue from layer pane class
[x] new Clipboard class to organize string snippets in a treeview

MENU 
[x] new menu entry: /database/Query Shortcuts > [a,b,c,Add Shortcut]
[x] move commands in db context menu to new concept: quick sql shortcuts[ ] enhance pluginLoader: add class methods to get info about loaded plugins.
[x] validate shortcuts: must contain %s!
[x] load and save them in a config file

DATABASE
[x] outsource tableinfo to a new file, together with dbpane
[?] use drop-down arrows in the db pane for every schema


--------------------------------------------------------------- TODO for v0.1.4:
0.1.4 -> refactoring release

GENERAL
[x] version logic: even is stable, odd is unstable.
[x] add actiongroup bindings to the result windows
[x] plugins get imported to a menu item instead of a pane
[x] create an icon for the pointer tool
[x] beautify plugin argument dialog
[x] emit extent-computed signals
[x] add a note about the license in the icon dir?

DOCUMENTATION
[x] plugin to import SQL
[x] remove online help
[x] update changelog
[x] make sure .mezogis gets created at first invocation

MENU ITEMS
[x] new menu entry: /database/Query Editor

MAPPING
[x] zoom to box tool
[x] map should remember zoom, and save it to project

--------------------------------------------------------------- TODO for v0.1.2:
Major goal: Refactor classes to use gobject signals.

CANVAS
[x] make scrollbars work
[x] toolbar layout: ... | [pointer] [box]
[x] make Layer class use gtk callbacks
[x] let mapwindow listen to changes in Layer
[x] layer properties to new class
[x] Refactor the whole result -> layer logic: Use a system of callbacks
    instead of letting the LayerView class administrate stuff.
[x] start the plotter only AFTER the first row of data has come in 
    -> try to use gobject signals (might go boom because of threads)
[x] dynamic extent computation in the fetcher should be smarter: raise signal
    only after a 'critical mass' of points could be gathered. Also, add good
    logging messages to the fetcher, since this case is rare but amazingly hard
    to debug.

DATABASE
[x] use estimated_extent (if available)
[x] get table schemas
[x] show schemas in db pane: schema.table
[x] join the extents from all geometries when filling table_extents

QUERY EDITOR / QUERY HISTORY
[x] Create a separate QueryEditor class
[x] Move history widget to the query editor

GENERAL
[x] add a statusbar to show connection info
[x] enable editing the query of existing layers
[x] simple help file (html)

BUGS
[x] load non-geometry tables correctly

-------------------------------------------------------------- TODO for v0.1.1:
PLOTTER
[x] reduce 'stroke' operations by cairo
[x] set layer style (antialias etc.) only after layer details are loaded 

MAPWINDOW
[x] 'zoom in', 'zoom out' and 'full extent' functionality
[x] pan functionality
[x] 'hand open', 'hand closed' cursor when 'grabbing' the canvas
[x] add a very small zoom out when starting -> looks better

QUERY EDITOR / QUERY HISTORY
[x] restore history when loading mezogis

MISC
[x] draw circle symbols (use arc, need to allow absolute symbol co-ords)
[x] ignore errors when parsing symbols
[x] refactor properties dialogue
[x] choose symbol in layer properties.
[x] installation script should check for a psycopg installation
[x] install GeoTypes along with mezoGIS

----------------------------------------------------------------- TODO for 0.1: 
Release
[x] create setup.py to install application
[x] two different pallettes: one for fill, one for line
[x] about dialogue
[x] design the homepage
[x] copy plugins somewhere when installing
[x] install geotypes along with mezogis
[x] test installation on some systems

PGBUTLER
[x] repair error messages
[x] repair popup entry.
[x] separate fetcher from actual thread
[x] listen to fetch status, show to user
[x] export map to png
[x] bug when clicking quicklasksy on startup: got to do with tableinfo
[x] save and load projects as xml
[x] port hexraster to the new plugin format as an example

RESULT OVERVIEW
[x] show available resultsets in a tree.
[x] context option to delete layer (remove resultset when empty)
[x] context option to open table view
[x] layer properties
[x] double click opens map
[x] legend icon, autoupdate
[x] reorder layers via drag and drop
[x] stack layers, review stacking order
[x] limit sql query label in properties to a certain size
[x] context option to stop and restart fetchers
[-] try rename on context
[x] BUG when removing tmp_crossr while still loading.

RESULT WINDOWS
[x] button to refresh view
[x] catch resize, resize image
[x] delete layer if not in a result set on close table result
[x] limit/unlimit table data, or at least document it
[x] accel to close resultwindows

LAYER
[x] layer styling
[x] Use gimp colour palettes for default layer styling
[x] make styling dependent of geometry type (line,poly,point,composite)
[x] three icons: poly and composite, icon, point, 
[x] observer for icon change, set final icon only when first line is loaded
