Sat Apr 3 21:12:53 CEST 2010 Tobias Rautenkranz * KDE is split up in kde.ui and kde.core. Sat Apr 3 21:12:32 CEST 2010 Tobias Rautenkranz * C++ member variable access Sun Jan 10 09:57:54 CET 2010 Tobias Rautenkranz * modular smoke. Sun Dec 13 14:22:09 CET 2009 Tobias Rautenkranz * remove mudballs Wed Sep 2 14:08:06 CEST 2009 Tobias Rautenkranz * cl-smoke now supports user conversions for return values. Sun Aug 30 16:26:13 CEST 2009 Tobias Rautenkranz * Multiple inheritance doc & expand tabs in programmlisting. Thu Aug 27 13:47:08 CEST 2009 Tobias Rautenkranz * Update for the new smokegenerator Sun Aug 2 13:24:57 CEST 2009 Tobias Rautenkranz * Remove wrong note about cxx:meta-object Thu Jul 23 00:59:59 CEST 2009 Tobias Rautenkranz * add phonon repository Thu Jul 23 00:53:41 CEST 2009 Tobias Rautenkranz * phonon & :arg0 Mon Jul 6 23:51:20 CEST 2009 Tobias Rautenkranz * OpenGL: origami diff -rN -u old-doc/chunk.xsl new-doc/chunk.xsl --- old-doc/chunk.xsl 2014-10-30 08:25:12.000000000 +0100 +++ new-doc/chunk.xsl 2014-10-30 08:25:12.000000000 +0100 @@ -2,16 +2,18 @@ - - + + - - + + + + - + diff -rN -u old-doc/introduction.xml new-doc/introduction.xml --- old-doc/introduction.xml 2014-10-30 08:25:12.000000000 +0100 +++ new-doc/introduction.xml 2014-10-30 08:25:12.000000000 +0100 @@ -14,7 +14,7 @@ Lisp-CFFI-Qt4 (dead) -
Limitations +
Limitations Ownership transfer to / from C++ of non QObject objects is seldom known to cl-smoke. E.g.: cl-smoke might delete an instance even though it is still needed by C++. @@ -24,16 +24,15 @@ when a Lisp to C++ conversion is missing and a pointer will be returned when there is no C++ to Lisp conversion. - 10 seconds startup time + 6 seconds startup time - Using an image it is around 1 second. + Using a core image it is around 1 second. (see ) (for qt.examples) on a - Pentium M 1.7GHz. (Compilation ~20 seconds) + Pentium M 1.7GHz. Needs to be recompiled when the Smoke library is updated. Could be faster - No const-correctness
Performance @@ -45,26 +44,24 @@
-
Installation +
Installation
Dependencies Smoke2 - bindings 4.2 or later + bindings from svn. + + The new smokegenerator is needed (developed by Arno Rehn for the GSOC 09). + + Qt (development package) CMake 2.6 - a make program (preferably Gnu Make) a C++ compiler (GCC) -On the Lisp side you need Mudballs -and sysdef.cmake. - - -If you prefer to use ASDF instead of Mudballs, you need these systems: alexandria bordeaux-threads @@ -99,53 +96,34 @@
Installation - For loading the systems you can use Mudballs or ASDF. But first get the sources: - - You need to checkout the darcs repositories: cd SOME_DIR -for r in smoke qt qt.test qt.tests qt.examples qt.uitools qt.webkit kde kde.tests kde.examples repl; do +for r in smoke qt.core qt.gui qt.network qt.test qt.tests qt.examples qt.uitools qt.webkit qt.phonon; do darcs get "http://tobias.rautenkranz.ch/lisp/cl-smoke/$r" done - -
Mudballs - - Then add the directory SOME_DIR to the mudballs search paths by adding - -(push (wildcard-searcher "SOME_DIR/*/*.mbd") - *custom-search-modules*) - - to ~/.mudballs. - - - - Loading the packages with mb:load compiles the C wrapper libraries as needed. - - -
- -
ASDF + - The .asd files are - generated - from the mudballs files. - Get the .asd files and - place them in the corresponding source directories. Then symlink the .asd files in a ASDF search path. - You can for example run: ln -s SOME_DIR/*/*.asd ASDF_PATH + There are also the following repositories: qt.svg qt.dbus kde.core kde.ui kde.tests kde.examples + + - Now build and install the :smoke and :qt C wrapper libraries with: + Build and install the :smoke and :qt.core C wrapper libraries with: cmake ./ && make && sudo make install in the smoke/ and qt/ directories. - - Some examples get the paths for the files to load from their Mudballs system (ui and i18n) and thus will not work. - -
+ + When you have symlinked the .asd system files, you + should be able to load the systems. The system name has a + :cl-smoke. prefix. e.g.: + + (asdf:oos 'asdf:load-op :cl-smoke.qt.examples) + +
diff -rN -u old-doc/kde.xml new-doc/kde.xml --- old-doc/kde.xml 2014-10-30 08:25:12.000000000 +0100 +++ new-doc/kde.xml 2014-10-30 08:25:12.000000000 +0100 @@ -4,16 +4,20 @@ KDE -Besides the :kde package there +To use the KDE libraries use the :cl-smoke.kde.ui +(Depends on :cl-smoke.kde.core). + + +Besides these packages there is :kde.tests for the unit tests and :kde.examples containing the examples. -
Examples +
Examples The examples can be run with: -(mb:load :kde.examples) +(asdf:oos 'asdf:load-op :cl-smoke.kde.examples) And then running the function of the example; e.g.: diff -rN -u old-doc/manual.xsl new-doc/manual.xsl --- old-doc/manual.xsl 2014-10-30 08:25:12.000000000 +0100 +++ new-doc/manual.xsl 2014-10-30 08:25:12.000000000 +0100 @@ -2,10 +2,13 @@ - - + + + + + + - diff -rN -u old-doc/nonlink-apidoc.xsl new-doc/nonlink-apidoc.xsl --- old-doc/nonlink-apidoc.xsl 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/nonlink-apidoc.xsl 2014-10-30 08:25:12.000000000 +0100 @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + Binary files old-doc/origami.ogg and new-doc/origami.ogg differ Binary files old-doc/origami.png and new-doc/origami.png differ diff -rN -u old-doc/qt.xml new-doc/qt.xml --- old-doc/qt.xml 2014-10-30 08:25:12.000000000 +0100 +++ new-doc/qt.xml 2014-10-30 08:25:12.000000000 +0100 @@ -4,26 +4,40 @@ Qt -Besides the :qt there are these packages: with +Besides the :cl-smoke.qt.gui there are these modules: - - :qt.uitools - - QtUiTools - :qt.test - - QtTest - :qt.webkit - - QtWebKit - + + :cl-smoke.qt.uitools + + QtUiTools + :cl-smoke.qt.test + + QtTest + :cl-smoke.qt.webkit + + QtWebKit + + :cl-smoke.qt.phonon + + Phonon + + :cl-smoke.qt.network + The network classes of Qt. + + :cl-smoke.qt.core + the nogui Qt core. + -which provide bindings for their Qt module. -Additionally there is the :qt.tests system, containing -the unit tests and :qt.examples for various examples. +which provide bindings for their Qt module. The class names of this modules are in +the :qt package. (E.g. Phonon::VideoPlayer is 'qt:phonon.video-player +and QTest is 'qt:test) + + +Additionally there is the :cl-smoke.qt.tests system, containing +the unit tests and :cl-smoke.qt.examples for various examples. -
qt:application +
qt:application The qt:application object should created with: qt:with-app. In its body the event loop can be @@ -34,19 +48,24 @@ - + - + Subclasses of qt:paint-device (e.g. qt:widget) can only be used when a qt:application instance exists. When there are, for example, qt:widget instances at the end of qt:with-app, they are deleted by the qt:application destructor. + +Custom cxx:paint-event methods can use qt:with-painter +to ensure that the qt:painter is deactivated at the end of the method. + +
Interactive Development The :cl-smoke.repl allows you to start a qt:application event loop in the background for @@ -63,7 +82,7 @@
-
Signal-Slot +
Signal-Slot qt:connect connects a signal to a slot. The signal is either a qt:qsignal created with @@ -90,23 +109,24 @@
-
Properties +
Properties qt:object properties can be accessed with qt:property (setf-able). The name of the property can be either a string in C++ style or a symbol in Lisp style. +The predefined Qt properties can be accessed with symbols in the keyword package. (let ((object (make-instance 'qt:object))) - (setf (qt:property object 'object-name) "Foo") - (assert (string= "Foo" (qt:property object "objectName")))) + (setf (qt:property object :object-name) "Foo") + (assert (string= "Foo" (qt:property object "objectName"))))
-
Variant +
Variant A qt:variant can be constructed with qt:make-variant or to pass a Lisp object with qt:make-lisp-variant. @@ -114,7 +134,7 @@
-
i18n +
i18n You can use qt:tr to translate strings. @@ -123,7 +143,7 @@ - + @@ -131,14 +151,14 @@ - + <filename>hello-world_de.po</filename> - + @@ -147,15 +167,15 @@ Gettext is used to extract the i18n strings and compile the message catalog. See CMakeLists.txt and UseClQti18n.cmake -in the src/ directory of :qt.examples on how to do this. +in the src/ directory of :cl-smoke.qt.examples on how to do this.
-
Examples +
Examples You can run the examples with: -(mb:load :qt.examples) +(asdf:oos 'asdf:load-op :cl-smoke.qt.examples) (qt.examples:launcher) @@ -169,54 +189,60 @@ - + - + Class Browser -Qt Classes browser using :qt.webkit to display the +Qt Classes browser using :cl-smoke.qt.webkit to display the API doc and a custom qt:list-model for the qt:list-view of the available classes. - + - +
-
CommonQt -:cl-smoke.commonqt -is an experimental compatibility layer to run Lisp code using the -CommonQt API with cl-smoke. -It is incomplete, but implementing the missing pieces should be straight forward. +
OpenGL + +For OpenGL a binding is needed (e.g.: +cl-opengl). - - - - - - -CommonQt tutorial 14 -t14.lisp -running with :cl-smoke.commonqt. +Origami + +Origami +draws a pleated hyperbolic paraboloid using the method described in +(Non)existence of Pleated Folds: How Paper Folds Between Creases - + + + + - + + + +Axiom is needed to generate the lisp source to that +calculates the vertices. + + + +
diff -rN -u old-doc/smoke.xml new-doc/smoke.xml --- old-doc/smoke.xml 2014-10-30 08:25:12.000000000 +0100 +++ new-doc/smoke.xml 2014-10-30 08:25:12.000000000 +0100 @@ -1,7 +1,7 @@ - + Usage
Symbols @@ -17,7 +17,7 @@
-
Class +
Class C++ classes have a corresponding CLOS class. The can be used like any CLOS class; E.g: to make a QObject instance: @@ -30,7 +30,14 @@ (let ((parent (make-instance 'qt:object))) - (make-instance 'qt:object :args (list parent))) + (make-instance 'qt:object :args (list parent))) + + +or use :arg0, :arg1 and :arg2. + + +(let ((parent (make-instance 'qt:object))) + (make-instance 'qt:object :arg0 parent)) @@ -39,14 +46,26 @@ (defclass my-object (qt:object) - () - (:metaclass cxx:class)) + () + (:metaclass cxx:class)) + +(make-instance 'my-object) + + +The first superclass must be a Smoke class. When you define a class that has several Smoke superclasses, +they will be constructed with their default constructor. For the first Smoke superclass you can supply arguments +with the :args and :arg0 etc. keywords. + + +(defclass my-graphics-object (qt:object qt:graphics-item) + () + (:metaclass cxx:class))
-
Methods +
Methods C++ methods are generic functions in the :cxx package. @@ -72,9 +91,6 @@ In the second case a temporary qt:color instance is implicitly created. - -User defined conversions for return values are currently not supported (in defmethods). -
Setter Methods @@ -102,12 +118,12 @@ (defclass the-object-does-nothing (qt:object) - () - (:metaclass cxx:class)) + () + (:metaclass cxx:class)) (defmethod cxx:timer-event ((object the-object-does-nothing) event) - (declare (ignore object event)) - (call-next-method)) + (declare (ignore object event)) + (call-next-method)) @@ -169,7 +185,7 @@
-
Static Methods +
Static Methods The static C++ method QByteArray::number(int n, int base=10) can be called by: @@ -188,15 +204,29 @@
-
Constants +
Constants + + C++ Class enums available as constants. E.g.: + QColor::Rgb is qt:color.+rgb+. + See :cxx-support. + +
+ +
Member variables - C++ Class enums available as constants. E.g.: - QColor::Rgb is qt:color.+rgb+. - See :cxx-support. +C++ member variables of an instance can be accessed by using slot-value; e.g.: + +(slot-value (make-instance 'qt:object) :static-meta-object) + +or + +(slot-value (find-class 'qt:object) :static-meta-object) + +Usually they can also be accessed using methods from the :cxx package.
-
Garbage Collection +
Garbage Collection You should be able to use C++ Class instances like normal Lisp object. @@ -208,20 +238,7 @@ -An instance may depend on an other one. -It is a bad idea to do something like this: - -(defvar *meta* (cxx:meta-object (make-instance 'qt:object))) - -*meta* references a qt:meta-class -that can become invalid at any time, since the qt:object instance can -be garbage collected, and then the QMetaObject instance is deleted along -with the QObject. - - - - - Ownership transfer for non QObject instances is mostly unimplemented. + Ownership transfer for non QObject instances is mostly unimplemented.
diff -rN -u old-doc/video.xsl new-doc/video.xsl --- old-doc/video.xsl 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/video.xsl 2014-10-30 08:25:12.000000000 +0100 @@ -0,0 +1,27 @@ + + + + + + + + +