====== TODO ======
Also have a look at [[bugs]] and [[.brainstorm|brainstorm]]

===== Wanted =====
* Somebody to build and maintain a Windows executable
* Non-programmer to improve the user manual
* A diagram widget (mindmap like) - cairo canvas ?

===== Objectives =====
* WYSIWYG editing
	* semi-permanent undo stack 
* Hyper-Linking
	* allow links to have types
	* category views
* Desktop integration
	* define a mimetype for repository config files
* Multiple [[formats]]
	* native (pod, kwiki, ...)
	* export (latex, docbook, oo.org, ..)
* Versioning
	* simpel backup & upload plugin
	* cvs/arch/svn/.. plugins

===== Tasks =====

==== ASAP ====

* Insensitive on focus fix
	* need a dispatcher that checks focus for all actions defined in pageview
	* don't get events from UIManager interface :(

* Printing support
	* Needs code to render text + images on cairo context

* [[.changes_and_versions|change control]]

* Categories / tags
	* saved search for backlinks

==== Next release(s) ====

* put man pages behind --man
* move docs in zim only level up
* Zim's complete website should be in Zim !
 	* In source tree create notebook "website" which stores the whole website.
	* Link share/zim/docs from config file in namespace
	* Put template in _templates and make sure zim finds this
	* How to link in the Changes and ... without symlinks ??
	* Add action in "make dist" to also build the website (and do distcheck / disttest ?)

* port to new [[BaseDir]] API
* use new [[DesktopEntry]] API
	* support setting new custom app in Open With menu
	* silently use "Default" for browser, file browser, mail etc.
		* use "x-uri/http", "x-uri/mailto", "inode/dir" etc. to look up app
		* default to xdg-email for "x-uri/mailto"
		* default to "text/html" for other unkown uris
		* integrate with normal "open" code
			* loose preferences - re-configure using "open with" menu
			* text editor should not have been a setting in the first place ...
	* use the app selection dialog for changing
* remove dead code for "names" from [[DesktopEntryMenu]]

* [[.FileSystem|FileSystem]]

* Need export options "single file" and "follow links" to assemble presentations
* finish seperation between cache and files
	* set_cache(undef) for export
* add Store::FlatFile for export
	* needs a close / commit / DESTROY call
* make ToC logic in Selection available in API
	* InsertToC plugin
* add option for single file in export dialog

* add API in Page to get document root / document dir
	* menu item for Attach file
		* copy + insert
	* make Equation and Screenshot plugins use this API
	* remove usage of "base" property
		* remove whole property hash for Page ?
	* accept image data from clipboard also needs this dir
* Use document root api to make file names relative after insert of name


* document drag&drop from file manager in manual
	* E.g. when all images are in one dir



* finish seperation between cache and files
	* set_cache(undef) for export
* finish bootstrap_template
	* add hooks in tempalte for link() etc.
		* for flatfile needs anchor links
	* support array of pages / parts
		* consider <HR> a page break
* add Store::FlatFile for export
	* needs a close / commit / DESTROY call
* make ToC logic in Selection available in API
	* InsertToC plugin
* add option for single file in export dialog

* add API in Page to get document root / document dir
	* make "Insert Image" open the correct dir
		* remember last opened dir for multiple inserts
	* menu item for Attach file
		* copy + insert
	* make Equation and Screenshot plugins use this API
	* remove usage of "base" property
		* remove whole property hash for Page ?
	* accept image data from clipboard also needs this dir
* Use document root api to make file names relative after insert of name

* document drag&drop from file manager in manual
	* E.g. when all images are in one dir

* move sub-tree
	* move update logic from GUI.pm to ZIm.pm
	* move_pages(namespace => namespace)
	* use glob in update links

* Skipped lines in lists screw up formatting
	* needs version 1 of the format

* Accept image data on the clipboard - save and insert image
* Test if we can hand formatted stuff to Open Office over the clipboard using HTML
* print the outline (left panel) only (?)
* make date namespacing configable - default to per year or per month ?
* better support for ordered lists
	* support roman numerals ?

* put update logic in Zim.pm and add hooks to update history on move or delete
* backup snapshot

* single page export
* [[.template|template]] improvements
	* pull template code into Zim::Formats->bootstrap_template
	* dispatch event through the Zim.pm object for each bootstrap

* Fix bug in redo with the edit mode
	* chars without markup behind e.g. bold region can become bold after redo

* group user actions for atomic undo/redo of auto-formatting actions

* some way to embed raw HTML in a page that filters through to the html output

* [[.album plugin|album plugin]]
* [[.tags_plugin|tags plugin]]

* Visial feedback when search is done without results

* Better control over location that opens on "insert image"->"browse"
	* should be one level deeper
	* remember last used dir ?

* split store/Cached and store/Files
	* needs list object

* API for managing repository list needs to go in Zim.pm

* [[.changes_and_versions|Revision control]]

* have a menu item to update links
	* allow updating links to files/urls/etc. as well

* Attach file
	* API for attachements
	* tool item in the GUI
	* option for default action after drag/drop
		* distinguise between files and images

* Tools->update links
	* dialog with treeview + checkboxes (see notebook)

* how bout moving stuff from PageView to HyperTextEditor ?

* search should be able to find orphaned pages
* idem for non-existent pages (linked but non existing)

* color/style difference external links
	* check parsing - set class
	* idem for html export

* repository config files subclass DesktopEntry
	* Depends on RW version DesktopEntry

* dialog to change application handlers
	* Depends partially on RW version DesktopEntry

* use Unicode::Collate for sorting page names ?
* use locale ?

* Never allow nesting styles, if needed allow to define custom styles.
	* Links are not a style, they could be embedded in a lot of cases

==== Tests ====
* ~~test export to html~~
* ~~test resolving of man pages (including "::" as part of the name)~~
* test rename case-sensitive from GUI
* ~~test history~~
* test mtime detection
* walk through UI actions to see what could be tested
* test navigation back / forw / prev / next / up / down
* test filename lookup with utf8 chars in filename
* test utf8 content in page
* test list_page with utf8 file names and utf8 content
* test list_pages with corrupted utf8 names / content
* ~~test list_pages with symlinks~~
* test list_links and list_backlinks


==== Formats ====
* Base class for exporters that generates most of the code based on a hash with tags - generalize Html.pm
* We really need to add a header to pages with format / version / etc.
	* thus allowing to change to format without breaking backward compat
		* allows fixing the verbatim block issue - using block markers instead of indenting
		* allows changing link format from [url|text] to [text|url] because this is easier to type
* Parsetree nodes for items in a list
* Serialize parse tree ?
* pod - add perldoc plugin to documentation repository
* XML - no transparent source format - parse '''<''' to ''&lt;''
	* use subset of HTML tags
* latex
* proof of concept dokuwiki support
* Export could warn about dead internal links (or remove them)

==== Linking ====
* Aliases, stored in the page they belong to, cached index
* anchors
	* keybinding to insert anchor / remember current location
	* also see [[brainstorm]]
* Typed links

==== Repository ====
* repository config in visible file (write every time)
	* "ignore list" for files to make co-exitence with CVS/Arch/.. easier
	* settings like autolink and camelcase per-repository
	* default config file to be copied on initialisation
* integrate gzip support into Zim::File ?

==== GUI ====
* rich copy-paste between zim instances
* rich copy-paste to e.g. abiword, open-office, ..
* class based style sheets
	* don't add more types of tags, just (sub)class them (h1 - h5 should be subclass of "h")
	* ~~simple stylesheet format with pango style properties~~
	* dialog to modify this stylesheet file
* ~~in "open rep" dialog a "set default" button that pops a prompt~~
* ~~make "read_only" property run-time switchable~~
* Listing available languages for spell checking not possible at this point (will be in gtkspell3)
	* therefor make it a text input, defaulting to locale
	* add this to repository / page properties
* Add source view
	* or just add "open with external editor" function
* Make pathbar update correctly after rename
* use repository icons in "open repository" dialog
* Change ^E from "edit link" in "edit object properties"
	* when no link trigger image property dialog - also check one iter pos left/right for pixmap
* trigger "parse_word" at , . ; " ' ) etc.
* trigger "parse_word" on move cursor
* "<hr>" elements
* Style difference for non-existing links
* Make bullet lists indent properly so line wrapping looks better
* Search dialog could have page selection all/pages (like export has)
* Search should give better feedback if no results are found
* Numbered lists (use "-" as marker, first item may give offset)

==== Translations ====
* either gettext or gettext compatible
* use comments  to add descriptions to the strings
* error/debug messages to terminal always in english
* don't forget buttons / actions etc.

==== Other ====
* move FindReplaceDialog to namespace below PageView
	* We can shell out much more dialogs from [[PageView]] to their own module files.
	* Use bare minimal POD
* search interface using selection objects
	* make complex queries use keys like "title" content" "links" etc.
* allow subdividing the calendar namespace further
	* mass rename - needs globs in move interface
* add "update" (= compare mtime) to commandline export interface
* Get rid of most of the File::Spec calls (restrict to posix/win32)
	* idem for Cwd::cwd(), just set ENV{PWD} once at start to dir of repository
* use GUI::TreeView for lists in search dialog for consistent interface
	* add type attribute - 'list' or 'tree' (make this a toggle ?)
	* add column as object attribute

----

===== Version 1.0 checklist =====
* ~~Custom icons for calendar etc.~~
* Translations for other languages
* full Drag-n-Drop support
	* ~~external image to text => link/embed~~
	* ~~external file to text => link~~
	* index item to text => link
	* text to index item => cut and append text to page
* Release Gtk2::Ex::* modules to CPAN
	* Tag styles configurable (style sheet)
	* grep for "zim" to make sure all apis are fixed
* Documentation
	* code documentation
		* parse tree documentation
		* [[class_diagram|class diagram]]
	* user documentation
		* general explanation about the concepts behind the program
		* manual page for various interface parts
* Complete plugin interface
	* Pod in script with NAME, VERSION, DESCRIPTION etc.
	* machine readable fields:
		* DEPENDS (perl modules)
		* PREFERENCESS (list of name/type/default)

