changelog
    
    
    - Thu, 23 Feb 2017 20:21:40 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 23 Feb 2017 20:21:40 +0200] rev 1160
 
    - At long last, the g_win pointer has been removed. Down with global variables!
 
    - Thu, 23 Feb 2017 20:18:39 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 23 Feb 2017 20:18:39 +0200] rev 1159
 
    - print() is no longer a global function but is tied to HierarchyElement.
 
    - Thu, 23 Feb 2017 20:06:22 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 23 Feb 2017 20:06:22 +0200] rev 1158
 
    - Made the GL renderer recieve information of object deletion via signals.
 
    - Thu, 23 Feb 2017 20:03:31 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 23 Feb 2017 20:03:31 +0200] rev 1157
 
    - Moved GetIcon and makeSettings into the MainWindow namespace as static methods.
 
    - Thu, 23 Feb 2017 19:56:21 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 23 Feb 2017 19:56:21 +0200] rev 1156
 
    - Removed the Critical and Question functions, replaced with direct QMessageBox uses. Removed unused code from mainwindow.h.
 
    - Thu, 23 Feb 2017 19:33:56 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 23 Feb 2017 19:33:56 +0200] rev 1155
 
    - Removed dead code
 
    - Thu, 23 Feb 2017 19:32:36 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 23 Feb 2017 19:32:36 +0200] rev 1154
 
    - Some cleanup in mainwindow.cpp, use QSet<QString> for the 'ignore' variable.
 
    - Thu, 23 Feb 2017 18:47:15 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 23 Feb 2017 18:47:15 +0200] rev 1153
 
    - Reformat colors.cpp.
 
    - Thu, 23 Feb 2017 18:38:30 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 23 Feb 2017 18:38:30 +0200] rev 1152
 
    - Removed unused code from macros.h.
 
    - Mon, 20 Feb 2017 07:56:21 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Mon, 20 Feb 2017 07:56:21 +0200] rev 1151
 
    - Made fixed cameras matrix-based. This simplifies some math.
 
    - Sat, 18 Feb 2017 02:02:29 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 18 Feb 2017 02:02:29 +0200] rev 1150
 
    - Added gnomon.dat to version control. It helps me sort out the cameras as I rework them.
 
    - Tue, 14 Feb 2017 15:21:34 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 15:21:34 +0200] rev 1149
 
    - Moved LDQuadrilateral into its own source pair.
 
    - Tue, 14 Feb 2017 15:11:33 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 15:11:33 +0200] rev 1148
 
    - Moved LDTriangle into its own source pair.
 
    - Tue, 14 Feb 2017 14:59:26 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 14:59:26 +0200] rev 1147
 
    - Renamed ldObject.cpp → linetypes/modelobject.cpp
 
    - Tue, 14 Feb 2017 14:53:06 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 14:53:06 +0200] rev 1146
 
    - Renamed glCompiler.cpp → glcompiler.cpp
 
    - Tue, 14 Feb 2017 14:52:01 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 14:52:01 +0200] rev 1145
 
    - Renamed ldDocument.cpp → lddocument.cpp
 
    - Tue, 14 Feb 2017 14:51:04 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 14:51:04 +0200] rev 1144
 
    - Renamed glRenderer.cpp → glrenderer.cpp
 
    - Tue, 14 Feb 2017 13:37:58 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 13:37:58 +0200] rev 1143
 
    - Cleanup AlgorithmToolset::replaceCoordinates()
 
    - Tue, 14 Feb 2017 13:29:47 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 13:29:47 +0200] rev 1142
 
    - Fixed possible memory leak in AlgorithmToolset::editRaw().
 
    - Tue, 14 Feb 2017 13:25:43 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 13:25:43 +0200] rev 1141
 
    - Split LDConditionalEdge and LDEdgeLine into new source pairs
 
    - Tue, 14 Feb 2017 13:02:05 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 13:02:05 +0200] rev 1140
 
    - Removed the GLCamera::FreeToken name
 
    - Tue, 14 Feb 2017 12:58:53 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 12:58:53 +0200] rev 1139
 
    - LDObject subclass renaming:
· LDLine → LDEdgeLine
· LDCondLine → LDConditionalEdge
· LDQuad → LDQuadrilateral 
    - Tue, 14 Feb 2017 12:48:21 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 12:48:21 +0200] rev 1138
 
    - Updated comments
 
    - Tue, 14 Feb 2017 12:43:10 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 12:43:10 +0200] rev 1137
 
    - Inlined away the LDOBJ macros in ldobject.h.
 
    - Tue, 14 Feb 2017 09:53:13 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 09:53:13 +0200] rev 1136
 
    - Rearranged declarations in basics.h
 
    - Tue, 14 Feb 2017 09:48:51 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 09:48:51 +0200] rev 1135
 
    - Removed the intXX type aliases and removed uses of intXX_t in favor of qintXX
 
    - Tue, 14 Feb 2017 08:33:44 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 08:33:44 +0200] rev 1134
 
    - Moved more stuff to GLCamera
 
    - Tue, 14 Feb 2017 08:26:39 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 08:26:39 +0200] rev 1133
 
    - Some documentation and cleanup in GLRenderer...
 
    - Tue, 14 Feb 2017 08:15:58 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 08:15:58 +0200] rev 1132
 
    - Fixed the free camera icon not showing up anymore.
 
    - Tue, 14 Feb 2017 08:13:26 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 08:13:26 +0200] rev 1131
 
    - Simplified camera tooltip code.
 
    - Tue, 14 Feb 2017 08:08:17 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 08:08:17 +0200] rev 1130
 
    - Moved camera names to GLCamera, other adjustments
 
    - Tue, 14 Feb 2017 07:57:27 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 14 Feb 2017 07:57:27 +0200] rev 1129
 
    - Exported GLRenderer cameras into a new class, GLCamera.
 
    - Mon, 13 Feb 2017 20:59:16 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Mon, 13 Feb 2017 20:59:16 +0200] rev 1128
 
    - Fixed some compilation problems
 
    - Sun, 12 Feb 2017 17:28:22 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 12 Feb 2017 17:28:22 +0200] rev 1127
 
    - Commented GLCompiler::getColorForPolygon
 
    - Sun, 12 Feb 2017 17:18:14 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 12 Feb 2017 17:18:14 +0200] rev 1126
 
    - Refactored configcollector.py
 
    - Sun, 12 Feb 2017 16:59:35 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 12 Feb 2017 16:59:35 +0200] rev 1125
 
    - Moved the definitions of all configuration options into a new text file and made the configuration collector read that.
 
    - Sun, 12 Feb 2017 16:02:44 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 12 Feb 2017 16:02:44 +0200] rev 1124
 
    - Moved definition of MainWindow::ToolInfo into mainwindow.cpp
 
    - Sun, 12 Feb 2017 16:02:02 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 12 Feb 2017 16:02:02 +0200] rev 1123
 
    - Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
 
    - Fri, 10 Feb 2017 23:06:24 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Fri, 10 Feb 2017 23:06:24 +0200] rev 1122
 
    - Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
 
    - Thu, 09 Feb 2017 23:51:42 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 23:51:42 +0200] rev 1121
 
    - Replaced uses of currentDocument() in GLRenderer with m_model
 
    - Thu, 09 Feb 2017 23:50:11 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 23:50:11 +0200] rev 1120
 
    - Axes are not rendered with normals so the normals client state has to be disabled when drawing them.
 
    - Thu, 09 Feb 2017 23:46:45 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 23:46:45 +0200] rev 1119
 
    - Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
 
    - Thu, 09 Feb 2017 23:45:53 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 23:45:53 +0200] rev 1118
 
    - Grah
 
    - Thu, 09 Feb 2017 22:46:37 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 22:46:37 +0200] rev 1117
 
    - Moved LDComment and LDEmpty into their own source file pairs.
 
    - Thu, 09 Feb 2017 21:04:33 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 21:04:33 +0200] rev 1116
 
    - Moved dialogs.cpp to dialogs/externalprogrampathdialog.cpp
 
    - Thu, 09 Feb 2017 21:01:12 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 21:01:12 +0200] rev 1115
 
    - Cleaned up ExternalProgramPathDialog
 
    - Thu, 09 Feb 2017 20:54:21 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 20:54:21 +0200] rev 1114
 
    - Moved some global constants into appropriate namespaces.
 
    - Thu, 09 Feb 2017 20:44:36 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 20:44:36 +0200] rev 1113
 
    - Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
 
    - Thu, 09 Feb 2017 20:07:45 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 20:07:45 +0200] rev 1112
 
    - Fixed potential memory leak
 
    - Thu, 09 Feb 2017 19:59:27 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 19:59:27 +0200] rev 1111
 
    - Replaced GLRenderer::m_width and GLRenderer::m_height with width() and height() calls.
 
    - Thu, 09 Feb 2017 19:57:43 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 19:57:43 +0200] rev 1110
 
    - Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
 
    - Thu, 09 Feb 2017 19:32:41 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 19:32:41 +0200] rev 1109
 
    - Made GLRenderer's Model pointer const
 
    - Thu, 09 Feb 2017 13:26:44 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 13:26:44 +0200] rev 1108
 
    - Moved more editing-related methods to Canvas.
 
    - Thu, 09 Feb 2017 13:17:22 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 13:17:22 +0200] rev 1107
 
    - Removed the unneeded makeCurrent overload
 
    - Thu, 09 Feb 2017 13:13:46 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 13:13:46 +0200] rev 1106
 
    - Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
 
    - Thu, 09 Feb 2017 13:07:47 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 13:07:47 +0200] rev 1105
 
    - Moved triangle count rendering to Canvas
 
    - Thu, 09 Feb 2017 13:05:31 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 13:05:31 +0200] rev 1104
 
    - Moved document editing methods from GLRenderer to Canvas
 
    - Thu, 09 Feb 2017 11:53:55 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 11:53:55 +0200] rev 1103
 
    - Created a new GLRenderer derivative class "Canvas" and made MainWindow use it
 
    - Thu, 09 Feb 2017 01:08:57 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 01:08:57 +0200] rev 1102
 
    - Cleaned up code in LDDocument and removed unnecessary flags and methods. Flags turned into bools.
 
    - Thu, 09 Feb 2017 01:00:31 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 01:00:31 +0200] rev 1101
 
    - Removed some unused code
 
    - Thu, 09 Feb 2017 00:52:23 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 00:52:23 +0200] rev 1100
 
    - Removed all overlay support. It's a messy pile of mess and I will reimplement it later as background images and it will be much better then.
 
    - Thu, 09 Feb 2017 00:45:44 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 00:45:44 +0200] rev 1099
 
    - GLRenderer no longer exposes the model pointer.
 
    - Thu, 09 Feb 2017 00:43:30 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 00:43:30 +0200] rev 1098
 
    - LDGLData merged into GLRenderer since it only deals with one document now. GLRenderer generalised from rendering documents to models.
 
    - Thu, 09 Feb 2017 00:32:24 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 09 Feb 2017 00:32:24 +0200] rev 1097
 
    - Made a new renderer be created for each document, instead of reusing the same renderer for all documents.
 
    - Wed, 08 Feb 2017 17:07:19 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Wed, 08 Feb 2017 17:07:19 +0200] rev 1096
 
    - Simplified GLRenderer::convert3dTo2d. The multiplication with the modelview matrix is not necessary, it's identity all the time... with that, I think the function makes much more sense now.
 
    - Wed, 08 Feb 2017 16:51:55 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Wed, 08 Feb 2017 16:51:55 +0200] rev 1095
 
    - - Use a QGenericMatrix to store the matrix, instead of a C array
- Only reset angles when GL is initialized, otherwise bad things happen
- Fixed missing "}" in matrix string representation 
    - Wed, 08 Feb 2017 16:45:32 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Wed, 08 Feb 2017 16:45:32 +0200] rev 1094
 
    - Changed from GLdouble to GLfloat. Apparently the performance difference is greater on the GPU..? It doesn't really matter but let's be consistent.
 
    - Wed, 08 Feb 2017 16:38:59 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Wed, 08 Feb 2017 16:38:59 +0200] rev 1093
 
    - GLRenderer::clampAngle is no longer used as of the previous commit so we can do away with it.
 
    - Wed, 08 Feb 2017 16:25:06 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Wed, 08 Feb 2017 16:25:06 +0200] rev 1092
 
    - Switched from euler angle rotation to matrix rotation. Gimbal lock is now broken.
 
    - Sat, 04 Feb 2017 14:44:39 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 04 Feb 2017 14:44:39 +0200] rev 1091
 
    - Wrote documentation to the Model class.
 
    - Sat, 04 Feb 2017 14:24:16 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 04 Feb 2017 14:24:16 +0200] rev 1090
 
    - The current document pointer may no longer be null.
 
    - Fri, 03 Feb 2017 10:51:08 +0200
 
    - by Teemu Piippo <teemu@compsta2.com> [Fri, 03 Feb 2017 10:51:08 +0200] rev 1089
 
    - minor amendment
 
    - Fri, 03 Feb 2017 10:44:23 +0200
 
    - by Teemu Piippo <teemu@compsta2.com> [Fri, 03 Feb 2017 10:44:23 +0200] rev 1088
 
    - Reworked and cleaned up the circle mode
 
    - Mon, 30 Jan 2017 14:30:55 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Mon, 30 Jan 2017 14:30:55 +0200] rev 1087
 
    - Some code cleanup in abstract editing modes.
 
    - Mon, 30 Jan 2017 02:41:45 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Mon, 30 Jan 2017 02:41:45 +0200] rev 1086
 
    - Removed some unnecessary #include-directives.
 
    - Mon, 30 Jan 2017 02:33:17 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Mon, 30 Jan 2017 02:33:17 +0200] rev 1085
 
    - Removed the status bar, since it's not used for anything
 
    - Mon, 30 Jan 2017 02:30:26 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Mon, 30 Jan 2017 02:30:26 +0200] rev 1084
 
    - Split object list representation into virtual methods
 
    - Mon, 30 Jan 2017 02:18:42 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Mon, 30 Jan 2017 02:18:42 +0200] rev 1083
 
    - Removed LDDocument::getObjectCount (superceded by Model::size)
 
    - Mon, 30 Jan 2017 00:59:06 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Mon, 30 Jan 2017 00:59:06 +0200] rev 1082
 
    - The "all objects have valid models" invariant seems to be holding up now. At least basic drawing works again.
 
    - Sun, 29 Jan 2017 21:17:43 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 29 Jan 2017 21:17:43 +0200] rev 1081
 
    - Made all LDObject constructors protected. Emplacement is now the only way to create objects.
 
    - Sun, 29 Jan 2017 21:07:15 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 29 Jan 2017 21:07:15 +0200] rev 1080
 
    - Removed the LDSpawn function and replaced its last use cases.
 
    - Sun, 29 Jan 2017 21:02:11 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 29 Jan 2017 21:02:11 +0200] rev 1079
 
    - More rework on model stuff, removals of LDSpawn calls. Most importantly, the LDraw code parsing function was moved to Model.
 
    - Sun, 29 Jan 2017 15:49:36 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 29 Jan 2017 15:49:36 +0200] rev 1078
 
    - Removed uses of LDSpawn in the algorithm toolset
 
    - Sun, 29 Jan 2017 15:39:35 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 29 Jan 2017 15:39:35 +0200] rev 1077
 
    - Replaced uses of LDSpawn with the Model class in edit modes
 
    - Sun, 29 Jan 2017 15:28:48 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 29 Jan 2017 15:28:48 +0200] rev 1076
 
    - Removed dead code that's standing in the way of refactoring
 
    - Sun, 29 Jan 2017 15:25:26 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 29 Jan 2017 15:25:26 +0200] rev 1075
 
    - Removed the AddObjectDialog. Garbage code that absolutely needs to be reimplemented.
 
    - Sun, 29 Jan 2017 15:18:40 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 29 Jan 2017 15:18:40 +0200] rev 1074
 
    - Made the quad→triangles use emplacement. However, now it crashes because of problems in the underlying system (the LDObject constructor shouldn't do anything in regard to the model!)
 
    - Sun, 29 Jan 2017 15:05:14 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 29 Jan 2017 15:05:14 +0200] rev 1073
 
    - Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
The LDObject::destroy method is also now gone. The model decides when objects are destroyed and calls the destructor directly. The end result removes a lot of cruft and adds structure to LDObject relations.
Notes:
- Inlining does not currently work (nothing simply gets inlined in)
- More work is required to ensure that each object actually goes into a model 
    - Sat, 28 Jan 2017 17:47:06 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 17:47:06 +0200] rev 1072
 
    - Happy new year 2017!
 
    - Sat, 28 Jan 2017 17:45:00 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 17:45:00 +0200] rev 1071
 
    - Matrices are now input with 9 spinboxes instead of a MLCad-style line edit
 
    - Sat, 28 Jan 2017 17:23:04 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 17:23:04 +0200] rev 1070
 
    - Moved the identity matrix constant into Matrix's namespace
 
    - Sat, 28 Jan 2017 17:20:16 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 17:20:16 +0200] rev 1069
 
    - Removed the dangerous C-array constructor from the matrix - no need for it anyway since the matrix already is an array of doubles.
 
    - Sat, 28 Jan 2017 17:14:05 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 17:14:05 +0200] rev 1068
 
    - Reworked the Matrix interface so that less index math is involved
 
    - Sat, 28 Jan 2017 16:30:27 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 16:30:27 +0200] rev 1067
 
    - Fixed formatFileSize
 
    - Sat, 28 Jan 2017 14:33:09 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 14:33:09 +0200] rev 1066
 
    - Refactor roundToDecimals and formatFileSize
 
    - Sat, 28 Jan 2017 14:14:28 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 14:14:28 +0200] rev 1065
 
    - Actually, let's call it countof(). Makes more sense.
 
    - Sat, 28 Jan 2017 14:13:01 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 14:13:01 +0200] rev 1064
 
    - Replaced '.length()' with 'length()' where appropriate
 
    - Sat, 28 Jan 2017 14:01:19 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 14:01:19 +0200] rev 1063
 
    - Replaced uses of 'x.size()' with 'length(x)'
 
    - Sat, 28 Jan 2017 13:49:09 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 13:49:09 +0200] rev 1062
 
    - refactor: added the length() function that's like Python's len()
 
    - Sat, 28 Jan 2017 13:32:55 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 28 Jan 2017 13:32:55 +0200] rev 1061
 
    - refactor
 
    - Sat, 19 Nov 2016 22:57:18 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Sat, 19 Nov 2016 22:57:18 +0200] rev 1060
 
    - Display error string if unable to write a crash log.
 
    - Fri, 18 Nov 2016 03:01:38 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Fri, 18 Nov 2016 03:01:38 +0200] rev 1059
 
    - Made DEFINE_FLAG_ACCESS_METHODS a function macro
 
    - Fri, 18 Nov 2016 02:56:53 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Fri, 18 Nov 2016 02:56:53 +0200] rev 1058
 
    - Cleaned up crash catcher, fixed missing <math.h> include
 
    - Thu, 17 Nov 2016 14:12:59 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 17 Nov 2016 14:12:59 +0200] rev 1057
 
    - Fixed additive range selection not working properly.
 
    - Thu, 17 Nov 2016 13:56:13 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 17 Nov 2016 13:56:13 +0200] rev 1056
 
    - Cleanup in GL renderer...
 
    - Thu, 17 Nov 2016 12:18:13 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Thu, 17 Nov 2016 12:18:13 +0200] rev 1055
 
    - Cleaned up PrimitiveScanner
 
    - Wed, 16 Nov 2016 01:43:37 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Wed, 16 Nov 2016 01:43:37 +0200] rev 1054
 
    - Further cleanup
 
    - Wed, 16 Nov 2016 01:28:42 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Wed, 16 Nov 2016 01:28:42 +0200] rev 1053
 
    - Refactor primitives
 
    - Wed, 16 Nov 2016 00:52:22 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Wed, 16 Nov 2016 00:52:22 +0200] rev 1052
 
    - Refactor FileToolset
 
    - Wed, 16 Nov 2016 00:44:35 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Wed, 16 Nov 2016 00:44:35 +0200] rev 1051
 
    - Moved the about dialog into the file toolset and removed the mail button (the forums are better for this anyway)
 
    - Tue, 15 Nov 2016 17:44:54 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 15 Nov 2016 17:44:54 +0200] rev 1050
 
    - Removed the 'once' macro since it's not used
 
    - Tue, 15 Nov 2016 17:42:42 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 15 Nov 2016 17:42:42 +0200] rev 1049
 
    - Removed the USE_QT5 macro now that we're Qt5 only.
 
    - Tue, 15 Nov 2016 17:40:51 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 15 Nov 2016 17:40:51 +0200] rev 1048
 
    - Change "m_" prefix to "_" in members of PartDownloader
 
    - Tue, 15 Nov 2016 17:39:04 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 15 Nov 2016 17:39:04 +0200] rev 1047
 
    - Changed QList to QVector in PartDownloader
 
    - Tue, 15 Nov 2016 17:37:31 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 15 Nov 2016 17:37:31 +0200] rev 1046
 
    - Cleanup PartDownloader
 
    - Tue, 15 Nov 2016 17:12:50 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 15 Nov 2016 17:12:50 +0200] rev 1045
 
    - Unabbreviate "transform" to "transformationMatrix"
 
    - Tue, 15 Nov 2016 13:52:44 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Tue, 15 Nov 2016 13:52:44 +0200] rev 1044
 
    - Cleanup colors.cpp/.h
 
    - Fri, 11 Nov 2016 13:59:27 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Fri, 11 Nov 2016 13:59:27 +0200] rev 1043
 
    - Refactor GuiUtilities
 
    - Fri, 11 Nov 2016 13:34:51 +0200
 
    - by Teemu Piippo <teemu@hecknology.net> [Fri, 11 Nov 2016 13:34:51 +0200] rev 1042
 
    - Some cleanup
 
    - Sun, 16 Oct 2016 18:28:56 +0300
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 16 Oct 2016 18:28:56 +0300] rev 1041
 
    - Draw line lengths to 2 decimal points only.
 
    - Sun, 16 Oct 2016 17:54:42 +0300
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 16 Oct 2016 17:54:42 +0300] rev 1040
 
    - Dropped Qt 4 support. We're Qt 5 only now.
 
    - Sun, 16 Oct 2016 17:54:22 +0300
 
    - by Teemu Piippo <teemu@hecknology.net> [Sun, 16 Oct 2016 17:54:22 +0300] rev 1039
 
    - Fixed compilation.
 
    - Thu, 16 Jun 2016 14:13:04 +0300
 
    - by Teemu Piippo <teemu@compsta2.com> [Thu, 16 Jun 2016 14:13:04 +0300] rev 1038
 
    - Added doxygen.ini
 
    - Sun, 08 May 2016 20:54:52 +0300
 
    - by Teemu Piippo <teemu@compsta2.com> [Sun, 08 May 2016 20:54:52 +0300] rev 1037
 
    - Moved matrix into new source/header pair in types/
 
    - Sun, 08 May 2016 20:12:54 +0300
 
    - by Teemu Piippo <teemu@compsta2.com> [Sun, 08 May 2016 20:12:54 +0300] rev 1036
 
    - Replaced the ugly for_enum macro with a generator class
Fixed: qHash(const Vertex&) got sucked into infinite recursion 
    - Sun, 08 May 2016 16:26:16 +0300
 
    - by Teemu Piippo <teemu@compsta2.com> [Sun, 08 May 2016 16:26:16 +0300] rev 1035
 
    - Further improved enum handling
 
    - Sun, 08 May 2016 16:11:40 +0300
 
    - by Teemu Piippo <teemu@compsta2.com> [Sun, 08 May 2016 16:11:40 +0300] rev 1034
 
    - Enum stuff
 
    - Sun, 08 May 2016 15:26:58 +0300
 
    - by Teemu Piippo <teemu@compsta2.com> [Sun, 08 May 2016 15:26:58 +0300] rev 1033
 
    - - Refactoring...
- Camera icons don't have to be heap allocated anymore