SAMI was written with Qt (qt.nokia.com)

To compile you will need Qt Creator (available from qt.nokia.com), along with Python 2.6.5, and any other python libraries required by the scripts.
Simply load Framework.pro into Qt Creator, and it should be ready to compile.

Some common issues:
You may need to run the following in the python console, and add the result to QMAKE_CXXFLAGS
>>> import distutils.sysconfig
>>> distutils.sysconfig.get_config_var('LINKFORSHARED')

You may need to update the INCLUDEPATH and LIBS flags in the .pro file to the location of your python headers and libraries

PYTHONPATH:
I also had some trouble getting python to find the scripts, if the scripts directory is not that in which the executable is located, then you may need to create an evironment variable named PYTHONPATH (you can do this in Qt Creator itself, or in the system environment).  PYTHONPATH tells python to add this dirctory to sys.path, and hence it will search for modules there.

A Rough Explanation of the constituent parts:

The place to start is mainwindow.cpp, which deals with most of the functionality, the way the program is put together can be seen quite easy in the constructor.

configdialog - deals with loading and saving the general configurations, and the dialog box which allows the user to change them.

consoleoutmodel - deals with the console out (error message and such) widget, which usually lives at the bottom of the window.  It recieves a signal which adds a message

drawpointsdialog - deals with the dialog which allows the user to draw some points on an image (available from the + menu under the variables widget)

runscriptwidget - deals with the widget that lives in the center of the page, contains the embedded python interpreter

scriptlistmodel - the underlying structure of the script list, also deals with parsing the header files of the scripts

variablestabelmodel - the underlying structure of the variables list

variableswidgetdialog - deals with the dialog for individual editting of the variables (the spanner shaped button)

Known Issues
	-the scripts dont run in their own process, so a long script will hang on the ui
	-the menus for passing variables from the variables list to the runscriptwidget are created again and again whenever variables change, which is a waste of resources, really QMenu should be subclassed
