/automate

qt4 (library) with frontend for rendering of 'Finite-state machines' as epsilon-/deterministic (DFA) and non-deterministic (NDFA) automates

Primary LanguageC++

========= what is this? ===============================================
 this project features an automate editor class with a graphical- and tree- like editor.
 this project can be used as a library to visualize directed graphs.

 it was created at the University of Tuebingen, Germany as a 'Studienarbeit'.
 Chair: Arbeitsbereich fuer Theoretische Informatik/Formale Sprachen

 most of the code was written by me:
 thanks very much for the help from the people in #qt@irc.freenode.org namely
  ahigerd, kibab, chakie, rohanpm, thiago, blight_, martin- and those i have forgotten

 thanks for the help of Christian Behle and Andreas Krebs who created the specification
 for this work and always had time when i needed them.

 all the code in this distribution is licensed to the terms of the LGPL v3 (if used with qt 4.5 or later)
 most used icons are from the kde icon theme noia-kde-icons-1.00.tgz
  - The Noia icons for KDE are under GNU LGPL license.
  - my icons which were specially created for this project are under GNU LGPL license as well

 please feel free to comment on that code:
     8.6.2008 (C) Joachim Schiele <js@lastlog.de>

 some explanations about this project (additional to the doxygen documentation)
   http://lastlog.de/wiki/index.php/AutomateEditor
   http://invalidmagic.wordpress.com/2009/12/10/qgraphicsscene-used-as-a-qabstractitemmodel/

 the project is hosted on github.com:
   http://github.com/qknight/automate

========== what is this not? ================================================== 
there is no auto-layout function so all the stuff has to be done by you.
it would be nice if we could use the graphviz API for doing that...

========== how to use? ================================================== 
i have to review this list again but in general it should give you an
idea what can be done.

                            treeView    graphicsview
 - start                    editable    editable
 - final                    editable    editable
 - next_node                editable    visible,no editor yet
 - new connections          editable    editable
 - new nodes                editable    editable
 - deletable nodes          editable    editable
 - deletable conns.         editable    editable
 - multiple selection       editable    editable
 - node label rename        editable    editable
 - connection label ren     editable    -
 - connection symbol        editable    -
 - move nodes/labels        sorting     mouse drag
 - ctrl+LMB add single      -           editable
   node to a selection
 - ctrl+LMB add single      -           editable
   conn. to a selection     -           -
 - select a single node
   \ by boundingbox         -           editable
   \ by click               editable    editable
 - select a single conn.
   \ by boundingbox         -           editable
   \ by click               editable    -
 - reconnect on the fly     editable    -
  (in the graphicsView we need a handle for this)

using the GraphicsView
      LMB on node or connection         -> select node/connection
      LMB pressed + drag                -> bbox for selecting objects
      MMB on nodes                      -> connect them
      MMB on empty space                -> 
      RMB on node/connection            -> context menu
      RMB on scene                      -> move view

LMB = left mouse button
========== class documentation using doxygen ============================ 
using 'cmake, make' will automatically generate the documentation using doxygen
see your build directory:
 - build/doc/html/index.html

========== issues ======================================================= 
 - items which are added via a GraphicsView (using two GraphicsViews attached to the same automate)
   will (as expected) add the node at the same respecitve position. say x=204,y=250 on both views.
   however: if a node is moved only the first view will update the new position correctly, the second
   view will not see this since it is not done using 'setData and dataChanged()' via the model yet
   FIX this is intended behaviour. if the second view should be 'similar' just use another 'view'
       attached to the QGraphicsScene (which can be done without breaking anything)


========== documentation, project related ============================
doxygen class documentaion:
   http://www.stack.nl/~dimitri/doxygen/docblocks.html
automate related:
 - http://www.graphviz.org/doc/libguide/libguide.pdf
 - http://www.boost.org/doc/libs/1_35_0/libs/graph/doc/index.html
 - http://www.graphviz.org/
 - http://www.boost.org/libs/graph/doc/fruchterman_reingold.html