Envision
A visual programming IDE for object-oriented languages
|
All contributions to the Envision source code such as enhancements or bug fixes are much appreciated.
If you want to join the development effort please read the information on this page.
The main repository for the project is maintained by Dimitar and can be found here. There are two main branches:
development
- Contains the latest changes and features. This branch is updated regularly, and any contributions should be based on it.master
- The idea is that this branch contains a somewhat more stable version of the IDE. However currently, it simply contains an older version, that is occasionally synchronized with the development
branch.Contributors should create their own forks of Envision on github and create a feature branch based on the development
branch. Work on new features or bug fixes should be done in this branch and the branch should be rebased prior to being merged back into the development
branch of the main Envision repository.
This simple workflow is sufficient for the small team of people who are currently contributing to Envision.
For instructions on how to compile Envision see here.
Introductory tutorials that you should read to familiarize yourself with Envision's model-view-controller implementation can be found here.
All contributions to Envision must adhere to the following coding guidelines.
if
, while
, or for
is a single statement, do not use curly braces around it. If the condition and statement fit nicely on the same line write them on one line, otherwise put the statement on a newline: //
comment delimiter.Of course you can always have a look at the existing code in case you are not sure about something. If you feel like some additional clarifications should be added here, let us know.
All names in envision plug-in should use CamelCase:
data_
, instead of data
): public
, protected
, private
.
.cpp file defining a class, define all members in the following order starting from the top: static
, constructors
, destructors
, the rest
Q_ASSERT
. Exceptions should be thrown in situation where a problem is caused due the user's input or the user's actions, and this problem can not be prevented in code. For all other situations you should use assertions. In particular use assertions to introduce checks at various places in the code where you expect the assertion to hold. The presumption should be that if an assertion fails, this indicates a buggy and incomplete code, and it is possible to fix this once and for all in the code.static_cast
, dynamic_cast
, const_cast
, reinterpret_cast
). Better still, is to use the Envision provided DCast
, instead of C++'s dynamic_cast
, whenever possibly. DCast
is faster but you can only use it if the class hierarchy you're trying to cast within supports it. These are currently all Node
subclasses and all Item
subclasses. Any other type can be made to support DCast
by using the Super
template to inherit from a base class and using the appropriate type id macros from Core/src/reflect/typeIdMacros.h
virtual
and the override
keywords in your method declaration.Qt is an excellent framework and is used throughout the Envision project. Many Qt conventions have been adopted by Envision. You may want to have a look at:
Right: Fix a bug where typing 42 would crash Envision Wrong: Fixes a bug where typing 42 would crash Envision Wrong: Fixed a bug where typing 42 would crash Envision