What is QM?
-----------
QM (QP Modeler) is a free, cross-platform, graphical modeling
tool for designing and implementing real-time embedded
applications based on the QP state machine frameworks.
QM provides best-in-class, intuitive diagramming environment
and generates very compact C or C++ code that is 100%
traceable from your design. QM is available for Windows,
Linux, and Mac OS X.
The main objective of QM is to empower your designs without
standing in your way. The tool achieves this at several
levels. At the high level, QM gives you complete control over
all aspects of your design, both the logical structure and
physical partitioning into directories and files. The tool
respects your design decisions and lets you determine the
generated code structure, directory names, file names, and
elements that go into every file. You can mix your own code
with the synthesized code and use QM to generate as much or
as little of the overall code as you see fit. At the low level,
QM respects your graphical layout as much as possible and will
not re-attach or re-route connectors, resize nodes, or adjust
text annotations. You will find that you don't need to "fight"
the tool.
QM is designed as a strictly *forward-engineering* tool without
reverse-engineering capabilities. This means that the code
generated by QM is not to be modified in any way, because the
changes won't be incorporated back into the model. However, the
tool provides special mechanisms to very quickly locate any
model element from any third-party editor by copying special
comments placed in the synthesized code into the clipboard and
pasting them into the tool.
QM is designed to support fast development cycle and is very
friendly to version control systems (VCS). The QM model itself
is stored in XML, so it is easy to maintain in a VCS. The code
generator is careful not to touch files that have not changed
(it always compares the generated file with the file on disk
and replaces the latter only when the new file is different.)
This avoids unnecessary churn of the code and avoids
recompilations to keep the development cycle as short as
possible.
Feature Highlights
------------------
* Graphical modeling tool based on the UML state machine subset
* Automatic generation of production-quality C or C++ code
* Automatic model verification during the code generation
* Built-in support for QP/C, QP/C++, and QP-nano frameworks
* 100% traceability from design to code
* Ultimate flexibility in generated code structure
* Friendly to version control systems (VCS)
* Intuitive diagramming environment for making clean, good-
looking diagrams
* Export of diagrams to EMF vector format for direct pasting
into MS-Office and Open Office applications
* Modern user interface with docking windows with the layout
saved across sessions
* State of the art editors for action code with syntax
highlighting
* Undo/redo of all model edits
* Quick Clipboard-based navigation between the model and third-
party tools
* Support for user-generated model templates
* Ready-made project examples and online tutorials
* Available on Windows, Linux, and Mac OS X
* Free to download and free to use
Installing QM on Windows
------------------------
CAUTIOIN: If you have any previous version of QM installed on your
system, please *uninstall* it before installing the new version.
Download the QM installer for Windows, which is a Windows executable.
Run the installer. The installation is very straightforward and
offers you options of installing a desktop icon and associate QM
model files (*.qm) with the QM tool. The uninstaller is provided.
Installing QM on Linux
----------------------
CAUTIOIN: If you have any previous version of QM installed on your
system, please *uninstall* it before installing the new version.
Download the QM installer for Linux. You need to make the
file executable in order to run it. You can either do this
with your desktop's file manager or at the command line, type:
chmod u+x qm_2.1.00-linux32
You should now be able to execute the installer. You can do this from
your file manager, or from the command line by typing:
./qm_2.1.00-linux32
Run the installer. The uninstaller is provided.
Installing QM on Mac OS X
-------------------------
CAUTIOIN: If you have any previous version of QM installed on your
system, please *uninstall* it before installing the new version.
The ZIP file for Mac OS X contains the qm.dmg disk image and the
examples/ directory. You need to unzip the file into a temporary location
and double click on the qm.dmg file. This will mount and open the disk
image. To install the QM tool, you simply drag the qm.app image into the
Applications folder (typically visible in the Dock). If you wish, you
might also create the alias of the qm.app and place it on your Desktop.
The examples/ directory contains the example projects. You should
move this directory from the temporary location to the directory
where you do software development. To build and execute the examples
on Mac OS X, you need to install QP 4.2.01 or higher.
To uninstall QM, simply delete the qm.app file and the examples.
****
NOTE: The QM application contains both the QM GUI and the QMC model
compiler command-line utility. You can invoke the QMC utility from
the terminal by typing:
/Applications/qm.app/Contents/MacOS/qmc
****
================================================================
QM Revision History
-------------------
Release 2.1.02, date: 28-Dec-2011
----------------------------------
* Fixed the problem with the keyboard focus being removed from the
Property Editor when the mouse pointer is moved over a diagram.
Now editing text properties can continue regardless of the
position of the mouse pointer.
* Modified the behavior of the main window to eliminate the annoying
context switches when the user moves the keyboard focus to another
desktop application. Now the Bird's Eye View, the Toolbox, and the
Property Editor would not be deactivated when the user clicks
outside the QM application.
* Added menu command and toolbar button for copying model links to
the Clipboard. This is useful for quickly finding the corresponding
model elements in the generated code (through the standard text
find feature available in virtually all code editors and IDEs).
* Changed the code generation to generate consistently the @()-style
model links to match the copy-link feature.
* Fixed the bug with model name not appearing in the Model Explorer
when a new model is first created.
* Fixed the unexpected switching of the Current Model Item when the
user double-clicked text or code in the Property Editor.
* Improved model checking to disallow creating circular dependencies
of choice segments, which was possible when the begin of the parent
choice segment was moved to the free-end of a child choice segment.
* Changed displaying text in the diagrams to show only complete
lines rather than cutting the text horizontally and showing only
top slice of the last line.
* Added the standard file extension ".ino" for the Arduino sketches,
to recognize this file type and apply the correct (C++) syntax
highlighting. The extension ".ino" has been added in the latest
release of the Arduino IDE (Arduino 1.0).
Release 2.1.01, date: 04-Nov-2011
----------------------------------
* This release allows specifying comma-separated trigger lists
for transitions as opposed to just single triggers. The code
generator converts the trigger list into fall-through case
statements.
* Updated all examples for compatibility with QP 4.3.00.
* Fixed a bug which caused crash when a model file failed to
opened (due to version incompatiblity or a missing imported
package) and the user would double-click on the Log message to
inspect the failure cause.
* Fixed a bug causing assertion on Mac OS X in module nodeglyph,
line 289.
Release 2.1.00, date: 20-Oct-2011
----------------------------------
* This release provides support for breaking up model files into
separate package files, which can be imported (included) in any
number of models. This feature allows teams to work on different
parts of a large model by breaking it up into independently
managed and version-controlled packages.
* Fixed the inconsistency between reading and writing the file items,
which for empty files lead to "WARNING F802> ...parsing the model
template file failed". Specifically, this warning occured for the
model templates provided in the QM distribution.
* Fixed the bug in resizing the diagram canvas, which could lead
to breaking an assertion on Mac OS X (when the mouse coursor would
momentarily leave and re-enter the diagram area).
* Fixed the inconsistentcy in enabling and disabling of copy/cut/
paste/delete actions, which could lead to breaking an assertion
in explorerview, line 321.
Release 2.0.00, date: 21-Sep-2011
----------------------------------
* This release provides support for Cut/Copy/Paste of model
items within one model and accross different models opened
in separate instances of QM.
* The model file format has chaned compared to QM 1.x (to reuse
the model serialization for Cut/Copy/Paste). This means that
the models created with QM 1.x are incompatible with QM 2.x.
***
NOTE: the <qm>/bin/ directory contains the utility qmconv-1-2
for converting models created with QM 1.x to QM 2.x.
***
* Added panning of the current viewport to the Bird's Eye View.
* Added Cut/Copy/Paste/Delete actions to the popup menus inside
the Model Explorer.
* Fixed several bugs and inconsistencies.
Release 1.1.08, date: 11-Aug-2011
----------------------------------
* This release is the first one available for all three platforms:
Windows, Linux, and Mac OS X.
* The directory structure of the QM installation has been modified
to accomodate Mac OS X and to make it common for all platforms.
* Changed the behavior of the "Generate Code" command to
save the model to disk before generating code.
* Changed the keys for panning and zooming of diagrams with the
mouse to make it consistent with popular programs such as GIMP
or Google Maps (bug #3381122). Now SHIFT activates panning and
horizontal scrolling with the mouse wheel. When SHIFT is
depressed, rotating the mouse wheel towards the back of the
mouse will scroll horizontally right (i.e., the horizontal
scroll bar will move right). This is exactly as in GIMP.
CTRL activates selecting and zooming with the mouse wheel.
When CTRL is depressed, rotating the mouse wheel towards the
back of the mouse will zoom out.
* Fixed the problem with C-style comments at the end of a file
(bug #3355437).
* Fixed the problem with print crashing QM on Linux (bug #3325130).
* Added drag-and-drop of model elements inside the Model Explorer.
Now you can drag packages, classes, attributes, operations,
and paramters as well as directories and files (feature request
#3116849). The drag-and drop feature verifies the types of the
elements and allows only the meaningful operations. For example,
dragging a class operation to another class, but not allowing
dragging a state to a directory.
* Added drag-and-drop of model elements from the Model Explorer
to files. This allows quick generation of code directives
without manually typing the element paths.
* Added drag-and-drop of model files from the File Explorer
(File Finder on the Mac) to the QM manin window, to open
the model file.
* Added "Close Model" command to the File menu.
Release 1.1.07, date: 23-Jun-2011
----------------------------------
* Fixed the bug causing a crash for the sequence: open an existing
model, create new model, checking class properties.
* Modified code generation to include generating Doxygen comments
from the documentation for classes, class attributes, class
operations, free attributes, and free operations.
* Fixed bug related to incorrect updating of free attribute
documentation from the property sheet.
* Added collapse/expand button for documentation box in the
operation property sheet. This is to allow more space for
the code box.
* Added toggle buttons to the View toolbar to allow easy toggling
the view of the docking windows (Explorer, Property Editor,
Bird's Eye View, and the Log).
* Improved/corrected the locked/unloced button behavior and
added the locked/unlocked status to the status bar.
* Improved/corrected the Grid view button behavior and added
grid status to the status bar.
* Updated ARM Cortex examples for EK-LM3S811 to use the latest
IAR EWARM 6.20.
Release 1.1.06, date: 27-Apr-2011
----------------------------------
* This release adds the "locked" moded for exploring or
reviewing the model without the risk of inadvertently
modifiying the model.
* Fixed the EMF (Enhanced Windows Metafile) generation issue
with the bounding box. When shapes in a diagram are selected
only the selected shapes are rendered to EMF and the bounding
box is adjusted so that it contains only the selected shapes.
Previously, the EMF bounding box was always the size of the
diagram canvas, regardless if only a tiny fragment of the
diagram was selected and rendered to EMF.
* Fixed the bug with keyboard focus, in which occasionally
a diagram would ignore the Ctrl or Shift keys (for going
into Selecting and Panning modes, respectively).
* Added the Show/Hide Grid menu option and toolbar button.
Release 1.1.05, date: 22-Apr-2011
----------------------------------
* This release changes the permissions of the generated files
to READ-ONLY, to prevent users from editing these files.
This is to reinforce the policy that all changes need to
be really made to the QM MODELS, not the generated files.
* Fixed the bug in creating new models, which led to code
generation errors: "ERROR F031 state machine not allowed
in this class"
* Fixed the EMF (Enhanced Windows Metafile) generation bug,
in which all single ampersands ('&') were dropped and double
ampersands ('&&') were replaced with a single ampersand.
* Fixed the problem with closing a minimized window, which
would lead to problems in opening the window again.
* Fiexed the problem of not adding newly created models to the
list of most-recently used models.
* Improved error message reporting from XML parsing of the
model file.
* Added Help button to the "New Model" dialog box.
* Added .pde file stereotype for Arduino sketches
Release 1.1.04, date: 18-Mar-2011
----------------------------------
* This release adds the QMC (QP Model Compiler) command line
utility for automated builds.
* Several minor improvements and bug fixes related to abrupt
interrupting the QM session by popus (such as system update
notifications).
Release 1.1.03, date: 02-Mar-2011
----------------------------------
* This release includes examples of QM models and projects for
Windows, Linux, and ARM Cortex.
* The default location of the help and model templates have
been modified.
Release 1.1.02, date: 05-Jan-2011
---------------------------------
* Made the code compatible with the Linux build (this is the
first QM version offered for Windows and Linux).
* Added the View|Styles menu.
Release 1.1.01, date: 01-Jan-2011
---------------------------------
* Fixed internal framework models of QP/C++ and QP-nano to
correctly inherit QActive from QHsm.
* Fixed a bug in the MDI (multiple document interface) related
to deleting a item with an active open MDI window (such as
file item or statechart item).
Release 1.1.00, date: 30-Dec-2010
---------------------------------
* Added consistent support for Unicode, from the model file,
through all model elements, to generated code. Now, you can
use Unicode characters (e.g., Chinese, Japanese, etc.) in
your documenation and code (e.g., comments) and they will
be preserved and propagated to the generated code.
* Added options for specifying text endcoding for the
generated code and the model file explicitly for most
encodings used in the world.
* Added customizability of look and feel via a style sheet
(file qm.qss stored in the QM directory). Now you can customize
fonts and colors of editors and diagrams.
* Improved log file by adding double-click functionality for
quickly selecting model elements corresponding to errors or
warnings. Now you can double-click on any warning or error
and the related item gets highlighted.
* Added similar double-click functionality to documentation.
This allows you to build hyper-links for cross-referencing
items within the model.
* Added documentation entry in property sheets to several model
items, such as model, class attribute, class operation, free
attribute, free operation.
* Changed the way of storing documentation in the model file
from HTML to plain text.
* Added tons of documentation for the QP framework models.
Now, when you expand the QP framework model item, you can
find detailed documentation and code examples for all
classes, operations, and macros provided in the QP
frameworks.
* Added support for QFsm (flat, not-hierarchical state
machines), including code generation for classes derived
from QFsm.
* Improved selecting of diagram items (with Ctrl key) and
panning of diagrams (with Shift key).
* Fixed bug related to moving complex selections of states
and transitions, in which transitions could occasionally get
detached from states.
* Fixed bugs and inconsistencies in the tabbed view (this was
really an issue of the underlying Qt framework).
* Improved syntax coloring for C/C++. The syntax coloring now
highlights QM-specific elements, such as code generation
directives, QP services, etc.
* Added support for Makefiles (syntax coloring and proper
generation of makefiles).
* Eliminated any dependencies of the QM Windows executable
on the Visual Studio runtime library redistributable (such
as msvcr90.dll). The runtime libraries are now linked
statically.
* Many other cosmetic improvements.
Release 1.0.08, date: 12-Dec-2010
---------------------------------
* Fixed a bug related to undo/redo of moving transitions with
choice segments attached. The bug occurred when the user
moved the choice-end of a transition, which had some choice
segments attached. After executing undo (Ctrl-Z) the attached
choice segments would not be moved, so they would become
detached from the transition end.
* Fixed a bug related to invalid initial transitions. The bug
occurred when the target state of an initial transition was
deleted (at which point the initial transition changed to
dashed line) and the user tried to move the ball-end of the
initial transition.
* Changed the top-level comment placed in the generated code.
Now, the top-level comment contains only the model file name
*without* the full path name of the model file. This change
was to make sure that a given QM model generates exactly the
same code regardless of the directory in which the model file
resides. Teams working with VCSs (version control systems)
often check out the master model in various working
directories, but they rightly expect that the generated code
be identical.
* Changed the code generator so that every generated file is
terminated with the new-line character. Some C/C++ compilers
require all files to be terminated with new line. Also
improved parsing of the files and error reporting.
* Added context-sensitive help, which is activated by
'Ctrl+F1'. The context-sensitive help checks the position of
the mouse cursor and displays the help for the specific
window under the cursor.
NOTE: The actual help pages are under development, so currently
only a placeholder page is displayed in your browser. The
online help will be gradually added and you will not need to
upgrade the QM tool to get the new help.
* Other cosmetic improvements.
Release 1.0.07, date: 27-Nov-2010
---------------------------------
* Fixed bug related to adding connectors without dragging them
out of the attachment point, which results in zero-sized
connectors. Such connectors are illegal and were deleted, but
the property sheet was not cleaned up. Now adding a zero-size
connector removes the connector and cleans up all views.
* Added a proactive fix to an unreproducible bug (assertion in
diagramview, line 214).
* Changed how code editors resize in the Property Editor
window. Previously the code editor grew only to about 20
lines of code in vertical direction. Now the code editor
always fills the whole available vertical space of the
Property Editor docking widget.
* Made the same change for text (documentation) editors in
the Property Editor window.
* Added version number reporting in the Assertion message box.
Most users never reported the QM version number when they
encountered an assertion failure.
* Implemented editing of a new directory name and a new file
name immediately after these elements have been added to
the model.
* Added close button (x) to the subwindow tabs in the tabbed
view.
* Fixed inconsistent behavior of the tabbed view after closing
a subwindow.
* Other cosmetic improvements.
Release 1.0.06, date: 20-Nov-2010
---------------------------------
* added docking widget with the zoomed-out view of the current
diagram ("Bird's Eye View"). The "Bird's Eye View" is designed
to improve orientation in large diagrams by showing the
position of the current viewport in the relation to the diagram.
* improved consistency of the diagram panning mode and fixed
bugs related to entering the panning mode while in the middle
of moving/resizing nodes or dragging connectors. Now, the
panning mode can be activated only when there is no dragging
in progress.
* added vertical scrolling of diagrams with the mouse-wheel
* added horizontal scrolling of diagrams with Shift mouse-wheel
* changed zooming of the diagram to Ctrl-mouse-wheel
* fixed bug related to pressing right or middle mouse buttons
in the middle of moving node(s) or connectors.
* fixed incorrect behavior of connectors when dragged to
zero-size (when the begin overlapped with the end).
* other cosmetic improvements.
Release 1.0.05, date: 17-Nov-2010
---------------------------------
* this release fixes the bug in C-code generation in definition
of free operations.
* there are some cosmetic improvements as well.
Release 1.0.04, date: 17-Nov-2010
---------------------------------
* bug fix in adding, deleting, and adding a class to a package
* added diagram zoom slider and buttons in the status bar
* added panning of the diagrams. Panning is activated by
pressing Shift in an active diagram.
Release 1.0.03, date: 29-Oct-2010
---------------------------------
* bug fix in editing of class documentation that can break
assertion in classheet, line 148 (this turned out to be an
undo/redo issue of incorrect unwinding of the undo stack.)
* improved consistency of line-wrapping between screen output
and EMF output.
* allowed using backslash characters ('\') in guard conditions
to enforce line breaks in displaying the guard in the diagram.
The backslashes are removed in the generated code.
* used lighter background colors for states in the EMF output
* added cleanup of the generated code, so that it contains no
superfluous white space (extra spaces could be present in
the user-defined action code.)
Release 1.0.02, date: 26-Oct-2010
---------------------------------
Release 1.0.00, date: 20-Oct-2010
---------------------------------
The first official QM release contains the following features:
* Graphical modeling tool based on the UML state machine subset
* Automatic generation of production-quality C or C++ code
* Automatic model verification during the code generation
* Built-in support for QP/C, QP/C++, and QP-nano frameworks
* 100% traceability from design to code
* Ultimate flexibility in generated code design
* Friendly to version control systems (VCS)
* Intuitive diagramming environment for making clean, good-
looking diagrams
* Export of diagrams to EMF vector format for direct pasting
into MS-Office and Open Office applications
* Modern user interface with docking windows with the layout
saved across sessions
* State of the art editors for action code with syntax
highlighting
* Undo/redo of all model edits
* Quick Clipboard-based navigation between the model and third-
party tools
* Support for user-generated model templates
* Ready-made project examples and online tutorials
* Completely free to download and free to use
Source: README, updated 2011-12-29