-------------------------------------------------------------------------------
 To-do list for streamtuner
-------------------------------------------------------------------------------

Search this file for the token APIBREAK to know what to implement at
the next API break.

Stability, correctness

	- use GError domains and codes (APIBREAK?)

	- use threads to make a poll transfer API

	- return the Content-Type HTTP header from the st_transfer functions
	  (APIBREAK)

	- better object oriented design through the use of GObject
	  class hierarchy (APIBREAK):

		STObject
		  |
		   -->	STHandler
		  |
		   -->	STViewable
			  |
			   -->	STCategory
			  |
			   -->	STStream

	  plugins will add a handler by registering a new STHandler-derived
	  GObject

	  also, we should put all streamtuner-speficic classes (not only
	  the plugin API) in the ST namespace, for instance STMainWindow,
	  STSettings, STToolbar, etc...

	- audit the ui_*_tab.c modules (especially, uniformize the static
	  symbols)

	- fix possible leaks using Boehm gc

	- we must have something like (APIBREAK):

		gboolean plugin_init (STPlugin *plugin, GError **err)

	  and:

		st_plugin_add_handler (STPlugin *plugin, STHandler *handler)
		st_plugin_add_program (STPlugin *plugin, const char *action, const char *command)
			(that should add a program to the global programs
			 hash table, or increment the refcount of an already
			 existing entry in the hash table)
		st_plugin_set_about_text (STPlugin *plugin, const char *text)

	  this will allow to unload a plugin cleanly, removing
	  all its handlers and programs

	- toolbar handler buttons must behave the same as action
	  buttons, and honour toolbar style etc

	- add a "print messages to standard error" cmdline argument:
	  if enabled, st_notice() st_warning() st_error() etc uses
	  the standard error to print messages

	- st_notice() must accumulate
	  messages, which then get printed in a dialog box
	  upon st_flush_notices() or sth.

Features, completeness

	- implement multiple stream selection (would write a .pls with the
	  selected streams, or perhaps simply pass all the filenames to xmms,
	  probably needing APIBREAK)

	- delegate the control of the statusbar to the plugins

	- window title must be like "streamtuner - /SHOUTcast/Electronic/Trance"
	
	- write plugin API reference

	- internationalize streamtuner through the use of GNU gettext

	- plugins must be able to register their own settings

	- add bookmarks support

	- add popup menus
	- allow user-customizable menu accelerators
	  (see gtk_menu_item_set_accel_path())
	- add miniatures of toolbar theme icons for actions
	
	- add cache settings

	- add a "tip" argument to streamtuner_warning() and
	  streamtuner_error() (additional text serving as a tip for the
	  unexperienced user, probably needing APIBREAK)

	- context help (leaving the pointer on a widget popups
	  a help balloon after some delay)

	- pressing enter in a GtkTreeView must activate it, just like space does
	  (or perhaps there is a GTK way of binding keys to standard widgets,
	  from ~/.gtkrc?)
