-: todo
+: done
/: partial

+ all: connect commands
+ all: actually run workflows
  - clone document before execution
+ all: load/save workflows
+ all: design/implement API for embedding
  + maintain list of available applications to talk to (-> runtime requirements for commands)
- all: APIDOX!!!!!
+ all: store in / load from variable commands
- all: execution logs
- all: find / find next/prev / goto ...
/ all: type checker / requirements checker
  - store cause of error (i.e. type mismatch, missing requirement, missing input etc.) as string
+ all: conversions
  + infrastructure
  + find and store "conversion paths" using BFS
    + idea: use Conversion subclass "ConversionPath"
      -> distinguish between atomar and combined conversion
      -> upcasts are simple atomar conversions which do nothing
  / add conversions to .wflibs
+ core: merge CategoryDescription <-> Category
+ core: merge DatatypeDescription <-> Datatype
+ document: command iterator
+ document: qvaluelist -> qvaluevector
+ document: copy
- document: fix "undo modify command": sometimes the undo order is incorrect
+ valuelist/parameter: make initial state valid
+ valuelist: rename to value
- value: make API cool:
  - move to QByteArray and QDataStream to support arbitrary data
    - it is important to be able to distinguish between values that hold one and values that hold multiple items
  - maybe: make Datatype subclasses a requirement for custom data types.
    - usecases: display human-readable representation of a value
+ command api: binding classes to bind widgets and parameters to each other
+ command api: conversions shouldn't be commands
+ command api: figure out if XML description is better than c++ code descriptions
  + left to do: params and results. tomorrow :)
  + more to do: what about user-visible text? turns out not to be a problem :)
- command api: distinguish between standard, application, nonstandard and own commands
- command api: requirements display (e.g. ImageMagick, etc) on export
+ command api: assign more than one type to a parameter
+ command api: dependent types (e.g. type of result x depends on actual type of param y)
- command api: identify and implement common "options"
  (e.g. show command when run, pretend first etc.)
+ command api: progress reporting
- command api: scriptable execute function
  - languages: bash, perl, python, ruby
/ command manager: queries
  + who accepts this qmimesource
  - who can be inserted between these two commands
/ command widget: menu
  + rename
  + delete
  - move up
  - move down
  + collapse/uncollapse
+ command widget: show original title in tool tip
? view: debug cursor class
- view: move commands
/ view: initial hint - drag commands here
  - make prettier
+ view: ability to drop things other than commands
+ view: visualize types somehow (how?)
- view: visualize command transitions (arrow)
  - Ability to show conversions
+ mainwindow: add actions
+ mainwindow: searchline
+ mainwindow: help display
+ mainwindow: file menu
  + save
  + open recent
  - print
/ mainwindow: view menu
  + collapse / uncollapse all
  - go to command
  + fullscreen
  - show/hide input/output datatypes
- mainwindow: edit menu
  - find
  - find next
  - insert workflow
/ mainwindow: workflow menu
  + execute
  - interrupt
+ widgets: fix designer crash on value change
- widgets: extend workflow widgets to load stuff from variables

+ commands: remove obsolete "enum" datatype

- lots of commands :)

+ integrate into KDE application
  + which one? Kate!

command ideas
=============

general commands
----------------

+ abort (no gui)
+ shell command
+ get string
+ show message
+ wait
execute dcop command
+ store in variable
+ load from variable
set variable
+ append to variable
show execution log

debug commands
--------------

+ show output
explicit conversion

math commands
-------------

eval expression

list commands
-------------

+ sort
+ trunc
+ reverse
+ grep
generate
+ count
+ select

file commands
-------------

+ ask for files
+ ask for folders
+ get files
get folders
+ list directory contents
download files
+ copy files
+ move files
+ delete files
filter files by mimetype
filter files by name
filter files by size
filter files by attributes
filter files by meta-info
empty trashcan
create new folder
quit application

ImageMagick commands
--------------------

/ convert image
+ scale image (aspect ratio, percent, absolute)
+ rotate image (all images, only selected images)
+ flip image
apply filter
adjust contrast/brightness
draw text
crop
take screenshot

audio commands
--------------

play audio file
apply effect
convert audio file
get audio cd tracks
rip cd track
get cddb track information
normalize songs
concatenate audio files
cut audio file

video commands
--------------

convert video files
extract video streams
extract audio streams
concatenate videos
scale videos
cut video file

desktop commands
----------------

get clipboard contents
type keystroke
set wallpaper
logout
get selected urls
switch desktop
start screensaver (lock desktop)
enable/disable screensaver

kopete commands
---------------

get selected contacts
get contacts (all, online, reachable)
send message to contact
send file to contact

text commands
-------------

+ add prefix to paragraphs
+ add suffix to paragraphs
+ change text case
/ find and replace
+ read text files
+ remove prefix from paragraphs
+ remove suffix from paragraphs
sort text (?? maybe this is done by sort)
trim text
/ write text to file

kwrite commands
---------------

open text file in kwrite
get text from kwrite (selected, all, selected OR all)
move cursor to (position, beginning, end)
insert text (replacing selection)

speech commands
---------------

say text
read file

amarok commands
---------------

get playlist contents
query collection
get similar artists
get tracks from artist
add to playlist
clear playlist

misc commands
-------------

python script
ruby script
kjs
