* Since these types are more prevalent than originally designed, it
makes more sense to remove the namespace for ease of typing/naming.
* Also add a specialised type 'bytebuf' for an array of bytes.
* This makes mapping easier to SWIG since there's no special casing for
namespaced arrays. Especially so for nested cases like
rdctype::array<rdctype::str> -> rdcarray<rdcstr>
* For the most part the interface is stl-compatible, but we have a few
little changes of our own for convenience.
* This class is still needed after deleting the C# UI, because we don't
want to pass C++ stl structs over module boundaries and possibly run
into hard to diagnose incompatibilities.
To quote the Qt documentation for QFileDialog::setNameFilters:
> Note that the filter *.* is not portable, because the historical
> assumption that the file extension determines the file type is not
> consistent on every operating system. It is possible to have a file
> with no dot in its name (for example, Makefile). In a native Windows
> file dialog, *.* will match such files, while in other types of file
> dialogs it may not. So it is better to use * if you mean to select
> any file.
Admittedly, one of these usages is Windows-only and we are using the
native file dialog there, but we might as well be consistent.
* There was no good reason to have a flag indicating if the special
format was valid or not. Now it's a single enum, with a value
'Regular' indicating that the compCount/compWidth/compType fully
describe the format itself.
* This makes code patterns easier as you no longer need to check for
special then check for specialFormat, you can just test the type
directly.
* Dock panels shouldn't have any frame border or anything like that.
* They should have an external margin of 3 pixels at their border,
but then no further margins on the layouts (like sub-controls for
the pipeline state views.
* Toolbars should be Raised & Panel frames. Later we'll replace them
with actual QToolBars to better customise the painting.
* This is used primarily for the buffer/mesh viewer to be able to pin
the index/element column to the left side, group columns together with
a noticeable separator, and other minor tweaks.
* Unfortunately due to tight private coupling and lack of virtual
functions in the QTableView and QHeaderView, a few unrelated functions
have to be re-implemented to point to our own header.
There are a few places where the logical 'and' operator
was used to check if a given flag is enabled however
that is not the correct operator.
The binary 'and' operator should be used where
the enum acts as a flag.
* Added a couple of utility macros to help with the conversion. lit() is
paired with tr() for untranslated text.
* QFormatStr is more explicitly for non-textual formatting strings.
* Both are just #define'd to QStringLiteral()
* Generally this means removing ref out parameters and instead returning
values. In a couple of cases we will want to avoid copies in future
either by returning const references (e.g. to the pipeline state which
is immutable).
* At the same time, some pointless bool return values that were always
true and didn't indicate errors have been removed. They can be added
again if an error condition comes back.
* Some free functions still have out parameters as C linkage doesn't
allow returning user types by value.
* The C# UI still invokes into C wrappers for all the C++ classes, which
handle taking the return value and doing a copy into an out parameter
still for compatibility.