diff --git a/Documentation/ReleaseNotes.txt b/Documentation/ReleaseNotes.txt
deleted file mode 100644
index de8123fb00d0cd75abf12a2ee423fea84be5f501..0000000000000000000000000000000000000000
--- a/Documentation/ReleaseNotes.txt
+++ /dev/null
@@ -1,548 +0,0 @@
-===========================================================================
-
-  Vimba for Linux x86_64 - Release Notes
-
-  Version: 5.1
-  Date:    October 2021
-===========================================================================
-
---------------------------------
-Components and Version Reference
---------------------------------
-
-Vimba GenICam Transport Layer modules
--------------------------------------
-  GigE Transport Layer (VimbaGigETL.cti)                1.9.0*
-  USB Transport Layer (VimbaUSBTL.cti)                  1.4.0*
-
-APIs
-----
-  Vimba C API (libVimbaC.so)                            1.9.0*
-  Vimba C++ API (libVimbaCPP.so)                        1.9.0*
-  Vimba Python API                                      1.2.0*
-  Image Transform Library (libVimbaImageTransform.so)   1.6.0
-
-Tools
------
-  Vimba Viewer (VimbaViewer)                            2.5.0*
-  Vimba Class Generator (VimbaClassGenerator)           1.0.6
-  Vimba Firmware Updater (VimbaFirmwareUpdater.exe)     1.2.0*
-  Vimba Firmware Updater Console (FWUpdaterConsole.exe) 1.2.0*
-
-Third Party Libraries
----------------------
-  TinyXML (not shipped with Vimba)                      2.6.2
-  Qt                                                    4.8.4
-  Qwt                                                   6.1.3
-  libTIFF                                               4.0.7
-  OpenCV                                                3.0.0  
-
-* Changed in this release of Vimba
-
-
----------------------
-Hardware Requirements
----------------------
-Allied Vision GigE cameras require a built-in Gigabit Ethernet network interface
-or at least one Gigabit Ethernet network card.
-
-  Note for IP configuration:
-  By default, IP Configuration Mode is set to DHCP. 
-  You can also select LLA (link-local address) if you connect just one camera. 
-  If multiple cameras are connected at the same time, we recommend using 
-  DHCP or Persistent IP Address to enable discovery of all cameras.
-
-
-Furthermore, when using Allied Vision USB cameras, a built-in USB 3.0
-controller for PCI Express bus is required.
-
-
-------------------------
-Tested Operating Systems
-------------------------
-Vimba was tested with Ubuntu 20.04 LTS.
-
-------------
-Installation
-------------
-Allied Vision Vimba comes as a tarball. In order to set up Vimba, follow these steps:
-
-  - Uncompress the archive with the command tar -xf ./Vimba.tgz to a
-    directory you have writing privileges for like /opt. Under this directory
-    Vimba will be installed in its own folder. In the following, we will refer
-    to this path as [InstallDir].
-  - Go to [InstallDir]/VimbaGigETL and/or [InstallDir]/VimbaUSBTL and execute the shell
-    script Install.sh with super user privileges (e.g., sudo ./Install.sh). This
-    registers the GENICAM_GENTL32_PATH and/or the GENICAM_GENTL64_PATH environment
-    variable through a startup script in /etc/profile.d so that every GenICam GenTL
-    consumer (such as the examples that ship with Allied Vision Vimba) can access the
-    Allied Vision Gigabit Ethernet and USB Transport Layers. Please note that this is a
-    per-user setting. If transport layers are not found, read:
-    https://alliedvision.com/fileadmin/content/documents/products/software/software/Vimba/appnote/Vimba_installation_under_Linux.pdf
-  - Ubuntu 20.04 LTS: Install qt 4.8. For instructions, read the document mentioned above
-  - Reboot computer
-
-Vimba Viewer:
-Vimba Viewer can be found in, for example, [InstallDir]/Tools/Viewer/Bin/x86_64bit/.
-This program allows you to configure your Allied Vision cameras and capture images.
-Ubuntu 18.04 LTS: 
-  - To build Vimba Viewer, install the libcanberra-gtk-module
-    apt-get install libcanberra-gtk-module
-
-In order to change the IP configuration of a camera in a foreign subnet,
-VimbaViewer must be run with super user privileges
-(e.g., sudo -E ./VimbaViewer).
-Note that running it as root user instead of using sudo -E requires the
-GENICAM_GENTL32_PATH and / or GENICAM_GENTL64_PATH being set for the
-root user as well.
-
-Vimba includes many precompiled examples that can be found in
-Vimba/VimbaC/Examples/Bin and Vimba/VimbaCPP/Examples/Bin.
-If you want to compile these examples yourself, please refer to the Vimba Manual
-for instructions and required packages.
-
-For uninstalling Vimba, remove the startup scripts by running the shell scripts
-Uninstall.sh as super user. This prevents any GenTL consumer from loading the
-Allied Vision Gigabit Ethernet and USB Transport Layers. Then remove the
-installation directory.
-
-
-------------
-Known Issues
-------------
-  - When experiencing trouble with image acquisition, try to increase the priority
-    of your application with "sudo -E nice -n -20 <command>".
-
-GigE Transport Layer:
-  - A change of the available camera access modes cannot be reported for cameras
-    in different subnets or with malconfigured IP addresses. These cameras can
-    be accessed in configuration mode from different hosts simultaneously.
-
-GigE cameras:
-  - The frame rate may drop to 0 approximately every 60s, so that the expected frame rate
-    is not reached during this time interval.
-
-Tranport layers not found (Error -16):
-  - Please follow the instructions in this document:
-    https://alliedvision.com/fileadmin/content/documents/products/software/software/Vimba/appnote/Vimba_installation_under_Linux.pdf
-
-Camera detection:
-  - If multiple IP addresses are configured on one physical ethernet adapter, 
-    then Vimba sends GVCP discovery requests only to the last added IP address.
-    Therefore, the camera is detected only if its IP address was added last.
-
-Vimba Viewer:
-  - If a GigE camera was opened and then closed with Vimba Viewer, 
-    it is displayed as locked and Vimba Viewer does not open it again.
-    Workaround: Close and open Vimba Viewer.
-  - When multiple opened GigE cameras are disconnected at the same time
-    while no other camera stays connected to the very same NIC,
-    the Vimba Viewer's camera windows stay open.
-
-Vimba Documentation:
-   - Some apps and browsers currently don't support relative links from one
-     document to another document. We have successfully tested relative links
-     with Adobe Acrobat. 
-
----------------------------
-Changes and release history
----------------------------
-
-Changes in Vimba 5.1.0:
------------------------
-VimbaC
-  - New feature: Support for Alloc And Announce frame allocation mode
-  - Feature endianess related fixes (corresponding to GigE TL)
-
-VimbaCPP
-  - New feature: Supports Alloc And Announce frame allocation mode
-
-VimbaPython
-  - New feature: Supports Alloc And Announce frame allocation mode
-
-Vimba Viewer
-  - Supports Alloc And Announce frame allocation mode
-  - Chinese localization
-  - Supports changes of GigE TL and VimbaC 
-  - Fixed: IP labels not updated after changing the IP via GevCameraForceAddressSend
-  - Fixed: Auto ROI tab always resets ROI at startup
-
-Firmware Updater
-  - Supports Git hash representation
-
-Firmware Updater Console
-  - Supports Git hash representation
-
-GigETL
-  - Changed behaviour of endianess handling (values must match host endianness in little-endian), 
-    for better compatibility with third-party software. 
-    Affected features that now have a changed byte order:
-      - Config Mode
-      - IP-related features including MulticastIPAddress
-      - Action Commands
-  - New feature DeviceUpdateTimeout (only applicable if GigE discovery is switched to Broadcast)
-  - New GVSPMaxLookBack default value (0 instead of 1) for improved packet resend handling
-  - Fixed: High memory usage during performance bottleneck (Nonpaged pool growing with multiple GigE cameras)
-  - Fixed: Action commands caused an error message in the console log
-  - Fixed: Multicast IP address range, better compatibility with third-party software
-
-USB TL
--  Fixed: Reset cameras streaming state when opened (Endpoint Halt)
--  New: Zero-Copy for Linux/libusb for better performance
--  Updated 3rd-party libraries
-
-
-Changes in Vimba 5.0.0:
------------------------
-
-GigETL
-  - New feature: GVSPHostReceiveBufferSize (SO_RCVBUF,  usable with 
-    the socket driver only) replaces GVSPHostReceiveBuffers (which is still 
-    usable in existing applications).
-  - Fixed for 5 GigE cameras: 
-      - Fixed limitations of certain GVSPPacketSize values
-
-VimbaC
-  - Fixed: Callbacks after stopping image acquisition caused exceptions
-    in the Python API.
-  - Fixed: ListAncillaryDataFeatures example (error "Could not queue frame")
-
-Vimba Firmware Updater 
-  - Prepared for CSI-2 support (supported ARM boards only)
-
-Vimba Firmware Updater Console
-  - Prepared for CSI-2 support (supported ARM boards only)
-
-Vimba Viewer
-  - Prepared for CSI-2 support (supported ARM boards only)
-
-
-Changes in Vimba 4.3.0:
------------------------
-
-GigETL
-  - Prepared for use with 5 GigE Vision cameras
-
-VimbaC
-  - Prepared for use with 5 GigE Vision cameras
-
-VimbaCPP
-  - Preparations for use with 5 GigE Vision cameras in the underlying VimbaC API
-
-Vimba Python
-  - Updated for use with new VimbaC version
-  - Fixed: read_memory now returns all 0_bytes
-
-Vimba Firmware Updater 
-  - Preparations for use with 5 GigE Vision cameras
-
-Vimba Firmware Updater Console
-  - Preparations for use with 5 GigE Vision cameras
-
-Vimba Viewer
-  - Preparations for use with 5 GigE Vision cameras
-
-
-Changes in Vimba 4.2.0:
------------------------
-
-Vimba C
-  - Added Standard-compliant ForceIP features instead of Allied Vision custom features,
-    Updated VimbaC ForceIP example to use the standard-compliant ForceIP features
-
-Vimba Python
-  - Redirected the used Vimba version to the one delivered in this package
-  - Install.sh suggests compatible Python interpreter versions only
-  - Install.sh and Uninstall.sh: Added support of virtual environments, Added debug flag (-d) 
-
-GigETL
-  - Standard-compliant ForceIP features instead of Allied Vision custom features (see also Vimba C)
-  - Prepared for use with extended IDs
-
-USBTL
-  - Increased default MaxTransferSize value for better performance with current Linux versions
-  - Improved camera detection on Linux systems (plugin event handling)
-
-Vimba Viewer
-  - Added a dialog for enforcing IP settings to a GigE Vision camera
-  - Prepared for CSI-2 support (supported ARM boards only)
-
-
-Changes in Vimba 4.1.0:
------------------------
-
-USBTL
-  - Solved conflicts between customers' boost version and the internally used version
-  - Other internal bug fixes
-
-
-Changes in Vimba 4.0.0:
------------------------
-
-Vimba C
-  - Bug fixes
-
-Vimba C++
-  - Bug fixes
-
-Vimba Python
-  - New API
-
-GigETL
-  - Improved resend handling 
-  - By default, packet resends are enabled
-  - Other bug fixes
-
-USBTL
-  - Improved visibility of USB camera status
-  - Other bug fixes
-
-Vimba GigE Filter Driver
-  - Bug fixes
-
-Vimba Viewer
-  - Bug fixes
-
-
-Changes in Vimba 3.1.0:
------------------------
-Vimba C
-  - Updated for use with GenTL 1.5
-
-Vimba C++
-  - Updated for use with GenTL 1.5
-
-GigETL
-  - GenTL 1.5 support
-
-USBTL
-  - GenTL 1.5 support
-
-Vimba Viewer
-  - Bug fixes
-
-
-Changes in Vimba 3.0:
------------------------
-Vimba C
-  - Bug fixes
-
-Vimba C++
-  - Bug fixes
-
-Vimba Viewer
-  - Supports Alvium USB cameras
-  - Fixed handling of float increments
-  - Fixed occasional crashes with high frame rates
-  - Several minor bug fixes
-
-GigETL
-  - Fixed: GVSPPacketSize now updates as expected
-
-USBTL
-  - Bug fixes
-
-Changes in Vimba 2.1.3:
------------------------
-Vimba C
-  - Added ActionCommands programming example
-  - Vimba C Manual: Updated documentation of Action Commands
-  - Prepared the API for use with GenTL 1.5
-  - Bug fixes
-
-Vimba C++
-  - Added ActionCommands programming example
-  - Vimba CPP Manual: Updated documentation of Action Commands
-  - Prepared the underlying C API for use with GenTL 1.5
-  - Vimba CPP Manual: Added chapter Asynchronous image acquisition - overview
-  - Bug fixes
-
-Vimba Viewer
-  - New plugin architecture
-
-Vima Setup
-   - Removed Vimba Class Generator desktop symbol
-
-Vimba Manual
-   - Integrated Vimba Features Manual
-
-Changes in Vimba 2.1:
----------------------
-Vimba C
-  - Added functionality for Action Commands
-  - Bug fixes
-
-Vimba C++
-  - Added functionality for Action Commands
-  - Bug fixes
-
-Vimba Image Transform Library
-  - Support for conversion from 10-bit raw source formats to 16-bit color target formats.
-  - Support for conversion from 12-bit raw source formats to 16-bit color target formats.
-  - Support for conversion from 14-bit raw source formats to 16-bit color target formats.
-  - Support for conversion from 10-bit mono source formats to 16-bit mono target formats.
-  - Support for conversion from 12-bit mono source formats to 16-bit mono target formats.
-  - Support for conversion from 14-bit mono source formats to 16-bit mono target formats.
-
-Vimba Viewer
-  - Allows now saving of 12-bit and 16-bit images (12-bit images are saved in 16-bit containers).
-  - Added functionality for Action Commands.
-  - Camera list shows the IP address of each device.
-  - Bug fixes
-
-GigE Transport Layer
-  - The parameter BUFFER_INFO_DELIVERED_IMAGEHEIGHT is filled correctly.
-  - Added functionality for Action Commands.
-  - Bug fixes
-
-Changes in Vimba 2.0:
----------------------
-Vimba Setup
-  - Added Vimba Viewer Guide document
-  - Improved documents, new layout
-
-Vimba C
-  - Added functionality of loading and saving camera settings from / to XML
-  - Bug fixes
-
-Vimba C++
-  - Added functionality of loading and saving camera settings from / to XML
-  - Bug fixes
-
-Vimba Image Transform Library
-  - Support for conversion from BayerXX10,12 formats to 2 byte output formats (RGB[A], BGR[A])
-  - Added interface functions VmbSetImageInfoFromInputParameters and VmbSetImageInfoFromInputImage
-
-Vimba Viewer
-  - Enabled load / save settings functionality
-  - Added tabsheet widgets for Brightness, ROI, Autofunction ROI, Trigger IO, Color
-  - Bug fixes
-
-USB Transport Layer
-  - Minor bug fixes
-
-GigE Transport Layer
-  - Reworked and improved filter driver
-
-Vimba Class Generator
-  - Changes for Camera Link support (affects Windows only)
-
-Changes in Vimba 1.4.1:
------------------------
-Package for ARMv7
-  - Support of USB Transport Layer
-
-Package for other Linux systems
-  - Support of USB Transport Layer
-  - Improved documentation
-
-Vimba C
-  - Extended camera support (e.g. float increments)
-  - Stability improvements
-  - Improved some examples
-  - Bug fixes
-
-Vimba C++
-  - Extended camera support (e.g. float increments, needs Vimba C 1.4)
-  - Improved error handling
-  - Improved some examples
-  - Added and improved examples
-  - Bug fixes
-
-Vimba Image Transform Library
-  - Added support for PFNC 10p and 12p formats
-  - Improved the documentation
-
-GigE Transport Layer
-  - Improved stability on high traffic networks
-  - Bug fixes for multi-camera usage and incomplete cleanup
-  - Fixed range of GevHeartbeatInterval and GevHeartbeatTimeout
-
-Vimba Viewer
-  - Added open camera by ID
-  - Added endianness switch in direct register dialog
-  - Many bug fixes
-
-Vimba Class Generator
-  - Small improvements
-
-Changes in Vimba 1.3.0:
------------------------
-Package for ARMv7 (new)
-  - Support of Vimba C API
-  - Support of Vimba C++ API
-  - Support of GigE Transport Layer
-
-Package for other Linux systems
-  - Added a Vimba Tour document and a Vimba Quickstart Guide
-  - Improved the other documents
-  - Added examples for Vimba C and C++
-  - Added an OpenMP version of the Vimba Image Transform Library
-
-Vimba C 1.3.0
-  - Fixed feature access for ancillary data
-  - Made device discovery blocking
-  - Added system feature GeVDiscoveryAllDuration for adjustable waiting time
-  - Fixed issues with mixed feature names
-  - Bug-fixes for improving stability
-
-Vimba C++ 1.3.0
-  - Fixed feature access for ancillary data
-  - Changes caused by bug fixes in Vimba C
-
-Vimba Image Transform Library 1.2.0
-  - Allowed more input for VmbSetImageInfoFromString
-  - Corrected return codes
-  - Removed transformations to Mono10/12/14 and big-endian data
-
-Vimba Viewer 1.1.3
-  - Improved handling for GigE camera list changes
-  - Fixed issues around saving images
-  - GUI usage improvements
-
-GigE Transport Layer 1.3.1
-  - Fixed GenTL compliance: Changed the Device ID from the serial number
-    to a MAC-based ID. This changes the way all APIs (C, C++ and .Net)
-    identify the cameras
-  - Added a document for GigE camera features
-  - Changed the supported GenTL version to 1.3 (e.g. new feature categories
-    BufferHandlingMode and StreamInformation)
-  - Separate features for heartbeat timeout and heartbeat interval
-  - Adjustable device discovery waiting time
-  - Fixed issues with similar serial numbers
-  - Fixed issues with many network interfaces
-
-Vimba Class Generator
-  - Minor changes to appearance and documentation
-
-Changes in Vimba 1.2.0:
------------------------
-Vimba C 1.2.0
-  - Version 1.2.0 is only compatible to AVT GigE TL Version 1.2.0 onwards
-  - Name independent search for AVT transport layers
-  - Made EnumEntries' "pIsImplemented" condition equivalent to "pIsAvailable"
-    to mimic the behavior of GenICam reference implementation
-
-Vimba C++ 1.2.0
-  - Fix for opening camera by IP address
-
-Vimba .NET 1.2.0
-  - Fix for 64bit version attempting to load 32bit transport layers
-  - Fix for opening camera by IP address
-
-Vimba Viewer 1.1.1
-  - SFNC Features directly beneath the root category get listed
-  - Many new pixel formats available for histogram support
-
-GigE Transport Layer 1.2.0
-  - Improved performance in case of many events
-  - Restriction to eight cameras removed
-  - Corrected Heartbeat feature
-  - Fixed support for small packets
-
-  
-----------------------------------------
-Allied Vision Technical Support
-----------------------------------------
-Contact us:
-https://www.alliedvision.com/contact
diff --git a/Documentation/Vimba Manual.pdf b/Documentation/Vimba Manual.pdf
deleted file mode 100644
index c48894715da6b60472fc2a1e9b1f3f69a1df7ce2..0000000000000000000000000000000000000000
Binary files a/Documentation/Vimba Manual.pdf and /dev/null differ
diff --git a/Documentation/Vimba Quickstart Guide.pdf b/Documentation/Vimba Quickstart Guide.pdf
deleted file mode 100644
index b1846b70f75f436519c9ef49780d13b03d258b92..0000000000000000000000000000000000000000
Binary files a/Documentation/Vimba Quickstart Guide.pdf and /dev/null differ
diff --git a/Documentation/Vimba Tour.pdf b/Documentation/Vimba Tour.pdf
deleted file mode 100644
index 321d6a341a1150eb8f0c798019469f505e2d6c37..0000000000000000000000000000000000000000
Binary files a/Documentation/Vimba Tour.pdf and /dev/null differ
diff --git a/Documentation/Vimba Viewer Guide.pdf b/Documentation/Vimba Viewer Guide.pdf
deleted file mode 100644
index 0984cc4a8ff983e4d269136d30c895e1baa20597..0000000000000000000000000000000000000000
Binary files a/Documentation/Vimba Viewer Guide.pdf and /dev/null differ
diff --git a/Documentation/open-source-licenses.txt b/Documentation/open-source-licenses.txt
deleted file mode 100644
index 45ebaab0dde8ea0d51118c9c08d8218b2e8e7754..0000000000000000000000000000000000000000
--- a/Documentation/open-source-licenses.txt
+++ /dev/null
@@ -1,1681 +0,0 @@
-This product contains software developed by the boost project.
-
-http://www.boost.org/LICENSE_1_0.txt
-
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the Qt project.
-
-GNU Lesser General Public License (LGPL)
-
-The Qt GUI Toolkit is Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-Contact: Nokia Corporation (qt-info@nokia.com)
-
-Qt is available under the LGPL.
-
-
-                   GNU LESSER GENERAL PUBLIC LICENSE
-                        Version 2.1, February 1999
-
-  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-  Everyone is permitted to copy and distribute verbatim copies
-  of this license document, but changing it is not allowed.
-
- [This is the first released version of the Lesser GPL.  It also counts
-  as the successor of the GNU Library Public License, version 2, hence
-  the version number 2.1.]
-
-                             Preamble
-
-   The licenses for most software are designed to take away your
- freedom to share and change it.  By contrast, the GNU General Public
- Licenses are intended to guarantee your freedom to share and change
- free software--to make sure the software is free for all its users.
-
-   This license, the Lesser General Public License, applies to some
- specially designated software packages--typically libraries--of the
- Free Software Foundation and other authors who decide to use it.  You
- can use it too, but we suggest you first think carefully about whether
- this license or the ordinary General Public License is the better
- strategy to use in any particular case, based on the explanations below.
-
-   When we speak of free software, we are referring to freedom of use,
- not price.  Our General Public Licenses are designed to make sure that
- you have the freedom to distribute copies of free software (and charge
- for this service if you wish); that you receive source code or can get
- it if you want it; that you can change the software and use pieces of
- it in new free programs; and that you are informed that you can do
- these things.
-
-   To protect your rights, we need to make restrictions that forbid
- distributors to deny you these rights or to ask you to surrender these
- rights.  These restrictions translate to certain responsibilities for
- you if you distribute copies of the library or if you modify it.
-
-   For example, if you distribute copies of the library, whether gratis
- or for a fee, you must give the recipients all the rights that we gave
- you.  You must make sure that they, too, receive or can get the source
- code.  If you link other code with the library, you must provide
- complete object files to the recipients, so that they can relink them
- with the library after making changes to the library and recompiling
- it.  And you must show them these terms so they know their rights.
-
-   We protect your rights with a two-step method: (1) we copyright the
- library, and (2) we offer you this license, which gives you legal
- permission to copy, distribute and/or modify the library.
-
-   To protect each distributor, we want to make it very clear that
- there is no warranty for the free library.  Also, if the library is
- modified by someone else and passed on, the recipients should know
- that what they have is not the original version, so that the original
- author's reputation will not be affected by problems that might be
- introduced by others.
- 
-   Finally, software patents pose a constant threat to the existence of
- any free program.  We wish to make sure that a company cannot
- effectively restrict the users of a free program by obtaining a
- restrictive license from a patent holder.  Therefore, we insist that
- any patent license obtained for a version of the library must be
- consistent with the full freedom of use specified in this license.
-
-   Most GNU software, including some libraries, is covered by the
- ordinary GNU General Public License.  This license, the GNU Lesser
- General Public License, applies to certain designated libraries, and
- is quite different from the ordinary General Public License.  We use
- this license for certain libraries in order to permit linking those
- libraries into non-free programs.
-
-   When a program is linked with a library, whether statically or using
- a shared library, the combination of the two is legally speaking a
- combined work, a derivative of the original library.  The ordinary
- General Public License therefore permits such linking only if the
- entire combination fits its criteria of freedom.  The Lesser General
- Public License permits more lax criteria for linking other code with
- the library.
-
-   We call this license the "Lesser" General Public License because it
- does Less to protect the user's freedom than the ordinary General
- Public License.  It also provides other free software developers Less
- of an advantage over competing non-free programs.  These disadvantages
- are the reason we use the ordinary General Public License for many
- libraries.  However, the Lesser license provides advantages in certain
- special circumstances.
-
-   For example, on rare occasions, there may be a special need to
- encourage the widest possible use of a certain library, so that it becomes
- a de-facto standard.  To achieve this, non-free programs must be
- allowed to use the library.  A more frequent case is that a free
- library does the same job as widely used non-free libraries.  In this
- case, there is little to gain by limiting the free library to free
- software only, so we use the Lesser General Public License.
-
-   In other cases, permission to use a particular library in non-free
- programs enables a greater number of people to use a large body of
- free software.  For example, permission to use the GNU C Library in
- non-free programs enables many more people to use the whole GNU
- operating system, as well as its variant, the GNU/Linux operating
- system.
-
-   Although the Lesser General Public License is Less protective of the
- users' freedom, it does ensure that the user of a program that is
- linked with the Library has the freedom and the wherewithal to run
- that program using a modified version of the Library.
-
-   The precise terms and conditions for copying, distribution and
- modification follow.  Pay close attention to the difference between a
- "work based on the library" and a "work that uses the library".  The
- former contains code derived from the library, whereas the latter must
- be combined with the library in order to run.
- 
-                   GNU LESSER GENERAL PUBLIC LICENSE
-    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-   0. This License Agreement applies to any software library or other
- program which contains a notice placed by the copyright holder or
- other authorized party saying it may be distributed under the terms of
- this Lesser General Public License (also called "this License").
- Each licensee is addressed as "you".
-
-   A "library" means a collection of software functions and/or data
- prepared so as to be conveniently linked with application programs
- (which use some of those functions and data) to form executables.
-
-   The "Library", below, refers to any such software library or work
- which has been distributed under these terms.  A "work based on the
- Library" means either the Library or any derivative work under
- copyright law: that is to say, a work containing the Library or a
- portion of it, either verbatim or with modifications and/or translated
- straightforwardly into another language.  (Hereinafter, translation is
- included without limitation in the term "modification".)
-
-   "Source code" for a work means the preferred form of the work for
- making modifications to it.  For a library, complete source code means
- all the source code for all modules it contains, plus any associated
- interface definition files, plus the scripts used to control compilation
- and installation of the library.
-
-   Activities other than copying, distribution and modification are not
- covered by this License; they are outside its scope.  The act of
- running a program using the Library is not restricted, and output from
- such a program is covered only if its contents constitute a work based
- on the Library (independent of the use of the Library in a tool for
- writing it).  Whether that is true depends on what the Library does
- and what the program that uses the Library does.
-
-   1. You may copy and distribute verbatim copies of the Library's
- complete source code as you receive it, in any medium, provided that
- you conspicuously and appropriately publish on each copy an
- appropriate copyright notice and disclaimer of warranty; keep intact
- all the notices that refer to this License and to the absence of any
- warranty; and distribute a copy of this License along with the
- Library.
-
-   You may charge a fee for the physical act of transferring a copy,
- and you may at your option offer warranty protection in exchange for a
- fee.
- 
-   2. You may modify your copy or copies of the Library or any portion
- of it, thus forming a work based on the Library, and copy and
- distribute such modifications or work under the terms of Section 1
- above, provided that you also meet all of these conditions:
-
-     a) The modified work must itself be a software library.
-
-     b) You must cause the files modified to carry prominent notices
-     stating that you changed the files and the date of any change.
-
-     c) You must cause the whole of the work to be licensed at no
-     charge to all third parties under the terms of this License.
-
-     d) If a facility in the modified Library refers to a function or a
-     table of data to be supplied by an application program that uses
-     the facility, other than as an argument passed when the facility
-     is invoked, then you must make a good faith effort to ensure that,
-     in the event an application does not supply such function or
-     table, the facility still operates, and performs whatever part of
-     its purpose remains meaningful.
-
-     (For example, a function in a library to compute square roots has
-     a purpose that is entirely well-defined independent of the
-     application.  Therefore, Subsection 2d requires that any
-     application-supplied function or table used by this function must
-     be optional: if the application does not supply it, the square
-     root function must still compute square roots.)
-
- These requirements apply to the modified work as a whole.  If
- identifiable sections of that work are not derived from the Library,
- and can be reasonably considered independent and separate works in
- themselves, then this License, and its terms, do not apply to those
- sections when you distribute them as separate works.  But when you
- distribute the same sections as part of a whole which is a work based
- on the Library, the distribution of the whole must be on the terms of
- this License, whose permissions for other licensees extend to the
- entire whole, and thus to each and every part regardless of who wrote
- it.
-
- Thus, it is not the intent of this section to claim rights or contest
- your rights to work written entirely by you; rather, the intent is to
- exercise the right to control the distribution of derivative or
- collective works based on the Library.
-
- In addition, mere aggregation of another work not based on the Library
- with the Library (or with a work based on the Library) on a volume of
- a storage or distribution medium does not bring the other work under
- the scope of this License.
-
-   3. You may opt to apply the terms of the ordinary GNU General Public
- License instead of this License to a given copy of the Library.  To do
- this, you must alter all the notices that refer to this License, so
- that they refer to the ordinary GNU General Public License, version 2,
- instead of to this License.  (If a newer version than version 2 of the
- ordinary GNU General Public License has appeared, then you can specify
- that version instead if you wish.)  Do not make any other change in
- these notices.
- 
-   Once this change is made in a given copy, it is irreversible for
- that copy, so the ordinary GNU General Public License applies to all
- subsequent copies and derivative works made from that copy.
-
-   This option is useful when you wish to copy part of the code of
- the Library into a program that is not a library.
-
-   4. You may copy and distribute the Library (or a portion or
- derivative of it, under Section 2) in object code or executable form
- under the terms of Sections 1 and 2 above provided that you accompany
- it with the complete corresponding machine-readable source code, which
- must be distributed under the terms of Sections 1 and 2 above on a
- medium customarily used for software interchange.
-
-   If distribution of object code is made by offering access to copy
- from a designated place, then offering equivalent access to copy the
- source code from the same place satisfies the requirement to
- distribute the source code, even though third parties are not
- compelled to copy the source along with the object code.
-
-   5. A program that contains no derivative of any portion of the
- Library, but is designed to work with the Library by being compiled or
- linked with it, is called a "work that uses the Library".  Such a
- work, in isolation, is not a derivative work of the Library, and
- therefore falls outside the scope of this License.
-
-   However, linking a "work that uses the Library" with the Library
- creates an executable that is a derivative of the Library (because it
- contains portions of the Library), rather than a "work that uses the
- library".  The executable is therefore covered by this License.
- Section 6 states terms for distribution of such executables.
-
-   When a "work that uses the Library" uses material from a header file
- that is part of the Library, the object code for the work may be a
- derivative work of the Library even though the source code is not.
- Whether this is true is especially significant if the work can be
- linked without the Library, or if the work is itself a library.  The
- threshold for this to be true is not precisely defined by law.
-
-   If such an object file uses only numerical parameters, data
- structure layouts and accessors, and small macros and small inline
- functions (ten lines or less in length), then the use of the object
- file is unrestricted, regardless of whether it is legally a derivative
- work.  (Executables containing this object code plus portions of the
- Library will still fall under Section 6.)
-
-   Otherwise, if the work is a derivative of the Library, you may
- distribute the object code for the work under the terms of Section 6.
- Any executables containing that work also fall under Section 6,
- whether or not they are linked directly with the Library itself.
- 
-   6. As an exception to the Sections above, you may also combine or
- link a "work that uses the Library" with the Library to produce a
- work containing portions of the Library, and distribute that work
- under terms of your choice, provided that the terms permit
- modification of the work for the customer's own use and reverse
- engineering for debugging such modifications.
-
-   You must give prominent notice with each copy of the work that the
- Library is used in it and that the Library and its use are covered by
- this License.  You must supply a copy of this License.  If the work
- during execution displays copyright notices, you must include the
- copyright notice for the Library among them, as well as a reference
- directing the user to the copy of this License.  Also, you must do one
- of these things:
-
-     a) Accompany the work with the complete corresponding
-     machine-readable source code for the Library including whatever
-     changes were used in the work (which must be distributed under
-     Sections 1 and 2 above); and, if the work is an executable linked
-     with the Library, with the complete machine-readable "work that
-     uses the Library", as object code and/or source code, so that the
-     user can modify the Library and then relink to produce a modified
-     executable containing the modified Library.  (It is understood
-     that the user who changes the contents of definitions files in the
-     Library will not necessarily be able to recompile the application
-     to use the modified definitions.)
-
-     b) Use a suitable shared library mechanism for linking with the
-     Library.  A suitable mechanism is one that (1) uses at run time a
-     copy of the library already present on the user's computer system,
-     rather than copying library functions into the executable, and (2)
-     will operate properly with a modified version of the library, if
-     the user installs one, as long as the modified version is
-     interface-compatible with the version that the work was made with.
-
-     c) Accompany the work with a written offer, valid for at
-     least three years, to give the same user the materials
-     specified in Subsection 6a, above, for a charge no more
-     than the cost of performing this distribution.
-
-     d) If distribution of the work is made by offering access to copy
-     from a designated place, offer equivalent access to copy the above
-     specified materials from the same place.
-
-     e) Verify that the user has already received a copy of these
-     materials or that you have already sent this user a copy.
-
-   For an executable, the required form of the "work that uses the
- Library" must include any data and utility programs needed for
- reproducing the executable from it.  However, as a special exception,
- the materials to be distributed need not include anything that is
- normally distributed (in either source or binary form) with the major
- components (compiler, kernel, and so on) of the operating system on
- which the executable runs, unless that component itself accompanies
- the executable.
-
-   It may happen that this requirement contradicts the license
- restrictions of other proprietary libraries that do not normally
- accompany the operating system.  Such a contradiction means you cannot
- use both them and the Library together in an executable that you
- distribute.
- 
-   7. You may place library facilities that are a work based on the
- Library side-by-side in a single library together with other library
- facilities not covered by this License, and distribute such a combined
- library, provided that the separate distribution of the work based on
- the Library and of the other library facilities is otherwise
- permitted, and provided that you do these two things:
-
-     a) Accompany the combined library with a copy of the same work
-     based on the Library, uncombined with any other library
-     facilities.  This must be distributed under the terms of the
-     Sections above.
-
-     b) Give prominent notice with the combined library of the fact
-     that part of it is a work based on the Library, and explaining
-     where to find the accompanying uncombined form of the same work.
-
-   8. You may not copy, modify, sublicense, link with, or distribute
- the Library except as expressly provided under this License.  Any
- attempt otherwise to copy, modify, sublicense, link with, or
- distribute the Library is void, and will automatically terminate your
- rights under this License.  However, parties who have received copies,
- or rights, from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
-   9. You are not required to accept this License, since you have not
- signed it.  However, nothing else grants you permission to modify or
- distribute the Library or its derivative works.  These actions are
- prohibited by law if you do not accept this License.  Therefore, by
- modifying or distributing the Library (or any work based on the
- Library), you indicate your acceptance of this License to do so, and
- all its terms and conditions for copying, distributing or modifying
- the Library or works based on it.
-
-   10. Each time you redistribute the Library (or any work based on the
- Library), the recipient automatically receives a license from the
- original licensor to copy, distribute, link with or modify the Library
- subject to these terms and conditions.  You may not impose any further
- restrictions on the recipients' exercise of the rights granted herein.
- You are not responsible for enforcing compliance by third parties with
- this License.
- 
-   11. If, as a consequence of a court judgment or allegation of patent
- infringement or for any other reason (not limited to patent issues),
- conditions are imposed on you (whether by court order, agreement or
- otherwise) that contradict the conditions of this License, they do not
- excuse you from the conditions of this License.  If you cannot
- distribute so as to satisfy simultaneously your obligations under this
- License and any other pertinent obligations, then as a consequence you
- may not distribute the Library at all.  For example, if a patent
- license would not permit royalty-free redistribution of the Library by
- all those who receive copies directly or indirectly through you, then
- the only way you could satisfy both it and this License would be to
- refrain entirely from distribution of the Library.
-
- If any portion of this section is held invalid or unenforceable under any
- particular circumstance, the balance of the section is intended to apply,
- and the section as a whole is intended to apply in other circumstances.
-
- It is not the purpose of this section to induce you to infringe any
- patents or other property right claims or to contest validity of any
- such claims; this section has the sole purpose of protecting the
- integrity of the free software distribution system which is
- implemented by public license practices.  Many people have made
- generous contributions to the wide range of software distributed
- through that system in reliance on consistent application of that
- system; it is up to the author/donor to decide if he or she is willing
- to distribute software through any other system and a licensee cannot
- impose that choice.
-
- This section is intended to make thoroughly clear what is believed to
- be a consequence of the rest of this License.
-
-   12. If the distribution and/or use of the Library is restricted in
- certain countries either by patents or by copyrighted interfaces, the
- original copyright holder who places the Library under this License may add
- an explicit geographical distribution limitation excluding those countries,
- so that distribution is permitted only in or among countries not thus
- excluded.  In such case, this License incorporates the limitation as if
- written in the body of this License.
-
-   13. The Free Software Foundation may publish revised and/or new
- versions of the Lesser General Public License from time to time.
- Such new versions will be similar in spirit to the present version,
- but may differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number.  If the Library
- specifies a version number of this License which applies to it and
- "any later version", you have the option of following the terms and
- conditions either of that version or of any later version published by
- the Free Software Foundation.  If the Library does not specify a
- license version number, you may choose any version ever published by
- the Free Software Foundation.
- 
-   14. If you wish to incorporate parts of the Library into other free
- programs whose distribution conditions are incompatible with these,
- write to the author to ask for permission.  For software which is
- copyrighted by the Free Software Foundation, write to the Free
- Software Foundation; we sometimes make exceptions for this.  Our
- decision will be guided by the two goals of preserving the free status
- of all derivatives of our free software and of promoting the sharing
- and reuse of software generally.
-
-                             NO WARRANTY
-
-   15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
- WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
- EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
- OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
- LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
- THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-   16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
- AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
- FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
- LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
- RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
- FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
- SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the Qt project.
-
-The Qt GUI Toolkit is Copyright (C) 2015 The Qt Company Ltd.
-Contact: http://www.qt.io/licensing/
-
-Qt is available under the LGPL.
-
-http://doc.qt.io/qt-4.8/licensing.html
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-0the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the CrptoPP project.
-
-https://www.cryptopp.com/License.txt
-
-
-Compilation Copyright (c) 1995-2013 by Wei Dai.  All rights reserved.
-This copyright applies only to this software distribution package 
-as a compilation, and does not imply a copyright on any particular 
-file in the package.
-
-All individual files in this compilation are placed in the public domain by
-Wei Dai and other contributors.
-
-I would like to thank the following authors for placing their works into
-the public domain:
-
-Joan Daemen - 3way.cpp
-Leonard Janke - cast.cpp, seal.cpp
-Steve Reid - cast.cpp
-Phil Karn - des.cpp
-Andrew M. Kuchling - md2.cpp, md4.cpp
-Colin Plumb - md5.cpp
-Seal Woods - rc6.cpp
-Chris Morgan - rijndael.cpp
-Paulo Baretto - rijndael.cpp, skipjack.cpp, square.cpp
-Richard De Moliner - safer.cpp
-Matthew Skala - twofish.cpp
-Kevin Springle - camellia.cpp, shacal2.cpp, ttmac.cpp, whrlpool.cpp, ripemd.cpp
-Ronny Van Keer - sha3.cpp
-
-The Crypto++ Library (as a compilation) is currently licensed under the Boost
-Software License 1.0 (http://www.boost.org/users/license.html).
-
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the miniz project.
-
-https://github.com/richgel999/miniz/blob/2.2.0/LICENSE
-
-Copyright 2013-2014 RAD Game Tools and Valve Software
-Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC
-
-All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the TinyXML project.
-
-TinyXML is released under the zlib license:
-
-This software is provided 'as-is', without any express or implied warranty. In no event will the authors 
-be held liable for any damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose, including commercial applications, 
-and to alter it and redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-
-
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-
-
-3. This notice may not be removed or altered from any source distribution.
-
-
-TinyXML:
-
-http://www.grinninglizard.com/tinyxmldocs/index.html
-
-	
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the Uriparser project.
-
-http://uriparser.sourceforge.net/
-
-uriparser - RFC 3986 URI parsing library
-
-Copyright (C) 2007, Weijia Song <songweijia@gmail.com>
-Copyright (C) 2007, Sebastian Pipping <webmaster@hartwork.org>
-All rights reserved.
-
-Redistribution  and use in source and binary forms, with or without
-modification,  are permitted provided that the following conditions
-are met:
-
-    * Redistributions   of  source  code  must  retain  the   above
-      copyright  notice, this list of conditions and the  following
-      disclaimer.
-
-    * Redistributions  in  binary  form must  reproduce  the  above
-      copyright  notice, this list of conditions and the  following
-      disclaimer   in  the  documentation  and/or  other  materials
-      provided with the distribution.
-
-    * Neither  the name of the <ORGANIZATION> nor the names of  its
-      contributors  may  be  used to endorse  or  promote  products
-      derived  from  this software without specific  prior  written
-      permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS  IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT  NOT
-LIMITED  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND  FITNESS
-FOR  A  PARTICULAR  PURPOSE ARE DISCLAIMED. IN NO EVENT  SHALL  THE
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL,    SPECIAL,   EXEMPLARY,   OR   CONSEQUENTIAL   DAMAGES
-(INCLUDING,  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES;  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-STRICT  LIABILITY,  OR  TORT (INCLUDING  NEGLIGENCE  OR  OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-OF THE POSSIBILITY OF SUCH DAMAGE.
-
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the dotNetInstaller project.
-
-https://github.com/dblock/dotnetinstaller/blob/master/LICENSE
-
-MIT License (MIT)
-
-Copyright (c) 2009-2012 Davide Icardi, Daniel Doubrovkine and Contributors.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
-
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the puff project.
-
-https://github.com/madler/zlib/blob/master/contrib/puff/puff.h
-
-  Copyright (C) 2002-2013 Mark Adler, all rights reserved
-  version 2.3, 21 Jan 2013
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the author be held liable for any damages
-  arising from the use of this software.
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-  Mark Adler    madler@alumni.caltech.edu
-  
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the Qwt project.
-
-http://qwt.sourceforge.net/qwtlicense.html
-
-                             Qwt License
-                           Version 1.0, January 1, 2003
-The Qwt library and included programs are provided under the terms
-of the GNU LESSER GENERAL PUBLIC LICENSE (LGPL) with the following
-exceptions:
-    1. Widgets that are subclassed from Qwt widgets do not
-       constitute a derivative work.
-    2. Static linking of applications and widgets to the
-       Qwt library does not constitute a derivative work
-       and does not require the author to provide source
-       code for the application or widget, use the shared
-       Qwt libraries, or link their applications or
-       widgets against a user-supplied version of Qwt.
-       If you link the application or widget to a modified
-       version of Qwt, then the changes to Qwt must be 
-       provided under the terms of the LGPL in sections
-       1, 2, and 4.
-    3. You do not have to provide a copy of the Qwt license
-       with programs that are linked to the Qwt library, nor
-       do you have to identify the Qwt license in your
-       program or documentation as required by section 6
-       of the LGPL.
-       However, programs must still identify their use of Qwt.
-       The following example statement can be included in user
-       documentation to satisfy this requirement:
-           [program/widget] is based in part on the work of
-           the Qwt project (http://qwt.sf.net).
-----------------------------------------------------------------------
-          GNU LESSER GENERAL PUBLIC LICENSE
-               Version 2.1, February 1999
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-                Preamble
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-          GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-    a) The modified work must itself be a software library.
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-                NO WARRANTY
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the libTIFF project.
-
-http://www.libtiff.org/misc.html
-
-Copyright (c) 1988-1997 Sam Leffler
-Copyright (c) 1991-1997 Silicon Graphics, Inc.
-
-Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that (i) the above copyright notices and this permission notice appear in all copies of the software and related documentation, and (ii) the names of Sam Leffler and Silicon Graphics may not be used in any advertising or publicity relating to the software without the specific, prior written permission of Sam Leffler and Silicon Graphics.
-
-THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the Sourcegrid project.
-
-https://github.com/Azerothian/SourceGrid/blob/master/SourceGrid/SourceGrid.License.txt
-
-SourceGrid LICENSE (MIT style)
-
-Copyright (c) 2005 - 2012 http://sourcegrid.codeplex.com/, Davide Icardi, Darius Damalakas
-
-Permission is hereby granted, free of charge, to any person obtaining 
-a copy of this software and associated documentation files (the "Software"), 
-to deal in the Software without restriction, including without limitation 
-the rights to use, copy, modify, merge, publish, distribute, sublicense, 
-and/or sell copies of the Software, and to permit persons to whom the 
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included 
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
-DEALINGS IN THE SOFTWARE. 
-
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-
-This product contains software developed by the OpenCV project.
-
-http://opencv.org/license.html
-
-By downloading, copying, installing or using the software you agree to this license.
-If you do not agree to this license, do not download, install,
-copy or use the software.
-
-                          License Agreement
-               For Open Source Computer Vision Library
-                       (3-clause BSD License)
-
-Copyright (C) 2000-2015, Intel Corporation, all rights reserved.
-Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
-Copyright (C) 2009-2015, NVIDIA Corporation, all rights reserved.
-Copyright (C) 2010-2013, Advanced Micro Devices, Inc., all rights reserved.
-Copyright (C) 2015, OpenCV Foundation, all rights reserved.
-Copyright (C) 2015, Itseez Inc., all rights reserved.
-Third party copyrights are property of their respective owners.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-  * Redistributions of source code must retain the above copyright notice,
-    this list of conditions and the following disclaimer.
-
-  * Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
-
-  * Neither the names of the copyright holders nor the names of the contributors
-    may be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-This software is provided by the copyright holders and contributors "as is" and
-any express or implied warranties, including, but not limited to, the implied
-warranties of merchantability and fitness for a particular purpose are disclaimed.
-In no event shall copyright holders or contributors be liable for any direct,
-indirect, incidental, special, exemplary, or consequential damages
-(including, but not limited to, procurement of substitute goods or services;
-loss of use, data, or profits; or business interruption) however caused
-and on any theory of liability, whether in contract, strict liability,
-or tort (including negligence or otherwise) arising in any way out of
-the use of this software, even if advised of the possibility of such damage.
\ No newline at end of file
diff --git a/README b/README
index 6dd9ae162a36a355d1cc42d000f81a4d4143de76..1bd670ae052f942873f304468767e5ea395be4a8 100644
--- a/README
+++ b/README
@@ -1,9 +1,8 @@
 this is part of the CAMTRON Project. Codename: Software B
 
-Based of Vimba SDK from:
-  https://www.alliedvision.com/en/products/vimba-sdk/
+Based of VimbaX SDK from:
+  https://www.alliedvision.com/en/products/software/vimba-x-sdk/
 
 -> expanded on VimbaCPP/Example/AsyncOpenCVRecorder !
--> main software is in ./recorder!
 
 used to acquire images and store them as jpeg along with timestamps
diff --git a/Tools/FirmwareUpdater/Bin/x86_64bit/FWUpdaterConsole b/Tools/FirmwareUpdater/Bin/x86_64bit/FWUpdaterConsole
deleted file mode 100755
index 37032edf6d01600f41614d54851c347cdc98bcfd..0000000000000000000000000000000000000000
Binary files a/Tools/FirmwareUpdater/Bin/x86_64bit/FWUpdaterConsole and /dev/null differ
diff --git a/Tools/FirmwareUpdater/Bin/x86_64bit/VimbaFirmwareUpdater b/Tools/FirmwareUpdater/Bin/x86_64bit/VimbaFirmwareUpdater
deleted file mode 100755
index fdf70fb453a5fd89ad8d63f418c8d3f94b620748..0000000000000000000000000000000000000000
Binary files a/Tools/FirmwareUpdater/Bin/x86_64bit/VimbaFirmwareUpdater and /dev/null differ
diff --git a/Tools/FirmwareUpdater/Bin/x86_64bit/libQtCore.so.4 b/Tools/FirmwareUpdater/Bin/x86_64bit/libQtCore.so.4
deleted file mode 100755
index 0854b62fc1d480f75a46d9dffdeead41bd6a65c2..0000000000000000000000000000000000000000
Binary files a/Tools/FirmwareUpdater/Bin/x86_64bit/libQtCore.so.4 and /dev/null differ
diff --git a/Tools/FirmwareUpdater/Bin/x86_64bit/libQtGui.so.4 b/Tools/FirmwareUpdater/Bin/x86_64bit/libQtGui.so.4
deleted file mode 100755
index 1f0f386322811e4b6c2e682266b9f90cdb293f31..0000000000000000000000000000000000000000
Binary files a/Tools/FirmwareUpdater/Bin/x86_64bit/libQtGui.so.4 and /dev/null differ
diff --git a/Tools/FirmwareUpdater/Bin/x86_64bit/libVimbaC.so b/Tools/FirmwareUpdater/Bin/x86_64bit/libVimbaC.so
deleted file mode 100644
index 3fab382771c853665d84a4f7b9dd6811a9ebb2d0..0000000000000000000000000000000000000000
Binary files a/Tools/FirmwareUpdater/Bin/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/Tools/FirmwareUpdater/Bin/x86_64bit/libVimbaCPP.so b/Tools/FirmwareUpdater/Bin/x86_64bit/libVimbaCPP.so
deleted file mode 100644
index 2c1a31bb0b4360d94468331b72b78916cf6c2d1e..0000000000000000000000000000000000000000
Binary files a/Tools/FirmwareUpdater/Bin/x86_64bit/libVimbaCPP.so and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/VimbaViewer b/Tools/Viewer/Bin/x86_64bit/VimbaViewer
deleted file mode 100755
index 760d40f6a20600505f25e426945a8e03f094e0cc..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/VimbaViewer and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/VimbaViewer_zh.qm b/Tools/Viewer/Bin/x86_64bit/VimbaViewer_zh.qm
deleted file mode 100644
index 907283181d0cb65f75b61bceea48343d77a8121c..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/VimbaViewer_zh.qm and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/imageformats/libqtiff.so b/Tools/Viewer/Bin/x86_64bit/imageformats/libqtiff.so
deleted file mode 100755
index a70855deabb896d8b2ee0d7feb5241b3e718a534..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/imageformats/libqtiff.so and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/libQtCore.so.4 b/Tools/Viewer/Bin/x86_64bit/libQtCore.so.4
deleted file mode 100755
index 0854b62fc1d480f75a46d9dffdeead41bd6a65c2..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/libQtCore.so.4 and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/libQtGui.so.4 b/Tools/Viewer/Bin/x86_64bit/libQtGui.so.4
deleted file mode 100755
index 1f0f386322811e4b6c2e682266b9f90cdb293f31..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/libQtGui.so.4 and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/libQtSvg.so.4 b/Tools/Viewer/Bin/x86_64bit/libQtSvg.so.4
deleted file mode 100755
index d8e83e8123239dee19ecc27426cc07382156894d..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/libQtSvg.so.4 and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/libVimbaC.so b/Tools/Viewer/Bin/x86_64bit/libVimbaC.so
deleted file mode 100644
index 781383deb7c36a92813b8997376e622b6e3e5a96..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/libVimbaCPP.so b/Tools/Viewer/Bin/x86_64bit/libVimbaCPP.so
deleted file mode 100644
index 081afba051f4fc154481cec96cd4af633ca6b7ee..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/libVimbaCPP.so and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/libVimbaImageTransform.so b/Tools/Viewer/Bin/x86_64bit/libVimbaImageTransform.so
deleted file mode 100644
index b01c3977a73d785668f7a031b61125ab956e2ed1..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/libVimbaImageTransform.so and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/plugins/lib1TabPluginBrightness.so b/Tools/Viewer/Bin/x86_64bit/plugins/lib1TabPluginBrightness.so
deleted file mode 100644
index 9b6f296a5b7bde0322ce773389e3d89fa7015515..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/plugins/lib1TabPluginBrightness.so and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/plugins/lib2TabPluginAOI.so b/Tools/Viewer/Bin/x86_64bit/plugins/lib2TabPluginAOI.so
deleted file mode 100644
index 72ed23890e24545a1ad71f5515071277ee81b148..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/plugins/lib2TabPluginAOI.so and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/plugins/lib3TabPluginAutoROI.so b/Tools/Viewer/Bin/x86_64bit/plugins/lib3TabPluginAutoROI.so
deleted file mode 100644
index 2d177a5673bd0db7e804d5f365465bd919ff6562..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/plugins/lib3TabPluginAutoROI.so and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/plugins/lib4TabPluginTriggerIO.so b/Tools/Viewer/Bin/x86_64bit/plugins/lib4TabPluginTriggerIO.so
deleted file mode 100644
index da7e4cce824f44ed78bdc11bf5889fe767605483..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/plugins/lib4TabPluginTriggerIO.so and /dev/null differ
diff --git a/Tools/Viewer/Bin/x86_64bit/plugins/lib5TabPluginColor.so b/Tools/Viewer/Bin/x86_64bit/plugins/lib5TabPluginColor.so
deleted file mode 100644
index 8ede5f8083acc648d302e096f22373e37ab2ab71..0000000000000000000000000000000000000000
Binary files a/Tools/Viewer/Bin/x86_64bit/plugins/lib5TabPluginColor.so and /dev/null differ
diff --git a/Tools/VimbaClassGenerator/Bin/x86_64bit/Templates/CppTemplate.cpp b/Tools/VimbaClassGenerator/Bin/x86_64bit/Templates/CppTemplate.cpp
deleted file mode 100644
index 00bb47b499544d60f92c4aedfb20a80877d26146..0000000000000000000000000000000000000000
--- a/Tools/VimbaClassGenerator/Bin/x86_64bit/Templates/CppTemplate.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-/*=============================================================================
-This file was generated by the VimbaClassGenerator
-=============================================================================*/
-
-#include "### HEADER_FILE_NAME ###"
-
-### CLASS_NAME ###::### CLASS_NAME ### (
-    const char         *pCameraID,
-    const char         *pCameraName,
-    const char         *pCameraModel,
-    const char         *pCameraSerialNumber,
-    const char         *pInterfaceID,
-    VmbInterfaceType    interfaceType,
-    const char         *pInterfaceName,
-    const char         *pInterfaceSerialNumber,
-    VmbAccessModeType   interfacePermittedAccess 
-    )
-    : Camera (
-        pCameraID, 
-        pCameraName, 
-        pCameraModel, 
-        pCameraSerialNumber, 
-        pInterfaceID, 
-        interfaceType)
-{
-}
-
-### METHOD_IMPLEMENTATIONS ###
diff --git a/Tools/VimbaClassGenerator/Bin/x86_64bit/Templates/CppTemplate.h b/Tools/VimbaClassGenerator/Bin/x86_64bit/Templates/CppTemplate.h
deleted file mode 100644
index 7eed999501a04ab4099987420567989b16d1057b..0000000000000000000000000000000000000000
--- a/Tools/VimbaClassGenerator/Bin/x86_64bit/Templates/CppTemplate.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*=============================================================================
-This file was generated by the VimbaClassGenerator
-=============================================================================*/
-
-#ifndef ### HEADER_FILE_MACRO_NAME ###
-#define ### HEADER_FILE_MACRO_NAME ###
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-class ### CLASS_NAME ### : public AVT::VmbAPI::Camera
-{
-    public:
-        typedef SP_DECL( ### CLASS_NAME ### ) Ptr;
-
-        ### ENUM_DECLARATIONS ###
-        
-        ### CLASS_NAME ### (
-            const char         *pCameraID,
-            const char         *pCameraName,
-            const char         *pCameraModel,
-            const char         *pCameraSerialNumber,
-            const char         *pInterfaceID,
-            VmbInterfaceType    interfaceType,
-            const char         *pInterfaceName,
-            const char         *pInterfaceSerialNumber,
-            VmbAccessModeType   interfacePermittedAccess );
-
-        ### METHOD_DECLARATIONS ###
-
-    private:
-        ### VARIABLE_DECLARATIONS ###
-};
-
-#endif
\ No newline at end of file
diff --git a/Tools/VimbaClassGenerator/Bin/x86_64bit/VimbaClassGenerator b/Tools/VimbaClassGenerator/Bin/x86_64bit/VimbaClassGenerator
deleted file mode 100755
index c82a26ad80fd0490256b051f12183c4e598b6baf..0000000000000000000000000000000000000000
Binary files a/Tools/VimbaClassGenerator/Bin/x86_64bit/VimbaClassGenerator and /dev/null differ
diff --git a/Tools/VimbaClassGenerator/Bin/x86_64bit/libQtCore.so.4 b/Tools/VimbaClassGenerator/Bin/x86_64bit/libQtCore.so.4
deleted file mode 100755
index 0854b62fc1d480f75a46d9dffdeead41bd6a65c2..0000000000000000000000000000000000000000
Binary files a/Tools/VimbaClassGenerator/Bin/x86_64bit/libQtCore.so.4 and /dev/null differ
diff --git a/Tools/VimbaClassGenerator/Bin/x86_64bit/libQtGui.so.4 b/Tools/VimbaClassGenerator/Bin/x86_64bit/libQtGui.so.4
deleted file mode 100755
index 1f0f386322811e4b6c2e682266b9f90cdb293f31..0000000000000000000000000000000000000000
Binary files a/Tools/VimbaClassGenerator/Bin/x86_64bit/libQtGui.so.4 and /dev/null differ
diff --git a/Tools/VimbaClassGenerator/Bin/x86_64bit/libVimbaC.so b/Tools/VimbaClassGenerator/Bin/x86_64bit/libVimbaC.so
deleted file mode 100644
index bf307ba32c95a0c982454eb942341d7f342881aa..0000000000000000000000000000000000000000
Binary files a/Tools/VimbaClassGenerator/Bin/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/Tools/VimbaClassGenerator/Bin/x86_64bit/libVimbaCPP.so b/Tools/VimbaClassGenerator/Bin/x86_64bit/libVimbaCPP.so
deleted file mode 100644
index 2e23612559bcbeca2c24bb502f788a4b36ee0704..0000000000000000000000000000000000000000
Binary files a/Tools/VimbaClassGenerator/Bin/x86_64bit/libVimbaCPP.so and /dev/null differ
diff --git a/VimbaC/Documentation/Vimba C Manual.pdf b/VimbaC/Documentation/Vimba C Manual.pdf
deleted file mode 100644
index 264d17b2ea5215a9c836e6304f38ec9cf712c08b..0000000000000000000000000000000000000000
Binary files a/VimbaC/Documentation/Vimba C Manual.pdf and /dev/null differ
diff --git a/VimbaC/DynamicLib/x86_64bit/VimbaC.xml b/VimbaC/DynamicLib/x86_64bit/VimbaC.xml
deleted file mode 100644
index 2c7ef8b3e3ea410c8a949b8a911de49ffe6fae0e..0000000000000000000000000000000000000000
--- a/VimbaC/DynamicLib/x86_64bit/VimbaC.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" standalone="no" ?>
-<Settings>
-
-    <!--
-            Use this to activate logging and set filename for logging (path can be absolute or relative to API)
-            Default behavior if omitted:    Logging is deactivated
-    -->
-    <!-- <LogFileName>VimbaC.log</LogFileName> -->
-    
-
-    <!--
-            Append messages to log file or reset log file at each API restart (if logging is enabled)
-            True:                           Always append log messages
-            False:                          Reset log file at each API restart
-            Default behavior if omitted:    Reset log file at each API restart
-    -->		
-	<!-- <AppendLog>False</AppendLog> -->
-
-</Settings>
diff --git a/VimbaC/DynamicLib/x86_64bit/libVimbaC.so b/VimbaC/DynamicLib/x86_64bit/libVimbaC.so
deleted file mode 100644
index 781383deb7c36a92813b8997376e622b6e3e5a96..0000000000000000000000000000000000000000
Binary files a/VimbaC/DynamicLib/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/VimbaC/Examples/ActionCommands/Build/Make/Makefile b/VimbaC/Examples/ActionCommands/Build/Make/Makefile
deleted file mode 100644
index 1411528f4a6538918e85164b5092434609f8cdd3..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ActionCommands/Build/Make/Makefile
+++ /dev/null
@@ -1,58 +0,0 @@
-PROJECT_NAME            = ActionCommands
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaC.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-COMMON_DIR          = $(EXAMPLES_DIR)/Common
-
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBAC_LIBS)
-
-DEFINES             = -D_LITTLE_ENDIAN
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBAC_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ActionCommands.o \
-                      $(OBJ_DIR)/program.o \
-                      $(OBJ_DIR)/PrintVimbaVersion.o \
-                      $(OBJ_DIR)/ErrorCodeToMessage.o \
-                      $(OBJ_DIR)/DiscoverGigECameras.o
-
-DEPENDENCIES        = VimbaC
-
-$(OBJ_DIR)/%.o: $(COMMON_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaC/Examples/ActionCommands/Source/ActionCommands.c b/VimbaC/Examples/ActionCommands/Source/ActionCommands.c
deleted file mode 100644
index 8dfd586ba2e53b28db2c8368771ccf625d97a283..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ActionCommands/Source/ActionCommands.c
+++ /dev/null
@@ -1,912 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ActionCommands.cpp
-
-  Description: see header file for description
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <ActionCommands.h>
-
-// socket library to check IP addresses
-#ifdef _WIN32
-    #include <conio.h>
-    #include <WinSock.h>
-#else
-    #include <arpa/inet.h>
-#endif
-
-// number of frame buffers to be used by example
-#define NUM_FRAMES 3
-
-//
-// Frame callback, which will be called when Vimba receives a frame from the camera
-//
-// Parameters:
-//  [in]    aCamera     Camera handle
-//  [in]    aFrame      Received frame
-//
-void VMB_CALL FrameCallback( const VmbHandle_t aCamera, VmbFrame_t* aFrame )
-{
-    VmbError_t lError = VmbErrorSuccess;
-
-    // proceed only if given pointer are valid
-    if( (NULL != aCamera) && (NULL != aFrame) )
-    {
-        // check if received frame is complete
-        if( VmbFrameStatusComplete == aFrame->receiveStatus )
-        {
-            printf( "......Frame has been received\n" );
-        }
-
-        // re-queue received frame (buffer) to the capture queue (output buffer queue of GigE TL)
-        lError = VmbCaptureFrameQueue( aCamera, aFrame, &FrameCallback );
-        if( VmbErrorSuccess != lError )
-        {
-            printf( "[F]...Could not re-queue received buffer\n" );
-        }
-    }
-}
-
-//
-// Called when any failure occurs within the example.
-// Ensures to close camera and shutdown Vimba
-//
-// Parameters:
-//  [in]    aCamera     Camera handle
-//
-void FailureShutdown( VmbHandle_t aCamera )
-{
-    VmbError_t lError = VmbErrorSuccess;
-
-    // close camera
-    lError = VmbCameraClose( aCamera );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not close camera. Reason: %i", lError );
-    }
-
-    printf( "......Camera has been closed\n" );
-
-    // shutdown Vimba
-    VmbShutdown();
-
-    printf( "......Vimba has been stopped\n" );
-}
-
-//
-// Convert given string to IP address,
-// using respective socket library (Winsock/Arpa)
-//
-// Parameters:
-//  [in]    aString     String to be converted
-//  [out]   aIPAddress  Decimal representation of given IP address string
-//
-VmbError_t ConvertStringToIPAddress( const char* aString, VmbUint32_t* aIPAddress )
-{
-    VmbError_t  lError  = VmbErrorSuccess;
-    VmbUint32_t lIP     = 0;
-
-    // check parameter
-    if( (NULL == aString) || (NULL == aIPAddress) )
-    {
-        printf( "[F]...Invalid parameter given.\n" );
-        return VmbErrorBadParameter;
-    }
-
-    // convert given string to IP struct
-    lIP = inet_addr( aString );
-    if( -1 == lIP )
-    {
-        lError = VmbErrorInvalidValue;
-    }
-    else
-    {
-
-        #ifdef _LITTLE_ENDIAN
-        lIP = ntohl( lIP );
-        #endif
-
-        *aIPAddress = lIP;
-    }
-
-    return lError;
-}
-
-//
-// Start Vimba and open camera with given string
-//
-// Parameters:
-//  [in]    aCamera     The ID or IP address of the camera to work with
-//  [out]   aHandle     Handle to camera, if opened successfully
-//
-VmbError_t PrepareCamera( const char* aCamera, VmbHandle_t* aHandle )
-{
-    VmbError_t  lError          = VmbErrorSuccess;
-    VmbHandle_t lCameraHandle   = NULL;
-
-    // check parameter
-    if( (NULL == aCamera) || (NULL == aHandle) )
-    {
-        printf( "[F]...Invalid parameter given.\n" );
-        return VmbErrorBadParameter;
-    }
-
-    // start Vimba
-    lError = VmbStartup();
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not start Vimba API. Reason: %i\n", lError );
-        return lError;
-    }
-
-    printf( "......Vimba has been started\n" );
-
-    // -check if GigE TL is present
-    // -set API waiting time for discovery response to 250ms
-    // -send discovery packet once, to all connected cameras
-    lError = DiscoverGigECameras();
-    if( VmbErrorSuccess != lError )
-    {
-        VmbShutdown();
-        return lError;
-    }
-
-    printf( "......GigE Devices have been discovered\n" );
-
-    // open camera with given string (could be device ID or IP address)
-    lError = VmbCameraOpen( aCamera, VmbAccessModeFull, &lCameraHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not open camera '%s'. Reason: %i\n", aCamera, lError );
-        VmbShutdown();
-        return lError;
-    }
-
-    printf( "......Camera has been opened (%s)\n", aCamera );
-
-    // return camera handle
-    *aHandle = lCameraHandle;
-
-    return lError;
-}
-
-//
-// Close camera and shutdown Vimba
-//
-// Parameters:
-//  [in]    aHandle     Handle to camera
-//
-VmbError_t StopCamera( VmbHandle_t aHandle )
-{
-    VmbError_t lError = VmbErrorSuccess;
-
-    // close camera
-    lError = VmbCameraClose( aHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not close camera. Reason: %i\n", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    printf( "......Camera has been closed\n" );
-
-    // shutdown Vimba
-    VmbShutdown();
-
-    printf( "......Vimba has been stopped\n" );
-
-    return lError;
-}
-
-//
-// Prepare trigger settings for given camera
-//
-// Parameters:
-//  [in]    aHandle     Handle to camera
-//
-VmbError_t PrepareTrigger( VmbHandle_t aHandle )
-{
-    VmbError_t lError = VmbErrorSuccess;
-
-    // check parameter
-    if( NULL == aHandle )
-    {
-        printf( "[F]...Invalid parameter given.\n" );
-        return VmbErrorBadParameter;
-    }
-
-    // select FrameStart trigger via TriggerSelector feature
-    lError = VmbFeatureEnumSet( aHandle, "TriggerSelector", "FrameStart" );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not set TriggerSelector to FrameStart. Reason: %i", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    // set trigger source to Action0
-    lError = VmbFeatureEnumSet( aHandle, "TriggerSource", "Action0" );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not set TriggerSource to 'Action0'. Reason: %i\nProbably this camera does not support Action Commands.\n", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    // enable trigger
-    lError = VmbFeatureEnumSet( aHandle, "TriggerMode", "On" );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not enable TriggerMode for FrameStart. Reason: %i", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    printf( "......Trigger FrameStart has been activated and set to Action0\n" );
-
-    return lError;
-}
-
-//
-// Set Action Command information to given handle.
-// This could be a handle to Vimba system, interface
-// or a camera handle
-//
-// Parameters:
-//  [in]    aHandle     Handle to either Vimba system, interface or camera
-//  [in]    aCommand    Action Command struct (device key, group key, group mask)
-//
-VmbError_t PrepareActionCommand( VmbHandle_t aHandle, tActionCommand* aCommand )
-{
-    VmbError_t lError = VmbErrorSuccess;
-
-    // check parameter
-    if( (NULL == aHandle) || (NULL == aCommand) )
-    {
-        printf( "[F]...Invalid parameter given.\n" );
-        return VmbErrorBadParameter;
-    }
-
-    // set device key
-    lError = VmbFeatureIntSet( aHandle, "ActionDeviceKey", aCommand->mDeviceKey );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not set ActionDeviceKey. Reason: %i\n", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    // set group key
-    lError = VmbFeatureIntSet( aHandle, "ActionGroupKey", aCommand->mGroupKey );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not set ActionGroupKey. Reason: %i\n", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    // set group mask
-    lError = VmbFeatureIntSet( aHandle, "ActionGroupMask", aCommand->mGroupMask );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not set ActionGroupMask. Reason: %i\n", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    printf( "......Action Command has been set (%i,%i,%i)\n", aCommand->mDeviceKey, aCommand->mGroupKey, aCommand->mGroupMask );
-
-    return lError;
-}
-
-//
-// Prepare streaming settings in the camera,
-// like allocating the buffers, start capture engine, etc.
-//
-// Parameters:
-//  [in]    aHandle     Handle to camera
-//  [in]    aFrameArray Array of frames to be used for streaming
-//
-VmbError_t PrepareStreaming( VmbHandle_t aHandle, VmbFrame_t* aFrameArray )
-{
-    VmbError_t  lError          = VmbErrorSuccess;
-    VmbBool_t   lFlag           = VmbBoolFalse;
-    VmbInt64_t  lGVSPSize       = 0;
-    VmbInt64_t  lPayloadSize    = 0;
-    int         lIter           = 0;
-
-    // check parameter
-    if( NULL == aHandle )
-    {
-        printf( "[F]...Invalid parameter given.\n" );
-        return VmbErrorBadParameter;
-    }
-
-    // set GVSP packet size to max value (MTU)
-    // and wait until command is done
-    lError = VmbFeatureCommandRun( aHandle, "GVSPAdjustPacketSize" );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not set GVSP packet size. Reason: %i\n", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-    else
-    {
-        do
-        {
-            // check if operation is done
-            lError = VmbFeatureCommandIsDone( aHandle, "GVSPAdjustPacketSize", &lFlag );
-            if( VmbErrorSuccess != lError )
-            {
-                break;
-            }
-
-        } while( VmbBoolFalse == lFlag );
-    }
-
-    // get GVSP packet size, which was actually set in the camera
-    lError = VmbFeatureIntGet( aHandle, "GVSPPacketSize", &lGVSPSize );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not get GVSP packet size. Reason: %i\n", lError );
-    }
-
-    printf( "......GVSP packet size has been set to maximum (%i)\n", (int)lGVSPSize );
-
-    // get camera payload size (necessary for allocating the buffer memory)
-    lError = VmbFeatureIntGet( aHandle, "PayloadSize", &lPayloadSize );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not get payload size. Reason: %i", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    printf( "......Camera has payload size of '%i'\n", (int)lPayloadSize );
-
-    // initialize frame array with 0
-    memset( aFrameArray, 0, sizeof(aFrameArray) );
-
-    // allocate buffer memory for each frame
-    for( lIter = 0; lIter < NUM_FRAMES; ++lIter )
-    {
-        // allocate buffer
-        aFrameArray[lIter].buffer = (unsigned char*)malloc((VmbUint32_t)lPayloadSize);
-        if( NULL == aFrameArray[lIter].buffer )
-        {
-            lError = VmbErrorResources;
-            break;
-        }
-
-        // set buffer size
-        aFrameArray[lIter].bufferSize = (VmbUint32_t)lPayloadSize;
-    }
-
-    // in case any failure occured, free allocated space
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Failure during memory allocation for buffers (%i/%i). Reason: %i", lIter, NUM_FRAMES, lError );
-
-        for( lIter = 0; lIter < NUM_FRAMES; ++lIter )
-        {
-            free( aFrameArray[lIter].buffer );
-            memset( aFrameArray, 0, sizeof(aFrameArray) );
-        }
-
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    printf( "......Allocated memory for frame buffers\n" );
-
-    // announce frame buffers (move them to buffer input pool of GigE TL)
-    for( lIter = 0; lIter < NUM_FRAMES; ++lIter )
-    {
-        lError = VmbFrameAnnounce( aHandle, &aFrameArray[lIter], sizeof(VmbFrame_t) );
-        if( VmbErrorSuccess != lError )
-        {
-            break;
-        }
-    }
-
-    // in case any failure occured, revoke all announced frames
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Failure during announcing frame buffers (%i/%i). Reason: %i", lIter, NUM_FRAMES, lError );
-
-        lError = VmbFrameRevokeAll( aHandle );
-        if( VmbErrorSuccess != lError )
-        {
-            printf( "[F]...Could not revoke all frame buffers. Reason: %i", lError );
-        }
-
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    printf( "......Buffers have been announced and moved to input pool\n" );
-
-    // start capture engine
-    lError = VmbCaptureStart( aHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not start capture engine. Reason: %i", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    printf( "......Capture engine has been started\n" );
-
-    // move announced frames to output buffer queue
-    for( lIter = 0; lIter < NUM_FRAMES; ++lIter )
-    {
-        lError = VmbCaptureFrameQueue( aHandle, &aFrameArray[lIter], &FrameCallback );
-        if( VmbErrorSuccess != lError )
-        {
-            printf( "[F]...Could not queue frame to output buffer queue. Reason: %i\n", lError );
-            FailureShutdown( aHandle );
-            return lError;
-        }
-    }
-
-    printf( "......Buffers have been moved to output queue\n" );
-
-    // start acquisition in the camera
-    lError = VmbFeatureCommandRun( aHandle, "AcquisitionStart" );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not start camera acquisition. Reason: %i\n", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    printf( "......Camera acquisition has been started\n" );
-
-    return lError;
-}
-
-//
-// End streaming
-//
-// Parameters:
-//  [in]    aHandle     Handle to camera
-//  [in]    aFrameArray Array of frames to be used for streaming
-//
-VmbError_t StopStreaming( VmbHandle_t aHandle, VmbFrame_t* aFrameArray )
-{
-    VmbError_t  lError  = VmbErrorSuccess;
-    int         lIter   = 0;
-
-    // call acquisition stop feature in camera
-    lError = VmbFeatureCommandRun( aHandle, "AcquisitionStop" );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not run AcquisitionStop feature. Reason: %i\n", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    // stop capture engine
-    lError = VmbCaptureEnd( aHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not stop capture engine. Reason: %i\n", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    // flush buffer output queue
-    lError = VmbCaptureQueueFlush( aHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not flush output buffer queue. Reason: %i\n", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    // revoke all announced buffers
-    lError = VmbFrameRevokeAll( aHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not flush input buffer pool. Reason: %i\n", lError );
-        FailureShutdown( aHandle );
-        return lError;
-    }
-
-    // free allocated space for buffers
-    for( lIter = 0; lIter < NUM_FRAMES; ++lIter )
-    {
-        free( aFrameArray[lIter].buffer );
-        memset( aFrameArray, 0, sizeof(aFrameArray) );
-    }
-
-    return lError;
-}
-
-//
-// Send Action Command  on system level.
-// This command will be broadcasted on all network interfaces.
-//
-// Parameters:
-//  [in]    aCamera     The ID or IP address of the camera to work with
-//  [in]    aCommand    Action Command to be set in the camera
-//
-VmbError_t SendActionCommandOnAllInterfaces( const char* aCamera, tActionCommand aCommand )
-{
-    VmbError_t  lError          = VmbErrorSuccess;
-    VmbBool_t   lFlag           = VmbBoolFalse;
-    VmbHandle_t lCameraHandle   = NULL;
-    VmbUint32_t lIP             = 0;
-    int         lKey            = 0;
-    VmbFrame_t  lFrames[NUM_FRAMES];
-
-    // check parameter
-    if( NULL == aCamera )
-    {
-        printf( "[F]...Invalid parameter given!\n" );
-        return VmbErrorBadParameter;
-    }
-
-    // -start Vimba
-    // -discover GigE devices
-    // -open camera in full access mode and get handle
-    lError = PrepareCamera( aCamera, &lCameraHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -select FrameStart trigger feature
-    // -set source to Action0
-    // -enable trigger
-    lError = PrepareTrigger( lCameraHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // Set Action Command to camera
-    // -set device key
-    // -set group key
-    // -set group mask
-    lError = PrepareActionCommand( lCameraHandle, &aCommand );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -adjust GVSP packet size
-    // -get payload size
-    // -allocate memory for frame buffers
-    // -announce frames and move them to buffer input pool
-    // -start capture engine
-    // -move frames to capture queue (buffer output queue)
-    // -call start acquisition feature in the camera
-    lError = PrepareStreaming( lCameraHandle, lFrames );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // determine if Action Command shall be send as uni- or broadcast
-    // if IP address was given, send it as unicast
-    lError = ConvertStringToIPAddress( aCamera, &lIP );
-    if( VmbErrorSuccess == lError )
-    {
-        // set IP address to Vimba
-        lError = VmbFeatureIntSet( gVimbaHandle, "GevActionDestinationIPAddress", lIP );
-        if( VmbErrorSuccess != lError )
-        {
-            printf( "[F]...Could not set IP address '%s' to Vimba. Reason: %i\n", aCamera, lError );
-        }
-
-        printf( "......Action Command will be send as unicast to IP '%s (%i)'\n", aCamera, lIP );
-    }
-
-    // set Action Command to Vimba system
-    // -device key
-    // -group key
-    // -group mask
-    lError = PrepareActionCommand( gVimbaHandle, &aCommand );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not prepare Action Command. Reason: %i\n", lError );
-    }
-
-    #ifdef _WIN32
-        printf( "\n<< Please hit 'a' to send prepared Action Command. To stop example hit 'q' >>\n\n" );
-    #else
-        printf( "\n<< Please enter 'a' and return to send prepared Action Command. To stop example enter 'q' and return >>\n\n" );
-    #endif
-
-    // repeat this until user hits ESC
-    do
-    {
-        // wait for user input
-        #ifdef _WIN32
-            lKey = _getch();
-        #else
-            lKey = getchar();
-        #endif
-
-        if( 97 == lKey )
-        {
-
-            // send Action Command by calling command feature
-            lError = VmbFeatureCommandRun( gVimbaHandle, "ActionCommand" );
-            if( VmbErrorSuccess != lError )
-            {
-                printf( "[F]...Could not send Action Command. Reason: %i\n", lError );
-                FailureShutdown( lCameraHandle );
-                return lError;
-            }
-
-            printf( "......Action Command has been sent\n" );
-
-        }
-
-    } while( 113 != lKey );
-
-    // stop streaming
-    lError = StopStreaming( lCameraHandle, lFrames );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -close camera
-    // -shutdown Vimba
-    lError = StopCamera( lCameraHandle );
-
-    return lError;
-}
-
-//
-// Send Action Command on interface level.
-// This command will be broadcasted on given network interface.
-//
-// Parameters:
-//  [in]    aCamera     The ID or IP address of the camera to work with
-//  [in]    aInterface  The network interface on which the Action Command
-//                      will be sent out
-//  [in]    aCommand    Action Command to be used by Vimba and camera
-//
-VmbError_t SendActionCommandOnInterface( const char* aCamera, const char* aInterface, tActionCommand aCommand )
-{
-    VmbError_t          lError              = VmbErrorSuccess;
-    VmbHandle_t         lCameraHandle       = NULL;
-    VmbInterfaceInfo_t* lInterfaces         = NULL;
-    VmbUint32_t         lCount              = 0;
-    VmbHandle_t         lInterfaceHandle    = NULL;
-    VmbBool_t           lFound              = VmbBoolFalse;
-    int                 lInterfaceIndex     = 0;
-    VmbUint32_t         lIP                 = 0;
-    int                 lKey                = 0;
-    VmbFrame_t          lFrames[NUM_FRAMES];
-    int                 lIter               = 0;
-
-    // check parameter
-    if( NULL == aCamera || NULL == aInterface )
-    {
-        printf( "[F]...Invalid parameter given!\n" );
-        return VmbErrorBadParameter;
-    }
-
-    // -start Vimba
-    // -discover GigE devices
-    // -open camera in full access mode and get handle
-    lError = PrepareCamera( aCamera, &lCameraHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -select FrameStart trigger feature
-    // -set source to Action0
-    // -enable trigger
-    lError = PrepareTrigger( lCameraHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // Set Action Command to camera
-    // -set device key
-    // -set group key
-    // -set group mask
-    lError = PrepareActionCommand( lCameraHandle, &aCommand );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -adjust GVSP packet size
-    // -get payload size
-    // -allocate memory for frame buffers
-    // -announce frames and move them to buffer input pool
-    // -start capture engine
-    // -move frames to capture queue (buffer output queue)
-    // -call start acquisition feature in the camera
-    lError = PrepareStreaming( lCameraHandle, lFrames );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // get number of available interfaces
-    lError = VmbInterfacesList( NULL, lCount, &lCount, 0 );
-    if( (VmbErrorSuccess != lError) || (0 == lCount) )
-    {
-        printf( "[F]...Could not retrieve number of interfaces. Reason: %i\n", lError );
-        FailureShutdown( lCameraHandle );
-        return lError;
-    }
-
-    // allocate space for interface info list
-    lInterfaces = (VmbInterfaceInfo_t*)malloc( lCount * sizeof(VmbInterfaceInfo_t) );
-    if( NULL == lInterfaces )
-    {
-        printf( "[F]...Could not allocate space for interface info list.\n" );
-        FailureShutdown( lCameraHandle );
-        return lError;
-    }
-
-    // get interface info list
-    lError = VmbInterfacesList( lInterfaces, lCount, &lCount, sizeof(*lInterfaces) );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not retrieve interface info list. Reason: %i\n", lError );
-        FailureShutdown( lCameraHandle );
-        return lError;
-    }
-
-    // print interface list
-    printf( "......following interfaces were found:\n" );
-    for( lIter = 0; lIter<lCount; ++lIter )
-    {
-        printf( "..........[%i] %s\n", lIter, lInterfaces[lIter].interfaceIdString );
-
-        // compare given interface ID with current one
-        if( 0 == strcmp(aInterface, lInterfaces[lIter].interfaceIdString) )
-        {
-            // if interface ID matches, keep index
-            lFound = VmbBoolTrue;
-            lInterfaceIndex = lIter;
-        }
-    }
-
-    // if no interface with given ID was found, return
-    if( VmbBoolFalse == lFound )
-    {
-        printf( "[F]...Given interface with ID '%s' was not found!\n", aInterface );
-        FailureShutdown( lCameraHandle );
-        return VmbErrorBadParameter;
-    }
-
-    // check interface type
-    if( VmbInterfaceEthernet != lInterfaces[lInterfaceIndex].interfaceType )
-    {
-        printf( "[F]...Selected interface is non-GigE interface!\n" );
-        FailureShutdown( lCameraHandle );
-        return VmbErrorBadParameter;
-    }
-
-    // open network interface with given index
-    lError = VmbInterfaceOpen( aInterface, &lInterfaceHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not open interface with ID '%s'. Reason: %i\n", aInterface, lError );
-        FailureShutdown( lCameraHandle );
-        return lError;
-    }
-
-    printf( "......Interface '%s' has been opened.\n", aInterface );
-
-    // determine if Action Command shall be send as uni- or broadcast
-    // if IP address was given, send it as unicast
-    lError = ConvertStringToIPAddress( aCamera, &lIP );
-    if( VmbErrorSuccess == lError )
-    {
-        // set IP address on the interface
-        lError = VmbFeatureIntSet( lInterfaceHandle, "GevActionDestinationIPAddress", lIP );
-        if( VmbErrorSuccess != lError )
-        {
-            printf( "[F]...Could not set IP address '%s' to Vimba. Reason: %i\n", aCamera, lError );
-        }
-
-        printf( "......Action Command will be send as unicast to IP '%s (%i)'\n", aCamera, lIP );
-    }
-
-    // set Action Command to Vimba interface
-    // -device key
-    // -group key
-    // -group mask
-    lError = PrepareActionCommand( lInterfaceHandle, &aCommand );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not prepare Action Command. Reason: %i\n", lError );
-    }
-
-    #ifdef _WIN32
-        printf( "\n<< Please hit 'a' to send prepared Action Command. To stop example hit 'q' >>\n\n" );
-    #else
-        printf( "\n<< Please enter 'a' and return to send prepared Action Command. To stop example enter 'q' and return >>\n\n" );
-    #endif
-
-    // repeat this until user hits ESC
-    do
-    {
-        // wait for user input
-        #ifdef _WIN32
-            lKey = _getch();
-        #else
-            lKey = getchar();
-        #endif
-
-        if( 97 == lKey )
-        {
-
-            // send Action Command by calling command feature
-            lError = VmbFeatureCommandRun( lInterfaceHandle, "ActionCommand" );
-            if( VmbErrorSuccess != lError )
-            {
-                printf( "[F]...Could not send Action Command. Reason: %i\n", lError );
-                FailureShutdown( lCameraHandle );
-                return lError;
-            }
-
-            printf( "......Action Command has been sent\n" );
-
-        }
-
-    } while( 113 != lKey );
-
-    // close interface
-    lError = VmbInterfaceClose( lInterfaceHandle );
-    if( VmbErrorSuccess != lError )
-    {
-        printf( "[F]...Could not close interface. Reason: %i\n", lError );
-        FailureShutdown( lCameraHandle );
-        return lError;
-    }
-
-    // stop streaming
-    lError = StopStreaming( lCameraHandle, lFrames );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -close camera
-    // -shutdown Vimba
-    lError = StopCamera( lCameraHandle );
-
-    return lError;
-}
diff --git a/VimbaC/Examples/ActionCommands/Source/ActionCommands.h b/VimbaC/Examples/ActionCommands/Source/ActionCommands.h
deleted file mode 100644
index 91d22932691204ecb78f82b621899dd695298e24..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ActionCommands/Source/ActionCommands.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ActionCommands.h
-
-  Description: This example will create an Action Command and send it to any
-               camera, given by parameter. The following can be set up with
-               parameters as well:
-                -send Action Command as broadcast on specific network interface
-                -send Action Command as broadcast to all network interfaces
-                -send Action Command to specific IP address (unicast)
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef ACTION_COMMANDS_H_
-#define ACTION_COMMANDS_H_
-
-#include <VimbaC/Include/VimbaC.h>
-#include <../../Common/DiscoverGigECameras.h>
-
-// struct representing an Action Command
-typedef struct tActionCommand
-{
-    VmbUint32_t     mDeviceKey;
-    VmbUint32_t     mGroupKey;
-    VmbUint32_t     mGroupMask;
-
-} tActionCommand;
-
-//
-// Called when any failure occurs within the example.
-// Ensures to close camera and shutdown Vimba
-//
-// Parameters:
-//  [in]    aCamera     Camera handle
-//
-void FailureShutdown( VmbHandle_t aCamera );
-
-//
-// Convert given string to IP address,
-// using respective socket library (Winsock/Arpa)
-//
-// Parameters:
-//  [in]    aString     String to be converted
-//  [out]   aIPAddress  Decimal representation of given IP address string
-//
-VmbError_t ConvertStringToIPAddress( const char* aString, VmbUint32_t* aIPAddress );
-
-//
-// Start Vimba and open camera with given string
-//
-// Parameters:
-//  [in]    aCamera     The ID or IP address of the camera to work with
-//  [out]   aHandle     Handle to camera, if opened successfully
-//
-VmbError_t PrepareCamera( const char* aCamera, VmbHandle_t* aHandle );
-
-//
-// Close camera and shutdown Vimba
-//
-// Parameters:
-//  [in]    aHandle     Handle to camera
-//
-VmbError_t StopCamera( VmbHandle_t aHandle );
-
-//
-// Prepare trigger settings for given camera
-//
-// Parameters:
-//  [in]    aHandle     Handle to camera
-//
-VmbError_t PrepareTrigger( VmbHandle_t aHandle );
-
-//
-// Set Action Command information to given handle.
-// This could be a handle to Vimba system, interface
-// or a camera handle
-//
-// Parameters:
-//  [in]    aHandle     Handle to either Vimba system, interface or camera
-//  [in]    aCommand    Action Command struct (device key, group key, group mask)
-//
-VmbError_t PrepareActionCommand( VmbHandle_t aHandle, tActionCommand* aCommand );
-
-//
-// Prepare streaming settings in Vimba and the camera,
-// like allocating the buffers, start capture engine, etc.
-//
-// Parameters:
-//  [in]    aHandle     Handle to camera
-//  [in]    aFrameArray Array of frames to be used for streaming
-//
-VmbError_t PrepareStreaming( VmbHandle_t aHandle, VmbFrame_t* aFrameArray );
-
-//
-// End streaming
-//
-// Parameters:
-//  [in]    aHandle     Handle to camera
-//  [in]    aFrameArray Array of frames to be used for streaming
-//
-VmbError_t StopStreaming( VmbHandle_t aHandle, VmbFrame_t* aFrameArray );
-
-//
-// Send Action Command  on system level.
-// This command will be broadcasted on all network interfaces.
-//
-// Parameters:
-//  [in]    aCamera     The ID or IP address of the camera to work with
-//  [in]    aCommand    Action Command to be used by Vimba and camera
-//
-VmbError_t SendActionCommandOnAllInterfaces( const char* aCamera, tActionCommand aCommand );
-
-//
-// Send Action Command on interface level.
-// This command will be broadcasted on given network interface.
-//
-// Parameters:
-//  [in]    aCamera     The ID or IP address of the camera to work with
-//  [in]    aInterface  The network interface on which the Action Command
-//                      will be send out
-//  [in]    aCommand    Action Command to be used by Vimba and camera
-//
-VmbError_t SendActionCommandOnInterface( const char* aCamera, const char* aIndex, tActionCommand aCommand );
-
-#endif
diff --git a/VimbaC/Examples/ActionCommands/Source/program.c b/VimbaC/Examples/ActionCommands/Source/program.c
deleted file mode 100644
index 6e154e8af01c2a3532871e4922de7d695d40f2d8..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ActionCommands/Source/program.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of ActionCommands example of VimbaC.
-
-               annotations:
-                -local variables are prefixed with 'l' for local
-                -function parameter are prefixed with 'a' for 'argument'
-                -structs are prefixed with 't' for 'type'
-                -global variables are prefixed with 'g' for 'global'
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <VimbaC/Include/VimbaC.h>
-#include <../../Common/PrintVimbaVersion.h>
-
-#include <ActionCommands.h>
-
-// function to print out help how to use this example application
-void PrintHelp()
-{
-    printf( "Usage: ActionCommands <CameraID/IPAdress> <InterfaceID>\n\n" );
-    printf( "Parameters:   CameraID         ID of the camera to be used\n" );
-    printf( "              IPAddress        IP address of camera to react on Action Command\n" );
-    printf( "              InterfaceID      ID of network interface to send out Action Command\n" );
-    printf( "                               'ALL' enables broadcast on all interfaces\n\n" );
-}
-
-int main( int argc, char* argv[] )
-{
-    VmbError_t      lError      = VmbErrorSuccess;
-    VmbUint32_t     lIPAddress  = 0;
-    tActionCommand  lActionCommand;
-
-    printf( "\n" );
-    printf( "/////////////////////////////////////////\n" );
-    printf( "/// Vimba API Action Commands Example ///\n" );
-    printf( "/////////////////////////////////////////\n" );
-    printf( "\n" );
-
-    // show Vimba API version
-    PrintVimbaVersion();
-
-    printf( "\n" );
-
-    // check number of arguments
-    if( 3 == argc )
-    {
-        // define Action Command to be set in the camera
-        // and used by either Vimba system or interface module
-        lActionCommand.mDeviceKey   = 1;
-        lActionCommand.mGroupKey    = 1;
-        lActionCommand.mGroupMask   = 1;
-
-        // check if interface index is '-1' to send out Action Command on all interfaces
-        // if not, send Action Command via given network interface
-        if( 0 == strcmp("ALL", argv[2]) )
-        {
-            lError = SendActionCommandOnAllInterfaces( argv[1], lActionCommand );
-        }
-        else
-        {
-            lError = SendActionCommandOnInterface( argv[1], argv[2], lActionCommand );
-        }
-
-    }
-    else
-    {
-        lError = VmbErrorBadParameter;
-        printf( "[F]...Invalid number of parameters given!\n\n" );
-        PrintHelp();
-    }
-
-    printf( "\n" );
-
-    return lError;
-}
diff --git a/VimbaC/Examples/AsynchronousGrab/Build/Make/Makefile b/VimbaC/Examples/AsynchronousGrab/Build/Make/Makefile
deleted file mode 100644
index bc925e97811ce08b84492bcd7350df5615d85959..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/AsynchronousGrab/Build/Make/Makefile
+++ /dev/null
@@ -1,65 +0,0 @@
-PROJECT_NAME            = AsynchronousGrab
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaC.mk
-
-include $(MAKE_INCLUDE_DIR)/VimbaImageTransform.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-COMMON_DIR          = $(EXAMPLES_DIR)/Common
-
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBAC_LIBS) \
-                      $(VIMBAIMAGETRANSFORM_LIBS) \
-					  -lrt
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBAC_CFLAGS) \
-                      $(VIMBAIMAGETRANSFORM_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/AsynchronousGrab.o \
-                      $(OBJ_DIR)/program.o \
-                      $(OBJ_DIR)/PrintVimbaVersion.o \
-                      $(OBJ_DIR)/ErrorCodeToMessage.o \
-                      $(OBJ_DIR)/DiscoverGigECameras.o
-
-DEPENDENCIES        = VimbaC \
-                      VimbaImageTransform
-
-
-$(OBJ_DIR)/%.o: $(COMMON_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
diff --git a/VimbaC/Examples/AsynchronousGrab/Source/AsynchronousGrab.c b/VimbaC/Examples/AsynchronousGrab/Source/AsynchronousGrab.c
deleted file mode 100644
index 5a90e33e43cb51f81f9643f61ff84031aef7b32f..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/AsynchronousGrab/Source/AsynchronousGrab.c
+++ /dev/null
@@ -1,648 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        AsynchronousGrab.c
-
-  Description: The AsynchronousGrab example will grab images asynchronously
-               using VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef WIN32
-    #include <windows.h>
-#else
-    #include <unistd.h>
-    #include <time.h>
-    #include <pthread.h>
-#endif
-
-#include <VimbaC/Include/VimbaC.h>
-
-#include "VmbTransform.h"
-
-#include <AsynchronousGrab.h>
-#include "Common/PrintVimbaVersion.h"
-#include "Common/DiscoverGigECameras.h"
-
-
-enum
-{
-    NUM_FRAMES  = 3
-};
-
-VmbBool_t       g_bVimbaStarted             = VmbBoolFalse;     // Remember if Vimba is started
-VmbBool_t       g_bStreaming                = VmbBoolFalse;     // Remember if Vimba is streaming
-VmbBool_t       g_bAcquiring                = VmbBoolFalse;     // Remember if Vimba is acquiring
-VmbHandle_t     g_CameraHandle              = NULL;             // A handle to our camera
-VmbFrame_t      g_Frames[NUM_FRAMES];                           // The frames we capture into
-FrameInfos      g_eFrameInfos               = FrameInfos_Off;   // Remember if we should print out frame infos
-VmbBool_t       g_bRGBValue                 = VmbBoolFalse;     // Show RGB values
-VmbBool_t       g_bEnableColorProcessing    = VmbBoolFalse;     // Enables color processing for frames
-VmbBool_t       g_bUseAllocAndAnnouce       = VmbBoolFalse;     // Enables frame alloc and announce mode
-double          g_dFrameTime                = 0.0;              // Timestamp of last frame
-VmbBool_t       g_bFrameTimeValid           = VmbBoolFalse;     // Remember if there was a last timestamp
-VmbUint64_t     g_nFrameID                  = 0;                // ID of last frame
-VmbBool_t       g_bFrameIDValid             = VmbBoolFalse;     // Remember if there was a last ID
-#ifdef WIN32
-double          g_dFrequency                = 0.0;              //Frequency of tick counter in Win32
-#else
-#endif
-
-
-
-#ifdef WIN32
-    HANDLE          g_hMutex = INVALID_HANDLE_VALUE;
-
-    VmbBool_t CreateApiLock()
-    {
-        if( INVALID_HANDLE_VALUE != g_hMutex)
-        {
-            DestroyApiLock();
-        }
-        g_hMutex = CreateMutex( NULL, FALSE, NULL );
-        return INVALID_HANDLE_VALUE != g_hMutex;
-    }
-    void DestroyApiLock()
-    {
-        if( INVALID_HANDLE_VALUE != g_hMutex)
-        {
-            CloseHandle( g_hMutex );
-        }
-    }
-    VmbBool_t AquireApiLock()
-    {
-        if( WAIT_OBJECT_0 == WaitForSingleObject( g_hMutex, INFINITE ) )
-        {
-            return VmbBoolTrue;
-        }
-        return VmbBoolFalse;
-    }
-    void ReleaseApiLock()
-    {
-        ReleaseMutex( g_hMutex );
-    }
-#else
-    pthread_mutex_t g_Mutex = PTHREAD_MUTEX_INITIALIZER;
-    VmbBool_t CreateApiLock()
-    {
-        return VmbBoolTrue;
-    }
-    void DestroyApiLock()
-    {
-    }
-    VmbBool_t AquireApiLock()
-    {
-        if(0 == pthread_mutex_lock( &g_Mutex ) )
-        {
-            return VmbBoolTrue;
-        }
-        return VmbBoolFalse;
-    }
-    void ReleaseApiLock()
-    {
-        pthread_mutex_unlock( &g_Mutex );
-    }
-#endif
-
-
-//
-// Method: ProcessFrame
-//
-// Purpose: convert frames to RGB24 format and apply color processing if desired
-//
-// Parameters:
-// [in] pFrame frame to process data might be destroyed dependent on transform function used
-//
-VmbError_t ProcessFrame( VmbFrame_t * pFrame)
-{
-    VmbError_t          Result              = VmbErrorSuccess;  // result of function
-    VmbUint32_t         Width               = 0;                // will later hold the frame width
-    VmbUint32_t         Height              = 0;                // will later hold the frame height
-    VmbImage            SourceImage;                            // source image struct to pass to image transform
-    VmbImage            DestinationImage;                       // destination image struct to pass to image transform
-    VmbRGB8_t*          DestinationBuffer   = NULL;             // destination image buffer
-    VmbTransformInfo    TransformInfo;                          // if desired the transform information is constructed here
-    VmbUint32_t         TransformInfoCount  = 0;                // if color processing is desired this will be set
-    // check if we can get data
-    if( NULL == pFrame || NULL == pFrame->buffer )
-    {
-        printf("%s error invalid frame\n", __FUNCTION__);
-        return VmbErrorBadParameter;
-    }
-    // init local variables for frame width and height
-    Width   = pFrame->width;
-    Height  = pFrame->height;
-    if( g_bEnableColorProcessing == VmbBoolTrue )   // if color processing is desired set the transform matrix
-    {
-        const static VmbFloat_t matrix[9] = {   0.0, 0.0, 1.0,                  // matrix to swap red and blue component
-                                                0.0, 1.0, 0.0,
-                                                1.0, 0.0, 0.0 };
-        Result = VmbSetColorCorrectionMatrix3x3(matrix, &TransformInfo);        // initialize transform info
-        if( VmbErrorSuccess != Result)
-        {
-            printf("%s error could not set transform matrix; Error: %d\n", __FUNCTION__, Result);
-            return Result;
-        }
-        TransformInfoCount = 1;
-    }
-    // set the struct size to image 
-    SourceImage.Size        = sizeof( SourceImage );
-    // set the image information from the frames pixel format and size
-    Result                  = VmbSetImageInfoFromPixelFormat( pFrame->pixelFormat, Width, Height, &SourceImage );
-    if( VmbErrorSuccess != Result)
-    {
-        printf( "%s error could not set source image info; Error: %d\n", __FUNCTION__, Result);
-        return Result;
-    }
-    // the frame buffer will be the images data buffer
-    SourceImage.Data = pFrame->buffer;
-    // set size for destination image
-    DestinationImage.Size   = sizeof( DestinationImage );
-    // set destination image info from frame size and string for RGB8 (rgb24)
-    Result                  = VmbSetImageInfoFromString( "RGB8", 4, Width, Height, &DestinationImage );
-    if( VmbErrorSuccess != Result)
-    {
-        printf("%s error could not set destination image info; Error: %d\n", __FUNCTION__, Result);
-        return Result;
-    }
-    // allocate buffer for destination image size is width * height * size of rgb pixel
-    DestinationBuffer       = (VmbRGB8_t*) malloc( Width*Height*sizeof( VmbRGB8_t) );
-    if( NULL == DestinationBuffer)
-    {
-        printf("%s error could not allocate rgb buffer for width: %d and height: %d\n", __FUNCTION__, Width, Height);
-        return VmbErrorResources;
-    }
-    // set the destination buffer to the data buffer of the image
-    DestinationImage.Data = DestinationBuffer;
-    // transform source to destination if color processing was enabled TransformInfoCount is 1 otherwise TransformInfo will be ignored
-    Result = VmbImageTransform( &SourceImage, &DestinationImage, &TransformInfo, TransformInfoCount );
-    // print first rgb pixel
-    printf("R: %d\tG: %d\tB: %d\n", DestinationBuffer->R, DestinationBuffer->G, DestinationBuffer->B);
-    // clean image buffer
-    free( DestinationBuffer );
-    return -Result;
-}
-
-//
-// Method: GetTime
-//
-// Purpose: get time indicator
-//
-// Returns: time indicator in seconds for differential measurements
-double GetTime()
-{
-#ifdef WIN32
-    LARGE_INTEGER nCounter;
-    QueryPerformanceCounter( &nCounter );
-    return ( (double)nCounter.QuadPart ) / g_dFrequency;
-#else
-    struct timespec now;
-    clock_gettime( CLOCK_REALTIME, &now );
-    return ( (double)now.tv_sec ) + ( (double)now.tv_nsec ) / 1000000000.0;
-#endif //WIN32
-}
-
-//
-// Method: FrameCallback
-//
-// Purpose: called from Vimba if a frame is ready for user processing
-//
-// Parameters:
-//
-// [in] handle to camera that supplied the frame
-// [in] pointer to frame structure that can hold valid data
-//
-void VMB_CALL FrameCallback( const VmbHandle_t cameraHandle, VmbFrame_t* pFrame )
-{
-    //
-    // from here on the frame is under user control until returned to Vimba by re queuing it
-    // if you want to have smooth streaming keep the time you hold the frame short
-    //
-    VmbBool_t       bShowFrameInfos     = VmbBoolFalse;         // showing frame infos 
-    double          dFPS                = 0.0;                  // frames per second calculated
-    VmbBool_t       bFPSValid           = VmbBoolFalse;         // indicator if fps calculation was valid
-    double          dFrameTime          = 0.0;                  // reference time for frames
-    double          dTimeDiff           = 0.0;                  // time difference between frames
-    VmbUint64_t     nFramesMissing      = 0;                    // number of missing frames
-
-    // Ensure that a frame callback is not interrupted by a VmbFrameRevoke during shutdown
-    AquireApiLock();
-
-    if( FrameInfos_Off != g_eFrameInfos )
-    {
-        if( FrameInfos_Show == g_eFrameInfos )
-        {
-            bShowFrameInfos = VmbBoolTrue;
-        }
-
-        if( VmbFrameFlagsFrameID & pFrame->receiveFlags )
-        {
-            if( g_bFrameIDValid )
-            {
-                if( pFrame->frameID != ( g_nFrameID + 1 ) )
-                {
-                    // get difference between current frame and last received frame to calculate missing frames
-                    nFramesMissing = pFrame->frameID - g_nFrameID - 1;
-                    if( 1 == nFramesMissing )
-                    {
-                        printf("%s 1 missing frame detected\n", __FUNCTION__);
-                    }
-                    else
-                    {
-                        printf("%s error %llu missing frames detected\n",__FUNCTION__, nFramesMissing);
-                    }
-                }
-            }
-            g_nFrameID      = pFrame->frameID;          // store current frame id to calculate missing frames in the next calls
-            g_bFrameIDValid = VmbBoolTrue;  
-
-            dFrameTime = GetTime();                     // get current time to calculate frames per second
-            if(     ( g_bFrameTimeValid )               // only if the last time was valid
-                &&  ( 0 == nFramesMissing ) )           // and the frame is not missing
-            {
-                dTimeDiff = dFrameTime - g_dFrameTime;  // build time difference with last frames time
-                if( dTimeDiff > 0.0 )
-                {
-                    dFPS        = 1.0 / dTimeDiff;
-                    bFPSValid   = VmbBoolTrue;
-                }
-                else
-                {
-                    bShowFrameInfos = VmbBoolTrue;
-                }
-            }
-            // store time for fps calculation in the next call
-            g_dFrameTime        = dFrameTime;
-            g_bFrameTimeValid   = VmbBoolTrue;
-        }
-        else
-        {
-            bShowFrameInfos     = VmbBoolTrue;
-            g_bFrameIDValid     = VmbBoolFalse;
-            g_bFrameTimeValid   = VmbBoolFalse;
-        }
-        // test if the frame is complete
-        if( VmbFrameStatusComplete != pFrame->receiveStatus )
-        {
-            bShowFrameInfos = VmbBoolTrue;
-        }
-    }
-
-    if( bShowFrameInfos )
-    {
-        printf("Frame ID:");
-        if( VmbFrameFlagsFrameID & pFrame->receiveFlags )
-        {
-            printf( "%llu", pFrame->frameID );
-        }
-        else
-        {
-            printf( "?" );
-        }
-
-        printf( " Status:" );
-        switch( pFrame->receiveStatus )
-        {
-        case VmbFrameStatusComplete:
-            printf( "Complete" );
-            break;
-
-        case VmbFrameStatusIncomplete:
-            printf( "Incomplete" );
-            break;
-
-        case VmbFrameStatusTooSmall:  
-            printf( "Too small" );
-            break;
-
-        case VmbFrameStatusInvalid:
-            printf( "Invalid" );
-            break;
-
-        default:
-            printf( "?" );
-            break;
-        }
-
-        printf( " Size:" );
-        if( VmbFrameFlagsDimension & pFrame->receiveFlags )
-        {
-            printf( "%ux%u", pFrame->width, pFrame->height );
-        }
-        else
-        {
-            printf( "?x?" );
-        }
-
-        printf( " Format:0x%08X", pFrame->pixelFormat );
-
-        printf( " FPS:" );
-        if( bFPSValid )
-        {
-            printf( "%.2f", dFPS );
-        }
-        else
-        {
-            printf( "?" );
-        }
-
-        printf( "\n" );
-    }
-
-    if ( g_bRGBValue )
-    {
-        // goto image processing
-        ProcessFrame( pFrame);
-    }
-    else if ( FrameInfos_Show != g_eFrameInfos )
-    {
-        // Print a dot every frame
-        printf( "." );
-    }
-        
-    fflush( stdout );
-    // requeue the frame so it can be filled again
-    VmbCaptureFrameQueue( cameraHandle, pFrame, &FrameCallback );
-
-    ReleaseApiLock();
-}
-
-//
-// Method StartContinuousImageAcquisition
-//
-// Purpose: starts image acquisition on a given camera
-//
-// Parameters:
-//
-// [in]     pCameraId               zero terminated C string with the camera id for the camera to be used
-// [in]     eFrameInfos             enumeration value for the frame infos to show for received frames
-// [in]     bEnableColorProcessing  toggle for enabling image processing, in this case just swapping red with blue
-// [in]     bUseAllocAndAnnounce    toggle for enabling AllocAndAnnouce
-//
-// Note: Vimba has to be uninitialized and the camera has to allow access mode full
-//
-VmbError_t StartContinuousImageAcquisition( const char* pCameraID, FrameInfos eFrameInfos, VmbBool_t bEnableColorProcessing, VmbBool_t bRGBValue, VmbBool_t bUseAllocAndAnnounce )
-{
-    VmbError_t          err                 = VmbErrorSuccess;      // The function result
-    VmbCameraInfo_t     *pCameras           = NULL;                 // A list of camera details
-    VmbUint32_t         nCount              = 0;                    // Number of found cameras
-    VmbUint32_t         nFoundCount         = 0;                    // Change of found cameras
-    VmbAccessMode_t     cameraAccessMode    = VmbAccessModeFull;    // We open the camera with full access
-    VmbBool_t           bIsCommandDone      = VmbBoolFalse;         // Has a command finished execution
-    VmbInt64_t          nPayloadSize        = 0;                    // The size of one frame
-    int                 i                   = 0;                    // Counting variable
-#ifdef WIN32
-    LARGE_INTEGER       nFrequency;
-#endif //WIN32
-
-    if( !g_bVimbaStarted )
-    {
-        // initialize global state
-        g_bStreaming                = VmbBoolFalse;
-        g_bAcquiring                = VmbBoolFalse;
-        g_CameraHandle              = NULL;
-        memset( g_Frames, 0, sizeof( g_Frames ));
-        g_dFrameTime                = 0.0;              
-        g_bFrameTimeValid           = VmbBoolFalse;
-        g_nFrameID                  = 0;
-        g_bFrameIDValid             = VmbBoolFalse;
-        g_eFrameInfos               = eFrameInfos;
-        g_bRGBValue                 = bRGBValue;
-        g_bEnableColorProcessing    = bEnableColorProcessing;
-        g_bUseAllocAndAnnouce       = bUseAllocAndAnnounce;
-
-#ifdef WIN32
-        QueryPerformanceFrequency( &nFrequency );
-        g_dFrequency        = (double)nFrequency.QuadPart;
-#endif  //WIN32
-        // Startup Vimba
-        err = VmbStartup();
-        // Print the version of Vimba
-        PrintVimbaVersion();
-        if ( VmbErrorSuccess == err )
-        {
-            g_bVimbaStarted = VmbBoolTrue;
-
-            // Is Vimba connected to a GigE transport layer?
-            DiscoverGigECameras();
-            
-            // If no camera ID was provided use the first camera found
-            if ( NULL == pCameraID )
-            {
-                // Get the amount of known cameras
-                err = VmbCamerasList( NULL, 0, &nCount, sizeof *pCameras );
-                if (    VmbErrorSuccess == err
-                     && 0 != nCount )
-                {
-                    pCameras = (VmbCameraInfo_t*)malloc( nCount * sizeof( *pCameras ));
-                    if ( NULL != pCameras )
-                    {
-                        // Actually query all static details of all known cameras without having to open the cameras
-                        // If a new camera was connected since we queried the amount of cameras (nFoundCount > nCount) we can ignore that one
-                        err = VmbCamerasList( pCameras, nCount, &nFoundCount, sizeof *pCameras );
-                        if (    VmbErrorSuccess != err
-                             && VmbErrorMoreData != err )
-                        {
-                            printf( "%s Could not list cameras. Error code: %d\n", __FUNCTION__, err );
-                        }
-                        else
-                        {
-                            // Use the first camera
-                            if( nFoundCount != 0)
-                            {
-                                pCameraID = pCameras[0].cameraIdString;
-                            }
-                            else
-                            {
-                                err = VmbErrorNotFound;
-                                printf( "%s camera lost. Error code: %d\n", __FUNCTION__, err );
-                                pCameraID = NULL;
-                            }
-                        }
-
-                        free( pCameras );
-                        pCameras = NULL;
-                    }
-                    else
-                    {
-                        printf( "%s Could not allocate camera list.\n", __FUNCTION__ );
-                    }
-                }
-                else
-                {
-                    printf( "%s Could not list cameras or no cameras present. Error code: %d\n", __FUNCTION__, err );
-                }
-            }
-
-            if ( NULL != pCameraID )
-            {
-                // Open camera
-                err = VmbCameraOpen( pCameraID, cameraAccessMode, &g_CameraHandle );
-                if ( VmbErrorSuccess == err )
-                {
-                    printf("Opening camera with ID: %s\n", pCameraID);
-
-                    // Set the GeV packet size to the highest possible value
-                    // (In this example we do not test whether this cam actually is a GigE cam)
-                    if ( VmbErrorSuccess == VmbFeatureCommandRun( g_CameraHandle, "GVSPAdjustPacketSize" ))
-                    {
-                        do
-                        {
-                            if ( VmbErrorSuccess != VmbFeatureCommandIsDone(    g_CameraHandle,
-                                                                                "GVSPAdjustPacketSize",
-                                                                                &bIsCommandDone ))
-                            {
-                                break;
-                            }
-                        } while ( VmbBoolFalse == bIsCommandDone );
-                    }
-
-                    if ( VmbErrorSuccess == err )
-                    {
-                        // Evaluate frame size
-                        err = VmbFeatureIntGet( g_CameraHandle, "PayloadSize", &nPayloadSize );
-                        if ( VmbErrorSuccess == err )
-                        {
-							for(i = 0; i < NUM_FRAMES; i++)
-							{
-								g_Frames[i].buffer = ( g_bUseAllocAndAnnouce ) ? NULL : (unsigned char*)malloc( (VmbUint32_t)nPayloadSize );
-								g_Frames[i].bufferSize = (VmbUint32_t)nPayloadSize;
-
-								// Announce Frame
-								err = VmbFrameAnnounce( g_CameraHandle, &g_Frames[i], (VmbUint32_t)sizeof( VmbFrame_t ));
-								if ( VmbErrorSuccess != err )
-								{
-									free( g_Frames[i].buffer );
-									memset( &g_Frames[i], 0, sizeof( VmbFrame_t ));
-									break;
-								}
-							}
-
-                            if ( VmbErrorSuccess == err )
-                            {
-                                // Start Capture Engine
-                                err = VmbCaptureStart( g_CameraHandle );
-                                if ( VmbErrorSuccess == err )
-                                {
-                                    g_bStreaming = VmbBoolTrue;
-                                    for( i = 0; i < NUM_FRAMES; i++ )
-                                    {
-                                        // Queue Frame
-                                        err = VmbCaptureFrameQueue( g_CameraHandle, &g_Frames[i], &FrameCallback );
-                                        if ( VmbErrorSuccess != err )
-                                        {
-                                            break;
-                                        }
-                                    }
-
-                                    if ( VmbErrorSuccess == err )
-                                    {
-                                        // Start Acquisition
-                                        err = VmbFeatureCommandRun( g_CameraHandle,"AcquisitionStart" );
-                                        if ( VmbErrorSuccess == err )
-                                        {
-                                            g_bAcquiring = VmbBoolTrue;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-            if( VmbErrorSuccess != err )
-            {
-                StopContinuousImageAcquisition();
-            }
-        }
-    }
-    else
-    {
-        err = VmbErrorOther;
-    }
-
-    return err;
-}
-
-//
-// Method: StopContinuousImageAcquisition
-//
-// Purpose: stops image acquisition that was started with StartContinuousImageAcquisition
-//
-void StopContinuousImageAcquisition()
-{
-    int i = 0;
-
-    if( g_bVimbaStarted )
-    {
-        if( NULL != g_CameraHandle )
-        {
-            if( g_bAcquiring )
-            {
-                // Stop Acquisition
-                VmbFeatureCommandRun( g_CameraHandle, "AcquisitionStop" );
-                g_bAcquiring = VmbBoolFalse;
-            }
-
-            if( g_bStreaming )
-            {
-                // Stop Capture Engine
-                VmbCaptureEnd( g_CameraHandle );
-                g_bStreaming = VmbBoolFalse;
-            }
-
-            // Flush the capture queue
-            VmbCaptureQueueFlush( g_CameraHandle );
-
-            // Ensure that revoking is not interrupted by a dangling frame callback 
-            AquireApiLock();
-            for( i = 0; i < NUM_FRAMES; i++ )
-            {
-                if( NULL != g_Frames[i].buffer )
-                {
-                    VmbFrameRevoke( g_CameraHandle, &g_Frames[i] );
-					if ( !g_bUseAllocAndAnnouce )
-					{
-						free( g_Frames[i].buffer );
-						memset( &g_Frames[i], 0, sizeof( VmbFrame_t ));
-					}
-                }
-            }
-            ReleaseApiLock();
-            // Close camera
-            VmbCameraClose ( g_CameraHandle );
-            g_CameraHandle = NULL;
-        }
-        VmbShutdown();
-        g_bVimbaStarted = VmbBoolFalse;
-#ifdef WIN32
-        CloseHandle( g_hMutex );
-#else
-        pthread_mutex_destroy(&g_Mutex);
-#endif
-    }
-}
-
diff --git a/VimbaC/Examples/AsynchronousGrab/Source/AsynchronousGrab.h b/VimbaC/Examples/AsynchronousGrab/Source/AsynchronousGrab.h
deleted file mode 100644
index 7c4da64540c6c80361b209ca62eec277764049d1..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/AsynchronousGrab/Source/AsynchronousGrab.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        AsynchronousGrab.h
-
-  Description: The AsynchronousGrab example will grab images asynchronously
-               using VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef ASYNCHRONOUS_GRAB_H_
-#define ASYNCHRONOUS_GRAB_H_
-
-#include <VimbaC/Include/VmbCommonTypes.h>
-
-typedef enum FrameInfos
-{
-    FrameInfos_Off,
-    FrameInfos_Show,
-    FrameInfos_Automatic
-} FrameInfos;
-
-VmbError_t StartContinuousImageAcquisition( const char* pCameraID, FrameInfos eFrameInfos, VmbBool_t bEnableColorProcessing, VmbBool_t bRGBValue, VmbBool_t bUseAllocAndAnnounce );
-void StopContinuousImageAcquisition();
-
-VmbBool_t   CreateApiLock();
-void        DestroyApiLock();
-VmbBool_t   AquireApiLock();
-void        ReleaseApiLock();
-
-
-#endif
diff --git a/VimbaC/Examples/AsynchronousGrab/Source/program.c b/VimbaC/Examples/AsynchronousGrab/Source/program.c
deleted file mode 100644
index 1f1edb76d0ef7fc67f93402c3f1eb599bc61dc0b..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/AsynchronousGrab/Source/program.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.c
-
-  Description: Implementation of main entry point of AsynchronousGrab example
-               of VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <string.h>
-
-#include <AsynchronousGrab.h>
-#include "Common/ErrorCodeToMessage.h"
-
-#ifdef WIN32
-#include <windows.h>
-BOOL WINAPI consoleHandler( DWORD signal)
-{
-    switch( signal) 
-    {
-    case CTRL_C_EVENT:
-    case CTRL_CLOSE_EVENT:
-        AquireApiLock();
-        VmbShutdown();
-        ReleaseApiLock();
-    }
-    return TRUE;
-}
-
-#endif
-
-int main( int argc, char* argv[] )
-{
-    VmbError_t      err                     = VmbErrorSuccess;
-
-    char*           pCameraID               = NULL;             // The ID of the camera to use
-    FrameInfos      eFrameInfos             = FrameInfos_Off;   // Show frame infos
-    VmbBool_t       bRGBValue               = VmbBoolFalse;     // Show RGB values 
-    VmbBool_t       bEnableColorProcessing  = VmbBoolFalse;     // Enables color processing of frames
-	VmbBool_t		bUseAllocAndAnnounce    = VmbBoolFalse;		// Enables use of AllocAndAnnounce
-    unsigned char   bPrintHelp              = 0;                // Output help?
-    int             i                       = 0;                // Counter for some iteration
-    char*           pParameter              = NULL;             // The command line parameter
-    CreateApiLock();
-#ifdef WIN32
-    SetConsoleCtrlHandler(consoleHandler,TRUE);
-#endif
-
-    printf( "///////////////////////////////////////////\n" );
-    printf( "/// Vimba API Asynchronous Grab Example ///\n" );
-    printf( "///////////////////////////////////////////\n\n" );
-
-    //////////////////////
-    //Parse command line//
-    //////////////////////
-
-    for( i = 1; i < argc; ++i )
-    {
-        pParameter = argv[i];
-        if( 0 > strlen( pParameter ))
-        {
-            err = VmbErrorBadParameter;
-            break;
-        }
-
-        if( '/' == pParameter[0] )
-        {
-            if( 0 == strcmp( pParameter, "/i" ))
-            {
-                if(     ( FrameInfos_Off != eFrameInfos )
-                    ||  ( bPrintHelp ))
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eFrameInfos = FrameInfos_Show;
-            }
-            else if( 0 == strcmp( pParameter, "/r" ))
-            {
-                if( bPrintHelp )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                bRGBValue = VmbBoolTrue;
-            }
-            else if( 0 == strcmp( pParameter, "/c" ))
-            {
-                if ( bPrintHelp )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                bEnableColorProcessing  = VmbBoolTrue;
-                bRGBValue               = VmbBoolTrue;
-            }
-            else if( 0 == strcmp( pParameter, "/a" ))
-            {
-                if(     ( FrameInfos_Off != eFrameInfos )
-                    ||  ( bPrintHelp ))
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eFrameInfos = FrameInfos_Automatic;
-            }
-            else if( 0 == strcmp( pParameter, "/x" ))
-            {
-                if ( bPrintHelp )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                bUseAllocAndAnnounce  = VmbBoolTrue;
-            }
-            else if( 0 == strcmp( pParameter, "/h" ))
-            {
-                if(     ( NULL != pCameraID )
-                    ||  ( bPrintHelp )
-                    ||  ( VmbBoolFalse   != bEnableColorProcessing )
-                    ||  ( VmbBoolFalse   != bRGBValue )
-                    ||  ( FrameInfos_Off != eFrameInfos ))
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                bPrintHelp = 1;
-            }
-            else
-            {
-                err = VmbErrorBadParameter;
-                break;
-            }
-        }
-        else
-        {
-            if( NULL != pCameraID )
-            {
-                err = VmbErrorBadParameter;
-                break;
-            }
-
-            pCameraID = pParameter;
-        }
-    }
-
-    //Write out an error if we could not parse the command line
-    if ( VmbErrorBadParameter == err )
-    {
-        printf( "Invalid parameters!\n\n" );
-        bPrintHelp = 1;
-    }
-
-    //Print out help and end program
-    if ( bPrintHelp )
-    {
-        printf( "Usage: AsynchronousGrab [CameraID] [/i] [/h]\n" );
-        printf( "Parameters:   CameraID    ID of the camera to use (using first camera if not specified)\n" );
-        printf( "              /r          Convert to RGB and show RGB values\n" );
-        printf( "              /c          Enable color processing (includes /r)\n" );
-        printf( "              /i          Show frame infos\n" );
-        printf( "              /a          Automatically only show frame infos of corrupt frames\n" );
-        printf( "              /x          Use AllocAndAnnounceFrame instead of AnnounceFrame\n" );
-        printf( "              /h          Print out help\n" );
-    }
-    else
-    {
-        err = StartContinuousImageAcquisition( pCameraID, eFrameInfos, bEnableColorProcessing, bRGBValue , bUseAllocAndAnnounce);
-        if ( VmbErrorSuccess == err )
-        {
-           printf( "Press <enter> to stop acquisition...\n" );
-           getchar();
-
-           StopContinuousImageAcquisition();
-        }
-        
-        if ( VmbErrorSuccess == err )
-        {
-            printf( "\nAcquisition stopped.\n" );
-        }
-        else
-        {
-            printf( "\nAn error occurred: %s\n", ErrorCodeToMessage( err ) );
-        }
-    }
-    ReleaseApiLock();
-    return err;
-}
diff --git a/VimbaC/Examples/Bin/x86_64bit/ActionCommands b/VimbaC/Examples/Bin/x86_64bit/ActionCommands
deleted file mode 100755
index 7439a8c95dff95334a3f4263976f59ee1a0556ca..0000000000000000000000000000000000000000
Binary files a/VimbaC/Examples/Bin/x86_64bit/ActionCommands and /dev/null differ
diff --git a/VimbaC/Examples/Bin/x86_64bit/AsynchronousGrab b/VimbaC/Examples/Bin/x86_64bit/AsynchronousGrab
deleted file mode 100755
index c6541cb8a8d5c1001c9a30273d39aa96c1669a2f..0000000000000000000000000000000000000000
Binary files a/VimbaC/Examples/Bin/x86_64bit/AsynchronousGrab and /dev/null differ
diff --git a/VimbaC/Examples/Bin/x86_64bit/ForceIP b/VimbaC/Examples/Bin/x86_64bit/ForceIP
deleted file mode 100755
index 455d3915a111747df3bf1d05f9ce00efaaa2685e..0000000000000000000000000000000000000000
Binary files a/VimbaC/Examples/Bin/x86_64bit/ForceIP and /dev/null differ
diff --git a/VimbaC/Examples/Bin/x86_64bit/ListAncillaryDataFeatures b/VimbaC/Examples/Bin/x86_64bit/ListAncillaryDataFeatures
deleted file mode 100755
index 02799a6a8bcdeb0151a06463df17a92c5e3b27d7..0000000000000000000000000000000000000000
Binary files a/VimbaC/Examples/Bin/x86_64bit/ListAncillaryDataFeatures and /dev/null differ
diff --git a/VimbaC/Examples/Bin/x86_64bit/ListCameras b/VimbaC/Examples/Bin/x86_64bit/ListCameras
deleted file mode 100755
index cdeb92510576663083e0af9d6aef2abde80734f2..0000000000000000000000000000000000000000
Binary files a/VimbaC/Examples/Bin/x86_64bit/ListCameras and /dev/null differ
diff --git a/VimbaC/Examples/Bin/x86_64bit/ListFeatures b/VimbaC/Examples/Bin/x86_64bit/ListFeatures
deleted file mode 100755
index 565b73fb957fdab8b0f1e096081dfd4fed5666ef..0000000000000000000000000000000000000000
Binary files a/VimbaC/Examples/Bin/x86_64bit/ListFeatures and /dev/null differ
diff --git a/VimbaC/Examples/Bin/x86_64bit/LoadSaveSettings b/VimbaC/Examples/Bin/x86_64bit/LoadSaveSettings
deleted file mode 100755
index d24736dfc008b743c224df05afab3e351ce57626..0000000000000000000000000000000000000000
Binary files a/VimbaC/Examples/Bin/x86_64bit/LoadSaveSettings and /dev/null differ
diff --git a/VimbaC/Examples/Bin/x86_64bit/SynchronousGrab b/VimbaC/Examples/Bin/x86_64bit/SynchronousGrab
deleted file mode 100755
index 04752191f5bbf1543cbf21a3f4f3616a64f93e8c..0000000000000000000000000000000000000000
Binary files a/VimbaC/Examples/Bin/x86_64bit/SynchronousGrab and /dev/null differ
diff --git a/VimbaC/Examples/Bin/x86_64bit/libVimbaC.so b/VimbaC/Examples/Bin/x86_64bit/libVimbaC.so
deleted file mode 100644
index 781383deb7c36a92813b8997376e622b6e3e5a96..0000000000000000000000000000000000000000
Binary files a/VimbaC/Examples/Bin/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/VimbaC/Examples/Bin/x86_64bit/libVimbaImageTransform.so b/VimbaC/Examples/Bin/x86_64bit/libVimbaImageTransform.so
deleted file mode 100644
index b01c3977a73d785668f7a031b61125ab956e2ed1..0000000000000000000000000000000000000000
Binary files a/VimbaC/Examples/Bin/x86_64bit/libVimbaImageTransform.so and /dev/null differ
diff --git a/VimbaC/Examples/Build/Make/Common.mk b/VimbaC/Examples/Build/Make/Common.mk
deleted file mode 100644
index a727c58aec3b8621bd0bd4362e5f7111bc49f025..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/Build/Make/Common.mk
+++ /dev/null
@@ -1,100 +0,0 @@
-UNAME		= $(shell uname -m)
-
-ifeq ($(UNAME),i386)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),i486)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),i586)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),i686)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),x86_64)
-ARCH		= x86
-AUTOWORDSIZE	= 64
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),amd64)
-ARCH		= x86
-AUTOWORDSIZE	= 64
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),armv6l)
-ARCH		= arm
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= soft
-endif
-ifeq ($(UNAME),armv7l)
-ARCH		= arm
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= soft
-endif
-ifeq ($(UNAME),aarch64)
-ARCH		= arm
-AUTOWORDSIZE	= 64
-AUTOFLOATABI	= hard
-endif
-
-#Possible word sizes: 32, 64
-WORDSIZE        = $(AUTOWORDSIZE)
-#Possible float abis: soft, hard
-FLOATABI	= $(AUTOFLOATABI)
-
-ifneq ($(WORDSIZE),32)
-ifneq ($(WORDSIZE),64)
-$(error Invalid word size set)
-endif
-endif
-
-ifneq ($(FLOATABI),soft)
-ifneq ($(FLOATABI),hard)
-ifneq ($(FLOATABI),ignore)
-$(error Invalid float abi set)
-endif
-endif
-endif
-
-#Common tools
-PKGCFG          = pkg-config
-MKDIR           = mkdir
-RM              = rm
-CXX             = g++
-MAKE            = make
-CP              = cp
-
-#Set word size on x86
-ifeq ($(ARCH),x86)
-ARCH_CFLAGS     = -m$(WORDSIZE)
-endif
-
-#Configure compiler and linker for soft or hard-float build on ARM
-ifeq ($(ARCH),arm)
-ifeq ($(FLOATABI),soft)
-ARCH_CFLAGS	= -marm -mfloat-abi=soft -march=armv4t
-else ifeq ($(FLOATABI),hard)
-ifeq ($(WORDSIZE),32)
-ARCH_CFLAGS	= -mthumb -mfloat-abi=hard -march=armv7
-else ifeq ($(WORDSIZE),64)
-ARCH_CFLAGS	= -march=armv8-a
-endif
-endif
-endif
-
-ifeq ($(CONFIG),Debug)
-  CONFIG_CFLAGS         = -O0 -g
-else
-  CONFIG_CFLAGS         = -O3
-endif
-
-COMMON_CFLAGS   = $(CONFIG_CFLAGS) $(ARCH_CFLAGS) -fPIC
diff --git a/VimbaC/Examples/Build/Make/Makefile b/VimbaC/Examples/Build/Make/Makefile
deleted file mode 100644
index 0d6473c663eb71983963aa86e5d6be435e6de11c..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/Build/Make/Makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-EXAMPLES_DIR            = ../..
-MAKE_INCLUDE_DIR        = $(CURDIR)
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-EXAMPLES    = ActionCommands \
-              AsynchronousGrab \
-			  ForceIP \
-			  ListCameras \
-			  ListFeatures \
-			  ListAncillaryDataFeatures \
-			  SynchronousGrab \
-              LoadSaveSettings
-
-make_%: $(EXAMPLES_DIR)/%/Build/Make/Makefile
-	$(MAKE) -C $(EXAMPLES_DIR)/$*/Build/Make
-	
-clean_%: $(EXAMPLES_DIR)/%/Build/Make/Makefile
-	$(MAKE) -C $(EXAMPLES_DIR)/$*/Build/Make clean
-
-all: $(foreach example,$(EXAMPLES),make_$(example))
-
-clean: $(foreach example,$(EXAMPLES),clean_$(example))
diff --git a/VimbaC/Examples/Build/Make/VimbaC.mk b/VimbaC/Examples/Build/Make/VimbaC.mk
deleted file mode 100644
index d8bdb00ba39a32e6df445457e79a80f9c1a60f80..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/Build/Make/VimbaC.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-#Compile options needed for VimbaC
-VIMBAC_CFLAGS   = -I$(VIMBASDK_DIR)
-
-#Linker options needed for VimbaC
-VIMBAC_LIBS     = -L$(BIN_DIR) -lVimbaC
-
-#By default we copy libVimbaC.so next to the binary
-$(BIN_DIR)/libVimbaC.so: $(BIN_DIR)
-	$(CP) $(VIMBASDK_DIR)/VimbaC/DynamicLib/$(ARCH)_$(WORDSIZE)bit/libVimbaC.so $(BIN_DIR)/
-	
-#Operations we have to do in order to prepare VimbaC
-VimbaC: $(BIN_DIR)/libVimbaC.so
diff --git a/VimbaC/Examples/Build/Make/VimbaImageTransform.mk b/VimbaC/Examples/Build/Make/VimbaImageTransform.mk
deleted file mode 100644
index 42ab9e6b4b76d366a71f608acb459a6af4f001bb..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/Build/Make/VimbaImageTransform.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-#Compile options needed for VimbaImageTransform
-VIMBAIMAGETRANSFORM_CFLAGS	= -I$(VIMBASDK_DIR)/VimbaImageTransform/Include
-
-#Compile options needed for VimbaImageTransform
-VIMBAIMAGETRANSFORM_LIBS		= -L$(BIN_DIR) -lVimbaImageTransform -Wl,-rpath-link,$(BIN_DIR)
-
-#By default we copy libVimbaImageTransform.so next to the binary
-$(BIN_DIR)/libVimbaImageTransform.so: $(BIN_DIR)
-	$(CP) $(VIMBASDK_DIR)/VimbaImageTransform/DynamicLib/$(ARCH)_$(WORDSIZE)bit/libVimbaImageTransform.so $(BIN_DIR)/
-
-#Operations we have to do in order to prepare VimbaImageTransform
-VimbaImageTransform: $(BIN_DIR)/libVimbaImageTransform.so
diff --git a/VimbaC/Examples/Common/DiscoverGigECameras.c b/VimbaC/Examples/Common/DiscoverGigECameras.c
deleted file mode 100644
index 3abce96db4957440b44d643c6bc65c16375f9871..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/Common/DiscoverGigECameras.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        DiscoverGigECameras.c
-
-  Description: Discover GigE cameras if GigE TL is present.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#ifdef WIN32
-#include <windows.h>
-#else
-#include <unistd.h>
-#endif
-
-#include <VimbaC/Include/VimbaC.h>
-
-#include "DiscoverGigECameras.h"
-
-
-// Purpose: Discovers GigE cameras if GigE TL is present.
-//          Discovery is switched on only once so that the API can detect all currently connected cameras.
-VmbError_t DiscoverGigECameras()
-{
-    VmbError_t  err     = VmbErrorSuccess;
-    VmbBool_t   isGigE  = VmbBoolFalse;
-
-    err = VmbFeatureBoolGet( gVimbaHandle, "GeVTLIsPresent", &isGigE );                 // Is Vimba connected to a GigE transport layer?
-    if ( VmbErrorSuccess == err )
-    {
-        if( VmbBoolTrue == isGigE )
-        {
-            err = VmbFeatureIntSet( gVimbaHandle, "GeVDiscoveryAllDuration", 250 );     // Set the waiting duration for discovery packets to return. If not set the default of 150 ms is used.
-            if( VmbErrorSuccess == err )
-            {
-                err = VmbFeatureCommandRun( gVimbaHandle, "GeVDiscoveryAllOnce" );      // Send discovery packets to GigE cameras and wait 250 ms until they are answered
-                if( VmbErrorSuccess != err )
-                {
-                    printf( "Could not ping GigE cameras over the network. Reason: %d\n", err );
-                }
-            }
-            else
-            {
-                printf( "Could not set the discovery waiting duration. Reason: %d\n", err );
-            }
-        }
-    }
-    else
-    {
-        printf( "Could not query Vimba for the presence of a GigE transport layer. Reason: %d\n\n", err );
-    }
-
-    return err;
-}
diff --git a/VimbaC/Examples/Common/DiscoverGigECameras.h b/VimbaC/Examples/Common/DiscoverGigECameras.h
deleted file mode 100644
index f26225f53123bb78b30d8e72b15c941006710fb1..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/Common/DiscoverGigECameras.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        DiscoverGigECameras.h
-
-  Description: Discover GigE cameras if GigE TL is present.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef DISCOVER_GIGE_CAMERAS_H_
-#define DISCOVER_GIGE_CAMERAS_H_
-
-#include <VimbaC/Include/VimbaC.h>
-
-// Purpose: Discovers GigE cameras if GigE TL is present.
-//          Discovery is switched on only once so that the API can detect all currently connected cameras.
-VmbError_t DiscoverGigECameras();
-
-#endif
diff --git a/VimbaC/Examples/Common/ErrorCodeToMessage.c b/VimbaC/Examples/Common/ErrorCodeToMessage.c
deleted file mode 100644
index 0919e23b892d0b84d5d7897bca701df2d4861e97..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/Common/ErrorCodeToMessage.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ErrorCodeToMessage.h
-
-  Description: Convert the error codes to a self-explanatory message.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "ErrorCodeToMessage.h"
-
-//
-// Translates Vimba error codes to readable error messages
-//
-// Parameters:
-//  [in]    eError      The error code to be converted to string
-//
-// Returns:
-//  A descriptive string representation of the error code
-//
-const char* ErrorCodeToMessage( VmbError_t eError )
-{
-
-    switch(eError)
-    {
-    case VmbErrorSuccess:           return "Success.";
-    case VmbErrorInternalFault:     return "Unexpected fault in VmbApi or driver.";
-    case VmbErrorApiNotStarted:     return "API not started.";
-    case VmbErrorNotFound:          return "Not found.";
-    case VmbErrorBadHandle:         return "Invalid handle ";
-    case VmbErrorDeviceNotOpen:     return "Device not open.";
-    case VmbErrorInvalidAccess:     return "Invalid access.";
-    case VmbErrorBadParameter:      return "Bad parameter.";
-    case VmbErrorStructSize:        return "Wrong DLL version.";
-    case VmbErrorMoreData:          return "More data returned than memory provided.";
-    case VmbErrorWrongType:         return "Wrong type.";
-    case VmbErrorInvalidValue:      return "Invalid value.";
-    case VmbErrorTimeout:           return "Timeout.";
-    case VmbErrorOther:             return "TL error.";
-    case VmbErrorResources:         return "Resource not available.";
-    case VmbErrorInvalidCall:       return "Invalid call.";
-    case VmbErrorNoTL:              return "TL not loaded.";
-    case VmbErrorNotImplemented:    return "Not implemented.";
-    case VmbErrorNotSupported:      return "Not supported.";
-    default:                        return "Unknown";
-    }
-}
-
diff --git a/VimbaC/Examples/Common/ErrorCodeToMessage.h b/VimbaC/Examples/Common/ErrorCodeToMessage.h
deleted file mode 100644
index 95c5a8662a7fac245dcb0a3874fdfa9025d791c3..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/Common/ErrorCodeToMessage.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ErrorCodeToMessage.h
-
-  Description: Convert the error codes to a self-explanatory message.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef ERROR_CODE_TO_MESSAGE_H_
-#define ERROR_CODE_TO_MESSAGE_H_
-    
-#include "VimbaC/Include/VimbaC.h"
-
-//
-// Translates Vimba error codes to readable error messages
-//
-// Parameters:
-//  [in]    eError      The error code to be converted to string
-//
-// Returns:
-//  A descriptive string representation of the error code
-//
-const char* ErrorCodeToMessage( VmbError_t eError );
-
-#endif
\ No newline at end of file
diff --git a/VimbaC/Examples/Common/PrintVimbaVersion.c b/VimbaC/Examples/Common/PrintVimbaVersion.c
deleted file mode 100644
index 9627eceec4b31947215d997b4f07ec95acf68ac3..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/Common/PrintVimbaVersion.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        PrintVimbaVersion.h
-
-  Description: Print Vimba version.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "PrintVimbaVersion.h"
-#include <stdio.h>
-#include <VimbaC/Include/VimbaC.h>
-
-//
-// Prints out the version of the Vimba API
-//
-void PrintVimbaVersion()
-{
-    VmbVersionInfo_t    version_info;
-    VmbError_t          result = VmbVersionQuery( &version_info, sizeof( version_info ));
-    if( VmbErrorSuccess == result)
-    {
-        printf( "Vimba Version Major: %u Minor: %u Patch: %u\n", version_info.major, version_info.minor,version_info.patch );
-    }
-    else
-    {
-        printf( "VmbVersionQuery failed with Reason: %x\n", result );
-    }
-}
-
-
diff --git a/VimbaC/Examples/Common/PrintVimbaVersion.h b/VimbaC/Examples/Common/PrintVimbaVersion.h
deleted file mode 100644
index a34821130f2cbd816e402d8ddd0f3048fa43c69f..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/Common/PrintVimbaVersion.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        PrintVimbaVersion.h
-
-  Description: Print Vimba version.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef PRINT_VIMBA_VERSION_H_
-#define PRINT_VIMBA_VERSION_H_
-
-//
-// Prints out the version of the Vimba API
-//
-void PrintVimbaVersion();
-
-#endif
\ No newline at end of file
diff --git a/VimbaC/Examples/ForceIP/Build/Make/Makefile b/VimbaC/Examples/ForceIP/Build/Make/Makefile
deleted file mode 100644
index d5c306955db8f4fce745e44e4add66d9a85a119d..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ForceIP/Build/Make/Makefile
+++ /dev/null
@@ -1,58 +0,0 @@
-PROJECT_NAME            = ForceIP
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR		= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaC.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-COMMON_DIR          = $(EXAMPLES_DIR)/Common
-
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBAC_LIBS)
-
-DEFINES             = -D_LITTLE_ENDIAN
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBAC_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ForceIP.o \
-                      $(OBJ_DIR)/program.o \
-                      $(OBJ_DIR)/PrintVimbaVersion.o \
-                      $(OBJ_DIR)/ErrorCodeToMessage.o \
-                      $(OBJ_DIR)/DiscoverGigECameras.o
-
-DEPENDENCIES        = VimbaC
-
-$(OBJ_DIR)/%.o: $(COMMON_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
diff --git a/VimbaC/Examples/ForceIP/Source/ForceIP.c b/VimbaC/Examples/ForceIP/Source/ForceIP.c
deleted file mode 100644
index 14a91d099ed11e5b8f92af1577b575ee65b6db85..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ForceIP/Source/ForceIP.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2020 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ForceIP.h
-
-  Description: The ForceIP example will assign an IP address to a camera
-               that is identified by its MAC address. It utilizes only
-               GenTL features. This approach is useful when a camera has
-               an invalid IP configuration and cannot be accessed through
-               the network anymore.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifdef WIN32
-    #include <windows.h>
-#else
-    #include <unistd.h>
-    #include <arpa/inet.h>
-#endif
-
-#include <ForceIP.h>
-
-#include <VimbaC/Include/VimbaC.h>
-#include "../../Common/PrintVimbaVersion.h"
-
-//
-// Converts a hexadecimal MAC address into its decimal representation.
-// Leaves decimal addresses untouched.
-//
-// Parameters:
-//  [in]    strMAC          The hexadecimal (with preceding 0x) or decimal MAC 
-//                          address to be converted to decimal. As string.
-//
-// Returns:
-//  0 in case of error
-//  The decimal representation of the MAC address on success as integer
-//
-unsigned long long mac_addr( const char* strMAC )
-{
-    unsigned long long nMAC;
-
-    if (    sscanf( strMAC, "0x%llx", &nMAC )
-         || sscanf( strMAC, "%lld", &nMAC ))
-    {
-        return nMAC;
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-// Converts a IP address string into its decimal representation.
-//
-// Parameters:
-//  [in]    strIP           The string representation of the IP
-//
-//  Returns:
-//  The decimal representation of the IP address as integer.
-//
-unsigned int ip_addr( const char* strIP )
-{
-    unsigned long ip = inet_addr( strIP );
-
-    #ifdef _LITTLE_ENDIAN
-        ip = ntohl( ip );
-    #endif
-
-    return ip;
-}
-
-// Sleeps for the given seconds.
-//
-// Parameters:
-//  [in]    seconds         The number of seconds to sleep
-//
-void SleepForSeconds( const unsigned int seconds)
-{
-    #ifdef WIN32
-        Sleep(1000 * seconds);
-    #else
-        sleep(seconds);
-    #endif
-}
-
-
-//
-// Starts Vimba API
-// Seeks a GigE camera by its MAC address on the network
-// Sets the found camera's 
-// - IP address
-// - subnet mask
-// - gateway
-//
-// Parameters:
-//  [in]    strMAC          The MAC address of the camera to work on in decimal
-//                          or hex (with preceding 0x) representation
-//  [in]    strIP           The desired IP address for the camera
-//  [in]    strSubnet       The desired subnet mask of the IP address
-//  [in]    strGateway      The desired gateway. Optional, can be 0
-//
-void ForceIP( char* strMAC, char* strIP, char* strSubnet, char* strGateway )
-{
-    VmbError_t          err             = VmbErrorSuccess;
-    VmbBool_t           bIsGigE         = 0;
-    VmbHandle_t         hCam            = NULL;
-    unsigned long long  nMAC            = 0;
-    unsigned long       nIP             = 0;
-    unsigned long       nSubnet         = 0;
-    unsigned long       nGateway        = 0;
-    
-    err = VmbStartup();                                                                                                     // Initialize the Vimba API
-    PrintVimbaVersion();                                                                                                    // Print Vimba Version
-    nMAC            = mac_addr( strMAC );                                                                                   // The MAC address of the camera
-    nIP             = ip_addr( strIP );                                                                                     // The future IP address of the camera
-    nSubnet         = ip_addr( strSubnet );                                                                                 // The future subnet mask of the camera
-    nGateway        = strGateway != NULL ? ip_addr( strGateway ) : 0;                                                       // A possible gateway
-
-    if ( VmbErrorSuccess == err )
-    {
-        err = VmbFeatureBoolGet( gVimbaHandle, "GeVTLIsPresent", &bIsGigE );                                                // Is Vimba connected to a GigE transport layer?
-        if ( VmbErrorSuccess == err )
-        {
-            if( bIsGigE )
-            {
-                if ( 0 != nMAC )
-                {
-                    err = VmbFeatureIntSet( gVimbaHandle, "GevDeviceForceMACAddress", nMAC );                               // Send MAC address to TL
-                    if ( VmbErrorSuccess == err )
-                    {
-                        err = VmbFeatureIntSet( gVimbaHandle, "GevDeviceForceIPAddress", nIP );                             // Send new IP address to TL
-                        if ( VmbErrorSuccess == err )
-                        {
-                            err = VmbFeatureIntSet( gVimbaHandle, "GevDeviceForceSubnetMask", nSubnet );                    // Send new subnet mask to TL
-                            if ( VmbErrorSuccess == err )
-                            {
-                                if( 0 != nGateway )
-                                {
-                                    err = VmbFeatureIntSet( gVimbaHandle, "GevDeviceForceGateway", nGateway );              // Send gateway address to TL
-                                    if ( VmbErrorSuccess != err )
-                                    {
-                                        printf( "Could not prepare the gateway settings. Reason: %d\n\n", err );
-                                    }
-                                }
-
-                                if ( VmbErrorSuccess == err )
-                                {
-                                    err = VmbFeatureCommandRun( gVimbaHandle, "GevDeviceForceIP" );                         // Finally execute the command to write all settings to cam
-                                    if ( VmbErrorSuccess == err )
-                                    {
-                                        VmbBool_t       isDone        = 0;
-                                        unsigned int    retryCount = 0;
-                                        do
-                                        {
-                                            SleepForSeconds(1);
-                                            err = VmbFeatureCommandIsDone( gVimbaHandle, "GevDeviceForceIP", &isDone);      // Check if the command is accepted by the camera
-                                        }
-                                        while(retryCount++, isDone == VmbBoolFalse && err == VmbErrorSuccess && retryCount < 5);
-
-                                        if( isDone == VmbBoolTrue)
-                                        {
-                                            printf("ForceIP command sent successfully to the camera\n");
-                                        }
-                                        else
-                                        {
-                                            printf("ForceIP command could not be completed\n");
-                                        }
-                                    }
-                                    else
-                                    {
-                                        printf( "Could not set a new IP address. Reason: %d\n\n", err );
-                                    }
-                                }
-                            }
-                            else
-                            {
-                                printf( "Could not prepare the subnet settings. Reason: %d\n\n", err );
-                            }
-                        }
-                        else
-                        {
-                            printf( "Could not prepare the IP address settings. Reason: %d\n\n", err );
-                        }
-                    }
-                    else
-                    {
-                        printf( "Could not prepare the MAC address settings. Reason: %d\n\n", err );
-                    }
-                }
-                else
-                {
-                    printf( "Malformed MAC address.\n\n" );
-                }
-            }
-            else
-            {
-                printf( "No GigE transport layer present.\n\n" );
-            }
-        }
-        else
-        {
-            printf( "Could not query Vimba for the presence of a GigE transport layer. Reason: %d\n\n", err );
-        }
-
-        VmbShutdown();                                                                                                      // Close Vimba
-    }
-    else
-    {
-        printf( "Could not start system. Error code: %d\n\n", err );
-    }
-}
diff --git a/VimbaC/Examples/ForceIP/Source/ForceIP.h b/VimbaC/Examples/ForceIP/Source/ForceIP.h
deleted file mode 100644
index 7f2f3914e8590bb1365486d7a083ac5ba5cef514..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ForceIP/Source/ForceIP.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ForceIP.h
-
-  Description: The ForceIP example will assign an IP address to a camera
-               that is identified by its MAC address. It utilizes only
-               GenTL features. This approach is useful when a camera has
-               an invalid IP configuration and cannot be accessed through
-               the network anymore.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef FORCE_IP_H_
-#define FORCE_IP_H_
-
-//
-// Starts Vimba API
-// Seeks a GigE camera by its MAC address on the network
-// Sets the found camera's 
-// - IP address
-// - subnet mask
-// - gateway
-//
-// Parameters:
-//  [in]    strMAC          The MAC address of the camera to work on in decimal
-//                          or hex (with preceding 0x) representation
-//  [in]    strIP           The desired IP address for the camera
-//  [in]    strSubnet       The desired subnet mask of the IP address
-//  [in]    strGateway      The desired gateway. Optional, can be 0
-//
-void ForceIP( char* strMAC, char* strIP, char* strSubnet, char* strGateway );
-
-#endif
diff --git a/VimbaC/Examples/ForceIP/Source/program.c b/VimbaC/Examples/ForceIP/Source/program.c
deleted file mode 100644
index 5b1be7e30eae97338c84e66e5ecd97a9d7df7afc..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ForceIP/Source/program.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2020 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of ForceIP example of VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <string.h>
-#ifndef WIN32
-    #include <arpa/inet.h>
-#else
-    #include <windows.h>
-#endif
-
-#include <ForceIP.h>
-
-int main( int argc, char* argv[] )
-{
-    printf( "\n//////////////////////////////////\n" );
-    printf( "/// Vimba API Force IP Example ///\n" );
-    printf( "//////////////////////////////////\n\n" );
-
-    if(     4 > argc
-        ||  5 < argc )
-    {
-        printf( "Usage: ForceIP MAC IP Subnet [Gateway]\n\n" );
-        printf( "Parameters:\n" );
-        printf( "MAC      The MAC address of the camera whose IP address shall be changed.\n" );
-        printf( "         Either hexadecimal with preceding 0x or decimal.\n" );
-        printf( "IP       The new IPv4 address of the camera in numbers and dots notation.\n" );
-        printf( "Subnet   The new network mask of the camera in numbers and dots notation.\n" );
-        printf( "Gateway  The address of a possible gateway if the camera is not connected\n" );
-        printf( "         to the host PC directly.\n\n" );
-        printf( "For example to change the IP address of a camera with the MAC address 0x0F3101D540\nto 169.254.1.1 in a class B network call:\n\n" );
-        printf( "ForceIP 0x0F3101D540 169.254.1.1 255.255.0.0\n\n" );
-#ifndef WIN32
-        printf( "To alter cameras in foreign subnets run the program with sudo -E / su -m. \n\n" );
-#endif
-    }
-    else
-    {
-        ForceIP( argv[1], argv[2], argv[3], argc == 5 ? argv[4] : NULL );
-    }
-
-    return 0;
-}
diff --git a/VimbaC/Examples/ListAncillaryDataFeatures/Build/Make/Makefile b/VimbaC/Examples/ListAncillaryDataFeatures/Build/Make/Makefile
deleted file mode 100644
index 2e5d1d12fcee2b6b8f726ea30bdca79b22570054..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListAncillaryDataFeatures/Build/Make/Makefile
+++ /dev/null
@@ -1,58 +0,0 @@
-PROJECT_NAME            = ListAncillaryDataFeatures
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaC.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-COMMON_DIR          = $(EXAMPLES_DIR)/Common
-
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBAC_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBAC_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ListAncillaryDataFeatures.o \
-                      $(OBJ_DIR)/program.o \
-                      $(OBJ_DIR)/PrintVimbaVersion.o \
-                      $(OBJ_DIR)/ErrorCodeToMessage.o \
-                      $(OBJ_DIR)/DiscoverGigECameras.o
-
-DEPENDENCIES        = VimbaC
-
-$(OBJ_DIR)/%.o: $(COMMON_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaC/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.c b/VimbaC/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.c
deleted file mode 100644
index 1153ec0c0a6af10b9d806eaa2d0664801478365a..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.c
+++ /dev/null
@@ -1,389 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:         ListAncillaryDataFeatures.c
-
-  Description:  The ListAncillaryDataFeatures example will list all available
-                features of the ancillary data that are found by VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef WIN32
-    #include <Windows.h>
-#else
-    #include <unistd.h>
-#endif
-
-#include <ListAncillaryDataFeatures.h>
-
-#include <VimbaC/Include/VimbaC.h>
-#include <../../Common/PrintVimbaVersion.h>
-#include <../../Common/DiscoverGigECameras.h>
-
-// Purpose: Fetches features from the ancillary data. Ancillary data is part of a frame,
-//          therefore we need to capture a single frame beforehand.
-//          If no camera ID string was passed we use the first camera found.
-//
-// Parameter:
-// [in ]    const char* pStrID          The ID of the camera to use. May be NULL.
-void ListAncillaryDataFeatures( const char* pStrID )
-{
-    VmbError_t          err                 = VmbErrorSuccess;
-    VmbHandle_t         cameraHandle        = NULL;                                                             // A handle to our camera
-    VmbHandle_t         ancillaryDataHandle = NULL;                                                             // A handle to ancillary data
-    VmbCameraInfo_t*    pCameras            = NULL;                                                             // A list of camera infos
-    VmbUint32_t         count               = 0;                                                                // The number of found cameras
-    VmbFeatureInfo_t*   pFeatures           = NULL;                                                             // A list of ancillary data features
-    VmbFrame_t          frame;                                                                                  // A single frame
-    VmbInt64_t          pls                 = 0;                                                                // The payload size of a frame
-    VmbCameraInfo_t     info;                                                                                   // The name and other information of our camera
-    VmbBool_t           bIsCommandDone      = VmbBoolFalse;                                                     // Has a command finished execution
-    // The volatile value of a feature
-    double              doubleValue         = 0.0;                                                              // A float value
-    char*               pStringValue        = NULL;                                                             // A string value
-    VmbBool_t           boolValue           = VmbBoolFalse;                                                     // A bool value
-    VmbInt64_t          intValue            = 0;                                                                // An int value
-    VmbUint32_t         i                   = 0;
-
-    err = VmbStartup();                                                                                         // Initialize the Vimba API
-    PrintVimbaVersion();                                                                                        // Print Vimba Version
-    if (VmbErrorSuccess == err)
-    {
-        DiscoverGigECameras();                                                                                  // Seek for GigE cameras on the network
-
-        if( NULL == pStrID )                                                                                    // If no ID was provided use the first camera
-        {
-            err = VmbCamerasList (  NULL,                                                                       // Get the amount of known cameras
-                                    0,
-                                    &count,
-                                    sizeof *pCameras );
-            if(     VmbErrorSuccess == err
-                &&  0 < count )
-            {
-                pCameras = (VmbCameraInfo_t*)malloc( count * sizeof *pCameras );
-                if( NULL != pCameras )
-                {
-                    err = VmbCamerasList(   pCameras,                                                           // Get all known cameras
-                                            count,
-                                            &count,
-                                            sizeof *pCameras );
-                    if(     VmbErrorSuccess == err
-                        ||  VmbErrorMoreData == err )                                                           // If a new camera was connected since we queried
-                    {                                                                                           // for the amount of cameras, we can ignore that one
-                        if( 0 < count )
-                        {
-                            info = pCameras[0];                                                                 // Copy the camera info of the camera we will use
-                            err = VmbCameraOpen(    pCameras[0].cameraIdString,                                 // Finally open the first one
-                                                    VmbAccessModeFull,
-                                                    &cameraHandle );
-                        }
-                        else
-                        {
-                            printf( "Camera lost. Error code: %d\n", err );
-                        }
-                    }
-                    else
-                    {
-                        printf( "Could not list cameras. Error code: %d\n", err );
-                    }
-
-                    free( pCameras );
-                    pCameras = NULL;
-                }
-                else
-                {
-                    printf( "Could not allocate camera list.\n" );
-                }
-            }
-            else
-            {
-                printf( "Could not list cameras or no cameras present. Error code: %d\n", err );
-            }
-        }
-        else
-        {
-            err = VmbCameraOpen(    pStrID,                                                                     // Open the camera with the given ID
-                                    VmbAccessModeFull,
-                                    &cameraHandle );
-        }
-
-        if ( NULL != cameraHandle )
-        {
-            if( VmbErrorSuccess == err )
-            {
-                if ( NULL != pStrID )
-                {
-                    err = VmbCameraInfoQuery( pStrID, &info, sizeof( VmbCameraInfo_t ) );                       // If we haven't queried the camera info yet, we do it now to display the camera name
-                }
-
-                if ( VmbErrorSuccess == err )
-                {
-                    printf( "Using camera %s\n", info.cameraName );
-
-                    err = VmbFeatureBoolSet( cameraHandle, "ChunkModeActive", VmbBoolTrue );                    // Enable ancillary data
-                    if( VmbErrorSuccess == err )
-                    {
-                        // Set the GeV packet size to the highest possible value
-                        // (In this example we do not test whether this cam actually is a GigE cam)
-                        if ( VmbErrorSuccess == VmbFeatureCommandRun( cameraHandle, "GVSPAdjustPacketSize" ))
-                        {
-                            printf( "Adjusting packet size " );                                                 // Set the highest possible packet size
-                            do
-                            {
-                                if ( VmbErrorSuccess != VmbFeatureCommandIsDone(    cameraHandle,
-                                                                                    "GVSPAdjustPacketSize",
-                                                                                    &bIsCommandDone ))
-                                {
-                                    break;
-                                }
-#ifdef WIN32
-                                Sleep(200);
-#else
-                                usleep(200000);
-#endif
-                                printf( "." );
-                            } while ( VmbBoolFalse == bIsCommandDone );
-                        }
-
-                        printf( "\nCapture a single frame\n" );                                                 // In order to fill the ancillary data we need to fill a frame
-
-                        err = VmbFeatureIntGet( cameraHandle, "PayloadSize", &pls );
-                        if( VmbErrorSuccess == err )
-                        {
-                            frame.bufferSize = (VmbUint32_t)pls;
-                            frame.buffer = malloc( (VmbUint32_t)pls * sizeof(unsigned char) );
-                            if ( NULL != frame.buffer )
-                            {
-                                err = VmbFrameAnnounce( cameraHandle, &frame, sizeof(VmbFrame_t));
-                                if( VmbErrorSuccess == err)
-                                {
-                                    err = VmbCaptureStart ( cameraHandle );
-                                    if( VmbErrorSuccess == err )
-                                    {
-                                        err = VmbCaptureFrameQueue( cameraHandle, &frame, NULL );
-                                        if( VmbErrorSuccess == err )
-                                        {
-                                            err = VmbFeatureCommandRun( cameraHandle, "AcquisitionStart" );
-                                            if( VmbErrorSuccess == err )
-                                            {
-                                                err = VmbCaptureFrameWait( cameraHandle, &frame, 1000 );
-                                                if( VmbErrorSuccess == err )
-                                                {
-                                                    if( VmbFrameStatusComplete == frame.receiveStatus )
-                                                    {
-                                                        err = VmbAncillaryDataOpen( &frame, &ancillaryDataHandle );
-                                                        if( VmbErrorSuccess == err )
-                                                        {
-                                                            // Query all static details as well as the value of all fetched ancillary data features and print them out.
-                                                            err = VmbFeaturesList(  ancillaryDataHandle,            // Get the amount of features
-                                                                                    NULL,
-                                                                                    0,
-                                                                                    &count,
-                                                                                    sizeof *pFeatures );
-                                                            if (    VmbErrorSuccess == err
-                                                                 && 0 < count )
-                                                            {
-                                                                pFeatures = (VmbFeatureInfo_t *)malloc( count * sizeof *pFeatures );
-                                                                if( NULL != pFeatures )
-                                                                {
-                                                                    err = VmbFeaturesList(  ancillaryDataHandle,    // Get the features
-                                                                                            pFeatures,
-                                                                                            count,
-                                                                                            &count,
-                                                                                            sizeof *pFeatures   );
-                                                                    if( VmbErrorSuccess == err )
-                                                                    {
-                                                                        for( i=0; i<count; ++i )
-                                                                        {
-                                                                            printf( "/// Feature Name: %s\n", ( NULL == pFeatures[i].name ? "" : pFeatures[i].name ));
-                                                                            printf( "/// Display Name: %s\n", ( NULL == pFeatures[i].displayName ? "" : pFeatures[i].displayName ));
-                                                                            printf( "/// Tooltip: %s\n", ( NULL == pFeatures[i].tooltip ? "" : pFeatures[i].tooltip ));
-                                                                            printf( "/// Description: %s\n", ( NULL == pFeatures[i].description ? "" : pFeatures[i].description ));
-                                                                            printf( "/// SNFC Namespace: %s\n", ( NULL == pFeatures[i].sfncNamespace ? "" : pFeatures[i].sfncNamespace ));
-                                                                            printf( "/// Value: " );
-
-                                                                            switch( pFeatures[i].featureDataType )
-                                                                            {
-                                                                            case VmbFeatureDataBool:
-                                                                                err = VmbFeatureBoolGet( ancillaryDataHandle, pFeatures[i].name, &boolValue );
-                                                                                if( VmbErrorSuccess == err )
-                                                                                {
-                                                                                    printf( "%d\n", boolValue );
-                                                                                }
-                                                                                break;
-                                                                            case VmbFeatureDataEnum:
-                                                                                err = VmbFeatureEnumGet( ancillaryDataHandle, pFeatures[i].name, (const char**)&pStringValue );
-                                                                                if ( VmbErrorSuccess == err )
-                                                                                {
-                                                                                    printf( "%s\n", pStringValue );
-                                                                                }
-                                                                                break;
-                                                                            case VmbFeatureDataFloat:
-                                                                                err = VmbFeatureFloatGet( ancillaryDataHandle, pFeatures[i].name, &doubleValue );
-                                                                                {
-                                                                                    printf( "%f\n", doubleValue );
-                                                                                }
-                                                                                break;
-                                                                            case VmbFeatureDataInt:
-                                                                                err = VmbFeatureIntGet( ancillaryDataHandle, pFeatures[i].name, &intValue );
-                                                                                {
-                                                                                    printf( "%lld\n", intValue );
-                                                                                }
-                                                                                break;
-                                                                            case VmbFeatureDataString:
-                                                                                {
-                                                                                    VmbUint32_t size = 0;
-                                                                                    err = VmbFeatureStringGet( ancillaryDataHandle, pFeatures[i].name, NULL, 0, &size );
-                                                                                    if(     VmbErrorSuccess == err
-                                                                                        &&  0 < size )
-                                                                                    {
-                                                                                        pStringValue = (char*)malloc( sizeof *pStringValue * (VmbUint32_t)intValue );
-                                                                                        if( NULL != pStringValue )
-                                                                                        {
-                                                                                            err = VmbFeatureStringGet( ancillaryDataHandle, pFeatures[i].name, pStringValue, size, &size );
-                                                                                            if( VmbErrorSuccess == err )
-                                                                                            {
-                                                                                                printf( "%s\n", pStringValue );
-                                                                                            }
-                                                                                            free( pStringValue );
-                                                                                            pStringValue = NULL;
-                                                                                        }
-                                                                                        else
-                                                                                        {
-                                                                                            printf( "Could not allocate string.\n" );
-                                                                                        }
-                                                                                    }
-                                                                                }
-                                                                                break;
-                                                                            case VmbFeatureDataCommand:
-                                                                            default:
-                                                                                printf( "[None]\n" );
-                                                                                break;
-                                                                            }
-
-                                                                            if( VmbErrorSuccess != err )
-                                                                            {
-                                                                                printf( "Could not get feature value. Error code: %d\n", err );
-                                                                            }
-
-                                                                            printf ( "\n" );
-                                                                        }
-                                                                    }
-                                                                    else
-                                                                    {
-                                                                        printf( "Could not get features. Error code: %d\n", err );
-                                                                    }
-
-                                                                    free( pFeatures );
-                                                                    pFeatures = NULL;
-                                                                }
-                                                                else
-                                                                {
-                                                                    printf( "Could not allocate feature list.\n" );
-                                                                }
-                                                            }
-                                                            else
-                                                            {
-                                                                printf( "Could not get features or the ancillary data does not provide any. Error code: %d\n", err );
-                                                            }
-                                                        }
-                                                        else
-                                                        {
-                                                            printf( "Could not open ancillary data. Error code: %d\n", err );
-                                                        }
-                                                    }
-                                                    else
-                                                    {
-                                                        printf( "Captured frame is not complete. Cannot access ancillary data. Frame status: %d.\n(GigE: Are jumbo packets enabled?)\n", frame.receiveStatus );
-                                                    }
-                                                }
-                                                else
-                                                {
-                                                    printf( "Could not capture frame. Error code: %d\n", err );
-                                                }
-                                                free( frame.buffer );
-                                                frame.buffer = NULL;
-                                            }
-                                            else
-                                            {
-                                                printf( "Could not start acquisition on the camera. Error code: %d\n", err );
-                                            }
-                                        }
-                                        else
-                                        {
-                                            printf( "Could not queue frame. Error code: %d\n", err );
-                                        }
-                                    }
-                                    else
-                                    {
-                                        printf( "Could not start capture engine on the host. Error code: %d\n", err );
-                                    }
-                                }
-                                else
-                                {
-                                    printf( "Could not announce frame. Error code: %d\n", err );
-                                }
-                            }
-                            else
-                            {
-                                printf( "Could not allocate image buffer.\n" );
-                            }
-                        }
-                        else
-                        {
-                            printf( "Could not get payload size. Cannot acquire frame. Error code: %d\n", err );
-                        }
-                    }
-                    else if( VmbErrorNotFound == err )
-                    {
-                        printf( "The camera does not provide ancillary data. Error code: %d\n", err );
-                    }
-                    else
-                    {
-                        printf( "Could not query for the presence of ancillary data. Error code: %d\n", err );
-                    }
-                }
-                else
-                {
-                    printf( "Could not query the camera's name. Error code: %d\n", err );
-                }
-
-                VmbCameraClose( cameraHandle );                                                                 // Close the camera
-            }
-            else
-            {
-                printf( "Could not open camera. Error code: %d\n", err );
-            }
-        }
-        else
-        {
-            printf( "No cameras present.\n" );
-        }
-        
-        VmbShutdown();                                                                                          // Close Vimba
-    }
-    else
-    {
-        printf( "Could not start system. Error code: %d\n", err );
-    }
-}
diff --git a/VimbaC/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.h b/VimbaC/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.h
deleted file mode 100644
index 3d62a48b02e3573896e1aa134534b160fd81bade..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:         ListAncillaryDataFeatures.h
-
-  Description:  The ListAncillaryDataFeatures example will list all available
-                features of a camera that are found by VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef LIST_ANCILLARY_DATA_FEATURES_H_
-#define LIST_ANCILLARY_DATA_FEATURES_H_
-
-// Purpose: Fetches features from the ancillary data. Ancillary data is part of a frame,
-//          therefore we need to capture a single frame beforehand.
-//          If no camera ID string was passed we use the first camera found.
-//
-// Parameter:
-// [in ]    const char* pStrID          The ID of the camera to use. May be NULL.
-void ListAncillaryDataFeatures( const char* pStrID );
-
-#endif
diff --git a/VimbaC/Examples/ListAncillaryDataFeatures/Source/program.c b/VimbaC/Examples/ListAncillaryDataFeatures/Source/program.c
deleted file mode 100644
index 92b6ca338013f2e92d82956fa9854fb0198936a6..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListAncillaryDataFeatures/Source/program.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.c
-
-  Description: Main entry point of ListAncillaryDataFeatures example of VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-
-#include <ListAncillaryDataFeatures.h>
-
-int main( int argc, char* argv[] )
-{
-    printf( "\n" );
-    printf( "//////////////////////////////////////////////////////\n" );
-    printf( "/// Vimba API List Ancillary Data Features Example ///\n" );
-    printf( "//////////////////////////////////////////////////////\n" );
-    printf( "\n" );
-
-    if( 2 < argc )
-    {
-        printf( "Usage: ListAncillaryDataFeatures [CameraID]\n\n" );
-        printf( "Parameters:   CameraID    ID of the camera to use (using first camera if not specified)\n" );
-    }
-    else if( 2 == argc )
-    {
-        ListAncillaryDataFeatures( (const char*)argv[1] );
-    }
-    else
-    {
-        ListAncillaryDataFeatures( NULL );
-    }
-
-    printf( "\n" );
-}
diff --git a/VimbaC/Examples/ListCameras/Build/Make/Makefile b/VimbaC/Examples/ListCameras/Build/Make/Makefile
deleted file mode 100644
index b0352edc3bbcd2b527df7314fbcdbed4973565c6..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListCameras/Build/Make/Makefile
+++ /dev/null
@@ -1,58 +0,0 @@
-PROJECT_NAME            = ListCameras
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaC.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-COMMON_DIR          = $(EXAMPLES_DIR)/Common
-
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBAC_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBAC_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ListCameras.o \
-                      $(OBJ_DIR)/program.o \
-                      $(OBJ_DIR)/PrintVimbaVersion.o \
-                      $(OBJ_DIR)/ErrorCodeToMessage.o \
-                      $(OBJ_DIR)/DiscoverGigECameras.o
-
-DEPENDENCIES        = VimbaC
-
-$(OBJ_DIR)/%.o: $(COMMON_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaC/Examples/ListCameras/Source/ListCameras.c b/VimbaC/Examples/ListCameras/Source/ListCameras.c
deleted file mode 100644
index 864899c06754d4917c8d405e7ef7165ee990e613..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListCameras/Source/ListCameras.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ListCameras.c
-
-  Description: The ListCameras example will list all available cameras that
-               are found by VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <ListCameras.h>
-
-#include <VimbaC/Include/VimbaC.h>
-#include <../../Common/PrintVimbaVersion.h>
-#include <../../Common/DiscoverGigECameras.h>
-
-//
-// Starts Vimba
-// Gets all connected cameras
-// And prints out information about the camera name, model name, serial number, ID and the corresponding interface ID
-//
-void ListCameras()
-{
-    VmbError_t          err             = VmbErrorSuccess;
-    VmbCameraInfo_t *   pCameras        = NULL;
-    VmbUint32_t         i               = 0;
-    VmbUint32_t         nCount          = 0;
-    VmbUint32_t         nFoundCount     = 0;
-    
-    err = VmbStartup();                                                                     // Initialize the Vimba API
-    PrintVimbaVersion();                                                                    // Print Vimba Version
-
-    if ( VmbErrorSuccess == err )
-    {
-        DiscoverGigECameras();
-
-        err = VmbCamerasList( NULL, 0, &nCount, sizeof *pCameras );                         // Get the amount of known cameras
-        if (    VmbErrorSuccess == err
-             && nCount          != 0 )
-        {
-            printf( "Cameras found: %d\n\n", nCount );
-        
-            pCameras = (VmbCameraInfo_t*)malloc( sizeof *pCameras * nCount );
-            if ( NULL != pCameras )
-            {
-                err = VmbCamerasList( pCameras, nCount, &nFoundCount, sizeof *pCameras );   // Query all static details of all known cameras
-                                                                                            // Without having to open the cameras
-                if(     VmbErrorSuccess == err
-                    ||  VmbErrorMoreData == err )
-                {
-                    if( nFoundCount < nCount)                                               // If a new camera was connected since we queried
-                    {                                                                       // the amount of cameras, we can ignore that one
-                        nCount = nFoundCount;
-                    }
-                    for ( i=0; i<nCount; ++i )                                              // And print them out
-                    {
-                        printf( "/// Camera Name: %s\n/// Model Name: %s\n/// Camera ID: %s\n/// Serial Number: %s\n/// @ Interface ID: %s\n\n\n",
-                                pCameras[i].cameraName,
-                                pCameras[i].modelName,
-                                pCameras[i].cameraIdString,
-                                pCameras[i].serialString,
-                                pCameras[i].interfaceIdString );
-                    }
-                }
-                else
-                {
-                    printf( "Could not retrieve camera list. Error code: %d\n", err );
-                }
-                free( pCameras );
-                pCameras = NULL;
-            }
-            else
-            {
-                printf( "Could not allocate camera list.\n" );
-            }
-        }
-        else
-        {
-            printf( "Could not list cameras or no cameras present. Error code: %d\n", err );
-        }
-        
-        VmbShutdown();                                                                      // Close Vimba
-    }
-    else
-    {
-        printf( "Could not start system. Error code: %d\n", err );
-    }
-}
diff --git a/VimbaC/Examples/ListCameras/Source/ListCameras.h b/VimbaC/Examples/ListCameras/Source/ListCameras.h
deleted file mode 100644
index b88eba8bee5e25647b0b08474fc5de46ebbe4a92..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListCameras/Source/ListCameras.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ListCameras.h
-
-  Description: The ListCameras example will list all available cameras that
-               are found by VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef LIST_CAMERAS_H_
-#define LIST_CAMERAS_H_
-
-//
-// Starts Vimba
-// Gets all connected cameras
-// And prints out information about the camera name, model name, serial number, ID and the corresponding interface ID
-//
-void ListCameras();
-
-#endif
diff --git a/VimbaC/Examples/ListCameras/Source/program.c b/VimbaC/Examples/ListCameras/Source/program.c
deleted file mode 100644
index 180e80eeb468003d178bd776412f3c151065159f..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListCameras/Source/program.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of ListCameras example of VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-
-#include <ListCameras.h>
-
-int main( int argc, char* argv[] )
-{
-    printf( "//////////////////////////////////////\n" );
-    printf( "/// Vimba API List Cameras Example ///\n" );
-    printf( "//////////////////////////////////////\n\n" );
-
-    if ( 1 < argc )
-    {
-        printf( "No parameters expected. Execution will not be affected by the provided parameter(s).\n\n" );
-    }
-    
-    ListCameras();
-    
-    return 0;
-}
diff --git a/VimbaC/Examples/ListFeatures/Build/Make/Makefile b/VimbaC/Examples/ListFeatures/Build/Make/Makefile
deleted file mode 100644
index b3645fceae405ff8abfa1df81cb6ba7e00769acf..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListFeatures/Build/Make/Makefile
+++ /dev/null
@@ -1,58 +0,0 @@
-PROJECT_NAME            = ListFeatures
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaC.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-COMMON_DIR          = $(EXAMPLES_DIR)/Common
-
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBAC_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBAC_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ListFeatures.o \
-                      $(OBJ_DIR)/program.o \
-                      $(OBJ_DIR)/PrintVimbaVersion.o \
-                      $(OBJ_DIR)/ErrorCodeToMessage.o \
-                      $(OBJ_DIR)/DiscoverGigECameras.o
-
-DEPENDENCIES        = VimbaC
-
-$(OBJ_DIR)/%.o: $(COMMON_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaC/Examples/ListFeatures/Source/ListFeatures.c b/VimbaC/Examples/ListFeatures/Source/ListFeatures.c
deleted file mode 100644
index ca9220abb732dc7090c9550b668fa9ebf2343cf0..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListFeatures/Source/ListFeatures.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ListFeatures.cpp
-
-  Description: The ListFeatures example will list all available features of a
-               camera that are found by VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <ListFeatures.h>
-
-#include <VimbaC/Include/VimbaC.h>
-#include <../../Common/PrintVimbaVersion.h>
-#include <../../Common/DiscoverGigECameras.h>
-
-//
-// Prints out all features and their values and details of a given camera.
-// If no camera ID is provided, the first camera will be used.
-// Starts and stops the API
-// Opens and closes the camera
-//
-// Parameters:
-//  [in]    pStrID          The ID of the camera to work
-//
-void ListFeatures( const char *pStrID )
-{
-    VmbError_t          err         = VmbErrorSuccess;
-    VmbHandle_t         hCamera     = NULL;                                             // A handle to our camera
-    VmbCameraInfo_t*    pCameras    = NULL;                                             // A list of camera infos
-    VmbUint32_t         nCount      = 0;                                                // The number of found cameras	
-    VmbFeatureInfo_t    *pFeatures  = NULL;                                             // A list of static details of camera features
-    // The changeable value of a feature
-    VmbInt64_t          nValue      = 0;                                                // An int value
-    double              fValue      = 0.0;                                              // A float value
-    char                *pStrValue  = NULL;                                             // A string value
-    VmbBool_t           bValue      = VmbBoolFalse;                                     // A bool value
-    VmbUint32_t         i           = 0;
-
-    err = VmbStartup();                                                                 // Initialize the Vimba API
-    PrintVimbaVersion();                                                                // Print Vimba Version
-    if ( VmbErrorSuccess == err )
-    {
-        DiscoverGigECameras();
-
-        if ( NULL == pStrID )                                                           // If no ID was provided use the first camera
-        {
-            err = VmbCamerasList(   NULL,                                               // Get the amount of known cameras
-                                    0,
-                                    &nCount,
-                                    sizeof *pCameras );
-            if (    VmbErrorSuccess == err
-                 && 0 < nCount )
-            {
-                pCameras = (VmbCameraInfo_t*)malloc( nCount * sizeof *pCameras );
-                if ( NULL != pCameras )
-                {
-                    err = VmbCamerasList(   pCameras,                                   // Get all known cameras
-                                            nCount,
-                                            &nCount,
-                                            sizeof *pCameras );
-                    if (    VmbErrorSuccess == err
-                         || VmbErrorMoreData == err )                                   // If a new camera was connected since we queried
-                    {                                                                   // for the amount of cameras, we can ignore that one
-                        if( 0 < nCount )
-                        {
-                            err = VmbCameraOpen(    pCameras[0].cameraIdString,         // Finally open the first one
-                                                    VmbAccessModeFull,
-                                                    &hCamera );
-                        }
-                        else
-                        {
-                            printf( "Camera lost.\n" );
-                        }
-                    }
-                    else
-                    {
-                        printf( "Could not list cameras. Error code: %d\n", err );
-                    }
-
-                    free( pCameras );
-                    pCameras = NULL;
-                }
-                else
-                {
-                    printf( "Could not allocate camera list.\n" );
-                }
-            }
-            else
-            {
-                printf( "Could not list cameras or no cameras present. Error code: %d\n", err );
-            }
-        }
-        else
-        {
-            err = VmbCameraOpen(    pStrID,                                             // Open the camera with the given ID
-                                    VmbAccessModeFull,
-                                    &hCamera );
-        }
-
-        // Query all static details as well as the value of all fetched features and print them out.
-        if ( VmbErrorSuccess == err )
-        {
-            err = VmbFeaturesList(  hCamera,                                            // Get the amount of features
-                                    NULL,
-                                    0,
-                                    &nCount,
-                                    sizeof *pFeatures );
-            if (    VmbErrorSuccess == err
-                 && 0 < nCount )
-            {
-                pFeatures = (VmbFeatureInfo_t *)malloc( nCount * sizeof *pFeatures );
-                if ( NULL != pFeatures )
-                {
-                    err = VmbFeaturesList(  hCamera,                                    // Get the features
-                                            pFeatures,
-                                            nCount,
-                                            &nCount,
-                                            sizeof *pFeatures );
-                    if ( VmbErrorSuccess == err )
-                    {
-                        for ( i=0; i<nCount; ++i )
-                        {
-                            printf( "/// Feature Name: %s\n", ( NULL == pFeatures[i].name ? "" : pFeatures[i].name ));
-                            printf( "/// Display Name: %s\n", ( NULL == pFeatures[i].displayName ? "" : pFeatures[i].displayName ));
-                            printf( "/// Tooltip: %s\n", ( NULL == pFeatures[i].tooltip ? "" : pFeatures[i].tooltip ));
-                            printf( "/// Description: %s\n", ( NULL == pFeatures[i].description ? "" : pFeatures[i].description ));
-                            printf( "/// SNFC Namespace: %s\n", ( NULL == pFeatures[i].sfncNamespace ? "" : pFeatures[i].sfncNamespace ));
-                            printf( "/// Value: " );
-
-                            switch ( pFeatures[i].featureDataType )
-                            {
-                                case VmbFeatureDataBool:
-                                    err = VmbFeatureBoolGet( hCamera, pFeatures[i].name, &bValue );
-                                    if ( VmbErrorSuccess == err )
-                                    {
-                                        printf( "%d\n", bValue );
-                                    }
-                                    break;
-                                case VmbFeatureDataEnum:
-                                    err = VmbFeatureEnumGet( hCamera, pFeatures[i].name, (const char**)&pStrValue );
-                                    if ( VmbErrorSuccess == err )
-                                    {
-                                        printf( "%s\n", pStrValue );
-                                    }
-                                    break;
-                                case VmbFeatureDataFloat:
-                                    err = VmbFeatureFloatGet( hCamera, pFeatures[i].name, &fValue );
-                                    {
-                                        printf( "%f\n", fValue );
-                                    }
-                                    break;
-                                case VmbFeatureDataInt:
-                                    err = VmbFeatureIntGet( hCamera, pFeatures[i].name, &nValue );
-                                    {
-                                        printf( "%lld\n", nValue );
-                                    }
-                                    break;
-                                case VmbFeatureDataString:
-                                    {
-                                    VmbUint32_t nSize = 0;
-                                    err = VmbFeatureStringGet( hCamera, pFeatures[i].name, NULL, 0, &nSize );
-                                    if (    VmbErrorSuccess == err
-                                         && 0 < nSize )
-                                    {
-                                        pStrValue = (char*)malloc( sizeof *pStrValue * nSize );
-                                        if ( NULL != pStrValue )
-                                        {
-                                            err = VmbFeatureStringGet( hCamera, pFeatures[i].name, pStrValue, nSize, &nSize );
-                                            if ( VmbErrorSuccess == err )
-                                            {
-                                                printf( "%s\n", pStrValue );
-                                            }
-                                            free( pStrValue );
-                                            pStrValue = NULL;
-                                        }
-                                        else
-                                        {
-                                            printf( "Could not allocate string.\n" );
-                                        }
-                                    }
-                                    }
-                                    break;
-                                case VmbFeatureDataCommand:
-                                default:
-                                    printf( "[None]\n" );
-                                    break;
-                            }
-                            
-                            if ( VmbErrorSuccess != err )
-                            {
-                                printf( "Could not get feature value. Error code: %d\n", err );
-                            }
-                            
-                            printf( "\n" );
-                        }
-                    }
-                    else
-                    {
-                        printf( "Could not get features. Error code: %d\n", err );
-                    }
-
-                    free(pFeatures);
-                    pFeatures = NULL;
-                }
-                else
-                {
-                    printf( "Could not allocate feature list.\n" );
-                }
-            }
-            else
-            {
-                printf( "Could not get features or the camera does not provide any. Error code: %d\n", err );
-            }
-
-            VmbCameraClose( hCamera );                                                  // Close the camera
-        }
-        else
-        {
-            printf( "Could not open camera. Error code: %d\n", err );
-        }
-        
-        VmbShutdown();                                                                  // Close Vimba
-    }
-    else
-    {
-        printf( "Could not start system. Error code: %d\n", err );
-    }
-}
diff --git a/VimbaC/Examples/ListFeatures/Source/ListFeatures.h b/VimbaC/Examples/ListFeatures/Source/ListFeatures.h
deleted file mode 100644
index 8b68395067682cbf88e674ed75eada0e7dc35d52..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListFeatures/Source/ListFeatures.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ListFeatures.h
-
-  Description: The ListFeatures example will list all available features of a
-               camera that are found by VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef LIST_FEATURES_H_
-#define LIST_FEATURES_H_
-
-//
-// Prints out all features and their values and details of a given camera.
-// If no camera ID is provided, the first camera will be used.
-// Starts and stops the API
-// Opens and closes the camera
-//
-// Parameters:
-//  [in]    pStrID          The ID of the camera to work
-//
-void ListFeatures( const char *pStrID );
-
-#endif
diff --git a/VimbaC/Examples/ListFeatures/Source/program.c b/VimbaC/Examples/ListFeatures/Source/program.c
deleted file mode 100644
index a11e8add8ef141caf64dd3fc4bd3806f75b98187..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/ListFeatures/Source/program.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of ListFeatures example of VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-
-#include <ListFeatures.h>
-
-int main( int argc, char* argv[] )
-{
-    printf( "\n" );
-    printf( "///////////////////////////////////////\n" );
-    printf( "/// Vimba API List Features Example ///\n" );
-    printf( "///////////////////////////////////////\n" );
-    printf( "\n" );
-
-    if( 2 < argc )
-    {
-        printf( "Usage: ListFeatures [CameraID]\n\n" );
-        printf( "Parameters:   CameraID    ID of the camera to use (using first camera if not specified)\n" );
-    }
-    else if ( 2 == argc )
-    {
-        ListFeatures( (const char*)argv[1] );
-    }
-    else
-    {
-        ListFeatures( NULL );
-    }
-
-    printf( "\n" );
-}
diff --git a/VimbaC/Examples/LoadSaveSettings/Build/Make/Makefile b/VimbaC/Examples/LoadSaveSettings/Build/Make/Makefile
deleted file mode 100644
index b1a3277f76b7aec9abc5c9eead709e5bf1b27f8f..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/LoadSaveSettings/Build/Make/Makefile
+++ /dev/null
@@ -1,56 +0,0 @@
-PROJECT_NAME            = LoadSaveSettings
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaC.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-COMMON_DIR          = $(EXAMPLES_DIR)/Common
-
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBAC_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBAC_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/program.o \
-                      $(OBJ_DIR)/PrintVimbaVersion.o \
-                      $(OBJ_DIR)/DiscoverGigECameras.o
-
-DEPENDENCIES        = VimbaC
-
-$(OBJ_DIR)/%.o: $(COMMON_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaC/Examples/LoadSaveSettings/Source/DiscoverGigECameras.c b/VimbaC/Examples/LoadSaveSettings/Source/DiscoverGigECameras.c
deleted file mode 100644
index 3abce96db4957440b44d643c6bc65c16375f9871..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/LoadSaveSettings/Source/DiscoverGigECameras.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        DiscoverGigECameras.c
-
-  Description: Discover GigE cameras if GigE TL is present.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#ifdef WIN32
-#include <windows.h>
-#else
-#include <unistd.h>
-#endif
-
-#include <VimbaC/Include/VimbaC.h>
-
-#include "DiscoverGigECameras.h"
-
-
-// Purpose: Discovers GigE cameras if GigE TL is present.
-//          Discovery is switched on only once so that the API can detect all currently connected cameras.
-VmbError_t DiscoverGigECameras()
-{
-    VmbError_t  err     = VmbErrorSuccess;
-    VmbBool_t   isGigE  = VmbBoolFalse;
-
-    err = VmbFeatureBoolGet( gVimbaHandle, "GeVTLIsPresent", &isGigE );                 // Is Vimba connected to a GigE transport layer?
-    if ( VmbErrorSuccess == err )
-    {
-        if( VmbBoolTrue == isGigE )
-        {
-            err = VmbFeatureIntSet( gVimbaHandle, "GeVDiscoveryAllDuration", 250 );     // Set the waiting duration for discovery packets to return. If not set the default of 150 ms is used.
-            if( VmbErrorSuccess == err )
-            {
-                err = VmbFeatureCommandRun( gVimbaHandle, "GeVDiscoveryAllOnce" );      // Send discovery packets to GigE cameras and wait 250 ms until they are answered
-                if( VmbErrorSuccess != err )
-                {
-                    printf( "Could not ping GigE cameras over the network. Reason: %d\n", err );
-                }
-            }
-            else
-            {
-                printf( "Could not set the discovery waiting duration. Reason: %d\n", err );
-            }
-        }
-    }
-    else
-    {
-        printf( "Could not query Vimba for the presence of a GigE transport layer. Reason: %d\n\n", err );
-    }
-
-    return err;
-}
diff --git a/VimbaC/Examples/LoadSaveSettings/Source/DiscoverGigECameras.h b/VimbaC/Examples/LoadSaveSettings/Source/DiscoverGigECameras.h
deleted file mode 100644
index 44faed6adf6d4ee892acf4298b5973b5a10417e1..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/LoadSaveSettings/Source/DiscoverGigECameras.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        DiscoverGigECameras.h
-
-  Description: Discover GigE cameras if GigE TL is present.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef DISCOVER_GIGE_CAMERAS_H_
-#define DISCOVER_GIGE_CAMERAS_H_
-
-#include <VimbaC/Include/VimbaC.h>
-
-// Purpose: Discovers GigE cameras if GigE TL is present.
-//          Discovery is switched on only once so that the API can detect all currently connected cameras.
-VmbError_t DiscoverGigECameras();
-
-#endif
\ No newline at end of file
diff --git a/VimbaC/Examples/LoadSaveSettings/Source/PrintVimbaVersion.c b/VimbaC/Examples/LoadSaveSettings/Source/PrintVimbaVersion.c
deleted file mode 100644
index c1dda1abc9dceb6742704e4ba1f046a7e4200be2..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/LoadSaveSettings/Source/PrintVimbaVersion.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        PrintVimbaVersion.h
-
-  Description: Print Vimba version.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "PrintVimbaVersion.h"
-#include <stdio.h>
-#include <VimbaC/Include/VimbaC.h>
-
-// Purpose: Prints the Vimba version information.
-void PrintVimbaVersion()
-{
-    VmbVersionInfo_t    version_info;
-    VmbError_t          result = VmbVersionQuery( &version_info, sizeof( version_info ));
-    if( VmbErrorSuccess == result)
-    {
-        printf( "Vimba Version Major: %u Minor: %u Patch: %u\n", version_info.major, version_info.minor,version_info.patch );
-    }
-    else
-    {
-        printf( "VmbVersionQuery failed with Reason: %x", result );
-    }
-}
-
-
diff --git a/VimbaC/Examples/LoadSaveSettings/Source/PrintVimbaVersion.h b/VimbaC/Examples/LoadSaveSettings/Source/PrintVimbaVersion.h
deleted file mode 100644
index faeb3aade9b75652850e26f9808bfd04cda5c293..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/LoadSaveSettings/Source/PrintVimbaVersion.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        PrintVimbaVersion.h
-
-  Description: Print Vimba version.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef PRINT_VIMBA_VERSION_H_
-#define PRINT_VIMBA_VERSION_H_
-
-// Purpose: Prints the Vimba version information.
-void PrintVimbaVersion();
-
-#endif
\ No newline at end of file
diff --git a/VimbaC/Examples/LoadSaveSettings/Source/program.c b/VimbaC/Examples/LoadSaveSettings/Source/program.c
deleted file mode 100644
index 5c854a769e9070b511615c12e67c874856e98c0f..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/LoadSaveSettings/Source/program.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.c
-
-  Description: Main entry point of LoadSaveSettings example of VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <VimbaC/Include/VimbaC.h>
-#include <DiscoverGigECameras.h>
-
-int main( int argc, char *argv[] )
-{
-    VmbError_t err = VmbErrorSuccess;
-    VmbUint32_t nCount = 0;
-    VmbCameraInfo_t *pCameras = NULL;
-    VmbHandle_t handle = NULL;
-    const char *fileName = "current_settings.xml";
-    const char *cameraId = NULL;
-
-//  prepare settings struct to determine behaviour
-//  during loading or saving operation
-//  (This is optional. Passing NULL triggers default settings)
-    VmbFeaturePersistSettings_t settings;
-    settings.loggingLevel = 4;      //  full loggin details (trace, debug, warning, error and info messages)
-    settings.maxIterations = 5;     //  how many iterations during loading shall be performed at max 
-                                    //  (comparing desired with device value. in case of difference new iteration will be executed)
-    settings.persistType = VmbFeaturePersistNoLUT;      //  determines which features shall be considered
-                                                        //  NoLUT means: all features except for lookUp table features
-
-    printf( "\n" );
-    printf( "////////////////////////////////////////////\n" );
-    printf( "/// Vimba API Load/Save Settings Example ///\n" );
-    printf( "////////////////////////////////////////////\n" );
-    printf( "\n" );
-
-//  start VimbaC API
-    err = VmbStartup();
-    if( VmbErrorSuccess != err )
-    {
-        printf( "Could not start Vimba [error code: %i]\n", err );
-        return err;
-    }
-
-    printf( "--> VimbaC has been started\n" );
-    
-//  check for GigE cameras
-    err = DiscoverGigECameras();
-    if( VmbErrorSuccess != err )
-    {
-        VmbShutdown();
-        printf( "Could discover GigE cameras [error code: %i]\n", err );
-        return err;
-    }
-    
-//  get amount of connected cameras
-    err = VmbCamerasList( NULL, 0, &nCount, sizeof(*pCameras) );
-    if( VmbErrorSuccess != err )
-    {
-        VmbShutdown();
-        printf( "Could not retrieve number of cameras [error code: %i]\n", err );
-        return err;
-    }
-
-//  in case no camera is connected
-    if( 0 == nCount )
-    {
-        VmbShutdown();
-        printf( "No Camera found [error code: %i]\n", err );
-        return err;
-    }
-
-//  allocate space for camera list
-    pCameras = (VmbCameraInfo_t *) malloc( nCount * sizeof(*pCameras) );
-    if( NULL == pCameras )
-    {
-        VmbShutdown();
-        printf( "No Camera found [error code: %i]\n", err );
-        return VmbErrorOther;
-    }
-
-//  retrieve camera list from Vimba
-    err = VmbCamerasList( pCameras, nCount, &nCount, sizeof(*pCameras) );
-    if( VmbErrorSuccess != err )
-    {
-        VmbShutdown();
-        printf( "Could not retrieve info pointers for connected cameras [error code: %i]\n", err );
-        return err;
-    }
-
-//  get camera id string
-    cameraId = pCameras[0].cameraIdString;
-    if( NULL == cameraId )
-    {
-        VmbShutdown();
-        printf( "Could not retrieve camera id [error code: %i]\n", VmbErrorOther );
-        return err;
-    }
-
-//  open camera (first in list)
-    err = VmbCameraOpen( cameraId, VmbAccessModeFull, &handle );
-    if( VmbErrorSuccess != err )
-    {
-        VmbShutdown();
-        printf( "Could not open camera in Full Access mode [error code: %i]\n", err );
-        return err;
-    }
-
-    printf( "--> Camera with id '%s' has been opened\n", cameraId );
-
-
-//  save current camera feature values
-    err = VmbCameraSettingsSave( handle, fileName, NULL, 0 );
-    if( VmbErrorSuccess != err )
-    {
-        printf( "Could not save feature values to given XML file '%s' [error code: %i]\n", fileName, err );
-        err = VmbCameraClose( handle );
-        if( VmbErrorSuccess != err )
-        {
-            printf( "Could not close camera [error code: %i]\n", err );
-        }
-        VmbShutdown();
-        return err;
-    }
-
-    printf( "--> Camera settings have been saved\n" );
-
-//  set all feature values to factory default
-    err = VmbFeatureEnumSet( handle, "UserSetSelector", "Default" );
-    if( VmbErrorSuccess != err )
-    {
-        printf( "Could not set feature value 'UserSetSelector' to 'Default' [error code: %i]\n", err );
-        err = VmbCameraClose( handle );
-        if( VmbErrorSuccess != err )
-        {
-            printf( "Could not close camera [error code: %i]\n", err );
-        }
-        VmbShutdown();
-        return err;
-    }
-    err = VmbFeatureCommandRun( handle, "UserSetLoad" );
-    if( VmbErrorSuccess != err )
-    {
-        printf( "Could not run 'UserSetLoad' command [error code: %i]\n", err );
-        err = VmbCameraClose( handle );
-        if( VmbErrorSuccess != err )
-        {
-            printf( "Could not close camera [error code: %i]\n", err );
-        }
-        VmbShutdown();
-        return err;
-    }
-
-    printf( "--> All feature values have been restored to default\n" );
-
-//  load feature values to selected camera from xml file
-    err = VmbCameraSettingsLoad( handle, fileName, &settings, sizeof(settings) );
-    if( VmbErrorSuccess != err )
-    {
-        printf( "Could not load feature values from given XML file '%s' [error code: %i]\n", fileName, err );
-        err = VmbCameraClose( handle );
-        if( VmbErrorSuccess != err )
-        {
-            printf( "Could not close camera [error code: %i]\n", err );
-        }
-        VmbShutdown();
-        return err;
-    }
-
-    printf( "--> Feature values have been loaded from given XML file\n" );
-    
-//  close camera
-    err = VmbCameraClose( handle );
-    if( VmbErrorSuccess != err )
-    {
-        printf( "Could not close camera [error code: %i]\n", err );
-        VmbShutdown();
-        return err;
-    }
-
-    printf( "--> Camera has been closed\n" );
-
-//  shutdown VimbaC API
-    VmbShutdown();
-    printf( "--> VimbaC has been stopped\n" );
-
-//  free allocated space for camera list
-    free( pCameras );
-    pCameras = NULL;
-
-    return 0;
-}
diff --git a/VimbaC/Examples/SynchronousGrab/Build/Make/Makefile b/VimbaC/Examples/SynchronousGrab/Build/Make/Makefile
deleted file mode 100644
index ec620c2dfc77a619a402080dfb1fedf281f37417..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/SynchronousGrab/Build/Make/Makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-PROJECT_NAME            = SynchronousGrab
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaC.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-COMMON_DIR          = $(EXAMPLES_DIR)/Common
-
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBAC_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBAC_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/Bitmap.o \
-                      $(OBJ_DIR)/SynchronousGrab.o \
-                      $(OBJ_DIR)/program.o \
-                      $(OBJ_DIR)/PrintVimbaVersion.o \
-                      $(OBJ_DIR)/ErrorCodeToMessage.o \
-                      $(OBJ_DIR)/DiscoverGigECameras.o
-
-DEPENDENCIES        = VimbaC
-
-$(OBJ_DIR)/%.o: $(COMMON_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.c $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaC/Examples/SynchronousGrab/Source/Bitmap.c b/VimbaC/Examples/SynchronousGrab/Source/Bitmap.c
deleted file mode 100644
index c03fe7d57f63db6e04bb782bb25c824d83d11bae..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/SynchronousGrab/Source/Bitmap.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:         Bitmap.c
-
-  Description:  The bitmap class represents a MS(R) Windows(TM) bitmap version 3
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <Bitmap.h>
-
-#define THREE_CHANNEL   0xC
-#define BMP_HEADER_SIZE 54
-#define ALIGNMENT_SIZE  4
-
-//
-// Creates a MS Windows bitmap with header and color palette.
-// Fills it with the content of the given byte buffer
-// 
-// Parameters:
-//  [out]   pBitmap         A pointer to an AVTBitmap that will get filled
-//  [in]    pBuffer         The buffer that will be used to fill the created bitmap
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTCreateBitmap( AVTBitmap * const pBitmap, const void* pBuffer )
-{
-    unsigned char   nNumColors      = 0;        // Number of colors of our image
-    unsigned char   nPadLength      = 0;        // The padding we need to align the bitmap ALIGNMENT_SIZE
-    unsigned long   nPaletteSize    = 0;        // The size of the bitmap's palette
-    unsigned long   nHeaderSize     = 0;        // The size of the bitmap's header
-    unsigned long   nFileSize       = 0;        // The size of the bitmap file
-    unsigned char*  pBitmapBuffer   = 0;        // A buffer we use for creating the bitmap
-    unsigned char*  pCurBitmapBuf   = 0;        // A cursor to move over "pBitmapBuffer"
-    unsigned char*  pCurSrc         = 0;        // A cursor to move over the given buffer "pBuffer"
-    unsigned long   px              = 0;        // A single pixel for storing transformed color information
-    unsigned long   x               = 0;        // The horizontal position within our image
-    unsigned long   y               = 0;        // The vertical position within our image
-    unsigned long   i               = 0;        // Counter for some iteration
-
-    // The bitmap header
-    char fileHeader[14] = { 'B','M',            // Default
-                            0,0,0,0,            // File size
-                            0,0,0,0,            // Reserved
-                            0,0,0,0 };          // Offset to image content
-    char infoHeader[40] = { 40,0,0,0,           // Size of info header
-                            0,0,0,0,            // Width
-                            0,0,0,0,            // Height
-                            1,0,                // Default
-                            0, 0 };             // bpp
-
-    if (    NULL == pBitmap
-         || 0 == pBitmap->bufferSize
-         || 0 == pBitmap->width
-         || 0 == pBitmap->height )
-    {
-        return 0;
-    }
-
-    if ( pBitmap->colorCode == ( pBitmap->colorCode & THREE_CHANNEL ))
-    {
-        nNumColors = 3;
-    }
-    else
-    {
-        nNumColors = 1;
-    }
-
-    // Bitmap padding always is a multiple of four Bytes. If data is not we need to pad with zeros.
-    nPadLength = ( pBitmap->width * nNumColors ) % ALIGNMENT_SIZE;
-    if ( 0 != nPadLength )
-    {
-        nPadLength = ALIGNMENT_SIZE - nPadLength;
-    }
-
-    if ( ColorCodeRGB24 != pBitmap->colorCode )
-    {
-        nPaletteSize = 256;
-    }
-    
-    nHeaderSize     = BMP_HEADER_SIZE + nPaletteSize * 4;
-    pBitmapBuffer   = (unsigned char*)malloc( nHeaderSize + pBitmap->bufferSize + (nPadLength * pBitmap->height ));
-    nFileSize       = nHeaderSize + pBitmap->bufferSize + ( nPadLength * pBitmap->height );
-
-    // File size
-    fileHeader[ 2]  = (char)( nFileSize );
-    fileHeader[ 3]  = (char)( nFileSize >> 8 );
-    fileHeader[ 4]  = (char)( nFileSize >> 16 );
-    fileHeader[ 5]  = (char)( nFileSize >> 24 );
-    // Offset to image content
-    fileHeader[10]  = (char)( nHeaderSize );
-    fileHeader[11]  = (char)( nHeaderSize >> 8 );
-    fileHeader[12]  = (char)( nHeaderSize >> 16 );
-    fileHeader[13]  = (char)( nHeaderSize >> 24 );
-
-    // Width
-    infoHeader[ 4]  = (char)( pBitmap->width );
-    infoHeader[ 5]  = (char)( pBitmap->width >> 8 );
-    infoHeader[ 6]  = (char)( pBitmap->width >> 16 );
-    infoHeader[ 7]  = (char)( pBitmap->width >> 24 );
-    // Height (has to be negative for a top down image)
-    infoHeader[ 8]  = (char)( -(long)pBitmap->height );
-    infoHeader[ 9]  = (char)( -(long)pBitmap->height >> 8 );
-    infoHeader[10]  = (char)( -(long)pBitmap->height >> 16 );
-    infoHeader[11]  = (char)( -(long)pBitmap->height >> 24 );
-    // bpp
-    infoHeader[14]  = 8 * nNumColors;
-    // Image size
-    infoHeader[20]  = (char)( pBitmap->bufferSize );
-    infoHeader[21]  = (char)( pBitmap->bufferSize >> 8 );
-    infoHeader[22]  = (char)( pBitmap->bufferSize >> 16 );
-    infoHeader[23]  = (char)( pBitmap->bufferSize >> 24 );
-    // Palette size
-    infoHeader[32]  = (char)( nPaletteSize );
-    infoHeader[33]  = (char)( nPaletteSize >> 8 );
-    infoHeader[34]  = (char)( nPaletteSize >> 16 );
-    infoHeader[35]  = (char)( nPaletteSize >> 24 );
-    // Used colors
-    infoHeader[36] = (char)( nPaletteSize );
-    infoHeader[37] = (char)( nPaletteSize >> 8 );
-    infoHeader[38] = (char)( nPaletteSize >> 16 );
-    infoHeader[39] = (char)( nPaletteSize >> 24 );
-
-    // Write header
-    pCurBitmapBuf = pBitmapBuffer;
-    memcpy( pCurBitmapBuf, fileHeader, 14 );
-    pCurBitmapBuf += 14;
-    memcpy( pCurBitmapBuf, infoHeader, 40 );
-    pCurBitmapBuf += 40;
-    for( i = 0; i < nPaletteSize; ++i )
-    {
-        pCurBitmapBuf[0] = (char)(i);
-        pCurBitmapBuf[1] = (char)(i);
-        pCurBitmapBuf[2] = (char)(i);
-        pCurBitmapBuf[3] = 0;
-        pCurBitmapBuf += 4;
-    }
-
-    // RGB -> BGR (a Windows bitmap is BGR)
-    if ( ColorCodeRGB24 == pBitmap->colorCode )
-    {
-        pCurSrc = (unsigned char*)pBuffer;
-        for ( y=0; y<pBitmap->height; ++y, pCurBitmapBuf+=nPadLength )
-        {
-            for (   x = 0;
-                    x < pBitmap->width;
-                    ++x,
-                    pCurSrc += 3,
-                    pCurBitmapBuf += 3 )
-            {
-                px = 0;
-                // Create a 4 Byte structure to store ARGB (we don't use A)
-                px = px | ( pCurSrc[0] << 16 ) | ( pCurSrc[1] << 8 ) | pCurSrc[2];
-                // Due to endianess ARGB is stored as BGRA 
-                // and we only have to write the first three Bytes
-                memcpy( pCurBitmapBuf, &px, 3 );
-            }
-            // Add padding at the end of each row
-            memset( pCurBitmapBuf, 0, nPadLength );
-        }
-        pBitmap->colorCode = ColorCodeBGR24;
-    }
-    // Mono8
-    else
-    {
-        if ( 0 == nPadLength )
-        {
-            memcpy( pCurBitmapBuf, pBuffer, pBitmap->bufferSize );
-        }
-        else
-        {
-            pCurSrc = (unsigned char*)pBuffer;
-            for (   y=0;
-                    y<pBitmap->height;
-                    ++y,
-                    pCurSrc += pBitmap->width * nNumColors )
-            {
-                // Write a single row of colored pixels
-                memcpy( pCurBitmapBuf, pCurSrc, pBitmap->width * nNumColors );
-                pCurBitmapBuf += pBitmap->width * nNumColors;
-                // Write padding pixels
-                memset( pCurBitmapBuf, 0, nPadLength );
-                pCurBitmapBuf += nPadLength;
-            }
-        }
-    }
-
-    pBitmap->buffer     = pBitmapBuffer;
-    pBitmap->bufferSize = nFileSize;
-    return 1;
-}
-
-//
-// Releases (frees) a given bitmap
-//
-// Parameters:
-//  [in, out]   pBitmap     The bitmap whose memory will be freed
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTReleaseBitmap( AVTBitmap * const pBitmap )
-{
-    if (    NULL != pBitmap
-         && NULL != pBitmap->buffer
-         && 0 < pBitmap->bufferSize )
-    {
-        free( pBitmap->buffer );
-        pBitmap->buffer = NULL;
-        return 1;
-    }
-
-    return 0;
-}
-
-//
-// Writes a given bitmap to file
-//
-// Parameters:
-//  [in] pBitmap            The AVTBitmap to write to file
-//  [in] pFileName          The destination (complete path) where to write the bitmap to
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTWriteBitmapToFile( AVTBitmap const * const pBitmap, char const * const pFileName )
-{
-    FILE *file;
-    if (    NULL != pBitmap
-         && NULL != pBitmap->buffer
-         && NULL != pFileName )
-    {
-        file = fopen( pFileName, "wb" );
-        fwrite( pBitmap->buffer, 1, pBitmap->bufferSize, file );
-        fclose( file );
-
-        return 1;
-    }
-
-    return 0;
-}
diff --git a/VimbaC/Examples/SynchronousGrab/Source/Bitmap.h b/VimbaC/Examples/SynchronousGrab/Source/Bitmap.h
deleted file mode 100644
index 51214197217e87db5fbb34bb7c3cde7bbcec1e03..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/SynchronousGrab/Source/Bitmap.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:         Bitmap.h
-
-  Description:  The bitmap class represents a MS(R) Windows(TM) bitmap version 3
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_BITMAP_H_
-#define AVT_BITMAP_H_
-
-typedef enum
-{
-    ColorCodeMono8  = 1,
-    ColorCodeMono16 = 2,
-    ColorCodeBGR24  = 4,
-    ColorCodeRGB24  = 8
-} ColorCode;
-
-typedef struct
-{
-    void*           buffer;
-    unsigned long   bufferSize;
-    unsigned long   width; 
-    unsigned long   height;
-    ColorCode       colorCode;
-} AVTBitmap;
-
-//
-// Creates a MS Windows bitmap with header and color palette.
-// Fills it with the content of the given byte buffer
-// 
-// Parameters:
-//  [out]   pBitmap         A pointer to an AVTBitmap that will get filled
-//  [in]    pBuffer         The buffer that will be used to fill the created bitmap
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTCreateBitmap( AVTBitmap * const pBitmap, const void* pBuffer );
-
-//
-// Releases (frees) a given bitmap
-//
-// Parameters:
-//  [in, out]   pBitmap     The bitmap whose memory will be freed
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTReleaseBitmap( AVTBitmap * const pBitmap );
-
-//
-// Writes a given bitmap to file
-//
-// Parameters:
-//  [in] pBitmap            The AVTBitmap to write to file
-//  [in] pFileName          The destination (complete path) where to write the bitmap to
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTWriteBitmapToFile( AVTBitmap const * const pBitmap, char const * const pFileName );
-
-#endif
diff --git a/VimbaC/Examples/SynchronousGrab/Source/SynchronousGrab.c b/VimbaC/Examples/SynchronousGrab/Source/SynchronousGrab.c
deleted file mode 100644
index 74600f6dc74ca43ffc5800d4ac81d881305a0cd8..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/SynchronousGrab/Source/SynchronousGrab.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2013 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        SynchronousGrab.cpp
-
-  Description: The SynchronousGrab example will grab a single image
-               synchronously and save it to a file using VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef WIN32
-    #include <windows.h>
-#else
-    #include <unistd.h>
-#endif
-
-#include <VimbaC/Include/VimbaC.h>
-#include "../../Common/PrintVimbaVersion.h"
-#include "../../Common/DiscoverGigECameras.h"
-#include <SynchronousGrab.h>
-#include <Bitmap.h>
-
-//
-// Starts Vimba API
-// Opens the given camera, if no camera ID was provided, the first camera found will be used
-// Sets the maximum possible Ethernet packet size
-// Adjusts the image format
-// Acquires one image synchronously
-// Writes the image as bitmap to file
-// Closes the camera in case of failure
-//
-// Parameters:
-//  [in]    pCameraID           The ID of the camera to work on. Can be NULL.
-//  [in]    pFileName           The path of the bitmap where the image is saved to
-//
-// Returns:
-//  An API status code
-//
-VmbError_t SynchronousGrab( const char* pCameraID, const char* pFileName )
-{
-    VmbError_t          err                 = VmbStartup();     // Initialize the Vimba API
-    VmbCameraInfo_t     *pCameras           = NULL;             // A list of camera details
-    VmbUint32_t         nCount              = 0;                // Number of found cameras
-    VmbUint32_t         nFoundCount         = 0;                // Change of found cameras
-    const VmbUint32_t   nTimeout            = 2000;             // Timeout for Grab
-    VmbAccessMode_t     cameraAccessMode    = VmbAccessModeFull;// We open the camera with full access
-    VmbHandle_t         cameraHandle        = NULL;             // A handle to our camera
-    VmbBool_t           bIsCommandDone      = VmbBoolFalse;     // Has a command finished execution
-    VmbFrame_t          frame;                                  // The frame we capture
-    const char*         pPixelFormat        = NULL;             // The pixel format we use for acquisition
-    VmbInt64_t          nPayloadSize        = 0;                // The size of one frame
-    AVTBitmap           bitmap;                                 // The bitmap we create
-    
-    PrintVimbaVersion();
-
-    if ( VmbErrorSuccess == err )
-    {
-        // Is Vimba connected to a GigE transport layer?
-        DiscoverGigECameras();
-        
-        // If no camera ID was provided use the first camera found
-        if ( NULL == pCameraID )
-        {
-            // Get the amount of known cameras
-            err = VmbCamerasList( NULL, 0, &nCount, sizeof *pCameras );
-            if (    VmbErrorSuccess == err
-                 && 0 < nCount )
-            {
-                pCameras = (VmbCameraInfo_t*)malloc( nCount * sizeof( *pCameras ));
-                if ( NULL != pCameras )
-                {
-                    // Actually query all static details of all known cameras without having to open the cameras
-                    // If a new camera was connected since we queried the amount of cameras (nFoundCount > nCount) we can ignore that one
-                    err = VmbCamerasList( pCameras, nCount, &nFoundCount, sizeof *pCameras );
-                    if (    VmbErrorSuccess != err
-                         && VmbErrorMoreData != err )
-                    {
-                        printf( "Could not list cameras. Error code: %d\n", err );
-                    }
-                    else
-                    {
-                        // Use the first camera
-                        if( nFoundCount != 0)
-                        {
-                            pCameraID = pCameras[0].cameraIdString;
-                        }
-                        else
-                        {
-                            pCameraID = NULL;
-                            err = VmbErrorNotFound;
-                            printf( "Camera lost.\n" );
-                        }
-                    }
-
-                    free( pCameras );
-                    pCameras = NULL;
-                }
-                else
-                {
-                    printf( "Could not allocate camera list.\n" );
-                }
-            }
-            else
-            {
-                printf( "Could not list cameras or no cameras present. Error code: %d\n", err );
-            }
-        }
-
-        if ( NULL != pCameraID )
-        {
-            // Open camera
-            err = VmbCameraOpen( pCameraID, cameraAccessMode, &cameraHandle );
-            if ( VmbErrorSuccess == err )
-            {
-                printf( "Camera ID: %s\n\n", pCameraID );
-
-                // Set the GeV packet size to the highest possible value
-                // (In this example we do not test whether this cam actually is a GigE cam)
-                if ( VmbErrorSuccess == VmbFeatureCommandRun( cameraHandle, "GVSPAdjustPacketSize" ))
-                {
-                    do
-                    {
-                        if ( VmbErrorSuccess != VmbFeatureCommandIsDone(    cameraHandle,
-                                                                            "GVSPAdjustPacketSize",
-                                                                            &bIsCommandDone ))
-                        {
-                            break;
-                        }
-                    } while ( VmbBoolFalse == bIsCommandDone );
-                }
-
-                if ( VmbErrorSuccess == err )
-                {
-                    // Set pixel format. For the sake of simplicity we only support Mono and RGB in this example.
-                    err = VmbFeatureEnumSet( cameraHandle, "PixelFormat", "RGB8Packed" );
-                    if ( VmbErrorSuccess != err )
-                    {
-                        // Fall back to Mono
-                        err = VmbFeatureEnumSet( cameraHandle, "PixelFormat", "Mono8" );
-                    }
-                    // Read back pixel format
-                    VmbFeatureEnumGet( cameraHandle, "PixelFormat", &pPixelFormat );
-
-                    if ( VmbErrorSuccess == err )
-                    {
-                        // Evaluate frame size
-                        err = VmbFeatureIntGet( cameraHandle, "PayloadSize", &nPayloadSize );
-                        if ( VmbErrorSuccess == err )
-                        {
-                            frame.buffer        = (unsigned char*)malloc( (VmbUint32_t)nPayloadSize );
-                            frame.bufferSize    = (VmbUint32_t)nPayloadSize;
-
-                            // Announce Frame
-                            err = VmbFrameAnnounce( cameraHandle, &frame, (VmbUint32_t)sizeof( VmbFrame_t ));
-                            if ( VmbErrorSuccess == err )
-                            {
-                                // Start Capture Engine
-                                err = VmbCaptureStart( cameraHandle );
-                                if ( VmbErrorSuccess == err )
-                                {
-                                    // Queue Frame
-                                    err = VmbCaptureFrameQueue( cameraHandle, &frame, NULL );
-                                    if ( VmbErrorSuccess == err )
-                                    {
-                                        // Start Acquisition
-                                        err = VmbFeatureCommandRun( cameraHandle,"AcquisitionStart" );
-                                        if ( VmbErrorSuccess == err )
-                                        {
-                                            // Capture one frame synchronously
-                                            err = VmbCaptureFrameWait( cameraHandle, &frame, nTimeout );
-                                            if ( VmbErrorSuccess == err )
-                                            {
-                                                // Convert the captured frame to a bitmap and save to disk
-                                                if ( VmbFrameStatusComplete == frame.receiveStatus )
-                                                {
-                                                    bitmap.bufferSize = frame.imageSize;
-                                                    bitmap.width = frame.width;
-                                                    bitmap.height = frame.height;
-                                                    // We only support Mono and RGB in this example
-                                                    if ( 0 == strcmp( "RGB8Packed", pPixelFormat ))
-                                                    {
-                                                        bitmap.colorCode = ColorCodeRGB24;
-                                                    }
-                                                    else
-                                                    {
-                                                        bitmap.colorCode = ColorCodeMono8;
-                                                    }
-
-                                                    // Create the bitmap
-                                                    if ( 0 == AVTCreateBitmap( &bitmap, frame.buffer ))
-                                                    {
-                                                        printf( "Could not create bitmap.\n" );
-                                                    }
-                                                    else
-                                                    {
-                                                        // Save the bitmap
-                                                        if ( 0 == AVTWriteBitmapToFile( &bitmap, pFileName ))
-                                                        {
-                                                            printf( "Could not write bitmap to file.\n" );
-                                                        }
-                                                        else
-                                                        {
-                                                            printf( "Bitmap successfully written to file \"%s\"\n", pFileName );
-                                                            // Release the bitmap's buffer
-                                                            if ( 0 == AVTReleaseBitmap( &bitmap ))
-                                                            {
-                                                                printf( "Could not release the bitmap.\n" );
-                                                            }
-                                                        }
-                                                    }
-                                                }
-                                                else
-                                                {
-                                                    printf( "Frame not successfully received. Error code: %d\n", frame.receiveStatus );
-                                                }
-                                            }
-                                            else
-                                            {
-                                                printf( "Could not capture frame. Error code: %d\n", err );
-                                            }
-
-                                            // Stop Acquisition
-                                            err = VmbFeatureCommandRun( cameraHandle,"AcquisitionStop" );
-                                            if ( VmbErrorSuccess != err )
-                                            {
-                                                printf( "Could not stop acquisition. Error code: %d\n", err );
-                                            }
-                                        }
-                                        else
-                                        {
-                                            printf( "Could not start acquisition. Error code: %d\n", err );
-                                        }
-                                    }
-                                    else
-                                    {
-                                        printf( "Could not queue frame. Error code: %d\n", err );
-                                    }
-
-                                    // Stop Capture Engine
-                                    err = VmbCaptureEnd( cameraHandle );
-                                    if ( VmbErrorSuccess != err )
-                                    {
-                                        printf( "Could not end capture. Error code: %d\n", err );
-                                    }
-                                }
-                                else
-                                {
-                                    printf( "Could not start capture. Error code: %d\n", err );
-                                }
-
-                                // Revoke frame
-                                err = VmbFrameRevoke( cameraHandle, &frame );
-                                if ( VmbErrorSuccess != err )
-                                {
-                                    printf( "Could not revoke frame. Error code: %d\n", err );
-                                }
-                            }
-                            else
-                            {
-                                printf( "Could not announce frame. Error code: %d\n", err );
-                            }
-
-                            free( frame.buffer );
-                            frame.buffer = NULL;
-                        }
-                    }
-                    else
-                    {
-                        printf( "Could not set pixel format to either RGB or Mono. Error code: %d\n", err );
-                    }
-                }
-                else
-                {
-                    printf( "Could not adjust packet size. Error code: %d\n", err );
-                }
-
-                err = VmbCameraClose ( cameraHandle );
-                if ( VmbErrorSuccess != err )
-                {
-                    printf( "Could not close camera. Error code: %d\n", err );
-                }
-            }
-            else
-            {
-                printf( "Could not open camera. Error code: %d\n", err );
-            }
-        }
-        VmbShutdown();
-    }
-    else
-    {
-        printf( "Could not start system. Error code: %d\n", err );
-    }
-
-    return err;
-}
diff --git a/VimbaC/Examples/SynchronousGrab/Source/SynchronousGrab.h b/VimbaC/Examples/SynchronousGrab/Source/SynchronousGrab.h
deleted file mode 100644
index 6b7450b1b030e62f14deb8a8ffba4eff0a17cf2a..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/SynchronousGrab/Source/SynchronousGrab.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        SynchronousGrab.h
-
-  Description: The SynchronousGrab example will grab a single image
-               synchronously and save it to a file using VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef SYNCHRONOUS_GRAB_H_
-#define SYNCHRONOUS_GRAB_H_
-
-#include <VimbaC/Include/VmbCommonTypes.h>
-
-//
-// Starts Vimba API
-// Opens the given camera, if no camera ID was provided, the first camera found will be used
-// Sets the maximum possible Ethernet packet size
-// Adjusts the image format
-// Acquires one image synchronously
-// Writes the image as bitmap to file
-// Closes the camera in case of failure
-//
-// Parameters:
-//  [in]    pCameraID           The ID of the camera to work on. Can be NULL.
-//  [in]    pFileName           The path of the bitmap where the image is saved to
-//
-// Returns:
-//  An API status code
-//
-VmbError_t SynchronousGrab ( const char* pCameraID, const char* pFileName );
-
-#endif
diff --git a/VimbaC/Examples/SynchronousGrab/Source/program.c b/VimbaC/Examples/SynchronousGrab/Source/program.c
deleted file mode 100644
index d4e222a66b8c63b1b88fada6c61ab2d7e593a1fe..0000000000000000000000000000000000000000
--- a/VimbaC/Examples/SynchronousGrab/Source/program.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2013 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Implementation of main entry point of SynchronousGrab example of
-               VimbaC.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <string.h>
-
-#include <SynchronousGrab.h>
-
-unsigned char StartsWith(const char *pString, const char *pStart)
-{
-    if(NULL == pString)
-    {
-        return 0;
-    }
-    if(NULL == pStart)
-    {
-        return 0;
-    }
-
-    if(strlen(pString) < strlen(pStart))
-    {
-        return 0;
-    }
-
-    if(memcmp(pString, pStart, strlen(pStart)) != 0)
-    {
-        return 0;
-    }
-
-    return 1;
-}
-
-int main( int argc, char* argv[] )
-{
-    VmbError_t err = VmbErrorSuccess;
-
-    char*           pCameraID   = NULL;         // The ID of the camera to use
-    const char*     pFileName   = NULL;         // The filename for the bitmap to save
-    unsigned char   bPrintHelp  = 0;            // Output help?
-    int             i           = 0;            // Counter for some iteration
-    char*           pParameter  = 0;            // The command line parameter
-
-    printf( "//////////////////////////////////////////\n" );
-    printf( "/// Vimba API Synchronous Grab Example ///\n" );
-    printf( "//////////////////////////////////////////\n\n" );
-
-    //////////////////////
-    //Parse command line//
-    //////////////////////
-
-    for( i = 1; i < argc; ++i )
-    {
-        pParameter = argv[i];
-        if( 0 > strlen( pParameter ))
-        {
-            err = VmbErrorBadParameter;
-            break;
-        }
-
-        if( '/' == pParameter[0] )
-        {
-            if( StartsWith( pParameter, "/f:" ))
-            {
-                if( NULL != pFileName )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                pFileName = pParameter + 3;
-                if( 0 >= strlen( pFileName ))
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-            }
-            else if( 0 == strcmp( pParameter, "/h" ))
-            {
-                if(     ( NULL != pCameraID )
-                    ||  ( NULL != pFileName )
-                    ||  ( bPrintHelp ))
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                bPrintHelp = 1;
-            }
-            else
-            {
-                err = VmbErrorBadParameter;
-                break;
-            }
-        }
-        else
-        {
-            if( NULL != pCameraID )
-            {
-                err = VmbErrorBadParameter;
-                break;
-            }
-
-            pCameraID = pParameter;
-        }
-    }
-
-    //Write out an error if we could not parse the command line
-    if ( VmbErrorBadParameter == err )
-    {
-        printf( "Invalid parameters!\n\n" );
-        bPrintHelp = 1;
-    }
-
-    //Print out help and end program
-    if ( bPrintHelp )
-    {
-        printf( "Usage: SynchronousGrab [CameraID] [/h] [/f:FileName]\n" );
-        printf( "Parameters:   CameraID    ID of the camera to use (using first camera if not specified)\n" );
-        printf( "              /h          Print out help\n" );
-        printf( "              /f:FileName File name for operation\n" );
-        printf( "                          (default \"SynchronousGrab.bmp/.dat\" if not specified)\n" );
-    }
-    else
-    {
-        if ( NULL == pFileName )
-        {
-            pFileName = "SynchronousGrab.bmp";
-        }
-
-        err = SynchronousGrab( pCameraID, pFileName );
-    }
-
-    return err;
-}
diff --git a/VimbaC/Include/VimbaC.h b/VimbaC/Include/VimbaC.h
deleted file mode 100644
index a942706408e3d96056028b4c312fb324c2650ffb..0000000000000000000000000000000000000000
--- a/VimbaC/Include/VimbaC.h
+++ /dev/null
@@ -1,1954 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this header file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        VimbaC.h
-
-  Description: Main header file for the VimbaC API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef VIMBAC_H_INCLUDE_
-#define VIMBAC_H_INCLUDE_
-
-// This file describes all necessary definitions for using Allied Vision's
-// VimbaC API. These type definitions are designed to be portable from other
-// languages and other operating systems.
-//
-// General conventions:
-// - Method names are composed in the following manner:
-//    - Vmb"Action"                                        example: VmbStartup()
-//    - Vmb"Entity""Action" or Vmb"ActionTarget""Action"   example: VmbInterfaceOpen()
-//    - Vmb"Entity""SubEntity/ActionTarget""Action"        example: VmbFeatureCommandRun()
-// - Methods dealing with features, memory or registers accept a handle from the following
-//   entity list as first parameter: System, Camera, Interface and AncillaryData.
-//   All other methods taking handles accept only a specific handle.
-// - Strings (generally declared as "const char *") are assumed to have a trailing 0 character
-// - All pointer parameters should of course be valid, except if stated otherwise.
-// - To ensure compatibility with older programs linked against a former version of the API,
-//   all struct* parameters have an accompanying sizeofstruct parameter.
-// - Functions returning lists are usually called twice: once with a zero buffer
-//   to get the length of the list, and then again with a buffer of the correct length.
-
-//===== #DEFINES ==============================================================
-
-#if defined (_WIN32)
-    #if defined AVT_VMBAPI_C_EXPORTS                // DLL exports
-        #define IMEXPORTC /*__declspec(dllexport)   HINT: We export via the .def file */
-    #elif defined AVT_VMBAPI_C_LIB                  // static LIB
-        #define IMEXPORTC
-    #else                                           // import
-        #define IMEXPORTC __declspec(dllimport)
-    #endif
-    
-    #ifndef _WIN64
-        // Calling convention
-        #define VMB_CALL __stdcall
-    #else
-        // Calling convention
-        #define VMB_CALL
-    #endif
-#elif defined (__GNUC__) && (__GNUC__ >= 4) && defined (__ELF__)
-    // SO exports (requires compiler option -fvisibility=hidden)
-    #ifdef AVT_VMBAPI_C_EXPORTS
-        #define IMEXPORTC __attribute__((visibility("default")))
-    #else
-        #define IMEXPORTC
-    #endif
-    
-    #ifdef __i386__
-        // Calling convention
-        #define VMB_CALL __attribute__((stdcall))
-    #else
-        // Calling convention
-        #define VMB_CALL
-    #endif
-#elif defined (__APPLE__)
-    #define IMEXPORTC __attribute__((visibility("default")))
-    // Calling convention
-    #define VMB_CALL
-#else
-    #error Unknown platform, file needs adaption
-#endif
-
-//===== TYPES ==============================================================
-#include "VmbCommonTypes.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Timeout parameter signaling a blocking call
-#define VMBINFINITE        0xFFFFFFFF
-
-// Constant for the Vimba handle to be able to access Vimba system features
-static const VmbHandle_t  gVimbaHandle = (VmbHandle_t)1;
-
-//
-// Camera interface type (for instance FireWire, Ethernet);
-//
-typedef enum VmbInterfaceType
-{
-    VmbInterfaceUnknown      = 0,           // Interface is not known to this version of the API
-    VmbInterfaceFirewire     = 1,           // 1394
-    VmbInterfaceEthernet     = 2,           // GigE
-    VmbInterfaceUsb          = 3,           // USB 3.0
-    VmbInterfaceCL           = 4,           // Camera Link
-    VmbInterfaceCSI2         = 5,           // CSI-2
-} VmbInterfaceType;
-typedef VmbUint32_t VmbInterface_t;         // Type for an Interface; for values see VmbInterfaceType
-
-//
-// Access mode for configurable devices (interfaces, cameras).
-// Used in VmbCameraInfo_t, VmbInterfaceInfo_t as flags, so multiple modes can be
-// announced, while in VmbCameraOpen(), no combination must be used.
-//
-typedef enum VmbAccessModeType
-{
-    VmbAccessModeNone       = 0,            // No access
-    VmbAccessModeFull       = 1,            // Read and write access
-    VmbAccessModeRead       = 2,            // Read-only access
-    VmbAccessModeConfig     = 4,            // Configuration access (GeV)
-    VmbAccessModeLite       = 8,            // Read and write access without feature access (only addresses)
-} VmbAccessModeType;
-typedef VmbUint32_t VmbAccessMode_t;        // Type for an AccessMode; for values see VmbAccessModeType
-
-//
-// Interface information.
-// Holds read-only information about an interface.
-//
-typedef struct
-{
-    const char*     interfaceIdString;      // Unique identifier for each interface
-    VmbInterface_t  interfaceType;          // Interface type, see VmbInterfaceType
-    const char*     interfaceName;          // Interface name, given by the transport layer
-    const char*     serialString;           // Serial number
-    VmbAccessMode_t permittedAccess;        // Used access mode, see VmbAccessModeType
-} VmbInterfaceInfo_t;
-
-//
-// Camera information.
-// Holds read-only information about a camera.
-//
-typedef struct
-{
-    const char*     cameraIdString;         // Unique identifier for each camera
-    const char*     cameraName;             // Name of the camera
-    const char*     modelName;              // Model name
-    const char*     serialString;           // Serial number
-    VmbAccessMode_t permittedAccess;        // Used access mode, see VmbAccessModeType
-    const char*     interfaceIdString;      // Unique value for each interface or bus
-} VmbCameraInfo_t;
-
-//
-// Supported feature data types
-//
-typedef enum VmbFeatureDataType
-{
-    VmbFeatureDataUnknown     = 0,          // Unknown feature type
-    VmbFeatureDataInt         = 1,          // 64 bit integer feature
-    VmbFeatureDataFloat       = 2,          // 64 bit floating point feature
-    VmbFeatureDataEnum        = 3,          // Enumeration feature
-    VmbFeatureDataString      = 4,          // String feature
-    VmbFeatureDataBool        = 5,          // Boolean feature
-    VmbFeatureDataCommand     = 6,          // Command feature
-    VmbFeatureDataRaw         = 7,          // Raw (direct register access) feature
-    VmbFeatureDataNone        = 8,          // Feature with no data
-} VmbFeatureDataType;
-typedef VmbUint32_t VmbFeatureData_t;       // Data type for a Feature; for values see VmbFeatureDataType
-
-//
-// Feature visibility
-//
-typedef enum VmbFeatureVisibilityType
-{
-    VmbFeatureVisibilityUnknown      = 0,   // Feature visibility is not known
-    VmbFeatureVisibilityBeginner     = 1,   // Feature is visible in feature list (beginner level)
-    VmbFeatureVisibilityExpert       = 2,   // Feature is visible in feature list (expert level)
-    VmbFeatureVisibilityGuru         = 3,   // Feature is visible in feature list (guru level)
-    VmbFeatureVisibilityInvisible    = 4,   // Feature is not visible in feature list
-} VmbFeatureVisibilityType;
-typedef VmbUint32_t VmbFeatureVisibility_t; // Type for Feature visibility; for values see VmbFeatureVisibilityType
-
-//
-// Feature flags
-//
-typedef enum VmbFeatureFlagsType
-{
-    VmbFeatureFlagsNone         = 0,        // No additional information is provided
-    VmbFeatureFlagsRead         = 1,        // Static info about read access. Current status depends on access mode, check with VmbFeachtureAccessQuery()
-    VmbFeatureFlagsWrite        = 2,        // Static info about write access. Current status depends on access mode, check with VmbFeachtureAccessQuery()
-    VmbFeatureFlagsVolatile     = 8,        // Value may change at any time
-    VmbFeatureFlagsModifyWrite  = 16,       // Value may change after a write
-} VmbFeatureFlagsType;
-typedef VmbUint32_t VmbFeatureFlags_t;      // Type for Feature flags; for values see VmbFeatureFlagsType
-
-//
-// Feature information.
-// Holds read-only information about a feature.
-//
-typedef struct VmbFeatureInfo
-{
-    const char*             name;                   // Name used in the API
-    VmbFeatureData_t        featureDataType;        // Data type of this feature
-    VmbFeatureFlags_t       featureFlags;           // Access flags for this feature
-    const char*             category;               // Category this feature can be found in
-    const char*             displayName;            // Feature name to be used in GUIs
-    VmbUint32_t             pollingTime;            // Predefined polling time for volatile features
-    const char*             unit;                   // Measuring unit as given in the XML file
-    const char*             representation;         // Representation of a numeric feature
-    VmbFeatureVisibility_t  visibility;             // GUI visibility
-    const char*             tooltip;                // Short description, e.g. for a tooltip
-    const char*             description;            // Longer description
-    const char*             sfncNamespace;          // Namespace this feature resides in
-    VmbBool_t               isStreamable;           // Indicates if a feature can be stored to / loaded from a file
-    VmbBool_t               hasAffectedFeatures;    // Indicates if the feature potentially affects other features
-    VmbBool_t               hasSelectedFeatures;    // Indicates if the feature selects other features
-} VmbFeatureInfo_t;
-
-//
-// Info about possible entries of an enumeration feature
-//
-typedef struct VmbFeatureEnumEntry
-{
-    const char*             name;           // Name used in the API
-    const char*             displayName;    // Enumeration entry name to be used in GUIs
-    VmbFeatureVisibility_t  visibility;     // GUI visibility
-    const char*             tooltip;        // Short description, e.g. for a tooltip
-    const char*             description;    // Longer description
-    const char*             sfncNamespace;  // Namespace this feature resides in
-    VmbInt64_t              intValue;       // Integer value of this enumeration entry
-} VmbFeatureEnumEntry_t;
-
-//
-// Status of a frame transfer
-//
-typedef enum VmbFrameStatusType
-{
-    VmbFrameStatusComplete       =  0,      // Frame has been completed without errors
-    VmbFrameStatusIncomplete     = -1,      // Frame could not be filled to the end
-    VmbFrameStatusTooSmall       = -2,      // Frame buffer was too small
-    VmbFrameStatusInvalid        = -3,      // Frame buffer was invalid
-} VmbFrameStatusType;
-typedef VmbInt32_t VmbFrameStatus_t;        // Type for the frame status; for values see VmbFrameStatusType
-
-//
-// Frame flags
-//
-typedef enum VmbFrameFlagsType
-{
-    VmbFrameFlagsNone       = 0,            // No additional information is provided
-    VmbFrameFlagsDimension  = 1,            // Frame's dimension is provided
-    VmbFrameFlagsOffset     = 2,            // Frame's offset is provided (ROI)
-    VmbFrameFlagsFrameID    = 4,            // Frame's ID is provided
-    VmbFrameFlagsTimestamp  = 8,            // Frame's timestamp is provided
-} VmbFrameFlagsType;
-typedef VmbUint32_t VmbFrameFlags_t;        // Type for Frame flags; for values see VmbFrameFlagsType
-
-//
-// Frame delivered by the camera
-//
-typedef struct
-{
-    //----- In -----
-    void*               buffer;             // Comprises image and ancillary data
-    VmbUint32_t         bufferSize;         // Size of the data buffer
-
-    void*               context[4];         // 4 void pointers that can be employed by the user (e.g. for storing handles)
-
-    //----- Out -----
-    VmbFrameStatus_t    receiveStatus;      // Resulting status of the receive operation
-    VmbFrameFlags_t     receiveFlags;       // Flags indicating which additional frame information is available
-
-    VmbUint32_t         imageSize;          // Size of the image data inside the data buffer
-    VmbUint32_t         ancillarySize;      // Size of the ancillary data inside the data buffer
-
-    VmbPixelFormat_t    pixelFormat;        // Pixel format of the image
-
-    VmbUint32_t         width;              // Width of an image
-    VmbUint32_t         height;             // Height of an image
-    VmbUint32_t         offsetX;            // Horizontal offset of an image
-    VmbUint32_t         offsetY;            // Vertical offset of an image
-
-    VmbUint64_t         frameID;            // Unique ID of this frame in this stream
-    VmbUint64_t         timestamp;          // Timestamp set by the camera
-} VmbFrame_t;
-
-//
-// Type of features that are to be saved (persisted) to the XML file when using VmbCameraSettingsSave
-//
-typedef enum VmbFeaturePersistType
-{
-    VmbFeaturePersistAll        = 0,        // Save all features to XML, including look-up tables
-    VmbFeaturePersistStreamable = 1,        // Save only features marked as streamable, excluding look-up tables
-    VmbFeaturePersistNoLUT      = 2         // Save all features except look-up tables (default)
-} VmbFeaturePersistType;
-typedef VmbUint32_t VmbFeaturePersist_t;    // Type for feature persistence; for values see VmbFeaturePersistType
-
-//
-// Parameters determining the operation mode of VmbCameraSettingsSave and VmbCameraSettingsLoad
-//
-typedef struct
-{
-    VmbFeaturePersist_t persistType;        // Type of features that are to be saved
-    VmbUint32_t         maxIterations;      // Number of iterations when loading settings
-    VmbUint32_t         loggingLevel;       // Determines level of detail for load/save settings logging
-} VmbFeaturePersistSettings_t;
-
-
-// ----- Callbacks ------------------------------------------------------------
-
-//
-// Name: VmbInvalidationCallback
-//
-// Purpose: Invalidation Callback type for a function that gets called in a separate thread
-//          and has been registered with VmbFeatureInvalidationRegister()
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle          Handle for an entity that exposes features
-//  [in ]  const char*          name            Name of the feature
-//  [in ]  void*                pUserContext    Pointer to the user context, see VmbFeatureInvalidationRegister
-//
-// Details:     While the callback is run, all feature data is atomic.  After the
-//              callback finishes, the feature data might be updated with new values.
-//
-// Note:        Do not spend too much time in this thread; it will prevent the feature values
-//              from being updated from any other thread or the lower-level drivers.
-//
-typedef void (VMB_CALL *VmbInvalidationCallback)( const VmbHandle_t  handle, const char*  name, void*  pUserContext );
-
-//
-// Name: VmbFrameCallback
-//
-// Purpose: Frame Callback type for a function that gets called in a separate thread
-//          if a frame has been queued with VmbCaptureFrameQueue()
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    cameraHandle    Handle of the camera
-//  [out]  VmbFrame_t*          pFrame          Frame completed
-//
-typedef void (VMB_CALL *VmbFrameCallback)( const VmbHandle_t  cameraHandle, VmbFrame_t*  pFrame );
-
-
-//===== FUNCTION PROTOTYPES ===================================================
-
-//----- API Version -----------------------------------------------------------
-
-//
-// Method:      VmbVersionQuery()
-//
-// Purpose:     Retrieve the version number of VimbaC.
-//
-// Parameters:
-//
-//  [out]  VmbVersionInfo_t*    pVersionInfo        Pointer to the struct where version information
-//                                                  is copied
-//  [in ]  VmbUint32_t          sizeofVersionInfo   Size of structure in bytes
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorStructSize:    The given struct size is not valid for this version of the API
-//  - VmbErrorBadParameter:  If "pVersionInfo" is NULL.
-//
-// Details:     This function can be called at anytime, even before the API is
-//              initialized. All other version numbers may be queried via feature access.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbVersionQuery ( VmbVersionInfo_t*  pVersionInfo,
-                                                VmbUint32_t        sizeofVersionInfo );
-
-
-//----- API Initialization ----------------------------------------------------
-
-//
-// Method:      VmbStartup()
-//
-// Purpose:     Initialize the VimbaC API.
-//
-// Parameters:
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorInternalFault: An internal fault occurred
-//
-// Details:     On successful return, the API is initialized; this is a necessary call.
-//
-// Note:        This method must be called before any VimbaC function other than VmbVersionQuery() is run.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbStartup ( void );
-
-//
-// Method:      VmbShutdown()
-//
-// Purpose:     Perform a shutdown on the API.
-//
-// Parameters:  none
-//
-// Returns:     none
-//
-// Details:     This will free some resources and deallocate all physical resources if applicable.
-//
-IMEXPORTC void VMB_CALL VmbShutdown ( void );
-
-
-//----- Camera Enumeration & Information --------------------------------------
-
-//
-// Method:      VmbCamerasList()
-//
-// Purpose:     Retrieve a list of all cameras.
-//
-// Parameters:
-//
-//  [out]  VmbCameraInfo_t*  pCameraInfo        Array of VmbCameraInfo_t, allocated by
-//                                              the caller. The camera list is
-//                                              copied here. May be NULL if pNumFound is used for size query.
-//  [in ]  VmbUint32_t       listLength         Number of VmbCameraInfo_t elements provided
-//  [out]  VmbUint32_t*      pNumFound          Number of VmbCameraInfo_t elements found.
-//  [in ]  VmbUint32_t       sizeofCameraInfo   Size of the structure (if pCameraInfo == NULL this parameter is ignored)
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorStructSize:    The given struct size is not valid for this API version
-//  - VmbErrorMoreData:      The given list length was insufficient to hold all available entries
-//  - VmbErrorBadParameter:  If "pNumFound" was NULL
-//
-// Details:     Camera detection is started with the registration of the "DiscoveryCameraEvent"
-//              event or the first call of VmbCamerasList(), which may be delayed if no
-//              "DiscoveryCameraEvent" event is registered (see examples).
-//              VmbCamerasList() is usually called twice: once with an empty array to query the
-//              list length, and then again with an array of the correct length. If camera
-//              lists change between the calls, pNumFound may deviate from the query return.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbCamerasList ( VmbCameraInfo_t*   pCameraInfo,
-                                               VmbUint32_t        listLength,
-                                               VmbUint32_t*       pNumFound,
-                                               VmbUint32_t        sizeofCameraInfo );
-
-//
-// Method:      VmbCameraInfoQuery()
-//
-// Purpose:     Retrieve information on a camera given by an ID.
-//
-// Parameters:
-//
-//  [in ] const char*       idString           ID of the camera
-//  [out] VmbCameraInfo_t*  pInfo              Structure where information will be copied. May be NULL.
-//  [in ] VmbUint32_t       sizeofCameraInfo   Size of the structure
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorNotFound:      The designated camera cannot be found
-//  - VmbErrorStructSize:    The given struct size is not valid for this API version
-//  - VmbErrorBadParameter:  If "idString" was NULL
-//
-// Details:     May be called if a camera has not been opened by the application yet.
-//              Examples for "idString": 
-//              "DEV_81237473991" for an ID given by a transport layer,
-//              "169.254.12.13" for an IP address,
-//              "000F314C4BE5" for a MAC address or 
-//              "DEV_1234567890" for an ID as reported by Vimba
-//
-IMEXPORTC VmbError_t VMB_CALL VmbCameraInfoQuery ( const char*         idString,
-                                                   VmbCameraInfo_t*    pInfo,
-                                                   VmbUint32_t         sizeofCameraInfo );
-
-//
-// Method:      VmbCameraOpen()
-//
-// Purpose:     Open the specified camera.
-//
-// Parameters:
-//
-//  [in ]  const char*      idString        ID of the camera
-//  [in ]  VmbAccessMode_t  accessMode      Determines the level of control you have on the camera
-//  [out]  VmbHandle_t*     pCameraHandle   A camera handle
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorNotFound:      The designated camera cannot be found
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorInvalidCall:   If called from frame callback
-//  - VmbErrorBadParameter:  If "idString" or "pCameraHandle" is NULL
-//
-// Details:     A camera may be opened in a specific access mode, which determines
-//              the level of control you have on a camera.
-//              Examples for "idString": 
-//              "DEV_81237473991" for an ID given by a transport layer,
-//              "169.254.12.13" for an IP address,
-//              "000F314C4BE5" for a MAC address or 
-//              "DEV_1234567890" for an ID as reported by Vimba
-//
-IMEXPORTC VmbError_t VMB_CALL VmbCameraOpen ( const char*      idString,
-                                              VmbAccessMode_t  accessMode,
-                                              VmbHandle_t*     pCameraHandle );
-
-//
-// Method:      VmbCameraClose()
-//
-// Purpose:     Close the specified camera.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t  cameraHandle      A valid camera handle
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorInvalidCall:   If called from frame callback
-//
-// Details:     Depending on the access mode this camera was opened with, events are killed,
-//              callbacks are unregistered, and camera control is released.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbCameraClose ( const VmbHandle_t  cameraHandle );
-
-
-//----- Features ----------------------------------------------------------
-
-//
-// Method:      VmbFeaturesList()
-//
-// Purpose:     List all the features for this entity.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle            Handle for an entity that exposes features
-//  [out]  VmbFeatureInfo_t*    pFeatureInfoList  An array of VmbFeatureInfo_t to be filled by the API. May be NULL if pNumFund is used for size query.
-//  [in ]  VmbUint32_t          listLength        Number of VmbFeatureInfo_t elements provided
-//  [out]  VmbUint32_t*         pNumFound         Number of VmbFeatureInfo_t elements found. May be NULL if pFeatureInfoList is not NULL.
-//  [in ]  VmbUint32_t          sizeofFeatureInfo Size of a VmbFeatureInfo_t entry
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorStructSize:    The given struct size of VmbFeatureInfo_t is not valid for this version of the API
-//  - VmbErrorMoreData:      The given list length was insufficient to hold all available entries
-//
-// Details:     This method lists all implemented features, whether they are currently available or not.
-//              The list of features does not change as long as the camera/interface is connected.
-//              "pNumFound" returns the number of VmbFeatureInfo elements.
-//              This function is usually called twice: once with an empty list to query the length
-//              of the list, and then again with an list of the correct length.
-//              
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeaturesList ( const VmbHandle_t   handle,
-                                                VmbFeatureInfo_t*   pFeatureInfoList,
-                                                VmbUint32_t         listLength,
-                                                VmbUint32_t*        pNumFound,
-                                                VmbUint32_t         sizeofFeatureInfo );
-
-//
-// Method:      VmbFeatureInfoQuery()
-//
-// Purpose:     Query information about the constant properties of a feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t        handle             Handle for an entity that exposes features
-//  [in ]  const char*              name               Name of the feature
-//  [out]  VmbFeatureInfo_t*        pFeatureInfo       The feature info to query
-//  [in ]  VmbUint32_t              sizeofFeatureInfo  Size of the structure
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorStructSize:    The given struct size is not valid for this version of the API
-//
-// Details:     Users provide a pointer to VmbFeatureInfo_t, which is then set to the internal representation.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureInfoQuery ( const VmbHandle_t   handle,
-                                                    const char*         name,
-                                                    VmbFeatureInfo_t*   pFeatureInfo,
-                                                    VmbUint32_t         sizeofFeatureInfo );
-
-//
-// Method:      VmbFeatureListAffected()
-//
-// Purpose:     List all the features that might be affected by changes to this feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle              Handle for an entity that exposes features
-//  [in ]  const char*          name                Name of the feature
-//  [out]  VmbFeatureInfo_t*    pFeatureInfoList    An array of VmbFeatureInfo_t to be filled by the API. May be NULL if pNumFound is used for size query.
-//  [in ]  VmbUint32_t          listLength          Number of VmbFeatureInfo_t elements provided
-//  [out]  VmbUint32_t*         pNumFound           Number of VmbFeatureInfo_t elements found. May be NULL is pFeatureInfoList is not NULL.
-//  [in ]  VmbUint32_t          sizeofFeatureInfo   Size of a VmbFeatureInfo_t entry
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorStructSize:    The given struct size of VmbFeatureInfo_t is not valid for this version of the API
-//  - VmbErrorMoreData:      The given list length was insufficient to hold all available entries
-//
-// Details:     This method lists all affected features, whether they are currently available or not.
-//              The value of affected features depends directly or indirectly on this feature
-//              (including all selected features).
-//              The list of features does not change as long as the camera/interface is connected.
-//              This function is usually called twice: once with an empty array to query the length
-//              of the list, and then again with an array of the correct length.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureListAffected ( const VmbHandle_t   handle,
-                                                       const char*         name,
-                                                       VmbFeatureInfo_t*   pFeatureInfoList,
-                                                       VmbUint32_t         listLength,
-                                                       VmbUint32_t*        pNumFound,
-                                                       VmbUint32_t         sizeofFeatureInfo );
-
-//
-// Method:      VmbFeatureListSelected()
-//
-// Purpose:     List all the features selected by a given feature for this module.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle              Handle for an entity that exposes features
-//  [in ]  const char*          name                Name of the feature
-//  [out]  VmbFeatureInfo_t*    pFeatureInfoList    An array of VmbFeatureInfo_t to be filled by the API. May be NULL if pNumFound is used for size query.
-//  [in ]  VmbUint32_t          listLength          Number of VmbFeatureInfo_t elements provided
-//  [out]  VmbUint32_t*         pNumFound           Number of VmbFeatureInfo_t elements found. May be NULL if pFeatureInfoList is not NULL.
-//  [in ]  VmbUint32_t          sizeofFeatureInfo   Size of a VmbFeatureInfo_t entry
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorStructSize:    The given struct size is not valid for this version of the API
-//  - VmbErrorMoreData:      The given list length was insufficient to hold all available entries
-//
-// Details:     This method lists all selected features, whether they are currently available or not.
-//              Features with selected features ("selectors") have no direct impact on the camera,
-//              but only influence the register address that selected features point to.
-//              The list of features does not change while the camera/interface is connected.
-//              This function is usually called twice: once with an empty array to query the length
-//              of the list, and then again with an array of the correct length.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureListSelected ( const VmbHandle_t  handle,
-                                                       const char*        name,
-                                                       VmbFeatureInfo_t*  pFeatureInfoList,
-                                                       VmbUint32_t        listLength,
-                                                       VmbUint32_t*       pNumFound,
-                                                       VmbUint32_t        sizeofFeatureInfo );
-
-//
-// Method:      VmbFeatureAccessQuery()
-//
-// Purpose:     Return the dynamic read and write capabilities of this feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t  handle          Handle for an entity that exposes features.
-//  [in ]  const char *       name            Name of the feature.
-//  [out]  VmbBool_t *        pIsReadable     Indicates if this feature is readable. May be NULL.
-//  [out]  VmbBool_t *        pIsWriteable    Indicates if this feature is writable. May be NULL.
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorBadParameter:  If "pIsReadable" and "pIsWriteable" were both NULL
-//  - VmbErrorNotFound:      The feature was not found
-//
-// Details:     The access mode of a feature may change. For example, if "PacketSize"
-//              is locked while image data is streamed, it is only readable.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureAccessQuery ( const VmbHandle_t   handle,
-                                                      const char*         name,
-                                                      VmbBool_t *         pIsReadable,
-                                                      VmbBool_t *         pIsWriteable );
-
-
-//-----Integer --------
-
-//
-// Method:      VmbFeatureIntGet()
-//
-// Purpose:     Get the value of an integer feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the feature
-//  [out]  VmbInt64_t*          pValue      Value to get
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Integer
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbErrorBadParameter:  If "name" or "pValue" is NULL
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureIntGet ( const VmbHandle_t   handle,
-                                                 const char*         name,
-                                                 VmbInt64_t*         pValue );
-
-//
-// Method:      VmbFeatureIntSet()
-//
-// Purpose:     Set the value of an integer feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle    Handle for an entity that exposes features
-//  [in ]  const char*          name      Name of the feature
-//  [in ]  VmbInt64_t           value     Value to set
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Integer
-//  - VmbErrorInvalidValue:  If "value" is either out of bounds or not an increment of the minimum
-//  - VmbErrorBadParameter:  If "name" is NULL
-//  - VmbErrorNotFound:      If the feature was not found
-//  - VmbErrorInvalidCall:   If called from frame callback
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureIntSet ( const VmbHandle_t   handle,
-                                                 const char*         name,
-                                                 VmbInt64_t          value );
-
-//
-// Method:      VmbFeatureIntRangeQuery()
-//
-// Purpose:     Query the range of an integer feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the feature
-//  [out]  VmbInt64_t*          pMin        Minimum value to be returned. May be NULL.
-//  [out]  VmbInt64_t*          pMax        Maximum value to be returned. May be NULL.
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorBadParameter:  If "name" is NULL or "pMin" and "pMax" are NULL
-//  - VmbErrorWrongType:     The type of feature "name" is not Integer
-//  - VmbErrorNotFound:      If the feature was not found
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureIntRangeQuery ( const VmbHandle_t   handle,
-                                                        const char*         name,
-                                                        VmbInt64_t*         pMin,
-                                                        VmbInt64_t*         pMax );
-
-//
-// Method:      VmbFeatureIntIncrementQuery()
-//
-// Purpose:     Query the increment of an integer feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle         Handle for an entity that exposes features
-//  [in ]  const char*          name           Name of the feature
-//  [out]  VmbInt64_t*          pValue         Value of the increment to get.
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Integer
-//  - VmbErrorNotFound:      The feature was not found
-//    VmbErrorBadParameter:  If "name" or "pValue" is NULL
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureIntIncrementQuery ( const VmbHandle_t   handle,
-                                                            const char*         name,
-                                                            VmbInt64_t*         pValue );
-
-//-----Float --------
-
-//
-// Method:      VmbFeatureFloatGet()
-//
-// Purpose:     Get the value of a float feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the feature
-//  [out]  double*              pValue      Value to get
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Float
-//  - VmbErrorBadParameter:  If "name" or "pValue" is NULL
-//  - VmbErrorNotFound:      The feature was not found
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureFloatGet ( const VmbHandle_t   handle,
-                                                   const char*         name,
-                                                   double*             pValue );
-
-//
-// Method:      VmbFeatureFloatSet()
-//
-// Purpose:     Set the value of a float feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the feature
-//  [in ]  double               value       Value to set
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Float
-//  - VmbErrorInvalidValue:  If "value" is not within valid bounds
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbErrorBadParameter:  If "name" is NULL
-//  - VmbErrorInvalidCall:   If called from frame callback
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureFloatSet ( const VmbHandle_t   handle,
-                                                   const char*         name,
-                                                   double              value );
-
-//
-// Method:      VmbFeatureFloatRangeQuery()
-//
-// Purpose:     Query the range of a float feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the feature
-//  [out]  double*              pMin        Minimum value to be returned. May be NULL.
-//  [out]  double*              pMax        Maximum value to be returned. May be NULL.
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Float
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbBadParameter:       If "name" is NULL or "pMin" and "pMax" are NULL
-//
-// Details:     Only one of the values may be queried if the other parameter is set to NULL,
-//              but if both parameters are NULL, an error is returned.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureFloatRangeQuery ( const VmbHandle_t   handle,
-                                                          const char*         name,
-                                                          double*             pMin,
-                                                          double*             pMax );
-
-//
-// Method:      VmbFeatureFloatIncrementQuery()
-//
-// Purpose:     Query the increment of an float feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle         Handle for an entity that exposes features
-//  [in ]  const char*          name           Name of the feature
-//  [out]  VmbBool_t *          pHasIncrement  "true" if this float feature has an increment.
-//  [out]  double*              pValue         Value of the increment to get.
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Integer
-//  - VmbErrorNotFound:      The feature was not found
-//    VmbErrorBadParameter:  If "name" or "pValue" is NULL
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureFloatIncrementQuery ( const VmbHandle_t   handle,
-                                                              const char*         name,
-                                                              VmbBool_t*          pHasIncrement,
-                                                              double*             pValue );
-//-----Enum --------
-
-//
-// Method:      VmbFeatureEnumGet()
-//
-// Purpose:     Get the value of an enumeration feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the feature
-//  [out]  const char**         pValue      The current enumeration value. The returned value
-//                                          is a reference to the API value
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Enumeration
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbErrorBadParameter:  If "name" or "pValue" is NULL
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumGet ( const VmbHandle_t   handle,
-                                                  const char*         name,
-                                                  const char**        pValue );
-
-//
-// Method:      VmbFeatureEnumSet()
-//
-// Purpose:     Set the value of an enumeration feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the feature
-//  [in ]  const char*          value       Value to set
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Enumeration
-//  - VmbErrorInvalidValue:  If "value" is not within valid bounds
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbErrorBadParameter:  If "name" ore "value" is NULL
-//  - VmbErrorInvalidCall:   If called from frame callback
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumSet ( const VmbHandle_t   handle,
-                                                  const char*         name,
-                                                  const char*         value );
-
-//
-// Method:      VmbFeatureEnumRangeQuery()
-//
-// Purpose:     Query the value range of an enumeration feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle          Handle for an entity that exposes features
-//  [in ]  const char*          name            Name of the feature
-//  [out]  const char**         pNameArray      An array of enumeration value names; may be NULL if pNumFilled is used for size query
-//  [in ]  VmbUint32_t          arrayLength     Number of elements in the array
-//  [out]  VmbUint32_t *        pNumFilled      Number of filled elements; may be NULL if pNameArray is not NULL
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorMoreData:      The given array length was insufficient to hold all available entries
-//  - VmbErrorWrongType:     The type of feature "name" is not Enumeration
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbErrorBadParameter:  If "name" is NULL or "pNameArray" and "pNumFilled" are NULL
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumRangeQuery ( const VmbHandle_t   handle,
-                                                         const char*         name,
-                                                         const char**        pNameArray,
-                                                         VmbUint32_t         arrayLength,
-                                                         VmbUint32_t*        pNumFilled );
-
-//
-// Method:      VmbFeatureEnumIsAvailable()
-//
-// Purpose:     Check if a certain value of an enumeration is available.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle          Handle for an entity that exposes features
-//  [in ]  const char*          name            Name of the feature
-//  [in ]  const char*          value           Value to check
-//  [out]  VmbBool_t *          pIsAvailable    Indicates if the given enumeration value is available
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Enumeration
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbErrorBadParameter:  If "name" or "value" or "pIsAvailable" is NULL
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumIsAvailable ( const VmbHandle_t   handle,
-                                                          const char*         name,
-                                                          const char*         value,
-                                                          VmbBool_t *         pIsAvailable );
-
-//
-// Method:      VmbFeatureEnumAsInt()
-//
-// Purpose:     Get the integer value for a given enumeration string value.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle     Handle for an entity that exposes features
-//  [in ]  const char*          name       Name of the feature
-//  [in ]  const char*          value      The enumeration value to get the integer value for
-//  [out]  VmbInt64_t*          pIntVal    The integer value for this enumeration entry
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Enumeration
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbErrorBadParameter:  If "name" or "value" or "pIntVal" is NULL
-//
-// Details:     Converts a name of an enum member into an int value ("Mono12Packed" to 0x10C0006)
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumAsInt ( const VmbHandle_t   handle,
-                                                    const char*         name,
-                                                    const char*         value,
-                                                    VmbInt64_t*         pIntVal );
-
-//
-// Method:      VmbFeatureEnumAsString()
-//
-// Purpose:     Get the enumeration string value for a given integer value.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle          Handle for an entity that exposes features
-//  [in ]  const char*          name            Name of the feature
-//  [in ]  VmbInt64_t           intValue        The numeric value
-//  [out]  const char**         pStringValue    The string value for the numeric value
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Enumeration
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbErrorBadParameter:  If "name" or "pStringValue" is NULL
-//
-// Details:     Converts an int value to a name of an enum member (e.g. 0x10C0006 to "Mono12Packed")
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumAsString ( const VmbHandle_t   handle,
-                                                       const char*         name,
-                                                       VmbInt64_t          intValue,
-                                                       const char**        pStringValue );
-
-//
-// Method:      VmbFeatureEnumEntryGet()
-//
-// Purpose:     Get infos about an entry of an enumeration feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t        handle                  Handle for an entity that exposes features
-//  [in ]  const char*              featureName             Name of the feature
-//  [in ]  const char*              entryName               Name of the enum entry of that feature
-//  [out]  VmbFeatureEnumEntry_t*   pFeatureEnumEntry       Infos about that entry returned by the API
-//  [in]   VmbUint32_t              sizeofFeatureEnumEntry  Size of the structure
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorStructSize     Size of VmbFeatureEnumEntry_t is not compatible with the API version
-//  - VmbErrorWrongType:     The type of feature "name" is not Enumeration
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbErrorBadParameter:  If "featureName" or "entryName" or "pFeatureEnumEntry" is NULL
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureEnumEntryGet ( const VmbHandle_t       handle,
-                                                       const char*             featureName,
-                                                       const char*             entryName,
-                                                       VmbFeatureEnumEntry_t*  pFeatureEnumEntry,
-                                                       VmbUint32_t             sizeofFeatureEnumEntry );
-
-//-----String --------
-
-//
-// Method:      VmbFeatureStringGet()
-//
-// Purpose:     Get the value of a string feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle          Handle for an entity that exposes features
-//  [in ]  const char*          name            Name of the string feature
-//  [out]  char*                buffer          String buffer to fill. May be NULL if pSizeFilled is used for size query.
-//  [in ]  VmbUint32_t          bufferSize      Size of the input buffer
-//  [out]  VmbUint32_t*         pSizeFilled     Size actually filled. May be NULL if buffer is not NULL.
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorMoreData:      The given buffer size was too small
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbErrorWrongType:     The type of feature "name" is not String
-//
-// Details:     This function is usually called twice: once with an empty buffer to query the length
-//              of the string, and then again with a buffer of the correct length.
-
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureStringGet ( const VmbHandle_t   handle,
-                                                    const char*         name,
-                                                    char*               buffer,
-                                                    VmbUint32_t         bufferSize,
-                                                    VmbUint32_t*        pSizeFilled );
-
-//
-// Method:    VmbFeatureStringSet()
-//
-// Purpose:   Set the value of a string feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the string feature
-//  [in ]  const char*          value       Value to set
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorNotFound:      The feature was not found
-//  - VmbErrorWrongType:     The type of feature "name" is not String
-//  - VmbErrorInvalidValue:  If length of "value" exceeded the maximum length
-//  - VmbErrorBadParameter:  If "name" or "value" is NULL
-//  - VmbErrorInvalidCall:   If called from frame callback
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureStringSet ( const VmbHandle_t   handle,
-                                                    const char*         name,
-                                                    const char*         value );
-
-//
-// Method:      VmbFeatureStringMaxlengthQuery()
-//
-// Purpose:     Get the maximum length of a string feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle        Handle for an entity that exposes features
-//  [in ]  const char*          name          Name of the string feature
-//  [out]  VmbUint32_t*         pMaxLength    Maximum length of this string feature
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not String
-//  - VmbErrorBadParameter:  If "name" or "pMaxLength" is NULL
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureStringMaxlengthQuery ( const VmbHandle_t   handle,
-                                                               const char*         name,
-                                                               VmbUint32_t*        pMaxLength );
-
-//-----Boolean --------
-
-//
-// Method:      VmbFeatureBoolGet()
-//
-// Purpose:     Get the value of a boolean feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle    Handle for an entity that exposes features
-//  [in ]  const char*          name      Name of the boolean feature
-//  [out]  VmbBool_t *          pValue    Value to be read
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Boolean
-//  - VmbErrorNotFound:      If feature is not found
-//  - VmbErrorBadParameter:  If "name" or "pValue" is NULL
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureBoolGet ( const VmbHandle_t   handle,
-                                                  const char*         name,
-                                                  VmbBool_t *         pValue );
-
-//
-// Method:      VmbFeatureBoolSet()
-//
-// Purpose:     Set the value of a boolean feature.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the boolean feature
-//  [in ]  VmbBool_t            value       Value to write
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Boolean
-//  - VmbErrorInvalidValue:  If "value" is not within valid bounds
-//  - VmbErrorNotFound:      If the feature is not found
-//  - VmbErrorBadParameter:  If "name" is NULL
-//  - VmbErrorInvalidCall:   If called from frame callback
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureBoolSet ( const VmbHandle_t   handle,
-                                                  const char*         name,
-                                                  VmbBool_t           value );
-
-//-----Command ------
-
-//
-// Method:    VmbFeatureCommandRun()
-//
-// Purpose:   Run a feature command.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the command feature
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Command
-//  - VmbErrorNotFound:      Feature was not found
-//  - VmbErrorBadParameter:  If "name" is NULL
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureCommandRun ( const VmbHandle_t   handle,
-                                                     const char*         name );
-
-//
-// Method:      VmbFeatureCommandIsDone()
-//
-// Purpose:     Check if a feature command is done.
-//
-// Parameters:
-//
-//  [in ]     const VmbHandle_t handle     Handle for an entity that exposes features
-//  [in ]     const char*       name       Name of the command feature
-//  [out]     VmbBool_t *       pIsDone    State of the command.
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Command
-//  - VmbErrorNotFound:      Feature was not found
-//  - VmbErrorBadParameter:  If "name" or "pIsDone" is NULL
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureCommandIsDone ( const VmbHandle_t   handle,
-                                                        const char*         name,
-                                                        VmbBool_t *         pIsDone );
-
-//-----Raw --------
-
-//
-// Method:      VmbFeatureRawGet()
-//
-// Purpose:     Read the memory contents of an area given by a feature name.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle         Handle for an entity that exposes features
-//  [in ]  const char*          name           Name of the raw feature
-//  [out]  char*                pBuffer        Buffer to fill
-//  [in ]  VmbUint32_t          bufferSize     Size of the buffer to be filled
-//  [out]  VmbUint32_t*         pSizeFilled    Number of bytes actually filled
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Register
-//  - VmbErrorNotFound:      Feature was not found
-//  - VmbErrorBadParameter:  If "name" or "pBuffer" or "pSizeFilled" is NULL
-//
-// Details:     This feature type corresponds to a top-level "Register" feature in GenICam.
-//              Data transfer is split up by the transport layer if the feature length is too large.
-//              You can get the size of the memory area addressed by the feature "name" by VmbFeatureRawLengthQuery().
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureRawGet ( const VmbHandle_t   handle,
-                                                 const char*         name,
-                                                 char*               pBuffer,
-                                                 VmbUint32_t         bufferSize,
-                                                 VmbUint32_t*        pSizeFilled );
-
-//
-// Method:      VmbFeatureRawSet()
-//
-// Purpose:     Write to a memory area given by a feature name.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the raw feature
-//  [in ]  const char*          pBuffer     Data buffer to use
-//  [in ]  VmbUint32_t          bufferSize  Size of the buffer
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Register
-//  - VmbErrorNotFound:      Feature was not found
-//  - VmbErrorBadParameter:  If "name" or "pBuffer" is NULL
-//  - VmbErrorInvalidCall:   If called from frame callback
-//
-// Details:     This feature type corresponds to a first-level "Register" node in the XML file.
-//              Data transfer is split up by the transport layer if the feature length is too large.
-//              You can get the size of the memory area addressed by the feature "name" by VmbFeatureRawLengthQuery().
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureRawSet ( const VmbHandle_t   handle,
-                                                 const char*         name,
-                                                 const char*         pBuffer,
-                                                 VmbUint32_t         bufferSize );
-
-//
-// Method:      VmbFeatureRawLengthQuery()
-//
-// Purpose:     Get the length of a raw feature for memory transfers.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle      Handle for an entity that exposes features
-//  [in ]  const char*          name        Name of the raw feature
-//  [out]  VmbUint32_t*         pLength     Length of the raw feature area (in bytes)
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorWrongType:     The type of feature "name" is not Register
-//  - VmbErrorNotFound:      Feature not found
-//  - VmbErrorBadParameter:  If "name" or "pLength" is NULL
-//
-// Details:     This feature type corresponds to a first-level "Register" node in the XML file.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureRawLengthQuery ( const VmbHandle_t   handle,
-                                                         const char*         name,
-                                                         VmbUint32_t*        pLength );
-
-//----- Feature invalidation --------------------------------------------------------
-
-//
-// Method:      VmbFeatureInvalidationRegister()
-//
-// Purpose:     Register a VmbInvalidationCallback callback for feature invalidation signaling.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t        handle          Handle for an entity that emits events
-//  [in ]  const char*              name            Name of the event
-//  [in ]  VmbInvalidationCallback  callback        Callback to be run, when invalidation occurs
-//  [in ]  void*                    pUserContext    User context passed to function
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//
-// Details:     Any feature change, either of its value or of its access state, may be tracked
-//              by registering an invalidation callback.
-//              Registering multiple callbacks for one feature invalidation event is possible because
-//              only the combination of handle, name, and callback is used as key. If the same
-//              combination of handle, name, and callback is registered a second time, it overwrites
-//              the previous one.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureInvalidationRegister ( const VmbHandle_t        handle,
-                                                               const char*              name,
-                                                               VmbInvalidationCallback  callback,
-                                                               void*                    pUserContext );
-
-//
-// Method:      VmbFeatureInvalidationUnregister()
-//
-// Purpose:     Unregister a previously registered feature invalidation callback.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t        handle          Handle for an entity that emits events
-//  [in ]  const char*              name            Name of the event
-//  [in ]  VmbInvalidationCallback  callback        Callback to be removed
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//
-// Details:     Since multiple callbacks may be registered for a feature invalidation event,
-//              a combination of handle, name, and callback is needed for unregistering, too.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFeatureInvalidationUnregister ( const VmbHandle_t        handle,
-                                                                 const char*              name,
-                                                                 VmbInvalidationCallback  callback );
-
-
-//-----  Image preparation and acquisition ---------------------------------------------------
-
-//
-// Method:      VmbFrameAnnounce()
-//
-// Purpose:     Announce frames to the API that may be queued for frame capturing later.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    cameraHandle    Handle for a camera
-//  [in ]  const VmbFrame_t*    pFrame          Frame buffer to announce
-//  [in ]  VmbUint32_t          sizeofFrame     Size of the frame structure
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given camera handle is not valid
-//  - VmbErrorBadParameter:  The given frame pointer is not valid or "sizeofFrame" is 0
-//  - VmbErrorStructSize:    The given struct size is not valid for this version of the API
-//
-// Details:     Allows some preparation for frames like DMA preparation depending on the transport layer.
-//              The order in which the frames are announced is not taken into consideration by the API.
-//              The method can be used to annouce a previously allocated frame buffer to the transport layer.
-//              Alternatively, in case "pFrame->buffer" points to NULL, the method will allocate and announce 
-//              a new buffer. In this case "pFrame->buffer" contains the allocated buffer address on return.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFrameAnnounce ( const VmbHandle_t   cameraHandle,
-                                                 const VmbFrame_t*   pFrame,
-                                                 VmbUint32_t         sizeofFrame );
-
-
-//
-// Method:      VmbFrameRevoke()
-//
-// Purpose:     Revoke a frame from the API.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    cameraHandle    Handle for a camera
-//  [in ]  const VmbFrame_t*    pFrame          Frame buffer to be removed from the list of announced frames
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given camera handle is not valid
-//  - VmbErrorBadParameter:  The given frame pointer is not valid
-//  - VmbErrorStructSize:    The given struct size is not valid for this version of the API
-//
-// Details:    The referenced frame is removed from the pool of frames for capturing images.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFrameRevoke ( const VmbHandle_t   cameraHandle,
-                                               const VmbFrame_t*   pFrame );
-
-
-//
-// Method:      VmbFrameRevokeAll()
-//
-// Purpose:     Revoke all frames assigned to a certain camera.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    cameraHandle    Handle for a camera
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given camera handle is not valid
-//
-IMEXPORTC VmbError_t VMB_CALL VmbFrameRevokeAll ( const VmbHandle_t  cameraHandle );
-
-
-//
-// Method:      VmbCaptureStart()
-//
-// Purpose:     Prepare the API for incoming frames.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    cameraHandle    Handle for a camera
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorDeviceNotOpen: Camera was not opened for usage
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//
-IMEXPORTC VmbError_t VMB_CALL VmbCaptureStart ( const VmbHandle_t  cameraHandle );
-
-
-//
-// Method:      VmbCaptureEnd()
-//
-// Purpose:     Stop the API from being able to receive frames.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t  cameraHandle    Handle for a camera
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//
-// Details:     Consequences of VmbCaptureEnd():
-//                  - The frame callback will not be called anymore
-//
-IMEXPORTC VmbError_t VMB_CALL VmbCaptureEnd ( const VmbHandle_t  cameraHandle );
-
-
-//
-// Method:      VmbCaptureFrameQueue()
-//
-// Purpose:     Queue frames that may be filled during frame capturing.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    cameraHandle    Handle of the camera
-//  [in ]  const VmbFrame_t*    pFrame          Pointer to an already announced frame
-//  [in ]  VmbFrameCallback     callback        Callback to be run when the frame is complete.  NULL is Ok.
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given frame is not valid
-//  - VmbErrorStructSize:    The given struct size is not valid for this version of the API
-//
-// Details:     The given frame is put into a queue that will be filled sequentially.
-//              The order in which the frames are filled is determined by the order in which they are queued.
-//              If the frame was announced with VmbFrameAnnounce() before, the application
-//              has to ensure that the frame is also revoked by calling VmbFrameRevoke() or
-//              VmbFrameRevokeAll() when cleaning up.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbCaptureFrameQueue ( const VmbHandle_t   cameraHandle,
-                                                     const VmbFrame_t*   pFrame,
-                                                     VmbFrameCallback    callback );
-
-
-//
-// Method:      VmbCaptureFrameWait()
-//
-// Purpose:     Wait for a queued frame to be filled (or dequeued).
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    cameraHandle    Handle of the camera
-//  [in ]  const VmbFrame_t*    pFrame          Pointer to an already announced & queued frame
-//  [in ]  VmbUint32_t          timeout         Timeout (in milliseconds)
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorTimeout:       Call timed out
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//
-IMEXPORTC VmbError_t VMB_CALL VmbCaptureFrameWait ( const VmbHandle_t   cameraHandle,
-                                                    const VmbFrame_t*   pFrame,
-                                                    VmbUint32_t         timeout);
-
-
-//
-// Method:      VmbCaptureQueueFlush()
-//
-// Purpose:     Flush the capture queue.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t cameraHandle   Handle of the camera to flush
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//
-// Details:     Control of all the currently queued frames will be returned to the user,
-//              leaving no frames in the capture queue.
-//              After this call, no frame notification will occur until frames are queued again.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbCaptureQueueFlush ( const VmbHandle_t  cameraHandle );
-
-
-//----- Interface Enumeration & Information --------------------------------------
-
-//
-// Method:      VmbInterfacesList()
-//
-// Purpose:     List all the interfaces currently visible to VimbaC.
-//
-// Parameters:
-//
-//  [out]  VmbInterfaceInfo_t*  pInterfaceInfo          Array of VmbInterfaceInfo_t, allocated by the caller.
-//                                                      The interface list is copied here. May be NULL.
-//  [in ]  VmbUint32_t          listLength              Number of entries in the caller's pList array
-//  [out]  VmbUint32_t*         pNumFound               Number of interfaces found (may be more than
-//                                                      listLength!) returned here.
-//  [in ]  VmbUint32_t          sizeofInterfaceInfo     Size of one VmbInterfaceInfo_t entry
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorStructSize:    The given struct size is not valid for this API version
-//  - VmbErrorMoreData:      The given list length was insufficient to hold all available entries
-//  - VmbErrorBadParameter:  If "pNumFound" was NULL
-//
-// Details:     All the interfaces known via GenICam TransportLayers are listed by this 
-//              command and filled into the provided array. Interfaces may correspond to 
-//              adapter cards or frame grabber cards or, in the case of FireWire to the 
-//              whole 1394 infrastructure, for instance.
-//              This function is usually called twice: once with an empty array to query the length
-//              of the list, and then again with an array of the correct length.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbInterfacesList ( VmbInterfaceInfo_t*  pInterfaceInfo,
-                                                  VmbUint32_t          listLength,
-                                                  VmbUint32_t*         pNumFound,
-                                                  VmbUint32_t          sizeofInterfaceInfo );
-
-//
-// Method:      VmbInterfaceOpen()
-//
-// Purpose:     Open an interface handle for feature access.
-//
-// Parameters:
-//
-//  [in ]  const char*      idString           The ID of the interface to get the handle for
-//                                             (returned by VmbInterfacesList())
-//  [out]  VmbHandle_t*     pInterfaceHandle   The handle for this interface.
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorNotFound:      The designated interface cannot be found
-//  - VmbErrorBadParameter:  If "pInterfaceHandle" was NULL
-//
-// Details:     An interface can be opened if interface-specific control or information
-//              is required, e.g. the number of devices attached to a specific interface.
-//              Access is then possible via feature access methods.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbInterfaceOpen ( const char*     idString,
-                                                 VmbHandle_t*    pInterfaceHandle );
-
-//
-// Method:      VmbInterfaceClose()
-//
-// Purpose:     Close an interface.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t   interfaceHandle    The handle of the interface to close.
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//
-// Details:     After configuration of the interface, close it by calling this function.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbInterfaceClose ( const VmbHandle_t  interfaceHandle );
-
-
-//----- Ancillary data --------------------------------------------------------
-
-//
-// Method:      VmbAncillaryDataOpen()
-//
-// Purpose:     Get a working handle to allow access to the elements of the ancillary data via feature access.
-//
-// Parameters:
-//
-//  [in ]  VmbFrame_t*   pFrame                 Pointer to a filled frame
-//  [out]  VmbHandle_t*  pAncillaryDataHandle   Handle to the ancillary data inside the frame
-//
-// Returns:
-//
-//  - VmbErrorSuccess:			No error
-//  - VmbErrorBadHandle:		Chunk mode of the camera was not activated. See feature ChunkModeActive
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//
-// Details:     This function can only succeed if the given frame has been filled by the API.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbAncillaryDataOpen ( VmbFrame_t*     pFrame,
-                                                     VmbHandle_t*    pAncillaryDataHandle );
-
-//
-// Method:      VmbAncillaryDataClose()
-//
-// Purpose:     Destroy the working handle to the ancillary data inside a frame.
-//
-// Parameters:
-//
-//  [in ]  VmbHandle_t  ancillaryDataHandle  Handle to ancillary frame data
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//
-// Details:     After reading the ancillary data and before re-queuing the frame, ancillary data
-//              must be closed.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbAncillaryDataClose ( VmbHandle_t  ancillaryDataHandle );
-
-
-//----- Memory/Register access --------------------------------------------
-//----- Memory/Register access --------------------------------------------
-
-//
-// Method:      VmbMemoryRead()
-//
-// Purpose:     Read an array of bytes.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle          Handle for an entity that allows memory access
-//  [in ]  VmbUint64_t          address         Address to be used for this read operation
-//  [in ]  VmbUint32_t          bufferSize      Size of the data buffer to read
-//  [out]  char*                dataBuffer      Buffer to be filled
-//  [out]  VmbUint32_t*         pSizeComplete   Size of the data actually read
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//
-IMEXPORTC VmbError_t VMB_CALL VmbMemoryRead ( const VmbHandle_t   handle,
-                                              VmbUint64_t         address,
-                                              VmbUint32_t         bufferSize,
-                                              char*               dataBuffer,
-                                              VmbUint32_t*        pSizeComplete );
-
-//
-// Method:      VmbMemoryWrite()
-//
-// Purpose:     Write an array of bytes.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle          Handle for an entity that allows memory access
-//  [in ]  VmbUint64_t          address         Address to be used for this read operation
-//  [in ]  VmbUint32_t          bufferSize      Size of the data buffer to write
-//  [in ]  const char*          dataBuffer      Data to write
-//  [out]  VmbUint32_t*         pSizeComplete   Number of bytes successfully written; if an
-//                                              error occurs this is less than bufferSize
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorMoreData:      Not all data were written; see pSizeComplete value for the number of bytes written
-//
-IMEXPORTC VmbError_t VMB_CALL VmbMemoryWrite ( const VmbHandle_t   handle,
-                                               VmbUint64_t         address,
-                                               VmbUint32_t         bufferSize,
-                                               const char*         dataBuffer,
-                                               VmbUint32_t*        pSizeComplete );
-
-//
-// Method:      VmbRegistersRead()
-//
-// Purpose:     Read an array of registers.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle              Handle for an entity that allows register access
-//  [in ]  VmbUint32_t          readCount           Number of registers to be read
-//  [in ]  const VmbUint64_t*   pAddressArray       Array of addresses to be used for this read operation
-//  [out]  VmbUint64_t*         pDataArray          Array of registers to be used for this read operation
-//  [out]  VmbUint32_t*         pNumCompleteReads   Number of reads completed
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorIncomplete:    Not all the requested reads could be completed
-//
-// Details:     Two arrays of data must be provided: an array of register addresses and one
-//              for corresponding values to be read. The registers are read consecutively
-//              until an error occurs or all registers are written successfully.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbRegistersRead ( const VmbHandle_t   handle,
-                                                 VmbUint32_t         readCount,
-                                                 const VmbUint64_t*  pAddressArray,
-                                                 VmbUint64_t*        pDataArray,
-                                                 VmbUint32_t*        pNumCompleteReads );
-
-//
-// Method:      VmbRegistersWrite()
-//
-// Purpose:     Write an array of registers.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t    handle                  Handle for an entity that allows register access
-//  [in ]  VmbUint32_t          writeCount              Number of registers to be written
-//  [in ]  const VmbUint64_t*   pAddressArray           Array of addresses to be used for this write operation
-//  [in ]  const VmbUint64_t*   pDataArray              Array of reads to be used for this write operation
-//  [out]  VmbUint32_t*         pNumCompleteWrites      Number of writes completed
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorIncomplete:    Not all the requested writes could be completed
-//
-// Details:     Two arrays of data must be provided: an array of register addresses and one with the
-//              corresponding values to be written to these addresses. The registers are written
-//              consecutively until an error occurs or all registers are written successfully.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbRegistersWrite ( const VmbHandle_t   handle,
-                                                  VmbUint32_t         writeCount,
-                                                  const VmbUint64_t*  pAddressArray,
-                                                  const VmbUint64_t*  pDataArray,
-                                                  VmbUint32_t*        pNumCompleteWrites );
-
-//
-// Method:      VmbCameraSettingsSave()
-//
-// Purpose:     Saves all feature values to XML file.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t             handle              Handle for an entity that allows register access
-//  [in ]  const char*                   fileName            Name of XML file to save settings
-//  [in ]  VmbFeaturePersistSettings_t*  pSettings           Settings struct
-//  [in ]  VmbUint32_t                   sizeofSettings      Size of settings struct
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorBadParameter:  If "fileName" is NULL
-//
-// Details:     Camera must be opened beforehand and function needs corresponding handle.
-//              With given filename parameter path and name of XML file can be determined.
-//              Additionally behaviour of function can be set with providing 'persistent struct'.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbCameraSettingsSave ( const VmbHandle_t               handle, 
-                                                      const char *                    fileName, 
-                                                      VmbFeaturePersistSettings_t *   pSettings, 
-                                                      VmbUint32_t                     sizeofSettings );
-
-//
-// Method:      VmbCameraSettingsLoad()
-//
-// Purpose:     Load all feature values from XML file to device.
-//
-// Parameters:
-//
-//  [in ]  const VmbHandle_t             handle              Handle for an entity that allows register access
-//  [in ]  const char*                   fileName            Name of XML file to save settings
-//  [in ]  VmbFeaturePersistSettings_t*  pSettings           Settings struct
-//  [in ]  VmbUint32_t                   sizeofSettings      Size of settings struct
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:     The given handle is not valid
-//  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-//  - VmbErrorBadParameter:  If "fileName" is NULL
-//
-// Details:     Camera must be opened beforehand and function needs corresponding handle.
-//              With given filename parameter path and name of XML file can be determined.
-//              Additionally behaviour of function can be set with providing 'settings struct'.
-//
-IMEXPORTC VmbError_t VMB_CALL VmbCameraSettingsLoad ( const VmbHandle_t               handle, 
-                                                      const char *                    fileName, 
-                                                      VmbFeaturePersistSettings_t *   pSettings, 
-                                                      VmbUint32_t                     sizeofSettings );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // VIMBAC_H_INCLUDE_
diff --git a/VimbaC/Include/VmbCommonTypes.h b/VimbaC/Include/VmbCommonTypes.h
deleted file mode 100644
index a0f1c314efcf5bc71f0552b6259a32cc920a8672..0000000000000000000000000000000000000000
--- a/VimbaC/Include/VmbCommonTypes.h
+++ /dev/null
@@ -1,252 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this header file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        VmbCommonTypes.h
-
-  Description: Main header file for the common types of the Vimba APIs.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef VMBCOMMONTYPES_H_INCLUDE_
-#define VMBCOMMONTYPES_H_INCLUDE_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// This file describes all necessary definitions for types used within 
-// Allied Vision's Vimba APIs. These type definitions are designed to be
-// portable from other languages and other operating systems.
-
-#if defined (_MSC_VER)
-
-    // 8 bit signed integer on Microsoft systems
-    typedef __int8              VmbInt8_t;
-    // 8 bit unsigned integer on Microsoft systems
-    typedef unsigned __int8     VmbUint8_t;
-    // 16 bit signed integer on Microsoft systems
-    typedef __int16             VmbInt16_t;
-    // 16 bit unsigned integer on Microsoft systems
-    typedef unsigned __int16    VmbUint16_t;
-    // 32 bit signed integer on Microsoft systems
-    typedef __int32             VmbInt32_t;
-    // 32 bit unsigned integer on Microsoft systems
-    typedef unsigned __int32    VmbUint32_t;
-    // 64 bit signed integer on Microsoft systems
-    typedef __int64             VmbInt64_t;
-    // 64 bit unsigned integer on Microsoft systems
-    typedef unsigned __int64    VmbUint64_t;
-
-#else // for non MS or GNU compilers without any warranty for the size
-
-    //#pragma message("Compatibility warning: typedefs in " __FILE__ " may not have the correct number of bits")
-
-    // 8 bit signed integer on non-Microsoft systems
-    typedef signed char         VmbInt8_t;
-    // 8 bit unsigned integer on non-Microsoft systems
-    typedef unsigned char       VmbUint8_t;
-    // 16 bit signed integer on non-Microsoft systems
-    typedef short               VmbInt16_t;
-    // 16 bit unsigned integer on non-Microsoft systems
-    typedef unsigned short      VmbUint16_t;
-    // 32 bit signed integer on non-Microsoft systems
-    typedef int                 VmbInt32_t;
-    // 32 bit signed integer on non-Microsoft systems
-    typedef unsigned int        VmbUint32_t;
-    // 64 bit signed integer on non-Microsoft systems
-    typedef long long           VmbInt64_t;
-    // 64 bit unsigned integer on non-Microsoft systems
-    typedef unsigned long long  VmbUint64_t;
-
-#endif
-
-    // Handle; e.g. for a camera
-    typedef void*               VmbHandle_t;
-
-// Standard type for boolean values
-#if defined(__cplusplus) || defined(__bool_true_false_are_defined)
-    typedef bool                VmbBool_t;
-#else
-    // Boolean type (equivalent to char)
-    typedef char                VmbBool_t;      // 1 means true and 0 means false
-#endif
-    //
-    // enum for bool values
-    //
-    typedef enum VmbBoolVal
-    {
-        VmbBoolTrue = 1,
-        VmbBoolFalse = 0,
-    } VmbBoolVal;
-
-    // char type
-    typedef unsigned char       VmbUchar_t;
-
-    //
-    // Error codes, returned by most functions: (not yet complete)
-    //
-    typedef enum VmbErrorType
-    {
-        VmbErrorNothing         =  27,          // No error. No Success. Nothing really!
-        VmbErrorSuccess         =  0,           // No error
-        VmbErrorInternalFault   = -1,           // Unexpected fault in VimbaC or driver
-        VmbErrorApiNotStarted   = -2,           // VmbStartup() was not called before the current command
-        VmbErrorNotFound        = -3,           // The designated instance (camera, feature etc.) cannot be found
-        VmbErrorBadHandle       = -4,           // The given handle is not valid
-        VmbErrorDeviceNotOpen   = -5,           // Device was not opened for usage
-        VmbErrorInvalidAccess   = -6,           // Operation is invalid with the current access mode
-        VmbErrorBadParameter    = -7,           // One of the parameters is invalid (usually an illegal pointer)
-        VmbErrorStructSize      = -8,           // The given struct size is not valid for this version of the API
-        VmbErrorMoreData        = -9,           // More data available in a string/list than space is provided
-        VmbErrorWrongType       = -10,          // Wrong feature type for this access function 
-        VmbErrorInvalidValue    = -11,          // The value is not valid; either out of bounds or not an increment of the minimum
-        VmbErrorTimeout         = -12,          // Timeout during wait
-        VmbErrorOther           = -13,          // Other error
-        VmbErrorResources       = -14,          // Resources not available (e.g. memory)
-        VmbErrorInvalidCall     = -15,          // Call is invalid in the current context (e.g. callback)
-        VmbErrorNoTL            = -16,          // No transport layers are found 
-        VmbErrorNotImplemented  = -17,          // API feature is not implemented
-        VmbErrorNotSupported    = -18,          // API feature is not supported
-        VmbErrorIncomplete      = -19,          // The current operation was not completed (e.g. a multiple registers read or write)
-        VmbErrorIO              = -20,          // Low level IO error in transport layer
-    } VmbErrorType;
-    typedef VmbInt32_t VmbError_t;              // Type for an error returned by API methods; for values see VmbErrorType
-
-    //
-    // Version information
-    //
-    typedef struct
-    {
-        VmbUint32_t             major;          // Major version number
-        VmbUint32_t             minor;          // Minor version number
-        VmbUint32_t             patch;          // Patch version number
-
-    } VmbVersionInfo_t;
-
-    //
-    // Indicate if pixel is monochrome or RGB.
-    //
-    typedef enum VmbPixelType
-    {
-        VmbPixelMono  =         0x01000000,     // Monochrome pixel
-        VmbPixelColor =         0x02000000      // Pixel bearing color information
-    } VmbPixelType;
-
-    //
-    // Indicate number of bits for a pixel. Needed for building values of VmbPixelFormatType
-    //
-    typedef enum VmbPixelOccupyType
-    {
-        VmbPixelOccupy8Bit  =   0x00080000,     // Pixel effectively occupies 8 bits
-        VmbPixelOccupy10Bit =   0x000A0000,     // Pixel effectively occupies 10 bits
-        VmbPixelOccupy12Bit =   0x000C0000,     // Pixel effectively occupies 12 bits
-        VmbPixelOccupy14Bit =   0x000E0000,     // Pixel effectively occupies 14 bits
-        VmbPixelOccupy16Bit =   0x00100000,     // Pixel effectively occupies 16 bits
-        VmbPixelOccupy24Bit =   0x00180000,     // Pixel effectively occupies 24 bits
-        VmbPixelOccupy32Bit =   0x00200000,     // Pixel effectively occupies 32 bits
-        VmbPixelOccupy48Bit =   0x00300000,     // Pixel effectively occupies 48 bits
-        VmbPixelOccupy64Bit =   0x00400000,     // Pixel effectively occupies 48 bits
-    } VmbPixelOccupyType;
-
-    //
-    // Pixel format types.
-    // As far as possible, the Pixel Format Naming Convention (PFNC) has been followed, allowing a few deviations.
-    // If data spans more than one byte, it is always LSB aligned, except if stated differently.
-    //
-    typedef enum VmbPixelFormatType
-    {
-        // Mono formats
-        VmbPixelFormatMono8               = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy8Bit)  | 0x0001,  // Monochrome, 8 bits (PFNC:Mono8)
-        VmbPixelFormatMono10              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0003,  // Monochrome, 10 bits in 16 bits (PFNC:Mono10)
-        VmbPixelFormatMono10p             = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy10Bit) | 0x0046,  // Monochrome, 4x10 bits continuously packed in 40 bits (PFNC:Mono10p)
-        VmbPixelFormatMono12              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0005,  // Monochrome, 12 bits in 16 bits (PFNC:Mono12)
-        VmbPixelFormatMono12Packed        = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0006,  // Monochrome, 2x12 bits in 24 bits (GEV:Mono12Packed)
-        VmbPixelFormatMono12p             = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0047,  // Monochrome, 2x12 bits continuously packed in 24 bits (PFNC:Mono12p)
-        VmbPixelFormatMono14              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0025,  // Monochrome, 14 bits in 16 bits (PFNC:Mono14)
-        VmbPixelFormatMono16              = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0007,  // Monochrome, 16 bits (PFNC:Mono16)
-        // Bayer formats
-        VmbPixelFormatBayerGR8            = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy8Bit)  | 0x0008,  // Bayer-color, 8 bits, starting with GR line (PFNC:BayerGR8)
-        VmbPixelFormatBayerRG8            = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy8Bit)  | 0x0009,  // Bayer-color, 8 bits, starting with RG line (PFNC:BayerRG8)
-        VmbPixelFormatBayerGB8            = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy8Bit)  | 0x000A,  // Bayer-color, 8 bits, starting with GB line (PFNC:BayerGB8)
-        VmbPixelFormatBayerBG8            = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy8Bit)  | 0x000B,  // Bayer-color, 8 bits, starting with BG line (PFNC:BayerBG8)
-        VmbPixelFormatBayerGR10           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x000C,  // Bayer-color, 10 bits in 16 bits, starting with GR line (PFNC:BayerGR10)
-        VmbPixelFormatBayerRG10           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x000D,  // Bayer-color, 10 bits in 16 bits, starting with RG line (PFNC:BayerRG10)
-        VmbPixelFormatBayerGB10           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x000E,  // Bayer-color, 10 bits in 16 bits, starting with GB line (PFNC:BayerGB10)
-        VmbPixelFormatBayerBG10           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x000F,  // Bayer-color, 10 bits in 16 bits, starting with BG line (PFNC:BayerBG10)
-        VmbPixelFormatBayerGR12           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0010,  // Bayer-color, 12 bits in 16 bits, starting with GR line (PFNC:BayerGR12)
-        VmbPixelFormatBayerRG12           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0011,  // Bayer-color, 12 bits in 16 bits, starting with RG line (PFNC:BayerRG12)
-        VmbPixelFormatBayerGB12           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0012,  // Bayer-color, 12 bits in 16 bits, starting with GB line (PFNC:BayerGB12)
-        VmbPixelFormatBayerBG12           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0013,  // Bayer-color, 12 bits in 16 bits, starting with BG line (PFNC:BayerBG12)
-        VmbPixelFormatBayerGR12Packed     = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x002A,  // Bayer-color, 2x12 bits in 24 bits, starting with GR line (GEV:BayerGR12Packed)
-        VmbPixelFormatBayerRG12Packed     = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x002B,  // Bayer-color, 2x12 bits in 24 bits, starting with RG line (GEV:BayerRG12Packed)
-        VmbPixelFormatBayerGB12Packed     = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x002C,  // Bayer-color, 2x12 bits in 24 bits, starting with GB line (GEV:BayerGB12Packed)
-        VmbPixelFormatBayerBG12Packed     = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x002D,  // Bayer-color, 2x12 bits in 24 bits, starting with BG line (GEV:BayerBG12Packed)
-        VmbPixelFormatBayerGR10p          = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy10Bit) | 0x0056,  // Bayer-color, 4x10 bits continuously packed in 40 bits, starting with GR line (PFNC:BayerGR10p)
-        VmbPixelFormatBayerRG10p          = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy10Bit) | 0x0058,  // Bayer-color, 4x10 bits continuously packed in 40 bits, starting with RG line (PFNC:BayerRG10p)
-        VmbPixelFormatBayerGB10p          = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy10Bit) | 0x0054,  // Bayer-color, 4x10 bits continuously packed in 40 bits, starting with GB line (PFNC:BayerGB10p)
-        VmbPixelFormatBayerBG10p          = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy10Bit) | 0x0052,  // Bayer-color, 4x10 bits continuously packed in 40 bits, starting with BG line (PFNC:BayerBG10p)
-        VmbPixelFormatBayerGR12p          = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0057,  // Bayer-color, 2x12 bits continuously packed in 24 bits, starting with GR line (PFNC:BayerGR12p)
-        VmbPixelFormatBayerRG12p          = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0059,  // Bayer-color, 2x12 bits continuously packed in 24 bits, starting with RG line (PFNC:BayerRG12p)
-        VmbPixelFormatBayerGB12p          = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0055,  // Bayer-color, 2x12 bits continuously packed in 24 bits, starting with GB line (PFNC:BayerGB12p)
-        VmbPixelFormatBayerBG12p          = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x0053,  // Bayer-color, 2x12 bits continuously packed in 24 bits, starting with BG line (PFNC:BayerBG12p)
-        VmbPixelFormatBayerGR16           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x002E,  // Bayer-color, 16 bits, starting with GR line (PFNC:BayerGR16)
-        VmbPixelFormatBayerRG16           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x002F,  // Bayer-color, 16 bits, starting with RG line (PFNC:BayerRG16)
-        VmbPixelFormatBayerGB16           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0030,  // Bayer-color, 16 bits, starting with GB line (PFNC:BayerGB16)
-        VmbPixelFormatBayerBG16           = static_cast<uint8_t>(VmbPixelMono)  | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0031,  // Bayer-color, 16 bits, starting with BG line (PFNC:BayerBG16)
-        // RGB formats
-        VmbPixelFormatRgb8                = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy24Bit) | 0x0014,  // RGB, 8 bits x 3 (PFNC:RGB8)
-        VmbPixelFormatBgr8                = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy24Bit) | 0x0015,  // BGR, 8 bits x 3 (PFNC:Bgr8)
-        VmbPixelFormatRgb10               = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x0018,  // RGB, 10 bits in 16 bits x 3 (PFNC:RGB10)
-        VmbPixelFormatBgr10               = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x0019,  // BGR, 10 bits in 16 bits x 3 (PFNC:BGR10)
-        VmbPixelFormatRgb12               = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x001A,  // RGB, 12 bits in 16 bits x 3 (PFNC:RGB12)
-        VmbPixelFormatBgr12               = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x001B,  // BGR, 12 bits in 16 bits x 3 (PFNC:BGR12)
-        VmbPixelFormatRgb14               = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x005E,  // RGB, 14 bits in 16 bits x 3 (PFNC:RGB14)
-        VmbPixelFormatBgr14               = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x004A,  // BGR, 14 bits in 16 bits x 3 (PFNC:BGR14)
-        VmbPixelFormatRgb16               = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x0033,  // RGB, 16 bits x 3 (PFNC:RGB16)
-        VmbPixelFormatBgr16               = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy48Bit) | 0x004B,  // BGR, 16 bits x 3 (PFNC:BGR16)
-        // RGBA formats
-        VmbPixelFormatArgb8               = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy32Bit) | 0x0016,  // ARGB, 8 bits x 4 (PFNC:RGBa8)
-        VmbPixelFormatRgba8               = VmbPixelFormatArgb8,                           // RGBA, 8 bits x 4, legacy name
-        VmbPixelFormatBgra8               = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy32Bit) | 0x0017,  // BGRA, 8 bits x 4 (PFNC:BGRa8)
-        VmbPixelFormatRgba10              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x005F,  // RGBA, 10 bits in 16 bits x 4
-        VmbPixelFormatBgra10              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x004C,  // BGRA, 10 bits in 16 bits x 4
-        VmbPixelFormatRgba12              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x0061,  // RGBA, 12 bits in 16 bits x 4
-        VmbPixelFormatBgra12              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x004E,  // BGRA, 12 bits in 16 bits x 4
-        VmbPixelFormatRgba14              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x0063,  // RGBA, 14 bits in 16 bits x 4
-        VmbPixelFormatBgra14              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x0050,  // BGRA, 14 bits in 16 bits x 4
-        VmbPixelFormatRgba16              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x0064,  // RGBA, 16 bits x 4
-        VmbPixelFormatBgra16              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy64Bit) | 0x0051,  // BGRA, 16 bits x 4
-        // YUV/YCbCr formats
-        VmbPixelFormatYuv411              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x001E,  // YUV 411 with 8 bits (GEV:YUV411Packed)
-        VmbPixelFormatYuv422              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x001F,  // YUV 422 with 8 bits (GEV:YUV422Packed)
-        VmbPixelFormatYuv444              = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy24Bit) | 0x0020,  // YUV 444 with 8 bits (GEV:YUV444Packed)
-        VmbPixelFormatYCbCr411_8_CbYYCrYY = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy12Bit) | 0x003C,  // Y�CbCr 411 with 8 bits (PFNC:YCbCr411_8_CbYYCrYY) - identical to VmbPixelFormatYuv411
-        VmbPixelFormatYCbCr422_8_CbYCrY   = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy16Bit) | 0x0043,  // Y�CbCr 422 with 8 bits (PFNC:YCbCr422_8_CbYCrY) - identical to VmbPixelFormatYuv422
-        VmbPixelFormatYCbCr8_CbYCr        = static_cast<uint8_t>(VmbPixelColor) | static_cast<uint8_t>(VmbPixelOccupy24Bit) | 0x003A,  // Y�CbCr 444 with 8 bits (PFNC:YCbCr8_CbYCr) - identical to VmbPixelFormatYuv444
-        VmbPixelFormatLast,
-    } VmbPixelFormatType;
-    typedef VmbUint32_t VmbPixelFormat_t;       // Type for the pixel format; for values see VmbPixelFormatType
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // VMBCOMMONTYPES_H_INCLUDE_
diff --git a/VimbaCPP/Build/Make/Common.mk b/VimbaCPP/Build/Make/Common.mk
deleted file mode 100644
index a727c58aec3b8621bd0bd4362e5f7111bc49f025..0000000000000000000000000000000000000000
--- a/VimbaCPP/Build/Make/Common.mk
+++ /dev/null
@@ -1,100 +0,0 @@
-UNAME		= $(shell uname -m)
-
-ifeq ($(UNAME),i386)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),i486)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),i586)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),i686)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),x86_64)
-ARCH		= x86
-AUTOWORDSIZE	= 64
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),amd64)
-ARCH		= x86
-AUTOWORDSIZE	= 64
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),armv6l)
-ARCH		= arm
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= soft
-endif
-ifeq ($(UNAME),armv7l)
-ARCH		= arm
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= soft
-endif
-ifeq ($(UNAME),aarch64)
-ARCH		= arm
-AUTOWORDSIZE	= 64
-AUTOFLOATABI	= hard
-endif
-
-#Possible word sizes: 32, 64
-WORDSIZE        = $(AUTOWORDSIZE)
-#Possible float abis: soft, hard
-FLOATABI	= $(AUTOFLOATABI)
-
-ifneq ($(WORDSIZE),32)
-ifneq ($(WORDSIZE),64)
-$(error Invalid word size set)
-endif
-endif
-
-ifneq ($(FLOATABI),soft)
-ifneq ($(FLOATABI),hard)
-ifneq ($(FLOATABI),ignore)
-$(error Invalid float abi set)
-endif
-endif
-endif
-
-#Common tools
-PKGCFG          = pkg-config
-MKDIR           = mkdir
-RM              = rm
-CXX             = g++
-MAKE            = make
-CP              = cp
-
-#Set word size on x86
-ifeq ($(ARCH),x86)
-ARCH_CFLAGS     = -m$(WORDSIZE)
-endif
-
-#Configure compiler and linker for soft or hard-float build on ARM
-ifeq ($(ARCH),arm)
-ifeq ($(FLOATABI),soft)
-ARCH_CFLAGS	= -marm -mfloat-abi=soft -march=armv4t
-else ifeq ($(FLOATABI),hard)
-ifeq ($(WORDSIZE),32)
-ARCH_CFLAGS	= -mthumb -mfloat-abi=hard -march=armv7
-else ifeq ($(WORDSIZE),64)
-ARCH_CFLAGS	= -march=armv8-a
-endif
-endif
-endif
-
-ifeq ($(CONFIG),Debug)
-  CONFIG_CFLAGS         = -O0 -g
-else
-  CONFIG_CFLAGS         = -O3
-endif
-
-COMMON_CFLAGS   = $(CONFIG_CFLAGS) $(ARCH_CFLAGS) -fPIC
diff --git a/VimbaCPP/Build/Make/Makefile b/VimbaCPP/Build/Make/Makefile
deleted file mode 100644
index 2e6760020703607b0a6df0ab1ba091dac4f89108..0000000000000000000000000000000000000000
--- a/VimbaCPP/Build/Make/Makefile
+++ /dev/null
@@ -1,73 +0,0 @@
-PROJECT_NAME            = VimbaCPP
-
-PROJECT_DIR             = ../..
-VIMBASDK_DIR            = $(PROJECT_DIR)/..
-MAKE_INCLUDE_DIR        = $(CURDIR)
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = lib$(PROJECT_NAME).so
-BIN_DIR             = dynamic/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaC.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(PROJECT_DIR)/..
-
-LIBS                = $(VIMBAC_LIBS) \
-                      -lpthread
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBAC_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/AncillaryData.o \
-		      $(OBJ_DIR)/BaseFeature.o \
-                      $(OBJ_DIR)/BasicLockable.o \
-                      $(OBJ_DIR)/BoolFeature.o \
-                      $(OBJ_DIR)/Camera.o \
-                      $(OBJ_DIR)/Clock.o \
-                      $(OBJ_DIR)/CommandFeature.o \
-                      $(OBJ_DIR)/Condition.o \
-                      $(OBJ_DIR)/ConditionHelper.o \
-                      $(OBJ_DIR)/DefaultCameraFactory.o \
-                      $(OBJ_DIR)/EnumEntry.o \
-                      $(OBJ_DIR)/EnumFeature.o \
-                      $(OBJ_DIR)/FeatureContainer.o \
-                      $(OBJ_DIR)/Feature.o \
-                      $(OBJ_DIR)/FileLogger.o \
-                      $(OBJ_DIR)/FloatFeature.o \
-                      $(OBJ_DIR)/Frame.o \
-                      $(OBJ_DIR)/FrameHandler.o \
-                      $(OBJ_DIR)/Interface.o \
-                      $(OBJ_DIR)/IntFeature.o \
-                      $(OBJ_DIR)/Mutex.o \
-                      $(OBJ_DIR)/MutexGuard.o \
-                      $(OBJ_DIR)/RawFeature.o \
-                      $(OBJ_DIR)/Semaphore.o \
-                      $(OBJ_DIR)/StringFeature.o \
-                      $(OBJ_DIR)/VimbaSystem.o
-
-DEPENDENCIES        = VimbaC
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) -shared $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) dynamic -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
diff --git a/VimbaCPP/Build/Make/VimbaC.mk b/VimbaCPP/Build/Make/VimbaC.mk
deleted file mode 100644
index d8bdb00ba39a32e6df445457e79a80f9c1a60f80..0000000000000000000000000000000000000000
--- a/VimbaCPP/Build/Make/VimbaC.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-#Compile options needed for VimbaC
-VIMBAC_CFLAGS   = -I$(VIMBASDK_DIR)
-
-#Linker options needed for VimbaC
-VIMBAC_LIBS     = -L$(BIN_DIR) -lVimbaC
-
-#By default we copy libVimbaC.so next to the binary
-$(BIN_DIR)/libVimbaC.so: $(BIN_DIR)
-	$(CP) $(VIMBASDK_DIR)/VimbaC/DynamicLib/$(ARCH)_$(WORDSIZE)bit/libVimbaC.so $(BIN_DIR)/
-	
-#Operations we have to do in order to prepare VimbaC
-VimbaC: $(BIN_DIR)/libVimbaC.so
diff --git a/VimbaCPP/Documentation/Vimba CPP Manual.pdf b/VimbaCPP/Documentation/Vimba CPP Manual.pdf
deleted file mode 100644
index b99c0e6c818563fd83010edd50ab5819e7a8162b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Documentation/Vimba CPP Manual.pdf and /dev/null differ
diff --git a/VimbaCPP/DynamicLib/x86_64bit/libVimbaC.so b/VimbaCPP/DynamicLib/x86_64bit/libVimbaC.so
deleted file mode 100644
index 781383deb7c36a92813b8997376e622b6e3e5a96..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/DynamicLib/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/VimbaCPP/DynamicLib/x86_64bit/libVimbaCPP.so b/VimbaCPP/DynamicLib/x86_64bit/libVimbaCPP.so
deleted file mode 100644
index 081afba051f4fc154481cec96cd4af633ca6b7ee..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/DynamicLib/x86_64bit/libVimbaCPP.so and /dev/null differ
diff --git a/VimbaCPP/Examples/ActionCommands/Build/Make/Makefile b/VimbaCPP/Examples/ActionCommands/Build/Make/Makefile
deleted file mode 100644
index b0ef96ceb4b7f1c6df5f5a40e3a5141b12e54007..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ActionCommands/Build/Make/Makefile
+++ /dev/null
@@ -1,51 +0,0 @@
-PROJECT_NAME            = ActionCommands
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS)
-
-DEFINES             = -D_LITTLE_ENDIAN
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ActionCommands.o \
-                      $(OBJ_DIR)/FrameObserver.o \
-                      $(OBJ_DIR)/program.o
-
-DEPENDENCIES        = VimbaCPP
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/ActionCommands/Source/ActionCommands.cpp b/VimbaCPP/Examples/ActionCommands/Source/ActionCommands.cpp
deleted file mode 100644
index 271a154bc6b30a02696b326315c0e0392b89c18f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ActionCommands/Source/ActionCommands.cpp
+++ /dev/null
@@ -1,985 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2021 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ActionCommands.cpp
-
-  Description: see header file for description
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-#include <string.h>
-
-#include <ActionCommands.h>
-
-// socket library to check IP addresses
-#ifdef _WIN32
-    #include <conio.h>
-    #include <WinSock.h>
-#else
-    #include <arpa/inet.h>
-#endif
-
-// number of frame buffers to be used by example
-#define NUM_FRAMES 3
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//
-// Constructor
-//
-cActionCommands::cActionCommands()
-    : mSystem( VimbaSystem::GetInstance() )
-    , mFrameObserver( NULL )
-    , mSystemFlag( false )
-    , mInterfaceFlag( false )
-    , mCameraFlag( false )
-    , mStreamingFlag( false )
-{
-}
-
-//
-// Destructor
-//
-cActionCommands::~cActionCommands()
-{
-}
-
-//
-// Helper method to read feature values of any type
-//
-// Parameters:
-//  [in]        aName   Feature name
-//  [in]        aOwner  Feature owner, like Vimba system, interface or camera
-//  [out]       aType   Feature data type
-//  [in/out]    aValue  Buffer for feature value
-//  [in/out]    aSize   Size of buffer
-//
-VmbErrorType cActionCommands::GetFeatureValue( const char* aName, tFeatureOwner aOwner, VmbFeatureDataType* aType, void* aValue, size_t* aSize )
-{
-    VmbErrorType lError = VmbErrorSuccess;
-
-    // check parameter
-    if( (NULL == aName) || (NULL == aValue) )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    // get feature pointer
-    FeaturePtr lFeature;
-    switch( aOwner )
-    {
-        case eFeatureOwnerSystem:
-        {
-            lError = this->mSystem.GetFeatureByName( aName, lFeature );
-            break;
-        }
-        case eFeatureOwnerInterface:
-        {
-            lError = this->mInterface->GetFeatureByName( aName, lFeature );
-            break;
-        }
-        case eFeatureOwnerCamera:
-        {
-            lError = this->mCamera->GetFeatureByName( aName, lFeature );
-            break;
-        }
-        default:
-        {
-            lError = VmbErrorBadParameter;
-            break;
-        }
-    }
-
-    // get feature data type
-    VmbFeatureDataType lType = VmbFeatureDataUnknown;
-    lError = lFeature->GetDataType( lType );
-    if( (VmbErrorSuccess == lError) && (NULL != aType) )
-    {
-        *aType = lType;
-    }
-
-    // proceed in case of no error
-    if( VmbErrorSuccess == lError )
-    {
-        // set feature value
-        switch( lType )
-        {
-            case VmbFeatureDataInt:
-            {
-                // get value
-                VmbInt64_t lValue = 0;
-                lError = lFeature->GetValue( lValue );
-                if( VmbErrorSuccess == lError )
-                {
-                    memcpy( aValue, &lValue, sizeof(VmbInt64_t) );
-                }
-
-                // set buffer size
-                if( NULL != aSize )
-                {
-                    *aSize = sizeof(VmbInt64_t);
-                }
-
-                break;
-            }
-            default:
-            {
-                lError = VmbErrorBadParameter;
-                break;
-            }
-        }
-    }
-
-    return lError;
-}
-
-//
-// Helper method to write feature values of any type
-//
-// Parameters:
-//  [in]    aName   Feature name
-//  [in]    aOwner  Feature owner, like Vimba system, interface or camera
-//  [in]    aType   Feature data type
-//  [in]    aValue  Buffer for feature value
-//  [in]    aSize   Size of buffer
-//
-VmbErrorType cActionCommands::SetFeatureValue( const char* aName, tFeatureOwner aOwner, VmbFeatureDataType aType, void* aValue, size_t aSize )
-{
-    VmbErrorType lError = VmbErrorSuccess;
-
-    // check parameter
-    if( (NULL == aName) || (NULL == aValue) )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    // get feature pointer
-    FeaturePtr lFeature;
-    switch( aOwner )
-    {
-        case eFeatureOwnerSystem:
-        {
-            lError = this->mSystem.GetFeatureByName( aName, lFeature );
-            break;
-        }
-        case eFeatureOwnerInterface:
-        {
-            lError = this->mInterface->GetFeatureByName( aName, lFeature );
-            break;
-        }
-        case eFeatureOwnerCamera:
-        {
-            lError = this->mCamera->GetFeatureByName( aName, lFeature );
-            break;
-        }
-        default:
-        {
-            lError = VmbErrorBadParameter;
-            break;
-        }
-    }
-
-    // check feature data type
-    VmbFeatureDataType lType = VmbFeatureDataUnknown;
-    lFeature->GetDataType( lType );
-    if( lType != aType )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    // proceed in case of no error
-    if( VmbErrorSuccess == lError )
-    {
-        // set feature value
-        switch( aType )
-        {
-            case VmbFeatureDataInt:
-            {
-                // check size
-                if( sizeof(VmbInt64_t) >= aSize )
-                {
-                    // set value
-                    VmbInt64_t lValue = (VmbInt64_t)aValue;
-                    lError = lFeature->SetValue( lValue );
-                }
-
-                break;
-            }
-            case VmbFeatureDataEnum:
-            {
-                // set value
-                const char* lValue = (char*)aValue;
-                lError = lFeature->SetValue( lValue );
-
-                break;
-            }
-            default:
-            {
-                lError = VmbErrorBadParameter;
-                break;
-            }
-        }
-    }
-
-    return lError;
-}
-
-//
-// Helper method to run a Command Feature
-//
-// Parameters:
-//  [in]    aName   Feature name
-//  [in]    aOwner  Feature owner, like Vimba system, interface or camera
-//
-VmbErrorType cActionCommands::RunCommand( const char* aName, tFeatureOwner aOwner )
-{
-    VmbErrorType lError = VmbErrorSuccess;
-
-    // get feature pointer
-    FeaturePtr lFeature;
-    switch( aOwner )
-    {
-        case eFeatureOwnerSystem:
-        {
-            lError = this->mSystem.GetFeatureByName( aName, lFeature );
-            break;
-        }
-        case eFeatureOwnerInterface:
-        {
-            lError = this->mInterface->GetFeatureByName( aName, lFeature );
-            break;
-        }
-        case eFeatureOwnerCamera:
-        {
-            lError = this->mCamera->GetFeatureByName( aName, lFeature );
-            break;
-        }
-        default:
-            lError = VmbErrorBadParameter;
-    }
-
-    if( VmbErrorSuccess == lError )
-    {
-        lError = lFeature->RunCommand();
-    }
-
-    return lError;
-}
-
-//
-// Called when any failure occurs within the example.
-// Ensures to stop streaming, close interface, close camera and shutdown Vimba
-//
-void cActionCommands::FailureShutdown()
-{
-    VmbErrorType lError = VmbErrorSuccess;
-
-    // stop streaming
-    if( true == this->mStreamingFlag )
-    {
-        lError = this->mCamera->StopContinuousImageAcquisition();
-        if( VmbErrorSuccess != lError )
-        {
-            std::cout << "[F]...Could not stop camera acquisition. Reason: " << lError << std::endl;
-        }
-
-        std::cout << "......Streaming has been stopped." << std::endl;
-    }
-
-    // close camera
-    if( true == this->mCameraFlag )
-    {
-        lError = this->mCamera->Close();
-        if( VmbErrorSuccess != lError )
-        {
-            std::cout << "[F]...Could not close camera. Reason: " << lError << std::endl;
-        }
-
-        std::cout << "......Camera has been closed." << std::endl;
-    }
-
-    // close interface
-    if( true == this->mInterfaceFlag )
-    {
-        lError = this->mInterface->Close();
-        if( VmbErrorSuccess != lError )
-        {
-            std::cout << "[F]...Could not close interface. Reason: " << lError << std::endl;
-        }
-
-        std::cout << "......Interface has been closed." << std::endl;
-    }
-
-    // shutdown Vimba
-    if( true == this->mSystemFlag )
-    {
-        lError = this->mSystem.Shutdown();
-        if( VmbErrorSuccess != lError )
-        {
-            std::cout << "[F]...Could not shutdown Vimba. Reason: " << lError << std::endl;
-        }
-
-        std::cout << "......Vimba has been stooped." << std::endl;
-    }
-}
-
-//
-// Convert given string to IP address,
-// using respective socket library (Winsock/Arpa)
-//
-// Parameters:
-//  [in]    aString     String to be converted
-//  [out]   aIPAddress  Decimal representation of given IP address string
-//
-VmbErrorType cActionCommands::ConvertStringToIPAddress( std::string aString, VmbUint32_t* aIPAddress )
-{
-    VmbErrorType lError = VmbErrorSuccess;
-    VmbUint32_t lIP     = 0;
-
-    // check parameter
-    if( (true == aString.empty()) || (NULL == aIPAddress) )
-    {
-        std::cout << "[F]...Invalid parameter given" << std::endl;
-        return VmbErrorBadParameter;
-    }
-
-    // convert given string to IP struct
-    lIP = inet_addr( aString.c_str() );
-    if( -1 == lIP )
-    {
-        lError = VmbErrorInvalidValue;
-    }
-    else
-    {
-
-        #ifdef _LITTLE_ENDIAN
-        lIP = ntohl( lIP );
-        #endif
-
-        *aIPAddress = lIP;
-    }
-
-    return lError;
-}
-
-//
-// Start Vimba and open camera with given string
-//
-// Parameters:
-//  [in]    aCamera     The ID or IP address of the camera to work with
-//
-VmbErrorType cActionCommands::PrepareCamera( std::string aCamera )
-{
-    VmbErrorType lError = VmbErrorSuccess;
-
-    // check parameter
-    if( true == aCamera.empty() )
-    {
-        std::cout << "[F]...Invalid device ID or IP address given." << std::endl;
-        return VmbErrorBadParameter;
-    }
-
-    // start Vimba
-    lError = this->mSystem.Startup();
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout << "[F]...Could not start Vimba API. Reason: " << lError << std::endl;
-        return lError;
-    }
-
-    this->mSystemFlag = true;
-    std::cout << "......Vimba has been started." << std::endl;
-
-    // open camera with given string (could be device ID or IP address)
-    lError = this->mSystem.OpenCameraByID( aCamera.c_str(), VmbAccessModeFull, this->mCamera );
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout << "[F]...Could not open camera " << aCamera << ". Reason: " << lError << std::endl;
-        this->FailureShutdown();
-        return lError;
-    }
-
-    this->mCameraFlag = true;
-    std::cout << "......Camera has been opened (" << aCamera << ")." << std::endl;
-
-    return lError;
-}
-
-//
-// Close camera and shutdown Vimba
-//
-VmbErrorType cActionCommands::StopCamera()
-{
-    VmbErrorType lError = VmbErrorSuccess;
-
-    if( true == this->mCameraFlag )
-    {
-        // close camera
-        lError = this->mCamera->Close();
-        if( VmbErrorSuccess != lError )
-        {
-            std::cout << "[F]...Could not close camera. Reason: " << lError << std::endl;
-        }
-
-        this->mCameraFlag = false;
-        std::cout << "......Camera has been closed." << std::endl;
-    }
-
-    if( true == this->mSystemFlag )
-    {
-        // shutdown Vimba
-        lError = this->mSystem.Shutdown();
-        if( VmbErrorSuccess != lError )
-        {
-            std::cout << "[F]...Could not stop Vimba. Reason: " << lError << std::endl;
-        }
-
-        this->mSystemFlag = false;
-        std::cout << "......Vimba has been stopped." << std::endl;
-    }
-
-    return lError;
-}
-
-//
-// Prepare trigger settings for given camera
-//
-VmbErrorType cActionCommands::PrepareTrigger()
-{
-    VmbErrorType    lError  = VmbErrorSuccess;
-    FeaturePtr      lFeature;
-    char*           lTemp   = "";;
-
-    // select FrameStart trigger via TriggerSelector feature
-    lTemp = "FrameStart";
-    lError = this->SetFeatureValue( "TriggerSelector", eFeatureOwnerCamera, VmbFeatureDataEnum, lTemp, sizeof(lTemp) );
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout << "[F]...Could not set TriggerSelector to FrameStart. Reason: " << lError << std::endl;
-        FailureShutdown();
-        return lError;
-    }
-
-    // set trigger source to Action0
-    lTemp = "Action0";
-    lError = this->SetFeatureValue( "TriggerSource", eFeatureOwnerCamera, VmbFeatureDataEnum, lTemp, sizeof(lTemp) );
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout << "[F]...Could not set TriggerSource to 'Action0'. Reason: " << lError << ". Probably this camera does not support Action Commands." << std::endl;
-        FailureShutdown();
-        return lError;
-    }
-
-    // enable trigger
-    lTemp = "On";
-    lError = this->SetFeatureValue( "TriggerMode", eFeatureOwnerCamera, VmbFeatureDataEnum, lTemp, sizeof(lTemp) );
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout <<  "[F]...Could not enable TriggerMode for FrameStart. Reason: " << lError << std::endl;
-        FailureShutdown();
-        return lError;
-    }
-
-    std::cout << "......Trigger FrameStart has been activated and set to Action0" << std::endl;
-
-    return lError;
-}
-
-//
-// Set Action Command information to given feature owner.
-// This could be Vimba system, interface or the camera
-//
-// Parameters:
-//  [in]    aOwner      Feature owner, like System, Interface or Camera
-//  [in]    aCommand    Action Command struct (device key, group key, group mask)
-//
-VmbErrorType cActionCommands::PrepareActionCommand( tFeatureOwner aOwner, tActionCommand* aCommand )
-{
-    VmbErrorType lError = VmbErrorSuccess;
-
-    // check parameter
-    if( NULL == aCommand )
-    {
-        std::cout << "[F]...Invalid Action Command given." << std::endl;
-        FailureShutdown();
-        return VmbErrorBadParameter;
-    }
-
-    // set device key
-    lError = this->SetFeatureValue( "ActionDeviceKey", aOwner, VmbFeatureDataInt, (void*)(aCommand->mDeviceKey), sizeof(aCommand->mDeviceKey) );
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout << "[F]...Could not set ActionDeviceKey. Reason: " << lError << std::endl;
-        FailureShutdown();
-        return lError;
-    }
-
-    // set group key
-    lError = this->SetFeatureValue( "ActionGroupKey", aOwner, VmbFeatureDataInt, (void*)(aCommand->mGroupKey), sizeof(aCommand->mGroupKey) );
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout << "[F]...Could not set ActionGroupKey. Reason: " << lError << std::endl;
-        FailureShutdown();
-        return lError;
-    }
-
-    // set group mask
-    lError = this->SetFeatureValue( "ActionGroupMask", aOwner, VmbFeatureDataInt, (void*)(aCommand->mGroupMask), sizeof(aCommand->mGroupMask) );
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout << "[F]...Could not set ActionGroupMask. Reason: " << lError << std::endl;
-        FailureShutdown();
-        return lError;
-    }
-
-    std::cout << "......Action Command has been set (" << aCommand->mDeviceKey << ", " << aCommand->mGroupKey << ", " << aCommand->mGroupMask << ")" << std::endl;
-
-    return lError;
-}
-
-//
-// Prepare streaming settings in Vimba and the camera,
-// like allocating the buffers, start capture engine, etc.
-//
-VmbErrorType cActionCommands::PrepareStreaming()
-{
-    VmbErrorType    lError = VmbErrorSuccess;
-    FeaturePtr      lFeature;
-
-    // set GVSP packet size to max value (MTU)
-    // and wait until command is done
-    lError = this->mCamera->GetFeatureByName( "GVSPAdjustPacketSize", lFeature );
-    if( VmbErrorSuccess == lError )
-    {
-        lError = lFeature->RunCommand();
-    }
-
-    // check if any failure occurred
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout << "[F]...Could not set GVSP packet size. Reason: " << lError << std::endl;
-        FailureShutdown();
-        return lError;
-    }
-
-    // check if operation is done
-    bool lFlag = false;
-    do
-    {
-        lError = lFeature->IsCommandDone( lFlag );
-        if( VmbErrorSuccess != lError )
-        {
-            break;
-        }
-
-    } while( VmbBoolFalse == lFlag );
-    
-    // get GVSP packet size, which was actually set in the camera
-    VmbInt64_t lGVSPSize = 0;
-    lError = this->GetFeatureValue( "GVSPPacketSize", eFeatureOwnerCamera, NULL, &lGVSPSize, NULL );
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout << "[F]...Could not get GVSP packet size. Reason: " << lError << std::endl;
-    }
-
-    std::cout << "......GVSP packet size has been set to maximum (" << lGVSPSize << ")" << std::endl;
-
-    // create new frame observer
-    this->mFrameObserver = new cFrameObserver( this->mCamera );
-
-    // start continuous image acquisition
-    lError = this->mCamera->StartContinuousImageAcquisition( NUM_FRAMES, IFrameObserverPtr(this->mFrameObserver) );
-    if( VmbErrorSuccess != lError )
-    {
-        FailureShutdown();
-        std::cout << "[F]...Could not start continuous image acquisition. Reason: " << lError << std::endl;
-        return lError;
-    }
-
-    this->mStreamingFlag = true;
-    std::cout << "......Camera acquisition has been started." << std::endl;
-
-    return lError;
-}
-
-//
-// End streaming
-//
-VmbErrorType cActionCommands::StopStreaming()
-{
-    VmbErrorType lError = VmbErrorSuccess;
-
-    // stop continuous image acquisition
-    lError = this->mCamera->StopContinuousImageAcquisition();
-    if( VmbErrorSuccess != lError )
-    {
-        FailureShutdown();
-        std::cout << "[F]...Could not stop streaming. Reason: " << lError << std::endl;
-        return lError;
-    }
-
-    this->mStreamingFlag = false;
-    std::cout << "......Camera acquisition has been stopped." << std::endl;
-
-    return lError;
-}
-
-//
-// Send Action Command  on system level.
-// This command will be broadcasted on all network interfaces.
-//
-// Parameters:
-//  [in]    aCamera     The ID or IP address of the camera to work with
-//  [in]    aCommand    Action Command to be used by Vimba and camera
-//
-VmbErrorType cActionCommands::SendActionCommandOnAllInterfaces( std::string aCamera, tActionCommand aCommand )
-{
-    VmbErrorType lError = VmbErrorSuccess;
-
-    // -start Vimba
-    // -open camera in full access mode and get handle
-    lError = PrepareCamera( aCamera );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -select FrameStart trigger feature
-    // -set source to Action0
-    // -enable trigger
-    lError = PrepareTrigger();
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // Set Action Command to camera
-    // -set device key
-    // -set group key
-    // -set group mask
-    lError = PrepareActionCommand( eFeatureOwnerCamera, &aCommand );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -adjust GVSP packet size
-    // -get payload size
-    // -allocate memory for frame buffers
-    // -announce frames and move them to buffer input pool
-    // -start capture engine
-    // -move frames to capture queue (buffer output queue)
-    // -call start acquisition feature in the camera
-    lError = PrepareStreaming();
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // determine if Action Command shall be send as uni- or broadcast
-    // if IP address was given, send it as unicast
-    VmbUint32_t lIP = 0;
-    lError = ConvertStringToIPAddress( aCamera, &lIP );
-    if( VmbErrorSuccess == lError )
-    {
-        // set IP address to Vimba
-        lError = this->SetFeatureValue( "GevActionDestinationIPAddress", eFeatureOwnerSystem, VmbFeatureDataInt, (void*)lIP, sizeof(lIP) );
-        if( VmbErrorSuccess != lError )
-        {
-            std::cout << "[F]...Could not set IP address '" << aCamera << "' to Vimba. Reason: " << lError << std::endl;
-        }
-
-        std::cout << "......Action Command will be send as unicast to IP '" << aCamera << "' (" << lIP << ")" << std::endl;
-    }
-
-    // set Action Command to Vimba system
-    // -device key
-    // -group key
-    // -group mask
-    lError = PrepareActionCommand(eFeatureOwnerSystem, &aCommand);
-    if (VmbErrorSuccess != lError)
-    {
-        std::cout << "[F]...Could not prepare Action Command. Reason: " << lError << std::endl;
-    }
-
-    #ifdef _WIN32
-        std::cout << "\n<< Please hit 'a' to send prepared Action Command. To stop example hit 'q' >>\n\n";
-    #else
-        std::cout << "\n<< Please enter 'a' and return to send prepared Action Command. To stop example enter 'q' and return >>\n\n";
-    #endif
-
-    // repeat this until user hits ESC
-    int lKey = 0;
-    do
-    {
-        // wait for user input
-        #ifdef _WIN32
-            lKey = _getch();
-        #else
-            lKey = getchar();
-        #endif
-
-        if( 97 == lKey )
-        {
-
-            // send Action Command by calling command feature
-            lError = RunCommand( "ActionCommand", eFeatureOwnerSystem );
-            if( VmbErrorSuccess != lError )
-            {
-                std::cout << "[F]...Could not send Action Command. Reason: " << lError << std::endl;
-                FailureShutdown();
-                return lError;
-            }
-
-            std::cout << "......Action Command has been sent." << std::endl;
-
-        }
-
-    } while( 113 != lKey );
-
-    // stop streaming
-    lError = StopStreaming();
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -close camera
-    // -shutdown Vimba
-    lError = StopCamera();
-
-    return lError;
-}
-
-//
-// Send Action Command on interface level.
-// This command will be broadcasted on given network interface.
-//
-// Parameters:
-//  [in]    aCamera     The ID or IP address of the camera to work with
-//  [in]    aInterface  The network interface on which the Action Command
-//                      will be sent out
-//  [in]    aCommand    Action Command to be used by Vimba and camera
-//
-VmbErrorType cActionCommands::SendActionCommandOnInterface( std::string aCamera, std::string aInterface, tActionCommand aCommand )
-{
-    VmbErrorType lError = VmbErrorSuccess;
-
-    // -start Vimba
-    // -open camera in full access mode and get handle
-    lError = PrepareCamera( aCamera );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -select FrameStart trigger feature
-    // -set source to Action0
-    // -enable trigger
-    lError = PrepareTrigger();
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // Set Action Command to camera
-    // -set device key
-    // -set group key
-    // -set group mask
-    lError = PrepareActionCommand( eFeatureOwnerCamera, &aCommand );
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -adjust GVSP packet size
-    // -get payload size
-    // -allocate memory for frame buffers
-    // -announce frames and move them to buffer input pool
-    // -start capture engine
-    // -move frames to capture queue (buffer output queue)
-    // -call start acquisition feature in the camera
-    lError = PrepareStreaming();
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // get available interfaces
-    InterfacePtrVector lInterfaces;
-    lError = this->mSystem.GetInterfaces( lInterfaces );
-    if( (VmbErrorSuccess != lError) || (0 == lInterfaces.size()) )
-    {
-        std::cout << "[F]...Could not retrieve interfaces" << std::endl;
-        FailureShutdown();
-        return lError;
-    }
-
-    // print interface list
-    bool lFound = false;
-    int lIndex = 0;
-    for( int i=0; i<lInterfaces.size(); ++i )
-    {
-        InterfacePtr lInterface = lInterfaces.at(i);
-        std::string lInterfaceID = "";
-        lError = lInterface->GetID( lInterfaceID );
-        if( VmbErrorSuccess == lError )
-        {
-            std::cout << ".........[" << i << "] " << lInterfaceID << std::endl;
-
-            // compare given interface ID with current one
-            if( 0 == lInterfaceID.compare( aInterface ) )
-            {
-                // if interface ID matches, keep index
-                lFound = true;
-                lIndex = i;
-            }
-        }
-    }
-
-    // if no interface with given ID was found, return
-    if( false == lFound )
-    {
-        std::cout << "[F]...Given interface with ID '" << aInterface << "' was not found!" << std::endl;
-        FailureShutdown( );
-        return VmbErrorBadParameter;
-    }
-
-    // get interface pointer
-    this->mInterface = lInterfaces.at( lIndex );
-    if( true == SP_ISNULL(this->mInterface) )
-    {
-        std::cout << "[F]...No valid interface pointer with given index found" << std::endl;
-        FailureShutdown();
-        return VmbErrorBadParameter;
-    }
-
-    // check interface type
-    VmbInterfaceType lInterfaceType = VmbInterfaceUnknown;
-    lError = this->mInterface->GetType( lInterfaceType );
-    if( (VmbErrorSuccess != lError) || (VmbInterfaceEthernet != lInterfaceType) )
-    {
-        printf( "[F]...Selected interface is non-GigE interface!\n" );
-        FailureShutdown();
-        return VmbErrorBadParameter;
-    }
-
-    // open interface
-    lError = this->mInterface->Open();
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout << "[F]...Could not open interface" << std::endl;
-        FailureShutdown();
-        return lError;
-    }
-
-    this->mInterfaceFlag = true;
-    std::cout << "......Interface has been opened." << std::endl;
-
-    // determine if Action Command shall be send as uni- or broadcast
-    // if IP address was given, send it as unicast
-    VmbUint32_t lIP = 0;
-    lError = ConvertStringToIPAddress( aCamera, &lIP );
-    if( VmbErrorSuccess == lError )
-    {
-        // set IP address to the selected interface
-        lError = this->SetFeatureValue( "GevActionDestinationIPAddress", eFeatureOwnerInterface, VmbFeatureDataInt, (void*)lIP, sizeof(lIP) );
-        if( VmbErrorSuccess != lError )
-        {
-            std::cout << "[F]...Could not set IP address '" << aCamera << "' to Vimba. Reason: " << lError << std::endl;
-        }
-
-        std::cout << "......Action Command will be send as unicast to IP '" << aCamera << "' (" << lIP << ")" << std::endl;
-    }
-
-    // set Action Command to the selected interface
-    // -device key
-    // -group key
-    // -group mask
-    lError = PrepareActionCommand(eFeatureOwnerInterface, &aCommand);
-    if (VmbErrorSuccess != lError)
-    {
-        std::cout << "[F]...Could not prepare Action Command. Reason: " << lError << std::endl;
-    }
-
-    #ifdef _WIN32
-        std::cout << "\n<< Please hit 'a' to send prepared Action Command. To stop example hit 'q' >>\n\n";
-    #else
-        std::cout << "\n<< Please enter 'a' and return to send prepared Action Command. To stop example enter 'q' and return >>\n\n";
-    #endif
-
-    // repeat this until user hits ESC
-    int lKey = 0;
-    do
-    {
-        // wait for user input
-        #ifdef _WIN32
-            lKey = _getch();
-        #else
-            lKey = getchar();
-        #endif
-
-        if( 97 == lKey )
-        {
-
-            // send Action Command by calling command feature
-            lError = RunCommand( "ActionCommand", eFeatureOwnerInterface );
-            if( VmbErrorSuccess != lError )
-            {
-                std::cout << "[F]...Could not send Action Command. Reason: " << lError << std::endl;
-                FailureShutdown();
-                return lError;
-            }
-
-            std::cout << "......Action Command has been sent." << std::endl;
-
-        }
-
-    } while( 113 != lKey );
-
-    // close interface
-    lError = this->mInterface->Close();
-    if( VmbErrorSuccess != lError )
-    {
-        std::cout << "Could not close interface. Reason: " << lError << std::endl;
-    }
-
-    this->mInterfaceFlag = false;
-    std::cout << "......Interface has been closed." << std::endl;
-
-    // stop streaming
-    lError = StopStreaming();
-    if( VmbErrorSuccess != lError )
-    {
-        return lError;
-    }
-
-    // -close camera
-    // -shutdown Vimba
-    lError = StopCamera();
-
-    return lError;
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/ActionCommands/Source/ActionCommands.h b/VimbaCPP/Examples/ActionCommands/Source/ActionCommands.h
deleted file mode 100644
index 301e449a4a3fb4823bb943a59a9ad9ecc6d589c8..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ActionCommands/Source/ActionCommands.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ActionCommands.h
-
-  Description: This example will create an Action Command and send it to any
-               camera, given by parameter. The following can be set up with
-               parameters as well:
-                -send Action Command as broadcast on specific network interface
-                -send Action Command as broadcast to all network interfaces
-                -send Action Command to specific IP address (unicast)
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_ACTION_COMMANDS
-#define AVT_VMBAPI_EXAMPLES_ACTION_COMMANDS
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-#include "FrameObserver.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-// struct representing an Action Command
-typedef struct tActionCommand
-{
-    VmbUint32_t     mDeviceKey;
-    VmbUint32_t     mGroupKey;
-    VmbUint32_t     mGroupMask;
-
-} tActionCommand;
-
-typedef enum tFeatureOwner
-{
-    eFeatureOwnerUnknown     = 0,
-    eFeatureOwnerSystem      = 1,
-    eFeatureOwnerInterface   = 2,
-    eFeatureOwnerCamera      = 3
-
-} tFeatureOwner;
-
-class cActionCommands
-{
-    private:
-        VimbaSystem&    mSystem;
-        InterfacePtr    mInterface;
-        CameraPtr       mCamera;
-
-        cFrameObserver* mFrameObserver;
-
-        bool            mSystemFlag;
-        bool            mInterfaceFlag;
-        bool            mCameraFlag;
-        bool            mStreamingFlag;
-
-    public:
-        //
-        // Constructor
-        //
-        cActionCommands();
-
-        //
-        // Destructor
-        //
-        ~cActionCommands();
-
-        //
-        // Helper method to read feature values of any type
-        //
-        // Parameters:
-        //  [in]        aName   Feature name
-        //  [in]        aOwner  Feature owner, like Vimba system, interface or camera
-        //  [out]       aType   Feature data type
-        //  [in/out]    aValue  Buffer for feature value
-        //  [in/out]    aSize   Size of buffer
-        //
-        VmbErrorType GetFeatureValue( const char* aName, tFeatureOwner aOwner, VmbFeatureDataType* aType, void* aValue, size_t* aSize );
-
-        //
-        // Helper method to write feature values of any type
-        //
-        // Parameters:
-        //  [in]    aName   Feature name
-        //  [in]    aOwner  Feature owner, like Vimba system, interface or camera
-        //  [in]    aType   Feature data type
-        //  [in]    aValue  Buffer for feature value
-        //  [in]    aSize   Size of buffer
-        //
-        VmbErrorType SetFeatureValue( const char* aName, tFeatureOwner aOwner, VmbFeatureDataType aType, void* aValue, size_t aSize );
-
-        //
-        // Helper method to run a Command Feature
-        //
-        // Parameters:
-        //  [in]    aName   Feature name
-        //  [in]    aOwner  Feature owner, like Vimba system, interface or camera
-        //
-        VmbErrorType RunCommand( const char* aName, tFeatureOwner aOwner );
-
-        //
-        // Called when any failure occurs within the example.
-        // Ensures to stop streaming, close interface, close camera and shutdown Vimba
-        //
-        void FailureShutdown();
-
-        //
-        // Convert given string to IP address,
-        // using respective socket library (Winsock/Arpa)
-        //
-        // Parameters:
-        //  [in]    aString     String to be converted
-        //  [out]   aIPAddress  Decimal representation of given IP address string
-        //
-        VmbErrorType ConvertStringToIPAddress( std::string aString, VmbUint32_t* aIPAddress );
-
-        //
-        // Start Vimba and open camera with given string
-        //
-        // Parameters:
-        //  [in]    aCamera     The ID or IP address of the camera to work with
-        //
-        VmbErrorType PrepareCamera( std::string aCamera );
-
-        //
-        // Close camera and shutdown Vimba
-        //
-        VmbErrorType StopCamera();
-
-        //
-        // Prepare trigger settings for given camera
-        //
-        VmbErrorType PrepareTrigger();
-
-        //
-        // Set Action Command information to given feature owner.
-        // This could be Vimba system, interface or the camera
-        //
-        // Parameters:
-        //  [in]    aOwner      Feature owner, like System, Interface or Camera
-        //  [in]    aCommand    Action Command struct (device key, group key, group mask)
-        //
-        VmbErrorType PrepareActionCommand( tFeatureOwner aOwner, tActionCommand* aCommand );
-
-        //
-        // Prepare streaming settings in Vimba and the camera,
-        // like allocating the buffers, start capture engine, etc.
-        //
-        VmbErrorType PrepareStreaming();
-
-        //
-        // End streaming
-        //
-        VmbErrorType StopStreaming();
-
-        //
-        // Send Action Command  on system level.
-        // This command will be broadcasted on all network interfaces.
-        //
-        // Parameters:
-        //  [in]    aCamera     The ID or IP address of the camera to work with
-        //  [in]    aCommand    Action Command to be used by Vimba and camera
-        //
-        VmbErrorType SendActionCommandOnAllInterfaces( std::string aCamera, tActionCommand aCommand );
-
-        //
-        // Send Action Command on interface level.
-        // This command will be broadcasted on given network interface.
-        //
-        // Parameters:
-        //  [in]    aCamera     The ID or IP address of the camera to work with
-        //  [in]    aInterface  The network interface on which the Action Command
-        //                      will be sent out
-        //  [in]    aCommand    Action Command to be used by Vimba and camera
-        //
-        VmbErrorType SendActionCommandOnInterface( std::string aCamera, std::string aInterface, tActionCommand aCommand );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/ActionCommands/Source/FrameObserver.cpp b/VimbaCPP/Examples/ActionCommands/Source/FrameObserver.cpp
deleted file mode 100644
index 448c57560c867545d2f916a7f116145541151b6a..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ActionCommands/Source/FrameObserver.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameObserver.cpp
-
-  Description: The frame observer that is used for notifications from VimbaCPP
-               regarding the arrival of a newly acquired frame.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-
-#include "FrameObserver.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//
-// We pass the camera that will deliver the frames to the constructor
-//
-// Parameters:
-//  [in]    pCamera             The camera the frame was queued at
-//  [in]    eFrameInfos         Indicates how the frame will be displayed
-//  [in]    eColorProcessing    Indicates how color processing is applied
-//
-cFrameObserver::cFrameObserver( CameraPtr aCamera )
-    :   IFrameObserver( aCamera )
-{
-    this->mCamera = aCamera;
-}
-
-//
-// This is our callback routine that will be executed on every received frame.
-// Triggered by the API.
-//
-// Parameters:
-//  [in]    pFrame          The frame returned from the API
-//
-void cFrameObserver::FrameReceived( const FramePtr pFrame )
-{
-    if(false == SP_ISNULL( pFrame ) )
-    {
-        VmbErrorType lError = VmbErrorSuccess;
-        VmbFrameStatusType lStatus;
-        
-        lError = SP_ACCESS( pFrame)->GetReceiveStatus( lStatus);
-        if( (VmbErrorSuccess == lError) && (VmbFrameStatusComplete == lStatus))
-        {
-            std::cout << "......Frame has been received" << std::endl;
-        }
-
-        // requeue frame
-        this->mCamera->QueueFrame( pFrame );
-    }
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/ActionCommands/Source/FrameObserver.h b/VimbaCPP/Examples/ActionCommands/Source/FrameObserver.h
deleted file mode 100644
index c15c3311922a967a9d1a5eac6977e6063ee3700e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ActionCommands/Source/FrameObserver.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameObserver.h
-
-  Description: The frame observer that is used for notifications from VimbaCPP
-               regarding the arrival of a newly acquired frame.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_FRAMEOBSERVER
-#define AVT_VMBAPI_EXAMPLES_FRAMEOBSERVER
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-
-class cFrameObserver : virtual public IFrameObserver
-{
-    private:
-        CameraPtr   mCamera;
-
-    public:
-        //
-        // We pass the camera that will deliver the frames to the constructor
-        //
-        // Parameters:
-        //  [in]    pCamera             The camera the frame was queued at
-        //
-        cFrameObserver( CameraPtr aCamera );
-    
-        //
-        // This is our callback routine that will be executed on every received frame.
-        // Triggered by the API.
-        //
-        // Parameters:
-        //  [in]    pFrame          The frame returned from the API
-        //
-        virtual void FrameReceived( const FramePtr aFrame );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/ActionCommands/Source/program.cpp b/VimbaCPP/Examples/ActionCommands/Source/program.cpp
deleted file mode 100644
index 8a3dbd986dbfc23a3ebbf21e17aa232ee1ccb6fa..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ActionCommands/Source/program.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of ActionCommands example of VimbaCPP.
-
-               annotations:
-                -local variables are prefixed with 'l' for local
-                -function parameter are prefixed with 'a' for 'argument'
-                -structs are prefixed with 't' for 'type'
-                -classes are prefixed with 'c' for 'class'
-                -class attributes and struct members are prefixed with 'm' for members
-                -enum literals are prefixed with 'e' for 'enumeration'
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-#include <string.h>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-#include "ActionCommands.h"
-
-// function to print out help how to use this example application
-void PrintHelp()
-{
-    printf( "Usage: ActionCommands <CameraID/IPAdress> <InterfaceID>\n\n" );
-    printf( "Parameters:   CameraID         ID of the camera to be used\n" );
-    printf( "              IPAddress        IP address of camera to react on Action Command\n" );
-    printf( "              InterfaceID      ID of network interface to send out Action Command\n" );
-    printf( "                               'ALL' enables broadcast on all interfaces\n\n" );
-}
-
-int main( int argc, char* argv[] )
-{
-    VmbErrorType    lError      = VmbErrorSuccess;
-
-    std::cout << std::endl;
-    std::cout << "/////////////////////////////////////////" << std::endl;
-    std::cout << "/// Vimba API Action Commands Example ///" << std::endl;
-    std::cout << "/////////////////////////////////////////" << std::endl;
-    std::cout << std::endl;
-
-    // check number of arguments
-    if( 3 == argc )
-    {
-        // create Action Command example instance
-        AVT::VmbAPI::Examples::cActionCommands lProgram;
-
-        // define Action Command to be set in the camera
-        // and used by either Vimba system or interface module
-        AVT::VmbAPI::Examples::tActionCommand lActionCommand;
-        lActionCommand.mDeviceKey   = 1;
-        lActionCommand.mGroupKey    = 1;
-        lActionCommand.mGroupMask   = 1;
-
-        // check if interface index is '-1' to send out Action Command on all interfaces
-        // if not, send Action Command via given network interface
-        if( 0 == strcmp("ALL", argv[2]) )
-        {
-            lError = lProgram.SendActionCommandOnAllInterfaces( argv[1], lActionCommand );
-        }
-        else
-        {
-            lError = lProgram.SendActionCommandOnInterface( argv[1], argv[2], lActionCommand );
-        }
-    }
-    else
-    {
-        lError = VmbErrorBadParameter;
-        std::cout << "[F]...Invalid number of parameters given!" << std::endl;
-        std::cout << std::endl;
-        PrintHelp();
-    }
-
-    std::cout << std::endl;
-
-    return lError;
-}
diff --git a/VimbaCPP/Examples/AsynchronousGrab/AsynchronousGrab.sublime-project b/VimbaCPP/Examples/AsynchronousGrab/AsynchronousGrab.sublime-project
deleted file mode 100644
index 63923209dfccf61c1c8a820c14200db30b204806..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/AsynchronousGrab.sublime-project
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-	"folders":
-	[
-		{
-			"path": "$project_path/..", // see in sidebar
-		},
-		{
-			"path": "$project_path/../../..", //Vimba CPP, see in sidebar
-		},
-	],
-	"build_systems":
-	[
-		{
-			"name": "AsyncGrab",
-			// "shell_cmd": "make -CQt/Make -j8",
-			"variants":
-			[
-				{
-					"name": "Qt",
-					"shell_cmd": "make -j8",
-					"working_dir": "$project_path/Qt/Build/Make",
-				},
-				{
-					"name": "Qt (clean)",
-					"shell_cmd": "make -j8 clean",
-					"working_dir": "$project_path/Qt/Build/Make",
-				},
-				{
-					"name": "Console",
-					"shell_cmd": "make -j8",
-					"working_dir": "$project_path/Console/Build/Make",
-				},
-				{
-					"name": "Console (clean)",
-					// "shell_cmd": "pwd",
-					"shell_cmd": "make -j8 clean",
-					"working_dir": "$project_path/Console/Build/Make",
-				},
-			],
-		},
-	]
-}
diff --git a/VimbaCPP/Examples/AsynchronousGrab/AsynchronousGrab.sublime-workspace b/VimbaCPP/Examples/AsynchronousGrab/AsynchronousGrab.sublime-workspace
deleted file mode 100644
index ea36a67d3b0b0f2d3ee8f5d05161b47ba5057a5d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/AsynchronousGrab.sublime-workspace
+++ /dev/null
@@ -1,4358 +0,0 @@
-{
-	"auto_complete":
-	{
-		"selected_items":
-		[
-			[
-				"par",
-				"fix_all_parents"
-			],
-			[
-				"cou",
-				"cout"
-			],
-			[
-				"cout",
-				"cout"
-			],
-			[
-				"siz",
-				"size_t"
-			],
-			[
-				"end",
-				"endl"
-			],
-			[
-				"remo",
-				"remove_if"
-			],
-			[
-				"for",
-				"forv"
-			],
-			[
-				"cst",
-				"c_str"
-			],
-			[
-				"ar",
-				"argc"
-			],
-			[
-				"re",
-				"remove"
-			],
-			[
-				"s",
-				"size"
-			],
-			[
-				"ce",
-				"cerr"
-			],
-			[
-				"her",
-				"here"
-			],
-			[
-				"is",
-				"isDir"
-			],
-			[
-				"pare",
-				"fix_all_parents"
-			],
-			[
-				"bac",
-				"back"
-			],
-			[
-				"res",
-				"resize"
-			],
-			[
-				"bo",
-				"boolalpha"
-			],
-			[
-				"ap",
-				"append"
-			],
-			[
-				"m",
-				"m_name"
-			],
-			[
-				"remove",
-				"remove_if"
-			],
-			[
-				"HE",
-				"here"
-			],
-			[
-				"fo",
-				"for"
-			],
-			[
-				"ma",
-				"make_uniq"
-			],
-			[
-				"unique",
-				"unique"
-			],
-			[
-				"u",
-				"unique"
-			],
-			[
-				"n",
-				"name"
-			],
-			[
-				"k",
-				"kids"
-			],
-			[
-				"er",
-				"erase"
-			],
-			[
-				"r",
-				"remove"
-			],
-			[
-				"e",
-				"empty"
-			],
-			[
-				"sear",
-				"search_tree"
-			],
-			[
-				"iter",
-				"iterator"
-			],
-			[
-				"MAX",
-				"MAX_KIDS"
-			],
-			[
-				"MA",
-				"MAX_KIDS"
-			],
-			[
-				"NUL",
-				"NullNode"
-			],
-			[
-				"type",
-				"typeinfo"
-			],
-			[
-				"pri",
-				"print_orig"
-			],
-			[
-				"ba",
-				"back"
-			],
-			[
-				"ad",
-				"add"
-			],
-			[
-				"b",
-				"back"
-			],
-			[
-				"a",
-				"all_bms"
-			],
-			[
-				"t",
-				"t_list_ref"
-			],
-			[
-				"t_l",
-				"t_list"
-			],
-			[
-				"em",
-				"emplace_front"
-			],
-			[
-				"i",
-				"include"
-			],
-			[
-				"con",
-				"contains"
-			],
-			[
-				"empl",
-				"emplace_back"
-			],
-			[
-				"for_e",
-				"for_each_n"
-			],
-			[
-				"all",
-				"all_dirs"
-			],
-			[
-				"di",
-				"dirs"
-			],
-			[
-				"co",
-				"count"
-			],
-			[
-				"si",
-				"size"
-			],
-			[
-				"isA",
-				"is_array"
-			],
-			[
-				"null",
-				"nullptr"
-			],
-			[
-				"in",
-				"index"
-			],
-			[
-				"eXCEP",
-				"bad_exception"
-			]
-		]
-	},
-	"buffers":
-	[
-		{
-			"file": "AsynchronousGrab.sublime-project",
-			"settings":
-			{
-				"buffer_size": 807,
-				"encoding": "UTF-8",
-				"line_ending": "Unix"
-			},
-			"undo_stack":
-			[
-				[
-					56,
-					1,
-					"insert",
-					{
-						"characters": " neccessar"
-					},
-					"CgAAALICAAAAAAAAswIAAAAAAAAAAAAAswIAAAAAAAC0AgAAAAAAAAAAAAC0AgAAAAAAALUCAAAAAAAAAAAAALUCAAAAAAAAtgIAAAAAAAAAAAAAtgIAAAAAAAC3AgAAAAAAAAAAAAC3AgAAAAAAALgCAAAAAAAAAAAAALgCAAAAAAAAuQIAAAAAAAAAAAAAuQIAAAAAAAC6AgAAAAAAAAAAAAC6AgAAAAAAALsCAAAAAAAAAAAAALsCAAAAAAAAvAIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALICAAAAAAAAsgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					57,
-					1,
-					"insert",
-					{
-						"characters": "y"
-					},
-					"AQAAALwCAAAAAAAAvQIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALwCAAAAAAAAvAIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					58,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAL0CAAAAAAAAvgIAAAAAAAAAAAAAvgIAAAAAAADAAgAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAL0CAAAAAAAAvQIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					63,
-					1,
-					"insert",
-					{
-						"characters": "\n//\t"
-					},
-					"BgAAAL0CAAAAAAAAvgIAAAAAAAAAAAAAvgIAAAAAAADAAgAAAAAAAAAAAADBAgAAAAAAAMECAAAAAAAAAgAAAAkJwAIAAAAAAADBAgAAAAAAAAAAAADBAgAAAAAAAMICAAAAAAAAAAAAAMICAAAAAAAAwwIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAL0CAAAAAAAAvQIAAAAAAAD////////vfw"
-				],
-				[
-					64,
-					1,
-					"insert",
-					{
-						"characters": "add"
-					},
-					"AwAAAMMCAAAAAAAAxAIAAAAAAAAAAAAAxAIAAAAAAADFAgAAAAAAAAAAAADFAgAAAAAAAMYCAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMMCAAAAAAAAwwIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					65,
-					1,
-					"insert",
-					{
-						"characters": " bin"
-					},
-					"BAAAAMYCAAAAAAAAxwIAAAAAAAAAAAAAxwIAAAAAAADIAgAAAAAAAAAAAADIAgAAAAAAAMkCAAAAAAAAAAAAAMkCAAAAAAAAygIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMYCAAAAAAAAxgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					66,
-					1,
-					"insert",
-					{
-						"characters": " to"
-					},
-					"AwAAAMoCAAAAAAAAywIAAAAAAAAAAAAAywIAAAAAAADMAgAAAAAAAAAAAADMAgAAAAAAAM0CAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMoCAAAAAAAAygIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					67,
-					1,
-					"insert",
-					{
-						"characters": " path"
-					},
-					"BQAAAM0CAAAAAAAAzgIAAAAAAAAAAAAAzgIAAAAAAADPAgAAAAAAAAAAAADPAgAAAAAAANACAAAAAAAAAAAAANACAAAAAAAA0QIAAAAAAAAAAAAA0QIAAAAAAADSAgAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAM0CAAAAAAAAzQIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					68,
-					1,
-					"insert",
-					{
-						"characters": " for"
-					},
-					"BAAAANICAAAAAAAA0wIAAAAAAAAAAAAA0wIAAAAAAADUAgAAAAAAAAAAAADUAgAAAAAAANUCAAAAAAAAAAAAANUCAAAAAAAA1gIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANICAAAAAAAA0gIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					69,
-					1,
-					"insert",
-					{
-						"characters": " moc,"
-					},
-					"BQAAANYCAAAAAAAA1wIAAAAAAAAAAAAA1wIAAAAAAADYAgAAAAAAAAAAAADYAgAAAAAAANkCAAAAAAAAAAAAANkCAAAAAAAA2gIAAAAAAAAAAAAA2gIAAAAAAADbAgAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANYCAAAAAAAA1gIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					70,
-					1,
-					"insert",
-					{
-						"characters": " uic,"
-					},
-					"BQAAANsCAAAAAAAA3AIAAAAAAAAAAAAA3AIAAAAAAADdAgAAAAAAAAAAAADdAgAAAAAAAN4CAAAAAAAAAAAAAN4CAAAAAAAA3wIAAAAAAAAAAAAA3wIAAAAAAADgAgAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANsCAAAAAAAA2wIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					71,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAOACAAAAAAAA4QIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAOACAAAAAAAA4AIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					72,
-					1,
-					"insert",
-					{
-						"characters": "qmake"
-					},
-					"BQAAAOECAAAAAAAA4gIAAAAAAAAAAAAA4gIAAAAAAADjAgAAAAAAAAAAAADjAgAAAAAAAOQCAAAAAAAAAAAAAOQCAAAAAAAA5QIAAAAAAAAAAAAA5QIAAAAAAADmAgAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAOECAAAAAAAA4QIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					77,
-					1,
-					"paste",
-					null,
-					"AQAAAGkCAAAAAAAA+QIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGkCAAAAAAAAaQIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					80,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AgAAALQCAAAAAAAAtwIAAAAAAAAAAAAAaQIAAAAAAABsAgAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPkCAAAAAAAAaQIAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					84,
-					2,
-					"left_delete",
-					null,
-					"AgAAABoCAAAAAAAAGgIAAAAAAABOAAAACQkvLyBleHBvcnQgUEtHX0NPTkZJR19QQVRIPS91c3IvbG9jYWwvUXQtNS4xNS4wL2xpYi9wa2djb25maWc6UEtHX0NPTkZJR19QQVRIGQIAAAAAAAAZAgAAAAAAAAEAAAAK",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGgCAAAAAAAAGgIAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					87,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAABoCAAAAAAAAGwIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABoCAAAAAAAAGgIAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					90,
-					1,
-					"insert",
-					{
-						"characters": "\t\t"
-					},
-					"AgAAAGkCAAAAAAAAagIAAAAAAAAAAAAAagIAAAAAAABrAgAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGkCAAAAAAAAaQIAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					93,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAABsCAAAAAAAAHAIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABsCAAAAAAAAGwIAAAAAAAAAAAAAAAA6QA"
-				],
-				[
-					95,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAALcCAAAAAAAAuAIAAAAAAAAAAAAAuAIAAAAAAAC6AgAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALcCAAAAAAAAtwIAAAAAAAAAAAAAAABKQA"
-				],
-				[
-					96,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"AQAAALUCAAAAAAAAtQIAAAAAAAACAAAACQk",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALoCAAAAAAAAugIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					100,
-					1,
-					"paste",
-					null,
-					"AQAAADMDAAAAAAAAQQMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADMDAAAAAAAAMwMAAAAAAAAAAAAAAABKQA"
-				],
-				[
-					102,
-					1,
-					"right_delete",
-					null,
-					"AQAAADMDAAAAAAAAMwMAAAAAAAAOAAAAJHtRdF9QYXRofS9iaW4",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEEDAAAAAAAAMwMAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					103,
-					1,
-					"paste",
-					null,
-					"AQAAADMDAAAAAAAAQQMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADMDAAAAAAAAMwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					104,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAADMDAAAAAAAANgMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEEDAAAAAAAAQQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					106,
-					1,
-					"swap_line_down",
-					null,
-					"AgAAAHADAAAAAAAAggMAAAAAAAAAAAAAMwMAAAAAAAAzAwAAAAAAABIAAAAvLyAke1F0X1BhdGh9L2Jpbgo",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADMDAAAAAAAAMwMAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					107,
-					1,
-					"swap_line_up",
-					null,
-					"AgAAAF4DAAAAAAAAXgMAAAAAAAASAAAALy8gJHtRdF9QYXRofS9iaW4KMwMAAAAAAABFAwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAF4DAAAAAAAAXgMAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					111,
-					1,
-					"insert",
-					{
-						"characters": "PATH"
-					},
-					"BAAAADUDAAAAAAAANgMAAAAAAAAAAAAANgMAAAAAAAA3AwAAAAAAAAAAAAA3AwAAAAAAADgDAAAAAAAAAAAAADgDAAAAAAAAOQMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADUDAAAAAAAANQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					112,
-					1,
-					"left_delete",
-					null,
-					"AQAAADgDAAAAAAAAOAMAAAAAAAABAAAASA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADkDAAAAAAAAOQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					113,
-					1,
-					"insert",
-					{
-						"characters": "H="
-					},
-					"AgAAADgDAAAAAAAAOQMAAAAAAAAAAAAAOQMAAAAAAAA6AwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADgDAAAAAAAAOAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					114,
-					1,
-					"insert",
-					{
-						"characters": "$"
-					},
-					"AQAAADoDAAAAAAAAOwMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADoDAAAAAAAAOgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					115,
-					1,
-					"insert_snippet",
-					{
-						"contents": "{$0}"
-					},
-					"AQAAADsDAAAAAAAAPQMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADsDAAAAAAAAOwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					116,
-					1,
-					"insert",
-					{
-						"characters": "ATH"
-					},
-					"AwAAADwDAAAAAAAAPQMAAAAAAAAAAAAAPQMAAAAAAAA+AwAAAAAAAAAAAAA+AwAAAAAAAD8DAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADwDAAAAAAAAPAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					117,
-					4,
-					"left_delete",
-					null,
-					"BAAAAD4DAAAAAAAAPgMAAAAAAAABAAAASD0DAAAAAAAAPQMAAAAAAAABAAAAVDwDAAAAAAAAPAMAAAAAAAABAAAAQTsDAAAAAAAAOwMAAAAAAAABAAAAew",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAD8DAAAAAAAAPwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					118,
-					1,
-					"insert",
-					{
-						"characters": "PATH:"
-					},
-					"BQAAADsDAAAAAAAAPAMAAAAAAAAAAAAAPAMAAAAAAAA9AwAAAAAAAAAAAAA9AwAAAAAAAD4DAAAAAAAAAAAAAD4DAAAAAAAAPwMAAAAAAAAAAAAAPwMAAAAAAABAAwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADsDAAAAAAAAOwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					119,
-					2,
-					"right_delete",
-					null,
-					"AgAAAEADAAAAAAAAQAMAAAAAAAABAAAAfUADAAAAAAAAQAMAAAAAAAABAAAAIA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEADAAAAAAAAQAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					121,
-					1,
-					"insert",
-					{
-						"characters": "\t\t"
-					},
-					"AgAAADMDAAAAAAAANAMAAAAAAAAAAAAANAMAAAAAAAA1AwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADMDAAAAAAAAMwMAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					123,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAADcDAAAAAAAAOAMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADcDAAAAAAAANwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					127,
-					1,
-					"insert",
-					{
-						"characters": "##"
-					},
-					"AgAAAA8DAAAAAAAAEAMAAAAAAAAAAAAAEAMAAAAAAAARAwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAA8DAAAAAAAADwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					129,
-					1,
-					"left_delete",
-					null,
-					"AQAAAA4DAAAAAAAADgMAAAAAAAABAAAACQ",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAA8DAAAAAAAADwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					130,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAA4DAAAAAAAADwMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAA4DAAAAAAAADgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					132,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAABEDAAAAAAAAEgMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABEDAAAAAAAAEQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					135,
-					1,
-					"insert",
-					{
-						"characters": "##"
-					},
-					"AgAAALsCAAAAAAAAvAIAAAAAAAAAAAAAvAIAAAAAAAC9AgAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALsCAAAAAAAAuwIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					136,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAL0CAAAAAAAAvgIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAL0CAAAAAAAAvQIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					145,
-					1,
-					"insert",
-					{
-						"characters": "\n//"
-					},
-					"BAAAADgDAAAAAAAAOQMAAAAAAAAAAAAAOQMAAAAAAAA7AwAAAAAAAAAAAAA7AwAAAAAAADwDAAAAAAAAAAAAADwDAAAAAAAAPQMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADgDAAAAAAAAOAMAAAAAAAD////////vfw"
-				],
-				[
-					146,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAD0DAAAAAAAAPgMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAD0DAAAAAAAAPQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					147,
-					1,
-					"paste",
-					null,
-					"AQAAAD4DAAAAAAAAUgMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAD4DAAAAAAAAPgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					149,
-					1,
-					"insert",
-					{
-						"characters": "Q"
-					},
-					"AQAAAD4DAAAAAAAAPwMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAD4DAAAAAAAAPgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					150,
-					1,
-					"insert",
-					{
-						"characters": "t)+)"
-					},
-					"BAAAAD8DAAAAAAAAQAMAAAAAAAAAAAAAQAMAAAAAAABBAwAAAAAAAAAAAABBAwAAAAAAAEIDAAAAAAAAAAAAAEIDAAAAAAAAQwMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAD8DAAAAAAAAPwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					151,
-					3,
-					"left_delete",
-					null,
-					"AwAAAEIDAAAAAAAAQgMAAAAAAAABAAAAKUEDAAAAAAAAQQMAAAAAAAABAAAAK0ADAAAAAAAAQAMAAAAAAAABAAAAKQ",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEMDAAAAAAAAQwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					152,
-					1,
-					"insert",
-					{
-						"characters": ")"
-					},
-					"AQAAAEADAAAAAAAAQQMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEADAAAAAAAAQAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					153,
-					1,
-					"left_delete",
-					null,
-					"AQAAAEADAAAAAAAAQAMAAAAAAAABAAAAKQ",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEEDAAAAAAAAQQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					154,
-					1,
-					"insert",
-					{
-						"characters": "("
-					},
-					"AQAAAEADAAAAAAAAQQMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEADAAAAAAAAQAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					155,
-					1,
-					"left_delete",
-					null,
-					"AQAAAEADAAAAAAAAQAMAAAAAAAABAAAAKA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEEDAAAAAAAAQQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					156,
-					1,
-					"insert",
-					{
-						"characters": "_Path="
-					},
-					"BgAAAEADAAAAAAAAQQMAAAAAAAAAAAAAQQMAAAAAAABCAwAAAAAAAAAAAABCAwAAAAAAAEMDAAAAAAAAAAAAAEMDAAAAAAAARAMAAAAAAAAAAAAARAMAAAAAAABFAwAAAAAAAAAAAABFAwAAAAAAAEYDAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEADAAAAAAAAQAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					159,
-					1,
-					"left_delete",
-					null,
-					"AQAAAD0DAAAAAAAAPQMAAAAAAAABAAAAIA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAD4DAAAAAAAAPgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					160,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAAD0DAAAAAAAAPgMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAD0DAAAAAAAAPQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					168,
-					1,
-					"insert",
-					{
-						"characters": "to"
-					},
-					"AwAAAMsCAAAAAAAAzAIAAAAAAAAAAAAAzAIAAAAAAADMAgAAAAAAAAMAAABmb3LMAgAAAAAAAM0CAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAM4CAAAAAAAAywIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					169,
-					1,
-					"insert",
-					{
-						"characters": " own"
-					},
-					"BAAAAM0CAAAAAAAAzgIAAAAAAAAAAAAAzgIAAAAAAADPAgAAAAAAAAAAAADPAgAAAAAAANACAAAAAAAAAAAAANACAAAAAAAA0QIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAM0CAAAAAAAAzQIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					170,
-					1,
-					"insert",
-					{
-						"characters": " build"
-					},
-					"BgAAANECAAAAAAAA0gIAAAAAAAAAAAAA0gIAAAAAAADTAgAAAAAAAAAAAADTAgAAAAAAANQCAAAAAAAAAAAAANQCAAAAAAAA1QIAAAAAAAAAAAAA1QIAAAAAAADWAgAAAAAAAAAAAADWAgAAAAAAANcCAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANECAAAAAAAA0QIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					171,
-					1,
-					"insert",
-					{
-						"characters": " of"
-					},
-					"AwAAANcCAAAAAAAA2AIAAAAAAAAAAAAA2AIAAAAAAADZAgAAAAAAAAAAAADZAgAAAAAAANoCAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANcCAAAAAAAA1wIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					178,
-					1,
-					"insert",
-					{
-						"characters": "for"
-					},
-					"AwAAAAgDAAAAAAAACQMAAAAAAAAAAAAACQMAAAAAAAAKAwAAAAAAAAAAAAAKAwAAAAAAAAsDAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAgDAAAAAAAACAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					179,
-					1,
-					"insert",
-					{
-						"characters": " pkgc"
-					},
-					"BQAAAAsDAAAAAAAADAMAAAAAAAAAAAAADAMAAAAAAAANAwAAAAAAAAAAAAANAwAAAAAAAA4DAAAAAAAAAAAAAA4DAAAAAAAADwMAAAAAAAAAAAAADwMAAAAAAAAQAwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAsDAAAAAAAACwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					180,
-					1,
-					"insert",
-					{
-						"characters": "fg"
-					},
-					"AgAAABADAAAAAAAAEQMAAAAAAAAAAAAAEQMAAAAAAAASAwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABADAAAAAAAAEAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					181,
-					1,
-					"insert",
-					{
-						"characters": " modules"
-					},
-					"CAAAABIDAAAAAAAAEwMAAAAAAAAAAAAAEwMAAAAAAAAUAwAAAAAAAAAAAAAUAwAAAAAAABUDAAAAAAAAAAAAABUDAAAAAAAAFgMAAAAAAAAAAAAAFgMAAAAAAAAXAwAAAAAAAAAAAAAXAwAAAAAAABgDAAAAAAAAAAAAABgDAAAAAAAAGQMAAAAAAAAAAAAAGQMAAAAAAAAaAwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABIDAAAAAAAAEgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					183,
-					1,
-					"right_delete",
-					null,
-					"AQAAABoDAAAAAAAAGgMAAAAAAAAQAAAAd2hlcmUgbmVjY2Vzc2FyeQ",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABoDAAAAAAAAKgMAAAAAAAD////////vfw"
-				],
-				[
-					184,
-					1,
-					"insert",
-					{
-						"characters": "\n.."
-					},
-					"BAAAABoDAAAAAAAAGwMAAAAAAAAAAAAAGwMAAAAAAAAdAwAAAAAAAAAAAAAdAwAAAAAAAB4DAAAAAAAAAAAAAB4DAAAAAAAAHwMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABoDAAAAAAAAGgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					185,
-					2,
-					"left_delete",
-					null,
-					"AgAAAB4DAAAAAAAAHgMAAAAAAAABAAAALh0DAAAAAAAAHQMAAAAAAAABAAAALg",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAB8DAAAAAAAAHwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					186,
-					1,
-					"insert",
-					{
-						"characters": "//"
-					},
-					"AgAAAB0DAAAAAAAAHgMAAAAAAAAAAAAAHgMAAAAAAAAfAwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAB0DAAAAAAAAHQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					187,
-					3,
-					"left_delete",
-					null,
-					"AwAAAB4DAAAAAAAAHgMAAAAAAAABAAAALx0DAAAAAAAAHQMAAAAAAAABAAAALxwDAAAAAAAAHAMAAAAAAAABAAAACQ",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAB8DAAAAAAAAHwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					188,
-					1,
-					"insert",
-					{
-						"characters": "//"
-					},
-					"AgAAABwDAAAAAAAAHQMAAAAAAAAAAAAAHQMAAAAAAAAeAwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABwDAAAAAAAAHAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					190,
-					2,
-					"right_delete",
-					null,
-					"AgAAABwDAAAAAAAAHAMAAAAAAAABAAAALxwDAAAAAAAAHAMAAAAAAAABAAAALw",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABwDAAAAAAAAHAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					193,
-					3,
-					"left_delete",
-					null,
-					"BAAAACMDAAAAAAAAIwMAAAAAAAABAAAAIxsDAAAAAAAAGwMAAAAAAAABAAAACSEDAAAAAAAAIQMAAAAAAAABAAAAIyADAAAAAAAAIAMAAAAAAAABAAAAIA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACQDAAAAAAAAJAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					195,
-					1,
-					"left_delete",
-					null,
-					"AQAAACADAAAAAAAAIAMAAAAAAAABAAAAIA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACEDAAAAAAAAIQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					196,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAACADAAAAAAAAIQMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACADAAAAAAAAIAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					199,
-					1,
-					"left_delete",
-					null,
-					"AQAAACADAAAAAAAAIAMAAAAAAAABAAAACQ",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACEDAAAAAAAAIQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					200,
-					1,
-					"insert",
-					{
-						"characters": " ##"
-					},
-					"AwAAACADAAAAAAAAIQMAAAAAAAAAAAAAIQMAAAAAAAAiAwAAAAAAAAAAAAAiAwAAAAAAACMDAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACADAAAAAAAAIAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					201,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAACMDAAAAAAAAJAMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACMDAAAAAAAAIwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					202,
-					1,
-					"insert",
-					{
-						"characters": "add"
-					},
-					"AwAAACQDAAAAAAAAJQMAAAAAAAAAAAAAJQMAAAAAAAAmAwAAAAAAAAAAAAAmAwAAAAAAACcDAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACQDAAAAAAAAJAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					203,
-					1,
-					"insert",
-					{
-						"characters": " to"
-					},
-					"AwAAACcDAAAAAAAAKAMAAAAAAAAAAAAAKAMAAAAAAAApAwAAAAAAAAAAAAApAwAAAAAAACoDAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACcDAAAAAAAAJwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					204,
-					1,
-					"insert",
-					{
-						"characters": " bashrc"
-					},
-					"BwAAACoDAAAAAAAAKwMAAAAAAAAAAAAAKwMAAAAAAAAsAwAAAAAAAAAAAAAsAwAAAAAAAC0DAAAAAAAAAAAAAC0DAAAAAAAALgMAAAAAAAAAAAAALgMAAAAAAAAvAwAAAAAAAAAAAAAvAwAAAAAAADADAAAAAAAAAAAAADADAAAAAAAAMQMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACoDAAAAAAAAKgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					205,
-					1,
-					"insert",
-					{
-						"characters": "\n//"
-					},
-					"BAAAADEDAAAAAAAAMgMAAAAAAAAAAAAAMgMAAAAAAAA0AwAAAAAAAAAAAAA0AwAAAAAAADUDAAAAAAAAAAAAADUDAAAAAAAANgMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADEDAAAAAAAAMQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					206,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAADYDAAAAAAAANwMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADYDAAAAAAAANgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					211,
-					6,
-					"swap_line_down",
-					null,
-					"DAAAALYCAAAAAAAAUQMAAAAAAAAAAAAAGgIAAAAAAAAaAgAAAAAAAJsAAAAJCS8vIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9L3Vzci9sb2NhbC9RdC01LjE1LjAvbGliL3BrZ2NvbmZpZzokUEtHX0NPTkZJR19QQVRICgkJLy8gZXhwb3J0IExEX0xJQlJBUllfUEFUSD0vdXNyL2xvY2FsL2xpYjoke1F0X1BhdGh9L2xpYjokTERfTElCUkFSWV9QQVRICt8CAAAAAAAAegMAAAAAAAAAAAAAGwIAAAAAAAAbAgAAAAAAAJsAAAAJCS8vIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9L3Vzci9sb2NhbC9RdC01LjE1LjAvbGliL3BrZ2NvbmZpZzokUEtHX0NPTkZJR19QQVRICgkJLy8gZXhwb3J0IExEX0xJQlJBUllfUEFUSD0vdXNyL2xvY2FsL2xpYjoke1F0X1BhdGh9L2xpYjokTERfTElCUkFSWV9QQVRICvICAAAAAAAAjQMAAAAAAAAAAAAARAIAAAAAAABEAgAAAAAAAJsAAAAJCS8vIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9L3Vzci9sb2NhbC9RdC01LjE1LjAvbGliL3BrZ2NvbmZpZzokUEtHX0NPTkZJR19QQVRICgkJLy8gZXhwb3J0IExEX0xJQlJBUllfUEFUSD0vdXNyL2xvY2FsL2xpYjoke1F0X1BhdGh9L2xpYjokTERfTElCUkFSWV9QQVRIChsDAAAAAAAAtgMAAAAAAAAAAAAAVwIAAAAAAABXAgAAAAAAAJsAAAAJCS8vIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9L3Vzci9sb2NhbC9RdC01LjE1LjAvbGliL3BrZ2NvbmZpZzokUEtHX0NPTkZJR19QQVRICgkJLy8gZXhwb3J0IExEX0xJQlJBUllfUEFUSD0vdXNyL2xvY2FsL2xpYjoke1F0X1BhdGh9L2xpYjokTERfTElCUkFSWV9QQVRIChwDAAAAAAAAtwMAAAAAAAAAAAAAgAIAAAAAAACAAgAAAAAAAJsAAAAJCS8vIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9L3Vzci9sb2NhbC9RdC01LjE1LjAvbGliL3BrZ2NvbmZpZzokUEtHX0NPTkZJR19QQVRICgkJLy8gZXhwb3J0IExEX0xJQlJBUllfUEFUSD0vdXNyL2xvY2FsL2xpYjoke1F0X1BhdGh9L2xpYjokTERfTElCUkFSWV9QQVRICjIDAAAAAAAAzQMAAAAAAAAAAAAAgQIAAAAAAACBAgAAAAAAAJsAAAAJCS8vIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9L3Vzci9sb2NhbC9RdC01LjE1LjAvbGliL3BrZ2NvbmZpZzokUEtHX0NPTkZJR19QQVRICgkJLy8gZXhwb3J0IExEX0xJQlJBUllfUEFUSD0vdXNyL2xvY2FsL2xpYjoke1F0X1BhdGh9L2xpYjokTERfTElCUkFSWV9QQVRICg",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABwCAAAAAAAAtAIAAAAAAAD////////vfw"
-				],
-				[
-					213,
-					2,
-					"cut",
-					null,
-					"AgAAAAkCAAAAAAAACQIAAAAAAAARAAAACQkvLyBhZGQgdG8gYnJjOgoJAgAAAAAAAAkCAAAAAAAAAQAAAAo",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAsCAAAAAAAACwIAAAAAAAAAAAAAAABKQA"
-				],
-				[
-					218,
-					5,
-					"right_delete",
-					null,
-					"BQAAAGIBAAAAAAAAYgEAAAAAAAABAAAAYWIBAAAAAAAAYgEAAAAAAAABAAAAbGIBAAAAAAAAYgEAAAAAAAABAAAAc2IBAAAAAAAAYgEAAAAAAAABAAAAb2IBAAAAAAAAYgEAAAAAAAABAAAAIA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGIBAAAAAAAAYgEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					220,
-					2,
-					"left_delete",
-					null,
-					"AgAAAGYBAAAAAAAAZgEAAAAAAAABAAAAZGUBAAAAAAAAZQEAAAAAAAABAAAAZQ",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGcBAAAAAAAAZwEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					222,
-					1,
-					"right_delete",
-					null,
-					"AQAAAGYBAAAAAAAAZgEAAAAAAAABAAAASQ",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGYBAAAAAAAAZgEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					223,
-					1,
-					"insert",
-					{
-						"characters": "i"
-					},
-					"AQAAAGYBAAAAAAAAZwEAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGYBAAAAAAAAZgEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					225,
-					1,
-					"insert",
-					{
-						"characters": "s"
-					},
-					"AQAAAG0BAAAAAAAAbgEAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAG0BAAAAAAAAbQEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					227,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAFwBAAAAAAAAXQEAAAAAAAAAAAAAXQEAAAAAAABfAQAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAFwBAAAAAAAAXAEAAAAAAAAAAAAAAOBuQA"
-				],
-				[
-					230,
-					1,
-					"insert",
-					{
-						"characters": "##"
-					},
-					"AwAAAGUBAAAAAAAAZgEAAAAAAAAAAAAAXQEAAAAAAABdAQAAAAAAAAIAAAAJCWQBAAAAAAAAZQEAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGUBAAAAAAAAZQEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					231,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAGUBAAAAAAAAZgEAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGUBAAAAAAAAZQEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					248,
-					1,
-					"insert",
-					{
-						"characters": " //"
-					},
-					"AwAAAIcDAAAAAAAAiAMAAAAAAAAAAAAAiAMAAAAAAACJAwAAAAAAAAAAAACJAwAAAAAAAIoDAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIcDAAAAAAAAhwMAAAAAAAD////////vfw"
-				],
-				[
-					249,
-					1,
-					"insert",
-					{
-						"characters": " for"
-					},
-					"BAAAAIoDAAAAAAAAiwMAAAAAAAAAAAAAiwMAAAAAAACMAwAAAAAAAAAAAACMAwAAAAAAAI0DAAAAAAAAAAAAAI0DAAAAAAAAjgMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIoDAAAAAAAAigMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					250,
-					1,
-					"insert",
-					{
-						"characters": " moc,u"
-					},
-					"BgAAAI4DAAAAAAAAjwMAAAAAAAAAAAAAjwMAAAAAAACQAwAAAAAAAAAAAACQAwAAAAAAAJEDAAAAAAAAAAAAAJEDAAAAAAAAkgMAAAAAAAAAAAAAkgMAAAAAAACTAwAAAAAAAAAAAACTAwAAAAAAAJQDAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAI4DAAAAAAAAjgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					251,
-					1,
-					"insert",
-					{
-						"characters": "ic,rcc"
-					},
-					"BgAAAJQDAAAAAAAAlQMAAAAAAAAAAAAAlQMAAAAAAACWAwAAAAAAAAAAAACWAwAAAAAAAJcDAAAAAAAAAAAAAJcDAAAAAAAAmAMAAAAAAAAAAAAAmAMAAAAAAACZAwAAAAAAAAAAAACZAwAAAAAAAJoDAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJQDAAAAAAAAlAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					255,
-					1,
-					"left_delete",
-					null,
-					"AQAAAJcDAAAAAAAAlwMAAAAAAAADAAAAcmNj",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJoDAAAAAAAAlwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					256,
-					1,
-					"insert",
-					{
-						"characters": ".."
-					},
-					"AgAAAJcDAAAAAAAAmAMAAAAAAAAAAAAAmAMAAAAAAACZAwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJcDAAAAAAAAlwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					257,
-					1,
-					"insert",
-					{
-						"characters": "."
-					},
-					"AQAAAJkDAAAAAAAAmgMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJkDAAAAAAAAmQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					262,
-					1,
-					"left_delete",
-					null,
-					"AQAAACIDAAAAAAAAIgMAAAAAAAABAAAAIA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACMDAAAAAAAAIwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					263,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAACIDAAAAAAAAIwMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACIDAAAAAAAAIgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					266,
-					1,
-					"left_delete",
-					null,
-					"AQAAANcCAAAAAAAA1wIAAAAAAAABAAAAIA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANgCAAAAAAAA2AIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					267,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAANcCAAAAAAAA2AIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANcCAAAAAAAA1wIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					270,
-					1,
-					"left_delete",
-					null,
-					"AQAAAIcCAAAAAAAAhwIAAAAAAAABAAAAIA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIgCAAAAAAAAiAIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					271,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAAIcCAAAAAAAAiAIAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIcCAAAAAAAAhwIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					275,
-					1,
-					"left_delete",
-					null,
-					"AQAAAB4DAAAAAAAAHgMAAAAAAAAoAAAACQkvLwlhZGQgYmluIHRvIHBhdGggZm9yIG1vYywgdWljLCBxbWFrZQ",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEYDAAAAAAAAHgMAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					276,
-					1,
-					"left_delete",
-					null,
-					"AQAAAB0DAAAAAAAAHQMAAAAAAAABAAAACg",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAB4DAAAAAAAAHgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					287,
-					1,
-					"cut",
-					null,
-					"AQAAAP4CAAAAAAAA/gIAAAAAAAAKAAAAJHtRdF9QYXRofQ",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAgDAAAAAAAA/gIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					288,
-					1,
-					"paste",
-					null,
-					"AQAAAP4CAAAAAAAACAMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAP4CAAAAAAAA/gIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					292,
-					1,
-					"paste",
-					null,
-					"AgAAAKoCAAAAAAAAtAIAAAAAAAAAAAAAtAIAAAAAAAC0AgAAAAAAAAkAAABRdC01LjE1LjA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALMCAAAAAAAAqgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					294,
-					2,
-					"swap_line_up",
-					null,
-					"BAAAAB8DAAAAAAAAHwMAAAAAAAAiAAAACQkvLwlRdF9QYXRoPS91c3IvbG9jYWwvUXQtNS4xNS4wCtQCAAAAAAAA9gIAAAAAAAAAAAAA1AIAAAAAAADUAgAAAAAAACIAAAAJCS8vCVF0X1BhdGg9L3Vzci9sb2NhbC9RdC01LjE1LjAKgwIAAAAAAAClAgAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEADAAAAAAAAQAMAAAAAAAAAAAAAACCFQA"
-				],
-				[
-					296,
-					2,
-					"swap_line_up",
-					null,
-					"BAAAAEEDAAAAAAAAQQMAAAAAAAAyAAAACQkvLwlQQVRIPSRQQVRIOiR7UXRfUGF0aH0vYmluIC8vIGZvciBtb2MsdWljLC4uLgr2AgAAAAAAACgDAAAAAAAAAAAAAPYCAAAAAAAA9gIAAAAAAAAyAAAACQkvLwlQQVRIPSRQQVRIOiR7UXRfUGF0aH0vYmluIC8vIGZvciBtb2MsdWljLC4uLgqlAgAAAAAAANcCAAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAHIDAAAAAAAAcgMAAAAAAAAAAAAAACCFQA"
-				],
-				[
-					299,
-					2,
-					"cut",
-					null,
-					"AgAAAHMDAAAAAAAAcwMAAAAAAAArAAAACQkvLyBJTkNMVURFOiAvdXNyL2xvY2FsL1F0LTUuMTUuMC9pbmNsdWRlCnMDAAAAAAAAcwMAAAAAAAAjAAAACQkvLyBCSU46IC91c3IvbG9jYWwvUXQtNS4xNS4wL2Jpbgo",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJ0DAAAAAAAAnQMAAAAAAAAAAAAAALiEQA"
-				],
-				[
-					300,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AQAAAHMDAAAAAAAAdAMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAHMDAAAAAAAAcwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					302,
-					1,
-					"left_delete",
-					null,
-					"AQAAAMQDAAAAAAAAxAMAAAAAAAABAAAACg",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMUDAAAAAAAAxQMAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					305,
-					1,
-					"insert",
-					{
-						"characters": "\t\t"
-					},
-					"AgAAAMUDAAAAAAAAxgMAAAAAAAAAAAAAxgMAAAAAAADHAwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMUDAAAAAAAAxQMAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					307,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAMkDAAAAAAAAygMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMkDAAAAAAAAyQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					310,
-					1,
-					"insert",
-					{
-						"characters": "\t\t"
-					},
-					"AgAAAO8DAAAAAAAA8AMAAAAAAAAAAAAA8AMAAAAAAADxAwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAO8DAAAAAAAA7wMAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					312,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AQAAAHMDAAAAAAAAdAMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAHMDAAAAAAAAcwMAAAAAAAAAAAAAAABKQA"
-				],
-				[
-					313,
-					1,
-					"reindent",
-					null,
-					"AQAAAHQDAAAAAAAAdgMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAHQDAAAAAAAAdAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					314,
-					1,
-					"insert",
-					{
-						"characters": "3"
-					},
-					"AQAAAHYDAAAAAAAAdwMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAHYDAAAAAAAAdgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					315,
-					1,
-					"left_delete",
-					null,
-					"AQAAAHYDAAAAAAAAdgMAAAAAAAABAAAAMw",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAHcDAAAAAAAAdwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					316,
-					1,
-					"insert",
-					{
-						"characters": "//"
-					},
-					"AgAAAHYDAAAAAAAAdwMAAAAAAAAAAAAAdwMAAAAAAAB4AwAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAHYDAAAAAAAAdgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					317,
-					1,
-					"insert",
-					{
-						"characters": " BLA"
-					},
-					"BAAAAHgDAAAAAAAAeQMAAAAAAAAAAAAAeQMAAAAAAAB6AwAAAAAAAAAAAAB6AwAAAAAAAHsDAAAAAAAAAAAAAHsDAAAAAAAAfAMAAAAAAAAAAAAA",
-					"BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAHgDAAAAAAAAeAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					5,
-					1,
-					"right_delete",
-					null,
-					"AQAAAKwAAAAAAAAArAAAAAAAAAAEAAAAanVzdA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAArAAAAAAAAACwAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					10,
-					1,
-					"left_delete",
-					null,
-					"AQAAAKwAAAAAAAAArAAAAAAAAAABAAAAIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAArQAAAAAAAACtAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					13,
-					2,
-					"right_delete",
-					null,
-					"AgAAABABAAAAAAAAEAEAAAAAAAAEAAAAanVzdBABAAAAAAAAEAEAAAAAAAABAAAAIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAEAEAAAAAAAAUAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					19,
-					1,
-					"cut",
-					null,
-					"AQAAAFYBAAAAAAAAVgEAAAAAAAAVAwAALy8gIyMgYWRkIGluY2x1ZGVzIHRvIEVDQyAoUGFja2FnZVNldHRpbmdzLT5FYXN5Q2xhbmdDb21wbGV0ZSkKCQkvLyBjb21tb25fZmxhZ3MgOiBbCgkJLy8gLy8gLi4uCgkJLy8gIi1Jfi92aW1iYV81XzEvVmltYmFDUFAvRXhhbXBsZXMiLAoJCS8vICItSX4vdmltYmFfNV8xIiwKCQkvLyBdCgoJCS8vICMjIHVwZGF0ZSBRdC5tayB0byBvd24gYnVpbGQgb2YgUXQ1CgkJLy8JYWRkIFF0V2lkZ2V0cwoJCS8vCWNoYW5nZSBRdCB0byBRdDUgZm9yIHBrZ2NmZyBtb2R1bGVzCgoJCS8vICMjIGFkZCB0byBiYXNocmMKCQkvLwlRdF9QYXRoPS91c3IvbG9jYWwvUXQtNS4xNS4wCgkJLy8JUEFUSD0kUEFUSDoke1F0X1BhdGh9L2JpbiAvLyBmb3IgbW9jLHVpYywuLi4KCQkvLwlleHBvcnQgUEtHX0NPTkZJR19QQVRIPS91c3IvbG9jYWwvJHtRdF9QYXRofS9saWIvcGtnY29uZmlnOiRQS0dfQ09ORklHX1BBVEgKCQkvLwlleHBvcnQgTERfTElCUkFSWV9QQVRIPS91c3IvbG9jYWwvbGliOiR7UXRfUGF0aH0vbGliOiRMRF9MSUJSQVJZX1BBVEgKCgkJLy8gQkxBCgkJLy8gLi4vLi4vLi4vLi4vLi4vRXhhbXBsZXMvQnVpbGQvTWFrZQoJCS8vcGtnLWNvbmZpZyAtLXByaW50LXZhcmlhYmxlcyBRdDVDb3JlCgkJLy8gcGtnLWNvbmZpZyAtLWxpYnMgLS1jZmxhZ3MgUXQ1Q29yZSA6CgkJLy8gLURRVF9DT1JFX0xJQiAtSS91c3IvbG9jYWwvUXQtNS4xNS4wL2luY2x1ZGUvUXRDb3JlIC1JL3Vzci9sb2NhbC9RdC01LjE1LjAvaW5jbHVkZSAtTC91c3IvbG9jYWwvUXQtNS4xNS4wL2xpYiAtbFF0NUNvcmUK",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAVgEAAAAAAABrBAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					22,
-					4,
-					"left_delete",
-					null,
-					"BAAAAFUBAAAAAAAAVQEAAAAAAAABAAAACVQBAAAAAAAAVAEAAAAAAAABAAAACVMBAAAAAAAAUwEAAAAAAAABAAAAClIBAAAAAAAAUgEAAAAAAAABAAAACg",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAVgEAAAAAAABWAQAAAAAAAAAAAAAAAEpA"
-				],
-				[
-					10,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAFYBAAAAAAAAVwEAAAAAAAAAAAAAVwEAAAAAAABYAQAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAFYBAAAAAAAAVgEAAAAAAAD////////vfw"
-				],
-				[
-					11,
-					1,
-					"paste",
-					null,
-					"AQAAAFgBAAAAAAAALQUAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAFgBAAAAAAAAWAEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					16,
-					1,
-					"left_delete",
-					null,
-					"AQAAACwFAAAAAAAALAUAAAAAAAABAAAALA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAC0FAAAAAAAALQUAAAAAAAD////////vfw"
-				],
-				[
-					32,
-					3,
-					"right_delete",
-					null,
-					"AwAAABABAAAAAAAAEAEAAAAAAAABAAAAdBABAAAAAAAAEAEAAAAAAAABAAAAbxABAAAAAAAAEAEAAAAAAAABAAAAIA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABABAAAAAAAAEAEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					35,
-					1,
-					"cut",
-					null,
-					"AQAAAA0BAAAAAAAADQEAAAAAAAARAAAALy8gc2VlIGluIHNpZGViYXI",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAA0BAAAAAAAAHgEAAAAAAAD////////vfw"
-				],
-				[
-					37,
-					2,
-					"left_delete",
-					null,
-					"AgAAAAoBAAAAAAAACgEAAAAAAAADAAAACQkJCQEAAAAAAAAJAQAAAAAAAAEAAAAK",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAA0BAAAAAAAACgEAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					40,
-					1,
-					"insert",
-					{
-						"characters": ","
-					},
-					"AQAAADUBAAAAAAAANgEAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADUBAAAAAAAANQEAAAAAAAD////////vfw"
-				],
-				[
-					41,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAADYBAAAAAAAANwEAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADYBAAAAAAAANgEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					42,
-					1,
-					"paste",
-					null,
-					"AQAAADcBAAAAAAAASAEAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADcBAAAAAAAANwEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					44,
-					3,
-					"left_delete",
-					null,
-					"AwAAADkBAAAAAAAAOQEAAAAAAAABAAAAIDgBAAAAAAAAOAEAAAAAAAABAAAALzcBAAAAAAAANwEAAAAAAAABAAAALw",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADoBAAAAAAAAOgEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					48,
-					2,
-					"left_delete",
-					null,
-					"AgAAAKYAAAAAAAAApgAAAAAAAAAXAAAACQkJLy8gdG8gc2VlIGluIHNpZGViYXKlAAAAAAAAAKUAAAAAAAAAAQAAAAo",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAL0AAAAAAAAApgAAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					51,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAOgAAAAAAAAA6QAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAOgAAAAAAAAA6AAAAAAAAAD////////vfw"
-				],
-				[
-					52,
-					1,
-					"paste",
-					null,
-					"AQAAAOkAAAAAAAAA+gAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAOkAAAAAAAAA6QAAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					57,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAGUBAAAAAAAAaAEAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGIBAAAAAAAAYgEAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					64,
-					1,
-					"insert",
-					{
-						"characters": "Aszn"
-					},
-					"BQAAAMEBAAAAAAAAwgEAAAAAAAAAAAAAwgEAAAAAAADCAQAAAAAAAAcAAABjYW10cm9uwgEAAAAAAADDAQAAAAAAAAAAAADDAQAAAAAAAMQBAAAAAAAAAAAAAMQBAAAAAAAAxQEAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMgBAAAAAAAAwQEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					65,
-					2,
-					"left_delete",
-					null,
-					"AgAAAMQBAAAAAAAAxAEAAAAAAAABAAAAbsMBAAAAAAAAwwEAAAAAAAABAAAAeg",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMUBAAAAAAAAxQEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					66,
-					1,
-					"insert",
-					{
-						"characters": "ync"
-					},
-					"AwAAAMMBAAAAAAAAxAEAAAAAAAAAAAAAxAEAAAAAAADFAQAAAAAAAAAAAADFAQAAAAAAAMYBAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMMBAAAAAAAAwwEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					69,
-					1,
-					"insert",
-					{
-						"characters": "Cpns"
-					},
-					"BQAAAMgBAAAAAAAAyQEAAAAAAAAAAAAAyQEAAAAAAADJAQAAAAAAAAUAAABMaW51eMkBAAAAAAAAygEAAAAAAAAAAAAAygEAAAAAAADLAQAAAAAAAAAAAADLAQAAAAAAAMwBAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMgBAAAAAAAAzQEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					70,
-					4,
-					"left_delete",
-					null,
-					"BAAAAMsBAAAAAAAAywEAAAAAAAABAAAAc8oBAAAAAAAAygEAAAAAAAABAAAAbskBAAAAAAAAyQEAAAAAAAABAAAAcMgBAAAAAAAAyAEAAAAAAAABAAAAQw",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMwBAAAAAAAAzAEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					71,
-					1,
-					"insert",
-					{
-						"characters": "Qt"
-					},
-					"AgAAAMgBAAAAAAAAyQEAAAAAAAAAAAAAyQEAAAAAAADKAQAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMgBAAAAAAAAyAEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					79,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAO0BAAAAAAAA8AEAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACoCAAAAAAAAKgIAAAAAAAD////////vfw"
-				],
-				[
-					82,
-					2,
-					"swap_line_up",
-					null,
-					"BAAAAOoBAAAAAAAA6gEAAAAAAABEAAAACQkJLy8gInN5bnRheCI6ICJQYWNrYWdlcy9DTWFrZUJ1aWxkZXIvU3ludGF4L01ha2Uuc3VibGltZS1zeW50YXgiLArOAQAAAAAAABICAAAAAAAAAAAAAM4BAAAAAAAAzgEAAAAAAABEAAAACQkJLy8gInN5bnRheCI6ICJQYWNrYWdlcy9DTWFrZUJ1aWxkZXIvU3ludGF4L01ha2Uuc3VibGltZS1zeW50YXgiLAq1AQAAAAAAAPkBAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAC0CAAAAAAAALQIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					85,
-					2,
-					"left_delete",
-					null,
-					"AgAAAGIBAAAAAAAAYgEAAAAAAACWAAAACQkJLy8gImZpbGVfcmVnZXgiOiAiKC4rW146XSk6KFxcZCspOihcXGQrKTogKD86ZmF0YWwgKT8oKD86ZXJyb3J8d2FybmluZyk6IC4rKSQiLAoJCQkvLyAic3ludGF4IjogIlBhY2thZ2VzL0NNYWtlQnVpbGRlci9TeW50YXgvTWFrZS5zdWJsaW1lLXN5bnRheCIsYQEAAAAAAABhAQAAAAAAAAEAAAAK",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPgBAAAAAAAAYgEAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					90,
-					1,
-					"insert",
-					{
-						"characters": "Grab"
-					},
-					"BAAAAHMBAAAAAAAAdAEAAAAAAAAAAAAAdAEAAAAAAAB1AQAAAAAAAAAAAAB1AQAAAAAAAHYBAAAAAAAAAAAAAHYBAAAAAAAAdwEAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAHMBAAAAAAAAcwEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					97,
-					1,
-					"left_delete",
-					null,
-					"AQAAAPoBAAAAAAAA+gEAAAAAAABiAgAAewoJCQkJCSJuYW1lIjogImluc3RhbGwvc3RyaXAiLAoJCQkJCSJzaGVsbF9jbWQiOiAibWFrZSAtajggaW5zdGFsbC9zdHJpcCIsCgkJCQl9LAoJCQkJewoJCQkJCSJuYW1lIjogImluc3RhbGwvbG9jYWwiLAoJCQkJCSJzaGVsbF9jbWQiOiAibWFrZSAtajggaW5zdGFsbC9sb2NhbCIsCgkJCQl9LAoJCQkJewoJCQkJCSJuYW1lIjogImJnc2xpYnJhcnkiLAoJCQkJCSJzaGVsbF9jbWQiOiAibWFrZSAtajggYmdzbGlicmFyeSIsCgkJCQl9LAoJCQkJewoJCQkJCSJuYW1lIjogImluc3RhbGwiLAoJCQkJCSJzaGVsbF9jbWQiOiAibWFrZSAtajggaW5zdGFsbCIsCgkJCQl9LAoJCQkJewoJCQkJCSJuYW1lIjogImxpc3RfaW5zdGFsbF9jb21wb25lbnRzIiwKCQkJCQkic2hlbGxfY21kIjogIm1ha2UgLWo4IGxpc3RfaW5zdGFsbF9jb21wb25lbnRzIiwKCQkJCX0sCgkJCQl7CgkJCQkJIm5hbWUiOiAicmVidWlsZF9jYWNoZSIsCgkJCQkJInNoZWxsX2NtZCI6ICJtYWtlIC1qOCByZWJ1aWxkX2NhY2hlIiwKCQkJCX0sCgkJCQl7CgkJCQkJIm5hbWUiOiAiYmdzbGlicmFyeV9jb3JlIiwKCQkJCQkic2hlbGxfY21kIjogIm1ha2UgLWo4IGJnc2xpYnJhcnlfY29yZSIsCgkJCQl9LA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPoBAAAAAAAAXAQAAAAAAAD////////vfw"
-				],
-				[
-					99,
-					2,
-					"left_delete",
-					null,
-					"AgAAAPYBAAAAAAAA9gEAAAAAAAAEAAAACQkJCfUBAAAAAAAA9QEAAAAAAAABAAAACg",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPoBAAAAAAAA9gEAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					110,
-					1,
-					"insert",
-					{
-						"characters": "Qt/"
-					},
-					"AwAAABcCAAAAAAAAGAIAAAAAAAAAAAAAGAIAAAAAAAAZAgAAAAAAAAAAAAAZAgAAAAAAABoCAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABcCAAAAAAAAFwIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					113,
-					1,
-					"right_delete",
-					null,
-					"AQAAABoCAAAAAAAAGgIAAAAAAAABAAAAYg",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABoCAAAAAAAAGgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					114,
-					1,
-					"insert",
-					{
-						"characters": "B"
-					},
-					"AQAAABoCAAAAAAAAGwIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABoCAAAAAAAAGgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					132,
-					1,
-					"insert",
-					{
-						"characters": ","
-					},
-					"AQAAACUCAAAAAAAAJgIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACUCAAAAAAAAJQIAAAAAAAD////////vfw"
-				],
-				[
-					133,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAACYCAAAAAAAAJwIAAAAAAAAAAAAAJwIAAAAAAAApAgAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACYCAAAAAAAAJgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					134,
-					1,
-					"paste",
-					null,
-					"AQAAACkCAAAAAAAA7gIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACkCAAAAAAAAKQIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					138,
-					2,
-					"left_delete",
-					null,
-					"AgAAAEMCAAAAAAAAQwIAAAAAAAABAAAAdEICAAAAAAAAQgIAAAAAAAABAAAAUQ",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEQCAAAAAAAARAIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					139,
-					1,
-					"insert",
-					{
-						"characters": "Cpnsp;"
-					},
-					"BgAAAEICAAAAAAAAQwIAAAAAAAAAAAAAQwIAAAAAAABEAgAAAAAAAAAAAABEAgAAAAAAAEUCAAAAAAAAAAAAAEUCAAAAAAAARgIAAAAAAAAAAAAARgIAAAAAAABHAgAAAAAAAAAAAABHAgAAAAAAAEgCAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEICAAAAAAAAQgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					140,
-					5,
-					"left_delete",
-					null,
-					"BQAAAEcCAAAAAAAARwIAAAAAAAABAAAAO0YCAAAAAAAARgIAAAAAAAABAAAAcEUCAAAAAAAARQIAAAAAAAABAAAAc0QCAAAAAAAARAIAAAAAAAABAAAAbkMCAAAAAAAAQwIAAAAAAAABAAAAcA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEgCAAAAAAAASAIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					141,
-					1,
-					"insert",
-					{
-						"characters": "onsole"
-					},
-					"BgAAAEMCAAAAAAAARAIAAAAAAAAAAAAARAIAAAAAAABFAgAAAAAAAAAAAABFAgAAAAAAAEYCAAAAAAAAAAAAAEYCAAAAAAAARwIAAAAAAAAAAAAARwIAAAAAAABIAgAAAAAAAAAAAABIAgAAAAAAAEkCAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEMCAAAAAAAAQwIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					145,
-					2,
-					"left_delete",
-					null,
-					"AgAAAOYCAAAAAAAA5gIAAAAAAAABAAAAdOUCAAAAAAAA5QIAAAAAAAABAAAAUQ",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAOcCAAAAAAAA5wIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					146,
-					1,
-					"insert",
-					{
-						"characters": "Console"
-					},
-					"BwAAAOUCAAAAAAAA5gIAAAAAAAAAAAAA5gIAAAAAAADnAgAAAAAAAAAAAADnAgAAAAAAAOgCAAAAAAAAAAAAAOgCAAAAAAAA6QIAAAAAAAAAAAAA6QIAAAAAAADqAgAAAAAAAAAAAADqAgAAAAAAAOsCAAAAAAAAAAAAAOsCAAAAAAAA7AIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAOUCAAAAAAAA5QIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					157,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAPQCAAAAAAAA9QIAAAAAAAAAAAAA9QIAAAAAAAD4AgAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPQCAAAAAAAA9AIAAAAAAAD////////vfw"
-				],
-				[
-					158,
-					1,
-					"paste",
-					null,
-					"AQAAAPgCAAAAAAAAPwMAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPgCAAAAAAAA+AIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					160,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAAPUCAAAAAAAAIAMAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPQCAAAAAAAA9AIAAAAAAAAAAAAAAEiPQA"
-				],
-				[
-					162,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAM0CAAAAAAAA0AIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPQCAAAAAAAA9AIAAAAAAAAAAAAAAEiCQA"
-				],
-				[
-					166,
-					1,
-					"cut",
-					null,
-					"AQAAACYDAAAAAAAAJgMAAAAAAABHAAAAL2hvbWUvbS92aW1iYV81XzEvVmltYmFDUFAvRXhhbXBsZXMvQXN5bmNocm9ub3VzR3JhYi9Db25zb2xlL0J1aWxkL01ha2U",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACYDAAAAAAAAbQMAAAAAAAD////////vfw"
-				],
-				[
-					172,
-					1,
-					"left_delete",
-					null,
-					"AgAAAAsDAAAAAAAACwMAAAAAAAAVAAAAJGZvbGRlci9Db25zb2xlL0J1aWxkDgMAAAAAAAAOAwAAAAAAAAMAAAAJCQk",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACADAAAAAAAACwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					173,
-					1,
-					"paste",
-					null,
-					"AQAAAAsDAAAAAAAAUgMAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAsDAAAAAAAACwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					191,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAPsCAAAAAAAA/gIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPsCAAAAAAAA+wIAAAAAAAAAAAAAAIBTQA"
-				],
-				[
-					193,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAM0CAAAAAAAAzQIAAAAAAAADAAAALy8g",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANACAAAAAAAA0AIAAAAAAAAAAAAAAEBdQA"
-				],
-				[
-					199,
-					1,
-					"right_delete",
-					null,
-					"AQAAAOQCAAAAAAAA5AIAAAAAAAAOAAAAL0NvbnNvbGUvQnVpbGQ",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPICAAAAAAAA5AIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					201,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAAL0CAAAAAAAA4QIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALECAAAAAAAAsQIAAAAAAAAAAAAAAJB3QA"
-				],
-				[
-					213,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAMICAAAAAAAAxQIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAL8CAAAAAAAAvwIAAAAAAAAAAAAAAEBQQA"
-				],
-				[
-					221,
-					1,
-					"insert",
-					{
-						"characters": "echo"
-					},
-					"BQAAAKwCAAAAAAAArQIAAAAAAAAAAAAArQIAAAAAAACtAgAAAAAAAAQAAABtYWtlrQIAAAAAAACuAgAAAAAAAAAAAACuAgAAAAAAAK8CAAAAAAAAAAAAAK8CAAAAAAAAsAIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALACAAAAAAAArAIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					225,
-					1,
-					"cut",
-					null,
-					"AQAAALECAAAAAAAAsQIAAAAAAAAJAAAALWo4IGNsZWFu",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALECAAAAAAAAugIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					226,
-					1,
-					"insert",
-					{
-						"characters": "$"
-					},
-					"AQAAALECAAAAAAAAsgIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALECAAAAAAAAsQIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					227,
-					1,
-					"insert",
-					{
-						"characters": "folder"
-					},
-					"BgAAALICAAAAAAAAswIAAAAAAAAAAAAAswIAAAAAAAC0AgAAAAAAAAAAAAC0AgAAAAAAALUCAAAAAAAAAAAAALUCAAAAAAAAtgIAAAAAAAAAAAAAtgIAAAAAAAC3AgAAAAAAAAAAAAC3AgAAAAAAALgCAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALICAAAAAAAAsgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					233,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAP8BAAAAAAAAAgIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACECAAAAAAAAIQIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					239,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAACUCAAAAAAAATgIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAICAAAAAAAAAgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					241,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAP8BAAAAAAAA/wEAAAAAAAADAAAALy8g",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAICAAAAAAAAAgIAAAAAAAAAAAAAAEBdQA"
-				],
-				[
-					244,
-					5,
-					"left_delete",
-					null,
-					"BQAAAB4CAAAAAAAAHgIAAAAAAAABAAAAZB0CAAAAAAAAHQIAAAAAAAABAAAAbBwCAAAAAAAAHAIAAAAAAAABAAAAaRsCAAAAAAAAGwIAAAAAAAABAAAAdRoCAAAAAAAAGgIAAAAAAAABAAAAQg",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAB8CAAAAAAAAHwIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					245,
-					4,
-					"left_delete",
-					null,
-					"BAAAABkCAAAAAAAAGQIAAAAAAAABAAAALxgCAAAAAAAAGAIAAAAAAAABAAAAdBcCAAAAAAAAFwIAAAAAAAABAAAAURYCAAAAAAAAFgIAAAAAAAABAAAALw",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABoCAAAAAAAAGgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					247,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAANABAAAAAAAA0wEAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAOMBAAAAAAAA4wEAAAAAAAAAAAAAAJB3QA"
-				],
-				[
-					249,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAAPIBAAAAAAAAGQIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPEBAAAAAAAA8QEAAAAAAAD////////vfw"
-				],
-				[
-					250,
-					1,
-					"toggle_comment",
-					{
-						"block": true
-					},
-					"AQAAAPcBAAAAAAAA9wEAAAAAAAADAAAALy8g",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABgCAAAAAAAAGAIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					256,
-					1,
-					"insert",
-					{
-						"characters": "echo"
-					},
-					"BQAAAAUCAAAAAAAABgIAAAAAAAAAAAAABgIAAAAAAAAGAgAAAAAAAA4AAABtYWtlIC1qOCBjbGVhbgYCAAAAAAAABwIAAAAAAAAAAAAABwIAAAAAAAAIAgAAAAAAAAAAAAAIAgAAAAAAAAkCAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAUCAAAAAAAAEwIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					257,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAAkCAAAAAAAACgIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAkCAAAAAAAACQIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					258,
-					1,
-					"insert",
-					{
-						"characters": "$folder"
-					},
-					"BwAAAAoCAAAAAAAACwIAAAAAAAAAAAAACwIAAAAAAAAMAgAAAAAAAAAAAAAMAgAAAAAAAA0CAAAAAAAAAAAAAA0CAAAAAAAADgIAAAAAAAAAAAAADgIAAAAAAAAPAgAAAAAAAAAAAAAPAgAAAAAAABACAAAAAAAAAAAAABACAAAAAAAAEQIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAoCAAAAAAAACgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					268,
-					1,
-					"insert",
-					{
-						"characters": "                                                 "
-					},
-					"MQAAABoCAAAAAAAAGwIAAAAAAAAAAAAAGwIAAAAAAAAcAgAAAAAAAAAAAAAcAgAAAAAAAB0CAAAAAAAAAAAAAB0CAAAAAAAAHgIAAAAAAAAAAAAAHgIAAAAAAAAfAgAAAAAAAAAAAAAfAgAAAAAAACACAAAAAAAAAAAAACACAAAAAAAAIQIAAAAAAAAAAAAAIQIAAAAAAAAiAgAAAAAAAAAAAAAiAgAAAAAAACMCAAAAAAAAAAAAACMCAAAAAAAAJAIAAAAAAAAAAAAAJAIAAAAAAAAlAgAAAAAAAAAAAAAlAgAAAAAAACYCAAAAAAAAAAAAACYCAAAAAAAAJwIAAAAAAAAAAAAAJwIAAAAAAAAoAgAAAAAAAAAAAAAoAgAAAAAAACkCAAAAAAAAAAAAACkCAAAAAAAAKgIAAAAAAAAAAAAAKgIAAAAAAAArAgAAAAAAAAAAAAArAgAAAAAAACwCAAAAAAAAAAAAACwCAAAAAAAALQIAAAAAAAAAAAAALQIAAAAAAAAuAgAAAAAAAAAAAAAuAgAAAAAAAC8CAAAAAAAAAAAAAC8CAAAAAAAAMAIAAAAAAAAAAAAAMAIAAAAAAAAxAgAAAAAAAAAAAAAxAgAAAAAAADICAAAAAAAAAAAAADICAAAAAAAAMwIAAAAAAAAAAAAAMwIAAAAAAAA0AgAAAAAAAAAAAAA0AgAAAAAAADUCAAAAAAAAAAAAADUCAAAAAAAANgIAAAAAAAAAAAAANgIAAAAAAAA3AgAAAAAAAAAAAAA3AgAAAAAAADgCAAAAAAAAAAAAADgCAAAAAAAAOQIAAAAAAAAAAAAAOQIAAAAAAAA6AgAAAAAAAAAAAAA6AgAAAAAAADsCAAAAAAAAAAAAADsCAAAAAAAAPAIAAAAAAAAAAAAAPAIAAAAAAAA9AgAAAAAAAAAAAAA9AgAAAAAAAD4CAAAAAAAAAAAAAD4CAAAAAAAAPwIAAAAAAAAAAAAAPwIAAAAAAABAAgAAAAAAAAAAAABAAgAAAAAAAEECAAAAAAAAAAAAAEECAAAAAAAAQgIAAAAAAAAAAAAAQgIAAAAAAABDAgAAAAAAAAAAAABDAgAAAAAAAEQCAAAAAAAAAAAAAEQCAAAAAAAARQIAAAAAAAAAAAAARQIAAAAAAABGAgAAAAAAAAAAAABGAgAAAAAAAEcCAAAAAAAAAAAAAEcCAAAAAAAASAIAAAAAAAAAAAAASAIAAAAAAABJAgAAAAAAAAAAAABJAgAAAAAAAEoCAAAAAAAAAAAAAEoCAAAAAAAASwIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABoCAAAAAAAAGgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					269,
-					1,
-					"insert",
-					{
-						"characters": "                                                                  "
-					},
-					"QgAAAEsCAAAAAAAATAIAAAAAAAAAAAAATAIAAAAAAABNAgAAAAAAAAAAAABNAgAAAAAAAE4CAAAAAAAAAAAAAE4CAAAAAAAATwIAAAAAAAAAAAAATwIAAAAAAABQAgAAAAAAAAAAAABQAgAAAAAAAFECAAAAAAAAAAAAAFECAAAAAAAAUgIAAAAAAAAAAAAAUgIAAAAAAABTAgAAAAAAAAAAAABTAgAAAAAAAFQCAAAAAAAAAAAAAFQCAAAAAAAAVQIAAAAAAAAAAAAAVQIAAAAAAABWAgAAAAAAAAAAAABWAgAAAAAAAFcCAAAAAAAAAAAAAFcCAAAAAAAAWAIAAAAAAAAAAAAAWAIAAAAAAABZAgAAAAAAAAAAAABZAgAAAAAAAFoCAAAAAAAAAAAAAFoCAAAAAAAAWwIAAAAAAAAAAAAAWwIAAAAAAABcAgAAAAAAAAAAAABcAgAAAAAAAF0CAAAAAAAAAAAAAF0CAAAAAAAAXgIAAAAAAAAAAAAAXgIAAAAAAABfAgAAAAAAAAAAAABfAgAAAAAAAGACAAAAAAAAAAAAAGACAAAAAAAAYQIAAAAAAAAAAAAAYQIAAAAAAABiAgAAAAAAAAAAAABiAgAAAAAAAGMCAAAAAAAAAAAAAGMCAAAAAAAAZAIAAAAAAAAAAAAAZAIAAAAAAABlAgAAAAAAAAAAAABlAgAAAAAAAGYCAAAAAAAAAAAAAGYCAAAAAAAAZwIAAAAAAAAAAAAAZwIAAAAAAABoAgAAAAAAAAAAAABoAgAAAAAAAGkCAAAAAAAAAAAAAGkCAAAAAAAAagIAAAAAAAAAAAAAagIAAAAAAABrAgAAAAAAAAAAAABrAgAAAAAAAGwCAAAAAAAAAAAAAGwCAAAAAAAAbQIAAAAAAAAAAAAAbQIAAAAAAABuAgAAAAAAAAAAAABuAgAAAAAAAG8CAAAAAAAAAAAAAG8CAAAAAAAAcAIAAAAAAAAAAAAAcAIAAAAAAABxAgAAAAAAAAAAAABxAgAAAAAAAHICAAAAAAAAAAAAAHICAAAAAAAAcwIAAAAAAAAAAAAAcwIAAAAAAAB0AgAAAAAAAAAAAAB0AgAAAAAAAHUCAAAAAAAAAAAAAHUCAAAAAAAAdgIAAAAAAAAAAAAAdgIAAAAAAAB3AgAAAAAAAAAAAAB3AgAAAAAAAHgCAAAAAAAAAAAAAHgCAAAAAAAAeQIAAAAAAAAAAAAAeQIAAAAAAAB6AgAAAAAAAAAAAAB6AgAAAAAAAHsCAAAAAAAAAAAAAHsCAAAAAAAAfAIAAAAAAAAAAAAAfAIAAAAAAAB9AgAAAAAAAAAAAAB9AgAAAAAAAH4CAAAAAAAAAAAAAH4CAAAAAAAAfwIAAAAAAAAAAAAAfwIAAAAAAACAAgAAAAAAAAAAAACAAgAAAAAAAIECAAAAAAAAAAAAAIECAAAAAAAAggIAAAAAAAAAAAAAggIAAAAAAACDAgAAAAAAAAAAAACDAgAAAAAAAIQCAAAAAAAAAAAAAIQCAAAAAAAAhQIAAAAAAAAAAAAAhQIAAAAAAACGAgAAAAAAAAAAAACGAgAAAAAAAIcCAAAAAAAAAAAAAIcCAAAAAAAAiAIAAAAAAAAAAAAAiAIAAAAAAACJAgAAAAAAAAAAAACJAgAAAAAAAIoCAAAAAAAAAAAAAIoCAAAAAAAAiwIAAAAAAAAAAAAAiwIAAAAAAACMAgAAAAAAAAAAAACMAgAAAAAAAI0CAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEsCAAAAAAAASwIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					270,
-					1,
-					"insert",
-					{
-						"characters": "                                                                   "
-					},
-					"QwAAAI0CAAAAAAAAjgIAAAAAAAAAAAAAjgIAAAAAAACPAgAAAAAAAAAAAACPAgAAAAAAAJACAAAAAAAAAAAAAJACAAAAAAAAkQIAAAAAAAAAAAAAkQIAAAAAAACSAgAAAAAAAAAAAACSAgAAAAAAAJMCAAAAAAAAAAAAAJMCAAAAAAAAlAIAAAAAAAAAAAAAlAIAAAAAAACVAgAAAAAAAAAAAACVAgAAAAAAAJYCAAAAAAAAAAAAAJYCAAAAAAAAlwIAAAAAAAAAAAAAlwIAAAAAAACYAgAAAAAAAAAAAACYAgAAAAAAAJkCAAAAAAAAAAAAAJkCAAAAAAAAmgIAAAAAAAAAAAAAmgIAAAAAAACbAgAAAAAAAAAAAACbAgAAAAAAAJwCAAAAAAAAAAAAAJwCAAAAAAAAnQIAAAAAAAAAAAAAnQIAAAAAAACeAgAAAAAAAAAAAACeAgAAAAAAAJ8CAAAAAAAAAAAAAJ8CAAAAAAAAoAIAAAAAAAAAAAAAoAIAAAAAAAChAgAAAAAAAAAAAAChAgAAAAAAAKICAAAAAAAAAAAAAKICAAAAAAAAowIAAAAAAAAAAAAAowIAAAAAAACkAgAAAAAAAAAAAACkAgAAAAAAAKUCAAAAAAAAAAAAAKUCAAAAAAAApgIAAAAAAAAAAAAApgIAAAAAAACnAgAAAAAAAAAAAACnAgAAAAAAAKgCAAAAAAAAAAAAAKgCAAAAAAAAqQIAAAAAAAAAAAAAqQIAAAAAAACqAgAAAAAAAAAAAACqAgAAAAAAAKsCAAAAAAAAAAAAAKsCAAAAAAAArAIAAAAAAAAAAAAArAIAAAAAAACtAgAAAAAAAAAAAACtAgAAAAAAAK4CAAAAAAAAAAAAAK4CAAAAAAAArwIAAAAAAAAAAAAArwIAAAAAAACwAgAAAAAAAAAAAACwAgAAAAAAALECAAAAAAAAAAAAALECAAAAAAAAsgIAAAAAAAAAAAAAsgIAAAAAAACzAgAAAAAAAAAAAACzAgAAAAAAALQCAAAAAAAAAAAAALQCAAAAAAAAtQIAAAAAAAAAAAAAtQIAAAAAAAC2AgAAAAAAAAAAAAC2AgAAAAAAALcCAAAAAAAAAAAAALcCAAAAAAAAuAIAAAAAAAAAAAAAuAIAAAAAAAC5AgAAAAAAAAAAAAC5AgAAAAAAALoCAAAAAAAAAAAAALoCAAAAAAAAuwIAAAAAAAAAAAAAuwIAAAAAAAC8AgAAAAAAAAAAAAC8AgAAAAAAAL0CAAAAAAAAAAAAAL0CAAAAAAAAvgIAAAAAAAAAAAAAvgIAAAAAAAC/AgAAAAAAAAAAAAC/AgAAAAAAAMACAAAAAAAAAAAAAMACAAAAAAAAwQIAAAAAAAAAAAAAwQIAAAAAAADCAgAAAAAAAAAAAADCAgAAAAAAAMMCAAAAAAAAAAAAAMMCAAAAAAAAxAIAAAAAAAAAAAAAxAIAAAAAAADFAgAAAAAAAAAAAADFAgAAAAAAAMYCAAAAAAAAAAAAAMYCAAAAAAAAxwIAAAAAAAAAAAAAxwIAAAAAAADIAgAAAAAAAAAAAADIAgAAAAAAAMkCAAAAAAAAAAAAAMkCAAAAAAAAygIAAAAAAAAAAAAAygIAAAAAAADLAgAAAAAAAAAAAADLAgAAAAAAAMwCAAAAAAAAAAAAAMwCAAAAAAAAzQIAAAAAAAAAAAAAzQIAAAAAAADOAgAAAAAAAAAAAADOAgAAAAAAAM8CAAAAAAAAAAAAAM8CAAAAAAAA0AIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAI0CAAAAAAAAjQIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					271,
-					1,
-					"insert",
-					{
-						"characters": "                                                                  "
-					},
-					"QgAAANACAAAAAAAA0QIAAAAAAAAAAAAA0QIAAAAAAADSAgAAAAAAAAAAAADSAgAAAAAAANMCAAAAAAAAAAAAANMCAAAAAAAA1AIAAAAAAAAAAAAA1AIAAAAAAADVAgAAAAAAAAAAAADVAgAAAAAAANYCAAAAAAAAAAAAANYCAAAAAAAA1wIAAAAAAAAAAAAA1wIAAAAAAADYAgAAAAAAAAAAAADYAgAAAAAAANkCAAAAAAAAAAAAANkCAAAAAAAA2gIAAAAAAAAAAAAA2gIAAAAAAADbAgAAAAAAAAAAAADbAgAAAAAAANwCAAAAAAAAAAAAANwCAAAAAAAA3QIAAAAAAAAAAAAA3QIAAAAAAADeAgAAAAAAAAAAAADeAgAAAAAAAN8CAAAAAAAAAAAAAN8CAAAAAAAA4AIAAAAAAAAAAAAA4AIAAAAAAADhAgAAAAAAAAAAAADhAgAAAAAAAOICAAAAAAAAAAAAAOICAAAAAAAA4wIAAAAAAAAAAAAA4wIAAAAAAADkAgAAAAAAAAAAAADkAgAAAAAAAOUCAAAAAAAAAAAAAOUCAAAAAAAA5gIAAAAAAAAAAAAA5gIAAAAAAADnAgAAAAAAAAAAAADnAgAAAAAAAOgCAAAAAAAAAAAAAOgCAAAAAAAA6QIAAAAAAAAAAAAA6QIAAAAAAADqAgAAAAAAAAAAAADqAgAAAAAAAOsCAAAAAAAAAAAAAOsCAAAAAAAA7AIAAAAAAAAAAAAA7AIAAAAAAADtAgAAAAAAAAAAAADtAgAAAAAAAO4CAAAAAAAAAAAAAO4CAAAAAAAA7wIAAAAAAAAAAAAA7wIAAAAAAADwAgAAAAAAAAAAAADwAgAAAAAAAPECAAAAAAAAAAAAAPECAAAAAAAA8gIAAAAAAAAAAAAA8gIAAAAAAADzAgAAAAAAAAAAAADzAgAAAAAAAPQCAAAAAAAAAAAAAPQCAAAAAAAA9QIAAAAAAAAAAAAA9QIAAAAAAAD2AgAAAAAAAAAAAAD2AgAAAAAAAPcCAAAAAAAAAAAAAPcCAAAAAAAA+AIAAAAAAAAAAAAA+AIAAAAAAAD5AgAAAAAAAAAAAAD5AgAAAAAAAPoCAAAAAAAAAAAAAPoCAAAAAAAA+wIAAAAAAAAAAAAA+wIAAAAAAAD8AgAAAAAAAAAAAAD8AgAAAAAAAP0CAAAAAAAAAAAAAP0CAAAAAAAA/gIAAAAAAAAAAAAA/gIAAAAAAAD/AgAAAAAAAAAAAAD/AgAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAQMAAAAAAAAAAAAAAQMAAAAAAAACAwAAAAAAAAAAAAACAwAAAAAAAAMDAAAAAAAAAAAAAAMDAAAAAAAABAMAAAAAAAAAAAAABAMAAAAAAAAFAwAAAAAAAAAAAAAFAwAAAAAAAAYDAAAAAAAAAAAAAAYDAAAAAAAABwMAAAAAAAAAAAAABwMAAAAAAAAIAwAAAAAAAAAAAAAIAwAAAAAAAAkDAAAAAAAAAAAAAAkDAAAAAAAACgMAAAAAAAAAAAAACgMAAAAAAAALAwAAAAAAAAAAAAALAwAAAAAAAAwDAAAAAAAAAAAAAAwDAAAAAAAADQMAAAAAAAAAAAAADQMAAAAAAAAOAwAAAAAAAAAAAAAOAwAAAAAAAA8DAAAAAAAAAAAAAA8DAAAAAAAAEAMAAAAAAAAAAAAAEAMAAAAAAAARAwAAAAAAAAAAAAARAwAAAAAAABIDAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANACAAAAAAAA0AIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					272,
-					1,
-					"insert",
-					{
-						"characters": "                                                                   "
-					},
-					"QwAAABIDAAAAAAAAEwMAAAAAAAAAAAAAEwMAAAAAAAAUAwAAAAAAAAAAAAAUAwAAAAAAABUDAAAAAAAAAAAAABUDAAAAAAAAFgMAAAAAAAAAAAAAFgMAAAAAAAAXAwAAAAAAAAAAAAAXAwAAAAAAABgDAAAAAAAAAAAAABgDAAAAAAAAGQMAAAAAAAAAAAAAGQMAAAAAAAAaAwAAAAAAAAAAAAAaAwAAAAAAABsDAAAAAAAAAAAAABsDAAAAAAAAHAMAAAAAAAAAAAAAHAMAAAAAAAAdAwAAAAAAAAAAAAAdAwAAAAAAAB4DAAAAAAAAAAAAAB4DAAAAAAAAHwMAAAAAAAAAAAAAHwMAAAAAAAAgAwAAAAAAAAAAAAAgAwAAAAAAACEDAAAAAAAAAAAAACEDAAAAAAAAIgMAAAAAAAAAAAAAIgMAAAAAAAAjAwAAAAAAAAAAAAAjAwAAAAAAACQDAAAAAAAAAAAAACQDAAAAAAAAJQMAAAAAAAAAAAAAJQMAAAAAAAAmAwAAAAAAAAAAAAAmAwAAAAAAACcDAAAAAAAAAAAAACcDAAAAAAAAKAMAAAAAAAAAAAAAKAMAAAAAAAApAwAAAAAAAAAAAAApAwAAAAAAACoDAAAAAAAAAAAAACoDAAAAAAAAKwMAAAAAAAAAAAAAKwMAAAAAAAAsAwAAAAAAAAAAAAAsAwAAAAAAAC0DAAAAAAAAAAAAAC0DAAAAAAAALgMAAAAAAAAAAAAALgMAAAAAAAAvAwAAAAAAAAAAAAAvAwAAAAAAADADAAAAAAAAAAAAADADAAAAAAAAMQMAAAAAAAAAAAAAMQMAAAAAAAAyAwAAAAAAAAAAAAAyAwAAAAAAADMDAAAAAAAAAAAAADMDAAAAAAAANAMAAAAAAAAAAAAANAMAAAAAAAA1AwAAAAAAAAAAAAA1AwAAAAAAADYDAAAAAAAAAAAAADYDAAAAAAAANwMAAAAAAAAAAAAANwMAAAAAAAA4AwAAAAAAAAAAAAA4AwAAAAAAADkDAAAAAAAAAAAAADkDAAAAAAAAOgMAAAAAAAAAAAAAOgMAAAAAAAA7AwAAAAAAAAAAAAA7AwAAAAAAADwDAAAAAAAAAAAAADwDAAAAAAAAPQMAAAAAAAAAAAAAPQMAAAAAAAA+AwAAAAAAAAAAAAA+AwAAAAAAAD8DAAAAAAAAAAAAAD8DAAAAAAAAQAMAAAAAAAAAAAAAQAMAAAAAAABBAwAAAAAAAAAAAABBAwAAAAAAAEIDAAAAAAAAAAAAAEIDAAAAAAAAQwMAAAAAAAAAAAAAQwMAAAAAAABEAwAAAAAAAAAAAABEAwAAAAAAAEUDAAAAAAAAAAAAAEUDAAAAAAAARgMAAAAAAAAAAAAARgMAAAAAAABHAwAAAAAAAAAAAABHAwAAAAAAAEgDAAAAAAAAAAAAAEgDAAAAAAAASQMAAAAAAAAAAAAASQMAAAAAAABKAwAAAAAAAAAAAABKAwAAAAAAAEsDAAAAAAAAAAAAAEsDAAAAAAAATAMAAAAAAAAAAAAATAMAAAAAAABNAwAAAAAAAAAAAABNAwAAAAAAAE4DAAAAAAAAAAAAAE4DAAAAAAAATwMAAAAAAAAAAAAATwMAAAAAAABQAwAAAAAAAAAAAABQAwAAAAAAAFEDAAAAAAAAAAAAAFEDAAAAAAAAUgMAAAAAAAAAAAAAUgMAAAAAAABTAwAAAAAAAAAAAABTAwAAAAAAAFQDAAAAAAAAAAAAAFQDAAAAAAAAVQMAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABIDAAAAAAAAEgMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					273,
-					1,
-					"insert",
-					{
-						"characters": "                                                                  "
-					},
-					"QgAAAFUDAAAAAAAAVgMAAAAAAAAAAAAAVgMAAAAAAABXAwAAAAAAAAAAAABXAwAAAAAAAFgDAAAAAAAAAAAAAFgDAAAAAAAAWQMAAAAAAAAAAAAAWQMAAAAAAABaAwAAAAAAAAAAAABaAwAAAAAAAFsDAAAAAAAAAAAAAFsDAAAAAAAAXAMAAAAAAAAAAAAAXAMAAAAAAABdAwAAAAAAAAAAAABdAwAAAAAAAF4DAAAAAAAAAAAAAF4DAAAAAAAAXwMAAAAAAAAAAAAAXwMAAAAAAABgAwAAAAAAAAAAAABgAwAAAAAAAGEDAAAAAAAAAAAAAGEDAAAAAAAAYgMAAAAAAAAAAAAAYgMAAAAAAABjAwAAAAAAAAAAAABjAwAAAAAAAGQDAAAAAAAAAAAAAGQDAAAAAAAAZQMAAAAAAAAAAAAAZQMAAAAAAABmAwAAAAAAAAAAAABmAwAAAAAAAGcDAAAAAAAAAAAAAGcDAAAAAAAAaAMAAAAAAAAAAAAAaAMAAAAAAABpAwAAAAAAAAAAAABpAwAAAAAAAGoDAAAAAAAAAAAAAGoDAAAAAAAAawMAAAAAAAAAAAAAawMAAAAAAABsAwAAAAAAAAAAAABsAwAAAAAAAG0DAAAAAAAAAAAAAG0DAAAAAAAAbgMAAAAAAAAAAAAAbgMAAAAAAABvAwAAAAAAAAAAAABvAwAAAAAAAHADAAAAAAAAAAAAAHADAAAAAAAAcQMAAAAAAAAAAAAAcQMAAAAAAAByAwAAAAAAAAAAAAByAwAAAAAAAHMDAAAAAAAAAAAAAHMDAAAAAAAAdAMAAAAAAAAAAAAAdAMAAAAAAAB1AwAAAAAAAAAAAAB1AwAAAAAAAHYDAAAAAAAAAAAAAHYDAAAAAAAAdwMAAAAAAAAAAAAAdwMAAAAAAAB4AwAAAAAAAAAAAAB4AwAAAAAAAHkDAAAAAAAAAAAAAHkDAAAAAAAAegMAAAAAAAAAAAAAegMAAAAAAAB7AwAAAAAAAAAAAAB7AwAAAAAAAHwDAAAAAAAAAAAAAHwDAAAAAAAAfQMAAAAAAAAAAAAAfQMAAAAAAAB+AwAAAAAAAAAAAAB+AwAAAAAAAH8DAAAAAAAAAAAAAH8DAAAAAAAAgAMAAAAAAAAAAAAAgAMAAAAAAACBAwAAAAAAAAAAAACBAwAAAAAAAIIDAAAAAAAAAAAAAIIDAAAAAAAAgwMAAAAAAAAAAAAAgwMAAAAAAACEAwAAAAAAAAAAAACEAwAAAAAAAIUDAAAAAAAAAAAAAIUDAAAAAAAAhgMAAAAAAAAAAAAAhgMAAAAAAACHAwAAAAAAAAAAAACHAwAAAAAAAIgDAAAAAAAAAAAAAIgDAAAAAAAAiQMAAAAAAAAAAAAAiQMAAAAAAACKAwAAAAAAAAAAAACKAwAAAAAAAIsDAAAAAAAAAAAAAIsDAAAAAAAAjAMAAAAAAAAAAAAAjAMAAAAAAACNAwAAAAAAAAAAAACNAwAAAAAAAI4DAAAAAAAAAAAAAI4DAAAAAAAAjwMAAAAAAAAAAAAAjwMAAAAAAACQAwAAAAAAAAAAAACQAwAAAAAAAJEDAAAAAAAAAAAAAJEDAAAAAAAAkgMAAAAAAAAAAAAAkgMAAAAAAACTAwAAAAAAAAAAAACTAwAAAAAAAJQDAAAAAAAAAAAAAJQDAAAAAAAAlQMAAAAAAAAAAAAAlQMAAAAAAACWAwAAAAAAAAAAAACWAwAAAAAAAJcDAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAFUDAAAAAAAAVQMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					274,
-					1,
-					"insert",
-					{
-						"characters": "                                                                   "
-					},
-					"QwAAAJcDAAAAAAAAmAMAAAAAAAAAAAAAmAMAAAAAAACZAwAAAAAAAAAAAACZAwAAAAAAAJoDAAAAAAAAAAAAAJoDAAAAAAAAmwMAAAAAAAAAAAAAmwMAAAAAAACcAwAAAAAAAAAAAACcAwAAAAAAAJ0DAAAAAAAAAAAAAJ0DAAAAAAAAngMAAAAAAAAAAAAAngMAAAAAAACfAwAAAAAAAAAAAACfAwAAAAAAAKADAAAAAAAAAAAAAKADAAAAAAAAoQMAAAAAAAAAAAAAoQMAAAAAAACiAwAAAAAAAAAAAACiAwAAAAAAAKMDAAAAAAAAAAAAAKMDAAAAAAAApAMAAAAAAAAAAAAApAMAAAAAAAClAwAAAAAAAAAAAAClAwAAAAAAAKYDAAAAAAAAAAAAAKYDAAAAAAAApwMAAAAAAAAAAAAApwMAAAAAAACoAwAAAAAAAAAAAACoAwAAAAAAAKkDAAAAAAAAAAAAAKkDAAAAAAAAqgMAAAAAAAAAAAAAqgMAAAAAAACrAwAAAAAAAAAAAACrAwAAAAAAAKwDAAAAAAAAAAAAAKwDAAAAAAAArQMAAAAAAAAAAAAArQMAAAAAAACuAwAAAAAAAAAAAACuAwAAAAAAAK8DAAAAAAAAAAAAAK8DAAAAAAAAsAMAAAAAAAAAAAAAsAMAAAAAAACxAwAAAAAAAAAAAACxAwAAAAAAALIDAAAAAAAAAAAAALIDAAAAAAAAswMAAAAAAAAAAAAAswMAAAAAAAC0AwAAAAAAAAAAAAC0AwAAAAAAALUDAAAAAAAAAAAAALUDAAAAAAAAtgMAAAAAAAAAAAAAtgMAAAAAAAC3AwAAAAAAAAAAAAC3AwAAAAAAALgDAAAAAAAAAAAAALgDAAAAAAAAuQMAAAAAAAAAAAAAuQMAAAAAAAC6AwAAAAAAAAAAAAC6AwAAAAAAALsDAAAAAAAAAAAAALsDAAAAAAAAvAMAAAAAAAAAAAAAvAMAAAAAAAC9AwAAAAAAAAAAAAC9AwAAAAAAAL4DAAAAAAAAAAAAAL4DAAAAAAAAvwMAAAAAAAAAAAAAvwMAAAAAAADAAwAAAAAAAAAAAADAAwAAAAAAAMEDAAAAAAAAAAAAAMEDAAAAAAAAwgMAAAAAAAAAAAAAwgMAAAAAAADDAwAAAAAAAAAAAADDAwAAAAAAAMQDAAAAAAAAAAAAAMQDAAAAAAAAxQMAAAAAAAAAAAAAxQMAAAAAAADGAwAAAAAAAAAAAADGAwAAAAAAAMcDAAAAAAAAAAAAAMcDAAAAAAAAyAMAAAAAAAAAAAAAyAMAAAAAAADJAwAAAAAAAAAAAADJAwAAAAAAAMoDAAAAAAAAAAAAAMoDAAAAAAAAywMAAAAAAAAAAAAAywMAAAAAAADMAwAAAAAAAAAAAADMAwAAAAAAAM0DAAAAAAAAAAAAAM0DAAAAAAAAzgMAAAAAAAAAAAAAzgMAAAAAAADPAwAAAAAAAAAAAADPAwAAAAAAANADAAAAAAAAAAAAANADAAAAAAAA0QMAAAAAAAAAAAAA0QMAAAAAAADSAwAAAAAAAAAAAADSAwAAAAAAANMDAAAAAAAAAAAAANMDAAAAAAAA1AMAAAAAAAAAAAAA1AMAAAAAAADVAwAAAAAAAAAAAADVAwAAAAAAANYDAAAAAAAAAAAAANYDAAAAAAAA1wMAAAAAAAAAAAAA1wMAAAAAAADYAwAAAAAAAAAAAADYAwAAAAAAANkDAAAAAAAAAAAAANkDAAAAAAAA2gMAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJcDAAAAAAAAlwMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					275,
-					1,
-					"insert",
-					{
-						"characters": "                                        "
-					},
-					"KAAAANoDAAAAAAAA2wMAAAAAAAAAAAAA2wMAAAAAAADcAwAAAAAAAAAAAADcAwAAAAAAAN0DAAAAAAAAAAAAAN0DAAAAAAAA3gMAAAAAAAAAAAAA3gMAAAAAAADfAwAAAAAAAAAAAADfAwAAAAAAAOADAAAAAAAAAAAAAOADAAAAAAAA4QMAAAAAAAAAAAAA4QMAAAAAAADiAwAAAAAAAAAAAADiAwAAAAAAAOMDAAAAAAAAAAAAAOMDAAAAAAAA5AMAAAAAAAAAAAAA5AMAAAAAAADlAwAAAAAAAAAAAADlAwAAAAAAAOYDAAAAAAAAAAAAAOYDAAAAAAAA5wMAAAAAAAAAAAAA5wMAAAAAAADoAwAAAAAAAAAAAADoAwAAAAAAAOkDAAAAAAAAAAAAAOkDAAAAAAAA6gMAAAAAAAAAAAAA6gMAAAAAAADrAwAAAAAAAAAAAADrAwAAAAAAAOwDAAAAAAAAAAAAAOwDAAAAAAAA7QMAAAAAAAAAAAAA7QMAAAAAAADuAwAAAAAAAAAAAADuAwAAAAAAAO8DAAAAAAAAAAAAAO8DAAAAAAAA8AMAAAAAAAAAAAAA8AMAAAAAAADxAwAAAAAAAAAAAADxAwAAAAAAAPIDAAAAAAAAAAAAAPIDAAAAAAAA8wMAAAAAAAAAAAAA8wMAAAAAAAD0AwAAAAAAAAAAAAD0AwAAAAAAAPUDAAAAAAAAAAAAAPUDAAAAAAAA9gMAAAAAAAAAAAAA9gMAAAAAAAD3AwAAAAAAAAAAAAD3AwAAAAAAAPgDAAAAAAAAAAAAAPgDAAAAAAAA+QMAAAAAAAAAAAAA+QMAAAAAAAD6AwAAAAAAAAAAAAD6AwAAAAAAAPsDAAAAAAAAAAAAAPsDAAAAAAAA/AMAAAAAAAAAAAAA/AMAAAAAAAD9AwAAAAAAAAAAAAD9AwAAAAAAAP4DAAAAAAAAAAAAAP4DAAAAAAAA/wMAAAAAAAAAAAAA/wMAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAEEAAAAAAAAAAAAAAEEAAAAAAAAAgQAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANoDAAAAAAAA2gMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					276,
-					1,
-					"insert",
-					{
-						"characters": "                                                                  "
-					},
-					"QgAAAAIEAAAAAAAAAwQAAAAAAAAAAAAAAwQAAAAAAAAEBAAAAAAAAAAAAAAEBAAAAAAAAAUEAAAAAAAAAAAAAAUEAAAAAAAABgQAAAAAAAAAAAAABgQAAAAAAAAHBAAAAAAAAAAAAAAHBAAAAAAAAAgEAAAAAAAAAAAAAAgEAAAAAAAACQQAAAAAAAAAAAAACQQAAAAAAAAKBAAAAAAAAAAAAAAKBAAAAAAAAAsEAAAAAAAAAAAAAAsEAAAAAAAADAQAAAAAAAAAAAAADAQAAAAAAAANBAAAAAAAAAAAAAANBAAAAAAAAA4EAAAAAAAAAAAAAA4EAAAAAAAADwQAAAAAAAAAAAAADwQAAAAAAAAQBAAAAAAAAAAAAAAQBAAAAAAAABEEAAAAAAAAAAAAABEEAAAAAAAAEgQAAAAAAAAAAAAAEgQAAAAAAAATBAAAAAAAAAAAAAATBAAAAAAAABQEAAAAAAAAAAAAABQEAAAAAAAAFQQAAAAAAAAAAAAAFQQAAAAAAAAWBAAAAAAAAAAAAAAWBAAAAAAAABcEAAAAAAAAAAAAABcEAAAAAAAAGAQAAAAAAAAAAAAAGAQAAAAAAAAZBAAAAAAAAAAAAAAZBAAAAAAAABoEAAAAAAAAAAAAABoEAAAAAAAAGwQAAAAAAAAAAAAAGwQAAAAAAAAcBAAAAAAAAAAAAAAcBAAAAAAAAB0EAAAAAAAAAAAAAB0EAAAAAAAAHgQAAAAAAAAAAAAAHgQAAAAAAAAfBAAAAAAAAAAAAAAfBAAAAAAAACAEAAAAAAAAAAAAACAEAAAAAAAAIQQAAAAAAAAAAAAAIQQAAAAAAAAiBAAAAAAAAAAAAAAiBAAAAAAAACMEAAAAAAAAAAAAACMEAAAAAAAAJAQAAAAAAAAAAAAAJAQAAAAAAAAlBAAAAAAAAAAAAAAlBAAAAAAAACYEAAAAAAAAAAAAACYEAAAAAAAAJwQAAAAAAAAAAAAAJwQAAAAAAAAoBAAAAAAAAAAAAAAoBAAAAAAAACkEAAAAAAAAAAAAACkEAAAAAAAAKgQAAAAAAAAAAAAAKgQAAAAAAAArBAAAAAAAAAAAAAArBAAAAAAAACwEAAAAAAAAAAAAACwEAAAAAAAALQQAAAAAAAAAAAAALQQAAAAAAAAuBAAAAAAAAAAAAAAuBAAAAAAAAC8EAAAAAAAAAAAAAC8EAAAAAAAAMAQAAAAAAAAAAAAAMAQAAAAAAAAxBAAAAAAAAAAAAAAxBAAAAAAAADIEAAAAAAAAAAAAADIEAAAAAAAAMwQAAAAAAAAAAAAAMwQAAAAAAAA0BAAAAAAAAAAAAAA0BAAAAAAAADUEAAAAAAAAAAAAADUEAAAAAAAANgQAAAAAAAAAAAAANgQAAAAAAAA3BAAAAAAAAAAAAAA3BAAAAAAAADgEAAAAAAAAAAAAADgEAAAAAAAAOQQAAAAAAAAAAAAAOQQAAAAAAAA6BAAAAAAAAAAAAAA6BAAAAAAAADsEAAAAAAAAAAAAADsEAAAAAAAAPAQAAAAAAAAAAAAAPAQAAAAAAAA9BAAAAAAAAAAAAAA9BAAAAAAAAD4EAAAAAAAAAAAAAD4EAAAAAAAAPwQAAAAAAAAAAAAAPwQAAAAAAABABAAAAAAAAAAAAABABAAAAAAAAEEEAAAAAAAAAAAAAEEEAAAAAAAAQgQAAAAAAAAAAAAAQgQAAAAAAABDBAAAAAAAAAAAAABDBAAAAAAAAEQEAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAIEAAAAAAAAAgQAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					277,
-					1,
-					"insert",
-					{
-						"characters": "                                                                  "
-					},
-					"QgAAAEQEAAAAAAAARQQAAAAAAAAAAAAARQQAAAAAAABGBAAAAAAAAAAAAABGBAAAAAAAAEcEAAAAAAAAAAAAAEcEAAAAAAAASAQAAAAAAAAAAAAASAQAAAAAAABJBAAAAAAAAAAAAABJBAAAAAAAAEoEAAAAAAAAAAAAAEoEAAAAAAAASwQAAAAAAAAAAAAASwQAAAAAAABMBAAAAAAAAAAAAABMBAAAAAAAAE0EAAAAAAAAAAAAAE0EAAAAAAAATgQAAAAAAAAAAAAATgQAAAAAAABPBAAAAAAAAAAAAABPBAAAAAAAAFAEAAAAAAAAAAAAAFAEAAAAAAAAUQQAAAAAAAAAAAAAUQQAAAAAAABSBAAAAAAAAAAAAABSBAAAAAAAAFMEAAAAAAAAAAAAAFMEAAAAAAAAVAQAAAAAAAAAAAAAVAQAAAAAAABVBAAAAAAAAAAAAABVBAAAAAAAAFYEAAAAAAAAAAAAAFYEAAAAAAAAVwQAAAAAAAAAAAAAVwQAAAAAAABYBAAAAAAAAAAAAABYBAAAAAAAAFkEAAAAAAAAAAAAAFkEAAAAAAAAWgQAAAAAAAAAAAAAWgQAAAAAAABbBAAAAAAAAAAAAABbBAAAAAAAAFwEAAAAAAAAAAAAAFwEAAAAAAAAXQQAAAAAAAAAAAAAXQQAAAAAAABeBAAAAAAAAAAAAABeBAAAAAAAAF8EAAAAAAAAAAAAAF8EAAAAAAAAYAQAAAAAAAAAAAAAYAQAAAAAAABhBAAAAAAAAAAAAABhBAAAAAAAAGIEAAAAAAAAAAAAAGIEAAAAAAAAYwQAAAAAAAAAAAAAYwQAAAAAAABkBAAAAAAAAAAAAABkBAAAAAAAAGUEAAAAAAAAAAAAAGUEAAAAAAAAZgQAAAAAAAAAAAAAZgQAAAAAAABnBAAAAAAAAAAAAABnBAAAAAAAAGgEAAAAAAAAAAAAAGgEAAAAAAAAaQQAAAAAAAAAAAAAaQQAAAAAAABqBAAAAAAAAAAAAABqBAAAAAAAAGsEAAAAAAAAAAAAAGsEAAAAAAAAbAQAAAAAAAAAAAAAbAQAAAAAAABtBAAAAAAAAAAAAABtBAAAAAAAAG4EAAAAAAAAAAAAAG4EAAAAAAAAbwQAAAAAAAAAAAAAbwQAAAAAAABwBAAAAAAAAAAAAABwBAAAAAAAAHEEAAAAAAAAAAAAAHEEAAAAAAAAcgQAAAAAAAAAAAAAcgQAAAAAAABzBAAAAAAAAAAAAABzBAAAAAAAAHQEAAAAAAAAAAAAAHQEAAAAAAAAdQQAAAAAAAAAAAAAdQQAAAAAAAB2BAAAAAAAAAAAAAB2BAAAAAAAAHcEAAAAAAAAAAAAAHcEAAAAAAAAeAQAAAAAAAAAAAAAeAQAAAAAAAB5BAAAAAAAAAAAAAB5BAAAAAAAAHoEAAAAAAAAAAAAAHoEAAAAAAAAewQAAAAAAAAAAAAAewQAAAAAAAB8BAAAAAAAAAAAAAB8BAAAAAAAAH0EAAAAAAAAAAAAAH0EAAAAAAAAfgQAAAAAAAAAAAAAfgQAAAAAAAB/BAAAAAAAAAAAAAB/BAAAAAAAAIAEAAAAAAAAAAAAAIAEAAAAAAAAgQQAAAAAAAAAAAAAgQQAAAAAAACCBAAAAAAAAAAAAACCBAAAAAAAAIMEAAAAAAAAAAAAAIMEAAAAAAAAhAQAAAAAAAAAAAAAhAQAAAAAAACFBAAAAAAAAAAAAACFBAAAAAAAAIYEAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEQEAAAAAAAARAQAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					278,
-					1,
-					"insert",
-					{
-						"characters": "                                             "
-					},
-					"LQAAAIYEAAAAAAAAhwQAAAAAAAAAAAAAhwQAAAAAAACIBAAAAAAAAAAAAACIBAAAAAAAAIkEAAAAAAAAAAAAAIkEAAAAAAAAigQAAAAAAAAAAAAAigQAAAAAAACLBAAAAAAAAAAAAACLBAAAAAAAAIwEAAAAAAAAAAAAAIwEAAAAAAAAjQQAAAAAAAAAAAAAjQQAAAAAAACOBAAAAAAAAAAAAACOBAAAAAAAAI8EAAAAAAAAAAAAAI8EAAAAAAAAkAQAAAAAAAAAAAAAkAQAAAAAAACRBAAAAAAAAAAAAACRBAAAAAAAAJIEAAAAAAAAAAAAAJIEAAAAAAAAkwQAAAAAAAAAAAAAkwQAAAAAAACUBAAAAAAAAAAAAACUBAAAAAAAAJUEAAAAAAAAAAAAAJUEAAAAAAAAlgQAAAAAAAAAAAAAlgQAAAAAAACXBAAAAAAAAAAAAACXBAAAAAAAAJgEAAAAAAAAAAAAAJgEAAAAAAAAmQQAAAAAAAAAAAAAmQQAAAAAAACaBAAAAAAAAAAAAACaBAAAAAAAAJsEAAAAAAAAAAAAAJsEAAAAAAAAnAQAAAAAAAAAAAAAnAQAAAAAAACdBAAAAAAAAAAAAACdBAAAAAAAAJ4EAAAAAAAAAAAAAJ4EAAAAAAAAnwQAAAAAAAAAAAAAnwQAAAAAAACgBAAAAAAAAAAAAACgBAAAAAAAAKEEAAAAAAAAAAAAAKEEAAAAAAAAogQAAAAAAAAAAAAAogQAAAAAAACjBAAAAAAAAAAAAACjBAAAAAAAAKQEAAAAAAAAAAAAAKQEAAAAAAAApQQAAAAAAAAAAAAApQQAAAAAAACmBAAAAAAAAAAAAACmBAAAAAAAAKcEAAAAAAAAAAAAAKcEAAAAAAAAqAQAAAAAAAAAAAAAqAQAAAAAAACpBAAAAAAAAAAAAACpBAAAAAAAAKoEAAAAAAAAAAAAAKoEAAAAAAAAqwQAAAAAAAAAAAAAqwQAAAAAAACsBAAAAAAAAAAAAACsBAAAAAAAAK0EAAAAAAAAAAAAAK0EAAAAAAAArgQAAAAAAAAAAAAArgQAAAAAAACvBAAAAAAAAAAAAACvBAAAAAAAALAEAAAAAAAAAAAAALAEAAAAAAAAsQQAAAAAAAAAAAAAsQQAAAAAAACyBAAAAAAAAAAAAACyBAAAAAAAALMEAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIYEAAAAAAAAhgQAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					279,
-					1,
-					"insert",
-					{
-						"characters": "                                                   "
-					},
-					"MwAAALMEAAAAAAAAtAQAAAAAAAAAAAAAtAQAAAAAAAC1BAAAAAAAAAAAAAC1BAAAAAAAALYEAAAAAAAAAAAAALYEAAAAAAAAtwQAAAAAAAAAAAAAtwQAAAAAAAC4BAAAAAAAAAAAAAC4BAAAAAAAALkEAAAAAAAAAAAAALkEAAAAAAAAugQAAAAAAAAAAAAAugQAAAAAAAC7BAAAAAAAAAAAAAC7BAAAAAAAALwEAAAAAAAAAAAAALwEAAAAAAAAvQQAAAAAAAAAAAAAvQQAAAAAAAC+BAAAAAAAAAAAAAC+BAAAAAAAAL8EAAAAAAAAAAAAAL8EAAAAAAAAwAQAAAAAAAAAAAAAwAQAAAAAAADBBAAAAAAAAAAAAADBBAAAAAAAAMIEAAAAAAAAAAAAAMIEAAAAAAAAwwQAAAAAAAAAAAAAwwQAAAAAAADEBAAAAAAAAAAAAADEBAAAAAAAAMUEAAAAAAAAAAAAAMUEAAAAAAAAxgQAAAAAAAAAAAAAxgQAAAAAAADHBAAAAAAAAAAAAADHBAAAAAAAAMgEAAAAAAAAAAAAAMgEAAAAAAAAyQQAAAAAAAAAAAAAyQQAAAAAAADKBAAAAAAAAAAAAADKBAAAAAAAAMsEAAAAAAAAAAAAAMsEAAAAAAAAzAQAAAAAAAAAAAAAzAQAAAAAAADNBAAAAAAAAAAAAADNBAAAAAAAAM4EAAAAAAAAAAAAAM4EAAAAAAAAzwQAAAAAAAAAAAAAzwQAAAAAAADQBAAAAAAAAAAAAADQBAAAAAAAANEEAAAAAAAAAAAAANEEAAAAAAAA0gQAAAAAAAAAAAAA0gQAAAAAAADTBAAAAAAAAAAAAADTBAAAAAAAANQEAAAAAAAAAAAAANQEAAAAAAAA1QQAAAAAAAAAAAAA1QQAAAAAAADWBAAAAAAAAAAAAADWBAAAAAAAANcEAAAAAAAAAAAAANcEAAAAAAAA2AQAAAAAAAAAAAAA2AQAAAAAAADZBAAAAAAAAAAAAADZBAAAAAAAANoEAAAAAAAAAAAAANoEAAAAAAAA2wQAAAAAAAAAAAAA2wQAAAAAAADcBAAAAAAAAAAAAADcBAAAAAAAAN0EAAAAAAAAAAAAAN0EAAAAAAAA3gQAAAAAAAAAAAAA3gQAAAAAAADfBAAAAAAAAAAAAADfBAAAAAAAAOAEAAAAAAAAAAAAAOAEAAAAAAAA4QQAAAAAAAAAAAAA4QQAAAAAAADiBAAAAAAAAAAAAADiBAAAAAAAAOMEAAAAAAAAAAAAAOMEAAAAAAAA5AQAAAAAAAAAAAAA5AQAAAAAAADlBAAAAAAAAAAAAADlBAAAAAAAAOYEAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALMEAAAAAAAAswQAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					280,
-					1,
-					"insert",
-					{
-						"characters": "                                                                  "
-					},
-					"QgAAAOYEAAAAAAAA5wQAAAAAAAAAAAAA5wQAAAAAAADoBAAAAAAAAAAAAADoBAAAAAAAAOkEAAAAAAAAAAAAAOkEAAAAAAAA6gQAAAAAAAAAAAAA6gQAAAAAAADrBAAAAAAAAAAAAADrBAAAAAAAAOwEAAAAAAAAAAAAAOwEAAAAAAAA7QQAAAAAAAAAAAAA7QQAAAAAAADuBAAAAAAAAAAAAADuBAAAAAAAAO8EAAAAAAAAAAAAAO8EAAAAAAAA8AQAAAAAAAAAAAAA8AQAAAAAAADxBAAAAAAAAAAAAADxBAAAAAAAAPIEAAAAAAAAAAAAAPIEAAAAAAAA8wQAAAAAAAAAAAAA8wQAAAAAAAD0BAAAAAAAAAAAAAD0BAAAAAAAAPUEAAAAAAAAAAAAAPUEAAAAAAAA9gQAAAAAAAAAAAAA9gQAAAAAAAD3BAAAAAAAAAAAAAD3BAAAAAAAAPgEAAAAAAAAAAAAAPgEAAAAAAAA+QQAAAAAAAAAAAAA+QQAAAAAAAD6BAAAAAAAAAAAAAD6BAAAAAAAAPsEAAAAAAAAAAAAAPsEAAAAAAAA/AQAAAAAAAAAAAAA/AQAAAAAAAD9BAAAAAAAAAAAAAD9BAAAAAAAAP4EAAAAAAAAAAAAAP4EAAAAAAAA/wQAAAAAAAAAAAAA/wQAAAAAAAAABQAAAAAAAAAAAAAABQAAAAAAAAEFAAAAAAAAAAAAAAEFAAAAAAAAAgUAAAAAAAAAAAAAAgUAAAAAAAADBQAAAAAAAAAAAAADBQAAAAAAAAQFAAAAAAAAAAAAAAQFAAAAAAAABQUAAAAAAAAAAAAABQUAAAAAAAAGBQAAAAAAAAAAAAAGBQAAAAAAAAcFAAAAAAAAAAAAAAcFAAAAAAAACAUAAAAAAAAAAAAACAUAAAAAAAAJBQAAAAAAAAAAAAAJBQAAAAAAAAoFAAAAAAAAAAAAAAoFAAAAAAAACwUAAAAAAAAAAAAACwUAAAAAAAAMBQAAAAAAAAAAAAAMBQAAAAAAAA0FAAAAAAAAAAAAAA0FAAAAAAAADgUAAAAAAAAAAAAADgUAAAAAAAAPBQAAAAAAAAAAAAAPBQAAAAAAABAFAAAAAAAAAAAAABAFAAAAAAAAEQUAAAAAAAAAAAAAEQUAAAAAAAASBQAAAAAAAAAAAAASBQAAAAAAABMFAAAAAAAAAAAAABMFAAAAAAAAFAUAAAAAAAAAAAAAFAUAAAAAAAAVBQAAAAAAAAAAAAAVBQAAAAAAABYFAAAAAAAAAAAAABYFAAAAAAAAFwUAAAAAAAAAAAAAFwUAAAAAAAAYBQAAAAAAAAAAAAAYBQAAAAAAABkFAAAAAAAAAAAAABkFAAAAAAAAGgUAAAAAAAAAAAAAGgUAAAAAAAAbBQAAAAAAAAAAAAAbBQAAAAAAABwFAAAAAAAAAAAAABwFAAAAAAAAHQUAAAAAAAAAAAAAHQUAAAAAAAAeBQAAAAAAAAAAAAAeBQAAAAAAAB8FAAAAAAAAAAAAAB8FAAAAAAAAIAUAAAAAAAAAAAAAIAUAAAAAAAAhBQAAAAAAAAAAAAAhBQAAAAAAACIFAAAAAAAAAAAAACIFAAAAAAAAIwUAAAAAAAAAAAAAIwUAAAAAAAAkBQAAAAAAAAAAAAAkBQAAAAAAACUFAAAAAAAAAAAAACUFAAAAAAAAJgUAAAAAAAAAAAAAJgUAAAAAAAAnBQAAAAAAAAAAAAAnBQAAAAAAACgFAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAOYEAAAAAAAA5gQAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					281,
-					1,
-					"insert",
-					{
-						"characters": "                                                                   "
-					},
-					"QwAAACgFAAAAAAAAKQUAAAAAAAAAAAAAKQUAAAAAAAAqBQAAAAAAAAAAAAAqBQAAAAAAACsFAAAAAAAAAAAAACsFAAAAAAAALAUAAAAAAAAAAAAALAUAAAAAAAAtBQAAAAAAAAAAAAAtBQAAAAAAAC4FAAAAAAAAAAAAAC4FAAAAAAAALwUAAAAAAAAAAAAALwUAAAAAAAAwBQAAAAAAAAAAAAAwBQAAAAAAADEFAAAAAAAAAAAAADEFAAAAAAAAMgUAAAAAAAAAAAAAMgUAAAAAAAAzBQAAAAAAAAAAAAAzBQAAAAAAADQFAAAAAAAAAAAAADQFAAAAAAAANQUAAAAAAAAAAAAANQUAAAAAAAA2BQAAAAAAAAAAAAA2BQAAAAAAADcFAAAAAAAAAAAAADcFAAAAAAAAOAUAAAAAAAAAAAAAOAUAAAAAAAA5BQAAAAAAAAAAAAA5BQAAAAAAADoFAAAAAAAAAAAAADoFAAAAAAAAOwUAAAAAAAAAAAAAOwUAAAAAAAA8BQAAAAAAAAAAAAA8BQAAAAAAAD0FAAAAAAAAAAAAAD0FAAAAAAAAPgUAAAAAAAAAAAAAPgUAAAAAAAA/BQAAAAAAAAAAAAA/BQAAAAAAAEAFAAAAAAAAAAAAAEAFAAAAAAAAQQUAAAAAAAAAAAAAQQUAAAAAAABCBQAAAAAAAAAAAABCBQAAAAAAAEMFAAAAAAAAAAAAAEMFAAAAAAAARAUAAAAAAAAAAAAARAUAAAAAAABFBQAAAAAAAAAAAABFBQAAAAAAAEYFAAAAAAAAAAAAAEYFAAAAAAAARwUAAAAAAAAAAAAARwUAAAAAAABIBQAAAAAAAAAAAABIBQAAAAAAAEkFAAAAAAAAAAAAAEkFAAAAAAAASgUAAAAAAAAAAAAASgUAAAAAAABLBQAAAAAAAAAAAABLBQAAAAAAAEwFAAAAAAAAAAAAAEwFAAAAAAAATQUAAAAAAAAAAAAATQUAAAAAAABOBQAAAAAAAAAAAABOBQAAAAAAAE8FAAAAAAAAAAAAAE8FAAAAAAAAUAUAAAAAAAAAAAAAUAUAAAAAAABRBQAAAAAAAAAAAABRBQAAAAAAAFIFAAAAAAAAAAAAAFIFAAAAAAAAUwUAAAAAAAAAAAAAUwUAAAAAAABUBQAAAAAAAAAAAABUBQAAAAAAAFUFAAAAAAAAAAAAAFUFAAAAAAAAVgUAAAAAAAAAAAAAVgUAAAAAAABXBQAAAAAAAAAAAABXBQAAAAAAAFgFAAAAAAAAAAAAAFgFAAAAAAAAWQUAAAAAAAAAAAAAWQUAAAAAAABaBQAAAAAAAAAAAABaBQAAAAAAAFsFAAAAAAAAAAAAAFsFAAAAAAAAXAUAAAAAAAAAAAAAXAUAAAAAAABdBQAAAAAAAAAAAABdBQAAAAAAAF4FAAAAAAAAAAAAAF4FAAAAAAAAXwUAAAAAAAAAAAAAXwUAAAAAAABgBQAAAAAAAAAAAABgBQAAAAAAAGEFAAAAAAAAAAAAAGEFAAAAAAAAYgUAAAAAAAAAAAAAYgUAAAAAAABjBQAAAAAAAAAAAABjBQAAAAAAAGQFAAAAAAAAAAAAAGQFAAAAAAAAZQUAAAAAAAAAAAAAZQUAAAAAAABmBQAAAAAAAAAAAABmBQAAAAAAAGcFAAAAAAAAAAAAAGcFAAAAAAAAaAUAAAAAAAAAAAAAaAUAAAAAAABpBQAAAAAAAAAAAABpBQAAAAAAAGoFAAAAAAAAAAAAAGoFAAAAAAAAawUAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACgFAAAAAAAAKAUAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					282,
-					1,
-					"insert",
-					{
-						"characters": "                                                                  "
-					},
-					"QgAAAGsFAAAAAAAAbAUAAAAAAAAAAAAAbAUAAAAAAABtBQAAAAAAAAAAAABtBQAAAAAAAG4FAAAAAAAAAAAAAG4FAAAAAAAAbwUAAAAAAAAAAAAAbwUAAAAAAABwBQAAAAAAAAAAAABwBQAAAAAAAHEFAAAAAAAAAAAAAHEFAAAAAAAAcgUAAAAAAAAAAAAAcgUAAAAAAABzBQAAAAAAAAAAAABzBQAAAAAAAHQFAAAAAAAAAAAAAHQFAAAAAAAAdQUAAAAAAAAAAAAAdQUAAAAAAAB2BQAAAAAAAAAAAAB2BQAAAAAAAHcFAAAAAAAAAAAAAHcFAAAAAAAAeAUAAAAAAAAAAAAAeAUAAAAAAAB5BQAAAAAAAAAAAAB5BQAAAAAAAHoFAAAAAAAAAAAAAHoFAAAAAAAAewUAAAAAAAAAAAAAewUAAAAAAAB8BQAAAAAAAAAAAAB8BQAAAAAAAH0FAAAAAAAAAAAAAH0FAAAAAAAAfgUAAAAAAAAAAAAAfgUAAAAAAAB/BQAAAAAAAAAAAAB/BQAAAAAAAIAFAAAAAAAAAAAAAIAFAAAAAAAAgQUAAAAAAAAAAAAAgQUAAAAAAACCBQAAAAAAAAAAAACCBQAAAAAAAIMFAAAAAAAAAAAAAIMFAAAAAAAAhAUAAAAAAAAAAAAAhAUAAAAAAACFBQAAAAAAAAAAAACFBQAAAAAAAIYFAAAAAAAAAAAAAIYFAAAAAAAAhwUAAAAAAAAAAAAAhwUAAAAAAACIBQAAAAAAAAAAAACIBQAAAAAAAIkFAAAAAAAAAAAAAIkFAAAAAAAAigUAAAAAAAAAAAAAigUAAAAAAACLBQAAAAAAAAAAAACLBQAAAAAAAIwFAAAAAAAAAAAAAIwFAAAAAAAAjQUAAAAAAAAAAAAAjQUAAAAAAACOBQAAAAAAAAAAAACOBQAAAAAAAI8FAAAAAAAAAAAAAI8FAAAAAAAAkAUAAAAAAAAAAAAAkAUAAAAAAACRBQAAAAAAAAAAAACRBQAAAAAAAJIFAAAAAAAAAAAAAJIFAAAAAAAAkwUAAAAAAAAAAAAAkwUAAAAAAACUBQAAAAAAAAAAAACUBQAAAAAAAJUFAAAAAAAAAAAAAJUFAAAAAAAAlgUAAAAAAAAAAAAAlgUAAAAAAACXBQAAAAAAAAAAAACXBQAAAAAAAJgFAAAAAAAAAAAAAJgFAAAAAAAAmQUAAAAAAAAAAAAAmQUAAAAAAACaBQAAAAAAAAAAAACaBQAAAAAAAJsFAAAAAAAAAAAAAJsFAAAAAAAAnAUAAAAAAAAAAAAAnAUAAAAAAACdBQAAAAAAAAAAAACdBQAAAAAAAJ4FAAAAAAAAAAAAAJ4FAAAAAAAAnwUAAAAAAAAAAAAAnwUAAAAAAACgBQAAAAAAAAAAAACgBQAAAAAAAKEFAAAAAAAAAAAAAKEFAAAAAAAAogUAAAAAAAAAAAAAogUAAAAAAACjBQAAAAAAAAAAAACjBQAAAAAAAKQFAAAAAAAAAAAAAKQFAAAAAAAApQUAAAAAAAAAAAAApQUAAAAAAACmBQAAAAAAAAAAAACmBQAAAAAAAKcFAAAAAAAAAAAAAKcFAAAAAAAAqAUAAAAAAAAAAAAAqAUAAAAAAACpBQAAAAAAAAAAAACpBQAAAAAAAKoFAAAAAAAAAAAAAKoFAAAAAAAAqwUAAAAAAAAAAAAAqwUAAAAAAACsBQAAAAAAAAAAAACsBQAAAAAAAK0FAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGsFAAAAAAAAawUAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					290,
-					1,
-					"right_delete",
-					null,
-					"AQAAABoCAAAAAAAAGgIAAAAAAACTAwAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAK0FAAAAAAAAGgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					297,
-					1,
-					"insert",
-					{
-						"characters": " -C"
-					},
-					"AwAAAJQBAAAAAAAAlQEAAAAAAAAAAAAAlQEAAAAAAACWAQAAAAAAAAAAAACWAQAAAAAAAJcBAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJQBAAAAAAAAlAEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					298,
-					1,
-					"insert",
-					{
-						"characters": "Qt/"
-					},
-					"AwAAAJcBAAAAAAAAmAEAAAAAAAAAAAAAmAEAAAAAAACZAQAAAAAAAAAAAACZAQAAAAAAAJoBAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJcBAAAAAAAAlwEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					299,
-					1,
-					"insert",
-					{
-						"characters": "Make"
-					},
-					"BAAAAJoBAAAAAAAAmwEAAAAAAAAAAAAAmwEAAAAAAACcAQAAAAAAAAAAAACcAQAAAAAAAJ0BAAAAAAAAAAAAAJ0BAAAAAAAAngEAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJoBAAAAAAAAmgEAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					305,
-					1,
-					"insert",
-					{
-						"characters": "-C"
-					},
-					"AgAAALICAAAAAAAAswIAAAAAAAAAAAAAswIAAAAAAAC0AgAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALICAAAAAAAAsgIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					306,
-					1,
-					"insert",
-					{
-						"characters": "Console/Mak"
-					},
-					"CwAAALQCAAAAAAAAtQIAAAAAAAAAAAAAtQIAAAAAAAC2AgAAAAAAAAAAAAC2AgAAAAAAALcCAAAAAAAAAAAAALcCAAAAAAAAuAIAAAAAAAAAAAAAuAIAAAAAAAC5AgAAAAAAAAAAAAC5AgAAAAAAALoCAAAAAAAAAAAAALoCAAAAAAAAuwIAAAAAAAAAAAAAuwIAAAAAAAC8AgAAAAAAAAAAAAC8AgAAAAAAAL0CAAAAAAAAAAAAAL0CAAAAAAAAvgIAAAAAAAAAAAAAvgIAAAAAAAC/AgAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALQCAAAAAAAAtAIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					307,
-					1,
-					"insert",
-					{
-						"characters": "e"
-					},
-					"AQAAAL8CAAAAAAAAwAIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAL8CAAAAAAAAvwIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					308,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAMACAAAAAAAAwQIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMACAAAAAAAAwAIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					314,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAAB4CAAAAAAAAQAIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAB0CAAAAAAAAHQIAAAAAAAD////////vfw"
-				],
-				[
-					315,
-					6,
-					"swap_line_up",
-					null,
-					"DAAAAB4CAAAAAAAAHgIAAAAAAAAiAAAACQkJCQkic2hlbGxfY21kIjogImVjaG8gJGZvbGRlciIsCvwBAAAAAAAAHgIAAAAAAAAAAAAA/AEAAAAAAAD8AQAAAAAAACIAAAAJCQkJCSJzaGVsbF9jbWQiOiAiZWNobyAkZm9sZGVyIiwK1QEAAAAAAAD3AQAAAAAAAAAAAADVAQAAAAAAANUBAAAAAAAAIgAAAAkJCQkJInNoZWxsX2NtZCI6ICJlY2hvICRmb2xkZXIiLAq/AQAAAAAAAOEBAAAAAAAAAAAAAL8BAAAAAAAAvwEAAAAAAAAiAAAACQkJCQkic2hlbGxfY21kIjogImVjaG8gJGZvbGRlciIsCrkBAAAAAAAA2wEAAAAAAAAAAAAAuQEAAAAAAAC5AQAAAAAAACIAAAAJCQkJCSJzaGVsbF9jbWQiOiAiZWNobyAkZm9sZGVyIiwKtAEAAAAAAADWAQAAAAAAAAAAAAC0AQAAAAAAALQBAAAAAAAAIgAAAAkJCQkJInNoZWxsX2NtZCI6ICJlY2hvICRmb2xkZXIiLAqlAQAAAAAAAMcBAAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAD8CAAAAAAAAPwIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					317,
-					2,
-					"unindent",
-					null,
-					"AgAAAKUBAAAAAAAApQEAAAAAAAABAAAACaUBAAAAAAAApQEAAAAAAAABAAAACQ",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAKoBAAAAAAAAqgEAAAAAAAAAAAAAAEBgQA"
-				],
-				[
-					319,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAIIBAAAAAAAAhQEAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIIBAAAAAAAAggEAAAAAAAAAAAAAAIBTQA"
-				],
-				[
-					326,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAADwDAAAAAAAAXgMAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAB4DAAAAAAAAHgMAAAAAAAAAAAAAAEBdQA"
-				],
-				[
-					327,
-					5,
-					"swap_line_up",
-					null,
-					"CgAAADwDAAAAAAAAPAMAAAAAAAAiAAAACQkJCQkic2hlbGxfY21kIjogImVjaG8gJGZvbGRlciIsChoDAAAAAAAAPAMAAAAAAAAAAAAAGgMAAAAAAAAaAwAAAAAAACIAAAAJCQkJCSJzaGVsbF9jbWQiOiAiZWNobyAkZm9sZGVyIiwKBAMAAAAAAAAmAwAAAAAAAAAAAAAEAwAAAAAAAAQDAAAAAAAAIgAAAAkJCQkJInNoZWxsX2NtZCI6ICJlY2hvICRmb2xkZXIiLAr+AgAAAAAAACADAAAAAAAAAAAAAP4CAAAAAAAA/gIAAAAAAAAiAAAACQkJCQkic2hlbGxfY21kIjogImVjaG8gJGZvbGRlciIsCvkCAAAAAAAAGwMAAAAAAAAAAAAA+QIAAAAAAAD5AgAAAAAAACIAAAAJCQkJCSJzaGVsbF9jbWQiOiAiZWNobyAkZm9sZGVyIiwK6gIAAAAAAAAMAwAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEADAAAAAAAAQAMAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					328,
-					2,
-					"unindent",
-					null,
-					"AgAAAOoCAAAAAAAA6gIAAAAAAAABAAAACeoCAAAAAAAA6gIAAAAAAAABAAAACQ",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAO4CAAAAAAAA7gIAAAAAAAAAAAAAAADwvw"
-				],
-				[
-					330,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAMICAAAAAAAAxQIAAAAAAAAAAAAA",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMECAAAAAAAAwQIAAAAAAAAAAAAAAABKQA"
-				],
-				[
-					5,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAALYBAAAAAAAAtwEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC2AQAAAAAAALYBAAAAAAAAAAAAAACga0A"
-				],
-				[
-					11,
-					1,
-					"insert",
-					{
-						"characters": "prject"
-					},
-					"BwAAAGMCAAAAAAAAZAIAAAAAAAAAAAAAZAIAAAAAAABkAgAAAAAAAAYAAABmb2xkZXJkAgAAAAAAAGUCAAAAAAAAAAAAAGUCAAAAAAAAZgIAAAAAAAAAAAAAZgIAAAAAAABnAgAAAAAAAAAAAABnAgAAAAAAAGgCAAAAAAAAAAAAAGgCAAAAAAAAaQIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABpAgAAAAAAAGMCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					13,
-					1,
-					"insert",
-					{
-						"characters": "o"
-					},
-					"AQAAAGUCAAAAAAAAZgIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABlAgAAAAAAAGUCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					15,
-					1,
-					"insert",
-					{
-						"characters": "_path"
-					},
-					"BQAAAGoCAAAAAAAAawIAAAAAAAAAAAAAawIAAAAAAABsAgAAAAAAAAAAAABsAgAAAAAAAG0CAAAAAAAAAAAAAG0CAAAAAAAAbgIAAAAAAAAAAAAAbgIAAAAAAABvAgAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABqAgAAAAAAAGoCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					31,
-					1,
-					"paste",
-					null,
-					"AgAAADkCAAAAAAAARQIAAAAAAAAAAAAARQIAAAAAAABFAgAAAAAAAAYAAABmb2xkZXI",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA5AgAAAAAAAD8CAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					34,
-					5,
-					"left_delete",
-					null,
-					"BQAAAEQCAAAAAAAARAIAAAAAAAABAAAAaEMCAAAAAAAAQwIAAAAAAAABAAAAdEICAAAAAAAAQgIAAAAAAAABAAAAYUECAAAAAAAAQQIAAAAAAAABAAAAcEACAAAAAAAAQAIAAAAAAAABAAAAXw",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABFAgAAAAAAAEUCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					37,
-					1,
-					"insert",
-					{
-						"characters": "_path"
-					},
-					"BQAAAEACAAAAAAAAQQIAAAAAAAAAAAAAQQIAAAAAAABCAgAAAAAAAAAAAABCAgAAAAAAAEMCAAAAAAAAAAAAAEMCAAAAAAAARAIAAAAAAAAAAAAARAIAAAAAAABFAgAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABAAgAAAAAAAEACAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					40,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAP4BAAAAAAAA/gEAAAAAAAADAAAALy8g",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAASAgAAAAAAABICAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					42,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAACICAAAAAAAAJQIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAzAgAAAAAAADMCAAAAAAAAAAAAAADwdUA"
-				],
-				[
-					49,
-					1,
-					"insert",
-					{
-						"characters": "/Qt/"
-					},
-					"BAAAAHUCAAAAAAAAdgIAAAAAAAAAAAAAdgIAAAAAAAB3AgAAAAAAAAAAAAB3AgAAAAAAAHgCAAAAAAAAAAAAAHgCAAAAAAAAeQIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB1AgAAAAAAAHUCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					50,
-					1,
-					"insert",
-					{
-						"characters": "Build"
-					},
-					"BQAAAHkCAAAAAAAAegIAAAAAAAAAAAAAegIAAAAAAAB7AgAAAAAAAAAAAAB7AgAAAAAAAHwCAAAAAAAAAAAAAHwCAAAAAAAAfQIAAAAAAAAAAAAAfQIAAAAAAAB+AgAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB5AgAAAAAAAHkCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					52,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAP4BAAAAAAAAAQIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAcAgAAAAAAABwCAAAAAAAAAAAAAADggUA"
-				],
-				[
-					54,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAACUCAAAAAAAAJQIAAAAAAAADAAAALy8g",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABGAgAAAAAAAEYCAAAAAAAAAAAAAAB4gUA"
-				],
-				[
-					57,
-					1,
-					"insert",
-					{
-						"characters": "workin"
-					},
-					"BwAAADkCAAAAAAAAOgIAAAAAAAAAAAAAOgIAAAAAAAA6AgAAAAAAAAwAAABwcm9qZWN0X3BhdGg6AgAAAAAAADsCAAAAAAAAAAAAADsCAAAAAAAAPAIAAAAAAAAAAAAAPAIAAAAAAAA9AgAAAAAAAAAAAAA9AgAAAAAAAD4CAAAAAAAAAAAAAD4CAAAAAAAAPwIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABFAgAAAAAAADkCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					58,
-					1,
-					"insert_completion",
-					{
-						"completion": "working_dir",
-						"format": "text",
-						"keep_prefix": false,
-						"must_insert": false,
-						"trigger": "working_dir"
-					},
-					"AgAAADkCAAAAAAAAOQIAAAAAAAAGAAAAd29ya2luOQIAAAAAAABEAgAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA/AgAAAAAAAD8CAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					63,
-					8,
-					"swap_line_up",
-					null,
-					"EAAAAFQCAAAAAAAAVAIAAAAAAAAsAAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvUXQvQnVpbGQiLApOAgAAAAAAAHoCAAAAAAAAAAAAAE4CAAAAAAAATgIAAAAAAAAsAAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvUXQvQnVpbGQiLApHAgAAAAAAAHMCAAAAAAAAAAAAAEcCAAAAAAAARwIAAAAAAAAsAAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvUXQvQnVpbGQiLAogAgAAAAAAAEwCAAAAAAAAAAAAACACAAAAAAAAIAIAAAAAAAAsAAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvUXQvQnVpbGQiLAr5AQAAAAAAACUCAAAAAAAAAAAAAPkBAAAAAAAA+QEAAAAAAAAsAAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvUXQvQnVpbGQiLArjAQAAAAAAAA8CAAAAAAAAAAAAAOMBAAAAAAAA4wEAAAAAAAAsAAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvUXQvQnVpbGQiLArdAQAAAAAAAAkCAAAAAAAAAAAAAN0BAAAAAAAA3QEAAAAAAAAsAAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvUXQvQnVpbGQiLArYAQAAAAAAAAQCAAAAAAAAAAAAANgBAAAAAAAA2AEAAAAAAAAsAAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvUXQvQnVpbGQiLArJAQAAAAAAAPUBAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB6AgAAAAAAAHoCAAAAAAAAAAAAAACogEA"
-				],
-				[
-					68,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAIMCAAAAAAAAgwIAAAAAAAADAAAALy8g",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACkAgAAAAAAAKQCAAAAAAAAAAAAAACwf0A"
-				],
-				[
-					72,
-					1,
-					"left_delete",
-					null,
-					"AQAAAIACAAAAAAAAgAIAAAAAAAAlAAAACQkJIndvcmtpbmdfZGlyIjogIiRmb2xkZXIvUXQvQnVpbGQiLA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAClAgAAAAAAAIACAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					78,
-					11,
-					"left_delete",
-					null,
-					"CwAAAG8CAAAAAAAAbwIAAAAAAAABAAAAcm4CAAAAAAAAbgIAAAAAAAABAAAAaW0CAAAAAAAAbQIAAAAAAAABAAAAZGwCAAAAAAAAbAIAAAAAAAABAAAAX2sCAAAAAAAAawIAAAAAAAABAAAAZ2oCAAAAAAAAagIAAAAAAAABAAAAbmkCAAAAAAAAaQIAAAAAAAABAAAAaWgCAAAAAAAAaAIAAAAAAAABAAAAa2cCAAAAAAAAZwIAAAAAAAABAAAAcmYCAAAAAAAAZgIAAAAAAAABAAAAb2UCAAAAAAAAZQIAAAAAAAABAAAAdw",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABwAgAAAAAAAHACAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					79,
-					1,
-					"insert",
-					{
-						"characters": "pwd"
-					},
-					"AwAAAGUCAAAAAAAAZgIAAAAAAAAAAAAAZgIAAAAAAABnAgAAAAAAAAAAAABnAgAAAAAAAGgCAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABlAgAAAAAAAGUCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					86,
-					6,
-					"left_delete",
-					null,
-					"BgAAAGQCAAAAAAAAZAIAAAAAAAABAAAAJGMCAAAAAAAAYwIAAAAAAAABAAAAIGICAAAAAAAAYgIAAAAAAAABAAAAb2ECAAAAAAAAYQIAAAAAAAABAAAAaGACAAAAAAAAYAIAAAAAAAABAAAAY18CAAAAAAAAXwIAAAAAAAABAAAAZQ",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABlAgAAAAAAAGUCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					92,
-					1,
-					"insert",
-					{
-						"characters": "/Make"
-					},
-					"BQAAAPIBAAAAAAAA8wEAAAAAAAAAAAAA8wEAAAAAAAD0AQAAAAAAAAAAAAD0AQAAAAAAAPUBAAAAAAAAAAAAAPUBAAAAAAAA9gEAAAAAAAAAAAAA9gEAAAAAAAD3AQAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADyAQAAAAAAAPIBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					97,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAIIBAAAAAAAAggEAAAAAAAADAAAALy8g",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACnAQAAAAAAAKcBAAAAAAAA////////738"
-				],
-				[
-					100,
-					2,
-					"right_delete",
-					null,
-					"AgAAAKUBAAAAAAAApQEAAAAAAAAgAAAACQkJInNoZWxsX2NtZCIgOiAiZWNobyAkZm9sZGVyIiylAQAAAAAAAKUBAAAAAAAAAQAAAAo",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADFAQAAAAAAAKUBAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					108,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAAKUBAAAAAAAAywEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACeAQAAAAAAAJ4BAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					110,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAIIBAAAAAAAAhQEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACeAQAAAAAAAJ4BAAAAAAAAAAAAAACge0A"
-				],
-				[
-					115,
-					3,
-					"left_delete",
-					null,
-					"AwAAAL8BAAAAAAAAvwEAAAAAAAAJAAAAQ1F0L01ha2UgvgEAAAAAAAC+AQAAAAAAAAEAAAAtvQEAAAAAAAC9AQAAAAAAAAEAAAAg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADIAQAAAAAAAL8BAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					116,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAL0BAAAAAAAAvgEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC9AQAAAAAAAL0BAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					120,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAACoCAAAAAAAAKgIAAAAAAAADAAAALy8g",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABLAgAAAAAAAEsCAAAAAAAA////////738"
-				],
-				[
-					123,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAACoCAAAAAAAALQIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABIAgAAAAAAAEgCAAAAAAAAAAAAAABAgEA"
-				],
-				[
-					131,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAOsCAAAAAAAA7AIAAAAAAAAAAAAA7AIAAAAAAADvAgAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADrAgAAAAAAAOsCAAAAAAAA////////738"
-				],
-				[
-					132,
-					1,
-					"paste",
-					null,
-					"AQAAAO8CAAAAAAAAHAMAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADvAgAAAAAAAO8CAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					140,
-					1,
-					"left_delete",
-					null,
-					"AQAAAKYDAAAAAAAApgMAAAAAAAAZAAAAIndvcmtpbmdfZGlyIjogIiRmb2xkZXIiLA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACmAwAAAAAAAL8DAAAAAAAA////////738"
-				],
-				[
-					142,
-					2,
-					"left_delete",
-					null,
-					"AgAAAKMDAAAAAAAAowMAAAAAAAADAAAACQkJogMAAAAAAACiAwAAAAAAAAEAAAAK",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACmAwAAAAAAAKMDAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					144,
-					1,
-					"left_delete",
-					null,
-					"AQAAAAIEAAAAAAAAAgQAAAAAAAABAAAACg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAADBAAAAAAAAAMEAAAAAAAAAAAAAAAAWkA"
-				],
-				[
-					152,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAOsCAAAAAAAA7AIAAAAAAAAAAAAA7AIAAAAAAADvAgAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADrAgAAAAAAAOsCAAAAAAAA////////738"
-				],
-				[
-					153,
-					1,
-					"paste",
-					null,
-					"AQAAAO8CAAAAAAAAHAMAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADvAgAAAAAAAO8CAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					155,
-					2,
-					"left_delete",
-					null,
-					"AgAAAOwCAAAAAAAA7AIAAAAAAAAwAAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvUXQvQnVpbGQvTWFrZSIs6wIAAAAAAADrAgAAAAAAAAEAAAAK",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAcAwAAAAAAAOwCAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					159,
-					2,
-					"right_delete",
-					null,
-					"AgAAAA0DAAAAAAAADQMAAAAAAAABAAAAUQ0DAAAAAAAADQMAAAAAAAABAAAAdA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAANAwAAAAAAAA0DAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					160,
-					1,
-					"insert",
-					{
-						"characters": "Console"
-					},
-					"BwAAAA0DAAAAAAAADgMAAAAAAAAAAAAADgMAAAAAAAAPAwAAAAAAAAAAAAAPAwAAAAAAABADAAAAAAAAAAAAABADAAAAAAAAEQMAAAAAAAAAAAAAEQMAAAAAAAASAwAAAAAAAAAAAAASAwAAAAAAABMDAAAAAAAAAAAAABMDAAAAAAAAFAMAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAANAwAAAAAAAA0DAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					170,
-					1,
-					"paste",
-					null,
-					"AgAAAFcDAAAAAAAAagMAAAAAAAAAAAAAagMAAAAAAABqAwAAAAAAABwAAAAic2hlbGxfY21kIjogImVjaG8gJGZvbGRlciIs",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABXAwAAAAAAAHMDAAAAAAAA////////738"
-				],
-				[
-					177,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAFcDAAAAAAAAWgMAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABqAwAAAAAAAGoDAAAAAAAAAAAAAACQd0A"
-				],
-				[
-					179,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAHMDAAAAAAAAcwMAAAAAAAADAAAALy8g",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACJAwAAAAAAAIkDAAAAAAAAAAAAAAAAekA"
-				],
-				[
-					183,
-					2,
-					"left_delete",
-					null,
-					"AgAAAMwCAAAAAAAAzAIAAAAAAAAfAAAACQkJInNoZWxsX2NtZCI6ICJlY2hvICRmb2xkZXIiLMsCAAAAAAAAywIAAAAAAAABAAAACg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADrAgAAAAAAAMwCAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					184,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAKECAAAAAAAAoQIAAAAAAAADAAAALy8g",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADLAgAAAAAAAMsCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					187,
-					2,
-					"right_delete",
-					null,
-					"AgAAALQCAAAAAAAAtAIAAAAAAAAOAAAALUNDb25zb2xlL01ha2W0AgAAAAAAALQCAAAAAAAAAQAAACA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADCAgAAAAAAALQCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					189,
-					1,
-					"cut",
-					null,
-					"AQAAAG0DAAAAAAAAbQMAAAAAAABgAAAACQkJLy8gIndvcmtpbmdfZGlyIjogIi9ob21lL20vdmltYmFfNV8xL1ZpbWJhQ1BQL0V4YW1wbGVzL0FzeW5jaHJvbm91c0dyYWIvQ29uc29sZS9CdWlsZC9NYWtlIiwK",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACDAwAAAAAAAIMDAAAAAAAAAAAAAABQdEA"
-				],
-				[
-					194,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAACoCAAAAAAAAKgIAAAAAAAADAAAALy8g",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAlAgAAAAAAACUCAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					196,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAE4CAAAAAAAAUQIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABJAgAAAAAAAEkCAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					207,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAABMAAAAAAAAAFgAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAUAAAAAAAAABQAAAAAAAAAAAAAAACogEA"
-				],
-				[
-					209,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAFIAAAAAAAAAVQAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABUAAAAAAAAAFQAAAAAAAAAAAAAAAAAWkA"
-				],
-				[
-					211,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAKUAAAAAAAAAqAAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACnAAAAAAAAAKcAAAAAAAAAAAAAAADgYUA"
-				],
-				[
-					221,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AwAAAAwBAAAAAAAADQEAAAAAAAAAAAAADQEAAAAAAAAPAQAAAAAAAAAAAAAPAQAAAAAAABABAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAMAQAAAAAAAAwBAAAAAAAAAAAAAADgcUA"
-				],
-				[
-					222,
-					1,
-					"paste",
-					null,
-					"AQAAABABAAAAAAAAHQEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAQAQAAAAAAABABAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					224,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAAFoBAAAAAAAAlgEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAuAQAAAAAAAC4BAAAAAAAAAAAAAADgbkA"
-				],
-				[
-					225,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAF0BAAAAAAAAYAEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABqAQAAAAAAAGoBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					230,
-					1,
-					"cut",
-					null,
-					"AQAAABABAAAAAAAAEAEAAAAAAAANAAAAJHByb2plY3RfcGF0aA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAQAQAAAAAAAB0BAAAAAAAA////////738"
-				],
-				[
-					234,
-					1,
-					"paste",
-					null,
-					"AQAAAB0BAAAAAAAAKgEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAdAQAAAAAAAB0BAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					235,
-					5,
-					"right_delete",
-					null,
-					"BgAAACoBAAAAAAAAKgEAAAAAAAABAAAALw0BAAAAAAAADQEAAAAAAAADAAAACQkJJwEAAAAAAAAnAQAAAAAAAAEAAABoJwEAAAAAAAAnAQAAAAAAAAEAAABvJwEAAAAAAAAnAQAAAAAAAAEAAABtJwEAAAAAAAAnAQAAAAAAAAEAAABl",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAqAQAAAAAAACoBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					241,
-					1,
-					"insert",
-					{
-						"characters": "../.."
-					},
-					"BQAAACgBAAAAAAAAKQEAAAAAAAAAAAAAKQEAAAAAAAAqAQAAAAAAAAAAAAAqAQAAAAAAACsBAAAAAAAAAAAAACsBAAAAAAAALAEAAAAAAAAAAAAALAEAAAAAAAAtAQAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAoAQAAAAAAACgBAAAAAAAAAAAAAACQd0A"
-				],
-				[
-					243,
-					1,
-					"right_delete",
-					null,
-					"AQAAAC0BAAAAAAAALQEAAAAAAAALAAAAbS92aW1iYV81XzE",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAtAQAAAAAAADgBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					247,
-					1,
-					"insert",
-					{
-						"characters": "Vimba"
-					},
-					"BgAAADIBAAAAAAAAMwEAAAAAAAAAAAAAMwEAAAAAAAAzAQAAAAAAAAkAAABwcm9qLWJhc2UzAQAAAAAAADQBAAAAAAAAAAAAADQBAAAAAAAANQEAAAAAAAAAAAAANQEAAAAAAAA2AQAAAAAAAAAAAAA2AQAAAAAAADcBAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAyAQAAAAAAADsBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					248,
-					1,
-					"insert",
-					{
-						"characters": " CPP"
-					},
-					"BAAAADcBAAAAAAAAOAEAAAAAAAAAAAAAOAEAAAAAAAA5AQAAAAAAAAAAAAA5AQAAAAAAADoBAAAAAAAAAAAAADoBAAAAAAAAOwEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA3AQAAAAAAADcBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					254,
-					1,
-					"left_delete",
-					null,
-					"AQAAAAwBAAAAAAAADAEAAAAAAAABAAAACg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAANAQAAAAAAAA0BAAAAAAAA////////738"
-				],
-				[
-					262,
-					1,
-					"insert",
-					{
-						"characters": "/.."
-					},
-					"AwAAACwBAAAAAAAALQEAAAAAAAAAAAAALQEAAAAAAAAuAQAAAAAAAAAAAAAuAQAAAAAAAC8BAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAsAQAAAAAAACwBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					270,
-					2,
-					"left_delete",
-					null,
-					"AgAAAE4BAAAAAAAATgEAAAAAAAA+AAAACQkJLy8gInBhdGgiOiAiL2hvbWUvbS92aW1iYV81XzEiLCAvL3Byb2otYmFzZSwgc2VlIGluIHNpZGViYXJNAQAAAAAAAE0BAAAAAAAAAQAAAAo",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACMAQAAAAAAAE4BAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					275,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AwAAAAYBAAAAAAAACQEAAAAAAAAAAAAAsQAAAAAAAAC0AAAAAAAAAAAAAACtAAAAAAAAALAAAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACtAAAAAAAAAAgBAAAAAAAA////////738"
-				],
-				[
-					278,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AwAAAAwBAAAAAAAADAEAAAAAAAADAAAALy8gtAAAAAAAAAC0AAAAAAAAAAMAAAAvLyCtAAAAAAAAAK0AAAAAAAAAAwAAAC8vIA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACwAAAAAAAAABEBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					287,
-					1,
-					"paste",
-					null,
-					"AQAAALsAAAAAAAAAyAAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC7AAAAAAAAALsAAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					290,
-					1,
-					"right_delete",
-					null,
-					"AQAAAMgAAAAAAAAAyAAAAAAAAAA0AAAAL2hvbWUvbS92aW1iYV81XzEvVmltYmFDUFAvRXhhbXBsZXMvQXN5bmNocm9ub3VzR3JhYg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADIAAAAAAAAAPwAAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					299,
-					1,
-					"insert",
-					{
-						"characters": "/"
-					},
-					"AQAAAMgAAAAAAAAAyQAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADIAAAAAAAAAMgAAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					302,
-					1,
-					"insert",
-					{
-						"characters": ".."
-					},
-					"AgAAAMkAAAAAAAAAygAAAAAAAAAAAAAAygAAAAAAAADLAAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADJAAAAAAAAAMkAAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					309,
-					2,
-					"left_delete",
-					null,
-					"AgAAABEAAAAAAAAAEQAAAAAAAACZAAAACQkvLyB7CgkJCS8vIG5lZWRzIHRvIGJlIGZpcnN0IGZvciAnbWFrZScgYnVpbGRzeXN0ZW0gdG8gd29yawoJCQkvLyAicGF0aCI6ICIvaG9tZS9tL3ZpbWJhXzVfMS9WaW1iYUNQUC9FeGFtcGxlcy9Bc3luY2hyb25vdXNHcmFiL1F0L0J1aWxkL01ha2UiLAoJCS8vIH0sEAAAAAAAAAAQAAAAAAAAAAEAAAAK",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACqAAAAAAAAABEAAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					317,
-					5,
-					"left_delete",
-					null,
-					"BQAAAMsAAAAAAAAAywAAAAAAAAABAAAAKcoAAAAAAAAAygAAAAAAAAABAAAAdMkAAAAAAAAAyQAAAAAAAAABAAAAUcgAAAAAAAAAyAAAAAAAAAABAAAAKMcAAAAAAAAAxwAAAAAAAAABAAAAIA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADMAAAAAAAAAMwAAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					325,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AwAAAFMBAAAAAAAAVAEAAAAAAAAAAAAAVAEAAAAAAABXAQAAAAAAAAAAAABXAQAAAAAAAFgBAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABTAQAAAAAAAFMBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					326,
-					1,
-					"paste",
-					null,
-					"AQAAAFgBAAAAAAAAtgEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABYAQAAAAAAAFgBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					331,
-					1,
-					"insert",
-					{
-						"characters": "Qt"
-					},
-					"AwAAAGgBAAAAAAAAaQEAAAAAAAAAAAAAaQEAAAAAAABpAQAAAAAAAAUAAABjbGVhbmkBAAAAAAAAagEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABtAQAAAAAAAGgBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					332,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAGoBAAAAAAAAawEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABqAQAAAAAAAGoBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					333,
-					1,
-					"left_delete",
-					null,
-					"AQAAAGoBAAAAAAAAagEAAAAAAAABAAAAIA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABrAQAAAAAAAGsBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					337,
-					1,
-					"insert",
-					{
-						"characters": "Qt"
-					},
-					"AgAAAMgBAAAAAAAAyQEAAAAAAAAAAAAAyQEAAAAAAADKAQAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADIAQAAAAAAAMgBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					338,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAMoBAAAAAAAAywEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADKAQAAAAAAAMoBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					339,
-					1,
-					"insert",
-					{
-						"characters": "("
-					},
-					"AQAAAMsBAAAAAAAAzAEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADLAQAAAAAAAMsBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					341,
-					1,
-					"insert",
-					{
-						"characters": ")"
-					},
-					"AQAAANEBAAAAAAAA0gEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADRAQAAAAAAANEBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					343,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAAEABAAAAAAAAcQEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAApAQAAAAAAACkBAAAAAAAAAAAAAACQd0A"
-				],
-				[
-					344,
-					5,
-					"swap_line_down",
-					null,
-					"CgAAAIABAAAAAAAAsQEAAAAAAAAAAAAAQAEAAAAAAABAAQAAAAAAADEAAAAJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9RdC9CdWlsZC9NYWtlIiwKhQEAAAAAAAC2AQAAAAAAAAAAAABPAQAAAAAAAE8BAAAAAAAAMQAAAAkJCSJ3b3JraW5nX2RpciI6ICIkcHJvamVjdF9wYXRoL1F0L0J1aWxkL01ha2UiLAqLAQAAAAAAALwBAAAAAAAAAAAAAFQBAAAAAAAAVAEAAAAAAAAxAAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvUXQvQnVpbGQvTWFrZSIsCp4BAAAAAAAAzwEAAAAAAAAAAAAAWgEAAAAAAABaAQAAAAAAADEAAAAJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9RdC9CdWlsZC9NYWtlIiwKwgEAAAAAAADzAQAAAAAAAAAAAABtAQAAAAAAAG0BAAAAAAAAMQAAAAkJCSJ3b3JraW5nX2RpciI6ICIkcHJvamVjdF9wYXRoL1F0L0J1aWxkL01ha2UiLAo",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABaAQAAAAAAAFoBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					346,
-					1,
-					"insert",
-					{
-						"characters": "\t\t"
-					},
-					"AgAAAJQBAAAAAAAAlQEAAAAAAAAAAAAAlQEAAAAAAACWAQAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACUAQAAAAAAAJQBAAAAAAAAAAAAAACAU0A"
-				],
-				[
-					347,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAAMQBAAAAAAAA9wEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACWAQAAAAAAAJYBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					348,
-					5,
-					"swap_line_down",
-					null,
-					"CgAAABMCAAAAAAAARgIAAAAAAAAAAAAAxAEAAAAAAADEAQAAAAAAADMAAAAJCQkJCSJ3b3JraW5nX2RpciI6ICIkcHJvamVjdF9wYXRoL1F0L0J1aWxkL01ha2UiLAoaAgAAAAAAAE0CAAAAAAAAAAAAAOABAAAAAAAA4AEAAAAAAAAzAAAACQkJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9RdC9CdWlsZC9NYWtlIiwKIAIAAAAAAABTAgAAAAAAAAAAAADnAQAAAAAAAOcBAAAAAAAAMwAAAAkJCQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvUXQvQnVpbGQvTWFrZSIsCjsCAAAAAAAAbgIAAAAAAAAAAAAA7QEAAAAAAADtAQAAAAAAADMAAAAJCQkJCSJ3b3JraW5nX2RpciI6ICIkcHJvamVjdF9wYXRoL1F0L0J1aWxkL01ha2UiLApfAgAAAAAAAJICAAAAAAAAAAAAAAgCAAAAAAAACAIAAAAAAAAzAAAACQkJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9RdC9CdWlsZC9NYWtlIiwK",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADJAQAAAAAAAMkBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					360,
-					9,
-					"swap_line_up",
-					null,
-					"EgAAABoDAAAAAAAAGgMAAAAAAABjAAAACQkJCXsKCQkJCQkibmFtZSI6ICJjbGVhbiIsCgkJCQkJLy8gInNoZWxsX2NtZCI6ICJwd2QiLAoJCQkJCSJzaGVsbF9jbWQiOiAibWFrZSAtajggY2xlYW4iLAoJCQkJfSwKFQMAAAAAAAB4AwAAAAAAAAAAAAAVAwAAAAAAABUDAAAAAAAAYwAAAAkJCQl7CgkJCQkJIm5hbWUiOiAiY2xlYW4iLAoJCQkJCS8vICJzaGVsbF9jbWQiOiAicHdkIiwKCQkJCQkic2hlbGxfY21kIjogIm1ha2UgLWo4IGNsZWFuIiwKCQkJCX0sCgYDAAAAAAAAaQMAAAAAAAAAAAAABgMAAAAAAAAGAwAAAAAAAGMAAAAJCQkJewoJCQkJCSJuYW1lIjogImNsZWFuIiwKCQkJCQkvLyAic2hlbGxfY21kIjogInB3ZCIsCgkJCQkJInNoZWxsX2NtZCI6ICJtYWtlIC1qOCBjbGVhbiIsCgkJCQl9LArQAgAAAAAAADMDAAAAAAAAAAAAANACAAAAAAAA0AIAAAAAAABjAAAACQkJCXsKCQkJCQkibmFtZSI6ICJjbGVhbiIsCgkJCQkJLy8gInNoZWxsX2NtZCI6ICJwd2QiLAoJCQkJCSJzaGVsbF9jbWQiOiAibWFrZSAtajggY2xlYW4iLAoJCQkJfSwKtAIAAAAAAAAXAwAAAAAAAAAAAAC0AgAAAAAAALQCAAAAAAAAYwAAAAkJCQl7CgkJCQkJIm5hbWUiOiAiY2xlYW4iLAoJCQkJCS8vICJzaGVsbF9jbWQiOiAicHdkIiwKCQkJCQkic2hlbGxfY21kIjogIm1ha2UgLWo4IGNsZWFuIiwKCQkJCX0sCpICAAAAAAAA9QIAAAAAAAAAAAAAkgIAAAAAAACSAgAAAAAAAGMAAAAJCQkJewoJCQkJCSJuYW1lIjogImNsZWFuIiwKCQkJCQkvLyAic2hlbGxfY21kIjogInB3ZCIsCgkJCQkJInNoZWxsX2NtZCI6ICJtYWtlIC1qOCBjbGVhbiIsCgkJCQl9LAqOAgAAAAAAAPECAAAAAAAAAAAAAI4CAAAAAAAAjgIAAAAAAABjAAAACQkJCXsKCQkJCQkibmFtZSI6ICJjbGVhbiIsCgkJCQkJLy8gInNoZWxsX2NtZCI6ICJwd2QiLAoJCQkJCSJzaGVsbF9jbWQiOiAibWFrZSAtajggY2xlYW4iLAoJCQkJfSwKiQIAAAAAAADsAgAAAAAAAAAAAACJAgAAAAAAAIkCAAAAAAAAYwAAAAkJCQl7CgkJCQkJIm5hbWUiOiAiY2xlYW4iLAoJCQkJCS8vICJzaGVsbF9jbWQiOiAicHdkIiwKCQkJCQkic2hlbGxfY21kIjogIm1ha2UgLWo4IGNsZWFuIiwKCQkJCX0sCogCAAAAAAAA6wIAAAAAAAAAAAAAiAIAAAAAAACIAgAAAAAAAGMAAAAJCQkJewoJCQkJCSJuYW1lIjogImNsZWFuIiwKCQkJCQkvLyAic2hlbGxfY21kIjogInB3ZCIsCgkJCQkJInNoZWxsX2NtZCI6ICJtYWtlIC1qOCBjbGVhbiIsCgkJCQl9LAqCAgAAAAAAAOUCAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB8AwAAAAAAAB4DAAAAAAAAAAAAAAAAWkA"
-				],
-				[
-					364,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAIECAAAAAAAAggIAAAAAAAAAAAAAggIAAAAAAACGAgAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACBAgAAAAAAAIECAAAAAAAA////////738"
-				],
-				[
-					365,
-					1,
-					"paste",
-					null,
-					"AQAAAIYCAAAAAAAA5AIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACGAgAAAAAAAIYCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					369,
-					1,
-					"insert",
-					{
-						"characters": "Console"
-					},
-					"BwAAAJYCAAAAAAAAlwIAAAAAAAAAAAAAlwIAAAAAAACYAgAAAAAAAAAAAACYAgAAAAAAAJkCAAAAAAAAAAAAAJkCAAAAAAAAmgIAAAAAAAAAAAAAmgIAAAAAAACbAgAAAAAAAAAAAACbAgAAAAAAAJwCAAAAAAAAAAAAAJwCAAAAAAAAnQIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACWAgAAAAAAAJYCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					370,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAJ0CAAAAAAAAngIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACdAgAAAAAAAJ0CAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					372,
-					1,
-					"right_delete",
-					null,
-					"AQAAAJ4CAAAAAAAAngIAAAAAAAAFAAAAY2xlYW4",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACeAgAAAAAAAKMCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					373,
-					1,
-					"left_delete",
-					null,
-					"AQAAAJ0CAAAAAAAAnQIAAAAAAAABAAAAIA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACeAgAAAAAAAJ4CAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					376,
-					1,
-					"insert",
-					{
-						"characters": "Console"
-					},
-					"BwAAAPsCAAAAAAAA/AIAAAAAAAAAAAAA/AIAAAAAAAD9AgAAAAAAAAAAAAD9AgAAAAAAAP4CAAAAAAAAAAAAAP4CAAAAAAAA/wIAAAAAAAAAAAAA/wIAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAEDAAAAAAAAAAAAAAEDAAAAAAAAAgMAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD7AgAAAAAAAPsCAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					377,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAAIDAAAAAAAAAwMAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAACAwAAAAAAAAIDAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					379,
-					1,
-					"insert_snippet",
-					{
-						"contents": "(${0:$SELECTION})"
-					},
-					"AgAAAAMDAAAAAAAAAwMAAAAAAAAFAAAAY2xlYW4DAwAAAAAAAAoDAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAADAwAAAAAAAAgDAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					382,
-					7,
-					"swap_line_up",
-					null,
-					"DgAAAKIDAAAAAAAAogMAAAAAAAA2AAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvQ29uc29sZS9CdWlsZC9NYWtlIiwKhgMAAAAAAAC8AwAAAAAAAAAAAACGAwAAAAAAAIYDAAAAAAAANgAAAAkJCSJ3b3JraW5nX2RpciI6ICIkcHJvamVjdF9wYXRoL0NvbnNvbGUvQnVpbGQvTWFrZSIsCmQDAAAAAAAAmgMAAAAAAAAAAAAAZAMAAAAAAABkAwAAAAAAADYAAAAJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9Db25zb2xlL0J1aWxkL01ha2UiLApgAwAAAAAAAJYDAAAAAAAAAAAAAGADAAAAAAAAYAMAAAAAAAA2AAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvQ29uc29sZS9CdWlsZC9NYWtlIiwKWwMAAAAAAACRAwAAAAAAAAAAAABbAwAAAAAAAFsDAAAAAAAANgAAAAkJCSJ3b3JraW5nX2RpciI6ICIkcHJvamVjdF9wYXRoL0NvbnNvbGUvQnVpbGQvTWFrZSIsCloDAAAAAAAAkAMAAAAAAAAAAAAAWgMAAAAAAABaAwAAAAAAADYAAAAJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9Db25zb2xlL0J1aWxkL01ha2UiLApUAwAAAAAAAIoDAAAAAAAAAAAAAFQDAAAAAAAAVAMAAAAAAAA2AAAACQkJIndvcmtpbmdfZGlyIjogIiRwcm9qZWN0X3BhdGgvQ29uc29sZS9CdWlsZC9NYWtlIiwKTQMAAAAAAACDAwAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC/AwAAAAAAAL8DAAAAAAAAAAAAAAAAekA"
-				],
-				[
-					384,
-					1,
-					"insert",
-					{
-						"characters": "\t\t"
-					},
-					"AgAAAFADAAAAAAAAUQMAAAAAAAAAAAAAUQMAAAAAAABSAwAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABQAwAAAAAAAFADAAAAAAAAAAAAAACAU0A"
-				],
-				[
-					385,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAAIUDAAAAAAAAvQMAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABSAwAAAAAAAFIDAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					386,
-					6,
-					"swap_line_up",
-					null,
-					"DAAAAIUDAAAAAAAAhQMAAAAAAAA4AAAACQkJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9Db25zb2xlL0J1aWxkL01ha2UiLApNAwAAAAAAAIUDAAAAAAAAAAAAAE0DAAAAAAAATQMAAAAAAAA4AAAACQkJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9Db25zb2xlL0J1aWxkL01ha2UiLAopAwAAAAAAAGEDAAAAAAAAAAAAACkDAAAAAAAAKQMAAAAAAAA4AAAACQkJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9Db25zb2xlL0J1aWxkL01ha2UiLAoNAwAAAAAAAEUDAAAAAAAAAAAAAA0DAAAAAAAADQMAAAAAAAA4AAAACQkJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9Db25zb2xlL0J1aWxkL01ha2UiLArtAgAAAAAAACUDAAAAAAAAAAAAAO0CAAAAAAAA7QIAAAAAAAA4AAAACQkJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9Db25zb2xlL0J1aWxkL01ha2UiLArnAgAAAAAAAB8DAAAAAAAAAAAAAOcCAAAAAAAA5wIAAAAAAAA4AAAACQkJCQkid29ya2luZ19kaXIiOiAiJHByb2plY3RfcGF0aC9Db25zb2xlL0J1aWxkL01ha2UiLArgAgAAAAAAABgDAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACKAwAAAAAAAIoDAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					396,
-					1,
-					"left_delete",
-					null,
-					"AQAAANIDAAAAAAAA0gMAAAAAAABdAAAAewoJCQkibmFtZSI6ICJBc3luY0dyYWIgKENvbnNvbGUpIiwKCQkJInNoZWxsX2NtZCI6ICJtYWtlIC1qOCIsCgkJCSJ2YXJpYW50cyI6CgkJCVsKCQkJXSwKCQl9",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAvBAAAAAAAANIDAAAAAAAAAAAAAAAASkA"
-				],
-				[
-					398,
-					2,
-					"left_delete",
-					null,
-					"AgAAANADAAAAAAAA0AMAAAAAAAACAAAACQnPAwAAAAAAAM8DAAAAAAAAAQAAAAo",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADSAwAAAAAAANADAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					408,
-					2,
-					"left_delete",
-					null,
-					"AgAAAIkBAAAAAAAAiQEAAAAAAAAFAAAAY2xlYW6IAQAAAAAAAIgBAAAAAAAAAQAAACA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACOAQAAAAAAAIkBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					415,
-					2,
-					"left_delete",
-					null,
-					"AgAAANICAAAAAAAA0gIAAAAAAAAFAAAAY2xlYW7RAgAAAAAAANECAAAAAAAAAQAAACA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADXAgAAAAAAANICAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					421,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAPYAAAAAAAAA+QAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAOAQAAAAAAAA4BAAAAAAAAAAAAAAAAekA"
-				],
-				[
-					423,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAABUBAAAAAAAAGAEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAwAQAAAAAAADABAAAAAAAAAAAAAADQekA"
-				],
-				[
-					434,
-					2,
-					"left_delete",
-					null,
-					"AgAAAPMAAAAAAAAA8wAAAAAAAABSAAAACQkJLy8gInNoZWxsX2NtZCI6ICJtYWtlIC1qOCIsCgkJCS8vICJ3b3JraW5nX2RpciI6ICIkcHJvamVjdF9wYXRoL1F0L0J1aWxkL01ha2UiLPIAAAAAAAAA8gAAAAAAAAABAAAACg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABFAQAAAAAAAPMAAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					438,
-					1,
-					"cut",
-					null,
-					"AQAAAHEBAAAAAAAAcQEAAAAAAAAcAAAACQkJCQkvLyAic2hlbGxfY21kIjogInB3ZCIsCg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACMAQAAAAAAAIwBAAAAAAAAAAAAAAB4gUA"
-				],
-				[
-					441,
-					1,
-					"cut",
-					null,
-					"AQAAAPABAAAAAAAA8AEAAAAAAAAcAAAACQkJCQkvLyAic2hlbGxfY21kIjogInB3ZCIsCg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADwAQAAAAAAAPABAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					447,
-					1,
-					"cut",
-					null,
-					"AQAAABUCAAAAAAAAFQIAAAAAAAAcAAAACQkJCQkvLyAic2hlbGxfY21kIjogInB3ZCIsCg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAVAgAAAAAAABUCAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					451,
-					1,
-					"left_delete",
-					null,
-					"AQAAABwDAAAAAAAAHAMAAAAAAAABAAAACg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAdAwAAAAAAAB0DAAAAAAAAAAAAAAAAAAA"
-				]
-			]
-		},
-		{
-			"file": "notes",
-			"settings":
-			{
-				"buffer_size": 851,
-				"encoding": "UTF-8",
-				"line_ending": "Unix"
-			},
-			"undo_stack":
-			[
-				[
-					1,
-					1,
-					"paste",
-					null,
-					"AQAAAAAAAAAAAAAAFQMAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					5,
-					1,
-					"reindent",
-					{
-						"single_line": false
-					},
-					"JAAAAEEAAAAAAAAAQQAAAAAAAAAAAAAAPwAAAAAAAAA/AAAAAAAAAAIAAAAJCVUAAAAAAAAAVQAAAAAAAAAAAAAAUwAAAAAAAABTAAAAAAAAAAIAAAAJCV8AAAAAAAAAXwAAAAAAAAAAAAAAXQAAAAAAAABdAAAAAAAAAAIAAAAJCYUAAAAAAAAAhQAAAAAAAAAAAAAAgwAAAAAAAACDAAAAAAAAAAIAAAAJCZkAAAAAAAAAmQAAAAAAAAAAAAAAlwAAAAAAAACXAAAAAAAAAAIAAAAJCZ8AAAAAAAAAnwAAAAAAAAAAAAAAnQAAAAAAAACdAAAAAAAAAAIAAAAJCcYAAAAAAAAAxgAAAAAAAAAAAAAAxAAAAAAAAADEAAAAAAAAAAIAAAAJCdcAAAAAAAAA1wAAAAAAAAAAAAAA1QAAAAAAAADVAAAAAAAAAAIAAAAJCf8AAAAAAAAA/wAAAAAAAAAAAAAA/QAAAAAAAAD9AAAAAAAAAAIAAAAJCRMBAAAAAAAAEwEAAAAAAAAAAAAAEQEAAAAAAAARAQAAAAAAAAIAAAAJCTMBAAAAAAAAMwEAAAAAAAAAAAAAMQEAAAAAAAAxAQAAAAAAAAIAAAAJCWMBAAAAAAAAYwEAAAAAAAAAAAAAYQEAAAAAAABhAQAAAAAAAAIAAAAJCbIBAAAAAAAAsgEAAAAAAAAAAAAAsAEAAAAAAACwAQAAAAAAAAIAAAAJCfwBAAAAAAAA/AEAAAAAAAAAAAAA+gEAAAAAAAD6AQAAAAAAAAIAAAAJCQMCAAAAAAAAAwIAAAAAAAAAAAAAAQIAAAAAAAABAgAAAAAAAAIAAAAJCSkCAAAAAAAAKQIAAAAAAAAAAAAAJwIAAAAAAAAnAgAAAAAAAAIAAAAJCVACAAAAAAAAUAIAAAAAAAAAAAAATgIAAAAAAABOAgAAAAAAAAIAAAAJCXgCAAAAAAAAeAIAAAAAAAAAAAAAdgIAAAAAAAB2AgAAAAAAAAIAAAAJCQ",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAPwAAAAAAAAAVAwAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					15,
-					3,
-					"right_delete",
-					null,
-					"EgAAAJcAAAAAAAAAlwAAAAAAAAABAAAAL4MAAAAAAAAAgwAAAAAAAAABAAAAL10AAAAAAAAAXQAAAAAAAAABAAAAL1MAAAAAAAAAUwAAAAAAAAABAAAALz8AAAAAAAAAPwAAAAAAAAABAAAALwAAAAAAAAAAAAAAAAAAAAABAAAAL5IAAAAAAAAAkgAAAAAAAAABAAAAL38AAAAAAAAAfwAAAAAAAAABAAAAL1oAAAAAAAAAWgAAAAAAAAABAAAAL1EAAAAAAAAAUQAAAAAAAAABAAAALz4AAAAAAAAAPgAAAAAAAAABAAAALwAAAAAAAAAAAAAAAAAAAAABAAAAL40AAAAAAAAAjQAAAAAAAAABAAAAIHsAAAAAAAAAewAAAAAAAAABAAAAIFcAAAAAAAAAVwAAAAAAAAABAAAAIE8AAAAAAAAATwAAAAAAAAABAAAAID0AAAAAAAAAPQAAAAAAAAABAAAAIAAAAAAAAAAAAAAAAAAAAAABAAAAIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAA/AAAAAAAAAAAAAAAAAPC/UwAAAAAAAABTAAAAAAAAAAAAAAAAAPC/XQAAAAAAAABdAAAAAAAAAAAAAAAAAPC/gwAAAAAAAACDAAAAAAAAAAAAAAAAAPC/lwAAAAAAAACXAAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					20,
-					3,
-					"right_delete",
-					null,
-					"CQAAAMMAAAAAAAAAwwAAAAAAAAABAAAAL7IAAAAAAAAAsgAAAAAAAAABAAAAL4sAAAAAAAAAiwAAAAAAAAABAAAAL8EAAAAAAAAAwQAAAAAAAAABAAAAL7EAAAAAAAAAsQAAAAAAAAABAAAAL4sAAAAAAAAAiwAAAAAAAAABAAAAL78AAAAAAAAAvwAAAAAAAAABAAAACbAAAAAAAAAAsAAAAAAAAAABAAAACYsAAAAAAAAAiwAAAAAAAAABAAAAIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAADAAAAiwAAAAAAAACLAAAAAAAAAAAAAAAAAAAAsgAAAAAAAACyAAAAAAAAAAAAAAAAAPC/wwAAAAAAAADDAAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					28,
-					3,
-					"right_delete",
-					null,
-					"DAAAAEYBAAAAAAAARgEAAAAAAAABAAAALxYBAAAAAAAAFgEAAAAAAAABAAAAL/YAAAAAAAAA9gAAAAAAAAABAAAAL+IAAAAAAAAA4gAAAAAAAAABAAAAL0MBAAAAAAAAQwEAAAAAAAABAAAALxQBAAAAAAAAFAEAAAAAAAABAAAAL/UAAAAAAAAA9QAAAAAAAAABAAAAL+IAAAAAAAAA4gAAAAAAAAABAAAAL0ABAAAAAAAAQAEAAAAAAAABAAAACRIBAAAAAAAAEgEAAAAAAAABAAAACfQAAAAAAAAA9AAAAAAAAAABAAAACeIAAAAAAAAA4gAAAAAAAAABAAAAIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAAEAAAA4gAAAAAAAADiAAAAAAAAAAAAAAAAAAAA9gAAAAAAAAD2AAAAAAAAAAAAAAAAAPC/FgEAAAAAAAAWAQAAAAAAAAAAAAAAAPC/RgEAAAAAAABGAQAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					38,
-					1,
-					"",
-					null,
-					"AQAAAIkBAAAAAAAAiQEAAAAAAAACAAAALy8",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAiQEAAAAAAACLAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					39,
-					1,
-					"",
-					null,
-					"AQAAANEBAAAAAAAA0QEAAAAAAAACAAAALy8",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA0QEAAAAAAADTAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					40,
-					1,
-					"",
-					null,
-					"AQAAANYBAAAAAAAA1gEAAAAAAAACAAAALy8",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA1gEAAAAAAADYAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					41,
-					1,
-					"",
-					null,
-					"AQAAAPoBAAAAAAAA+gEAAAAAAAACAAAALy8",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA+gEAAAAAAAD8AQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					42,
-					1,
-					"",
-					null,
-					"AQAAAB8CAAAAAAAAHwIAAAAAAAACAAAALy8",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAHwIAAAAAAAAhAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					43,
-					1,
-					"",
-					null,
-					"AQAAAEUCAAAAAAAARQIAAAAAAAACAAAALy8",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAARQIAAAAAAABHAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					49,
-					1,
-					"left_delete",
-					null,
-					"AQAAANEBAAAAAAAA0QEAAAAAAAABAAAAIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA0gEAAAAAAADSAQAAAAAAAAAAAAAAACpA"
-				],
-				[
-					50,
-					1,
-					"insert",
-					{
-						"characters": "##"
-					},
-					"AgAAANEBAAAAAAAA0gEAAAAAAAAAAAAA0gEAAAAAAADTAQAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA0QEAAAAAAADRAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					51,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAANMBAAAAAAAA1AEAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA0wEAAAAAAADTAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					54,
-					1,
-					"left_delete",
-					null,
-					"AQAAANgBAAAAAAAA2AEAAAAAAAABAAAAIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA2QEAAAAAAADZAQAAAAAAAAAAAAAAACpA"
-				],
-				[
-					56,
-					1,
-					"right_delete",
-					null,
-					"AQAAACACAAAAAAAAIAIAAAAAAAABAAAAIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAIAIAAAAAAAAgAgAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					58,
-					1,
-					"right_delete",
-					null,
-					"AQAAAEUCAAAAAAAARQIAAAAAAAABAAAAIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAARQIAAAAAAABFAgAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					63,
-					1,
-					"insert",
-					{
-						"characters": " MISC"
-					},
-					"BQAAANcBAAAAAAAA2AEAAAAAAAAAAAAA2AEAAAAAAADZAQAAAAAAAAAAAADZAQAAAAAAANoBAAAAAAAAAAAAANoBAAAAAAAA2wEAAAAAAAAAAAAA2wEAAAAAAADcAQAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA1wEAAAAAAADXAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					66,
-					1,
-					"right_delete",
-					null,
-					"AQAAANQBAAAAAAAA1AEAAAAAAAAEAAAAQkxBIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA2AEAAAAAAADUAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					68,
-					1,
-					"insert",
-					{
-						"characters": " BLA"
-					},
-					"BAAAANgBAAAAAAAA2QEAAAAAAAAAAAAA2QEAAAAAAADaAQAAAAAAAAAAAADaAQAAAAAAANsBAAAAAAAAAAAAANsBAAAAAAAA3AEAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA2AEAAAAAAADYAQAAAAAAAP///////+9/"
-				],
-				[
-					71,
-					1,
-					"insert",
-					{
-						"characters": "."
-					},
-					"AQAAAOwAAAAAAAAA7QAAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA7AAAAAAAAADsAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					74,
-					1,
-					"paste",
-					null,
-					"AgAAAFQAAAAAAAAABwEAAAAAAAAAAAAABwEAAAAAAAAHAQAAAAAAADMAAAAiLUl+L3ZpbWJhXzVfMS9WaW1iYUNQUC9FeGFtcGxlcyIsCiItSX4vdmltYmFfNV8xIiw",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAhwAAAAAAAABUAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					82,
-					1,
-					"left_delete",
-					null,
-					"BAAAANgAAAAAAAAA2AAAAAAAAAAEAAAAICAgILIAAAAAAAAAsgAAAAAAAAAEAAAAICAgIJ0AAAAAAAAAnQAAAAAAAAAEAAAAICAgIHcAAAAAAAAAdwAAAAAAAAAEAAAAICAgIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAAEAAAAewAAAAAAAAB3AAAAAAAAAAAAAAAAAAAAoQAAAAAAAACdAAAAAAAAAAAAAAAAAAAAtgAAAAAAAACyAAAAAAAAAAAAAAAAAAAA3AAAAAAAAADYAAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					86,
-					1,
-					"insert",
-					{
-						"characters": "\n//"
-					},
-					"AwAAABcAAAAAAAAAGAAAAAAAAAAAAAAAGAAAAAAAAAAZAAAAAAAAAAAAAAAZAAAAAAAAABoAAAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAFwAAAAAAAAAXAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					87,
-					1,
-					"right_delete",
-					null,
-					"AQAAABoAAAAAAAAAGgAAAAAAAAABAAAAKA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAGgAAAAAAAAAaAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					88,
-					2,
-					"left_delete",
-					null,
-					"AgAAABkAAAAAAAAAGQAAAAAAAAABAAAALxgAAAAAAAAAGAAAAAAAAAABAAAALw",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAGgAAAAAAAAAaAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					89,
-					1,
-					"insert",
-					{
-						"characters": "#"
-					},
-					"AQAAABgAAAAAAAAAGQAAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAGAAAAAAAAAAYAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					90,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAABkAAAAAAAAAGgAAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAGQAAAAAAAAAZAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					91,
-					2,
-					"left_delete",
-					null,
-					"AgAAABkAAAAAAAAAGQAAAAAAAAABAAAAIBgAAAAAAAAAGAAAAAAAAAABAAAAIw",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAGgAAAAAAAAAaAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					92,
-					1,
-					"insert",
-					{
-						"characters": "//"
-					},
-					"AgAAABgAAAAAAAAAGQAAAAAAAAAAAAAAGQAAAAAAAAAaAAAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAGAAAAAAAAAAYAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					93,
-					1,
-					"insert",
-					{
-						"characters": " in"
-					},
-					"AwAAABoAAAAAAAAAGwAAAAAAAAAAAAAAGwAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAAB0AAAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAGgAAAAAAAAAaAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					94,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAB0AAAAAAAAAHgAAAAAAAAAAAAAA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAHQAAAAAAAAAdAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					96,
-					1,
-					"left_delete",
-					null,
-					"AQAAAEAAAAAAAAAAQAAAAAAAAAABAAAAKQ",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAQQAAAAAAAABBAAAAAAAAAP///////+9/"
-				],
-				[
-					100,
-					5,
-					"swap_line_down",
-					null,
-					"CgAAAHwAAAAAAAAAgwAAAAAAAAAAAAAAUgAAAAAAAABSAAAAAAAAAAcAAAAvLyAuLi4KngAAAAAAAAClAAAAAAAAAAAAAAB1AAAAAAAAAHUAAAAAAAAABwAAAC8vIC4uLgqvAAAAAAAAALYAAAAAAAAAAAAAAJcAAAAAAAAAlwAAAAAAAAAHAAAALy8gLi4uCtEAAAAAAAAA2AAAAAAAAAAAAAAAqAAAAAAAAACoAAAAAAAAAAcAAAAvLyAuLi4K/QAAAAAAAAAEAQAAAAAAAAAAAADKAAAAAAAAAMoAAAAAAAAABwAAAC8vIC4uLgo",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAUgAAAAAAAABSAAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					104,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"AQAAABYAAAAAAAAAFgAAAAAAAAABAAAAIA",
-					"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAEwEAAAAAAAATAQAAAAAAAAAAAAAAAPC/"
-				]
-			]
-		}
-	],
-	"build_system": "AsyncGrab",
-	"build_system_choices":
-	[
-		[
-			[
-				[
-					"AsyncGrab",
-					""
-				],
-				[
-					"AsyncGrab",
-					"Qt"
-				],
-				[
-					"AsyncGrab",
-					"Qt (clean)"
-				],
-				[
-					"AsyncGrab",
-					"Console"
-				],
-				[
-					"AsyncGrab",
-					"Console (clean)"
-				]
-			],
-			[
-				"AsyncGrab",
-				"Qt"
-			]
-		],
-		[
-			[
-				[
-					"AsyncGrab (Console)",
-					""
-				],
-				[
-					"AsyncGrab (Console)",
-					"clean"
-				]
-			],
-			[
-				"AsyncGrab (Console)",
-				""
-			]
-		],
-		[
-			[
-				[
-					"AsyncGrab (Qt)",
-					""
-				],
-				[
-					"AsyncGrab (Qt)",
-					"clean"
-				]
-			],
-			[
-				"AsyncGrab (Qt)",
-				""
-			]
-		],
-		[
-			[
-				[
-					"Packages/Makefile/Make.sublime-build",
-					""
-				],
-				[
-					"Packages/Makefile/Make.sublime-build",
-					"Clean"
-				]
-			],
-			[
-				"Packages/Makefile/Make.sublime-build",
-				""
-			]
-		],
-		[
-			[
-				[
-					"Packages/User/C++.sublime-build",
-					""
-				],
-				[
-					"Packages/User/C++.sublime-build",
-					"run"
-				],
-				[
-					"Packages/User/C++.sublime-build",
-					"run (+ demangle symbols)"
-				],
-				[
-					"Packages/User/C++.sublime-build",
-					"opencv: single"
-				],
-				[
-					"Packages/User/C++.sublime-build",
-					"json parser"
-				]
-			],
-			[
-				"Packages/User/C++.sublime-build",
-				"json parser"
-			]
-		]
-	],
-	"build_varint": "Qt",
-	"command_palette":
-	{
-		"height": 0.0,
-		"last_filter": "",
-		"selected_items":
-		[
-			[
-				"menu",
-				"View: Toggle Menu"
-			],
-			[
-				"p",
-				"Preferences: Settings"
-			],
-			[
-				"uni",
-				"Permute Lines: Unique"
-			],
-			[
-				"sort",
-				"Sort Lines"
-			],
-			[
-				"install",
-				"Package Control: Install Package"
-			],
-			[
-				"insta",
-				"Install Package Control"
-			]
-		],
-		"width": 0.0
-	},
-	"console":
-	{
-		"height": 400.0,
-		"history":
-		[
-		]
-	},
-	"distraction_free":
-	{
-		"menu_visible": true,
-		"show_minimap": false,
-		"show_open_files": false,
-		"show_tabs": false,
-		"side_bar_visible": false,
-		"status_bar_visible": false
-	},
-	"expanded_folders":
-	[
-		"/home/m/code/idiv/vimba/VimbaCPP/Examples/AsynchronousGrab",
-		"/home/m/code/idiv/vimba/VimbaCPP/Examples/AsynchronousGrab/Qt"
-	],
-	"file_history":
-	[
-		"/home/m/vimba_5_1/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ApiController.h",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ApiController.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Include/SharedPointerDefines.h",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ProgramConfig.h",
-		"/home/m/vimba_5_1/VimbaC/Include/VmbCommonTypes.h",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/AsynchronousGrab/Console/Source/TransformImage.h",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/VimbaViewer/Source/VmbImageTransformHelper.hpp",
-		"/home/m/vimba_5_1/VimbaCPP/Include/Frame.h",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/AsynchronousGrab.h",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/AsynchronousGrab.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/Build/Make/Qt5.mk",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/Makefile",
-		"/home/m/.bashrc",
-		"/home/m/.bash_aliases.bup",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/Build/Make/Common.mk",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/Build/Make/Qt.mk",
-		"/usr/local/Qt-5.15.0/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/main.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/AsynchronousGrab.sublime-project",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/ListCameras/Source/program.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/ListCameras/ListCameras.sublime-project",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/ListCameras/Source/ListCameras.h",
-		"/home/m/vimba_5_1/VimbaCPP/Include/Camera.h",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/ListCameras/Source/ListCameras.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Include/Camera.hpp",
-		"/home/m/vimba_5_1/VimbaCPP/Source/Camera.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Include/LoggerDefines.h",
-		"/home/m/vimba_5_1/VimbaCPP/Include/FileLogger.h",
-		"/home/m/vimba_5_1/VimbaCPP/Include/VimbaSystem.h",
-		"/home/m/vimba_5_1/VimbaCPP/Source/VimbaSystem.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/Build/Make/VimbaCPP.mk",
-		"/home/m/.config/sublime-text/Packages/User/Build.sublime-settings",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/ListCameras/Build/Make/Makefile",
-		"/home/m/vimba_5_1/VimbaCPP/Include/VimbaCPPCommon.h",
-		"/home/m/vimba_5_1/VimbaCPP/Include/VimbaCPP.h",
-		"/home/m/vimba_5_1/VimbaCPP/tmp/GT1920CCamera.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/tmp/GT1920CCamera.h",
-		"/home/m/dox/priv/read",
-		"/home/m/vimba_5_1/VimbaGigETL/SetGenTLPath.sh",
-		"/home/m/vimba_5_1/VimbaGigETL/Install.sh",
-		"/home/m/dox/idiv/camtron/notes_qina_1306",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/Bin/x86_64bit/features",
-		"/home/m/code/bash/git_repo.sh",
-		"/home/m/code/.gitignore",
-		"/home/m/code/idiv/synconf/sync.list",
-		"/home/m/code/idiv/synconf/sync.sh",
-		"/home/m/dox/cmds/cmds.cpp",
-		"/home/m/dox/cmds/cmds2.sh",
-		"/home/m/.bash_aliases",
-		"/home/m/.gnupg/sshcontrol",
-		"/home/m/.ssh/known_hosts",
-		"/home/m/code/c++/bookmark_merger/bookmarx-merger.sublime-project",
-		"/home/m/code/c++/bookmark_merger/merger.cpp",
-		"/home/m/code/c++/foo/foo.cpp",
-		"/home/m/code/c++/bookmark_merger/m_new.json",
-		"/home/m/code/c++/bookmark_merger/m_old.json",
-		"/home/m/code/c++/bookmark_merger/sugu.json",
-		"/home/m/code/c++/bookmark_merger/log",
-		"/home/m/code/c++/bookmark_merger/run-merger.sh",
-		"/home/m/code/c++/bookmark_merger/joli.json",
-		"/home/m/code/c++/bookmark_merger/j2.json",
-		"/home/m/code/c++/bookmark_merger/j1.json",
-		"/home/m/.config/user/bookmarx/joli.json",
-		"/home/m/code/c++/bookmark_merger/fooooo.cpp",
-		"/home/m/code/.git/COMMIT_EDITMSG",
-		"/home/m/.config/user/bookmarx/bookmarks-sugu.json",
-		"/home/m/code/c++/bookmark_merger/bookmarks-sugu-joli.json",
-		"/home/m/code/c++/bookmark_merger/bookmarks-REC.json",
-		"/home/m/code/c++/bookmark_merger/tree-merge.cpp",
-		"/home/m/code/c++/bookmark_merger/bla.cpp",
-		"/home/m/code/c++/foo/snippets.cpp",
-		"/home/m/code/c++/bookmark_merger/fooooooooooooo.cpp",
-		"/home/m/code/c++/foo/todo_1337.cpp",
-		"/home/m/.config/user/browseFiles/cpp_filelist",
-		"/home/m/code/c++/foo/stuff",
-		"/home/m/dox/po/notes/dates",
-		"/home/m/.config/sublime-text/Packages/User/c++_cerr.sublime-snippet",
-		"/home/m/.config/sublime-text/Packages/User/c++_cerr2.sublime-snippet",
-		"/home/m/.config/sublime-text/Packages/User/c++_cout2.sublime-snippet",
-		"/home/m/.config/sublime-text/Packages/User/c++_cout.sublime-snippet",
-		"/home/m/.config/sublime-text/Packages/User/here.sublime-snippet",
-		"/home/m/.config/sublime-text/Packages/User/endl.sublime-snippet",
-		"/usr/include/c++/9/bits/stl_vector.h",
-		"/home/m/code/idiv/camtron/examples/Demo2.cpp",
-		"/home/m/code/idiv/camtron/examples/Demo.cpp",
-		"/home/m/.config/sublime-text/Packages/User/c++_for_auto.sublime-snippet",
-		"/usr/include/c++/9/bits/stl_list.h",
-		"/home/m/code/c++/foo/ressources",
-		"/home/m/code/idiv/ecotrondata/ecotrack/out/dates",
-		"/home/m/dox/po/notes/ukraine",
-		"/home/m/code/bash/restore.sh",
-		"/home/m/dox/cmds/cmds.py",
-		"/home/m/.config/sublime-text/Packages/User/c++_include.sublime-snippet",
-		"/home/m/.config/user/bookmarx/bookmarks-empty.json",
-		"/home/m/dox/todo/todo_po",
-		"/home/m/.config/user/browseFiles/todo_filelist",
-		"/home/m/dox/idiv/camtron/notes",
-		"/home/m/dox/idiv/camtron/install",
-		"/home/m/dox/idiv/camtron/opencv",
-		"/home/m/dox/bureau/study_again?",
-		"/usr/include/c++/9/bits/basic_string.h",
-		"/home/m/dox/psy/psy2",
-		"/home/m/dox/psy/psy",
-		"/home/m/dox/todo/todo_tron",
-		"/home/m/.config/sublime-text/Packages/User/C++.sublime-build",
-		"/home/m/.config/sublime-text/Packages/EasyClangComplete/EasyClangComplete.sublime-settings",
-		"/home/m/.config/sublime-text/Packages/User/EasyClangComplete.sublime-settings",
-		"/home/m/.config/sublime-text/Packages/User/clang_format.sublime-settings",
-		"/home/m/code/c++/bookmark_merger/bookmark_merger.sublime-project",
-		"/home/m/.config/sublime-merge/Packages/User/Preferences.sublime-settings",
-		"/home/m/code/idiv/camtron/examples/ct-examples.sublime-project",
-		"/home/m/code/idiv/camtron/examples/CMakeLists.txt",
-		"/usr/include/opencv4/opencv2/opencv.hpp",
-		"/usr/include/opencv4/opencv2/opencv_modules.hpp",
-		"/home/m/code/idiv/camtron/src/PreProcessor.h",
-		"/home/m/code/idiv/camtron/src/utils/ILoadSaveConfig.h",
-		"/home/m/code/idiv/camtron/src/PreProcessor.cpp",
-		"/home/m/code/idiv/camtron/examples/Demo_orig.cpp",
-		"/home/m/dox/lang/fr/b2/2/unité_5",
-		"/home/m/code/idiv/camtron/demo.py",
-		"/home/m/code/idiv/camtron/demo2.py",
-		"/home/m/dox/lang/fr/b2/2/expose2",
-		"/home/m/dox/lang/fr/b2/2/expose",
-		"/home/m/dox/lang/fr/b2/2/vocab",
-		"/home/m/code/.git/MERGE_MSG",
-		"/home/m/dox/lang/fr/b2/2/unité_4",
-		"/home/m/code/idiv/camtron/src/algorithms/ttoolbox.h",
-		"/home/m/code/idiv/camtron/src/algorithms/ttoolbox.cpp"
-	],
-	"find":
-	{
-		"height": 46.0
-	},
-	"find_in_files":
-	{
-		"height": 131.0,
-		"where_history":
-		[
-			"/home/m/vimba_5_1/VimbaCPP"
-		]
-	},
-	"find_state":
-	{
-		"case_sensitive": false,
-		"find_history":
-		[
-			"camera",
-			"Camera",
-			"camera",
-			"Camera",
-			"camera",
-			"Camera",
-			"camera",
-			"Camera",
-			"camera",
-			"Camera",
-			"camera",
-			"Camera",
-			"camera",
-			"Camera",
-			"FramePtr",
-			"NUM_FRAMES",
-			"//",
-			"QtGui",
-			"QTGUI",
-			"QtGui",
-			"QTGUI",
-			"QtGui",
-			"TGUI",
-			"QTGUI",
-			"QtGui",
-			"QTGUI",
-			"QtGui",
-			"QTGUI",
-			"QTCORE_LIBS",
-			"Qt",
-			"QT",
-			"Qt",
-			"QT",
-			"Qt",
-			"QT",
-			"Qt",
-			"QT",
-			"Qt",
-			"QT",
-			"qt",
-			"PKGCFG",
-			"VmbInterfaceType",
-			"PrintCameraInfo",
-			"asyn",
-			"CameraPtrVector",
-			"err",
-			"sys",
-			"GetInterfaceID",
-			"getinter",
-			"interface",
-			"SOURCE_DIR",
-			"EXAMPLES_DIR",
-			"ARCH_CFLAGS",
-			"ARCH",
-			"CONFIG_DIR",
-			"binary",
-			"RM",
-			"FeaturePtr",
-			"error",
-			"VmbErrorType",
-			"Error",
-			"VmbErrorType",
-			"PrintCameraInfo",
-			"clr",
-			"Hait",
-			"Haiti",
-			"pullRepos",
-			"toggleRepo",
-			"showRepoStatuses",
-			"git",
-			"bjj",
-			"vv=",
-			"max_archive_size_mb",
-			"maxSize_Byte",
-			"push",
-			"print_verbose",
-			"rNodes",
-			"unteilb",
-			"rm",
-			"sort",
-			"fix_all_parents",
-			"sort",
-			"unteil",
-			"fix_all_parents",
-			"sort",
-			"HACK",
-			"sort",
-			"kids()",
-			"remove(",
-			"remove",
-			"[]",
-			"psy",
-			"[]",
-			"remove_empty",
-			"[]",
-			"make_uniq",
-			"\"title\": \"rm",
-			"old-onl",
-			"sugu-only",
-			"old-only",
-			"only",
-			"Xm_new-only-1",
-			"only",
-			"cout",
-			"sugu-only",
-			"old-only",
-			"new-only",
-			"old-only",
-			"sugu-only",
-			"sugu",
-			"remove(",
-			"fix_all_parents",
-			"remove",
-			"print",
-			"add_kid",
-			"antira",
-			"kids(",
-			"antira",
-			"„",
-			"antira",
-			"XXm_old-",
-			"XXm_new",
-			"Xsugu-only",
-			"\"\n",
-			"XXsugu-only-",
-			"sugu-only-3",
-			"Xsugu-only",
-			"XXsugu-only"
-		],
-		"highlight": true,
-		"in_selection": false,
-		"preserve_case": false,
-		"regex": false,
-		"replace_history":
-		[
-			"",
-			"Qt5",
-			"Qt5                  ",
-			"Qt5",
-			"XXm_new-only-4",
-			"XXm_new-only-3",
-			"XXm_new-only-2",
-			"XXm_new-only-1",
-			"XXm_old-only-4",
-			"XXm_old-only-3",
-			"XXm_old-only-2",
-			"XXm_old-only-1",
-			"XXsugu-only-3",
-			"XXsugu-only-2",
-			"XXsugu-only-1",
-			"",
-			"__LINE__ << \":",
-			"parent->",
-			"parent.",
-			"dupesbookmark",
-			"bookmark",
-			"dupes",
-			".name()",
-			"print_names",
-			"Node::all",
-			"pp_all(",
-			"orig",
-			"kid",
-			"Node::ilist",
-			"ns",
-			"",
-			"4",
-			"cout",
-			"",
-			"to_json",
-			"from_json"
-		],
-		"reverse": false,
-		"scrollbar_highlights": true,
-		"show_context": true,
-		"use_buffer2": true,
-		"use_gitignore": true,
-		"whole_word": false,
-		"wrap": true
-	},
-	"groups":
-	[
-		{
-			"sheets":
-			[
-				{
-					"buffer": 0,
-					"file": "AsynchronousGrab.sublime-project",
-					"selected": true,
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 807,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								20,
-								20
-							]
-						],
-						"settings":
-						{
-							"color_scheme": "Celeste.sublime-color-scheme",
-							"syntax": "Packages/JSON/JSON.sublime-syntax",
-							"tab_size": 2,
-							"translate_tabs_to_spaces": false
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 0,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 1,
-					"file": "notes",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 851,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								0,
-								0
-							]
-						],
-						"settings":
-						{
-							"syntax": "Packages/Text/Plain text.tmLanguage",
-							"tab_size": 2,
-							"translate_tabs_to_spaces": false
-						},
-						"translation.x": 0.0,
-						"translation.y": 150.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 1,
-					"stack_multiselect": false,
-					"type": "text"
-				}
-			]
-		}
-	],
-	"incremental_find":
-	{
-		"height": 34.0
-	},
-	"input":
-	{
-		"height": 0.0
-	},
-	"layout":
-	{
-		"cells":
-		[
-			[
-				0,
-				0,
-				1,
-				1
-			]
-		],
-		"cols":
-		[
-			0.0,
-			1.0
-		],
-		"rows":
-		[
-			0.0,
-			1.0
-		]
-	},
-	"menu_visible": true,
-	"output.ECC":
-	{
-		"height": 186.0
-	},
-	"output.exec":
-	{
-		"height": 324.0
-	},
-	"output.find_results":
-	{
-		"height": 0.0
-	},
-	"output.mdpopups":
-	{
-		"height": 0.0
-	},
-	"pinned_build_system": "AsyncGrab",
-	"project": "AsynchronousGrab.sublime-project",
-	"replace":
-	{
-		"height": 84.0
-	},
-	"save_all_on_build": true,
-	"select_file":
-	{
-		"height": 0.0,
-		"last_filter": "",
-		"selected_items":
-		[
-			[
-				"shared",
-				"VimbaCPP/Include/SharedPointerDefines.h"
-			],
-			[
-				"",
-				"AsynchronousGrab/Console/Source/TransformImage.h"
-			],
-			[
-				"logger",
-				"vimba_5_1/VimbaCPP/Include/FileLogger.h"
-			],
-			[
-				"jo",
-				"joli.json"
-			],
-			[
-				"al",
-				"~/.bash_aliases"
-			]
-		],
-		"width": 0.0
-	},
-	"select_project":
-	{
-		"height": 500.0,
-		"last_filter": "",
-		"selected_items":
-		[
-			[
-				"",
-				"~/code/idiv/vimba/VimbaCPP/Examples/AsynchronousOpenCVRecorder/asyncOpenCV.sublime-project"
-			]
-		],
-		"width": 380.0
-	},
-	"select_symbol":
-	{
-		"height": 134.0,
-		"last_filter": "",
-		"selected_items":
-		[
-		],
-		"width": 592.0
-	},
-	"selected_group": 0,
-	"settings":
-	{
-	},
-	"show_minimap": true,
-	"show_open_files": false,
-	"show_tabs": true,
-	"side_bar_visible": true,
-	"side_bar_width": 245.0,
-	"status_bar_visible": true,
-	"template_settings":
-	{
-	}
-}
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/Makefile b/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/Makefile
deleted file mode 100644
index e3a035b2d95acbe5ebc13e69882dde0826e7f3f5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/Makefile
+++ /dev/null
@@ -1,57 +0,0 @@
-PROJECT_NAME            = AsynchronousGrabConsole
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/../..
-VIMBASDK_DIR		= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-
-include $(MAKE_INCLUDE_DIR)/VimbaImageTransform.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS) \
-                      $(VIMBAIMAGETRANSFORM_LIBS) \
-					  -lrt
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS) \
-                      $(VIMBAIMAGETRANSFORM_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ApiController.o \
-                      $(OBJ_DIR)/FrameObserver.o \
-                      $(OBJ_DIR)/program.o
-
-DEPENDENCIES        = VimbaCPP \
-                      VimbaImageTransform
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/AsynchronousGrabConsole b/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/AsynchronousGrabConsole
deleted file mode 100755
index 59d63a262ab26ca991ac917ca528d9951d8361ba..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/AsynchronousGrabConsole and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/libVimbaC.so b/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/libVimbaC.so
deleted file mode 100644
index 781383deb7c36a92813b8997376e622b6e3e5a96..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/libVimbaCPP.so b/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/libVimbaCPP.so
deleted file mode 100644
index 081afba051f4fc154481cec96cd4af633ca6b7ee..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/libVimbaCPP.so and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/libVimbaImageTransform.so b/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/libVimbaImageTransform.so
deleted file mode 100644
index b01c3977a73d785668f7a031b61125ab956e2ed1..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/binary/x86_64bit/libVimbaImageTransform.so and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/object/x86_64bit/ApiController.o b/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/object/x86_64bit/ApiController.o
deleted file mode 100644
index be927ab41fbf4569751da8a07eb4d5956bed1a85..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/object/x86_64bit/ApiController.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/object/x86_64bit/FrameObserver.o b/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/object/x86_64bit/FrameObserver.o
deleted file mode 100644
index 1bdc6973e44386ec1041b468c6b15a8048975e5a..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/object/x86_64bit/FrameObserver.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/object/x86_64bit/program.o b/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/object/x86_64bit/program.o
deleted file mode 100644
index 681ea3f5436a085465c1c1bb6ab7df6fcf24d051..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Console/Build/Make/object/x86_64bit/program.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ApiController.cpp b/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ApiController.cpp
deleted file mode 100644
index 6d0492813ba44225bea93c312b27b8f5072c5d59..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ApiController.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ApiController.cpp
-
-  Description: Implementation file for the ApiController helper class that
-               demonstrates how to implement an asynchronous, continuous image
-               acquisition with VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-#include <sstream>
-#include <iostream>
-
-#include "ApiController.h"
-#include "Common/StreamSystemInfo.h"
-#include "Common/ErrorCodeToMessage.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-#define NUM_FRAMES 3
-
-ApiController::ApiController()
-    // Get a reference to the Vimba singleton
-    : m_system ( VimbaSystem::GetInstance() )
-{}
-
-ApiController::~ApiController()
-{
-}
-
-//
-// Translates Vimba error codes to readable error messages
-//
-// Parameters:
-//  [in]    eErr        The error code to be converted to string
-//
-// Returns:
-//  A descriptive string representation of the error code
-//
-std::string ApiController::ErrorCodeToMessage( VmbErrorType eErr ) const
-{
-    return AVT::VmbAPI::Examples::ErrorCodeToMessage( eErr );
-}
-
-//
-// Starts the Vimba API and loads all transport layers
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::StartUp()
-{
-    return m_system.Startup();
-}
-
-//
-// Shuts down the API
-//
-void ApiController::ShutDown()
-{
-    // Release Vimba
-    m_system.Shutdown();
-}
-
-//
-// Opens the given camera
-// Sets the maximum possible Ethernet packet size
-// Adjusts the image format
-// Sets up the observer that will be notified on every incoming frame
-// Calls the API convenience function to start image acquisition
-// Closes the camera in case of failure
-//
-// Parameters:
-//  [in]    Config      A configuration struct including the camera ID and other settings
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::StartContinuousImageAcquisition( const ProgramConfig& Config )
-{
-    // Open the desired camera by its ID
-    VmbErrorType res = m_system.OpenCameraByID( Config.getCameraID().c_str(), VmbAccessModeFull, m_pCamera );
-    if ( VmbErrorSuccess == res )
-    {
-        // Set the GeV packet size to the highest possible value
-        // (In this example we do not test whether this cam actually is a GigE cam)
-        FeaturePtr pCommandFeature;
-        if ( VmbErrorSuccess == m_pCamera->GetFeatureByName( "GVSPAdjustPacketSize", pCommandFeature ))
-        {
-            if ( VmbErrorSuccess == pCommandFeature->RunCommand() )
-            {
-                bool bIsCommandDone = false;
-                do
-                {
-                    if ( VmbErrorSuccess != pCommandFeature->IsCommandDone( bIsCommandDone ))
-                    {
-                        break;
-                    }
-                } while ( false == bIsCommandDone );
-            }
-        }
-
-        if ( VmbErrorSuccess == res )
-        {
-            // set camera so that transform algorithms will never fail
-            res = PrepareCamera();
-            if ( VmbErrorSuccess == res )
-            {
-                // Create a frame observer for this camera (This will be wrapped in a shared_ptr so we don't delete it)
-                m_pFrameObserver = new FrameObserver( m_pCamera, Config.getFrameInfos(), Config.getColorProcessing(), Config.getRGBValue() );
-                // Start streaming
-                res = m_pCamera->StartContinuousImageAcquisition( NUM_FRAMES, IFrameObserverPtr( m_pFrameObserver ), Config.getAllocAndAnnounce() ? FrameAllocation_AllocAndAnnounceFrame : FrameAllocation_AnnounceFrame );
-            }
-        }
-        if ( VmbErrorSuccess != res )
-        {
-            // If anything fails after opening the camera we close it
-            m_pCamera->Close();
-        }
-    }
-
-    return res;
-}
-
-/**setting a feature to maximum value that is a multiple of 2 and a multiple of the increment*/
-VmbErrorType SetIntFeatureValueModulo2( const CameraPtr &pCamera, const char* const& Name )
-{
-    VmbErrorType    result;
-    FeaturePtr      feature;
-    VmbInt64_t      value_min = 0;
-    VmbInt64_t      value_max = 0;
-    VmbInt64_t      value_increment = 0;
-
-    result = SP_ACCESS( pCamera )->GetFeatureByName( Name, feature );
-    if( VmbErrorSuccess != result )
-    {
-        return result;
-    }
-
-    result = SP_ACCESS( feature )->GetRange( value_min, value_max );
-    if( VmbErrorSuccess != result )
-    {
-        return result;
-    }
-
-    result = SP_ACCESS( feature )->GetIncrement( value_increment );
-    if( VmbErrorSuccess != result )
-    {
-        return result;
-    }
-
-    value_max = value_max - ( value_max % value_increment);
-    if( value_max % 2 != 0)
-    {
-        value_max -= value_increment;
-    }
-
-    result = SP_ACCESS( feature )->SetValue ( value_max );
-    return result;
-}
-
-/**prepare camera so that the delivered image will not fail in image transform*/
-VmbErrorType ApiController::PrepareCamera()
-{
-    VmbErrorType result;
-    result = SetIntFeatureValueModulo2( m_pCamera, "Width" );
-    if( VmbErrorSuccess != result )
-    {
-        return result;
-    }
-    result = SetIntFeatureValueModulo2( m_pCamera, "Height" );
-    if( VmbErrorSuccess != result )
-    {
-        return result;
-    }
-    return result;
-}
-
-//
-// Calls the API convenience function to stop image acquisition
-// Closes the camera
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::StopContinuousImageAcquisition()
-{
-    // Stop streaming
-    m_pCamera->StopContinuousImageAcquisition();
-
-    // Close camera
-    return  m_pCamera->Close();
-}
-
-//
-// Gets all cameras known to Vimba
-//
-// Returns:
-//  A vector of camera shared pointers
-//
-CameraPtrVector ApiController::GetCameraList() const
-{
-    CameraPtrVector cameras;
-    // Get all known cameras
-    if ( VmbErrorSuccess == m_system.GetCameras( cameras ))
-    {
-        // And return them
-        return cameras;
-    }
-    return CameraPtrVector();
-}
-
-//
-// Gets the version of the Vimba API
-//
-// Returns:
-//  The version as string
-//
-std::string ApiController::GetVersion() const
-{
-    std::ostringstream  os;
-    os<<m_system;
-    return os.str();
-}
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ApiController.h b/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ApiController.h
deleted file mode 100644
index d5b79df7162d10b1b2964a8d3b05a3d7a0226497..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ApiController.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ApiController.h
-
-  Description: Header file for the ApiController helper class that demonstrates
-               how to implement an asynchronous, continuous image acquisition
-               with VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_APICONTROLLER
-#define AVT_VMBAPI_EXAMPLES_APICONTROLLER
-
-#include <string>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-#include "FrameObserver.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class ApiController
-{
-  public:
-    ApiController();
-    ~ApiController();
-
-    //
-    // Starts the Vimba API and loads all transport layers
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        StartUp();    
-    
-    //
-    // Shuts down the API
-    //
-    void                ShutDown();
-    
-    //
-    // Opens the given camera
-    // Sets the maximum possible Ethernet packet size
-    // Adjusts the image format
-    // Sets up the observer that will be notified on every incoming frame
-    // Calls the API convenience function to start image acquisition
-    // Closes the camera in case of failure
-    //
-    // Parameters:
-    //  [in]    Config      A configuration struct including the camera ID and other settings
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        StartContinuousImageAcquisition( const ProgramConfig & );    
-    
-    //
-    // Calls the API convenience function to stop image acquisition
-    // Closes the camera
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        StopContinuousImageAcquisition();
-
-    //
-    // Gets all cameras known to Vimba
-    //
-    // Returns:
-    //  A vector of camera shared pointers
-    //
-    CameraPtrVector     GetCameraList() const;
-    
-    //
-    // Translates Vimba error codes to readable error messages
-    //
-    // Parameters:
-    //  [in]    eErr        The error code to be converted to string
-    //
-    // Returns:
-    //  A descriptive string representation of the error code
-    //
-    std::string         ErrorCodeToMessage( VmbErrorType eErr ) const;
-    
-    //
-    // Gets the version of the Vimba API
-    //
-    // Returns:
-    //  The version as string
-    //
-    std::string         GetVersion() const;
-
-  private:
-    VmbErrorType        PrepareCamera();
-    VimbaSystem &       m_system;                   // A reference to our Vimba singleton
-    CameraPtr           m_pCamera;                  // The currently streaming camera
-    FrameObserver*      m_pFrameObserver;           // Every camera has its own frame observer
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/BaseException.h b/VimbaCPP/Examples/AsynchronousGrab/Console/Source/BaseException.h
deleted file mode 100644
index 3f9802cedd3859acc211a92d15d4beda037b1a29..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/BaseException.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        BaseException.h
-
-  Description:
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef BASE_EXCEPTION_H_
-#define BASE_EXCEPTION_H_
-
-#include <exception>
-#include <string>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class BaseException: public std::exception
-{
-    std::string     m_Function;
-    std::string     m_Message;
-    VmbErrorType    m_Result;
-public:
-    BaseException( const char* const &fun, const char* const& msg, VmbErrorType result )
-        : m_Result ( result )
-    {
-        try
-        {
-            if( NULL != fun)
-            {
-                m_Function = std::string( fun );
-            }
-        }
-        catch(...) {}
-        try
-        {
-            if( NULL != msg)
-            {
-                m_Message = std::string( msg );
-            }
-        }
-        catch(...) {}
-    }
-    ~BaseException() throw()
-    {}
-    const std::string& Function() const
-    {
-        return m_Function;
-    }
-    const std::string& Message() const
-    {
-        return m_Message;
-    }
-    VmbErrorType Result() const
-    {
-        return m_Result;
-    }
-};
-
-}}}
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/FrameObserver.cpp b/VimbaCPP/Examples/AsynchronousGrab/Console/Source/FrameObserver.cpp
deleted file mode 100644
index 8e7198c1654fa4159553fe30dd0b17a8b081d724..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/FrameObserver.cpp
+++ /dev/null
@@ -1,370 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameObserver.cpp
-
-  Description: The frame observer that is used for notifications from VimbaCPP
-               regarding the arrival of a newly acquired frame.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-#include <iomanip>
-#ifdef WIN32
-#include <Windows.h>
-#else
-#include <time.h>
-#endif //WIN32
-
-#include "FrameObserver.h"
-
-#include "TransformImage.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//
-// We pass the camera that will deliver the frames to the constructor
-//
-// Parameters:
-//  [in]    pCamera             The camera the frame was queued at
-//  [in]    eFrameInfos         Indicates how the frame will be displayed
-//  [in]    eColorProcessing    Indicates how color processing is applied
-//
-FrameObserver::FrameObserver( CameraPtr pCamera, FrameInfos eFrameInfos, ColorProcessing eColorProcessing, bool bRGBValue )
-    :   IFrameObserver( pCamera )
-    ,   m_eFrameInfos( eFrameInfos )
-    ,   m_bRGB( bRGBValue )
-    ,   m_eColorProcessing( eColorProcessing )
-#ifdef WIN32
-    ,   m_dFrequency( 0.0 )
-#endif //WIN32
-{
-#ifdef WIN32
-    LARGE_INTEGER nFrequency;
-    QueryPerformanceFrequency( &nFrequency );
-    m_dFrequency = (double)nFrequency.QuadPart;
-#endif //WIN32
-}
-
-//
-// Gets the current timestamp for interval measurement
-//
-double FrameObserver::GetTime()
-{
-    double dTime = 0.0;
-
-#ifdef WIN32
-    LARGE_INTEGER nCounter;
-    QueryPerformanceCounter( &nCounter );
-    dTime = ( (double)nCounter.QuadPart ) / m_dFrequency;
-#else
-    //clock_t nTime = times(NULL);
-    //dTime = ((double)(nTime) * 10000.0) / ((double)CLOCKS_PER_SEC);
-    struct timespec now;
-    clock_gettime( CLOCK_REALTIME, &now );
-    dTime = ( (double)now.tv_sec ) + ( (double)now.tv_nsec ) / 1000000000.0;
-#endif //WIN32
-
-    return dTime;
-}
-
-//
-// Prints out frame parameters such as 
-// - width
-// - height
-// - pixel format
-//
-// Parameters:
-//  [in]    pFrame          The frame to work on
-//
-void PrintFrameInfo( const FramePtr &pFrame )
-{
-    std::cout<<" Size:";
-    VmbUint32_t     nWidth = 0;
-    VmbErrorType    res;
-    res = pFrame->GetWidth(nWidth);
-    if( VmbErrorSuccess == res )
-    {
-        std::cout<<nWidth;
-    }
-    else
-    {
-        std::cout<<"?";
-    }
-
-    std::cout<<"x";
-    VmbUint32_t nHeight = 0;
-    res = pFrame->GetHeight(nHeight);
-    if( VmbErrorSuccess == res )
-    {
-        std::cout<< nHeight;
-    }
-    else
-    {
-        std::cout<<"?";
-    }
-
-    std::cout<<" Format:";
-    VmbPixelFormatType ePixelFormat = VmbPixelFormatMono8;
-    res = pFrame->GetPixelFormat( ePixelFormat );
-    if( VmbErrorSuccess == res )
-    {
-        std::cout<<"0x"<<std::hex<<ePixelFormat<<std::dec;
-    }
-    else
-    {
-        std::cout<<"?";
-    }
-}
-
-//
-// Prints out frame status codes as readable status messages
-//
-// Parameters:
-//  [in]    eFrameStatus    The error code to be converted and printed out
-//
-void PrintFrameStatus( VmbFrameStatusType eFrameStatus )
-{
-    switch( eFrameStatus )
-    {
-    case VmbFrameStatusComplete:
-        std::cout<<"Complete";
-        break;
-
-    case VmbFrameStatusIncomplete:
-        std::cout<<"Incomplete";
-        break;
-
-    case VmbFrameStatusTooSmall:
-        std::cout<<"Too small";
-        break;
-
-    case VmbFrameStatusInvalid:
-        std::cout<<"Invalid";
-        break;
-
-    default:
-        std::cout<<"unknown frame status";
-        break;
-    }
-}
-
-//
-// Prints out details of a frame such as
-// - ID
-// - receive status
-// - width, height, pixel format
-// - current frames per second
-//
-// Parameters:
-//  [in]    pFrame          The frame to work on
-//
-void FrameObserver::ShowFrameInfos( const FramePtr &pFrame ) 
-{
-    bool                bShowFrameInfos     = false;
-    VmbUint64_t         nFrameID            = 0;
-    bool                bFrameIDValid       = false;
-    VmbFrameStatusType  eFrameStatus        = VmbFrameStatusComplete;
-    bool                bFrameStatusValid   = false;
-    VmbErrorType        res                 = VmbErrorSuccess;
-    double              dFPS                = 0.0;
-    bool                bFPSValid           = false;
-    VmbUint64_t         nFramesMissing      = 0;
-    if( FrameInfos_Show == m_eFrameInfos )
-    {
-        bShowFrameInfos = true;
-    }
-
-    res = pFrame->GetFrameID( nFrameID );
-    if( VmbErrorSuccess == res )
-    {
-        bFrameIDValid = true;
-
-        if( m_FrameID.IsValid() )
-        {
-            if( nFrameID != ( m_FrameID() + 1 ) )
-            {
-                nFramesMissing = nFrameID - m_FrameID() - 1;
-                if( 1 == nFramesMissing )
-                {
-                    std::cout<<"1 missing frame detected\n";
-                }
-                else
-                {
-                    std::cout<<nFramesMissing<<"missing frames detected\n";
-                }
-            }
-        }
-
-        m_FrameID( nFrameID );
-        double dFrameTime = GetTime();
-        if(     ( m_FrameTime.IsValid() )
-            &&  ( 0 == nFramesMissing ) )
-        {
-            double dTimeDiff = dFrameTime - m_FrameTime();
-            if( dTimeDiff > 0.0 )
-            {
-                dFPS = 1.0 / dTimeDiff;
-                bFPSValid = true;
-            }
-            else
-            {
-                bShowFrameInfos = true;
-            }
-        }
-
-        m_FrameTime( dFrameTime );
-    }
-    else
-    {
-        bShowFrameInfos = true;
-        m_FrameID.Invalidate();
-        m_FrameTime.Invalidate();
-    }
-
-    res = pFrame->GetReceiveStatus( eFrameStatus );
-    if( VmbErrorSuccess == res )
-    {
-        bFrameStatusValid = true;
-
-        if( VmbFrameStatusComplete != eFrameStatus )
-        {
-            bShowFrameInfos = true;
-        }
-    }
-    else
-    {
-        bShowFrameInfos = true;
-    }
-    if( bShowFrameInfos )
-    {
-        std::cout<<"Frame ID:";
-        if( bFrameIDValid )
-        {
-            std::cout<<nFrameID;
-        }
-        else
-        {
-            std::cout<<"?";
-        }
-
-        std::cout<<" Status:";
-        if( bFrameStatusValid )
-        {
-            PrintFrameStatus( eFrameStatus);
-        }
-        else
-        {
-            std::cout<<"?";
-        }
-        PrintFrameInfo( pFrame );
-        
-        std::cout<<" FPS:";
-        if( bFPSValid )
-        {
-            std::streamsize s = std::cout.precision();
-            std::cout<<std::fixed<<std::setprecision(2)<<dFPS<<std::setprecision(s);
-        }
-        else
-        {
-            std::cout<<"?";
-        }
-
-        std::cout<<"\n";
-    }
-    else
-    {
-        std::cout<<".";
-    }
-}
-
-//
-// This is our callback routine that will be executed on every received frame.
-// Triggered by the API.
-//
-// Parameters:
-//  [in]    pFrame          The frame returned from the API
-//
-void FrameObserver::FrameReceived( const FramePtr pFrame )
-{
-    if(! SP_ISNULL( pFrame ) )
-    {
-        if( FrameInfos_Off != m_eFrameInfos )
-        {
-            ShowFrameInfos( pFrame);
-        }
-        VmbFrameStatusType status;
-        VmbErrorType Result;
-        Result = SP_ACCESS( pFrame)->GetReceiveStatus( status);
-        if( VmbErrorSuccess == Result && VmbFrameStatusComplete == status)
-        {
-            std::vector<VmbUchar_t> TransformedData;
-            if ( m_bRGB )
-            {
-                switch( m_eColorProcessing )
-                {
-                default:
-                    Result = VmbErrorBadParameter;
-                    std::cout<<"unknown color processing parameter\n";
-                    break;
-                case ColorProcessing_Off:
-                    Result = TransformImage( pFrame, TransformedData, "RGB24" );
-                    break;
-                case ColorProcessing_Matrix:
-                    {
-                        std::cout<<"Color Transform\n";
-                        const VmbFloat_t Matrix[] = {   0.6f, 0.3f, 0.1f, 
-                                                        0.6f, 0.3f, 0.1f, 
-                                                        0.6f, 0.3f, 0.1f};
-                        Result = TransformImage( pFrame, TransformedData,"BGR24", Matrix );
-                    }
-                    break;
-
-                }
-                if( VmbErrorSuccess == Result && TransformedData.size() >=3 )
-                {
-                    char old_fill_char = std::cout.fill('0');
-                    std::cout<<std::hex <<"R = 0x"<<std::setw(2)<<(int)TransformedData[0]<<" "
-                                        <<"G = 0x"<<std::setw(2)<<(int)TransformedData[1]<<" "
-                                        <<"B = 0x"<<std::setw(2)<<(int)TransformedData[2]<<std::dec<<"\n";
-                    std::cout.fill( old_fill_char );
-                }
-                else
-                {
-                    std::cout<<"Transformation failed.\n";
-                }
-            }
-        }
-        else
-        {
-            std::cout<<"frame incomplete\n";
-        }
-    }
-    else
-    {
-        std::cout <<" frame pointer NULL\n";
-    }
-
-    m_pCamera->QueueFrame( pFrame );
-}
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/FrameObserver.h b/VimbaCPP/Examples/AsynchronousGrab/Console/Source/FrameObserver.h
deleted file mode 100644
index 9bb918a9c76d247a3cc4052abd236f0973ce9f04..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/FrameObserver.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameObserver.h
-
-  Description: The frame observer that is used for notifications from VimbaCPP
-               regarding the arrival of a newly acquired frame.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_FRAMEOBSERVER
-#define AVT_VMBAPI_EXAMPLES_FRAMEOBSERVER
-
-#include <queue>
-#include "VimbaCPP/Include/VimbaCPP.h"
-#include "ProgramConfig.h"
-#ifdef WIN32
-#include <Windows.h>
-#endif //WIN32
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-
-class FrameObserver : virtual public IFrameObserver
-{
-public:
-    //
-    // We pass the camera that will deliver the frames to the constructor
-    //
-    // Parameters:
-    //  [in]    pCamera             The camera the frame was queued at
-    //  [in]    eFrameInfos         Indicates how the frame will be displayed
-    //  [in]    eColorProcessing    Indicates how color processing is applied
-    //
-    FrameObserver( CameraPtr pCamera, FrameInfos eFrameInfos, ColorProcessing eColorProcessing, bool bRGBValue );
-    
-    //
-    // This is our callback routine that will be executed on every received frame.
-    // Triggered by the API.
-    //
-    // Parameters:
-    //  [in]    pFrame          The frame returned from the API
-    //
-    virtual void FrameReceived( const FramePtr pFrame );
-
-private:
-    void ShowFrameInfos( const FramePtr & );
-    double GetTime();
-    template <typename T>
-    class ValueWithState
-    {
-    private:
-        T m_Value;
-        bool m_State;
-    public:
-        ValueWithState()
-            : m_State( false )
-        {}
-        ValueWithState( T &value )
-            : m_Value ( value )
-            , m_State( true )
-        {}
-        const T& operator()() const
-        {
-            return m_Value;
-        }
-        void operator()( const T &value )
-        {
-            m_Value = value;
-            m_State = true;
-        }
-        bool IsValid() const
-        {
-            return m_State;
-        }
-        void Invalidate()
-        {
-            m_State = false;
-        }
-    };
-    const FrameInfos            m_eFrameInfos;
-    const bool                  m_bRGB;
-    const ColorProcessing       m_eColorProcessing;
-    ValueWithState<double>      m_FrameTime;
-    ValueWithState<VmbUint64_t> m_FrameID;
-#ifdef WIN32
-    double      m_dFrequency;
-#endif //WIN32
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ProgramConfig.h b/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ProgramConfig.h
deleted file mode 100644
index f820f10cbaa2eed93d58dc27c32463109e11a44f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/ProgramConfig.h
+++ /dev/null
@@ -1,246 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ProgrammConfig.h
-
-  Description:
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef PROGRAM_CONFIG_H_
-#define PROGRAM_CONFIG_H_
-
-#include <cstring>
-
-#include "BaseException.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class ProgramConfigException: public BaseException
-{
-public:
-    ProgramConfigException( const char* const &fun, const char* const& msg, VmbErrorType result = VmbErrorOther )
-        : BaseException( fun, msg, result )
-    {
-    }
-    ~ProgramConfigException() throw()
-    {}
-};
-
-enum FrameInfos
-{
-    FrameInfos_Off,
-    FrameInfos_Show,
-    FrameInfos_Automatic
-};
-
-enum ColorProcessing
-{
-    ColorProcessing_Off,
-    ColorProcessing_Matrix,
-};
-
-struct ProgramConfig
-{
-    FrameInfos          m_FrameInfos;
-    bool                m_RGBValue;
-    ColorProcessing     m_ColorProcessing;
-    std::string         m_CameraID;
-    bool                m_PrintHelp;
-    bool                m_UseAllocAndAnnounce;
-public:
-    ProgramConfig()
-        : m_FrameInfos(  AVT::VmbAPI::Examples::FrameInfos_Off )
-        , m_RGBValue( false )
-        , m_ColorProcessing( ColorProcessing_Off )
-        , m_PrintHelp( false )
-        , m_UseAllocAndAnnounce( false )
-    {
-    }
-    VmbErrorType ParseCommandline( int argc, char* argv[] )
-    {
-        VmbErrorType    Result          = VmbErrorSuccess;
-        char *          pParameter      = NULL;                         // The command line parameter
-        for( int i = 1; i < argc; ++i )
-        {
-            pParameter = argv[i];
-            if( 0 >= std::strlen( pParameter ))
-            {
-                return VmbErrorBadParameter;
-            }
-
-            if( '/' == pParameter[0] )
-            {
-                if( 0 == std::strcmp( pParameter, "/i" ))
-                {
-                    if(    ( FrameInfos_Off != getFrameInfos() )
-                        || ( getPrintHelp() ))
-                    {
-                        return  VmbErrorBadParameter;
-                    }
-
-                    setFrameInfos( FrameInfos_Show );
-                }
-                else if( 0 == std::strcmp( pParameter, "/a" ))
-                {
-                    if(     ( FrameInfos_Off != getFrameInfos() )
-                        ||  ( getPrintHelp() ))
-                    {
-                        return  VmbErrorBadParameter;
-                    }
-
-                    setFrameInfos( FrameInfos_Automatic );
-                }
-                else if( 0 == std::strcmp( pParameter, "/h" ))
-                {
-                    if(     ( ! getCameraID().empty() )
-                        ||  ( getPrintHelp() )
-                        ||  ( AVT::VmbAPI::Examples::FrameInfos_Off != getFrameInfos() ))
-                    {
-                        return  VmbErrorBadParameter;
-                    }
-
-                    setPrintHelp( true );
-                }
-                else if( 0 == std::strcmp( pParameter, "/r" ))
-                {
-                    if( getPrintHelp() )
-                    {
-                        return  VmbErrorBadParameter;
-                    }
-
-                    setRGBValue( true );
-                }
-                else if( 0 == std::strcmp( pParameter, "/c" ))
-                {
-                    if(     ( ColorProcessing_Off != getColorProcessing() )
-                        ||  ( getPrintHelp() ))
-                    {
-                        return  VmbErrorBadParameter;
-                    }
-
-                    setColorProcessing( ColorProcessing_Matrix );
-                    setRGBValue( true );
-                }
-                else if( 0 == std::strcmp( pParameter, "/x" ))
-                {
-                    if( getPrintHelp() )
-                    {
-                        return  VmbErrorBadParameter;
-                    }
-
-                    setAllocAndAnnounce( true );
-                }
-                else
-                {
-                    return  VmbErrorBadParameter;
-                }
-            }
-            else
-            {
-                if( !getCameraID().empty() )
-                {
-                    return  VmbErrorBadParameter;
-                }
-
-                setCameraID( pParameter );
-            }
-        }
-        return Result;
-    }
-    FrameInfos getFrameInfos() const
-    {
-        return m_FrameInfos;
-    }
-    void setFrameInfos( FrameInfos infos )
-    {
-        m_FrameInfos = infos;
-    }
-    bool getRGBValue() const
-    {
-        return m_RGBValue;
-    }
-    void setRGBValue( bool RGBValue )
-    {
-        m_RGBValue = RGBValue;
-    }
-    ColorProcessing  getColorProcessing() const
-    {
-        return m_ColorProcessing;
-    }
-    void setColorProcessing( ColorProcessing processing )
-    {
-        m_ColorProcessing = processing;
-    }
-	bool getAllocAndAnnounce() const
-	{
-		return m_UseAllocAndAnnounce;
-	}
-	void setAllocAndAnnounce( bool useAllocAndAnnounce )
-	{
-		m_UseAllocAndAnnounce = useAllocAndAnnounce;
-	}
-    const std::string& getCameraID() const
-    {
-        return m_CameraID;
-    }
-    void setCameraID( const std::string &name )
-    {
-        m_CameraID = name;
-    }
-    void setCameraID( const char* const&name )
-    {
-        if( NULL != name )
-        {
-            m_CameraID = std::string( name );
-        }
-        else
-        {
-            throw ProgramConfigException(__FUNCTION__,"null pointer in name parameter", VmbErrorBadParameter);
-        }
-    }
-    bool getPrintHelp() const
-    {
-        return m_PrintHelp;
-    }
-    void setPrintHelp( bool state )
-    {
-        m_PrintHelp = state;
-    }
-    template <typename STREAM_TYPE>
-    static STREAM_TYPE& PrintHelp( STREAM_TYPE &s ) 
-    {
-        s<<"Usage: AsynchronousGrab [CameraID] [/i] [/h]\n";
-        s<<"Parameters: CameraID    ID of the camera to use (using first camera if not specified)\n";
-        s<<"            /i          Show frame infos\n";
-        s<<"            /a          Automatically only show frame infos of corrupt frames\n";
-        s<<"            /h          Print out help\n";
-        s<<"            /r          Convert to RGB and show RGB values\n";
-        s<<"            /c          Color correction (includes /r)\n";
-        s<<"            /x          Use AllocAndAnnounceFrame instead of AnnounceFrame\n";
-        return s;
-    }
-};
-
-}}}
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/TransformImage.h b/VimbaCPP/Examples/AsynchronousGrab/Console/Source/TransformImage.h
deleted file mode 100644
index c6b2f90ad6d3585b4d18e405f0194336ee2e6aa4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/TransformImage.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ImageTransform.h
-
-  Description: Image transformation of Vimba images
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef TRANSFORM_IMAGE_H_
-#define TRANSFORM_IMAGE_H_
-
-#include <vector>
-#include <string>
-
-#include "VmbTransform.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-VmbErrorType TransformImage( const FramePtr & SourceFrame, std::vector<VmbUchar_t> & DestinationData, const std::string &DestinationFormat )
-{
-    if( SP_ISNULL( SourceFrame) )
-    {
-        return VmbErrorBadParameter;
-    }
-    VmbErrorType        Result;
-    VmbPixelFormatType  InputFormat;
-    VmbUint32_t         InputWidth,InputHeight;
-    Result = SP_ACCESS( SourceFrame )->GetPixelFormat( InputFormat ) ;
-    if( VmbErrorSuccess != Result )
-    {
-        return Result;
-    }
-    Result = SP_ACCESS( SourceFrame )->GetWidth( InputWidth );
-    if( VmbErrorSuccess != Result )
-    {
-        return Result;
-    }
-    Result = SP_ACCESS( SourceFrame )->GetHeight( InputHeight );
-    if( VmbErrorSuccess != Result )
-    {
-        return Result;
-    }
-    // Prepare source image
-    VmbImage SourceImage;
-    SourceImage.Size = sizeof( SourceImage );
-    Result = static_cast<VmbErrorType>( VmbSetImageInfoFromPixelFormat( InputFormat, InputWidth, InputHeight, &SourceImage ));
-    if( VmbErrorSuccess != Result )
-    {
-        return Result;
-    }
-    VmbUchar_t *DataBegin = NULL;
-    Result = SP_ACCESS( SourceFrame )->GetBuffer( DataBegin );
-    if( VmbErrorSuccess != Result ) 
-    {
-        return Result;
-    }
-    SourceImage.Data = DataBegin;
-    // Prepare destination image
-    VmbImage DestinationImage;
-    DestinationImage.Size = sizeof( DestinationImage );
-    Result = static_cast<VmbErrorType>( VmbSetImageInfoFromString( DestinationFormat.c_str(), static_cast<VmbUint32_t>(DestinationFormat.size()), InputWidth, InputHeight, &DestinationImage) );
-    if ( VmbErrorSuccess != Result )
-    {
-        return Result;
-    }
-    const size_t ByteCount = ( DestinationImage.ImageInfo.PixelInfo.BitsPerPixel * InputWidth* InputHeight ) / 8 ;
-    DestinationData.resize( ByteCount );
-    DestinationImage.Data = &*DestinationData.begin();
-    // Transform data
-    Result = static_cast<VmbErrorType>( VmbImageTransform( &SourceImage, &DestinationImage, NULL , 0 ));
-    return Result;
-}
-
-VmbErrorType TransformImage( const FramePtr & SourceFrame, std::vector<VmbUchar_t> & DestinationData, const std::string &DestinationFormat, const VmbFloat_t *Matrix )
-{
-    if( SP_ISNULL( SourceFrame ))
-    {
-        return VmbErrorBadParameter;
-    }
-    if ( NULL == Matrix )
-    {
-        return VmbErrorBadParameter;
-    }
-    VmbErrorType        Result;
-    VmbPixelFormatType  InputFormat;
-    VmbUint32_t         InputWidth,InputHeight;
-    Result = SP_ACCESS( SourceFrame )->GetPixelFormat( InputFormat ) ;
-    if( VmbErrorSuccess != Result )
-    {
-        return Result;
-    }
-    Result = SP_ACCESS( SourceFrame )->GetWidth( InputWidth );
-    if( VmbErrorSuccess != Result )
-    {
-        return Result;
-    }
-    Result = SP_ACCESS( SourceFrame )->GetHeight( InputHeight );
-    if( VmbErrorSuccess != Result )
-    {
-        return Result;
-    }
-    // Prepare source image
-    VmbImage SourceImage;
-    SourceImage.Size = sizeof( SourceImage );
-    Result = static_cast<VmbErrorType>( VmbSetImageInfoFromPixelFormat( InputFormat, InputWidth, InputHeight, &SourceImage ));
-    if( VmbErrorSuccess != Result)
-    {
-        return Result;
-    }
-    VmbUchar_t *DataBegin = NULL;
-    Result = SP_ACCESS( SourceFrame )->GetBuffer( DataBegin );
-    if( VmbErrorSuccess != Result ) 
-    {
-        return Result;
-    }
-    SourceImage.Data = DataBegin;
-    // Prepare destination image
-    VmbImage DestinationImage;
-    DestinationImage.Size = sizeof( DestinationImage );
-    Result = static_cast<VmbErrorType>( VmbSetImageInfoFromString( DestinationFormat.c_str(), static_cast<VmbUint32_t>(DestinationFormat.size()), InputWidth, InputHeight, &DestinationImage ));
-    if ( VmbErrorSuccess != Result )
-    {
-        return Result;
-    }
-    const size_t ByteCount = ( DestinationImage.ImageInfo.PixelInfo.BitsPerPixel * InputWidth* InputHeight ) / 8 ;
-    DestinationData.resize( ByteCount );
-    DestinationImage.Data = &*DestinationData.begin();
-    // Setup Transform parameter
-
-    // Transform data
-    VmbTransformInfo TransformInfo;
-    Result = static_cast<VmbErrorType>( VmbSetColorCorrectionMatrix3x3( Matrix, &TransformInfo ));
-    if( VmbErrorSuccess != Result )
-    {
-        return Result;
-    }
-    Result = static_cast<VmbErrorType>( VmbImageTransform( &SourceImage, &DestinationImage, &TransformInfo , 1 ));
-    return Result;
-}
-
-}}}
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/program.cpp b/VimbaCPP/Examples/AsynchronousGrab/Console/Source/program.cpp
deleted file mode 100644
index 93744f32821e299a0e79b42307d4fc475b8aaaa3..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Console/Source/program.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Implementation of main entry point of AsynchronousGrabConsole
-               example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <string>
-#include <cstring>
-#include <iostream>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-#include "ApiController.h"
-
-int main( int argc, char* argv[] )
-{
-    VmbErrorType err = VmbErrorSuccess;
-
-    std::cout<<"///////////////////////////////////////////\n";
-    std::cout<<"/// Vimba API Asynchronous Grab Example ///\n";
-    std::cout<<"///////////////////////////////////////////\n\n";
-
-    //////////////////////
-    //Parse command line//
-    //////////////////////
-    AVT::VmbAPI::Examples::ProgramConfig Config;
-    err = Config.ParseCommandline( argc, argv);
-    //Write out an error if we could not parse the command line
-    if ( VmbErrorBadParameter == err )
-    {
-        std::cout<< "Invalid parameters!\n\n" ;
-        Config.setPrintHelp( true );
-    }
-
-    //Print out help and end program
-    if ( Config.getPrintHelp() )
-    {
-        Config.PrintHelp( std::cout );
-    }
-    else
-    {
-        AVT::VmbAPI::Examples::ApiController apiController;
-        
-        // Print out version of Vimba
-        std::cout<<"Vimba C++ API Version "<<apiController.GetVersion()<<"\n";
-        
-        // Startup Vimba
-        err = apiController.StartUp();        
-        if ( VmbErrorSuccess == err )
-        {
-            if( Config.getCameraID().empty() )
-            {
-                AVT::VmbAPI::CameraPtrVector cameras = apiController.GetCameraList();
-                if( cameras.empty() )
-                {
-                    err = VmbErrorNotFound;
-                }
-                else
-                {
-                    std::string strCameraID;
-                    err = cameras[0]->GetID( strCameraID );
-                    if( VmbErrorSuccess == err )
-                    {
-                        Config.setCameraID( strCameraID );
-                    }
-                }
-            }
-            if ( VmbErrorSuccess == err )
-            {
-                std::cout<<"Opening camera with ID: "<<Config.getCameraID()<<"\n";
-
-                err = apiController.StartContinuousImageAcquisition( Config );
-
-                if ( VmbErrorSuccess == err )
-                {
-                    std::cout<< "Press <enter> to stop acquisition...\n" ;
-                    getchar();
-
-                    apiController.StopContinuousImageAcquisition();
-                }
-            }
-
-            apiController.ShutDown();
-        }
-
-        if ( VmbErrorSuccess == err )
-        {
-            std::cout<<"\nAcquisition stopped.\n" ;
-        }
-        else
-        {
-            std::string strError = apiController.ErrorCodeToMessage( err );
-            std::cout<<"\nAn error occurred: " << strError << "\n";
-        }
-    }
-
-    return err;
-}
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/Makefile b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/Makefile
deleted file mode 100644
index 010e22f97489e61b7124351848dc8133ab6d8df0..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/Makefile
+++ /dev/null
@@ -1,87 +0,0 @@
-PROJECT_NAME            = AsynchronousGrabQt
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/../..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-include $(MAKE_INCLUDE_DIR)/VimbaImageTransform.mk
-include $(MAKE_INCLUDE_DIR)/Qt5.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-		      -I$(EXAMPLES_DIR)  \
-		      -I$(OBJ_DIR)
-
-LIBS                = $(VIMBACPP_LIBS) \
-                      $(VIMBAIMAGETRANSFORM_LIBS) \
-		      $(QTCORE_LIBS) \
-		      $(QTGUI_LIBS) \
-		      $(QTWIDGETS_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS) \
-                      $(VIMBAIMAGETRANSFORM_CFLAGS) \
-                      $(QTCORE_CFLAGS) \
-                      $(QTGUI_CFLAGS) \
-                      $(QTWIDGETS_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ApiController.o \
-					  $(OBJ_DIR)/AsynchronousGrab.o \
-					  $(OBJ_DIR)/CameraObserver.o \
-					  $(OBJ_DIR)/FrameObserver.o \
-					  $(OBJ_DIR)/main.o \
-					  $(OBJ_DIR)/moc_AsynchronousGrab.o \
-					  $(OBJ_DIR)/moc_CameraObserver.o \
-					  $(OBJ_DIR)/moc_FrameObserver.o \
-					  $(OBJ_DIR)/qrc_AsynchronousGrab.o
-
-GEN_HEADERS			= $(OBJ_DIR)/ui_AsynchronousGrab.h
-
-DEPENDENCIES        = VimbaCPP \
-                      VimbaImageTransform \
-		      QtCore \
-		      QtGui \
-		      QtWidgets
-
-$(OBJ_DIR)/moc_%.cpp: $(SOURCE_DIR)/%.h $(OBJ_DIR)
-	$(MOC) -o $@ $<
-
-$(OBJ_DIR)/ui_%.h: $(SOURCE_DIR)/res/%.ui $(OBJ_DIR)
-	$(UIC) -o $@ $<
-
-$(OBJ_DIR)/qrc_%.cpp: $(SOURCE_DIR)/res/%.qrc $(OBJ_DIR)
-	$(RCC) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(OBJ_DIR)/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/AsynchronousGrabQt b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/AsynchronousGrabQt
deleted file mode 100755
index dd7af78b3c1d13a322a96308204c32dd14cd5c14..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/AsynchronousGrabQt and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/libVimbaC.so b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/libVimbaC.so
deleted file mode 100644
index 781383deb7c36a92813b8997376e622b6e3e5a96..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/libVimbaCPP.so b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/libVimbaCPP.so
deleted file mode 100644
index 081afba051f4fc154481cec96cd4af633ca6b7ee..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/libVimbaCPP.so and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/libVimbaImageTransform.so b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/libVimbaImageTransform.so
deleted file mode 100644
index b01c3977a73d785668f7a031b61125ab956e2ed1..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/binary/x86_64bit/libVimbaImageTransform.so and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/ApiController.o b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/ApiController.o
deleted file mode 100644
index d8444c90157ebb976a8ad9e80c02b7ebccabd845..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/ApiController.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/AsynchronousGrab.o b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/AsynchronousGrab.o
deleted file mode 100644
index bc7a4104be09b6b1c31d134457f7b4bee6ce9be8..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/AsynchronousGrab.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/CameraObserver.o b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/CameraObserver.o
deleted file mode 100644
index 604af9cdde9101d7703a16ec939677aab68249cd..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/CameraObserver.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/FrameObserver.o b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/FrameObserver.o
deleted file mode 100644
index 391fe2e9fd0e47c343020b3eececd8fec919ecd9..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/FrameObserver.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/main.o b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/main.o
deleted file mode 100644
index 84814b39c8acf6e0776ec93972869b32912c8ebb..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/main.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/moc_AsynchronousGrab.o b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/moc_AsynchronousGrab.o
deleted file mode 100644
index 9b017bf52194efac7778de3d47ba5e05532b4f12..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/moc_AsynchronousGrab.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/moc_CameraObserver.o b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/moc_CameraObserver.o
deleted file mode 100644
index e42a4d284344869b279cf4f6c377a338d0419e9c..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/moc_CameraObserver.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/moc_FrameObserver.o b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/moc_FrameObserver.o
deleted file mode 100644
index ac3726e9583738b3497d9782108bd47576b060db..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/moc_FrameObserver.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/qrc_AsynchronousGrab.o b/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/qrc_AsynchronousGrab.o
deleted file mode 100644
index 117a6d9a3500faa712cd84b21af887d6013a313e..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Build/Make/object/x86_64bit/qrc_AsynchronousGrab.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/ApiController.cpp b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/ApiController.cpp
deleted file mode 100644
index 5b6e8f92bb44495f891f30fd2e92258cb1110d41..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/ApiController.cpp
+++ /dev/null
@@ -1,340 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ApiController.cpp
-
-  Description: Implementation file for the ApiController helper class that
-               demonstrates how to implement an asynchronous, continuous image
-               acquisition with VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <ApiController.h>
-#include <sstream>
-#include <iostream>
-#include "Common/StreamSystemInfo.h"
-#include "Common/ErrorCodeToMessage.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-enum    { NUM_FRAMES=3, };
-
-ApiController::ApiController()
-    // Get a reference to the Vimba singleton
-    : m_system( VimbaSystem::GetInstance() )
-{
-}
-
-ApiController::~ApiController()
-{
-}
-
-//
-// Translates Vimba error codes to readable error messages
-//
-// Parameters:
-//  [in]    eErr        The error code to be converted to string
-//
-// Returns:
-//  A descriptive string representation of the error code
-//
-std::string ApiController::ErrorCodeToMessage( VmbErrorType eErr ) const
-{
-    return AVT::VmbAPI::Examples::ErrorCodeToMessage( eErr );
-}
-
-//
-// Starts the Vimba API and loads all transport layers
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::StartUp()
-{
-    VmbErrorType res;
-
-    // Start Vimba
-    res = m_system.Startup();
-    if( VmbErrorSuccess == res )
-    {
-        // This will be wrapped in a shared_ptr so we don't delete it
-        SP_SET( m_pCameraObserver , new CameraObserver() );
-        // Register an observer whose callback routine gets triggered whenever a camera is plugged in or out
-        res = m_system.RegisterCameraListObserver( m_pCameraObserver );
-    }
-
-    return res;
-}
-
-//
-// Shuts down the API
-//
-void ApiController::ShutDown()
-{
-    // Release Vimba
-    m_system.Shutdown();
-}
-/*** helper function to set image size to a value that is dividable by modulo 2 and a multiple of the increment.
-\note this is needed because VimbaImageTransform does not support odd values for some input formats
-*/
-inline VmbErrorType SetValueIntMod2( const CameraPtr &camera, const std::string &featureName, VmbInt64_t &storage )
-{
-    VmbErrorType    res;
-    FeaturePtr      pFeature;
-    VmbInt64_t      minValue = 0;
-    VmbInt64_t      maxValue = 0;
-    VmbInt64_t      incrementValue = 0;
-
-    res = SP_ACCESS( camera )->GetFeatureByName( featureName.c_str(), pFeature );
-    if( VmbErrorSuccess != res )
-    {
-        return res;
-    }
-
-    res = SP_ACCESS( pFeature )->GetRange( minValue, maxValue );
-    if( VmbErrorSuccess != res )
-    {
-        return res;
-    }
-
-    res = SP_ACCESS( pFeature )->GetIncrement( incrementValue);
-    if( VmbErrorSuccess != res)
-    {
-        return res;
-    }
-
-    maxValue = maxValue - ( maxValue % incrementValue );
-    if( maxValue % 2 != 0)
-    {
-        maxValue -= incrementValue;
-    }
-
-    res = SP_ACCESS( pFeature )->SetValue( maxValue );
-    if( VmbErrorSuccess != res )
-    {
-        return res;
-    }
-
-    storage = maxValue;
-    return res;
-}
-
-//
-// Opens the given camera
-// Sets the maximum possible Ethernet packet size
-// Adjusts the image format
-// Sets up the observer that will be notified on every incoming frame
-// Calls the API convenience function to start image acquisition
-// Closes the camera in case of failure
-//
-// Parameters:
-//  [in]    rStrCameraID    The ID of the camera to open as reported by Vimba
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::StartContinuousImageAcquisition( const std::string &rStrCameraID )
-{
-    // Open the desired camera by its ID
-    VmbErrorType res = m_system.OpenCameraByID( rStrCameraID.c_str(), VmbAccessModeFull, m_pCamera );
-    if( VmbErrorSuccess == res )
-    {
-        // Set the GeV packet size to the highest possible value
-        // (In this example we do not test whether this cam actually is a GigE cam)
-        FeaturePtr pCommandFeature;
-        if( VmbErrorSuccess == SP_ACCESS( m_pCamera )->GetFeatureByName( "GVSPAdjustPacketSize", pCommandFeature ) )
-        {
-            if( VmbErrorSuccess == SP_ACCESS( pCommandFeature )->RunCommand() )
-            {
-                bool bIsCommandDone = false;
-                do
-                {
-                    if( VmbErrorSuccess != SP_ACCESS( pCommandFeature )->IsCommandDone( bIsCommandDone ) )
-                    {
-                        break;
-                    }
-                } while( false == bIsCommandDone );
-            }
-        }
-        res = SetValueIntMod2( m_pCamera,"Width", m_nWidth );
-        if( VmbErrorSuccess == res )
-        {
-            res = SetValueIntMod2( m_pCamera, "Height", m_nHeight );
-            if( VmbErrorSuccess == res )
-            {
-                // Store currently selected image format
-                FeaturePtr pFormatFeature;
-                res = SP_ACCESS( m_pCamera )->GetFeatureByName( "PixelFormat", pFormatFeature );
-                if( VmbErrorSuccess == res )
-                {
-                    res = SP_ACCESS( pFormatFeature )->GetValue( m_nPixelFormat );
-                    if ( VmbErrorSuccess == res )
-                    {
-                        // Create a frame observer for this camera (This will be wrapped in a shared_ptr so we don't delete it)
-                        SP_SET( m_pFrameObserver , new FrameObserver( m_pCamera ) );
-                        // Start streaming
-                        res = SP_ACCESS( m_pCamera )->StartContinuousImageAcquisition( NUM_FRAMES,  m_pFrameObserver );
-                    }
-                }
-            }
-        }
-        if ( VmbErrorSuccess != res )
-        {
-            // If anything fails after opening the camera we close it
-            SP_ACCESS( m_pCamera )->Close();
-        }
-    }
-
-    return res;
-}
-
-//
-// Calls the API convenience function to stop image acquisition
-// Closes the camera
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::StopContinuousImageAcquisition()
-{
-    // Stop streaming
-    SP_ACCESS( m_pCamera )->StopContinuousImageAcquisition();
-
-    // Close camera
-    return  m_pCamera->Close();
-}
-
-//
-// Gets all cameras known to Vimba
-//
-// Returns:
-//  A vector of camera shared pointers
-//
-CameraPtrVector ApiController::GetCameraList()
-{
-    CameraPtrVector cameras;
-    // Get all known cameras
-    if( VmbErrorSuccess == m_system.GetCameras( cameras ) )
-    {
-        // And return them
-        return cameras;
-    }
-    return CameraPtrVector();
-}
-
-//
-// Gets the width of a frame
-//
-// Returns:
-//  The width as integer
-//
-int ApiController::GetWidth() const
-{
-    return static_cast<int>(m_nWidth);
-}
-
-//
-// Gets the height of a frame
-//
-// Returns:
-//  The height as integer
-//
-int ApiController::GetHeight() const
-{
-    return static_cast<int>(m_nHeight);
-}
-
-//
-// Gets the pixel format of a frame
-//
-// Returns:
-//  The pixel format as enum
-//
-VmbPixelFormatType ApiController::GetPixelFormat() const
-{
-    return static_cast<VmbPixelFormatType>(m_nPixelFormat);
-}
-
-//
-// Gets the oldest frame that has not been picked up yet
-//
-// Returns:
-//  A frame shared pointer
-//
-FramePtr ApiController::GetFrame()
-{
-    return SP_DYN_CAST( m_pFrameObserver, FrameObserver )->GetFrame();
-}
-
-//
-// Clears all remaining frames that have not been picked up
-//
-void ApiController::ClearFrameQueue()
-{
-    SP_DYN_CAST( m_pFrameObserver,FrameObserver )->ClearFrameQueue();
-}
-
-//
-// Queues a given frame to be filled by the API
-//
-// Parameters:
-//  [in]    pFrame          The frame to queue
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::QueueFrame( FramePtr pFrame )
-{
-    return SP_ACCESS( m_pCamera )->QueueFrame( pFrame );
-}
-
-//
-// Returns the camera observer as QObject pointer to connect their signals to the view's slots
-//
-QObject* ApiController::GetCameraObserver()
-{
-    return SP_DYN_CAST( m_pCameraObserver, CameraObserver ).get();
-}
-
-//
-// Returns the frame observer as QObject pointer to connect their signals to the view's slots
-//
-QObject* ApiController::GetFrameObserver()
-{
-    return SP_DYN_CAST( m_pFrameObserver, FrameObserver ).get();
-}
-
-//
-// Gets the version of the Vimba API
-//
-// Returns:
-//  The version as string
-//
-std::string ApiController::GetVersion() const
-{
-    std::ostringstream os;
-    os << m_system;
-    return os.str();
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/ApiController.h b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/ApiController.h
deleted file mode 100644
index 7f62375b8eac6662065a1f765a43b095c9c321d6..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/ApiController.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ApiController.h
-
-  Description: Implementation file for the ApiController helper class that
-               demonstrates how to implement an asynchronous, continuous image
-               acquisition with VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_APICONTROLLER
-#define AVT_VMBAPI_EXAMPLES_APICONTROLLER
-
-#include <string>
-
-#include <VimbaCPP/Include/VimbaCPP.h>
-
-#include <CameraObserver.h>
-#include <FrameObserver.h>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class ApiController
-{
-  public:
-    ApiController();
-    ~ApiController();
-
-    //
-    // Starts the Vimba API and loads all transport layers
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        StartUp();
-
-    //
-    // Shuts down the API
-    //
-    void                ShutDown();
-
-    //
-    // Opens the given camera
-    // Sets the maximum possible Ethernet packet size
-    // Adjusts the image format
-    // Sets up the observer that will be notified on every incoming frame
-    // Calls the API convenience function to start image acquisition
-    // Closes the camera in case of failure
-    //
-    // Parameters:
-    //  [in]    rStrCameraID    The ID of the camera to open as reported by Vimba
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        StartContinuousImageAcquisition( const std::string &rStrCameraID );
-
-    //
-    // Calls the API convenience function to stop image acquisition
-    // Closes the camera
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        StopContinuousImageAcquisition();
-
-    //
-    // Gets the width of a frame
-    //
-    // Returns:
-    //  The width as integer
-    //
-    int                 GetWidth() const;
-
-    //
-    // Gets the height of a frame
-    //
-    // Returns:
-    //  The height as integer
-    //
-    int                 GetHeight() const;
-
-    //
-    // Gets the pixel format of a frame
-    //
-    // Returns:
-    //  The pixel format as enum
-    //
-    VmbPixelFormatType  GetPixelFormat() const;
-
-    //
-    // Gets all cameras known to Vimba
-    //
-    // Returns:
-    //  A vector of camera shared pointers
-    //
-    CameraPtrVector     GetCameraList();
-
-    //
-    // Gets the oldest frame that has not been picked up yet
-    //
-    // Returns:
-    //  A frame shared pointer
-    //
-    FramePtr            GetFrame();
-
-    //
-    // Queues a given frame to be filled by the API
-    //
-    // Parameters:
-    //  [in]    pFrame          The frame to queue
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        QueueFrame( FramePtr pFrame );
-
-    //
-    // Clears all remaining frames that have not been picked up
-    //
-    void                ClearFrameQueue();
-    
-    //
-    // Returns the camera observer as QObject pointer to connect their signals to the view's slots
-    //
-    QObject*            GetCameraObserver();
-
-    //
-    // Returns the frame observer as QObject pointer to connect their signals to the view's slots
-    //
-    QObject*            GetFrameObserver();
-
-    //
-    // Translates Vimba error codes to readable error messages
-    //
-    // Parameters:
-    //  [in]    eErr        The error code to be converted to string
-    //
-    // Returns:
-    //  A descriptive string representation of the error code
-    //
-    std::string         ErrorCodeToMessage( VmbErrorType eErr ) const;
-
-    //
-    // Gets the version of the Vimba API
-    //
-    // Returns:
-    //  The version as string
-    //
-    std::string         GetVersion() const;
-  private:
-    // A reference to our Vimba singleton
-    VimbaSystem&                m_system;
-    // The currently streaming camera
-    CameraPtr                   m_pCamera;
-    // Every camera has its own frame observer
-    IFrameObserverPtr           m_pFrameObserver;
-    // Our camera observer
-    ICameraListObserverPtr      m_pCameraObserver;
-    // The current pixel format
-    VmbInt64_t                  m_nPixelFormat;
-    // The current width
-    VmbInt64_t                  m_nWidth;
-    // The current height
-    VmbInt64_t                  m_nHeight;
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/AsynchronousGrab.cpp b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/AsynchronousGrab.cpp
deleted file mode 100644
index 330695c8a8b2b4c12a7c0636a572fdc33766cfa4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/AsynchronousGrab.cpp
+++ /dev/null
@@ -1,354 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        AsynchronousGrab.cpp
-
-  Description: Qt dialog class for the GUI of the AsynchronousGrab example of
-               VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <sstream>
-
-#include "AsynchronousGrab.h"
-#include "VmbTransform.h"
-#define NUM_COLORS 3
-#define BIT_DEPTH 8
-
-using AVT::VmbAPI::FramePtr;
-using AVT::VmbAPI::CameraPtrVector;
-
-AsynchronousGrab::AsynchronousGrab( QWidget *parent, Qt::WindowFlags flags )
-    : QMainWindow( parent, flags )
-    , m_bIsStreaming( false )
-{
-    ui.setupUi( this );
-    ui.m_LabelStream->setAlignment(Qt::AlignCenter );
-    // Connect GUI events with event handlers
-    QObject::connect( ui.m_ButtonStartStop, SIGNAL( clicked() ), this, SLOT( OnBnClickedButtonStartstop() ) );
-
-    // Start Vimba
-    VmbErrorType err = m_ApiController.StartUp();
-    setWindowTitle( QString( "AsynchronousGrab (Qt version) Vimba C++ API Version " )+ QString::fromStdString( m_ApiController.GetVersion() ) );
-    Log( "Starting Vimba", err );
-
-    if( VmbErrorSuccess == err )
-    {
-        // Connect new camera found event with event handler
-        QObject::connect( m_ApiController.GetCameraObserver(), SIGNAL( CameraListChangedSignal(int) ), this, SLOT( OnCameraListChanged(int) ) );
-
-        // Initially get all connected cameras
-        UpdateCameraListBox();
-        std::stringstream strMsg;
-        strMsg << "Cameras found..." << m_cameras.size();
-        Log(strMsg.str() );
-    }
-}
-
-AsynchronousGrab::~AsynchronousGrab()
-{
-    // if we are streaming stop streaming
-    if( true == m_bIsStreaming )
-    {
-        OnBnClickedButtonStartstop();
-    }
-
-    // Before we close the application we stop Vimba
-    m_ApiController.ShutDown();
-}
-
-void AsynchronousGrab::OnBnClickedButtonStartstop()
-{
-    VmbErrorType err;
-    int nRow = ui.m_ListBoxCameras->currentRow();
-
-    if( -1 < nRow )
-    {
-        if( false == m_bIsStreaming )
-        {
-            // Start acquisition
-            err = m_ApiController.StartContinuousImageAcquisition( m_cameras[nRow] );
-            // Set up Qt image
-            if ( VmbErrorSuccess == err )
-            {
-                m_Image = QImage( m_ApiController.GetWidth(),
-                                  m_ApiController.GetHeight(),
-                                  QImage::Format_RGB888 );
-
-                QObject::connect( m_ApiController.GetFrameObserver(), SIGNAL( FrameReceivedSignal(int) ), this, SLOT( OnFrameReady(int) ) );
-            }
-            Log( "Starting Acquisition", err );
-            m_bIsStreaming = VmbErrorSuccess == err;
-        }
-        else
-        {
-            m_bIsStreaming = false;
-            // Stop acquisition
-            err = m_ApiController.StopContinuousImageAcquisition();
-            // Clear all frames that we have not picked up so far
-            m_ApiController.ClearFrameQueue();
-            m_Image = QImage();
-            Log( "Stopping Acquisition", err );
-        }
-
-        if( false == m_bIsStreaming )
-        {
-            ui.m_ButtonStartStop->setText( QString( "Start Image Acquisition" ) );
-        }
-        else
-        {
-            ui.m_ButtonStartStop->setText( QString( "Stop Image Acquisition" ) );
-        }
-    }
-}
-
-//
-// This event handler (Qt slot) is triggered through a Qt signal posted by the frame observer
-//
-// Parameters:
-//  [in]    status          The frame receive status (complete, incomplete, ...)
-//
-void AsynchronousGrab::OnFrameReady( int status )
-{
-    if( true == m_bIsStreaming )
-    {
-        // Pick up frame
-        FramePtr pFrame = m_ApiController.GetFrame();
-        if( SP_ISNULL( pFrame ) )
-        {
-            Log("frame pointer is NULL, late frame ready message");
-            return;
-        }
-        // See if it is not corrupt
-        if( VmbFrameStatusComplete == status )
-        {
-            VmbUchar_t *pBuffer;
-            VmbErrorType err = SP_ACCESS( pFrame )->GetImage( pBuffer );
-            if( VmbErrorSuccess == err )
-            {
-                VmbUint32_t nSize;
-                err = SP_ACCESS( pFrame )->GetImageSize( nSize );
-                if( VmbErrorSuccess == err )
-                {
-                    VmbPixelFormatType ePixelFormat = m_ApiController.GetPixelFormat();
-                    if( ! m_Image.isNull() )
-                    {
-                        // Copy it
-                        // We need that because Qt might repaint the view after we have released the frame already
-                        if( ui.m_ColorProcessingCheckBox->checkState()==  Qt::Checked )
-                        {
-                            static const VmbFloat_t Matrix[] = {    8.0f, 0.1f, 0.1f, // this matrix just makes a quick color to mono conversion
-                                                                    0.1f, 0.8f, 0.1f,
-                                                                    0.0f, 0.0f, 1.0f };
-                            if( VmbErrorSuccess != CopyToImage( pBuffer,ePixelFormat, m_Image, Matrix ) )
-                            {
-                                ui.m_ColorProcessingCheckBox->setChecked( false );
-                            }
-                        }
-                        else
-                        {
-                            CopyToImage( pBuffer,ePixelFormat, m_Image );
-                        }
-
-                        // Display it
-                        const QSize s = ui.m_LabelStream->size() ;
-                        ui.m_LabelStream->setPixmap( QPixmap::fromImage( m_Image ).scaled(s,Qt::KeepAspectRatio ) );
-                    }
-                }
-            }
-        }
-        else
-        {
-            // If we receive an incomplete image we do nothing but logging
-            Log( "Failure in receiving image", VmbErrorOther );
-        }
-
-        // And queue it to continue streaming
-        m_ApiController.QueueFrame( pFrame );
-    }
-}
-
-//
-// This event handler (Qt slot) is triggered through a Qt signal posted by the camera observer
-//
-// Parameters:
-//  [in]    reason          The reason why the callback of the observer was triggered (plug-in, plug-out, ...)
-//
-void AsynchronousGrab::OnCameraListChanged( int reason )
-{
-    bool bUpdateList = false;
-
-    // We only react on new cameras being found and known cameras being unplugged
-    if( AVT::VmbAPI::UpdateTriggerPluggedIn == reason )
-    {
-        Log( "Camera list changed. A new camera was discovered by Vimba." );
-        bUpdateList = true;
-    }
-    else if( AVT::VmbAPI::UpdateTriggerPluggedOut == reason )
-    {
-        Log( "Camera list changed. A camera was disconnected from Vimba." );
-        if( true == m_bIsStreaming )
-        {
-            OnBnClickedButtonStartstop();
-        }
-        bUpdateList = true;
-    }
-
-    if( true == bUpdateList )
-    {
-        UpdateCameraListBox();
-    }
-
-    ui.m_ButtonStartStop->setEnabled( 0 < m_cameras.size() || m_bIsStreaming );
-}
-
-//
-// Copies the content of a byte buffer to a Qt image with respect to the image's alignment
-//
-// Parameters:
-//  [in]    pInbuffer       The byte buffer as received from the cam
-//  [in]    ePixelFormat    The pixel format of the frame
-//  [out]   OutImage        The filled Qt image
-//
-VmbErrorType AsynchronousGrab::CopyToImage( VmbUchar_t *pInBuffer, VmbPixelFormat_t ePixelFormat, QImage &pOutImage, const float *Matrix /*= NULL */ )
-{
-    const int           nHeight = m_ApiController.GetHeight();
-    const int           nWidth  = m_ApiController.GetWidth();
-
-    VmbImage            SourceImage,DestImage;
-    VmbError_t          Result;
-    SourceImage.Size    = sizeof( SourceImage );
-    DestImage.Size      = sizeof( DestImage );
-
-    Result = VmbSetImageInfoFromPixelFormat( ePixelFormat, nWidth, nHeight, & SourceImage );
-    if( VmbErrorSuccess != Result )
-    {
-        Log( "Could not set source image info", static_cast<VmbErrorType>( Result ) );
-        return static_cast<VmbErrorType>( Result );
-    }
-    QString             OutputFormat;
-    const int           bytes_per_line = pOutImage.bytesPerLine();
-    switch( pOutImage.format() )
-    {
-    default:
-        Log( "unknown output format",VmbErrorBadParameter );
-        return VmbErrorBadParameter;
-    case QImage::Format_RGB888:
-        if( nWidth*3 != bytes_per_line )
-        {
-            Log( "image transform does not support stride",VmbErrorWrongType );
-            return VmbErrorWrongType;
-        }
-        OutputFormat = "RGB24";
-        break;
-    }
-    Result = VmbSetImageInfoFromString( OutputFormat.toStdString().c_str(), OutputFormat.length(),nWidth,nHeight, &DestImage );
-    if( VmbErrorSuccess != Result )
-    {
-        Log( "could not set output image info",static_cast<VmbErrorType>( Result ) );
-        return static_cast<VmbErrorType>( Result );
-    }
-    SourceImage.Data    = pInBuffer;
-    DestImage.Data      = pOutImage.bits();
-    // do color processing?
-    if( NULL != Matrix )
-    {
-        VmbTransformInfo TransformParameter;
-        Result = VmbSetColorCorrectionMatrix3x3( Matrix, &TransformParameter );
-        if( VmbErrorSuccess == Result )
-        {
-            Result = VmbImageTransform( &SourceImage, &DestImage, &TransformParameter,1 );
-        }
-        else
-        {
-            Log( "could not set matrix t o transform info ", static_cast<VmbErrorType>( Result ) );
-            return static_cast<VmbErrorType>( Result );
-        }
-    }
-    else
-    {
-        Result = VmbImageTransform( &SourceImage, &DestImage,NULL,0 );
-    }
-    if( VmbErrorSuccess != Result )
-    {
-        Log( "could not transform image", static_cast<VmbErrorType>( Result ) );
-        return static_cast<VmbErrorType>( Result );
-    }
-    return static_cast<VmbErrorType>( Result );
-}
-
-//
-// Queries and lists all known camera
-//
-void AsynchronousGrab::UpdateCameraListBox()
-{
-    // Get all cameras currently connected to Vimba
-    CameraPtrVector cameras = m_ApiController.GetCameraList();
-
-    // Simply forget about all cameras known so far
-    ui.m_ListBoxCameras->clear();
-    m_cameras.clear();
-
-    // And query the camera details again
-    for(    CameraPtrVector::const_iterator iter = cameras.begin();
-            cameras.end() != iter;
-            ++iter )
-    {
-        std::string strCameraName;
-        std::string strCameraID;
-        if( VmbErrorSuccess != (*iter)->GetName( strCameraName ) )
-        {
-            strCameraName = "[NoName]";
-        }
-        // If for any reason we cannot get the ID of a camera we skip it
-        if( VmbErrorSuccess == (*iter)->GetID( strCameraID ) )
-        {
-            ui.m_ListBoxCameras->addItem( QString::fromStdString( strCameraName + " " +strCameraID ) );
-            m_cameras.push_back( strCameraID );
-        }
-    }
-
-    ui.m_ButtonStartStop->setEnabled( 0 < m_cameras.size() || m_bIsStreaming );
-}
-
-//
-// Prints out a given logging string, error code and the descriptive representation of that error code
-//
-// Parameters:
-//  [in]    strMsg          A given message to be printed out
-//  [in]    eErr            The API status code
-//
-void AsynchronousGrab::Log( std::string strMsg, VmbErrorType eErr )
-{
-    strMsg += "..." + m_ApiController.ErrorCodeToMessage( eErr );
-    ui.m_ListLog->insertItem( 0, QString::fromStdString( strMsg ) );
-}
-
-//
-// Prints out a given logging string
-//
-// Parameters:
-//  [in]    strMsg          A given message to be printed out
-//
-void AsynchronousGrab::Log( std::string strMsg)
-{
-    ui.m_ListLog->insertItem( 0, QString::fromStdString( strMsg ) );
-}
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/AsynchronousGrab.h b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/AsynchronousGrab.h
deleted file mode 100644
index e8855a6eb9468dd6d33d8c140178499024d4e05d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/AsynchronousGrab.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        AsynchronousGrab.h
-
-  Description: Qt dialog class for the GUI of the AsynchronousGrab example of
-               VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef ASYNCHRONOUSGRABQT_H
-#define ASYNCHRONOUSGRABQT_H
-
-#include <QMainWindow>
-#include "ui_AsynchronousGrab.h"
-
-#include <ApiController.h>
-
-using AVT::VmbAPI::Examples::ApiController;
-
-class AsynchronousGrab : public QMainWindow
-{
-    Q_OBJECT
-
-public:
-    AsynchronousGrab( QWidget *parent = 0, Qt::WindowFlags flags = 0 );
-    ~AsynchronousGrab();
-
-private:
-    // The Qt GUI
-    Ui::AsynchronousGrabClass ui;
-    // Our controller that wraps API access
-    ApiController m_ApiController;
-    // A list of known camera IDs
-    std::vector<std::string> m_cameras;
-    // Are we streaming?
-    bool m_bIsStreaming;
-    // Our Qt image to display
-    QImage m_Image;
-
-    //
-    // Queries and lists all known camera
-    //
-    void UpdateCameraListBox();
-    
-    //
-    // Prints out a given logging string, error code and the descriptive representation of that error code
-    //
-    // Parameters:
-    //  [in]    strMsg          A given message to be printed out
-    //  [in]    eErr            The API status code
-    //
-    void Log( std::string strMsg, VmbErrorType eErr );
-
-    //
-    // Prints out a given logging string
-    //
-    // Parameters:
-    //  [in]    strMsg          A given message to be printed out
-    //
-    void Log( std::string strMsg);
-    
-    //
-    // Copies the content of a byte buffer to a Qt image with respect to the image's alignment
-    //
-    // Parameters:
-    //  [in]    pInbuffer       The byte buffer as received from the cam
-    //  [in]    ePixelFormat    The pixel format of the frame
-    //  [out]   OutImage        The filled Qt image
-    //
-    VmbErrorType CopyToImage( VmbUchar_t *pInBuffer, VmbPixelFormat_t ePixelFormat, QImage &pOutImage, const float *Matrix = NULL );
-
-private slots:
-    // The event handler for starting / stopping acquisition
-    void OnBnClickedButtonStartstop();
-    
-    //
-    // This event handler (Qt slot) is triggered through a Qt signal posted by the frame observer
-    //
-    // Parameters:
-    //  [in]    status          The frame receive status (complete, incomplete, ...)
-    //
-    void OnFrameReady( int status );
-    
-    //
-    // This event handler (Qt slot) is triggered through a Qt signal posted by the camera observer
-    //
-    // Parameters:
-    //  [in]    reason          The reason why the callback of the observer was triggered (plug-in, plug-out, ...)
-    //
-    void OnCameraListChanged( int reason );
-};
-
-#endif // ASYNCHRONOUSGRABQT_H
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/CameraObserver.cpp b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/CameraObserver.cpp
deleted file mode 100644
index 275602582941ab4045e05d82c62af8647538bfba..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/CameraObserver.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraObserver.cpp
-
-  Description: The camera observer that is used for notifications from VimbaCPP
-               regarding a change in the camera list.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <CameraObserver.h>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//
-// This is our callback routine that will be executed every time a camera was plugged in or out
-//
-// Parameters:
-//  [in]    pCam            The camera that triggered the callback
-//  [in]    reason          The reason why the callback was triggered
-//
-void CameraObserver::CameraListChanged( CameraPtr pCam, UpdateTriggerType reason )
-{
-    if (    UpdateTriggerPluggedIn == reason
-         || UpdateTriggerPluggedOut == reason )
-    {
-        // Emit the new camera signal
-        emit CameraListChangedSignal( reason );
-    }
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/CameraObserver.h b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/CameraObserver.h
deleted file mode 100644
index 3dcb7f4182b180d3d3740d9c9d911a86439be26c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/CameraObserver.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraObserver.h
-
-  Description: The camera observer that is used for notifications from VimbaCPP
-               regarding a change in the camera list.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_CAMERAOBSERVER
-#define AVT_VMBAPI_EXAMPLES_CAMERAOBSERVER
-
-#include <QObject>
-
-#include <VimbaCPP/Include/VimbaCPP.h>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class CameraObserver : public QObject, public ICameraListObserver
-{
-  Q_OBJECT
-
-  public:
-    //
-    // This is our callback routine that will be executed every time a camera was plugged in or out
-    //
-    // Parameters:
-    //  [in]    pCam            The camera that triggered the callback
-    //  [in]    reason          The reason why the callback was triggered
-    //
-    virtual void CameraListChanged( CameraPtr pCamera, UpdateTriggerType reason );
-
-  signals:
-    //
-    // The camera list changed event (Qt signal) that notifies about a camera change and its reason
-    //
-    // Parameters:
-    //  [out]    reason          The reason why this event was fired
-    //
-    void CameraListChangedSignal( int reason );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/FrameObserver.cpp b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/FrameObserver.cpp
deleted file mode 100644
index 540a4baf8f5baa61de7fd717594997c0d23a3ad0..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/FrameObserver.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameObserver.cpp
-
-  Description: The frame observer that is used for notifications from VimbaCPP
-               regarding the arrival of a newly acquired frame.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <FrameObserver.h>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//
-// This is our callback routine that will be executed on every received frame.
-// Triggered by the API.
-//
-// Parameters:
-//  [in]    pFrame          The frame returned from the API
-//
-void FrameObserver::FrameReceived( const FramePtr pFrame )
-{
-    bool bQueueDirectly = true;
-    VmbFrameStatusType eReceiveStatus;
-
-    if(     0 != receivers(SIGNAL(FrameReceivedSignal(int)) ) 
-        &&  VmbErrorSuccess == pFrame->GetReceiveStatus( eReceiveStatus ) )
-    {
-        // Lock the frame queue
-        m_FramesMutex.lock();
-        // Add frame to queue
-        m_Frames.push( pFrame );
-        // Unlock frame queue
-        m_FramesMutex.unlock();
-        // Emit the frame received signal
-        emit FrameReceivedSignal( eReceiveStatus );
-        bQueueDirectly = false;
-    }
-
-    // If any error occurred we queue the frame without notification
-    if( true == bQueueDirectly )
-    {
-        m_pCamera->QueueFrame( pFrame );
-    }
-}
-
-//
-// After the view has been notified about a new frame it can pick it up.
-// It is then removed from the internal queue
-//
-// Returns:
-//  A shared pointer to the latest frame
-//
-FramePtr FrameObserver::GetFrame()
-{
-    // Lock the frame queue
-    m_FramesMutex.lock();
-    // Pop frame from queue
-    FramePtr res;
-    if( !m_Frames.empty() )
-    {
-        res = m_Frames.front();
-        m_Frames.pop();
-    }
-    // Unlock frame queue
-    m_FramesMutex.unlock();
-    return res;
-}
-
-//
-// Clears the internal (double buffering) frame queue
-//
-void FrameObserver::ClearFrameQueue()
-{
-    // Lock the frame queue
-    m_FramesMutex.lock();
-    // Clear the frame queue and release the memory
-    std::queue<FramePtr> empty;
-    std::swap( m_Frames, empty );
-    // Unlock the frame queue
-    m_FramesMutex.unlock();
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/FrameObserver.h b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/FrameObserver.h
deleted file mode 100644
index 3185eae6a00bc3000353316d3e16df724df7d77e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/FrameObserver.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016  Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameObserver.h
-
-  Description: The frame observer that is used for notifications from VimbaCPP
-               regarding the arrival of a newly acquired frame.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_FRAMEOBSERVER
-#define AVT_VMBAPI_EXAMPLES_FRAMEOBSERVER
-
-#include <queue>
-
-#include <QObject>
-#include <QMutex>
-
-#include <VimbaCPP/Include/VimbaCPP.h>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class FrameObserver : public QObject, virtual public IFrameObserver
-{
-    Q_OBJECT
-
-  public:
-    //
-    // We pass the camera that will deliver the frames to the constructor
-    //
-    // Parameters:
-    //  [in]    pCamera         The camera the frame was queued at
-    //
-    FrameObserver( CameraPtr pCamera ) : IFrameObserver( pCamera ) {;}
-    
-    //
-    // This is our callback routine that will be executed on every received frame.
-    // Triggered by the API.
-    //
-    // Parameters:
-    //  [in]    pFrame          The frame returned from the API
-    //
-    virtual void FrameReceived( const FramePtr pFrame );
-
-    //
-    // After the view has been notified about a new frame it can pick it up.
-    // It is then removed from the internal queue
-    //
-    // Returns:
-    //  A shared pointer to the latest frame
-    //
-    FramePtr GetFrame();
-
-    //
-    // Clears the internal (double buffering) frame queue
-    //
-    void ClearFrameQueue();
-
-  private:
-    // Since a Qt signal cannot contain a whole frame
-    // the frame observer stores all FramePtr
-    std::queue<FramePtr> m_Frames;
-    QMutex m_FramesMutex;
-
-signals:
-    //
-    // The frame received event (Qt signal) that notifies about a new incoming frame
-    //
-    // Parameters:
-    //  [out]   status          The frame receive status
-    //
-    void FrameReceivedSignal( int status );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/main.cpp b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/main.cpp
deleted file mode 100644
index 2559fed927975c303b9ff9cd115143a1c08579c4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/main.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        main.cpp
-
-  Description: The main entry point of the AsynchronousGrab example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "AsynchronousGrab.h"
-#include <QApplication>
-
-int main( int argc, char *argv[] )
-{
-    QApplication a( argc, argv );
-    AsynchronousGrab w;
-    w.show();
-    return a.exec();
-}
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/res/AsynchronousGrab.png b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/res/AsynchronousGrab.png
deleted file mode 100644
index 61642b4ad7c0f625df459957d802053437705d9b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/res/AsynchronousGrab.png and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/res/AsynchronousGrab.qrc b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/res/AsynchronousGrab.qrc
deleted file mode 100644
index e9cd2c683b99832db3adf70f4d28ccfaf591f12c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/res/AsynchronousGrab.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
-    <qresource prefix="/AsynchronousGrabQt">
-        <file>AsynchronousGrab.png</file>
-    </qresource>
-</RCC>
diff --git a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/res/AsynchronousGrab.ui b/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/res/AsynchronousGrab.ui
deleted file mode 100644
index 7d6eab2bf3e61b7aae6f18948b68cd2e36ee5026..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/res/AsynchronousGrab.ui
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>AsynchronousGrabClass</class>
- <widget class="QMainWindow" name="AsynchronousGrabClass">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>1040</width>
-    <height>780</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>1040</width>
-    <height>780</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>1040</width>
-    <height>780</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>AsynchronousGrab (Qt version)</string>
-  </property>
-  <property name="windowIcon">
-   <iconset resource="AsynchronousGrab.qrc">
-    <normaloff>:/AsynchronousGrabQt/AsynchronousGrab.png</normaloff>:/AsynchronousGrabQt/AsynchronousGrab.png</iconset>
-  </property>
-  <widget class="QWidget" name="centralWidget">
-   <widget class="QListWidget" name="m_ListBoxCameras">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>10</y>
-      <width>261</width>
-      <height>491</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QListWidget" name="m_ListLog">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>580</y>
-      <width>1041</width>
-      <height>191</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QPushButton" name="m_ButtonStartStop">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>540</y>
-      <width>261</width>
-      <height>31</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>Start Image Acquisition</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="m_LabelStream">
-    <property name="geometry">
-     <rect>
-      <x>270</x>
-      <y>10</y>
-      <width>771</width>
-      <height>561</height>
-     </rect>
-    </property>
-    <property name="sizePolicy">
-     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-      <horstretch>0</horstretch>
-      <verstretch>0</verstretch>
-     </sizepolicy>
-    </property>
-    <property name="text">
-     <string/>
-    </property>
-   </widget>
-   <widget class="QCheckBox" name="m_ColorProcessingCheckBox">
-    <property name="geometry">
-     <rect>
-      <x>140</x>
-      <y>510</y>
-      <width>121</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>ColorProcessing</string>
-    </property>
-   </widget>
-  </widget>
- </widget>
- <layoutdefault spacing="6" margin="11"/>
- <resources>
-  <include location="AsynchronousGrab.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/VimbaCPP/Examples/AsynchronousGrab/notes b/VimbaCPP/Examples/AsynchronousGrab/notes
deleted file mode 100644
index 6d429cd385a228b1a9e760c6bd256e2ed3f6a62b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousGrab/notes
+++ /dev/null
@@ -1,25 +0,0 @@
-## add includes to ECC
-// in PackageSettings->EasyClangComplete
-common_flags : [
-"-I~/vimba_5_1/VimbaCPP/Examples",
-"-I~/vimba_5_1/VimbaCPP/Include",
-"-I~/vimba_5_1",
-"-I/usr/local/Qt-5.15.0/include",
-"-I/usr/local/Qt-5.15.0/include/QtWidgets",
-// ...
-]
-
-## upgrade to Qt5
-> Makefile: add QtWidgets to libs / cflags / dependencies
-> change Qt to Qt5 for pkgcfg modules
-
-## add to .bashrc
-Qt_Path=/usr/local/Qt-5.15.0
-PATH=$PATH:${Qt_Path}/bin // for moc,uic,...
-export PKG_CONFIG_PATH=/usr/local/${Qt_Path}/lib/pkgconfig:$PKG_CONFIG_PATH
-	export LD_LIBRARY_PATH=/usr/local/lib:${Qt_Path}/lib:$LD_LIBRARY_PATH
-
-## MISC
-../../../../../Examples/Build/Make
-pkg-config --print-variables Qt5Core
-pkg-config --libs --cflags Qt5Core
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/Makefile b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/Makefile
deleted file mode 100644
index a7694eb74acfc7e6af77958ef00c27b8b31baa4b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/Makefile
+++ /dev/null
@@ -1,98 +0,0 @@
-PROJECT_NAME            = AsynchronousOpenCVRecorder
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/../..
-VIMBASDK_DIR			      = $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-include $(MAKE_INCLUDE_DIR)/VimbaImageTransform.mk
-include $(MAKE_INCLUDE_DIR)/Qt6.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-		      -I$(EXAMPLES_DIR)  \
-		      -I$(OBJ_DIR)
-
-
-OPENCV_CFLAGS       = $(shell $(PKGCFG) --cflags opencv4)
-
-OPENCV_LIBS         = $(shell $(PKGCFG) --libs opencv4)
-
-
-
-LIBS                = $(VIMBACPP_LIBS) \
-                      $(VIMBAIMAGETRANSFORM_LIBS) \
-                      $(QTCORE_LIBS) \
-                      $(QTGUI_LIBS) \
-                      $(QTWIDGETS_LIBS) \
-                      $(OPENCV_LIBS)
-
-DEFINES             =
-
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS) \
-                      $(VIMBAIMAGETRANSFORM_CFLAGS) \
-                      $(QTCORE_CFLAGS) \
-                      $(QTGUI_CFLAGS) \
-                      $(QTWIDGETS_CFLAGS) \
-                      $(OPENCV_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ApiController.o \
-                      $(OBJ_DIR)/AsynchronousOpenCVRecorder.o \
-                      $(OBJ_DIR)/CameraObserver.o \
-                      $(OBJ_DIR)/FrameObserver.o \
-                      $(OBJ_DIR)/main.o \
-                      $(OBJ_DIR)/moc_AsynchronousOpenCVRecorder.o \
-                      $(OBJ_DIR)/moc_CameraObserver.o \
-                      $(OBJ_DIR)/moc_FrameObserver.o \
-                      $(OBJ_DIR)/moc_OpenCVVideoRecorder.o \
-                      $(OBJ_DIR)/qrc_AsynchronousOpenCVRecorder.o
-
-GEN_HEADERS			= $(OBJ_DIR)/ui_AsynchronousOpenCVRecorder.h
-
-DEPENDENCIES        = VimbaCPP \
-                      VimbaImageTransform \
-                      QtCore \
-                      QtGui \
-                      QtWidgets
-
-$(OBJ_DIR)/moc_%.cpp: $(SOURCE_DIR)/%.h $(OBJ_DIR)
-	$(MOC) -o $@ $<
-
-$(OBJ_DIR)/ui_%.h: $(SOURCE_DIR)/res/%.ui $(OBJ_DIR)
-	$(UIC) -o $@ $<
-
-$(OBJ_DIR)/qrc_%.cpp: $(SOURCE_DIR)/res/%.qrc $(OBJ_DIR)
-	$(RCC) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(OBJ_DIR)/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/Readme b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/Readme
deleted file mode 100644
index a9c4e86ea91f1e31ec0a65a8f608c29ec7b02a32..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/Readme
+++ /dev/null
@@ -1,9 +0,0 @@
-build Linux
-requirements:
-	Installed QT 4
-	OpenCV3
-		- Get libopencv-dev package or download from https://github.com/opencv/opencv/archive/3.0.0.tar.gz
-		- Create OpenCV makefile using CMake 
-		- Build OpenCV by calling 'make' or 'make -j' for multithreaded build
-		- Install OpenCV by calling 'sudo make install'
-		For in-depth instructions please refer to: https://docs.opencv.org/3.0.0/d7/d9f/tutorial_linux_install.html
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/AsynchronousOpenCVRecorder b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/AsynchronousOpenCVRecorder
deleted file mode 100755
index 4bb665099cef4a9b6aeae0a51489baf503e8dba8..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/AsynchronousOpenCVRecorder and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/libVimbaC.so b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/libVimbaC.so
deleted file mode 100644
index 781383deb7c36a92813b8997376e622b6e3e5a96..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/libVimbaCPP.so b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/libVimbaCPP.so
deleted file mode 100644
index 081afba051f4fc154481cec96cd4af633ca6b7ee..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/libVimbaCPP.so and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/libVimbaImageTransform.so b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/libVimbaImageTransform.so
deleted file mode 100644
index b01c3977a73d785668f7a031b61125ab956e2ed1..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/binary/x86_64bit/libVimbaImageTransform.so and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/ApiController.o b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/ApiController.o
deleted file mode 100644
index dcc47ba2b35ceb83aad395bc98f4b046fc8c2989..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/ApiController.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/AsynchronousOpenCVRecorder.o b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/AsynchronousOpenCVRecorder.o
deleted file mode 100644
index c96cfdb535b5a2f5649fbcb610517b14f5bf0b30..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/AsynchronousOpenCVRecorder.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/CameraObserver.o b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/CameraObserver.o
deleted file mode 100644
index 28cbc96d701f6c8a0dd209bf25c3e6c098dad913..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/CameraObserver.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/FrameObserver.o b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/FrameObserver.o
deleted file mode 100644
index 149298e35f6d8180dfdeebe7fc43031b2eb2d6eb..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/FrameObserver.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/main.o b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/main.o
deleted file mode 100644
index 566850f8538eb57edf68462176c5e837cfcbdb5a..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/main.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_AsynchronousOpenCVRecorder.o b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_AsynchronousOpenCVRecorder.o
deleted file mode 100644
index 0de13c04305377ca7583ced82d120adfad603c9e..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_AsynchronousOpenCVRecorder.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_CameraObserver.o b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_CameraObserver.o
deleted file mode 100644
index 0c5f4dd951a989419c334ed39ae82d54c08a14e1..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_CameraObserver.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_FrameObserver.o b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_FrameObserver.o
deleted file mode 100644
index 1f3014f89db9308bc8b93ce93be33874b4dcb165..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_FrameObserver.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_OpenCVVideoRecorder.o b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_OpenCVVideoRecorder.o
deleted file mode 100644
index cc4f4729f7ed0a02804e59c670c1f80ee1a4fa2f..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/moc_OpenCVVideoRecorder.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/qrc_AsynchronousOpenCVRecorder.o b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/qrc_AsynchronousOpenCVRecorder.o
deleted file mode 100644
index 3075a5f09e7fd3eead22cfaec93ac6c927a31d5c..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Build/Make/object/x86_64bit/qrc_AsynchronousOpenCVRecorder.o and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/ApiController.cpp b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/ApiController.cpp
deleted file mode 100644
index ce18c52300abc126ff9ac1f2d945d980ef69718b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/ApiController.cpp
+++ /dev/null
@@ -1,342 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ApiController.cpp
-
-  Description: Implementation file for the ApiController helper class that
-               demonstrates how to implement an asynchronous, continuous image
-               acquisition with VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <ApiController.h>
-#include <sstream>
-#include <iostream>
-#include "Common/StreamSystemInfo.h"
-#include "Common/ErrorCodeToMessage.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-enum    { NUM_FRAMES=3, };
-
-ApiController::ApiController()
-    // Get a reference to the Vimba singleton
-    : m_system( VimbaSystem::GetInstance() )
-{
-}
-
-ApiController::~ApiController()
-{
-}
-
-//
-// Translates Vimba error codes to readable error messages
-//
-// Parameters:
-//  [in]    eErr        The error code to be converted to string
-//
-// Returns:
-//  A descriptive string representation of the error code
-//
-std::string ApiController::ErrorCodeToMessage( VmbErrorType eErr ) const
-{
-    return AVT::VmbAPI::Examples::ErrorCodeToMessage( eErr );
-}
-
-//
-// Starts the Vimba API and loads all transport layers
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::StartUp()
-{
-    VmbErrorType res;
-
-    // Start Vimba
-    res = m_system.Startup();
-    if( VmbErrorSuccess == res )
-    {
-        // This will be wrapped in a shared_ptr so we don't delete it
-        SP_SET( m_pCameraObserver , new CameraObserver() );
-        // Register an observer whose callback routine gets triggered whenever a camera is plugged in or out
-        res = m_system.RegisterCameraListObserver( m_pCameraObserver );
-    }
-
-    return res;
-}
-
-//
-// Shuts down the API
-//
-void ApiController::ShutDown()
-{
-    // Release Vimba
-    m_system.Shutdown();
-}
-
-/*** helper function to set image size to a value that is dividable by modulo 2.
-\note this is needed because VimbaImageTransform does not support odd values for some input formats
-*/
-inline VmbErrorType SetValueIntMod2( const CameraPtr &camera, const std::string &featureName, VmbInt64_t &storage )
-{
-    VmbErrorType    res;
-    FeaturePtr      pFeature;
-    res = SP_ACCESS( camera )->GetFeatureByName( featureName.c_str(), pFeature );
-    if( VmbErrorSuccess == res )
-    {
-        VmbInt64_t minValue,maxValue;
-        res = SP_ACCESS( pFeature )->GetRange( minValue,maxValue );
-        if( VmbErrorSuccess == res )
-        {
-            maxValue = ( maxValue>>1 )<<1; // mod 2 dividable
-            res = SP_ACCESS( pFeature )->SetValue( maxValue );
-            if( VmbErrorSuccess == res )
-            {
-                storage = maxValue;
-            }
-        }
-    }
-    return res;
-}
-
-//
-// Opens the given camera
-// Sets the maximum possible Ethernet packet size
-// Adjusts the image format
-// Sets up the observer that will be notified on every incoming frame
-// Calls the API convenience function to start image acquisition
-// Closes the camera in case of failure
-//
-// Parameters:
-//  [in]    rStrCameraID    The ID of the camera to open as reported by Vimba
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::StartContinuousImageAcquisition( const std::string &rStrCameraID )
-{
-    // Open the desired camera by its ID
-    VmbErrorType res = m_system.OpenCameraByID( rStrCameraID.c_str(), VmbAccessModeFull, m_pCamera );
-    if( VmbErrorSuccess == res )
-    {
-        // Set the GeV packet size to the highest possible value
-        // (In this example we do not test whether this cam actually is a GigE cam)
-        FeaturePtr pCommandFeature;
-        if( VmbErrorSuccess == SP_ACCESS( m_pCamera )->GetFeatureByName( "GVSPAdjustPacketSize", pCommandFeature ) )
-        {
-            if( VmbErrorSuccess == SP_ACCESS( pCommandFeature )->RunCommand() )
-            {
-                bool bIsCommandDone = false;
-                do
-                {
-                    if( VmbErrorSuccess != SP_ACCESS( pCommandFeature )->IsCommandDone( bIsCommandDone ) )
-                    {
-                        break;
-                    }
-                } while( false == bIsCommandDone );
-            }
-        }
-        res = SetValueIntMod2( m_pCamera,"Width", m_nWidth );
-        if( VmbErrorSuccess == res )
-        {
-            res = SetValueIntMod2( m_pCamera, "Height", m_nHeight );
-            if( VmbErrorSuccess == res )
-            {
-                m_FPS = 15.0;
-                FeaturePtr pFeatureFPS ;
-                res = SP_ACCESS( m_pCamera )->GetFeatureByName("AcquisitionFrameRateAbs", pFeatureFPS);
-                if( VmbErrorSuccess != res)
-                {
-                    // lets try other
-                    res = SP_ACCESS( m_pCamera )->GetFeatureByName("AcquisitionFrameRate", pFeatureFPS);
-                }
-                if( VmbErrorSuccess == res )
-                {
-                    res = SP_ACCESS(pFeatureFPS)->GetValue( m_FPS );
-                }
-                // Store currently selected image format
-                FeaturePtr pFormatFeature;
-                res = SP_ACCESS( m_pCamera )->GetFeatureByName( "PixelFormat", pFormatFeature );
-                if( VmbErrorSuccess == res )
-                {
-                    res = SP_ACCESS( pFormatFeature )->GetValue( m_nPixelFormat );
-                    if ( VmbErrorSuccess == res )
-                    {
-                        // Create a frame observer for this camera (This will be wrapped in a shared_ptr so we don't delete it)
-                        SP_SET( m_pFrameObserver , new FrameObserver( m_pCamera ) );
-                        // Start streaming
-                        res = SP_ACCESS( m_pCamera )->StartContinuousImageAcquisition( NUM_FRAMES,  m_pFrameObserver );
-                    }
-                }
-            }
-        }
-    }
-
-    return res;
-}
-
-//
-// Calls the API convenience function to stop image acquisition
-// Closes the camera
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::StopContinuousImageAcquisition()
-{
-    // Stop streaming
-    m_pCamera->StopContinuousImageAcquisition();
-
-    // Close camera
-    return  m_pCamera->Close();
-}
-
-//
-// Gets all cameras known to Vimba
-//
-// Returns:
-//  A vector of camera shared pointers
-//
-CameraPtrVector ApiController::GetCameraList()
-{
-    CameraPtrVector cameras;
-    // Get all known cameras
-    if( VmbErrorSuccess == m_system.GetCameras( cameras ) )
-    {
-        // And return them
-        return cameras;
-    }
-    return CameraPtrVector();
-}
-
-//
-// Gets the width of a frame
-//
-// Returns:
-//  The width as integer
-//
-int ApiController::GetWidth() const
-{
-    return static_cast<int>(m_nWidth);
-}
-
-//
-// Gets the height of a frame
-//
-// Returns:
-//  The height as integer
-//
-int ApiController::GetHeight() const
-{
-    return static_cast<int>(m_nHeight);
-}
-
-//
-// Gets the pixel format of a frame
-//
-// Returns:
-//  The pixel format as enum
-//
-VmbPixelFormatType ApiController::GetPixelFormat() const
-{
-    return static_cast<VmbPixelFormatType>(m_nPixelFormat);
-}
-
-//
-// Gets the current frames per second
-//
-// Returns:
-//  Frame rate in Hertz
-//
-double ApiController::GetFPS() const
-{
-    return m_FPS;
-}
-
-//
-// Gets the oldest frame that has not been picked up yet
-//
-// Returns:
-//  A frame shared pointer
-//
-FramePtr ApiController::GetFrame()
-{
-    return SP_DYN_CAST( m_pFrameObserver, FrameObserver )->GetFrame();
-}
-
-//
-// Clears all remaining frames that have not been picked up
-//
-void ApiController::ClearFrameQueue()
-{
-    SP_DYN_CAST( m_pFrameObserver,FrameObserver )->ClearFrameQueue();
-}
-
-//
-// Queues a given frame to be filled by the API
-//
-// Parameters:
-//  [in]    pFrame          The frame to queue
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::QueueFrame( FramePtr pFrame )
-{
-    return SP_ACCESS( m_pCamera )->QueueFrame( pFrame );
-}
-
-//
-// Returns the camera observer as QObject pointer to connect their signals to the view's slots
-//
-QObject* ApiController::GetCameraObserver()
-{
-    return SP_DYN_CAST( m_pCameraObserver, CameraObserver ).get();
-    // so same as
-    // return SP_ACCESS(SP_DYN_CAST( m_pCameraObserver, CameraObserver );
-    // ??
-}
-
-//
-// Returns the frame observer as QObject pointer to connect their signals to the view's slots
-//
-QObject* ApiController::GetFrameObserver()
-{
-    return SP_DYN_CAST( m_pFrameObserver, FrameObserver ).get();
-}
-
-//
-// Gets the version of the Vimba API
-//
-// Returns:
-//  The version as string
-//
-std::string ApiController::GetVersion() const
-{
-    std::ostringstream os;
-    os << m_system;
-    return os.str();
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/ApiController.h b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/ApiController.h
deleted file mode 100644
index 6d9c37535e0dd128480375a810669d3871244a24..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/ApiController.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ApiController.h
-
-  Description: Implementation file for the ApiController helper class that
-               demonstrates how to implement an asynchronous, continuous image
-               acquisition with VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_APICONTROLLER
-#define AVT_VMBAPI_EXAMPLES_APICONTROLLER
-
-#include <string>
-
-#include <VimbaCPP/Include/VimbaCPP.h>
-
-#include <CameraObserver.h>
-#include <FrameObserver.h>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class ApiController
-{
-  public:
-    ApiController();
-    ~ApiController();
-
-    //
-    // Starts the Vimba API and loads all transport layers
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        StartUp();
-
-    //
-    // Shuts down the API
-    //
-    void                ShutDown();
-
-    //
-    // Opens the given camera
-    // Sets the maximum possible Ethernet packet size
-    // Adjusts the image format
-    // Sets up the observer that will be notified on every incoming frame
-    // Calls the API convenience function to start image acquisition
-    // Closes the camera in case of failure
-    //
-    // Parameters:
-    //  [in]    rStrCameraID    The ID of the camera to open as reported by Vimba
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        StartContinuousImageAcquisition( const std::string &rStrCameraID );
-
-    //
-    // Calls the API convenience function to stop image acquisition
-    // Closes the camera
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        StopContinuousImageAcquisition();
-
-    //
-    // Gets the width of a frame
-    //
-    // Returns:
-    //  The width as integer
-    //
-    int                 GetWidth() const;
-
-    //
-    // Gets the height of a frame
-    //
-    // Returns:
-    //  The height as integer
-    //
-    int                 GetHeight() const;
-
-    //
-    // Gets the pixel format of a frame
-    //
-    // Returns:
-    //  The pixel format as enum
-    //
-    VmbPixelFormatType  GetPixelFormat() const;
-
-    //
-    // Gets the current frames per second
-    //
-    // Returns:
-    //  Frame rate in Hertz
-    //
-    double              GetFPS() const;
-
-    //
-    // Gets all cameras known to Vimba
-    //
-    // Returns:
-    //  A vector of camera shared pointers
-    //
-    CameraPtrVector     GetCameraList();
-
-    //
-    // Gets the oldest frame that has not been picked up yet
-    //
-    // Returns:
-    //  A frame shared pointer
-    //
-    FramePtr            GetFrame();
-
-    //
-    // Queues a given frame to be filled by the API
-    //
-    // Parameters:
-    //  [in]    pFrame          The frame to queue
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        QueueFrame( FramePtr pFrame );
-
-    //
-    // Clears all remaining frames that have not been picked up
-    //
-    void                ClearFrameQueue();
-    
-    //
-    // Returns the camera observer as QObject pointer to connect their signals to the view's slots
-    //
-    QObject*            GetCameraObserver();
-
-    //
-    // Returns the frame observer as QObject pointer to connect their signals to the view's slots
-    //
-    QObject*            GetFrameObserver();
-
-    //
-    // Translates Vimba error codes to readable error messages
-    //
-    // Parameters:
-    //  [in]    eErr        The error code to be converted to string
-    //
-    // Returns:
-    //  A descriptive string representation of the error code
-    //
-    std::string         ErrorCodeToMessage( VmbErrorType eErr ) const;
-
-    //
-    // Gets the version of the Vimba API
-    //
-    // Returns:
-    //  The version as string
-    //
-    std::string         GetVersion() const;
-  private:
-    // A reference to our Vimba singleton
-    VimbaSystem&                m_system;
-    // The currently streaming camera
-    CameraPtr                   m_pCamera;
-    // Every camera has its own frame observer
-    IFrameObserverPtr           m_pFrameObserver;
-    // Our camera observer
-    ICameraListObserverPtr      m_pCameraObserver;
-    // The current pixel format
-    VmbInt64_t                  m_nPixelFormat;
-    // The current width
-    VmbInt64_t                  m_nWidth;
-    // The current height
-    VmbInt64_t                  m_nHeight;
-    // The current FPS
-    double                      m_FPS;
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/AsynchronousOpenCVRecorder.cpp b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/AsynchronousOpenCVRecorder.cpp
deleted file mode 100644
index a0bc8d3750db22be9352e04d911a785f22674777..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/AsynchronousOpenCVRecorder.cpp
+++ /dev/null
@@ -1,376 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2015 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        AsynchronousOpenCVRecorder.cpp
-
-  Description: Qt dialog class for the GUI of the AsynchronousOpenCVRecorder
-               example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <sstream>
-
-#include "AsynchronousOpenCVRecorder.h"
-#include "VmbTransform.h"
-#define NUM_COLORS 3
-#define BIT_DEPTH 8
-
-using AVT::VmbAPI::FramePtr;
-using AVT::VmbAPI::CameraPtrVector;
-
-AsynchronousOpenCVRecorder::AsynchronousOpenCVRecorder( QWidget *parent, Qt::WindowFlags flags )
-    : QMainWindow( parent, flags )
-    , m_bIsStreaming( false )
-{
-    ui.setupUi( this );
-    ui.m_LabelStream->setAlignment(Qt::AlignCenter );
-    // Connect GUI events with event handlers
-    QObject::connect( ui.m_ButtonStartStop, SIGNAL( clicked() ), this, SLOT( OnBnClickedButtonStartstop() ) );
-
-    // Start Vimba
-    VmbErrorType err = m_ApiController.StartUp();
-    setWindowTitle( QString( "Asynchronous OpenCV Recorder Vimba C++ API Version " )+ QString::fromStdString( m_ApiController.GetVersion() ) );
-    Log( "Starting Vimba", err );
-
-    if( VmbErrorSuccess == err )
-    {
-        // Connect new camera found event with event handler
-        QObject::connect( m_ApiController.GetCameraObserver(), SIGNAL( CameraListChangedSignal(int) ), this, SLOT( OnCameraListChanged(int) ) );
-
-        // Initially get all connected cameras
-        UpdateCameraListBox();
-        std::stringstream strMsg;
-        strMsg << "Cameras found..." << m_cameras.size();
-        Log(strMsg.str() );
-    }
-}
-
-AsynchronousOpenCVRecorder::~AsynchronousOpenCVRecorder()
-{
-    // if we are streaming stop streaming
-    if( true == m_bIsStreaming )
-        OnBnClickedButtonStartstop();
-
-    // Before we close the application we stop Vimba
-    m_ApiController.ShutDown();
-
-}
-
-void AsynchronousOpenCVRecorder::OnBnClickedButtonStartstop()
-{
-    VmbErrorType err;
-    int nRow = ui.m_ListBoxCameras->currentRow();
-
-    if( -1 < nRow )
-    {
-        if( false == m_bIsStreaming )
-        {
-            // Start acquisition
-            err = m_ApiController.StartContinuousImageAcquisition( m_cameras[nRow] );
-            // Set up Qt image
-            if (    VmbErrorSuccess == err)
-            {
-                VmbUint32_t         Width       = m_ApiController.GetWidth();
-                VmbUint32_t         Height      = m_ApiController.GetHeight();
-                double              FPS         = m_ApiController.GetFPS();
-                try
-                {
-                    m_pVideoRecorder = OpenCVRecorderPtr( new OpenCVRecorder("AsynchronousOpenCVRecorder.avi", FPS, Width,Height) );
-                    m_pVideoRecorder->start();
-                }
-                catch(const BaseException &bex)
-                {
-                    Log( (bex.Function()+" :" + bex.Message() ).toStdString() );
-                }
-                m_Image = QImage( Width, Height, QImage::Format_RGB888 );
-
-                QObject::connect( m_ApiController.GetFrameObserver(), SIGNAL( FrameReceivedSignal(int) ), this, SLOT( OnFrameReady(int) ) );
-            }
-            Log( "Starting Acquisition", err );
-            m_bIsStreaming = VmbErrorSuccess == err;
-        }
-        else
-        {
-            if( !m_pVideoRecorder.isNull() )
-            {
-                m_pVideoRecorder->stopThread();
-                if( ! m_pVideoRecorder->wait( 1000 ) )
-                {
-                    m_pVideoRecorder->terminate();
-                }
-                m_pVideoRecorder.clear();
-            }
-            m_bIsStreaming = false;
-            // Stop acquisition
-            err = m_ApiController.StopContinuousImageAcquisition();
-            // Clear all frames that we have not picked up so far
-            m_ApiController.ClearFrameQueue();
-            m_Image = QImage();
-            Log( "Stopping Acquisition", err );
-        }
-
-        if( false == m_bIsStreaming )
-        {
-            ui.m_ButtonStartStop->setText( QString( "Start Image Acquisition" ) );
-        }
-        else
-        {
-            ui.m_ButtonStartStop->setText( QString( "Stop Image Acquisition" ) );
-        }
-    }
-}
-
-//
-// This event handler (Qt slot) is triggered through a Qt signal posted by the frame observer
-//
-// Parameters:
-//  [in]    status          The frame receive status (complete, incomplete, ...)
-//
-void AsynchronousOpenCVRecorder::OnFrameReady( int status )
-{
-    if( true == m_bIsStreaming )
-    {
-        // Pick up frame
-        FramePtr pFrame = m_ApiController.GetFrame();
-        if( SP_ISNULL( pFrame ) )
-        {
-            Log("frame pointer is NULL, late frame ready message");
-            return;
-        }
-        // See if it is not corrupt
-        if( VmbFrameStatusComplete == status )
-        {
-            if(! m_pVideoRecorder.isNull() )
-            {
-                m_pVideoRecorder->enqueueFrame( *pFrame);
-            }
-            VmbUchar_t *pBuffer;
-            VmbErrorType err = SP_ACCESS( pFrame )->GetImage( pBuffer );
-            if( VmbErrorSuccess == err )
-            {
-                VmbUint32_t nSize;
-                err = SP_ACCESS( pFrame )->GetImageSize( nSize );
-                if( VmbErrorSuccess == err )
-                {
-                    VmbPixelFormatType ePixelFormat = m_ApiController.GetPixelFormat();
-                    if( ! m_Image.isNull() )
-                    {
-                        // Copy it
-                        // We need that because Qt might repaint the view after we have released the frame already
-                        if( ui.m_ColorProcessingCheckBox->checkState()==  Qt::Checked )
-                        {
-                            static const VmbFloat_t Matrix[] = {    8.0f, 0.1f, 0.1f, // this matrix just makes a quick color to mono conversion
-                                                                    0.1f, 0.8f, 0.1f,
-                                                                    0.0f, 0.0f, 1.0f };
-                            if( VmbErrorSuccess != CopyToImage( pBuffer,ePixelFormat, m_Image, Matrix ) )
-                            {
-                                ui.m_ColorProcessingCheckBox->setChecked( false );
-                            }
-                        }
-                        else
-                        {
-                            CopyToImage( pBuffer,ePixelFormat, m_Image );
-                        }
-
-                        // Display it
-                        const QSize s = ui.m_LabelStream->size() ;
-                        ui.m_LabelStream->setPixmap( QPixmap::fromImage( m_Image ).scaled(s,Qt::KeepAspectRatio ) );
-                    }
-                }
-            }
-        }
-        else
-        {
-            // If we receive an incomplete image we do nothing but logging
-            Log( "Failure in receiving image", VmbErrorOther );
-        }
-
-        // And queue it to continue streaming
-        m_ApiController.QueueFrame( pFrame );
-    }
-}
-
-//
-// This event handler (Qt slot) is triggered through a Qt signal posted by the camera observer
-//
-// Parameters:
-//  [in]    reason          The reason why the callback of the observer was triggered (plug-in, plug-out, ...)
-//
-void AsynchronousOpenCVRecorder::OnCameraListChanged( int reason )
-{
-    bool bUpdateList = false;
-
-    // We only react on new cameras being found and known cameras being unplugged
-    if( AVT::VmbAPI::UpdateTriggerPluggedIn == reason )
-    {
-        Log( "Camera list changed. A new camera was discovered by Vimba." );
-        bUpdateList = true;
-    }
-    else if( AVT::VmbAPI::UpdateTriggerPluggedOut == reason )
-    {
-        Log( "Camera list changed. A camera was disconnected from Vimba." );
-        if( true == m_bIsStreaming )
-        {
-            OnBnClickedButtonStartstop();
-        }
-        bUpdateList = true;
-    }
-
-    if( true == bUpdateList )
-    {
-        UpdateCameraListBox();
-    }
-
-    ui.m_ButtonStartStop->setEnabled( 0 < m_cameras.size() || m_bIsStreaming );
-}
-
-//
-// Copies the content of a byte buffer to a Qt image with respect to the image's alignment
-//
-// Parameters:
-//  [in]    pInbuffer       The byte buffer as received from the cam
-//  [in]    ePixelFormat    The pixel format of the frame
-//  [out]   OutImage        The filled Qt image
-//
-VmbErrorType AsynchronousOpenCVRecorder::CopyToImage( VmbUchar_t *pInBuffer, VmbPixelFormat_t ePixelFormat, QImage &pOutImage, const float *Matrix /*= NULL */ )
-{
-    const int           nHeight = m_ApiController.GetHeight();
-    const int           nWidth  = m_ApiController.GetWidth();
-
-    VmbImage            SourceImage,DestImage;
-    VmbError_t          Result;
-    SourceImage.Size    = sizeof( SourceImage );
-    DestImage.Size      = sizeof( DestImage );
-
-    Result = VmbSetImageInfoFromPixelFormat( ePixelFormat, nWidth, nHeight, & SourceImage );
-    if( VmbErrorSuccess != Result )
-    {
-        Log( "Could not set source image info", static_cast<VmbErrorType>( Result ) );
-        return static_cast<VmbErrorType>( Result );
-    }
-    QString             OutputFormat;
-    const int           bytes_per_line = pOutImage.bytesPerLine();
-    switch( pOutImage.format() )
-    {
-    default:
-        Log( "unknown output format",VmbErrorBadParameter );
-        return VmbErrorBadParameter;
-    case QImage::Format_RGB888:
-        if( nWidth*3 != bytes_per_line )
-        {
-            Log( "image transform does not support stride",VmbErrorWrongType );
-            return VmbErrorWrongType;
-        }
-        OutputFormat = "RGB24";
-        break;
-    }
-    Result = VmbSetImageInfoFromString( OutputFormat.toStdString().c_str(), OutputFormat.length(),nWidth,nHeight, &DestImage );
-    if( VmbErrorSuccess != Result )
-    {
-        Log( "could not set output image info",static_cast<VmbErrorType>( Result ) );
-        return static_cast<VmbErrorType>( Result );
-    }
-    SourceImage.Data    = pInBuffer;
-    DestImage.Data      = pOutImage.bits();
-    // do color processing?
-    if( NULL != Matrix )
-    {
-        VmbTransformInfo TransformParameter;
-        Result = VmbSetColorCorrectionMatrix3x3( Matrix, &TransformParameter );
-        if( VmbErrorSuccess == Result )
-        {
-            Result = VmbImageTransform( &SourceImage, &DestImage, &TransformParameter,1 );
-        }
-        else
-        {
-            Log( "could not set matrix t o transform info ", static_cast<VmbErrorType>( Result ) );
-            return static_cast<VmbErrorType>( Result );
-        }
-    }
-    else
-    {
-        Result = VmbImageTransform( &SourceImage, &DestImage,NULL,0 );
-    }
-    if( VmbErrorSuccess != Result )
-    {
-        Log( "could not transform image", static_cast<VmbErrorType>( Result ) );
-        return static_cast<VmbErrorType>( Result );
-    }
-    return static_cast<VmbErrorType>( Result );
-}
-
-//
-// Queries and lists all known camera
-//
-void AsynchronousOpenCVRecorder::UpdateCameraListBox()
-{
-    // Get all cameras currently connected to Vimba
-    CameraPtrVector cameras = m_ApiController.GetCameraList();
-
-    // Simply forget about all cameras known so far
-    ui.m_ListBoxCameras->clear();
-    m_cameras.clear();
-
-    // And query the camera details again
-    for( CameraPtrVector::const_iterator iter = cameras.begin();
-            cameras.end() != iter;
-            ++iter )
-    {
-        std::string strCameraName;
-        std::string strCameraID;
-        if( VmbErrorSuccess != (*iter)->GetName( strCameraName ) )
-        {
-            strCameraName = "[NoName]";
-        }
-        // If for any reason we cannot get the ID of a camera we skip it
-        if( VmbErrorSuccess == (*iter)->GetID( strCameraID ) )
-        {
-            ui.m_ListBoxCameras->addItem( QString::fromStdString( strCameraName + " " +strCameraID ) );
-            m_cameras.push_back( strCameraID );
-        }
-    }
-
-    ui.m_ButtonStartStop->setEnabled( 0 < m_cameras.size() || m_bIsStreaming );
-}
-
-//
-// Prints out a given logging string, error code and the descriptive representation of that error code
-//
-// Parameters:
-//  [in]    strMsg          A given message to be printed out
-//  [in]    eErr            The API status code
-//
-void AsynchronousOpenCVRecorder::Log( std::string strMsg, VmbErrorType eErr )
-{
-    strMsg += "..." + m_ApiController.ErrorCodeToMessage( eErr );
-    ui.m_ListLog->insertItem( 0, QString::fromStdString( strMsg ) );
-}
-
-//
-// Prints out a given logging string
-//
-// Parameters:
-//  [in]    strMsg          A given message to be printed out
-//
-void AsynchronousOpenCVRecorder::Log( std::string strMsg)
-{
-    ui.m_ListLog->insertItem( 0, QString::fromStdString( strMsg ) );
-}
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/AsynchronousOpenCVRecorder.h b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/AsynchronousOpenCVRecorder.h
deleted file mode 100644
index b25d751bc9f2a1747202197eb2b0286ab40da134..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/AsynchronousOpenCVRecorder.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2015 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        AsynchronousOpenCVRecorder.h
-
-  Description: Qt dialog class for the GUI of the AsynchronousOpenCVRecorder 
-               example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef ASYNCHRONOUSOPENCVRECORDER_H
-#define ASYNCHRONOUSOPENCVRECORDER_H
-
-#include <QMainWindow>
-#include "ui_AsynchronousOpenCVRecorder.h"
-
-#include <ApiController.h>
-#include "OpenCVVideoRecorder.h"
-using AVT::VmbAPI::Examples::ApiController;
-
-class AsynchronousOpenCVRecorder : public QMainWindow
-{
-    Q_OBJECT
-
-public:
-    AsynchronousOpenCVRecorder( QWidget *parent = 0, Qt::WindowFlags flags = (Qt::WindowFlags)0 );
-    ~AsynchronousOpenCVRecorder();
-
-private:
-    typedef QSharedPointer<OpenCVRecorder> OpenCVRecorderPtr;
-    OpenCVRecorderPtr m_pVideoRecorder;
-    // The Qt GUI
-    Ui::AsynchronousOpenCVRecorderClass ui;
-    // Our controller that wraps API access
-    ApiController m_ApiController;
-    // A list of known camera IDs
-    std::vector<std::string> m_cameras;
-    // Are we streaming?
-    bool m_bIsStreaming;
-    // Our Qt image to display
-    QImage m_Image;
-
-    //
-    // Queries and lists all known camera
-    //
-    void UpdateCameraListBox();
-    
-    //
-    // Prints out a given logging string, error code and the descriptive representation of that error code
-    //
-    // Parameters:
-    //  [in]    strMsg          A given message to be printed out
-    //  [in]    eErr            The API status code
-    //
-    void Log( std::string strMsg, VmbErrorType eErr );
-
-    //
-    // Prints out a given logging string
-    //
-    // Parameters:
-    //  [in]    strMsg          A given message to be printed out
-    //
-    void Log( std::string strMsg);
-    
-    //
-    // Copies the content of a byte buffer to a Qt image with respect to the image's alignment
-    //
-    // Parameters:
-    //  [in]    pInbuffer       The byte buffer as received from the cam
-    //  [in]    ePixelFormat    The pixel format of the frame
-    //  [out]   OutImage        The filled Qt image
-    //
-    VmbErrorType CopyToImage( VmbUchar_t *pInBuffer, VmbPixelFormat_t ePixelFormat, QImage &pOutImage, const float *Matrix = NULL );
-
-private slots:
-    // The event handler for starting / stopping acquisition
-    void OnBnClickedButtonStartstop();
-    
-    //
-    // This event handler (Qt slot) is triggered through a Qt signal posted by the frame observer
-    //
-    // Parameters:
-    //  [in]    status          The frame receive status (complete, incomplete, ...)
-    //
-    void OnFrameReady( int status );
-    
-    //
-    // This event handler (Qt slot) is triggered through a Qt signal posted by the camera observer
-    //
-    // Parameters:
-    //  [in]    reason          The reason why the callback of the observer was triggered (plug-in, plug-out, ...)
-    //
-    void OnCameraListChanged( int reason );
-};
-
-#endif // ASYNCHRONOUSOPENCVRECORDER_H
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/CameraObserver.cpp b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/CameraObserver.cpp
deleted file mode 100644
index 275602582941ab4045e05d82c62af8647538bfba..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/CameraObserver.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraObserver.cpp
-
-  Description: The camera observer that is used for notifications from VimbaCPP
-               regarding a change in the camera list.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <CameraObserver.h>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//
-// This is our callback routine that will be executed every time a camera was plugged in or out
-//
-// Parameters:
-//  [in]    pCam            The camera that triggered the callback
-//  [in]    reason          The reason why the callback was triggered
-//
-void CameraObserver::CameraListChanged( CameraPtr pCam, UpdateTriggerType reason )
-{
-    if (    UpdateTriggerPluggedIn == reason
-         || UpdateTriggerPluggedOut == reason )
-    {
-        // Emit the new camera signal
-        emit CameraListChangedSignal( reason );
-    }
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/CameraObserver.h b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/CameraObserver.h
deleted file mode 100644
index 683de30ce14951c9681c8b71c8762f66ffb979eb..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/CameraObserver.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraObserver.h
-
-  Description: The camera observer that is used for notifications from VimbaCPP
-               regarding a change in the camera list.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_CAMERAOBSERVER
-#define AVT_VMBAPI_EXAMPLES_CAMERAOBSERVER
-
-#include <QObject>
-
-#include <VimbaCPP/Include/VimbaCPP.h>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class CameraObserver : public QObject, public ICameraListObserver
-{
-    Q_OBJECT
-
-  public:
-    //
-    // This is our callback routine that will be executed every time a camera was plugged in or out
-    //
-    // Parameters:
-    //  [in]    pCam            The camera that triggered the callback
-    //  [in]    reason          The reason why the callback was triggered
-    //
-    virtual void CameraListChanged( CameraPtr pCamera, UpdateTriggerType reason );
-
-  signals:
-    //
-    // The camera list changed event (Qt signal) that notifies about a camera change and its reason
-    //
-    // Parameters:
-    //  [out]    reason          The reason why this event was fired
-    //
-    void CameraListChangedSignal( int reason );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/FrameObserver.cpp b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/FrameObserver.cpp
deleted file mode 100644
index 540a4baf8f5baa61de7fd717594997c0d23a3ad0..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/FrameObserver.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameObserver.cpp
-
-  Description: The frame observer that is used for notifications from VimbaCPP
-               regarding the arrival of a newly acquired frame.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <FrameObserver.h>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//
-// This is our callback routine that will be executed on every received frame.
-// Triggered by the API.
-//
-// Parameters:
-//  [in]    pFrame          The frame returned from the API
-//
-void FrameObserver::FrameReceived( const FramePtr pFrame )
-{
-    bool bQueueDirectly = true;
-    VmbFrameStatusType eReceiveStatus;
-
-    if(     0 != receivers(SIGNAL(FrameReceivedSignal(int)) ) 
-        &&  VmbErrorSuccess == pFrame->GetReceiveStatus( eReceiveStatus ) )
-    {
-        // Lock the frame queue
-        m_FramesMutex.lock();
-        // Add frame to queue
-        m_Frames.push( pFrame );
-        // Unlock frame queue
-        m_FramesMutex.unlock();
-        // Emit the frame received signal
-        emit FrameReceivedSignal( eReceiveStatus );
-        bQueueDirectly = false;
-    }
-
-    // If any error occurred we queue the frame without notification
-    if( true == bQueueDirectly )
-    {
-        m_pCamera->QueueFrame( pFrame );
-    }
-}
-
-//
-// After the view has been notified about a new frame it can pick it up.
-// It is then removed from the internal queue
-//
-// Returns:
-//  A shared pointer to the latest frame
-//
-FramePtr FrameObserver::GetFrame()
-{
-    // Lock the frame queue
-    m_FramesMutex.lock();
-    // Pop frame from queue
-    FramePtr res;
-    if( !m_Frames.empty() )
-    {
-        res = m_Frames.front();
-        m_Frames.pop();
-    }
-    // Unlock frame queue
-    m_FramesMutex.unlock();
-    return res;
-}
-
-//
-// Clears the internal (double buffering) frame queue
-//
-void FrameObserver::ClearFrameQueue()
-{
-    // Lock the frame queue
-    m_FramesMutex.lock();
-    // Clear the frame queue and release the memory
-    std::queue<FramePtr> empty;
-    std::swap( m_Frames, empty );
-    // Unlock the frame queue
-    m_FramesMutex.unlock();
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/FrameObserver.h b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/FrameObserver.h
deleted file mode 100644
index a0440f11374a87b0dd28c979ee30d49697cd703a..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/FrameObserver.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameObserver.h
-
-  Description: The frame observer that is used for notifications from VimbaCPP
-               regarding the arrival of a newly acquired frame.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_FRAMEOBSERVER
-#define AVT_VMBAPI_EXAMPLES_FRAMEOBSERVER
-
-#include <queue>
-
-#include <QObject>
-#include <QMutex>
-
-#include <VimbaCPP/Include/VimbaCPP.h>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//Why VIRTUAL inheritance?? https://www.sandordargo.com/blog/2020/12/23/virtual-inheritance
-
-class FrameObserver : public QObject, virtual public IFrameObserver
-{
-    Q_OBJECT
-
-  public:
-    // We pass the camera that will deliver the frames to the constructor
-    FrameObserver( CameraPtr pCamera ) : IFrameObserver( pCamera ) {;}
-    
-    //
-    // This is our callback routine that will be executed on every received frame.
-    // Triggered by the API.
-    //
-    // Parameters:
-    //  [in]    pFrame          The frame returned from the API
-    //
-    virtual void FrameReceived( const FramePtr pFrame );
-
-    //
-    // After the view has been notified about a new frame it can pick it up.
-    // It is then removed from the internal queue
-    //
-    // Returns:
-    //  A shared pointer to the latest frame
-    //
-    FramePtr GetFrame();
-
-    //
-    // Clears the internal (double buffering) frame queue
-    //
-    void ClearFrameQueue();
-
-  private:
-    // Since a Qt signal cannot contain a whole frame
-    // the frame observer stores all FramePtr
-    std::queue<FramePtr> m_Frames;
-    QMutex m_FramesMutex;
-
-  signals:
-    //
-    // The frame received event (Qt signal) that notifies about a new incoming frame
-    //
-    // Parameters:
-    //  [out]   status          The frame receive status
-    //
-    void FrameReceivedSignal( int status );
-
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/OpenCVVideoRecorder.h b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/OpenCVVideoRecorder.h
deleted file mode 100644
index 8166854d07b793f12e3872c77a31c6c770d84d69..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/OpenCVVideoRecorder.h
+++ /dev/null
@@ -1,406 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2015 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        OpenCVVideoRecorder.h
-
-  Description: class to save videos with OpenCV.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-
-=============================================================================*/
-
-/*===========================================================================
-<OpenCV License>
-By downloading, copying, installing or using the software you agree to this license.
-If you do not agree to this license, do not download, install,
-copy or use the software.
-
-
-                          License Agreement
-               For Open Source Computer Vision Library
-                       (3-clause BSD License)
-
-Copyright (C) 2000-2015, Intel Corporation, all rights reserved.
-Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
-Copyright (C) 2009-2015, NVIDIA Corporation, all rights reserved.
-Copyright (C) 2010-2013, Advanced Micro Devices, Inc., all rights reserved.
-Copyright (C) 2015, OpenCV Foundation, all rights reserved.
-Copyright (C) 2015, Itseez Inc., all rights reserved.
-Third party copyrights are property of their respective owners.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-  * Redistributions of source code must retain the above copyright notice,
-    this list of conditions and the following disclaimer.
-
-  * Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
-
-  * Neither the names of the copyright holders nor the names of the contributors
-    may be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-This software is provided by the copyright holders and contributors "as is" and
-any express or implied warranties, including, but not limited to, the implied
-warranties of merchantability and fitness for a particular purpose are disclaimed.
-In no event shall copyright holders or contributors be liable for any direct,
-indirect, incidental, special, exemplary, or consequential damages
-(including, but not limited to, procurement of substitute goods or services;
-loss of use, data, or profits; or business interruption) however caused
-and on any theory of liability, whether in contract, strict liability,
-or tort (including negligence or otherwise) arising in any way out of
-the use of this software, even if advised of the possibility of such damage.
-</OpenCV License>
-=============================================================================*/
-#ifndef OPEN_CV_VIDEO_RECORDER_H_
-#define OPEN_CV_VIDEO_RECORDER_H_
-
-// open cv include
-#include "opencv2/opencv.hpp"
-
-//qt include
-#include "QtCore/QSharedPointer"
-#include "QtCore/QList"
-#include "QtCore/QMutex"
-#include "QtCore/QWaitCondition"
-#include "QtCore/QThread"
-
-// std include
-#include <vector>
-#include <algorithm>
-#include <exception>
-
-// vimba include
-#include <VimbaCPP/Include/VimbaCPP.h>
-#include <VimbaImageTransform/Include/VmbTransform.h>
-
-
-//
-// Base exception
-//
-class BaseException: public std::exception
-{
-    QString m_Function;
-    QString m_Message;
-public:
-    BaseException( const char*fun, const char* msg)
-    {
-        try             { if( NULL != fun )   {   m_Function = QString( fun );}}
-        catch(...)      {}
-        try             { if( NULL != msg )   {   m_Message = QString( msg ); }
-        } catch(...)    {}
-    }
-    ~BaseException() throw() {}
-    const QString& Function() const { return m_Function; }
-    const QString& Message() const { return m_Message; }
-};
-//
-// Exception for video recorder
-class VideoRecorderException: public BaseException
-{
-public:
-    VideoRecorderException( const char* fun, const char*msg)
-        : BaseException( fun, msg )
-    {}
-    ~VideoRecorderException() throw() {}
-};
-//
-// Video recorder using open cv VideoWriter 
-//
-class OpenCVRecorder: public QThread
-{
-    Q_OBJECT;
-    //
-    //  Example FOURCC codes that can be used with the OpenCVRecorder
-    //
-    VmbUint32_t maxQueueElements() const { return 3; }
-    // enum
-    // {
-        // FOURCC_USER_SELECT  = CV_FOURCC_PROMPT,
-        // FOURCC_DEFAULT      = CV_FOURCC_MACRO('I','Y','U','V'),
-        // FOURCC_MPEG1        = CV_FOURCC_MACRO('P','I','M','1'),
-        // FOURCC_MJPEG        = CV_FOURCC_MACRO('M','J','P','G'),
-        // FOURCC_MPEG42       = CV_FOURCC_MACRO('M','P','4','2'),
-        // FOURCC_MPEG43       = CV_FOURCC_MACRO('M','P','4','3'),
-        // FOURCC_DIVX         = CV_FOURCC_MACRO('D','I','V','X'),
-        // FOURCC_X264         = CV_FOURCC_MACRO('X','2','6','4'),
-    // };
-    int FOURCC_X264         = cv::VideoWriter::fourcc('X','2','6','4');
-    //
-    // frame data temporary storage
-    //
-    struct frame_store
-    {
-    private:
-        typedef std::vector<VmbUchar_t> data_vector;
-        data_vector                 m_Data;             // Frame data
-        VmbUint32_t                 m_Width;            // frame width
-        VmbUint32_t                 m_Height;           // frame height
-        VmbPixelFormat_t            m_PixelFormat;      // frame pixel format
-    public:
-        //
-        // Method: frame_store()
-        //
-        // Purpose: default constructing frame store from data pointer and dimensions
-        //
-        frame_store(const VmbUchar_t *pBuffer, VmbUint32_t BufferByteSize, VmbUint32_t Width, VmbUint32_t Height, VmbPixelFormatType PixelFormat)
-            : m_Data ( pBuffer, pBuffer + BufferByteSize )
-            , m_Width( Width )
-            , m_Height( Height )
-            , m_PixelFormat( PixelFormat )
-        {
-        }
-        //
-        // Method: equal
-        //
-        // Purpose: compare frame store to frame dimensions
-        //
-        bool equal( VmbUint32_t Width, VmbUint32_t Height, VmbPixelFormat_t PixelFormat) const
-        {
-            return      m_Width       == Width
-                    &&  m_Height      == Height
-                    &&  m_PixelFormat == PixelFormat;
-        }
-        //
-        // Method: setData
-        //
-        // Purpose: copy data into frame store from matching source
-        //
-        // Returns: false if data size not equal to internal buffer size
-        //
-        bool setData( const VmbUchar_t *Buffer, VmbUint32_t BufferSize)
-        {
-            if( BufferSize == dataSize() )
-            {
-                std::copy( Buffer, Buffer+BufferSize, m_Data.begin() );
-                return true;
-            }
-            return false;
-        }
-        //
-        // Methode: PixelFormat()
-        //
-        // Purpose: get pixel format of internal buffer.
-        //
-        VmbPixelFormat_t    pixelFormat()   const   { return m_PixelFormat; }
-        //
-        // Methode: Width()
-        //
-        // Purpose: get image width.
-        //
-        VmbUint32_t         width()         const   { return m_Width; }
-        //
-        // Methode: Height()
-        //
-        // Purpose: get image height
-        //
-        VmbUint32_t         height()        const   { return m_Height; }
-        //
-        // Methode: dataSize()
-        //
-        // Purpose: get buffer size of internal data.
-        //
-        VmbUint32_t         dataSize()      const   { return static_cast<VmbUint32_t>( m_Data.size() ); }
-        //
-        // Methode: data()
-        //
-        // Purpose: get constant internal data pointer.
-        //
-        const VmbUchar_t*   data()          const   { return &*m_Data.begin();}
-        //
-        // Methode: data()
-        //
-        // Purpose: get internal data pointer.
-        //
-        VmbUchar_t*         data()                  { return &*m_Data.begin();}
-    };
-    typedef QSharedPointer<frame_store> FrameStorePtr;  // shared pointer to frame store data
-    typedef QList<FrameStorePtr>        FrameQueue;     // queue of frames tore pointers
-
-    cv::VideoWriter         m_VideoWriter;              // OpenCV VideoWriter
-
-    cv::Mat                 m_ConvertImage;             // storage for converted image, data should only be accessed inside run
-                                                        // size and format are const while thread runs
-
-    FrameQueue              m_FrameQueue;               // frame data queue for frames that are to be saved into video stream
-    bool                    m_StopThread;               // flag to signal that the thread has to finish
-    QMutex                  m_ClassLock;                // shared data lock
-    QWaitCondition          m_FramesAvailable;          // queue frame available condition
-
-    //
-    // Method:      run()
-    //
-    // Purpose:     QThread run() implementation.
-    //
-    // Details:     main thread processing function that will run while the object is alife.
-    //
-    //
-    void run() override
-    {
-        while( ! m_StopThread )
-        {
-            FrameStorePtr tmp;
-            {
-                // two class events unlock the queue
-                // first if a frame arrives enqueueFrame wakes the condition
-                // second if the thread is stopped we are woken up
-                // the while loop is necessary because a condition can be woken up by the system
-                QMutexLocker local_lock( &m_ClassLock );
-                while(! m_StopThread && m_FrameQueue.empty() )
-                {
-                    m_FramesAvailable.wait( local_lock.mutex() );
-                }
-                if( ! m_StopThread)
-                {
-                    tmp = m_FrameQueue.front();
-                    m_FrameQueue.pop_front();
-                }
-            }// scope for the lock, from now one we don't need the class lock
-            if( ! m_StopThread)
-            {
-                convertImage( *tmp );
-                m_VideoWriter << m_ConvertImage;
-            }
-        }
-    }
-    //
-    // Method:      convertImage()
-    //
-    // Purpose:     converts frame_store data to internal openCV image for video encoding.
-    //
-    // Parameters:
-    //
-    //  [in]    frame   internal frame_store struct from queue to convert into m_ConvertImage
-    //
-    // Note:        access to m_Convert image will race the function is not thread safe and meant to be used as single writer to data.
-    //
-    bool convertImage(frame_store &frame)
-    {
-        VmbImage srcImage;
-        VmbImage dstImage;
-        srcImage.Size = sizeof( srcImage);
-        dstImage.Size = sizeof( dstImage);
-        VmbSetImageInfoFromPixelFormat( frame.pixelFormat(), frame.width(), frame.height(), & srcImage );
-        VmbSetImageInfoFromPixelFormat( VmbPixelFormatBgr8, m_ConvertImage.cols, m_ConvertImage.rows, & dstImage);
-        srcImage.Data = frame.data();
-        dstImage.Data = m_ConvertImage.data;
-        return VmbErrorSuccess == VmbImageTransform( &srcImage, &dstImage, NULL, 0 );
-
-    }
-public:
-    OpenCVRecorder(const QString &fileName, VmbFloat_t fps, VmbUint32_t Width, VmbUint32_t Height)
-        : m_StopThread( false )
-// #ifdef _MSC_VER // codec selection only supported by Windows
-//         , m_VideoWriter(fileName.toStdString(), FOURCC_USER_SELECT, fps, cv::Size(Width,Height),true )
-// #else
-        , m_VideoWriter(fileName.toStdString(), FOURCC_X264, fps, cv::Size(Width,Height),true )
-// #endif
-        , m_ConvertImage( Height, Width, CV_8UC3)
-    {
-        if( ! m_VideoWriter.isOpened() )
-        {
-            throw VideoRecorderException(__FUNCTION__, "could not open recorder");
-        }
-    }
-    virtual ~OpenCVRecorder(){}
-    //
-    // Method:      stopthread()
-    //
-    // Purpose:     stops thread and ends video encoding.
-    //
-    // Details:     will stop any data processing and signal that events are to be handled.
-    //
-    void stopThread()
-    {
-        QMutexLocker local_lock( &m_ClassLock);
-        m_StopThread = true;
-        m_FrameQueue.clear();
-        m_FramesAvailable.wakeOne();
-    }
-    //
-    // Method:      enqueueFrame()
-    //
-    // Purpose:     copies frame data into internal queue for processing.
-    //
-    // Parameters:
-    //
-    //  [in]    frame   Vimba frame to add to queue, data will be copied from frame
-    //
-    // Returns:
-    //
-    //  - true if frame was inserted
-    //  - false if frame has not expected size or the insert did not succeed for other reasons
-    //
-    // Details:     frame data will be added to frame queue, if the MAX_QUEUE_ELEMENTS are reached
-    //              the oldest frame data is dropped and the new frame is enqueued.
-    //
-    // Note:        after return frame is not referenced by the class.
-    //
-    bool enqueueFrame( const AVT::VmbAPI::Frame &frame)
-    {
-        VmbUint32_t         Width;
-        VmbUint32_t         Height;
-        VmbUint32_t         BufferSize;
-        VmbPixelFormatType  PixelFormat;
-        const VmbUchar_t*   pBuffer(NULL);
-
-        if(     VmbErrorSuccess == frame.GetPixelFormat( PixelFormat) 
-            &&  VmbErrorSuccess == frame.GetWidth( Width )
-            &&  VmbErrorSuccess == frame.GetHeight( Height )
-            &&  VmbErrorSuccess == frame.GetBufferSize( BufferSize )
-            &&  VmbErrorSuccess == frame.GetBuffer( pBuffer ) )
-        {
-            if(     m_ConvertImage.cols == Width 
-                &&  m_ConvertImage.rows == Height )
-            {
-                QMutexLocker local_lock( &m_ClassLock);
-                FrameStorePtr pFrame;
-                // in case we reached the maximum number of queued frames
-                // take of the oldest and reuse it to store the newly arriving frame
-                if( m_FrameQueue.size() >= static_cast<FrameQueue::size_type>( maxQueueElements() ) )
-                {
-                    pFrame = m_FrameQueue.front();
-                    m_FrameQueue.pop_front();
-                    if ( ! pFrame->equal( Width, Height, PixelFormat ) )
-                    {
-                        pFrame.clear();
-                    }
-                }
-                if( pFrame.isNull() )
-                {
-                    pFrame = FrameStorePtr( new frame_store( pBuffer, BufferSize, Width, Height, PixelFormat) );
-                }
-                else
-                {
-                    pFrame->setData( pBuffer, BufferSize );
-                }
-                m_FrameQueue.push_back( pFrame );
-                m_FramesAvailable.wakeOne();
-                return true;
-            }
-        }
-        return false;
-    }
-};
-
-#endif
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/main.cpp b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/main.cpp
deleted file mode 100644
index 903b04cdd710139c7a90ca7e88ecc5a59e1f73bb..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/main.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2015 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        main.cpp
-
-  Description: The main entry point of the AsynchronousOpenCVRecorder
-               example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "AsynchronousOpenCVRecorder.h"
-#include <QApplication>
-
-int main( int argc, char *argv[] )
-{
-    QApplication a( argc, argv );
-    AsynchronousOpenCVRecorder w;
-    w.show();
-    return a.exec();
-}
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/res/AsynchronousOpenCVRecorder.png b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/res/AsynchronousOpenCVRecorder.png
deleted file mode 100644
index 61642b4ad7c0f625df459957d802053437705d9b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/res/AsynchronousOpenCVRecorder.png and /dev/null differ
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/res/AsynchronousOpenCVRecorder.qrc b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/res/AsynchronousOpenCVRecorder.qrc
deleted file mode 100644
index fdfacbc5f7441e2c97d45cd8e5e8995d9e1da5b2..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/res/AsynchronousOpenCVRecorder.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
-    <qresource prefix="/AsynchronousOpenCVRecorder">
-        <file>AsynchronousOpenCVRecorder.png</file>
-    </qresource>
-</RCC>
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/res/AsynchronousOpenCVRecorder.ui b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/res/AsynchronousOpenCVRecorder.ui
deleted file mode 100644
index 20fc970d03e824baa7171c9c153f737336db6fae..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/Qt/Source/res/AsynchronousOpenCVRecorder.ui
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>AsynchronousOpenCVRecorderClass</class>
- <widget class="QMainWindow" name="AsynchronousOpenCVRecorderClass">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>1040</width>
-    <height>780</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>1040</width>
-    <height>780</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>1040</width>
-    <height>780</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>AsynchronousOpenCVRecorder</string>
-  </property>
-  <property name="windowIcon">
-   <iconset resource="AsynchronousOpenCVRecorder.qrc">
-    <normaloff>:/AsynchronousOpenCVRecorder/AsynchronousOpenCVRecorder.png</normaloff>:/AsynchronousOpenCVRecorder/AsynchronousOpenCVRecorder.png</iconset>
-  </property>
-  <widget class="QWidget" name="centralWidget">
-   <widget class="QListWidget" name="m_ListBoxCameras">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>10</y>
-      <width>261</width>
-      <height>491</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QListWidget" name="m_ListLog">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>580</y>
-      <width>1041</width>
-      <height>191</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QPushButton" name="m_ButtonStartStop">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>540</y>
-      <width>261</width>
-      <height>31</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>Start Image Recording ...</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="m_LabelStream">
-    <property name="geometry">
-     <rect>
-      <x>270</x>
-      <y>10</y>
-      <width>771</width>
-      <height>561</height>
-     </rect>
-    </property>
-    <property name="sizePolicy">
-     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-      <horstretch>0</horstretch>
-      <verstretch>0</verstretch>
-     </sizepolicy>
-    </property>
-    <property name="text">
-     <string/>
-    </property>
-   </widget>
-   <widget class="QCheckBox" name="m_ColorProcessingCheckBox">
-    <property name="geometry">
-     <rect>
-      <x>140</x>
-      <y>510</y>
-      <width>121</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>ColorProcessing</string>
-    </property>
-   </widget>
-  </widget>
- </widget>
- <layoutdefault spacing="6" margin="11"/>
- <resources>
-  <include location="AsynchronousOpenCVRecorder.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/asyncOpenCV.sublime-project b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/asyncOpenCV.sublime-project
deleted file mode 100644
index 75a4cc5c731e2237922ee2a45a325ec38a728ffb..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/asyncOpenCV.sublime-project
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-	"folders":
-	[
-		{
-			"path": "Qt/Build/Make"
-		},
-		{
-			"path": "."
-		},
-		{
-			"path": "../../.."
-		},
-		{
-			"path": "../../../../dox",
-			"name": "dox"
-		},
-	]
-}
diff --git a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/notes b/VimbaCPP/Examples/AsynchronousOpenCVRecorder/notes
deleted file mode 100644
index a171dfce8c349801d29ec5359cb61e2d3619bf77..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/AsynchronousOpenCVRecorder/notes
+++ /dev/null
@@ -1,27 +0,0 @@
-## use QT6
-replace Qt.mk with Qt6.mk in Makefile
-add INCLUDE and LIB flags manually to Makefile
-
-## use QT5
-replace Qt.mk with Qt5.mk in Makefile
-> add qt5widgets?
-> see async grab notes!
-
-## use openCV4
-apt install opencv-dev
-pkg-config --cflags --libs opencv4 	# test it!
-
-# Makefile:
-replace opencv with opencv4
-	OPENCV_CFLAGS       = $(shell $(PKGCFG) --cflags opencv4)
-	OPENCV_LIBS         = $(shell $(PKGCFG) --libs opencv4)
-
-# add to ECC settings
-"common_flags" : [
-"-I/usr/include/opencv4",
-	// ...
-
-# in OpenCVRecorder.h
-replace fourcc enum with:
-	int FOURCC_X264         = cv::VideoWriter::fourcc('X','2','6','4');
-]
diff --git a/VimbaCPP/Examples/BandwidthHelper/Build/Make/Makefile b/VimbaCPP/Examples/BandwidthHelper/Build/Make/Makefile
deleted file mode 100644
index bad5fb58c826cced2cda89a62f98aff6187f2732..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/BandwidthHelper/Build/Make/Makefile
+++ /dev/null
@@ -1,50 +0,0 @@
-PROJECT_NAME            = BandwidthHelper
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/BandwidthHelper.o \
-                      $(OBJ_DIR)/program.o
-
-DEPENDENCIES        = VimbaCPP
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/BandwidthHelper/Source/BandwidthHelper.cpp b/VimbaCPP/Examples/BandwidthHelper/Source/BandwidthHelper.cpp
deleted file mode 100644
index cc883727f93921630998fcf9d573f77dede3eb19..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/BandwidthHelper/Source/BandwidthHelper.cpp
+++ /dev/null
@@ -1,495 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        BandwidthHelper.cpp
-
-  Description: The BandwidthHelper example demonstrates how to get and set the
-               bandwidth used by a camera using VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "BandwidthHelper.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-#define PACKET_SIZE_MAX_1394_S100   1024
-#define PACKET_SIZE_MAX_1394_S200   2048
-#define PACKET_SIZE_MAX_1394_S400   4096
-#define PACKET_SIZE_MAX_1394_S800   8192
-
-//
-// Calculates the current bandwidth usage of a camera in relation to a free bus / network
-//
-// Parameters:
-//  [in]    pCamera             The camera to work on
-//  [out]   rfBandwidth         The current bandwidth usage (maximum 1)
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType BandwidthHelper::GetBandwidthUsage( CameraPtr pCamera, double &rfBandwidth )
-{
-    VmbErrorType        res;
-    VmbInt64_t          nValue;
-    FeaturePtr          pFeature;
-    InterfacePtr        pInterface;
-    VmbInterfaceType    interfaceType;
-    std::string         strInterfaceID;
-    VimbaSystem &       system          = VimbaSystem::GetInstance();
-
-    res = pCamera->GetInterfaceID( strInterfaceID );
-    if( VmbErrorSuccess == res )
-    {
-        res = system.GetInterfaceByID( strInterfaceID.c_str(), pInterface );
-        if( VmbErrorSuccess == res )
-        {
-            res = pInterface->GetType( interfaceType );
-            if( VmbErrorSuccess == res )
-            {
-                switch( interfaceType )
-                {
-                    case VmbInterfaceEthernet:
-                        res = pCamera->GetFeatureByName( "StreamBytesPerSecond", pFeature );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            res = pFeature->GetValue( nValue );
-                            if ( VmbErrorSuccess == res )
-                            {
-                                VmbInt64_t nMin, nMax;
-                                res = pFeature->GetRange( nMin, nMax );
-                                if ( VmbErrorSuccess == res )
-                                {
-                                    rfBandwidth = (double)nValue / nMax;
-                                }
-                            }
-                        }
-                        break;
-                    case VmbInterfaceFirewire:
-                        res = pCamera->GetFeatureByName( "IIDCPacketSize", pFeature );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            res = pFeature->GetValue( nValue );
-                            if ( VmbErrorSuccess == res )
-                            {
-                                res = pCamera->GetFeatureByName( "IIDCPhyspeed", pFeature );
-                                if ( VmbErrorSuccess == res )
-                                {
-                                    std::string strPhySpeed;
-                                    res = pFeature->GetValue( strPhySpeed );
-                                    if ( VmbErrorSuccess == res )
-                                    {
-                                        int nPhySpeed = atoi( strPhySpeed.substr( 1 ).c_str() );
-                                        switch ( nPhySpeed )
-                                        {
-                                            case 100 : nPhySpeed = PACKET_SIZE_MAX_1394_S100;
-                                                break;
-                                            case 200 : nPhySpeed = PACKET_SIZE_MAX_1394_S200;
-                                                break;
-                                            case 400 : nPhySpeed = PACKET_SIZE_MAX_1394_S400;
-                                                break;
-                                            case 800 : nPhySpeed = PACKET_SIZE_MAX_1394_S800;
-                                                break;
-                                            default: return VmbErrorInternalFault;
-                                        }
-                                        rfBandwidth = (double)nValue / (double)nPhySpeed;
-                                    }
-                                }
-                            }
-                        }
-                        break;
-                    case VmbInterfaceUsb:
-                        res = pCamera->GetFeatureByName( "DeviceLinkThroughputLimitMode", pFeature );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            std::string strMode;
-                            res = pFeature->GetValue( strMode );
-                            if ( VmbErrorSuccess == res )
-                            {
-                                // If link speed limit is disabled, the used bandwidth can be up to 100%
-                                if ( !strcmp( "Off", strMode.c_str() ))
-                                {
-                                    rfBandwidth = 1.0;
-                                }
-                                else
-                                {
-                                    // If link speed limit is enabled, get its current value
-                                    res = pCamera->GetFeatureByName( "DeviceLinkThroughputLimit", pFeature );
-                                    if ( VmbErrorSuccess == res )
-                                    {
-                                        res = pFeature->GetValue( nValue );
-                                        if ( VmbErrorSuccess == res )
-                                        {
-                                            VmbInt64_t nMin, nMax;
-                                            res = pFeature->GetRange( nMin, nMax );
-                                            if ( VmbErrorSuccess == res )
-                                            {
-                                                rfBandwidth = (double)nValue / nMax;
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                        break;
-                    default:
-                        res = VmbErrorWrongType;
-                        break;
-                }
-            }
-        }
-    }
-
-    return res;
-}
-
-//
-// Sets the current bandwidth usage in relation to a free bus / network
-//
-// Parameters:
-//  [in]    pCamera             The camera to work on
-//  [out]   fBandwidth          The bandwidth to be set (maximum 1)
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType BandwidthHelper::SetBandwidthUsage( CameraPtr pCamera, double fBandwidth )
-{
-    VmbErrorType        res;
-    VmbInt64_t          nValue;
-    FeaturePtr          pFeature;
-    InterfacePtr        pInterface;
-    VmbInterfaceType    interfaceType;
-    std::string         strInterfaceID;
-    VimbaSystem&        system          = VimbaSystem::GetInstance();
-
-    res = pCamera->GetInterfaceID( strInterfaceID );
-    if( VmbErrorSuccess == res )
-    {
-        res = system.GetInterfaceByID( strInterfaceID.c_str(), pInterface );
-        if( VmbErrorSuccess == res )
-        {
-            res = pInterface->GetType( interfaceType );
-            if( VmbErrorSuccess == res )
-            {
-                switch( interfaceType )
-                {
-                    case VmbInterfaceEthernet:
-                        res = pCamera->GetFeatureByName( "StreamBytesPerSecond", pFeature );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            VmbInt64_t nMin, nMax;
-                            res = pFeature->GetRange( nMin, nMax );
-                            if ( VmbErrorSuccess == res )
-                            {
-                                nValue = (VmbUint64_t)(fBandwidth * nMax);
-                                res = pFeature->SetValue( nValue );
-                            }
-                        }
-                    break;
-                    case VmbInterfaceFirewire:
-                        res = pCamera->GetFeatureByName( "IIDCPacketSizeAuto", pFeature );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            res = pFeature->SetValue( "Off" );
-                            if ( VmbErrorSuccess == res )
-                            {
-                                res = pCamera->GetFeatureByName( "IIDCPhyspeed", pFeature );
-                                if ( VmbErrorSuccess == res )
-                                {
-                                    std::string strPhySpeed;
-                                    res = pFeature->GetValue( strPhySpeed );
-                                    if ( VmbErrorSuccess == res )
-                                    {
-                                        int nPhySpeed = atoi( strPhySpeed.substr( 1 ).c_str() );
-                                        switch ( nPhySpeed )
-                                        {
-                                            case 100 : nPhySpeed = PACKET_SIZE_MAX_1394_S100;
-                                                break;
-                                            case 200 : nPhySpeed = PACKET_SIZE_MAX_1394_S200;
-                                                break;
-                                            case 400 : nPhySpeed = PACKET_SIZE_MAX_1394_S400;
-                                                break;
-                                            case 800 : nPhySpeed = PACKET_SIZE_MAX_1394_S800;
-                                                break;
-                                            default: return VmbErrorInternalFault;
-                                        }
-                                        // Set size to new percentage
-                                        nValue = (VmbUint64_t)(fBandwidth * nPhySpeed);
-                                        res = pCamera->GetFeatureByName( "IIDCPacketSize", pFeature );
-                                        if ( VmbErrorSuccess == res )
-                                        {
-                                            // Adjust new value to fit increment
-                                            VmbInt64_t nInc;
-                                            res = pFeature->GetIncrement( nInc );
-                                            if ( VmbErrorSuccess == res )
-                                            {
-                                                nValue -= (nValue % nInc);
-                                                // Write new value
-                                                res = pFeature->SetValue( nValue );
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    break;
-                    case VmbInterfaceUsb:
-                        res = pCamera->GetFeatureByName( "DeviceLinkThroughputLimitMode", pFeature );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            // Enable link speed limit
-                            res = pFeature->SetValue( "On" );
-                            if ( VmbErrorSuccess == res )
-                            {
-                                res = pCamera->GetFeatureByName( "DeviceLinkThroughputLimit", pFeature );
-                                if ( VmbErrorSuccess == res )
-                                {
-                                    VmbInt64_t nMin, nMax;
-                                    res = pFeature->GetRange( nMin, nMax );
-                                    if ( VmbErrorSuccess == res )
-                                    {
-                                        nValue = (VmbUint64_t)(fBandwidth * nMax);
-                                        // Set link speed limit
-                                        res = pFeature->SetValue( nValue );
-                                    }
-                                }
-                            }
-                        }
-                    break;
-                    default:
-                        res = VmbErrorWrongType;
-                    break;
-                }
-            }
-        }
-    }
-
-    return res;
-}
-
-//
-// The relative minimum bandwidth usage as reported by the device
-//
-// Parameters:
-//  [in]    pCamera             The camera to work on
-//  [out    rfBandwidth         The ratio of minimum and maximum of either stream bytes per second or the packet size
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType BandwidthHelper::GetMinPossibleBandwidthUsage( CameraPtr pCamera, double &rfBandwidth )
-{
-    VmbErrorType        res;
-    VmbInt64_t          nMinValue;
-    VmbInt64_t          nMaxValue;
-    FeaturePtr          pFeature;
-    InterfacePtr        pInterface;
-    VmbInterfaceType    interfaceType;
-    std::string         strInterfaceID;
-    VimbaSystem &       system          = VimbaSystem::GetInstance();
-
-    res = pCamera->GetInterfaceID( strInterfaceID );
-    if( VmbErrorSuccess == res )
-    {
-        res = system.GetInterfaceByID( strInterfaceID.c_str(), pInterface );
-        if( VmbErrorSuccess == res )
-        {
-            res = pInterface->GetType( interfaceType );
-            if( VmbErrorSuccess == res )
-            {
-                switch( interfaceType )
-                {
-                    case VmbInterfaceEthernet:
-                        res = pCamera->GetFeatureByName( "StreamBytesPerSecond", pFeature );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            res = pFeature->GetRange( nMinValue, nMaxValue );
-                            if ( VmbErrorSuccess == res )
-                            {
-                                rfBandwidth = (double)nMinValue / nMaxValue;
-                            }
-                        }
-                        break;
-
-                    case VmbInterfaceFirewire:
-                        res = pCamera->GetFeatureByName( "IIDCPacketSize", pFeature );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            res = pFeature->GetRange( nMinValue, nMaxValue );
-                            if ( VmbErrorSuccess == res )
-                            {
-                                res = pCamera->GetFeatureByName( "IIDCPhyspeed", pFeature );
-                                if ( VmbErrorSuccess == res )
-                                {
-                                    std::string strPhySpeed;
-                                    res = pFeature->GetValue( strPhySpeed );
-                                    if ( VmbErrorSuccess == res )
-                                    {
-                                        int nPhySpeed = atoi( strPhySpeed.substr( 1 ).c_str() );
-                                        switch ( nPhySpeed )
-                                        {
-                                            case 100 : nPhySpeed = PACKET_SIZE_MAX_1394_S100;
-                                                break;
-                                            case 200 : nPhySpeed = PACKET_SIZE_MAX_1394_S200;
-                                                break;
-                                            case 400 : nPhySpeed = PACKET_SIZE_MAX_1394_S400;
-                                                break;
-                                            case 800 : nPhySpeed = PACKET_SIZE_MAX_1394_S800;
-                                                break;
-                                            default: return VmbErrorInternalFault;
-                                        }
-                                        rfBandwidth = (double)nMinValue / (double)nPhySpeed;
-                                    }
-                                }
-                            }
-                        }
-                        break;
-                    case VmbInterfaceUsb:
-                        res = pCamera->GetFeatureByName( "DeviceLinkThroughputLimit", pFeature );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            res = pFeature->GetRange( nMinValue, nMaxValue );
-                            if ( VmbErrorSuccess == res )
-                            {
-                                rfBandwidth = (double)nMinValue / nMaxValue;
-                            }
-                        }
-                        break;
-                    default:
-                        res = VmbErrorWrongType;
-                        break;
-                }
-            }
-        }
-    }
-
-    return res;
-}
-
-//
-// The relative maximum bandwidth usage as reported by the device
-//
-// Parameters:
-//  [in]    pCamera             The camera to work on
-//  [out    rfBandwidth         The ratio of maximum packet size as reported by the device and the maximum of the bus (for technologies other than fire wire always 1)
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType BandwidthHelper::GetMaxPossibleBandwidthUsage( CameraPtr pCamera, double &rfBandwidth )
-{
-    VmbErrorType        res;
-    VmbInt64_t          nMinValue;
-    VmbInt64_t          nMaxValue;
-    FeaturePtr          pFeature;
-    InterfacePtr        pInterface;
-    VmbInterfaceType    interfaceType;
-    std::string         strInterfaceID;
-    VimbaSystem &       system          = VimbaSystem::GetInstance();
-
-    res =  pCamera->GetInterfaceID( strInterfaceID );
-    if( VmbErrorSuccess == res )
-    {
-        res = system.GetInterfaceByID( strInterfaceID.c_str(), pInterface );
-        if( VmbErrorSuccess == res )
-        {
-            res = pInterface->GetType( interfaceType );
-            if( VmbErrorSuccess == res )
-            {
-                switch ( interfaceType )
-                {
-                    case VmbInterfaceEthernet:
-                        rfBandwidth = 1.0;
-                        break;
-
-                    case VmbInterfaceFirewire:
-                        res = pCamera->GetFeatureByName( "IIDCPacketSize", pFeature );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            res = pFeature->GetRange( nMinValue, nMaxValue );
-                            if ( VmbErrorSuccess == res )
-                            {
-                                res = pCamera->GetFeatureByName( "IIDCPhyspeed", pFeature );
-                                if ( VmbErrorSuccess == res )
-                                {
-                                    std::string strPhySpeed;
-                                    res = pFeature->GetValue( strPhySpeed );
-                                    if ( VmbErrorSuccess == res )
-                                    {
-                                        int nPhySpeed = atoi( strPhySpeed.substr( 1 ).c_str() );
-                                        switch ( nPhySpeed )
-                                        {
-                                            case 100 : nPhySpeed = PACKET_SIZE_MAX_1394_S100;
-                                                break;
-                                            case 200 : nPhySpeed = PACKET_SIZE_MAX_1394_S200;
-                                                break;
-                                            case 400 : nPhySpeed = PACKET_SIZE_MAX_1394_S400;
-                                                break;
-                                            case 800 : nPhySpeed = PACKET_SIZE_MAX_1394_S800;
-                                                break;
-                                            default: return VmbErrorInternalFault;
-                                        }
-                                        rfBandwidth = (double)nMaxValue / (double)nPhySpeed;
-                                    }
-                                }
-                            }
-                        }
-                        break;
-                    case VmbInterfaceUsb:
-                        rfBandwidth = 1.0;
-                        break;
-                    default:
-                        res = VmbErrorWrongType;
-                        break;
-                }
-            }
-        }
-    }
-
-    return res;
-}
-
-//
-// Converts the interface type enum to a string representation
-//
-// Parameters:
-//  [in]    interfaceType       The interface enum to convert
-//
-// Returns:
-//  The string representation of the given enum
-//
-std::string BandwidthHelper::InterfaceToString( VmbInterfaceType interfaceType )
-{
-    switch ( interfaceType )
-    {
-        case VmbInterfaceFirewire:  return "FireWire";
-        case VmbInterfaceEthernet:  return "GigE";
-        case VmbInterfaceUsb:       return "USB";
-        default:                    return "Unknown";
-    }
-}
-
-}}} // AVT:VmbAPI::Examples
diff --git a/VimbaCPP/Examples/BandwidthHelper/Source/BandwidthHelper.h b/VimbaCPP/Examples/BandwidthHelper/Source/BandwidthHelper.h
deleted file mode 100644
index bee33ac1448de3ec1f278e999b63527a8d11273d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/BandwidthHelper/Source/BandwidthHelper.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        BandwidthHelper.h
-
-  Description: The BandwidthHelper example demonstrates how to get and set the
-               bandwidth used by a camera using VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_HELPER_BANDWIDTHHELPER_H
-#define AVT_VMBAPI_HELPER_BANDWIDTHHELPER_H
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class BandwidthHelper
-{
-  public:
-    //
-    // Calculates the current bandwidth usage of a camera in relation to a free bus / network
-    //
-    // Parameters:
-    //  [in]    pCamera             The camera to work on
-    //  [out]   rfBandwidth         The current bandwidth usage (maximum 1)
-    //
-    // Returns:
-    //  An API status code
-    //
-    static VmbErrorType GetBandwidthUsage( CameraPtr pCamera, double &bandwidth );
-
-    //
-    // Sets the current bandwidth usage in relation to a free bus / network
-    //
-    // Parameters:
-    //  [in]    pCamera             The camera to work on
-    //  [out]   fBandwidth          The bandwidth to be set (maximum 1)
-    //
-    // Returns:
-    //  An API status code
-    //
-    static VmbErrorType SetBandwidthUsage( CameraPtr pCamera, double bandwidth );
-
-    //
-    // The relative minimum bandwidth usage as reported by the device
-    //
-    // Parameters:
-    //  [in]    pCamera             The camera to work on
-    //  [out    rfBandwidth         The ratio of minimum and maximum of either stream bytes per second or the packet size
-    //
-    // Returns:
-    //  An API status code
-    //
-    static VmbErrorType GetMinPossibleBandwidthUsage( CameraPtr pCamera, double &bandwidth );
-
-    //
-    // The relative maximum bandwidth usage as reported by the device
-    //
-    // Parameters:
-    //  [in]    pCamera             The camera to work on
-    //  [out    rfBandwidth         The ratio of maximum packet size as reported by the device and the maximum of the bus (for technologies other than fire wire always 1)
-    //
-    // Returns:
-    //  An API status code
-    //
-    static VmbErrorType GetMaxPossibleBandwidthUsage( CameraPtr pCamera, double &bandwidth );
-
-    //
-    // Converts the interface type enum to a string representation
-    //
-    // Parameters:
-    //  [in]    interfaceType       The interface enum to convert
-    //
-    // Returns:
-    //  The string representation of the given enum
-    //
-    static std::string InterfaceToString( VmbInterfaceType interfaceType );
-
-  private:
-    // No default ctor
-    BandwidthHelper();
-};
-
-}}} // AVT:VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/BandwidthHelper/Source/program.cpp b/VimbaCPP/Examples/BandwidthHelper/Source/program.cpp
deleted file mode 100644
index 00e4ceeb7adb215f6645514cd3dabc5a765f78b6..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/BandwidthHelper/Source/program.cpp
+++ /dev/null
@@ -1,402 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of BandwidthHelper example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-#include <map>
-#include <cstdlib>
-#include <cstring>
-#include <string>
-#include <iostream>
-
-#include "BandwidthHelper.h"
-
-#include "Common/StreamSystemInfo.h"
-
-enum SettingsMode
-{
-    SettingsModeUnknown = 0,
-    SettingsModeGet     = 1,
-    SettingsModeSet     = 2,
-    SettingsModeGetMin  = 3,
-    SettingsModeGetMax  = 4
-};
-
-bool StartsWith( const char *pString, const char *pStart )
-{
-    if( NULL == pString )
-    {
-        return false;
-    }
-    if( NULL == pStart )
-    {
-        return false;
-    }
-
-    if( std::strlen( pString ) < std::strlen( pStart ) )
-    {
-        return false;
-    }
-
-    if( std::memcmp( pString, pStart, std::strlen( pStart ) ) != 0 )
-    {
-        return false;
-    }
-
-    return true;
-}
-
-int main( int argc, char* argv[] )
-{
-    std::string cameraID, cameraName;
-    VmbInterfaceType cameraInterfaceType;
-    double fValue;
-    SettingsMode settingsMode = SettingsModeUnknown;
-    bool printHelp = false;
-
-    std::cout << "\n";
-    std::cout << "//////////////////////////////////////////\n";
-    std::cout << "/// Vimba API Bandwidth Helper Example ///\n";
-    std::cout << "//////////////////////////////////////////\n";
-    std::cout << std::endl;
-
-    VmbErrorType err = VmbErrorSuccess;
-
-    //////////////////////
-    //Parse command line//
-    //////////////////////
-
-    if( 4 < argc )
-    {
-        err = VmbErrorBadParameter;
-        printHelp = true;
-    }
-    else
-    {
-        for( int i=1; i<argc; ++i )
-        {
-            char *pParameter = argv[i];
-            if( 0 >= std::strlen( pParameter ) )
-            {
-                err = VmbErrorBadParameter;
-                break;
-            }
-
-            if( pParameter[0] == '/' )
-            {
-                // Get bandwidth usage
-                if( 0 == std::strcmp( pParameter, "/g" ) )
-                {
-                    if( SettingsModeUnknown != settingsMode )
-                    {
-                        err = VmbErrorBadParameter;
-                        break;
-                    }
-
-                    settingsMode = SettingsModeGet;
-                }
-                // Set bandwidth usage
-                else if( true == StartsWith( pParameter, "/s:" ) )
-                {
-                    if( SettingsModeUnknown != settingsMode )
-                    {
-                        err = VmbErrorBadParameter;
-                        break;
-                    }
-
-                    settingsMode = SettingsModeSet;
-
-                    std::string strVal = pParameter + 3;
-                    if( 0 >= strVal.size() )
-                    {
-                        err = VmbErrorBadParameter;
-                        break;
-                    }
-                    fValue = atof( strVal.c_str() ) / 100;
-                }
-                else if( 0 == std::strcmp( pParameter, "/h" ) )
-                {
-                    if( true == printHelp )
-                    {
-                        err = VmbErrorBadParameter;
-                        break;
-                    }
-
-                    printHelp = true;
-                }
-                // Get min bandwidth usage
-                else if( 0 == std::strcmp( pParameter, "/min" ) )
-                {
-                    if( SettingsModeUnknown != settingsMode )
-                    {
-                        err = VmbErrorBadParameter;
-                        break;
-                    }
-
-                    settingsMode = SettingsModeGetMin;
-                }
-                // Get max bandwidth usage
-                else if( 0 == std::strcmp( pParameter, "/max" ) )
-                {
-                    if( SettingsModeUnknown != settingsMode )
-                    {
-                        err = VmbErrorBadParameter;
-                        break;
-                    }
-
-                    settingsMode = SettingsModeGetMax;
-                }
-                else
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-            }
-            else
-            {
-                if( false == cameraID.empty() )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                cameraID = pParameter;
-            }
-        }
-    }
-
-    // Write out an error if we could not parse the command line
-    if( VmbErrorBadParameter == err )
-    {
-        std::cout << "Invalid parameter found.\n\n";
-        printHelp = true;
-    }
-
-    // Print out help
-    if( true == printHelp )
-    {
-        std::cout << "Gets or sets the current bandwidth as percentage of the theoretically possible bandwidth.\n\n";
-        std::cout << "Usage: BandwidthHelper [CameraID] [/h] [/{g|s:val|min|max}]\n";
-        std::cout << "Parameters:   CameraID    ID of the camera to use (using first camera if not specified)\n";
-        std::cout << "              /h          Print out help\n";
-        std::cout << "              /g          Get bandwidth usage (default if not specified)\n";
-        std::cout << "              /s:val      Set bandwidth usage to <val> % of the maximum bandwidth\n";
-        std::cout << "              /min        Get minimal possible bandwidth usage\n";
-        std::cout << "              /max        Get maximal possible bandwidth usage\n\n";
-
-        return err;
-    }
-
-    if( VmbErrorSuccess == err )
-    {
-        // Get a reference to the VimbaSystem singleton
-        AVT::VmbAPI::VimbaSystem &rVimbaSystem = AVT::VmbAPI::VimbaSystem::GetInstance();
-
-        // Print out version of Vimba
-        std::cout << "Vimba C++ API Version " << rVimbaSystem << "\n";
-
-        // Startup API
-        err = rVimbaSystem.Startup();
-        if( VmbErrorSuccess != err )
-        {
-            std::cout << "Could not start system. Error code: " << err <<"\n";
-        }
-        else
-        {
-            AVT::VmbAPI::CameraPtr pCamera;
-            // Open first available camera
-            if( cameraID.empty() )
-            {
-                // Fetch all cameras known to Vimba
-                AVT::VmbAPI::CameraPtrVector cameras;
-                err = rVimbaSystem.GetCameras( cameras );
-                if( VmbErrorSuccess == err )
-                {
-                    if( !cameras.empty() )
-                    {
-                        for(    AVT::VmbAPI::CameraPtrVector::const_iterator iter = cameras.begin();
-                                cameras.end() != iter;
-                                ++iter )
-                        {
-                            // Check if we can open the camera in full mode
-                            VmbAccessModeType accessMode = VmbAccessModeNone;
-                            err = (*iter)->GetPermittedAccess( accessMode );
-                            if( VmbErrorSuccess == err )
-                            {
-                                if( VmbAccessModeFull & accessMode )
-                                {
-                                    // Now get the camera ID
-                                    err = ( *iter )->GetID( cameraID );
-                                    if( VmbErrorSuccess == err )
-                                    {
-                                        // Try to open the camera
-                                        err = ( *iter )->Open( VmbAccessModeFull );
-                                        if( VmbErrorSuccess == err )
-                                        {
-                                            pCamera = *iter;
-                                            // Get camera name and interface type
-                                            if(    VmbErrorSuccess == pCamera->GetName( cameraName )
-                                                && VmbErrorSuccess == pCamera->GetInterfaceType( cameraInterfaceType ) )
-                                            {
-                                                std::cout << "Successfully opened " << AVT::VmbAPI::Examples::BandwidthHelper::InterfaceToString( cameraInterfaceType ) << " camera " << cameraName << " (" << cameraID << ")\n" ;
-                                            }
-                                            else
-                                            {
-                                                std::cout << "Successfully opened camera " << "(" << cameraID << ")\n";
-                                            }
-                                            break;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-
-                        if( NULL == pCamera )
-                        {
-                            std::cout << "Could not open any camera.\n";
-                            err = VmbErrorNotFound;
-                        }
-                    }
-                    else
-                    {
-                        std::cout << "No camera available.\n";
-                        err = VmbErrorNotFound;
-                    }
-                }
-                else
-                {
-                    std::cout << "Could not list cameras. Error code: " << err << std::endl;
-                }
-            }
-            else
-            {
-                // Open specific camera
-                err = rVimbaSystem.OpenCameraByID( cameraID.c_str(), VmbAccessModeFull, pCamera );
-                if( VmbErrorSuccess != err )
-                {
-                    std::cout << "Could not open camera. Error code: " << err <<"\n";
-                }
-            }
-
-            if( VmbErrorSuccess == err )
-            {
-                switch( settingsMode )
-                {
-                    default:
-                    case SettingsModeGet:
-                    {
-                        // Get bandwidth
-                        err = AVT::VmbAPI::Examples::BandwidthHelper::GetBandwidthUsage( pCamera, fValue );
-                        if ( VmbErrorWrongType == err )
-                        {
-                            std::cout << "The bandwidth cannot be controlled for this interface type.\n";
-                        }
-                        else if ( VmbErrorSuccess != err )
-                        {
-                            std::cout << "Could not get bandwidth usage. Error code: " << err <<"\n";
-                        }
-                        else
-                        {
-                            std::cout << "Bandwidth usage: " << fValue * 100 << "%\n";
-                        }
-                    }
-                    break;
-
-                    case SettingsModeSet:
-                    {
-                        // Set bandwidth
-                        err = AVT::VmbAPI::Examples::BandwidthHelper::SetBandwidthUsage( pCamera, fValue );
-                        if ( VmbErrorWrongType == err )
-                        {
-                            std::cout << "The bandwidth cannot be controlled for this interface type.\n";
-                        }
-                        else
-                        {
-                            if ( VmbErrorSuccess == err )
-                            {
-                                // Read back written value
-                                err = AVT::VmbAPI::Examples::BandwidthHelper::GetBandwidthUsage( pCamera, fValue );
-                                if ( VmbErrorSuccess == err )
-                                {
-                                    std::cout << "Bandwidth usage successfully set to: " << fValue * 100 << "%\n";
-                                }
-                            }
-                            if ( VmbErrorSuccess != err )
-                            {
-                                std::cout << "Could not set bandwidth usage. Error code: " << err <<"\n";
-                            }
-                        }
-                    }
-                    break;
-
-                    case SettingsModeGetMin:
-                    {
-                        // Get bandwidth
-                        err = AVT::VmbAPI::Examples::BandwidthHelper::GetMinPossibleBandwidthUsage( pCamera, fValue );
-                        if ( VmbErrorWrongType == err )
-                        {
-                            std::cout << "The bandwidth cannot be controlled for this interface type.\n";
-                        }
-                        else if( VmbErrorSuccess != err )
-                        {
-                            std::cout << "Could not get minimal possible bandwidth usage. Error code: " << err <<"\n";
-                        }
-                        else
-                        {
-                            std::cout << "Minimal possible bandwidth usage: " << fValue * 100 << "%\n";
-                        }
-                    }
-                    break;
-
-                    case SettingsModeGetMax:
-                    {
-                        // Get bandwidth
-                        err = AVT::VmbAPI::Examples::BandwidthHelper::GetMaxPossibleBandwidthUsage( pCamera, fValue );
-                        if ( VmbErrorWrongType == err )
-                        {
-                            std::cout << "The bandwidth cannot be controlled for this interface type.\n";
-                        }
-                        else if ( VmbErrorSuccess != err )
-                        {
-                            std::cout << "Could not get maximal possible bandwidth usage. Error code: " << err <<"\n";
-                        }
-                        else
-                        {
-                            std::cout << "Maximal possible bandwidth usage: " << fValue * 100 << "%\n";
-                        }
-                    }
-                    break;
-                }
-                // Close camera
-                err = pCamera->Close();
-            }
-            // Shutdown API
-            rVimbaSystem.Shutdown();
-        }
-
-        return err;
-    }
-}
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/ActionCommands b/VimbaCPP/Examples/Bin/x86_64bit/ActionCommands
deleted file mode 100755
index d22767654ddd2dbad1a2c7c6fca3ecfc620ad16a..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/ActionCommands and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/AsynchronousGrabConsole b/VimbaCPP/Examples/Bin/x86_64bit/AsynchronousGrabConsole
deleted file mode 100755
index 96c5325379e004d169757b00ddbc7ff88496c74b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/AsynchronousGrabConsole and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/AsynchronousGrabQt b/VimbaCPP/Examples/Bin/x86_64bit/AsynchronousGrabQt
deleted file mode 100755
index e690eef7491ae4bac82e07d7cd620e27bed4ce5a..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/AsynchronousGrabQt and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/AsynchronousOpenCVRecorder b/VimbaCPP/Examples/Bin/x86_64bit/AsynchronousOpenCVRecorder
deleted file mode 100755
index 900a167ae4ae6f23eaf1f8d5a20f65982ee7bd97..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/AsynchronousOpenCVRecorder and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/BandwidthHelper b/VimbaCPP/Examples/Bin/x86_64bit/BandwidthHelper
deleted file mode 100755
index 708361ba30cf9afab7a121e7b82b36773318f489..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/BandwidthHelper and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/CameraFactory b/VimbaCPP/Examples/Bin/x86_64bit/CameraFactory
deleted file mode 100755
index c034619ced3d4c84a62b5045a607e79870d7f635..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/CameraFactory and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/DEV_000F310338D4.xml b/VimbaCPP/Examples/Bin/x86_64bit/DEV_000F310338D4.xml
deleted file mode 100644
index 364dc684a6a8468777b8b6f1227d0f04f37bffbb..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Bin/x86_64bit/DEV_000F310338D4.xml
+++ /dev/null
@@ -1,322 +0,0 @@
-<?xml version="1.0" ?>
-<SettingsStruct>
-    <PersistType Value="2" Description="Persist all features except LUTs" />
-    <MaxIterations Value="5" Description="How often implementation shall try to write values to specific feature (due to complex feature dependencies, multiple write operations are sometimes necessary)" />
-    <Logging Status="On">
-        <LoggingFile Value="-" Description="Name and/or path for logging file" />
-        <LoggingLevel Value="4" Description="All messages will be logged (Info, Error, Warning, Debug, Trace)" />
-    </Logging>
-</SettingsStruct>
-<CameraSettings CameraID="DEV_000F310338D4" CameraModel="GT1920C (02-2611A)" FeatureCount="236">
-    <FeatureGroup Count="87">
-        <Feature Name="AcquisitionFrameCount" Type="Integer" Access="R/W">1</Feature>
-        <Feature Name="AcquisitionFrameRateAbs" Type="Float" Access="R/W">8.000064</Feature>
-        <Feature Name="AcquisitionMode" Type="Enumeration" Access="R/W">Continuous</Feature>
-        <Feature Name="ActionDeviceKey" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="ActionGroupKey" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="ActionGroupMask" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="ActionSelector" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="BalanceWhiteAuto" Type="Enumeration" Access="R/W">Off</Feature>
-        <Feature Name="BalanceWhiteAutoAdjustTol" Type="Integer" Access="R/W">5</Feature>
-        <Feature Name="BalanceWhiteAutoRate" Type="Integer" Access="R/W">100</Feature>
-        <Feature Name="BandwidthControlMode" Type="Enumeration" Access="R/W">StreamBytesPerSecond</Feature>
-        <Feature Name="BinningHorizontal" Type="Integer" Access="R/W">1</Feature>
-        <Feature Name="BinningVertical" Type="Integer" Access="R/W">1</Feature>
-        <Feature Name="ChunkModeActive" Type="Boolean" Access="R/W">False</Feature>
-        <Feature Name="ColorTransformationMode" Type="Enumeration" Access="R/W">Off</Feature>
-        <Feature Name="DSPSubregionBottom" Type="Integer" Access="R/W">1456</Feature>
-        <Feature Name="DSPSubregionLeft" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="DSPSubregionRight" Type="Integer" Access="R/W">1936</Feature>
-        <Feature Name="DSPSubregionTop" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="DecimationHorizontal" Type="Integer" Access="R/W">1</Feature>
-        <Feature Name="DecimationVertical" Type="Integer" Access="R/W">1</Feature>
-        <Feature Name="DefectMaskEnable" Type="Boolean" Access="R/W">True</Feature>
-        <Feature Name="DeviceUserID" Type="String" Access="R/W"></Feature>
-        <Feature Name="ExposureAuto" Type="Enumeration" Access="R/W">Off</Feature>
-        <Feature Name="ExposureAutoAdjustTol" Type="Integer" Access="R/W">5</Feature>
-        <Feature Name="ExposureAutoAlg" Type="Enumeration" Access="R/W">Mean</Feature>
-        <Feature Name="ExposureAutoMax" Type="Integer" Access="R/W">500000</Feature>
-        <Feature Name="ExposureAutoMin" Type="Integer" Access="R/W">10</Feature>
-        <Feature Name="ExposureAutoOutliers" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="ExposureAutoRate" Type="Integer" Access="R/W">100</Feature>
-        <Feature Name="ExposureAutoTarget" Type="Integer" Access="R/W">50</Feature>
-        <Feature Name="ExposureMode" Type="Enumeration" Access="R/W">Timed</Feature>
-        <Feature Name="ExposureTimeAbs" Type="Float" Access="R/W">15000.000000</Feature>
-        <Feature Name="GVCPCmdRetries" Type="Integer" Access="R/W">5</Feature>
-        <Feature Name="GVCPCmdTimeout" Type="Integer" Access="R/W">250</Feature>
-        <Feature Name="GVSPBurstSize" Type="Integer" Access="R/W">1</Feature>
-        <Feature Name="GVSPDriver" Type="Enumeration" Access="R/W">Socket</Feature>
-        <Feature Name="GVSPHostReceiveBufferSize" Type="Integer" Access="R/W">67108864</Feature>
-        <Feature Name="GVSPMaxLookBack" Type="Integer" Access="R/W">30</Feature>
-        <Feature Name="GVSPMaxRequests" Type="Integer" Access="R/W">1</Feature>
-        <Feature Name="GVSPMaxWaitSize" Type="Integer" Access="R/W">100</Feature>
-        <Feature Name="GVSPMissingSize" Type="Integer" Access="R/W">256</Feature>
-        <Feature Name="GVSPPacketSize" Type="Integer" Access="R/W">8228</Feature>
-        <Feature Name="GVSPTiltingSize" Type="Integer" Access="R/W">100</Feature>
-        <Feature Name="GVSPTimeout" Type="Integer" Access="R/W">70</Feature>
-        <Feature Name="Gain" Type="Float" Access="R/W">33.000000</Feature>
-        <Feature Name="GainAuto" Type="Enumeration" Access="R/W">Off</Feature>
-        <Feature Name="GainAutoAdjustTol" Type="Integer" Access="R/W">5</Feature>
-        <Feature Name="GainAutoMax" Type="Float" Access="R/W">33.000000</Feature>
-        <Feature Name="GainAutoMin" Type="Float" Access="R/W">0.000000</Feature>
-        <Feature Name="GainAutoOutliers" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="GainAutoRate" Type="Integer" Access="R/W">100</Feature>
-        <Feature Name="GainAutoTarget" Type="Integer" Access="R/W">50</Feature>
-        <Feature Name="Gamma" Type="Float" Access="R/W">1.000000</Feature>
-        <Feature Name="GevHeartbeatInterval" Type="Integer" Access="R/W">1450</Feature>
-        <Feature Name="GevHeartbeatTimeout" Type="Integer" Access="R/W">3000</Feature>
-        <Feature Name="GevSCPSPacketSize" Type="Integer" Access="R/W">8228</Feature>
-        <Feature Name="Height" Type="Integer" Access="R/W">1456</Feature>
-        <Feature Name="Hue" Type="Float" Access="R/W">0.000000</Feature>
-        <Feature Name="IrisAutoTarget" Type="Integer" Access="R/W">50</Feature>
-        <Feature Name="IrisMode" Type="Enumeration" Access="R/W">Disabled</Feature>
-        <Feature Name="LensDCDriveStrength" Type="Integer" Access="R/W">10</Feature>
-        <Feature Name="LensPIrisFrequency" Type="Integer" Access="R/W">100</Feature>
-        <Feature Name="LensPIrisNumSteps" Type="Integer" Access="R/W">50</Feature>
-        <Feature Name="LensPIrisPosition" Type="Integer" Access="R/W">50</Feature>
-        <Feature Name="MulticastEnable" Type="Boolean" Access="R/W">False</Feature>
-        <Feature Name="MulticastIPAddress" Type="Integer" Access="R/W">4026470193</Feature>
-        <Feature Name="OffsetX" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="OffsetY" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="PixelFormat" Type="Enumeration" Access="R/W">BayerRG8</Feature>
-        <Feature Name="PtpAcquisitionGateTime" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="PtpMode" Type="Enumeration" Access="R/W">Off</Feature>
-        <Feature Name="RecorderPreEventCount" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="ReverseX" Type="Boolean" Access="R/W">False</Feature>
-        <Feature Name="ReverseY" Type="Boolean" Access="R/W">False</Feature>
-        <Feature Name="Saturation" Type="Float" Access="R/W">1.000000</Feature>
-        <Feature Name="SensorDigitizationTaps" Type="Enumeration" Access="R/W">Four</Feature>
-        <Feature Name="StreamBufferHandlingMode" Type="Enumeration" Access="R/W">Default</Feature>
-        <Feature Name="StreamBytesPerSecond" Type="Integer" Access="R/W">115000000</Feature>
-        <Feature Name="StreamFrameRateConstrain" Type="Boolean" Access="R/W">True</Feature>
-        <Feature Name="StreamHoldEnable" Type="Enumeration" Access="R/W">Off</Feature>
-        <Feature Name="StrobeDelay" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="StrobeDuration" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="StrobeDurationMode" Type="Enumeration" Access="R/W">Source</Feature>
-        <Feature Name="StrobeSource" Type="Enumeration" Access="R/W">FrameTrigger</Feature>
-        <Feature Name="SyncOutLevels" Type="Integer" Access="R/W">0</Feature>
-        <Feature Name="Width" Type="Integer" Access="R/W">1936</Feature>
-    </FeatureGroup>
-    <SelectorGroup Count="6" SelectedFeatures="13">
-        <Selector Name="BalanceRatioSelector" Type="Enumeration" SelectedFeatures="1">
-            <SelectorCombination Entry="Red" Feature="BalanceRatioAbs" Type="Float">1.500000</SelectorCombination>
-            <SelectorCombination Entry="Blue" Feature="BalanceRatioAbs" Type="Float">1.800000</SelectorCombination>
-        </Selector>
-        <Selector Name="ColorTransformationValueSelector" Type="Enumeration" SelectedFeatures="1">
-            <SelectorCombination Entry="Gain00" Feature="ColorTransformationValue" Type="Float">1.000000</SelectorCombination>
-            <SelectorCombination Entry="Gain01" Feature="ColorTransformationValue" Type="Float">0.000000</SelectorCombination>
-            <SelectorCombination Entry="Gain02" Feature="ColorTransformationValue" Type="Float">0.000000</SelectorCombination>
-            <SelectorCombination Entry="Gain10" Feature="ColorTransformationValue" Type="Float">0.000000</SelectorCombination>
-            <SelectorCombination Entry="Gain11" Feature="ColorTransformationValue" Type="Float">1.000000</SelectorCombination>
-            <SelectorCombination Entry="Gain12" Feature="ColorTransformationValue" Type="Float">0.000000</SelectorCombination>
-            <SelectorCombination Entry="Gain20" Feature="ColorTransformationValue" Type="Float">0.000000</SelectorCombination>
-            <SelectorCombination Entry="Gain21" Feature="ColorTransformationValue" Type="Float">0.000000</SelectorCombination>
-            <SelectorCombination Entry="Gain22" Feature="ColorTransformationValue" Type="Float">1.000000</SelectorCombination>
-        </Selector>
-        <Selector Name="EventSelector" Type="Enumeration" SelectedFeatures="2">
-            <SelectorCombination Entry="AcquisitionStart" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionStart" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionEnd" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionEnd" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="FrameTrigger" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="FrameTrigger" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="ExposureEnd" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="ExposureEnd" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionRecordTrigger" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionRecordTrigger" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="PtpSyncLost" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="PtpSyncLost" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="PtpSyncLocked" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="PtpSyncLocked" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="Line1RisingEdge" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="Line1RisingEdge" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="Line1FallingEdge" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="Line1FallingEdge" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="Line2RisingEdge" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="Line2RisingEdge" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="Line2FallingEdge" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="Line2FallingEdge" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="Line3RisingEdge" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="Line3RisingEdge" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="Line3FallingEdge" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="Line3FallingEdge" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="Line4RisingEdge" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="Line4RisingEdge" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="Line4FallingEdge" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="Line4FallingEdge" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="FrameTriggerReady" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="FrameTriggerReady" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="ExposureStart" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="ExposureStart" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="Action0" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="Action0" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="Action1" Feature="EventNotification" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="Action1" Feature="EventsEnable1" Type="Integer">0</SelectorCombination>
-        </Selector>
-        <Selector Name="SyncInSelector" Type="Enumeration" SelectedFeatures="1">
-            <SelectorCombination Entry="SyncIn1" Feature="SyncInGlitchFilter" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="SyncIn2" Feature="SyncInGlitchFilter" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="SyncIn3" Feature="SyncInGlitchFilter" Type="Integer">0</SelectorCombination>
-            <SelectorCombination Entry="SyncIn4" Feature="SyncInGlitchFilter" Type="Integer">0</SelectorCombination>
-        </Selector>
-        <Selector Name="SyncOutSelector" Type="Enumeration" SelectedFeatures="2">
-            <SelectorCombination Entry="SyncOut1" Feature="SyncOutSource" Type="Enumeration">Exposing</SelectorCombination>
-            <SelectorCombination Entry="SyncOut1" Feature="SyncOutPolarity" Type="Enumeration">Normal</SelectorCombination>
-            <SelectorCombination Entry="SyncOut2" Feature="SyncOutSource" Type="Enumeration">Exposing</SelectorCombination>
-            <SelectorCombination Entry="SyncOut2" Feature="SyncOutPolarity" Type="Enumeration">Normal</SelectorCombination>
-            <SelectorCombination Entry="SyncOut3" Feature="SyncOutSource" Type="Enumeration">Exposing</SelectorCombination>
-            <SelectorCombination Entry="SyncOut3" Feature="SyncOutPolarity" Type="Enumeration">Normal</SelectorCombination>
-            <SelectorCombination Entry="SyncOut4" Feature="SyncOutSource" Type="Enumeration">Exposing</SelectorCombination>
-            <SelectorCombination Entry="SyncOut4" Feature="SyncOutPolarity" Type="Enumeration">Normal</SelectorCombination>
-        </Selector>
-        <Selector Name="TriggerSelector" Type="Enumeration" SelectedFeatures="6">
-            <SelectorCombination Entry="FrameStart" Feature="TriggerMode" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="FrameStart" Feature="TriggerSource" Type="Enumeration">Freerun</SelectorCombination>
-            <SelectorCombination Entry="FrameStart" Feature="TriggerActivation" Type="Enumeration">RisingEdge</SelectorCombination>
-            <SelectorCombination Entry="FrameStart" Feature="TriggerOverlap" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="FrameStart" Feature="TriggerDelayAbs" Type="Float">0.000000</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionStart" Feature="TriggerMode" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionStart" Feature="TriggerSource" Type="Enumeration">Line1</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionStart" Feature="TriggerActivation" Type="Enumeration">RisingEdge</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionEnd" Feature="TriggerMode" Type="Enumeration">Off</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionEnd" Feature="TriggerSource" Type="Enumeration">Line1</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionEnd" Feature="TriggerActivation" Type="Enumeration">RisingEdge</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionRecord" Feature="TriggerMode" Type="Enumeration">On</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionRecord" Feature="TriggerSource" Type="Enumeration">Line1</SelectorCombination>
-            <SelectorCombination Entry="AcquisitionRecord" Feature="TriggerActivation" Type="Enumeration">RisingEdge</SelectorCombination>
-        </Selector>
-    </SelectorGroup>
-    <IgnoredFeatures Count="131">
-        <Feature Name="AcquisitionAbort" Type="Command" Access="W"></Feature>
-        <Feature Name="AcquisitionFrameRateLimit" Type="Float" Access="R"></Feature>
-        <Feature Name="AcquisitionStart" Type="Command" Access="W"></Feature>
-        <Feature Name="AcquisitionStop" Type="Command" Access="W"></Feature>
-        <Selector Name="ColorTransformationSelector" Type="Enumeration" SelectedFeatures="1"></Selector>
-        <Feature Name="DeviceFirmwareVersion" Type="String" Access="R"></Feature>
-        <Feature Name="DeviceID" Type="String" Access="R"></Feature>
-        <Feature Name="DeviceModelName" Type="String" Access="R"></Feature>
-        <Feature Name="DevicePartNumber" Type="String" Access="R"></Feature>
-        <Feature Name="DeviceScanType" Type="Enumeration" Access="R"></Feature>
-        <Feature Name="DeviceTemperature" Type="Float" Access="R"></Feature>
-        <Selector Name="DeviceTemperatureSelector" Type="Enumeration" SelectedFeatures="1"></Selector>
-        <Feature Name="DeviceVendorName" Type="String" Access="R"></Feature>
-        <Feature Name="EventAcquisitionEnd" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAcquisitionEndFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAcquisitionEndTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAcquisitionRecordTrigger" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAcquisitionRecordTriggerFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAcquisitionRecordTriggerTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAcquisitionStart" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAcquisitionStartFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAcquisitionStartTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAction0" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAction0FrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAction0Timestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAction1" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAction1FrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventAction1Timestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventError" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventErrorFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventErrorTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventExposureEnd" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventExposureEndFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventExposureEndTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventExposureStart" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventExposureStartFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventExposureStartTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventFrameTrigger" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventFrameTriggerFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventFrameTriggerReady" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventFrameTriggerReadyFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventFrameTriggerReadyTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventFrameTriggerTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine1FallingEdge" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine1FallingEdgeFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine1FallingEdgeTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine1RisingEdge" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine1RisingEdgeFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine1RisingEdgeTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine2FallingEdge" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine2FallingEdgeFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine2FallingEdgeTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine2RisingEdge" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine2RisingEdgeFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventLine2RisingEdgeTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventOverflow" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventOverflowFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventOverflowTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventPtpSyncLocked" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventPtpSyncLockedFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventPtpSyncLockedTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventPtpSyncLost" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventPtpSyncLostFrameID" Type="Integer" Access="R"></Feature>
-        <Feature Name="EventPtpSyncLostTimestamp" Type="Integer" Access="R"></Feature>
-        <Feature Name="FirmwareVerBuild" Type="Integer" Access="R"></Feature>
-        <Feature Name="FirmwareVerMajor" Type="Integer" Access="R"></Feature>
-        <Feature Name="FirmwareVerMinor" Type="Integer" Access="R"></Feature>
-        <Feature Name="GVSPAdjustPacketSize" Type="Command" Access="R/W"></Feature>
-        <Feature Name="GVSPFilterVersion" Type="String" Access="R"></Feature>
-        <Selector Name="GainSelector" Type="Enumeration" SelectedFeatures="3"></Selector>
-        <Feature Name="GevCurrentDefaultGateway" Type="Integer" Access="R"></Feature>
-        <Feature Name="GevCurrentIPAddress" Type="Integer" Access="R"></Feature>
-        <Feature Name="GevCurrentSubnetMask" Type="Integer" Access="R"></Feature>
-        <Feature Name="GevDeviceMACAddress" Type="Integer" Access="R"></Feature>
-        <Feature Name="GevIPConfigurationMode" Type="Enumeration" Access="R"></Feature>
-        <Feature Name="GevPersistentDefaultGateway" Type="Integer" Access="R"></Feature>
-        <Feature Name="GevPersistentIPAddress" Type="Integer" Access="R"></Feature>
-        <Feature Name="GevPersistentSubnetMask" Type="Integer" Access="R"></Feature>
-        <Feature Name="GevTimestampControlLatch" Type="Command" Access="W"></Feature>
-        <Feature Name="GevTimestampControlReset" Type="Command" Access="W"></Feature>
-        <Feature Name="GevTimestampTickFrequency" Type="Integer" Access="R"></Feature>
-        <Feature Name="GevTimestampValue" Type="Integer" Access="R"></Feature>
-        <Feature Name="HeightMax" Type="Integer" Access="R"></Feature>
-        <Feature Name="ImageSize" Type="Integer" Access="R"></Feature>
-        <Feature Name="IrisVideoLevel" Type="Integer" Access="R"></Feature>
-        <Feature Name="LUTAddress" Type="Integer" Access="R"></Feature>
-        <Feature Name="LUTBitDepthIn" Type="Integer" Access="R"></Feature>
-        <Feature Name="LUTBitDepthOut" Type="Integer" Access="R"></Feature>
-        <Feature Name="LUTEnable" Type="Boolean" Access="R/W"></Feature>
-        <Feature Name="LUTIndex" Type="Integer" Access="R/W"></Feature>
-        <Feature Name="LUTLoadAll" Type="Command" Access="W"></Feature>
-        <Feature Name="LUTMode" Type="Enumeration" Access="R/W"></Feature>
-        <Feature Name="LUTSaveAll" Type="Command" Access="W"></Feature>
-        <Feature Name="LUTSelector" Type="Enumeration" Access="R/W"></Feature>
-        <Feature Name="LUTSizeBytes" Type="Integer" Access="R"></Feature>
-        <Feature Name="LUTValue" Type="Integer" Access="R/W"></Feature>
-        <Feature Name="NonImagePayloadSize" Type="Integer" Access="R"></Feature>
-        <Feature Name="PayloadSize" Type="Integer" Access="R"></Feature>
-        <Feature Name="PtpStatus" Type="Enumeration" Access="R"></Feature>
-        <Feature Name="SensorBits" Type="Integer" Access="R"></Feature>
-        <Feature Name="SensorHeight" Type="Integer" Access="R"></Feature>
-        <Feature Name="SensorTaps" Type="Enumeration" Access="R"></Feature>
-        <Feature Name="SensorType" Type="Enumeration" Access="R"></Feature>
-        <Feature Name="SensorWidth" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatFrameDelivered" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatFrameDropped" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatFrameRate" Type="Float" Access="R"></Feature>
-        <Feature Name="StatFrameRescued" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatFrameShoved" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatFrameUnderrun" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatLocalRate" Type="Float" Access="R"></Feature>
-        <Feature Name="StatPacketErrors" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatPacketMissed" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatPacketReceived" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatPacketRequested" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatPacketResent" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatPacketUnavailable" Type="Integer" Access="R"></Feature>
-        <Feature Name="StatTimeElapsed" Type="Float" Access="R"></Feature>
-        <Feature Name="StreamAnnounceBufferMinimum" Type="Integer" Access="R"></Feature>
-        <Feature Name="StreamAnnouncedBufferCount" Type="Integer" Access="R"></Feature>
-        <Feature Name="StreamHoldCapacity" Type="Integer" Access="R"></Feature>
-        <Feature Name="StreamID" Type="String" Access="R"></Feature>
-        <Feature Name="StreamType" Type="Enumeration" Access="R"></Feature>
-        <Feature Name="SyncInLevels" Type="Integer" Access="R"></Feature>
-        <Feature Name="TriggerSoftware" Type="Command" Access="W"></Feature>
-        <Feature Name="UserSetDefaultSelector" Type="Enumeration" Access="R/W"></Feature>
-        <Feature Name="UserSetLoad" Type="Command" Access="R/W"></Feature>
-        <Feature Name="UserSetSave" Type="Command" Access="W"></Feature>
-        <Feature Name="UserSetSelector" Type="Enumeration" Access="R/W"></Feature>
-        <Feature Name="VsubValue" Type="Integer" Access="R"></Feature>
-        <Feature Name="WidthMax" Type="Integer" Access="R"></Feature>
-    </IgnoredFeatures>
-</CameraSettings>
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/EventHandling b/VimbaCPP/Examples/Bin/x86_64bit/EventHandling
deleted file mode 100755
index 253fe1bdb448ee3f2feabd8d5f0faedecc5335bc..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/EventHandling and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/ListAncillaryDataFeatures b/VimbaCPP/Examples/Bin/x86_64bit/ListAncillaryDataFeatures
deleted file mode 100755
index 869f2b76c0598f1292ead28fbdc53d953e151bda..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/ListAncillaryDataFeatures and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/ListCameras b/VimbaCPP/Examples/Bin/x86_64bit/ListCameras
deleted file mode 100755
index bdcdcd244d42fa73c44e7684a4854a419d6bac6e..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/ListCameras and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/ListFeatures b/VimbaCPP/Examples/Bin/x86_64bit/ListFeatures
deleted file mode 100755
index 2a7f393bd447e9762e2023b61e2a068de64c83d0..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/ListFeatures and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/LoadSaveSettings b/VimbaCPP/Examples/Bin/x86_64bit/LoadSaveSettings
deleted file mode 100755
index 06b6c18bc3bae71cd974f609d6165e46336782a5..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/LoadSaveSettings and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/LookUpTable b/VimbaCPP/Examples/Bin/x86_64bit/LookUpTable
deleted file mode 100755
index 8920ad1395feb63197273096c90f784bc9a60b08..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/LookUpTable and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/SynchronousGrab.bmp b/VimbaCPP/Examples/Bin/x86_64bit/SynchronousGrab.bmp
deleted file mode 100644
index 27a9ce148614df31030f1ddff7c1f28249832b7c..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/SynchronousGrab.bmp and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/SynchronousGrabConsole b/VimbaCPP/Examples/Bin/x86_64bit/SynchronousGrabConsole
deleted file mode 100755
index aec536f91637617103f7a4c3e344a6ba50a124d2..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/SynchronousGrabConsole and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/SynchronousGrabQt b/VimbaCPP/Examples/Bin/x86_64bit/SynchronousGrabQt
deleted file mode 100755
index 3b04364ee521c8cb4f6be8f81fd11507cb5b4800..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/SynchronousGrabQt and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/UserSet b/VimbaCPP/Examples/Bin/x86_64bit/UserSet
deleted file mode 100755
index 79675b539283c9f426397d8c2f90811b7d01de9b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/UserSet and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/VimbaViewer b/VimbaCPP/Examples/Bin/x86_64bit/VimbaViewer
deleted file mode 100755
index 760d40f6a20600505f25e426945a8e03f094e0cc..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/VimbaViewer and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/features b/VimbaCPP/Examples/Bin/x86_64bit/features
deleted file mode 100644
index 7a21f30badd10238c848799ff616b6de0fc57f49..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Bin/x86_64bit/features
+++ /dev/null
@@ -1,2466 +0,0 @@
-
-///////////////////////////////////////
-/// Vimba API List Features Example ///
-///////////////////////////////////////
-
-Vimba C++ API Version 1.9.0
-Printing all features of camera with ID: DEV_000F310338D4
-/// Feature Name   : AcquisitionAbort
-/// Display Name   : AcquisitionAbort
-/// Tooltip        : Abort acquisition. Acquisition will stop immediately, but a partially transferred image will be completed.
-/// Description    : Abort acquisition. Acquisition will stop immediately, but a partially transferred image will be completed.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : [None]
-/// Type           : Command feature
-
-/// Feature Name   : AcquisitionFrameCount
-/// Display Name   : AcquisitionFrameCount
-/// Tooltip        : This is the number of images to acquire when in MultiFrame and Recorder acquisition modes.
-/// Description    : This is the number of images to acquire when in MultiFrame and Recorder acquisition modes.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : 1
-/// Maximum        : 65535
-/// Type           : Long long integer
-
-/// Feature Name   : AcquisitionFrameRateAbs
-/// Display Name   : AcquisitionFrameRateAbs
-/// Tooltip        : Frame rate, in frames per second. This is applicable when either the FrameStart trigger mode is disabled, or the FrameStart trigger source is FixedRate. Depending on the exposure duration, the camera may not achieve the frame rate set here.
-/// Description    : Frame rate, in frames per second. This is applicable when either the FrameStart trigger mode is disabled, or the FrameStart trigger source is FixedRate. Depending on the exposure duration, the camera may not achieve the frame rate set here.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 8.00006
-/// Minimum        : 0.0372529
-/// Maximum        : 39.3422
-/// Type           : Double precision floating point
-
-/// Feature Name   : AcquisitionFrameRateLimit
-/// Display Name   : AcquisitionFrameRateLimit
-/// Tooltip        : This is the maximum frame rate possible for the current exposure duration and image format.
-/// Description    : This is the maximum frame rate possible for the current exposure duration and image format.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 39.3422
-/// Minimum        : 0.0372529
-/// Maximum        : 39.3422
-/// Type           : Double precision floating point
-
-/// Feature Name   : AcquisitionMode
-/// Display Name   : AcquisitionMode
-/// Tooltip        : The acquisition mode determines the behavior of the camera when acquisition start is triggered. "Continuous" mode: the camera will acquire images until acquisition stop is triggered. "SingleFrame" mode: the camera will acquire a single image. "MultiFrame" mode: the camera will acquire the number of images specified by AcquisitionFrameCount. "Recorder" mode: the camera will run continuously, and when the recorder event is triggered, send pre-trigger and post-trigger images to the host.
-/// Description    : The acquisition mode determines the behavior of the camera when acquisition start is triggered. "Continuous" mode: the camera will acquire images until acquisition stop is triggered. "SingleFrame" mode: the camera will acquire a single image. "MultiFrame" mode: the camera will acquire the number of images specified by AcquisitionFrameCount. "Recorder" mode: the camera will run continuously, and when the recorder event is triggered, send pre-trigger and post-trigger images to the host.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Continuous
-/// Type           : Enumeration
-
-/// Feature Name   : AcquisitionStart
-/// Display Name   : AcquisitionStart
-/// Tooltip        : Start acquisition. Before image acquisition can occur, acquisition must be started, either by a hardware trigger or this software command.
-/// Description    : Start acquisition. Before image acquisition can occur, acquisition must be started, either by a hardware trigger or this software command.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : [None]
-/// Type           : Command feature
-
-/// Feature Name   : AcquisitionStop
-/// Display Name   : AcquisitionStop
-/// Tooltip        : Stop acquisition. Acquisition will stop after acquisition of the current frame is complete.
-/// Description    : Stop acquisition. Acquisition will stop after acquisition of the current frame is complete.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : [None]
-/// Type           : Command feature
-
-/// Feature Name   : ActionDeviceKey
-/// Display Name   : Action Device Key
-/// Tooltip        : Provides the device key that allows the device to check the validity of action commands.
-/// Description    : Provides the device key that allows the device to check the validity of action commands. The device internal assertion of an action signal is only authorized if the ActionDeviceKey and the action device key value in the protocol message are equal.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : ActionGroupKey
-/// Display Name   : Action Group Key
-/// Tooltip        : Provides the key that the device will use to validate the action on reception of the action protocol message.
-/// Description    : Provides the key that the device will use to validate the action on reception of the action protocol message.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : ActionGroupMask
-/// Display Name   : Action Group Mask
-/// Tooltip        : Provides the mask that the device will use to validate the action on reception of the action protocol message.
-/// Description    : Provides the mask that the device will use to validate the action on reception of the action protocol message.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : ActionSelector
-/// Display Name   : Action Selector
-/// Tooltip        : Selects to which Action Signal further Action settings apply.
-/// Description    : Selects to which Action Signal further Action settings apply.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 1
-/// Type           : Long long integer
-
-/// Feature Name   : BalanceRatioAbs
-/// Display Name   : BalanceRatioAbs
-/// Tooltip        : Adjust the gain of the red or blue channel (see BalanceRatioSelector). The green channel gain is always 1.00.
-/// Description    : Adjust the gain of the red or blue channel (see BalanceRatioSelector). The green channel gain is always 1.00.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1.5
-/// Minimum        : 0.8
-/// Maximum        : 3
-/// Type           : Double precision floating point
-
-/// Feature Name   : BalanceRatioSelector
-/// Display Name   : BalanceRatioSelector
-/// Tooltip        : Select the Red or Blue channel to adjust with BalanceRatioAbs.
-/// Description    : Select the Red or Blue channel to adjust with BalanceRatioAbs.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Red
-/// Type           : Enumeration
-
-/// Feature Name   : BalanceWhiteAuto
-/// Display Name   : BalanceWhiteAuto
-/// Tooltip        : Method used to set White Balance values. Off: automatic mode is off. Once: auto-whitebalance occurs until target is achieved, then BalanceWhiteAuto returns to Off. Continuous: auto-whitebalance always runs.
-/// Description    : Method used to set White Balance values. Off: automatic mode is off. Once: auto-whitebalance occurs until target is achieved, then BalanceWhiteAuto returns to Off. Continuous: auto-whitebalance always runs.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Off
-/// Type           : Enumeration
-
-/// Feature Name   : BalanceWhiteAutoAdjustTol
-/// Display Name   : BalanceWhiteAutoAdjustTol
-/// Tooltip        : Tolerance, in percent, allowed from the ideal whitebalance values, within which the auto-whitebalance does not run. This prevents needless small adjustments from occurring each image.
-/// Description    : Tolerance, in percent, allowed from the ideal whitebalance values, within which the auto-whitebalance does not run. This prevents needless small adjustments from occurring each image.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 5
-/// Minimum        : 0
-/// Maximum        : 50
-/// Type           : Long long integer
-
-/// Feature Name   : BalanceWhiteAutoRate
-/// Display Name   : BalanceWhiteAutoRate
-/// Tooltip        : Rate of white balance adjustments, from 1 (slowest) to 100 (fastest). Use this control to slow down the auto-whitebalance adjustments.
-/// Description    : Rate of white balance adjustments, from 1 (slowest) to 100 (fastest). Use this control to slow down the auto-whitebalance adjustments.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 100
-/// Minimum        : 1
-/// Maximum        : 100
-/// Type           : Long long integer
-
-/// Feature Name   : BandwidthControlMode
-/// Display Name   : BandwidthControlMode
-/// Tooltip        : Bandwidth allocation can be controlled by StreamBytesPerSecond, or by register SCPD0. If you do not understand SCPD0 and how this driver uses this register, leave this set to "StreamBytesPerSecond".
-/// Description    : Bandwidth allocation can be controlled by StreamBytesPerSecond, or by register SCPD0. If you do not understand SCPD0 and how this driver uses this register, leave this set to "StreamBytesPerSecond".
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : StreamBytesPerSecond
-/// Type           : Enumeration
-
-/// Feature Name   : BinningHorizontal
-/// Display Name   : BinningHorizontal
-/// Tooltip        : Binning in horizontal direction. Binning is the summing of charge of adjacent pixels.
-/// Description    : Binning in horizontal direction. Binning is the summing of charge of adjacent pixels.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : 1
-/// Maximum        : 8
-/// Type           : Long long integer
-
-/// Feature Name   : BinningVertical
-/// Display Name   : BinningVertical
-/// Tooltip        : Binning in vertical direction. Binning is the summing of charge of adjacent pixels.
-/// Description    : Binning in vertical direction. Binning is the summing of charge of adjacent pixels.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : 1
-/// Maximum        : 8
-/// Type           : Long long integer
-
-/// Feature Name   : ChunkModeActive
-/// Display Name   : ChunkModeActive
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Type           : Boolean
-
-/// Feature Name   : ColorTransformationMode
-/// Display Name   : ColorTransformationMode
-/// Tooltip        : Selects the mode for the color transformation.
-/// Description    : Selects the mode for the color transformation.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Off
-/// Type           : Enumeration
-
-/// Feature Name   : ColorTransformationSelector
-/// Display Name   : ColorTransformationSelector
-/// Tooltip        : Selects which Color Transformation module is controlled by the various Color Transformation features.
-/// Description    : Selects which Color Transformation module is controlled by the various Color Transformation features.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : RGBtoRGB
-/// Type           : Enumeration
-
-/// Feature Name   : ColorTransformationValue
-/// Display Name   : ColorTransformationValue
-/// Tooltip        : Represents the value of the selected Gain factor or Offset inside the Transformation matrix.
-/// Description    : Represents the value of the selected Gain factor or Offset inside the Transformation matrix.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : -2
-/// Maximum        : 2
-/// Type           : Double precision floating point
-
-/// Feature Name   : ColorTransformationValueSelector
-/// Display Name   : ColorTransformationValueSelector
-/// Tooltip        : Selects the Gain factor or Offset of the Transformation matrix to access in the selected Color Transformation module.
-/// Description    : Selects the Gain factor or Offset of the Transformation matrix to access in the selected Color Transformation module.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Gain00
-/// Type           : Enumeration
-
-/// Feature Name   : DSPSubregionBottom
-/// Display Name   : DSPSubregionBottom
-/// Tooltip        : The DSP subregion is the area of the image used for measurements in "auto-" functions such as auto-exposure and auto-gain. DSPSubregionBottom is the bottom row, relative to the current image region. For convenience, this value may be higher than the maximum Height.
-/// Description    : The DSP subregion is the area of the image used for measurements in "auto-" functions such as auto-exposure and auto-gain. DSPSubregionBottom is the bottom row, relative to the current image region. For convenience, this value may be higher than the maximum Height.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 1456
-/// Minimum        : 1
-/// Maximum        : 1456
-/// Type           : Long long integer
-
-/// Feature Name   : DSPSubregionLeft
-/// Display Name   : DSPSubregionLeft
-/// Tooltip        : The DSP subregion is the area of the image used for measurements in "auto-" functions such as auto-exposure and auto-gain. DSPSubregionLeft is the left column, relative to the current image region.
-/// Description    : The DSP subregion is the area of the image used for measurements in "auto-" functions such as auto-exposure and auto-gain. DSPSubregionLeft is the left column, relative to the current image region.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 1935
-/// Type           : Long long integer
-
-/// Feature Name   : DSPSubregionRight
-/// Display Name   : DSPSubregionRight
-/// Tooltip        : The DSP subregion is the area of the image used for measurements in "auto-" functions such as auto-exposure and auto-gain. DSPSubregionRight is the right column, relative to the current image region. For convenience, this value may be higher than the maximum Width.
-/// Description    : The DSP subregion is the area of the image used for measurements in "auto-" functions such as auto-exposure and auto-gain. DSPSubregionRight is the right column, relative to the current image region. For convenience, this value may be higher than the maximum Width.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 1936
-/// Minimum        : 1
-/// Maximum        : 1936
-/// Type           : Long long integer
-
-/// Feature Name   : DSPSubregionTop
-/// Display Name   : DSPSubregionTop
-/// Tooltip        : The DSP subregion is the area of the image used for measurements in "auto-" functions such as auto-exposure and auto-gain. DSPSubregionTop is the top row, relative to the current image region.
-/// Description    : The DSP subregion is the area of the image used for measurements in "auto-" functions such as auto-exposure and auto-gain. DSPSubregionTop is the top row, relative to the current image region.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 1455
-/// Type           : Long long integer
-
-/// Feature Name   : DecimationHorizontal
-/// Display Name   : DecimationHorizontal
-/// Tooltip        : Horizontal decimation (sub-sampling) of the image.
-/// Description    : Horizontal decimation (sub-sampling) of the image.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : 1
-/// Maximum        : 8
-/// Type           : Long long integer
-
-/// Feature Name   : DecimationVertical
-/// Display Name   : DecimationVertical
-/// Tooltip        : Vertical decimation (sub-sampling) of the image.
-/// Description    : Vertical decimation (sub-sampling) of the image.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : 1
-/// Maximum        : 8
-/// Type           : Long long integer
-
-/// Feature Name   : DefectMaskEnable
-/// Display Name   : DefectMaskEnable
-/// Tooltip        : Enable masking of defective columns. Defective columns are detected and recorded at the factory.
-/// Description    : Enable masking of defective columns. Defective columns are detected and recorded at the factory.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 1
-/// Type           : Boolean
-
-/// Feature Name   : DeviceFirmwareVersion
-/// Display Name   : DeviceFirmwareVersion
-/// Tooltip        : Firmware version of this AVT GigE camera.
-/// Description    : Firmware version of this AVT GigE camera.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 00.01.54.17562 
-/// Type           : String
-
-/// Feature Name   : DeviceID
-/// Display Name   : DeviceID
-/// Tooltip        : Serial number.
-/// Description    : Serial number.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 02-2611A-07380
-/// Type           : String
-
-/// Feature Name   : DeviceModelName
-/// Display Name   : DeviceModelName
-/// Tooltip        : Camera model name.
-/// Description    : Camera model name.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : GT1920C
-/// Type           : String
-
-/// Feature Name   : DevicePartNumber
-/// Display Name   : DevicePartNumber
-/// Tooltip        : Device part number.
-/// Description    : Device part number.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 02-2611A
-/// Type           : String
-
-/// Feature Name   : DeviceScanType
-/// Display Name   : DeviceScanType
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Areascan
-/// Type           : Enumeration
-
-/// Feature Name   : DeviceTemperature
-/// Display Name   : DeviceTemperature
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 39.343
-/// Minimum        : -1.79769e+308
-/// Maximum        : 1.79769e+308
-/// Type           : Double precision floating point
-
-/// Feature Name   : DeviceTemperatureSelector
-/// Display Name   : DeviceTemperatureSelector
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Main
-/// Type           : Enumeration
-
-/// Feature Name   : DeviceUserID
-/// Display Name   : DeviceUserID
-/// Tooltip        : User-programmable Device Identifier.
-/// Description    : User-programmable Device Identifier.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 
-/// Type           : String
-
-/// Feature Name   : DeviceVendorName
-/// Display Name   : DeviceVendorName
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Allied Vision Technologies
-/// Type           : String
-
-/// Feature Name   : EventAcquisitionEnd
-/// Display Name   : EventAcquisitionEnd
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40001
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventAcquisitionEndFrameID
-/// Display Name   : EventAcquisitionEndFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventAcquisitionEndTimestamp
-/// Display Name   : EventAcquisitionEndTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventAcquisitionRecordTrigger
-/// Display Name   : EventAcquisitionRecordTrigger
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 40004
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventAcquisitionRecordTriggerFrameID
-/// Display Name   : EventAcquisitionRecordTriggerFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventAcquisitionRecordTriggerTimestamp
-/// Display Name   : EventAcquisitionRecordTriggerTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventAcquisitionStart
-/// Display Name   : EventAcquisitionStart
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40000
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventAcquisitionStartFrameID
-/// Display Name   : EventAcquisitionStartFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventAcquisitionStartTimestamp
-/// Display Name   : EventAcquisitionStartTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventAction0
-/// Display Name   : EventAction0
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40020
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventAction0FrameID
-/// Display Name   : EventAction0FrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventAction0Timestamp
-/// Display Name   : EventAction0Timestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventAction1
-/// Display Name   : EventAction1
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40021
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventAction1FrameID
-/// Display Name   : EventAction1FrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventAction1Timestamp
-/// Display Name   : EventAction1Timestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventError
-/// Display Name   : EventError
-/// Tooltip        : ID value of error event. The error event occurs if there is a problem on the camera; this event should be reported to technical support. If you use the message channel for event notification, you are always subscribed to this event.
-/// Description    : ID value of error event. The error event occurs if there is a problem on the camera; this event should be reported to technical support. If you use the message channel for event notification, you are always subscribed to this event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 65535
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventErrorFrameID
-/// Display Name   : EventErrorFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventErrorTimestamp
-/// Display Name   : EventErrorTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventExposureEnd
-/// Display Name   : EventExposureEnd
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40003
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventExposureEndFrameID
-/// Display Name   : EventExposureEndFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventExposureEndTimestamp
-/// Display Name   : EventExposureEndTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventExposureStart
-/// Display Name   : EventExposureStart
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40019
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventExposureStartFrameID
-/// Display Name   : EventExposureStartFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventExposureStartTimestamp
-/// Display Name   : EventExposureStartTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventFrameTrigger
-/// Display Name   : EventFrameTrigger
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40002
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventFrameTriggerFrameID
-/// Display Name   : EventFrameTriggerFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventFrameTriggerReady
-/// Display Name   : EventFrameTriggerReady
-/// Tooltip        : ID value of event.
-/// Description    : ID value of Frame Trigger Ready event. The Frame Trigger event occurs when the camera is ready for another frame aquisition
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40018
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventFrameTriggerReadyFrameID
-/// Display Name   : EventFrameTriggerReadyFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventFrameTriggerReadyTimestamp
-/// Display Name   : EventFrameTriggerReadyTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventFrameTriggerTimestamp
-/// Display Name   : EventFrameTriggerTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine1FallingEdge
-/// Display Name   : EventLine1FallingEdge
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40011
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine1FallingEdgeFrameID
-/// Display Name   : EventLine1FallingEdgeFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine1FallingEdgeTimestamp
-/// Display Name   : EventLine1FallingEdgeTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine1RisingEdge
-/// Display Name   : EventLine1RisingEdge
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40010
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine1RisingEdgeFrameID
-/// Display Name   : EventLine1RisingEdgeFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine1RisingEdgeTimestamp
-/// Display Name   : EventLine1RisingEdgeTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine2FallingEdge
-/// Display Name   : EventLine2FallingEdge
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40013
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine2FallingEdgeFrameID
-/// Display Name   : EventLine2FallingEdgeFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine2FallingEdgeTimestamp
-/// Display Name   : EventLine2FallingEdgeTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine2RisingEdge
-/// Display Name   : EventLine2RisingEdge
-/// Tooltip        : ID value of event.
-/// Description    : ID value of event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 40012
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine2RisingEdgeFrameID
-/// Display Name   : EventLine2RisingEdgeFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventLine2RisingEdgeTimestamp
-/// Display Name   : EventLine2RisingEdgeTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventNotification
-/// Display Name   : EventNotification
-/// Tooltip        : Activate event-notification on the GigE Vision message channel.
-/// Description    : Activate event-notification on the GigE Vision message channel.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Off
-/// Type           : Enumeration
-
-/// Feature Name   : EventOverflow
-/// Display Name   : EventOverflow
-/// Tooltip        : ID value of overflow event. The overflow event occurs when one or more notification events are lost on the camera. If you use the message channel for event notification, you are always subscribed to this event.
-/// Description    : ID value of overflow event. The overflow event occurs when one or more notification events are lost on the camera. If you use the message channel for event notification, you are always subscribed to this event.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 65534
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventOverflowFrameID
-/// Display Name   : EventOverflowFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventOverflowTimestamp
-/// Display Name   : EventOverflowTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventPtpSyncLocked
-/// Display Name   : EventPtpSyncLocked
-/// Tooltip        : 
-/// Description    : Camera has acquired synchronization to the master clock.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 40006
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventPtpSyncLockedFrameID
-/// Display Name   : EventPtpSyncLockedFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventPtpSyncLockedTimestamp
-/// Display Name   : EventPtpSyncLockedTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventPtpSyncLost
-/// Display Name   : EventPtpSyncLost
-/// Tooltip        : 
-/// Description    : Camera has lost synchronization to the master clock.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 40005
-/// Minimum        : -9223372036854775808
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventPtpSyncLostFrameID
-/// Display Name   : EventPtpSyncLostFrameID
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : EventPtpSyncLostTimestamp
-/// Display Name   : EventPtpSyncLostTimestamp
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : EventSelector
-/// Display Name   : EventSelector
-/// Tooltip        : Activate event-notification on the GigE Vision message channel.
-/// Description    : Activate event-notification on the GigE Vision message channel.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Action1
-/// Type           : Enumeration
-
-/// Feature Name   : EventsEnable1
-/// Display Name   : EventsEnable1
-/// Tooltip        : Activate event-notification on the GigE Vision message channel. For programmers. See register documentation.
-/// Description    : Activate event-notification on the GigE Vision message channel. For programmers. See register documentation.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : ExposureAuto
-/// Display Name   : ExposureAuto
-/// Tooltip        : Method used to set exposure duration, ExposureTimeAbs in Timed mode. Off: automatic mode is off. Once: auto-exposure occurs until target is achieved, then ExposureAuto returns to Off. Continuous: auto-exposure always runs.
-/// Description    : Method used to set exposure duration, ExposureTimeAbs in Timed mode. Off: automatic mode is off. Once: auto-exposure occurs until target is achieved, then ExposureAuto returns to Off. Continuous: auto-exposure always runs.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Off
-/// Type           : Enumeration
-
-/// Feature Name   : ExposureAutoAdjustTol
-/// Display Name   : ExposureAutoAdjustTol
-/// Tooltip        : Tolerance, in percent, allowed from the ideal exposure value, within which the auto-exposure does not run. This prevents needless small adjustments from occurring each image.
-/// Description    : Tolerance, in percent, allowed from the ideal exposure value, within which the auto-exposure does not run. This prevents needless small adjustments from occurring each image.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 5
-/// Minimum        : 0
-/// Maximum        : 50
-/// Type           : Long long integer
-
-/// Feature Name   : ExposureAutoAlg
-/// Display Name   : ExposureAutoAlg
-/// Tooltip        : Algorithm used for auto-exposure. Mean: target a particular mean value of all measured pixels in the image. FitRange: adjust the maximum pixel value to fit the sensor range.
-/// Description    : Algorithm used for auto-exposure. Mean: target a particular mean value of all measured pixels in the image. FitRange: adjust the maximum pixel value to fit the sensor range.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Mean
-/// Type           : Enumeration
-
-/// Feature Name   : ExposureAutoMax
-/// Display Name   : ExposureAutoMax
-/// Tooltip        : Maximum auto-exposure value, in microseconds.
-/// Description    : Maximum auto-exposure value, in microseconds.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 500000
-/// Minimum        : 10
-/// Maximum        : 26843545
-/// Type           : Long long integer
-
-/// Feature Name   : ExposureAutoMin
-/// Display Name   : ExposureAutoMin
-/// Tooltip        : Minimum auto-exposure value, in microseconds.
-/// Description    : Minimum auto-exposure value, in microseconds.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 10
-/// Minimum        : 10
-/// Maximum        : 26843545
-/// Type           : Long long integer
-
-/// Feature Name   : ExposureAutoOutliers
-/// Display Name   : ExposureAutoOutliers
-/// Tooltip        : Number of upper outliers to discard before calculating exposure adjustments. This is in ten-thousandths of the number pixels in the image.
-/// Description    : Number of upper outliers to discard before calculating exposure adjustments. This is in ten-thousandths of the number pixels in the image.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 1000
-/// Type           : Long long integer
-
-/// Feature Name   : ExposureAutoRate
-/// Display Name   : ExposureAutoRate
-/// Tooltip        : Rate of exposure adjustments, from 1 (slowest) to 100 (fastest). Use this control to slow down the auto-exposure adjustments.
-/// Description    : Rate of exposure adjustments, from 1 (slowest) to 100 (fastest). Use this control to slow down the auto-exposure adjustments.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 100
-/// Minimum        : 1
-/// Maximum        : 100
-/// Type           : Long long integer
-
-/// Feature Name   : ExposureAutoTarget
-/// Display Name   : ExposureAutoTarget
-/// Tooltip        : When ExposureAutoAlg is Mean, this is the target image mean value, in percent. Higher values result in brighter images.
-/// Description    : When ExposureAutoAlg is Mean, this is the target image mean value, in percent. Higher values result in brighter images.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 50
-/// Minimum        : 0
-/// Maximum        : 100
-/// Type           : Long long integer
-
-/// Feature Name   : ExposureMode
-/// Display Name   : ExposureMode
-/// Tooltip        : Method of control for exposure duration. Timed: exposure duration is set by ExposureTimeAbs. TriggerWidth: exposure controlled by external trigger pulse.
-/// Description    : Method of control for exposure duration. Timed: exposure duration is set by ExposureTimeAbs. TriggerWidth: exposure controlled by external trigger pulse.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Timed
-/// Type           : Enumeration
-
-/// Feature Name   : ExposureTimeAbs
-/// Display Name   : ExposureTimeAbs
-/// Tooltip        : Exposure duration in microseconds. Timed: Sensor integration time. TriggerWidth: Ignored.
-/// Description    : Exposure duration in microseconds. Timed: Sensor integration time. TriggerWidth: Ignored.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 15000
-/// Minimum        : 10
-/// Maximum        : 2.68435e+07
-/// Type           : Double precision floating point
-
-/// Feature Name   : FirmwareVerBuild
-/// Display Name   : FirmwareVerBuild
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 17562
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : FirmwareVerMajor
-/// Display Name   : FirmwareVerMajor
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : FirmwareVerMinor
-/// Display Name   : FirmwareVerMinor
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 54
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : GVCPCmdRetries
-/// Display Name   : Command Retries
-/// Tooltip        : 
-/// Description    : Number of time a particular command to the device will be resent when no answer is being received.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 5
-/// Minimum        : 1
-/// Maximum        : 9
-/// Type           : Long long integer
-
-/// Feature Name   : GVCPCmdTimeout
-/// Display Name   : Command Timeout
-/// Tooltip        : 
-/// Description    : Timeout waiting for an answer from the device.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 250
-/// Minimum        : 100
-/// Maximum        : 10000
-/// Type           : Long long integer
-
-/// Feature Name   : GVSPAdjustPacketSize
-/// Display Name   : GVSP Adjust Packet Size
-/// Tooltip        : 
-/// Description    : Request the packet size used to be adjusted automatically.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : [None]
-/// Type           : Command feature
-
-/// Feature Name   : GVSPBurstSize
-/// Display Name   : GVSP Burst Size
-/// Tooltip        : 
-/// Description    : Maximum number of GVSP packets to be processed in a burst.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : 1
-/// Maximum        : 256
-/// Type           : Long long integer
-
-/// Feature Name   : GVSPDriver
-/// Display Name   : GVSP Driver Selector
-/// Tooltip        : 
-/// Description    : Streaming driver to be used.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Socket
-/// Type           : Enumeration
-
-/// Feature Name   : GVSPFilterVersion
-/// Display Name   : GVSP Filter Version
-/// Tooltip        : 
-/// Description    : Version of the GVSP Filter driver.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : N/A
-/// Type           : String
-
-/// Feature Name   : GVSPHostReceiveBufferSize
-/// Display Name   : GVSP Host Receive Buffer Size
-/// Tooltip        : 
-/// Description    : Number of bytes to be used by the OS' socket (hint, SO_RCVBUF). The internally used value might be limited by the OS (e.g. /proc/sys/net/core/rmem_max).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 67108864
-/// Minimum        : 65536
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : GVSPMaxLookBack
-/// Display Name   : GVSP Max Look Back
-/// Tooltip        : 
-/// Description    : Size of the missing GVSP packets detection windows.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 30
-/// Minimum        : 0
-/// Maximum        : 1024
-/// Type           : Long long integer
-
-/// Feature Name   : GVSPMaxRequests
-/// Display Name   : GVSP Max Requests
-/// Tooltip        : 
-/// Description    : Maximum number of requests (to the device) for a missing GVSP packet.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : 0
-/// Maximum        : 512
-/// Type           : Long long integer
-
-/// Feature Name   : GVSPMaxWaitSize
-/// Display Name   : GVSP Max Wait Size
-/// Tooltip        : 
-/// Description    : Maximum number of received GVSP packets following a resend request to wait before requesting again.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 100
-/// Minimum        : 8
-/// Maximum        : 1024
-/// Type           : Long long integer
-
-/// Feature Name   : GVSPMissingSize
-/// Display Name   : GVSP Missing Size
-/// Tooltip        : 
-/// Description    : Maximum number of simultaneous missing GVSP packets before dropping the frame (0 = OFF).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 256
-/// Minimum        : 0
-/// Maximum        : 1024
-/// Type           : Long long integer
-
-/// Feature Name   : GVSPPacketSize
-/// Display Name   : GVSP Packet Size
-/// Tooltip        : 
-/// Description    : GVSP Packet size (in bytes).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 8228
-/// Minimum        : 500
-/// Maximum        : 9973
-/// Type           : Long long integer
-
-/// Feature Name   : GVSPTiltingSize
-/// Display Name   : GVSP Tilting Size
-/// Tooltip        : 
-/// Description    : Maximum number GVSP packets received from a following frame before dropping the frame (0 = OFF).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 100
-/// Minimum        : 0
-/// Maximum        : 1024
-/// Type           : Long long integer
-
-/// Feature Name   : GVSPTimeout
-/// Display Name   : GVSP Timeout
-/// Tooltip        : 
-/// Description    : Timeout (in ms) used for stream packets (0 = OFF).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 70
-/// Minimum        : 0
-/// Maximum        : 5000
-/// Type           : Long long integer
-
-/// Feature Name   : Gain
-/// Display Name   : Gain
-/// Tooltip        : Gain value of analog A/D stage. Units are usually in dB.
-/// Description    : Gain value of analog A/D stage. Units are usually in dB.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 33
-/// Minimum        : 0
-/// Maximum        : 33
-/// Type           : Double precision floating point
-
-/// Feature Name   : GainAuto
-/// Display Name   : GainAuto
-/// Tooltip        : Method used to set Gain. Off: automatic mode is off. Once: auto-gain occurs until target is achieved, then GainAuto returns to Off. Continuous: auto-gain always runs.
-/// Description    : Method used to set Gain. Off: automatic mode is off. Once: auto-gain occurs until target is achieved, then GainAuto returns to Off. Continuous: auto-gain always runs.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Off
-/// Type           : Enumeration
-
-/// Feature Name   : GainAutoAdjustTol
-/// Display Name   : GainAutoAdjustTol
-/// Tooltip        : Tolerance, in percent, allowed from the ideal gain value, within which the auto-gain does not run. This prevents needless small adjustments from occurring each image.
-/// Description    : Tolerance, in percent, allowed from the ideal gain value, within which the auto-gain does not run. This prevents needless small adjustments from occurring each image.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 5
-/// Minimum        : 0
-/// Maximum        : 50
-/// Type           : Long long integer
-
-/// Feature Name   : GainAutoMax
-/// Display Name   : GainAutoMax
-/// Tooltip        : Maximum auto-gain value.
-/// Description    : Maximum auto-gain value.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 33
-/// Minimum        : 0
-/// Maximum        : 33
-/// Type           : Double precision floating point
-
-/// Feature Name   : GainAutoMin
-/// Display Name   : GainAutoMin
-/// Tooltip        : Minimum auto-gain value.
-/// Description    : Minimum auto-gain value.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 33
-/// Type           : Double precision floating point
-
-/// Feature Name   : GainAutoOutliers
-/// Display Name   : GainAutoOutliers
-/// Tooltip        : Number of upper outliers to discard before calculating gain adjustments. This is in ten-thousandths of the number pixels in the image.
-/// Description    : Number of upper outliers to discard before calculating gain adjustments. This is in ten-thousandths of the number pixels in the image.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 1000
-/// Type           : Long long integer
-
-/// Feature Name   : GainAutoRate
-/// Display Name   : GainAutoRate
-/// Tooltip        : Rate of gain adjustments, from 1 (slowest) to 100 (fastest). Use this control to slow down the auto-gain adjustments.
-/// Description    : Rate of gain adjustments, from 1 (slowest) to 100 (fastest). Use this control to slow down the auto-gain adjustments.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 100
-/// Minimum        : 1
-/// Maximum        : 100
-/// Type           : Long long integer
-
-/// Feature Name   : GainAutoTarget
-/// Display Name   : GainAutoTarget
-/// Tooltip        : This is the target image mean value, in percent.
-/// Description    : This is the target image mean value, in percent.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 50
-/// Minimum        : 0
-/// Maximum        : 100
-/// Type           : Long long integer
-
-/// Feature Name   : GainSelector
-/// Display Name   : GainSelector
-/// Tooltip        : (GenICam boilerplate. Always All.)
-/// Description    : (GenICam boilerplate. Always All.)
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : All
-/// Type           : Enumeration
-
-/// Feature Name   : Gamma
-/// Display Name   : Gamma
-/// Tooltip        : Applies gamma value to the raw sensor signal.
-/// Description    : Applies gamma value to the raw sensor signal.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : 0.25
-/// Maximum        : 4
-/// Type           : Double precision floating point
-
-/// Feature Name   : GevCurrentDefaultGateway
-/// Display Name   : Current Default Gateway
-/// Tooltip        : 
-/// Description    : Current Default Gateway of the device.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : GevCurrentIPAddress
-/// Display Name   : Current IP Address
-/// Tooltip        : 
-/// Description    : Current IP address of the device.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 2852021250
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : GevCurrentSubnetMask
-/// Display Name   : Current Subnet Mask
-/// Tooltip        : 
-/// Description    : Current Subnet Mask of the device.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 4294967040
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : GevDeviceMACAddress
-/// Display Name   : Device MAC Address
-/// Tooltip        : 
-/// Description    : 48-bit MAC address of the GVCP interface of the selected remote device.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 65246804180
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : GevHeartbeatInterval
-/// Display Name   : Heartbeat Interval
-/// Tooltip        : 
-/// Description    : Interval of time (in ms) after which a heartbeat is sent by the host.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 1450
-/// Minimum        : 200
-/// Maximum        : 1450
-/// Type           : Long long integer
-
-/// Feature Name   : GevHeartbeatTimeout
-/// Display Name   : Heartbeat Timeout
-/// Tooltip        : 
-/// Description    : Interval of time (in ms) after which a device rejects control by a host if no heartbeat activity is registered.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 3000
-/// Minimum        : 1350
-/// Maximum        : 100000
-/// Type           : Long long integer
-
-/// Feature Name   : GevIPConfigurationMode
-/// Display Name   : IP Configuration Mode
-/// Tooltip        : 
-/// Description    : Current IP configuration mode.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Persistent
-/// Type           : Enumeration
-
-/// Feature Name   : GevPersistentDefaultGateway
-/// Display Name   : Persistent Default Gateway
-/// Tooltip        : 
-/// Description    : Persistent Default Gateway of the device.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : GevPersistentIPAddress
-/// Display Name   : Persistent IP Address
-/// Tooltip        : 
-/// Description    : Persistent IP address of the device.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 2852021250
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : GevPersistentSubnetMask
-/// Display Name   : Persistent Subnet Mask
-/// Tooltip        : 
-/// Description    : Persistent Subnet Mask of the device.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 4294967040
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : GevSCPSPacketSize
-/// Display Name   : GevSCPSPacketSize
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 8228
-/// Minimum        : 500
-/// Maximum        : 9973
-/// Type           : Long long integer
-
-/// Feature Name   : GevTimestampControlLatch
-/// Display Name   : GevTimestampControlLatch
-/// Tooltip        : Capture timestamp and store in GevTimestampValue.
-/// Description    : Capture timestamp and store in GevTimestampValue.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : [None]
-/// Type           : Command feature
-
-/// Feature Name   : GevTimestampControlReset
-/// Display Name   : GevTimestampControlReset
-/// Tooltip        : Reset the timestamp.
-/// Description    : Reset the timestamp.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : [None]
-/// Type           : Command feature
-
-/// Feature Name   : GevTimestampTickFrequency
-/// Display Name   : GevTimestampTickFrequency
-/// Tooltip        : Frequency of image timestamp, in Hertz.
-/// Description    : Frequency of image timestamp, in Hertz.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1000000000
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : GevTimestampValue
-/// Display Name   : GevTimestampValue
-/// Tooltip        : Value of timestamp, when latched by GevTimestampControlLatch.
-/// Description    : Value of timestamp, when latched by GevTimestampControlLatch.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : Height
-/// Display Name   : Height
-/// Tooltip        : Height of image, in pixels.
-/// Description    : Height of image, in pixels.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1456
-/// Minimum        : 1
-/// Maximum        : 1456
-/// Type           : Long long integer
-
-/// Feature Name   : HeightMax
-/// Display Name   : HeightMax
-/// Tooltip        : Maximum image height for the current image mode. Vertical binning, for example, will change this value.
-/// Description    : Maximum image height for the current image mode. Vertical binning, for example, will change this value.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1456
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : Hue
-/// Display Name   : Hue
-/// Tooltip        : Hue turns the color vectors in the U/V plane. It is 1 degree per step.
-/// Description    : Hue turns the color vectors in the U/V plane. It is 1 degree per step.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : -40
-/// Maximum        : 40
-/// Type           : Double precision floating point
-
-/// Feature Name   : ImageSize
-/// Display Name   : ImageSize
-/// Tooltip        : Size of images, in bytes, for the current format and size.
-/// Description    : Size of images, in bytes, for the current format and size.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 2818816
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : IrisAutoTarget
-/// Display Name   : IrisAutoTarget
-/// Tooltip        : This is the target image mean value, in percent.
-/// Description    : This is the target image mean value, in percent.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 50
-/// Minimum        : 0
-/// Maximum        : 100
-/// Type           : Long long integer
-
-/// Feature Name   : IrisMode
-/// Display Name   : IrisMode
-/// Tooltip        : Set the iris mode. Disabled: no iris control. Video: enable video iris. VideoOpen: fully open a video iris. VideoClose: fully close a video iris.
-/// Description    : Set the iris mode. Disabled: no iris control. Video: enable video iris. VideoOpen: fully open a video iris. VideoClose: fully close a video iris.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Disabled
-/// Type           : Enumeration
-
-/// Feature Name   : IrisVideoLevel
-/// Display Name   : IrisVideoLevel
-/// Tooltip        : Current video-iris level, in approximately mV pp; read only. When calibrating a video lens, this value should fall between IrisVideoLevelMin and IrisVideoLevelMax.
-/// Description    : Current video-iris level, in approximately mV pp; read only. When calibrating a video lens, this value should fall between IrisVideoLevelMin and IrisVideoLevelMax.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 150
-/// Type           : Long long integer
-
-/// Feature Name   : LUTAddress
-/// Display Name   : LUTAddress
-/// Tooltip        : Address of the memory area where the selected LUT is located (for raw memory transfer)
-/// Description    : Address of the memory area where the selected LUT is located (for raw memory transfer)
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 196608
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : LUTBitDepthIn
-/// Display Name   : LUTBitLengthIn
-/// Tooltip        : Bit length of the input value of the look up table block
-/// Description    : Bit length of the input value of the look up table block
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 12
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : LUTBitDepthOut
-/// Display Name   : LUTBitLengthOut
-/// Tooltip        : Bit length of the output value of the look up table block
-/// Description    : Bit length of the output value of the look up table block
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 12
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : LUTEnable
-/// Display Name   : LUTEnable
-/// Tooltip        : Activates the selected LUT.
-/// Description    : Activates the selected LUT.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Type           : Boolean
-
-/// Feature Name   : LUTIndex
-/// Display Name   : LUTIndex
-/// Tooltip        : Control the index of the coefficient to access in the selected look up table.
-/// Description    : Control the index of the coefficient to access in the selected look up table.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4095
-/// Type           : Long long integer
-
-/// Feature Name   : LUTLoadAll
-/// Display Name   : LUTLoadAll
-/// Tooltip        : Load all look up tables from Flash.
-/// Description    : Load all look up tables from Flash.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : [None]
-/// Type           : Command feature
-
-/// Feature Name   : LUTMode
-/// Display Name   : LUTMode
-/// Tooltip        : Selects which mode is used for the selected look up table.
-/// Description    : Selects which mode is used for the selected look up table.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Luminance
-/// Type           : Enumeration
-
-/// Feature Name   : LUTSaveAll
-/// Display Name   : LUTSaveAll
-/// Tooltip        : Save all look up tables in Flash.
-/// Description    : Save all look up tables in Flash.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : [None]
-/// Type           : Command feature
-
-/// Feature Name   : LUTSelector
-/// Display Name   : LUTSelector
-/// Tooltip        : Selects which look up table is used.
-/// Description    : Selects which look up table is used.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : LUT1
-/// Type           : Enumeration
-
-/// Feature Name   : LUTSizeBytes
-/// Display Name   : LUTSize
-/// Tooltip        : Size of the memory area where the LUT is located
-/// Description    : Size of the memory area where the LUT is located
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 8192
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : LUTValue
-/// Display Name   : LUTValue
-/// Tooltip        : Returns the Value at entry LUTIndex of the selected look up table
-/// Description    : Returns the Value at entry LUTIndex of the selected look up table
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 4095
-/// Minimum        : 0
-/// Maximum        : 4095
-/// Type           : Long long integer
-
-/// Feature Name   : LensDCDriveStrength
-/// Display Name   : LensDCDriveStrength
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 10
-/// Minimum        : 0
-/// Maximum        : 50
-/// Type           : Long long integer
-
-/// Feature Name   : LensPIrisFrequency
-/// Display Name   : LensPIrisFrequency
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 100
-/// Minimum        : 0
-/// Maximum        : 1000
-/// Type           : Long long integer
-
-/// Feature Name   : LensPIrisNumSteps
-/// Display Name   : LensPIrisNumSteps
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 50
-/// Minimum        : 1
-/// Maximum        : 1023
-/// Type           : Long long integer
-
-/// Feature Name   : LensPIrisPosition
-/// Display Name   : LensPIrisPosition
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 50
-/// Minimum        : 0
-/// Maximum        : 1022
-/// Type           : Long long integer
-
-/// Feature Name   : MulticastEnable
-/// Display Name   : Multicast Enable
-/// Tooltip        : 
-/// Description    : Enable multicast streaming.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Type           : Boolean
-
-/// Feature Name   : MulticastIPAddress
-/// Display Name   : Multicast IP Address
-/// Tooltip        : 
-/// Description    : IP address of the target multicasting group.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 4026470193
-/// Minimum        : 3758096384
-/// Maximum        : 4026531839
-/// Type           : Long long integer
-
-/// Feature Name   : NonImagePayloadSize
-/// Display Name   : NonImagePayloadSize
-/// Tooltip        : Maximum size of chunk data, not including the image chunk, in the image block payload.
-/// Description    : Maximum size of chunk data, not including the image chunk, in the image block payload.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : OffsetX
-/// Display Name   : OffsetX
-/// Tooltip        : Starting column of the readout region (relative to the first column of the sensor) in pixels.
-/// Description    : Starting column of the readout region (relative to the first column of the sensor) in pixels.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 0
-/// Type           : Long long integer
-
-/// Feature Name   : OffsetY
-/// Display Name   : OffsetY
-/// Tooltip        : Starting row of the readout region (relative to the first row of the sensor) in pixels.
-/// Description    : Starting row of the readout region (relative to the first row of the sensor) in pixels.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 0
-/// Type           : Long long integer
-
-/// Feature Name   : PayloadSize
-/// Display Name   : PayloadSize
-/// Tooltip        : Maximum size of image block payload.
-/// Description    : Maximum size of image block payload.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 2818816
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : PixelFormat
-/// Display Name   : PixelFormat
-/// Tooltip        : Format of the image data.
-/// Description    : Format of the image data.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : BayerRG8
-/// Type           : Enumeration
-
-/// Feature Name   : PtpAcquisitionGateTime
-/// Display Name   : PtpAcquisitionGateTime
-/// Tooltip        : 
-/// Description    : 
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : PtpMode
-/// Display Name   : PtpMode
-/// Tooltip        : 
-/// Description    : Control the PTP behavior of the Clock port.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Off
-/// Type           : Enumeration
-
-/// Feature Name   : PtpStatus
-/// Display Name   : PtpStatus
-/// Tooltip        : 
-/// Description    : What state the PTP operation is in.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Disabled
-/// Type           : Enumeration
-
-/// Feature Name   : RecorderPreEventCount
-/// Display Name   : RecorderPreEventCount
-/// Tooltip        : This is the number of pre-event images to acquire in the Recorder acquisition mode. This must be less than or equal to AcquisitionFrameCount.
-/// Description    : This is the number of pre-event images to acquire in the Recorder acquisition mode. This must be less than or equal to AcquisitionFrameCount.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 65535
-/// Type           : Long long integer
-
-/// Feature Name   : ReverseX
-/// Display Name   : ReverseX
-/// Tooltip        : Flip horizontally the image.
-/// Description    : ReverseX is used to flip horizontally the image sent by the device. The AOI is applied after the flipping.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Type           : Boolean
-
-/// Feature Name   : ReverseY
-/// Display Name   : ReverseY
-/// Tooltip        : Flip horizontally the image.
-/// Description    : ReverseY is used to flip vertically the image sent by the device. The AOI is applied after the flipping.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Type           : Boolean
-
-/// Feature Name   : Saturation
-/// Display Name   : Saturation
-/// Tooltip        : Saturation puts gain to the color vectors in the U/V plane.
-/// Description    : Saturation puts gain to the color vectors in the U/V plane.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : 0
-/// Maximum        : 2
-/// Type           : Double precision floating point
-
-/// Feature Name   : SensorBits
-/// Display Name   : SensorBits
-/// Tooltip        : Maximum bit depth of sensor.
-/// Description    : Maximum bit depth of sensor.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 12
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : SensorDigitizationTaps
-/// Display Name   : SensorDigitizationTaps
-/// Tooltip        : Number of digitized samples outputted simultaneously by the camera A/D conversion stage.
-/// Description    : Number of digitized samples outputted simultaneously by the camera A/D conversion stage.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Four
-/// Type           : Enumeration
-
-/// Feature Name   : SensorHeight
-/// Display Name   : SensorHeight
-/// Tooltip        : Full height of image sensor.
-/// Description    : Full height of image sensor.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1456
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : SensorTaps
-/// Display Name   : SensorTaps
-/// Tooltip        : Number of taps of the camera sensor.
-/// Description    : Number of taps of the camera sensor.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Four
-/// Type           : Enumeration
-
-/// Feature Name   : SensorType
-/// Display Name   : SensorType
-/// Tooltip        : Type of image sensor.
-/// Description    : Type of image sensor.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Bayer
-/// Type           : Enumeration
-
-/// Feature Name   : SensorWidth
-/// Display Name   : SensorWidth
-/// Tooltip        : Full width of image sensor.
-/// Description    : Full width of image sensor.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1936
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatFrameDelivered
-/// Display Name   : Stat Frames Delivered
-/// Tooltip        : 
-/// Description    : Number of error-free frames that have been delivered to the TL consumer.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatFrameDropped
-/// Display Name   : Stat Frames Dropped
-/// Tooltip        : 
-/// Description    : Number of incomplete (due to missing packets) frames received by the host (not including shoved frames).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatFrameRate
-/// Display Name   : Stat Frame Rate
-/// Tooltip        : 
-/// Description    : Rate (frames/s) at which the device is sending frames to the host (derived from the frame timestamps).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 1.79769e+308
-/// Type           : Double precision floating point
-
-/// Feature Name   : StatFrameRescued
-/// Display Name   : Stat Frames Rescued
-/// Tooltip        : 
-/// Description    : Number of frames that initially had missing packets but were successfully completed after packet resend.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatFrameShoved
-/// Display Name   : Stat Frames Shoved
-/// Tooltip        : 
-/// Description    : Number of frames dropped because the transfer of a following frame was completed earlier.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatFrameUnderrun
-/// Display Name   : Stat Frames Underrun
-/// Tooltip        : 
-/// Description    : Number of frames missed due to the non-availability of a user supplied buffer (buffer underrun).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatLocalRate
-/// Display Name   : Stat Local Rate
-/// Tooltip        : 
-/// Description    : Rate (frames/s) at which (complete and incomplete) frames have been received by the host (derived from the host clock).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 1.79769e+308
-/// Type           : Double precision floating point
-
-/// Feature Name   : StatPacketErrors
-/// Display Name   : Stat Packets Errors
-/// Tooltip        : 
-/// Description    : Number of received packets that are erroneous (usually signal an hardware issue on the device).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatPacketMissed
-/// Display Name   : Stat Packets Missed
-/// Tooltip        : 
-/// Description    : Number of packets expected and not received by the host (not including successfully resent packets).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatPacketReceived
-/// Display Name   : Stat Packets Received
-/// Tooltip        : 
-/// Description    : Number of error-free packets received and processed by the host (including successfully resent packets).
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatPacketRequested
-/// Display Name   : Stat Packets Requested
-/// Tooltip        : 
-/// Description    : Number of missing packets that were requested for resend from the device.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatPacketResent
-/// Display Name   : Stat Packets Resent
-/// Tooltip        : 
-/// Description    : Number of missing packets that were resent by the device after having been requested.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatPacketUnavailable
-/// Display Name   : Stat Packets Unavailable
-/// Tooltip        : 
-/// Description    : Number of packets that could not be resent by the device after having been requested.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StatTimeElapsed
-/// Display Name   : Stat Time Elapsed
-/// Tooltip        : 
-/// Description    : Elapsed time (in s) since the streaming was started.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 1.79769e+308
-/// Type           : Double precision floating point
-
-/// Feature Name   : StreamAnnounceBufferMinimum
-/// Display Name   : Stream Announce Buffer Minimum
-/// Tooltip        : 
-/// Description    : Minimal number of buffers to announce to enable selected acquisition mode.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StreamAnnouncedBufferCount
-/// Display Name   : Stream Announced Buffer Count
-/// Tooltip        : 
-/// Description    : Number of announced (known) buffers on this stream.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 9223372036854775807
-/// Type           : Long long integer
-
-/// Feature Name   : StreamBufferHandlingMode
-/// Display Name   : Stream Buffer Handling Mode
-/// Tooltip        : 
-/// Description    : Available buffer handling modes of this stream.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Default
-/// Type           : Enumeration
-
-/// Feature Name   : StreamBytesPerSecond
-/// Display Name   : StreamBytesPerSecond
-/// Tooltip        : Bandwidth allocation: the camera will consume up to this bandwidth, in bytes per second. You must set this value if multiple cameras share the same ethernet adapter, otherwise data will be lost. The sum of all StreamBytesPerSecond values of all cameras must not exceed the available bandwidth.
-/// Description    : Bandwidth allocation: the camera will consume up to this bandwidth, in bytes per second. You must set this value if multiple cameras share the same ethernet adapter, otherwise data will be lost. The sum of all StreamBytesPerSecond values of all cameras must not exceed the available bandwidth.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 115000000
-/// Minimum        : 1000000
-/// Maximum        : 124000000
-/// Type           : Long long integer
-
-/// Feature Name   : StreamFrameRateConstrain
-/// Display Name   : StreamFrameRateConstrain
-/// Tooltip        : When enabled, the frame rate of the camera is constrained by available bandwidth. When disabled, the camera can image faster than it can send data.
-/// Description    : When enabled, the frame rate of the camera is constrained by available bandwidth. When disabled, the camera can image faster than it can send data.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 1
-/// Type           : Boolean
-
-/// Feature Name   : StreamHoldCapacity
-/// Display Name   : StreamHoldCapacity
-/// Tooltip        : Maximum number of images (for the current size and format) which can be stored on the camera when StreamHold is enabled.
-/// Description    : Maximum number of images (for the current size and format) which can be stored on the camera when StreamHold is enabled.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 46
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : StreamHoldEnable
-/// Display Name   : StreamHoldEnable
-/// Tooltip        : Control on-camera image storage; this control is like a "pause" button for the image stream. When enabled, images remain stored on the camera, and are not transmitted to the host. When disabled, the image stream resumes, and any stored images are sent to the host.
-/// Description    : Control on-camera image storage; this control is like a "pause" button for the image stream. When enabled, images remain stored on the camera, and are not transmitted to the host. When disabled, the image stream resumes, and any stored images are sent to the host.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Off
-/// Type           : Enumeration
-
-/// Feature Name   : StreamID
-/// Display Name   : Stream ID
-/// Tooltip        : 
-/// Description    : Device unique ID for the stream.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : DEV_000F310338D4-Stream-000
-/// Type           : String
-
-/// Feature Name   : StreamType
-/// Display Name   : Stream Type
-/// Tooltip        : 
-/// Description    : Identifies the transport layer technology of the stream.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : GEV
-/// Type           : Enumeration
-
-/// Feature Name   : StrobeDelay
-/// Display Name   : StrobeDelay
-/// Tooltip        : Delay from strobe trigger to strobe output, in microseconds.
-/// Description    : Delay from strobe trigger to strobe output, in microseconds.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 13421772
-/// Type           : Long long integer
-
-/// Feature Name   : StrobeDuration
-/// Display Name   : StrobeDuration
-/// Tooltip        : Duration of strobe, in microseconds.
-/// Description    : Duration of strobe, in microseconds.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 13421772
-/// Type           : Long long integer
-
-/// Feature Name   : StrobeDurationMode
-/// Display Name   : StrobeDurationMode
-/// Tooltip        : Mode of the strobe timing unit. Source: strobe duration is the same as source duration. Controlled: strobe duration is set by StrobeDuration.
-/// Description    : Mode of the strobe timing unit. Source: strobe duration is the same as source duration. Controlled: strobe duration is set by StrobeDuration.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Source
-/// Type           : Enumeration
-
-/// Feature Name   : StrobeSource
-/// Display Name   : StrobeSource
-/// Tooltip        : Signal source of the strobe timing unit. See SyncOutSource for descriptions.
-/// Description    : Signal source of the strobe timing unit. See SyncOutSource for descriptions.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : FrameTrigger
-/// Type           : Enumeration
-
-/// Feature Name   : SyncInGlitchFilter
-/// Display Name   : SyncInGlitchFilter
-/// Tooltip        : Glitch filter on sync-in line, in nanoseconds.
-/// Description    : Glitch filter on sync-in line, in nanoseconds.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 50000
-/// Type           : Long long integer
-
-/// Feature Name   : SyncInLevels
-/// Display Name   : SyncInLevels
-/// Tooltip        : Momentary logic levels of the hardware line inputs.
-/// Description    : Momentary logic levels of the hardware line inputs.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : SyncInSelector
-/// Display Name   : SyncInSelector
-/// Tooltip        : Select the sync-in line to control with {SyncInGlitchFilter}.
-/// Description    : Select the sync-in line to control with {SyncInGlitchFilter}.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : SyncIn1
-/// Type           : Enumeration
-
-/// Feature Name   : SyncOutLevels
-/// Display Name   : SyncOutLevels
-/// Tooltip        : Output levels of hardware sync outputs, for output(s) in GPO mode. (Note: SyncOutPolarity can invert these values.)
-/// Description    : Output levels of hardware sync outputs, for output(s) in GPO mode. (Note: SyncOutPolarity can invert these values.)
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : SyncOutPolarity
-/// Display Name   : SyncOutPolarity
-/// Tooltip        : Polarity applied to the sync-out line specified by SyncOutSelector.
-/// Description    : Polarity applied to the sync-out line specified by SyncOutSelector.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Normal
-/// Type           : Enumeration
-
-/// Feature Name   : SyncOutSelector
-/// Display Name   : SyncOutSelector
-/// Tooltip        : Select the sync-out line to control with {SyncOutSource, SyncOutPolarity}.
-/// Description    : Select the sync-out line to control with {SyncOutSource, SyncOutPolarity}.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : SyncOut1
-/// Type           : Enumeration
-
-/// Feature Name   : SyncOutSource
-/// Display Name   : SyncOutSource
-/// Tooltip        : Signal source of the sync-out line specified by SyncOutSelector. GPO: general purpose output. AcquisitionTriggerReady: acquisition trigger may occur. FrameTriggerReady: frame trigger may occur. Exposing: exposure in progress. FrameReadout: image readout in progress. Imaging: exposure or frame readout in progress. Acquiring: acquisition is running. LineIn: external line input. Strobe: source is strobe timing unit.
-/// Description    : Signal source of the sync-out line specified by SyncOutSelector. GPO: general purpose output. AcquisitionTriggerReady: acquisition trigger may occur. FrameTriggerReady: frame trigger may occur. Exposing: exposure in progress. FrameReadout: image readout in progress. Imaging: exposure or frame readout in progress. Acquiring: acquisition is running. LineIn: external line input. Strobe: source is strobe timing unit.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : Exposing
-/// Type           : Enumeration
-
-/// Feature Name   : TriggerActivation
-/// Display Name   : TriggerActivation
-/// Tooltip        : Type of activation, for hardware triggers. This controls edge/level and polarity sensitivities.
-/// Description    : Type of activation, for hardware triggers. This controls edge/level and polarity sensitivities.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : RisingEdge
-/// Type           : Enumeration
-
-/// Feature Name   : TriggerDelayAbs
-/// Display Name   : TriggerDelayAbs
-/// Tooltip        : Delay from hardware trigger activation to trigger effect, in microseconds.
-/// Description    : Delay from hardware trigger activation to trigger effect, in microseconds.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 1.34218e+07
-/// Type           : Double precision floating point
-
-/// Feature Name   : TriggerMode
-/// Display Name   : TriggerMode
-/// Tooltip        : Enable or disable this trigger. Note: when the FrameStart trigger is disabled, images are triggered at a fixed rate specified by AcquisitionFrameRateAbs.
-/// Description    : Enable or disable this trigger. Note: when the FrameStart trigger is disabled, images are triggered at a fixed rate specified by AcquisitionFrameRateAbs.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Off
-/// Type           : Enumeration
-
-/// Feature Name   : TriggerOverlap
-/// Display Name   : TriggerOverlap
-/// Tooltip        : Permitted window of trigger activation, relative to previous frame.
-/// Description    : Permitted window of trigger activation, relative to previous frame.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Off
-/// Type           : Enumeration
-
-/// Feature Name   : TriggerSelector
-/// Display Name   : TriggerSelector
-/// Tooltip        : Select a trigger here, then use the controls {TriggerMode, TriggerSoftware, TriggerSource, TriggerActivation, TriggerOverlap, TriggerDelayAbs} to setup and read the trigger attributes. FrameStart is the trigger which starts each image (when acquisition is running). AcquisitionStart is the trigger which starts the acquisition process.
-/// Description    : Select a trigger here, then use the controls {TriggerMode, TriggerSoftware, TriggerSource, TriggerActivation, TriggerOverlap, TriggerDelayAbs} to setup and read the trigger attributes. FrameStart is the trigger which starts each image (when acquisition is running). AcquisitionStart is the trigger which starts the acquisition process.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : FrameStart
-/// Type           : Enumeration
-
-/// Feature Name   : TriggerSoftware
-/// Display Name   : TriggerSoftware
-/// Tooltip        : This software command effects a trigger.
-/// Description    : This software command effects a trigger.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : [None]
-/// Type           : Command feature
-
-/// Feature Name   : TriggerSource
-/// Display Name   : TriggerSource
-/// Tooltip        : Source of trigger, when TriggerMode is On. This might be an hardware trigger, a fixed rate generator, or software trigger only.
-/// Description    : Source of trigger, when TriggerMode is On. This might be an hardware trigger, a fixed rate generator, or software trigger only.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Freerun
-/// Type           : Enumeration
-
-/// Feature Name   : UserSetDefaultSelector
-/// Display Name   : UserSetDefaultSelector
-/// Tooltip        : On power-up or reset, this user set is loaded.
-/// Description    : On power-up or reset, this user set is loaded.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Default
-/// Type           : Enumeration
-
-/// Feature Name   : UserSetLoad
-/// Display Name   : UserSetLoad
-/// Tooltip        : Load camera parameters from the user set specified by UserSetSelector.
-/// Description    : Load camera parameters from the user set specified by UserSetSelector.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : [None]
-/// Type           : Command feature
-
-/// Feature Name   : UserSetSave
-/// Display Name   : UserSetSave
-/// Tooltip        : Save camera parameters to the user set specified by UserSetSelector.
-/// Description    : Save camera parameters to the user set specified by UserSetSelector.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : [None]
-/// Type           : Command feature
-
-/// Feature Name   : UserSetSelector
-/// Display Name   : UserSetSelector
-/// Tooltip        : Select a user set, for loading or saving camera parameters.
-/// Description    : Select a user set, for loading or saving camera parameters.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : Default
-/// Type           : Enumeration
-
-/// Feature Name   : VsubValue
-/// Display Name   : VsubValue
-/// Tooltip        : Substrate voltage in mV.
-/// Description    : Substrate voltage in mV.
-/// SNFC Namespace : Custom
-/// Unit           : 
-/// Value          : 0
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-/// Feature Name   : Width
-/// Display Name   : Width
-/// Tooltip        : Width of image, in pixels.
-/// Description    : Width of image, in pixels.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1936
-/// Minimum        : 1
-/// Maximum        : 1936
-/// Type           : Long long integer
-
-/// Feature Name   : WidthMax
-/// Display Name   : WidthMax
-/// Tooltip        : Maximum image width for the current image mode. Horizontal binning, for example, will change this value.
-/// Description    : Maximum image width for the current image mode. Horizontal binning, for example, will change this value.
-/// SNFC Namespace : Standard
-/// Unit           : 
-/// Value          : 1936
-/// Minimum        : 0
-/// Maximum        : 4294967295
-/// Type           : Long long integer
-
-
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/libQtCore.so.4 b/VimbaCPP/Examples/Bin/x86_64bit/libQtCore.so.4
deleted file mode 100755
index 0854b62fc1d480f75a46d9dffdeead41bd6a65c2..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/libQtCore.so.4 and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/libQtGui.so.4 b/VimbaCPP/Examples/Bin/x86_64bit/libQtGui.so.4
deleted file mode 100755
index 1f0f386322811e4b6c2e682266b9f90cdb293f31..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/libQtGui.so.4 and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/libQtSvg.so.4 b/VimbaCPP/Examples/Bin/x86_64bit/libQtSvg.so.4
deleted file mode 100755
index d8e83e8123239dee19ecc27426cc07382156894d..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/libQtSvg.so.4 and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/libVimbaC.so b/VimbaCPP/Examples/Bin/x86_64bit/libVimbaC.so
deleted file mode 100644
index 781383deb7c36a92813b8997376e622b6e3e5a96..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/libVimbaCPP.so b/VimbaCPP/Examples/Bin/x86_64bit/libVimbaCPP.so
deleted file mode 100644
index 081afba051f4fc154481cec96cd4af633ca6b7ee..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/libVimbaCPP.so and /dev/null differ
diff --git a/VimbaCPP/Examples/Bin/x86_64bit/libVimbaImageTransform.so b/VimbaCPP/Examples/Bin/x86_64bit/libVimbaImageTransform.so
deleted file mode 100644
index b01c3977a73d785668f7a031b61125ab956e2ed1..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/Bin/x86_64bit/libVimbaImageTransform.so and /dev/null differ
diff --git a/VimbaCPP/Examples/Build/Make/Common.mk b/VimbaCPP/Examples/Build/Make/Common.mk
deleted file mode 100644
index a727c58aec3b8621bd0bd4362e5f7111bc49f025..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Build/Make/Common.mk
+++ /dev/null
@@ -1,100 +0,0 @@
-UNAME		= $(shell uname -m)
-
-ifeq ($(UNAME),i386)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),i486)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),i586)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),i686)
-ARCH		= x86
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),x86_64)
-ARCH		= x86
-AUTOWORDSIZE	= 64
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),amd64)
-ARCH		= x86
-AUTOWORDSIZE	= 64
-AUTOFLOATABI	= ignore
-endif
-ifeq ($(UNAME),armv6l)
-ARCH		= arm
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= soft
-endif
-ifeq ($(UNAME),armv7l)
-ARCH		= arm
-AUTOWORDSIZE	= 32
-AUTOFLOATABI	= soft
-endif
-ifeq ($(UNAME),aarch64)
-ARCH		= arm
-AUTOWORDSIZE	= 64
-AUTOFLOATABI	= hard
-endif
-
-#Possible word sizes: 32, 64
-WORDSIZE        = $(AUTOWORDSIZE)
-#Possible float abis: soft, hard
-FLOATABI	= $(AUTOFLOATABI)
-
-ifneq ($(WORDSIZE),32)
-ifneq ($(WORDSIZE),64)
-$(error Invalid word size set)
-endif
-endif
-
-ifneq ($(FLOATABI),soft)
-ifneq ($(FLOATABI),hard)
-ifneq ($(FLOATABI),ignore)
-$(error Invalid float abi set)
-endif
-endif
-endif
-
-#Common tools
-PKGCFG          = pkg-config
-MKDIR           = mkdir
-RM              = rm
-CXX             = g++
-MAKE            = make
-CP              = cp
-
-#Set word size on x86
-ifeq ($(ARCH),x86)
-ARCH_CFLAGS     = -m$(WORDSIZE)
-endif
-
-#Configure compiler and linker for soft or hard-float build on ARM
-ifeq ($(ARCH),arm)
-ifeq ($(FLOATABI),soft)
-ARCH_CFLAGS	= -marm -mfloat-abi=soft -march=armv4t
-else ifeq ($(FLOATABI),hard)
-ifeq ($(WORDSIZE),32)
-ARCH_CFLAGS	= -mthumb -mfloat-abi=hard -march=armv7
-else ifeq ($(WORDSIZE),64)
-ARCH_CFLAGS	= -march=armv8-a
-endif
-endif
-endif
-
-ifeq ($(CONFIG),Debug)
-  CONFIG_CFLAGS         = -O0 -g
-else
-  CONFIG_CFLAGS         = -O3
-endif
-
-COMMON_CFLAGS   = $(CONFIG_CFLAGS) $(ARCH_CFLAGS) -fPIC
diff --git a/VimbaCPP/Examples/Build/Make/Makefile b/VimbaCPP/Examples/Build/Make/Makefile
deleted file mode 100644
index 5c6f180740725b737f5ebf18f5dedb86fcee3eda..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Build/Make/Makefile
+++ /dev/null
@@ -1,56 +0,0 @@
-EXAMPLES_DIR            = ../..
-MAKE_INCLUDE_DIR        = $(CURDIR)
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-QT_SUPPORT			= true
-
-ifeq ($(QT_SUPPORT),true)
-QT_EXAMPLES			= VimbaViewer
-
-QT_SUB_EXAMPLES		= AsynchronousGrab \
-                      AsynchronousOpenCVRecorder \
-                      SynchronousGrab
-endif		  
-
-CONSOLE_EXAMPLES    = ActionCommands \
-                      BandwidthHelper \
-                      CameraFactory \
-                      EventHandling \
-                      ListCameras \
-                      ListFeatures \
-                      ListAncillaryDataFeatures \
-                      LoadSaveSettings \
-                      LookUpTable \
-                      UserSet
-				  
-CONSOLE_SUB_EXAMPLES		= AsynchronousGrab \
-				  SynchronousGrab			  
-
-make_%: $(EXAMPLES_DIR)/%/Build/Make/Makefile
-	$(MAKE) -C $(EXAMPLES_DIR)/$*/Build/Make
-	
-clean_%: $(EXAMPLES_DIR)/%/Build/Make/Makefile
-	$(MAKE) -C $(EXAMPLES_DIR)/$*/Build/Make clean
-
-make_%Console: $(EXAMPLES_DIR)/%/Console/Build/Make/Makefile
-	$(MAKE) -C $(EXAMPLES_DIR)/$*/Console/Build/Make
-
-clean_%Console: $(EXAMPLES_DIR)/%/Console/Build/Make/Makefile
-	$(MAKE) -C $(EXAMPLES_DIR)/$*/Console/Build/Make clean
-	
-make_%Qt: $(EXAMPLES_DIR)/%/Qt/Build/Make/Makefile
-	$(MAKE) -C $(EXAMPLES_DIR)/$*/Qt/Build/Make
-
-clean_%Qt: $(EXAMPLES_DIR)/%/Qt/Build/Make/Makefile
-	$(MAKE) -C $(EXAMPLES_DIR)/$*/Qt/Build/Make clean
-
-all: $(foreach example,$(CONSOLE_EXAMPLES),make_$(example)) \
-     $(foreach example,$(CONSOLE_SUB_EXAMPLES),make_$(example)Console) \
-     $(foreach example,$(QT_EXAMPLES),make_$(example)) \
-     $(foreach example,$(QT_SUB_EXAMPLES),make_$(example)Qt)
-     
-clean: $(foreach example,$(CONSOLE_EXAMPLES),clean_$(example)) \
-       $(foreach example,$(CONSOLE_SUB_EXAMPLES),clean_$(example)Console) \
-       $(foreach example,$(QT_EXAMPLES),clean_$(example)) \
-       $(foreach example,$(QT_SUB_EXAMPLES),clean_$(example)Qt)
diff --git a/VimbaCPP/Examples/Build/Make/Qt.mk.bup b/VimbaCPP/Examples/Build/Make/Qt.mk.bup
deleted file mode 100644
index 39d5b8935f20fc390d82bd465d989bc6fe42d508..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Build/Make/Qt.mk.bup
+++ /dev/null
@@ -1,36 +0,0 @@
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-PKGCFG_MOC			= $(shell $(PKGCFG) --variable=moc_location QtCore)
-PKGCFG_UIC			= $(shell $(PKGCFG) --variable=uic_location QtCore)
-
-#Qt tools
-MOC          		= $(if $(PKGCFG_MOC),$(PKGCFG_MOC),moc)
-UIC           		= $(if $(PKGCFG_UIC),$(PKGCFG_UIC),uic)
-RCC             	= rcc
-
-#Compile options needed for QtCore
-QTCORE_CFLAGS       = $(shell $(PKGCFG) --cflags QtCore)
-
-#Linker options needed for QtCore
-QTCORE_LIBS         = $(shell $(PKGCFG) --libs QtCore)
-
-#Compile options needed for QtGui
-QTGUI_CFLAGS        = $(shell $(PKGCFG) --cflags QtGui)
-
-#Linker options needed for QtGui
-QTGUI_LIBS          = $(shell $(PKGCFG) --libs QtGui)
-
-#Compile options needed for QtSvg
-QTSVG_CFLAGS        = $(shell $(PKGCFG) --cflags QtSvg)
-
-#Linker options needed for QtSvg
-QTSVG_LIBS          = $(shell $(PKGCFG) --libs QtSvg)
-
-#Operations we have to do in order to prepare QtCore
-QtCore:
-
-#Operations we have to do in order to prepare QtGui
-QtGui:
-
-#Operations we have to do in order to prepare QtSvg
-QtSvg:
diff --git a/VimbaCPP/Examples/Build/Make/Qt5.mk b/VimbaCPP/Examples/Build/Make/Qt5.mk
deleted file mode 100644
index f8b5b2cbfb0ea2d9edaf593335db8bd7c35b04b1..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Build/Make/Qt5.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-# Qt bin dir in Path!
-MOC = moc
-UIC = uic
-RCC = rcc
-
-ifeq ($(MOC),)
-$(error Didn't find Moc. Add Qt-Bin-Dir to Path!)
-endif
-
-#Compile options needed for QtCore
-QTCORE_CFLAGS       = $(shell $(PKGCFG) --cflags Qt5Core)
-
-#Linker options needed for QtCore
-QTCORE_LIBS         = $(shell $(PKGCFG) --libs Qt5Core)
-
-#Compile options needed for QtGui
-QTGUI_CFLAGS        = $(shell $(PKGCFG) --cflags Qt5Gui)
-
-#Linker options needed for QtGui
-QTGUI_LIBS          = $(shell $(PKGCFG) --libs Qt5Gui)
-
-#Compile options needed for QtWidgets
-QTWIDGETS_CFLAGS        = $(shell $(PKGCFG) --cflags Qt5Widgets)
-
-#Linker options needed for QtWidgets
-QTWIDGETS_LIBS          = $(shell $(PKGCFG) --libs Qt5Widgets)
-
-#Compile options needed for QtSvg
-QTSVG_CFLAGS        = $(shell $(PKGCFG) --cflags Qt5Svg)
-
-#Linker options needed for QtSvg
-QTSVG_LIBS          = $(shell $(PKGCFG) --libs Qt5Svg)
-
-#Operations we have to do in order to prepare QtCore
-QtCore:
-
-#Operations we have to do in order to prepare QtGui
-QtGui:
-
-#Operations we have to do in order to prepare QtWidgets
-QtWidgets:
-
-#Operations we have to do in order to prepare QtSvg
-QtSvg:
-
diff --git a/VimbaCPP/Examples/Build/Make/Qt6.mk b/VimbaCPP/Examples/Build/Make/Qt6.mk
deleted file mode 100644
index c8a4f421a6b821b3c6ceef43ff661f20ec806359..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Build/Make/Qt6.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-# Qt bin dir in Path!
-
-QT_INC=/usr/include/x86_64-linux-gnu/qt6
-# QT_LIBS=/usr/lib/x86_64-linux-gnu
-QT_BIN=/usr/lib/qt6/libexec
-MOC = $(QT_BIN)/moc
-UIC = $(QT_BIN)/uic
-RCC = $(QT_BIN)/rcc
-
-
-ifeq ($(MOC),)
-$(error Didn't find Moc. Add Qt-Bin-Dir to Path!)
-endif
-
-#Compile options needed for QtCore
-# !! WARNING !!
-# Qt6 doesn't use pkg-config or qmake anymore but uses CMAKE instead...
-# so try to insert flags manually
-# before: pkg-config --cflags --libs Qt5Core
-
-QTCORE_CFLAGS       = -I$(QT_INC) -I$(QT_INC)/QtCore
-QTCORE_LIBS         = -lQt6Core
-QTGUI_CFLAGS        = -I$(QT_INC) -I$(QT_INC)/QtGui -I$(QT_INC) -I$(QT_INC)/QtCore
-QTGUI_LIBS          = -lQt6Gui -lQt6Core
-QTWIDGETS_CFLAGS    = -I$(QT_INC) -I$(QT_INC)/QtWidgets -I$(QT_INC) -I$(QT_INC)/QtCore
-QTWIDGETS_LIBS      = -lQt6Gui -lQt6Widgets
-
-#Operations we have to do in order to prepare QtXZ
-QtCore:
-QtGui:
-QtWidgets:
-
diff --git a/VimbaCPP/Examples/Build/Make/VimbaC.mk b/VimbaCPP/Examples/Build/Make/VimbaC.mk
deleted file mode 100644
index d8bdb00ba39a32e6df445457e79a80f9c1a60f80..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Build/Make/VimbaC.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-#Compile options needed for VimbaC
-VIMBAC_CFLAGS   = -I$(VIMBASDK_DIR)
-
-#Linker options needed for VimbaC
-VIMBAC_LIBS     = -L$(BIN_DIR) -lVimbaC
-
-#By default we copy libVimbaC.so next to the binary
-$(BIN_DIR)/libVimbaC.so: $(BIN_DIR)
-	$(CP) $(VIMBASDK_DIR)/VimbaC/DynamicLib/$(ARCH)_$(WORDSIZE)bit/libVimbaC.so $(BIN_DIR)/
-	
-#Operations we have to do in order to prepare VimbaC
-VimbaC: $(BIN_DIR)/libVimbaC.so
diff --git a/VimbaCPP/Examples/Build/Make/VimbaCPP.mk b/VimbaCPP/Examples/Build/Make/VimbaCPP.mk
deleted file mode 100644
index c4b4baf4570a772235021908c92791265971bf78..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Build/Make/VimbaCPP.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-include $(MAKE_INCLUDE_DIR)/Common.mk
-include $(MAKE_INCLUDE_DIR)/VimbaC.mk
-
-#Compile options needed for VimbaCPP
-VIMBACPP_CFLAGS = -I$(VIMBASDK_DIR) $(VIMBAC_CFLAGS)
-
-#Linker options needed for VimbaCPP
-VIMBACPP_LIBS   = -L$(BIN_DIR) -lVimbaCPP $(VIMBAC_LIBS) -Wl,-rpath-link,$(BIN_DIR)
-
-#By default we copy libVimbaCPP.so next to the binary
-$(BIN_DIR)/libVimbaCPP.so: $(BIN_DIR) VimbaC
-	$(CP) $(VIMBASDK_DIR)/VimbaCPP/DynamicLib/$(ARCH)_$(WORDSIZE)bit/libVimbaCPP.so $(BIN_DIR)/
-
-#Operations we have to do in order to prepare VimbaCPP
-VimbaCPP: $(BIN_DIR)/libVimbaCPP.so
diff --git a/VimbaCPP/Examples/Build/Make/VimbaImageTransform.mk b/VimbaCPP/Examples/Build/Make/VimbaImageTransform.mk
deleted file mode 100644
index 83cf6c919ae45dd0c184df1233e4a17cd29aebcf..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Build/Make/VimbaImageTransform.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-#Compile options needed for VimbaImageTransform
-VIMBAIMAGETRANSFORM_CFLAGS	= -I$(VIMBASDK_DIR)/VimbaImageTransform/Include
-
-#Compile options needed for VimbaImageTransform
-VIMBAIMAGETRANSFORM_LIBS		= -L$(BIN_DIR) -lVimbaImageTransform -Wl,-rpath-link,$(BIN_DIR)
-
-#By default we copy libVimbaImageTransform.so next to the binary
-$(BIN_DIR)/libVimbaImageTransform.so: $(BIN_DIR)
-	$(CP) $(VIMBASDK_DIR)/VimbaImageTransform/DynamicLib/$(ARCH)_$(WORDSIZE)bit/libVimbaImageTransform.so $(BIN_DIR)/
-
-#Operations we have to do in order to prepare VimbaImageTransform
-VimbaImageTransform: $(BIN_DIR)/libVimbaImageTransform.so
diff --git a/VimbaCPP/Examples/Build/Make/tinyxml.mk b/VimbaCPP/Examples/Build/Make/tinyxml.mk
deleted file mode 100644
index 16642c775fadb9faf86133568009c5ea3c08fee4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Build/Make/tinyxml.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-PKGCFG_TINYXML_LIBS		= $(shell $(PKGCFG) --libs tinyxml)
-
-#Compile options needed for tinyxml
-TINYXML_CFLAGS	= $(shell $(PKGCFG) --cflags tinyxml)
-
-#Linker options needed for tinyxml
-TINYXML_LIBS	= $(if $(PKGCFG_TINYXML_LIBS),$(PKGCFG_TINYXML_LIBS),-ltinyxml)
-
-#Operations we have to do in order to prepare tinyxml
-tinyxml:
\ No newline at end of file
diff --git a/VimbaCPP/Examples/CameraFactory/Build/Make/Makefile b/VimbaCPP/Examples/CameraFactory/Build/Make/Makefile
deleted file mode 100644
index 895d769368684f934255dfbf606fe2fc86bf2303..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/CameraFactory/Build/Make/Makefile
+++ /dev/null
@@ -1,51 +0,0 @@
-PROJECT_NAME            = CameraFactory
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/CameraFactory.o \
-                      $(OBJ_DIR)/program.o \
-					  $(OBJ_DIR)/FindCameras.o
-
-DEPENDENCIES        = VimbaCPP
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/CameraFactory/Build/Make/binary/x86_64bit/CameraFactory b/VimbaCPP/Examples/CameraFactory/Build/Make/binary/x86_64bit/CameraFactory
deleted file mode 100755
index 1a009d9c4f6020749c762d64048f56053b463526..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/CameraFactory/Build/Make/binary/x86_64bit/CameraFactory and /dev/null differ
diff --git a/VimbaCPP/Examples/CameraFactory/Build/Make/binary/x86_64bit/libVimbaC.so b/VimbaCPP/Examples/CameraFactory/Build/Make/binary/x86_64bit/libVimbaC.so
deleted file mode 100644
index 781383deb7c36a92813b8997376e622b6e3e5a96..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/CameraFactory/Build/Make/binary/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/VimbaCPP/Examples/CameraFactory/Build/Make/binary/x86_64bit/libVimbaCPP.so b/VimbaCPP/Examples/CameraFactory/Build/Make/binary/x86_64bit/libVimbaCPP.so
deleted file mode 100644
index 081afba051f4fc154481cec96cd4af633ca6b7ee..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/CameraFactory/Build/Make/binary/x86_64bit/libVimbaCPP.so and /dev/null differ
diff --git a/VimbaCPP/Examples/CameraFactory/Build/Make/object/x86_64bit/CameraFactory.o b/VimbaCPP/Examples/CameraFactory/Build/Make/object/x86_64bit/CameraFactory.o
deleted file mode 100644
index 3b04823359b90c096325f71407e7463fdc1563db..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/CameraFactory/Build/Make/object/x86_64bit/CameraFactory.o and /dev/null differ
diff --git a/VimbaCPP/Examples/CameraFactory/Build/Make/object/x86_64bit/FindCameras.o b/VimbaCPP/Examples/CameraFactory/Build/Make/object/x86_64bit/FindCameras.o
deleted file mode 100644
index 3917c01f60352531ab43c2665272413c2a6b6584..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/CameraFactory/Build/Make/object/x86_64bit/FindCameras.o and /dev/null differ
diff --git a/VimbaCPP/Examples/CameraFactory/Build/Make/object/x86_64bit/program.o b/VimbaCPP/Examples/CameraFactory/Build/Make/object/x86_64bit/program.o
deleted file mode 100644
index c018ee06da763eb1bab09f1010452add11abb589..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/CameraFactory/Build/Make/object/x86_64bit/program.o and /dev/null differ
diff --git a/VimbaCPP/Examples/CameraFactory/Source/CameraFactory.cpp b/VimbaCPP/Examples/CameraFactory/Source/CameraFactory.cpp
deleted file mode 100644
index bd3c4fce43703f37b16f215f6fe4afa72f0ff622..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/CameraFactory/Source/CameraFactory.cpp
+++ /dev/null
@@ -1,208 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies. All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraFactory.cpp
-
-  Description: The CameraFactory example will create a suitable object for
-               each known interface. The user can create his own factory and 
-               camera classes for customization.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "CameraFactory.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-/*=============================================================================
-    FirewireCamera class
-=============================================================================*/
-
-    FirewireCamera::FirewireCamera(     const char         *pCameraID,
-                                        const char         *pCameraName,
-                                        const char         *pCameraModel,
-                                        const char         *pCameraSerialNumber,
-                                        const char         *pInterfaceID,
-                                        VmbInterfaceType    interfaceType,
-                                        const char         *pInterfaceName,
-                                        const char         *pInterfaceSerialNumber,
-                                        VmbAccessModeType   interfacePermittedAccess )
-        : Camera( pCameraID, pCameraName, pCameraModel, 
-                  pCameraSerialNumber, pInterfaceID, interfaceType)
-    {
-    }
-    
-    // A custom camera function
-    void FirewireCamera::addonFireWire( std::string &info )
-    {
-        info = "1394 interface connection detected";
-    }
-
-/*=============================================================================
-    GigECamera class
-=============================================================================*/
-
-    GigECamera::GigECamera(     const char         *pCameraID,
-                                const char         *pCameraName,
-                                const char         *pCameraModel,
-                                const char         *pCameraSerialNumber,
-                                const char         *pInterfaceID,
-                                VmbInterfaceType    interfaceType,
-                                const char         *pInterfaceName,
-                                const char         *pInterfaceSerialNumber,
-                                VmbAccessModeType   interfacePermittedAccess )
-        : Camera( pCameraID, pCameraName, pCameraModel, 
-                  pCameraSerialNumber, pInterfaceID, interfaceType)
-    {
-    }
-
-    // A custom camera function
-    void GigECamera::addonGigE( std::string &info )
-    {
-        info = "Ethernet interface connection detected";
-    }
-
-/*=============================================================================
-    USBCamera class
-=============================================================================*/
-
-    USBCamera::USBCamera(      const char         *pCameraID,
-                               const char         *pCameraName,
-                               const char         *pCameraModel,
-                               const char         *pCameraSerialNumber,
-                               const char         *pInterfaceID,
-                               VmbInterfaceType    interfaceType,
-                               const char         *pInterfaceName,
-                               const char         *pInterfaceSerialNumber,
-                               VmbAccessModeType   interfacePermittedAccess )
-        : Camera( pCameraID, pCameraName, pCameraModel, 
-                  pCameraSerialNumber, pInterfaceID, interfaceType)
-    {
-    }
-    
-    // A custom camera function
-    void USBCamera::addonUSB( std::string &info )
-    {
-        info = "USB interface connection detected";
-    }
-
-/*=============================================================================
-    CLCamera class
-=============================================================================*/
-
-    CLCamera::CLCamera(         const char         *pCameraID,
-                                const char         *pCameraName,
-                                const char         *pCameraModel,
-                                const char         *pCameraSerialNumber,
-                                const char         *pInterfaceID,
-                                VmbInterfaceType    interfaceType,
-                                const char         *pInterfaceName,
-                                const char         *pInterfaceSerialNumber,
-                                VmbAccessModeType   interfacePermittedAccess )
-        : Camera( pCameraID, pCameraName, pCameraModel, 
-                  pCameraSerialNumber, pInterfaceID, interfaceType)
-    {
-    }
-    
-    // A custom camera function
-    void CLCamera::addonCL( std::string &info )
-    {
-        info = "CL interface connection detected";
-    }
-
-/*=============================================================================
-    UserCameraFactory class
-=============================================================================*/
-
-    CameraPtr UserCameraFactory::CreateCamera(  const char *pCameraID,
-                                                const char *pCameraName,
-                                                const char *pCameraModel,
-                                                const char *pCameraSerialNumber,
-                                                const char *pInterfaceID,
-                                                VmbInterfaceType interfaceType,
-                                                const char *pInterfaceName,
-                                                const char *pInterfaceSerialNumber,
-                                                VmbAccessModeType interfacePermittedAccess)
-    {
-        // create camera class, depending on camera interface type
-        if ( VmbInterfaceFirewire == interfaceType )
-        {
-            return FirewireCamera_t( new FirewireCamera(    pCameraID, 
-                                                            pCameraName, 
-                                                            pCameraModel, 
-                                                            pCameraSerialNumber, 
-                                                            pInterfaceID, 
-                                                            interfaceType, 
-                                                            pInterfaceName, 
-                                                            pInterfaceSerialNumber, 
-                                                            interfacePermittedAccess));
-        }
-        else if ( VmbInterfaceEthernet == interfaceType )
-        {
-            return GigECamera_t( new GigECamera(    pCameraID, 
-                                                    pCameraName, 
-                                                    pCameraModel, 
-                                                    pCameraSerialNumber, 
-                                                    pInterfaceID, 
-                                                    interfaceType, 
-                                                    pInterfaceName, 
-                                                    pInterfaceSerialNumber, 
-                                                    interfacePermittedAccess));
-        }
-        else if ( VmbInterfaceUsb == interfaceType )
-        {
-            return USBCamera_t( new USBCamera(  pCameraID, 
-                                                pCameraName, 
-                                                pCameraModel, 
-                                                pCameraSerialNumber, 
-                                                pInterfaceID, 
-                                                interfaceType, 
-                                                pInterfaceName, 
-                                                pInterfaceSerialNumber, 
-                                                interfacePermittedAccess));
-        }
-        else if ( VmbInterfaceCL == interfaceType )
-        {
-            return CLCamera_t( new CLCamera(    pCameraID, 
-                                                pCameraName, 
-                                                pCameraModel, 
-                                                pCameraSerialNumber, 
-                                                pInterfaceID, 
-                                                interfaceType, 
-                                                pInterfaceName, 
-                                                pInterfaceSerialNumber, 
-                                                interfacePermittedAccess));
-        }
-        else // unknown camera interface
-        {
-            // use default camera class
-            return Camera_t( new Camera(    pCameraID, 
-                                            pCameraName, 
-                                            pCameraModel, 
-                                            pCameraSerialNumber, 
-                                            pInterfaceID, 
-                                            interfaceType));
-        }
-    }
-
-}}} // namespace AVT::VmbAPI::Examples
-
diff --git a/VimbaCPP/Examples/CameraFactory/Source/CameraFactory.h b/VimbaCPP/Examples/CameraFactory/Source/CameraFactory.h
deleted file mode 100644
index bc049d97e3e4a3058aa505bcf71a3317b42753ae..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/CameraFactory/Source/CameraFactory.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraFactory.h
-
-  Description: The CameraFactory example will create a suitable object for
-               each known interface. The user can create his own factory and 
-               camera classes for customization.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_CAMERAFACTORY
-#define AVT_VMBAPI_EXAMPLES_CAMERAFACTORY
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class UserCameraFactory;
-class FirewireCamera;
-class GigECamera;
-class USBCamera;
-class CLCamera;
-
-typedef SP_DECL( UserCameraFactory )    UserCameraFactory_t;
-typedef SP_DECL( FirewireCamera )       FirewireCamera_t;
-typedef SP_DECL( GigECamera )           GigECamera_t;
-typedef SP_DECL( USBCamera )            USBCamera_t;
-typedef SP_DECL( CLCamera )             CLCamera_t;
-typedef SP_DECL( Camera )               Camera_t;
-
-//
-// A class that derives from standard Vimba Camera with a function specific to fire wire
-//
-class FirewireCamera: 
-    public Camera
-{
-public:
-    FirewireCamera(     const char         *pCameraID,
-                        const char         *pCameraName,
-                        const char         *pCameraModel,
-                        const char         *pCameraSerialNumber,
-                        const char         *pInterfaceID,
-                        VmbInterfaceType    interfaceType,
-                        const char         *pInterfaceName,
-                        const char         *pInterfaceSerialNumber,
-                        VmbAccessModeType   interfacePermittedAccess );
-    
-    void addonFireWire( std::string &info );    // custom camera function
-};
-
-//
-// A class that derives from standard Vimba Camera with a function specific to GigE
-//
-class GigECamera: 
-    public Camera
-{
-public:
-    GigECamera(     const char         *pCameraID,
-                    const char         *pCameraName,
-                    const char         *pCameraModel,
-                    const char         *pCameraSerialNumber,
-                    const char         *pInterfaceID,
-                    VmbInterfaceType    interfaceType,
-                    const char         *pInterfaceName,
-                    const char         *pInterfaceSerialNumber,
-                    VmbAccessModeType   interfacePermittedAccess );
-
-    void addonGigE( std::string &info );    // custom camera function
-};  
-
-//
-// A class that derives from standard Vimba Camera with a function specific to USB
-//
-class USBCamera: 
-    public Camera
-{
-public:
-    USBCamera(      const char         *pCameraID,
-                    const char         *pCameraName,
-                    const char         *pCameraModel,
-                    const char         *pCameraSerialNumber,
-                    const char         *pInterfaceID,
-                    VmbInterfaceType    interfaceType,
-                    const char         *pInterfaceName,
-                    const char         *pInterfaceSerialNumber,
-                    VmbAccessModeType   interfacePermittedAccess );
-    
-    void addonUSB( std::string &info );     // custom camera function
-};
-
-//
-// A class that derives from standard Vimba Camera with a functions specific to CL
-//
-class CLCamera: 
-    public Camera
-{
-public:
-    CLCamera(       const char         *pCameraID,
-                    const char         *pCameraName,
-                    const char         *pCameraModel,
-                    const char         *pCameraSerialNumber,
-                    const char         *pInterfaceID,
-                    VmbInterfaceType    interfaceType,
-                    const char         *pInterfaceName,
-                    const char         *pInterfaceSerialNumber,
-                    VmbAccessModeType   interfacePermittedAccess );
-    
-    void addonCL( std::string &info );     // custom camera function
-};
-
-//
-// A class with a static factory method creating specific camera classes dependent on the interface type
-//
-class UserCameraFactory :
-    public ICameraFactory
-{
-  public:
-    CameraPtr CreateCamera( const char *pCameraID,
-                            const char *pCameraName,
-                            const char *pCameraModel,
-                            const char *pCameraSerialNumber,
-                            const char *pInterfaceID,
-                            VmbInterfaceType interfaceType,
-                            const char *pInterfaceName,
-                            const char *pInterfaceSerialNumber,
-                            VmbAccessModeType interfacePermittedAccess);
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/CameraFactory/Source/FindCameras.cpp b/VimbaCPP/Examples/CameraFactory/Source/FindCameras.cpp
deleted file mode 100644
index c23d16e1f1b8ae41e8cf98a7e4f5e96685ff4ad9..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/CameraFactory/Source/FindCameras.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FindCameras.cpp
-
-  Description: Find and print a custom string for each known customized camera.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <sstream>
-#include <iostream>
-#include <vector>
-
-#include "FindCameras.h"
-#include "CameraFactory.h"
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-#include "Common/StreamSystemInfo.h"
-#include "Common/ErrorCodeToMessage.h"
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//
-// Detects all connected physical cameras and creates polymorphic classes (all inheriting from Vimba Camera class)
-// depending on the camera's interface type.
-// Starts up the API
-// Creates the objects and prints them out
-// Shuts down the API and exits
-//
-void FindCameras::Print()
-{
-    VimbaSystem&        sys         = VimbaSystem::GetInstance();   // Get a reference to the VimbaSystem singleton
-    VmbErrorType        err         = sys.Startup();                // Initialize the Vimba API
-    CameraPtrVector     cameras;                                    // A vector of std::shared_ptr<AVT::VmbAPI::Camera> objects
-
-    std::string         strName;                                    // The name of the cam
-    VmbInterfaceType    interfaceType;                              // The interface type of the cam
-    std::string         strInfo;                                    // The custom information
-    
-    std::stringstream   strError;
-
-    
-
-    if( VmbErrorSuccess == err )
-    {
-        std::cout<<"Vimba C++ API Version "<<sys<<"\n";
-
-        // Set user factory as default camera object creator.
-        ICameraFactoryPtr factPtr = UserCameraFactory_t( new UserCameraFactory() );
-        err = sys.RegisterCameraFactory( factPtr );
-        if( VmbErrorSuccess == err )
-        {
-            err = sys.GetCameras( cameras );        // Fetch all cameras known to Vimba
-            if( VmbErrorSuccess == err )
-            {
-                std::cout << "Cameras found: " << cameras.size() <<"\n\n";
-
-                // Query the name and interface of all known cameras and print them out.
-                // We don't have to open the cameras for that.
-                for(    CameraPtrVector::const_iterator iter = cameras.begin();
-                        cameras.end() != iter;
-                        ++iter )
-                {
-                    err = (*iter)->GetName( strName );
-                    if( VmbErrorSuccess != err )
-                    {
-                        strError << "[Could not get camera name. Error code: " << err <<"("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "]";
-                        strName.assign( strError.str() );
-                    }
-
-                    err = (*iter)->GetInterfaceType( interfaceType );
-                    if( VmbErrorSuccess != err )
-                    {
-                        strError << "[Could not get camera interface. Error code: " << err << "("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "]";
-                        strInfo = "";
-                    }
-                    else
-                    {
-                        strInfo = "none";
-                        switch( interfaceType )
-                        {
-                        case VmbInterfaceFirewire:
-                            {
-                                FirewireCamera_t fcam = SP_DYN_CAST( *iter, FirewireCamera );
-                                if ( fcam != NULL )
-                                    fcam->addonFireWire( strInfo );
-                                break;
-                            }
-                        case VmbInterfaceEthernet: 
-                            {
-                                GigECamera_t gcam = SP_DYN_CAST( *iter, GigECamera );
-                                if ( gcam != NULL )
-                                    gcam->addonGigE( strInfo );
-                                break;
-                            }
-                        case VmbInterfaceUsb: 
-                            {
-                                USBCamera_t ucam = SP_DYN_CAST( *iter, USBCamera );
-                                if ( ucam != NULL )
-                                    ucam->addonUSB( strInfo );
-                                break;
-                            }
-                        case VmbInterfaceCL:
-                            {
-                                CLCamera_t ccam = SP_DYN_CAST( *iter, CLCamera );
-                                if ( ccam != NULL )
-                                    ccam->addonCL( strInfo );
-                                break;
-                            }
-                        default:
-                            {
-                                break;
-                            }
-                        }
-                    }
-                    
-                    std::cout   <<"/// Camera Name: " << strName 
-                                <<"\n/// Custom Info: " << strInfo 
-                                <<"\n\n";
-                }
-            }
-            else
-            {
-                std::cout << "Could not list cameras. Error code: " << err <<"("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "\n";
-            }
-
-            sys.Shutdown();                             // Close Vimba
-        }
-        else
-        {
-             strError << "[Could not set user camera factory. Error code: " << err << "("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "]";
-        }
-    }
-    else
-    {
-        std::cout << "Could not start system. Error code: " << err <<"("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "\n";
-    }
-}
-
-
-
-}}} // namespace AVT::VmbAPI::Examples
-
diff --git a/VimbaCPP/Examples/CameraFactory/Source/FindCameras.h b/VimbaCPP/Examples/CameraFactory/Source/FindCameras.h
deleted file mode 100644
index 8b92d2d7e172362f21af8a13dcd08339f6590951..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/CameraFactory/Source/FindCameras.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FindCameras.h
-
-  Description: Find and print a custom string for each known customized camera.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_FINDCAMERAS
-#define AVT_VMBAPI_EXAMPLES_FINDCAMERAS
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class FindCameras
-{
-  public:
-    //
-    // Detects all connected physical cameras and creates polymorphic classes (all inheriting from Vimba Camera class)
-    // depending on the camera's interface type.
-    // Starts up the API
-    // Creates the objects and prints them out
-    // Shuts down the API and exits
-    //
-    static void Print();
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/CameraFactory/Source/program.cpp b/VimbaCPP/Examples/CameraFactory/Source/program.cpp
deleted file mode 100644
index 2534a641d9d87bb4d13af19d83758a022c454a3a..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/CameraFactory/Source/program.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of CameraFactory example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-
-#include "FindCameras.h"
-
-int main( int argc, char* argv[] )
-{
-    std::cout << "\n";
-    std::cout << "///////////////////////////////////////\n";
-    std::cout << "/// Vimba API CameraFactory Example ///\n";
-    std::cout << "///////////////////////////////////////\n\n";
-
-    if( 1 < argc )
-    {
-        std::cout << "No parameters expected. Execution will not be affected by the provided parameter(s).\n\n";
-    }
-
-    AVT::VmbAPI::Examples::FindCameras::Print();
-
-    std::cout << "\n";
-}
diff --git a/VimbaCPP/Examples/Common/ErrorCodeToMessage.h b/VimbaCPP/Examples/Common/ErrorCodeToMessage.h
deleted file mode 100644
index e4e37dfee15284bde2699c04bf2ee143ada72cbf..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Common/ErrorCodeToMessage.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ErrorCodeToMessage.h
-
-  Description: Convert the error codes to a self-explanatory message.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef ERROR_CODE_TO_MESSAGE_H_
-#define ERROR_CODE_TO_MESSAGE_H_
-    
-#include <string>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-#ifdef UNICODE
-    typedef std::wstring    string_type;
-    #define MAKE_STRING_LITERAL_(s) L ## s
-#else
-    typedef std::string      string_type;
-#define MAKE_STRING_LITERAL_(s) s
-#endif
-#define MAKE_STRING_LITERAL(s) MAKE_STRING_LITERAL_(s)
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//
-// Translates Vimba error codes to readable error messages
-//
-// Parameters:
-//  [in]    eError      The error code to be converted to string
-//
-// Returns:
-//  A descriptive string representation of the error code
-//
-inline string_type ErrorCodeToMessage( VmbError_t eError )
-{
-    switch( eError )
-    {
-    case VmbErrorSuccess:           return string_type( MAKE_STRING_LITERAL( "Success." ) );
-    case VmbErrorInternalFault:     return string_type( MAKE_STRING_LITERAL( "Unexpected fault in VmbApi or driver." ) );
-    case VmbErrorApiNotStarted:     return string_type( MAKE_STRING_LITERAL( "API not started." ) );
-    case VmbErrorNotFound:          return string_type( MAKE_STRING_LITERAL( "Not found." ) );
-    case VmbErrorBadHandle:         return string_type( MAKE_STRING_LITERAL( "Invalid handle " ) );
-    case VmbErrorDeviceNotOpen:     return string_type( MAKE_STRING_LITERAL( "Device not open." ) );
-    case VmbErrorInvalidAccess:     return string_type( MAKE_STRING_LITERAL( "Invalid access." ) );
-    case VmbErrorBadParameter:      return string_type( MAKE_STRING_LITERAL( "Bad parameter." ) );
-    case VmbErrorStructSize:        return string_type( MAKE_STRING_LITERAL( "Wrong DLL version." ) );
-    case VmbErrorMoreData:          return string_type( MAKE_STRING_LITERAL( "More data returned than memory provided." ) );
-    case VmbErrorWrongType:         return string_type( MAKE_STRING_LITERAL( "Wrong type." ) );
-    case VmbErrorInvalidValue:      return string_type( MAKE_STRING_LITERAL( "Invalid value." ) );
-    case VmbErrorTimeout:           return string_type( MAKE_STRING_LITERAL( "Timeout." ) );
-    case VmbErrorOther:             return string_type( MAKE_STRING_LITERAL( "TL error." ) );
-    case VmbErrorResources:         return string_type( MAKE_STRING_LITERAL( "Resource not available." ) );
-    case VmbErrorInvalidCall:       return string_type( MAKE_STRING_LITERAL( "Invalid call." ) );
-    case VmbErrorNoTL:              return string_type( MAKE_STRING_LITERAL( "TL not loaded." ) );
-    case VmbErrorNotImplemented:    return string_type( MAKE_STRING_LITERAL( "Not implemented." ) );
-    case VmbErrorNotSupported:      return string_type( MAKE_STRING_LITERAL( "Not supported." ) );
-    default:                        return string_type( MAKE_STRING_LITERAL( "Unknown" ) );
-    }
-}
-}}} // AVT::VmbAPI::Examples
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/Common/StreamSystemInfo.h b/VimbaCPP/Examples/Common/StreamSystemInfo.h
deleted file mode 100644
index 6f7cc9bca3e407911c90403b57eeea4dbf0e6cf6..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/Common/StreamSystemInfo.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        StreamSystemInfo.h
-
-  Description:
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef STREAM_SYSTEM_INFO_H
-#define STREAM_SYSTEM_INFO_H
-
-#include <exception>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT {
-namespace VmbAPI {
-
-template<typename STREAM>
-STREAM& operator<<( STREAM& os, AVT::VmbAPI::VimbaSystem &sys )
-{
-    VmbVersionInfo_t info;
-    if (VmbErrorSuccess != sys.QueryVersion( info ))
-    {
-        throw std::exception();
-    }
-    os << info.major << "." << info.minor << "." << info.patch;
-    return os;
-}
-
-}} // Namespace AVT::VmbAPI::Examples
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/EventHandling/Build/Make/Makefile b/VimbaCPP/Examples/EventHandling/Build/Make/Makefile
deleted file mode 100644
index 68f95e4da020d17c6e3bbc032f0d775840da035f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/EventHandling/Build/Make/Makefile
+++ /dev/null
@@ -1,51 +0,0 @@
-PROJECT_NAME            = EventHandling
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/EventHandling.o \
-                      $(OBJ_DIR)/program.o \
-					  $(OBJ_DIR)/EventObserver.o
-
-DEPENDENCIES        = VimbaCPP
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/EventHandling/Source/EventHandling.cpp b/VimbaCPP/Examples/EventHandling/Source/EventHandling.cpp
deleted file mode 100644
index 8ffef91c4a93fe1b64b4ad557ed2b7361cc86fd8..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/EventHandling/Source/EventHandling.cpp
+++ /dev/null
@@ -1,288 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        EventHandling.cpp
-
-  Description: The EventHandling example will register observer on all
-               'EventData' features and turn on camera notification for
-               'AcquisitionStart' events.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <sstream>
-#include <iostream>
-#include <vector>
-#include <algorithm>
-#include <EventHandling.h>
-#include <EventObserver.h>
-
-#include "Common/StreamSystemInfo.h"
-#include "Common/ErrorCodeToMessage.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-// Purpose: Example execution.
-//
-// Parameter:
-// [in ]    std::string cameraID        Use camera with this ID for the example.
-void EventHandling::RunExample( std::string cameraID )
-{
-    VimbaSystem&        sys         = VimbaSystem::GetInstance();                       // Get a reference to the VimbaSystem singleton
-    std::cout << "Vimba C++ API Version " << sys << "\n\n";                                    // Print out version of Vimba
-    VmbErrorType        err         = sys.Startup();                                    // Initialize the Vimba API
-    CameraPtr           pCamera     = CameraPtr();                                      // Our camera
-
-    if( VmbErrorSuccess == err )
-    {
-        if( cameraID.empty() )                                                          // If no ID was provided use the first camera
-        {
-            CameraPtrVector cameras;
-            err = sys.GetCameras( cameras );
-            if( VmbErrorSuccess == err
-                    &&  !cameras.empty() )
-            {
-                err = cameras[0]->Open( VmbAccessModeFull );                            // Open the camera
-                if( VmbErrorSuccess == err )
-                {
-                    pCamera = cameras[0];
-                    err = pCamera->GetID( cameraID );
-                }
-            }
-        }
-        else
-        {
-            err = sys.OpenCameraByID( cameraID.c_str(), VmbAccessModeFull, pCamera );   // Open the camera
-        }
-
-        if( NULL != pCamera )
-        {
-            VmbInterfaceType interfaceType;
-            pCamera->GetInterfaceType( interfaceType );
-            if( VmbErrorSuccess == err )
-            {
-                switch ( interfaceType )
-                {
-                case VmbInterfaceEthernet:
-                    {
-                        if( VmbErrorSuccess == err )
-                        {
-                            err = DeactivateAllCameraNotifications( pCamera );
-                            if( VmbErrorSuccess == err )
-                            {
-                                err = ActivateNotification( pCamera, "AcquisitionStart" );
-                                if( VmbErrorSuccess == err )
-                                {
-                                    err = RegisterEventObserver( pCamera );
-                                    if( VmbErrorSuccess == err )
-                                    {
-                                        std::cout << "Acquire image to trigger event.\n";
-                                        std::cout << "\n----------- Events -----------\n\n";
-                                        FramePtr pFrame;
-                                        VmbInt32_t exampleTimeoutValue = 2000;
-                                        pCamera->AcquireSingleImage( pFrame, exampleTimeoutValue ); // Trigger the event
-                                    }
-                                }
-                            }
-                        }
-                        break;
-                    }
-                default:
-                    std::cout << "Interface type of camera not supported by this example.: " << cameraID << "\n";    
-                }
-            }
-            else
-            {
-                std::cout << "Could not get interface type. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-            }
-            pCamera->Close();
-        }
-        else
-        {
-            std::cout << "Could not open camera or no camera available. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-        }
-        sys.Shutdown();
-    }
-    else
-    {
-        std::cout << "Could not start system. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-    }
-}
-
-// Purpose: Deactivate all camera notification.
-//
-// Parameter:
-// [in ]    CameraPtr   pCamera         Intern camera object.
-//
-// Returns:
-//          VmbErrorSuccess in case of success otherwise an error code
-VmbErrorType EventHandling::DeactivateAllCameraNotifications( CameraPtr pCamera )
-{
-    std::cout << "Deactivate notifications.\n";
-    FeaturePtr pFeatureEventSelector;
-    VmbErrorType err = pCamera->GetFeatureByName( "EventSelector", pFeatureEventSelector );
-    if( VmbErrorSuccess == err )
-    {
-        EnumEntryVector eventSelectorEntrys;
-        err = pFeatureEventSelector->GetEntries( eventSelectorEntrys );
-        if( VmbErrorSuccess == err )
-        {
-            FeaturePtr pFeatureEnumEntry;
-            for( size_t i = 0; i < eventSelectorEntrys.size(); i++ )
-            {
-                std::string entryValue = "";
-                err = eventSelectorEntrys[i].GetName( entryValue );
-                if( VmbErrorSuccess == err )
-                {
-                    bool isCurrentEntryAvailable = false;
-                    err = pFeatureEventSelector->IsValueAvailable( entryValue.c_str(), isCurrentEntryAvailable );
-                    if ( VmbErrorSuccess == err )
-                    {
-                        if ( isCurrentEntryAvailable )
-                        {
-                            err = pFeatureEventSelector->SetValue( entryValue.c_str() );
-                            if( VmbErrorSuccess == err )
-                            {
-                                err = pCamera->GetFeatureByName( "EventNotification", pFeatureEnumEntry );
-                                if( VmbErrorSuccess == err )
-                                {
-                                    err = pFeatureEnumEntry->SetValue( "Off" );
-                                    if( VmbErrorSuccess != err )
-                                    {
-                                        std::cout << "Could not set notification 'Off'. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                                    }
-                                }
-                                else
-                                {
-                                    std::cout << "Could not get feature 'EventNotification'. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                                }                    
-                            }
-                            else
-                            {
-                                std::cout << "Could not set 'EventSelector' value to '" << entryValue << "'. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                            }
-                        }
-                    }
-                    else
-                    {
-                        std::cout << "Could not check if entry is currently available. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                    }
-                }
-                else
-                {
-                    std::cout << "Could not get entry value. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                }
-            }
-        }
-        else
-        {
-            std::cout << "Could not get 'EventSelector' entry's. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-        }
-    }
-    else
-    {
-        std::cout << "Could not get feature 'EventSelector'. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-    }
-    return err;
-}
-
-// Purpose: Create for each 'Camera->EventData' feature an observer and register it.
-//
-// Parameter:
-// [in ]    CameraPtr   pCamera         Intern camera object.
-//
-// Returns:
-//          VmbErrorSuccess in case of success otherwise an error code
-VmbErrorType EventHandling::RegisterEventObserver( CameraPtr pCamera )
-{
-    FeaturePtrVector features;
-    VmbErrorType err = pCamera->GetFeatures( features );
-    if( VmbErrorSuccess == err )
-    {
-        for( size_t i = 0; i < features.size(); i++ )
-        {
-            std::string category;
-            err = features[i]->GetCategory( category );
-            if( 0 == category.compare( "/EventControl/EventData" ) && VmbErrorSuccess == err )
-            {
-                IFeatureObserverPtr pObserver;
-                SP_SET( pObserver, new EventObserver( pCamera ) );
-                err = features[i]->RegisterObserver( pObserver );
-                if( VmbErrorSuccess != err )
-                {
-                    std::cout << "Could not register observer. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                }
-            }
-        }
-    }
-    else
-    {
-        std::cout << "Could not get features. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-    }
-    return err;
-}
-
-// Purpose: Activate camera notification.
-//
-// Parameter:
-// [in ]    CameraPtr   pCamera         Intern camera object.
-// [in ]    std::string eventName       Name of event to activate.
-//
-// Returns:
-//          VmbErrorSuccess in case of success otherwise an error code
-VmbErrorType EventHandling::ActivateNotification( CameraPtr pCamera, std::string eventName  )
-{
-    std::cout << "Activate notification for '" << eventName << "' events.\n";
-    FeaturePtr feature;
-    VmbErrorType err = pCamera->GetFeatureByName( "EventSelector", feature );
-    if( VmbErrorSuccess == err )
-    {
-        err = feature->SetValue( eventName.c_str() );
-        if( VmbErrorSuccess == err )
-        {
-            err = pCamera->GetFeatureByName( "EventNotification", feature );
-            if( VmbErrorSuccess == err )
-            {
-                err = feature->SetValue( "On" );
-                if( VmbErrorSuccess != err )
-                {
-                    std::cout << "Could not set notification 'On'. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                }
-            }
-            else
-            {
-                std::cout << "Could not get feature 'EventNotification'. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-            }                    
-        }
-        else
-        {
-            std::cout << "Could not get selector '" << eventName << "'. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-        }
-    }
-    else
-    {
-        std::cout << "Could not get feature 'EventSelector'. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-    }
-    return err;
-}
-
-}}} // namespace AVT::VmbAPI::Examples
\ No newline at end of file
diff --git a/VimbaCPP/Examples/EventHandling/Source/EventHandling.h b/VimbaCPP/Examples/EventHandling/Source/EventHandling.h
deleted file mode 100644
index a327bc286c2802146b22ef1ee8a3ccae86d43d80..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/EventHandling/Source/EventHandling.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        EventHandling.h
-
-  Description: The EventHandling example will register observer on all
-               'EventData' features and turn on camera notification for
-               'AcquisitionStart' events.
-  
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_EVENT_HANDLING
-#define AVT_VMBAPI_EXAMPLES_EVENT_HANDLING
-
-#include <string>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class EventHandling
-{
-
-public:
-    // Purpose: Example execution.
-    //
-    // Parameter:
-    // [in ]    std::string cameraID        Use camera with this ID for the example.
-    void RunExample( std::string cameraID );
-
-private:
-    // Purpose: Deactivate all camera notification.
-    //
-    // Parameter:
-    // [in ]    CameraPtr   pCamera         Intern camera object.
-    //
-    // Returns:
-    //          VmbErrorSuccess in case of success otherwise an error code
-    VmbErrorType DeactivateAllCameraNotifications( CameraPtr pCamera );
-    
-    // Purpose: Create for each 'Camera->EventData' feature an observer and register it.
-    //
-    // Parameter:
-    // [in ]    CameraPtr   pCamera         Intern camera object.
-    //
-    // Returns:
-    //          VmbErrorSuccess in case of success otherwise an error code
-    VmbErrorType RegisterEventObserver( CameraPtr pCamera );
-    
-    // Purpose: Activate camera notification.
-    //
-    // Parameter:
-    // [in ]    CameraPtr   pCamera         Intern camera object.
-    // [in ]    std::string eventName       Name of event to activate.
-    //
-    // Returns:
-    //          VmbErrorSuccess in case of success otherwise an error code
-    VmbErrorType ActivateNotification( CameraPtr pCamera, std::string eventName );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/EventHandling/Source/EventObserver.cpp b/VimbaCPP/Examples/EventHandling/Source/EventObserver.cpp
deleted file mode 100644
index bc78b87f11a559c68b7947aa1cd32826a600631e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/EventHandling/Source/EventObserver.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        EventObserver.h
-
-  Description: The EventObserver can be attached to a camera feature. On Feature
-               changing the function FeatureChanged() is called.
-  
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-
-#include "EventObserver.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-EventObserver::EventObserver( AVT::VmbAPI::CameraPtr pCam )
-    :   m_pCam( pCam )
-{
-}
-
-// Purpose: This function will be called when the observed feature is changing.
-//
-// Parameter:
-// [in ]    const AVT::VmbAPI::FeaturePtr   &feature         changed feature
-//
-void EventObserver::FeatureChanged( const AVT::VmbAPI::FeaturePtr &feature )
-{
-    if( feature != NULL )
-    {
-        std::string featureName;
-        if ( !feature->GetName( featureName ) )
-        {
-            std::cout << featureName << " (Event) has changed to ";
-
-            AVT::VmbAPI::FeaturePtr pFeature;
-            VmbInt64_t nID;
-            if (    !( m_pCam->GetFeatureByName( featureName.c_str(), pFeature ) )
-                &&  !( pFeature->GetValue( nID ) ) )
-            {
-                std::cout << nID << std::endl;
-            }
-        }
-        else
-        {
-            std::cout << "An error occurred" << std::endl;
-        }
-    }
-}
-
-}}} // namespace AVT::VmbAPI::Examples
\ No newline at end of file
diff --git a/VimbaCPP/Examples/EventHandling/Source/EventObserver.h b/VimbaCPP/Examples/EventHandling/Source/EventObserver.h
deleted file mode 100644
index db0280010f6067ac95a07aa51df71638de6b79c1..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/EventHandling/Source/EventObserver.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        EventObserver.h
-
-  Description: The EventObserver can be attached to a camera feature. On Feature
-               changing the function FeatureChanged() is called.
-  
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_EVENT_OBSERVER_H
-#define AVT_VMBAPI_EXAMPLES_EVENT_OBSERVER_H
-
-#include <string>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class EventObserver : public AVT::VmbAPI::IFeatureObserver
-{
-
-private:
-    AVT::VmbAPI::CameraPtr m_pCam;
-
-public:
-    // Purpose: This function will be called when the observed feature is changing.
-    //
-    // Parameter:
-    // [in ]    const AVT::VmbAPI::FeaturePtr   &feature         changed feature
-    //
-    virtual void FeatureChanged( const AVT::VmbAPI::FeaturePtr &feature );
-    EventObserver( AVT::VmbAPI::CameraPtr pCam );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/EventHandling/Source/program.cpp b/VimbaCPP/Examples/EventHandling/Source/program.cpp
deleted file mode 100644
index 9705ef57b8d4830d09384c390bfd04570b4e4a61..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/EventHandling/Source/program.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of EventHandling example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-
-#include "EventHandling.h"
-
-int main( int argc, char* argv[] )
-{
-    std::cout << "\n";
-    std::cout << "////////////////////////////////////////\n";
-    std::cout << "/// Vimba API Event Handling Example ///\n";
-    std::cout << "////////////////////////////////////////\n\n";
-
-    if( 2 < argc )
-    {
-        std::cout << "Usage: EventHandling [CameraID]\n\n";
-        std::cout << "Parameters:   CameraID    ID of the camera to use (using first camera if not specified)\n";
-    }
-    else if( 2 == argc )
-    {
-        AVT::VmbAPI::Examples::EventHandling eventHandler;
-        eventHandler.RunExample( argv[1] );
-    }
-    else
-    {
-        AVT::VmbAPI::Examples::EventHandling eventHandler;
-        eventHandler.RunExample( "" );
-    }
-
-    std::cout <<"\n";
-}
diff --git a/VimbaCPP/Examples/ListAncillaryDataFeatures/Build/Make/Makefile b/VimbaCPP/Examples/ListAncillaryDataFeatures/Build/Make/Makefile
deleted file mode 100644
index 04a74271b1fbd1c660f2dc1990f2f8eca7cb1428..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListAncillaryDataFeatures/Build/Make/Makefile
+++ /dev/null
@@ -1,50 +0,0 @@
-PROJECT_NAME            = ListAncillaryDataFeatures
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ListAncillaryDataFeatures.o \
-                      $(OBJ_DIR)/program.o
-
-DEPENDENCIES        = VimbaCPP
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.cpp b/VimbaCPP/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.cpp
deleted file mode 100644
index 2e29c1a2935ac04bc42dbc5c10f3574c3a58d620..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.cpp
+++ /dev/null
@@ -1,384 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:         ListAncillaryDataFeatures.cpp
-
-  Description:  The ListAncillaryDataFeatures example will list all available
-                features of a camera that are found by VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <sstream>
-#include <iostream>
-#include <vector>
-#include <algorithm>
-#include <ListAncillaryDataFeatures.h>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-#include "Common/StreamSystemInfo.h"
-#include "Common/ErrorCodeToMessage.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-// Purpose:     Uses an API feature to set the biggest packet size possible
-//
-// Parameter:
-// [in ]        CamerPtr pCamera            The camera to work on
-VmbErrorType AdjustPacketSize(CameraPtr pCamera)
-{
-    FeaturePtr      pPacketSize;
-    VmbErrorType    err;
-    err = SP_ACCESS( pCamera )->GetFeatureByName( "GVSPAdjustPacketSize", pPacketSize );
-    if( VmbErrorSuccess ==  err )
-    {
-        err = SP_ACCESS( pPacketSize )->RunCommand() ;
-        if( VmbErrorSuccess == err)
-        {
-            bool bIsCommandDone = false;
-            do
-            {
-                if( VmbErrorSuccess != SP_ACCESS( pPacketSize )->IsCommandDone( bIsCommandDone ) )
-                {
-                    break;
-                }
-            } while( false == bIsCommandDone );
-        }
-    }
-    return err;
-}
-
-enum 
-{
-    ACQ_TIMEOUT = 1000,
-};
-
-// Purpose:     Prints out the value of a given feature
-//
-// Parameter:
-// [in ]        const FeaturePtr& feature       A reference to the feature shared pointer
-void PrintFeatureValue( const FeaturePtr& pFeature )
-{
-    VmbFeatureDataType  featureType;
-    VmbErrorType        err             = pFeature->GetDataType( featureType );
-    
-    if( VmbErrorSuccess != err )
-    {
-        std::cout << "[Could not get feature Data Type. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]\n";
-    }
-    else
-    {
-        std::cout << "/// Value          : ";
-        switch( featureType )
-        {
-        case VmbFeatureDataBool:
-            {
-                VmbBool_t value;
-                err = pFeature->GetValue( value );
-                if ( VmbErrorSuccess == err )
-                {
-                    std::cout << value << "\n";
-                }
-            }
-            break;
-        case VmbFeatureDataEnum:
-            {
-                std::string value;
-                err = pFeature->GetValue( value );
-                if ( VmbErrorSuccess == err )
-                {
-                    std::cout << value << "\n";
-                }
-            }
-            break;
-        case VmbFeatureDataFloat:
-            {
-                double value;
-                err = pFeature->GetValue( value );
-                if( VmbErrorSuccess == err)
-                {
-                    std::cout << value << "\n";
-                }
-            }
-            break;
-        case VmbFeatureDataInt:
-            {
-                VmbInt64_t value;
-                err = pFeature->GetValue( value );
-                if( VmbErrorSuccess == err)
-                {
-                    std::cout << value << "\n";
-                }
-            }
-            break;
-        case VmbFeatureDataString:
-            {
-                std::string value;
-                err = pFeature->GetValue( value );
-                if( VmbErrorSuccess == err)
-                {
-                    std::cout << value << "\n";
-                }
-            }
-            break;
-        case VmbFeatureDataCommand:
-        default:
-            std::cout << "[None]" << "\n";
-            break;
-        }
-        
-        if( VmbErrorSuccess == err )
-        {
-            std::cout << "\n";
-        }
-        else
-        {
-            std::cout << "Could not get feature value. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n\n";
-        }
-    }
-}
-
-// Purpose:     Prints out all details of a given feature
-//
-// Parameter:
-// [in ]        const FeaturePtr& pFeature       A reference to the feature shared pointer
-void PrintFeature( const FeaturePtr& pFeature )
-{
-    std::string name;                                                    // The name of the feature
-    std::string displayName;                                             // The display name of the feature
-    std::string toolTip;                                                 // A short description of the feature
-    std::string description;                                             // A long description of the feature
-    std::string category;                                                // A category to group features
-    std::string sfncNamespace;                                           // The Standard Feature Naming Convention namespace
-    std::string unit;                                                    // The measurement unit of the value
-
-    std::ostringstream ErrorStream;
-
-    VmbErrorType err = pFeature->GetName( name );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Name. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        name = ErrorStream.str();
-    }
-
-    err = pFeature->GetDisplayName( displayName );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Display Name. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        displayName = ErrorStream.str();
-    }
-
-    err = pFeature->GetToolTip( toolTip );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Tooltip. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        toolTip = ErrorStream.str();
-    }
-
-    err = pFeature->GetDescription( description );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Description. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        description = ErrorStream.str();
-    }
-
-    err = pFeature->GetCategory( category );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Category. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        category = ErrorStream.str();
-    }
-
-    err = pFeature->GetSFNCNamespace( sfncNamespace );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature SNFC Namespace. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        sfncNamespace = ErrorStream.str();
-    }
-
-    err = pFeature->GetUnit( unit );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Unit. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        unit = ErrorStream.str();
-    }
-
-    std::cout << "/// Feature Name   : " << name             << "\n";
-    std::cout << "/// Display Name   : " << displayName      << "\n";
-    std::cout << "/// Tooltip        : " << toolTip          << "\n";
-    std::cout << "/// Description    : " << description      << "\n";
-    std::cout << "/// SNFC Namespace : " << sfncNamespace    << "\n";
-    
-    PrintFeatureValue( pFeature );
-}
-
-// Purpose:     Pints out features from the ancillary data. Ancillary data is part of a frame,
-//              therefore we need to capture a single frame beforehand.
-//              If no camera ID string was passed we use the first camera found.
-//
-// Parameter:
-// [in ]        string cameraID     The ID of the camera to use
-void ListAncillaryDataFeatures::Print( std::string cameraID )
-{
-    VimbaSystem&        sys         = VimbaSystem::GetInstance();                       // Get a reference to the VimbaSystem singleton
-    std::cout << "Vimba C++ API Version " << sys << "\n";                                      // Print out version of Vimba
-    VmbErrorType        err         = sys.Startup();                                    // Initialize the Vimba API
-    FeaturePtrVector    features;                                                       // A vector of std::shared_ptr<AVT::VmbAPI::Feature> objects
-    CameraPtr           pCamera     = CameraPtr();                                      // Our camera
-
-    std::stringstream errorString;
-
-    if( VmbErrorSuccess == err )
-    {
-        if( cameraID.empty() )                                                          // If no ID was provided use the first camera
-        {
-            CameraPtrVector cameras;
-            err = sys.GetCameras( cameras );
-            if(     VmbErrorSuccess == err
-                &&  !cameras.empty() )
-            {
-                pCamera = cameras[0];                                                   // Get the camera
-                err = pCamera->Open( VmbAccessModeFull );                               // Open the camera
-                if( VmbErrorSuccess == err )
-                {
-                    err = pCamera->GetID( cameraID );
-                }
-            }
-        }
-        else
-        {
-            err = sys.OpenCameraByID(   cameraID.c_str(),                               // Get and open the camera
-                                        VmbAccessModeFull,
-                                        pCamera ); 
-        }
-
-        if( !SP_ISNULL( pCamera ))
-        {
-            if ( VmbErrorSuccess == err )
-            {
-                AdjustPacketSize( pCamera );
-                std::cout << "Printing all ancillary data features of camera with ID: " << cameraID << "\n\n";
-            
-                FeaturePtr pFeature;
-                err = pCamera->GetFeatureByName( "ChunkModeActive", pFeature );
-                if( VmbErrorSuccess == err )
-                {
-                    err = pFeature->SetValue( true );                                       // Enable ancillary data
-                    if( VmbErrorSuccess == err )
-                    {
-                        std::cout << "Capture a single frame\n\n";                          // In order to fill the ancillary data we need to fill a frame
-                        
-                        FramePtr pFrame;
-                        err = pCamera->AcquireSingleImage( pFrame, ACQ_TIMEOUT );
-                        if ( VmbErrorSuccess == err )
-                        {
-                            VmbFrameStatusType status;
-                            err = pFrame->GetReceiveStatus( status );                       // Check whether we received a complete frame
-                            if( VmbErrorSuccess == err )
-                            {
-                                if ( VmbFrameStatusComplete == status )
-                                {
-                                    AncillaryDataPtr pAncillaryData;
-                                    err = pFrame->GetAncillaryData( pAncillaryData );       // Get the ancillary data of the frame
-                                    if ( VmbErrorSuccess == err )
-                                    {
-                                        err = pAncillaryData->Open();
-                                        if( VmbErrorSuccess == err)
-                                        {
-                                            err = pAncillaryData->GetFeatures( features );  // Fetch all features of the ancillary data
-                                            if( VmbErrorSuccess == err )
-                                            {
-                                                // Query all static details as well as the value of all fetched features and print them out.
-                                                std::for_each( features.begin(), features.end(), PrintFeature );
-                                            }
-                                            else
-                                            {
-                                                std::cout << "Could not get features. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                                            }
-
-                                            pAncillaryData->Close();
-                                        }
-                                        else
-                                        {
-                                            std::cout << "Could not open ancillary data. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                                        }
-                                    }
-                                    else
-                                    {
-                                        std::cout << "Could not get ancillary data. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                                    }
-                                }
-                                else if( VmbFrameStatusIncomplete == status )
-                                {
-                                    std::cout << "Could not acquire complete frame. Receive status: " << err << "\n";
-                                }
-                                else
-                                {
-                                    std::cout << "Could not acquire frame. Receive status: " << err << "\n";
-                                }
-                            }
-                            else
-                            {
-                                std::cout << "Could not get frame receive status. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                            }
-                        }
-                        else
-                        {
-                            std::cout << "Could not acquire image. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                        }
-                    }
-                    else
-                    {
-                        std::cout << "Could not enable ancillary data. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                    }
-                }
-                else if( VmbErrorNotFound == err )
-                {
-                    std::cout << "The camera does not provide ancillary data. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                }
-                else
-                {
-                    std::cout << "Could not query for the presence of ancillary data. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-                }
-            
-
-                pCamera->Close();
-            }
-            else
-            {
-                std::cout << "Could not open camera. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-            }
-        }
-        else
-        {
-            std::cout << "No camera available.\n";
-        }
-
-        sys.Shutdown();                                                                 // Finally close Vimba
-    }
-    else
-    {
-        std::cout << "Could not start system. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-    }
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.h b/VimbaCPP/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.h
deleted file mode 100644
index b7e785ce563d464b357319bd7ae7c6cae18b6357..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListAncillaryDataFeatures/Source/ListAncillaryDataFeatures.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:         ListAncillaryDataFeatures.h
-
-  Description:  The ListAncillaryDataFeatures example will list all available
-                features of the ancillary data.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_LISTANCILLARYDATAFEATURES
-#define AVT_VMBAPI_EXAMPLES_LISTANCILLARYDATAFEATURES
-
-#include <string>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class ListAncillaryDataFeatures
-{
-public:
-    // Purpose:     Pints out features from the ancillary data. Ancillary data is part of a frame,
-    //              therefore we need to capture a single frame beforehand.
-    //              If no camera ID string was passed we use the first camera found.
-    //
-    // Parameter:
-    // [in ]        string cameraID     The ID of the camera to use
-    static void Print( std::string cameraID );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/ListAncillaryDataFeatures/Source/program.cpp b/VimbaCPP/Examples/ListAncillaryDataFeatures/Source/program.cpp
deleted file mode 100644
index f4677de1fc72f87829ce5dd40eed16c4cc71f64b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListAncillaryDataFeatures/Source/program.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2014 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of ListAncillaryDataFeatures example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-
-#include "ListAncillaryDataFeatures.h"
-
-int main( int argc, char* argv[] )
-{
-    std::cout << "\n";
-    std::cout << "//////////////////////////////////////////////////////\n";
-    std::cout << "/// Vimba API List Ancillary Data Features Example ///\n";
-    std::cout << "//////////////////////////////////////////////////////\n\n";
-
-    if( 2 < argc )
-    {
-        std::cout << "Usage: ListAncillaryDataFeatures [CameraID]\n\n";
-        std::cout << "Parameters:   CameraID    ID of the camera to use (using first camera if not specified)\n";
-    }
-    else if( 2 == argc )
-    {
-        AVT::VmbAPI::Examples::ListAncillaryDataFeatures::Print( argv[1] );
-    }
-    else
-    {
-        AVT::VmbAPI::Examples::ListAncillaryDataFeatures::Print( "" );
-    }
-
-    std::cout << "\n";
-}
diff --git a/VimbaCPP/Examples/ListCameras/Build/Make/Makefile b/VimbaCPP/Examples/ListCameras/Build/Make/Makefile
deleted file mode 100644
index a3513a5adbe2b6fc8b3ec49646c4f9f7b8ec1a1a..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListCameras/Build/Make/Makefile
+++ /dev/null
@@ -1,50 +0,0 @@
-PROJECT_NAME            = ListCameras
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ListCameras.o \
-                      $(OBJ_DIR)/program.o
-
-DEPENDENCIES        = VimbaCPP
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/ListCameras/Build/Make/binary/x86_64bit/ListCameras b/VimbaCPP/Examples/ListCameras/Build/Make/binary/x86_64bit/ListCameras
deleted file mode 100755
index 0f26501b835f8c7d7fdcb2dfbc127d8d7c2bdf9c..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/ListCameras/Build/Make/binary/x86_64bit/ListCameras and /dev/null differ
diff --git a/VimbaCPP/Examples/ListCameras/Build/Make/binary/x86_64bit/libVimbaC.so b/VimbaCPP/Examples/ListCameras/Build/Make/binary/x86_64bit/libVimbaC.so
deleted file mode 100644
index 781383deb7c36a92813b8997376e622b6e3e5a96..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/ListCameras/Build/Make/binary/x86_64bit/libVimbaC.so and /dev/null differ
diff --git a/VimbaCPP/Examples/ListCameras/Build/Make/binary/x86_64bit/libVimbaCPP.so b/VimbaCPP/Examples/ListCameras/Build/Make/binary/x86_64bit/libVimbaCPP.so
deleted file mode 100644
index 081afba051f4fc154481cec96cd4af633ca6b7ee..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/ListCameras/Build/Make/binary/x86_64bit/libVimbaCPP.so and /dev/null differ
diff --git a/VimbaCPP/Examples/ListCameras/Build/Make/object/x86_64bit/ListCameras.o b/VimbaCPP/Examples/ListCameras/Build/Make/object/x86_64bit/ListCameras.o
deleted file mode 100644
index 2b41a24ef8528fde47bcae08e16bc5925ded715b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/ListCameras/Build/Make/object/x86_64bit/ListCameras.o and /dev/null differ
diff --git a/VimbaCPP/Examples/ListCameras/Build/Make/object/x86_64bit/program.o b/VimbaCPP/Examples/ListCameras/Build/Make/object/x86_64bit/program.o
deleted file mode 100644
index 43bb5abd183f39b2df9066d8c25a382dfc0da786..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/ListCameras/Build/Make/object/x86_64bit/program.o and /dev/null differ
diff --git a/VimbaCPP/Examples/ListCameras/ListCameras.sublime-project b/VimbaCPP/Examples/ListCameras/ListCameras.sublime-project
deleted file mode 100644
index ba1790af86b06d75d3dc890687f22c1580a54225..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListCameras/ListCameras.sublime-project
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-	"folders":
-	[
-		{
-			// needs to be first for 'make' buildsystem to work
-			"path": "Build/Make",
-		},
-		{
-			// just to see in sidebar
-			"path": ".",
-		},
-		{
-			// just to see in sidebar
-			"path": "../../..", //proj-base
-		},
-		// also added Include to ECC (PackageSettings->EasyClangComplete)
-		// common_flags : [
-		// // ...
-		// "-I~/vimba_5_1/VimbaCPP/Examples",
-		// "-I~/vimba_5_1",
-		// ]
-	],
-}
diff --git a/VimbaCPP/Examples/ListCameras/ListCameras.sublime-workspace b/VimbaCPP/Examples/ListCameras/ListCameras.sublime-workspace
deleted file mode 100644
index ed0d8209aaa23aca290a48e3d2e10d1545291f14..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListCameras/ListCameras.sublime-workspace
+++ /dev/null
@@ -1,920 +0,0 @@
-{
-	"auto_complete":
-	{
-		"selected_items":
-		[
-			[
-				"par",
-				"fix_all_parents"
-			],
-			[
-				"cou",
-				"cout"
-			],
-			[
-				"cout",
-				"cout"
-			],
-			[
-				"siz",
-				"size_t"
-			],
-			[
-				"end",
-				"endl"
-			],
-			[
-				"remo",
-				"remove_if"
-			],
-			[
-				"for",
-				"forv"
-			],
-			[
-				"cst",
-				"c_str"
-			],
-			[
-				"ar",
-				"argc"
-			],
-			[
-				"re",
-				"remove"
-			],
-			[
-				"s",
-				"size"
-			],
-			[
-				"ce",
-				"cerr"
-			],
-			[
-				"her",
-				"here"
-			],
-			[
-				"is",
-				"isDir"
-			],
-			[
-				"pare",
-				"fix_all_parents"
-			],
-			[
-				"bac",
-				"back"
-			],
-			[
-				"res",
-				"resize"
-			],
-			[
-				"bo",
-				"boolalpha"
-			],
-			[
-				"ap",
-				"append"
-			],
-			[
-				"m",
-				"m_name"
-			],
-			[
-				"remove",
-				"remove_if"
-			],
-			[
-				"HE",
-				"here"
-			],
-			[
-				"fo",
-				"for"
-			],
-			[
-				"ma",
-				"make_uniq"
-			],
-			[
-				"unique",
-				"unique"
-			],
-			[
-				"u",
-				"unique"
-			],
-			[
-				"n",
-				"name"
-			],
-			[
-				"k",
-				"kids"
-			],
-			[
-				"er",
-				"erase"
-			],
-			[
-				"r",
-				"remove"
-			],
-			[
-				"e",
-				"empty"
-			],
-			[
-				"sear",
-				"search_tree"
-			],
-			[
-				"iter",
-				"iterator"
-			],
-			[
-				"MAX",
-				"MAX_KIDS"
-			],
-			[
-				"MA",
-				"MAX_KIDS"
-			],
-			[
-				"NUL",
-				"NullNode"
-			],
-			[
-				"type",
-				"typeinfo"
-			],
-			[
-				"pri",
-				"print_orig"
-			],
-			[
-				"ba",
-				"back"
-			],
-			[
-				"ad",
-				"add"
-			],
-			[
-				"b",
-				"back"
-			],
-			[
-				"a",
-				"all_bms"
-			],
-			[
-				"t",
-				"t_list_ref"
-			],
-			[
-				"t_l",
-				"t_list"
-			],
-			[
-				"em",
-				"emplace_front"
-			],
-			[
-				"i",
-				"include"
-			],
-			[
-				"con",
-				"contains"
-			],
-			[
-				"empl",
-				"emplace_back"
-			],
-			[
-				"for_e",
-				"for_each_n"
-			],
-			[
-				"all",
-				"all_dirs"
-			],
-			[
-				"di",
-				"dirs"
-			],
-			[
-				"co",
-				"count"
-			],
-			[
-				"si",
-				"size"
-			],
-			[
-				"isA",
-				"is_array"
-			],
-			[
-				"null",
-				"nullptr"
-			],
-			[
-				"in",
-				"index"
-			],
-			[
-				"eXCEP",
-				"bad_exception"
-			]
-		]
-	},
-	"buffers":
-	[
-		{
-			"file": "Source/ListCameras.h",
-			"settings":
-			{
-				"buffer_size": 1869,
-				"line_ending": "Windows"
-			},
-			"undo_stack":
-			[
-			]
-		},
-		{
-			"file": "Source/ListCameras.cpp",
-			"settings":
-			{
-				"buffer_size": 5413,
-				"encoding": "UTF-8",
-				"line_ending": "Windows"
-			},
-			"undo_stack":
-			[
-				[
-					3,
-					1,
-					"left_delete",
-					null,
-					"AQAAAEIHAAAAAAAAQgcAAAAAAAABAAAAYQ",
-					"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEMHAAAAAAAAQwcAAAAAAAAAAAAAAADwvw"
-				]
-			]
-		},
-		{
-			"file": "Source/program.cpp",
-			"settings":
-			{
-				"buffer_size": 1894,
-				"line_ending": "Windows"
-			}
-		}
-	],
-	"build_system": "Packages/Makefile/Make.sublime-build",
-	"build_system_choices":
-	[
-		[
-			[
-				[
-					"Packages/Makefile/Make.sublime-build",
-					""
-				],
-				[
-					"Packages/Makefile/Make.sublime-build",
-					"Clean"
-				]
-			],
-			[
-				"Packages/Makefile/Make.sublime-build",
-				""
-			]
-		],
-		[
-			[
-				[
-					"Packages/User/C++.sublime-build",
-					""
-				],
-				[
-					"Packages/User/C++.sublime-build",
-					"run"
-				],
-				[
-					"Packages/User/C++.sublime-build",
-					"run (+ demangle symbols)"
-				],
-				[
-					"Packages/User/C++.sublime-build",
-					"opencv: single"
-				],
-				[
-					"Packages/User/C++.sublime-build",
-					"json parser"
-				]
-			],
-			[
-				"Packages/User/C++.sublime-build",
-				"json parser"
-			]
-		]
-	],
-	"build_varint": "",
-	"command_palette":
-	{
-		"height": 0.0,
-		"last_filter": "",
-		"selected_items":
-		[
-			[
-				"menu",
-				"View: Toggle Menu"
-			],
-			[
-				"p",
-				"Preferences: Settings"
-			],
-			[
-				"uni",
-				"Permute Lines: Unique"
-			],
-			[
-				"sort",
-				"Sort Lines"
-			],
-			[
-				"install",
-				"Package Control: Install Package"
-			],
-			[
-				"insta",
-				"Install Package Control"
-			]
-		],
-		"width": 0.0
-	},
-	"console":
-	{
-		"height": 400.0,
-		"history":
-		[
-		]
-	},
-	"distraction_free":
-	{
-		"menu_visible": true,
-		"show_minimap": false,
-		"show_open_files": false,
-		"show_tabs": false,
-		"side_bar_visible": false,
-		"status_bar_visible": false
-	},
-	"expanded_folders":
-	[
-		"/home/sugu/code/idiv/camtron_all/b/VimbaCPP/Examples/ListCameras",
-		"/home/sugu/code/idiv/camtron_all/b/VimbaCPP/Examples/ListCameras/Source"
-	],
-	"file_history":
-	[
-		"/home/m/vimba_5_1/VimbaCPP/Examples/AsynchronousGrab/Qt/Source/main.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/ListCameras/Source/program.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/ListCameras/ListCameras.sublime-project",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/ListCameras/Source/ListCameras.h",
-		"/home/m/vimba_5_1/VimbaCPP/Include/Camera.h",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/ListCameras/Source/ListCameras.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Include/Camera.hpp",
-		"/home/m/vimba_5_1/VimbaCPP/Source/Camera.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Include/LoggerDefines.h",
-		"/home/m/vimba_5_1/VimbaCPP/Include/FileLogger.h",
-		"/home/m/vimba_5_1/VimbaCPP/Include/VimbaSystem.h",
-		"/home/m/vimba_5_1/VimbaCPP/Include/SharedPointerDefines.h",
-		"/home/m/vimba_5_1/VimbaCPP/Source/VimbaSystem.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/Build/Make/VimbaCPP.mk",
-		"/home/m/vimba_5_1/VimbaC/Include/VmbCommonTypes.h",
-		"/home/m/.config/sublime-text/Packages/User/Build.sublime-settings",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/ListCameras/Build/Make/Makefile",
-		"/home/m/vimba_5_1/VimbaCPP/Include/VimbaCPPCommon.h",
-		"/home/m/vimba_5_1/VimbaCPP/Include/VimbaCPP.h",
-		"/home/m/vimba_5_1/VimbaCPP/tmp/GT1920CCamera.cpp",
-		"/home/m/vimba_5_1/VimbaCPP/tmp/GT1920CCamera.h",
-		"/home/m/dox/priv/read",
-		"/home/m/vimba_5_1/VimbaGigETL/SetGenTLPath.sh",
-		"/home/m/vimba_5_1/VimbaGigETL/Install.sh",
-		"/home/m/dox/idiv/camtron/notes_qina_1306",
-		"/home/m/vimba_5_1/VimbaCPP/Examples/Bin/x86_64bit/features",
-		"/home/m/code/bash/git_repo.sh",
-		"/home/m/code/.gitignore",
-		"/home/m/code/idiv/synconf/sync.list",
-		"/home/m/code/idiv/synconf/sync.sh",
-		"/home/m/dox/cmds/cmds.cpp",
-		"/home/m/dox/cmds/cmds2.sh",
-		"/home/m/.bash_aliases",
-		"/home/m/.gnupg/sshcontrol",
-		"/home/m/.ssh/known_hosts",
-		"/home/m/code/c++/bookmark_merger/bookmarx-merger.sublime-project",
-		"/home/m/code/c++/bookmark_merger/merger.cpp",
-		"/home/m/code/c++/foo/foo.cpp",
-		"/home/m/code/c++/bookmark_merger/m_new.json",
-		"/home/m/code/c++/bookmark_merger/m_old.json",
-		"/home/m/code/c++/bookmark_merger/sugu.json",
-		"/home/m/code/c++/bookmark_merger/log",
-		"/home/m/code/c++/bookmark_merger/run-merger.sh",
-		"/home/m/code/c++/bookmark_merger/joli.json",
-		"/home/m/code/c++/bookmark_merger/j2.json",
-		"/home/m/code/c++/bookmark_merger/j1.json",
-		"/home/m/.config/user/bookmarx/joli.json",
-		"/home/m/code/c++/bookmark_merger/fooooo.cpp",
-		"/home/m/code/.git/COMMIT_EDITMSG",
-		"/home/m/.config/user/bookmarx/bookmarks-sugu.json",
-		"/home/m/code/c++/bookmark_merger/bookmarks-sugu-joli.json",
-		"/home/m/code/c++/bookmark_merger/bookmarks-REC.json",
-		"/home/m/code/c++/bookmark_merger/tree-merge.cpp",
-		"/home/m/code/c++/bookmark_merger/bla.cpp",
-		"/home/m/code/c++/foo/snippets.cpp",
-		"/home/m/code/c++/bookmark_merger/fooooooooooooo.cpp",
-		"/home/m/code/c++/foo/todo_1337.cpp",
-		"/home/m/.config/user/browseFiles/cpp_filelist",
-		"/home/m/code/c++/foo/stuff",
-		"/home/m/dox/po/notes/dates",
-		"/home/m/.config/sublime-text/Packages/User/c++_cerr.sublime-snippet",
-		"/home/m/.config/sublime-text/Packages/User/c++_cerr2.sublime-snippet",
-		"/home/m/.config/sublime-text/Packages/User/c++_cout2.sublime-snippet",
-		"/home/m/.config/sublime-text/Packages/User/c++_cout.sublime-snippet",
-		"/home/m/.config/sublime-text/Packages/User/here.sublime-snippet",
-		"/home/m/.config/sublime-text/Packages/User/endl.sublime-snippet",
-		"/usr/include/c++/9/bits/stl_vector.h",
-		"/home/m/code/idiv/camtron/examples/Demo2.cpp",
-		"/home/m/code/idiv/camtron/examples/Demo.cpp",
-		"/home/m/.config/sublime-text/Packages/User/c++_for_auto.sublime-snippet",
-		"/usr/include/c++/9/bits/stl_list.h",
-		"/home/m/code/c++/foo/ressources",
-		"/home/m/code/idiv/ecotrondata/ecotrack/out/dates",
-		"/home/m/dox/po/notes/ukraine",
-		"/home/m/code/bash/restore.sh",
-		"/home/m/dox/cmds/cmds.py",
-		"/home/m/.config/sublime-text/Packages/User/c++_include.sublime-snippet",
-		"/home/m/.config/user/bookmarx/bookmarks-empty.json",
-		"/home/m/dox/todo/todo_po",
-		"/home/m/.config/user/browseFiles/todo_filelist",
-		"/home/m/dox/idiv/camtron/notes",
-		"/home/m/dox/idiv/camtron/install",
-		"/home/m/dox/idiv/camtron/opencv",
-		"/home/m/dox/bureau/study_again?",
-		"/usr/include/c++/9/bits/basic_string.h",
-		"/home/m/dox/psy/psy2",
-		"/home/m/dox/psy/psy",
-		"/home/m/dox/todo/todo_tron",
-		"/home/m/.config/sublime-text/Packages/User/C++.sublime-build",
-		"/home/m/.config/sublime-text/Packages/EasyClangComplete/EasyClangComplete.sublime-settings",
-		"/home/m/.config/sublime-text/Packages/User/EasyClangComplete.sublime-settings",
-		"/home/m/.config/sublime-text/Packages/User/clang_format.sublime-settings",
-		"/home/m/code/c++/bookmark_merger/bookmark_merger.sublime-project",
-		"/home/m/.config/sublime-merge/Packages/User/Preferences.sublime-settings",
-		"/home/m/code/idiv/camtron/examples/ct-examples.sublime-project",
-		"/home/m/code/idiv/camtron/examples/CMakeLists.txt",
-		"/usr/include/opencv4/opencv2/opencv.hpp",
-		"/usr/include/opencv4/opencv2/opencv_modules.hpp",
-		"/home/m/code/idiv/camtron/src/PreProcessor.h",
-		"/home/m/code/idiv/camtron/src/utils/ILoadSaveConfig.h",
-		"/home/m/code/idiv/camtron/src/PreProcessor.cpp",
-		"/home/m/code/idiv/camtron/examples/Demo_orig.cpp",
-		"/home/m/dox/lang/fr/b2/2/unité_5",
-		"/home/m/code/idiv/camtron/demo.py",
-		"/home/m/code/idiv/camtron/demo2.py",
-		"/home/m/dox/lang/fr/b2/2/expose2",
-		"/home/m/dox/lang/fr/b2/2/expose",
-		"/home/m/dox/lang/fr/b2/2/vocab",
-		"/home/m/code/.git/MERGE_MSG",
-		"/home/m/dox/lang/fr/b2/2/unité_4",
-		"/home/m/code/idiv/camtron/src/algorithms/ttoolbox.h",
-		"/home/m/code/idiv/camtron/src/algorithms/ttoolbox.cpp",
-		"/home/m/code/idiv/camtron/src/algorithms/Tapter.h",
-		"/home/m/code/idiv/camtron/src/algorithms/Tapter.cpp",
-		"/home/m/code/idiv/camtron/examples/Demo3.cpp",
-		"/home/m/dox/lang/fr/b2/2/voyage21France",
-		"/home/m/dox/po/notes/misc",
-		"/home/m/dox/lang/fr/b2/2/journal-televisé",
-		"/home/m/dox/priv/quotes",
-		"/home/m/dox/lang/fr/b2/2/unité_3",
-		"/home/m/.bash_aliases.bup",
-		"/home/m/code/idiv/synconf/sync.list.bup",
-		"/home/m/code/bash/syncThunderbirdMsgFIlter.sh",
-		"/home/m/code/idiv/camtron/README.md",
-		"/home/m/dox/po/notes/urgewald",
-		"/home/m/.config/user/dircolors/night",
-		"/home/m/.config/user/dircolors/day",
-		"/home/m/code/python/util/util.py"
-	],
-	"find":
-	{
-		"height": 45.0
-	},
-	"find_in_files":
-	{
-		"height": 131.0,
-		"where_history":
-		[
-		]
-	},
-	"find_state":
-	{
-		"case_sensitive": false,
-		"find_history":
-		[
-			"streamsyste",
-			"streamsyste,",
-			"streaminfo",
-			"ErrorCodeToMessage",
-			"error",
-			"strError",
-			"PrintCameraInfo",
-			"camera->",
-			"VmbInterfaceType",
-			"PrintCameraInfo",
-			"asyn",
-			"CameraPtrVector",
-			"err",
-			"sys",
-			"GetInterfaceID",
-			"getinter",
-			"interface",
-			"SOURCE_DIR",
-			"EXAMPLES_DIR",
-			"ARCH_CFLAGS",
-			"ARCH",
-			"CONFIG_DIR",
-			"binary",
-			"RM",
-			"FeaturePtr",
-			"error",
-			"VmbErrorType",
-			"Error",
-			"VmbErrorType",
-			"PrintCameraInfo",
-			"clr",
-			"Hait",
-			"Haiti",
-			"pullRepos",
-			"toggleRepo",
-			"showRepoStatuses",
-			"git",
-			"bjj",
-			"vv=",
-			"max_archive_size_mb",
-			"maxSize_Byte",
-			"push",
-			"print_verbose",
-			"rNodes",
-			"unteilb",
-			"rm",
-			"sort",
-			"fix_all_parents",
-			"sort",
-			"unteil",
-			"fix_all_parents",
-			"sort",
-			"HACK",
-			"sort",
-			"kids()",
-			"remove(",
-			"remove",
-			"[]",
-			"psy",
-			"[]",
-			"remove_empty",
-			"[]",
-			"make_uniq",
-			"\"title\": \"rm",
-			"old-onl",
-			"sugu-only",
-			"old-only",
-			"only",
-			"Xm_new-only-1",
-			"only",
-			"cout",
-			"sugu-only",
-			"old-only",
-			"new-only",
-			"old-only",
-			"sugu-only",
-			"sugu",
-			"remove(",
-			"fix_all_parents",
-			"remove",
-			"print",
-			"add_kid",
-			"antira",
-			"kids(",
-			"antira",
-			"„",
-			"antira",
-			"XXm_old-",
-			"XXm_new",
-			"Xsugu-only",
-			"\"\n",
-			"XXsugu-only-",
-			"sugu-only-3",
-			"Xsugu-only",
-			"XXsugu-only",
-			"sugu",
-			"m_old-only",
-			"XXm_new-only-3",
-			"antifa",
-			"XXm_new-only-2",
-			"only-2",
-			"XXm_new-",
-			"m_new-only",
-			"only",
-			"m_new-only",
-			"m_old-only",
-			"sugu-only",
-			"sugu",
-			"m_new",
-			"m_old",
-			"idiv",
-			"CT",
-			"operator==",
-			"fix_all_parents",
-			"sort",
-			"add_ki",
-			"from_json",
-			"size",
-			"add_kid",
-			"sportm",
-			"sport",
-			"[]",
-			"sportmassage",
-			"https://www.meine-massage.de/sportmassage/",
-			"[]",
-			"sort",
-			"DEBUG",
-			"find("
-		],
-		"highlight": true,
-		"in_selection": false,
-		"preserve_case": false,
-		"regex": false,
-		"replace_history":
-		[
-			"XXm_new-only-4",
-			"XXm_new-only-3",
-			"XXm_new-only-2",
-			"XXm_new-only-1",
-			"XXm_old-only-4",
-			"XXm_old-only-3",
-			"XXm_old-only-2",
-			"XXm_old-only-1",
-			"XXsugu-only-3",
-			"XXsugu-only-2",
-			"XXsugu-only-1",
-			"",
-			"__LINE__ << \":",
-			"parent->",
-			"parent.",
-			"dupesbookmark",
-			"bookmark",
-			"dupes",
-			".name()",
-			"print_names",
-			"Node::all",
-			"pp_all(",
-			"orig",
-			"kid",
-			"Node::ilist",
-			"ns",
-			"",
-			"4",
-			"cout",
-			"",
-			"to_json",
-			"from_json"
-		],
-		"reverse": false,
-		"scrollbar_highlights": true,
-		"show_context": true,
-		"use_buffer2": true,
-		"use_gitignore": true,
-		"whole_word": false,
-		"wrap": true
-	},
-	"groups":
-	[
-		{
-			"sheets":
-			[
-				{
-					"buffer": 0,
-					"file": "Source/ListCameras.h",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 1869,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								1664,
-								1664
-							]
-						],
-						"settings":
-						{
-							"syntax": "Packages/C++/C++.sublime-syntax",
-							"tab_size": 2,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 450.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 2,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 1,
-					"file": "Source/ListCameras.cpp",
-					"selected": true,
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 5413,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								1476,
-								1476
-							]
-						],
-						"settings":
-						{
-							"syntax": "Packages/C++/C++.sublime-syntax",
-							"tab_size": 4,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 430.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 0,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 2,
-					"file": "Source/program.cpp",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 1894,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								1427,
-								1427
-							]
-						],
-						"settings":
-						{
-							"syntax": "Packages/C++/C++.sublime-syntax",
-							"tab_size": 2,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 375.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 1,
-					"stack_multiselect": false,
-					"type": "text"
-				}
-			]
-		}
-	],
-	"incremental_find":
-	{
-		"height": 34.0
-	},
-	"input":
-	{
-		"height": 0.0
-	},
-	"layout":
-	{
-		"cells":
-		[
-			[
-				0,
-				0,
-				1,
-				1
-			]
-		],
-		"cols":
-		[
-			0.0,
-			1.0
-		],
-		"rows":
-		[
-			0.0,
-			1.0
-		]
-	},
-	"menu_visible": true,
-	"output.ECC":
-	{
-		"height": 186.0
-	},
-	"output.exec":
-	{
-		"height": 324.0
-	},
-	"output.find_results":
-	{
-		"height": 0.0
-	},
-	"output.mdpopups":
-	{
-		"height": 0.0
-	},
-	"pinned_build_system": "Packages/Makefile/Make.sublime-build",
-	"project": "ListCameras.sublime-project",
-	"replace":
-	{
-		"height": 84.0
-	},
-	"save_all_on_build": true,
-	"select_file":
-	{
-		"height": 0.0,
-		"last_filter": "",
-		"selected_items":
-		[
-			[
-				"logger",
-				"vimba_5_1/VimbaCPP/Include/FileLogger.h"
-			],
-			[
-				"jo",
-				"joli.json"
-			],
-			[
-				"",
-				"tree-merge.cpp"
-			],
-			[
-				"al",
-				"~/.bash_aliases"
-			]
-		],
-		"width": 0.0
-	},
-	"select_project":
-	{
-		"height": 500.0,
-		"last_filter": "",
-		"selected_items":
-		[
-			[
-				"",
-				"~/code/idiv/camtron_all/b/recorder/recorder.sublime-project"
-			]
-		],
-		"width": 380.0
-	},
-	"select_symbol":
-	{
-		"height": 134.0,
-		"last_filter": "",
-		"selected_items":
-		[
-		],
-		"width": 592.0
-	},
-	"selected_group": 0,
-	"settings":
-	{
-	},
-	"show_minimap": true,
-	"show_open_files": false,
-	"show_tabs": true,
-	"side_bar_visible": false,
-	"side_bar_width": 199.0,
-	"status_bar_visible": true,
-	"template_settings":
-	{
-	}
-}
diff --git a/VimbaCPP/Examples/ListCameras/Source/ListCameras.cpp b/VimbaCPP/Examples/ListCameras/Source/ListCameras.cpp
deleted file mode 100644
index 0258c994201ffb57b170077b7e29d1750cc5fb83..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListCameras/Source/ListCameras.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ListCameras.cpp
-
-  Description: The ListCameras example will list all available cameras that
-               are found by VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <sstream>
-#include <iostream>
-#include <vector>
-#include <algorithm>
-
-#include "ListCameras.h"
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-#include "Common/StreamSystemInfo.h"
-#include "Common/ErrorCodeToMessage.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-/**printing camera info for a camera.
-*\note this function is used with for_each and is called for each camera in range cameras.begin(), cameras.end()
-*/
-void PrintCameraInfo( const CameraPtr &camera )
-{
-    std::string strID;
-    std::string strName;
-    std::string strModelName;
-    std::string strSerialNumber;
-    std::string strInterfaceID;
-
-    std::ostringstream ErrorStream;
-
-    VmbErrorType err = camera->GetID( strID );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get camera ID. Error code: " << err << "("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "]";
-        strID =  ErrorStream.str();
-    }
-                
-    err = camera->GetName( strName );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get camera name. Error code: " << err << "("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "]";
-        strName = ErrorStream.str() ;
-    }
-
-    err = camera->GetModel( strModelName );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get camera mode name. Error code: " << err << "("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "]";
-        strModelName = ErrorStream.str();
-    }
-
-    err = camera->GetSerialNumber( strSerialNumber );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get camera serial number. Error code: " << err << "("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "]";
-        strSerialNumber = ErrorStream.str();
-    }
-
-    err = camera->GetInterfaceID( strInterfaceID );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get interface ID. Error code: " << err << "("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "]";
-        strInterfaceID = ErrorStream.str() ;
-    }
-
-    std::cout   << "/// Camera Name    : " << strName           << "\n"
-                << "/// Model Name     : " << strModelName      <<  "\n"
-                << "/// Camera ID      : " << strID             <<  "\n"
-                << "/// Serial Number  : " << strSerialNumber   <<  "\n"
-                << "/// @ Interface ID : " << strInterfaceID    << "\n\n";
-}
-
-//
-// Starts Vimba
-// Gets all connected cameras
-// And prints out information about the camera name, model name, serial number, ID and the corresponding interface ID
-//
-void ListCameras::Print()
-{
-    VimbaSystem&    sys = VimbaSystem::GetInstance();  // Get a reference to the VimbaSystem singleton
-    std::cout<<"Vimba C++ API Version "<<sys<<"\n";           // Print out version of Vimba
-    VmbErrorType    err = sys.Startup();               // Initialize the Vimba API
-    CameraPtrVector cameras;                           // A vector of std::shared_ptr<AVT::VmbAPI::Camera> objects
-
-    std::stringstream strError;
-
-    if( VmbErrorSuccess == err )
-    {
-        err = sys.GetCameras( cameras );            // Fetch all cameras known to Vimba
-        if( VmbErrorSuccess == err )
-        {
-            std::cout << "Cameras found: " << cameras.size() <<"\n\n";
-
-            // Query all static details of all known cameras and print them out.
-            // We don't have to open the cameras for that.
-            std::for_each( cameras.begin(), cameras.end(), PrintCameraInfo );
-        }
-        else
-        {
-            std::cout << "Could not list cameras. Error code: " << err << "("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "\n";
-        }
-
-        sys.Shutdown();                             // Close Vimba
-    }
-    else
-    {
-        std::cout << "Could not start system. Error code: " << err <<"("<<AVT::VmbAPI::Examples::ErrorCodeToMessage(err)<<")"<< "\n";
-    }
-}
-
-}}} // namespace AVT::VmbAPI::Examples
-
diff --git a/VimbaCPP/Examples/ListCameras/Source/ListCameras.h b/VimbaCPP/Examples/ListCameras/Source/ListCameras.h
deleted file mode 100644
index 739a1bd36d64c1d2680ef23eaa25e8ab462b1365..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListCameras/Source/ListCameras.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ListCameras.h
-
-  Description: The ListCameras example will list all available cameras that
-               are found by VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_LISTCAMERAS
-#define AVT_VMBAPI_EXAMPLES_LISTCAMERAS
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class ListCameras
-{
-  public:
-    //
-    // Starts Vimba
-    // Gets all connected cameras
-    // And prints out information about the camera name, model name, serial number, ID and the corresponding interface ID
-    //
-    static void Print();
-};
-
-}}} // mamespace AVT::Vimba::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/ListCameras/Source/program.cpp b/VimbaCPP/Examples/ListCameras/Source/program.cpp
deleted file mode 100644
index 696a2181ca359efb422df5a046aab279621bec72..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListCameras/Source/program.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of ListCameras example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-
-#include "ListCameras.h"
-
-int main( int argc, char* argv[] )
-{
-    std::cout << "\n";
-    std::cout << "//////////////////////////////////////\n";
-    std::cout << "/// Vimba API List Cameras Example ///\n";
-    std::cout << "//////////////////////////////////////\n\n";
-
-    if( 1 < argc )
-    {
-        std::cout << "No parameters expected. Execution will not be affected by the provided parameter(s).\n\n";
-    }
-
-    AVT::VmbAPI::Examples::ListCameras::Print();
-
-    std::cout << "\n";
-}
diff --git a/VimbaCPP/Examples/ListFeatures/Build/Make/Makefile b/VimbaCPP/Examples/ListFeatures/Build/Make/Makefile
deleted file mode 100644
index 9b56258149366632257732d6b3e81c56a3fad14c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListFeatures/Build/Make/Makefile
+++ /dev/null
@@ -1,50 +0,0 @@
-PROJECT_NAME            = ListFeatures
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ListFeatures.o \
-                      $(OBJ_DIR)/program.o
-
-DEPENDENCIES        = VimbaCPP
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/ListFeatures/Source/ListFeatures.cpp b/VimbaCPP/Examples/ListFeatures/Source/ListFeatures.cpp
deleted file mode 100644
index deb123f87e162ab3151866d221b14ea112f4d31c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListFeatures/Source/ListFeatures.cpp
+++ /dev/null
@@ -1,314 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ListFeatures.cpp
-
-  Description: The ListFeatures example will list all available features of a
-               camera that are found by VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <sstream>
-#include <iostream>
-#include <vector>
-#include <algorithm>
-#include <ListFeatures.h>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-#include "Common/StreamSystemInfo.h"
-#include "Common/ErrorCodeToMessage.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//
-// Prints out an error message in case a feature's value could not be queried.
-// Prints nothing in case the error means success.
-//
-// Parameters:
-//  [in]    err             The return code indicating the error
-//
-// Returns:
-//  The error code as passed in
-// 
-VmbErrorType PrintGetValueErrorMessage ( const VmbErrorType err )
-{
-    if ( VmbErrorSuccess != err )
-    {
-        std::cout << "Could not get feature value. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-    }
-
-    return err;
-}
-
-//
-// Prints out the value and the type of a given feature
-//
-// Parameters:
-//  [in]    feature         The feature to work on
-//
-void PrintFeatureValue( const FeaturePtr &feature )
-{
-    VmbFeatureDataType  eType;
-    VmbErrorType        err     = feature->GetDataType( eType );
-    if( VmbErrorSuccess != err )
-    {
-        std::cout << "[Could not get feature Data Type. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]\n";
-    }
-    else
-    {
-        std::cout << "/// Value          : ";
-        switch( eType )
-        {
-            case VmbFeatureDataBool:
-                {
-                    VmbBool_t bValue;
-                    err = feature->GetValue( bValue );
-                    if ( VmbErrorSuccess == PrintGetValueErrorMessage( err ) )
-                    {
-                        std::cout << bValue << "\n";
-                    }
-                    std::cout << "/// Type           : Boolean\n";
-                }
-                break;
-            case VmbFeatureDataEnum:
-                {
-                    std::string strValue;
-                    err = feature->GetValue( strValue );
-                    if ( VmbErrorSuccess == PrintGetValueErrorMessage( err ) )
-                    {
-                        std::cout << strValue << "\n";
-                    }
-                    std::cout << "/// Type           : Enumeration\n";
-                }
-                break;
-            case VmbFeatureDataFloat:
-                {
-                    double fValue;
-                    double fMin, fMax;
-                    err = feature->GetValue( fValue );
-                    if( VmbErrorSuccess == PrintGetValueErrorMessage( err ) )
-                    {
-                        std::cout << fValue << "\n";
-                    }
-
-                    std::cout << "/// Minimum        : ";
-                    err = feature->GetRange( fMin, fMax );
-                    if( VmbErrorSuccess == PrintGetValueErrorMessage( err ) )
-                    {
-                        std::cout << fMin << "\n";
-                        std::cout << "/// Maximum        : " << fMax << "\n";
-                    }
-                    std::cout << "/// Type           : Double precision floating point\n";
-                }
-                break;
-            case VmbFeatureDataInt:
-                {
-                    VmbInt64_t nValue;
-                    VmbInt64_t nMin, nMax;
-                    err = feature->GetValue( nValue );
-                    if( VmbErrorSuccess == PrintGetValueErrorMessage( err ) )
-                    {
-                        std::cout << nValue << "\n";
-                    }
-
-                    std::cout << "/// Minimum        : ";
-                    err = feature->GetRange( nMin, nMax );
-                    if( VmbErrorSuccess == PrintGetValueErrorMessage( err ) )
-                    {
-                        std::cout << nMin << "\n";
-                        std::cout << "/// Maximum        : " << nMax << "\n";
-                    }
-                    std::cout << "/// Type           : Long long integer\n";
-                }
-                break;
-            case VmbFeatureDataString:
-                {
-                    std::string strValue;
-                    
-                    err = feature->GetValue( strValue );
-                    if( VmbErrorSuccess == PrintGetValueErrorMessage( err ) )
-                    {
-                        std::cout << strValue << "\n";
-                    }
-                    std::cout << "/// Type           : String\n";
-                }
-                break;
-            case VmbFeatureDataCommand:
-            default:
-                {
-                    std::cout << "[None]" << "\n";
-                    std::cout << "/// Type           : Command feature\n";
-                }
-                break;
-        }
-
-        std::cout << "\n";
-    }
-}
-
-//
-// Prints out all details of a feature
-//
-// Parameters:
-//  [in]    feature         The feature to work on
-//
-void PrintFeatures( const FeaturePtr &feature )
-{
-    std::string strName;                                                    // The name of the feature
-    std::string strDisplayName;                                             // The display name of the feature
-    std::string strToolTip;                                                 // A short description of the feature
-    std::string strDescription;                                             // A long description of the feature
-    std::string strCategory;                                                // A category to group features
-    std::string strSFNCNamespace;                                           // The Standard Feature Naming Convention namespace
-    std::string strUnit;                                                    // The measurement unit of the value
-
-    std::ostringstream ErrorStream;
-
-    VmbErrorType err = feature->GetName( strName );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Name. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        strName = ErrorStream.str();
-    }
-
-    err = feature->GetDisplayName( strDisplayName );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Display Name. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        strDisplayName = ErrorStream.str();
-    }
-
-    err = feature->GetToolTip( strToolTip );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Tooltip. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        strToolTip = ErrorStream.str();
-    }
-
-    err = feature->GetDescription( strDescription );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Description. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        strDescription = ErrorStream.str();
-    }
-
-    err = feature->GetCategory( strCategory );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Category. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        strCategory = ErrorStream.str();
-    }
-
-    err = feature->GetSFNCNamespace( strSFNCNamespace );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature SNFC Namespace. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        strSFNCNamespace = ErrorStream.str();
-    }
-
-    err = feature->GetUnit( strUnit );
-    if( VmbErrorSuccess != err )
-    {
-        ErrorStream << "[Could not get feature Unit. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "]";
-        strUnit = ErrorStream.str();
-    }
-
-    std::cout << "/// Feature Name   : " << strName             << "\n";
-    std::cout << "/// Display Name   : " << strDisplayName      << "\n";
-    std::cout << "/// Tooltip        : " << strToolTip          << "\n";
-    std::cout << "/// Description    : " << strDescription      << "\n";
-    std::cout << "/// SNFC Namespace : " << strSFNCNamespace    << "\n";
-    std::cout << "/// Unit           : " << strUnit             << "\n";
-    
-    PrintFeatureValue( feature );
-}
-
-//
-// Prints out all features and their values and details of a given camera.
-// If no camera ID is provided, the first camera will be used.
-// Starts and stops the API
-// Opens and closes the camera
-//
-// Parameters:
-//  [in]    CameraID        The ID of the camera to work
-//
-void ListFeatures::Print( std::string CameraID )
-{
-    VimbaSystem&        sys         = VimbaSystem::GetInstance();           // Get a reference to the VimbaSystem singleton
-    std::cout << "Vimba C++ API Version " << sys << "\n";                          // Print out version of Vimba
-    VmbErrorType        err         = sys.Startup();                        // Initialize the Vimba API
-    FeaturePtrVector    features;                                           // A vector of std::shared_ptr<AVT::VmbAPI::Feature> objects
-    CameraPtr           pCamera     = CameraPtr();                          // Our camera
-
-    std::stringstream strError;
-
-    if( VmbErrorSuccess == err )
-    {
-        if( CameraID.empty() )                                              // If no ID was provided use the first camera
-        {
-            CameraPtrVector cameras;
-            err = sys.GetCameras( cameras );
-            if(     VmbErrorSuccess == err
-                &&  !cameras.empty() )
-            {
-                err = cameras[0]->Open( VmbAccessModeFull );                // Open the camera
-                if( VmbErrorSuccess == err )
-                {
-                    pCamera = cameras[0];
-                    err = pCamera->GetID( CameraID );
-                }
-            }
-        }
-        else
-        {
-            err = sys.OpenCameraByID( CameraID.c_str(), VmbAccessModeFull, pCamera ); // Get and open the camera
-        }
-        if( NULL != pCamera )
-        {
-            std::cout << "Printing all features of camera with ID: " << CameraID << "\n";
-            err = pCamera->GetFeatures( features );                         // Fetch all features of our cam
-            if( VmbErrorSuccess == err )
-            {
-                // Query all static details as well as the value of all fetched features and print them out.
-                std::for_each( features.begin(), features.end(), PrintFeatures );
-            }
-            else
-            {
-                std::cout << "Could not get features. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-            }
-
-            pCamera->Close();
-        }
-        else
-        {
-            std::cout << "Could not open camera or no camera available. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-        }
-        sys.Shutdown();
-    }
-    else
-    {
-        std::cout << "Could not start system. Error code: " << err << " (" << AVT::VmbAPI::Examples::ErrorCodeToMessage( err ) << ")" << "\n";
-    }
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/ListFeatures/Source/ListFeatures.h b/VimbaCPP/Examples/ListFeatures/Source/ListFeatures.h
deleted file mode 100644
index 904baecfe6e220f1521949b0f11ddd9748fb8dbc..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListFeatures/Source/ListFeatures.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ListFeatures.h
-
-  Description: The ListFeatures example will list all available features of a
-               camera that are found by VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_LISTFEATURES
-#define AVT_VMBAPI_EXAMPLES_LISTFEATURES
-
-#include <string>
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class ListFeatures
-{
-public:
-    //
-    // Prints out all features and their values and details of a given camera.
-    // If no camera ID is provided, the first camera will be used.
-    // Starts and stops the API
-    // Opens and closes the camera
-    //
-    // Parameters:
-    //  [in]    CameraID        The ID of the camera to work
-    //
-    static void Print( std::string CameraID );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/ListFeatures/Source/program.cpp b/VimbaCPP/Examples/ListFeatures/Source/program.cpp
deleted file mode 100644
index 48a3efab2e6bbdc6d7a37f1bbf344bcc1c52d154..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/ListFeatures/Source/program.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of ListFeatures example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-
-#include "ListFeatures.h"
-
-int main( int argc, char* argv[] )
-{
-    std::cout << "\n";
-    std::cout << "///////////////////////////////////////\n";
-    std::cout << "/// Vimba API List Features Example ///\n";
-    std::cout << "///////////////////////////////////////\n\n";
-
-    if( 2 < argc )
-    {
-        std::cout << "Usage: ListFeatures [CameraID]\n\n";
-        std::cout << "Parameters:   CameraID    ID of the camera to use (using first camera if not specified)\n";
-    }
-    else if( 2 == argc )
-    {
-        AVT::VmbAPI::Examples::ListFeatures::Print( argv[1] );
-    }
-    else
-    {
-        AVT::VmbAPI::Examples::ListFeatures::Print( "" );
-    }
-
-    std::cout <<"\n";
-}
diff --git a/VimbaCPP/Examples/LoadSaveSettings/Build/Make/Makefile b/VimbaCPP/Examples/LoadSaveSettings/Build/Make/Makefile
deleted file mode 100644
index b4928e51e91da231e52b1f070658f1363b3a1a26..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/LoadSaveSettings/Build/Make/Makefile
+++ /dev/null
@@ -1,53 +0,0 @@
-PROJECT_NAME            = LoadSaveSettings
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-include $(MAKE_INCLUDE_DIR)/tinyxml.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS) \
-					  $(TINYXML_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS) \
-					  $(TINYXML_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/program.o
-
-DEPENDENCIES        = VimbaCPP \
-					  tinyxml
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/LoadSaveSettings/Source/program.cpp b/VimbaCPP/Examples/LoadSaveSettings/Source/program.cpp
deleted file mode 100644
index 246dd34100b2da82e3085e85a5c4adfeae4a06fe..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/LoadSaveSettings/Source/program.cpp
+++ /dev/null
@@ -1,472 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: LoadSaveSettings example of VimbaCPP.
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-#include <sstream>
-#include <VimbaCPP/Include/VimbaCPP.h>
-
-int main( int argc, char* argv[] )
-{
-    using namespace AVT::VmbAPI;
-
-    VmbErrorType err = VmbErrorSuccess;
-    std::stringstream ss;
-    bool apiFlag = false;
-    bool cameraFlag = false;
-
-    std::cout << std::endl;
-    std::cout << "////////////////////////////////////////////" << std::endl;
-    std::cout << "/// Vimba API Load/Save Settings Example ///" << std::endl;
-    std::cout << "////////////////////////////////////////////" << std::endl;
-    std::cout << std::endl;
-    
-//  create camera pointer
-//  get VimbaCPP instance singleton
-    CameraPtr pCam;
-    VimbaSystem &sys = VimbaSystem::GetInstance();
-
-    try
-    {
-    //  start Vimba API
-        err = sys.Startup();
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not start Vimba [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-            throw std::exception();
-        }
-
-        apiFlag = true;
-        std::cout << "--> VimbaCPP has been started" << std::endl;
-
-    //  get connected cameras from VimbaCPP
-        CameraPtrVector pCameras;
-        err = sys.GetCameras( pCameras );
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not get connected cameras [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            throw std::exception();
-        }
-
-    //  select first camera in list
-        pCam = pCameras[0];
-
-    //  open camera
-        err = pCam->Open( VmbAccessModeFull );
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not open camera [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-            
-            err = pCam->Close();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not close camera [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-
-            throw std::exception();
-        }
-
-    //  get camera id
-        std::string cameraId;
-        err = pCam->GetID( cameraId );
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not get camera id [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-
-            err = pCam->Close();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not close camera [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-
-            throw std::exception();
-        }
-
-        cameraFlag = true;
-        ss.str( "" );
-        ss << "--> Camera with id '" << cameraId << "' has been opened";
-        std::cout << ss.str() << std::endl;
-
-    //  create xml file name
-        ss.str( "" );
-        ss << cameraId << ".xml";
-        std::string xmlFile = ss.str();
-
-    //  -------------------------------------------------------------------------------------
-    //  setup load/save settings behaviour:
-    //      there are three different ways in VimbaCPP to setup the behaviour for
-    //      loading and saving feature values with load/save settings implementation.
-    //      SaveCameraSettings() and LoadCameraSettings() can be called either with
-    //      an created struct of type 'VmbFeaturePersistSettings_t' or not. The third
-    //      alternative is to call LoadSaveSettingsSetup() beforehand and provide the
-    //      same parameters as it will be done by the struct.
-    //
-    //      (1) default usage:
-    //          pCam->SaveCameraSettings( xmlFile );
-    //          pCam->LoadCameraSettings( xmlFile );
-    //
-    //      (2) usage with settings struct:
-    //          VmbFeaturePersistSettings_t settingsStruct;
-    //          settingsStruct.loggingLevel = 4;                        //  set logging level (0:info only, 1: with errors, 2: with warnings, 3: with debug, 4: with traces)
-    //          settingsStruct.maxIterations = 5;                       //  since its difficult to catch all feature dependencies during loading multiple
-                                                                        //  iterations are used (compare desired value with camera value and write it to camera)
-    //          settingsStruct.persistType = VmbFeaturePersistNoLUT;    //  set which features shall be persisted (saved to XML):
-                                                                        //  VmbFeaturePersistAll: all features shall be persisted (including LUTs).
-                                                                        //  VmbFeaturePersistStreamable: only streamable features shall be persisted.
-                                                                        //  VmbFeaturePersistNoLUT: all features shall be persisted except for LUT,
-                                                                        //  which is the recommended setting, because it might be very time consuming.
-    //          pCam->SaveCameraSettings( xmlFile, &settingsStruct );
-    //          pCam->LoadCameraSettings( xmlFile, &settingsStruct );
-    //
-    //      (3) usage with setup method:
-    //          pCam->LoadSaveSettingsSetup( VmbFeaturePersistNoLUT, 5, 4 );
-    //          pCam->SaveCameraSettings( xmlFile );
-    //          pCam->LoadCameraSettings( xmlFile );
-    //  -------------------------------------------------------------------------------------
-
-    //  call VimbaCPP method for saving all feature values
-        err = pCam->SaveCameraSettings( xmlFile );
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not save camera settings to file '" << xmlFile << "' [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-
-            err = pCam->Close();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not close camera [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            cameraFlag = false;
-
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            apiFlag = false;
-
-            throw std::exception();
-        }
-
-        ss.str( "" );
-        ss << "--> Feature values have been saved to '" << xmlFile << "'";
-        std::cout << ss.str() << std::endl;
-
-    //  get feature selector for user set
-        FeaturePtr feature;
-        err = pCam->GetFeatureByName( "UserSetSelector", feature );
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not get feature 'UserSetSelector' [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-
-            err = pCam->Close();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not close camera [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            cameraFlag = false;
-
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            apiFlag = false;
-
-            throw std::exception();
-        }
-
-    //  set value of selector to 'Default'
-        err = feature->SetValue( "Default" );
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not set value of feature 'UserSetSelector' [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-
-            err = pCam->Close();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not close camera [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            cameraFlag = false;
-
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            apiFlag = false;
-
-            throw std::exception();
-        }
-
-    //  get feature command 'UserSetLoad'
-        err = pCam->GetFeatureByName( "UserSetLoad", feature );
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not get feature 'UserSetLoad' [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-
-            err = pCam->Close();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not close camera [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            cameraFlag = false;
-
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            apiFlag = false;
-
-            throw std::exception();
-        }
-
-    //  load selected user set
-        err = feature->RunCommand();
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not run command 'UserSetLoad' [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-
-            err = pCam->Close();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not close camera [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            cameraFlag = false;
-
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            apiFlag = false;
-
-            throw std::exception();
-        }
-
-        std::cout << "--> All feature values have been restored to default" << std::endl;
-
-    //  create settings struct to determine behaviour during loading
-        VmbFeaturePersistSettings_t settingsStruct;
-        settingsStruct.loggingLevel = 4;
-        settingsStruct.maxIterations = 5;
-        settingsStruct.persistType = VmbFeaturePersistNoLUT;
-
-    //  re-load saved settings from file
-        err = pCam->LoadCameraSettings( xmlFile, &settingsStruct );
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not load camera settings to file '" << xmlFile << "' [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-
-            err = pCam->Close();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not close camera [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            cameraFlag = false;
-
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            apiFlag = false;
-
-            throw std::exception();
-        }
-
-        ss.str( "" );
-        ss << "--> Feature values have been loaded from given XML file '" << xmlFile << "'";
-        std::cout << ss.str() << std::endl;
-
-    //  close camera
-        err = pCam->Close();
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not close camera [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-            apiFlag = false;
-
-            throw std::exception();
-        }
-        cameraFlag = false;
-
-        std::cout << "--> Camera has been closed" << std::endl;
-
-    //  shutdown Vimba
-        err = sys.Shutdown();
-        if( VmbErrorSuccess != err )
-        {
-            ss.str( "" );
-            ss << "Could not shutdown Vimba [error code: " << err << "]";
-            std::cout << ss.str() << std::endl;
-            throw std::exception();
-        }
-        apiFlag = false;
-
-        std::cout << "--> VimbaCPP has been shut down" << std::endl;
-
-    }
-    catch( std::exception &e )
-    {
-        std::cout << "[Exception] " << e.what() << std::endl;
-        
-        if( true == cameraFlag )
-        {
-            err = pCam->Close();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not close camera [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-        }
-        if( true == apiFlag )
-        {
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-        }
-
-    }
-    catch(...)
-    {
-        std::cout << "[Exception]" << std::endl;
-
-        if( true == cameraFlag )
-        {
-            err = pCam->Close();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not close camera [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-        }
-        if( true == apiFlag )
-        {
-            err = sys.Shutdown();
-            if( VmbErrorSuccess != err )
-            {
-                ss.str( "" );
-                ss << "Could not shutdown Vimba [error code: " << err << "]";
-                std::cout << ss.str() << std::endl;
-            }
-        }
-
-    }
-
-    std::cout << std::endl << "<<press any key to close example>>" << std::endl;
-    std::cin.get();
-    return err;
-
-}
diff --git a/VimbaCPP/Examples/LookUpTable/Build/Make/Makefile b/VimbaCPP/Examples/LookUpTable/Build/Make/Makefile
deleted file mode 100644
index 768aa6a31a15beaf244e92eb7b167cf6c4349392..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/LookUpTable/Build/Make/Makefile
+++ /dev/null
@@ -1,51 +0,0 @@
-PROJECT_NAME            = LookUpTable
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/LookUpTable.o \
-					  $(OBJ_DIR)/program.o \
-					  $(OBJ_DIR)/Csv.o
-
-DEPENDENCIES        = VimbaCPP
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/LookUpTable/Source/Csv.cpp b/VimbaCPP/Examples/LookUpTable/Source/Csv.cpp
deleted file mode 100644
index 5ec151f9665c02ac685ccc467bca4b7d3448ec52..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/LookUpTable/Source/Csv.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Csv.cpp
-
-  Description: Helper to access a CSV file using VimbaCPP.
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <vector>
-
-#include "Csv.h"
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-
-// Class to write data to a CSV file
-CsvSave::CsvSave( const std::string &FileName )
-    :m_Stream( FileName.c_str() )
-{  }
-
-// Writes a single row to a CSV file.
-bool CsvSave::Row( const std::string &text )
-{
-    if( 0 == text.size() )
-    {
-        return false;
-    }
-    std::string line = text + m_CsvParameter.RD() ;
-    m_Stream.write( line.c_str(), line.length() );
-    return true;
-}
-
-// Class to load data from CSV
-CsvLoad::CsvLoad( const std::string &filename )
-    : m_Stream( filename.c_str() )
-{}
-
-// Reads a row of data from CSV
-bool CsvLoad::Row( std::vector<std::string> &row )
-{
-    row.clear();
-    char pLineText[256];
-    if( m_Stream.getline( pLineText, 256, m_CsvParameter.RD() ) )
-    {
-
-        std::string lineText = std::string( pLineText );
-        if( 0 == lineText.size() )
-        {
-            return false;
-        }
-        typedef std::string::size_type pos_type;
-        pos_type pos = 0;
-        while( pos != std::string::npos )
-        {
-            pos_type start = pos;
-            pos = lineText.find( m_CsvParameter.VD(), start );
-            const std::string value = lineText.substr( start, pos );
-            row.push_back( value );
-            if( pos != std::string::npos )
-            {
-                pos++;
-            }
-        }
-    }
-    else
-    {
-        return false;
-    }
-
-    return ( row.size() > 0 );
-}
-
-}}} // namespace AVT::VmbAPI::Examples
\ No newline at end of file
diff --git a/VimbaCPP/Examples/LookUpTable/Source/Csv.h b/VimbaCPP/Examples/LookUpTable/Source/Csv.h
deleted file mode 100644
index 96438b979de32996c26d40cbf3697121ee910007..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/LookUpTable/Source/Csv.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Csv.h
-
-  Description: Helper to access a CSV file using VimbaCPP.
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_LOOKUPTABLE_CSV
-#define AVT_VMBAPI_EXAMPLES_LOOKUPTABLE_CSV
-
-#include <iostream>
-#include <fstream>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class Csv
-{
-private:
-    char m_VD;
-    char m_RD;
-    bool m_bHasHeader;
-
-public:
-    //ctor
-    Csv()
-        : m_VD( ';' )
-        , m_RD( '\n' )
-        , m_bHasHeader( false )
-    {   }
-    char VD( )                          const   { return m_VD; }
-    void VD( char vd )                          { m_VD = vd;}
-    char RD ( )                         const   { return m_RD; }
-    bool HasHeader()                    const   { return m_bHasHeader; }
-    void HasHeader( bool bHasHeader )           { m_bHasHeader = bHasHeader; }
-
-};
-
-class CsvLoad
-{
-private:
-    std::ifstream   m_Stream;
-    Csv             m_CsvParameter;
-public:
-    //ctor
-    CsvLoad( const std::string &filename );
-    bool  Row( std::vector<std::string> &row );
-};
-
-class CsvSave
-{
-private:
-    std::ofstream   m_Stream;
-    Csv             m_CsvParameter;
-public:
-    //ctor
-    CsvSave( const std::string &filename );
-
-    bool Row( const std::string &text );
-};
-
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/LookUpTable/Source/Exception.h b/VimbaCPP/Examples/LookUpTable/Source/Exception.h
deleted file mode 100644
index 1daf5f074c9087bac69835ca15929a24551a2a1f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/LookUpTable/Source/Exception.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Exception.h
-
-  Description: Helper for exceptions.
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_EXCEPTION
-#define AVT_VMBAPI_EXAMPLES_EXCEPTION
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-#include "Common/ErrorCodeToMessage.h"
-using namespace std;
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class Exception: public exception
-{
-private:
-    std::string m_sMsg;
-    // Vimba error code
-    VmbErrorType      m_eError;
-public:
-    Exception( const std::string &rsMessage, const VmbErrorType eError )
-    : m_eError(eError)
-    {
-        try
-        {
-            m_sMsg = rsMessage;
-        } catch(...){}
-    }
-    Exception( const std::string &Fun, const std::string &rsMessage, const VmbErrorType eError )
-    : m_eError(eError)
-    {
-        try
-        {
-            m_sMsg =  Fun + ": " + rsMessage;
-        } catch(...){}
-    }
-
-    virtual ~Exception() throw()
-    {
-    }
-
-    VmbErrorType GetError() const
-    {
-        return m_eError;
-    }
-
-    std::string GetMessageStr() const
-    {
-        return m_sMsg;
-    }
-
-    // Translates Vimba error codes to readable error messages
-    std::string ErrorCodeToMessage( VmbErrorType eErr )
-    {
-        return AVT::VmbAPI::Examples::ErrorCodeToMessage( eErr );
-    }
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/LookUpTable/Source/LookUpTable.cpp b/VimbaCPP/Examples/LookUpTable/Source/LookUpTable.cpp
deleted file mode 100644
index 876674fac90dd2aada809342a25daeefa4bad9b5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/LookUpTable/Source/LookUpTable.cpp
+++ /dev/null
@@ -1,569 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        LookUpTable.cpp
-
-  Description: The LookUpTable example will demonstrate how to use
-               the look up table feature of the camera using VimbaCPP.
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <string>
-#include <fstream>
-#include <sstream>
-#include <iterator>
-#include <vector>
-#include <algorithm>
-
-#include "LookUpTable.h"
-#include "Csv.h"
-#include "Exception.h"
-#include "VimbaFeatures.h"
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-namespace
-{   // toolset to handle network byte order, for production, use htons ntohs for int16
-    static const union
-    {
-        VmbUint8_t  bytes[4];
-        VmbUint32_t v;
-    } host_byte_order = {{0,1,2,3}};
-    enum 
-    {
-        byte_oder_little_endian = 0x03020100ul,
-        byte_oder_big_endian    = 0x01000302ul,
-    };
-
-    inline UcharVector ConvertToNetworkInt16( const UcharVector &d)
-    {
-        if (host_byte_order.v == byte_oder_little_endian)
-        {
-            UcharVector tmp( d );
-            for( size_t i = 0 ;i < tmp.size(); i +=2)
-            {
-                VmbUint16_t *p = reinterpret_cast<VmbUint16_t*>( &tmp[i] );
-                *p = ((*p>>8) & 0xff) | ((*p<<8) & 0xff00);
-            }
-            return tmp;
-        }
-        return d;
-    }
-    inline UcharVector ConvertFromNetworkInt16( const UcharVector &d)
-    {
-        return ConvertToNetworkInt16( d );
-    }
-}
-bool LookUpTableCollection::HasLookUpTable(CameraPtr pCamera )
-{
-    return VimbaFeature::HasFeature( pCamera, "LUTSelector");
-}
-LookUpTableCollection::LookUpTableCollection( CameraPtr pCamera )
-    : m_pCamera( pCamera )
-{
-    //Check parameters
-    if( NULL == m_pCamera )
-    {
-        throw Exception( __FUNCTION__,"LookUpTableCollection failed camera pointer NULL.", VmbErrorBadParameter );
-    }
-
-
-    VmbInt64_t nCount = GetCount( );
-    if( 0 == nCount )
-    {
-        throw Exception( __FUNCTION__,"LookUpTableCollection no entries.", VmbErrorNotFound );
-    }
-    // for each lookup table create a control
-    for( int i = 0; i < nCount; i++ )
-    {
-        m_tables.push_back( LookUpTableControl( m_pCamera, i ));
-    }
-}
-
-//Get look up table count
-VmbInt64_t LookUpTableCollection::GetCount( )
-{
-    // number of LUTs is the number of enum values fo the "LUTSelector" Feature
-    VimbaFeatureEnum LutSelector( m_pCamera, "LUTSelector" );
-    return LutSelector.ValueCount();
-}
-
-//Get look up table control
-LookUpTableControl  LookUpTableCollection::GetControl( VmbInt64_t nIndex )
-{
-    VimbaFeatureEnum    LutSelector( m_pCamera, "LUTSelector" );                            //< get enum feature for supported LUTs
-    StringVector        Values = LutSelector.GetValues();                                   //< get list of supported LUTs
-    if( static_cast<size_t>(nIndex) >= Values.size() )                                                           //< test index for out of range
-    {
-        throw Exception( __FUNCTION__,"selected index out of range",VmbErrorBadParameter );
-    }
-    std::string SelectedValue = Values[ static_cast<size_t>( nIndex ) ];
-    if( !LutSelector.IsAvailable( SelectedValue ) )
-    {
-        throw Exception(__FUNCTION__,"selected LUT is not available", VmbErrorBadParameter );
-    }
-    LutSelector.SetStringValue( SelectedValue );                  //< activate the LUT at nIndex
-
-    return m_tables[ static_cast<size_t>( nIndex ) ];                                       //< get stored LUT control
-}
-
-//Get look up table active index
-VmbInt64_t LookUpTableCollection::GetActiveIndex( )
-{
-    VimbaFeatureEnum    LutSelector( m_pCamera, "LUTSelector" );                                                //< get enum feture for supported luts
-    const StringVector  SupportedLuts   = LutSelector.GetValues();                                              //< get list of supported LUTs
-    std::string         CurrentLut      = LutSelector.GetStringValue( );                                        //< get the currently selected LUT
-    StringVector::const_iterator find_pos = std::find( SupportedLuts.begin(), SupportedLuts.end(), CurrentLut );//< find current vallue in list
-    if( SupportedLuts.end() == find_pos )
-    {
-        throw Exception( __FUNCTION__,"could not find current selected lut index",VmbErrorNotFound );
-    }
-    return std::distance( SupportedLuts.begin(), find_pos );
-}
-
-LookUpTableControl::LookUpTableControl( CameraPtr pCamera, VmbInt64_t nIndex )
-    :   m_pCamera( pCamera )
-    ,   m_nIndex( nIndex )
-
-{
-    //Check parameters
-    if( NULL == m_pCamera )
-    {
-        throw Exception( __FUNCTION__,"LookUpTableControl failed.", VmbErrorBadParameter );
-    }
-}
-
-//Enable look up table
-void LookUpTableControl::Enable( VmbBool_t bEnable )
-{
-    VimbaFeatureBool LutEnable( m_pCamera, "LUTEnable" );   //< create bool feature for lut enable
-    LutEnable( bEnable );                                   //< set state to feature
-}
-
-//Is look up table enabled
-VmbBool_t LookUpTableControl::IsEnabled( ) const
-{
-    VimbaFeatureBool LutEnable( m_pCamera,"LUTEnable" );    //< create bool feature for Lut enable
-    return LutEnable();                                     //< return current value
-}
-
-//Get look up table index
-VmbInt64_t LookUpTableControl::GetIndex( ) const
-{
-    VimbaFeatureInt LutIndex( m_pCamera, "LUTIndex" );      //< get feature for LUT index
-    return LutIndex();                                      // return current index
-}
-
-//Get value count
-VmbInt64_t LookUpTableControl::GetValueCount( ) const
-{
-    VimbaFeatureInt LutSize                 ( m_pCamera,"LUTSize");             //< get feature for LUT size in bytes
-    VimbaFeatureInt LutBitDepthOut          ( m_pCamera, "LUTBitDepthOut");     //< get feature for output bits per lut values
-    VmbInt64_t      nLUTBytePerValue    =   LutBitDepthOut() > 8 ? 2 : 1;       //< calculate bytes used its either 2 bytes if larger than 8bits or 1 byte
-    
-    return LutSize() / nLUTBytePerValue;                                        //< lut are elements without padding consecutive in memory
-}
-
-//Get look up table value
-VmbInt64_t LookUpTableControl::GetValue( ) const
-{
-    VimbaFeatureInt LutValue( m_pCamera, "LUTValue" );                          //< get feature for lUT element value this depends on LUTIndex
-    return LutValue();                                                          //< return current value
-}
-
-//Set look up table value
-void LookUpTableControl::SetValue( VmbInt64_t nValue )
-{
-    VimbaFeatureInt LutValue( m_pCamera,"LUTValue" );                           //< get feature for LUT element value this depends on LUTIndex
-    LutValue( nValue );                                                         //< set new value
-}
-
-
-//Get bit depth in
-VmbInt64_t LookUpTableControl::GetBitDepthIn( ) const
-{
-    VimbaFeatureInt LutBitDepthIn( m_pCamera, "LUTBitDepthIn" );                //< get feature for input bit depth of LUT
-    return LutBitDepthIn();                                                     //<  return bit depth
-}
-
-//Get bit depth out
-VmbInt64_t LookUpTableControl::GetBitDepthOut( ) const
-{
-    VimbaFeatureInt LutBitDepthOut( m_pCamera,"LUTBitDepthOut" );               //< get feature for output bit depth of LUT
-    return LutBitDepthOut();                                                    // return bit dept
-}
-
-
-//Download look up table
-void  LookUpTableControl::Download()
-{
-    // if any kind of LUT is implemented we should find the LUTSelector feature
-    if( VmbBoolTrue != VimbaFeature::HasFeature( m_pCamera,"LUTSelector" ) )
-    {
-        throw Exception( __FUNCTION__,"no LUT feature implemented",VmbErrorNotFound );
-    }
-    // try reading LUT with FileAccess
-    if( VmbBoolTrue == VimbaFeature::HasFeature( m_pCamera, "FileSelector" ) )
-    {
-        VimbaFeatureEnum        LutSelector ( m_pCamera, "LUTSelector");                        //< selector feature for lookup table
-        VimbaFeatureEnum        FileSelector( m_pCamera, "FileSelector");                       //< file selector
-        VimbaFeatureEnum        FileOpenMode( m_pCamera, "FileOpenMode");                       //< selector for file open mode
-        FileSelector.SetStringValue ( std::string("LUT") + LutSelector.GetStringValue());       //< get the lookup table name and set it to file selector
-
-        if( VmbBoolTrue != FileOpenMode.IsAvailable( "Read" ) )                                 //< test if LUT feature is readable, Firewire does not support LUT read
-        {
-            throw Exception( __FUNCTION__,"camera does not support LUT download to host computer", VmbErrorNotSupported );
-        }
-        FileOpenMode.SetStringValue( "Read" );                                                  //< set the open mode to read
-
-        VimbaFeatureInt LutSize( m_pCamera,"LUTSizeBytes" );                                    //< integer feature for bytes of lookup table
-        m_data.resize( static_cast<size_t>( LutSize() ) );                                      //< get the bytes
-
-        VimbaFeatureEnum        FileOperationSelector   ( m_pCamera, "FileOperationSelector");  //< file operation selector to selector the file command
-        VimbaFeatureCommand     FileOperationExecute    ( m_pCamera, "FileOperationExecute");   //< file operation command executer
-        VimbaFeatureRaw         FileAccessBuffer        ( m_pCamera, "FileAccessBuffer");       //< raw data feature to access file buffer
-        VimbaFeatureInt         FileAccessOffset        ( m_pCamera, "FileAccessOffset");       //< integer feature to get the data offset into the buffer
-        VimbaFeatureInt         FileAccessLength        ( m_pCamera, "FileAccessLength");       //< integer feature for length of file access
-        VimbaFeatureEnum        FileOperationStatus     ( m_pCamera, "FileOperationStatus");    //< enumeration value for state of file operation
-        VimbaFeatureInt         FileOperationResult     ( m_pCamera, "FileOperationResult");    //< integer for file operation result
-        VimbaFeatureEnum        FileStatus              ( m_pCamera, "FileStatus");             //< file state feature
-        VimbaFeatureInt         FileSize                ( m_pCamera, "FileSize");               //< file size feature
-
-
-        FileOperationSelector.SetStringValue( "Open" );                                         //< set open command for file access
-        FileOperationExecute.Run();                                                             //< execute command
-
-        //File size
-        VmbInt64_t nFileSize = FileSize( );                                                     //< get lut file size
-
-
-        FileOperationSelector.SetStringValue( "Read" );                                         //< set file operation to read
-
-        VmbInt64_t  nFileAccessOffset = 0;                                                      //< set start offset
-        VmbInt64_t  nFileAccessLength = min( LutSize(), FileAccessLength.Max() );               //< determine if we can read the lut in one go, or are limited by max access length
-        UcharVector data( static_cast<size_t>( nFileAccessLength ) );                           //< prepare the temporary data buffer
-
-        do
-        {
-            FileAccessLength( nFileAccessLength );                                              //< set the amount of data we want to read
-            FileOperationExecute.Run();                                                         //< commit the read request
-
-
-            if( FileOperationStatus.GetStringValue( ) != "Success" )                            //< test if read failed
-            {
-                throw Exception( __FUNCTION__,"reading LUT failed", VmbErrorOther );
-            }
-
-            FileAccessBuffer.GetBuffer( data );                                                 //< if read succeeded we can read the raw buffer
-            data = ConvertFromNetworkInt16( data );
-            copy( data.begin(), data.end(), m_data.begin() + ( size_t )nFileAccessOffset );     //< copy it from temp storage to internal data buffer
-
-            nFileAccessOffset = FileAccessOffset( );                                            //< get the new file offset
-
-            nFileAccessLength = min( nFileSize - nFileAccessOffset, FileAccessLength.Max() );   //< get the next file length
-        }
-        while( nFileSize != nFileAccessOffset );
-
-        //Select close as file operation
-        FileOperationSelector.SetStringValue( "Close" );                                        //< set file operation to close
-        FileOperationExecute.Run();                                                             //< commit the close operation
-
-        if( FileOperationStatus.GetStringValue() != "Success" )                                 //< test if close succeeded
-        {
-            throw Exception( __FUNCTION__,"lut file operation failed", VmbErrorOther );
-        }
-    }
-    // try reading LUT address for GigE (indicator for direct memory access)
-    else if( VmbBoolTrue ==  VimbaFeature::HasFeature( m_pCamera, "LUTAddress" ) )
-    {
-        VimbaFeatureInt     LutSize( m_pCamera,"LUTSizeBytes" );                                                    //< get feature for lut byte size
-        m_data.resize( static_cast<size_t>( LutSize() ) );                                                          //< prepare storage for LUT data
-        
-        VimbaFeatureInt     LutAddress      (m_pCamera, "LUTAddress");                                              //< try to get the LUT address feature
-        VmbInt64_t          nLUTAddress     = LutAddress();                                                         //< store address
-        VmbUint32_t         nCompletedReads = 0;
-        VmbErrorType        err             = m_pCamera->ReadMemory( nLUTAddress, m_data, nCompletedReads );
-        if( VmbErrorSuccess != err )
-        {
-            throw Exception( __FUNCTION__,": could not read memory from camera",err );
-        }
-        m_data = ConvertFromNetworkInt16( m_data );
-    }
-    // if non of the buffer read features are available try to read it value by value
-    else
-    {
-        VimbaFeatureInt   LUTIndex( m_pCamera, "LUTIndex" );                            //< get the LUTIndex feature to control the index of the current value
-        VimbaFeatureInt   LUTValue( m_pCamera, "LUTValue" );                            //< get the LUTValue feature to access the current value
-        VimbaFeatureInt   LutSize ( m_pCamera, "LUTSizeBytes" );                        //< get the LUTSizeBytes feature to get LUT size info
-
-        m_data.resize( static_cast<size_t>( LutSize() ) );                              //< resize storage for LUT data
-
-        VmbInt64_t          nLUTBitDepthOut     = GetBitDepthOut( );                    //< get bits per LUT value needed
-
-        //Evaluate number of LUT entries
-        VmbInt64_t          nLUTBytePerValue    = ( nLUTBitDepthOut > 8 ) ? 2 : 1;      //< determine what size the LUT values occupy
-        VmbInt64_t          nLUTEntries         = LutSize() / nLUTBytePerValue;         //< entries are stored consecutive without padding
-
-        //Get LUT values by iteration over indexes
-        int                 iter                = 0;
-        for( VmbInt64_t i = 0; i < nLUTEntries ; i++ )
-        {
-            LUTIndex( i );                                      //< set index
-            VmbInt64_t nValue = LUTValue( );                    //< get current value
-            switch( nLUTBytePerValue )
-            {
-            case 1:
-                m_data[iter++] = static_cast<VmbUint8_t>( nValue );
-                break;
-            case 2:
-                {
-                    VmbUint16_t * p = (VmbUint16_t*)( &m_data[iter] );
-                    *p              = static_cast<VmbUint16_t>( nValue );
-                    iter +=2;
-                }
-                break;
-            }
-        }
-    }
-}
-
-//Upload look up table
-void LookUpTableControl::Upload()
-{
-    //Look up table raw data empty
-    if( m_data.empty() )
-    {
-        throw Exception( __FUNCTION__,": lut data vector is empty", VmbErrorOther );
-    }
-
-    if( VmbBoolTrue == VimbaFeature::HasFeature( m_pCamera, "FileSelector" ) )
-    {
-
-        //Evaluate size of LUT
-        VimbaFeatureInt     LUTSize                 ( m_pCamera, "LUTSizeBytes");
-        //file access control
-        VimbaFeatureEnum    FileOperationSelector   ( m_pCamera, "FileOperationSelector");
-        VimbaFeatureCommand FileOperationExecute    ( m_pCamera, "FileOperationExecute" );
-        VimbaFeatureEnum    FileOpenMode            ( m_pCamera, "FileOpenMode" );
-        VimbaFeatureRaw     FileAccessBuffer        ( m_pCamera, "FileAccessBuffer" );
-        VimbaFeatureInt     FileAccessOffset        ( m_pCamera, "FileAccessOffset" );
-        VimbaFeatureInt     FileAccessLength        ( m_pCamera, "FileAccessLength" );
-        VimbaFeatureEnum    FileOperationStatus     ( m_pCamera, "FileOperationStatus" );
-
-        VimbaFeatureInt     FileOperationResult     ( m_pCamera, "FileOperationResult" );
-        VimbaFeatureEnum    FileStatus              ( m_pCamera, "FileStatus" );
-        VimbaFeatureInt     FileSize                ( m_pCamera, "FileSize" );
-        VimbaFeatureEnum    FileSelector            ( m_pCamera, "FileSelector" );
-        VimbaFeatureEnum    LUTSelector             ( m_pCamera, "LUTSelector" );
-
-        FileSelector.SetStringValue( std::string( "LUT" )+LUTSelector.GetStringValue() );
-        if( FileOpenMode.IsAvailable( "Write" ) )
-        {
-            FileOpenMode.SetStringValue( "Write" );
-            FileOperationSelector.SetStringValue( "Open" );
-            FileOperationExecute.Run();
-            VmbInt64_t  nFileSize = FileSize( );
-            if( m_data.size() != nFileSize )
-            {
-                throw Exception( __FUNCTION__,"LUT to upload does not seam to have the correct size for this camera",VmbErrorBadParameter );
-            }
-            //File access length
-            VmbInt64_t  nMaxFileAccessLength = FileAccessLength.Max( );
-            FileOperationSelector.SetStringValue( "Write" );
-
-            VmbInt64_t  nFileAccessOffset = 0;
-            VmbInt64_t  nFileAccessLength = min( nFileSize, nMaxFileAccessLength );
-            UcharVector data( (size_t)nFileAccessLength );
-            do
-            {
-                //Set FileAccessLength
-                FileAccessLength( nFileAccessLength );
-                //Fill buffer
-                copy( &m_data[(size_t)nFileAccessOffset ], &m_data[(size_t)( nFileAccessLength+nFileAccessOffset-1 ) ], data.begin() );
-                data = ConvertToNetworkInt16( data );
-                FileAccessBuffer( data );
-                //Execute file operation
-                FileOperationExecute.Run( );
-                //Get file operation status
-                if( FileOperationStatus.GetStringValue() != "Success" )
-                {
-                    throw Exception( __FUNCTION__,"writing data failed",VmbErrorOther );
-                }
-                nFileAccessOffset =FileAccessOffset();
-
-                nFileAccessLength = min( nFileSize - nFileAccessOffset, nMaxFileAccessLength );
-            }
-            while( nFileSize != nFileAccessOffset );
-            FileOperationSelector.SetStringValue( "Close" );
-            FileOperationExecute.Run();
-            //Get file operation status
-            if( FileOperationStatus.GetStringValue() != "Success" )
-            {
-                throw Exception( __FUNCTION__,"could not close file", VmbErrorOther );
-            }
-        }
-    }
-    else if( VmbBoolTrue == VimbaFeature::HasFeature( m_pCamera,"LUTIndex" ) )
-    {
-        //Get LUT address for GigE (indicator for direct memory access)
-        VimbaFeatureInt     LUTAddress( m_pCamera, "LUTAddress" );                      //< get feature for lut address
-        VmbUint32_t         nCompletedWrites = 0;
-        UcharVector         network_data( ConvertToNetworkInt16( m_data ) );            //< expect our camera to be big endian device, so if we are intel little endian we have to swap
-        m_pCamera->WriteMemory( LUTAddress() , network_data, nCompletedWrites );        //< write data direct to camera
-    }
-    //Camera doesn't support direct memory access for LUT
-    else
-    {
-        //Used LUT index and value as indicator for GigE
-        VimbaFeatureInt     LUTIndex( m_pCamera, "LUTIndex" );                          //< get lUT index feature to set current index
-        VimbaFeatureInt     LUTValue( m_pCamera, "LUTValue" );                          //< get LUT value feature to set current value
-        VimbaFeatureInt     LUTSize ( m_pCamera, "LUTSizeBytes");                       //< get feature for size of LUT in bytes
-        if( m_data.size() != LUTSize() )                                                //< compare data size to LUT size 
-        {
-            throw Exception( __FUNCTION__,"data size is not equal lut size, they are incompatible",VmbErrorBadParameter );
-        }
-        //Evaluate number of LUT entries
-        VmbInt64_t          nLUTBytePerValue  = ( GetBitDepthOut() > 8 ) ? 2 : 1;       //< determine if LUT values take one or two bytes
-        VmbInt64_t          nLUTEntries       = LUTSize() / nLUTBytePerValue;           //< calculate lement count, LUT values are unpadded and consecutive in memory
-        //Set LUT values by iteration over indexes
-        int                 iter( 0 );
-        VmbInt64_t          nValue( 0 );
-        for( VmbInt64_t i = 0; i < nLUTEntries ; i++ )
-        {
-            LUTIndex( i );                                          //< set current index
-            switch( nLUTBytePerValue )
-            {
-            case 1:
-                nValue = m_data[iter++];                            //< copy 8bit value
-                break;
-
-            case 2:
-                {
-                    VmbUint16_t* p = (VmbUint16_t*)(&m_data[iter]); //< interpret data as host byte order uint 16
-                    nValue = *p;
-                    iter +=2;
-                }
-            }
-            LUTValue( nValue );                                     //< write data to camera
-        }
-    }
-}
-
-//Load look up table from Csv
-void LookUpTableControl::LoadFromCsv( const std::string &FileName, int nIndex )
-{
-
-    //Evaluate size of LUT
-    VmbInt64_t                  nLUTBitDepthOut     = GetBitDepthOut( );            //< get output bit depth of LUT
-    VmbInt64_t                  nLUTBytePerValue    = nLUTBitDepthOut > 8 ? 2 : 1;  //< determine if LUT values take one or two byte
-    // Load LUT from CSV
-    CsvLoad                     load( FileName );                                   //< import the LUT from CSV file
-    std::vector<std::string>    row;
-    while( load.Row( row ) )                                                        //< load rows until none left
-    {
-        if( row.size() <= ( size_t )nIndex )                                        //< test if index in range
-        {
-            throw Exception( __FUNCTION__,"index for the csv file is out of bounds",VmbErrorBadParameter );
-        }
-
-        int                 nData;                                                  //< coonvert string to int
-        std::stringstream   ss( row[nIndex] );
-        ss >> nData;
-
-        char                data[2];                                               //< pack data for storage
-        if( 2 == nLUTBytePerValue )
-        {
-            VmbUint16_t *p = ( VmbUint16_t* )( data );
-            *p = static_cast<VmbUint16_t>( nData );
-        }
-        else
-        {
-            data[0] = static_cast<VmbUint8_t>( nData&0xFF );
-        }
-
-        copy( data, data + nLUTBytePerValue, std::back_inserter( m_data ) ); //< append data to internal storage
-    }
-}
-
-//Save look up table to CSV
-void LookUpTableControl::SaveToCsv( const std::string &FileName )
-{
-
-    //Raw data empty
-    if( m_data.empty() )
-    {
-        throw Exception( __FUNCTION__,"no data to write to csv file", VmbErrorOther );
-    }
-
-    //Evaluate size of LUT
-    VimbaFeatureInt    LUTSize( m_pCamera, "LUTSizeBytes" );                //< get feature for LUT size in bytes
-
-    VmbInt64_t          nLUTBitDepthOut     = GetBitDepthOut( );            //< get output bit depth of LUT
-    VmbInt64_t          nLUTBytePerValue    = nLUTBitDepthOut > 8 ? 2 : 1;  //< determine if LUT values take one or two bytes
-    VmbInt64_t          nLUTEntries         = LUTSize()/nLUTBytePerValue;   //< calculate LUT element count, LUT values are unpadded and consecutive
-    if( m_data.size() != LUTSize() )                                        //< if lut size and data size miss match they are not compatible
-    {
-        throw Exception( __FUNCTION__,"data does not equal the current cameras LUT",VmbErrorBadParameter );
-    }
-    // Save LUT data to CSV
-
-    CsvSave save( FileName );                                           //< create CSV file
-    {
-        for( int i = 0; i < nLUTEntries; i++ )                          //< for each LUT value
-        {
-            int data ;                                                  //< unpack data to int
-            if( 2 == nLUTBytePerValue )
-            {
-                data = *( ( VmbUint16_t* )( &m_data[i*2] ) );
-            }
-            else
-            {
-                data = m_data[i];
-            }
-            stringstream ss;                                            //< stream int to string
-            ss << data;
-            save.Row( ss.str() );                                       //< write a csv row
-        }
-    }
-}
-
-//Load look up table from flash
-void LookUpTableControl::LoadFromFlash()
-{
-    VimbaFeatureCommand LUTLoad = CreateOneOf<VimbaFeatureCommand>( m_pCamera, "LUTLoad", "LUTLoadAll" ); // there are two possible names for this feature
-    LUTLoad.Run();
-}
-
-//Save look up table to flash
-void LookUpTableControl::SaveToFlash()
-{
-    VimbaFeatureCommand LUTSave = CreateOneOf<VimbaFeatureCommand>( m_pCamera, "LUTSave", "LUTSaveAll" ); //< there are two possible names for this feature
-    LUTSave.Run();
-}
-
-}}} // namespace AVT::VmbAPI::Examples
-
diff --git a/VimbaCPP/Examples/LookUpTable/Source/LookUpTable.h b/VimbaCPP/Examples/LookUpTable/Source/LookUpTable.h
deleted file mode 100644
index 610cfbbad0c7ad0c751a786e29a12921fb3f8e5b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/LookUpTable/Source/LookUpTable.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        LookUpTable.h
-
-  Description: The LookUpTable example will demonstrate how to use
-               the look up table feature of the camera using VimbaCPP.
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_LOOKUPTABLE
-#define AVT_VMBAPI_EXAMPLES_LOOKUPTABLE
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class LookUpTableControl
-{
-private:
-    CameraPtr       m_pCamera;
-    VmbInt64_t      m_nIndex;
-    UcharVector     m_data;
-
-public:
-    //ctor
-    LookUpTableControl( CameraPtr pCamera, VmbInt64_t nIndex );
-
-    //Enable
-    void Enable( VmbBool_t bEnable );
-
-    //Is enabled
-    VmbBool_t IsEnabled() const;
-
-    //Get index
-    VmbInt64_t GetIndex( ) const;
-
-    //Get value count
-    VmbInt64_t GetValueCount( ) const;
-
-    //Get Value
-    VmbInt64_t GetValue( ) const;
-
-    //Set Value
-    void SetValue( VmbInt64_t nValue );
-
-    //Get bit depth in
-    VmbInt64_t GetBitDepthIn( ) const;
-
-    //Get bit depth out
-    VmbInt64_t GetBitDepthOut( ) const;
-
-    //Download look up table from internal memory into the camera
-    void Download();
-
-    //Upload the selected look up table into internal memory of the camera
-    void Upload();
-
-
-    //Load from Csv
-    void LoadFromCsv( const std::string &FileName, int nIndex );
-
-    //Save to Csv
-    void SaveToCsv( const std::string &FileName );
-
-    //Load from flash
-    void LoadFromFlash();
-
-    //Save to flash
-    void SaveToFlash();
-};
-
-class LookUpTableCollection
-{
-private:
-    CameraPtr                        m_pCamera;
-    std::vector<LookUpTableControl>  m_tables;
-
-public:
-    //ctor
-    LookUpTableCollection( CameraPtr pCamera );
-    
-    // test for Lookup table support
-    static bool HasLookUpTable( CameraPtr pCamera);
-    
-    //Get count
-    VmbInt64_t GetCount( );
-
-    // Get control
-    LookUpTableControl GetControl( VmbInt64_t nIndex );
-
-    //Get active index
-    VmbInt64_t GetActiveIndex( );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/LookUpTable/Source/VimbaFeatures.h b/VimbaCPP/Examples/LookUpTable/Source/VimbaFeatures.h
deleted file mode 100644
index 10f3d053a3ec33b356e10753a4e2f7f445eb9702..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/LookUpTable/Source/VimbaFeatures.h
+++ /dev/null
@@ -1,849 +0,0 @@
-#ifndef AVT_VIMBA_FEATURES_H_
-#define AVT_VIMBA_FEATURES_H_
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        VimbaFeatures.h
-
-  Description: Helper for features.
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-#include <string>
-#include <vector>
-
-#include "Exception.h"
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT{
-namespace VmbAPI{
-namespace Examples{
-
-    using AVT::VmbAPI::StringVector;
-    //
-    // basic feature.
-    //
-    class VimbaFeature
-    {
-        FeaturePtr  m_Feature;
-    public:
-                
-        //
-        // Method: VimbaFeature
-        //
-        // Purpose: constructor from feature pointer.
-        //
-        // Parameters:
-        //
-        // [in] feature  feature to wrap
-        //
-        VimbaFeature(const FeaturePtr &feature)
-            : m_Feature( feature )
-        { }
-        //
-        // Method: VimbaFeature
-        //
-        // Purpose: constructor from camera and feature name.
-        //
-        // Parameters:
-        //
-        // [in] cam    camera to get feature from
-        // [in] name   name of the feature
-        //
-        VimbaFeature(const CameraPtr &cam, const std::string &name)
-        {
-            if( cam.get() == NULL )
-            {
-                throw Exception( __FUNCTION__,"camera pointer is null",VmbErrorBadParameter);
-            }
-            VmbErrorType Result = cam->GetFeatureByName( name.c_str() , m_Feature);
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(  __FUNCTION__,std::string("could not get vimba feature :")+name, Result);
-            }
-        }
-        //
-        // Method: GetType
-        // 
-        // Purpose: get feature data type.
-        //
-        VmbFeatureDataType GetType() const
-        {
-            VmbFeatureDataType DataType;
-            VmbErrorType Result = m_Feature->GetDataType( DataType);
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception( __FUNCTION__, "could not get feature data type", Result);
-            }
-            return DataType;
-        }
-        //
-        // Method: HasFeature
-        //
-        // Purpose: static test if a feature is implemented.
-        //
-        // Parameters:
-        //
-        // [in] cam        camera to ask
-        // param[in] name       feature name
-        //
-        static VmbBool_t HasFeature( const CameraPtr &cam, const std::string &name)
-        {
-            if( cam.get() == NULL )
-            {
-                throw Exception( __FUNCTION__,"camera pointer is null",VmbErrorBadParameter);
-            }
-            FeaturePtr dummy;
-            VmbErrorType Result = cam->GetFeatureByName(name.c_str(), dummy);
-            if( VmbErrorSuccess != Result)
-            {
-                if( VmbErrorNotFound == Result)
-                {
-                    return VmbBoolFalse;
-                }
-                throw Exception(__FUNCTION__,"could not get feature",Result);
-            }
-            return VmbBoolTrue;
-        }
-        //
-        // Method: operator() const
-        // 
-        // Purpose : get the const feature pointer.
-        //
-        const FeaturePtr&       operator()()    const   { return m_Feature;    }
-        //
-        // Method: operator()
-        //
-        // Purpose:get the feature pointer.
-        //
-        FeaturePtr&             operator()()            { return m_Feature;    }
-    };
-    //
-    // integer feature
-    //
-    class VimbaFeatureInt
-    {
-        VimbaFeature m_Feature;
-    public:
-        //
-        // Method: VimbaFeatureInt
-        //
-        // Purpose: constructor from feature pointer.
-        // [in] feature feature pointer
-        //
-        VimbaFeatureInt(const FeaturePtr &feature)
-            : m_Feature( feature)
-        {  
-            if( VmbFeatureDataInt != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Method: VimbaFeatureInt
-        //
-        // Purpose: constructor from camera and feature name.
-        //
-        // Parameters:
-        //
-        // [in] cam        camera to get feature from
-        // [in] name       feature name
-        //
-        VimbaFeatureInt(const CameraPtr &cam, const std::string &name)
-            : m_Feature( cam, name)
-        {  
-            if( VmbFeatureDataInt != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Method: operator() const
-        //
-        // Purpose: get feature int value.
-        //
-        VmbInt64_t operator()() const
-        {
-            VmbInt64_t      Value;
-            VmbErrorType    Result = m_Feature()->GetValue( Value );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not get value for feature", Result);
-            }
-            return Value;
-        }
-        //
-        // Method: operator( VmbInt64_t)
-        //
-        // Purpose: set feature int value.
-        //
-        // Parameters:
-        //
-        // [in] Value  value to set
-        //
-        void operator()( VmbInt64_t Value)
-        {
-            VmbErrorType Result = m_Feature()->SetValue( Value );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not set feature value", Result);
-            }
-        }
-        //
-        // Method: Min
-        //
-        // Purpose: get feature minimum value.
-        //
-        VmbInt64_t Min() const
-        {
-            VmbInt64_t MinValue,MaxValue;
-            VmbErrorType Result = m_Feature()->GetRange(MinValue,MaxValue);
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not get integer feature range",Result);
-            }
-            return MinValue;
-        }
-        //
-        // Method: Max
-        //
-        // Purpose: get feature maximum value.
-        //
-        VmbInt64_t Max() const
-        {
-            VmbInt64_t MinValue,MaxValue;
-            VmbErrorType Result = m_Feature()->GetRange(MinValue,MaxValue);
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not get integer feature range",Result);
-            }
-            return MaxValue;
-        }
-        //
-        // Method: Increment()
-        //
-        // Purpose: get the increment to advance an integer feature
-        // Value = Min() + n * Increment() <= Max()
-        //
-        VmbInt64_t Increment() const
-        {
-            VmbInt64_t IncValue;
-            VmbErrorType Result = m_Feature()->GetIncrement( IncValue );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not get integer feature increment",Result);
-            }
-            return IncValue;
-        }
-    };
-    //
-    // Vimba bool feature.
-    //
-    class VimbaFeatureBool
-    {
-        VimbaFeature m_Feature;
-    public:
-        //
-        // Method: VimbaFeatureBool
-        //
-        // Purpose:constructor from feature pointer.
-        //
-        // Parameters:
-        //
-        // [in] feature    feature pointer
-        //
-        VimbaFeatureBool(const FeaturePtr &feature)
-            : m_Feature( feature )
-        {
-            if( VmbFeatureDataBool != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Method: VimbaFeatureBool
-        //
-        // Purpose: constructor from camera and feature name.
-        //
-        // Parameters:
-        //
-        // [in] cam        camera to get feature from
-        // [in] name       name of the feature
-        //
-        VimbaFeatureBool(const CameraPtr &cam, const std::string &name)
-            : m_Feature( cam, name)
-        {
-            if( VmbFeatureDataBool != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Method: operator() const
-        //
-        // Purpose: get feature bool value.
-        //
-        VmbBool_t operator()() const
-        {
-            VmbBool_t       Value;
-            VmbErrorType    Result = m_Feature()->GetValue( Value );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not get value for feature", Result);
-            }
-            return Value;
-        }
-        //
-        // Method: operator()
-        //
-        // Purpose: set feature bool value.
-        //
-        void operator()( VmbBool_t Value)
-        {
-            VmbErrorType Result = m_Feature()->SetValue( Value );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not set feature value", Result);
-            }
-        }
-    };
-    //
-    // Vimba float feature
-    //
-    class VimbaFeatureFloat
-    {
-        VimbaFeature m_Feature;
-    public:
-        //
-        // Method: VimbaFeatureFloat
-        //
-        // Purpose:constructor from feature pointer.
-        //
-        // Parameters:
-        //
-        // [in] feature    feature pointer
-        //
-        VimbaFeatureFloat(const FeaturePtr &feature)
-            : m_Feature( feature )
-        {
-            if( VmbFeatureDataFloat != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Method: VimbaFeatureFloat
-        //
-        // Purpose: constructor from camera and feature name.
-        //
-        // Parameters:
-        //
-        // [in] cam        camera to get feature from
-        // [in] name       name of the feature
-        //
-        VimbaFeatureFloat(const CameraPtr &cam, const std::string &name)
-            : m_Feature( cam, name)
-        {
-            if( VmbFeatureDataFloat != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Method: operator() const
-        //
-        // Purpose: get feature float value.
-        //
-        double operator()() const
-        {
-            double          Value;
-            VmbErrorType    Result = m_Feature()->GetValue( Value );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not get value for feature", Result);
-            }
-            return Value;
-        }
-        //
-        // Method: operator()
-        //
-        // Purpose: set feature float value.
-        //
-        void operator()( double Value)
-        {
-            VmbErrorType Result = m_Feature()->SetValue( Value );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not set feature value", Result);
-            }
-        }
-        double Min() const
-        {
-            double MinValue, MaxValue;
-            VmbErrorType Result = m_Feature()->GetRange( MinValue, MaxValue );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception( __FUNCTION__,"could not get range for float feature", Result );
-            }
-            return MinValue;
-        }
-        double Max() const
-        {
-            double          MinValue, MaxValue;
-            VmbErrorType    Result = m_Feature()->GetRange( MinValue, MaxValue );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception( __FUNCTION__,"could not get range for float feature", Result );
-            }
-            return MaxValue;
-        }
-    };
-    //
-    // feature enum.
-    //
-    class VimbaFeatureEnum
-    {
-        VimbaFeature    m_Feature;
-    public:
-        //
-        // Method: VimbaFeatureEnum()
-        //
-        // Purpose: constructor from feature pointer.
-        //
-        // Parameters:
-        //
-        // [in] feature    feature pointer
-        //
-        VimbaFeatureEnum(const FeaturePtr &feature)
-            : m_Feature( feature )
-        {
-            if( VmbFeatureDataEnum != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Method: VimbaFeatureEnum
-        //
-        // Purpose: constructor from camera and feature name.
-        //
-        // Parameters:
-        //
-        // [in] cam        camera to get feature from
-        // [in] name       feature name
-        //
-        VimbaFeatureEnum(const CameraPtr &cam, const std::string &name)
-            : m_Feature( cam, name )
-        {
-            if( VmbFeatureDataEnum != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Methods: GetValues
-        //
-        // Purpose:get all supported feature value strings.
-        //
-        AVT::VmbAPI::StringVector GetValues() const
-        {
-            StringVector Values;
-            VmbErrorType Result = m_Feature()->GetValues( Values );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception( __FUNCTION__,"could not get values",Result);
-            }
-            return Values;
-        }
-        //
-        // Method: GetEntries
-        //
-        // Purpose: get enum entries
-        //
-        EnumEntryVector GetEntries( ) const
-        {
-            EnumEntryVector Values;
-            VmbErrorType    Result = m_Feature()->GetEntries( Values) ;
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception( __FUNCTION__, "could not get entry values for enum feature", Result);
-            }
-            return Values;
-        }
-        //
-        // Method: ValueCount
-        //
-        // Purpose: get number of supported feature values.
-        //
-        VmbInt64_t ValueCount() const
-        {
-            return static_cast< VmbInt64_t>( GetValues().size() );
-        }
-        //
-        // Method: IsAvailable
-        //
-        // Purpose: test if string value is currently available.
-        //
-        // Parameters:
-        //
-        // [in] Value  string value to test
-        //
-        VmbBool_t IsAvailable( const std::string &Value)
-        {
-            VmbBool_t       Available;
-            VmbErrorType    Result = m_Feature()->IsValueAvailable( Value.c_str(), Available );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not read enums available flag",Result);
-            }
-            return Available;
-        }
-        //
-        // Method: IsAvailable
-        //
-        // Purpose: test if integer feature value is available.
-        //
-        // Parameters:
-        //
-        // [in] Value  integer feature value to test
-        //
-        VmbBool_t IsAvailable( VmbInt64_t Value)
-        {
-            VmbBool_t       Available;
-            VmbErrorType    Result = m_Feature()->IsValueAvailable( Value, Available );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not read enums available flag",Result);
-            }
-            return Available;
-        }
-        // 
-        // Method: GetStringValue
-        //
-        // Purpose:get current feature value as string.
-        //
-        std::string GetStringValue() const
-        {
-            std::string     Value;
-            VmbErrorType    Result = m_Feature()->GetValue( Value );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not get string value", Result);
-            }
-            return Value;
-        }
-        //
-        // Method: SetStringValue
-        //
-        // Purpose: set new feature value from string.
-        //
-        // Parameters:
-        //
-        // [in] Value  string value to set
-        //
-        void SetStringValue( const std::string &Value)
-        {
-            VmbErrorType Result = m_Feature()->SetValue( Value.c_str() );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not set string value",Result);
-            }
-        }
-        //
-        // Method: GetEntry
-        //
-        // Purpose: get current enum value as EnumEntry
-        //
-        EnumEntry GetEntry() const
-        {
-            EnumEntry       Value;
-            VmbErrorType    Result = m_Feature()->GetEntry( Value, GetStringValue().c_str() );
-            if( VmbErrorSuccess != Result )
-            {
-                throw Exception( __FUNCTION__,"could not get enum feature entry", Result);
-            }
-            return Value;
-        }
-        //
-        // Method: operator() const
-        //
-        // Purpose: get current integer value.
-        //
-        VmbInt64_t operator()() const
-        {
-            VmbInt64_t      Value;
-            VmbErrorType    Result = m_Feature()->GetValue( Value );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not get value for feature", Result);
-            }
-            return Value;
-        }
-        //
-        // Method: operator()
-        //
-        // Purpose: set new integer value.
-        //
-        // Parameters:
-        //
-        // [in] Value  new value to set
-        //
-        void operator()( VmbInt64_t Value)
-        {
-            VmbErrorType Result = m_Feature()->SetValue( Value );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not set feature value", Result);
-            }
-        }
-    };
-
-    //
-    // Vimba string feature
-    class VimbaFeatureString
-    {
-        VimbaFeature m_Feature;
-    public:
-        VimbaFeatureString( const FeaturePtr & feature)
-            : m_Feature( feature )
-        {
-            if( VmbFeatureDataString != m_Feature.GetType() )
-            {
-                throw Exception( __FUNCTION__,"wrong feature data type", VmbErrorWrongType );
-            }
-        }
-        VimbaFeatureString( const CameraPtr & cam, const std::string &name)
-            :m_Feature( cam, name )
-        {
-            if( VmbFeatureDataString != m_Feature.GetType() )
-            {
-                throw Exception( __FUNCTION__,"wrong feature data type", VmbErrorWrongType );
-            }
-        }
-        std::string operator()() const
-        {
-            std::string     Value;
-            VmbErrorType    Result = m_Feature()->GetValue( Value );
-            if( VmbErrorSuccess != Result )
-            {
-                throw Exception( __FUNCTION__,"could not get value for string feature", Result);
-            }
-            return Value;
-        }
-        void operator()( const std::string & value)
-        {
-            VmbErrorType Result = m_Feature()->SetValue( value.c_str() );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception( __FUNCTION__,"could not set string feature value" , Result );
-            }
-        }
-    };
-    //
-    // feature command
-    //
-    class VimbaFeatureCommand
-    {
-        VimbaFeature m_Feature;
-    public:
-        //
-        // Method: VimbaFeatureCommand
-        //
-        // Purpose: constructor from feature pointer.
-        //
-        // Parameters:
-        //
-        // [in] feature    feature pointer to use
-        //
-        VimbaFeatureCommand( const FeaturePtr &feature)
-            :m_Feature( feature )
-        {
-            if( VmbFeatureDataCommand != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Method: VimbaFeatureCommand
-        //
-        // Purpose: constructor from camera and feature name.
-        // 
-        // Parameters:
-        //
-        // [in] cam        camera to get feature from
-        // [in] name       name of the feature
-        //
-        VimbaFeatureCommand( const CameraPtr &cam, const std::string &name)
-            :m_Feature( cam, name)
-        {
-            if( VmbFeatureDataCommand != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Method: Run
-        //
-        // Purpose: run command.
-        //
-        void Run()
-        {
-            VmbErrorType Result = m_Feature()->RunCommand();
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not run feature command",Result);
-            }
-        }
-        //
-        // Method: IsDone
-        //
-        // Purpose:test if command has finished.
-        //
-        VmbBool_t IsDone() const
-        {
-            VmbBool_t Value;
-            VmbErrorType Result = m_Feature()->IsCommandDone( Value);
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not get is done state of feature command",Result);
-            }
-            return Value;
-        }
-    };
-    //
-    // raw buffer feature.
-    //
-    class VimbaFeatureRaw
-    {
-        VimbaFeature m_Feature;
-    public:
-        //
-        // Method: VimbaFeatureRaw
-        //
-        // Purpose: constructor from feature pointer.
-        //
-        // Parameters:
-        //
-        // [in] feature    feature pointer to use
-        //
-        VimbaFeatureRaw( const FeaturePtr &feature)
-            :m_Feature( feature )
-        {
-            if( VmbFeatureDataRaw != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Method: VimbaFeatureRaw
-        //
-        // Purpose: constructor from camera and feature name.
-        //
-        // Parameters:
-        //
-        // [in] cam        camera to get feature from
-        // [in] name       feature name
-        //
-        VimbaFeatureRaw( const CameraPtr &cam, const std::string &name)
-            :m_Feature( cam, name)
-        {
-            if( VmbFeatureDataRaw != m_Feature.GetType() )
-            {
-                throw Exception(__FUNCTION__,"wrong feature data type", VmbErrorWrongType);
-            }
-        }
-        //
-        // Method: GetBuffer
-        //
-        // Purpose: get raw buffer, reuses supplied data vector .
-        //
-        // Parameters:
-        //
-        // [out] data      returns read data
-        //
-        void GetBuffer( UcharVector &data) const
-        {
-            VmbErrorType Result = m_Feature()->GetValue( data );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not read raw data feature",Result);
-            }
-        }
-        //
-        // Method: operator() const
-        //
-        // Purpose: get raw data buffer.
-        //
-        UcharVector operator()() const
-        {
-            UcharVector     Data;
-            VmbErrorType    Result = m_Feature()->GetValue( Data );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not read raw data feature",Result);
-            }
-            return Data;
-        }
-        //
-        // Method: operator( UcharVector )
-        //
-        // Purpose: set raw data buffer.
-        //
-        // Parameters:
-        //
-        // [in] data   data to set
-        //
-        void operator()( const UcharVector & Data)
-        {
-            VmbErrorType Result =m_Feature()->SetValue( Data );
-            if( VmbErrorSuccess != Result)
-            {
-                throw Exception(__FUNCTION__,"could not set raw feature data",Result);
-            }
-        }
-    };
-    //
-    // Method: CreateOneOf
-    //
-    // Purpose: create a feature from two possible names.
-    // Parameters:
-    //
-    // [in] cam        camera to get feature from
-    // [in] name_one   first name to try
-    // [in] name_two   second name to try
-    //
-    template <typename FEATURE_TYPE>
-    FEATURE_TYPE CreateOneOf(const CameraPtr &cam, const std::string& name_one, const std::string &name_two)
-    {
-        FeaturePtr feature;
-        VmbErrorType Result = cam->GetFeatureByName( name_one.c_str(), feature);
-        if( VmbErrorSuccess != Result)
-        {
-            if( VmbErrorNotFound == Result)
-            {
-                return FEATURE_TYPE( cam, name_two);
-            }
-            throw Exception(__FUNCTION__,"could not generate feature",Result);
-        }
-        return FEATURE_TYPE(feature);
-    }
-}}}
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/LookUpTable/Source/program.cpp b/VimbaCPP/Examples/LookUpTable/Source/program.cpp
deleted file mode 100644
index 1acd14ada60338d11f182a53ab5bcb75cfada69d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/LookUpTable/Source/program.cpp
+++ /dev/null
@@ -1,639 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of LookUpTable example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-#include <cstring>
-#include <stdlib.h>
-
-#include "LookUpTable.h"
-#include "Exception.h"
-
-#include "Common/StreamSystemInfo.h"
-
-using namespace std;
-
-enum Mode
-{
-    ModeUnknown         = 0,
-    ModeSave            = 1,
-    ModeLoad            = 2,
-    ModeSaveCSV         = 3,
-    ModeLoadCSV         = 4,
-    ModeEnable          = 7,
-    ModeIsEnabled       = 8,
-    ModeSetValue        = 9,
-    ModeGetValue        = 10,
-    ModeBitIn           = 11,
-    ModeBitOut          = 12,
-    ModeCount           = 13
-};
-
-bool StartsWith( const char *pString, const char *pStart )
-{
-    if( NULL == pString )
-    {
-        return false;
-    }
-    if( NULL == pStart )
-    {
-        return false;
-    }
-
-    if( std::strlen( pString ) < std::strlen( pStart ) )
-    {
-        return false;
-    }
-
-    if( std::memcmp( pString, pStart, std::strlen( pStart ) ) != 0 )
-    {
-        return false;
-    }
-
-    return true;
-}
-
-int main( int argc, char* argv[] )
-{
-    cout << "///////////////////////////////////////\n";
-    cout << "/// Vimba API Look Up Table Example ///\n";
-    cout << "///////////////////////////////////////\n\n";
-
-    VmbErrorType err = VmbErrorSuccess;
-
-    string      cameraID;
-    string      fileName;
-    string      controlIndex;
-    bool        bValue          = false;
-    VmbInt64_t  nValue          = 0;
-    string      parameter;
-    Mode        eMode           = ModeUnknown;
-    bool        printHelp       = false;
-
-    //////////////////////
-    //Parse command line//
-    //////////////////////
-
-    for( int i = 1; i < argc; i++ )
-    {
-        char *pParameter = argv[i];
-        if( std::strlen( pParameter ) < 0 )
-        {
-            err = VmbErrorBadParameter;
-            break;
-        }
-
-        if( pParameter[0] == '/' )
-        {
-            if( std::strcmp( pParameter, "/s" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeSave;
-            }
-            else if( std::strcmp( pParameter, "/l" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeLoad;
-            }
-            else if( std::strcmp( pParameter, "/sc" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeSaveCSV;
-            }
-            else if( StartsWith( pParameter, "/lc:" ) )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                if( parameter.empty() == false )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                parameter = pParameter + 4;
-                if( parameter.size() <= 0 )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                nValue = atoi( parameter.c_str() );
-
-                eMode = ModeLoadCSV;
-            }
-            else if( StartsWith( pParameter, "/lc" ) )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                if( parameter.empty() == false )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                nValue =  0;
-                eMode = ModeLoadCSV;
-            }
-            else if( std::strcmp( pParameter, "/bi" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeBitIn;
-            }
-            else if( std::strcmp( pParameter, "/bo" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeBitOut;
-            }
-            else if( std::strcmp( pParameter, "/n" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeCount;
-            }
-            else if( StartsWith( pParameter, "/e:" ) )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                if( parameter.empty() == false )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                parameter = pParameter + 3;
-                if( parameter.size() <= 0 )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                if( std::strcmp( parameter.c_str(), "on" ) == 0 )
-                {
-                    bValue = true;
-                }
-                else if( std::strcmp( parameter.c_str(), "off" ) == 0 )
-                {
-                    bValue = false;
-                }
-                else
-                {
-                    cout << "Could not set look up table enable. Wrong parameter!\n";
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-                eMode = ModeEnable;
-            }
-            else if( std::strcmp( pParameter, "/e" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeIsEnabled;
-            }
-            else if( StartsWith( pParameter, "/v:" ) )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                if( parameter.empty() == false )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                parameter = pParameter + 3;
-                if( parameter.size() <= 0 )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                nValue = atoi( parameter.c_str() );
-
-                eMode = ModeSetValue;
-            }
-            else if( std::strcmp( pParameter, "/v" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeGetValue;
-            }
-            else if( StartsWith( pParameter, "/f:" ) )
-            {
-                if( (ModeUnknown != eMode) &&
-                    (ModeSaveCSV != eMode) &&
-                    (ModeLoadCSV != eMode) )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                if( fileName.empty() == false )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                fileName = pParameter + 3;
-                if( fileName.size() <= 0 )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-            }
-            else if( StartsWith( pParameter, "/i:" ) )
-            {
-                if( controlIndex.empty() == false )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                controlIndex = pParameter + 3;
-                if( controlIndex.size() <= 0 )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-            }
-            else if( std::strcmp( pParameter, "/h" ) == 0 )
-            {
-                if(     (cameraID.empty() == false)
-                    ||  (ModeUnknown != eMode)
-                    ||  (true == printHelp))
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                printHelp = true;
-            }
-            else
-            {
-                err = VmbErrorBadParameter;
-                break;
-            }
-        }
-        else
-        {
-            if( cameraID.empty() == false )
-            {
-                err = VmbErrorBadParameter;
-                break;
-            }
-
-            cameraID = pParameter;
-        }
-    }
-
-    //Write out an error if we could not parse the command line
-    if( VmbErrorBadParameter == err )
-    {
-        cout << "Invalid parameters!\n\n";
-        printHelp = true;
-    }
-
-    //Print out help and end program
-    if( true == printHelp )
-    {
-        cout << "Usage: LookUpTable [CameraID] [/i:Index] [/h] [/{s|l|sc|lc:Column|u|d|v(:Value)|e(:Enable)|bi|bo|n}] [/f:FileName]\n";
-        cout << "Parameters:   CameraID       ID of the camera to use\n";
-        cout << "                             (using first camera if not specified)\n";
-        cout << "              /i:Index       Set look up table index\n";
-        cout << "              /h             Print out help\n";
-        cout << "              /s             Save look up table to flash\n";
-        cout << "              /l             Load look up table from flash\n";
-        cout << "              /sc            Save look up table to Csv\n";
-        cout << "                             (Look up table previously downloaded)\n";
-        cout << "              /lc:Column     Load look up table from Csv using specified column\n";
-        cout << "                             (default if not specified)\n";
-        cout << "              /e:Enable      Set look up table enable [on/off]\n";
-        cout << "              /e             Get look up table enable\n";
-        cout << "                             (default if not specified)\n";
-        cout << "              /v:Value       Set look up table value\n";
-        cout << "              /v             Get look up table value\n";
-        cout << "              /bi            Get look up table bit depth in\n";
-        cout << "              /bo            Get look up table bit depth out\n";
-        cout << "              /n             Get look up table count\n";
-        cout << "              /f:FileName    File name for operation\n\n";
-        cout << "For example to load a look up table from the csv file C:\\lut.csv and\n"
-             << "write it to the camera's flash as LUT1 call\n\n";
-        cout << "LookUpTable /i:0 /lc:0 /f:\"C:\\lut.csv\"\n\n";
-        cout << "To load the look up table LUT2 from the camera and write it\n"
-             << "to the csv file C:\\lut.csv call\n\n";
-        cout << "LookUpTable /i:1 /sc /f:\"C:\\lut.csv\"\n\n";
-
-        return err;
-    }
-
-    bool                        bVimbaStarted   = false;
-    AVT::VmbAPI::CameraPtr      pCamera;
-    AVT::VmbAPI::VimbaSystem&   vimbaSystem     = AVT::VmbAPI::VimbaSystem::GetInstance();
-
-    try
-    {
-        // Print out version of Vimba
-        std::cout<<"Vimba C++ API Version "<<vimbaSystem<<"\n";
-
-        //Startup API
-        if( VmbErrorSuccess == err )
-        {
-            err = vimbaSystem.Startup();
-            if( VmbErrorSuccess != err )
-            {
-                throw AVT::VmbAPI::Examples::Exception( "Could not start system.", err );
-            }
-            bVimbaStarted = true;
-        }
-
-        //Open camera
-        if( VmbErrorSuccess == err )
-        {
-            if( cameraID.empty() )
-            {
-                //Open first available camera
-
-                //Fetch all cameras known to Vimba
-                AVT::VmbAPI::CameraPtrVector cameras;
-                err = vimbaSystem.GetCameras( cameras );
-                if( VmbErrorSuccess == err )
-                {
-                    if( cameras.size() > 0 )
-                    {
-                        for( AVT::VmbAPI::CameraPtrVector::const_iterator iter = cameras.begin();
-                                cameras.end() != iter;
-                                ++iter )
-                        {
-                            //Check if we can open the camera in full mode
-                            VmbAccessModeType eAccessMode = VmbAccessModeNone;
-                            err = (*iter)->GetPermittedAccess( eAccessMode );
-                            if( VmbErrorSuccess == err )
-                            {
-                                if( (VmbAccessModeFull == (VmbAccessModeFull & eAccessMode)) ||
-                                    ((cameras.end() - 1) == iter) )
-                                {
-                                    //Now get the camera ID
-                                    err = ( *iter )->GetID( cameraID );
-                                    if( VmbErrorSuccess == err )
-                                    {
-                                        //Try to open the camera
-                                        err = ( *iter )->Open( VmbAccessModeFull );
-                                        if( VmbErrorSuccess == err )
-                                        {
-                                            pCamera = *iter;
-                                            break;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-
-                        if( VmbErrorSuccess != err )
-                        {
-                            err = VmbErrorNotFound;
-                            throw AVT::VmbAPI::Examples::Exception( "Could not open any camera.", err );
-                        }
-                    }
-                    else
-                    {
-                        err = VmbErrorNotFound;
-                        throw AVT::VmbAPI::Examples::Exception( "Could not open any camera.", err );
-                    }
-                }
-                else
-                {
-                    throw AVT::VmbAPI::Examples::Exception( "Could not list cameras.", err );
-                }
-            }
-            else
-            {
-                //Open specific camera
-                err = vimbaSystem.OpenCameraByID( cameraID.c_str(), VmbAccessModeFull, pCamera );
-                if( VmbErrorSuccess != err )
-                {
-                    throw AVT::VmbAPI::Examples::Exception( "Could not open camera.", err );
-                }
-            }
-        }
-
-        if( VmbErrorSuccess == err )
-        {
-            cout << "Camera ID: " << cameraID << "\n\n";
-            if( VmbBoolTrue == AVT::VmbAPI::Examples::LookUpTableCollection::HasLookUpTable( pCamera) )
-            {
-            
-                AVT::VmbAPI::Examples::LookUpTableCollection collection( pCamera );
-
-
-                VmbInt64_t nIndex;
-
-                if( controlIndex.empty() == false )
-                {
-                    nIndex = atoi( controlIndex.c_str() );
-                }
-                else
-                {
-                    nIndex = collection.GetActiveIndex( );
-                    if( VmbErrorSuccess != err )
-                    {
-                        throw AVT::VmbAPI::Examples::Exception( "Could not get active index of look up table collection.", err );
-                    }
-                }
-
-                AVT::VmbAPI::Examples::LookUpTableControl control( pCamera, nIndex );
-                control = collection.GetControl( nIndex );
-
-                if( VmbErrorSuccess == err )
-                {
-                    switch( eMode )
-                    {
-                    default:
-                    case ModeIsEnabled:
-                        {
-                            //Is look up table enabled
-                            cout << "Get look up table enable was successful. Enable = " << control.IsEnabled( ) <<"\n";
-                        }
-                        break;
-
-                    case ModeLoad:
-                        {                
-                            //Load look up table from flash
-                            control.LoadFromFlash();
-                            cout << "Look up table successfully loaded from flash.\n";
-                        }
-                        break;
-
-                    case ModeSave:
-                        {
-                            //Save look up table to flash
-                            control.SaveToFlash();
-                            cout << "Look up table successfully saved to flash.\n";
-                        }
-                        break;
-
-                    case ModeSaveCSV:
-                        {
-                            //Download LUT
-                            control.Download();
-                            //Save look up table to file
-                            control.SaveToCsv( fileName.c_str() );
-                            cout << "Look up table successfully saved to CSV.\n";
-                        }
-                        break;
-
-                    case ModeLoadCSV:
-                        {                
-                            //Load look up table from file
-                            control.LoadFromCsv( fileName, (int)nValue );
-                            control.Upload();
-                            cout << "Look up table successfully loaded from CSV.\n";
-                        }
-                        break;
-
-                    case ModeEnable:
-                        {
-                            //Set look up table enable
-                            control.Enable( bValue );
-                            cout << "Look up table was enabled successfully.\n";
-                        }
-                        break;
-
-                    case ModeBitIn:
-                        {
-                            //Get bit depth in of look up table
-                            cout << "Get look up table 'bit depth in' was successful. BitDepthIn = " << control.GetBitDepthIn( ) <<"\n";
-                        }
-                        break;
-
-                    case ModeBitOut:
-                        {
-                            //Get bit depth out of look up table
-                            cout << "Get look up table 'bit depth out' was successful. BitDepthOut = " << control.GetBitDepthOut( ) <<"\n";
-                        }
-                        break;
-
-                    case ModeSetValue:
-                        {
-                            //Set look up table value
-                            control.SetValue( nValue );
-                            cout << "Look up table value was set successfully." <<"\n";
-                        }
-                        break;
-
-                    case ModeGetValue:
-                        {
-                            //Get look up table value
-                            cout << "Get look up table value was successful. Value = " << control.GetValue()  <<"\n";
-                        }
-                        break;
-
-                    case ModeCount:
-                        {
-                            //Get look up table count
-                            cout << "Get look up table count was successful. Count = " << collection.GetCount( ) <<"\n";
-                        }
-                        break;
-
-                    }
-                }
-            }
-            else
-            {
-                cout<<"Camera does not support LookUp Table Feature\n";
-            }
-        }
-    }
-
-    catch( AVT::VmbAPI::Examples::Exception& ex )
-    {
-        cout << ex.GetMessageStr() << " VimbaException: " << ex.GetError() << " = " << ex.ErrorCodeToMessage( ex.GetError() ) <<"\n";
-    }
-
-    //Close camera
-    if( NULL != pCamera )
-    {
-        pCamera->Close();
-    }
-
-    //Shutdown API
-    if( true == bVimbaStarted )
-    {
-        vimbaSystem.Shutdown();
-    }
-
-    return err;
-}
\ No newline at end of file
diff --git a/VimbaCPP/Examples/SynchronousGrab/Console/Build/Make/Makefile b/VimbaCPP/Examples/SynchronousGrab/Console/Build/Make/Makefile
deleted file mode 100644
index 6b695a378c30db643c7d201c6fa069b60147a0ac..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Console/Build/Make/Makefile
+++ /dev/null
@@ -1,51 +0,0 @@
-PROJECT_NAME            = SynchronousGrabConsole
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/../..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ApiController.o \
-                      $(OBJ_DIR)/Bitmap.o \
-                      $(OBJ_DIR)/program.o
-
-DEPENDENCIES        = VimbaCPP
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/SynchronousGrab/Console/Source/ApiController.cpp b/VimbaCPP/Examples/SynchronousGrab/Console/Source/ApiController.cpp
deleted file mode 100644
index 743603f6467658dd3fc4ba0b27cb9b03a78fa94f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Console/Source/ApiController.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ApiController.cpp
-
-  Description: Implementation file for the ApiController helper class that
-               demonstrates how to implement a synchronous single image
-               acquisition with VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <sstream>
-#include <iostream>
-
-#include "ApiController.h"
-#include "Common/StreamSystemInfo.h"
-#include "Common/ErrorCodeToMessage.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-enum { NUM_FRAMES = 3, };
-
-ApiController::ApiController()
-    // Get a reference to the Vimba singleton
-    : m_system ( VimbaSystem::GetInstance() )
-{
-}
-
-ApiController::~ApiController()
-{
-}
-
-//
-// Starts the Vimba API and loads all transport layers
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::StartUp()
-{
-    return m_system.Startup();
-}
-
-//
-// Shuts down the API
-//
-void ApiController::ShutDown()
-{
-    // Release Vimba
-    m_system.Shutdown();
-}
-
-//
-// Opens the given camera
-// Sets the maximum possible Ethernet packet size
-// Adjusts the image format
-// Calls the API convenience function to start single image acquisition
-// Closes the camera in case of failure
-//
-// Parameters:
-//  [in]    rStrCameraID        The ID of the camera to work on
-//  [out]   rpFrame             The frame that will be filled. Does not need to be initialized.
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::AcquireSingleImage( const std::string &rStrCameraID, FramePtr &rpFrame )
-{
-    // Open the desired camera by its ID
-    VmbErrorType res = m_system.OpenCameraByID( rStrCameraID.c_str(), VmbAccessModeFull, m_pCamera );
-    if ( VmbErrorSuccess == res )
-    {
-        // Set the GeV packet size to the highest possible value
-        // (In this example we do not test whether this cam actually is a GigE cam)
-        FeaturePtr pCommandFeature;
-        if ( VmbErrorSuccess == m_pCamera->GetFeatureByName( "GVSPAdjustPacketSize", pCommandFeature ))
-        {
-            if ( VmbErrorSuccess == pCommandFeature->RunCommand() )
-            {
-                bool bIsCommandDone = false;
-                do
-                {
-                    if ( VmbErrorSuccess != pCommandFeature->IsCommandDone( bIsCommandDone ))
-                    {
-                        break;
-                    }
-                } while ( false == bIsCommandDone );
-            }
-        }
-        FeaturePtr pFormatFeature;
-        // Set pixel format. For the sake of simplicity we only support Mono and BGR in this example.
-        res = m_pCamera->GetFeatureByName( "PixelFormat", pFormatFeature );
-        if ( VmbErrorSuccess == res )
-        {
-            // Try to set BGR
-            res = pFormatFeature->SetValue( VmbPixelFormatRgb8 );
-            if ( VmbErrorSuccess != res )
-            {
-                // Fall back to Mono
-                res = pFormatFeature->SetValue( VmbPixelFormatMono8 );
-            }
-
-            if ( VmbErrorSuccess == res )
-            {
-                // Acquire
-                res = m_pCamera->AcquireSingleImage( rpFrame, 5000 );
-            }
-        }
-
-        m_pCamera->Close();
-    }
-
-    return res;
-}
-
-//
-// Gets all cameras known to Vimba
-//
-// Returns:
-//  A vector of camera shared pointers
-//
-CameraPtrVector ApiController::GetCameraList()
-{
-    CameraPtrVector cameras;
-    // Get all known cameras
-    if ( VmbErrorSuccess == m_system.GetCameras( cameras ))
-    {
-        // And return them
-        return cameras;
-    }
-    return CameraPtrVector();
-}
-
-//
-// Translates Vimba error codes to readable error messages
-//
-// Parameters:
-//  [in]    eErr        The error code to be converted to string
-//
-// Returns:
-//  A descriptive string representation of the error code
-//
-std::string ApiController::ErrorCodeToMessage( VmbErrorType eErr ) const
-{
-    return AVT::VmbAPI::Examples::ErrorCodeToMessage( eErr );
-}
-
-//
-// Gets the version of the Vimba API
-//
-// Returns:
-//  The version as string
-//
-std::string ApiController::GetVersion() const
-{
-    std::ostringstream os;
-    os<<m_system;
-    return os.str();
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/SynchronousGrab/Console/Source/ApiController.h b/VimbaCPP/Examples/SynchronousGrab/Console/Source/ApiController.h
deleted file mode 100644
index c0cbfcdd9b1e635aa5bf3fd377726e32865f0863..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Console/Source/ApiController.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ApiController.h
-
-  Description: Implementation file for the ApiController helper class that
-               demonstrates how to implement a synchronous single image
-               acquisition with VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_APICONTROLLER
-#define AVT_VMBAPI_EXAMPLES_APICONTROLLER
-
-#include <string>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class ApiController
-{
-  public:
-    ApiController();
-    ~ApiController();
-
-    //
-    // Starts the Vimba API and loads all transport layers
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType    StartUp();
-    
-    //
-    // Shuts down the API
-    //
-    void            ShutDown();
-
-    //
-    // Opens the given camera
-    // Sets the maximum possible Ethernet packet size
-    // Adjusts the image format
-    // Calls the API convenience function to start single image acquisition
-    // Closes the camera in case of failure
-    //
-    // Parameters:
-    //  [in]    rStrCameraID        The ID of the camera to work on
-    //  [out]   rpFrame             The frame that will be filled. Does not need to be initialized.
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType    AcquireSingleImage( const std::string &rStrCameraID, FramePtr &rpFrame );
-
-    //
-    // Gets all cameras known to Vimba
-    //
-    // Returns:
-    //  A vector of camera shared pointers
-    //
-    CameraPtrVector GetCameraList();
-
-    //
-    // Translates Vimba error codes to readable error messages
-    //
-    // Parameters:
-    //  [in]    eErr        The error code to be converted to string
-    //
-    // Returns:
-    //  A descriptive string representation of the error code
-    //
-    std::string     ErrorCodeToMessage( VmbErrorType eErr ) const;
-    
-    //
-    // Gets the version of the Vimba API
-    //
-    // Returns:
-    //  The version as string
-    //
-    std::string     GetVersion() const;
-
-  private:
-    // A reference to our Vimba singleton
-    VimbaSystem &m_system;
-    // The currently streaming camera
-    CameraPtr m_pCamera;
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/SynchronousGrab/Console/Source/Bitmap.cpp b/VimbaCPP/Examples/SynchronousGrab/Console/Source/Bitmap.cpp
deleted file mode 100644
index 5ae3d53f02ee4b52c9452631b633be01774040ab..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Console/Source/Bitmap.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:         Bitmap.cpp
-
-  Description:  The bitmap class represents a MS(R) Windows(TM) bitmap version 3
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "Bitmap.h"
-
-enum { THREE_CHANNEL    = 0xC,};
-enum { BMP_HEADER_SIZE  = 54, };
-enum { ALIGNMENT_SIZE   = 4, };
-
-//
-// Creates a MS Windows bitmap with header and color palette.
-// Fills it with the content of the given byte buffer
-// 
-// Parameters:
-//  [out]   pBitmap         A pointer to an AVTBitmap that will get filled
-//  [in]    pBuffer         The buffer that will be used to fill the created bitmap
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTCreateBitmap( AVTBitmap * const pBitmap, const void* pBuffer )
-{
-    unsigned char   nNumColors;                     // Number of colors of our image
-    unsigned char   nPadLength;                     // The padding we need to align the bitmap ALIGNMENT_SIZE
-    unsigned long   nPaletteSize = 0;               // The size of the bitmap's palette
-    unsigned long   nHeaderSize;                    // The size of the bitmap's header
-    unsigned long   nFileSize;                      // The size of the bitmap file
-    unsigned char*  pBitmapBuffer;                  // A buffer we use for creating the bitmap
-    unsigned char*  pCurBitmapBuf;                  // A cursor to move over "pBitmapBuffer"
-    unsigned char*  pCurSrc;                        // A cursor to move over the given buffer "pBuffer"
-    unsigned long   px;                             // A single pixel for storing transformed color information
-    unsigned long   x;                              // The horizontal position within our image
-    unsigned long   y;                              // The vertical position within our image
-    unsigned long   i;                              // Counter for some iteration
-
-    // The bitmap header
-    char fileHeader[14] = { 'B','M',                // Default
-                            0,0,0,0,                // File size
-                            0,0,0,0,                // Reserved
-                            0,0,0,0 };              // Offset to image content
-    char infoHeader[40] = { 40,0,0,0,               // Size of info header
-                            0,0,0,0,                // Width
-                            0,0,0,0,                // Height
-                            1,0,                    // Default
-                            0, 0 };                 // bpp
-
-    if (    NULL == pBitmap
-         || 0 == pBitmap->bufferSize
-         || 0 == pBitmap->width
-         || 0 == pBitmap->height )
-    {
-        return 0;
-    }
-
-    if ( pBitmap->colorCode == (pBitmap->colorCode & THREE_CHANNEL) )
-    {
-        nNumColors = 3;
-    }
-    else
-    {
-        nNumColors = 1;
-    }
-
-    // Bitmap padding always is a multiple of four Bytes. If data is not we need to pad with zeros.
-    nPadLength = (pBitmap->width * nNumColors) % ALIGNMENT_SIZE;
-    if ( 0 != nPadLength )
-    {
-        nPadLength = ALIGNMENT_SIZE - nPadLength;
-    }
-
-    if ( ColorCodeRGB24 != pBitmap->colorCode )
-    {
-        nPaletteSize = 256;
-    }
-    
-    nHeaderSize     = BMP_HEADER_SIZE + nPaletteSize * 4;
-    pBitmapBuffer   = (unsigned char*)malloc( nHeaderSize + pBitmap->bufferSize + (nPadLength * pBitmap->height) );
-    nFileSize       = nHeaderSize + pBitmap->bufferSize + (nPadLength * pBitmap->height);
-
-    // File size
-    fileHeader[ 2]  = (char)(nFileSize);
-    fileHeader[ 3]  = (char)(nFileSize >> 8);
-    fileHeader[ 4]  = (char)(nFileSize >> 16);
-    fileHeader[ 5]  = (char)(nFileSize >> 24);
-    // Offset to image content
-    fileHeader[10]  = (char)(nHeaderSize);
-    fileHeader[11]  = (char)(nHeaderSize >> 8);
-    fileHeader[12]  = (char)(nHeaderSize >> 16);
-    fileHeader[13]  = (char)(nHeaderSize >> 24);
-
-    // Width
-    infoHeader[ 4]  = (char)(pBitmap->width);
-    infoHeader[ 5]  = (char)(pBitmap->width >> 8);
-    infoHeader[ 6]  = (char)(pBitmap->width >> 16);
-    infoHeader[ 7]  = (char)(pBitmap->width >> 24);
-    // Height (has to be negative for a top down image)
-    infoHeader[ 8]  = (char)(-(long)pBitmap->height);
-    infoHeader[ 9]  = (char)(-(long)pBitmap->height >> 8);
-    infoHeader[10]  = (char)(-(long)pBitmap->height >> 16);
-    infoHeader[11]  = (char)(-(long)pBitmap->height >> 24);
-    // bpp
-    infoHeader[14]  = 8 * nNumColors;
-    // Image size
-    infoHeader[20]  = (char)(pBitmap->bufferSize);
-    infoHeader[21]  = (char)(pBitmap->bufferSize >> 8);
-    infoHeader[22]  = (char)(pBitmap->bufferSize >> 16);
-    infoHeader[23]  = (char)(pBitmap->bufferSize >> 24);
-    // Palette size
-    infoHeader[32]  = (char)(nPaletteSize);
-    infoHeader[33]  = (char)(nPaletteSize >> 8);
-    infoHeader[34]  = (char)(nPaletteSize >> 16);
-    infoHeader[35]  = (char)(nPaletteSize >> 24);
-    // Used colors
-    infoHeader[36]  = (char)(nPaletteSize);
-    infoHeader[37]  = (char)(nPaletteSize >> 8);
-    infoHeader[38]  = (char)(nPaletteSize >> 16);
-    infoHeader[39]  = (char)(nPaletteSize >> 24);
-
-    // Write header
-    pCurBitmapBuf   = pBitmapBuffer;
-    memcpy( pCurBitmapBuf, fileHeader, 14 );
-    pCurBitmapBuf += 14;
-    memcpy( pCurBitmapBuf, infoHeader, 40 );
-    pCurBitmapBuf += 40;
-    for(i = 0; i < nPaletteSize; ++i)
-    {
-        pCurBitmapBuf[0] = (char)(i);
-        pCurBitmapBuf[1] = (char)(i);
-        pCurBitmapBuf[2] = (char)(i);
-        pCurBitmapBuf[3] = 0;
-        pCurBitmapBuf += 4;
-    }
-
-    // RGB -> BGR (a Windows bitmap is BGR)
-    if ( ColorCodeRGB24 == pBitmap->colorCode )
-    {
-        pCurSrc = (unsigned char*)pBuffer;
-        for ( y=0; y<pBitmap->height; ++y, pCurBitmapBuf+=nPadLength )
-        {
-            for (   x = 0;
-                    x < pBitmap->width;
-                    ++x,
-                    pCurSrc += 3,
-                    pCurBitmapBuf += 3 )
-            {
-                px = 0;
-                // Create a 4 Byte structure to store ARGB (we don't use A)
-                px = px | (pCurSrc[0] << 16) | (pCurSrc[1] << 8) | pCurSrc[2];
-                // Due to endianess ARGB is stored as BGRA 
-                // and we only have to write the first three Bytes
-                memcpy( pCurBitmapBuf, &px, 3 );
-            }
-            // Add padding at the end of each row
-            memset( pCurBitmapBuf, 0, nPadLength );
-        }
-        pBitmap->colorCode = ColorCodeBGR24;
-    }
-    // Mono8
-    else
-    {
-        if ( 0 == nPadLength )
-        {
-            memcpy( pCurBitmapBuf, pBuffer, pBitmap->bufferSize );
-        }
-        else
-        {
-            pCurSrc = (unsigned char*)pBuffer;
-            for (   y=0;
-                    y<pBitmap->height;
-                    ++y,
-                    pCurSrc += pBitmap->width * nNumColors )
-            {
-                // Write a single row of colored pixels
-                memcpy( pCurBitmapBuf, pCurSrc, pBitmap->width * nNumColors );
-                pCurBitmapBuf += pBitmap->width * nNumColors;
-                // Write padding pixels
-                memset( pCurBitmapBuf, 0, nPadLength );
-                pCurBitmapBuf += nPadLength;
-            }
-        }
-    }
-
-    pBitmap->buffer     = pBitmapBuffer;
-    pBitmap->bufferSize = nFileSize;
-    return 1;
-}
-
-//
-// Releases (frees) a given bitmap
-//
-// Parameters:
-//  [in, out]   pBitmap     The bitmap whose memory will be freed
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTReleaseBitmap( AVTBitmap * const pBitmap )
-{
-    if (    NULL != pBitmap
-         && NULL != pBitmap->buffer
-         && 0 < pBitmap->bufferSize )
-    {
-        free( pBitmap->buffer );
-        pBitmap->buffer = NULL;
-        return 1;
-    }
-
-    return 0;
-}
-
-//
-// Writes a given bitmap to file
-//
-// Parameters:
-//  [in] pBitmap            The AVTBitmap to write to file
-//  [in] pFileName          The destination (complete path) where to write the bitmap to
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTWriteBitmapToFile( AVTBitmap const * const pBitmap, char const * const pFileName )
-{
-    FILE *file;
-    if (    NULL != pBitmap
-         && NULL != pBitmap->buffer
-         && NULL != pFileName )
-    {
-        file = fopen(pFileName, "wb");
-        fwrite(pBitmap->buffer, 1, pBitmap->bufferSize, file );
-        fclose(file);
-
-        return 1;
-    }
-
-    return 0;
-}
diff --git a/VimbaCPP/Examples/SynchronousGrab/Console/Source/Bitmap.h b/VimbaCPP/Examples/SynchronousGrab/Console/Source/Bitmap.h
deleted file mode 100644
index 66019bda8f0ff73b5054769750e96f2a0dcfba17..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Console/Source/Bitmap.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:         Bitmap.h
-
-  Description:  The bitmap class represents a MS(R) Windows(TM) bitmap version 3
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_BITMAP_H
-#define AVT_BITMAP_H
-
-typedef enum
-{
-    ColorCodeMono8  = 1,
-    ColorCodeMono16 = 2,
-    ColorCodeBGR24  = 4,
-    ColorCodeRGB24  = 8
-} ColorCode;
-
-typedef struct
-{
-    void*           buffer;
-    unsigned long   bufferSize;
-    unsigned long   width; 
-    unsigned long   height;
-    ColorCode       colorCode;
-} AVTBitmap;
-
-//
-// Creates a MS Windows bitmap with header and color palette.
-// Fills it with the content of the given byte buffer
-// 
-// Parameters:
-//  [out]   pBitmap         A pointer to an AVTBitmap that will get filled
-//  [in]    pBuffer         The buffer that will be used to fill the created bitmap
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTCreateBitmap( AVTBitmap * const pBitmap, const void* pBuffer );
-
-//
-// Releases (frees) a given bitmap
-//
-// Parameters:
-//  [in, out]   pBitmap     The bitmap whose memory will be freed
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTReleaseBitmap( AVTBitmap * const pBitmap );
-
-//
-// Writes a given bitmap to file
-//
-// Parameters:
-//  [in] pBitmap            The AVTBitmap to write to file
-//  [in] pFileName          The destination (complete path) where to write the bitmap to
-//
-// Returns:
-//  0 in case of error
-//  1 in case of success
-//
-unsigned char AVTWriteBitmapToFile( AVTBitmap const * const pBitmap, char const * const pFileName );
-
-#endif
diff --git a/VimbaCPP/Examples/SynchronousGrab/Console/Source/program.cpp b/VimbaCPP/Examples/SynchronousGrab/Console/Source/program.cpp
deleted file mode 100644
index 829946ad9b65153b62e7bcf26f5ea54b0af395c2..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Console/Source/program.cpp
+++ /dev/null
@@ -1,287 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2013 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Implementation of main entry point of SynchronousGrabConsole
-               example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <string>
-#include <cstring>
-#include <iostream>
-
-#include "ApiController.h"
-#include "Bitmap.h"
-
-unsigned char StartsWith(const char *pString, const char *pStart)
-{
-    if(NULL == pString)
-    {
-        return 0;
-    }
-    if(NULL == pStart)
-    {
-        return 0;
-    }
-
-    if(std::strlen(pString) < std::strlen(pStart))
-    {
-        return 0;
-    }
-
-    if(std::memcmp(pString, pStart, std::strlen(pStart)) != 0)
-    {
-        return 0;
-    }
-
-    return 1;
-}
-
-int main( int argc, char* argv[] )
-{
-    VmbErrorType    err         = VmbErrorSuccess;
-
-    char *          pCameraID   = NULL;             // The ID of the camera to use
-    const char *    pFileName   = NULL;             // The filename for the bitmap to save
-    bool            bPrintHelp  = false;            // Output help?
-    int             i;                              // Counter for some iteration
-    char *          pParameter;                     // The command line parameter
-
-    std::cout << "//////////////////////////////////////////\n";
-    std::cout << "/// Vimba API Synchronous Grab Example ///\n";
-    std::cout << "//////////////////////////////////////////\n\n";
-
-    //////////////////////
-    //Parse command line//
-    //////////////////////
-
-    for( i = 1; i < argc; ++i )
-    {
-        pParameter = argv[i];
-        if( 0 > std::strlen( pParameter ))
-        {
-            err = VmbErrorBadParameter;
-            break;
-        }
-
-        if( '/' == pParameter[0] )
-        {
-            if( StartsWith( pParameter, "/f:" ))
-            {
-                if( NULL != pFileName )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                pFileName = pParameter + 3;
-                if( 0 >= std::strlen( pFileName ))
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-            }
-            else if( 0 == std::strcmp( pParameter, "/h" ))
-            {
-                if(     ( NULL != pCameraID )
-                    ||  ( NULL != pFileName )
-                    ||  ( bPrintHelp ))
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                bPrintHelp = true;
-            }
-            else
-            {
-                err = VmbErrorBadParameter;
-                break;
-            }
-        }
-        else
-        {
-            if( NULL != pCameraID )
-            {
-                err = VmbErrorBadParameter;
-                break;
-            }
-
-            pCameraID = pParameter;
-        }
-    }
-
-    //Write out an error if we could not parse the command line
-    if ( VmbErrorBadParameter == err )
-    {
-        std::cout << "Invalid parameters!\n\n";
-        bPrintHelp = true;
-    }
-
-    //Print out help and end program
-    if ( bPrintHelp )
-    {
-        std::cout << "Usage: SynchronousGrab [CameraID] [/h] [/f:FileName]\n";
-        std::cout << "Parameters:   CameraID    ID of the camera to use (using first camera if not specified)\n";
-        std::cout << "              /h          Print out help\n";
-        std::cout << "              /f:FileName File name for operation\n";
-        std::cout << "                          (default \"SynchronousGrab.bmp\" if not specified)\n";
-    }
-    else
-    {
-        if ( NULL == pFileName )
-        {
-            pFileName = "SynchronousGrab.bmp";
-        }
-
-        AVT::VmbAPI::Examples::ApiController apiController;
-        
-        std::cout << "Vimba C++ API Version " << apiController.GetVersion() << "\n";
-
-        VmbFrameStatusType status = VmbFrameStatusIncomplete;
-        err = apiController.StartUp();
-        if ( VmbErrorSuccess == err )
-        {
-            std::string strCameraID;
-            if ( NULL == pCameraID )
-            {
-                AVT::VmbAPI::CameraPtrVector cameras = apiController.GetCameraList();
-                if ( cameras.size() <= 0 )
-                {
-                    err = VmbErrorNotFound;
-                }
-                else
-                {
-                    err = cameras[0]->GetID( strCameraID );
-                }
-            }
-            else
-            {
-                strCameraID = pCameraID;
-            }
-            
-            if ( VmbErrorSuccess == err )
-            {
-                std::cout << "Camera ID:" << strCameraID.c_str() << "\n\n";
-
-                AVT::VmbAPI::FramePtr pFrame;
-                err = apiController.AcquireSingleImage( strCameraID, pFrame );
-                if ( VmbErrorSuccess == err )
-                {
-                    err = pFrame->GetReceiveStatus( status );
-                    if (    VmbErrorSuccess == err
-                         && VmbFrameStatusComplete == status )
-                    {
-                        VmbPixelFormatType ePixelFormat = VmbPixelFormatMono8;
-                        err = pFrame->GetPixelFormat( ePixelFormat );
-                        if ( VmbErrorSuccess == err )
-                        {
-                            if (    ( VmbPixelFormatMono8 != ePixelFormat )
-                                &&  ( VmbPixelFormatRgb8 != ePixelFormat ))
-                            {
-                                err = VmbErrorInvalidValue;
-                            }
-                            else
-                            {
-                                VmbUint32_t nImageSize = 0; 
-                                err = pFrame->GetImageSize( nImageSize );
-                                if ( VmbErrorSuccess == err )
-                                {
-                                    VmbUint32_t nWidth = 0;
-                                    err = pFrame->GetWidth( nWidth );
-                                    if ( VmbErrorSuccess == err )
-                                    {
-                                        VmbUint32_t nHeight = 0;
-                                        err = pFrame->GetHeight( nHeight );
-                                        if ( VmbErrorSuccess == err )
-                                        {
-                                            VmbUchar_t *pImage = NULL;
-                                            err = pFrame->GetImage( pImage );
-                                            if ( VmbErrorSuccess == err )
-                                            {
-                                                AVTBitmap bitmap;
-
-                                                if ( VmbPixelFormatRgb8 == ePixelFormat )
-                                                {
-                                                    bitmap.colorCode = ColorCodeRGB24;
-                                                }
-                                                else
-                                                {
-                                                    bitmap.colorCode = ColorCodeMono8;
-                                                }
-
-                                                bitmap.bufferSize = nImageSize;
-                                                bitmap.width = nWidth;
-                                                bitmap.height = nHeight;
-
-                                                // Create the bitmap
-                                                if ( 0 == AVTCreateBitmap( &bitmap, pImage ))
-                                                {
-                                                    std::cout << "Could not create bitmap.\n";
-                                                    err = VmbErrorResources;
-                                                }
-                                                else
-                                                {
-                                                    // Save the bitmap
-                                                    if ( 0 == AVTWriteBitmapToFile( &bitmap, pFileName ))
-                                                    {
-                                                        std::cout << "Could not write bitmap to file.\n";
-                                                        err = VmbErrorOther;
-                                                    }
-                                                    else
-                                                    {
-                                                        std::cout << "Bitmap successfully written to file \"" << pFileName << "\"\n" ;
-                                                        // Release the bitmap's buffer
-                                                        if ( 0 == AVTReleaseBitmap( &bitmap ))
-                                                        {
-                                                            std::cout << "Could not release the bitmap.\n";
-                                                            err = VmbErrorInternalFault;
-                                                        }
-                                                    }
-                                                }
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-            apiController.ShutDown();
-        }
-
-        if ( VmbErrorSuccess != err )
-        {
-            std::string strError = apiController.ErrorCodeToMessage( err );
-            std::cout << "\nAn error occurred: " << strError.c_str() << "\n";
-        }
-        if( VmbFrameStatusIncomplete == status)
-        {
-            std::cout<<"received frame was not complete\n";
-        }
-    }
-
-    return err;
-}
diff --git a/VimbaCPP/Examples/SynchronousGrab/Qt/Build/Make/Makefile b/VimbaCPP/Examples/SynchronousGrab/Qt/Build/Make/Makefile
deleted file mode 100644
index c1f39a6f0289b33a2c43695b896b20c9fa398f28..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Qt/Build/Make/Makefile
+++ /dev/null
@@ -1,77 +0,0 @@
-PROJECT_NAME            = SynchronousGrabQt
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/../..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-include $(MAKE_INCLUDE_DIR)/Qt.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-                      -I$(OBJ_DIR)
-
-LIBS                = $(VIMBACPP_LIBS) \
-                      $(QTCORE_LIBS) \
-                      $(QTGUI_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS) \
-                      $(QTCORE_CFLAGS) \
-                      $(QTGUI_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/ApiController.o \
-                      $(OBJ_DIR)/SynchronousGrab.o \
-                      $(OBJ_DIR)/CameraObserver.o \
-                      $(OBJ_DIR)/main.o \
-                      $(OBJ_DIR)/moc_SynchronousGrab.o \
-                      $(OBJ_DIR)/moc_CameraObserver.o \
-                      $(OBJ_DIR)/qrc_SynchronousGrab.o
-
-GEN_HEADERS			= $(OBJ_DIR)/ui_SynchronousGrab.h
-
-DEPENDENCIES        = VimbaCPP \
-                      QtCore \
-                      QtGui
-
-$(OBJ_DIR)/moc_%.cpp: $(SOURCE_DIR)/%.h $(OBJ_DIR)
-	$(MOC) -o $@ $<
-
-$(OBJ_DIR)/ui_%.h: $(SOURCE_DIR)/res/%.ui $(OBJ_DIR)
-	$(UIC) -o $@ $<
-
-$(OBJ_DIR)/qrc_%.cpp: $(SOURCE_DIR)/res/%.qrc $(OBJ_DIR)
-	$(RCC) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(OBJ_DIR)/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/ApiController.cpp b/VimbaCPP/Examples/SynchronousGrab/Qt/Source/ApiController.cpp
deleted file mode 100644
index 7ca11b942b554b8ae7158b177651496e841f696c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/ApiController.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ApiController.cpp
-
-  Description: Implementation file for the ApiController helper class that
-               demonstrates how to implement a synchronous single image
-               acquisition with VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include <sstream>
-#include <iostream>
-
-#include "ApiController.h"
-
-#include "Common/StreamSystemInfo.h"
-#include "Common/ErrorCodeToMessage.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-enum { NUM_FRAMES = 3, };
-
-ApiController::ApiController()
-    // Get a reference to the Vimba singleton
-    : m_system ( VimbaSystem::GetInstance() )
-{
-}
-
-ApiController::~ApiController()
-{
-}
-
-//
-// Translates Vimba error codes to readable error messages
-//
-// Parameters:
-//  [in]    eErr        The error code to be converted to string
-//
-// Returns:
-//  A descriptive string representation of the error code
-//
-std::string ApiController::ErrorCodeToMessage( VmbErrorType eErr ) const
-{
-    return AVT::VmbAPI::Examples::ErrorCodeToMessage( eErr );
-}
-
-//
-// Starts the Vimba API and loads all transport layers
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::StartUp()
-{
-    VmbErrorType res;
-
-    // Start Vimba
-    res = m_system.Startup();
-    if ( VmbErrorSuccess == res )
-    {
-        // This will be wrapped in a shared_ptr so we don't delete it
-        m_pCameraObserver = new CameraObserver();
-        // Register an observer whose callback routine gets triggered whenever a camera is plugged in or out
-        res = m_system.RegisterCameraListObserver( ICameraListObserverPtr( m_pCameraObserver ));
-    }
-    
-    return res;
-}
-
-//
-// Shuts down the API
-//
-void ApiController::ShutDown()
-{
-    // Release Vimba
-    m_system.Shutdown();
-}
-
-//
-// Opens the given camera
-// Sets the maximum possible Ethernet packet size
-// Adjusts the image format
-// Calls the API convenience function to start single image acquisition
-// Closes the camera in case of failure
-//
-// Parameters:
-//  [in]    rStrCameraID        The ID of the camera to work on
-//  [out]   rpFrame             The frame that will be filled. Does not need to be initialized.
-//
-// Returns:
-//  An API status code
-//
-VmbErrorType ApiController::AcquireSingleImage( const std::string &rStrCameraID, FramePtr &rpFrame )
-{
-    // Open the desired camera by its ID
-    VmbErrorType res = m_system.OpenCameraByID( rStrCameraID.c_str(), VmbAccessModeFull, m_pCamera );
-    if ( VmbErrorSuccess == res )
-    {
-        // Set the GeV packet size to the highest possible value
-        // (In this example we do not test whether this cam actually is a GigE cam)
-        FeaturePtr pCommandFeature;
-        if ( VmbErrorSuccess == m_pCamera->GetFeatureByName( "GVSPAdjustPacketSize", pCommandFeature ))
-        {
-            if ( VmbErrorSuccess == pCommandFeature->RunCommand() )
-            {
-                bool bIsCommandDone = false;
-                do
-                {
-                    if ( VmbErrorSuccess != pCommandFeature->IsCommandDone( bIsCommandDone ))
-                    {
-                        break;
-                    }
-                } while ( false == bIsCommandDone );
-            }
-        }
-        FeaturePtr pFormatFeature;
-        // Save the current width
-        res = m_pCamera->GetFeatureByName( "Width", pFormatFeature );
-        if ( VmbErrorSuccess == res )
-        {
-            res = pFormatFeature->GetValue( m_nWidth );
-            if ( VmbErrorSuccess == res )
-            {
-                // Save the current height
-                res = m_pCamera->GetFeatureByName( "Height", pFormatFeature );
-                if ( VmbErrorSuccess == res )
-                {
-                    pFormatFeature->GetValue( this->m_nHeight );
-                    if ( VmbErrorSuccess == res )
-                    {
-                        // Set pixel format. For the sake of simplicity we only support Mono and RGB in this example.
-                        res = m_pCamera->GetFeatureByName( "PixelFormat", pFormatFeature );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            // Try to set RGB
-                            res = pFormatFeature->SetValue( VmbPixelFormatRgb8 );
-                            if ( VmbErrorSuccess != res )
-                            {
-                                // Fall back to Mono
-                                res = pFormatFeature->SetValue( VmbPixelFormatMono8 );
-                            }
-
-                            // Read back the currently selected pixel format
-                            pFormatFeature->GetValue( m_nPixelFormat );
-
-                            if ( VmbErrorSuccess == res )
-                            {
-                                // Acquire
-                                res = m_pCamera->AcquireSingleImage( rpFrame, 2000 );
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        m_pCamera->Close();
-    }
-
-    return res;
-}
-
-//
-// Calls the API convenience function to stop image acquisition
-// Closes the camera
-//
-// Returns:
-//  An API status code
-//
-CameraPtrVector ApiController::GetCameraList() const
-{
-    CameraPtrVector cameras;
-    // Get all known cameras
-    if ( VmbErrorSuccess == m_system.GetCameras( cameras ))
-    {
-        // And return them
-        return cameras;
-    }
-    return CameraPtrVector();
-}
-
-//
-// Gets the width of a frame
-//
-// Returns:
-//  The width as integer
-//
-int ApiController::GetWidth() const
-{
-    return static_cast<int>( m_nWidth );
-}
-
-//
-// Gets the height of a frame
-//
-// Returns:
-//  The height as integer
-//
-int ApiController::GetHeight() const
-{
-    return static_cast<int>( m_nHeight );
-}
-
-//
-// Gets the pixel format of a frame
-//
-// Returns:
-//  The pixel format as enum
-//
-VmbPixelFormatType ApiController::GetPixelFormat() const
-{
-    return static_cast<VmbPixelFormatType>( m_nPixelFormat );
-}
-
-//
-// Returns the frame observer as QObject pointer to connect their signals to the view's slots
-//
-QObject* ApiController::GetCameraObserver()
-{
-    return m_pCameraObserver;
-}
-
-//
-// Gets the version of the Vimba API
-//
-// Returns:
-//  The version as string
-//
-std::string ApiController::GetVersion() const
-{
-    std::ostringstream os;
-    os<<m_system;
-    return os.str();
-}
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/ApiController.h b/VimbaCPP/Examples/SynchronousGrab/Qt/Source/ApiController.h
deleted file mode 100644
index 7a146b5aca96106d420053d5b1c09ceb8a9adbdb..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/ApiController.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ApiController.h
-
-  Description: Implementation file for the ApiController helper class that
-               demonstrates how to implement a synchronous single image
-               acquisition with VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_APICONTROLLER
-#define AVT_VMBAPI_EXAMPLES_APICONTROLLER
-
-#include <string>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-#include "CameraObserver.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class ApiController
-{
-  public:
-    ApiController();
-    ~ApiController();
-
-    //
-    // Starts the Vimba API and loads all transport layers
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        StartUp();
-
-    //
-    // Shuts down the API
-    //
-    void                ShutDown();
-
-    //
-    // Opens the given camera
-    // Sets the maximum possible Ethernet packet size
-    // Adjusts the image format
-    // Calls the API convenience function to start single image acquisition
-    // Closes the camera in case of failure
-    //
-    // Parameters:
-    //  [in]    rStrCameraID        The ID of the camera to work on
-    //  [out]   rpFrame             The frame that will be filled. Does not need to be initialized.
-    //
-    // Returns:
-    //  An API status code
-    //
-    VmbErrorType        AcquireSingleImage( const std::string &rStrCameraID, FramePtr &rpFrame );
-
-    //
-    // Gets the width of a frame
-    //
-    // Returns:
-    //  The width as integer
-    //
-    int                 GetWidth()          const;
-
-    //
-    // Gets the height of a frame
-    //
-    // Returns:
-    //  The height as integer
-    //
-    int                 GetHeight()         const;
-
-    //
-    // Gets the pixel format of a frame
-    //
-    // Returns:
-    //  The pixel format as enum
-    //
-    VmbPixelFormatType  GetPixelFormat()    const;
-
-    //
-    // Calls the API convenience function to stop image acquisition
-    // Closes the camera
-    //
-    // Returns:
-    //  An API status code
-    //
-    CameraPtrVector     GetCameraList()     const;
-   
-    //
-    // Returns the frame observer as QObject pointer to connect their signals to the view's slots
-    //
-    QObject*            GetCameraObserver();
-
-    //
-    // Translates Vimba error codes to readable error messages
-    //
-    // Parameters:
-    //  [in]    eErr        The error code to be converted to string
-    //
-    // Returns:
-    //  A descriptive string representation of the error code
-    //
-    std::string         ErrorCodeToMessage( VmbErrorType eErr ) const;
-
-    //
-    // Gets the version of the Vimba API
-    //
-    // Returns:
-    //  The version as string
-    //
-    std::string         GetVersion() const;
-
-  private:
-    // A reference to our Vimba singleton
-    VimbaSystem &       m_system;
-    // The currently streaming camera
-    CameraPtr           m_pCamera;
-    // Our camera observer
-    CameraObserver*     m_pCameraObserver;
-    // The current pixel format
-    VmbInt64_t          m_nPixelFormat;
-    // The current width
-    VmbInt64_t          m_nWidth;
-    // The current height
-    VmbInt64_t          m_nHeight;
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/CameraObserver.cpp b/VimbaCPP/Examples/SynchronousGrab/Qt/Source/CameraObserver.cpp
deleted file mode 100644
index 7574974ca9a5d588611db414929dc61f6dfa828f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/CameraObserver.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraObserver.cpp
-
-  Description: The camera observer that is used for notifications from VimbaCPP
-               regarding a change in the camera list.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "CameraObserver.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-//
-// This is our callback routine that will be executed every time a camera was plugged in or out
-//
-// Parameters:
-//  [in]    pCam            The camera that triggered the callback
-//  [in]    reason          The reason why the callback was triggered
-//
-void CameraObserver::CameraListChanged( CameraPtr pCam, UpdateTriggerType reason )
-{
-    if (    UpdateTriggerPluggedIn  == reason
-         || UpdateTriggerPluggedOut == reason )
-    {
-        // Emit the new camera signal
-        emit CameraListChangedSignal( reason );
-    }
-}
-
-}}} // namespace AVT::VmbAPI::Examples
diff --git a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/CameraObserver.h b/VimbaCPP/Examples/SynchronousGrab/Qt/Source/CameraObserver.h
deleted file mode 100644
index b76e5459bae799e60afe5ab3daf512c42b214e5f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/CameraObserver.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraObserver.h
-
-  Description: The camera observer that is used for notifications from VimbaCPP
-               regarding a change in the camera list.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_CAMERAOBSERVER
-#define AVT_VMBAPI_EXAMPLES_CAMERAOBSERVER
-
-#include <QObject>
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class CameraObserver : public QObject, public ICameraListObserver
-{
-    Q_OBJECT
-
-  public:
-    //
-    // This is our callback routine that will be executed every time a camera was plugged in or out
-    //
-    // Parameters:
-    //  [in]    pCam            The camera that triggered the callback
-    //  [in]    reason          The reason why the callback was triggered
-    //
-    virtual void CameraListChanged( CameraPtr pCamera, UpdateTriggerType reason );
-
-  signals:
-    //
-    // The camera list changed event (Qt signal) that notifies about a camera change and its reason
-    //
-    // Parameters:
-    //  [out]    reason          The reason why this event was fired
-    //
-    void CameraListChangedSignal( int reason );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/SynchronousGrab.cpp b/VimbaCPP/Examples/SynchronousGrab/Qt/Source/SynchronousGrab.cpp
deleted file mode 100644
index 99bf9688c40e748ded5125c0220874defec2ccea..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/SynchronousGrab.cpp
+++ /dev/null
@@ -1,268 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        SynchronousGrab.cpp
-
-  Description: Qt dialog class for the GUI of the SynchronousGrab example of
-               VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <sstream>
-
-#include "SynchronousGrab.h"
-using AVT::VmbAPI::FramePtr;
-using AVT::VmbAPI::CameraPtrVector;
-
-enum { NUM_COLORS = 3, };
-enum { BIT_DEPTH  = 8, };
-
-SynchronousGrab::SynchronousGrab(QWidget *parent, Qt::WindowFlags flags)
-    : QMainWindow(parent, flags)
-    , m_pApiController( new ApiController() )
-{
-    ui.setupUi(this);
-    ui.m_LabelStream->setAlignment( Qt::AlignCenter );
-    // Connect GUI events with event handlers
-    QObject::connect( ui.m_ButtonStartStop, SIGNAL( clicked() ), this, SLOT( OnBnClickedButtonStartstop() ));
-
-    // Start Vimba
-    VmbErrorType err = m_pApiController->StartUp();
-    Log( "Starting Vimba", err );
-    if ( VmbErrorSuccess == err )
-    {
-        std::string WindowText("SynchronousGrab (Qt version) Vimba C++ API Version ");
-        WindowText += m_pApiController->GetVersion();
-        this->setWindowTitle( QString::fromStdString(WindowText) );
-        // Connect new camera found event with event handler
-        QObject::connect( m_pApiController->GetCameraObserver(), SIGNAL( CameraListChangedSignal( int )), this, SLOT( OnCameraListChanged( int )));
-
-        // Initially get all connected cameras
-        UpdateCameraListBox();
-        std::stringstream strMsg;
-        strMsg << "Cameras found..." << m_cameras.size();
-        Log( strMsg.str() ); 
-    }
-}
-
-SynchronousGrab::~SynchronousGrab()
-{
-    // Before we close the application we stop Vimba
-    m_pApiController->ShutDown();
-
-    delete m_pApiController;
-    m_pApiController = NULL;
-}
-
-void SynchronousGrab::OnBnClickedButtonStartstop()
-{
-    VmbErrorType    err;
-    int             nRow = ui.m_ListBoxCameras->currentRow();
-
-    if ( -1 < nRow )
-    {
-        // Get the frame
-        FramePtr pFrame;
-        err = m_pApiController->AcquireSingleImage( m_cameras[nRow], pFrame );
-        if ( VmbErrorSuccess == err )
-        {
-            // See if it is not corrupt
-            VmbFrameStatusType eReceiveStatus;
-            err = pFrame->GetReceiveStatus( eReceiveStatus );
-            if (    VmbErrorSuccess == err
-                 && VmbFrameStatusComplete == eReceiveStatus )
-            {
-                // Set up Qt image
-                QImage  tmpImage(   m_pApiController->GetWidth(),
-                                    m_pApiController->GetHeight(),
-                                    VmbPixelFormatRgb8 == m_pApiController->GetPixelFormat() ? QImage::Format_RGB888 : QImage::Format_Indexed8 );
-
-                if(VmbPixelFormatRgb8 != m_pApiController->GetPixelFormat())
-                {
-                    tmpImage.setNumColors(256);
-                    for(int i = 0; i < 256; i++)
-                    {
-                        tmpImage.setColor(i, qRgb(i, i, i));
-                    }
-                }
-                
-                VmbUchar_t *pBuffer;
-                err = pFrame->GetImage( pBuffer );
-                if ( VmbErrorSuccess == err )
-                {
-                    VmbUint32_t nSize;
-                    err = pFrame->GetImageSize( nSize );
-                    if ( VmbErrorSuccess == err )
-                    {
-                        VmbPixelFormatType ePixelFormat = m_pApiController->GetPixelFormat();
-                        if (    VmbPixelFormatMono8 == ePixelFormat
-                             || VmbPixelFormatRgb8 == ePixelFormat )
-                        {
-                            // Copy it
-                            // We need that because Qt might repaint the view after we have released the frame already
-                            CopyToImage( pBuffer, tmpImage );
-
-                            // Display it
-                            QSize s= ui.m_LabelStream->size();
-                            ui.m_LabelStream->setPixmap( QPixmap::fromImage( tmpImage ).scaled( s, Qt::KeepAspectRatio) );
-                        }
-                    }
-                }
-                
-                Log( "Starting Acquisition", err );
-                m_bIsStreaming = VmbErrorSuccess == err;
-            }
-            else
-            {
-                // If we receive an incomplete image we do nothing
-                err = VmbErrorOther;
-            }
-        }
-        Log( "Acquire single image", err );
-    }
-    else
-    {
-        Log( "Please select a camera." );
-    }
-
-}
-
-//
-// This event handler (Qt slot) is triggered through a Qt signal posted by the camera observer
-//
-// Parameters:
-//  [in]    reason          The reason why the callback of the observer was triggered (plug-in, plug-out, ...)
-//
-void SynchronousGrab::OnCameraListChanged( int reason )
-{
-    bool bUpdateList = false;
-
-    // We only react on new cameras being found and known cameras being unplugged
-    if ( AVT::VmbAPI::UpdateTriggerPluggedIn == reason )
-    {
-        Log( "Camera list changed. A new camera was discovered by Vimba." );
-        bUpdateList = true;
-    }
-    else if ( AVT::VmbAPI::UpdateTriggerPluggedOut == reason )
-    {
-        Log( "Camera list changed. A camera was disconnected from Vimba." );
-        bUpdateList = true;
-    }
-
-    if ( true == bUpdateList )
-    {
-        UpdateCameraListBox();
-    }
-
-    ui.m_ButtonStartStop->setEnabled( 0 < m_cameras.size() || m_bIsStreaming );
-}
-
-//
-// Copies the content of a byte buffer to a Qt image with respect to the image's alignment
-//
-// Parameters:
-//  [in]    pInbuffer       The byte buffer as received from the cam
-//  [out]   OutImage        The filled Qt image
-//
-void SynchronousGrab::CopyToImage( VmbUchar_t *pInBuffer, QImage &OutImage )
-{
-    VmbUchar_t *    pCursor = OutImage.bits();
-    int             nHeight = m_pApiController->GetHeight();
-    int             nWidth  =   QImage::Format_Indexed8 == OutImage.format()
-                                ? m_pApiController->GetWidth()
-                                : m_pApiController->GetWidth() * NUM_COLORS;
-
-    if ( OutImage.bytesPerLine() != nWidth )
-    {
-        for ( int y=0; y<nHeight; ++y )
-        {
-            pCursor = OutImage.scanLine( y );
-            for ( int x=0; x<nWidth; ++x )
-            {
-                *pCursor = *pInBuffer;
-                ++pCursor;
-                ++pInBuffer;
-            }
-        }
-    }
-    else
-    {
-        memcpy( OutImage.bits(), pInBuffer, nWidth * nHeight );
-    }
-}
-
-//
-// Queries and lists all known camera
-//
-void SynchronousGrab::UpdateCameraListBox()
-{
-    // Get all cameras currently connected to Vimba
-    CameraPtrVector cameras = m_pApiController->GetCameraList();
-
-    // Simply forget about all cameras known so far
-    ui.m_ListBoxCameras->clear();
-    m_cameras.clear();
-
-    // And query the camera details again
-    for (   CameraPtrVector::const_iterator iter = cameras.begin();
-            cameras.end() != iter;
-            ++iter )
-    {
-        std::string         strCameraName;
-        std::string         strCameraID;
-        if ( VmbErrorSuccess != (*iter)->GetName( strCameraName ))
-        {
-            strCameraName = "[NoName]";
-        }
-        // If for any reason we cannot get the ID of a camera we skip it
-        if ( VmbErrorSuccess == (*iter)->GetID( strCameraID ))
-        {
-            ui.m_ListBoxCameras->addItem( QString::fromStdString( strCameraName + " " +strCameraID ) );
-            m_cameras.push_back( strCameraID );
-        }
-    }
-
-    ui.m_ButtonStartStop->setEnabled( 0 < m_cameras.size() || m_bIsStreaming );
-}
-
-//
-// Prints out a given logging string, error code and the descriptive representation of that error code
-//
-// Parameters:
-//  [in]    strMsg          A given message to be printed out
-//  [in]    eErr            The API status code
-//
-void SynchronousGrab::Log( std::string strMsg, VmbErrorType eErr )
-{
-    strMsg +=  "..." + m_pApiController->ErrorCodeToMessage( eErr );
-    ui.m_ListLog->insertItem( 0, QString::fromStdString( strMsg ) );
-}
-
-//
-// Prints out a given logging string
-//
-// Parameters:
-//  [in]    strMsg          A given message to be printed out
-//
-void SynchronousGrab::Log( std::string strMsg )
-{
-    ui.m_ListLog->insertItem( 0, QString::fromStdString( strMsg ) );
-}
diff --git a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/SynchronousGrab.h b/VimbaCPP/Examples/SynchronousGrab/Qt/Source/SynchronousGrab.h
deleted file mode 100644
index b081fd4abab25a93fcd2ca52d4d724266fb4ac1f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/SynchronousGrab.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        SynchronousGrab.cpp
-
-  Description: Qt dialog class for the GUI of the SynchronousGrab example of
-               VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef SYNCHRONOUSGRABQT_H
-#define SYNCHRONOUSGRABQT_H
-
-#include <QMainWindow>
-
-#include "ui_SynchronousGrab.h"
-
-#include "ApiController.h"
-
-using AVT::VmbAPI::Examples::ApiController;
-
-class SynchronousGrab : public QMainWindow
-{
-    Q_OBJECT
-
-public:
-    SynchronousGrab(QWidget *parent = 0, Qt::WindowFlags flags = 0);
-    ~SynchronousGrab();
-
-private:
-    Ui::SynchronousGrabClass    ui;
-    // Our controller that wraps API access
-    ApiController *             m_pApiController;
-    // A list of known camera IDs
-    std::vector<std::string>    m_cameras;
-    // Are we streaming?
-    bool                        m_bIsStreaming;
-    
-    //
-    // Queries and lists all known camera
-    //
-    void UpdateCameraListBox();
-    
-    //
-    // Prints out a given logging string, error code and the descriptive representation of that error code
-    //
-    // Parameters:
-    //  [in]    strMsg          A given message to be printed out
-    //  [in]    eErr            The API status code
-    //
-    void Log( std::string strMsg, VmbErrorType eErr );
-    
-    //
-    // Prints out a given logging string
-    //
-    // Parameters:
-    //  [in]    strMsg          A given message to be printed out
-    //
-    void Log( std::string strMsg );
-
-    //
-    // Copies the content of a byte buffer to a Qt image with respect to the image's alignment
-    //
-    // Parameters:
-    //  [in]    pInbuffer       The byte buffer as received from the cam
-    //  [out]   OutImage        The filled Qt image
-    //
-    void CopyToImage( VmbUchar_t *pInBuffer, QImage &OutImage );
-
-private slots:
-    void OnBnClickedButtonStartstop();
-    
-    //
-    // This event handler (Qt slot) is triggered through a Qt signal posted by the camera observer
-    //
-    // Parameters:
-    //  [in]    reason          The reason why the callback of the observer was triggered (plug-in, plug-out, ...)
-    //
-    void OnCameraListChanged( int reason );    
-};
-
-#endif // SYNCHRONOUSGRABQT_H
diff --git a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/main.cpp b/VimbaCPP/Examples/SynchronousGrab/Qt/Source/main.cpp
deleted file mode 100644
index e6200b651aa8cccd06aa1c822eb1ab843531de9d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/main.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        main.cpp
-
-  Description: The main entry point of the SynchronousGrab example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "SynchronousGrab.h"
-#include <QApplication>
-
-int main(int argc, char *argv[])
-{
-    QApplication    a(argc, argv);
-    SynchronousGrab w;
-    w.show();
-    return a.exec();
-}
diff --git a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/res/SynchronousGrab.png b/VimbaCPP/Examples/SynchronousGrab/Qt/Source/res/SynchronousGrab.png
deleted file mode 100644
index 61642b4ad7c0f625df459957d802053437705d9b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/res/SynchronousGrab.png and /dev/null differ
diff --git a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/res/SynchronousGrab.qrc b/VimbaCPP/Examples/SynchronousGrab/Qt/Source/res/SynchronousGrab.qrc
deleted file mode 100644
index ba3a2dd2a7cc095a1da00775a36ceca508d80402..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/res/SynchronousGrab.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
-    <qresource prefix="/SynchronousGrabQt">
-        <file>SynchronousGrab.png</file>
-    </qresource>
-</RCC>
diff --git a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/res/SynchronousGrab.ui b/VimbaCPP/Examples/SynchronousGrab/Qt/Source/res/SynchronousGrab.ui
deleted file mode 100644
index ac7d5e15db218ee93e0193a3c9bc64be24be7c91..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/SynchronousGrab/Qt/Source/res/SynchronousGrab.ui
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>SynchronousGrabClass</class>
- <widget class="QMainWindow" name="SynchronousGrabClass">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>1040</width>
-    <height>780</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>1040</width>
-    <height>780</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>1040</width>
-    <height>780</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>SynchronousGrab (Qt version)</string>
-  </property>
-  <property name="windowIcon">
-   <iconset resource="SynchronousGrab.qrc">
-    <normaloff>:/SynchronousGrabQt/SynchronousGrab.png</normaloff>:/SynchronousGrabQt/SynchronousGrab.png</iconset>
-  </property>
-  <widget class="QWidget" name="centralWidget">
-   <widget class="QListWidget" name="m_ListBoxCameras">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>10</y>
-      <width>261</width>
-      <height>521</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QListWidget" name="m_ListLog">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>580</y>
-      <width>1041</width>
-      <height>191</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QPushButton" name="m_ButtonStartStop">
-    <property name="geometry">
-     <rect>
-      <x>0</x>
-      <y>540</y>
-      <width>261</width>
-      <height>31</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>Acquire Single Image</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="m_LabelStream">
-    <property name="geometry">
-     <rect>
-      <x>270</x>
-      <y>10</y>
-      <width>771</width>
-      <height>561</height>
-     </rect>
-    </property>
-    <property name="sizePolicy">
-     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-      <horstretch>0</horstretch>
-      <verstretch>0</verstretch>
-     </sizepolicy>
-    </property>
-    <property name="text">
-     <string/>
-    </property>
-   </widget>
-  </widget>
- </widget>
- <layoutdefault spacing="6" margin="11"/>
- <resources>
-  <include location="SynchronousGrab.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/VimbaCPP/Examples/UserSet/Build/Make/Makefile b/VimbaCPP/Examples/UserSet/Build/Make/Makefile
deleted file mode 100644
index 3b6e05de3e32cf59489b913f1fc303f7ed8c658b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/UserSet/Build/Make/Makefile
+++ /dev/null
@@ -1,50 +0,0 @@
-PROJECT_NAME            = UserSet
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-                      -I$(EXAMPLES_DIR) \
-
-LIBS                = $(VIMBACPP_LIBS)
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-                      $(VIMBACPP_CFLAGS)
-
-OBJ_FILES           = $(OBJ_DIR)/UserSet.o \
-					  $(OBJ_DIR)/program.o
-
-DEPENDENCIES        = VimbaCPP
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
\ No newline at end of file
diff --git a/VimbaCPP/Examples/UserSet/Source/Exception.h b/VimbaCPP/Examples/UserSet/Source/Exception.h
deleted file mode 100644
index ccf2ba9470a0d00f316cbf546bbcd0693f899e7e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/UserSet/Source/Exception.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Exception.h
-
-  Description: Helper for exceptions.
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_EXCEPTION
-#define AVT_VMBAPI_EXAMPLES_EXCEPTION
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-#include "Common/ErrorCodeToMessage.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class Exception: public std::exception
-{
-private:
-    std::string m_sMsg;
-    // Vimba error code
-    VmbErrorType      m_eError;
-public:
-    Exception( const std::string &rsMessage, const VmbErrorType eError )
-    : m_eError(eError)
-    {
-        try
-        {
-            m_sMsg =  rsMessage ;
-        }catch(...) {}
-    }
-    
-    virtual ~Exception() throw()
-    {
-    }
-
-    VmbErrorType GetError() const
-    {
-        return m_eError;
-    }
-
-    std::string GetMessageStr() const
-    {
-        return m_sMsg;
-    }
-
-    // Translates Vimba error codes to readable error messages
-    static std::string ErrorCodeToMessage( VmbErrorType eErr )
-    {
-        return AVT::VmbAPI::Examples::ErrorCodeToMessage( eErr );
-    }
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/UserSet/Source/UserSet.cpp b/VimbaCPP/Examples/UserSet/Source/UserSet.cpp
deleted file mode 100644
index 7ccd6ca28db06a33468b612fe388926f868486e8..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/UserSet/Source/UserSet.cpp
+++ /dev/null
@@ -1,299 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        UserSet.cpp
-
-  Description: The UserSet example will demonstrate how deal with the user sets
-               stored inside the cameras using VimbaCPP.
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <string>
-#include <sstream>
-#include <vector>
-
-#include "UserSet.h"
-#include "Exception.h"
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-CameraPtr                   UserSetCollection::m_pCamera;
-std::vector<UserSetControl> UserSetCollection::m_usersets;
-
-UserSetCollection::UserSetCollection( CameraPtr pCamera )
-{
-    //Check parameters
-    if ( NULL == pCamera )
-    {
-        throw Exception( "UserSetCollection failed.", VmbErrorBadParameter );
-    }
-
-    m_pCamera = pCamera;
-
-    VmbErrorType err = VmbErrorSuccess;
-
-    VmbInt64_t nCount;
-    err = GetCount ( nCount );
-    if ( VmbErrorSuccess == err )
-    {
-        m_usersets.reserve( (size_t)nCount );
-    }
-
-    if ( VmbErrorSuccess == err )
-    {
-        for ( int i = 0; i < nCount; i++ )
-        {
-            AVT::VmbAPI::Examples::UserSetControl control( m_pCamera, i ) ;
-            m_usersets.push_back( control );
-        }
-    }
-
-    if ( VmbErrorSuccess  != err )
-    {
-        throw Exception( "UserSetCollection failed.", err );
-    }
-}
-
-//Get user set count
-VmbErrorType UserSetCollection::GetCount ( VmbInt64_t& rCount )
-{
-    VmbErrorType                err = VmbErrorSuccess;
-
-    FeaturePtr                  pFeature;
-    AVT::VmbAPI::StringVector   selector;
-
-    err = m_pCamera->GetFeatureByName ( "UserSetSelector", pFeature );
-
-    if ( VmbErrorSuccess == err )
-    {
-        err = pFeature->GetValues ( selector );
-        rCount = selector.size();
-    }
-
-    return err;
-}
-
-//Get user set control
-VmbErrorType UserSetCollection::GetControl ( VmbInt64_t nIndex, UserSetControl& rUserSet )
-{
-    VmbErrorType    err = VmbErrorSuccess;
-
-    VmbInt64_t      nCount;
-    err = GetCount ( nCount );
-    if ( VmbErrorSuccess == err )
-    {
-        if ( nIndex >= nCount )
-        {
-            err = VmbErrorBadParameter;
-        }
-
-        FeaturePtr pFeature;
-
-        //Access to user set changes the selector
-        if ( VmbErrorSuccess == err )
-        {
-            err = m_pCamera->GetFeatureByName( "UserSetSelector", pFeature );
-        }
-
-        if(VmbErrorSuccess == err)
-        {
-            err = pFeature->SetValue( nIndex );
-        }
-
-        if(VmbErrorSuccess == err)
-        {
-            rUserSet = m_usersets[ (size_t)nIndex ];
-        }
-    }
-
-    return err;
-}
-
-//Get selected user set index
-VmbErrorType UserSetCollection::GetSelectedIndex ( VmbInt64_t& rIndex )
-{
-    VmbErrorType    err = VmbErrorSuccess;
-
-    FeaturePtr      pFeature;
-
-    err = m_pCamera->GetFeatureByName ( "UserSetSelector", pFeature );
-
-    if ( VmbErrorSuccess == err )
-    {
-        err = pFeature->GetValue ( rIndex );
-    }
-
-    return err;
-}
-
-//Get default user set index
-VmbErrorType UserSetCollection::GetDefaultIndex ( VmbInt64_t& rDefaultIndex )
-{
-    VmbErrorType    err = VmbErrorSuccess;
-
-    FeaturePtr      pFeature;
-
-    err = m_pCamera->GetFeatureByName ( "UserSetDefaultSelector", pFeature );
-
-    if ( VmbErrorSuccess == err )
-    {
-        err = pFeature->GetValue ( rDefaultIndex );
-    }
-
-    return err;
-}
-
-UserSetControl::UserSetControl( CameraPtr pCamera, VmbInt64_t nIndex )
-{
-    //Check parameters
-    if ( NULL == pCamera )
-    {
-        throw Exception( "UserSetControl failed.", VmbErrorBadParameter );
-    }
-
-    m_pCamera = pCamera;
-    m_nIndex = nIndex;
-}
-
-//Is user set default
-VmbErrorType UserSetControl::IsDefault ( bool& bIsDefault )
-{
-    bIsDefault = false;
-
-    VmbErrorType    err = VmbErrorSuccess;
-
-    FeaturePtr      pFeature;
-
-    err = m_pCamera->GetFeatureByName( "UserSetDefaultSelector", pFeature );
-
-    VmbInt64_t      nDefaultIndex;
-    if(VmbErrorSuccess == err)
-    {
-        err = pFeature->GetValue( nDefaultIndex );
-    }
-
-    if(VmbErrorSuccess == err)
-    {
-        if ( nDefaultIndex == m_nIndex )
-        {
-            bIsDefault = true;
-        }
-    }
-
-    return err;
-}
-
-//Make user set default
-VmbErrorType UserSetControl::MakeDefault ()
-{
-    VmbErrorType    err = VmbErrorSuccess;
-
-    FeaturePtr      pFeature;
-
-    err = m_pCamera->GetFeatureByName( "UserSetDefaultSelector", pFeature );
-    if ( VmbErrorNotFound == err )
-    {
-        err = m_pCamera->GetFeatureByName ( "UserSetMakeDefault", pFeature );
-        if(VmbErrorSuccess == err)
-        {
-            err = pFeature->RunCommand();
-        }
-    }
-    else if(VmbErrorSuccess == err)
-    {
-        err = pFeature->SetValue( m_nIndex );
-    }
-
-    return err;
-}
-
-//Save user set to flash
-VmbErrorType UserSetControl::SaveToFlash ()
-{
-    VmbErrorType    err = VmbErrorSuccess;
-
-    FeaturePtr      pFeature;
-
-    err = m_pCamera->GetFeatureByName( "UserSetSave", pFeature );
-    if(VmbErrorSuccess == err)
-    {
-        err = pFeature->RunCommand();
-    }
-
-    return err;
-}
-
-//Load user set from flash
-VmbErrorType UserSetControl::LoadFromFlash ()
-{
-    VmbErrorType    err = VmbErrorSuccess;
-
-    FeaturePtr      pFeature;
-
-    err = m_pCamera->GetFeatureByName( "UserSetLoad", pFeature );
-    if(VmbErrorSuccess == err)
-    {
-        err = pFeature->RunCommand();
-    }
-
-    return err;
-}
-
-//Get user set operation result
-VmbErrorType UserSetControl::GetOperationResult( VmbInt64_t& nResult )
-{
-    VmbErrorType    err = VmbErrorSuccess;
-
-    FeaturePtr      pFeature;
-
-    err = m_pCamera->GetFeatureByName( "UserSetOperationResult", pFeature );
-    if(VmbErrorSuccess == err)
-    {
-        err = pFeature->GetValue( nResult );
-    }
-
-    return err;
-}
-
-//Get user set operation status
-VmbErrorType UserSetControl::GetOperationStatus( VmbInt64_t& nStatus )
-{
-    VmbErrorType    err = VmbErrorSuccess;
-
-    FeaturePtr      pFeature;
-
-    err = m_pCamera->GetFeatureByName( "UserSetOperationStatus", pFeature );
-    if(VmbErrorSuccess == err)
-    {
-        err = pFeature->GetValue( nStatus );
-    }
-
-    return err;
-}
-
-
-}}} // namespace AVT::VmbAPI::Examples
-
diff --git a/VimbaCPP/Examples/UserSet/Source/UserSet.h b/VimbaCPP/Examples/UserSet/Source/UserSet.h
deleted file mode 100644
index 87320d7dcc096ad1354de7b32b34d7da8693d375..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/UserSet/Source/UserSet.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        UserSet.h
-
-  Description: The UserSet example will demonstrate how deal with the user sets
-               stored inside the cameras.
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_EXAMPLES_USERSET
-#define AVT_VMBAPI_EXAMPLES_USERSET
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-
-namespace AVT {
-namespace VmbAPI {
-namespace Examples {
-
-class UserSetControl
-{
-private:
-    CameraPtr   m_pCamera;
-    VmbInt64_t  m_nIndex;
-
-public:
-    
-    //ctor
-    UserSetControl( CameraPtr pCamera, VmbInt64_t nIndex );
-
-    //Is user set default
-    VmbErrorType IsDefault ( bool& bIsDefault );
-
-    //Make user set default
-    VmbErrorType MakeDefault ();
-
-    //Save current camera settings to user set
-    VmbErrorType SaveToFlash ();
-
-    //Load settings from user set into the camera
-    VmbErrorType LoadFromFlash ();
-
-    //Get operation result
-    VmbErrorType GetOperationResult( VmbInt64_t& nResult );
-
-    //Get operation status
-    VmbErrorType GetOperationStatus( VmbInt64_t& nStatus );
-};
-
-class UserSetCollection
-{
-private:
-    static CameraPtr                    m_pCamera;
-    static std::vector<UserSetControl>  m_usersets;
-
-public:
-    //ctor
-    UserSetCollection( CameraPtr pCamera );
-
-    //Get count
-    static VmbErrorType GetCount ( VmbInt64_t& nCount );
-    
-    //Get control
-    static VmbErrorType GetControl ( VmbInt64_t nIndex, UserSetControl& control );
-
-    //Get selected index
-    static VmbErrorType GetSelectedIndex ( VmbInt64_t& nIndex );
-
-    //Get default index
-    static VmbErrorType GetDefaultIndex ( VmbInt64_t& nDefaultIndex );
-};
-
-}}} // namespace AVT::VmbAPI::Examples
-
-#endif
diff --git a/VimbaCPP/Examples/UserSet/Source/program.cpp b/VimbaCPP/Examples/UserSet/Source/program.cpp
deleted file mode 100644
index 31c516a6db321887426763f29153b6b3b9c18e0e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/UserSet/Source/program.cpp
+++ /dev/null
@@ -1,518 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        program.cpp
-
-  Description: Main entry point of UserSet example of VimbaCPP.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <iostream>
-#include <cstring>
-#include <cstdlib>
-
-#include "UserSet.h"
-#include "Exception.h"
-
-#include "Common/StreamSystemInfo.h"
-
-enum Mode
-{
-    ModeUnknown         = 0,
-    ModeSave            = 1,
-    ModeLoad            = 2,
-    ModeCount           = 3,
-    ModeIndex           = 4,
-    ModeMakeDefault     = 5,
-    ModeIsDefault       = 6,
-    ModeOperationResult = 7,
-    ModeOperationStatus = 8,
-};
-
-bool StartsWith( const char *pString, const char *pStart )
-{
-    if( NULL == pString )
-    {
-        return false;
-    }
-    if( NULL == pStart )
-    {
-        return false;
-    }
-
-    if( std::strlen(pString) < std::strlen(pStart) )
-    {
-        return false;
-    }
-
-    if( std::memcmp(pString, pStart, std::strlen(pStart)) != 0 )
-    {
-        return false;
-    }
-
-    return true;
-}
-
-int main( int argc, char* argv[] )
-{
-    std::cout << "//////////////////////////////////" << std::endl;
-    std::cout << "/// Vimba API User Set Example ///" << std::endl;
-    std::cout << "//////////////////////////////////" << std::endl << std::endl;
-
-    VmbErrorType err = VmbErrorSuccess;
-
-    std::string     cameraID;
-    std::string     controlIndex;
-    Mode            eMode           = ModeUnknown; 
-    bool            printHelp       = false;
-
-    //////////////////////
-    //Parse command line//
-    //////////////////////
-
-    for(int i = 1; i < argc; i++)
-    {
-        char *pParameter = argv[i];
-        if( std::strlen( pParameter ) < 0 )
-        {
-            err = VmbErrorBadParameter;
-            break;
-        }
-
-        if( pParameter[0] == '/' )
-        {
-            if( std::strcmp( pParameter, "/s" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeSave;
-            }
-            else if( std::strcmp( pParameter, "/l" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeLoad;
-            }
-            else if( std::strcmp( pParameter, "/n" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeCount;
-            }
-            else if( std::strcmp( pParameter, "/i" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeIndex;
-            }
-            else if( StartsWith( pParameter, "/i:" ))
-            {
-                if( controlIndex.empty() == false )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                controlIndex = pParameter + 3;
-                if( controlIndex.size() <= 0 )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-            }
-            else if( std::strcmp( pParameter, "/m" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeMakeDefault;
-            }
-            else if( std::strcmp( pParameter, "/d" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeIsDefault;
-            }
-            else if( std::strcmp( pParameter, "/or" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeOperationResult;
-            }
-            else if( std::strcmp( pParameter, "/os" ) == 0 )
-            {
-                if( ModeUnknown != eMode )
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                eMode = ModeOperationStatus;
-            }
-            else if( std::strcmp( pParameter, "/h" ) == 0 )
-            {
-                if(     (cameraID.empty() == false)
-                    ||  (ModeUnknown != eMode)
-                    ||  (true == printHelp))
-                {
-                    err = VmbErrorBadParameter;
-                    break;
-                }
-
-                printHelp = true;
-            }
-            else
-            {
-                err = VmbErrorBadParameter;
-                break;
-            }
-        }
-        else
-        {
-            if( cameraID.empty() == false )
-            {
-                err = VmbErrorBadParameter;
-                break;
-            }
-
-            cameraID = pParameter;
-        }
-    }
-
-    //Write out an error if we could not parse the command line
-    if( VmbErrorBadParameter == err )
-    {
-        std::cout << "Invalid parameters!\n\n";
-        printHelp = true;
-    }
-
-    //Print out help and end program
-    if( true == printHelp )
-    {
-        std::cout << "Usage: UserSet [CameraID] [/i:Index] [/h] [/{s|l|i|m|d|or|os|n}]\n";
-        std::cout << "Parameters:   CameraID       ID of the camera to use\n";
-        std::cout << "                             (using first camera if not specified)\n";
-        std::cout << "              /i:Index       Set user set index\n";
-        std::cout << "              /h             Print out help\n";
-        std::cout << "              /s             Save user set to flash\n";
-        std::cout << "              /l             Load user set from flash\n";
-        std::cout << "                             (default if not specified)\n";
-        std::cout << "              /i             Get selected user set index\n";
-        std::cout << "              /m             Make user set default\n";
-        std::cout << "              /d             Is user set default\n";
-        std::cout << "              /or            Get user set operation result\n";
-        std::cout << "              /os            Get user set operation status\n";
-        std::cout << "              /n             Get user set count\n\n";
-        std::cout << "For example to load user set 0 (factory set) from flash in order to\nactivate it call\n";
-        std::cout << "UserSet /i:0 /l\n\n" ;
-        std::cout << "To save the current settings to user set 1 call\n";
-        std::cout << "UserSet /i:1 /s\n\n";
-
-        return err;
-    }
-
-    bool                        bVimbaStarted   = false;
-    AVT::VmbAPI::CameraPtr      pCamera;
-    AVT::VmbAPI::VimbaSystem *  pVimbaSystem    = NULL;
-
-    try
-    {
-        // Get a pointer to the VimbaSystem singleton
-        pVimbaSystem = &AVT::VmbAPI::VimbaSystem::GetInstance();
-        
-        // Print out version of Vimba
-        std::cout<<"Vimba C++ API Version "<<*pVimbaSystem<<"\n";
-
-        //Startup API
-        if( VmbErrorSuccess == err )
-        {
-            err = pVimbaSystem->Startup();
-            if( VmbErrorSuccess != err )
-            {
-                throw AVT::VmbAPI::Examples::Exception( "Could not start system.", err );
-            }
-            bVimbaStarted = true;
-        }
-
-        //Open camera
-        if( VmbErrorSuccess == err )
-        {
-            if( cameraID.empty() )
-            {
-                //Open first available camera
-
-                //Fetch all cameras known to Vimba
-                AVT::VmbAPI::CameraPtrVector cameras;
-                err = pVimbaSystem->GetCameras(cameras);
-                if( VmbErrorSuccess == err )
-                {
-                    if( cameras.size() > 0 )
-                    {
-                        for (   AVT::VmbAPI::CameraPtrVector::const_iterator iter = cameras.begin();
-                                cameras.end() != iter;
-                                ++iter )
-                        {
-                            //Check if we can open the camera in full mode
-                            VmbAccessModeType eAccessMode = VmbAccessModeNone;
-                            err = (*iter)->GetPermittedAccess( eAccessMode );
-                            if( VmbErrorSuccess == err )
-                            {
-                                if( (VmbAccessModeFull == (VmbAccessModeFull & eAccessMode)) ||
-                                    ((cameras.end() - 1) == iter) )
-                                {
-                                    //Now get the camera ID
-                                    err = (*iter)->GetID(cameraID);
-                                    if(VmbErrorSuccess == err)
-                                    {
-                                        //Try to open the camera
-                                        err = (*iter)->Open(VmbAccessModeFull);
-                                        if(VmbErrorSuccess == err)
-                                        {
-                                            pCamera = *iter;
-                                            break;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-
-                        if( VmbErrorSuccess != err )
-                        {
-                            err = VmbErrorNotFound;
-                            throw AVT::VmbAPI::Examples::Exception("Could not open any camera.", err);
-                        }
-                    }
-                    else
-                    {
-                        err = VmbErrorNotFound;
-                        throw AVT::VmbAPI::Examples::Exception("Could not open any camera.", err);
-                    }
-                }
-                else
-                {
-                    throw AVT::VmbAPI::Examples::Exception("Could not list cameras.", err);
-                }
-            }
-            else
-            {
-                //Open specific camera
-                err = pVimbaSystem->OpenCameraByID(cameraID.c_str(), VmbAccessModeFull, pCamera);
-                if( VmbErrorSuccess != err )
-                {
-                    throw AVT::VmbAPI::Examples::Exception("Could not open camera.", err);
-                }
-            }
-        }
-
-        if( VmbErrorSuccess == err )
-        {
-            std::cout << "Camera ID: " << cameraID << std::endl << std::endl;
-
-            AVT::VmbAPI::Examples::UserSetCollection collection( pCamera );
-
-            VmbInt64_t nIndex;
-
-            if ( controlIndex.empty() == false )
-            {
-                nIndex = atoi( controlIndex.c_str() );
-            }
-            else
-            {
-                err = collection.GetSelectedIndex( nIndex );
-                if( VmbErrorSuccess != err )
-                {
-                    throw AVT::VmbAPI::Examples::Exception( "Could not get selected user set index.", err );
-                }
-            }
-
-            AVT::VmbAPI::Examples::UserSetControl control( pCamera, nIndex );
-            if ( (ModeCount != eMode) && (ModeIndex != eMode) )
-            {
-                err = collection.GetControl( nIndex, control );
-                if( VmbErrorSuccess != err )
-                {
-                    throw AVT::VmbAPI::Examples::Exception( "Could not get user set control.", err );
-                }
-            }
-
-            switch( eMode )
-            {
-            default:
-            case ModeLoad:
-                {
-                    //Load user set
-                    err = control.LoadFromFlash();
-                    if( VmbErrorSuccess != err )
-                    {
-                        throw AVT::VmbAPI::Examples::Exception( "Could not load user set from flash.", err );
-                    }
-
-                    std::cout << "User set successfully loaded from flash." << std::endl;
-                }
-                break;
-
-            case ModeSave:
-                {
-                    //Save user set
-                    err = control.SaveToFlash();
-                    if( VmbErrorSuccess != err )
-                    {
-                        throw AVT::VmbAPI::Examples::Exception( "Could not save user set to flash.", err );
-                    }
-
-                    std::cout << "User set successfully saved to flash." << std::endl;
-                }
-                break;
-
-            case ModeCount:
-                {
-                    //Get user set count
-                    VmbInt64_t nCount;
-                    err = collection.GetCount( nCount );
-                    if( VmbErrorSuccess != err )
-                    {
-                        throw AVT::VmbAPI::Examples::Exception( "Could not get user set count.", err );
-                    }
-
-                    std::cout << "Get user set count was successful. Count = " << nCount << std::endl;
-                }
-                break;
-
-            case ModeIndex:
-                {
-                    //Get selected user set index
-                    VmbInt64_t nSelectedIndex;
-                    err = collection.GetSelectedIndex( nSelectedIndex );
-                    if( VmbErrorSuccess != err )
-                    {
-                        throw AVT::VmbAPI::Examples::Exception( "Could not get user set index.", err );
-                    }
-
-                    std::cout << "Get selected user set was successful. Index = " << nSelectedIndex << std::endl;
-                }
-                break;
-
-            case ModeMakeDefault:
-                {
-                    err = control.MakeDefault();
-
-                    if( VmbErrorSuccess != err )
-                    {
-                        throw AVT::VmbAPI::Examples::Exception( "Could not set user set default.", err );
-                    }
-
-                    std::cout << "Make user set default was successful. " << std::endl;
-                }
-                break;
-
-            case ModeIsDefault:
-                {
-                    bool bIsDefault = false;
-                    if( VmbErrorSuccess == err )
-                    {
-                        err = control.IsDefault( bIsDefault );
-                    }
-
-                    if( VmbErrorSuccess != err )
-                    {
-                        throw AVT::VmbAPI::Examples::Exception( "Could not get user set default.", err );
-                    }
-
-                    std::cout << "Is user set default was successful. Result = " << bIsDefault << std::endl;
-                }
-                break;
-
-
-            case ModeOperationResult:
-                {
-                    VmbInt64_t nResult;
-                    err = control.GetOperationResult( nResult );
-                    if( VmbErrorSuccess != err )
-                    {
-                        throw AVT::VmbAPI::Examples::Exception( "Could not get user set opration result.", err );
-                    }
-                        
-                    std::cout << "Get user set operation result was successful. Operation Result = " << nResult << std::endl;
-                }
-                break;
-            case ModeOperationStatus:
-                {
-                    VmbInt64_t nStatus;
-                    err = control.GetOperationStatus( nStatus );
-                    if( VmbErrorSuccess != err )
-                    {
-                        throw AVT::VmbAPI::Examples::Exception( "Could not get user set operation status.", err );
-                    }
-
-                    std::cout << "Get user set operation status was successful. Operation Status = " << nStatus << std::endl;
-                }
-                break;
-
-            }
-        }
-    }
-
-    catch( AVT::VmbAPI::Examples::Exception& ex )
-    {
-        std::cout << ex.GetMessageStr() << " VimbaException: " << ex.GetError() << " = " << ex.ErrorCodeToMessage( ex.GetError() ) << std::endl;
-    }
-
-    //Close camera
-    if( NULL != pCamera )
-    {
-        pCamera->Close();
-    }
-    
-    //Shutdown API
-    if(true == bVimbaStarted)
-    {
-        pVimbaSystem->Shutdown();
-    }
-
-    return err;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Build/Make/Makefile b/VimbaCPP/Examples/VimbaViewer/Build/Make/Makefile
deleted file mode 100644
index e9ab11b35a807e67715d24f29ecfd7d91c1d732a..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Build/Make/Makefile
+++ /dev/null
@@ -1,301 +0,0 @@
-PROJECT_NAME            = VimbaViewer
-
-PROJECT_DIR             = ../..
-EXAMPLES_DIR            = $(PROJECT_DIR)/..
-VIMBASDK_DIR			= $(EXAMPLES_DIR)/../..
-MAKE_INCLUDE_DIR        = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
-
-include $(MAKE_INCLUDE_DIR)/Common.mk
-
-CONFIG_DIR          = $(ARCH)_$(WORDSIZE)bit
-BIN_FILE            = $(PROJECT_NAME)
-BIN_DIR             = binary/$(CONFIG_DIR)
-OBJ_DIR             = object/$(CONFIG_DIR)
-BIN_PATH            = $(BIN_DIR)/$(BIN_FILE)
-
-all: $(BIN_PATH)
-
-include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
-include $(MAKE_INCLUDE_DIR)/VimbaImageTransform.mk
-include $(MAKE_INCLUDE_DIR)/Qt.mk
-
-SOURCE_DIR          = $(PROJECT_DIR)/Source
-INCLUDE_DIRS        = -I$(SOURCE_DIR) \
-					  -I$(SOURCE_DIR)/UI \
-					  -I$(SOURCE_DIR)/UI/Histogram \
-					  -I$(SOURCE_DIR)/UI/HexEditor \
-					  -I$(SOURCE_DIR)/ExternLib/qwt \
-					  -I$(SOURCE_DIR)/ExternLib/qwt \
-					  -I$(OBJ_DIR)
-
-LIBS                = $(VIMBACPP_LIBS) \
-					  $(VIMBAIMAGETRANSFORM_LIBS) \
-					  $(QTCORE_LIBS) \
-					  $(QTGUI_LIBS) \
-					  $(QTSVG_LIBS) \
-					  -lrt
-
-DEFINES             =
-
-CFLAGS              = $(COMMON_CFLAGS) \
-					  $(VIMBAIMAGETRANSFORM_CFLAGS) \
-                      $(VIMBACPP_CFLAGS) \
-                      $(QTCORE_CFLAGS) \
-                      $(QTGUI_CFLAGS) \
-                      $(QTSVG_CFLAGS)
-
-OBJ_FILES			= $(OBJ_DIR)/ActionCommand.o \
-                      $(OBJ_DIR)/CameraObserver.o \
-					  $(OBJ_DIR)/FeatureObserver.o \
-					  $(OBJ_DIR)/FrameObserver.o \
-					  $(OBJ_DIR)/Helper.o \
-					  $(OBJ_DIR)/Main.o \
-					  $(OBJ_DIR)/MainWindow.o \
-					  $(OBJ_DIR)/SplashScreen.o \
-					  $(OBJ_DIR)/ViewerWindow.o \
-					  $(OBJ_DIR)/ImageSaver.o \
-                      $(OBJ_DIR)/ImageWriter.o \
-					  $(OBJ_DIR)/ForceIP.o \
-				      $(OBJ_DIR)/qwt_abstract_legend.o \
-					  $(OBJ_DIR)/qwt_abstract_scale.o \
-					  $(OBJ_DIR)/qwt_abstract_scale_draw.o \
-					  $(OBJ_DIR)/qwt_abstract_slider.o \
-					  $(OBJ_DIR)/qwt_analog_clock.o \
-					  $(OBJ_DIR)/qwt_arrow_button.o \
-					  $(OBJ_DIR)/qwt_clipper.o \
-					  $(OBJ_DIR)/qwt_color_map.o \
-					  $(OBJ_DIR)/qwt_column_symbol.o \
-					  $(OBJ_DIR)/qwt_compass.o \
-					  $(OBJ_DIR)/qwt_compass_rose.o \
-					  $(OBJ_DIR)/qwt_counter.o \
-					  $(OBJ_DIR)/qwt_curve_fitter.o \
-					  $(OBJ_DIR)/qwt_date.o \
-					  $(OBJ_DIR)/qwt_date_scale_draw.o \
-					  $(OBJ_DIR)/qwt_date_scale_engine.o \
-					  $(OBJ_DIR)/qwt_dial.o \
-					  $(OBJ_DIR)/qwt_dial_needle.o \
-					  $(OBJ_DIR)/qwt_dyngrid_layout.o \
-					  $(OBJ_DIR)/qwt_event_pattern.o \
-					  $(OBJ_DIR)/qwt_graphic.o \
-					  $(OBJ_DIR)/qwt_interval.o \
-					  $(OBJ_DIR)/qwt_interval_symbol.o \
-					  $(OBJ_DIR)/qwt_knob.o \
-					  $(OBJ_DIR)/qwt_legend.o \
-					  $(OBJ_DIR)/qwt_legend_data.o \
-					  $(OBJ_DIR)/qwt_legend_label.o \
-					  $(OBJ_DIR)/qwt_magnifier.o \
-					  $(OBJ_DIR)/qwt_math.o \
-					  $(OBJ_DIR)/qwt_matrix_raster_data.o \
-					  $(OBJ_DIR)/qwt_null_paintdevice.o \
-					  $(OBJ_DIR)/qwt_painter.o \
-					  $(OBJ_DIR)/qwt_painter_command.o \
-					  $(OBJ_DIR)/qwt_panner.o \
-					  $(OBJ_DIR)/qwt_picker.o \
-					  $(OBJ_DIR)/qwt_picker_machine.o \
-					  $(OBJ_DIR)/qwt_pixel_matrix.o \
-					  $(OBJ_DIR)/qwt_plot_axis.o \
-					  $(OBJ_DIR)/qwt_plot_canvas.o \
-					  $(OBJ_DIR)/qwt_plot.o \
-					  $(OBJ_DIR)/qwt_plot_abstract_barchart.o \
-					  $(OBJ_DIR)/qwt_plot_barchart.o \
-					  $(OBJ_DIR)/qwt_plot_curve.o \
-					  $(OBJ_DIR)/qwt_plot_dict.o \
-					  $(OBJ_DIR)/qwt_plot_directpainter.o \
-					  $(OBJ_DIR)/qwt_plot_grid.o \
-					  $(OBJ_DIR)/qwt_plot_histogram.o \
-					  $(OBJ_DIR)/qwt_plot_intervalcurve.o \
-					  $(OBJ_DIR)/qwt_plot_item.o \
-					  $(OBJ_DIR)/qwt_plot_layout.o \
-					  $(OBJ_DIR)/qwt_plot_legenditem.o \
-					  $(OBJ_DIR)/qwt_plot_magnifier.o \
-					  $(OBJ_DIR)/qwt_plot_marker.o \
-					  $(OBJ_DIR)/qwt_plot_multi_barchart.o \
-					  $(OBJ_DIR)/qwt_plot_panner.o \
-					  $(OBJ_DIR)/qwt_plot_picker.o \
-					  $(OBJ_DIR)/qwt_plot_rasteritem.o \
-					  $(OBJ_DIR)/qwt_plot_renderer.o \
-					  $(OBJ_DIR)/qwt_plot_rescaler.o \
-					  $(OBJ_DIR)/qwt_plot_scaleitem.o \
-					  $(OBJ_DIR)/qwt_plot_seriesitem.o \
-					  $(OBJ_DIR)/qwt_plot_shapeitem.o \
-					  $(OBJ_DIR)/qwt_plot_spectrocurve.o \
-					  $(OBJ_DIR)/qwt_plot_spectrogram.o \
-					  $(OBJ_DIR)/qwt_plot_svgitem.o \
-					  $(OBJ_DIR)/qwt_plot_textlabel.o \
-					  $(OBJ_DIR)/qwt_plot_tradingcurve.o \
-					  $(OBJ_DIR)/qwt_plot_xml.o \
-					  $(OBJ_DIR)/qwt_plot_zoneitem.o \
-					  $(OBJ_DIR)/qwt_plot_zoomer.o \
-					  $(OBJ_DIR)/qwt_point_3d.o \
-					  $(OBJ_DIR)/qwt_point_data.o \
-					  $(OBJ_DIR)/qwt_point_mapper.o \
-					  $(OBJ_DIR)/qwt_point_polar.o \
-					  $(OBJ_DIR)/qwt_raster_data.o \
-					  $(OBJ_DIR)/qwt_round_scale_draw.o \
-					  $(OBJ_DIR)/qwt_sampling_thread.o \
-					  $(OBJ_DIR)/qwt_scale_div.o \
-					  $(OBJ_DIR)/qwt_scale_draw.o \
-					  $(OBJ_DIR)/qwt_scale_engine.o \
-					  $(OBJ_DIR)/qwt_scale_map.o \
-					  $(OBJ_DIR)/qwt_scale_widget.o \
-					  $(OBJ_DIR)/qwt_series_data.o \
-					  $(OBJ_DIR)/qwt_slider.o \
-					  $(OBJ_DIR)/qwt_spline.o \
-					  $(OBJ_DIR)/qwt_symbol.o \
-					  $(OBJ_DIR)/qwt_system_clock.o \
-					  $(OBJ_DIR)/qwt_text.o \
-					  $(OBJ_DIR)/qwt_text_engine.o \
-					  $(OBJ_DIR)/qwt_text_label.o \
-					  $(OBJ_DIR)/qwt_thermo.o \
-					  $(OBJ_DIR)/qwt_transform.o \
-					  $(OBJ_DIR)/qwt_wheel.o \
-					  $(OBJ_DIR)/qwt_widget_overlay.o \
-					  $(OBJ_DIR)/CameraTreeWindow.o \
-					  $(OBJ_DIR)/ControllerTreeWindow.o \
-					  $(OBJ_DIR)/LineEditCompleter.o \
-					  $(OBJ_DIR)/MultiCompleter.o \
-					  $(OBJ_DIR)/DockWidgetWindow.o \
-					  $(OBJ_DIR)/ExComboBox.o \
-					  $(OBJ_DIR)/FloatSpinBox.o \
-					  $(OBJ_DIR)/IntSpinBox.o \
-					  $(OBJ_DIR)/LoggerWindow.o \
-					  $(OBJ_DIR)/MainInformationWindow.o \
-					  $(OBJ_DIR)/MdiChild.o \
-					  $(OBJ_DIR)/SortFilterProxyModel.o \
-					  $(OBJ_DIR)/Viewer.o \
-					  $(OBJ_DIR)/Commands.o \
-					  $(OBJ_DIR)/HexMainWindow.o \
-					  $(OBJ_DIR)/HexOptionDialog.o \
-					  $(OBJ_DIR)/QHexEdit.o \
-					  $(OBJ_DIR)/QHexEdit_p.o \
-					  $(OBJ_DIR)/XByteArray.o \
-					  $(OBJ_DIR)/Histogram.o \
-					  $(OBJ_DIR)/HistogramThread.o \
-					  $(OBJ_DIR)/HistogramWindow.o \
-                      $(OBJ_DIR)/moc_ActionCommand.o \
-					  $(OBJ_DIR)/moc_CameraObserver.o \
-					  $(OBJ_DIR)/moc_FeatureObserver.o \
-					  $(OBJ_DIR)/moc_FrameObserver.o \
-					  $(OBJ_DIR)/moc_MainWindow.o \
-					  $(OBJ_DIR)/qrc_VimbaViewer.o \
-					  $(OBJ_DIR)/moc_ViewerWindow.o \
-					  $(OBJ_DIR)/moc_ImageSaver.o \
-					  $(OBJ_DIR)/moc_CameraTreeWindow.o \
-					  $(OBJ_DIR)/moc_ControllerTreeWindow.o \
-					  $(OBJ_DIR)/moc_LineEditCompleter.o \
-					  $(OBJ_DIR)/moc_MultiCompleter.o \
-					  $(OBJ_DIR)/moc_DockWidgetWindow.o \
-					  $(OBJ_DIR)/moc_ExComboBox.o \
-					  $(OBJ_DIR)/moc_FloatSpinBox.o \
-					  $(OBJ_DIR)/moc_IntSpinBox.o \
-					  $(OBJ_DIR)/moc_LoggerWindow.o \
-					  $(OBJ_DIR)/moc_MainInformationWindow.o \
-					  $(OBJ_DIR)/moc_MdiChild.o \
-					  $(OBJ_DIR)/moc_Viewer.o \
-					  $(OBJ_DIR)/moc_HexMainWindow.o \
-					  $(OBJ_DIR)/moc_HexOptionDialog.o \
-					  $(OBJ_DIR)/moc_QHexEdit.o \
-					  $(OBJ_DIR)/moc_QHexEdit_p.o \
-					  $(OBJ_DIR)/moc_HistogramThread.o \
-					  $(OBJ_DIR)/moc_HistogramWindow.o \
-					  $(OBJ_DIR)/moc_qwt_abstract_legend.o \
-					  $(OBJ_DIR)/moc_qwt_abstract_scale.o \
-					  $(OBJ_DIR)/moc_qwt_abstract_slider.o \
-					  $(OBJ_DIR)/moc_qwt_analog_clock.o \
-					  $(OBJ_DIR)/moc_qwt_compass.o \
-					  $(OBJ_DIR)/moc_qwt_counter.o \
-					  $(OBJ_DIR)/moc_qwt_dial.o \
-					  $(OBJ_DIR)/moc_qwt_dyngrid_layout.o \
-					  $(OBJ_DIR)/moc_qwt_knob.o \
-					  $(OBJ_DIR)/moc_qwt_legend.o \
-					  $(OBJ_DIR)/moc_qwt_legend_label.o \
-					  $(OBJ_DIR)/moc_qwt_magnifier.o \
-					  $(OBJ_DIR)/moc_qwt_panner.o \
-					  $(OBJ_DIR)/moc_qwt_picker.o \
-					  $(OBJ_DIR)/moc_qwt_plot_canvas.o \
-					  $(OBJ_DIR)/moc_qwt_plot.o \
-					  $(OBJ_DIR)/moc_qwt_plot_magnifier.o \
-					  $(OBJ_DIR)/moc_qwt_plot_panner.o \
-					  $(OBJ_DIR)/moc_qwt_plot_picker.o \
-					  $(OBJ_DIR)/moc_qwt_plot_renderer.o \
-					  $(OBJ_DIR)/moc_qwt_plot_zoomer.o \
-					  $(OBJ_DIR)/moc_qwt_sampling_thread.o \
-					  $(OBJ_DIR)/moc_qwt_scale_widget.o \
-					  $(OBJ_DIR)/moc_qwt_slider.o \
-					  $(OBJ_DIR)/moc_qwt_text_label.o \
-					  $(OBJ_DIR)/moc_qwt_thermo.o \
-					  $(OBJ_DIR)/moc_qwt_wheel.o \
-					  $(OBJ_DIR)/moc_ForceIP.o
-
-GEN_HEADERS			= $(OBJ_DIR)/ui_ActionCommand.h \
-                      $(OBJ_DIR)/ui_DirectAccess.h \
-					  $(OBJ_DIR)/ui_OpenByID.h \
-					  $(OBJ_DIR)/ui_MainWindow.h \
-					  $(OBJ_DIR)/ui_SaveImageOption.h \
-					  $(OBJ_DIR)/ui_ViewerOption.h \
-					  $(OBJ_DIR)/ui_ViewerWindow.h \
-					  $(OBJ_DIR)/ui_OptionDialog.h \
-					  $(OBJ_DIR)/ui_SavingProgress.h \
-					  $(OBJ_DIR)/ui_StartOption.h \
-					  $(OBJ_DIR)/ui_ForceIP.h \
-
-DEPENDENCIES        = VimbaCPP \
-					  VimbaImageTransform \
-					  QtCore \
-					  QtGui \
-					  QtSvg
-					  
-$(OBJ_DIR)/moc_%.cpp: $(SOURCE_DIR)/%.h $(OBJ_DIR)
-	$(MOC) -o $@ $<
-
-$(OBJ_DIR)/moc_%.cpp: $(SOURCE_DIR)/ExternLib/qwt/%.h $(OBJ_DIR)
-	$(MOC) -o $@ $<
-
-$(OBJ_DIR)/moc_%.cpp: $(SOURCE_DIR)/UI/%.h $(OBJ_DIR)
-	$(MOC) -o $@ $<
-
-$(OBJ_DIR)/moc_%.cpp: $(SOURCE_DIR)/UI/HexEditor/%.h $(OBJ_DIR)
-	$(MOC) -o $@ $<
-
-$(OBJ_DIR)/moc_%.cpp: $(SOURCE_DIR)/UI/Histogram/%.h $(OBJ_DIR)
-	$(MOC) -o $@ $<
-
-$(OBJ_DIR)/ui_%.h: $(SOURCE_DIR)/%.ui $(OBJ_DIR)
-	$(UIC) -o $@ $<
-
-$(OBJ_DIR)/ui_%.h: $(SOURCE_DIR)/UI/HexEditor/%.ui $(OBJ_DIR)
-	$(UIC) -o $@ $<
-
-$(OBJ_DIR)/qrc_%.cpp: $(SOURCE_DIR)/%.qrc $(OBJ_DIR)
-	$(RCC) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/ExternLib/qwt/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/UI/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/UI/HexEditor/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(SOURCE_DIR)/UI/Histogram/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(OBJ_DIR)/%.o: $(OBJ_DIR)/%.cpp $(OBJ_DIR) $(GEN_HEADERS)
-	$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
-
-$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
-	$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
-
-clean:
-	$(RM) binary -r -f
-	$(RM) object -r -f
-
-$(OBJ_DIR):
-	$(MKDIR) -p $(OBJ_DIR)
-
-$(BIN_DIR):
-	$(MKDIR) -p $(BIN_DIR)
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ActionCommand.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ActionCommand.cpp
deleted file mode 100644
index b345d715ef4b926ead91d68a09e0a074925bdd51..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ActionCommand.cpp
+++ /dev/null
@@ -1,648 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ActionCommand.cpp
-
-  Description: Dialog for creating and sending Action Commands
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "ActionCommand.h"
-
-typedef enum eInterfaceIndex
-{
-    eInterfaceIndexUnknown  = -2,
-    eInterfaceIndexAll      = -1
-
-} eInterfaceIndex;
-
-ActionCommandDialog::ActionCommandDialog( AVT::VmbAPI::VimbaSystem &system )
-    : m_Dialog( NULL )
-    , m_Sys( system )
-    , m_Interfaces( NULL )
-    , m_SelectedInterface( eInterfaceIndexUnknown )
-    , m_Unicast( false )
-    , m_MsgBox( NULL )
-    , m_FeatureList( NULL )
-    , m_FeatureValues( NULL )
-{
-    bool check = false;
-
-    // create and setup Qt dialog
-    this->m_Dialog = new QDialog( this, windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowMaximizeButtonHint );
-    this->m_Ui.setupUi( m_Dialog );
-    this->m_Dialog->setFixedSize( 790, 340 );
-
-    // create interface vector
-    this->m_Interfaces = new QVector<AVT::VmbAPI::InterfacePtr>();
-
-    // connect slots
-    check = connect( this->m_Ui.pushButton_Send,            SIGNAL(clicked(bool)),              this, SLOT(OnSendButtonActionCommand(void)) );
-    check = connect( this->m_Ui.checkBox_singleDevice,      SIGNAL(clicked(bool)),              this, SLOT(OnCheckBoxSingleDevice(void)) );
-    check = connect( this->m_Ui.checkBox_networkInterface,  SIGNAL(clicked(bool)),              this, SLOT(OnCheckBoxNetworkInterface(void)) );
-    check = connect( this->m_Ui.comboBox_networkInterface,  SIGNAL(currentIndexChanged(int)),   this, SLOT(OnComboBoxNetworkInterface(int)) );
-
-    // setup message box
-    this->m_MsgBox = new QMessageBox( this );
-
-    // setup feature list
-    this->m_FeatureList = new QVector<QString>();
-    this->m_FeatureList->append( "ActionDeviceKey" );
-    this->m_FeatureList->append( "ActionGroupKey" );
-    this->m_FeatureList->append( "ActionGroupMask" );
-    this->m_FeatureList->append( "ActionCommand" );
-
-    // setup feature value list
-    this->m_FeatureValues = new QVector<VmbInt64_t>();
-
-    // disable ip input for unicast
-    // and set network selection as unchecked
-    this->m_Ui.lineEdit_singleDevice->setEnabled( false );
-    this->m_Ui.checkBox_networkInterface->setChecked( false );
-}
-
-ActionCommandDialog::~ActionCommandDialog()
-{
-    // delete Qt dialog
-    if( NULL != m_Dialog )
-    {
-        delete m_Dialog;
-    }
-
-    // delete interface vector
-    if( NULL != m_Interfaces )
-    {
-        delete m_Interfaces;
-    }
-
-    // delete message box
-    if( NULL != m_MsgBox )
-    {
-        delete m_MsgBox;
-    }
-
-    // delete feature list
-    if( NULL != m_FeatureList )
-    {
-        delete m_FeatureList;
-    }
-
-    // delete feature value list
-    if( NULL != m_FeatureValues )
-    {
-        delete m_FeatureValues;
-    }
-}
-
-void ActionCommandDialog::RunDialog()
-{
-    VmbErrorType    err         = VmbErrorSuccess;
-    bool            check       = false;
-    bool            failureFlag = true;
-    int             rval        = 0;
-    QString         msg         = "";
-
-    if( NULL != this->m_Dialog )
-    {
-        // reset dialog
-        ResetDialog();
-
-        try
-        {
-            // get avaialable interfaces from Vimba
-            // and fill combo box (GigE only)
-            err = this->CreateInterfaceList();
-            if( VmbErrorSuccess != err )
-            {
-                throw std::exception();
-            }
-
-            // run dialog
-            this->m_Dialog->show();
-        }
-        catch( std::exception& /*e*/ )
-        {
-            this->ShowMsgBox();
-        }
-        catch(...)
-        {
-            this->ShowMsgBox();
-        }
-
-        if( (VmbErrorSuccess == err) && (QDialog::Accepted == rval) )
-        {
-            this->PrepareMsgBox( QMessageBox::Information, "Action Command has been sent successfully", VmbErrorSuccess );
-            this->ShowMsgBox();
-        }
-
-    }
-}
-
-void ActionCommandDialog::OnSendButtonActionCommand()
-{
-    bool                        check       = false;
-    VmbErrorType                err         = VmbErrorSuccess;
-    VmbInt64_t                  ipAddress   = 0;
-    QString                     msg         = "";
-    AVT::VmbAPI::InterfacePtr   selectedInterface;
-
-    try
-    {
-        // clear feature values
-        this->m_FeatureValues->clear();
-
-        // get deviceKey from user input
-        check = this->GetDeviceKey();
-        if( false == check )
-        {
-            this->PrepareMsgBox( QMessageBox::Critical, "Invalid Device Key entered", VmbErrorBadParameter );
-            throw std::exception();
-        }
-
-        // get groupKey from user input
-        check = this->GetGroupKey();
-        if( false == check )
-        {
-            this->PrepareMsgBox( QMessageBox::Critical, "Invalid Group Key entered", VmbErrorBadParameter );
-            throw std::exception();
-        }
-
-        // get groupMask from user input
-        check = this->GetGroupMask();
-        if( false == check )
-        {
-            this->PrepareMsgBox( QMessageBox::Critical, "Invalid Group Mask entered", VmbErrorBadParameter );
-            throw std::exception();
-        }
-
-        // if unicast is enabled, get IP address
-        if( true == this->m_Unicast )
-        {
-            ipAddress = this->GetIpAddress();
-            if( -1 == ipAddress )
-            {
-                this->PrepareMsgBox( QMessageBox::Critical, "Invalid IP address entered", VmbErrorBadParameter );
-                throw std::exception();
-            }
-        }
-
-        // check if specific interface was selcted
-        if( eInterfaceIndexAll != this->m_SelectedInterface )
-        {
-            // get interface pointer
-            selectedInterface = this->m_Interfaces->at( this->m_SelectedInterface );
-            if( false == SP_ISNULL(selectedInterface) )
-            {
-                // open interface
-                err = selectedInterface->Open();
-                if( VmbErrorSuccess != err )
-                {
-                    this->PrepareMsgBox( QMessageBox::Critical, "Failed to open interface", err );
-                    throw std::exception();
-                }
-            }
-        }
-
-        // proceed if no error occured
-        if( VmbErrorSuccess == err )
-        {
-            // iterate through feature names and values
-            for( int i=0; i<3; ++i )
-            {
-                // get current feature name and corresponding value to set
-                QString     featureName     = m_FeatureList->at(i);
-                VmbInt64_t  featureValue    = m_FeatureValues->at(i);
-
-                // set feature value
-                err = this->SetFeatureValue( featureName, featureValue, this->m_SelectedInterface );
-                if( VmbErrorSuccess != err )
-                {
-                    throw std::exception();
-                }
-            }
-        }
-
-        // if unicast is enabled, set corresponding ip feature
-        if( true == this->m_Unicast )
-        {
-            // get feature pointer
-            AVT::VmbAPI::FeaturePtr feature;
-            const char *featureName = "GevActionDestinationIPAddress";
-            if( eInterfaceIndexAll == this->m_SelectedInterface )
-            {
-                err = this->m_Sys.GetFeatureByName( featureName, feature );
-            }
-            else
-            {
-                err = selectedInterface->GetFeatureByName( featureName, feature );
-            }
-
-            if( VmbErrorSuccess == err )
-            {
-                // set feature value
-                err = feature->SetValue( ipAddress );
-                if( VmbErrorSuccess != err )
-                {
-                    msg = "Failed to set feature value '" + QString::number(ipAddress) + "' for '" + QString(featureName) + "'";
-                    this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                    throw std::exception();
-                }
-            }
-            else
-            {
-                msg = "Failed to retrieve feature pointer for '" + QString(featureName) + "'";
-                this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                throw std::exception();
-            }
-        }
-
-        // send Action Command
-        err = this->SendCommand( this->m_SelectedInterface );
-        if( VmbErrorSuccess != err )
-        {
-            throw std::exception();
-        }
-
-        this->LogActionCommand();
-
-        // close interface, if one selected and opened
-        if( eInterfaceIndexAll != this->m_SelectedInterface )
-        {
-            if( false == SP_ISNULL( selectedInterface ) )
-            {
-                err = selectedInterface->Close();
-                if( VmbErrorSuccess != err )
-                {
-                    this->PrepareMsgBox( QMessageBox::Critical, "Failed to close interface", err );
-                    throw std::exception();
-                }
-            }
-        }
-
-    }
-    catch( std::exception& e )
-    {
-        this->ShowMsgBox();
-    }
-    catch(...)
-    {
-        this->ShowMsgBox();
-    }
-}
-
-void ActionCommandDialog::OnComboBoxNetworkInterface( int index )
-{
-    // get selected interface index
-    this->m_SelectedInterface = index;
-}
-
-void ActionCommandDialog::OnCheckBoxNetworkInterface()
-{
-    // if checkbox was checked,
-    // set internal variable accordingly
-    if( true == this->m_Ui.checkBox_networkInterface->isChecked() )
-    {
-        this->m_Ui.comboBox_networkInterface->setEnabled( false );
-        this->m_SelectedInterface = eInterfaceIndexAll;
-    }
-    else
-    {
-        this->m_Ui.comboBox_networkInterface->setEnabled( true );
-        this->m_SelectedInterface = this->m_Ui.comboBox_networkInterface->currentIndex();
-    }
-}
-
-void ActionCommandDialog::OnCheckBoxSingleDevice()
-{
-    // if checkbox was checked,
-    // set internal variable accordingly
-    if( true == this->m_Ui.checkBox_singleDevice->isChecked() )
-    {
-        this->m_Ui.lineEdit_singleDevice->setEnabled( true );
-        this->m_Unicast = true;
-    }
-    else
-    {
-        this->m_Ui.lineEdit_singleDevice->setEnabled( false );
-        this->m_Unicast = false;
-    }
-}
-
-VmbErrorType ActionCommandDialog::CreateInterfaceList()
-{
-    VmbErrorType    err = VmbErrorOther;
-    QString         msg = "Failed to retrieve interfaces";
-
-    // get interfaces from vimba
-    AVT::VmbAPI::InterfacePtrVector interfaceList;
-    err = m_Sys.GetInterfaces( interfaceList );
-    if( VmbErrorSuccess == err )
-    {
-        // iterate through Vimba interface list
-        // and retrieve IDs (ethernet only)
-        AVT::VmbAPI::InterfacePtrVector::iterator iter;
-        for( iter = interfaceList.begin();
-                iter != interfaceList.end();
-                ++iter )
-        {
-            // determine interface type
-            VmbInterfaceType interfaceType;
-            err = (*iter)->GetType( interfaceType );
-            if( VmbErrorSuccess == err )
-            {
-                if( VmbInterfaceEthernet == interfaceType )
-                {
-                    // store current interface to internal vector
-                    this->m_Interfaces->append( *iter );
-
-                    // get interface ID
-                    std::string interfaceId = "";
-                    err = (*iter)->GetID( interfaceId );
-                    if( VmbErrorSuccess == err )
-                    {
-                        this->m_Ui.comboBox_networkInterface->addItem( QString(interfaceId.c_str()) );
-                    }
-                    else
-                    {
-                        msg += QString( ". GetID() failed" );
-                        this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                        break;
-                    }
-                }
-            }
-            else
-            {
-                msg += QString( ". Unable to determine interface type" );
-                this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                break;
-            }
-        }
-    }
-    else
-    {
-        this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-    }
-
-    // in case of any failure,
-    // show message box
-    if( VmbErrorSuccess == err )
-    {
-        this->m_Ui.comboBox_networkInterface->setCurrentIndex( 0 );
-        this->m_SelectedInterface = 0;
-    }
-
-    return err;
-}
-
-VmbErrorType ActionCommandDialog::SetFeatureValue( QString featureName, VmbInt64_t featureValue, int selectedInterface )
-{
-    VmbErrorType                err = VmbErrorSuccess;
-    QString                     msg = "";
-    AVT::VmbAPI::InterfacePtr   interfacePtr;
-    AVT::VmbAPI::FeaturePtr     feature;
-    
-    // check parameter
-    if( false == featureName.isEmpty() )
-    {
-        // check if 'all interfaces' is selected
-        if( eInterfaceIndexAll == selectedInterface )
-        {
-            // get feature pointer
-            err = this->m_Sys.GetFeatureByName( featureName.toStdString().c_str(), feature );
-            if( VmbErrorSuccess != err )
-            {
-                msg = "Failed to retrieve feature '" + featureName + "'";
-                this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-            }
-        }
-        else
-        {
-            // get feature pointer
-            interfacePtr = this->m_Interfaces->at( selectedInterface );
-            if( false == SP_ISNULL( interfacePtr ) )
-            {
-                err = interfacePtr->GetFeatureByName( featureName.toStdString().c_str(), feature );
-                if( VmbErrorSuccess != err )
-                {
-                    msg = "Failed to retrieve feature '" + featureName + "' from selected interface";
-                    this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                }
-            }
-        }
-
-        if( VmbErrorSuccess == err )
-        {
-            // set given feature value
-            err = feature->SetValue( featureValue );
-            if( VmbErrorSuccess != err )
-            {
-                msg = "Failed to set feature value '" + QString::number(featureValue) + "' for '" + featureName + "'";
-                this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-            }
-        }
-    }
-
-    return err;
-}
-
-bool ActionCommandDialog::GetDeviceKey()
-{
-    bool rval = true;
-
-    // get user input from device key field
-    QString stringValue = this->m_Ui.lineEdit_DeviceKey->text();
-    if( false == stringValue.isEmpty() )
-    {
-        // convert string value to integer
-        VmbInt64_t intValue = stringValue.toUInt( &rval );
-        if( true == rval )
-        {
-            this->m_FeatureValues->append( intValue );
-        }
-    }
-    else
-    {
-        rval = false;
-    }
-
-    return rval;
-}
-
-bool ActionCommandDialog::GetGroupKey()
-{
-    bool rval = true;
-
-    // get user input from group key field
-    QString stringValue = this->m_Ui.lineEdit_GroupKey->text();
-    if( false == stringValue.isEmpty() )
-    {
-        // convert string value to integer
-        VmbInt64_t intValue = stringValue.toUInt( &rval );
-        if( true == rval )
-        {
-            this->m_FeatureValues->append( intValue );
-        }
-    }
-    else
-    {
-        rval = false;
-    }
-
-    return rval;
-}
-
-bool ActionCommandDialog::GetGroupMask()
-{
-    bool rval = true;
-
-    // get user input from group mask field
-    QString stringValue = this->m_Ui.lineEdit_GroupMask->text();
-    if( false == stringValue.isEmpty() )
-    {
-        // convert string value to integer
-        VmbInt64_t intValue = stringValue.toUInt( &rval );
-        if( true == rval )
-        {
-            this->m_FeatureValues->append( intValue );
-        }
-    }
-    else
-    {
-        rval = false;
-    }
-
-    return rval;
-}
-
-VmbInt64_t ActionCommandDialog::GetIpAddress()
-{
-    VmbInt64_t rval = 0;
-
-    // get user input from ip address field
-    QString stringValue = this->m_Ui.lineEdit_singleDevice->text();
-    if( false == stringValue.isEmpty() )
-    {
-        // convert ip address string to integer value
-        VmbInt64_t intValue = Helper::StringToIPv4( stringValue);
-        if( -1 != intValue )
-        {
-            rval = intValue;
-        }
-    }
-    else
-    {
-        rval = -1;
-    }
-
-    return rval;
-}
-
-VmbErrorType ActionCommandDialog::SendCommand( int selectedInterface )
-{
-    VmbErrorType            err = VmbErrorSuccess;
-    QString                 msg = "";
-    AVT::VmbAPI::FeaturePtr feature;
-
-    // get feature name for sending Action Command
-    QString featureName = this->m_FeatureList->at(3);
-
-    // get feature pointer
-    // on interface or system level (all interfaces)
-    if( eInterfaceIndexAll == selectedInterface )
-    {
-        err = m_Sys.GetFeatureByName( featureName.toStdString().c_str(), feature );
-    }
-    else
-    {
-        AVT::VmbAPI::InterfacePtr interfacePtr = this->m_Interfaces->at( selectedInterface );
-        if( false == SP_ISNULL(interfacePtr) )
-        {
-            err = interfacePtr->GetFeatureByName( featureName.toStdString().c_str(), feature );
-        }
-    }
-    
-    if( VmbErrorSuccess == err )
-    {
-        // send action command
-        err = feature->RunCommand();
-        if( VmbErrorSuccess != err )
-        {
-            this->PrepareMsgBox( QMessageBox::Critical, "Failed to send Action Command", err );
-        }
-    }
-    else
-    {
-        msg = "Failed to retrieve feature '" + featureName + "'";
-        this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-    }
-
-    return err;
-}
-
-void ActionCommandDialog::PrepareMsgBox( QMessageBox::Icon icon, QString text, VmbErrorType err )
-{
-    if( NULL != this->m_MsgBox )
-    {
-        this->m_MsgBox->setIcon( icon );
-        QString msg = text;
-        if( 0 != err )
-        {
-            msg + ".\n[error code: " + QString::number(err) + "]";
-        }
-        this->m_MsgBox->setText( msg );
-    }
-}
-
-void ActionCommandDialog::ShowMsgBox()
-{
-    if( NULL != this->m_MsgBox )
-    {
-        this->m_MsgBox->exec();
-    }
-}
-
-void ActionCommandDialog::ResetDialog()
-{
-    // network interface group
-    this->m_Ui.comboBox_networkInterface->clear();
-    this->m_Ui.comboBox_networkInterface->setEnabled( true );
-    this->m_Ui.checkBox_networkInterface->setChecked( false );
-    this->m_SelectedInterface = eInterfaceIndexUnknown;
-
-    // action command group
-    this->m_FeatureValues->clear();
-
-    // single device group
-    this->m_Ui.lineEdit_singleDevice->setEnabled( false );
-    this->m_Ui.checkBox_singleDevice->setChecked( false );
-
-    // command log
-    this->m_Ui.listWidget_commandLog->clear();
-}
-
-void ActionCommandDialog::LogActionCommand()
-{
-    QTime timeStamp;
-    QString temp;
-    temp = timeStamp.currentTime().toString() + QString( "..." ) + QString( "Action Command has been sent" );
-    this->m_Ui.listWidget_commandLog->insertItem( 0, temp );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ActionCommand.h b/VimbaCPP/Examples/VimbaViewer/Source/ActionCommand.h
deleted file mode 100644
index 8e549ad29f8dcbfc267baf3226a7605adf175985..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ActionCommand.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ActionCommand.h
-
-  Description: Dialog for creating and sending Action Commands
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef ACTION_COMMAND_H
-#define ACTION_COMMAND_H
-
-#include "Helper.h"
-#include "ui_ActionCommand.h"
-#include <QMessageBox>
-#include <QDateTime>
-#include <VimbaCPP/Include/VimbaSystem.h>
-
-class ActionCommandDialog : public QDialog
-{
-    Q_OBJECT
-
-    private:
-        Ui::ActionCommandDialog              m_Ui;
-        QDialog                             *m_Dialog;
-        AVT::VmbAPI::VimbaSystem            &m_Sys;
-        QVector<AVT::VmbAPI::InterfacePtr>  *m_Interfaces;
-        int                                  m_SelectedInterface;
-        bool                                 m_Unicast;
-        QMessageBox                         *m_MsgBox;
-        QVector<QString>                    *m_FeatureList;
-        QVector<VmbInt64_t>                *m_FeatureValues;
-
-    public:
-         ActionCommandDialog( AVT::VmbAPI::VimbaSystem &system );
-        ~ActionCommandDialog();
-
-        void RunDialog();
-
-    private slots:
-        void OnSendButtonActionCommand();
-        void OnComboBoxNetworkInterface( int index );
-        void OnCheckBoxNetworkInterface( void );
-        void OnCheckBoxSingleDevice( void );
-
-    private:
-        VmbErrorType CreateInterfaceList();
-        VmbErrorType SetFeatureValue( QString featureName, VmbInt64_t featureValue, int selectedInterface );
-
-        bool    GetDeviceKey();
-        bool    GetGroupKey();
-        bool    GetGroupMask();
-        VmbInt64_t  GetIpAddress();
-
-        VmbErrorType SendCommand( int selectedInterface );
-
-        void PrepareMsgBox( QMessageBox::Icon icon, QString text, VmbErrorType err );
-        void ShowMsgBox();
-
-        void ResetDialog();
-        void LogActionCommand();
-
-
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ActionCommand.ui b/VimbaCPP/Examples/VimbaViewer/Source/ActionCommand.ui
deleted file mode 100644
index e99910f861b9bdfcb12c5c6bf95b6f25be50656c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ActionCommand.ui
+++ /dev/null
@@ -1,561 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ActionCommandDialog</class>
- <widget class="QDialog" name="ActionCommandDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>790</width>
-    <height>333</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Trigger over Ethernet - Action Commands</string>
-  </property>
-  <property name="windowIcon">
-   <iconset>
-    <normaloff>Images/stripes_256.png</normaloff>Images/stripes_256.png</iconset>
-  </property>
-  <widget class="QGroupBox" name="groupBox_networkInterface">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>10</y>
-     <width>381</width>
-     <height>151</height>
-    </rect>
-   </property>
-   <property name="title">
-    <string>Network Interface</string>
-   </property>
-   <widget class="QWidget" name="layoutWidget">
-    <property name="geometry">
-     <rect>
-      <x>20</x>
-      <y>30</y>
-      <width>360</width>
-      <height>102</height>
-     </rect>
-    </property>
-    <layout class="QGridLayout" name="gridLayout_networkInterface">
-     <item row="0" column="0">
-      <layout class="QVBoxLayout" name="verticalLayout_3">
-       <item>
-        <widget class="QLabel" name="label_networkInterface">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>0</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>16777215</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>Select Interface</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QComboBox" name="comboBox_networkInterface">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>250</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>16777215</width>
-           <height>20</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QCheckBox" name="checkBox_networkInterface">
-         <property name="minimumSize">
-          <size>
-           <width>0</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>16777215</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>All Interfaces</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <spacer name="horizontalSpacer_networkInterface">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>188</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </item>
-     <item row="0" column="1">
-      <widget class="QLabel" name="label_networkInterface_2">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>100</width>
-         <height>100</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>100</width>
-         <height>100</height>
-        </size>
-       </property>
-       <property name="text">
-        <string/>
-       </property>
-       <property name="pixmap">
-        <pixmap resource="VimbaViewer.qrc">:/VimbaViewer/Images/network.png</pixmap>
-       </property>
-       <property name="scaledContents">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </widget>
-  </widget>
-  <widget class="QGroupBox" name="groupBox_actionCommand">
-   <property name="geometry">
-    <rect>
-     <x>410</x>
-     <y>10</y>
-     <width>361</width>
-     <height>151</height>
-    </rect>
-   </property>
-   <property name="title">
-    <string>Action Command</string>
-   </property>
-   <widget class="QWidget" name="layoutWidget">
-    <property name="geometry">
-     <rect>
-      <x>20</x>
-      <y>30</y>
-      <width>318</width>
-      <height>105</height>
-     </rect>
-    </property>
-    <layout class="QGridLayout" name="gridLayout_actionCommand">
-     <item row="0" column="0">
-      <layout class="QVBoxLayout" name="verticalLayout_2">
-       <item>
-        <widget class="QLabel" name="label_DeviceKey">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>Device Key</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_GroupKey">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>Group Key</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_GroupMask">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>Group Mask</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item row="0" column="1">
-      <layout class="QVBoxLayout" name="verticalLayout">
-       <item>
-        <widget class="QLineEdit" name="lineEdit_DeviceKey">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>125</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>125</width>
-           <height>20</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLineEdit" name="lineEdit_GroupKey">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>125</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>125</width>
-           <height>20</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLineEdit" name="lineEdit_GroupMask">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>125</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>125</width>
-           <height>20</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item row="0" column="2">
-      <widget class="QLabel" name="label_actionCommand">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>75</width>
-         <height>75</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>75</width>
-         <height>75</height>
-        </size>
-       </property>
-       <property name="text">
-        <string/>
-       </property>
-       <property name="pixmap">
-        <pixmap resource="VimbaViewer.qrc">:/VimbaViewer/Images/actionCommand.png</pixmap>
-       </property>
-       <property name="scaledContents">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0" colspan="3">
-      <layout class="QHBoxLayout" name="horizontalLayout">
-       <item>
-        <spacer name="horizontalSpacer_actionCommand">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item>
-        <widget class="QPushButton" name="pushButton_Send">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>75</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>75</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>Send</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QPushButton" name="pushButton_Cancel">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>75</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>75</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>Cancel</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-    </layout>
-   </widget>
-  </widget>
-  <widget class="QGroupBox" name="groupBox_device">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>170</y>
-     <width>381</width>
-     <height>151</height>
-    </rect>
-   </property>
-   <property name="title">
-    <string>Single Device</string>
-   </property>
-   <widget class="QWidget" name="layoutWidget">
-    <property name="geometry">
-     <rect>
-      <x>20</x>
-      <y>30</y>
-      <width>331</width>
-      <height>45</height>
-     </rect>
-    </property>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0">
-      <widget class="QLabel" name="label_singleDevice">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>120</horstretch>
-         <verstretch>20</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>120</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Destination IP Address</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QLineEdit" name="lineEdit_singleDevice">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>20</horstretch>
-         <verstretch>200</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>200</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>200</width>
-         <height>20</height>
-        </size>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <widget class="QCheckBox" name="checkBox_singleDevice">
-       <property name="text">
-        <string>Enable Unicast</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </widget>
-  </widget>
-  <widget class="QGroupBox" name="groupBox">
-   <property name="geometry">
-    <rect>
-     <x>410</x>
-     <y>170</y>
-     <width>361</width>
-     <height>151</height>
-    </rect>
-   </property>
-   <property name="title">
-    <string>Command Log</string>
-   </property>
-   <widget class="QListWidget" name="listWidget_commandLog">
-    <property name="geometry">
-     <rect>
-      <x>20</x>
-      <y>30</y>
-      <width>311</width>
-      <height>101</height>
-     </rect>
-    </property>
-   </widget>
-  </widget>
- </widget>
- <resources>
-  <include location="VimbaViewer.qrc"/>
- </resources>
- <connections>
-  <connection>
-   <sender>pushButton_Cancel</sender>
-   <signal>clicked()</signal>
-   <receiver>ActionCommandDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>621</x>
-     <y>142</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>292</x>
-     <y>133</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/CameraObserver.cpp b/VimbaCPP/Examples/VimbaViewer/Source/CameraObserver.cpp
deleted file mode 100644
index fcec04ec717272b4ce76709ebbde61374651c5c0..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/CameraObserver.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraObserver.cpp
-
-  Description: A notification whenever device list has been changed
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "CameraObserver.h"
-
-CameraObserver::CameraObserver ( void )
-{ 
-
-}
-
-CameraObserver::~CameraObserver ( void )
-{
-
-}
-
-void CameraObserver::CameraListChanged ( AVT::VmbAPI::CameraPtr pCam, AVT::VmbAPI::UpdateTriggerType reason )
-{
-    emit updateDeviceList ( );
-}
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/CameraObserver.h b/VimbaCPP/Examples/VimbaViewer/Source/CameraObserver.h
deleted file mode 100644
index fe596ae69d618238280f0b8b1c113f424bf5989c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/CameraObserver.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraObserver.h
-
-  Description: A notification whenever device list has been changed
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef CAMERAOBSERVER_H
-#define CAMERAOBSERVER_H
-
-#include <QObject>
-#include <QTimer>
-#include <VimbaCPP/Include/VimbaSystem.h>
-#include <VimbaCPP/Include/ICameraListObserver.h>
-
-
-class CameraObserver : public QObject, public AVT::VmbAPI::ICameraListObserver
-{
-    Q_OBJECT
-
-    public:
-
-        CameraObserver(void);
-       ~CameraObserver(void);
-
-        virtual void CameraListChanged( AVT::VmbAPI::CameraPtr pCam, AVT::VmbAPI::UpdateTriggerType reason );            
-
-    protected:
-    private:
-
-
-    signals:
-        void updateDeviceList ( void );
-
-
-
-};
-
-typedef AVT::VmbAPI::shared_ptr<CameraObserver> QtCameraObserverPtr;
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ControllerViewer.h b/VimbaCPP/Examples/VimbaViewer/Source/ControllerViewer.h
deleted file mode 100644
index dd05f5bbe98d68ca8bd0fdf4714b5eb4a268767f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ControllerViewer.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#pragma once
-
-
-#ifndef CONTROLLERVIEWER_H
-#define CONTROLLERVIEWER_H
-
-//TODO sort the header you don�t need
-#include <QtGui>
-
-
-
-class ControllerViewer : public QTreeView
-{
-	Q_OBJECT
-	public:
-		ControllerViewer ( QWidget *parent = 0 );
-	   ~ControllerViewer();
-	    void SetupTree( void );
-
-		QStandardItemModel *m_Model;
-		
-	protected:
-	private:
-
-	public:
-
-
-
-	protected:
-
-	private:
-
-private slots:
-
-signals:
-	
-		
-};
-
-
-
-
-
-
-
-
-
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/DirectAccess.ui b/VimbaCPP/Examples/VimbaViewer/Source/DirectAccess.ui
deleted file mode 100644
index ce9b6e3d755d37e39f6d1894272e529da042e6e2..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/DirectAccess.ui
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>DirectAccessDialog</class>
- <widget class="QDialog" name="DirectAccessDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>439</width>
-    <height>160</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>400</width>
-    <height>160</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>500</width>
-    <height>160</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Direct Access</string>
-  </property>
-  <widget class="QWidget" name="layoutWidget">
-   <property name="geometry">
-    <rect>
-     <x>9</x>
-     <y>10</y>
-     <width>421</width>
-     <height>144</height>
-    </rect>
-   </property>
-   <layout class="QFormLayout" name="formLayout">
-    <property name="fieldGrowthPolicy">
-     <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
-    </property>
-    <item row="1" column="0" colspan="2">
-     <widget class="QLabel" name="RegAccessError_Label">
-      <property name="text">
-       <string/>
-      </property>
-     </widget>
-    </item>
-    <item row="0" column="0">
-     <layout class="QGridLayout" name="gridLayout">
-      <item row="0" column="1">
-       <widget class="QLabel" name="RegAdd_Label">
-        <property name="text">
-         <string>Register Address:</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="2">
-       <widget class="QLabel" name="RegAddEditPrefix_Label">
-        <property name="text">
-         <string>0x</string>
-        </property>
-        <property name="alignment">
-         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="QLabel" name="RegData_Label">
-        <property name="text">
-         <string>Data:</string>
-        </property>
-        <property name="alignment">
-         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="2">
-       <widget class="QLabel" name="RegDataEditPrefix_Label">
-        <property name="text">
-         <string>0x</string>
-        </property>
-        <property name="alignment">
-         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="4">
-       <widget class="QLineEdit" name="RegData_Edit">
-        <property name="toolTip">
-         <string>The register content shown in endianess of the device</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1">
-       <widget class="QLabel" name="RegDataDec_Label">
-        <property name="text">
-         <string>Data:</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="2">
-       <widget class="QLabel" name="RegDataDecEditPrefix_Label">
-        <property name="text">
-         <string>Dec</string>
-        </property>
-        <property name="alignment">
-         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="4">
-       <widget class="QLineEdit" name="RegDataDec_Edit">
-        <property name="toolTip">
-         <string>The decimal representation of the register content</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="5">
-       <widget class="QCheckBox" name="CheckBoxEndianess">
-        <property name="toolTip">
-         <string>Convert the decimal value to little endian</string>
-        </property>
-        <property name="text">
-         <string>Little endian device</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="4">
-       <widget class="QLineEdit" name="RegAdd_Edit">
-        <property name="toolTip">
-         <string>The register address</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </item>
-    <item row="2" column="0">
-     <layout class="QHBoxLayout" name="horizontalLayout">
-      <item>
-       <widget class="QPushButton" name="RegRead_Button">
-        <property name="text">
-         <string>READ</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QPushButton" name="RegWrite_Button">
-        <property name="text">
-         <string>WRITE</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <spacer name="horizontalSpacer">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>40</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-     </layout>
-    </item>
-   </layout>
-  </widget>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt.h
deleted file mode 100644
index 4936d9a5adbb54027d2d2636b7228e6da80f371b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_H
-#define QWT_H
-
-#include "qwt_global.h"
-
-/*!
-  Some constants for use within Qwt.
-*/
-namespace Qwt
-{
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_legend.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_legend.cpp
deleted file mode 100644
index 7f49648ee55afb57d247c2d7918524296e62e493..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_legend.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_abstract_legend.h"
-
-/*!
-  Constructor
-
-  \param parent Parent widget
-*/
-QwtAbstractLegend::QwtAbstractLegend( QWidget *parent ):
-    QFrame( parent )
-{
-}
-
-//! Destructor
-QwtAbstractLegend::~QwtAbstractLegend()
-{
-}
-
-/*!
-   Return the extent, that is needed for elements to scroll
-   the legend ( usually scrollbars ),
-
-   \param orientation Orientation
-   \return Extent of the corresponding scroll element
-*/
-int QwtAbstractLegend::scrollExtent( Qt::Orientation orientation ) const
-{
-    Q_UNUSED( orientation );
-    return 0;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_legend.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_legend.h
deleted file mode 100644
index a17f360ca22ce62c9da22ffe0cbf4ef71aa523d2..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_legend.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_ABSTRACT_LEGEND_H
-#define QWT_ABSTRACT_LEGEND_H
-
-#include "qwt_global.h"
-#include "qwt_legend_data.h"
-#include <qframe.h>
-#include <qlist.h>
-
-class QVariant;
-
-/*!
-  \brief Abstract base class for legend widgets
-
-  Legends, that need to be under control of the QwtPlot layout system
-  need to be derived from QwtAbstractLegend. 
-
-  \note Other type of legends can be implemented by connecting to
-        the QwtPlot::legendDataChanged() signal. But as these legends
-        are unknown to the plot layout system the layout code
-        ( on screen and for QwtPlotRenderer ) need to be organized
-        in application code.
-
-  \sa QwtLegend
- */
-class QWT_EXPORT QwtAbstractLegend : public QFrame
-{
-    Q_OBJECT
-
-public:
-    explicit QwtAbstractLegend( QWidget *parent = NULL );
-    virtual ~QwtAbstractLegend();
-
-    /*!
-      Render the legend into a given rectangle.
-
-      \param painter Painter
-      \param rect Bounding rectangle
-      \param fillBackground When true, fill rect with the widget background 
-
-      \sa renderLegend() is used by QwtPlotRenderer
-    */
-    virtual void renderLegend( QPainter *painter, 
-        const QRectF &rect, bool fillBackground ) const = 0;
-
-    //! \return True, when no plot item is inserted
-    virtual bool isEmpty() const = 0;
-
-    virtual int scrollExtent( Qt::Orientation ) const;
-
-public Q_SLOTS:
-
-    /*!
-      \brief Update the entries for a plot item
-
-      \param itemInfo Info about an item
-      \param data List of legend entry attributes for the  item
-     */
-    virtual void updateLegend( const QVariant &itemInfo, 
-        const QList<QwtLegendData> &data ) = 0;
-};
-
-#endif 
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale.cpp
deleted file mode 100644
index 4eaf62a60e5f75a81aab772e3c90f659dc4aa5bb..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale.cpp
+++ /dev/null
@@ -1,449 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_abstract_scale.h"
-#include "qwt_scale_engine.h"
-#include "qwt_scale_draw.h"
-#include "qwt_scale_div.h"
-#include "qwt_scale_map.h"
-#include "qwt_interval.h"
-
-class QwtAbstractScale::PrivateData
-{
-public:
-    PrivateData():
-        maxMajor( 5 ),
-        maxMinor( 3 ),
-        stepSize( 0.0 )
-    {
-        scaleEngine = new QwtLinearScaleEngine();
-        scaleDraw = new QwtScaleDraw();
-    }
-
-    ~PrivateData()
-    {
-        delete scaleEngine;
-        delete scaleDraw;
-    }
-
-    QwtScaleEngine *scaleEngine;
-    QwtAbstractScaleDraw *scaleDraw;
-
-    int maxMajor;
-    int maxMinor;
-    double stepSize;
-};
-
-/*!
-  Constructor
-
-  \param parent Parent widget
-
-  Creates a default QwtScaleDraw and a QwtLinearScaleEngine.
-  The initial scale boundaries are set to [ 0.0, 100.0 ]
-
-  The scaleStepSize() is initialized to 0.0, scaleMaxMajor() to 5
-  and scaleMaxMajor to 3.
-*/
-
-QwtAbstractScale::QwtAbstractScale( QWidget *parent ):
-    QWidget( parent )
-{
-    d_data = new PrivateData;
-    rescale( 0.0, 100.0, d_data->stepSize );
-}
-
-//! Destructor
-QwtAbstractScale::~QwtAbstractScale()
-{
-    delete d_data;
-}
-
-/*!
-  Set the lower bound of the scale
-
-  \param value Lower bound
-
-  \sa lowerBound(), setScale(), setUpperBound()
-  \note For inverted scales the lower bound 
-        is greater than the upper bound
-*/
-void QwtAbstractScale::setLowerBound( double value )
-{
-    setScale( value, upperBound() );
-}
-
-/*!
-  \return Lower bound of the scale
-  \sa setLowerBound(), setScale(), upperBound()
-*/
-double QwtAbstractScale::lowerBound() const
-{
-    return d_data->scaleDraw->scaleDiv().lowerBound();
-}
-
-/*!
-  Set the upper bound of the scale
-
-  \param value Upper bound
-
-  \sa upperBound(), setScale(), setLowerBound()
-  \note For inverted scales the lower bound 
-        is greater than the upper bound
-*/
-void QwtAbstractScale::setUpperBound( double value )
-{
-    setScale( lowerBound(), value );
-}
-
-/*!
-  \return Upper bound of the scale
-  \sa setUpperBound(), setScale(), lowerBound()
-*/
-double QwtAbstractScale::upperBound() const
-{
-    return d_data->scaleDraw->scaleDiv().upperBound();
-}
-
-/*!
-  \brief Specify a scale.
-
-  Define a scale by an interval 
-
-  The ticks are calculated using scaleMaxMinor(), 
-  scaleMaxMajor() and scaleStepSize().
-
-  \param lowerBound lower limit of the scale interval
-  \param upperBound upper limit of the scale interval
-
-  \note For inverted scales the lower bound 
-        is greater than the upper bound
-*/
-void QwtAbstractScale::setScale( double lowerBound, double upperBound )
-{
-    rescale( lowerBound, upperBound, d_data->stepSize );
-}
-
-/*!
-  \brief Specify a scale.
-
-  Define a scale by an interval
-
-  The ticks are calculated using scaleMaxMinor(), 
-  scaleMaxMajor() and scaleStepSize().
-
-  \param interval Interval
-*/
-void QwtAbstractScale::setScale( const QwtInterval &interval )
-{
-    setScale( interval.minValue(), interval.maxValue() );
-}
-
-/*!
-  \brief Specify a scale.
-
-  scaleMaxMinor(), scaleMaxMajor() and scaleStepSize() and have no effect.
-
-  \param scaleDiv Scale division
-  \sa setAutoScale()
-*/
-void QwtAbstractScale::setScale( const QwtScaleDiv &scaleDiv )
-{
-    if ( scaleDiv != d_data->scaleDraw->scaleDiv() )
-    {
-#if 1
-        if ( d_data->scaleEngine )
-        {
-            d_data->scaleDraw->setTransformation(
-                d_data->scaleEngine->transformation() );
-        }
-#endif
-
-        d_data->scaleDraw->setScaleDiv( scaleDiv );
-
-        scaleChange();
-    }
-}
-
-/*!
-  \brief Set the maximum number of major tick intervals.
-
-  The scale's major ticks are calculated automatically such that
-  the number of major intervals does not exceed ticks.
-
-  The default value is 5.
-
-  \param ticks Maximal number of major ticks.
-
-  \sa scaleMaxMajor(), setScaleMaxMinor(),
-      setScaleStepSize(), QwtScaleEngine::divideInterval()
-*/
-void QwtAbstractScale::setScaleMaxMajor( int ticks )
-{
-    if ( ticks != d_data->maxMajor )
-    {
-        d_data->maxMajor = ticks;
-        updateScaleDraw();
-    }
-}
-
-/*!
-  \return Maximal number of major tick intervals
-  \sa setScaleMaxMajor(), scaleMaxMinor()
-*/
-int QwtAbstractScale::scaleMaxMajor() const
-{
-    return d_data->maxMajor;
-}
-
-/*!
-  \brief Set the maximum number of minor tick intervals
-
-  The scale's minor ticks are calculated automatically such that
-  the number of minor intervals does not exceed ticks.
-  The default value is 3.
-
-  \param ticks Maximal number of minor ticks.
-
-  \sa scaleMaxMajor(), setScaleMaxMinor(),
-      setScaleStepSize(), QwtScaleEngine::divideInterval()
-*/
-void QwtAbstractScale::setScaleMaxMinor( int ticks )
-{
-    if ( ticks != d_data->maxMinor )
-    {
-        d_data->maxMinor = ticks;
-        updateScaleDraw();
-    }
-}
-
-/*!
-  \return Maximal number of minor tick intervals
-  \sa setScaleMaxMinor(), scaleMaxMajor()
-*/
-int QwtAbstractScale::scaleMaxMinor() const
-{
-    return d_data->maxMinor;
-}
-
-/*!
-   \brief Set the step size used for calculating a scale division
-
-   The step size is hint for calculating the intervals for
-   the major ticks of the scale. A value of 0.0 is interpreted
-   as no hint.
-
-   \param stepSize Hint for the step size of the scale
-
-   \sa scaleStepSize(), QwtScaleEngine::divideScale()
-
-   \note Position and distance between the major ticks also
-         depends on scaleMaxMajor().
-*/
-void QwtAbstractScale::setScaleStepSize( double stepSize )
-{
-    if ( stepSize != d_data->stepSize )
-    {
-        d_data->stepSize = stepSize;
-        updateScaleDraw();
-    }
-}
-
-/*!
-  \return Hint for the step size of the scale
-  \sa setScaleStepSize(), QwtScaleEngine::divideScale()
-*/
-double QwtAbstractScale::scaleStepSize() const
-{
-    return d_data->stepSize;
-}
-
-/*!
-  \brief Set a scale draw
-
-  scaleDraw has to be created with new and will be deleted in
-  the destructor or the next call of setAbstractScaleDraw().
-
-  \sa abstractScaleDraw()
-*/
-void QwtAbstractScale::setAbstractScaleDraw( QwtAbstractScaleDraw *scaleDraw )
-{
-    if ( scaleDraw == NULL || scaleDraw == d_data->scaleDraw )
-        return;
-
-    if ( d_data->scaleDraw != NULL )
-        scaleDraw->setScaleDiv( d_data->scaleDraw->scaleDiv() );
-
-    delete d_data->scaleDraw;
-    d_data->scaleDraw = scaleDraw;
-}
-
-/*!
-    \return Scale draw
-    \sa setAbstractScaleDraw()
-*/
-QwtAbstractScaleDraw *QwtAbstractScale::abstractScaleDraw()
-{
-    return d_data->scaleDraw;
-}
-
-/*!
-    \return Scale draw
-    \sa setAbstractScaleDraw()
-*/
-const QwtAbstractScaleDraw *QwtAbstractScale::abstractScaleDraw() const
-{
-    return d_data->scaleDraw;
-}
-
-/*!
-  \brief Set a scale engine
-
-  The scale engine is responsible for calculating the scale division
-  and provides a transformation between scale and widget coordinates.
-
-  scaleEngine has to be created with new and will be deleted in
-  the destructor or the next call of setScaleEngine.
-*/
-void QwtAbstractScale::setScaleEngine( QwtScaleEngine *scaleEngine )
-{
-    if ( scaleEngine != NULL && scaleEngine != d_data->scaleEngine )
-    {
-        delete d_data->scaleEngine;
-        d_data->scaleEngine = scaleEngine;
-    }
-}
-
-/*!
-  \return Scale engine
-  \sa setScaleEngine()
-*/
-const QwtScaleEngine *QwtAbstractScale::scaleEngine() const
-{
-    return d_data->scaleEngine;
-}
-
-/*!
-  \return Scale engine
-  \sa setScaleEngine()
-*/
-QwtScaleEngine *QwtAbstractScale::scaleEngine()
-{
-    return d_data->scaleEngine;
-}
-
-/*!
-  \return Scale boundaries and positions of the ticks
-
-  The scale division might have been assigned explicitly
-  or calculated implicitly by rescale(). 
- */
-const QwtScaleDiv &QwtAbstractScale::scaleDiv() const
-{
-    return d_data->scaleDraw->scaleDiv();
-}
-
-/*!
-  \return Map to translate between scale and widget coordinates
- */
-const QwtScaleMap &QwtAbstractScale::scaleMap() const
-{
-    return d_data->scaleDraw->scaleMap();
-}
-
-/*!
-  Translate a scale value into a widget coordinate
-
-  \param value Scale value 
-  \return Corresponding widget coordinate for value
-  \sa scaleMap(), invTransform()
- */
-int QwtAbstractScale::transform( double value ) const
-{
-    return qRound( d_data->scaleDraw->scaleMap().transform( value ) );
-}
-
-/*!
-  Translate a widget coordinate into a scale value
-
-  \param value Widget coordinate
-  \return Corresponding scale coordinate for value
-  \sa scaleMap(), transform()
- */
-double QwtAbstractScale::invTransform( int value ) const
-{
-    return d_data->scaleDraw->scaleMap().invTransform( value );
-}
-
-/*!
-  \return True, when the scale is increasing in opposite direction
-          to the widget coordinates
- */
-bool QwtAbstractScale::isInverted() const
-{
-    return d_data->scaleDraw->scaleMap().isInverting();
-}
-
-/*!
-  \return The boundary with the smaller value
-  \sa maximum(), lowerBound(), upperBound()
- */
-double QwtAbstractScale::minimum() const
-{
-    return qMin( d_data->scaleDraw->scaleDiv().lowerBound(),
-        d_data->scaleDraw->scaleDiv().upperBound() );
-}
-
-/*!
-  \return The boundary with the larger value
-  \sa minimum(), lowerBound(), upperBound()
- */
-double QwtAbstractScale::maximum() const
-{
-    return qMax( d_data->scaleDraw->scaleDiv().lowerBound(),
-        d_data->scaleDraw->scaleDiv().upperBound() );
-}
-
-//! Notify changed scale
-void QwtAbstractScale::scaleChange()
-{
-}
-
-/*!
-  Recalculate the scale division and update the scale.
-
-  \param lowerBound Lower limit of the scale interval
-  \param upperBound Upper limit of the scale interval
-  \param stepSize Major step size
-
-  \sa scaleChange()
-*/
-void QwtAbstractScale::rescale( 
-    double lowerBound, double upperBound, double stepSize )
-{
-    const QwtScaleDiv scaleDiv = d_data->scaleEngine->divideScale(
-        lowerBound, upperBound, d_data->maxMajor, d_data->maxMinor, stepSize );
-
-    if ( scaleDiv != d_data->scaleDraw->scaleDiv() )
-    {
-#if 1
-        d_data->scaleDraw->setTransformation(
-            d_data->scaleEngine->transformation() );
-#endif
-
-        d_data->scaleDraw->setScaleDiv( scaleDiv );
-        scaleChange();
-    }
-}
-
-void QwtAbstractScale::updateScaleDraw()
-{
-    rescale( d_data->scaleDraw->scaleDiv().lowerBound(),
-        d_data->scaleDraw->scaleDiv().upperBound(), d_data->stepSize );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale.h
deleted file mode 100644
index 15dd742f5bcb7ba0332220e9b9c403a15ec98d36..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_ABSTRACT_SCALE_H
-#define QWT_ABSTRACT_SCALE_H
-
-#include "qwt_global.h"
-#include <qwidget.h>
-
-class QwtScaleEngine;
-class QwtAbstractScaleDraw;
-class QwtScaleDiv;
-class QwtScaleMap;
-class QwtInterval;
-
-/*!
-  \brief An abstract base class for widgets having a scale
-
-  The scale of an QwtAbstractScale is determined by a QwtScaleDiv
-  definition, that contains the boundaries and the ticks of the scale.
-  The scale is painted using a QwtScaleDraw object.
-
-  The scale division might be assigned explicitly - but usually
-  it is calculated from the boundaries using a QwtScaleEngine. 
-
-  The scale engine also decides the type of transformation of the scale 
-  ( linear, logarithmic ... ).
-*/
-
-class QWT_EXPORT QwtAbstractScale: public QWidget
-{
-    Q_OBJECT
-
-    Q_PROPERTY( double lowerBound READ lowerBound WRITE setLowerBound )
-    Q_PROPERTY( double upperBound READ upperBound WRITE setUpperBound )
-
-    Q_PROPERTY( int scaleMaxMajor READ scaleMaxMajor WRITE setScaleMaxMajor )
-    Q_PROPERTY( int scaleMaxMinor READ scaleMaxMinor WRITE setScaleMaxMinor )
-
-    Q_PROPERTY( double scaleStepSize READ scaleStepSize WRITE setScaleStepSize )
-
-public:
-    QwtAbstractScale( QWidget *parent = NULL );
-    virtual ~QwtAbstractScale();
-
-    void setScale( double lowerBound, double upperBound );
-    void setScale( const QwtInterval & );
-    void setScale( const QwtScaleDiv & );
-
-    const QwtScaleDiv& scaleDiv() const;
-
-    void setLowerBound( double value );
-    double lowerBound() const;
-
-    void setUpperBound( double value );
-    double upperBound() const;
-
-    void setScaleStepSize( double stepSize );
-    double scaleStepSize() const;
-
-    void setScaleMaxMajor( int ticks );
-    int scaleMaxMinor() const;
-
-    void setScaleMaxMinor( int ticks );
-    int scaleMaxMajor() const;
-
-    void setScaleEngine( QwtScaleEngine * );
-    const QwtScaleEngine *scaleEngine() const;
-    QwtScaleEngine *scaleEngine();
-
-    int transform( double ) const;
-    double invTransform( int ) const;
-
-    bool isInverted() const;
-
-    double minimum() const;
-    double maximum() const;
-
-    const QwtScaleMap &scaleMap() const;
-
-protected:
-    void rescale( double lowerBound, 
-        double upperBound, double stepSize );
-
-    void setAbstractScaleDraw( QwtAbstractScaleDraw * );
-
-    const QwtAbstractScaleDraw *abstractScaleDraw() const;
-    QwtAbstractScaleDraw *abstractScaleDraw();
-
-    virtual void scaleChange();
-
-private:
-    void updateScaleDraw();
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale_draw.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale_draw.cpp
deleted file mode 100644
index ee39cfdac38bd0767cd5e601cd5a0a6232868499..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale_draw.cpp
+++ /dev/null
@@ -1,420 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_abstract_scale_draw.h"
-#include "qwt_math.h"
-#include "qwt_text.h"
-#include "qwt_painter.h"
-#include "qwt_scale_map.h"
-#include <qpainter.h>
-#include <qpalette.h>
-#include <qmap.h>
-#include <qlocale.h>
-
-class QwtAbstractScaleDraw::PrivateData
-{
-public:
-    PrivateData():
-        spacing( 4.0 ),
-        penWidth( 0 ),
-        minExtent( 0.0 )
-    {
-        components = QwtAbstractScaleDraw::Backbone 
-            | QwtAbstractScaleDraw::Ticks 
-            | QwtAbstractScaleDraw::Labels;
-
-        tickLength[QwtScaleDiv::MinorTick] = 4.0;
-        tickLength[QwtScaleDiv::MediumTick] = 6.0;
-        tickLength[QwtScaleDiv::MajorTick] = 8.0;
-    }
-
-    ScaleComponents components;
-
-    QwtScaleMap map;
-    QwtScaleDiv scaleDiv;
-
-    double spacing;
-    double tickLength[QwtScaleDiv::NTickTypes];
-    int penWidth;
-
-    double minExtent;
-
-    QMap<double, QwtText> labelCache;
-};
-
-/*!
-  \brief Constructor
-
-  The range of the scale is initialized to [0, 100],
-  The spacing (distance between ticks and labels) is
-  set to 4, the tick lengths are set to 4,6 and 8 pixels
-*/
-QwtAbstractScaleDraw::QwtAbstractScaleDraw()
-{
-    d_data = new QwtAbstractScaleDraw::PrivateData;
-}
-
-//! Destructor
-QwtAbstractScaleDraw::~QwtAbstractScaleDraw()
-{
-    delete d_data;
-}
-
-/*!
-  En/Disable a component of the scale
-
-  \param component Scale component
-  \param enable On/Off
-
-  \sa hasComponent()
-*/
-void QwtAbstractScaleDraw::enableComponent(
-    ScaleComponent component, bool enable )
-{
-    if ( enable )
-        d_data->components |= component;
-    else
-        d_data->components &= ~component;
-}
-
-/*!
-  Check if a component is enabled
-
-  \param component Component type
-  \return true, when component is enabled
-  \sa enableComponent()
-*/
-bool QwtAbstractScaleDraw::hasComponent( ScaleComponent component ) const
-{
-    return ( d_data->components & component );
-}
-
-/*!
-  Change the scale division
-  \param scaleDiv New scale division
-*/
-void QwtAbstractScaleDraw::setScaleDiv( const QwtScaleDiv &scaleDiv )
-{
-    d_data->scaleDiv = scaleDiv;
-    d_data->map.setScaleInterval( scaleDiv.lowerBound(), scaleDiv.upperBound() );
-    d_data->labelCache.clear();
-}
-
-/*!
-  Change the transformation of the scale
-  \param transformation New scale transformation
-*/
-void QwtAbstractScaleDraw::setTransformation(
-    QwtTransform *transformation )
-{
-    d_data->map.setTransformation( transformation );
-}
-
-//! \return Map how to translate between scale and pixel values
-const QwtScaleMap &QwtAbstractScaleDraw::scaleMap() const
-{
-    return d_data->map;
-}
-
-//! \return Map how to translate between scale and pixel values
-QwtScaleMap &QwtAbstractScaleDraw::scaleMap()
-{
-    return d_data->map;
-}
-
-//! \return scale division
-const QwtScaleDiv& QwtAbstractScaleDraw::scaleDiv() const
-{
-    return d_data->scaleDiv;
-}
-
-/*!
-  \brief Specify the width of the scale pen
-  \param width Pen width
-  \sa penWidth()
-*/
-void QwtAbstractScaleDraw::setPenWidth( int width )
-{
-    if ( width < 0 )
-        width = 0;
-
-    if ( width != d_data->penWidth )
-        d_data->penWidth = width;
-}
-
-/*!
-    \return Scale pen width
-    \sa setPenWidth()
-*/
-int QwtAbstractScaleDraw::penWidth() const
-{
-    return d_data->penWidth;
-}
-
-/*!
-  \brief Draw the scale
-
-  \param painter    The painter
-
-  \param palette    Palette, text color is used for the labels,
-                    foreground color for ticks and backbone
-*/
-void QwtAbstractScaleDraw::draw( QPainter *painter,
-    const QPalette& palette ) const
-{
-    painter->save();
-
-    QPen pen = painter->pen();
-    pen.setWidth( d_data->penWidth );
-    pen.setCosmetic( false );
-    painter->setPen( pen );
-
-    if ( hasComponent( QwtAbstractScaleDraw::Labels ) )
-    {
-        painter->save();
-        painter->setPen( palette.color( QPalette::Text ) ); // ignore pen style
-
-        const QList<double> &majorTicks =
-            d_data->scaleDiv.ticks( QwtScaleDiv::MajorTick );
-
-        for ( int i = 0; i < majorTicks.count(); i++ )
-        {
-            const double v = majorTicks[i];
-            if ( d_data->scaleDiv.contains( v ) )
-                drawLabel( painter, v );
-        }
-
-        painter->restore();
-    }
-
-    if ( hasComponent( QwtAbstractScaleDraw::Ticks ) )
-    {
-        painter->save();
-
-        QPen pen = painter->pen();
-        pen.setColor( palette.color( QPalette::WindowText ) );
-        pen.setCapStyle( Qt::FlatCap );
-
-        painter->setPen( pen );
-
-        for ( int tickType = QwtScaleDiv::MinorTick;
-            tickType < QwtScaleDiv::NTickTypes; tickType++ )
-        {
-            const double tickLen = d_data->tickLength[tickType];
-            if ( tickLen <= 0.0 )
-                continue;
-
-            const QList<double> &ticks = d_data->scaleDiv.ticks( tickType );
-            for ( int i = 0; i < ticks.count(); i++ )
-            {
-                const double v = ticks[i];
-                if ( d_data->scaleDiv.contains( v ) )
-                    drawTick( painter, v, tickLen );
-            }
-        }
-
-        painter->restore();
-    }
-
-    if ( hasComponent( QwtAbstractScaleDraw::Backbone ) )
-    {
-        painter->save();
-
-        QPen pen = painter->pen();
-        pen.setColor( palette.color( QPalette::WindowText ) );
-        pen.setCapStyle( Qt::FlatCap );
-
-        painter->setPen( pen );
-
-        drawBackbone( painter );
-
-        painter->restore();
-    }
-
-    painter->restore();
-}
-
-/*!
-  \brief Set the spacing between tick and labels
-
-  The spacing is the distance between ticks and labels.
-  The default spacing is 4 pixels.
-
-  \param spacing Spacing
-
-  \sa spacing()
-*/
-void QwtAbstractScaleDraw::setSpacing( double spacing )
-{
-    if ( spacing < 0 )
-        spacing = 0;
-
-    d_data->spacing = spacing;
-}
-
-/*!
-  \brief Get the spacing
-
-  The spacing is the distance between ticks and labels.
-  The default spacing is 4 pixels.
-
-  \return Spacing
-  \sa setSpacing()
-*/
-double QwtAbstractScaleDraw::spacing() const
-{
-    return d_data->spacing;
-}
-
-/*!
-  \brief Set a minimum for the extent
-
-  The extent is calculated from the components of the
-  scale draw. In situations, where the labels are
-  changing and the layout depends on the extent (f.e scrolling
-  a scale), setting an upper limit as minimum extent will
-  avoid jumps of the layout.
-
-  \param minExtent Minimum extent
-
-  \sa extent(), minimumExtent()
-*/
-void QwtAbstractScaleDraw::setMinimumExtent( double minExtent )
-{
-    if ( minExtent < 0.0 )
-        minExtent = 0.0;
-
-    d_data->minExtent = minExtent;
-}
-
-/*!
-  Get the minimum extent
-  \return Minimum extent
-  \sa extent(), setMinimumExtent()
-*/
-double QwtAbstractScaleDraw::minimumExtent() const
-{
-    return d_data->minExtent;
-}
-
-/*!
-  Set the length of the ticks
-
-  \param tickType Tick type
-  \param length New length
-
-  \warning the length is limited to [0..1000]
-*/
-void QwtAbstractScaleDraw::setTickLength(
-    QwtScaleDiv::TickType tickType, double length )
-{
-    if ( tickType < QwtScaleDiv::MinorTick ||
-        tickType > QwtScaleDiv::MajorTick )
-    {
-        return;
-    }
-
-    if ( length < 0.0 )
-        length = 0.0;
-
-    const double maxTickLen = 1000.0;
-    if ( length > maxTickLen )
-        length = maxTickLen;
-
-    d_data->tickLength[tickType] = length;
-}
-
-/*!
-    \return Length of the ticks
-    \sa setTickLength(), maxTickLength()
-*/
-double QwtAbstractScaleDraw::tickLength( QwtScaleDiv::TickType tickType ) const
-{
-    if ( tickType < QwtScaleDiv::MinorTick ||
-        tickType > QwtScaleDiv::MajorTick )
-    {
-        return 0;
-    }
-
-    return d_data->tickLength[tickType];
-}
-
-/*!
-   \return Length of the longest tick
-
-   Useful for layout calculations
-   \sa tickLength(), setTickLength()
-*/
-double QwtAbstractScaleDraw::maxTickLength() const
-{
-    double length = 0.0;
-    for ( int i = 0; i < QwtScaleDiv::NTickTypes; i++ )
-        length = qMax( length, d_data->tickLength[i] );
-
-    return length;
-}
-
-/*!
-  \brief Convert a value into its representing label
-
-  The value is converted to a plain text using
-  QLocale().toString(value).
-  This method is often overloaded by applications to have individual
-  labels.
-
-  \param value Value
-  \return Label string.
-*/
-QwtText QwtAbstractScaleDraw::label( double value ) const
-{
-    return QLocale().toString( value );
-}
-
-/*!
-   \brief Convert a value into its representing label and cache it.
-
-   The conversion between value and label is called very often
-   in the layout and painting code. Unfortunately the
-   calculation of the label sizes might be slow (really slow
-   for rich text in Qt4), so it's necessary to cache the labels.
-
-   \param font Font
-   \param value Value
-
-   \return Tick label
-*/
-const QwtText &QwtAbstractScaleDraw::tickLabel(
-    const QFont &font, double value ) const
-{
-    QMap<double, QwtText>::const_iterator it = d_data->labelCache.find( value );
-    if ( it == d_data->labelCache.end() )
-    {
-        QwtText lbl = label( value );
-        lbl.setRenderFlags( 0 );
-        lbl.setLayoutAttribute( QwtText::MinimumLayout );
-
-        ( void )lbl.textSize( font ); // initialize the internal cache
-
-        it = d_data->labelCache.insert( value, lbl );
-    }
-
-    return ( *it );
-}
-
-/*!
-   Invalidate the cache used by tickLabel()
-
-   The cache is invalidated, when a new QwtScaleDiv is set. If
-   the labels need to be changed. while the same QwtScaleDiv is set,
-   invalidateCache() needs to be called manually.
-*/
-void QwtAbstractScaleDraw::invalidateCache()
-{
-    d_data->labelCache.clear();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale_draw.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale_draw.h
deleted file mode 100644
index 1c09ec7a02fa7ef012ff611d2223f920510b6660..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_scale_draw.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_ABSTRACT_SCALE_DRAW_H
-#define QWT_ABSTRACT_SCALE_DRAW_H
-
-#include "qwt_global.h"
-#include "qwt_scale_div.h"
-#include "qwt_text.h"
-
-class QPalette;
-class QPainter;
-class QFont;
-class QwtTransform;
-class QwtScaleMap;
-
-/*!
-  \brief A abstract base class for drawing scales
-
-  QwtAbstractScaleDraw can be used to draw linear or logarithmic scales.
-
-  After a scale division has been specified as a QwtScaleDiv object
-  using setScaleDiv(), the scale can be drawn with the draw() member.
-*/
-class QWT_EXPORT QwtAbstractScaleDraw
-{
-public:
-
-    /*!
-       Components of a scale
-       \sa enableComponent(), hasComponent
-    */
-    enum ScaleComponent
-    {
-        //! Backbone = the line where the ticks are located
-        Backbone = 0x01,
-
-        //! Ticks
-        Ticks = 0x02,
-
-        //! Labels
-        Labels = 0x04
-    };
-
-    //! Scale components
-    typedef QFlags<ScaleComponent> ScaleComponents;
-
-    QwtAbstractScaleDraw();
-    virtual ~QwtAbstractScaleDraw();
-
-    void setScaleDiv( const QwtScaleDiv &s );
-    const QwtScaleDiv& scaleDiv() const;
-
-    void setTransformation( QwtTransform * );
-    const QwtScaleMap &scaleMap() const;
-    QwtScaleMap &scaleMap();
-
-    void enableComponent( ScaleComponent, bool enable = true );
-    bool hasComponent( ScaleComponent ) const;
-
-    void setTickLength( QwtScaleDiv::TickType, double length );
-    double tickLength( QwtScaleDiv::TickType ) const;
-    double maxTickLength() const;
-
-    void setSpacing( double margin );
-    double spacing() const;
-
-    void setPenWidth( int width );
-    int penWidth() const;
-
-    virtual void draw( QPainter *, const QPalette & ) const;
-
-    virtual QwtText label( double ) const;
-
-    /*!
-      Calculate the extent
-
-      The extent is the distance from the baseline to the outermost
-      pixel of the scale draw in opposite to its orientation.
-      It is at least minimumExtent() pixels.
-
-      \param font Font used for drawing the tick labels
-      \return Number of pixels
-
-      \sa setMinimumExtent(), minimumExtent()
-    */
-    virtual double extent( const QFont &font ) const = 0;
-
-    void setMinimumExtent( double );
-    double minimumExtent() const;
-
-protected:
-    /*!
-       Draw a tick
-
-       \param painter Painter
-       \param value Value of the tick
-       \param len Length of the tick
-
-       \sa drawBackbone(), drawLabel()
-    */
-    virtual void drawTick( QPainter *painter, double value, double len ) const = 0;
-
-    /*!
-      Draws the baseline of the scale
-      \param painter Painter
-
-      \sa drawTick(), drawLabel()
-    */
-    virtual void drawBackbone( QPainter *painter ) const = 0;
-
-    /*!
-        Draws the label for a major scale tick
-
-        \param painter Painter
-        \param value Value
-
-        \sa drawTick(), drawBackbone()
-    */
-    virtual void drawLabel( QPainter *painter, double value ) const = 0;
-
-    void invalidateCache();
-    const QwtText &tickLabel( const QFont &, double value ) const;
-
-private:
-    QwtAbstractScaleDraw( const QwtAbstractScaleDraw & );
-    QwtAbstractScaleDraw &operator=( const QwtAbstractScaleDraw & );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtAbstractScaleDraw::ScaleComponents )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_slider.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_slider.cpp
deleted file mode 100644
index 449764bc1794f2f4f2225f774c2b255af9b260dd..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_slider.cpp
+++ /dev/null
@@ -1,822 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_abstract_slider.h"
-#include "qwt_abstract_scale_draw.h"
-#include "qwt_math.h"
-#include "qwt_scale_map.h"
-#include <qevent.h>
-
-#if QT_VERSION < 0x040601
-#define qFabs(x) ::fabs(x)
-#endif
-
-static double qwtAlignToScaleDiv( 
-    const QwtAbstractSlider *slider, double value )
-{
-    const QwtScaleDiv &sd = slider->scaleDiv();
-
-    const int tValue = slider->transform( value );
-
-    if ( tValue == slider->transform( sd.lowerBound() ) )
-        return sd.lowerBound();
-
-    if ( tValue == slider->transform( sd.lowerBound() ) )
-        return sd.upperBound();
-
-    for ( int i = 0; i < QwtScaleDiv::NTickTypes; i++ )
-    {
-        const QList<double> ticks = sd.ticks( i );
-        for ( int j = 0; j < ticks.size(); j++ )
-        {
-            if ( slider->transform( ticks[ j ] ) == tValue )
-                return ticks[ j ];
-        }
-    }
-
-    return value;
-}
-
-class QwtAbstractSlider::PrivateData
-{
-public:
-    PrivateData():
-        isScrolling( false ),
-        isTracking( true ),
-        pendingValueChanged( false ),
-        readOnly( false ),
-        totalSteps( 100 ),
-        singleSteps( 1 ),
-        pageSteps( 10 ),
-        stepAlignment( true ),
-        isValid( false ),
-        value( 0.0 ),
-        wrapping( false ),
-        invertedControls( false )
-    {
-    }
-
-    bool isScrolling;
-    bool isTracking;
-    bool pendingValueChanged;
-
-    bool readOnly;
-
-    uint totalSteps;
-    uint singleSteps;
-    uint pageSteps;
-    bool stepAlignment;
-
-    bool isValid;
-    double value;
-
-    bool wrapping;
-    bool invertedControls;
-};
-
-/*!
-  \brief Constructor
-
-  The scale is initialized to [0.0, 100.0], the
-  number of steps is set to 100 with 1 and 10 and single
-  an page step sizes. Step alignment is enabled.
-
-  The initial value is invalid.
-
-  \param parent Parent widget
-*/
-QwtAbstractSlider::QwtAbstractSlider( QWidget *parent ):
-    QwtAbstractScale( parent )
-{
-    d_data = new QwtAbstractSlider::PrivateData;
-
-    setScale( 0.0, 100.0 );
-    setFocusPolicy( Qt::StrongFocus );
-}
-
-//! Destructor
-QwtAbstractSlider::~QwtAbstractSlider()
-{
-    delete d_data;
-}
-
-/*! 
-  Set the value to be valid/invalid
-
-  \param on When true, the value is invalidated
-
-  \sa setValue()
-*/
-void QwtAbstractSlider::setValid( bool on )
-{
-    if ( on != d_data->isValid )
-    {
-        d_data->isValid = on;
-        sliderChange();
-
-        Q_EMIT valueChanged( d_data->value );
-    }   
-}   
-
-//! \return True, when the value is invalid
-bool QwtAbstractSlider::isValid() const
-{
-    return d_data->isValid;
-}   
-
-/*!
-  En/Disable read only mode
-
-  In read only mode the slider can't be controlled by mouse
-  or keyboard.
-
-  \param on Enables in case of true
-  \sa isReadOnly()
-
-  \warning The focus policy is set to Qt::StrongFocus or Qt::NoFocus
-*/
-void QwtAbstractSlider::setReadOnly( bool on )
-{
-    if ( d_data->readOnly != on )
-    {
-        d_data->readOnly = on;
-        setFocusPolicy( on ? Qt::StrongFocus : Qt::NoFocus );
-
-        update();
-    }
-}
-
-/*!
-  In read only mode the slider can't be controlled by mouse
-  or keyboard.
-
-  \return true if read only
-  \sa setReadOnly()
-*/
-bool QwtAbstractSlider::isReadOnly() const
-{
-    return d_data->readOnly;
-}
-
-/*!
-  \brief Enables or disables tracking.
-
-  If tracking is enabled, the slider emits the valueChanged() 
-  signal while the movable part of the slider is being dragged. 
-  If tracking is disabled, the slider emits the valueChanged() signal 
-  only when the user releases the slider.
-
-  Tracking is enabled by default.
-  \param on \c true (enable) or \c false (disable) tracking.
-
-  \sa isTracking(), sliderMoved()
-*/
-void QwtAbstractSlider::setTracking( bool on )
-{
-    d_data->isTracking = on;
-}
-
-/*!
-  \return True, when tracking has been enabled
-  \sa setTracking()
-*/
-bool QwtAbstractSlider::isTracking() const
-{
-    return d_data->isTracking;
-}
-
-/*!
-   Mouse press event handler
-   \param event Mouse event
-*/
-void QwtAbstractSlider::mousePressEvent( QMouseEvent *event )
-{
-    if ( isReadOnly() )
-    {
-        event->ignore();
-        return;
-    }
-
-    if ( !d_data->isValid || lowerBound() == upperBound() )
-        return;
-
-    d_data->isScrolling = isScrollPosition( event->pos() );
-
-    if ( d_data->isScrolling )
-    {
-        d_data->pendingValueChanged = false;
-
-        Q_EMIT sliderPressed();
-    }
-}
-
-/*!
-   Mouse Move Event handler
-   \param event Mouse event
-*/
-void QwtAbstractSlider::mouseMoveEvent( QMouseEvent *event )
-{
-    if ( isReadOnly() )
-    {
-        event->ignore();
-        return;
-    }
-
-    if ( d_data->isValid && d_data->isScrolling )
-    {
-        double value = scrolledTo( event->pos() );
-        if ( value != d_data->value )
-        {
-            value = boundedValue( value );
-
-            if ( d_data->stepAlignment )
-            {
-                value = alignedValue( value );
-            }
-            else
-            {
-                value = qwtAlignToScaleDiv( this, value );
-            }
-
-            if ( value != d_data->value )
-            {
-                d_data->value = value;
-
-                sliderChange();
-
-                Q_EMIT sliderMoved( d_data->value );
-
-                if ( d_data->isTracking )
-                    Q_EMIT valueChanged( d_data->value );
-                else
-                    d_data->pendingValueChanged = true;
-            }
-        }
-    }
-}
-
-/*!
-   Mouse Release Event handler
-   \param event Mouse event
-*/
-void QwtAbstractSlider::mouseReleaseEvent( QMouseEvent *event )
-{
-    if ( isReadOnly() )
-    {
-        event->ignore();
-        return;
-    }
-
-    if ( d_data->isScrolling && d_data->isValid )
-    {
-        d_data->isScrolling = false;
-
-        if ( d_data->pendingValueChanged )
-            Q_EMIT valueChanged( d_data->value );
-
-        Q_EMIT sliderReleased();
-    }
-}
-
-/*!
-   Wheel Event handler
-
-   In/decreases the value by s number of steps. The direction 
-   depends on the invertedControls() property.
-
-   When the control or shift modifier is pressed the wheel delta
-   ( divided by 120 ) is mapped to an increment according to
-   pageSteps(). Otherwise it is mapped to singleSteps().
-
-   \param event Wheel event
-*/
-void QwtAbstractSlider::wheelEvent( QWheelEvent *event )
-{
-    if ( isReadOnly() )
-    {
-        event->ignore();
-        return;
-    }
-
-    if ( !d_data->isValid || d_data->isScrolling )
-        return;
-
-    int numSteps = 0;
-
-    if ( ( event->modifiers() & Qt::ControlModifier) ||
-        ( event->modifiers() & Qt::ShiftModifier ) )
-    {
-        // one page regardless of delta
-        numSteps = d_data->pageSteps;
-        if ( event->delta() < 0 )
-            numSteps = -numSteps;
-    }
-    else
-    {
-        const int numTurns = ( event->delta() / 120 );
-        numSteps = numTurns * d_data->singleSteps;
-    }
-
-    if ( d_data->invertedControls )
-        numSteps = -numSteps;
-
-    const double value = incrementedValue( d_data->value, numSteps );
-    if ( value != d_data->value )
-    {
-        d_data->value = value;
-        sliderChange();
-
-        Q_EMIT sliderMoved( d_data->value );
-        Q_EMIT valueChanged( d_data->value );
-    }
-}
-
-/*!
-  Handles key events
-
-  QwtAbstractSlider handles the following keys:
-
-  - Qt::Key_Left\n
-    Add/Subtract singleSteps() in direction to lowerBound();
-  - Qt::Key_Right\n
-    Add/Subtract singleSteps() in direction to upperBound();
-  - Qt::Key_Down\n
-    Subtract singleSteps(), when invertedControls() is false
-  - Qt::Key_Up\n
-    Add singleSteps(), when invertedControls() is false
-  - Qt::Key_PageDown\n
-    Subtract pageSteps(), when invertedControls() is false
-  - Qt::Key_PageUp\n
-    Add pageSteps(), when invertedControls() is false
-  - Qt::Key_Home\n
-    Set the value to the minimum()
-  - Qt::Key_End\n
-    Set the value to the maximum()
-
-  \param event Key event
-  \sa isReadOnly()
-*/
-void QwtAbstractSlider::keyPressEvent( QKeyEvent *event )
-{
-    if ( isReadOnly() )
-    {
-        event->ignore();
-        return;
-    }
-
-    if ( !d_data->isValid || d_data->isScrolling )
-        return;
-
-    int numSteps = 0;
-    double value = d_data->value;
-
-    switch ( event->key() )
-    {
-        case Qt::Key_Left:
-        {
-            numSteps = -static_cast<int>( d_data->singleSteps );
-            if ( isInverted() )
-                numSteps = -numSteps;
-
-            break;
-        }
-        case Qt::Key_Right:
-        {
-            numSteps = d_data->singleSteps;
-            if ( isInverted() )
-                numSteps = -numSteps;
-
-            break;
-        }
-        case Qt::Key_Down:
-        {
-            numSteps = -static_cast<int>( d_data->singleSteps );
-            if ( d_data->invertedControls )
-                numSteps = -numSteps;
-            break;
-        }
-        case Qt::Key_Up:
-        {
-            numSteps = d_data->singleSteps;
-            if ( d_data->invertedControls )
-                numSteps = -numSteps;
-
-            break;
-        }
-        case Qt::Key_PageUp:
-        {
-            numSteps = d_data->pageSteps;
-            if ( d_data->invertedControls )
-                numSteps = -numSteps;
-            break;
-        }
-        case Qt::Key_PageDown:
-        {
-            numSteps = -static_cast<int>( d_data->pageSteps );
-            if ( d_data->invertedControls )
-                numSteps = -numSteps;
-            break;
-        }
-        case Qt::Key_Home:
-        {
-            value = minimum();
-            break;
-        }
-        case Qt::Key_End:
-        {
-            value = maximum();
-            break;
-        }
-        default:;
-        {
-            event->ignore();
-        }
-    }
-
-    if ( numSteps != 0 )
-    {
-        value = incrementedValue( d_data->value, numSteps );
-    }
-
-    if ( value != d_data->value )
-    {
-        d_data->value = value;
-        sliderChange();
-
-        Q_EMIT sliderMoved( d_data->value );
-        Q_EMIT valueChanged( d_data->value );
-    }
-}
-
-/*!
-  \brief Set the number of steps
-
-  The range of the slider is divided into a number of steps from
-  which the value increments according to user inputs depend. 
-
-  The default setting is 100.
-
-  \param stepCount Number of steps
-
-  \sa totalSteps(), setSingleSteps(), setPageSteps()
- */
-void QwtAbstractSlider::setTotalSteps( uint stepCount )
-{
-    d_data->totalSteps = stepCount;
-}
-
-/*!
-  \return Number of steps
-  \sa setTotalSteps(), singleSteps(), pageSteps()
- */
-uint QwtAbstractSlider::totalSteps() const
-{
-    return d_data->totalSteps;
-}
-
-/*!
-  \brief Set the number of steps for a single increment
-
-  The range of the slider is divided into a number of steps from
-  which the value increments according to user inputs depend. 
-
-  \param stepCount Number of steps
-
-  \sa singleSteps(), setTotalSteps(), setPageSteps()
- */
-
-void QwtAbstractSlider::setSingleSteps( uint stepCount )
-{
-    d_data->singleSteps = stepCount;
-}   
-
-/*!
-  \return Number of steps
-  \sa setSingleSteps(), totalSteps(), pageSteps()
- */
-uint QwtAbstractSlider::singleSteps() const
-{
-    return d_data->singleSteps;
-}   
-
-/*! 
-  \brief Set the number of steps for a page increment
-    
-  The range of the slider is divided into a number of steps from
-  which the value increments according to user inputs depend. 
-
-  \param stepCount Number of steps
-
-  \sa pageSteps(), setTotalSteps(), setSingleSteps()
- */
-
-void QwtAbstractSlider::setPageSteps( uint stepCount )
-{
-    d_data->pageSteps = stepCount;
-}
-
-/*!
-  \return Number of steps
-  \sa setPageSteps(), totalSteps(), singleSteps()
- */
-uint QwtAbstractSlider::pageSteps() const
-{
-    return d_data->pageSteps;
-}
-
-/*!
-  \brief Enable step alignment
-
-  When step alignment is enabled values resulting from slider
-  movements are aligned to the step size.
-
-  \param on Enable step alignment when true
-  \sa stepAlignment()
-*/
-void QwtAbstractSlider::setStepAlignment( bool on )
-{   
-    if ( on != d_data->stepAlignment )
-    {
-        d_data->stepAlignment = on;
-    }
-}   
-    
-/*!
-  \return True, when step alignment is enabled
-  \sa setStepAlignment()
- */
-bool QwtAbstractSlider::stepAlignment() const
-{
-    return d_data->stepAlignment;
-}
-
-/*!
-  Set the slider to the specified value
-
-  \param value New value
-  \sa setValid(), sliderChange(), valueChanged()
-*/
-void QwtAbstractSlider::setValue( double value )
-{
-    value = qBound( minimum(), value, maximum() );
-
-    const bool changed = ( d_data->value != value ) || !d_data->isValid;
-
-    d_data->value = value;
-    d_data->isValid = true;
-
-    if ( changed )
-    {
-        sliderChange();
-        Q_EMIT valueChanged( d_data->value );
-    }
-}
-
-//! Returns the current value.
-double QwtAbstractSlider::value() const
-{
-    return d_data->value;
-}
-
-/*!
-  If wrapping is true stepping up from upperBound() value will 
-  take you to the minimum() value and vice versa. 
-
-  \param on En/Disable wrapping
-  \sa wrapping()
-*/
-void QwtAbstractSlider::setWrapping( bool on )
-{
-    d_data->wrapping = on;
-}   
-
-/*!
-  \return True, when wrapping is set
-  \sa setWrapping()
- */ 
-bool QwtAbstractSlider::wrapping() const
-{
-    return d_data->wrapping;
-}
-
-/*!
-  Invert wheel and key events
-
-  Usually scrolling the mouse wheel "up" and using keys like page 
-  up will increase the slider's value towards its maximum. 
-  When invertedControls() is enabled the value is scrolled
-  towards its minimum.
-
-  Inverting the controls might be f.e. useful for a vertical slider
-  with an inverted scale ( decreasing from top to bottom ).
-
-  \param on Invert controls, when true
-
-  \sa invertedControls(), keyEvent(), wheelEvent()
- */
-void QwtAbstractSlider::setInvertedControls( bool on )
-{
-    d_data->invertedControls = on;
-}
-
-/*!
- \return True, when the controls are inverted
- \sa setInvertedControls()
- */
-bool QwtAbstractSlider::invertedControls() const
-{
-    return d_data->invertedControls;
-}
-
-/*!
-  Increment the slider
-
-  The step size depends on the number of totalSteps()
-
-  \param stepCount Number of steps
-  \sa setTotalSteps(), incrementedValue()
- */
-void QwtAbstractSlider::incrementValue( int stepCount )
-{
-    const double value = incrementedValue( 
-        d_data->value, stepCount );
-
-    if ( value != d_data->value )
-    {
-        d_data->value = value;
-        sliderChange();
-    }
-}
-
-/*!
-  Increment a value 
-
-  \param value Value 
-  \param stepCount Number of steps
-
-  \return Incremented value
- */
-double QwtAbstractSlider::incrementedValue( 
-    double value, int stepCount ) const
-{
-    if ( d_data->totalSteps == 0 )
-        return value;
-
-    const QwtTransform *transformation =
-        scaleMap().transformation();
-
-    if ( transformation == NULL )
-    {
-        const double range = maximum() - minimum();
-        value += stepCount * range / d_data->totalSteps;
-    }
-    else
-    {
-        QwtScaleMap map = scaleMap();
-        map.setPaintInterval( 0, d_data->totalSteps );
-
-        // we need equidant steps according to
-        // paint device coordinates
-        const double range = transformation->transform( maximum() ) 
-            - transformation->transform( minimum() );
-
-        const double stepSize = range / d_data->totalSteps;
-
-        double v = transformation->transform( value );
-
-        v = qRound( v / stepSize ) * stepSize; 
-        v += stepCount * range / d_data->totalSteps;
-
-        value = transformation->invTransform( v );
-    }
-
-    value = boundedValue( value );
-
-    if ( d_data->stepAlignment )
-        value = alignedValue( value );
-
-    return value;
-}
-
-double QwtAbstractSlider::boundedValue( double value ) const
-{
-    const double vmin = minimum();
-    const double vmax = maximum();
-
-    if ( d_data->wrapping && vmin != vmax )
-    {
-        const int fullCircle = 360 * 16;
-
-        const double pd = scaleMap().pDist();
-        if ( int( pd / fullCircle ) * fullCircle == pd )
-        {
-            // full circle scales: min and max are the same
-            const double range = vmax - vmin;
-
-            if ( value < vmin )
-            {
-                value += ::ceil( ( vmin - value ) / range ) * range;
-            }
-            else if ( value > vmax )
-            {
-                value -= ::ceil( ( value - vmax ) / range ) * range;
-            }
-        }
-        else
-        {
-            if ( value < vmin )
-                value = vmax;
-            else if ( value > vmax )
-                value = vmin;
-        }
-    }
-    else
-    {
-        value = qBound( vmin, value, vmax );
-    }
-
-    return value;
-}
-
-double QwtAbstractSlider::alignedValue( double value ) const
-{
-    if ( d_data->totalSteps == 0 )
-        return value;
-
-    double stepSize;
-
-    if ( scaleMap().transformation() == NULL )
-    {
-        stepSize = ( maximum() - minimum() ) / d_data->totalSteps;
-        if ( stepSize > 0.0 )
-        {
-            value = lowerBound() + 
-                qRound( ( value - lowerBound() ) / stepSize ) * stepSize;
-        }
-    }
-    else
-    {
-        stepSize = ( scaleMap().p2() - scaleMap().p1() ) / d_data->totalSteps;
-
-        if ( stepSize > 0.0 )
-        {
-            double v = scaleMap().transform( value );
-
-            v = scaleMap().p1() +
-                qRound( ( v - scaleMap().p1() ) / stepSize ) * stepSize;
-
-            value = scaleMap().invTransform( v );
-        }
-    }
-
-    if ( qAbs( stepSize ) > 1e-12 )
-    {
-        if ( qFuzzyCompare( value + 1.0, 1.0 ) )
-        {
-            // correct rounding error if value = 0
-            value = 0.0;
-        }
-        else
-        {
-            // correct rounding error at the border
-            if ( qFuzzyCompare( value, upperBound() ) )
-                value = upperBound();
-            else if ( qFuzzyCompare( value, lowerBound() ) )
-                value = lowerBound();
-        }
-    }
-
-    return value;
-}
-
-/*!
-  Update the slider according to modifications of the scale
- */
-void QwtAbstractSlider::scaleChange()
-{
-    const double value = qBound( minimum(), d_data->value, maximum() );
-
-    const bool changed = ( value != d_data->value );
-    if ( changed )
-    {
-        d_data->value = value;
-    }
-
-    if ( d_data->isValid || changed )
-        Q_EMIT valueChanged( d_data->value );
-
-    updateGeometry();
-    update();
-}
-
-//! Calling update()
-void QwtAbstractSlider::sliderChange()
-{
-    update();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_slider.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_slider.h
deleted file mode 100644
index ff1dbead93ed628a5098621ae0af7f702c9568f1..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_abstract_slider.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_ABSTRACT_SLIDER_H
-#define QWT_ABSTRACT_SLIDER_H
-
-#include "qwt_global.h"
-#include "qwt_abstract_scale.h"
-
-/*!
-  \brief An abstract base class for slider widgets with a scale
-
-  A slider widget displays a value according to a scale.
-  The class is designed as a common super class for widgets like 
-  QwtKnob, QwtDial and QwtSlider.
-
-  When the slider is nor readOnly() its value can be modified 
-  by keyboard, mouse and wheel inputs. 
-
-  The range of the slider is divided into a number of steps from
-  which the value increments according to user inputs depend. 
-  Only for linear scales the number of steps correspond with
-  a fixed step size.
-*/
-
-class QWT_EXPORT QwtAbstractSlider: public QwtAbstractScale
-{
-    Q_OBJECT
-
-    Q_PROPERTY( double value READ value WRITE setValue )
-
-    Q_PROPERTY( uint totalSteps READ totalSteps WRITE setTotalSteps )
-    Q_PROPERTY( uint singleSteps READ singleSteps WRITE setSingleSteps )
-    Q_PROPERTY( uint pageSteps READ pageSteps WRITE setPageSteps )
-    Q_PROPERTY( bool stepAlignment READ stepAlignment WRITE setStepAlignment )
-
-    Q_PROPERTY( bool readOnly READ isReadOnly WRITE setReadOnly )
-    Q_PROPERTY( bool tracking READ isTracking WRITE setTracking )
-    Q_PROPERTY( bool wrapping READ wrapping WRITE setWrapping )
-
-    Q_PROPERTY( bool invertedControls READ invertedControls WRITE setInvertedControls )
-
-public:
-    explicit QwtAbstractSlider( QWidget *parent = NULL );
-    virtual ~QwtAbstractSlider();
-
-    void setValid( bool );
-    bool isValid() const;
-
-    double value() const;
-
-    void setWrapping( bool );
-    bool wrapping() const;
-
-    void setTotalSteps( uint );
-    uint totalSteps() const;
-
-    void setSingleSteps( uint );
-    uint singleSteps() const;
-
-    void setPageSteps( uint );
-    uint pageSteps() const;
-
-    void setStepAlignment( bool ); 
-    bool stepAlignment() const;
-
-    void setTracking( bool );
-    bool isTracking() const;
-
-    void setReadOnly( bool );
-    bool isReadOnly() const;
-
-    void setInvertedControls( bool );
-    bool invertedControls() const;
-
-public Q_SLOTS:
-    void setValue( double val );
-
-Q_SIGNALS:
-
-    /*!
-      \brief Notify a change of value.
-
-      When tracking is enabled (default setting), 
-      this signal will be emitted every time the value changes. 
-
-      \param value New value
-
-      \sa setTracking(), sliderMoved()
-    */
-    void valueChanged( double value );
-
-    /*!
-      This signal is emitted when the user presses the
-      movable part of the slider.
-    */
-    void sliderPressed();
-
-    /*!
-      This signal is emitted when the user releases the
-      movable part of the slider.
-    */
-    void sliderReleased();
-
-    /*!
-      This signal is emitted when the user moves the
-      slider with the mouse.
-
-      \param value New value
-
-      \sa valueChanged()
-    */
-    void sliderMoved( double value );
-
-protected:
-    virtual void mousePressEvent( QMouseEvent * );
-    virtual void mouseReleaseEvent( QMouseEvent * );
-    virtual void mouseMoveEvent( QMouseEvent * );
-    virtual void keyPressEvent( QKeyEvent * );
-    virtual void wheelEvent( QWheelEvent * );
-
-    /*!
-      \brief Determine what to do when the user presses a mouse button.
-
-      \param pos Mouse position
-
-      \retval True, when pos is a valid scroll position
-      \sa scrolledTo()
-    */
-    virtual bool isScrollPosition( const QPoint &pos ) const = 0;
-
-    /*!
-      \brief Determine the value for a new position of the
-             movable part of the slider
-
-      \param pos Mouse position
-
-      \return Value for the mouse position
-      \sa isScrollPosition()
-    */
-    virtual double scrolledTo( const QPoint &pos ) const = 0;
-
-    void incrementValue( int numSteps );
-
-    virtual void scaleChange();
-
-protected:
-    virtual void sliderChange();
-
-    double incrementedValue( 
-        double value, int stepCount ) const;
-
-private:
-    double alignedValue( double ) const;
-    double boundedValue( double ) const;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_analog_clock.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_analog_clock.cpp
deleted file mode 100644
index 5521dd1ad48c02f31d8816d23fb1d5eafa03de59..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_analog_clock.cpp
+++ /dev/null
@@ -1,244 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_analog_clock.h"
-#include "qwt_round_scale_draw.h"
-#include <qmath.h>
-#include <qlocale.h>
-
-class QwtAnalogClockScaleDraw: public QwtRoundScaleDraw
-{
-public:
-    QwtAnalogClockScaleDraw()
-    {
-        setSpacing( 8 );
-
-        enableComponent( QwtAbstractScaleDraw::Backbone, false );
-
-        setTickLength( QwtScaleDiv::MinorTick, 2 );
-        setTickLength( QwtScaleDiv::MediumTick, 4 );
-        setTickLength( QwtScaleDiv::MajorTick, 8 );
-
-        setPenWidth( 1 );
-    }
-
-    virtual QwtText label( double value ) const
-    {
-        if ( qFuzzyCompare( value + 1.0, 1.0 ) )
-            value = 60.0 * 60.0 * 12.0;
-
-        return QLocale().toString( qRound( value / ( 60.0 * 60.0 ) ) );
-    }
-};
-
-/*!
-  Constructor
-  \param parent Parent widget
-*/
-QwtAnalogClock::QwtAnalogClock( QWidget *parent ):
-    QwtDial( parent )
-{
-    setWrapping( true );
-    setReadOnly( true );
-
-    setOrigin( 270.0 );
-    setScaleDraw( new QwtAnalogClockScaleDraw() );
-
-    setTotalSteps( 60 );
-
-    const int secondsPerHour = 60.0 * 60.0; 
-
-    QList<double> majorTicks;
-    QList<double> minorTicks;
-
-    for ( int i = 0; i < 12; i++ )
-    {
-        majorTicks += i * secondsPerHour;
-
-        for ( int j = 1; j < 5; j++ )
-            minorTicks += i * secondsPerHour + j * secondsPerHour / 5.0;
-    }
-
-    QwtScaleDiv scaleDiv;
-    scaleDiv.setInterval( 0.0, 12.0 * secondsPerHour );
-    scaleDiv.setTicks( QwtScaleDiv::MajorTick, majorTicks );
-    scaleDiv.setTicks( QwtScaleDiv::MinorTick, minorTicks );
-    setScale( scaleDiv );
-
-    QColor knobColor = palette().color( QPalette::Active, QPalette::Text );
-    knobColor = knobColor.dark( 120 );
-
-    QColor handColor;
-    int width;
-
-    for ( int i = 0; i < NHands; i++ )
-    {
-        if ( i == SecondHand )
-        {
-            width = 2;
-            handColor = knobColor.dark( 120 );
-        }
-        else
-        {
-            width = 8;
-            handColor = knobColor;
-        }
-
-        QwtDialSimpleNeedle *hand = new QwtDialSimpleNeedle(
-            QwtDialSimpleNeedle::Arrow, true, handColor, knobColor );
-        hand->setWidth( width );
-
-        d_hand[i] = NULL;
-        setHand( static_cast<Hand>( i ), hand );
-    }
-}
-
-//! Destructor
-QwtAnalogClock::~QwtAnalogClock()
-{
-    for ( int i = 0; i < NHands; i++ )
-        delete d_hand[i];
-}
-
-/*!
-  Nop method, use setHand() instead
-  \sa setHand()
-*/
-void QwtAnalogClock::setNeedle( QwtDialNeedle * )
-{
-    // no op
-    return;
-}
-
-/*!
-   Set a clock hand
-   \param hand Specifies the type of hand
-   \param needle Hand
-   \sa hand()
-*/
-void QwtAnalogClock::setHand( Hand hand, QwtDialNeedle *needle )
-{
-    if ( hand >= 0 && hand < NHands )
-    {
-        delete d_hand[hand];
-        d_hand[hand] = needle;
-    }
-}
-
-/*!
-  \return Clock hand
-  \param hd Specifies the type of hand
-  \sa setHand()
-*/
-QwtDialNeedle *QwtAnalogClock::hand( Hand hd )
-{
-    if ( hd < 0 || hd >= NHands )
-        return NULL;
-
-    return d_hand[hd];
-}
-
-/*!
-  \return Clock hand
-  \param hd Specifies the type of hand
-  \sa setHand()
-*/
-const QwtDialNeedle *QwtAnalogClock::hand( Hand hd ) const
-{
-    return const_cast<QwtAnalogClock *>( this )->hand( hd );
-}
-
-/*!
-  \brief Set the current time
-*/
-void QwtAnalogClock::setCurrentTime()
-{
-    setTime( QTime::currentTime() );
-}
-
-/*!
-  Set a time
-  \param time Time to display
-*/
-void QwtAnalogClock::setTime( const QTime &time )
-{
-    if ( time.isValid() )
-    {
-        setValue( ( time.hour() % 12 ) * 60.0 * 60.0
-            + time.minute() * 60.0 + time.second() );
-    }
-    else
-        setValid( false );
-}
-
-/*!
-  \brief Draw the needle
-
-  A clock has no single needle but three hands instead. drawNeedle()
-  translates value() into directions for the hands and calls
-  drawHand().
-
-  \param painter Painter
-  \param center Center of the clock
-  \param radius Maximum length for the hands
-  \param dir Dummy, not used.
-  \param colorGroup ColorGroup
-
-  \sa drawHand()
-*/
-void QwtAnalogClock::drawNeedle( QPainter *painter, const QPointF &center,
-    double radius, double dir, QPalette::ColorGroup colorGroup ) const
-{
-    Q_UNUSED( dir );
-
-    if ( isValid() )
-    {
-        const double hours = value() / ( 60.0 * 60.0 );
-        const double minutes = 
-            ( value() - qFloor(hours) * 60.0 * 60.0 ) / 60.0;
-        const double seconds = value() - qFloor(hours) * 60.0 * 60.0
-            - qFloor(minutes) * 60.0;
-
-        double angle[NHands];
-        angle[HourHand] = 360.0 * hours / 12.0;
-        angle[MinuteHand] = 360.0 * minutes / 60.0;
-        angle[SecondHand] = 360.0 * seconds / 60.0;
-
-        for ( int hand = 0; hand < NHands; hand++ )
-        {
-            const double d = 360.0 - angle[hand] - origin();
-            drawHand( painter, static_cast<Hand>( hand ), 
-                center, radius, d, colorGroup );
-        }
-    }
-}
-
-/*!
-  Draw a clock hand
-
-  \param painter Painter
-  \param hd Specify the type of hand
-  \param center Center of the clock
-  \param radius Maximum length for the hands
-  \param direction Direction of the hand in degrees, counter clockwise
-  \param cg ColorGroup
-*/
-void QwtAnalogClock::drawHand( QPainter *painter, Hand hd,
-    const QPointF &center, double radius, double direction,
-    QPalette::ColorGroup cg ) const
-{
-    const QwtDialNeedle *needle = hand( hd );
-    if ( needle )
-    {
-        if ( hd == HourHand )
-            radius = qRound( 0.8 * radius );
-
-        needle->draw( painter, center, radius, direction, cg );
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_analog_clock.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_analog_clock.h
deleted file mode 100644
index 781a334344fc8d425d8c249a1cec80d9b0b68f36..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_analog_clock.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_ANALOG_CLOCK_H
-#define QWT_ANALOG_CLOCK_H
-
-#include "qwt_global.h"
-#include "qwt_dial.h"
-#include "qwt_dial_needle.h"
-#include <qdatetime.h>
-
-/*!
-  \brief An analog clock
-
-  \image html analogclock.png
-
-  \par Example
-  \code 
-  #include <qwt_analog_clock.h>
-
-  QwtAnalogClock *clock = new QwtAnalogClock(...);
-  clock->scaleDraw()->setPenWidth(3);
-  clock->setLineWidth(6);
-  clock->setFrameShadow(QwtDial::Sunken);
-  clock->setTime();
-
-  // update the clock every second
-  QTimer *timer = new QTimer(clock);
-  timer->connect(timer, SIGNAL(timeout()), clock, SLOT(setCurrentTime()));
-  timer->start(1000);
-
-  \endcode
-
-  \note The examples/dials example shows how to use QwtAnalogClock.
-*/
-
-class QWT_EXPORT QwtAnalogClock: public QwtDial
-{
-    Q_OBJECT
-
-public:
-    /*!
-        Hand type
-        \sa setHand(), hand()
-    */
-    enum Hand
-    {
-        //! Needle displaying the seconds
-        SecondHand,
-
-        //! Needle displaying the minutes
-        MinuteHand,
-
-        //! Needle displaying the hours
-        HourHand,
-
-        //! Number of needles
-        NHands
-    };
-
-    explicit QwtAnalogClock( QWidget* parent = NULL );
-    virtual ~QwtAnalogClock();
-
-    void setHand( Hand, QwtDialNeedle * );
-
-    const QwtDialNeedle *hand( Hand ) const;
-    QwtDialNeedle *hand( Hand );
-
-public Q_SLOTS:
-    void setCurrentTime();
-    void setTime( const QTime & );
-
-protected:
-    virtual void drawNeedle( QPainter *, const QPointF &,
-        double radius, double direction, QPalette::ColorGroup ) const;
-
-    virtual void drawHand( QPainter *, Hand, const QPointF &,
-        double radius, double direction, QPalette::ColorGroup ) const;
-
-private:
-    // use setHand instead
-    void setNeedle( QwtDialNeedle * );
-
-    QwtDialNeedle *d_hand[NHands];
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_arrow_button.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_arrow_button.cpp
deleted file mode 100644
index 28fe2a6a7f7731b6f22f82c636fab11f2d8e1f38..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_arrow_button.cpp
+++ /dev/null
@@ -1,333 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_arrow_button.h"
-#include "qwt_math.h"
-#include <qpainter.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-#include <qevent.h>
-#include <qapplication.h>
-
-static const int MaxNum = 3;
-static const int Margin = 2;
-static const int Spacing = 1;
-
-class QwtArrowButton::PrivateData
-{
-public:
-    int num;
-    Qt::ArrowType arrowType;
-};
-
-static QStyleOptionButton styleOpt( const QwtArrowButton* btn )
-{
-    QStyleOptionButton option;
-    option.init( btn );
-    option.features = QStyleOptionButton::None;
-    if ( btn->isFlat() )
-        option.features |= QStyleOptionButton::Flat;
-    if ( btn->menu() )
-        option.features |= QStyleOptionButton::HasMenu;
-    if ( btn->autoDefault() || btn->isDefault() )
-        option.features |= QStyleOptionButton::AutoDefaultButton;
-    if ( btn->isDefault() )
-        option.features |= QStyleOptionButton::DefaultButton;
-    if ( btn->isDown() )
-        option.state |= QStyle::State_Sunken;
-    if ( !btn->isFlat() && !btn->isDown() )
-        option.state |= QStyle::State_Raised;
-
-    return option;
-}
-
-/*!
-  \param num Number of arrows
-  \param arrowType see Qt::ArrowType in the Qt docs.
-  \param parent Parent widget
-*/
-QwtArrowButton::QwtArrowButton( int num,
-        Qt::ArrowType arrowType, QWidget *parent ):
-    QPushButton( parent )
-{
-    d_data = new PrivateData;
-    d_data->num = qBound( 1, num, MaxNum );
-    d_data->arrowType = arrowType;
-
-    setAutoRepeat( true );
-    setAutoDefault( false );
-
-    switch ( d_data->arrowType )
-    {
-        case Qt::LeftArrow:
-        case Qt::RightArrow:
-            setSizePolicy( QSizePolicy::Expanding,
-                QSizePolicy::Fixed );
-            break;
-        default:
-            setSizePolicy( QSizePolicy::Fixed,
-                QSizePolicy::Expanding );
-    }
-}
-
-//! Destructor
-QwtArrowButton::~QwtArrowButton()
-{
-    delete d_data;
-    d_data = NULL;
-}
-
-/*!
-  \brief The direction of the arrows
-*/
-Qt::ArrowType QwtArrowButton::arrowType() const
-{
-    return d_data->arrowType;
-}
-
-/*!
-  \brief The number of arrows
-*/
-int QwtArrowButton::num() const
-{
-    return d_data->num;
-}
-
-/*!
-  \return the bounding rectangle for the label
-*/
-QRect QwtArrowButton::labelRect() const
-{
-    const int m = Margin;
-
-    QRect r = rect();
-    r.setRect( r.x() + m, r.y() + m,
-        r.width() - 2 * m, r.height() - 2 * m );
-
-    if ( isDown() )
-    {
-        QStyleOptionButton option = styleOpt( this );
-        const int ph = style()->pixelMetric(
-            QStyle::PM_ButtonShiftHorizontal, &option, this );
-        const int pv = style()->pixelMetric(
-            QStyle::PM_ButtonShiftVertical, &option, this );
-
-        r.translate( ph, pv );
-    }
-
-    return r;
-}
-
-/*!
-   Paint event handler
-   \param event Paint event
-*/
-void QwtArrowButton::paintEvent( QPaintEvent *event )
-{
-    QPushButton::paintEvent( event );
-    QPainter painter( this );
-    drawButtonLabel( &painter );
-}
-
-/*!
-  \brief Draw the button label
-
-  \param painter Painter
-  \sa The Qt Manual for QPushButton
-*/
-void QwtArrowButton::drawButtonLabel( QPainter *painter )
-{
-    const bool isVertical = d_data->arrowType == Qt::UpArrow ||
-        d_data->arrowType == Qt::DownArrow;
-
-    const QRect r = labelRect();
-    QSize boundingSize = labelRect().size();
-    if ( isVertical )
-        boundingSize.transpose();
-
-    const int w =
-        ( boundingSize.width() - ( MaxNum - 1 ) * Spacing ) / MaxNum;
-
-    QSize arrow = arrowSize( Qt::RightArrow,
-        QSize( w, boundingSize.height() ) );
-
-    if ( isVertical )
-        arrow.transpose();
-
-    QRect contentsSize; // aligned rect where to paint all arrows
-    if ( d_data->arrowType == Qt::LeftArrow || d_data->arrowType == Qt::RightArrow )
-    {
-        contentsSize.setWidth( d_data->num * arrow.width()
-            + ( d_data->num - 1 ) * Spacing );
-        contentsSize.setHeight( arrow.height() );
-    }
-    else
-    {
-        contentsSize.setWidth( arrow.width() );
-        contentsSize.setHeight( d_data->num * arrow.height()
-            + ( d_data->num - 1 ) * Spacing );
-    }
-
-    QRect arrowRect( contentsSize );
-    arrowRect.moveCenter( r.center() );
-    arrowRect.setSize( arrow );
-
-    painter->save();
-    for ( int i = 0; i < d_data->num; i++ )
-    {
-        drawArrow( painter, arrowRect, d_data->arrowType );
-
-        int dx = 0;
-        int dy = 0;
-
-        if ( isVertical )
-            dy = arrow.height() + Spacing;
-        else
-            dx = arrow.width() + Spacing;
-
-        arrowRect.translate( dx, dy );
-    }
-    painter->restore();
-
-    if ( hasFocus() )
-    {
-        QStyleOptionFocusRect option;
-        option.init( this );
-        option.backgroundColor = palette().color( QPalette::Window );
-
-        style()->drawPrimitive( QStyle::PE_FrameFocusRect,
-            &option, painter, this );
-    }
-}
-
-/*!
-    Draw an arrow int a bounding rectangle
-
-    \param painter Painter
-    \param r Rectangle where to paint the arrow
-    \param arrowType Arrow type
-*/
-void QwtArrowButton::drawArrow( QPainter *painter,
-    const QRect &r, Qt::ArrowType arrowType ) const
-{
-    QPolygon pa( 3 );
-
-    switch ( arrowType )
-    {
-        case Qt::UpArrow:
-            pa.setPoint( 0, r.bottomLeft() );
-            pa.setPoint( 1, r.bottomRight() );
-            pa.setPoint( 2, r.center().x(), r.top() );
-            break;
-        case Qt::DownArrow:
-            pa.setPoint( 0, r.topLeft() );
-            pa.setPoint( 1, r.topRight() );
-            pa.setPoint( 2, r.center().x(), r.bottom() );
-            break;
-        case Qt::RightArrow:
-            pa.setPoint( 0, r.topLeft() );
-            pa.setPoint( 1, r.bottomLeft() );
-            pa.setPoint( 2, r.right(), r.center().y() );
-            break;
-        case Qt::LeftArrow:
-            pa.setPoint( 0, r.topRight() );
-            pa.setPoint( 1, r.bottomRight() );
-            pa.setPoint( 2, r.left(), r.center().y() );
-            break;
-        default:
-            break;
-    }
-
-    painter->save();
-
-    painter->setRenderHint( QPainter::Antialiasing, true );
-    painter->setPen( Qt::NoPen );
-    painter->setBrush( palette().brush( QPalette::ButtonText ) );
-    painter->drawPolygon( pa );
-
-    painter->restore();
-}
-
-/*!
-  \return a size hint
-*/
-QSize QwtArrowButton::sizeHint() const
-{
-    const QSize hint = minimumSizeHint();
-    return hint.expandedTo( QApplication::globalStrut() );
-}
-
-/*!
-  \brief Return a minimum size hint
-*/
-QSize QwtArrowButton::minimumSizeHint() const
-{
-    const QSize asz = arrowSize( Qt::RightArrow, QSize() );
-
-    QSize sz(
-        2 * Margin + ( MaxNum - 1 ) * Spacing + MaxNum * asz.width(),
-        2 * Margin + asz.height()
-    );
-
-    if ( d_data->arrowType == Qt::UpArrow || d_data->arrowType == Qt::DownArrow )
-        sz.transpose();
-
-    QStyleOption styleOption;
-    styleOption.init( this );
-
-    sz = style()->sizeFromContents( QStyle::CT_PushButton,
-        &styleOption, sz, this );
-
-    return sz;
-}
-
-/*!
-   Calculate the size for a arrow that fits into a rectangle of a given size
-
-   \param arrowType Arrow type
-   \param boundingSize Bounding size
-   \return Size of the arrow
-*/
-QSize QwtArrowButton::arrowSize( Qt::ArrowType arrowType,
-    const QSize &boundingSize ) const
-{
-    QSize bs = boundingSize;
-    if ( arrowType == Qt::UpArrow || arrowType == Qt::DownArrow )
-        bs.transpose();
-
-    const int MinLen = 2;
-    const QSize sz = bs.expandedTo(
-        QSize( MinLen, 2 * MinLen - 1 ) ); // minimum
-
-    int w = sz.width();
-    int h = 2 * w - 1;
-
-    if ( h > sz.height() )
-    {
-        h = sz.height();
-        w = ( h + 1 ) / 2;
-    }
-
-    QSize arrSize( w, h );
-    if ( arrowType == Qt::UpArrow || arrowType == Qt::DownArrow )
-        arrSize.transpose();
-
-    return arrSize;
-}
-
-/*!
-  \brief autoRepeat for the space keys
-*/
-void QwtArrowButton::keyPressEvent( QKeyEvent *event )
-{
-    if ( event->isAutoRepeat() && event->key() == Qt::Key_Space )
-        Q_EMIT clicked();
-
-    QPushButton::keyPressEvent( event );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_arrow_button.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_arrow_button.h
deleted file mode 100644
index b3285daa5c69bdbf267472ad94cdc849778c2a8c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_arrow_button.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_ARROW_BUTTON_H
-#define QWT_ARROW_BUTTON_H
-
-#include "qwt_global.h"
-#include <qpushbutton.h>
-
-/*!
-  \brief Arrow Button
-
-  A push button with one or more filled triangles on its front.
-  An Arrow button can have 1 to 3 arrows in a row, pointing
-  up, down, left or right.
-*/
-class QWT_EXPORT QwtArrowButton : public QPushButton
-{
-public:
-    explicit QwtArrowButton ( int num, Qt::ArrowType, QWidget *parent = NULL );
-    virtual ~QwtArrowButton();
-
-    Qt::ArrowType arrowType() const;
-    int num() const;
-
-    virtual QSize sizeHint() const;
-    virtual QSize minimumSizeHint() const;
-
-protected:
-    virtual void paintEvent( QPaintEvent *event );
-
-    virtual void drawButtonLabel( QPainter *p );
-    virtual void drawArrow( QPainter *,
-        const QRect &, Qt::ArrowType ) const;
-    virtual QRect labelRect() const;
-    virtual QSize arrowSize( Qt::ArrowType,
-        const QSize &boundingSize ) const;
-
-    virtual void keyPressEvent( QKeyEvent * );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_clipper.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_clipper.cpp
deleted file mode 100644
index 0602c8d0564adbd45dce2d24d83696ecd50694a8..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_clipper.cpp
+++ /dev/null
@@ -1,510 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_clipper.h"
-#include "qwt_point_polar.h"
-#include <qrect.h>
-#include <string.h>
-#include <stdlib.h>
-
-#if QT_VERSION < 0x040601
-#define qAtan(x) ::atan(x)
-#endif
-
-namespace QwtClip
-{
-    // some templates used for inlining
-    template <class Point, typename T> class LeftEdge;
-    template <class Point, typename T> class RightEdge;
-    template <class Point, typename T> class TopEdge;
-    template <class Point, typename T> class BottomEdge;
-
-    template <class Point> class PointBuffer;
-}
-
-template <class Point, typename Value>
-class QwtClip::LeftEdge
-{
-public:
-    inline LeftEdge( Value x1, Value, Value, Value ):
-        d_x1( x1 )
-    {
-    }
-
-    inline bool isInside( const Point &p  ) const
-    {
-        return p.x() >= d_x1;
-    }
-
-    inline Point intersection( const Point &p1, const Point &p2 ) const
-    {
-        double dy = ( p1.y() - p2.y() ) / double( p1.x() - p2.x() );
-        return Point( d_x1, static_cast< Value >( p2.y() + ( d_x1 - p2.x() ) * dy ) );
-    }
-private:
-    const Value d_x1;
-};
-
-template <class Point, typename Value>
-class QwtClip::RightEdge
-{
-public:
-    inline RightEdge( Value, Value x2, Value, Value ):
-        d_x2( x2 )
-    {
-    }
-
-    inline bool isInside( const Point &p  ) const
-    {
-        return p.x() <= d_x2;
-    }
-
-    inline Point intersection( const Point &p1, const Point &p2 ) const
-    {
-        double dy = ( p1.y() - p2.y() ) / double( p1.x() - p2.x() );
-        return Point( d_x2, static_cast<Value>( p2.y() + ( d_x2 - p2.x() ) * dy ) );
-    }
-
-private:
-    const Value d_x2;
-};
-
-template <class Point, typename Value>
-class QwtClip::TopEdge
-{
-public:
-    inline TopEdge( Value, Value, Value y1, Value ):
-        d_y1( y1 )
-    {
-    }
-
-    inline bool isInside( const Point &p  ) const
-    {
-        return p.y() >= d_y1;
-    }
-
-    inline Point intersection( const Point &p1, const Point &p2 ) const
-    {
-        double dx = ( p1.x() - p2.x() ) / double( p1.y() - p2.y() );
-        return Point( static_cast<Value>( p2.x() + ( d_y1 - p2.y() ) * dx ), d_y1 );
-    }
-
-private:
-    const Value d_y1;
-};
-
-template <class Point, typename Value>
-class QwtClip::BottomEdge
-{
-public:
-    inline BottomEdge( Value, Value, Value, Value y2 ):
-        d_y2( y2 )
-    {
-    }
-
-    inline bool isInside( const Point &p ) const
-    {
-        return p.y() <= d_y2;
-    }
-
-    inline Point intersection( const Point &p1, const Point &p2 ) const
-    {
-        double dx = ( p1.x() - p2.x() ) / double( p1.y() - p2.y() );
-        return Point( static_cast<Value>( p2.x() + ( d_y2 - p2.y() ) * dx ), d_y2 );
-    }
-
-private:
-    const Value d_y2;
-};
-
-template<class Point>
-class QwtClip::PointBuffer
-{
-public:
-    PointBuffer( int capacity = 0 ):
-        m_capacity( 0 ),
-        m_size( 0 ),
-        m_buffer( NULL )
-    {
-        if ( capacity > 0 )
-            reserve( capacity );
-    }
-
-    ~PointBuffer()
-    {
-        if ( m_buffer )
-            ::free( m_buffer );
-    }
-
-    inline void setPoints( int numPoints, const Point *points )
-    {
-        reserve( numPoints );
-
-        m_size = numPoints;
-        ::memcpy( m_buffer, points, m_size * sizeof( Point ) );
-    }
-
-    inline void reset() 
-    { 
-        m_size = 0; 
-    }
-
-    inline int size() const 
-    { 
-        return m_size; 
-    }
-
-    inline Point *data() const 
-    { 
-        return m_buffer; 
-    }
-
-    inline Point &operator[]( int i ) 
-    { 
-        return m_buffer[i]; 
-    }
-
-    inline const Point &operator[]( int i ) const 
-    { 
-        return m_buffer[i]; 
-    }
-
-    inline void add( const Point &point )
-    {
-        if ( m_capacity <= m_size )
-            reserve( m_size + 1 );
-
-        m_buffer[m_size++] = point;
-    }
-
-private:
-    inline void reserve( int size )
-    {
-        if ( m_capacity == 0 )
-            m_capacity = 1;
-
-        while ( m_capacity < size )
-            m_capacity *= 2;
-
-        m_buffer = static_cast<Point *>( 
-            ::realloc( m_buffer, m_capacity * sizeof( Point ) ) );
-    }
-
-    int m_capacity;
-    int m_size;
-    Point *m_buffer;
-};
-
-using namespace QwtClip;
-
-template <class Polygon, class Rect, class Point, typename T>
-class QwtPolygonClipper
-{
-public:
-    QwtPolygonClipper( const Rect &clipRect ):
-        d_clipRect( clipRect )
-    {
-    }
-
-    Polygon clipPolygon( const Polygon &polygon, bool closePolygon ) const
-    {
-#if 0
-        if ( d_clipRect.contains( polygon.boundingRect() ) )
-            return polygon;
-#endif
-
-        PointBuffer<Point> points1;
-        PointBuffer<Point> points2( qMin( 256, polygon.size() ) );
-
-        points1.setPoints( polygon.size(), polygon.data() );
-
-        clipEdge< LeftEdge<Point, T> >( closePolygon, points1, points2 );
-        clipEdge< RightEdge<Point, T> >( closePolygon, points2, points1 );
-        clipEdge< TopEdge<Point, T> >( closePolygon, points1, points2 );
-        clipEdge< BottomEdge<Point, T> >( closePolygon, points2, points1 );
-
-        Polygon p;
-        p.resize( points1.size() );
-        ::memcpy( p.data(), points1.data(), points1.size() * sizeof( Point ) );
-
-        return p;
-    }
-
-private:
-    template <class Edge>
-    inline void clipEdge( bool closePolygon,
-        PointBuffer<Point> &points, PointBuffer<Point> &clippedPoints ) const
-    {
-        clippedPoints.reset();
-
-        if ( points.size() < 2 )
-        {
-            if ( points.size() == 1 )
-                clippedPoints.add( points[0] );
-            return;
-        }
-
-        const Edge edge( d_clipRect.x(), d_clipRect.x() + d_clipRect.width(),
-            d_clipRect.y(), d_clipRect.y() + d_clipRect.height() );
-
-        int lastPos, start;
-        if ( closePolygon )
-        {
-            start = 0;
-            lastPos = points.size() - 1;
-        }
-        else
-        {
-            start = 1;
-            lastPos = 0;
-
-            if ( edge.isInside( points[0] ) )
-                clippedPoints.add( points[0] );
-        }
-
-        const uint nPoints = points.size();
-        for ( uint i = start; i < nPoints; i++ )
-        {
-            const Point &p1 = points[i];
-            const Point &p2 = points[lastPos];
-
-            if ( edge.isInside( p1 ) )
-            {
-                if ( edge.isInside( p2 ) )
-                {
-                    clippedPoints.add( p1 );
-                }
-                else
-                {
-                    clippedPoints.add( edge.intersection( p1, p2 ) );
-                    clippedPoints.add( p1 );
-                }
-            }
-            else
-            {
-                if ( edge.isInside( p2 ) )
-                {
-                    clippedPoints.add( edge.intersection( p1, p2 ) );
-                }
-            }
-            lastPos = i;
-        }
-    }
-
-    const Rect d_clipRect;
-};
-
-class QwtCircleClipper
-{
-public:
-    QwtCircleClipper( const QRectF &r );
-    QVector<QwtInterval> clipCircle( const QPointF &, double radius ) const;
-
-private:
-    enum Edge
-    {
-        Left,
-        Top,
-        Right,
-        Bottom,
-
-        NEdges
-    };
-
-    QList<QPointF> cuttingPoints(
-        Edge, const QPointF &pos, double radius ) const;
-
-    double toAngle( const QPointF &, const QPointF & ) const;
-
-    const QRectF d_rect;
-};
-
-
-QwtCircleClipper::QwtCircleClipper( const QRectF &r ):
-    d_rect( r )
-{
-}
-
-QVector<QwtInterval> QwtCircleClipper::clipCircle(
-    const QPointF &pos, double radius ) const
-{
-    QList<QPointF> points;
-    for ( int edge = 0; edge < NEdges; edge++ )
-        points += cuttingPoints( static_cast<Edge>(edge), pos, radius );
-
-    QVector<QwtInterval> intv;
-    if ( points.size() <= 0 )
-    {
-        QRectF cRect( 0, 0, 2 * radius, 2 * radius );
-        cRect.moveCenter( pos );
-        if ( d_rect.contains( cRect ) )
-            intv += QwtInterval( 0.0, 2 * M_PI );
-    }
-    else
-    {
-        QList<double> angles;
-        for ( int i = 0; i < points.size(); i++ )
-            angles += toAngle( pos, points[i] );
-        qSort( angles );
-
-        const int in = d_rect.contains( qwtPolar2Pos( pos, radius,
-            angles[0] + ( angles[1] - angles[0] ) / 2 ) );
-
-        if ( in )
-        {
-            for ( int i = 0; i < angles.size() - 1; i += 2 )
-                intv += QwtInterval( angles[i], angles[i+1] );
-        }
-        else
-        {
-            for ( int i = 1; i < angles.size() - 1; i += 2 )
-                intv += QwtInterval( angles[i], angles[i+1] );
-            intv += QwtInterval( angles.last(), angles.first() );
-        }
-    }
-
-    return intv;
-}
-
-double QwtCircleClipper::toAngle(
-    const QPointF &from, const QPointF &to ) const
-{
-    if ( from.x() == to.x() )
-        return from.y() <= to.y() ? M_PI / 2.0 : 3 * M_PI / 2.0;
-
-    const double m = qAbs( ( to.y() - from.y() ) / ( to.x() - from.x() ) );
-
-    double angle = qAtan( m );
-    if ( to.x() > from.x() )
-    {
-        if ( to.y() > from.y() )
-            angle = 2 * M_PI - angle;
-    }
-    else
-    {
-        if ( to.y() > from.y() )
-            angle = M_PI + angle;
-        else
-            angle = M_PI - angle;
-    }
-
-    return angle;
-}
-
-QList<QPointF> QwtCircleClipper::cuttingPoints(
-    Edge edge, const QPointF &pos, double radius ) const
-{
-    QList<QPointF> points;
-
-    if ( edge == Left || edge == Right )
-    {
-        const double x = ( edge == Left ) ? d_rect.left() : d_rect.right();
-        if ( qAbs( pos.x() - x ) < radius )
-        {
-            const double off = qSqrt( qwtSqr( radius ) - qwtSqr( pos.x() - x ) );
-            const double m_y1 = pos.y() + off;
-            if ( m_y1 >= d_rect.top() && m_y1 <= d_rect.bottom() )
-                points += QPointF( x, m_y1 );
-
-            const double m_y2 = pos.y() - off;
-            if ( m_y2 >= d_rect.top() && m_y2 <= d_rect.bottom() )
-                points += QPointF( x, m_y2 );
-        }
-    }
-    else
-    {
-        const double y = ( edge == Top ) ? d_rect.top() : d_rect.bottom();
-        if ( qAbs( pos.y() - y ) < radius )
-        {
-            const double off = qSqrt( qwtSqr( radius ) - qwtSqr( pos.y() - y ) );
-            const double x1 = pos.x() + off;
-            if ( x1 >= d_rect.left() && x1 <= d_rect.right() )
-                points += QPointF( x1, y );
-
-            const double m_x2 = pos.x() - off;
-            if ( m_x2 >= d_rect.left() && m_x2 <= d_rect.right() )
-                points += QPointF( m_x2, y );
-        }
-    }
-    return points;
-}
-
-/*!
-   Sutherland-Hodgman polygon clipping
-
-   \param clipRect Clip rectangle
-   \param polygon Polygon
-   \param closePolygon True, when the polygon is closed
-
-   \return Clipped polygon
-*/
-QPolygon QwtClipper::clipPolygon(
-    const QRectF &clipRect, const QPolygon &polygon, bool closePolygon )
-{
-    const int minX = qCeil( clipRect.left() );
-    const int maxX = qFloor( clipRect.right() );
-    const int minY = qCeil( clipRect.top() );
-    const int maxY = qFloor( clipRect.bottom() );
-
-    const QRect r( minX, minY, maxX - minX, maxY - minY );
-
-    QwtPolygonClipper<QPolygon, QRect, QPoint, int> clipper( r );
-    return clipper.clipPolygon( polygon, closePolygon );
-}
-/*!
-   Sutherland-Hodgman polygon clipping
-
-   \param clipRect Clip rectangle
-   \param polygon Polygon
-   \param closePolygon True, when the polygon is closed
-
-   \return Clipped polygon
-*/
-QPolygon QwtClipper::clipPolygon(
-    const QRect &clipRect, const QPolygon &polygon, bool closePolygon )
-{
-    QwtPolygonClipper<QPolygon, QRect, QPoint, int> clipper( clipRect );
-    return clipper.clipPolygon( polygon, closePolygon );
-}
-
-/*!
-   Sutherland-Hodgman polygon clipping
-
-   \param clipRect Clip rectangle
-   \param polygon Polygon
-   \param closePolygon True, when the polygon is closed
-
-   \return Clipped polygon
-*/
-QPolygonF QwtClipper::clipPolygonF(
-    const QRectF &clipRect, const QPolygonF &polygon, bool closePolygon )
-{
-    QwtPolygonClipper<QPolygonF, QRectF, QPointF, double> clipper( clipRect );
-    return clipper.clipPolygon( polygon, closePolygon );
-}
-
-/*!
-   Circle clipping
-
-   clipCircle() divides a circle into intervals of angles representing arcs
-   of the circle. When the circle is completely inside the clip rectangle
-   an interval [0.0, 2 * M_PI] is returned.
-
-   \param clipRect Clip rectangle
-   \param center Center of the circle
-   \param radius Radius of the circle
-
-   \return Arcs of the circle
-*/
-QVector<QwtInterval> QwtClipper::clipCircle( const QRectF &clipRect,
-    const QPointF &center, double radius )
-{
-    QwtCircleClipper clipper( clipRect );
-    return clipper.clipCircle( center, radius );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_clipper.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_clipper.h
deleted file mode 100644
index ad694896e1d464031ea354c9e105bf60a4c5e816..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_clipper.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_CLIPPER_H
-#define QWT_CLIPPER_H
-
-#include "qwt_global.h"
-#include "qwt_interval.h"
-#include <qpolygon.h>
-#include <qvector.h>
-
-class QRect;
-class QRectF;
-
-/*!
-  \brief Some clipping algorithms
-*/
-
-class QWT_EXPORT QwtClipper
-{
-public:
-    static QPolygon clipPolygon( const QRect &, 
-        const QPolygon &, bool closePolygon = false );
-    static QPolygon clipPolygon( const QRectF &, 
-        const QPolygon &, bool closePolygon = false );
-
-    static QPolygonF clipPolygonF( const QRectF &, 
-        const QPolygonF &, bool closePolygon = false );
-
-    static QVector<QwtInterval> clipCircle(
-        const QRectF &, const QPointF &, double radius );
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_color_map.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_color_map.cpp
deleted file mode 100644
index 5490627891fda2bcf26cd5a1a7e4e6e21c07643d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_color_map.cpp
+++ /dev/null
@@ -1,499 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_color_map.h"
-#include "qwt_math.h"
-#include "qwt_interval.h"
-#include <qnumeric.h>
-
-class QwtLinearColorMap::ColorStops
-{
-public:
-    ColorStops():
-        d_doAlpha( false )
-    {
-        d_stops.reserve( 256 );
-    }
-
-    void insert( double pos, const QColor &color );
-    QRgb rgb( QwtLinearColorMap::Mode, double pos ) const;
-
-    QVector<double> stops() const;
-
-private:
-
-    class ColorStop
-    {
-    public:
-        ColorStop():
-            pos( 0.0 ),
-            rgb( 0 )
-        {
-        };
-
-        ColorStop( double p, const QColor &c ):
-            pos( p ),
-            rgb( c.rgba() )
-        {
-            r = qRed( rgb );
-            g = qGreen( rgb );
-            b = qBlue( rgb );
-            a = qAlpha( rgb );
-
-            /* 
-                when mapping a value to rgb we will have to calcualate: 
-                   - const int v = int( ( s1.v0 + ratio * s1.vStep ) + 0.5 );
-
-                Thus adding 0.5 ( for rounding ) can be done in advance
-             */
-            r0 = r + 0.5;
-            g0 = g + 0.5;
-            b0 = b + 0.5;
-            a0 = a + 0.5;
-
-            rStep = gStep = bStep = aStep = 0.0;
-            posStep = 0.0;
-        }
-
-        void updateSteps( const ColorStop &nextStop )
-        {
-            rStep = nextStop.r - r;
-            gStep = nextStop.g - g;
-            bStep = nextStop.b - b;
-            aStep = nextStop.a - a;
-            posStep = nextStop.pos - pos;
-        }
-
-        double pos;
-        QRgb rgb;
-        int r, g, b, a;
-
-        // precalculated values
-        double rStep, gStep, bStep, aStep;
-        double r0, g0, b0, a0;
-        double posStep;
-    };
-
-    inline int findUpper( double pos ) const;
-    QVector<ColorStop> d_stops;
-    bool d_doAlpha;
-};
-
-void QwtLinearColorMap::ColorStops::insert( double pos, const QColor &color )
-{
-    // Lookups need to be very fast, insertions are not so important.
-    // Anyway, a balanced tree is what we need here. TODO ...
-
-    if ( pos < 0.0 || pos > 1.0 )
-        return;
-
-    int index;
-    if ( d_stops.size() == 0 )
-    {
-        index = 0;
-        d_stops.resize( 1 );
-    }
-    else
-    {
-        index = findUpper( pos );
-        if ( index == d_stops.size() ||
-                qAbs( d_stops[index].pos - pos ) >= 0.001 )
-        {
-            d_stops.resize( d_stops.size() + 1 );
-            for ( int i = d_stops.size() - 1; i > index; i-- )
-                d_stops[i] = d_stops[i-1];
-        }
-    }
-
-    d_stops[index] = ColorStop( pos, color );
-    if ( color.alpha() != 255 )
-        d_doAlpha = true;
-
-    if ( index > 0 )
-        d_stops[index-1].updateSteps( d_stops[index] );
-
-    if ( index < d_stops.size() - 1 )
-        d_stops[index].updateSteps( d_stops[index+1] );
-}
-
-inline QVector<double> QwtLinearColorMap::ColorStops::stops() const
-{
-    QVector<double> positions( d_stops.size() );
-    for ( int i = 0; i < d_stops.size(); i++ )
-        positions[i] = d_stops[i].pos;
-    return positions;
-}
-
-inline int QwtLinearColorMap::ColorStops::findUpper( double pos ) const
-{
-    int index = 0;
-    int n = d_stops.size();
-
-    const ColorStop *stops = d_stops.data();
-
-    while ( n > 0 )
-    {
-        const int half = n >> 1;
-        const int middle = index + half;
-
-        if ( stops[middle].pos <= pos )
-        {
-            index = middle + 1;
-            n -= half + 1;
-        }
-        else
-            n = half;
-    }
-
-    return index;
-}
-
-inline QRgb QwtLinearColorMap::ColorStops::rgb(
-    QwtLinearColorMap::Mode mode, double pos ) const
-{
-    if ( pos <= 0.0 )
-        return d_stops[0].rgb;
-    if ( pos >= 1.0 )
-        return d_stops[ d_stops.size() - 1 ].rgb;
-
-    const int index = findUpper( pos );
-    if ( mode == FixedColors )
-    {
-        return d_stops[index-1].rgb;
-    }
-    else
-    {
-        const ColorStop &s1 = d_stops[index-1];
-
-        const double ratio = ( pos - s1.pos ) / ( s1.posStep );
-
-        const int r = int( s1.r0 + ratio * s1.rStep );
-        const int g = int( s1.g0 + ratio * s1.gStep );
-        const int b = int( s1.b0 + ratio * s1.bStep );
-
-        if ( d_doAlpha )
-        {
-            if ( s1.aStep )
-            {
-                const int a = int( s1.a0 + ratio * s1.aStep );
-                return qRgba( r, g, b, a );
-            }
-            else
-            {
-                return qRgba( r, g, b, s1.a );
-            }
-        }
-        else
-        {
-            return qRgb( r, g, b );
-        }
-    }
-}
-
-//! Constructor
-QwtColorMap::QwtColorMap( Format format ):
-    d_format( format )
-{
-}
-
-//! Destructor
-QwtColorMap::~QwtColorMap()
-{
-}
-
-/*!
-   Build and return a color map of 256 colors
-
-   The color table is needed for rendering indexed images in combination
-   with using colorIndex().
-
-   \param interval Range for the values
-   \return A color table, that can be used for a QImage
-*/
-QVector<QRgb> QwtColorMap::colorTable( const QwtInterval &interval ) const
-{
-    QVector<QRgb> table( 256 );
-
-    if ( interval.isValid() )
-    {
-        const double step = interval.width() / ( table.size() - 1 );
-        for ( int i = 0; i < table.size(); i++ )
-            table[i] = rgb( interval, interval.minValue() + step * i );
-    }
-
-    return table;
-}
-
-class QwtLinearColorMap::PrivateData
-{
-public:
-    ColorStops colorStops;
-    QwtLinearColorMap::Mode mode;
-};
-
-/*!
-   Build a color map with two stops at 0.0 and 1.0. The color
-   at 0.0 is Qt::blue, at 1.0 it is Qt::yellow.
-
-   \param format Preferred format of the color map
-*/
-QwtLinearColorMap::QwtLinearColorMap( QwtColorMap::Format format ):
-    QwtColorMap( format )
-{
-    d_data = new PrivateData;
-    d_data->mode = ScaledColors;
-
-    setColorInterval( Qt::blue, Qt::yellow );
-}
-
-/*!
-   Build a color map with two stops at 0.0 and 1.0.
-
-   \param color1 Color used for the minimum value of the value interval
-   \param color2 Color used for the maximum value of the value interval
-   \param format Preferred format for the color map
-*/
-QwtLinearColorMap::QwtLinearColorMap( const QColor &color1,
-        const QColor &color2, QwtColorMap::Format format ):
-    QwtColorMap( format )
-{
-    d_data = new PrivateData;
-    d_data->mode = ScaledColors;
-    setColorInterval( color1, color2 );
-}
-
-//! Destructor
-QwtLinearColorMap::~QwtLinearColorMap()
-{
-    delete d_data;
-}
-
-/*!
-   \brief Set the mode of the color map
-
-   FixedColors means the color is calculated from the next lower
-   color stop. ScaledColors means the color is calculated
-   by interpolating the colors of the adjacent stops.
-
-   \sa mode()
-*/
-void QwtLinearColorMap::setMode( Mode mode )
-{
-    d_data->mode = mode;
-}
-
-/*!
-   \return Mode of the color map
-   \sa setMode()
-*/
-QwtLinearColorMap::Mode QwtLinearColorMap::mode() const
-{
-    return d_data->mode;
-}
-
-/*!
-   Set the color range
-
-   Add stops at 0.0 and 1.0.
-
-   \param color1 Color used for the minimum value of the value interval
-   \param color2 Color used for the maximum value of the value interval
-
-   \sa color1(), color2()
-*/
-void QwtLinearColorMap::setColorInterval(
-    const QColor &color1, const QColor &color2 )
-{
-    d_data->colorStops = ColorStops();
-    d_data->colorStops.insert( 0.0, color1 );
-    d_data->colorStops.insert( 1.0, color2 );
-}
-
-/*!
-   Add a color stop
-
-   The value has to be in the range [0.0, 1.0].
-   F.e. a stop at position 17.0 for a range [10.0,20.0] must be
-   passed as: (17.0 - 10.0) / (20.0 - 10.0)
-
-   \param value Value between [0.0, 1.0]
-   \param color Color stop
-*/
-void QwtLinearColorMap::addColorStop( double value, const QColor& color )
-{
-    if ( value >= 0.0 && value <= 1.0 )
-        d_data->colorStops.insert( value, color );
-}
-
-/*!
-   \return Positions of color stops in increasing order
-*/
-QVector<double> QwtLinearColorMap::colorStops() const
-{
-    return d_data->colorStops.stops();
-}
-
-/*!
-  \return the first color of the color range
-  \sa setColorInterval()
-*/
-QColor QwtLinearColorMap::color1() const
-{
-    return QColor( d_data->colorStops.rgb( d_data->mode, 0.0 ) );
-}
-
-/*!
-  \return the second color of the color range
-  \sa setColorInterval()
-*/
-QColor QwtLinearColorMap::color2() const
-{
-    return QColor( d_data->colorStops.rgb( d_data->mode, 1.0 ) );
-}
-
-/*!
-  Map a value of a given interval into a RGB value
-
-  \param interval Range for all values
-  \param value Value to map into a RGB value
-
-  \return RGB value for value
-*/
-QRgb QwtLinearColorMap::rgb(
-    const QwtInterval &interval, double value ) const
-{
-    if ( qIsNaN(value) )
-        return 0u;
-
-    const double width = interval.width();
-    if ( width <= 0.0 )
-        return 0u;
-
-    const double ratio = ( value - interval.minValue() ) / width;
-    return d_data->colorStops.rgb( d_data->mode, ratio );
-}
-
-/*!
-  \brief Map a value of a given interval into a color index
-
-  \param interval Range for all values
-  \param value Value to map into a color index
-
-  \return Index, between 0 and 255
-*/
-unsigned char QwtLinearColorMap::colorIndex(
-    const QwtInterval &interval, double value ) const
-{
-    const double width = interval.width();
-
-    if ( qIsNaN(value) || width <= 0.0 || value <= interval.minValue() )
-        return 0;
-
-    if ( value >= interval.maxValue() )
-        return 255;
-
-    const double ratio = ( value - interval.minValue() ) / width;
-
-    unsigned char index;
-    if ( d_data->mode == FixedColors )
-        index = static_cast<unsigned char>( ratio * 255 ); // always floor
-    else
-        index = static_cast<unsigned char>( ratio * 255 + 0.5 );
-
-    return index;
-}
-
-class QwtAlphaColorMap::PrivateData
-{
-public:
-    QColor color;
-    QRgb rgb;
-    QRgb rgbMax;
-};
-
-
-/*!
-   Constructor
-   \param color Color of the map
-*/
-QwtAlphaColorMap::QwtAlphaColorMap( const QColor &color ):
-    QwtColorMap( QwtColorMap::RGB )
-{
-    d_data = new PrivateData;
-    setColor( color );
-}
-
-//! Destructor
-QwtAlphaColorMap::~QwtAlphaColorMap()
-{
-    delete d_data;
-}
-
-/*!
-   Set the color
-
-   \param color Color
-   \sa color()
-*/
-void QwtAlphaColorMap::setColor( const QColor &color )
-{
-    d_data->color = color;
-    d_data->rgb = color.rgb() & qRgba( 255, 255, 255, 0 );
-    d_data->rgbMax = d_data->rgb | ( 255 << 24 );
-}
-
-/*!
-  \return the color
-  \sa setColor()
-*/
-QColor QwtAlphaColorMap::color() const
-{
-    return d_data->color;
-}
-
-/*!
-  \brief Map a value of a given interval into a alpha value
-
-  alpha := (value - interval.minValue()) / interval.width();
-
-  \param interval Range for all values
-  \param value Value to map into a RGB value
-  \return RGB value, with an alpha value
-*/
-QRgb QwtAlphaColorMap::rgb( const QwtInterval &interval, double value ) const
-{
-    if ( qIsNaN(value) )
-        return 0u;
-
-    const double width = interval.width();
-    if ( width <= 0.0 )
-        return 0u;
-
-    if ( value <= interval.minValue() )
-        return d_data->rgb;
-
-    if ( value >= interval.maxValue() )
-        return d_data->rgbMax;
-
-    const double ratio = ( value - interval.minValue() ) / width;
-    return d_data->rgb | ( qRound( 255 * ratio ) << 24 );
-}
-
-/*!
-  Dummy function, needed to be implemented as it is pure virtual
-  in QwtColorMap. Color indices make no sense in combination with
-  an alpha channel.
-
-  \return Always 0
-*/
-unsigned char QwtAlphaColorMap::colorIndex(
-    const QwtInterval &, double ) const
-{
-    return 0;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_color_map.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_color_map.h
deleted file mode 100644
index f36e564b2b7b977a0fc12af3abc98ac85a75d646..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_color_map.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_COLOR_MAP_H
-#define QWT_COLOR_MAP_H
-
-#include "qwt_global.h"
-#include "qwt_interval.h"
-#include <qcolor.h>
-#include <qvector.h>
-
-/*!
-  \brief QwtColorMap is used to map values into colors.
-
-  For displaying 3D data on a 2D plane the 3rd dimension is often
-  displayed using colors, like f.e in a spectrogram.
-
-  Each color map is optimized to return colors for only one of the
-  following image formats:
-
-  - QImage::Format_Indexed8\n
-  - QImage::Format_ARGB32\n
-
-  \sa QwtPlotSpectrogram, QwtScaleWidget
-*/
-
-class QWT_EXPORT QwtColorMap
-{
-public:
-    /*!
-        Format for color mapping
-        \sa rgb(), colorIndex(), colorTable()
-    */
-
-    enum Format
-    {
-        //! The map is intended to map into RGB values.
-        RGB,
-
-        /*!
-          The map is intended to map into 8 bit values, that
-          are indices into the color table.
-         */
-        Indexed
-    };
-
-    QwtColorMap( Format = QwtColorMap::RGB );
-    virtual ~QwtColorMap();
-
-    Format format() const;
-
-    /*!
-       Map a value of a given interval into a RGB value.
-
-       \param interval Range for the values
-       \param value Value
-       \return RGB value, corresponding to value
-    */
-    virtual QRgb rgb( const QwtInterval &interval,
-        double value ) const = 0;
-
-    /*!
-       Map a value of a given interval into a color index
-
-       \param interval Range for the values
-       \param value Value
-       \return color index, corresponding to value
-     */
-    virtual unsigned char colorIndex(
-        const QwtInterval &interval, double value ) const = 0;
-
-    QColor color( const QwtInterval &, double value ) const;
-    virtual QVector<QRgb> colorTable( const QwtInterval & ) const;
-
-private:
-    Format d_format;
-};
-
-/*!
-  \brief QwtLinearColorMap builds a color map from color stops.
-
-  A color stop is a color at a specific position. The valid
-  range for the positions is [0.0, 1.0]. When mapping a value
-  into a color it is translated into this interval according to mode().
-*/
-class QWT_EXPORT QwtLinearColorMap: public QwtColorMap
-{
-public:
-    /*!
-       Mode of color map
-       \sa setMode(), mode()
-    */
-    enum Mode
-    {
-        //! Return the color from the next lower color stop
-        FixedColors,
-
-        //! Interpolating the colors of the adjacent stops.
-        ScaledColors
-    };
-
-    QwtLinearColorMap( QwtColorMap::Format = QwtColorMap::RGB );
-    QwtLinearColorMap( const QColor &from, const QColor &to,
-        QwtColorMap::Format = QwtColorMap::RGB );
-
-    virtual ~QwtLinearColorMap();
-
-    void setMode( Mode );
-    Mode mode() const;
-
-    void setColorInterval( const QColor &color1, const QColor &color2 );
-    void addColorStop( double value, const QColor& );
-    QVector<double> colorStops() const;
-
-    QColor color1() const;
-    QColor color2() const;
-
-    virtual QRgb rgb( const QwtInterval &, double value ) const;
-    virtual unsigned char colorIndex(
-        const QwtInterval &, double value ) const;
-
-    class ColorStops;
-
-private:
-    // Disabled copy constructor and operator=
-    QwtLinearColorMap( const QwtLinearColorMap & );
-    QwtLinearColorMap &operator=( const QwtLinearColorMap & );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-/*!
-  \brief QwtAlphaColorMap varies the alpha value of a color
-*/
-class QWT_EXPORT QwtAlphaColorMap: public QwtColorMap
-{
-public:
-    QwtAlphaColorMap( const QColor & = QColor( Qt::gray ) );
-    virtual ~QwtAlphaColorMap();
-
-    void setColor( const QColor & );
-    QColor color() const;
-
-    virtual QRgb rgb( const QwtInterval &, double value ) const;
-
-private:
-    QwtAlphaColorMap( const QwtAlphaColorMap & );
-    QwtAlphaColorMap &operator=( const QwtAlphaColorMap & );
-
-    virtual unsigned char colorIndex(
-        const QwtInterval &, double value ) const;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-
-/*!
-   Map a value into a color
-
-   \param interval Valid interval for values
-   \param value Value
-
-   \return Color corresponding to value
-
-   \warning This method is slow for Indexed color maps. If it is
-            necessary to map many values, its better to get the
-            color table once and find the color using colorIndex().
-*/
-inline QColor QwtColorMap::color(
-    const QwtInterval &interval, double value ) const
-{
-    if ( d_format == RGB )
-    {
-        return QColor::fromRgba( rgb( interval, value ) );
-    }
-    else
-    {
-        const unsigned int index = colorIndex( interval, value );
-        return colorTable( interval )[index]; // slow
-    }
-}
-
-/*!
-   \return Intended format of the color map
-   \sa Format
-*/
-inline QwtColorMap::Format QwtColorMap::format() const
-{
-    return d_format;
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_column_symbol.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_column_symbol.cpp
deleted file mode 100644
index ab428d9c30de115612cb0377b2414db54b886b35..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_column_symbol.cpp
+++ /dev/null
@@ -1,293 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_column_symbol.h"
-#include "qwt_math.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-#include <qpalette.h>
-
-static void qwtDrawBox( QPainter *p, const QRectF &rect,
-    const QPalette &pal, double lw )
-{
-    if ( lw > 0.0 )
-    {
-        if ( rect.width() == 0.0 )
-        {
-            p->setPen( pal.dark().color() );
-            p->drawLine( rect.topLeft(), rect.bottomLeft() );
-            return;
-        }
-
-        if ( rect.height() == 0.0 )
-        {
-            p->setPen( pal.dark().color() );
-            p->drawLine( rect.topLeft(), rect.topRight() );
-            return;
-        }
-
-        lw = qMin( lw, rect.height() / 2.0 - 1.0 );
-        lw = qMin( lw, rect.width() / 2.0 - 1.0 );
-
-        const QRectF outerRect = rect.adjusted( 0, 0, 1, 1 );
-        QPolygonF polygon( outerRect );
-
-        if ( outerRect.width() > 2 * lw &&
-                outerRect.height() > 2 * lw )
-        {
-            const QRectF innerRect = outerRect.adjusted( lw, lw, -lw, -lw );
-            polygon = polygon.subtracted( innerRect );
-        }
-
-        p->setPen( Qt::NoPen );
-
-        p->setBrush( pal.dark() );
-        p->drawPolygon( polygon );
-    }
-
-    const QRectF windowRect = rect.adjusted( lw, lw, -lw + 1, -lw + 1 );
-    if ( windowRect.isValid() )
-        p->fillRect( windowRect, pal.window() );
-}
-
-static void qwtDrawPanel( QPainter *painter, const QRectF &rect,
-    const QPalette &pal, double lw )
-{
-    if ( lw > 0.0 )
-    {
-        if ( rect.width() == 0.0 )
-        {
-            painter->setPen( pal.window().color() );
-            painter->drawLine( rect.topLeft(), rect.bottomLeft() );
-            return;
-        }
-
-        if ( rect.height() == 0.0 )
-        {
-            painter->setPen( pal.window().color() );
-            painter->drawLine( rect.topLeft(), rect.topRight() );
-            return;
-        }
-
-        lw = qMin( lw, rect.height() / 2.0 - 1.0 );
-        lw = qMin( lw, rect.width() / 2.0 - 1.0 );
-
-        const QRectF outerRect = rect.adjusted( 0, 0, 1, 1 );
-        const QRectF innerRect = outerRect.adjusted( lw, lw, -lw, -lw );
-
-        QPolygonF lines[2];
-
-        lines[0] += outerRect.bottomLeft();
-        lines[0] += outerRect.topLeft();
-        lines[0] += outerRect.topRight();
-        lines[0] += innerRect.topRight();
-        lines[0] += innerRect.topLeft();
-        lines[0] += innerRect.bottomLeft();
-
-        lines[1] += outerRect.topRight();
-        lines[1] += outerRect.bottomRight();
-        lines[1] += outerRect.bottomLeft();
-        lines[1] += innerRect.bottomLeft();
-        lines[1] += innerRect.bottomRight();
-        lines[1] += innerRect.topRight();
-
-        painter->setPen( Qt::NoPen );
-
-        painter->setBrush( pal.light() );
-        painter->drawPolygon( lines[0] );
-        painter->setBrush( pal.dark() );
-        painter->drawPolygon( lines[1] );
-    }
-
-    painter->fillRect( rect.adjusted( lw, lw, -lw + 1, -lw + 1 ), pal.window() );
-}
-
-class QwtColumnSymbol::PrivateData
-{
-public:
-    PrivateData():
-        style( QwtColumnSymbol::Box ),
-        frameStyle( QwtColumnSymbol::Raised ),
-        lineWidth( 2 )
-    {
-        palette = QPalette( Qt::gray );
-    }
-
-    QwtColumnSymbol::Style style;
-    QwtColumnSymbol::FrameStyle frameStyle;
-
-    QPalette palette;
-    int lineWidth;
-};
-
-/*!
-  Constructor
-
-  \param style Style of the symbol
-  \sa setStyle(), style(), Style
-*/
-QwtColumnSymbol::QwtColumnSymbol( Style style )
-{
-    d_data = new PrivateData();
-    d_data->style = style;
-}
-
-//! Destructor
-QwtColumnSymbol::~QwtColumnSymbol()
-{
-    delete d_data;
-}
-
-/*!
-  Specify the symbol style
-
-  \param style Style
-  \sa style(), setPalette()
-*/
-void QwtColumnSymbol::setStyle( Style style )
-{
-    d_data->style = style;
-}
-
-/*!
-  \return Current symbol style
-  \sa setStyle()
-*/
-QwtColumnSymbol::Style QwtColumnSymbol::style() const
-{
-    return d_data->style;
-}
-
-/*!
-  Assign a palette for the symbol
-
-  \param palette Palette
-  \sa palette(), setStyle()
-*/
-void QwtColumnSymbol::setPalette( const QPalette &palette )
-{
-    d_data->palette = palette;
-}
-
-/*!
-  \return Current palette
-  \sa setPalette()
-*/
-const QPalette& QwtColumnSymbol::palette() const
-{
-    return d_data->palette;
-}
-
-/*!
-   Set the frame, that is used for the Box style.
-
-   \param frameStyle Frame style
-   \sa frameStyle(), setLineWidth(), setStyle()
-*/
-void QwtColumnSymbol::setFrameStyle( FrameStyle frameStyle )
-{
-    d_data->frameStyle = frameStyle;
-}
-
-/*!
-  \return Current frame style, that is used for the Box style.
-  \sa setFrameStyle(), lineWidth(), setStyle()
-*/
-QwtColumnSymbol::FrameStyle QwtColumnSymbol::frameStyle() const
-{
-    return d_data->frameStyle;
-}
-
-/*!
-   Set the line width of the frame, that is used for the Box style.
-
-   \param width Width
-   \sa lineWidth(), setFrameStyle()
-*/
-void QwtColumnSymbol::setLineWidth( int width )
-{
-    if ( width < 0 )
-        width = 0;
-
-    d_data->lineWidth = width;
-}
-
-/*!
-  \return Line width of the frame, that is used for the Box style.
-  \sa setLineWidth(), frameStyle(), setStyle()
-*/
-int QwtColumnSymbol::lineWidth() const
-{
-    return d_data->lineWidth;
-}
-
-/*!
-  Draw the symbol depending on its style.
-
-  \param painter Painter
-  \param rect Directed rectangle
-
-  \sa drawBox()
-*/
-void QwtColumnSymbol::draw( QPainter *painter,
-    const QwtColumnRect &rect ) const
-{
-    painter->save();
-
-    switch ( d_data->style )
-    {
-        case QwtColumnSymbol::Box:
-        {
-            drawBox( painter, rect );
-            break;
-        }
-        default:;
-    }
-
-    painter->restore();
-}
-
-/*!
-  Draw the symbol when it is in Box style.
-
-  \param painter Painter
-  \param rect Directed rectangle
-
-  \sa draw()
-*/
-void QwtColumnSymbol::drawBox( QPainter *painter,
-    const QwtColumnRect &rect ) const
-{
-    QRectF r = rect.toRect();
-    if ( QwtPainter::roundingAlignment( painter ) )
-    {
-        r.setLeft( qRound( r.left() ) );
-        r.setRight( qRound( r.right() ) );
-        r.setTop( qRound( r.top() ) );
-        r.setBottom( qRound( r.bottom() ) );
-    }
-
-    switch ( d_data->frameStyle )
-    {
-        case QwtColumnSymbol::Raised:
-        {
-            qwtDrawPanel( painter, r, d_data->palette, d_data->lineWidth );
-            break;
-        }
-        case QwtColumnSymbol::Plain:
-        {
-            qwtDrawBox( painter, r, d_data->palette, d_data->lineWidth );
-            break;
-        }
-        default:
-        {
-            painter->fillRect( r, d_data->palette.window() );
-        }
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_column_symbol.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_column_symbol.h
deleted file mode 100644
index 83d9a2ebcfe94db4a7a1db3e98ffdfbca202d3a9..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_column_symbol.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_COLUMN_SYMBOL_H
-#define QWT_COLUMN_SYMBOL_H
-
-#include "qwt_global.h"
-#include "qwt_interval.h"
-#include <qpen.h>
-#include <qsize.h>
-#include <qrect.h>
-
-class QPainter;
-class QPalette;
-class QRect;
-class QwtText;
-
-/*!
-    \brief Directed rectangle representing bounding rectangle and orientation
-    of a column.
-*/
-class QWT_EXPORT QwtColumnRect
-{
-public:
-    //! Direction of the column
-    enum Direction
-    {
-        //! From left to right
-        LeftToRight,
-
-        //! From right to left
-        RightToLeft,
-
-        //! From bottom to top
-        BottomToTop,
-
-        //! From top to bottom
-        TopToBottom
-    };
-
-    //! Build an rectangle with invalid intervals directed BottomToTop.
-    QwtColumnRect():
-        direction( BottomToTop )
-    {
-    }
-
-    //! \return A normalized QRect built from the intervals
-    QRectF toRect() const
-    {
-        QRectF r( hInterval.minValue(), vInterval.minValue(),
-            hInterval.maxValue() - hInterval.minValue(),
-            vInterval.maxValue() - vInterval.minValue() );
-        r = r.normalized();
-
-        if ( hInterval.borderFlags() & QwtInterval::ExcludeMinimum )
-            r.adjust( 1, 0, 0, 0 );
-        if ( hInterval.borderFlags() & QwtInterval::ExcludeMaximum )
-            r.adjust( 0, 0, -1, 0 );
-        if ( vInterval.borderFlags() & QwtInterval::ExcludeMinimum )
-            r.adjust( 0, 1, 0, 0 );
-        if ( vInterval.borderFlags() & QwtInterval::ExcludeMaximum )
-            r.adjust( 0, 0, 0, -1 );
-
-        return r;
-    }
-
-    //! \return Orientation
-    Qt::Orientation orientation() const
-    {
-        if ( direction == LeftToRight || direction == RightToLeft )
-            return Qt::Horizontal;
-
-        return Qt::Vertical;
-    }
-
-    //! Interval for the horizontal coordinates
-    QwtInterval hInterval;
-
-    //! Interval for the vertical coordinates
-    QwtInterval vInterval;
-
-    //! Direction
-    Direction direction;
-};
-
-//! A drawing primitive for columns
-class QWT_EXPORT QwtColumnSymbol
-{
-public:
-    /*!
-      Style
-      \sa setStyle(), style()
-    */
-    enum Style
-    {
-        //! No Style, the symbol draws nothing
-        NoStyle = -1,
-
-        /*!
-          The column is painted with a frame depending on the frameStyle()
-          and lineWidth() using the palette().
-         */
-        Box,
-
-        /*!
-          Styles >= QwtColumnSymbol::UserStyle are reserved for derived
-          classes of QwtColumnSymbol that overload draw() with
-          additional application specific symbol types.
-         */
-        UserStyle = 1000
-    };
-
-    /*!
-      Frame Style used in Box style().
-      \sa Style, setFrameStyle(), frameStyle(), setStyle(), setPalette()
-     */
-    enum FrameStyle
-    {
-        //! No frame
-        NoFrame,
-
-        //! A plain frame style
-        Plain,
-
-        //! A raised frame style
-        Raised
-    };
-
-public:
-    QwtColumnSymbol( Style = NoStyle );
-    virtual ~QwtColumnSymbol();
-
-    void setFrameStyle( FrameStyle style );
-    FrameStyle frameStyle() const;
-
-    void setLineWidth( int width );
-    int lineWidth() const;
-
-    void setPalette( const QPalette & );
-    const QPalette &palette() const;
-
-    void setStyle( Style );
-    Style style() const;
-
-    virtual void draw( QPainter *, const QwtColumnRect & ) const;
-
-protected:
-    void drawBox( QPainter *, const QwtColumnRect & ) const;
-
-private:
-    class PrivateData;
-    PrivateData* d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass.cpp
deleted file mode 100644
index f503f8e687a65a45296102cbec6eba63124631d5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_compass.h"
-#include "qwt_compass_rose.h"
-#include "qwt_math.h"
-#include "qwt_scale_draw.h"
-#include "qwt_painter.h"
-#include "qwt_dial_needle.h"
-#include <qpainter.h>
-#include <qpixmap.h>
-#include <qevent.h>
-
-/*! 
-  \brief Constructor
-
-  Initializes a label map for multiples of 45 degrees
- */
-QwtCompassScaleDraw::QwtCompassScaleDraw()
-{
-    enableComponent( QwtAbstractScaleDraw::Backbone, false );
-    enableComponent( QwtAbstractScaleDraw::Ticks, false );
-
-    d_labelMap.insert( 0.0, QString::fromLatin1( "N" ) );
-    d_labelMap.insert( 45.0, QString::fromLatin1( "NE" ) );
-    d_labelMap.insert( 90.0, QString::fromLatin1( "E" ) );
-    d_labelMap.insert( 135.0, QString::fromLatin1( "SE" ) );
-    d_labelMap.insert( 180.0, QString::fromLatin1( "S" ) );
-    d_labelMap.insert( 225.0, QString::fromLatin1( "SW" ) );
-    d_labelMap.insert( 270.0, QString::fromLatin1( "W" ) );
-    d_labelMap.insert( 315.0, QString::fromLatin1( "NW" ) );
-
-#if 0
-    d_labelMap.insert( 22.5, QString::fromLatin1( "NNE" ) );
-    d_labelMap.insert( 67.5, QString::fromLatin1( "NEE" ) );
-    d_labelMap.insert( 112.5, QString::fromLatin1( "SEE" ) );
-    d_labelMap.insert( 157.5, QString::fromLatin1( "SSE" ) );
-    d_labelMap.insert( 202.5, QString::fromLatin1( "SSW" ) );
-    d_labelMap.insert( 247.5, QString::fromLatin1( "SWW" ) );
-    d_labelMap.insert( 292.5, QString::fromLatin1( "NWW" ) );
-    d_labelMap.insert( 337.5, QString::fromLatin1( "NNW" ) );
-#endif
-}
-
-/*! 
-  \brief Constructor
-
-  \param map Value to label map
- */
-QwtCompassScaleDraw::QwtCompassScaleDraw( const QMap<double, QString> &map ):
-    d_labelMap( map )
-{
-    enableComponent( QwtAbstractScaleDraw::Backbone, false );
-    enableComponent( QwtAbstractScaleDraw::Ticks, false );
-}
-
-/*!
-  \brief Set a map, mapping values to labels
-  \param map Value to label map
-
-  The values of the major ticks are found by looking into this
-  map. The default map consists of the labels N, NE, E, SE, S, SW, W, NW.
-
-  \warning The map will have no effect for values that are no major
-           tick values. Major ticks can be changed by QwtScaleDraw::setScale
-
-  \sa labelMap(), scaleDraw(), setScale()
-*/
-void QwtCompassScaleDraw::setLabelMap( const QMap<double, QString> &map )
-{
-    d_labelMap = map;
-}
-
-
-/*!
-  \return map, mapping values to labels
-  \sa setLabelMap()
-*/
-QMap<double, QString> QwtCompassScaleDraw::labelMap() const
-{
-    return d_labelMap;
-}
-
-/*!
-  Map a value to a corresponding label
-
-  \param value Value that will be mapped
-
-  label() looks in the labelMap() for a corresponding label for value
-  or returns an null text.
-
-  \return Label, or QString::null
-  \sa labelMap(), setLabelMap()
-*/
-
-QwtText QwtCompassScaleDraw::label( double value ) const
-{
-    if ( qFuzzyCompare( value + 1.0, 1.0 ) )
-        value = 0.0;
-
-    if ( value < 0.0 )
-        value += 360.0;
-
-    if ( d_labelMap.contains( value ) )
-        return d_labelMap[value];
-
-    return QwtText();
-}
-
-class QwtCompass::PrivateData
-{
-public:
-    PrivateData():
-        rose( NULL )
-    {
-    }
-
-    ~PrivateData()
-    {
-        delete rose;
-    }
-
-    QwtCompassRose *rose;
-};
-
-/*!
-  \brief Constructor
-  \param parent Parent widget
-
-  Create a compass widget with a scale, no needle and no rose.
-  The default origin is 270.0 with no valid value. It accepts
-  mouse and keyboard inputs and has no step size. The default mode
-  is QwtDial::RotateNeedle.
-*/
-QwtCompass::QwtCompass( QWidget* parent ):
-    QwtDial( parent )
-{
-    d_data = new PrivateData;
-
-    setScaleDraw( new QwtCompassScaleDraw() );
-
-    setOrigin( 270.0 );
-    setWrapping( true );
-
-    setScaleMaxMajor( 36 );
-    setScaleMaxMinor( 10 );
-
-    setScale( 0.0, 360.0 ); // degrees as default
-    setTotalSteps( 360 );
-}
-
-//!  Destructor
-QwtCompass::~QwtCompass()
-{
-    delete d_data;
-}
-
-
-/*!
-   Draw the contents of the scale
-
-   \param painter Painter
-   \param center Center of the content circle
-   \param radius Radius of the content circle
-*/
-void QwtCompass::drawScaleContents( QPainter *painter,
-    const QPointF &center, double radius ) const
-{
-    QPalette::ColorGroup cg;
-    if ( isEnabled() )
-        cg = hasFocus() ? QPalette::Active : QPalette::Inactive;
-    else
-        cg = QPalette::Disabled;
-
-    double north = origin();
-    if ( isValid() )
-    {
-        if ( mode() == RotateScale )
-            north -= value();
-    }
-
-    const int margin = 4;
-    drawRose( painter, center, radius - margin, 360.0 - north,  cg );
-}
-
-/*!
-  Draw the compass rose
-
-  \param painter Painter
-  \param center Center of the compass
-  \param radius of the circle, where to paint the rose
-  \param north Direction pointing north, in degrees counter clockwise
-  \param cg Color group
-*/
-void QwtCompass::drawRose( QPainter *painter, const QPointF &center,
-    double radius, double north, QPalette::ColorGroup cg ) const
-{
-    if ( d_data->rose )
-        d_data->rose->draw( painter, center, radius, north,  cg );
-}
-
-/*!
-  Set a rose for the compass
-  \param rose Compass rose
-  \warning The rose will be deleted, when a different rose is
-    set or in ~QwtCompass
-  \sa rose()
-*/
-void QwtCompass::setRose( QwtCompassRose *rose )
-{
-    if ( rose != d_data->rose )
-    {
-        if ( d_data->rose )
-            delete d_data->rose;
-
-        d_data->rose = rose;
-        update();
-    }
-}
-
-/*!
-  \return rose
-  \sa setRose()
-*/
-const QwtCompassRose *QwtCompass::rose() const
-{
-    return d_data->rose;
-}
-
-/*!
-  \return rose
-  \sa setRose()
-*/
-QwtCompassRose *QwtCompass::rose()
-{
-    return d_data->rose;
-}
-
-/*!
-  Handles key events
-
-  Beside the keys described in QwtDial::keyPressEvent numbers
-  from 1-9 (without 5) set the direction according to their
-  position on the num pad.
-
-  \sa isReadOnly()
-*/
-void QwtCompass::keyPressEvent( QKeyEvent *kev )
-{
-    if ( isReadOnly() )
-        return;
-
-#if 0
-    if ( kev->key() == Key_5 )
-    {
-        invalidate(); // signal ???
-        return;
-    }
-#endif
-
-    double newValue = value();
-
-    if ( kev->key() >= Qt::Key_1 && kev->key() <= Qt::Key_9 )
-    {
-        if ( mode() != RotateNeedle || kev->key() == Qt::Key_5 )
-            return;
-
-        switch ( kev->key() )
-        {
-            case Qt::Key_6:
-                newValue = 180.0 * 0.0;
-                break;
-            case Qt::Key_3:
-                newValue = 180.0 * 0.25;
-                break;
-            case Qt::Key_2:
-                newValue = 180.0 * 0.5;
-                break;
-            case Qt::Key_1:
-                newValue = 180.0 * 0.75;
-                break;
-            case Qt::Key_4:
-                newValue = 180.0 * 1.0;
-                break;
-            case Qt::Key_7:
-                newValue = 180.0 * 1.25;
-                break;
-            case Qt::Key_8:
-                newValue = 180.0 * 1.5;
-                break;
-            case Qt::Key_9:
-                newValue = 180.0 * 1.75;
-                break;
-        }
-        newValue -= origin();
-        setValue( newValue );
-    }
-    else
-    {
-        QwtDial::keyPressEvent( kev );
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass.h
deleted file mode 100644
index 9ef3480a51b83bb74233cc457af2284fa3b2a5e7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_COMPASS_H
-#define QWT_COMPASS_H 1
-
-#include "qwt_global.h"
-#include "qwt_dial.h"
-#include "qwt_round_scale_draw.h"
-#include <qstring.h>
-#include <qmap.h>
-
-class QwtCompassRose;
-
-/*!
-  \brief A special scale draw made for QwtCompass
-
-  QwtCompassScaleDraw maps values to strings using
-  a special map, that can be modified by the application
-
-  The default map consists of the labels N, NE, E, SE, S, SW, W, NW.
-
-  \sa QwtCompass
-*/
-class QWT_EXPORT QwtCompassScaleDraw: public QwtRoundScaleDraw
-{
-public:
-    explicit QwtCompassScaleDraw();
-    explicit QwtCompassScaleDraw( const QMap<double, QString> &map );
-
-    void setLabelMap( const QMap<double, QString> &map );
-    QMap<double, QString> labelMap() const;
-
-    virtual QwtText label( double value ) const;
-
-private:
-    QMap<double, QString> d_labelMap;
-};
-
-/*!
-  \brief A Compass Widget
-
-  QwtCompass is a widget to display and enter directions. It consists
-  of a scale, an optional needle and rose.
-
-  \image html dials1.png
-
-  \note The examples/dials example shows how to use QwtCompass.
-*/
-
-class QWT_EXPORT QwtCompass: public QwtDial
-{
-    Q_OBJECT
-
-public:
-    explicit QwtCompass( QWidget* parent = NULL );
-    virtual ~QwtCompass();
-
-    void setRose( QwtCompassRose *rose );
-    const QwtCompassRose *rose() const;
-    QwtCompassRose *rose();
-
-protected:
-    virtual void drawRose( QPainter *, const QPointF &center,
-        double radius, double north, QPalette::ColorGroup ) const;
-
-    virtual void drawScaleContents( QPainter *,
-        const QPointF &center, double radius ) const;
-
-    virtual void keyPressEvent( QKeyEvent * );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass_rose.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass_rose.cpp
deleted file mode 100644
index a470302b2570dd8f67da64f23d831ebf63ea829c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass_rose.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_compass_rose.h"
-#include "qwt_point_polar.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-
-static QPointF qwtIntersection( 
-    QPointF p11, QPointF p12, QPointF p21, QPointF p22 )
-{
-    const QLineF line1( p11, p12 );
-    const QLineF line2( p21, p22 );
-
-    QPointF pos;
-    if ( line1.intersect( line2, &pos ) == QLineF::NoIntersection )
-        return QPointF();
-
-    return pos;
-}
-
-class QwtSimpleCompassRose::PrivateData
-{
-public:
-    PrivateData():
-        width( 0.2 ),
-        numThorns( 8 ),
-        numThornLevels( -1 ),
-        shrinkFactor( 0.9 )
-    {
-    }
-
-    double width;
-    int numThorns;
-    int numThornLevels;
-    double shrinkFactor;
-};
-
-/*!
-   Constructor
-
-   \param numThorns Number of thorns
-   \param numThornLevels Number of thorn levels
-*/
-QwtSimpleCompassRose::QwtSimpleCompassRose(
-    int numThorns, int numThornLevels )
-{
-    d_data = new PrivateData();
-    d_data->numThorns = numThorns;
-    d_data->numThornLevels = numThornLevels;
-
-    const QColor dark( 128, 128, 255 );
-    const QColor light( 192, 255, 255 );
-
-    QPalette palette;
-    palette.setColor( QPalette::Dark, dark );
-    palette.setColor( QPalette::Light, light );
-
-    setPalette( palette );
-}
-
-//! Destructor
-QwtSimpleCompassRose::~QwtSimpleCompassRose()
-{
-    delete d_data;
-}
-
-/*!
-  Set the Factor how to shrink the thorns with each level
-  The default value is 0.9.
-
-  \param factor Shrink factor
-  \sa shrinkFactor()
-*/
-void QwtSimpleCompassRose::setShrinkFactor( double factor )
-{
-    d_data->shrinkFactor = factor;
-}
-
-/*!
-  \return Factor how to shrink the thorns with each level
-  \sa setShrinkFactor()
-*/
-double QwtSimpleCompassRose::shrinkFactor() const
-{
-    return d_data->shrinkFactor;
-}
-
-/*!
-   Draw the rose
-
-   \param painter Painter
-   \param center Center point
-   \param radius Radius of the rose
-   \param north Position
-   \param cg Color group
-*/
-void QwtSimpleCompassRose::draw( QPainter *painter, const QPointF &center,
-    double radius, double north, QPalette::ColorGroup cg ) const
-{
-    QPalette pal = palette();
-    pal.setCurrentColorGroup( cg );
-
-    drawRose( painter, pal, center, radius, north, d_data->width,
-        d_data->numThorns, d_data->numThornLevels, d_data->shrinkFactor );
-}
-
-/*!
-   Draw the rose
-
-   \param painter Painter
-   \param palette Palette
-   \param center Center of the rose
-   \param radius Radius of the rose
-   \param north Position pointing to north
-   \param width Width of the rose
-   \param numThorns Number of thorns
-   \param numThornLevels Number of thorn levels
-   \param shrinkFactor Factor to shrink the thorns with each level
-*/
-void QwtSimpleCompassRose::drawRose(
-    QPainter *painter,
-    const QPalette &palette,
-    const QPointF &center, double radius, double north, double width,
-    int numThorns, int numThornLevels, double shrinkFactor )
-{
-    if ( numThorns < 4 )
-        numThorns = 4;
-
-    if ( numThorns % 4 )
-        numThorns += 4 - numThorns % 4;
-
-    if ( numThornLevels <= 0 )
-        numThornLevels = numThorns / 4;
-
-    if ( shrinkFactor >= 1.0 )
-        shrinkFactor = 1.0;
-
-    if ( shrinkFactor <= 0.5 )
-        shrinkFactor = 0.5;
-
-    painter->save();
-
-    painter->setPen( Qt::NoPen );
-
-    for ( int j = 1; j <= numThornLevels; j++ )
-    {
-        double step =  qPow( 2.0, j ) * M_PI / numThorns;
-        if ( step > M_PI_2 )
-            break;
-
-        double r = radius;
-        for ( int k = 0; k < 3; k++ )
-        {
-            if ( j + k < numThornLevels )
-                r *= shrinkFactor;
-        }
-
-        double leafWidth = r * width;
-        if ( 2.0 * M_PI / step > 32 )
-            leafWidth = 16;
-
-        const double origin = qwtRadians( north );
-        for ( double angle = origin;
-            angle < 2.0 * M_PI + origin; angle += step )
-        {
-            const QPointF p = qwtPolar2Pos( center, r, angle );
-            const QPointF p1 = qwtPolar2Pos( center, leafWidth, angle + M_PI_2 );
-            const QPointF p2 = qwtPolar2Pos( center, leafWidth, angle - M_PI_2 );
-            const QPointF p3 = qwtPolar2Pos( center, r, angle + step / 2.0 );
-            const QPointF p4 = qwtPolar2Pos( center, r, angle - step / 2.0 );
-
-            QPainterPath darkPath;
-            darkPath.moveTo( center );
-            darkPath.lineTo( p );
-            darkPath.lineTo( qwtIntersection( center, p3, p1, p ) );
-
-            painter->setBrush( palette.brush( QPalette::Dark ) );
-            painter->drawPath( darkPath );
-
-            QPainterPath lightPath;
-            lightPath.moveTo( center );
-            lightPath.lineTo( p );
-            lightPath.lineTo( qwtIntersection( center, p4, p2, p ) );
-
-            painter->setBrush( palette.brush( QPalette::Light ) );
-            painter->drawPath( lightPath );
-        }
-    }
-    painter->restore();
-}
-
-/*!
-   Set the width of the rose heads. Lower value make thinner heads.
-   The range is limited from 0.03 to 0.4.
-
-   \param width Width
-*/
-void QwtSimpleCompassRose::setWidth( double width )
-{
-    d_data->width = width;
-    if ( d_data->width < 0.03 )
-        d_data->width = 0.03;
-
-    if ( d_data->width > 0.4 )
-        d_data->width = 0.4;
-}
-
-/*! 
-  \return Width of the rose
-  \sa setWidth()
- */
-double QwtSimpleCompassRose::width() const
-{
-    return d_data->width;
-}
-
-/*!
-  Set the number of thorns on one level
-  The number is aligned to a multiple of 4, with a minimum of 4
-
-  \param numThorns Number of thorns
-  \sa numThorns(), setNumThornLevels()
-*/
-void QwtSimpleCompassRose::setNumThorns( int numThorns )
-{
-    if ( numThorns < 4 )
-        numThorns = 4;
-
-    if ( numThorns % 4 )
-        numThorns += 4 - numThorns % 4;
-
-    d_data->numThorns = numThorns;
-}
-
-/*!
-   \return Number of thorns
-   \sa setNumThorns(), setNumThornLevels()
-*/
-int QwtSimpleCompassRose::numThorns() const
-{
-    return d_data->numThorns;
-}
-
-/*!
-  Set the of thorns levels
-
-  \param numThornLevels Number of thorns levels
-  \sa setNumThorns(), numThornLevels()
-*/
-void QwtSimpleCompassRose::setNumThornLevels( int numThornLevels )
-{
-    d_data->numThornLevels = numThornLevels;
-}
-
-/*!
-   \return Number of thorn levels
-   \sa setNumThorns(), setNumThornLevels()
-*/
-int QwtSimpleCompassRose::numThornLevels() const
-{
-    return d_data->numThornLevels;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass_rose.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass_rose.h
deleted file mode 100644
index 8a8f1ce17561932ffe8055c133421b31c96aaa47..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compass_rose.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_COMPASS_ROSE_H
-#define QWT_COMPASS_ROSE_H 1
-
-#include "qwt_global.h"
-#include <qpalette.h>
-
-class QPainter;
-
-/*!
-  \brief Abstract base class for a compass rose
-*/
-class QWT_EXPORT QwtCompassRose
-{
-public:
-    //! Destructor
-    virtual ~QwtCompassRose() {};
-
-    //! Assign a palette
-    virtual void setPalette( const QPalette &p )
-    {
-        d_palette = p;
-    }
-
-    //! \return Current palette
-    const QPalette &palette() const
-    {
-        return d_palette;
-    }
-
-    /*!
-        Draw the rose
-
-        \param painter Painter
-        \param center Center point
-        \param radius Radius of the rose
-        \param north Position
-        \param colorGroup Color group
-     */
-    virtual void draw( QPainter *painter, 
-        const QPointF &center, double radius, double north,
-        QPalette::ColorGroup colorGroup = QPalette::Active ) const = 0;
-
-private:
-    QPalette d_palette;
-};
-
-/*!
-  \brief A simple rose for QwtCompass
-*/
-class QWT_EXPORT QwtSimpleCompassRose: public QwtCompassRose
-{
-public:
-    QwtSimpleCompassRose( int numThorns = 8, int numThornLevels = -1 );
-    virtual ~QwtSimpleCompassRose();
-
-    void setWidth( double w );
-    double width() const;
-
-    void setNumThorns( int count );
-    int numThorns() const;
-
-    void setNumThornLevels( int count );
-    int numThornLevels() const;
-
-    void setShrinkFactor( double factor );
-    double shrinkFactor() const;
-
-    virtual void draw( QPainter *, const QPointF &center, double radius,
-        double north, QPalette::ColorGroup = QPalette::Active ) const;
-
-    static void drawRose( QPainter *, const QPalette &,
-        const QPointF &center, double radius, double origin, double width,
-        int numThorns, int numThornLevels, double shrinkFactor );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif 
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compat.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compat.h
deleted file mode 100644
index f22a6a91135ca857d70f9b7057db3af6e9b5590f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_compat.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef _QWT_COMPAT_H_
-#define _QWT_COMPAT_H_
-
-#include "qwt_global.h"
-#include "qwt_interval.h"
-#include "qwt_point_3d.h"
-#include <qlist.h>
-#include <qvector.h>
-#include <qpoint.h>
-#include <qsize.h>
-#include <qrect.h>
-#include <qpolygon.h>
-
-// A couple of definition for Qwt5 compatibility
-
-#define qwtMax qMax
-#define qwtMin qMin
-#define qwtAbs qAbs
-#define qwtRound qRound
-
-#define QwtArray QVector
-
-typedef QList<double> QwtValueList;
-typedef QPointF QwtDoublePoint;
-typedef QSizeF QwtDoubleSize;
-typedef QRectF QwtDoubleRect;
-
-typedef QPolygon QwtPolygon;
-typedef QPolygonF QwtPolygonF;
-typedef QwtInterval QwtDoubleInterval;
-typedef QwtPoint3D QwtDoublePoint3D;
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_counter.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_counter.cpp
deleted file mode 100644
index 662a8e8849434c4ea1a0809b7c75bd6189836e42..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_counter.cpp
+++ /dev/null
@@ -1,785 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_arrow_button.h"
-#include "qwt_math.h"
-#include "qwt_counter.h"
-#include <qlayout.h>
-#include <qlineedit.h>
-#include <qvalidator.h>
-#include <qevent.h>
-#include <qstyle.h>
-
-class QwtCounter::PrivateData
-{
-public:
-    PrivateData():
-        minimum( 0.0 ),
-        maximum( 0.0 ),
-        singleStep( 1.0 ),
-        isValid( false ),
-        value( 0.0 ),
-        wrapping( false )
-    {
-        increment[Button1] = 1;
-        increment[Button2] = 10;
-        increment[Button3] = 100;
-    }
-
-    QwtArrowButton *buttonDown[ButtonCnt];
-    QwtArrowButton *buttonUp[ButtonCnt];
-    QLineEdit *valueEdit;
-
-    int increment[ButtonCnt];
-    int numButtons;
-
-    double minimum;
-    double maximum;
-    double singleStep;
-
-    bool isValid;
-    double value;
-
-    bool wrapping;
-};
-
-/*!
-  The counter is initialized with a range is set to [0.0, 1.0] with 
-  0.01 as single step size. The value is invalid.
-
-  The default number of buttons is set to 2. The default increments are:
-  \li Button 1: 1 step
-  \li Button 2: 10 steps
-  \li Button 3: 100 steps
-
-  \param parent
- */
-QwtCounter::QwtCounter( QWidget *parent ):
-    QWidget( parent )
-{
-    initCounter();
-}
-
-void QwtCounter::initCounter()
-{
-    d_data = new PrivateData;
-
-    QHBoxLayout *layout = new QHBoxLayout( this );
-    layout->setSpacing( 0 );
-    layout->setMargin( 0 );
-
-    for ( int i = ButtonCnt - 1; i >= 0; i-- )
-    {
-        QwtArrowButton *btn =
-            new QwtArrowButton( i + 1, Qt::DownArrow, this );
-        btn->setFocusPolicy( Qt::NoFocus );
-        btn->installEventFilter( this );
-        layout->addWidget( btn );
-
-        connect( btn, SIGNAL( released() ), SLOT( btnReleased() ) );
-        connect( btn, SIGNAL( clicked() ), SLOT( btnClicked() ) );
-
-        d_data->buttonDown[i] = btn;
-    }
-
-    d_data->valueEdit = new QLineEdit( this );
-    d_data->valueEdit->setReadOnly( false );
-    d_data->valueEdit->setValidator( new QDoubleValidator( d_data->valueEdit ) );
-    layout->addWidget( d_data->valueEdit );
-
-    connect( d_data->valueEdit, SIGNAL( editingFinished() ),
-         SLOT( textChanged() ) );
-
-    layout->setStretchFactor( d_data->valueEdit, 10 );
-
-    for ( int i = 0; i < ButtonCnt; i++ )
-    {
-        QwtArrowButton *btn =
-            new QwtArrowButton( i + 1, Qt::UpArrow, this );
-        btn->setFocusPolicy( Qt::NoFocus );
-        btn->installEventFilter( this );
-        layout->addWidget( btn );
-
-        connect( btn, SIGNAL( released() ), SLOT( btnReleased() ) );
-        connect( btn, SIGNAL( clicked() ), SLOT( btnClicked() ) );
-
-        d_data->buttonUp[i] = btn;
-    }
-
-    setNumButtons( 2 );
-    setRange( 0.0, 1.0 );
-    setSingleStep( 0.001 );
-    setValue( 0.0 );
-
-    setSizePolicy(
-        QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed ) );
-
-    setFocusProxy( d_data->valueEdit );
-    setFocusPolicy( Qt::StrongFocus );
-}
-
-//! Destructor
-QwtCounter::~QwtCounter()
-{
-    delete d_data;
-}
-
-/*! 
-  Set the counter to be in valid/invalid state
-
-  When the counter is set to invalid, no numbers are displayed and
-  the buttons are disabled.
-
-  \param on If true the counter will be set as valid 
-
-  \sa setValue(), isValid()
-*/
-void QwtCounter::setValid( bool on )
-{
-    if ( on != d_data->isValid )
-    {
-        d_data->isValid = on;
-
-        updateButtons();
-
-        if ( d_data->isValid )
-        {
-            showNumber( value() );
-            Q_EMIT valueChanged( value() );
-        }
-        else
-        {
-            d_data->valueEdit->setText( QString::null );
-        }
-    }   
-}   
-
-/*! 
-  \return True, if the value is valid
-  \sa setValid(), setValue()
- */
-bool QwtCounter::isValid() const
-{
-    return d_data->isValid;
-}   
-
-/*!
-  \brief Allow/disallow the user to manually edit the value
-
-  \param on True disable editing
-  \sa isReadOnly()
-*/
-void QwtCounter::setReadOnly( bool on )
-{
-    d_data->valueEdit->setReadOnly( on );
-}
-
-/*! 
-   \return True, when the line line edit is read only. (default is no)
-  \sa setReadOnly()
- */
-bool QwtCounter::isReadOnly() const
-{
-    return d_data->valueEdit->isReadOnly();
-}
-
-/*!
-  \brief Set a new value without adjusting to the step raster
-
-  The state of the counter is set to be valid.
-
-  \param value New value
-
-  \sa isValid(), value(), valueChanged()
-  \warning The value is clipped when it lies outside the range.
-*/
-
-void QwtCounter::setValue( double value )
-{
-    const double vmin = qMin( d_data->minimum, d_data->maximum );
-    const double vmax = qMax( d_data->minimum, d_data->maximum );
-
-    value = qBound( vmin, value, vmax );
-
-    if ( !d_data->isValid || value != d_data->value )
-    {
-        d_data->isValid = true;
-        d_data->value = value;
-
-        showNumber( value );
-        updateButtons();
-
-        Q_EMIT valueChanged( value );
-    }
-}
-
-/*!
-  \return Current value of the counter
-  \sa setValue(), valueChanged()
- */
-double QwtCounter::value() const
-{
-    return d_data->value;
-}
-
-/*!
-  \brief Set the minimum and maximum values
-
-  The maximum is adjusted if necessary to ensure that the range remains valid.
-  The value might be modified to be inside of the range.
-
-  \param min Minimum value
-  \param max Maximum value
-
-  \sa minimum(), maximum()
- */
-void QwtCounter::setRange( double min, double max )
-{
-    max = qMax( min, max );
-
-    if ( d_data->maximum == max && d_data->minimum == min )
-        return;
-
-    d_data->minimum = min;
-    d_data->maximum = max;
-
-    setSingleStep( singleStep() );
-
-    const double value = qBound( min, d_data->value, max );
-
-    if ( value != d_data->value )
-    {
-        d_data->value = value;
-
-        if ( d_data->isValid )
-        {
-            showNumber( value );
-            Q_EMIT valueChanged( value );
-        }
-    }
-
-    updateButtons();
-}
-
-/*!
-  Set the minimum value of the range
-
-  \param value Minimum value
-  \sa setRange(), setMaximum(), minimum()
-
-  \note The maximum is adjusted if necessary to ensure that the range remains valid.
-*/
-void QwtCounter::setMinimum( double value )
-{
-    setRange( value, maximum() );
-}
-
-/*!
-  \return The minimum of the range
-  \sa setRange(), setMinimum(), maximum()
-*/
-double QwtCounter::minimum() const
-{
-    return d_data->minimum;
-}
-
-/*!
-  Set the maximum value of the range
-
-  \param value Maximum value
-  \sa setRange(), setMinimum(), maximum()
-*/
-void QwtCounter::setMaximum( double value )
-{
-    setRange( minimum(), value );
-}
-
-/*!
-  \return The maximum of the range
-  \sa setRange(), setMaximum(), minimum()
-*/
-double QwtCounter::maximum() const
-{
-    return d_data->maximum;
-}
-
-/*!
-  \brief Set the step size of the counter
-
-  A value <= 0.0 disables stepping
-
-  \param stepSize Single step size
-  \sa singleStep()
-*/
-void QwtCounter::setSingleStep( double stepSize )
-{
-    d_data->singleStep = qMax( stepSize, 0.0 );
-}
-
-/*!
-  \return Single step size
-  \sa setSingleStep()
- */
-double QwtCounter::singleStep() const
-{
-    return d_data->singleStep;
-}
-
-/*!
-  \brief En/Disable wrapping
-
-  If wrapping is true stepping up from maximum() value will take 
-  you to the minimum() value and vice versa. 
-
-  \param on En/Disable wrapping
-  \sa wrapping()
- */
-void QwtCounter::setWrapping( bool on )
-{
-    d_data->wrapping = on;
-}
-
-/*!
-  \return True, when wrapping is set
-  \sa setWrapping()
- */
-bool QwtCounter::wrapping() const
-{
-    return d_data->wrapping;
-}
-
-/*!
-  Specify the number of buttons on each side of the label
-
-  \param numButtons Number of buttons
-  \sa numButtons()
-*/
-void QwtCounter::setNumButtons( int numButtons )
-{
-    if ( numButtons < 0 || numButtons > QwtCounter::ButtonCnt )
-        return;
-
-    for ( int i = 0; i < QwtCounter::ButtonCnt; i++ )
-    {
-        if ( i < numButtons )
-        {
-            d_data->buttonDown[i]->show();
-            d_data->buttonUp[i]->show();
-        }
-        else
-        {
-            d_data->buttonDown[i]->hide();
-            d_data->buttonUp[i]->hide();
-        }
-    }
-
-    d_data->numButtons = numButtons;
-}
-
-/*!
-  \return The number of buttons on each side of the widget.
-  \sa setNumButtons()
-*/
-int QwtCounter::numButtons() const
-{
-    return d_data->numButtons;
-}
-
-/*!
-  Specify the number of steps by which the value
-  is incremented or decremented when a specified button
-  is pushed.
-
-  \param button Button index
-  \param numSteps Number of steps
-
-  \sa incSteps()
-*/
-void QwtCounter::setIncSteps( QwtCounter::Button button, int numSteps )
-{
-    if ( button >= 0 && button < QwtCounter::ButtonCnt )
-        d_data->increment[ button ] = numSteps;
-}
-
-/*!
-  \return The number of steps by which a specified button increments the value
-          or 0 if the button is invalid.
-  \param button Button index
-
-  \sa setIncSteps()
-*/
-int QwtCounter::incSteps( QwtCounter::Button button ) const
-{
-    if ( button >= 0 && button < QwtCounter::ButtonCnt )
-        return d_data->increment[ button ];
-
-    return 0;
-}
-
-
-/*!
-  Set the number of increment steps for button 1
-  \param nSteps Number of steps
-*/
-void QwtCounter::setStepButton1( int nSteps )
-{
-    setIncSteps( QwtCounter::Button1, nSteps );
-}
-
-//! returns the number of increment steps for button 1
-int QwtCounter::stepButton1() const
-{
-    return incSteps( QwtCounter::Button1 );
-}
-
-/*!
-  Set the number of increment steps for button 2
-  \param nSteps Number of steps
-*/
-void QwtCounter::setStepButton2( int nSteps )
-{
-    setIncSteps( QwtCounter::Button2, nSteps );
-}
-
-//! returns the number of increment steps for button 2
-int QwtCounter::stepButton2() const
-{
-    return incSteps( QwtCounter::Button2 );
-}
-
-/*!
-  Set the number of increment steps for button 3
-  \param nSteps Number of steps
-*/
-void QwtCounter::setStepButton3( int nSteps )
-{
-    setIncSteps( QwtCounter::Button3, nSteps );
-}
-
-//! returns the number of increment steps for button 3
-int QwtCounter::stepButton3() const
-{
-    return incSteps( QwtCounter::Button3 );
-}
-
-//! Set from lineedit
-void QwtCounter::textChanged()
-{
-    bool converted = false;
-
-    const double value = d_data->valueEdit->text().toDouble( &converted );
-    if ( converted )
-        setValue( value );
-}
-
-/*!
-   Handle QEvent::PolishRequest events
-   \param event Event
-   \return see QWidget::event()
-*/
-bool QwtCounter::event( QEvent *event )
-{
-    if ( event->type() == QEvent::PolishRequest )
-    {
-        const int w = d_data->valueEdit->fontMetrics().width( "W" ) + 8;
-        for ( int i = 0; i < ButtonCnt; i++ )
-        {
-            d_data->buttonDown[i]->setMinimumWidth( w );
-            d_data->buttonUp[i]->setMinimumWidth( w );
-        }
-    }
-
-    return QWidget::event( event );
-}
-
-/*!
-  Handle key events
-
-  - Ctrl + Qt::Key_Home\n
-    Step to minimum()
-  - Ctrl + Qt::Key_End\n
-    Step to maximum()
-  - Qt::Key_Up\n
-    Increment by incSteps(QwtCounter::Button1)
-  - Qt::Key_Down\n
-    Decrement by incSteps(QwtCounter::Button1)
-  - Qt::Key_PageUp\n
-    Increment by incSteps(QwtCounter::Button2)
-  - Qt::Key_PageDown\n
-    Decrement by incSteps(QwtCounter::Button2)
-  - Shift + Qt::Key_PageUp\n
-    Increment by incSteps(QwtCounter::Button3)
-  - Shift + Qt::Key_PageDown\n
-    Decrement by incSteps(QwtCounter::Button3)
-
-  \param event Key event
-*/
-void QwtCounter::keyPressEvent ( QKeyEvent *event )
-{
-    bool accepted = true;
-
-    switch ( event->key() )
-    {
-        case Qt::Key_Home:
-        {
-            if ( event->modifiers() & Qt::ControlModifier )
-                setValue( minimum() );
-            else
-                accepted = false;
-            break;
-        }
-        case Qt::Key_End:
-        {
-            if ( event->modifiers() & Qt::ControlModifier )
-                setValue( maximum() );
-            else
-                accepted = false;
-            break;
-        }
-        case Qt::Key_Up:
-        {
-            incrementValue( d_data->increment[0] );
-            break;
-        }
-        case Qt::Key_Down:
-        {
-            incrementValue( -d_data->increment[0] );
-            break;
-        }
-        case Qt::Key_PageUp:
-        case Qt::Key_PageDown:
-        {
-            int increment = d_data->increment[0];
-            if ( d_data->numButtons >= 2 )
-                increment = d_data->increment[1];
-            if ( d_data->numButtons >= 3 )
-            {
-                if ( event->modifiers() & Qt::ShiftModifier )
-                    increment = d_data->increment[2];
-            }
-            if ( event->key() == Qt::Key_PageDown )
-                increment = -increment;
-            incrementValue( increment );
-            break;
-        }
-        default:
-        {
-            accepted = false;
-        }
-    }
-
-    if ( accepted )
-    {
-        event->accept();
-        return;
-    }
-
-    QWidget::keyPressEvent ( event );
-}
-
-/*!
-  Handle wheel events
-  \param event Wheel event
-*/
-void QwtCounter::wheelEvent( QWheelEvent *event )
-{
-    event->accept();
-
-    if ( d_data->numButtons <= 0 )
-        return;
-
-    int increment = d_data->increment[0];
-    if ( d_data->numButtons >= 2 )
-    {
-        if ( event->modifiers() & Qt::ControlModifier )
-            increment = d_data->increment[1];
-    }
-    if ( d_data->numButtons >= 3 )
-    {
-        if ( event->modifiers() & Qt::ShiftModifier )
-            increment = d_data->increment[2];
-    }
-
-    for ( int i = 0; i < d_data->numButtons; i++ )
-    {
-        if ( d_data->buttonDown[i]->geometry().contains( event->pos() ) ||
-            d_data->buttonUp[i]->geometry().contains( event->pos() ) )
-        {
-            increment = d_data->increment[i];
-        }
-    }
-
-    const int wheel_delta = 120;
-
-#if 1
-    int delta = event->delta();
-    if ( delta >= 2 * wheel_delta )
-        delta /= 2; // Never saw an abs(delta) < 240
-#endif
-
-    incrementValue( delta / wheel_delta * increment );
-}
-
-void QwtCounter::incrementValue( int numSteps )
-{
-    const double min = d_data->minimum;
-    const double max = d_data->maximum;
-    double stepSize = d_data->singleStep;
-
-    if ( !d_data->isValid || min >= max || stepSize <= 0.0 )
-        return;
-
-
-#if 1
-    stepSize = qMax( stepSize, 1.0e-10 * ( max - min ) );
-#endif
-
-    double value = d_data->value + numSteps * stepSize;
-
-    if ( d_data->wrapping )
-    {
-        const double range = max - min;
-
-        if ( value < min )
-        {
-            value += ::ceil( ( min - value ) / range ) * range;
-        }
-        else if ( value > max )
-        {
-            value -= ::ceil( ( value - max ) / range ) * range;
-        }
-    }
-    else
-    {
-        value = qBound( min, value, max );
-    }
-
-    value = min + qRound( ( value - min ) / stepSize ) * stepSize;
-
-    if ( stepSize > 1e-12 )
-    {
-        if ( qFuzzyCompare( value + 1.0, 1.0 ) )
-        {
-            // correct rounding error if value = 0
-            value = 0.0;
-        }
-        else if ( qFuzzyCompare( value, max ) )
-        {
-            // correct rounding error at the border
-            value = max;
-        }
-    }
-
-    if ( value != d_data->value )
-    {
-        d_data->value = value;
-        showNumber( d_data->value );
-        updateButtons();
-
-        Q_EMIT valueChanged( d_data->value );
-    }
-}
-
-
-/*!
-  \brief Update buttons according to the current value
-
-  When the QwtCounter under- or over-flows, the focus is set to the smallest
-  up- or down-button and counting is disabled.
-
-  Counting is re-enabled on a button release event (mouse or space bar).
-*/
-void QwtCounter::updateButtons()
-{
-    if ( d_data->isValid )
-    {
-        // 1. save enabled state of the smallest down- and up-button
-        // 2. change enabled state on under- or over-flow
-
-        for ( int i = 0; i < QwtCounter::ButtonCnt; i++ )
-        {
-            d_data->buttonDown[i]->setEnabled( value() > minimum() );
-            d_data->buttonUp[i]->setEnabled( value() < maximum() );
-        }
-    }
-    else
-    {
-        for ( int i = 0; i < QwtCounter::ButtonCnt; i++ )
-        {
-            d_data->buttonDown[i]->setEnabled( false );
-            d_data->buttonUp[i]->setEnabled( false );
-        }
-    }
-}
-/*!
-  Display number string
-
-  \param number Number
-*/
-void QwtCounter::showNumber( double number )
-{
-    QString text;
-    text.setNum( number );
-
-    const int cursorPos = d_data->valueEdit->cursorPosition();
-    d_data->valueEdit->setText( text );
-    d_data->valueEdit->setCursorPosition( cursorPos );
-}
-
-//!  Button clicked
-void QwtCounter::btnClicked()
-{
-    for ( int i = 0; i < ButtonCnt; i++ )
-    {
-        if ( d_data->buttonUp[i] == sender() )
-            incrementValue( d_data->increment[i] );
-
-        if ( d_data->buttonDown[i] == sender() )
-            incrementValue( -d_data->increment[i] );
-    }
-}
-
-//!  Button released
-void QwtCounter::btnReleased()
-{
-    Q_EMIT buttonReleased( value() );
-}
-
-//! A size hint
-QSize QwtCounter::sizeHint() const
-{
-    QString tmp;
-
-    int w = tmp.setNum( minimum() ).length();
-    int w1 = tmp.setNum( maximum() ).length();
-    if ( w1 > w )
-        w = w1;
-    w1 = tmp.setNum( minimum() + singleStep() ).length();
-    if ( w1 > w )
-        w = w1;
-    w1 = tmp.setNum( maximum() - singleStep() ).length();
-    if ( w1 > w )
-        w = w1;
-
-    tmp.fill( '9', w );
-
-    QFontMetrics fm( d_data->valueEdit->font() );
-    w = fm.width( tmp ) + 2;
-    if ( d_data->valueEdit->hasFrame() )
-        w += 2 * style()->pixelMetric( QStyle::PM_DefaultFrameWidth );
-
-    // Now we replace default sizeHint contribution of d_data->valueEdit by
-    // what we really need.
-
-    w += QWidget::sizeHint().width() - d_data->valueEdit->sizeHint().width();
-
-    const int h = qMin( QWidget::sizeHint().height(),
-        d_data->valueEdit->minimumSizeHint().height() );
-    return QSize( w, h );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_counter.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_counter.h
deleted file mode 100644
index 52a9e92252bd73b5a5b43082d6a31a5b6f6cdda4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_counter.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_COUNTER_H
-#define QWT_COUNTER_H
-
-#include "qwt_global.h"
-#include <qwidget.h>
-
-/*!
-  \brief The Counter Widget
-
-  A Counter consists of a label displaying a number and
-  one ore more (up to three) push buttons on each side
-  of the label which can be used to increment or decrement
-  the counter's value.
-
-  A counter has a range from a minimum value to a maximum value
-  and a step size. When the wrapping property is set
-  the counter is circular.
- 
-  The number of steps by which a button increments or decrements the value 
-  can be specified using setIncSteps(). The number of buttons can be 
-  changed with setNumButtons().
-
-  Example:
-\code
-#include <qwt_counter.h>
-
-QwtCounter *counter = new QwtCounter(parent);
-
-counter->setRange(0.0, 100.0);                  // From 0.0 to 100
-counter->setSingleStep( 1.0 );                  // Step size 1.0
-counter->setNumButtons(2);                      // Two buttons each side
-counter->setIncSteps(QwtCounter::Button1, 1);   // Button 1 increments 1 step
-counter->setIncSteps(QwtCounter::Button2, 20);  // Button 2 increments 20 steps
-
-connect(counter, SIGNAL(valueChanged(double)), myClass, SLOT(newValue(double)));
-\endcode
- */
-
-class QWT_EXPORT QwtCounter : public QWidget
-{
-    Q_OBJECT
-
-    Q_PROPERTY( double value READ value WRITE setValue )
-    Q_PROPERTY( double minimum READ minimum WRITE setMinimum )
-    Q_PROPERTY( double maximum READ maximum WRITE setMaximum )
-    Q_PROPERTY( double singleStep READ singleStep WRITE setSingleStep )
-
-    Q_PROPERTY( int numButtons READ numButtons WRITE setNumButtons )
-    Q_PROPERTY( int stepButton1 READ stepButton1 WRITE setStepButton1 )
-    Q_PROPERTY( int stepButton2 READ stepButton2 WRITE setStepButton2 )
-    Q_PROPERTY( int stepButton3 READ stepButton3 WRITE setStepButton3 )
-
-    Q_PROPERTY( bool readOnly READ isReadOnly WRITE setReadOnly )
-    Q_PROPERTY( bool wrapping READ wrapping WRITE setWrapping )
-
-public:
-    //! Button index
-    enum Button
-    {
-        //! Button intended for minor steps
-        Button1,
-
-        //! Button intended for medium steps
-        Button2,
-
-        //! Button intended for large steps
-        Button3,
-
-        //! Number of buttons
-        ButtonCnt
-    };
-
-    explicit QwtCounter( QWidget *parent = NULL );
-    virtual ~QwtCounter();
-
-    void setValid( bool );
-    bool isValid() const;
-
-    void setWrapping( bool );
-    bool wrapping() const;
-
-    bool isReadOnly() const;
-    void setReadOnly( bool );
-
-    void setNumButtons( int n );
-    int numButtons() const;
-
-    void setIncSteps( QwtCounter::Button btn, int nSteps );
-    int incSteps( QwtCounter::Button btn ) const;
-
-    virtual QSize sizeHint() const;
-
-    double singleStep() const;
-    void setSingleStep( double s );
-
-    void setRange( double min, double max );
-    
-    double minimum() const;
-    void setMinimum( double min );
-
-    double maximum() const;
-    void setMaximum( double max );
-
-    void setStepButton1( int nSteps );
-    int stepButton1() const;
-
-    void setStepButton2( int nSteps );
-    int stepButton2() const;
-
-    void setStepButton3( int nSteps );
-    int stepButton3() const;
-
-    double value() const;
-
-public Q_SLOTS:
-    void setValue( double );
-
-
-Q_SIGNALS:
-    /*!
-        This signal is emitted when a button has been released
-        \param value The new value
-    */
-    void buttonReleased ( double value );
-
-    /*!
-        This signal is emitted when the counter's value has changed
-        \param value The new value
-    */
-    void valueChanged ( double value );
-
-protected:
-    virtual bool event( QEvent * );
-    virtual void wheelEvent( QWheelEvent * );
-    virtual void keyPressEvent( QKeyEvent * );
-
-private Q_SLOTS:
-    void btnReleased();
-    void btnClicked();
-    void textChanged();
-
-private:
-    void incrementValue( int numSteps );
-    void initCounter();
-    void updateButtons();
-    void showNumber( double );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_curve_fitter.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_curve_fitter.cpp
deleted file mode 100644
index c037c85e4d6fab8f6beaceea746309855f2edf75..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_curve_fitter.cpp
+++ /dev/null
@@ -1,453 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_curve_fitter.h"
-#include "qwt_math.h"
-#include "qwt_spline.h"
-#include <qstack.h>
-#include <qvector.h>
-
-#if QT_VERSION < 0x040601
-#define qFabs(x) ::fabs(x)
-#endif
-
-//! Constructor
-QwtCurveFitter::QwtCurveFitter()
-{
-}
-
-//! Destructor
-QwtCurveFitter::~QwtCurveFitter()
-{
-}
-
-class QwtSplineCurveFitter::PrivateData
-{
-public:
-    PrivateData():
-        fitMode( QwtSplineCurveFitter::Auto ),
-        splineSize( 250 )
-    {
-    }
-
-    QwtSpline spline;
-    QwtSplineCurveFitter::FitMode fitMode;
-    int splineSize;
-};
-
-//! Constructor
-QwtSplineCurveFitter::QwtSplineCurveFitter()
-{
-    d_data = new PrivateData;
-}
-
-//! Destructor
-QwtSplineCurveFitter::~QwtSplineCurveFitter()
-{
-    delete d_data;
-}
-
-/*!
-  Select the algorithm used for building the spline
-
-  \param mode Mode representing a spline algorithm
-  \sa fitMode()
-*/
-void QwtSplineCurveFitter::setFitMode( FitMode mode )
-{
-    d_data->fitMode = mode;
-}
-
-/*!
-  \return Mode representing a spline algorithm
-  \sa setFitMode()
-*/
-QwtSplineCurveFitter::FitMode QwtSplineCurveFitter::fitMode() const
-{
-    return d_data->fitMode;
-}
-
-/*!
-  Assign a spline
-
-  \param spline Spline
-  \sa spline()
-*/
-void QwtSplineCurveFitter::setSpline( const QwtSpline &spline )
-{
-    d_data->spline = spline;
-    d_data->spline.reset();
-}
-
-/*!
-  \return Spline
-  \sa setSpline()
-*/
-const QwtSpline &QwtSplineCurveFitter::spline() const
-{
-    return d_data->spline;
-}
-
-/*!
-  \return Spline
-  \sa setSpline()
-*/
-QwtSpline &QwtSplineCurveFitter::spline()
-{
-    return d_data->spline;
-}
-
-/*!
-   Assign a spline size ( has to be at least 10 points )
-
-   \param splineSize Spline size
-   \sa splineSize()
-*/
-void QwtSplineCurveFitter::setSplineSize( int splineSize )
-{
-    d_data->splineSize = qMax( splineSize, 10 );
-}
-
-/*!
-  \return Spline size
-  \sa setSplineSize()
-*/
-int QwtSplineCurveFitter::splineSize() const
-{
-    return d_data->splineSize;
-}
-
-/*!
-  Find a curve which has the best fit to a series of data points
-
-  \param points Series of data points
-  \return Curve points
-*/
-QPolygonF QwtSplineCurveFitter::fitCurve( const QPolygonF &points ) const
-{
-    const int size = points.size();
-    if ( size <= 2 )
-        return points;
-
-    FitMode fitMode = d_data->fitMode;
-    if ( fitMode == Auto )
-    {
-        fitMode = Spline;
-
-        const QPointF *p = points.data();
-        for ( int i = 1; i < size; i++ )
-        {
-            if ( p[i].x() <= p[i-1].x() )
-            {
-                fitMode = ParametricSpline;
-                break;
-            }
-        };
-    }
-
-    if ( fitMode == ParametricSpline )
-        return fitParametric( points );
-    else
-        return fitSpline( points );
-}
-
-QPolygonF QwtSplineCurveFitter::fitSpline( const QPolygonF &points ) const
-{
-    d_data->spline.setPoints( points );
-    if ( !d_data->spline.isValid() )
-        return points;
-
-    QPolygonF fittedPoints( d_data->splineSize );
-
-    const double x1 = points[0].x();
-    const double x2 = points[int( points.size() - 1 )].x();
-    const double dx = x2 - x1;
-    const double delta = dx / ( d_data->splineSize - 1 );
-
-    for ( int i = 0; i < d_data->splineSize; i++ )
-    {
-        QPointF &p = fittedPoints[i];
-
-        const double v = x1 + i * delta;
-        const double sv = d_data->spline.value( v );
-
-        p.setX( v );
-        p.setY( sv );
-    }
-    d_data->spline.reset();
-
-    return fittedPoints;
-}
-
-QPolygonF QwtSplineCurveFitter::fitParametric( const QPolygonF &points ) const
-{
-    int i;
-    const int size = points.size();
-
-    QPolygonF fittedPoints( d_data->splineSize );
-    QPolygonF splinePointsX( size );
-    QPolygonF splinePointsY( size );
-
-    const QPointF *p = points.data();
-    QPointF *spX = splinePointsX.data();
-    QPointF *spY = splinePointsY.data();
-
-    double param = 0.0;
-    for ( i = 0; i < size; i++ )
-    {
-        const double x = p[i].x();
-        const double y = p[i].y();
-        if ( i > 0 )
-        {
-            const double delta = qSqrt( qwtSqr( x - spX[i-1].y() )
-                      + qwtSqr( y - spY[i-1].y() ) );
-            param += qMax( delta, 1.0 );
-        }
-        spX[i].setX( param );
-        spX[i].setY( x );
-        spY[i].setX( param );
-        spY[i].setY( y );
-    }
-
-    d_data->spline.setPoints( splinePointsX );
-    if ( !d_data->spline.isValid() )
-        return points;
-
-    const double deltaX =
-        splinePointsX[size - 1].x() / ( d_data->splineSize - 1 );
-    for ( i = 0; i < d_data->splineSize; i++ )
-    {
-        const double dtmp = i * deltaX;
-        fittedPoints[i].setX( d_data->spline.value( dtmp ) );
-    }
-
-    d_data->spline.setPoints( splinePointsY );
-    if ( !d_data->spline.isValid() )
-        return points;
-
-    const double deltaY =
-        splinePointsY[size - 1].x() / ( d_data->splineSize - 1 );
-    for ( i = 0; i < d_data->splineSize; i++ )
-    {
-        const double dtmp = i * deltaY;
-        fittedPoints[i].setY( d_data->spline.value( dtmp ) );
-    }
-
-    return fittedPoints;
-}
-
-class QwtWeedingCurveFitter::PrivateData
-{
-public:
-    PrivateData():
-        tolerance( 1.0 ),
-        chunkSize( 0 )
-    {
-    }
-
-    double tolerance;
-    uint chunkSize;
-};
-
-class QwtWeedingCurveFitter::Line
-{
-public:
-    Line( int i1 = 0, int i2 = 0 ):
-        from( i1 ),
-        to( i2 )
-    {
-    }
-
-    int from;
-    int to;
-};
-
-/*!
-   Constructor
-
-   \param tolerance Tolerance
-   \sa setTolerance(), tolerance()
-*/
-QwtWeedingCurveFitter::QwtWeedingCurveFitter( double tolerance )
-{
-    d_data = new PrivateData;
-    setTolerance( tolerance );
-}
-
-//! Destructor
-QwtWeedingCurveFitter::~QwtWeedingCurveFitter()
-{
-    delete d_data;
-}
-
-/*!
- Assign the tolerance
-
- The tolerance is the maximum distance, that is acceptable
- between the original curve and the smoothed curve.
-
- Increasing the tolerance will reduce the number of the
- resulting points.
-
- \param tolerance Tolerance
-
- \sa tolerance()
-*/
-void QwtWeedingCurveFitter::setTolerance( double tolerance )
-{
-    d_data->tolerance = qMax( tolerance, 0.0 );
-}
-
-/*!
-  \return Tolerance
-  \sa setTolerance()
-*/
-double QwtWeedingCurveFitter::tolerance() const
-{
-    return d_data->tolerance;
-}
-
-/*!
- Limit the number of points passed to a run of the algorithm
-
- The runtime of the Douglas Peucker algorithm increases non linear
- with the number of points. For a chunk size > 0 the polygon
- is split into pieces passed to the algorithm one by one.
-
- \param numPoints Maximum for the number of points passed to the algorithm
-
- \sa chunkSize()
-*/
-void QwtWeedingCurveFitter::setChunkSize( uint numPoints )
-{
-    if ( numPoints > 0 )
-        numPoints = qMax( numPoints, 3U );
-
-    d_data->chunkSize = numPoints;
-}
-
-/*!
-  
-  \return Maximum for the number of points passed to a run 
-          of the algorithm - or 0, when unlimited
-  \sa setChunkSize()
-*/
-uint QwtWeedingCurveFitter::chunkSize() const
-{
-    return d_data->chunkSize;
-}
-
-/*!
-  \param points Series of data points
-  \return Curve points
-*/
-QPolygonF QwtWeedingCurveFitter::fitCurve( const QPolygonF &points ) const
-{
-    QPolygonF fittedPoints;
-
-    if ( d_data->chunkSize == 0 )
-    {
-        fittedPoints = simplify( points );
-    }
-    else
-    {
-        for ( int i = 0; i < points.size(); i += d_data->chunkSize )
-        {
-            const QPolygonF p = points.mid( i, d_data->chunkSize );
-            fittedPoints += simplify( p );
-        }
-    }
-
-    return fittedPoints;
-}
-
-QPolygonF QwtWeedingCurveFitter::simplify( const QPolygonF &points ) const
-{
-    const double toleranceSqr = d_data->tolerance * d_data->tolerance;
-
-    QStack<Line> stack;
-    stack.reserve( 500 );
-
-    const QPointF *p = points.data();
-    const int nPoints = points.size();
-
-    QVector<bool> usePoint( nPoints, false );
-
-    stack.push( Line( 0, nPoints - 1 ) );
-
-    while ( !stack.isEmpty() )
-    {
-        const Line r = stack.pop();
-
-        // initialize line segment
-        const double vecX = p[r.to].x() - p[r.from].x();
-        const double vecY = p[r.to].y() - p[r.from].y();
-
-        const double vecLength = qSqrt( vecX * vecX + vecY * vecY );
-
-        const double unitVecX = ( vecLength != 0.0 ) ? vecX / vecLength : 0.0;
-        const double unitVecY = ( vecLength != 0.0 ) ? vecY / vecLength : 0.0;
-
-        double maxDistSqr = 0.0;
-        int nVertexIndexMaxDistance = r.from + 1;
-        for ( int i = r.from + 1; i < r.to; i++ )
-        {
-            //compare to anchor
-            const double fromVecX = p[i].x() - p[r.from].x();
-            const double fromVecY = p[i].y() - p[r.from].y();
-
-            double distToSegmentSqr;
-            if ( fromVecX * unitVecX + fromVecY * unitVecY < 0.0 )
-            {
-                distToSegmentSqr = fromVecX * fromVecX + fromVecY * fromVecY;
-            }
-            else
-            {
-                const double toVecX = p[i].x() - p[r.to].x();
-                const double toVecY = p[i].y() - p[r.to].y();
-                const double toVecLength = toVecX * toVecX + toVecY * toVecY;
-
-                const double s = toVecX * ( -unitVecX ) + toVecY * ( -unitVecY );
-                if ( s < 0.0 )
-                {
-                    distToSegmentSqr = toVecLength;
-                }
-                else
-                {
-                    distToSegmentSqr = qFabs( toVecLength - s * s );
-                }
-            }
-
-            if ( maxDistSqr < distToSegmentSqr )
-            {
-                maxDistSqr = distToSegmentSqr;
-                nVertexIndexMaxDistance = i;
-            }
-        }
-        if ( maxDistSqr <= toleranceSqr )
-        {
-            usePoint[r.from] = true;
-            usePoint[r.to] = true;
-        }
-        else
-        {
-            stack.push( Line( r.from, nVertexIndexMaxDistance ) );
-            stack.push( Line( nVertexIndexMaxDistance, r.to ) );
-        }
-    }
-
-    QPolygonF stripped;
-    for ( int i = 0; i < nPoints; i++ )
-    {
-        if ( usePoint[i] )
-            stripped += p[i];
-    }
-
-    return stripped;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_curve_fitter.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_curve_fitter.h
deleted file mode 100644
index 480ea3e588e6b1d4cb5cc479058193da907ab9c0..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_curve_fitter.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_CURVE_FITTER_H
-#define QWT_CURVE_FITTER_H
-
-#include "qwt_global.h"
-#include <qpolygon.h>
-#include <qrect.h>
-
-class QwtSpline;
-
-/*!
-  \brief Abstract base class for a curve fitter
-*/
-class QWT_EXPORT QwtCurveFitter
-{
-public:
-    virtual ~QwtCurveFitter();
-
-    /*!
-        Find a curve which has the best fit to a series of data points
-
-        \param polygon Series of data points
-        \return Curve points
-     */
-    virtual QPolygonF fitCurve( const QPolygonF &polygon ) const = 0;
-
-protected:
-    QwtCurveFitter();
-
-private:
-    QwtCurveFitter( const QwtCurveFitter & );
-    QwtCurveFitter &operator=( const QwtCurveFitter & );
-};
-
-/*!
-  \brief A curve fitter using cubic splines
-*/
-class QWT_EXPORT QwtSplineCurveFitter: public QwtCurveFitter
-{
-public:
-    /*!
-      Spline type
-      The default setting is Auto
-      \sa setFitMode(), FitMode()
-     */
-    enum FitMode
-    {
-        /*!
-          Use the default spline algorithm for polygons with
-          increasing x values ( p[i-1] < p[i] ), otherwise use
-          a parametric spline algorithm.
-         */
-        Auto,
-
-        //! Use a default spline algorithm
-        Spline,
-
-        //! Use a parametric spline algorithm
-        ParametricSpline
-    };
-
-    QwtSplineCurveFitter();
-    virtual ~QwtSplineCurveFitter();
-
-    void setFitMode( FitMode );
-    FitMode fitMode() const;
-
-    void setSpline( const QwtSpline& );
-    const QwtSpline &spline() const;
-    QwtSpline &spline();
-
-    void setSplineSize( int size );
-    int splineSize() const;
-
-    virtual QPolygonF fitCurve( const QPolygonF & ) const;
-
-private:
-    QPolygonF fitSpline( const QPolygonF & ) const;
-    QPolygonF fitParametric( const QPolygonF & ) const;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-/*!
-  \brief A curve fitter implementing Douglas and Peucker algorithm
-
-  The purpose of the Douglas and Peucker algorithm is that given a 'curve'
-  composed of line segments to find a curve not too dissimilar but that
-  has fewer points. The algorithm defines 'too dissimilar' based on the
-  maximum distance (tolerance) between the original curve and the
-  smoothed curve.
-
-  The runtime of the algorithm increases non linear ( worst case O( n*n ) )
-  and might be very slow for huge polygons. To avoid performance issues
-  it might be useful to split the polygon ( setChunkSize() ) and to run the algorithm
-  for these smaller parts. The disadvantage of having no interpolation
-  at the borders is for most use cases irrelevant.
-
-  The smoothed curve consists of a subset of the points that defined the
-  original curve.
-
-  In opposite to QwtSplineCurveFitter the Douglas and Peucker algorithm reduces
-  the number of points. By adjusting the tolerance parameter according to the
-  axis scales QwtSplineCurveFitter can be used to implement different
-  level of details to speed up painting of curves of many points.
-*/
-class QWT_EXPORT QwtWeedingCurveFitter: public QwtCurveFitter
-{
-public:
-    QwtWeedingCurveFitter( double tolerance = 1.0 );
-    virtual ~QwtWeedingCurveFitter();
-
-    void setTolerance( double );
-    double tolerance() const;
-
-    void setChunkSize( uint );
-    uint chunkSize() const;
-
-    virtual QPolygonF fitCurve( const QPolygonF & ) const;
-
-private:
-    virtual QPolygonF simplify( const QPolygonF & ) const;
-
-    class Line;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date.cpp
deleted file mode 100644
index b78b4238c55a13a2ee1995c3f4e0f59df777c702..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date.cpp
+++ /dev/null
@@ -1,760 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_date.h"
-#include <qdebug.h>
-#include <qlocale.h>
-#include <math.h>
-#include <limits>
-#include <limits.h>
-
-#if QT_VERSION >= 0x050000
-
-typedef qint64 QwtJulianDay;
-static const QwtJulianDay minJulianDayD = Q_INT64_C( -784350574879 );
-static const QwtJulianDay maxJulianDayD = Q_INT64_C( 784354017364 );
-
-#else
-
-// QDate stores the Julian day as unsigned int, but
-// but it is QDate::fromJulianDay( int ). That's why
-// we have the range [ 1, INT_MAX ]
-typedef int QwtJulianDay;
-static const QwtJulianDay minJulianDayD = 1;
-static const QwtJulianDay maxJulianDayD = std::numeric_limits<int>::max();
-
-#endif
-
-static QString qwtExpandedFormat( const QString & format, 
-    const QDateTime &dateTime, QwtDate::Week0Type week0Type )
-{
-    const int week = QwtDate::weekNumber( dateTime.date(), week0Type );
-
-    QString weekNo;
-    weekNo.setNum( week );
-
-    QString weekNoWW;
-    if ( weekNo.length() == 1 )
-        weekNoWW += "0";
-
-    weekNoWW += weekNo;
-
-    QString fmt = format;
-    fmt.replace( "ww", weekNoWW );
-    fmt.replace( "w", weekNo );
-
-    if ( week == 1 && dateTime.date().month() != 1 )
-    {
-        // in case of week 1, we might need to increment the year
-
-        static QString s_yyyy = "yyyy";
-        static QString s_yy = "yy";
-
-        // week 1 might start in the previous year
-
-        bool doReplaceYear = fmt.contains( s_yy );
-
-        if ( doReplaceYear )
-        {
-            if ( fmt.contains( 'M' ) )
-            {
-                // in case of also having 'M' we have a conflict about
-                // which year to show
-
-                doReplaceYear = false;
-            }
-            else
-            {
-                // in case of also having 'd' or 'dd' we have a conflict about
-                // which year to show
-
-                int numD = 0;
-
-                for ( int i = 0; i < fmt.size(); i++ )
-                {
-                    if ( fmt[i] == 'd' )
-                    {
-                        numD++;
-                    }
-                    else
-                    {
-                        if ( numD > 0 && numD <= 2 )
-                            break;
-
-                        numD = 0;
-                    }
-                }
-
-                if ( numD > 0 && numD <= 2 )
-                    doReplaceYear = false;
-            }
-        }
-
-        if ( doReplaceYear )
-        {
-            const QDate dt( dateTime.date().year() + 1, 1, 1 );
-
-            if ( fmt.contains( s_yyyy ) )
-            {
-                fmt.replace( s_yyyy, dt.toString( s_yyyy ) );
-            }
-            else
-            {
-                fmt.replace( s_yy, dt.toString( s_yyyy ) );
-            }
-        }
-    }
-
-    return fmt;
-}
-
-static inline Qt::DayOfWeek qwtFirstDayOfWeek()
-{
-#if QT_VERSION >= 0x040800
-    return QLocale().firstDayOfWeek();
-#else
-
-    switch( QLocale().country() )
-    {
-        case QLocale::Maldives:
-            return Qt::Friday;
-
-        case QLocale::Afghanistan:
-        case QLocale::Algeria:
-        case QLocale::Bahrain:
-        case QLocale::Djibouti:
-        case QLocale::Egypt:
-        case QLocale::Eritrea:
-        case QLocale::Ethiopia:
-        case QLocale::Iran:
-        case QLocale::Iraq:
-        case QLocale::Jordan:
-        case QLocale::Kenya:
-        case QLocale::Kuwait:
-        case QLocale::LibyanArabJamahiriya:
-        case QLocale::Morocco:
-        case QLocale::Oman:
-        case QLocale::Qatar:
-        case QLocale::SaudiArabia:
-        case QLocale::Somalia:
-        case QLocale::Sudan:
-        case QLocale::Tunisia:
-        case QLocale::Yemen:
-            return Qt::Saturday;
-
-        case QLocale::AmericanSamoa:
-        case QLocale::Argentina:
-        case QLocale::Azerbaijan:
-        case QLocale::Botswana:
-        case QLocale::Canada:
-        case QLocale::China:
-        case QLocale::FaroeIslands:
-        case QLocale::Georgia:
-        case QLocale::Greenland:
-        case QLocale::Guam:
-        case QLocale::HongKong:
-        case QLocale::Iceland:
-        case QLocale::India:
-        case QLocale::Ireland:
-        case QLocale::Israel:
-        case QLocale::Jamaica:
-        case QLocale::Japan:
-        case QLocale::Kyrgyzstan:
-        case QLocale::Lao:
-        case QLocale::Malta:
-        case QLocale::MarshallIslands:
-        case QLocale::Macau:
-        case QLocale::Mongolia:
-        case QLocale::NewZealand:
-        case QLocale::NorthernMarianaIslands:
-        case QLocale::Pakistan:
-        case QLocale::Philippines:
-        case QLocale::RepublicOfKorea:
-        case QLocale::Singapore:
-        case QLocale::SyrianArabRepublic:
-        case QLocale::Taiwan:
-        case QLocale::Thailand:
-        case QLocale::TrinidadAndTobago:
-        case QLocale::UnitedStates:
-        case QLocale::UnitedStatesMinorOutlyingIslands:
-        case QLocale::USVirginIslands:
-        case QLocale::Uzbekistan:
-        case QLocale::Zimbabwe:
-            return Qt::Sunday;
-
-        default:
-            return Qt::Monday;
-    }
-#endif
-}
-
-static inline void qwtFloorTime( 
-    QwtDate::IntervalType intervalType, QDateTime &dt )
-{
-    // when dt is inside the special hour where DST is ending
-    // an hour is no unique. Therefore we have to
-    // use UTC time.
-
-    const Qt::TimeSpec timeSpec = dt.timeSpec();
-
-    if ( timeSpec == Qt::LocalTime )
-        dt = dt.toTimeSpec( Qt::UTC );
-
-    const QTime t = dt.time();
-    switch( intervalType )
-    {
-        case QwtDate::Second:
-        {
-            dt.setTime( QTime( t.hour(), t.minute(), t.second() ) );
-            break;
-        }
-        case QwtDate::Minute:
-        {
-            dt.setTime( QTime( t.hour(), t.minute(), 0 ) );
-            break;
-        }
-        case QwtDate::Hour:
-        {
-            dt.setTime( QTime( t.hour(), 0, 0 ) );
-            break;
-        }   
-        default:
-            break;
-    }
-
-    if ( timeSpec == Qt::LocalTime )
-        dt = dt.toTimeSpec( Qt::LocalTime );
-}
-
-static inline QDateTime qwtToTimeSpec( 
-    const QDateTime &dt, Qt::TimeSpec spec )
-{
-    if ( dt.timeSpec() == spec )
-        return dt;
-
-    const qint64 jd = dt.date().toJulianDay();
-    if ( jd < 0 || jd >= INT_MAX )
-    {
-        // the conversion between local time and UTC
-        // is internally limited. To avoid
-        // overflows we simply ignore the difference
-        // for those dates
-
-        QDateTime dt2 = dt;
-        dt2.setTimeSpec( spec );
-        return dt2;
-    }
-
-    return dt.toTimeSpec( spec );
-}
-
-static inline double qwtToJulianDay( int year, int month, int day )
-{
-    // code from QDate but using doubles to avoid overflows
-    // for large values
-
-    const int m1 = ( month - 14 ) / 12;
-    const int m2 = ( 367 * ( month - 2 - 12 * m1 ) ) / 12;
-    const double y1 = ::floor( ( 4900.0 + year + m1 ) / 100 );
-
-    return ::floor( ( 1461.0 * ( year + 4800 + m1 ) ) / 4 ) + m2
-            - ::floor( ( 3 * y1 ) / 4 ) + day - 32075;
-}
-
-static inline qint64 qwtFloorDiv64( qint64 a, int b )
-{
-    if ( a < 0 )
-        a -= b - 1;
-
-    return a / b;
-}
-
-static inline qint64 qwtFloorDiv( int a, int b )
-{
-    if ( a < 0 )
-        a -= b - 1;
-        
-    return a / b;
-}   
-
-static inline QDate qwtToDate( int year, int month = 1, int day = 1 )
-{
-#if QT_VERSION >= 0x050000
-    return QDate( year, month, day );
-#else
-    if ( year > 100000 )
-    {
-        // code from QDate but using doubles to avoid overflows
-        // for large values
-
-        const int m1 = ( month - 14 ) / 12;
-        const int m2 = ( 367 * ( month - 2 - 12 * m1 ) ) / 12;
-        const double y1 = ::floor( ( 4900.0 + year + m1 ) / 100 );
-
-        const double jd = ::floor( ( 1461.0 * ( year + 4800 + m1 ) ) / 4 ) + m2
-            - ::floor( ( 3 * y1 ) / 4 ) + day - 32075;
-
-        if ( jd > maxJulianDayD )
-        {
-            qWarning() << "qwtToDate: overflow";
-            return QDate();
-        }
-
-        return QDate::fromJulianDay( static_cast<QwtJulianDay>( jd ) );
-    }
-    else
-    {
-        return QDate( year, month, day );
-    }
-#endif
-}
-
-/*!
-  Translate from double to QDateTime
-
-  \param value Number of milliseconds since the epoch, 
-               1970-01-01T00:00:00 UTC
-  \param timeSpec Time specification
-  \return Datetime value
-
-  \sa toDouble(), QDateTime::setMSecsSinceEpoch()
-  \note The return datetime for Qt::OffsetFromUTC will be Qt::UTC
- */
-QDateTime QwtDate::toDateTime( double value, Qt::TimeSpec timeSpec )
-{
-    const int msecsPerDay = 86400000;
-
-    const double days = static_cast<qint64>( ::floor( value / msecsPerDay ) );
-
-    const double jd = QwtDate::JulianDayForEpoch + days;
-    if ( ( jd > maxJulianDayD ) || ( jd < minJulianDayD ) )
-    {
-        qWarning() << "QwtDate::toDateTime: overflow";
-        return QDateTime();
-    }
-
-    const QDate d = QDate::fromJulianDay( static_cast<QwtJulianDay>( jd ) );
-
-    const int msecs = static_cast<int>( value - days * msecsPerDay );
-
-    static const QTime timeNull( 0, 0, 0, 0 );
-
-    QDateTime dt( d, timeNull.addMSecs( msecs ), Qt::UTC );
-
-    if ( timeSpec == Qt::LocalTime )
-        dt = qwtToTimeSpec( dt, timeSpec );
-
-    return dt;
-}
-
-/*!
-  Translate from QDateTime to double
-
-  \param dateTime Datetime value
-  \return Number of milliseconds since 1970-01-01T00:00:00 UTC has passed.
-
-  \sa toDateTime(), QDateTime::toMSecsSinceEpoch()
-  \warning For values very far below or above 1970-01-01 UTC rounding errors
-           will happen due to the limited significance of a double.
- */
-double QwtDate::toDouble( const QDateTime &dateTime )
-{
-    const int msecsPerDay = 86400000;
-
-    const QDateTime dt = qwtToTimeSpec( dateTime, Qt::UTC );
-
-    const double days = dt.date().toJulianDay() - QwtDate::JulianDayForEpoch;
-
-    const QTime time = dt.time();
-    const double secs = 3600.0 * time.hour() + 
-        60.0 * time.minute() + time.second();
-
-    return days * msecsPerDay + time.msec() + 1000.0 * secs;
-}
-
-/*!
-  Ceil a datetime according the interval type
-
-  \param dateTime Datetime value
-  \param intervalType Interval type, how to ceil. 
-                      F.e. when intervalType = QwtDate::Months, the result
-                      will be ceiled to the next beginning of a month
-  \return Ceiled datetime
-  \sa floor()
- */
-QDateTime QwtDate::ceil( const QDateTime &dateTime, IntervalType intervalType )
-{
-    if ( dateTime.date() >= QwtDate::maxDate() )
-        return dateTime;
-
-    QDateTime dt = dateTime;
-
-    switch ( intervalType )
-    {
-        case QwtDate::Millisecond:
-        {
-            break;
-        }
-        case QwtDate::Second:
-        {
-            qwtFloorTime( QwtDate::Second, dt );
-            if ( dt < dateTime )
-                dt = dt.addSecs( 1 );
-
-            break;
-        }
-        case QwtDate::Minute:
-        {
-            qwtFloorTime( QwtDate::Minute, dt );
-            if ( dt < dateTime )
-                dt = dt.addSecs( 60 );
-
-            break;
-        }
-        case QwtDate::Hour:
-        {
-            qwtFloorTime( QwtDate::Hour, dt );
-            if ( dt < dateTime )
-                dt = dt.addSecs( 3600 );
-
-            break;
-        }
-        case QwtDate::Day:
-        {
-            dt.setTime( QTime( 0, 0 ) );
-            if ( dt < dateTime )
-                dt = dt.addDays( 1 );
-
-            break;
-        }
-        case QwtDate::Week:
-        {
-            dt.setTime( QTime( 0, 0 ) );
-            if ( dt < dateTime )
-                dt = dt.addDays( 1 );
-
-            int days = qwtFirstDayOfWeek() - dt.date().dayOfWeek();
-            if ( days < 0 )
-                days += 7;
-
-            dt = dt.addDays( days );
-
-            break;
-        }
-        case QwtDate::Month:
-        {
-            dt.setTime( QTime( 0, 0 ) );
-            dt.setDate( qwtToDate( dateTime.date().year(), 
-                dateTime.date().month() ) );
-
-            if ( dt < dateTime )
-                dt = dt.addMonths( 1 );
-
-            break;
-        }
-        case QwtDate::Year:
-        {
-            dt.setTime( QTime( 0, 0 ) );
-
-            const QDate d = dateTime.date();
-
-            int year = d.year();
-            if ( d.month() > 1 || d.day() > 1 || !dateTime.time().isNull() )
-                year++;
-
-            if ( year == 0 )
-                year++; // there is no year 0
-
-            dt.setDate( qwtToDate( year ) );
-            break;
-        }
-    }
-
-    return dt;
-}
-
-/*!
-  Floor a datetime according the interval type
-
-  \param dateTime Datetime value
-  \param intervalType Interval type, how to ceil. 
-                      F.e. when intervalType = QwtDate::Months,
-                      the result will be ceiled to the next 
-                      beginning of a month
-  \return Floored datetime
-  \sa floor()
- */
-QDateTime QwtDate::floor( const QDateTime &dateTime, 
-    IntervalType intervalType )
-{
-    if ( dateTime.date() <= QwtDate::minDate() )
-        return dateTime;
-
-    QDateTime dt = dateTime;
-
-    switch ( intervalType )
-    {
-        case QwtDate::Millisecond:
-        {
-            break;
-        }
-        case QwtDate::Second:
-        case QwtDate::Minute:
-        case QwtDate::Hour:
-        {
-            qwtFloorTime( intervalType, dt );
-            break;
-        }
-        case QwtDate::Day:
-        {
-            dt.setTime( QTime( 0, 0 ) );
-            break;
-        }
-        case QwtDate::Week:
-        {
-            dt.setTime( QTime( 0, 0 ) );
-
-            int days = dt.date().dayOfWeek() - qwtFirstDayOfWeek();
-            if ( days < 0 )
-                days += 7;
-
-            dt = dt.addDays( -days );
-
-            break;
-        }
-        case QwtDate::Month:
-        {
-            dt.setTime( QTime( 0, 0 ) );
-
-            const QDate date = qwtToDate( dt.date().year(), 
-                dt.date().month() );
-            dt.setDate( date );
-
-            break;
-        }
-        case QwtDate::Year:
-        {
-            dt.setTime( QTime( 0, 0 ) );
-
-            const QDate date = qwtToDate( dt.date().year() );
-            dt.setDate( date );
-
-            break;
-        }
-    }
-
-    return dt;
-}
-
-/*!
-  Minimum for the supported date range
-
-  The range of valid dates depends on how QDate stores the 
-  Julian day internally.
-
-  - For Qt4 it is "Tue Jan 2 -4713"
-  - For Qt5 it is "Thu Jan 1 -2147483648"
-
-  \return minimum of the date range
-  \sa maxDate()
- */
-QDate QwtDate::minDate()
-{
-    static QDate date;
-    if ( !date.isValid() )
-        date = QDate::fromJulianDay( minJulianDayD );
-
-    return date;
-}
-
-/*!
-  Maximum for the supported date range
-
-  The range of valid dates depends on how QDate stores the 
-  Julian day internally.
-
-  - For Qt4 it is "Tue Jun 3 5874898"
-  - For Qt5 it is "Tue Dec 31 2147483647"
-
-  \return maximum of the date range
-  \sa minDate()
-  \note The maximum differs between Qt4 and Qt5
- */
-QDate QwtDate::maxDate()
-{
-    static QDate date;
-    if ( !date.isValid() )
-        date = QDate::fromJulianDay( maxJulianDayD );
-
-    return date;
-}
-
-/*!
-  \brief Date of the first day of the first week for a year
-
-  The first day of a week depends on the current locale
-  ( QLocale::firstDayOfWeek() ). 
-
-  \param year Year
-  \param type Option how to identify the first week
-  \return First day of week 0
-
-  \sa QLocale::firstDayOfWeek(), weekNumber()
- */ 
-QDate QwtDate::dateOfWeek0( int year, Week0Type type )
-{
-    const Qt::DayOfWeek firstDayOfWeek = qwtFirstDayOfWeek();
-
-    QDate dt0( year, 1, 1 );
-
-    // floor to the first day of the week
-    int days = dt0.dayOfWeek() - firstDayOfWeek;
-    if ( days < 0 )
-        days += 7;
-
-    dt0 = dt0.addDays( -days );
-
-    if ( type == QwtDate::FirstThursday )
-    {
-        // according to ISO 8601 the first week is defined
-        // by the first thursday. 
-
-        int d = Qt::Thursday - firstDayOfWeek;
-        if ( d < 0 )
-            d += 7;
-
-        if ( dt0.addDays( d ).year() < year )
-            dt0 = dt0.addDays( 7 );
-    }
-
-    return dt0;
-}
-
-/*!
-  Find the week number of a date
-
-  - QwtDate::FirstThursday\n
-    Corresponding to ISO 8601 ( see QDate::weekNumber() ). 
-
-  - QwtDate::FirstDay\n
-    Number of weeks that have begun since dateOfWeek0().
-
-  \param date Date
-  \param type Option how to identify the first week
-
-  \return Week number, starting with 1
- */
-int QwtDate::weekNumber( const QDate &date, Week0Type type )
-{
-    int weekNo;
-
-    if ( type == QwtDate::FirstDay )
-    {
-        QDate day0;
-
-        if ( date.month() == 12 && date.day() >= 24 )
-        {
-            // week 1 usually starts in the previous years.
-            // and we have to check if we are already there
-
-            day0 = dateOfWeek0( date.year() + 1, type );
-            if ( day0.daysTo( date ) < 0 )
-                day0 = dateOfWeek0( date.year(), type );
-        }
-        else
-        {
-            day0 = dateOfWeek0( date.year(), type );
-        }
-
-        weekNo = day0.daysTo( date ) / 7 + 1;
-    }
-    else
-    {
-        weekNo = date.weekNumber();
-    }
-
-    return weekNo;
-}
-
-/*!
-   Offset in seconds from Coordinated Universal Time
-
-   The offset depends on the time specification of dateTime:
-
-   - Qt::UTC
-     0, dateTime has no offset
-   - Qt::OffsetFromUTC
-     returns dateTime.utcOffset()
-   - Qt::LocalTime:
-     number of seconds from the UTC
-
-   For Qt::LocalTime the offset depends on the timezone and
-   daylight savings.
-
-   \param dateTime Datetime value
-   \return Offset in seconds
- */
-int QwtDate::utcOffset( const QDateTime &dateTime )
-{
-    int seconds = 0;
-
-    switch( dateTime.timeSpec() )
-    {
-        case Qt::UTC:
-        {
-            break;
-        }
-        case Qt::OffsetFromUTC:
-        {
-            seconds = dateTime.utcOffset();
-            break;
-        }
-        default:
-        {
-            const QDateTime dt1( dateTime.date(), dateTime.time(), Qt::UTC );
-            seconds = dateTime.secsTo( dt1 );
-        }
-    }
-
-    return seconds;
-}
-
-/*!
-  Translate a datetime into a string
-
-  Beside the format expressions documented in QDateTime::toString()
-  the following expressions are supported:
-
-  - w\n
-    week number: ( 1 - 53 )
-  - ww\n
-    week number with a leading zero ( 01 - 53 )
-
-  As week 1 usually starts in the previous year a special rule 
-  is applied for formats, where the year is expected to match the
-  week number - even if the date belongs to the previous year.
-
-  \param dateTime Datetime value
-  \param format Format string
-  \param week0Type Specification of week 0
-
-  \return Datetime string
-  \sa QDateTime::toString(), weekNumber(), QwtDateScaleDraw
- */
-QString QwtDate::toString( const QDateTime &dateTime,
-    const QString & format, Week0Type week0Type )
-{
-    QString fmt = format;
-    if ( fmt.contains( 'w' ) )
-    {
-        fmt = qwtExpandedFormat( fmt, dateTime, week0Type );
-    }
-
-    return dateTime.toString( fmt );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date.h
deleted file mode 100644
index ad6ac098a4d4c1f4ca97342f4ef29aeca47de3ff..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef _QWT_DATE_H_
-#define _QWT_DATE_H_
-
-#include "qwt_global.h"
-#include <qdatetime.h>
-
-/*!
-  \brief A collection of methods around date/time values
-
-  Qt offers convenient classes for dealing with date/time values,
-  but Qwt uses coordinate systems that are based on doubles.
-  QwtDate offers methods to translate from QDateTime to double and v.v.
-
-  A double is interpreted as the number of milliseconds since
-  1970-01-01T00:00:00 Universal Coordinated Time - also known
-  as "The Epoch". 
-
-  While the range of the Julian day in Qt4 is limited to [0, MAX_INT], 
-  Qt5 stores it as qint64 offering a huge range of valid dates. 
-  As the significance of a double is below this ( assuming a 
-  fraction of 52 bits ) the translation is not 
-  bijective with rounding errors for dates very far from Epoch. 
-  For a resolution of 1 ms those start to happen for dates above the 
-  year 144683. 
-
-  An axis for a date/time interval is expected to be aligned
-  and divided in time/date units like seconds, minutes, ...
-  QwtDate offers several algorithms that are needed to
-  calculate these axes.
-
-  \sa QwtDateScaleEngine, QwtDateScaleDraw, QDate, QTime
-*/
-class QWT_EXPORT QwtDate
-{
-public:
-    /*! 
-       How to identify the first week of year differs between
-       countries. 
-     */
-    enum Week0Type
-    {
-        /*!
-           According to ISO 8601 the first week of a year is defined
-           as "the week with the year's first Thursday in it".
-
-           FirstThursday corresponds to the numbering that is
-           implemented in QDate::weekNumber().
-        */
-        FirstThursday,
-
-        /*!
-            "The week with January 1.1 in it."
-           
-            In the U.S. this definition is more common than
-            FirstThursday.
-        */
-        FirstDay
-    };
-
-    /*! 
-      Classification of an time interval
-
-      Time intervals needs to be classified to decide how to
-      align and divide it.
-     */
-    enum IntervalType
-    {
-        //! The interval is related to milliseconds
-        Millisecond,
-
-        //! The interval is related to seconds
-        Second,
-
-        //! The interval is related to minutes
-        Minute,
-
-        //! The interval is related to hours
-        Hour,
-
-        //! The interval is related to days
-        Day,
-
-        //! The interval is related to weeks
-        Week,
-
-        //! The interval is related to months
-        Month,
-
-        //! The interval is related to years
-        Year
-    };
-
-    enum
-    {
-        //! The Julian day of "The Epoch"
-        JulianDayForEpoch = 2440588
-    };
-
-    static QDate minDate();
-    static QDate maxDate();
-
-    static QDateTime toDateTime( double value, 
-        Qt::TimeSpec = Qt::UTC );
-
-    static double toDouble( const QDateTime & );
-
-    static QDateTime ceil( const QDateTime &, IntervalType );
-    static QDateTime floor( const QDateTime &, IntervalType );
-
-    static QDate dateOfWeek0( int year, Week0Type );
-    static int weekNumber( const QDate &, Week0Type );
-
-    static int utcOffset( const QDateTime & );
-
-    static QString toString( const QDateTime &, 
-        const QString & format, Week0Type );
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_draw.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_draw.cpp
deleted file mode 100644
index 991dd38879eac728142f2c01affaaf7c559ccd07..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_draw.cpp
+++ /dev/null
@@ -1,278 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_date_scale_draw.h"
-
-class QwtDateScaleDraw::PrivateData
-{
-public:
-    PrivateData( Qt::TimeSpec spec ):
-        timeSpec( spec ),
-        utcOffset( 0 ),
-        week0Type( QwtDate::FirstThursday )
-    {
-        dateFormats[ QwtDate::Millisecond ] = "hh:mm:ss:zzz\nddd dd MMM yyyy";
-        dateFormats[ QwtDate::Second ] = "hh:mm:ss\nddd dd MMM yyyy";
-        dateFormats[ QwtDate::Minute ] = "hh:mm\nddd dd MMM yyyy";
-        dateFormats[ QwtDate::Hour ] = "hh:mm\nddd dd MMM yyyy";
-        dateFormats[ QwtDate::Day ] = "ddd dd MMM yyyy";
-        dateFormats[ QwtDate::Week ] = "Www yyyy";
-        dateFormats[ QwtDate::Month ] = "MMM yyyy";
-        dateFormats[ QwtDate::Year ] = "yyyy";
-    }
-
-    Qt::TimeSpec timeSpec;
-    int utcOffset;
-    QwtDate::Week0Type week0Type;
-    QString dateFormats[ QwtDate::Year + 1 ];
-};
-
-/*!
-  \brief Constructor
-
-  The default setting is to display tick labels for the 
-  given time specification. The first week of a year is defined like
-  for QwtDate::FirstThursday.
-
-  \param timeSpec Time specification
-
-  \sa setTimeSpec(), setWeek0Type()
- */
-QwtDateScaleDraw::QwtDateScaleDraw( Qt::TimeSpec timeSpec )
-{
-    d_data = new PrivateData( timeSpec );
-}
-
-//! Destructor
-QwtDateScaleDraw::~QwtDateScaleDraw()
-{
-    delete d_data;
-}
-
-/*!
-  Set the time specification used for the tick labels
-
-  \param timeSpec Time specification
-  \sa timeSpec(), setUtcOffset(), toDateTime()
- */
-void QwtDateScaleDraw::setTimeSpec( Qt::TimeSpec timeSpec )
-{
-    d_data->timeSpec = timeSpec;
-}
-
-/*!
-  \return Time specification used for the tick labels
-  \sa setTimeSpec(), utcOffset(), toDateTime()
- */
-Qt::TimeSpec QwtDateScaleDraw::timeSpec() const
-{
-    return d_data->timeSpec;
-}
-
-/*!
-  Set the offset in seconds from Coordinated Universal Time
-
-  \param seconds Offset in seconds
-
-  \note The offset has no effect beside for the time specification
-        Qt::OffsetFromUTC.
-
-  \sa QDate::utcOffset(), setTimeSpec(), toDateTime()
- */
-void QwtDateScaleDraw::setUtcOffset( int seconds )
-{
-    d_data->utcOffset = seconds;
-}
-
-/*!
-  \return Offset in seconds from Coordinated Universal Time
-  \note The offset has no effect beside for the time specification
-        Qt::OffsetFromUTC.
-
-  \sa QDate::setUtcOffset(), setTimeSpec(), toDateTime()
- */
-int QwtDateScaleDraw::utcOffset() const
-{
-    return d_data->utcOffset;
-}
-
-/*!
-  Sets how to identify the first week of a year.
-
-  \param week0Type Mode how to identify the first week of a year
-
-  \sa week0Type().
-  \note week0Type has no effect beside for intervals classified as
-        QwtDate::Week. 
- */
-void QwtDateScaleDraw::setWeek0Type( QwtDate::Week0Type week0Type )
-{
-    d_data->week0Type = week0Type;
-}
-
-/*!
-  \return Setting how to identify the first week of a year. 
-  \sa setWeek0Type()
- */
-QwtDate::Week0Type QwtDateScaleDraw::week0Type() const
-{
-    return d_data->week0Type;
-}
-
-/*!
-  Set the default format string for an datetime interval type
-
-  \param intervalType Interval type
-  \param format Default format string
-
-  \sa dateFormat(), dateFormatOfDate(), QwtDate::toString()
- */
-void QwtDateScaleDraw::setDateFormat( 
-    QwtDate::IntervalType intervalType, const QString &format )
-{
-    if ( intervalType >= QwtDate::Millisecond && 
-        intervalType <= QwtDate::Year )
-    {
-        d_data->dateFormats[ intervalType ] = format;
-    }
-}
-
-/*!
-  \param intervalType Interval type
-  \return Default format string for an datetime interval type
-  \sa setDateFormat(), dateFormatOfDate()
- */
-QString QwtDateScaleDraw::dateFormat( 
-    QwtDate::IntervalType intervalType ) const
-{
-    if ( intervalType >= QwtDate::Millisecond && 
-        intervalType <= QwtDate::Year )
-    {
-        return d_data->dateFormats[ intervalType ];
-    }
-
-    return QString::null;
-}
-
-/*!
-  Format string for the representation of a datetime
-
-  dateFormatOfDate() is intended to be overloaded for
-  situations, where formats are individual for specific
-  datetime values.
-
-  The default setting ignores dateTime and return
-  the default format for the interval type.
-
-  \param dateTime Datetime value
-  \param intervalType Interval type
-  \return Format string
-
-  \sa setDateFormat(), QwtDate::toString()
- */
-QString QwtDateScaleDraw::dateFormatOfDate( const QDateTime &dateTime,
-    QwtDate::IntervalType intervalType ) const
-{
-    Q_UNUSED( dateTime )
-
-    if ( intervalType >= QwtDate::Millisecond && 
-        intervalType <= QwtDate::Year )
-    {
-        return d_data->dateFormats[ intervalType ];
-    }
-
-    return d_data->dateFormats[ QwtDate::Second ];
-}
-
-/*!
-  \brief Convert a value into its representing label
-
-  The value is converted to a datetime value using toDateTime()
-  and converted to a plain text using QwtDate::toString().
-
-  \param value Value
-  \return Label string.
-
-  \sa dateFormatOfDate()
-*/
-QwtText QwtDateScaleDraw::label( double value ) const
-{
-    const QDateTime dt = toDateTime( value );
-    const QString fmt = dateFormatOfDate( 
-        dt, intervalType( scaleDiv() ) );
-
-    return QwtDate::toString( dt, fmt, d_data->week0Type );
-}
-
-/*!
-  Find the less detailed datetime unit, where no rounding
-  errors happen.
-
-  \param scaleDiv Scale division
-  \return Interval type
-
-  \sa dateFormatOfDate()
- */
-QwtDate::IntervalType QwtDateScaleDraw::intervalType( 
-    const QwtScaleDiv &scaleDiv ) const
-{
-    int intvType = QwtDate::Year;
-
-    bool alignedToWeeks = true;
-
-    const QList<double> ticks = scaleDiv.ticks( QwtScaleDiv::MajorTick );
-    for ( int i = 0; i < ticks.size(); i++ )
-    {
-        const QDateTime dt = toDateTime( ticks[i] );
-        for ( int j = QwtDate::Second; j <= intvType; j++ )
-        {
-            const QDateTime dt0 = QwtDate::floor( dt, 
-                static_cast<QwtDate::IntervalType>( j ) );
-
-            if ( dt0 != dt )
-            {
-                if ( j == QwtDate::Week )
-                {
-                    alignedToWeeks = false;
-                }
-                else
-                {
-                    intvType = j - 1;
-                    break;
-                }
-            }
-        }
-
-        if ( intvType == QwtDate::Millisecond )
-            break;
-    }
-
-    if ( intvType == QwtDate::Week && !alignedToWeeks )
-        intvType = QwtDate::Day;
-
-    return static_cast<QwtDate::IntervalType>( intvType );
-}
-
-/*!
-  Translate a double value into a QDateTime object.
-
-  \return QDateTime object initialized with timeSpec() and utcOffset().
-  \sa timeSpec(), utcOffset(), QwtDate::toDateTime()
- */
-QDateTime QwtDateScaleDraw::toDateTime( double value ) const
-{
-    QDateTime dt = QwtDate::toDateTime( value, d_data->timeSpec );
-    if ( d_data->timeSpec == Qt::OffsetFromUTC )
-    {
-        dt = dt.addSecs( d_data->utcOffset );
-        dt.setUtcOffset( d_data->utcOffset );
-    }
-
-    return dt;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_draw.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_draw.h
deleted file mode 100644
index f0b09566f8c07b7eb5c05bb4b52f218b676fe1bb..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_draw.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef _QWT_DATE_SCALE_DRAW_H_
-#define _QWT_DATE_SCALE_DRAW_H_ 1
-
-#include "qwt_global.h"
-#include "qwt_scale_draw.h"
-#include "qwt_date.h"
-
-/*!
-  \brief A class for drawing datetime scales
-
-  QwtDateScaleDraw displays values as datetime labels.
-  The format of the labels depends on the alignment of
-  the major tick labels.
-
-  The default format strings are:
-
-  - Millisecond\n
-    "hh:mm:ss:zzz\nddd dd MMM yyyy"
-  - Second\n
-    "hh:mm:ss\nddd dd MMM yyyy"
-  - Minute\n
-    "hh:mm\nddd dd MMM yyyy"
-  - Hour\n
-    "hh:mm\nddd dd MMM yyyy"
-  - Day\n
-    "ddd dd MMM yyyy"
-  - Week\n
-    "Www yyyy"
-  - Month\n
-    "MMM yyyy"
-  - Year\n
-    "yyyy"
-
-  The format strings can be modified using setDateFormat()
-  or individually for each tick label by overloading dateFormatOfDate(),
-
-  Usually QwtDateScaleDraw is used in combination with
-  QwtDateScaleEngine, that calculates scales for datetime
-  intervals.
-
-  \sa QwtDateScaleEngine, QwtPlot::setAxisScaleDraw()
-*/
-class QWT_EXPORT QwtDateScaleDraw: public QwtScaleDraw
-{
-public:
-    QwtDateScaleDraw( Qt::TimeSpec = Qt::LocalTime );
-    virtual ~QwtDateScaleDraw();
-
-    void setDateFormat( QwtDate::IntervalType, const QString & );
-    QString dateFormat( QwtDate::IntervalType ) const;
-
-    void setTimeSpec( Qt::TimeSpec );
-    Qt::TimeSpec timeSpec() const;
-
-    void setUtcOffset( int seconds );
-    int utcOffset() const;
-
-    void setWeek0Type( QwtDate::Week0Type );
-    QwtDate::Week0Type week0Type() const;
-
-    virtual QwtText label( double ) const;
-
-    QDateTime toDateTime( double ) const;
-
-protected:
-    virtual QwtDate::IntervalType 
-        intervalType( const QwtScaleDiv & ) const;
-
-    virtual QString dateFormatOfDate( const QDateTime &,
-        QwtDate::IntervalType ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_engine.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_engine.cpp
deleted file mode 100644
index d338bbd35ac61f08e4f3735f8f5153f9f286ba12..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_engine.cpp
+++ /dev/null
@@ -1,1309 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_date_scale_engine.h"
-#include "qwt_math.h"
-#include "qwt_transform.h"
-#include <qdatetime.h>
-#include <limits.h>
-
-static inline double qwtMsecsForType( QwtDate::IntervalType type )
-{
-    static const double msecs[] =
-    {
-        1.0,
-        1000.0,
-        60.0 * 1000.0,
-        3600.0 * 1000.0,
-        24.0 * 3600.0 * 1000.0,
-        7.0 * 24.0 * 3600.0 * 1000.0,
-        30.0 * 24.0 * 3600.0 * 1000.0,
-        365.0 * 24.0 * 3600.0 * 1000.0,
-    };
-
-    if ( type < 0 || type >= static_cast<int>( sizeof( msecs ) / sizeof( msecs[0] ) ) )
-        return 1.0;
-
-    return msecs[ type ];
-}
-
-static inline int qwtAlignValue(
-    double value, double stepSize, bool up )
-{
-    double d = value / stepSize;
-    d = up ? ::ceil( d ) : ::floor( d );
-
-    return static_cast<int>( d * stepSize );
-}
-
-static double qwtIntervalWidth( const QDateTime &minDate,
-    const QDateTime &maxDate, QwtDate::IntervalType intervalType ) 
-{
-    switch( intervalType )
-    {
-        case QwtDate::Millisecond:
-        {
-            const double secsTo = minDate.secsTo( maxDate );
-            const double msecs = maxDate.time().msec() -
-                minDate.time().msec();
-
-            return secsTo * 1000 + msecs;
-        }
-        case QwtDate::Second:
-        {
-            return minDate.secsTo( maxDate );
-        }
-        case QwtDate::Minute:
-        {
-            const double secsTo = minDate.secsTo( maxDate );
-            return ::floor( secsTo / 60 );
-        }
-        case QwtDate::Hour:
-        {
-            const double secsTo = minDate.secsTo( maxDate );
-            return ::floor( secsTo / 3600 );
-        }
-        case QwtDate::Day:
-        {
-            return minDate.daysTo( maxDate );
-        }
-        case QwtDate::Week:
-        {
-            return ::floor( minDate.daysTo( maxDate ) / 7.0 );
-        }
-        case QwtDate::Month:
-        {
-            const double years = 
-                double( maxDate.date().year() ) - minDate.date().year();
-
-            int months = maxDate.date().month() - minDate.date().month();
-            if ( maxDate.date().day() < minDate.date().day() )
-                months--;
-
-            return years * 12 + months;
-        }
-        case QwtDate::Year:
-        {
-            double years = 
-                double( maxDate.date().year() ) - minDate.date().year();
-
-            if ( maxDate.date().month() < minDate.date().month() )
-                years -= 1.0;
-
-            return years;
-        }
-    }
-
-    return 0.0;
-}
-
-static double qwtRoundedIntervalWidth( 
-    const QDateTime &minDate, const QDateTime &maxDate, 
-    QwtDate::IntervalType intervalType ) 
-{
-    const QDateTime minD = QwtDate::floor( minDate, intervalType );
-    const QDateTime maxD = QwtDate::ceil( maxDate, intervalType );
-
-    return qwtIntervalWidth( minD, maxD, intervalType );
-}
-
-static inline int qwtStepCount( int intervalSize, int maxSteps,
-    const int limits[], size_t numLimits )
-{
-    for ( uint i = 0; i < numLimits; i++ )
-    {
-        const int numSteps = intervalSize / limits[ i ];
-
-        if ( numSteps > 1 && numSteps <= maxSteps &&
-            numSteps * limits[ i ] == intervalSize )
-        {
-            return numSteps;
-        }
-    }
-
-    return 0;
-}
-
-static int qwtStepSize( int intervalSize, int maxSteps, uint base ) 
-{
-    if ( maxSteps <= 0 )
-        return 0;
-
-    if ( maxSteps > 2 )
-    {
-        for ( int numSteps = maxSteps; numSteps > 1; numSteps-- )
-        {
-            const double stepSize = double( intervalSize ) / numSteps;
-
-            const double p = ::floor( ::log( stepSize ) / ::log( double( base ) ) );
-            const double fraction = qPow( base, p );
-
-            for ( uint n = base; n >= 1; n /= 2 )
-            {
-                if ( qFuzzyCompare( stepSize, n * fraction ) )
-                    return qRound( stepSize );
-
-                if ( n == 3 && ( base % 2 ) == 0 )
-                {
-                    if ( qFuzzyCompare( stepSize, 2 * fraction ) )
-                        return qRound( stepSize );
-                }
-            }
-        }
-    }
-
-    return 0;
-}
-
-static int qwtDivideInterval( double intervalSize, int numSteps, 
-    const int limits[], size_t numLimits )
-{
-    const int v = qCeil( intervalSize / double( numSteps ) );
-
-    for ( uint i = 0; i < numLimits - 1; i++ )
-    {
-        if ( v <= limits[i] )
-            return limits[i];
-    }
-
-    return limits[ numLimits - 1 ];
-}
-
-static double qwtDivideScale( double intervalSize, int numSteps,
-    QwtDate::IntervalType intervalType )
-{
-    if ( intervalType != QwtDate::Day )
-    {
-        if ( ( intervalSize > numSteps ) && 
-            ( intervalSize <= 2 * numSteps ) )
-        {
-            return 2.0;
-        }
-    }
-
-    double stepSize;
-
-    switch( intervalType )
-    {
-        case QwtDate::Second:
-        case QwtDate::Minute:
-        {
-            static int limits[] = { 1, 2, 5, 10, 15, 20, 30, 60 };
-    
-            stepSize = qwtDivideInterval( intervalSize, numSteps,
-                limits, sizeof( limits ) / sizeof( int ) );
-
-            break;
-        }
-        case QwtDate::Hour:
-        {
-            static int limits[] = { 1, 2, 3, 4, 6, 12, 24 };
-    
-            stepSize = qwtDivideInterval( intervalSize, numSteps,
-                limits, sizeof( limits ) / sizeof( int ) );
-
-            break;
-        }
-        case QwtDate::Day:
-        {
-            const double v = intervalSize / double( numSteps );
-            if ( v <= 5.0 )
-                stepSize = qCeil( v );
-            else
-                stepSize = qCeil( v / 7 ) * 7;
-
-            break;
-        }
-        case QwtDate::Week:
-        {
-            static int limits[] = { 1, 2, 4, 8, 12, 26, 52 };
-
-            stepSize = qwtDivideInterval( intervalSize, numSteps,
-                limits, sizeof( limits ) / sizeof( int ) );
-
-            break;
-        }
-        case QwtDate::Month:
-        {
-            static int limits[] = { 1, 2, 3, 4, 6, 12 };
-
-            stepSize = qwtDivideInterval( intervalSize, numSteps,
-                limits, sizeof( limits ) / sizeof( int ) );
-
-            break;
-        }
-        case QwtDate::Year:
-        case QwtDate::Millisecond:
-        default:
-        {
-            stepSize = QwtScaleArithmetic::divideInterval(
-                intervalSize, numSteps, 10 );
-        }
-    }
-
-    return stepSize;
-}
-
-static double qwtDivideMajorStep( double stepSize, int maxMinSteps,
-    QwtDate::IntervalType intervalType )
-{
-    double minStepSize = 0.0;
-
-    switch( intervalType )
-    {
-        case QwtDate::Second:
-        {
-            minStepSize = qwtStepSize( stepSize, maxMinSteps, 10 );
-            if ( minStepSize == 0.0 )
-                minStepSize = 0.5 * stepSize;
-
-            break;
-        }
-        case QwtDate::Minute:
-        {
-            static int limits[] = { 1, 2, 5, 10, 15, 20, 30, 60 };
-
-            int numSteps;
-
-            if ( stepSize > maxMinSteps )
-            {
-                numSteps = qwtStepCount( stepSize, maxMinSteps, 
-                    limits, sizeof( limits ) / sizeof( int ) );
-
-            }
-            else
-            {
-                numSteps = qwtStepCount( stepSize * 60, maxMinSteps, 
-                    limits, sizeof( limits ) / sizeof( int ) );
-            }
-
-            if ( numSteps > 0 )
-                minStepSize = double( stepSize ) / numSteps;
-
-            break;
-        }
-        case QwtDate::Hour:
-        {
-            int numSteps = 0;
-
-            if ( stepSize > maxMinSteps )
-            {
-                static int limits[] = { 1, 2, 3, 4, 6, 12, 24, 48, 72 };
-
-                numSteps = qwtStepCount( stepSize, maxMinSteps,
-                    limits, sizeof( limits ) / sizeof( int ) );
-            }
-            else
-            {
-                static int limits[] = { 1, 2, 5, 10, 15, 20, 30, 60 };
-
-                numSteps = qwtStepCount( stepSize * 60, maxMinSteps,
-                    limits, sizeof( limits ) / sizeof( int ) );
-            }
-
-            if ( numSteps > 0 )
-                minStepSize = double( stepSize ) / numSteps;
-
-            break;
-        }
-        case QwtDate::Day:
-        {
-            int numSteps = 0;
-
-            if ( stepSize > maxMinSteps )
-            {
-                static int limits[] = { 1, 2, 3, 7, 14, 28 };
-
-                numSteps = qwtStepCount( stepSize, maxMinSteps,
-                    limits, sizeof( limits ) / sizeof( int ) );
-            }
-            else
-            {
-                static int limits[] = { 1, 2, 3, 4, 6, 12, 24, 48, 72 };
-
-                numSteps = qwtStepCount( stepSize * 24, maxMinSteps,
-                    limits, sizeof( limits ) / sizeof( int ) );
-            }
-
-            if ( numSteps > 0 )
-                minStepSize = double( stepSize ) / numSteps;
-
-            break;
-        }
-        case QwtDate::Week:
-        {
-            const int daysInStep = stepSize * 7;
-
-            if ( maxMinSteps >= daysInStep )
-            {
-                // we want to have one tick per day
-                minStepSize = 1.0 / 7.0;
-            }
-            else
-            {
-                // when the stepSize is more than a week we want to
-                // have a tick for each week
-
-                const int stepSizeInWeeks = stepSize;
-
-                if ( stepSizeInWeeks <= maxMinSteps )
-                {
-                    minStepSize = 1;
-                }
-                else
-                {
-                    minStepSize = QwtScaleArithmetic::divideInterval( 
-                        stepSizeInWeeks, maxMinSteps, 10 );
-                }
-            }
-            break;
-        }
-        case QwtDate::Month:
-        {
-            // fractions of months doesn't make any sense
-
-            if ( stepSize < maxMinSteps )
-                maxMinSteps = static_cast<int>( stepSize );
-
-            static int limits[] = { 1, 2, 3, 4, 6, 12 };
-
-            int numSteps = qwtStepCount( stepSize, maxMinSteps,
-                limits, sizeof( limits ) / sizeof( int ) );
-
-            if ( numSteps > 0 )
-                minStepSize = double( stepSize ) / numSteps;
-
-            break;
-        }
-        case QwtDate::Year:
-        {
-            if ( stepSize >= maxMinSteps )
-            {
-                minStepSize = QwtScaleArithmetic::divideInterval(
-                    stepSize, maxMinSteps, 10 );
-            }
-            else
-            {
-                // something in months
-
-                static int limits[] = { 1, 2, 3, 4, 6, 12 };
-
-                int numSteps = qwtStepCount( 12 * stepSize, maxMinSteps,
-                    limits, sizeof( limits ) / sizeof( int ) );
-
-                if ( numSteps > 0 )
-                    minStepSize = double( stepSize ) / numSteps;
-            }
-                
-            break;
-        }
-        default:
-            break;
-    }
-
-    if ( intervalType != QwtDate::Month
-        && minStepSize == 0.0 )
-    {
-        minStepSize = 0.5 * stepSize;
-    }
-
-    return minStepSize;
-}
-
-static QList<double> qwtDstTicks( const QDateTime &dateTime,
-    int secondsMajor, int secondsMinor )
-{
-    if ( secondsMinor <= 0 )
-        QList<double>();
-
-    QDateTime minDate = dateTime.addSecs( -secondsMajor );
-    minDate = QwtDate::floor( minDate, QwtDate::Hour );
-
-    const double utcOffset = QwtDate::utcOffset( dateTime );
-
-    // find the hours where daylight saving time happens
-
-    double dstMin = QwtDate::toDouble( minDate );
-    while ( minDate < dateTime &&
-        QwtDate::utcOffset( minDate ) != utcOffset )
-    {
-        minDate = minDate.addSecs( 3600 );
-        dstMin += 3600 * 1000.0;
-    }
-
-    QList<double> ticks;
-    for ( int i = 0; i < 3600; i += secondsMinor )
-        ticks += dstMin + i * 1000.0;
-
-    return ticks;
-}
-
-static QwtScaleDiv qwtDivideToSeconds( 
-    const QDateTime &minDate, const QDateTime &maxDate,
-    double stepSize, int maxMinSteps,
-    QwtDate::IntervalType intervalType ) 
-{
-    // calculate the min step size
-    double minStepSize = 0;
-
-    if ( maxMinSteps > 1 ) 
-    {
-        minStepSize = qwtDivideMajorStep( stepSize, 
-            maxMinSteps, intervalType );
-    }
-
-    bool daylightSaving = false;
-    if ( minDate.timeSpec() == Qt::LocalTime )
-    {
-        daylightSaving = intervalType > QwtDate::Hour;
-        if ( intervalType == QwtDate::Hour )
-        {
-            daylightSaving = stepSize > 1;
-        }
-    }
-
-    const double s = qwtMsecsForType( intervalType ) / 1000;
-    const int secondsMajor = static_cast<int>( stepSize * s );
-    const double secondsMinor = minStepSize * s;
-    
-    // UTC excludes daylight savings. So from the difference
-    // of a date and its UTC counterpart we can find out
-    // the daylight saving hours
-
-    const double utcOffset = QwtDate::utcOffset( minDate );
-    double dstOff = 0;
-
-    QList<double> majorTicks;
-    QList<double> mediumTicks;
-    QList<double> minorTicks;
-
-    for ( QDateTime dt = minDate; dt <= maxDate; 
-        dt = dt.addSecs( secondsMajor ) )
-    {
-        if ( !dt.isValid() )
-            break;
-
-        double majorValue = QwtDate::toDouble( dt );
-
-        if ( daylightSaving )
-        {
-            const double offset = utcOffset - QwtDate::utcOffset( dt );
-            majorValue += offset * 1000.0;
-
-            if ( offset > dstOff )
-            {
-                // we add some minor ticks for the DST hour,
-                // otherwise the ticks will be unaligned: 0, 2, 3, 5 ...
-                minorTicks += qwtDstTicks( 
-                    dt, secondsMajor, qRound( secondsMinor ) );
-            }
-
-            dstOff = offset;
-        }
-
-        if ( majorTicks.isEmpty() || majorTicks.last() != majorValue )
-            majorTicks += majorValue;
-
-        if ( secondsMinor > 0.0 )
-        {
-            const int numMinorSteps = qFloor( secondsMajor / secondsMinor );
-
-            for ( int i = 1; i < numMinorSteps; i++ )
-            {
-                const QDateTime mt = dt.addMSecs( 
-                    qRound64( i * secondsMinor * 1000 ) );
-
-                double minorValue = QwtDate::toDouble( mt );
-                if ( daylightSaving )
-                {
-                    const double offset = utcOffset - QwtDate::utcOffset( mt );
-                    minorValue += offset * 1000.0;
-                }
-
-                if ( minorTicks.isEmpty() || minorTicks.last() != minorValue )
-                {
-                    const bool isMedium = ( numMinorSteps % 2 == 0 ) 
-                        && ( i != 1 ) && ( i == numMinorSteps / 2 );
-
-                    if ( isMedium )
-                        mediumTicks += minorValue;
-                    else
-                        minorTicks += minorValue;
-                }
-            }
-        }
-    }
-
-    QwtScaleDiv scaleDiv;
-
-    scaleDiv.setInterval( QwtDate::toDouble( minDate ),
-        QwtDate::toDouble( maxDate ) );
-
-    scaleDiv.setTicks( QwtScaleDiv::MajorTick, majorTicks );
-    scaleDiv.setTicks( QwtScaleDiv::MediumTick, mediumTicks );
-    scaleDiv.setTicks( QwtScaleDiv::MinorTick, minorTicks );
-
-    return scaleDiv;
-}
-
-static QwtScaleDiv qwtDivideToMonths( 
-    QDateTime &minDate, const QDateTime &maxDate,
-    double stepSize, int maxMinSteps ) 
-{
-    // months are intervals with non 
-    // equidistant ( in ms ) steps: we have to build the 
-    // scale division manually
-
-    int minStepDays = 0;
-    int minStepSize = 0.0; 
-
-    if ( maxMinSteps > 1 )
-    {
-        if ( stepSize == 1 )
-        {
-            if ( maxMinSteps >= 30 )
-                minStepDays = 1;
-            else if ( maxMinSteps >= 6 )
-                minStepDays = 5;
-            else if ( maxMinSteps >= 3 )
-                minStepDays = 10;
-            else
-                minStepDays = 15;
-        }
-        else
-        {
-            minStepSize = qwtDivideMajorStep( 
-                stepSize, maxMinSteps, QwtDate::Month );
-        }
-    }
-
-    QList<double> majorTicks;
-    QList<double> mediumTicks;
-    QList<double> minorTicks;
-
-    for ( QDateTime dt = minDate; 
-        dt <= maxDate; dt = dt.addMonths( stepSize ) )
-    {
-        if ( !dt.isValid() )
-            break;
-
-        majorTicks += QwtDate::toDouble( dt );
-
-        if ( minStepDays > 0 )
-        {
-            for ( int days = minStepDays; 
-                days < 30; days += minStepDays )
-            {
-                const double tick = QwtDate::toDouble( dt.addDays( days ) );
-
-                if ( days == 15 && minStepDays != 15 )
-                    mediumTicks += tick;
-                else
-                    minorTicks += tick;
-            }
-        }
-        else if ( minStepSize > 0.0 )
-        {
-            const int numMinorSteps = qRound( stepSize / (double) minStepSize );
-
-            for ( int i = 1; i < numMinorSteps; i++ )
-            {
-                const double minorValue =
-                    QwtDate::toDouble( dt.addMonths( i * minStepSize ) );
-
-                if ( ( numMinorSteps % 2 == 0 ) && ( i == numMinorSteps / 2 ) )
-                    mediumTicks += minorValue;
-                else
-                    minorTicks += minorValue;
-            }
-        }
-    }
-
-    QwtScaleDiv scaleDiv;
-    scaleDiv.setInterval( QwtDate::toDouble( minDate ),
-        QwtDate::toDouble( maxDate ) );
-
-    scaleDiv.setTicks( QwtScaleDiv::MajorTick, majorTicks );
-    scaleDiv.setTicks( QwtScaleDiv::MediumTick, mediumTicks );
-    scaleDiv.setTicks( QwtScaleDiv::MinorTick, minorTicks );
-
-    return scaleDiv;
-}
-
-static QwtScaleDiv qwtDivideToYears( 
-    const QDateTime &minDate, const QDateTime &maxDate,
-    double stepSize, int maxMinSteps ) 
-{
-    QList<double> majorTicks;
-    QList<double> mediumTicks;
-    QList<double> minorTicks;
-
-    double minStepSize = 0.0;
-
-    if ( maxMinSteps > 1 )
-    {
-        minStepSize = qwtDivideMajorStep( 
-            stepSize, maxMinSteps, QwtDate::Year );
-    }
-
-    int numMinorSteps = 0;
-    if ( minStepSize > 0.0 )
-        numMinorSteps = qFloor( stepSize / minStepSize );
-
-    bool dateBC = minDate.date().year() < -1;
-
-    for ( QDateTime dt = minDate; dt <= maxDate;
-        dt = dt.addYears( stepSize ) )
-    {
-        if ( dateBC && dt.date().year() > 1 )
-        {
-            // there is no year 0 in the Julian calendar
-            dt = dt.addYears( -1 );
-            dateBC = false;
-        }
-
-        if ( !dt.isValid() )
-            break;
-
-        majorTicks += QwtDate::toDouble( dt );
-
-        for ( int i = 1; i < numMinorSteps; i++ )
-        {
-            QDateTime tickDate;
-
-            const double years = qRound( i * minStepSize );
-            if ( years >= INT_MAX / 12 )
-            {
-                tickDate = dt.addYears( years );
-            }
-            else
-            {
-                tickDate = dt.addMonths( qRound( years * 12 ) );
-            }
-
-            const bool isMedium = ( numMinorSteps > 2 ) &&
-                ( numMinorSteps % 2 == 0 ) && ( i == numMinorSteps / 2 );
-
-            const double minorValue = QwtDate::toDouble( tickDate );
-            if ( isMedium )
-                mediumTicks += minorValue;
-            else
-                minorTicks += minorValue;
-        }
-
-        if ( QwtDate::maxDate().addYears( -stepSize ) < dt.date() )
-        {
-            break;
-        }
-    }   
-
-    QwtScaleDiv scaleDiv;
-    scaleDiv.setInterval( QwtDate::toDouble( minDate ),
-        QwtDate::toDouble( maxDate ) );
-
-    scaleDiv.setTicks( QwtScaleDiv::MajorTick, majorTicks );
-    scaleDiv.setTicks( QwtScaleDiv::MediumTick, mediumTicks );
-    scaleDiv.setTicks( QwtScaleDiv::MinorTick, minorTicks );
-
-    return scaleDiv;
-}
-
-class QwtDateScaleEngine::PrivateData
-{
-public:
-    PrivateData( Qt::TimeSpec spec ):
-        timeSpec( spec ),
-        utcOffset( 0 ),
-        week0Type( QwtDate::FirstThursday ),
-        maxWeeks( 4 )
-    {
-    }
-
-    Qt::TimeSpec timeSpec;
-    int utcOffset;
-    QwtDate::Week0Type week0Type;
-    int maxWeeks;
-};      
-
-
-/*!
-  \brief Constructor
-
-  The engine is initialized to build scales for the 
-  given time specification. It classifies intervals > 4 weeks
-  as >= Qt::Month. The first week of a year is defined like
-  for QwtDate::FirstThursday.
-
-  \param timeSpec Time specification
-
-  \sa setTimeSpec(), setMaxWeeks(), setWeek0Type()
- */
-QwtDateScaleEngine::QwtDateScaleEngine( Qt::TimeSpec timeSpec ):
-    QwtLinearScaleEngine( 10 )
-{
-    d_data = new PrivateData( timeSpec );
-}
-
-//! Destructor
-QwtDateScaleEngine::~QwtDateScaleEngine()
-{
-    delete d_data;
-}
-
-/*!
-  Set the time specification used by the engine
-
-  \param timeSpec Time specification
-  \sa timeSpec(), setUtcOffset(), toDateTime()
- */
-void QwtDateScaleEngine::setTimeSpec( Qt::TimeSpec timeSpec )
-{
-    d_data->timeSpec = timeSpec;
-}
-
-/*!
-  \return Time specification used by the engine
-  \sa setTimeSpec(), utcOffset(), toDateTime()
- */
-Qt::TimeSpec QwtDateScaleEngine::timeSpec() const
-{
-    return d_data->timeSpec;
-}
-
-/*!
-  Set the offset in seconds from Coordinated Universal Time
-
-  \param seconds Offset in seconds
-
-  \note The offset has no effect beside for the time specification
-        Qt::OffsetFromUTC.
-
-  \sa QDate::utcOffset(), setTimeSpec(), toDateTime()
- */
-void QwtDateScaleEngine::setUtcOffset( int seconds )
-{
-    d_data->utcOffset = seconds;
-}
-
-/*!
-  \return Offset in seconds from Coordinated Universal Time
-  \note The offset has no effect beside for the time specification
-        Qt::OffsetFromUTC.
-
-  \sa QDate::setUtcOffset(), setTimeSpec(), toDateTime()
- */
-int QwtDateScaleEngine::utcOffset() const
-{
-    return d_data->utcOffset;
-}
-
-/*!
-  Sets how to identify the first week of a year.
-
-  \param week0Type Mode how to identify the first week of a year
-
-  \sa week0Type(), setMaxWeeks()
-  \note week0Type has no effect beside for intervals classified as
-        QwtDate::Week. 
- */
-void QwtDateScaleEngine::setWeek0Type( QwtDate::Week0Type week0Type )
-{
-    d_data->week0Type = week0Type;
-}
-
-/*!
-  \return Setting how to identify the first week of a year. 
-  \sa setWeek0Type(), maxWeeks()
- */
-QwtDate::Week0Type QwtDateScaleEngine::week0Type() const
-{
-    return d_data->week0Type;
-}
-
-/*!
-  Set a upper limit for the number of weeks, when an interval
-  can be classified as Qt::Week.
-
-  The default setting is 4 weeks.
-
-  \param weeks Upper limit for the number of weeks
-
-  \note In business charts a year is often devided
-        into weeks [1-52]
-  \sa maxWeeks(), setWeek0Type() 
- */
-void QwtDateScaleEngine::setMaxWeeks( int weeks )
-{
-    d_data->maxWeeks = qMax( weeks, 0 );
-}
-
-/*!
-  \return Upper limit for the number of weeks, when an interval
-          can be classified as Qt::Week.
-  \sa setMaxWeeks(), week0Type()
- */
-int QwtDateScaleEngine::maxWeeks() const
-{
-    return d_data->maxWeeks;
-}
-
-/*!
-  Classification of a date/time interval division
-
-  \param minDate Minimum ( = earlier ) of the interval
-  \param maxDate Maximum ( = later ) of the interval
-  \param maxSteps Maximum for the number of steps
-
-  \return Interval classification
- */
-QwtDate::IntervalType QwtDateScaleEngine::intervalType( 
-    const QDateTime &minDate, const QDateTime &maxDate, 
-    int maxSteps ) const
-{
-    const double jdMin = minDate.date().toJulianDay();
-    const double jdMax = maxDate.date().toJulianDay();
-
-    if ( ( jdMax - jdMin ) / 365 > maxSteps )
-        return QwtDate::Year;
-
-    const int months = qwtRoundedIntervalWidth( minDate, maxDate, QwtDate::Month );
-    if ( months > maxSteps * 6 )
-        return QwtDate::Year;
-
-    const int days = qwtRoundedIntervalWidth( minDate, maxDate, QwtDate::Day );
-    const int weeks = qwtRoundedIntervalWidth( minDate, maxDate, QwtDate::Week );
-
-    if ( weeks > d_data->maxWeeks )
-    {
-        if ( days > 4 * maxSteps * 7 )
-            return QwtDate::Month;
-    }
-
-    if ( days > maxSteps * 7 )
-        return QwtDate::Week;
-
-    const int hours = qwtRoundedIntervalWidth( minDate, maxDate, QwtDate::Hour );
-    if ( hours > maxSteps * 24 )
-        return QwtDate::Day;
-
-    const int seconds = qwtRoundedIntervalWidth( minDate, maxDate, QwtDate::Second );
-
-    if ( seconds >= maxSteps * 3600 )
-        return QwtDate::Hour;
-
-    if ( seconds >= maxSteps * 60 )
-        return QwtDate::Minute;
-
-    if ( seconds >= maxSteps )
-        return QwtDate::Second;
-
-    return QwtDate::Millisecond;
-}
-
-/*!
-  Align and divide an interval
-
-  The algorithm aligns and divides the interval into steps. 
-
-  Datetime interval divisions are usually not equidistant and the
-  calculated stepSize can only be used as an approximation
-  for the steps calculated by divideScale(). 
-
-  \param maxNumSteps Max. number of steps
-  \param x1 First limit of the interval (In/Out)
-  \param x2 Second limit of the interval (In/Out)
-  \param stepSize Step size (Out)
-
-  \sa QwtScaleEngine::setAttribute()
-*/
-void QwtDateScaleEngine::autoScale( int maxNumSteps,
-    double &x1, double &x2, double &stepSize ) const
-{
-    stepSize = 0.0;
-
-    QwtInterval interval( x1, x2 );
-    interval = interval.normalized();
-
-    interval.setMinValue( interval.minValue() - lowerMargin() );
-    interval.setMaxValue( interval.maxValue() + upperMargin() );
-
-    if ( testAttribute( QwtScaleEngine::Symmetric ) )
-        interval = interval.symmetrize( reference() );
-
-    if ( testAttribute( QwtScaleEngine::IncludeReference ) )
-        interval = interval.extend( reference() );
-
-    if ( interval.width() == 0.0 )
-        interval = buildInterval( interval.minValue() );
-
-    const QDateTime from = toDateTime( interval.minValue() );
-    const QDateTime to = toDateTime( interval.maxValue() );
-
-    if ( from.isValid() && to.isValid() )
-    {
-        if ( maxNumSteps < 1 )
-            maxNumSteps = 1;
-
-        const QwtDate::IntervalType intvType = 
-            intervalType( from, to, maxNumSteps );
-
-        const double width = qwtIntervalWidth( from, to, intvType );
-
-        const double stepWidth = qwtDivideScale( width, maxNumSteps, intvType );
-        if ( stepWidth != 0.0 && !testAttribute( QwtScaleEngine::Floating ) )
-        {
-            const QDateTime d1 = alignDate( from, stepWidth, intvType, false );
-            const QDateTime d2 = alignDate( to, stepWidth, intvType, true );
-
-            interval.setMinValue( QwtDate::toDouble( d1 ) );
-            interval.setMaxValue( QwtDate::toDouble( d2 ) );
-        }
-
-        stepSize = stepWidth * qwtMsecsForType( intvType );
-    }
-
-    x1 = interval.minValue();
-    x2 = interval.maxValue();
-
-    if ( testAttribute( QwtScaleEngine::Inverted ) )
-    {
-        qSwap( x1, x2 );
-        stepSize = -stepSize;
-    }
-}
-
-/*!
-   \brief Calculate a scale division for a date/time interval
-
-   \param x1 First interval limit
-   \param x2 Second interval limit
-   \param maxMajorSteps Maximum for the number of major steps
-   \param maxMinorSteps Maximum number of minor steps
-   \param stepSize Step size. If stepSize == 0, the scaleEngine
-                   calculates one.
-   \return Calculated scale division
-*/
-QwtScaleDiv QwtDateScaleEngine::divideScale( double x1, double x2,
-    int maxMajorSteps, int maxMinorSteps, double stepSize ) const
-{
-    if ( maxMajorSteps < 1 )
-        maxMajorSteps = 1;
-
-    const double min = qMin( x1, x2 );
-    const double max = qMax( x1, x2 );
-
-    const QDateTime from = toDateTime( min );
-    const QDateTime to = toDateTime( max );
-
-    if ( from == to )
-        return QwtScaleDiv();
-
-    stepSize = qAbs( stepSize );
-    if ( stepSize > 0.0 )
-    {
-        // as interval types above hours are not equidistant
-        // ( even days might have 23/25 hours because of daylight saving )
-        // the stepSize is used as a hint only
-
-        maxMajorSteps = qCeil( ( max - min ) / stepSize );
-    }
-
-    const QwtDate::IntervalType intvType = 
-        intervalType( from, to, maxMajorSteps );
-
-    QwtScaleDiv scaleDiv;
-
-    if ( intvType == QwtDate::Millisecond )
-    {
-        // for milliseconds and below we can use the decimal system
-        scaleDiv = QwtLinearScaleEngine::divideScale( min, max,
-            maxMajorSteps, maxMinorSteps, stepSize );
-    }
-    else
-    {
-        const QDateTime minDate = QwtDate::floor( from, intvType );
-        const QDateTime maxDate = QwtDate::ceil( to, intvType );
-
-        scaleDiv = buildScaleDiv( minDate, maxDate, 
-            maxMajorSteps, maxMinorSteps, intvType );
-
-        // scaleDiv has been calculated from an extended interval
-        // adjusted to the step size. We have to shrink it again.
-
-        scaleDiv = scaleDiv.bounded( min, max );
-    }
-
-    if ( x1 > x2 )
-        scaleDiv.invert();
-
-    return scaleDiv;
-}
-
-QwtScaleDiv QwtDateScaleEngine::buildScaleDiv( 
-    const QDateTime &minDate, const QDateTime &maxDate,
-    int maxMajorSteps, int maxMinorSteps,
-    QwtDate::IntervalType intervalType ) const
-{
-    // calculate the step size
-    const double stepSize = qwtDivideScale( 
-        qwtIntervalWidth( minDate, maxDate, intervalType ), 
-        maxMajorSteps, intervalType );
-
-    // align minDate to the step size
-    QDateTime dt0 = alignDate( minDate, stepSize, intervalType, false );
-    if ( !dt0.isValid() )
-    {
-        // the floored date is out of the range of a 
-        // QDateTime - we ceil instead.
-        dt0 = alignDate( minDate, stepSize, intervalType, true );
-    }
-
-    QwtScaleDiv scaleDiv;
-
-    if ( intervalType <= QwtDate::Week )
-    {
-        scaleDiv = qwtDivideToSeconds( dt0, maxDate, 
-            stepSize, maxMinorSteps, intervalType );
-    }
-    else
-    {
-        if( intervalType == QwtDate::Month )
-        {
-            scaleDiv = qwtDivideToMonths( dt0, maxDate,
-                stepSize, maxMinorSteps );
-        }
-        else if ( intervalType == QwtDate::Year )
-        {
-            scaleDiv = qwtDivideToYears( dt0, maxDate,
-                stepSize, maxMinorSteps );
-        }
-    }
-
-
-    return scaleDiv;
-}
-
-/*!
-  Align a date/time value for a step size
-
-  For Qt::Day alignments there is no "natural day 0" -
-  instead the first day of the year is used to avoid jumping 
-  major ticks positions when panning a scale. For other alignments
-  ( f.e according to the first day of the month ) alignDate()
-  has to be overloaded.
-
-  \param dateTime Date/time value
-  \param stepSize Step size
-  \param intervalType Interval type
-  \param up When true dateTime is ceiled - otherwise it is floored
-
-  \return Aligned date/time value
- */
-QDateTime QwtDateScaleEngine::alignDate( 
-    const QDateTime &dateTime, double stepSize, 
-    QwtDate::IntervalType intervalType, bool up ) const
-{
-    // what about: (year == 1582 && month == 10 && day > 4 && day < 15) ??
-
-    QDateTime dt = dateTime;
-
-    if ( dateTime.timeSpec() == Qt::OffsetFromUTC )
-    {
-        dt.setUtcOffset( 0 );
-    }
-
-    switch( intervalType )
-    {
-        case QwtDate::Millisecond:
-        {
-            const int ms = qwtAlignValue( 
-                dt.time().msec(), stepSize, up ) ;
-
-            dt = QwtDate::floor( dateTime, QwtDate::Second );
-            dt = dt.addMSecs( ms );
-
-            break;
-        }
-        case QwtDate::Second:
-        {
-            int second = dt.time().second();
-            if ( up )
-            {
-                if ( dt.time().msec() > 0 )
-                    second++;
-            }
-
-            const int s = qwtAlignValue( second, stepSize, up );
-
-            dt = QwtDate::floor( dt, QwtDate::Minute );
-            dt = dt.addSecs( s );
-
-            break;
-        }
-        case QwtDate::Minute:
-        {
-            int minute = dt.time().minute();
-            if ( up )
-            {
-                if ( dt.time().msec() > 0 || dt.time().second() > 0 )
-                    minute++;
-            }
-
-            const int m = qwtAlignValue( minute, stepSize, up );
-
-            dt = QwtDate::floor( dt, QwtDate::Hour );
-            dt = dt.addSecs( m * 60 );
-
-            break;
-        }
-        case QwtDate::Hour:
-        {
-            int hour = dt.time().hour();
-            if ( up )
-            {
-                if ( dt.time().msec() > 0 || dt.time().second() > 0
-                    || dt.time().minute() > 0 )
-                {
-                    hour++;
-                }
-            }
-            const int h = qwtAlignValue( hour, stepSize, up );
-
-            dt = QwtDate::floor( dt, QwtDate::Day );
-            dt = dt.addSecs( h * 3600 );
-
-            break;
-        }
-        case QwtDate::Day:
-        {
-            // What date do we expect f.e. from an alignment of 5 days ??
-            // Aligning them to the beginning of the year avoids at least
-            // jumping major ticks when panning
-
-            int day = dt.date().dayOfYear();
-            if ( up )
-            {
-                if ( dt.time() > QTime( 0, 0 ) )
-                    day++;
-            }
-
-            const int d = qwtAlignValue( day, stepSize, up );
-
-            dt = QwtDate::floor( dt, QwtDate::Year );
-            dt = dt.addDays( d - 1 );
-
-            break;
-        }
-        case QwtDate::Week:
-        {
-            const QDate date = QwtDate::dateOfWeek0(
-                dt.date().year(), d_data->week0Type );
-
-            int numWeeks = date.daysTo( dt.date() ) / 7;
-            if ( up )
-            {
-                if ( dt.time() > QTime( 0, 0 ) ||
-                    date.daysTo( dt.date() ) % 7 )
-                {
-                    numWeeks++;
-                }
-            }
-
-            const int d = qwtAlignValue( numWeeks, stepSize, up ) * 7;
-
-            dt = QwtDate::floor( dt, QwtDate::Day );
-            dt.setDate( date );
-            dt = dt.addDays( d );
-
-            break;
-        }
-        case QwtDate::Month:
-        {
-            int month = dt.date().month();
-            if ( up )
-            {
-                if ( dt.date().day() > 1 ||
-                    dt.time() > QTime( 0, 0 ) )
-                {
-                    month++;
-                }
-            }
-
-            const int m = qwtAlignValue( month - 1, stepSize, up );
-
-            dt = QwtDate::floor( dt, QwtDate::Year );
-            dt = dt.addMonths( m );
-
-            break;
-        }
-        case QwtDate::Year:
-        {
-            int year = dateTime.date().year();
-            if ( up )
-            {
-                if ( dateTime.date().dayOfYear() > 1 ||
-                    dt.time() > QTime( 0, 0 ) )
-                {
-                    year++;
-                }
-            }
-
-            const int y = qwtAlignValue( year, stepSize, up );
-
-            dt = QwtDate::floor( dt, QwtDate::Day );
-            if ( y == 0 )
-            {
-                // there is no year 0 in the Julian calendar
-                dt.setDate( QDate( stepSize, 1, 1 ).addYears( -stepSize ) );
-            }
-            else
-            {
-                dt.setDate( QDate( y, 1, 1 ) );
-            }
-
-            break;
-        }
-    }
-
-    if ( dateTime.timeSpec() == Qt::OffsetFromUTC )
-    {
-        dt.setUtcOffset( dateTime.utcOffset() );
-    }
-
-    return dt;
-}
-
-/*!
-  Translate a double value into a QDateTime object.
-
-  For QDateTime result is bounded by QwtDate::minDate() and QwtDate::maxDate()
-
-  \return QDateTime object initialized with timeSpec() and utcOffset().
-  \sa timeSpec(), utcOffset(), QwtDate::toDateTime()
- */
-QDateTime QwtDateScaleEngine::toDateTime( double value ) const
-{
-    QDateTime dt = QwtDate::toDateTime( value, d_data->timeSpec );
-    if ( !dt.isValid() )
-    {
-        const QDate date = ( value <= 0.0 ) 
-            ? QwtDate::minDate() : QwtDate::maxDate();
-
-        dt = QDateTime( date, QTime( 0, 0 ), d_data->timeSpec );
-    }
-
-    if ( d_data->timeSpec == Qt::OffsetFromUTC )
-    {
-        dt = dt.addSecs( d_data->utcOffset );
-        dt.setUtcOffset( d_data->utcOffset );
-    }
-
-    return dt;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_engine.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_engine.h
deleted file mode 100644
index 2458d86413e4ea8444b4711fe90efe2dae0ac090..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_date_scale_engine.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef _QWT_DATE_SCALE_ENGINE_H_
-#define _QWT_DATE_SCALE_ENGINE_H_ 1
-
-#include "qwt_date.h"
-#include "qwt_scale_engine.h"
-
-/*!
-  \brief A scale engine for date/time values
-
-  QwtDateScaleEngine builds scales from a time intervals.
-  Together with QwtDateScaleDraw it can be used for
-  axes according to date/time values.
-
-  Years, months, weeks, days, hours and minutes are organized
-  in steps with non constant intervals. QwtDateScaleEngine
-  classifies intervals and aligns the boundaries and tick positions
-  according to this classification.
-
-  QwtDateScaleEngine supports representations depending
-  on Qt::TimeSpec specifications. The valid range for scales
-  is limited by the range of QDateTime, that differs 
-  between Qt4 and Qt5.
-  
-  Datetime values are expected as the number of milliseconds since
-  1970-01-01T00:00:00 Universal Coordinated Time - also known
-  as "The Epoch", that can be converted to QDateTime using 
-  QwtDate::toDateTime().
-
-  \sa QwtDate, QwtPlot::setAxisScaleEngine(),
-      QwtAbstractScale::setScaleEngine()
-*/
-class QWT_EXPORT QwtDateScaleEngine: public QwtLinearScaleEngine
-{
-public:
-    QwtDateScaleEngine( Qt::TimeSpec = Qt::LocalTime );
-    virtual ~QwtDateScaleEngine();
-
-    void setTimeSpec( Qt::TimeSpec );
-    Qt::TimeSpec timeSpec() const;
-
-    void setUtcOffset( int seconds );
-    int utcOffset() const;
-
-    void setWeek0Type( QwtDate::Week0Type );
-    QwtDate::Week0Type week0Type() const;
-    
-    void setMaxWeeks( int );
-    int maxWeeks() const;
-
-    virtual void autoScale( int maxNumSteps,
-        double &x1, double &x2, double &stepSize ) const;
-
-    virtual QwtScaleDiv divideScale( 
-        double x1, double x2,
-        int maxMajorSteps, int maxMinorSteps,
-        double stepSize = 0.0 ) const;
-
-    virtual QwtDate::IntervalType intervalType( 
-        const QDateTime &, const QDateTime &, int maxSteps ) const;
-
-    QDateTime toDateTime( double ) const;
-
-protected:
-    virtual QDateTime alignDate( const QDateTime &, double stepSize,
-        QwtDate::IntervalType, bool up ) const;
-
-private:
-    QwtScaleDiv buildScaleDiv( const QDateTime &, const QDateTime &,
-        int maxMajorSteps, int maxMinorSteps, 
-        QwtDate::IntervalType ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial.cpp
deleted file mode 100644
index 60db511436d0fb2f839312a39fda7396acda3e24..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial.cpp
+++ /dev/null
@@ -1,871 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_dial.h"
-#include "qwt_dial_needle.h"
-#include "qwt_math.h"
-#include "qwt_scale_engine.h"
-#include "qwt_scale_map.h"
-#include "qwt_round_scale_draw.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-#include <qpalette.h>
-#include <qpixmap.h>
-#include <qevent.h>
-#include <qalgorithms.h>
-#include <qmath.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-#include <qapplication.h>
-
-static inline double qwtAngleDist( double a1, double a2 )
-{
-    double dist = qAbs( a2 - a1 );
-    if ( dist > 360.0 )
-        dist -= 360.0;
-
-    return dist;
-}
-
-static inline bool qwtIsOnArc( double angle, double min, double max )
-{
-    if ( min < max )
-    {
-        return ( angle >= min ) && ( angle <= max );
-    }
-    else
-    {
-        return ( angle >= min ) || ( angle <= max );
-    }
-}
-
-static inline double qwtBoundedAngle( double min, double angle, double max )
-{
-    double from = qwtNormalizeDegrees( min );
-    double to = qwtNormalizeDegrees( max );
-
-    double a;
-
-    if ( qwtIsOnArc( angle, from, to ) )
-    {
-        a = angle;
-        if ( a < min )
-            a += 360.0;
-    }
-    else
-    {
-        if ( qwtAngleDist( angle, from ) <
-            qwtAngleDist( angle, to ) )
-        {
-            a = min;
-        }
-        else
-        {
-            a = max;
-        }
-    }
-
-    return a;
-}
-
-class QwtDial::PrivateData
-{
-public:
-    PrivateData():
-        frameShadow( Sunken ),
-        lineWidth( 0 ),
-        mode( RotateNeedle ),
-        origin( 90.0 ),
-        minScaleArc( 0.0 ),
-        maxScaleArc( 0.0 ),
-        needle( NULL ),
-        arcOffset( 0.0 ),
-        mouseOffset( 0.0 )
-    {
-    }
-
-    ~PrivateData()
-    {
-        delete needle;
-    }
-    Shadow frameShadow;
-    int lineWidth;
-
-    QwtDial::Mode mode;
-
-    double origin;
-    double minScaleArc;
-    double maxScaleArc;
-
-    QwtDialNeedle *needle;
-
-    double arcOffset;
-    double mouseOffset;
-
-    QPixmap pixmapCache;
-};
-
-/*!
-  \brief Constructor
-  \param parent Parent widget
-
-  Create a dial widget with no needle. The scale is initialized
-  to [ 0.0, 360.0 ] and 360 steps ( QwtAbstractSlider::setTotalSteps() ).
-  The origin of the scale is at 90°,
-
-  The value is set to 0.0.
-
-  The default mode is QwtDial::RotateNeedle.
-*/
-QwtDial::QwtDial( QWidget* parent ):
-    QwtAbstractSlider( parent )
-{
-    d_data = new PrivateData;
-
-    setFocusPolicy( Qt::TabFocus );
-
-    QPalette p = palette();
-    for ( int i = 0; i < QPalette::NColorGroups; i++ )
-    {
-        const QPalette::ColorGroup colorGroup =
-            static_cast<QPalette::ColorGroup>( i );
-
-        // Base: background color of the circle inside the frame.
-        // WindowText: background color of the circle inside the scale
-
-        p.setColor( colorGroup, QPalette::WindowText,
-            p.color( colorGroup, QPalette::Base ) );
-    }
-    setPalette( p );
-
-    QwtRoundScaleDraw* scaleDraw = new QwtRoundScaleDraw();
-    scaleDraw->setRadius( 0 );
-
-    setScaleDraw( scaleDraw );
-
-    setScaleArc( 0.0, 360.0 ); // scale as a full circle
-
-    setScaleMaxMajor( 10 );
-    setScaleMaxMinor( 5 );
-
-    setValue( 0.0 );
-}
-
-//!  Destructor
-QwtDial::~QwtDial()
-{
-    delete d_data;
-}
-
-/*!
-  Sets the frame shadow value from the frame style.
-
-  \param shadow Frame shadow
-  \sa setLineWidth(), QFrame::setFrameShadow()
-*/
-void QwtDial::setFrameShadow( Shadow shadow )
-{
-    if ( shadow != d_data->frameShadow )
-    {
-        invalidateCache();
-
-        d_data->frameShadow = shadow;
-        if ( lineWidth() > 0 )
-            update();
-    }
-}
-
-/*!
-  \return Frame shadow
-  /sa setFrameShadow(), lineWidth(), QFrame::frameShadow()
-*/
-QwtDial::Shadow QwtDial::frameShadow() const
-{
-    return d_data->frameShadow;
-}
-
-/*!
-  Sets the line width of the frame
-
-  \param lineWidth Line width
-  \sa setFrameShadow()
-*/
-void QwtDial::setLineWidth( int lineWidth )
-{
-    if ( lineWidth < 0 )
-        lineWidth = 0;
-
-    if ( d_data->lineWidth != lineWidth )
-    {
-        invalidateCache();
-
-        d_data->lineWidth = lineWidth;
-        update();
-    }
-}
-
-/*!
-  \return Line width of the frame
-  \sa setLineWidth(), frameShadow(), lineWidth()
-*/
-int QwtDial::lineWidth() const
-{
-    return d_data->lineWidth;
-}
-
-/*!
-  \return bounding rectangle of the circle inside the frame
-  \sa setLineWidth(), scaleInnerRect(), boundingRect()
-*/
-QRect QwtDial::innerRect() const
-{
-    const int lw = lineWidth();
-    return boundingRect().adjusted( lw, lw, -lw, -lw );
-}
-
-/*!
-  \return bounding rectangle of the dial including the frame
-  \sa setLineWidth(), scaleInnerRect(), innerRect()
-*/
-QRect QwtDial::boundingRect() const
-{
-    const QRect cr = contentsRect();
-
-    const double dim = qMin( cr.width(), cr.height() );
-
-    QRect inner( 0, 0, dim, dim );
-    inner.moveCenter( cr.center() );
-
-    return inner;
-}
-
-/*!
-  \return rectangle inside the scale
-  \sa setLineWidth(), boundingRect(), innerRect()
-*/
-QRect QwtDial::scaleInnerRect() const
-{
-    QRect rect = innerRect();
-
-    const QwtAbstractScaleDraw *sd = scaleDraw();
-    if ( sd )
-    {
-        int scaleDist = qCeil( sd->extent( font() ) );
-        scaleDist++; // margin
-
-        rect.adjust( scaleDist, scaleDist, -scaleDist, -scaleDist );
-    }
-
-    return rect;
-}
-
-/*!
-  \brief Change the mode of the dial.
-  \param mode New mode
-
-  In case of QwtDial::RotateNeedle the needle is rotating, in case of
-  QwtDial::RotateScale, the needle points to origin()
-  and the scale is rotating.
-
-  The default mode is QwtDial::RotateNeedle.
-
-  \sa mode(), setValue(), setOrigin()
-*/
-void QwtDial::setMode( Mode mode )
-{
-    if ( mode != d_data->mode )
-    {
-        invalidateCache();
-
-        d_data->mode = mode;
-        sliderChange();
-    }
-}
-
-/*!
-  \return Mode of the dial.
-  \sa setMode(), origin(), setScaleArc(), value()
-*/
-QwtDial::Mode QwtDial::mode() const
-{
-    return d_data->mode;
-}
-
-/*!
-  Invalidate the internal caches used to speed up repainting
- */
-void QwtDial::invalidateCache()
-{
-    d_data->pixmapCache = QPixmap();
-}
-
-/*!
-   Paint the dial
-   \param event Paint event
-*/
-void QwtDial::paintEvent( QPaintEvent *event )
-{
-    QPainter painter( this );
-    painter.setClipRegion( event->region() );
-
-    QStyleOption opt;
-    opt.init(this);
-    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
-
-    if ( d_data->mode == QwtDial::RotateScale )
-    {
-        painter.save();
-        painter.setRenderHint( QPainter::Antialiasing, true );
-
-        drawContents( &painter );
-
-        painter.restore();
-    }
-
-    const QRect r = contentsRect();
-    if ( r.size() != d_data->pixmapCache.size() )
-    {
-        d_data->pixmapCache = QwtPainter::backingStore( this, r.size() );
-        d_data->pixmapCache.fill( Qt::transparent );
-
-        QPainter p( &d_data->pixmapCache );
-        p.setRenderHint( QPainter::Antialiasing, true );
-        p.translate( -r.topLeft() );
-            
-        if ( d_data->mode != QwtDial::RotateScale )
-            drawContents( &p );
-
-        if ( lineWidth() > 0 )
-            drawFrame( &p );
-
-        if ( d_data->mode != QwtDial::RotateNeedle )
-            drawNeedle( &p );
-    }
-
-    painter.drawPixmap( r.topLeft(), d_data->pixmapCache );
-
-    if ( d_data->mode == QwtDial::RotateNeedle )
-        drawNeedle( &painter );
-
-    if ( hasFocus() )
-        drawFocusIndicator( &painter );
-}
-
-/*!
-  Draw the focus indicator
-  \param painter Painter
-*/
-void QwtDial::drawFocusIndicator( QPainter *painter ) const
-{
-    QwtPainter::drawFocusRect( painter, this, boundingRect() );
-}
-
-/*!
-  Draw the frame around the dial
-
-  \param painter Painter
-  \sa lineWidth(), frameShadow()
-*/
-void QwtDial::drawFrame( QPainter *painter )
-{
-    QwtPainter::drawRoundFrame( painter, boundingRect(),
-        palette(), lineWidth(), d_data->frameShadow );
-}
-
-/*!
-  \brief Draw the contents inside the frame
-
-  QPalette::Window is the background color outside of the frame.
-  QPalette::Base is the background color inside the frame.
-  QPalette::WindowText is the background color inside the scale.
-
-  \param painter Painter
-
-  \sa boundingRect(), innerRect(),
-    scaleInnerRect(), QWidget::setPalette()
-*/
-void QwtDial::drawContents( QPainter *painter ) const
-{
-    if ( testAttribute( Qt::WA_NoSystemBackground ) ||
-        palette().brush( QPalette::Base ) !=
-            palette().brush( QPalette::Window ) )
-    {
-        const QRectF br = boundingRect();
-
-        painter->save();
-        painter->setPen( Qt::NoPen );
-        painter->setBrush( palette().brush( QPalette::Base ) );
-        painter->drawEllipse( br );
-        painter->restore();
-    }
-
-    const QRectF insideScaleRect = scaleInnerRect();
-    if ( palette().brush( QPalette::WindowText ) !=
-            palette().brush( QPalette::Base ) )
-    {
-        painter->save();
-        painter->setPen( Qt::NoPen );
-        painter->setBrush( palette().brush( QPalette::WindowText ) );
-        painter->drawEllipse( insideScaleRect );
-        painter->restore();
-    }
-
-    const QPointF center = insideScaleRect.center();
-    const double radius = 0.5 * insideScaleRect.width();
-
-    painter->save();
-    drawScale( painter, center, radius );
-    painter->restore();
-
-    painter->save();
-    drawScaleContents( painter, center, radius );
-    painter->restore();
-}
-
-/*!
-  Draw the needle
-
-  \param painter Painter
-  \param center Center of the dial
-  \param radius Length for the needle
-  \param direction Direction of the needle in degrees, counter clockwise
-  \param colorGroup ColorGroup
-*/
-void QwtDial::drawNeedle( QPainter *painter, const QPointF &center,
-    double radius, double direction, QPalette::ColorGroup colorGroup ) const
-{
-    if ( d_data->needle )
-    {
-        direction = 360.0 - direction; // counter clockwise
-        d_data->needle->draw( painter, center, radius, direction, colorGroup );
-    }
-}
-
-void QwtDial::drawNeedle( QPainter *painter ) const
-{
-    if ( !isValid() )
-        return;
-
-    QPalette::ColorGroup colorGroup;
-    if ( isEnabled() )
-        colorGroup = hasFocus() ? QPalette::Active : QPalette::Inactive;
-    else
-        colorGroup = QPalette::Disabled;
-
-    const QRectF sr = scaleInnerRect();
-
-    painter->save();
-    painter->setRenderHint( QPainter::Antialiasing, true );
-    drawNeedle( painter, sr.center(), 0.5 * sr.width(),
-        scaleMap().transform( value() ) + 270.0, colorGroup );
-    painter->restore();
-}
-
-/*!
-  Draw the scale
-
-  \param painter Painter
-  \param center Center of the dial
-  \param radius Radius of the scale
-*/
-void QwtDial::drawScale( QPainter *painter, 
-    const QPointF &center, double radius ) const
-{
-    QwtRoundScaleDraw *sd = const_cast<QwtRoundScaleDraw *>( scaleDraw() );
-    if ( sd == NULL )
-        return;
-
-    sd->setRadius( radius );
-    sd->moveCenter( center );
-
-    QPalette pal = palette();
-
-    const QColor textColor = pal.color( QPalette::Text );
-    pal.setColor( QPalette::WindowText, textColor ); // ticks, backbone
-
-    painter->setFont( font() );
-    painter->setPen( QPen( textColor, sd->penWidth() ) );
-
-    painter->setBrush( Qt::red );
-    sd->draw( painter, pal );
-}
-
-/*!
-  Draw the contents inside the scale
-
-  Paints nothing.
-
-  \param painter Painter
-  \param center Center of the contents circle
-  \param radius Radius of the contents circle
-*/
-void QwtDial::drawScaleContents( QPainter *painter,
-    const QPointF &center, double radius ) const
-{
-    Q_UNUSED(painter);
-    Q_UNUSED(center);
-    Q_UNUSED(radius);
-}
-
-/*!
-  Set a needle for the dial
-
-  \param needle Needle
-
-  \warning The needle will be deleted, when a different needle is
-           set or in ~QwtDial()
-*/
-void QwtDial::setNeedle( QwtDialNeedle *needle )
-{
-    if ( needle != d_data->needle )
-    {
-        if ( d_data->needle )
-            delete d_data->needle;
-
-        d_data->needle = needle;
-        update();
-    }
-}
-
-/*!
-  \return needle
-  \sa setNeedle()
-*/
-const QwtDialNeedle *QwtDial::needle() const
-{
-    return d_data->needle;
-}
-
-/*!
-  \return needle
-  \sa setNeedle()
-*/
-QwtDialNeedle *QwtDial::needle()
-{
-    return d_data->needle;
-}
-
-//! \return the scale draw
-QwtRoundScaleDraw *QwtDial::scaleDraw()
-{
-    return static_cast<QwtRoundScaleDraw *>( abstractScaleDraw() );
-}
-
-//! \return the scale draw
-const QwtRoundScaleDraw *QwtDial::scaleDraw() const
-{
-    return static_cast<const QwtRoundScaleDraw *>( abstractScaleDraw() );
-}
-
-/*!
-  Set an individual scale draw
-
-  The motivation for setting a scale draw is often
-  to overload QwtRoundScaleDraw::label() to return 
-  individual tick labels.
-  
-  \param scaleDraw Scale draw
-  \warning The previous scale draw is deleted
-*/
-void QwtDial::setScaleDraw( QwtRoundScaleDraw *scaleDraw )
-{
-    setAbstractScaleDraw( scaleDraw );
-    sliderChange();
-}
-
-/*!
-  Change the arc of the scale
-
-  \param minArc Lower limit
-  \param maxArc Upper limit
-
-  \sa minScaleArc(), maxScaleArc()
-*/
-void QwtDial::setScaleArc( double minArc, double maxArc )
-{
-    if ( minArc != 360.0 && minArc != -360.0 )
-        minArc = ::fmod( minArc, 360.0 );
-    if ( maxArc != 360.0 && maxArc != -360.0 )
-        maxArc = ::fmod( maxArc, 360.0 );
-
-    double minScaleArc = qMin( minArc, maxArc );
-    double maxScaleArc = qMax( minArc, maxArc );
-
-    if ( maxScaleArc - minScaleArc > 360.0 )
-        maxScaleArc = minScaleArc + 360.0;
-
-    if ( ( minScaleArc != d_data->minScaleArc ) || 
-        ( maxScaleArc != d_data->maxScaleArc ) )
-    {
-        d_data->minScaleArc = minScaleArc;
-        d_data->maxScaleArc = maxScaleArc;
-
-        invalidateCache();
-        sliderChange();
-    }
-}
-
-/*! 
-  Set the lower limit for the scale arc
-
-  \param min Lower limit of the scale arc
-  \sa setScaleArc(), setMaxScaleArc()
- */
-void QwtDial::setMinScaleArc( double min )
-{
-    setScaleArc( min, d_data->maxScaleArc );
-}
-
-/*! 
-  \return Lower limit of the scale arc
-  \sa setScaleArc()
-*/
-double QwtDial::minScaleArc() const
-{
-    return d_data->minScaleArc;
-}
-
-/*! 
-  Set the upper limit for the scale arc
-
-  \param max Upper limit of the scale arc
-  \sa setScaleArc(), setMinScaleArc()
- */
-void QwtDial::setMaxScaleArc( double max )
-{
-    setScaleArc( d_data->minScaleArc, max );
-}
-
-/*! 
-  \return Upper limit of the scale arc
-  \sa setScaleArc()
-*/
-double QwtDial::maxScaleArc() const
-{
-    return d_data->maxScaleArc;
-}
-
-/*!
-  \brief Change the origin
-
-  The origin is the angle where scale and needle is relative to.
-
-  \param origin New origin
-  \sa origin()
-*/
-void QwtDial::setOrigin( double origin )
-{
-    invalidateCache();
-
-    d_data->origin = origin;
-    sliderChange();
-}
-
-/*!
-  The origin is the angle where scale and needle is relative to.
-
-  \return Origin of the dial
-  \sa setOrigin()
-*/
-double QwtDial::origin() const
-{
-    return d_data->origin;
-}
-
-/*!
-  \return Size hint
-  \sa minimumSizeHint()
-*/
-QSize QwtDial::sizeHint() const
-{
-    int sh = 0;
-    if ( scaleDraw() )
-        sh = qCeil( scaleDraw()->extent( font() ) );
-
-    const int d = 6 * sh + 2 * lineWidth();
-
-    QSize hint( d, d ); 
-    if ( !isReadOnly() )
-        hint = hint.expandedTo( QApplication::globalStrut() );
-
-    return hint;
-}
-
-/*!
-  \return Minimum size hint
-  \sa sizeHint()
-*/
-QSize QwtDial::minimumSizeHint() const
-{
-    int sh = 0;
-    if ( scaleDraw() )
-        sh = qCeil( scaleDraw()->extent( font() ) );
-
-    const int d = 3 * sh + 2 * lineWidth();
-
-    return QSize( d, d );
-}
-
-/*!
-  \brief Determine what to do when the user presses a mouse button.
-
-  \param pos Mouse position
-
-  \retval True, when the inner circle contains pos 
-  \sa scrolledTo()
-*/
-bool QwtDial::isScrollPosition( const QPoint &pos ) const
-{
-    const QRegion region( innerRect(), QRegion::Ellipse );
-    if ( region.contains( pos ) && ( pos != innerRect().center() ) )
-    {
-        double angle = QLineF( rect().center(), pos ).angle();
-        if ( d_data->mode == QwtDial::RotateScale )
-            angle = 360.0 - angle;
-
-        double valueAngle = 
-            qwtNormalizeDegrees( 90.0 - scaleMap().transform( value() ) );
-
-        d_data->mouseOffset = qwtNormalizeDegrees( angle - valueAngle );
-        d_data->arcOffset = scaleMap().p1();
-
-        return true;
-    }
-
-    return false;
-}
-
-/*!
-  \brief Determine the value for a new position of the
-         slider handle.
-
-  \param pos Mouse position
-
-  \return Value for the mouse position
-  \sa isScrollPosition()
-*/
-double QwtDial::scrolledTo( const QPoint &pos ) const
-{
-    double angle = QLineF( rect().center(), pos ).angle();
-    if ( d_data->mode == QwtDial::RotateScale )
-    {
-        angle += scaleMap().p1() - d_data->arcOffset;
-        angle = 360.0 - angle;
-    }
-
-    angle = qwtNormalizeDegrees( angle - d_data->mouseOffset );
-    angle = qwtNormalizeDegrees( 90.0 - angle );
-
-    if ( scaleMap().pDist() >= 360.0 )
-    {
-        if ( angle < scaleMap().p1() )
-            angle += 360.0;
-
-        if ( !wrapping() )
-        {
-            double boundedAngle = angle;
-
-            const double arc = angle - scaleMap().transform( value() );
-            if ( qAbs( arc ) > 180.0 )
-            {
-                boundedAngle = ( arc > 0 ) 
-                    ? scaleMap().p1() : scaleMap().p2();
-            }
-
-            d_data->mouseOffset += ( boundedAngle - angle );
-
-            angle = boundedAngle;
-        }
-    }
-    else
-    {
-        const double boundedAngle =
-            qwtBoundedAngle( scaleMap().p1(), angle, scaleMap().p2() );
-
-        if ( !wrapping() )
-            d_data->mouseOffset += ( boundedAngle - angle );
-
-        angle = boundedAngle;
-    }
-
-    return scaleMap().invTransform( angle );
-}
-
-/*!
-  Change Event handler
-  \param event Change event
-
-  Invalidates internal paint caches if necessary
-*/
-void QwtDial::changeEvent( QEvent *event )
-{
-    switch( event->type() )
-    {
-        case QEvent::EnabledChange:
-        case QEvent::FontChange:
-        case QEvent::StyleChange:
-        case QEvent::PaletteChange:
-        case QEvent::LanguageChange:
-        case QEvent::LocaleChange:
-        {
-            invalidateCache();
-            break;
-        }
-        default:
-            break;
-    }
-    
-    QwtAbstractSlider::changeEvent( event );
-}
-
-/*!
-  Wheel Event handler
-  \param event Wheel event
-*/
-void QwtDial::wheelEvent( QWheelEvent *event )
-{
-    const QRegion region( innerRect(), QRegion::Ellipse );
-    if ( region.contains( event->pos() ) )
-        QwtAbstractSlider::wheelEvent( event );
-}
-
-void QwtDial::setAngleRange( double angle, double span )
-{
-    QwtRoundScaleDraw *sd = const_cast<QwtRoundScaleDraw *>( scaleDraw() );
-    if ( sd  )
-    {
-        angle = qwtNormalizeDegrees( angle - 270.0 );
-        sd->setAngleRange( angle, angle + span );
-    }
-}
-
-/*!
-  Invalidate the internal caches and call 
-  QwtAbstractSlider::scaleChange()
- */
-void QwtDial::scaleChange()
-{
-    invalidateCache();
-    QwtAbstractSlider::scaleChange();
-}
-
-void QwtDial::sliderChange()
-{
-    setAngleRange( d_data->origin + d_data->minScaleArc,
-        d_data->maxScaleArc - d_data->minScaleArc );
-
-    if ( mode() == RotateScale )
-    {
-        const double arc = scaleMap().transform( value() ) - scaleMap().p1();
-        setAngleRange( d_data->origin - arc,
-            d_data->maxScaleArc - d_data->minScaleArc );
-    }
-
-    QwtAbstractSlider::sliderChange();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial.h
deleted file mode 100644
index 800152c72532f578238aa5677a323534fccc1fed..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_DIAL_H
-#define QWT_DIAL_H 1
-
-#include "qwt_global.h"
-#include "qwt_abstract_slider.h"
-#include "qwt_abstract_scale_draw.h"
-#include <qframe.h>
-#include <qpalette.h>
-
-class QwtDialNeedle;
-class QwtRoundScaleDraw;
-
-/*!
-  \brief QwtDial class provides a rounded range control.
-
-  QwtDial is intended as base class for dial widgets like
-  speedometers, compass widgets, clocks ...
-
-  \image html dials2.png
-
-  A dial contains a scale and a needle indicating the current value
-  of the dial. Depending on Mode one of them is fixed and the
-  other is rotating. If not isReadOnly() the
-  dial can be rotated by dragging the mouse or using keyboard inputs
-  (see QwtAbstractSlider::keyPressEvent()). A dial might be wrapping, what means
-  a rotation below/above one limit continues on the other limit (f.e compass).
-  The scale might cover any arc of the dial, its values are related to
-  the origin() of the dial.
-
-  Often dials have to be updated very often according to values from external
-  devices. For these high refresh rates QwtDial caches as much as possible.
-  For derived classes it might be necessary to clear these caches manually
-  according to attribute changes using invalidateCache().
-
-  \sa QwtCompass, QwtAnalogClock, QwtDialNeedle
-  \note The controls and dials examples shows different types of dials.
-  \note QDial is more similar to QwtKnob than to QwtDial
-*/
-
-class QWT_EXPORT QwtDial: public QwtAbstractSlider
-{
-    Q_OBJECT
-
-    Q_ENUMS( Shadow Mode Direction )
-
-    Q_PROPERTY( int lineWidth READ lineWidth WRITE setLineWidth )
-    Q_PROPERTY( Shadow frameShadow READ frameShadow WRITE setFrameShadow )
-    Q_PROPERTY( Mode mode READ mode WRITE setMode )
-    Q_PROPERTY( double origin READ origin WRITE setOrigin )
-    Q_PROPERTY( double minScaleArc READ minScaleArc WRITE setMinScaleArc )
-    Q_PROPERTY( double maxScaleArc READ maxScaleArc WRITE setMaxScaleArc )
-
-public:
-
-    /*!
-        \brief Frame shadow
-
-         Unfortunately it is not possible to use QFrame::Shadow
-         as a property of a widget that is not derived from QFrame.
-         The following enum is made for the designer only. It is safe
-         to use QFrame::Shadow instead.
-     */
-    enum Shadow
-    {
-        //! QFrame::Plain
-        Plain = QFrame::Plain,
-
-        //! QFrame::Raised
-        Raised = QFrame::Raised,
-
-        //! QFrame::Sunken
-        Sunken = QFrame::Sunken
-    };
-
-    //! Mode controlling whether the needle or the scale is rotating
-    enum Mode
-    {
-        //! The needle is rotating
-        RotateNeedle,
-
-        //! The needle is fixed, the scales are rotating
-        RotateScale
-    };
-
-    explicit QwtDial( QWidget *parent = NULL );
-    virtual ~QwtDial();
-
-    void setFrameShadow( Shadow );
-    Shadow frameShadow() const;
-
-    void setLineWidth( int );
-    int lineWidth() const;
-
-    void setMode( Mode );
-    Mode mode() const;
-
-    void setScaleArc( double min, double max );
-
-    void setMinScaleArc( double min );
-    double minScaleArc() const;
-
-    void setMaxScaleArc( double min );
-    double maxScaleArc() const;
-
-    virtual void setOrigin( double );
-    double origin() const;
-
-    void setNeedle( QwtDialNeedle * );
-    const QwtDialNeedle *needle() const;
-    QwtDialNeedle *needle();
-
-    QRect boundingRect() const;
-    QRect innerRect() const;
-
-    virtual QRect scaleInnerRect() const;
-
-    virtual QSize sizeHint() const;
-    virtual QSize minimumSizeHint() const;
-
-    void setScaleDraw( QwtRoundScaleDraw * );
-
-    QwtRoundScaleDraw *scaleDraw();
-    const QwtRoundScaleDraw *scaleDraw() const;
-
-protected:
-    virtual void wheelEvent( QWheelEvent * );
-    virtual void paintEvent( QPaintEvent * );
-    virtual void changeEvent( QEvent * );
-
-    virtual void drawFrame( QPainter *p );
-    virtual void drawContents( QPainter * ) const;
-    virtual void drawFocusIndicator( QPainter * ) const;
-
-    void invalidateCache();
-
-    virtual void drawScale( QPainter *, 
-        const QPointF &center, double radius ) const;
-
-    virtual void drawScaleContents( QPainter *painter, 
-        const QPointF &center, double radius ) const;
-
-    virtual void drawNeedle( QPainter *, const QPointF &,
-        double radius, double direction, QPalette::ColorGroup ) const;
-
-    virtual double scrolledTo( const QPoint & ) const;
-    virtual bool isScrollPosition( const QPoint & ) const;
-
-    virtual void sliderChange();
-    virtual void scaleChange();
-
-private:
-    void setAngleRange( double angle, double span );
-    void drawNeedle( QPainter * ) const;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial_needle.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial_needle.cpp
deleted file mode 100644
index 6b15d2a6e5607c9ec20ed56d4ac84a35b7424ba5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial_needle.cpp
+++ /dev/null
@@ -1,440 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_dial_needle.h"
-#include "qwt_global.h"
-#include "qwt_math.h"
-#include "qwt_painter.h"
-#include <qapplication.h>
-#include <qpainter.h>
-
-#if QT_VERSION < 0x040601
-#define qFastSin(x) qSin(x)
-#define qFastCos(x) qCos(x)
-#endif
-
-static void qwtDrawStyle1Needle( QPainter *painter,
-    const QPalette &palette, QPalette::ColorGroup colorGroup,
-    double length )
-{
-    const double r[] = { 0.4, 0.3, 1, 0.8, 1, 0.3, 0.4 };
-    const double a[] = { -45, -20, -15, 0, 15, 20, 45 };
-
-    QPainterPath path;
-    for ( int i = 0; i < 7; i++ )
-    {
-        const double angle = a[i] / 180.0 * M_PI;
-        const double radius = r[i] * length;
-
-        const double x = radius * qFastCos( angle );
-        const double y = radius * qFastSin( angle );
-
-        path.lineTo( x, -y );
-    }
-
-    painter->setPen( Qt::NoPen );
-    painter->setBrush( palette.brush( colorGroup, QPalette::Light ) );
-    painter->drawPath( path );
-}
-
-static void qwtDrawStyle2Needle( QPainter *painter,
-    const QPalette &palette, QPalette::ColorGroup colorGroup, double length )
-{
-    const double ratioX = 0.7;
-    const double ratioY = 0.3;
-
-    QPainterPath path1;
-    path1.lineTo( ratioX * length, 0.0 );
-    path1.lineTo( length, ratioY * length );
-
-    QPainterPath path2;
-    path2.lineTo( ratioX * length, 0.0 );
-    path2.lineTo( length, -ratioY * length );
-
-    painter->setPen( Qt::NoPen );
-
-    painter->setBrush( palette.brush( colorGroup, QPalette::Light ) );
-    painter->drawPath( path1 );
-
-    painter->setBrush( palette.brush( colorGroup, QPalette::Dark ) );
-    painter->drawPath( path2 );
-}
-
-static void qwtDrawShadedPointer( QPainter *painter, 
-    const QColor &lightColor, const QColor &darkColor,
-    double length, double width )
-{
-    const double peak = qMax( length / 10.0, 5.0 );
-
-    const double knobWidth = width + 8;
-    QRectF knobRect( 0, 0, knobWidth, knobWidth );
-    knobRect.moveCenter( QPointF(0, 0) );
-
-    QPainterPath path1;
-    path1.lineTo( 0.0, 0.5 * width );
-    path1.lineTo( length - peak, 0.5 * width );
-    path1.lineTo( length, 0.0 );
-    path1.lineTo( 0.0, 0.0 );
-
-    QPainterPath arcPath1;
-    arcPath1.arcTo( knobRect, 0.0, -90.0 );
-
-    path1 = path1.united( arcPath1 );
-
-    QPainterPath path2;
-    path2.lineTo( 0.0, -0.5 * width );
-    path2.lineTo( length - peak, -0.5 * width );
-    path2.lineTo( length, 0.0 );
-    path2.lineTo( 0.0, 0.0 );
-
-    QPainterPath arcPath2;
-    arcPath2.arcTo( knobRect, 0.0, 90.0 );
-
-    path2 = path2.united( arcPath2 );
-
-    painter->setPen( Qt::NoPen );
-
-    painter->setBrush( lightColor );
-    painter->drawPath( path1 );
-
-    painter->setBrush( darkColor );
-    painter->drawPath( path2 );
-}
-
-static void qwtDrawArrowNeedle( QPainter *painter,
-    const QPalette &palette, QPalette::ColorGroup colorGroup,
-    double length, double width )
-{
-    if ( width <= 0 )
-        width = qMax( length * 0.06, 9.0 );
-
-    const double peak = qMax( 2.0, 0.4 * width );
-
-    QPainterPath path;
-    path.moveTo( 0.0, 0.5 * width );
-    path.lineTo( length - peak, 0.3 * width );
-    path.lineTo( length, 0.0 );
-    path.lineTo( length - peak, -0.3 * width );
-    path.lineTo( 0.0, -0.5 * width );
-
-    QRectF br = path.boundingRect();
-
-    QPalette pal( palette.color( QPalette::Mid ) );
-    QColor c1 = pal.color( QPalette::Light );
-    QColor c2 = pal.color( QPalette::Dark );
-
-    QLinearGradient gradient( br.topLeft(), br.bottomLeft() );
-    gradient.setColorAt( 0.0, c1 );
-    gradient.setColorAt( 0.5, c1 );
-    gradient.setColorAt( 0.5001, c2 );
-    gradient.setColorAt( 1.0, c2 );
-
-    QPen pen( gradient, 1 );
-    pen.setJoinStyle( Qt::MiterJoin );
-
-    painter->setPen( pen );
-    painter->setBrush( palette.brush( colorGroup, QPalette::Mid ) );
-
-    painter->drawPath( path );
-}
-
-static void qwtDrawTriangleNeedle( QPainter *painter,
-    const QPalette &palette, QPalette::ColorGroup colorGroup,
-    double length )
-{
-    const double width = qRound( length / 3.0 );
-
-    QPainterPath path[4];
-
-    path[0].lineTo( length, 0.0 );
-    path[0].lineTo( 0.0, width / 2 );
-
-    path[1].lineTo( length, 0.0 );
-    path[1].lineTo( 0.0, -width / 2 );
-
-    path[2].lineTo( -length, 0.0 );
-    path[2].lineTo( 0.0, width / 2 );
-
-    path[3].lineTo( -length, 0.0 );
-    path[3].lineTo( 0.0, -width / 2 );
-
-
-    const int colorOffset =  10;
-    const QColor darkColor = palette.color( colorGroup, QPalette::Dark );
-    const QColor lightColor = palette.color( colorGroup, QPalette::Light );
-
-    QColor color[4];
-    color[0] = darkColor.light( 100 + colorOffset );
-    color[1] = darkColor.dark( 100 + colorOffset );
-    color[2] = lightColor.light( 100 + colorOffset );
-    color[3] = lightColor.dark( 100 + colorOffset );
-
-    painter->setPen( Qt::NoPen );
-
-    for ( int i = 0; i < 4; i++ )
-    {
-        painter->setBrush( color[i] );
-        painter->drawPath( path[i] );
-    }
-}
-
-//! Constructor
-QwtDialNeedle::QwtDialNeedle():
-    d_palette( QApplication::palette() )
-{
-}
-
-//! Destructor
-QwtDialNeedle::~QwtDialNeedle()
-{
-}
-
-/*!
-    Sets the palette for the needle.
-
-    \param palette New Palette
-*/
-void QwtDialNeedle::setPalette( const QPalette &palette )
-{
-    d_palette = palette;
-}
-
-/*!
-  \return the palette of the needle.
-*/
-const QPalette &QwtDialNeedle::palette() const
-{
-    return d_palette;
-}
-
-/*!
-  Draw the needle
-
-  \param painter Painter
-  \param center Center of the dial, start position for the needle
-  \param length Length of the needle
-  \param direction Direction of the needle, in degrees counter clockwise
-  \param colorGroup Color group, used for painting
-*/
-void QwtDialNeedle::draw( QPainter *painter, 
-    const QPointF &center, double length, double direction, 
-    QPalette::ColorGroup colorGroup ) const
-{
-    painter->save();
-
-    painter->translate( center );
-    painter->rotate( -direction );
-
-    drawNeedle( painter, length, colorGroup );
-
-    painter->restore();
-}
-
-//!  Draw the knob
-void QwtDialNeedle::drawKnob( QPainter *painter,
-    double width, const QBrush &brush, bool sunken ) const
-{
-    QPalette palette( brush.color() );
-
-    QColor c1 = palette.color( QPalette::Light );
-    QColor c2 = palette.color( QPalette::Dark );
-
-    if ( sunken )
-        qSwap( c1, c2 );
-
-    QRectF rect( 0.0, 0.0, width, width );
-    rect.moveCenter( painter->combinedTransform().map( QPointF() ) );
-
-    QLinearGradient gradient( rect.topLeft(), rect.bottomRight() );
-    gradient.setColorAt( 0.0, c1 );
-    gradient.setColorAt( 0.3, c1 );
-    gradient.setColorAt( 0.7, c2 );
-    gradient.setColorAt( 1.0, c2 );
-
-    painter->save();
-
-    painter->resetTransform();
-
-    painter->setPen( QPen( gradient, 1 ) );
-    painter->setBrush( brush );
-    painter->drawEllipse( rect );
-
-    painter->restore();
-}
-
-/*!
-  Constructor
-
-  \param style Style
-  \param hasKnob With/Without knob
-  \param mid Middle color
-  \param base Base color
-*/
-QwtDialSimpleNeedle::QwtDialSimpleNeedle( Style style, bool hasKnob,
-        const QColor &mid, const QColor &base ):
-    d_style( style ),
-    d_hasKnob( hasKnob ),
-    d_width( -1 )
-{
-    QPalette palette;
-    palette.setColor( QPalette::Mid, mid );
-    palette.setColor( QPalette::Base, base );
-
-    setPalette( palette );
-}
-
-/*!
-  Set the width of the needle
-  \param width Width
-  \sa width()
-*/
-void QwtDialSimpleNeedle::setWidth( double width )
-{
-    d_width = width;
-}
-
-/*!
-  \return the width of the needle
-  \sa setWidth()
-*/
-double QwtDialSimpleNeedle::width() const
-{
-    return d_width;
-}
-
-/*!
- Draw the needle
-
- \param painter Painter
- \param length Length of the needle
- \param colorGroup Color group, used for painting
-*/
-void QwtDialSimpleNeedle::drawNeedle( QPainter *painter, 
-    double length, QPalette::ColorGroup colorGroup ) const
-{
-    double knobWidth = 0.0;
-    double width = d_width;
-
-    if ( d_style == Arrow )
-    {
-        if ( width <= 0.0 )
-            width = qMax(length * 0.06, 6.0);
-
-        qwtDrawArrowNeedle( painter, 
-            palette(), colorGroup, length, width );
-
-        knobWidth = qMin( width * 2.0, 0.2 * length );
-    }
-    else
-    {
-        if ( width <= 0.0 )
-            width = 5.0;
-        
-        QPen pen ( palette().brush( colorGroup, QPalette::Mid ), width );
-        pen.setCapStyle( Qt::FlatCap );
-    
-        painter->setPen( pen );
-        painter->drawLine( QPointF( 0.0, 0.0 ), QPointF( length, 0.0 ) );
-
-        knobWidth = qMax( width * 3.0, 5.0 );
-    }
-
-    if ( d_hasKnob && knobWidth > 0.0 )
-    {
-        drawKnob( painter, knobWidth,
-            palette().brush( colorGroup, QPalette::Base ), false );
-    }
-}
-
-//! Constructor
-QwtCompassMagnetNeedle::QwtCompassMagnetNeedle( Style style,
-        const QColor &light, const QColor &dark ):
-    d_style( style )
-{
-    QPalette palette;
-    palette.setColor( QPalette::Light, light );
-    palette.setColor( QPalette::Dark, dark );
-    palette.setColor( QPalette::Base, Qt::gray );
-
-    setPalette( palette );
-}
-
-/*!
-    Draw the needle
-
-    \param painter Painter
-    \param length Length of the needle
-    \param colorGroup Color group, used for painting
-*/
-void QwtCompassMagnetNeedle::drawNeedle( QPainter *painter, 
-    double length, QPalette::ColorGroup colorGroup ) const
-{
-    if ( d_style == ThinStyle )
-    {
-        const double width = qMax( length / 6.0, 3.0 );
-
-        const int colorOffset = 10;
-
-        const QColor light = palette().color( colorGroup, QPalette::Light );
-        const QColor dark = palette().color( colorGroup, QPalette::Dark );
-
-        qwtDrawShadedPointer( painter,
-            dark.light( 100 + colorOffset ),
-            dark.dark( 100 + colorOffset ),
-            length, width );
-        
-        painter->rotate( 180.0 );
-    
-        qwtDrawShadedPointer( painter,
-            light.light( 100 + colorOffset ),
-            light.dark( 100 + colorOffset ),
-            length, width );
-        
-        const QBrush baseBrush = palette().brush( colorGroup, QPalette::Base );
-        drawKnob( painter, width, baseBrush, true );
-    }
-    else
-    {
-        qwtDrawTriangleNeedle( painter, palette(), colorGroup, length );
-    }
-}
-
-/*!
-   Constructor
-
-   \param style Arrow style
-   \param light Light color
-   \param dark Dark color
-*/
-QwtCompassWindArrow::QwtCompassWindArrow( Style style,
-        const QColor &light, const QColor &dark ):
-    d_style( style )
-{
-    QPalette palette;
-    palette.setColor( QPalette::Light, light );
-    palette.setColor( QPalette::Dark, dark );
-
-    setPalette( palette );
-}
-
-/*!
- Draw the needle
-
- \param painter Painter
- \param length Length of the needle
- \param colorGroup Color group, used for painting
-*/
-void QwtCompassWindArrow::drawNeedle( QPainter *painter, 
-    double length, QPalette::ColorGroup colorGroup ) const
-{
-    if ( d_style == Style1 )
-        qwtDrawStyle1Needle( painter, palette(), colorGroup, length );
-    else
-        qwtDrawStyle2Needle( painter, palette(), colorGroup, length );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial_needle.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial_needle.h
deleted file mode 100644
index 21a2342a3f9795b1604f06d1f8fb25e384c23e6f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dial_needle.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_DIAL_NEEDLE_H
-#define QWT_DIAL_NEEDLE_H 1
-
-#include "qwt_global.h"
-#include <qpalette.h>
-
-class QPainter;
-class QPoint;
-
-/*!
-  \brief Base class for needles that can be used in a QwtDial.
-
-  QwtDialNeedle is a pointer that indicates a value by pointing
-  to a specific direction.
-
-  \sa QwtDial, QwtCompass
-*/
-
-class QWT_EXPORT QwtDialNeedle
-{
-public:
-    QwtDialNeedle();
-    virtual ~QwtDialNeedle();
-
-    virtual void setPalette( const QPalette & );
-    const QPalette &palette() const;
-
-    virtual void draw( QPainter *painter, const QPointF &center,
-        double length, double direction, 
-        QPalette::ColorGroup = QPalette::Active ) const;
-
-protected:
-    /*!
-      \brief Draw the needle
-
-      The origin of the needle is at position (0.0, 0.0 )
-      pointing in direction 0.0 ( = east ). 
-
-      The painter is already initialized with translation and 
-      rotation.
-
-      \param painter Painter
-      \param length Length of the needle
-      \param colorGroup Color group, used for painting
-
-      \sa setPalette(), palette()
-    */
-    virtual void drawNeedle( QPainter *painter, 
-        double length, QPalette::ColorGroup colorGroup ) const = 0;
-
-    virtual void drawKnob( QPainter *, double width, 
-        const QBrush &, bool sunken ) const;
-
-private:
-    QPalette d_palette;
-};
-
-/*!
-  \brief A needle for dial widgets
-
-  The following colors are used:
-
-  - QPalette::Mid\n
-    Pointer
-  - QPalette::Base\n
-    Knob
-
-  \sa QwtDial, QwtCompass
-*/
-
-class QWT_EXPORT QwtDialSimpleNeedle: public QwtDialNeedle
-{
-public:
-    //! Style of the needle
-    enum Style
-    {
-        //! Arrow
-        Arrow,
-
-        //! A straight line from the center
-        Ray
-    };
-
-    QwtDialSimpleNeedle( Style, bool hasKnob = true,
-        const QColor &mid = Qt::gray, const QColor &base = Qt::darkGray );
-
-    void setWidth( double width );
-    double width() const;
-
-protected:
-    virtual void drawNeedle( QPainter *, double length,
-        QPalette::ColorGroup ) const;
-
-private:
-    Style d_style;
-    bool d_hasKnob;
-    double d_width;
-};
-
-/*!
-  \brief A magnet needle for compass widgets
-
-  A magnet needle points to two opposite directions indicating
-  north and south.
-
-  The following colors are used:
-  - QPalette::Light\n
-    Used for pointing south
-  - QPalette::Dark\n
-    Used for pointing north
-  - QPalette::Base\n
-    Knob (ThinStyle only)
-
-  \sa QwtDial, QwtCompass
-*/
-
-class QWT_EXPORT QwtCompassMagnetNeedle: public QwtDialNeedle
-{
-public:
-    //! Style of the needle
-    enum Style
-    {
-        //! A needle with a triangular shape
-        TriangleStyle,
-
-        //! A thin needle 
-        ThinStyle
-    };
-
-    QwtCompassMagnetNeedle( Style = TriangleStyle,
-        const QColor &light = Qt::white, const QColor &dark = Qt::red );
-
-protected:
-    virtual void drawNeedle( QPainter *, 
-        double length, QPalette::ColorGroup ) const;
-
-private:
-    Style d_style;
-};
-
-/*!
-  \brief An indicator for the wind direction
-
-  QwtCompassWindArrow shows the direction where the wind comes from.
-
-  - QPalette::Light\n
-    Used for Style1, or the light half of Style2
-  - QPalette::Dark\n
-    Used for the dark half of Style2
-
-  \sa QwtDial, QwtCompass
-*/
-
-class QWT_EXPORT QwtCompassWindArrow: public QwtDialNeedle
-{
-public:
-    //! Style of the arrow
-    enum Style
-    {
-        //! A needle pointing to the center
-        Style1,
-
-        //! A needle pointing to the center
-        Style2
-    };
-
-    QwtCompassWindArrow( Style, const QColor &light = Qt::white,
-        const QColor &dark = Qt::gray );
-
-protected:
-    virtual void drawNeedle( QPainter *, 
-        double length, QPalette::ColorGroup ) const;
-
-private:
-    Style d_style;
-};
-
-#endif 
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dyngrid_layout.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dyngrid_layout.cpp
deleted file mode 100644
index e21311666e8ec3278f6554ea5a06cb5bf2549a78..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dyngrid_layout.cpp
+++ /dev/null
@@ -1,591 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_dyngrid_layout.h"
-#include "qwt_math.h"
-#include <qvector.h>
-#include <qlist.h>
-
-class QwtDynGridLayout::PrivateData
-{
-public:
-    PrivateData():
-        isDirty( true )
-    {
-    }
-
-    void updateLayoutCache();
-
-    mutable QList<QLayoutItem*> itemList;
-
-    uint maxColumns;
-    uint numRows;
-    uint numColumns;
-
-    Qt::Orientations expanding;
-
-    bool isDirty;
-    QVector<QSize> itemSizeHints;
-};
-
-void QwtDynGridLayout::PrivateData::updateLayoutCache()
-{
-    itemSizeHints.resize( itemList.count() );
-
-    int index = 0;
-
-    for ( QList<QLayoutItem*>::iterator it = itemList.begin();
-        it != itemList.end(); ++it, index++ )
-    {
-        itemSizeHints[ index ] = ( *it )->sizeHint();
-    }
-
-    isDirty = false;
-}
-
-/*!
-  \param parent Parent widget
-  \param margin Margin
-  \param spacing Spacing
-*/
-
-QwtDynGridLayout::QwtDynGridLayout( QWidget *parent,
-        int margin, int spacing ):
-    QLayout( parent )
-{
-    init();
-
-    setSpacing( spacing );
-    setMargin( margin );
-}
-
-/*!
-  \param spacing Spacing
-*/
-
-QwtDynGridLayout::QwtDynGridLayout( int spacing )
-{
-    init();
-    setSpacing( spacing );
-}
-
-/*!
-  Initialize the layout with default values.
-*/
-void QwtDynGridLayout::init()
-{
-    d_data = new QwtDynGridLayout::PrivateData;
-    d_data->maxColumns = d_data->numRows = d_data->numColumns = 0;
-    d_data->expanding = 0;
-}
-
-//! Destructor
-
-QwtDynGridLayout::~QwtDynGridLayout()
-{
-    for ( int i = 0; i < d_data->itemList.size(); i++ )
-        delete d_data->itemList[i];
-
-    delete d_data;
-}
-
-//! Invalidate all internal caches
-void QwtDynGridLayout::invalidate()
-{
-    d_data->isDirty = true;
-    QLayout::invalidate();
-}
-
-/*!
-  Limit the number of columns.
-  \param maxColumns upper limit, 0 means unlimited
-  \sa maxColumns()
-*/
-void QwtDynGridLayout::setMaxColumns( uint maxColumns )
-{
-    d_data->maxColumns = maxColumns;
-}
-
-/*!
-  \brief Return the upper limit for the number of columns.
-
-  0 means unlimited, what is the default.
-
-  \return Upper limit for the number of columns
-  \sa setMaxColumns()
-*/
-uint QwtDynGridLayout::maxColumns() const
-{
-    return d_data->maxColumns;
-}
-
-/*! 
-  \brief Add an item to the next free position.
-  \param item Layout item
- */
-void QwtDynGridLayout::addItem( QLayoutItem *item )
-{
-    d_data->itemList.append( item );
-    invalidate();
-}
-
-/*!
-  \return true if this layout is empty.
-*/
-bool QwtDynGridLayout::isEmpty() const
-{
-    return d_data->itemList.isEmpty();
-}
-
-/*!
-  \return number of layout items
-*/
-uint QwtDynGridLayout::itemCount() const
-{
-    return d_data->itemList.count();
-}
-
-/*!
-  Find the item at a specific index
-
-  \param index Index
-  \return Item at a specific index
-  \sa takeAt()
-*/
-QLayoutItem *QwtDynGridLayout::itemAt( int index ) const
-{
-    if ( index < 0 || index >= d_data->itemList.count() )
-        return NULL;
-
-    return d_data->itemList.at( index );
-}
-
-/*!
-  Find the item at a specific index and remove it from the layout
-
-  \param index Index
-  \return Layout item, removed from the layout
-  \sa itemAt()
-*/
-QLayoutItem *QwtDynGridLayout::takeAt( int index )
-{
-    if ( index < 0 || index >= d_data->itemList.count() )
-        return NULL;
-
-    d_data->isDirty = true;
-    return d_data->itemList.takeAt( index );
-}
-
-//! \return Number of items in the layout
-int QwtDynGridLayout::count() const
-{
-    return d_data->itemList.count();
-}
-
-/*!
-  Set whether this layout can make use of more space than sizeHint().
-  A value of Qt::Vertical or Qt::Horizontal means that it wants to grow in only
-  one dimension, while Qt::Vertical | Qt::Horizontal means that it wants
-  to grow in both dimensions. The default value is 0.
-
-  \param expanding Or'd orientations
-  \sa expandingDirections()
-*/
-void QwtDynGridLayout::setExpandingDirections( Qt::Orientations expanding )
-{
-    d_data->expanding = expanding;
-}
-
-/*!
-  \brief Returns whether this layout can make use of more space than sizeHint().
-
-  A value of Qt::Vertical or Qt::Horizontal means that it wants to grow in only
-  one dimension, while Qt::Vertical | Qt::Horizontal means that it wants
-  to grow in both dimensions.
-
-  \return Orientations, where the layout expands
-  \sa setExpandingDirections()
-*/
-Qt::Orientations QwtDynGridLayout::expandingDirections() const
-{
-    return d_data->expanding;
-}
-
-/*!
-  Reorganizes columns and rows and resizes managed items within
-  a rectangle.
-
-  \param rect Layout geometry
-*/
-void QwtDynGridLayout::setGeometry( const QRect &rect )
-{
-    QLayout::setGeometry( rect );
-
-    if ( isEmpty() )
-        return;
-
-    d_data->numColumns = columnsForWidth( rect.width() );
-    d_data->numRows = itemCount() / d_data->numColumns;
-    if ( itemCount() % d_data->numColumns )
-        d_data->numRows++;
-
-    QList<QRect> itemGeometries = layoutItems( rect, d_data->numColumns );
-
-    int index = 0;
-    for ( QList<QLayoutItem*>::iterator it = d_data->itemList.begin();
-        it != d_data->itemList.end(); ++it )
-    {
-        ( *it )->setGeometry( itemGeometries[index] );
-        index++;
-    }
-}
-
-/*!
-  \brief Calculate the number of columns for a given width. 
-
-  The calculation tries to use as many columns as possible 
-  ( limited by maxColumns() )
-
-  \param width Available width for all columns
-  \return Number of columns for a given width
-
-  \sa maxColumns(), setMaxColumns()
-*/
-uint QwtDynGridLayout::columnsForWidth( int width ) const
-{
-    if ( isEmpty() )
-        return 0;
-
-    uint maxColumns = itemCount();
-    if ( d_data->maxColumns > 0 ) 
-        maxColumns = qMin( d_data->maxColumns, maxColumns );
-
-    if ( maxRowWidth( maxColumns ) <= width )
-        return maxColumns;
-
-    for ( uint numColumns = 2; numColumns <= maxColumns; numColumns++ )
-    {
-        const int rowWidth = maxRowWidth( numColumns );
-        if ( rowWidth > width )
-            return numColumns - 1;
-    }
-
-    return 1; // At least 1 column
-}
-
-/*!
-  Calculate the width of a layout for a given number of
-  columns.
-
-  \param numColumns Given number of columns
-  \param itemWidth Array of the width hints for all items
-*/
-int QwtDynGridLayout::maxRowWidth( int numColumns ) const
-{
-    int col;
-
-    QVector<int> colWidth( numColumns );
-    for ( col = 0; col < numColumns; col++ )
-        colWidth[col] = 0;
-
-    if ( d_data->isDirty )
-        d_data->updateLayoutCache();
-
-    for ( int index = 0;
-        index < d_data->itemSizeHints.count(); index++ )
-    {
-        col = index % numColumns;
-        colWidth[col] = qMax( colWidth[col],
-            d_data->itemSizeHints[int( index )].width() );
-    }
-
-    int rowWidth = 2 * margin() + ( numColumns - 1 ) * spacing();
-    for ( col = 0; col < numColumns; col++ )
-        rowWidth += colWidth[col];
-
-    return rowWidth;
-}
-
-/*!
-  \return the maximum width of all layout items
-*/
-int QwtDynGridLayout::maxItemWidth() const
-{
-    if ( isEmpty() )
-        return 0;
-
-    if ( d_data->isDirty )
-        d_data->updateLayoutCache();
-
-    int w = 0;
-    for ( int i = 0; i < d_data->itemSizeHints.count(); i++ )
-    {
-        const int itemW = d_data->itemSizeHints[i].width();
-        if ( itemW > w )
-            w = itemW;
-    }
-
-    return w;
-}
-
-/*!
-  Calculate the geometries of the layout items for a layout
-  with numColumns columns and a given rectangle.
-
-  \param rect Rect where to place the items
-  \param numColumns Number of columns
-  \return item geometries
-*/
-
-QList<QRect> QwtDynGridLayout::layoutItems( const QRect &rect,
-    uint numColumns ) const
-{
-    QList<QRect> itemGeometries;
-    if ( numColumns == 0 || isEmpty() )
-        return itemGeometries;
-
-    uint numRows = itemCount() / numColumns;
-    if ( numColumns % itemCount() )
-        numRows++;
-
-    if ( numRows == 0 )
-        return itemGeometries;
-
-    QVector<int> rowHeight( numRows );
-    QVector<int> colWidth( numColumns );
-
-    layoutGrid( numColumns, rowHeight, colWidth );
-
-    bool expandH, expandV;
-    expandH = expandingDirections() & Qt::Horizontal;
-    expandV = expandingDirections() & Qt::Vertical;
-
-    if ( expandH || expandV )
-        stretchGrid( rect, numColumns, rowHeight, colWidth );
-
-    const int maxColumns = d_data->maxColumns;
-    d_data->maxColumns = numColumns;
-    const QRect alignedRect = alignmentRect( rect );
-    d_data->maxColumns = maxColumns;
-
-    const int xOffset = expandH ? 0 : alignedRect.x();
-    const int yOffset = expandV ? 0 : alignedRect.y();
-
-    QVector<int> colX( numColumns );
-    QVector<int> rowY( numRows );
-
-    const int xySpace = spacing();
-
-    rowY[0] = yOffset + margin();
-    for ( uint r = 1; r < numRows; r++ )
-        rowY[r] = rowY[r-1] + rowHeight[r-1] + xySpace;
-
-    colX[0] = xOffset + margin();
-    for ( uint c = 1; c < numColumns; c++ )
-        colX[c] = colX[c-1] + colWidth[c-1] + xySpace;
-
-    const int itemCount = d_data->itemList.size();
-    for ( int i = 0; i < itemCount; i++ )
-    {
-        const int row = i / numColumns;
-        const int col = i % numColumns;
-
-        QRect itemGeometry( colX[col], rowY[row],
-            colWidth[col], rowHeight[row] );
-        itemGeometries.append( itemGeometry );
-    }
-
-    return itemGeometries;
-}
-
-
-/*!
-  Calculate the dimensions for the columns and rows for a grid
-  of numColumns columns.
-
-  \param numColumns Number of columns.
-  \param rowHeight Array where to fill in the calculated row heights.
-  \param colWidth Array where to fill in the calculated column widths.
-*/
-
-void QwtDynGridLayout::layoutGrid( uint numColumns,
-    QVector<int>& rowHeight, QVector<int>& colWidth ) const
-{
-    if ( numColumns <= 0 )
-        return;
-
-    if ( d_data->isDirty )
-        d_data->updateLayoutCache();
-
-    for ( int index = 0; index < d_data->itemSizeHints.count(); index++ )
-    {
-        const int row = index / numColumns;
-        const int col = index % numColumns;
-
-        const QSize &size = d_data->itemSizeHints[int( index )];
-
-        rowHeight[row] = ( col == 0 )
-            ? size.height() : qMax( rowHeight[row], size.height() );
-        colWidth[col] = ( row == 0 )
-            ? size.width() : qMax( colWidth[col], size.width() );
-    }
-}
-
-/*!
-  \return true: QwtDynGridLayout implements heightForWidth().
-  \sa heightForWidth()
-*/
-bool QwtDynGridLayout::hasHeightForWidth() const
-{
-    return true;
-}
-
-/*!
-  \return The preferred height for this layout, given a width.
-  \sa hasHeightForWidth()
-*/
-int QwtDynGridLayout::heightForWidth( int width ) const
-{
-    if ( isEmpty() )
-        return 0;
-
-    const uint numColumns = columnsForWidth( width );
-    uint numRows = itemCount() / numColumns;
-    if ( itemCount() % numColumns )
-        numRows++;
-
-    QVector<int> rowHeight( numRows );
-    QVector<int> colWidth( numColumns );
-
-    layoutGrid( numColumns, rowHeight, colWidth );
-
-    int h = 2 * margin() + ( numRows - 1 ) * spacing();
-    for ( uint row = 0; row < numRows; row++ )
-        h += rowHeight[row];
-
-    return h;
-}
-
-/*!
-  Stretch columns in case of expanding() & QSizePolicy::Horizontal and
-  rows in case of expanding() & QSizePolicy::Vertical to fill the entire
-  rect. Rows and columns are stretched with the same factor.
-
-  \param rect Bounding rectangle
-  \param numColumns Number of columns
-  \param rowHeight Array to be filled with the calculated row heights
-  \param colWidth Array to be filled with the calculated column widths
-
-  \sa setExpanding(), expanding()
-*/
-void QwtDynGridLayout::stretchGrid( const QRect &rect,
-    uint numColumns, QVector<int>& rowHeight, QVector<int>& colWidth ) const
-{
-    if ( numColumns == 0 || isEmpty() )
-        return;
-
-    bool expandH, expandV;
-    expandH = expandingDirections() & Qt::Horizontal;
-    expandV = expandingDirections() & Qt::Vertical;
-
-    if ( expandH )
-    {
-        int xDelta = rect.width() - 2 * margin() - ( numColumns - 1 ) * spacing();
-        for ( uint col = 0; col < numColumns; col++ )
-            xDelta -= colWidth[col];
-
-        if ( xDelta > 0 )
-        {
-            for ( uint col = 0; col < numColumns; col++ )
-            {
-                const int space = xDelta / ( numColumns - col );
-                colWidth[col] += space;
-                xDelta -= space;
-            }
-        }
-    }
-
-    if ( expandV )
-    {
-        uint numRows = itemCount() / numColumns;
-        if ( itemCount() % numColumns )
-            numRows++;
-
-        int yDelta = rect.height() - 2 * margin() - ( numRows - 1 ) * spacing();
-        for ( uint row = 0; row < numRows; row++ )
-            yDelta -= rowHeight[row];
-
-        if ( yDelta > 0 )
-        {
-            for ( uint row = 0; row < numRows; row++ )
-            {
-                const int space = yDelta / ( numRows - row );
-                rowHeight[row] += space;
-                yDelta -= space;
-            }
-        }
-    }
-}
-
-/*!
-   Return the size hint. If maxColumns() > 0 it is the size for
-   a grid with maxColumns() columns, otherwise it is the size for
-   a grid with only one row.
-
-   \return Size hint
-   \sa maxColumns(), setMaxColumns()
-*/
-QSize QwtDynGridLayout::sizeHint() const
-{
-    if ( isEmpty() )
-        return QSize();
-
-    uint numColumns = itemCount();
-    if ( d_data->maxColumns > 0 )
-        numColumns = qMin( d_data->maxColumns, numColumns );
-
-    uint numRows = itemCount() / numColumns;
-    if ( itemCount() % numColumns )
-        numRows++;
-
-    QVector<int> rowHeight( numRows );
-    QVector<int> colWidth( numColumns );
-
-    layoutGrid( numColumns, rowHeight, colWidth );
-
-    int h = 2 * margin() + ( numRows - 1 ) * spacing();
-    for ( uint row = 0; row < numRows; row++ )
-        h += rowHeight[row];
-
-    int w = 2 * margin() + ( numColumns - 1 ) * spacing();
-    for ( uint col = 0; col < numColumns; col++ )
-        w += colWidth[col];
-
-    return QSize( w, h );
-}
-
-/*!
-  \return Number of rows of the current layout.
-  \sa numColumns()
-  \warning The number of rows might change whenever the geometry changes
-*/
-uint QwtDynGridLayout::numRows() const
-{
-    return d_data->numRows;
-}
-
-/*!
-  \return Number of columns of the current layout.
-  \sa numRows()
-  \warning The number of columns might change whenever the geometry changes
-*/
-uint QwtDynGridLayout::numColumns() const
-{
-    return d_data->numColumns;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dyngrid_layout.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dyngrid_layout.h
deleted file mode 100644
index 9ea0bc2b7d95d1f42c8711283dd9bb218a07a3fa..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_dyngrid_layout.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_DYNGRID_LAYOUT_H
-#define QWT_DYNGRID_LAYOUT_H
-
-#include "qwt_global.h"
-#include <qlayout.h>
-#include <qsize.h>
-#include <qlist.h>
-
-/*!
-  \brief The QwtDynGridLayout class lays out widgets in a grid,
-         adjusting the number of columns and rows to the current size.
-
-  QwtDynGridLayout takes the space it gets, divides it up into rows and
-  columns, and puts each of the widgets it manages into the correct cell(s).
-  It lays out as many number of columns as possible (limited by maxColumns()).
-*/
-
-class QWT_EXPORT QwtDynGridLayout : public QLayout
-{
-    Q_OBJECT
-public:
-    explicit QwtDynGridLayout( QWidget *, int margin = 0, int space = -1 );
-    explicit QwtDynGridLayout( int space = -1 );
-
-    virtual ~QwtDynGridLayout();
-
-    virtual void invalidate();
-
-    void setMaxColumns( uint maxCols );
-    uint maxColumns() const;
-
-    uint numRows () const;
-    uint numColumns () const;
-
-    virtual void addItem( QLayoutItem * );
-
-    virtual QLayoutItem *itemAt( int index ) const;
-    virtual QLayoutItem *takeAt( int index );
-    virtual int count() const;
-
-    void setExpandingDirections( Qt::Orientations );
-    virtual Qt::Orientations expandingDirections() const;
-    QList<QRect> layoutItems( const QRect &, uint numCols ) const;
-
-    virtual int maxItemWidth() const;
-
-    virtual void setGeometry( const QRect &rect );
-
-    virtual bool hasHeightForWidth() const;
-    virtual int heightForWidth( int ) const;
-
-    virtual QSize sizeHint() const;
-
-    virtual bool isEmpty() const;
-    uint itemCount() const;
-
-    virtual uint columnsForWidth( int width ) const;
-
-protected:
-
-    void layoutGrid( uint numCols,
-        QVector<int>& rowHeight, QVector<int>& colWidth ) const;
-    void stretchGrid( const QRect &rect, uint numCols,
-        QVector<int>& rowHeight, QVector<int>& colWidth ) const;
-
-private:
-    void init();
-    int maxRowWidth( int numCols ) const;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_event_pattern.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_event_pattern.cpp
deleted file mode 100644
index e4248a606fe79c96ccdccc247bb69239d19b8173..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_event_pattern.cpp
+++ /dev/null
@@ -1,265 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_event_pattern.h"
-#include <qevent.h>
-
-/*!
-  Constructor
-
-  \sa MousePatternCode, KeyPatternCode
-*/
-
-QwtEventPattern::QwtEventPattern():
-    d_mousePattern( MousePatternCount ),
-    d_keyPattern( KeyPatternCount )
-{
-    initKeyPattern();
-    initMousePattern( 3 );
-}
-
-//! Destructor
-QwtEventPattern::~QwtEventPattern()
-{
-}
-
-/*!
-  Set default mouse patterns, depending on the number of mouse buttons
-
-  \param numButtons Number of mouse buttons ( <= 3 )
-  \sa MousePatternCode
-*/
-void QwtEventPattern::initMousePattern( int numButtons )
-{
-    d_mousePattern.resize( MousePatternCount );
-
-    switch ( numButtons )
-    {
-        case 1:
-        {
-            setMousePattern( MouseSelect1, Qt::LeftButton );
-            setMousePattern( MouseSelect2, Qt::LeftButton, Qt::ControlModifier );
-            setMousePattern( MouseSelect3, Qt::LeftButton, Qt::AltModifier );
-            break;
-        }
-        case 2:
-        {
-            setMousePattern( MouseSelect1, Qt::LeftButton );
-            setMousePattern( MouseSelect2, Qt::RightButton );
-            setMousePattern( MouseSelect3, Qt::LeftButton, Qt::AltModifier );
-            break;
-        }
-        default:
-        {
-            setMousePattern( MouseSelect1, Qt::LeftButton );
-            setMousePattern( MouseSelect2, Qt::RightButton );
-            setMousePattern( MouseSelect3, Qt::MidButton );
-        }
-    }
-
-    setMousePattern( MouseSelect4, d_mousePattern[MouseSelect1].button,
-        d_mousePattern[MouseSelect1].modifiers | Qt::ShiftModifier );
-
-    setMousePattern( MouseSelect5, d_mousePattern[MouseSelect2].button,
-        d_mousePattern[MouseSelect2].modifiers | Qt::ShiftModifier );
-
-    setMousePattern( MouseSelect6, d_mousePattern[MouseSelect3].button,
-        d_mousePattern[MouseSelect3].modifiers | Qt::ShiftModifier );
-}
-
-/*!
-  Set default mouse patterns.
-
-  \sa KeyPatternCode
-*/
-void QwtEventPattern::initKeyPattern()
-{
-    d_keyPattern.resize( KeyPatternCount );
-
-    setKeyPattern( KeySelect1, Qt::Key_Return );
-    setKeyPattern( KeySelect2, Qt::Key_Space );
-    setKeyPattern( KeyAbort, Qt::Key_Escape );
-
-    setKeyPattern( KeyLeft, Qt::Key_Left );
-    setKeyPattern( KeyRight, Qt::Key_Right );
-    setKeyPattern( KeyUp, Qt::Key_Up );
-    setKeyPattern( KeyDown, Qt::Key_Down );
-
-    setKeyPattern( KeyRedo, Qt::Key_Plus );
-    setKeyPattern( KeyUndo, Qt::Key_Minus );
-    setKeyPattern( KeyHome, Qt::Key_Escape );
-}
-
-/*!
-  Change one mouse pattern
-
-  \param pattern Index of the pattern
-  \param button Button
-  \param modifiers Keyboard modifiers
-
-  \sa QMouseEvent
-*/
-void QwtEventPattern::setMousePattern( MousePatternCode pattern, 
-    Qt::MouseButton button, Qt::KeyboardModifiers modifiers )
-{
-    if ( pattern >= 0 && pattern < MousePatternCount )
-    {
-        d_mousePattern[ pattern ].button = button;
-        d_mousePattern[ pattern ].modifiers = modifiers;
-    }
-}
-
-/*!
-  Change one key pattern
-
-  \param pattern Index of the pattern
-  \param key Key
-  \param modifiers Keyboard modifiers
-
-  \sa QKeyEvent
-*/
-void QwtEventPattern::setKeyPattern( KeyPatternCode pattern, 
-    int key, Qt::KeyboardModifiers modifiers )
-{
-    if ( pattern >= 0 && pattern < KeyPatternCount )
-    {
-        d_keyPattern[ pattern ].key = key;
-        d_keyPattern[ pattern ].modifiers = modifiers;
-    }
-}
-
-//! Change the mouse event patterns
-void QwtEventPattern::setMousePattern( const QVector<MousePattern> &pattern )
-{
-    d_mousePattern = pattern;
-}
-
-//! Change the key event patterns
-void QwtEventPattern::setKeyPattern( const QVector<KeyPattern> &pattern )
-{
-    d_keyPattern = pattern;
-}
-
-//! \return Mouse pattern
-const QVector<QwtEventPattern::MousePattern> &
-QwtEventPattern::mousePattern() const
-{
-    return d_mousePattern;
-}
-
-//! \return Key pattern
-const QVector<QwtEventPattern::KeyPattern> &
-QwtEventPattern::keyPattern() const
-{
-    return d_keyPattern;
-}
-
-//! \return Mouse pattern
-QVector<QwtEventPattern::MousePattern> &QwtEventPattern::mousePattern()
-{
-    return d_mousePattern;
-}
-
-//! \return Key pattern
-QVector<QwtEventPattern::KeyPattern> &QwtEventPattern::keyPattern()
-{
-    return d_keyPattern;
-}
-
-/*!
-  \brief Compare a mouse event with an event pattern.
-
-  A mouse event matches the pattern when both have the same button
-  value and in the state value the same key flags(Qt::KeyButtonMask)
-  are set.
-
-  \param code Index of the event pattern
-  \param event Mouse event
-  \return true if matches
-
-  \sa keyMatch()
-*/
-bool QwtEventPattern::mouseMatch( MousePatternCode code, 
-    const QMouseEvent *event ) const
-{
-    if ( code >= 0 && code < MousePatternCount )
-        return mouseMatch( d_mousePattern[ code ], event );
-
-    return false;
-}
-
-/*!
-  \brief Compare a mouse event with an event pattern.
-
-  A mouse event matches the pattern when both have the same button
-  value and in the state value the same key flags(Qt::KeyButtonMask)
-  are set.
-
-  \param pattern Mouse event pattern
-  \param event Mouse event
-  \return true if matches
-
-  \sa keyMatch()
-*/
-
-bool QwtEventPattern::mouseMatch( const MousePattern &pattern,
-    const QMouseEvent *event ) const
-{
-    if ( event == NULL )
-        return false;
-
-    const MousePattern mousePattern( event->button(), event->modifiers() );
-    return mousePattern == pattern;
-}
-
-/*!
-  \brief Compare a key event with an event pattern.
-
-  A key event matches the pattern when both have the same key
-  value and in the state value the same key flags (Qt::KeyButtonMask)
-  are set.
-
-  \param code Index of the event pattern
-  \param event Key event
-  \return true if matches
-
-  \sa mouseMatch()
-*/
-bool QwtEventPattern::keyMatch( KeyPatternCode code, 
-    const QKeyEvent *event ) const
-{
-    if ( code >= 0 && code < KeyPatternCount )
-        return keyMatch( d_keyPattern[ code ], event );
-
-    return false;
-}
-
-/*!
-  \brief Compare a key event with an event pattern.
-
-  A key event matches the pattern when both have the same key
-  value and in the state value the same key flags (Qt::KeyButtonMask)
-  are set.
-
-  \param pattern Key event pattern
-  \param event Key event
-  \return true if matches
-
-  \sa mouseMatch()
-*/
-
-bool QwtEventPattern::keyMatch(
-    const KeyPattern &pattern, const QKeyEvent *event ) const
-{
-    if ( event == NULL )
-        return false;
-
-    const KeyPattern keyPattern( event->key(), event->modifiers() );
-    return keyPattern == pattern;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_event_pattern.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_event_pattern.h
deleted file mode 100644
index 8955045a01c44ef09faf6725b42415f7854172b2..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_event_pattern.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_EVENT_PATTERN
-#define QWT_EVENT_PATTERN 1
-
-#include "qwt_global.h"
-#include <qnamespace.h>
-#include <qvector.h>
-
-class QMouseEvent;
-class QKeyEvent;
-
-/*!
-  \brief A collection of event patterns
-
-  QwtEventPattern introduces an level of indirection for mouse and
-  keyboard inputs. Those are represented by symbolic names, so
-  the application code can be configured by individual mappings.
-
-  \sa QwtPicker, QwtPickerMachine, QwtPlotZoomer
-*/
-class QWT_EXPORT QwtEventPattern
-{
-public:
-    /*!
-      \brief Symbolic mouse input codes
-
-      QwtEventPattern implements 3 different settings for
-      mice with 1, 2, or 3 buttons that can be activated
-      using initMousePattern(). The default setting is for
-      3 button mice.
-
-      Individual settings can be configured using setMousePattern().
-
-      \sa initMousePattern(), setMousePattern(), setKeyPattern()
-    */
-    enum MousePatternCode
-    {
-        /*! 
-          The default setting for 1, 2 and 3 button mice is:
-
-          - Qt::LeftButton 
-          - Qt::LeftButton 
-          - Qt::LeftButton 
-         */
-        MouseSelect1,
-
-        /*!
-          The default setting for 1, 2 and 3 button mice is:
-
-          - Qt::LeftButton + Qt::ControlModifier
-          - Qt::RightButton
-          - Qt::RightButton
-         */
-        MouseSelect2,
-
-        /*!
-          The default setting for 1, 2 and 3 button mice is:
-
-          - Qt::LeftButton + Qt::AltModifier
-          - Qt::LeftButton + Qt::AltModifier
-          - Qt::MidButton
-         */
-        MouseSelect3,
-
-        /*!
-          The default setting for 1, 2 and 3 button mice is:
-
-          - Qt::LeftButton + Qt::ShiftModifier
-          - Qt::LeftButton + Qt::ShiftModifier
-          - Qt::LeftButton + Qt::ShiftModifier
-         */
-        MouseSelect4,
-
-        /*!
-          The default setting for 1, 2 and 3 button mice is:
-
-          - Qt::LeftButton + Qt::ControlButton | Qt::ShiftModifier
-          - Qt::RightButton + Qt::ShiftModifier
-          - Qt::RightButton + Qt::ShiftModifier
-         */
-        MouseSelect5,
-
-        /*!
-          The default setting for 1, 2 and 3 button mice is:
-
-          - Qt::LeftButton + Qt::AltModifier + Qt::ShiftModifier
-          - Qt::LeftButton + Qt::AltModifier | Qt::ShiftModifier
-          - Qt::MidButton + Qt::ShiftModifier
-         */
-        MouseSelect6,
-
-        //! Number of mouse patterns
-        MousePatternCount
-    };
-
-    /*!
-      \brief Symbolic keyboard input codes
-
-      Individual settings can be configured using setKeyPattern()
-
-      \sa setKeyPattern(), setMousePattern()
-    */
-    enum KeyPatternCode
-    {
-        //! Qt::Key_Return
-        KeySelect1,
-
-        //! Qt::Key_Space
-        KeySelect2,
-
-        //! Qt::Key_Escape
-        KeyAbort,
-
-        //! Qt::Key_Left
-        KeyLeft,
-
-        //! Qt::Key_Right
-        KeyRight,
-
-        //! Qt::Key_Up
-        KeyUp,
-
-        //! Qt::Key_Down
-        KeyDown,
-
-        //! Qt::Key_Plus
-        KeyRedo,
-
-        //! Qt::Key_Minus
-        KeyUndo,
-
-        //! Qt::Key_Escape
-        KeyHome,
-
-        //! Number of key patterns
-        KeyPatternCount
-    };
-
-    //! A pattern for mouse events
-    class MousePattern
-    {
-    public:
-        //! Constructor
-        MousePattern( Qt::MouseButton btn = Qt::NoButton, 
-                Qt::KeyboardModifiers modifierCodes = Qt::NoModifier ):
-            button( btn ),
-            modifiers( modifierCodes )
-        {
-        }
-
-        //! Button 
-        Qt::MouseButton button;
-
-        //! Keyboard modifier
-        Qt::KeyboardModifiers modifiers;
-    };
-
-    //! A pattern for key events
-    class KeyPattern
-    {
-    public:
-        //! Constructor
-        KeyPattern( int keyCode = Qt::Key_unknown, 
-                Qt::KeyboardModifiers modifierCodes = Qt::NoModifier ):
-            key( keyCode ),
-            modifiers( modifierCodes )
-        {
-        }
-
-        //! Key code
-        int key;
-
-        //! Modifiers
-        Qt::KeyboardModifiers modifiers;
-    };
-
-    QwtEventPattern();
-    virtual ~QwtEventPattern();
-
-    void initMousePattern( int numButtons );
-    void initKeyPattern();
-
-    void setMousePattern( MousePatternCode, Qt::MouseButton button, 
-        Qt::KeyboardModifiers = Qt::NoModifier );
-
-    void setKeyPattern( KeyPatternCode, int keyCode, 
-        Qt::KeyboardModifiers modifierCodes = Qt::NoModifier );
-
-    void setMousePattern( const QVector<MousePattern> & );
-    void setKeyPattern( const QVector<KeyPattern> & );
-
-    const QVector<MousePattern> &mousePattern() const;
-    const QVector<KeyPattern> &keyPattern() const;
-
-    QVector<MousePattern> &mousePattern();
-    QVector<KeyPattern> &keyPattern();
-
-    bool mouseMatch( MousePatternCode, const QMouseEvent * ) const;
-    bool keyMatch( KeyPatternCode, const QKeyEvent * ) const;
-
-protected:
-    virtual bool mouseMatch( const MousePattern &, const QMouseEvent * ) const;
-    virtual bool keyMatch( const KeyPattern &, const QKeyEvent * ) const;
-
-private:
-
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable: 4251)
-#endif
-    QVector<MousePattern> d_mousePattern;
-    QVector<KeyPattern> d_keyPattern;
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-};
-
-//! Compare operator
-inline bool operator==( QwtEventPattern::MousePattern b1,
-    QwtEventPattern::MousePattern  b2 )
-{
-    return b1.button == b2.button && b1.modifiers == b2.modifiers;
-}
-
-//! Compare operator
-inline bool operator==( QwtEventPattern::KeyPattern b1,
-   QwtEventPattern::KeyPattern  b2 )
-{
-    return b1.key == b2.key && b1.modifiers == b2.modifiers;
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_global.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_global.h
deleted file mode 100644
index 3ad83e43d852cf7d1500149860e26206d2f88d83..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_global.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_GLOBAL_H
-#define QWT_GLOBAL_H
-
-#include <qglobal.h>
-
-// QWT_VERSION is (major << 16) + (minor << 8) + patch.
-
-#define QWT_VERSION       0x060103
-#define QWT_VERSION_STR   "6.1.3"
-
-#if defined(_MSC_VER) /* MSVC Compiler */
-/* template-class specialization 'identifier' is already instantiated */
-#pragma warning(disable: 4660)
-/* inherits via dominance */
-#pragma warning(disable: 4250)
-#endif // _MSC_VER
-
-#ifdef QWT_DLL
-
-#if defined(QWT_MAKEDLL)     // create a Qwt DLL library 
-#define QWT_EXPORT Q_DECL_EXPORT
-#else                        // use a Qwt DLL library
-#define QWT_EXPORT Q_DECL_IMPORT 
-#endif
-
-#endif // QWT_DLL
-
-#ifndef QWT_EXPORT
-#define QWT_EXPORT
-#endif
-
-#endif 
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_graphic.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_graphic.cpp
deleted file mode 100644
index 70aa86e0678fd1fc1c9f8fbda7ec0bc2a5f7f433..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_graphic.cpp
+++ /dev/null
@@ -1,1009 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_graphic.h"
-#include "qwt_painter_command.h"
-#include <qvector.h>
-#include <qpainter.h>
-#include <qpaintengine.h>
-#include <qimage.h>
-#include <qpixmap.h>
-#include <qpainterpath.h>
-#include <qmath.h>
-
-static bool qwtHasScalablePen( const QPainter *painter )
-{
-    const QPen pen = painter->pen();
-
-    bool scalablePen = false;
-
-    if ( pen.style() != Qt::NoPen && pen.brush().style() != Qt::NoBrush )
-    {
-        scalablePen = !pen.isCosmetic();
-        if ( !scalablePen && pen.widthF() == 0.0 )
-        {
-            const QPainter::RenderHints hints = painter->renderHints();
-            if ( hints.testFlag( QPainter::NonCosmeticDefaultPen ) )
-                scalablePen = true;
-        }
-    }
-
-    return scalablePen;
-}
-
-static QRectF qwtStrokedPathRect( 
-    const QPainter *painter, const QPainterPath &path )
-{
-    QPainterPathStroker stroker;
-    stroker.setWidth( painter->pen().widthF() );
-    stroker.setCapStyle( painter->pen().capStyle() );
-    stroker.setJoinStyle( painter->pen().joinStyle() );
-    stroker.setMiterLimit( painter->pen().miterLimit() );
-
-    QRectF rect;
-    if ( qwtHasScalablePen( painter ) )
-    {
-        QPainterPath stroke = stroker.createStroke(path);
-        rect = painter->transform().map(stroke).boundingRect();
-    }
-    else
-    {
-        QPainterPath mappedPath = painter->transform().map(path);
-        mappedPath = stroker.createStroke( mappedPath );
-
-        rect = mappedPath.boundingRect();
-    }
-
-    return rect;
-}
-
-static inline void qwtExecCommand( 
-    QPainter *painter, const QwtPainterCommand &cmd, 
-    QwtGraphic::RenderHints renderHints,
-    const QTransform &transform,
-    const QTransform *initialTransform )
-{
-    switch( cmd.type() )
-    {
-        case QwtPainterCommand::Path:
-        {
-            bool doMap = false;
-
-            if ( renderHints.testFlag( QwtGraphic::RenderPensUnscaled )
-                && painter->transform().isScaling() )
-            {
-                bool isCosmetic = painter->pen().isCosmetic();
-                if ( isCosmetic && painter->pen().widthF() == 0.0 )
-                {
-                    QPainter::RenderHints hints = painter->renderHints();
-                    if ( hints.testFlag( QPainter::NonCosmeticDefaultPen ) )
-                        isCosmetic = false;
-                }
-
-                doMap = !isCosmetic;
-            }
-
-            if ( doMap )
-            {
-                const QTransform tr = painter->transform();
-
-                painter->resetTransform();
-
-                QPainterPath path = tr.map( *cmd.path() );
-                if ( initialTransform )
-                {
-                    painter->setTransform( *initialTransform );
-                    path = initialTransform->inverted().map( path );
-                }
-
-                painter->drawPath( path );
-
-                painter->setTransform( tr );
-            }
-            else
-            {
-                painter->drawPath( *cmd.path() );
-            }
-            break;
-        }
-        case QwtPainterCommand::Pixmap:
-        {
-            const QwtPainterCommand::PixmapData *data = cmd.pixmapData();
-            painter->drawPixmap( data->rect, data->pixmap, data->subRect );
-            break;
-        }
-        case QwtPainterCommand::Image:
-        {
-            const QwtPainterCommand::ImageData *data = cmd.imageData();
-            painter->drawImage( data->rect, data->image, 
-                data->subRect, data->flags );
-            break;
-        }
-        case QwtPainterCommand::State:
-        {
-            const QwtPainterCommand::StateData *data = cmd.stateData();
-
-            if ( data->flags & QPaintEngine::DirtyPen ) 
-                painter->setPen( data->pen );
-
-            if ( data->flags & QPaintEngine::DirtyBrush ) 
-                painter->setBrush( data->brush );
-
-            if ( data->flags & QPaintEngine::DirtyBrushOrigin ) 
-                painter->setBrushOrigin( data->brushOrigin );
-
-            if ( data->flags & QPaintEngine::DirtyFont ) 
-                painter->setFont( data->font );
-
-            if ( data->flags & QPaintEngine::DirtyBackground ) 
-            {
-                painter->setBackgroundMode( data->backgroundMode );
-                painter->setBackground( data->backgroundBrush );
-            }
-
-            if ( data->flags & QPaintEngine::DirtyTransform ) 
-            {
-                painter->setTransform( data->transform * transform );
-            }
-
-            if ( data->flags & QPaintEngine::DirtyClipEnabled ) 
-                painter->setClipping( data->isClipEnabled );
-
-            if ( data->flags & QPaintEngine::DirtyClipRegion) 
-            {
-                painter->setClipRegion( data->clipRegion, 
-                    data->clipOperation );
-            }
-
-            if ( data->flags & QPaintEngine::DirtyClipPath ) 
-            {
-                painter->setClipPath( data->clipPath, data->clipOperation );
-            }
-
-            if ( data->flags & QPaintEngine::DirtyHints) 
-            {
-                const QPainter::RenderHints hints = data->renderHints;
-
-                painter->setRenderHint( QPainter::Antialiasing,
-                    hints.testFlag( QPainter::Antialiasing ) );
-
-                painter->setRenderHint( QPainter::TextAntialiasing,
-                    hints.testFlag( QPainter::TextAntialiasing ) );
-
-                painter->setRenderHint( QPainter::SmoothPixmapTransform,
-                    hints.testFlag( QPainter::SmoothPixmapTransform ) );
-
-                painter->setRenderHint( QPainter::HighQualityAntialiasing,
-                    hints.testFlag( QPainter::HighQualityAntialiasing ) );
-
-                painter->setRenderHint( QPainter::NonCosmeticDefaultPen,
-                    hints.testFlag( QPainter::NonCosmeticDefaultPen ) );
-            }
-
-            if ( data->flags & QPaintEngine::DirtyCompositionMode) 
-                painter->setCompositionMode( data->compositionMode );
-
-            if ( data->flags & QPaintEngine::DirtyOpacity) 
-                painter->setOpacity( data->opacity );
-
-            break;
-        }
-        default:
-            break;
-    }
-
-}
-
-class QwtGraphic::PathInfo
-{
-public:
-    PathInfo():
-        d_scalablePen( false )
-    {
-        // QVector needs a default constructor
-    }
-
-    PathInfo( const QRectF &pointRect, 
-            const QRectF &boundingRect, bool scalablePen ):
-        d_pointRect( pointRect ),
-        d_boundingRect( boundingRect ),
-        d_scalablePen( scalablePen )
-    {
-    }
-
-    inline QRectF scaledBoundingRect( double sx, double sy,
-        bool scalePens ) const
-    {
-        if ( sx == 1.0 && sy == 1.0 )
-            return d_boundingRect;
-
-        QTransform transform;
-        transform.scale( sx, sy );
-
-        QRectF rect;
-        if ( scalePens && d_scalablePen )
-        {
-            rect = transform.mapRect( d_boundingRect );
-        }
-        else
-        {
-            rect = transform.mapRect( d_pointRect );
-
-            const double l = qAbs( d_pointRect.left() - d_boundingRect.left() );
-            const double r = qAbs( d_pointRect.right() - d_boundingRect.right() );
-            const double t = qAbs( d_pointRect.top() - d_boundingRect.top() );
-            const double b = qAbs( d_pointRect.bottom() - d_boundingRect.bottom() );
-
-            rect.adjust( -l, -t, r, b );
-        }
-
-        return rect;
-    }
-
-    inline double scaleFactorX( const QRectF& pathRect, 
-        const QRectF &targetRect, bool scalePens ) const
-    {
-        if ( pathRect.width() <= 0.0 )
-            return 0.0;
-
-        const QPointF p0 = d_pointRect.center();
-
-        const double l = qAbs( pathRect.left() - p0.x() );
-        const double r = qAbs( pathRect.right() - p0.x() );
-
-        const double w = 2.0 * qMin( l, r ) 
-            * targetRect.width() / pathRect.width();
-
-        double sx;
-        if ( scalePens && d_scalablePen )
-        {
-            sx = w / d_boundingRect.width();
-        }
-        else
-        {
-            const double pw = qMax( 
-                qAbs( d_boundingRect.left() - d_pointRect.left() ),
-                qAbs( d_boundingRect.right() - d_pointRect.right() ) );
-
-            sx = ( w - 2 * pw ) / d_pointRect.width();
-        }
-
-        return sx;
-    }
-
-    inline double scaleFactorY( const QRectF& pathRect, 
-        const QRectF &targetRect, bool scalePens ) const
-    {
-        if ( pathRect.height() <= 0.0 )
-            return 0.0;
-
-        const QPointF p0 = d_pointRect.center();
-
-        const double t = qAbs( pathRect.top() - p0.y() );
-        const double b = qAbs( pathRect.bottom() - p0.y() );
-
-        const double h = 2.0 * qMin( t, b ) 
-            * targetRect.height() / pathRect.height();
-
-        double sy;
-        if ( scalePens && d_scalablePen )
-        {
-            sy = h / d_boundingRect.height();
-        }
-        else
-        {
-            const double pw = 
-                qMax( qAbs( d_boundingRect.top() - d_pointRect.top() ),
-                qAbs( d_boundingRect.bottom() - d_pointRect.bottom() ) );
-
-            sy = ( h - 2 * pw ) / d_pointRect.height();
-        }
-
-        return sy;
-    }
-
-private:
-    QRectF d_pointRect;
-    QRectF d_boundingRect;
-    bool d_scalablePen;
-};
-
-class QwtGraphic::PrivateData
-{
-public:
-    PrivateData():
-        boundingRect( 0.0, 0.0, -1.0, -1.0 ),
-        pointRect( 0.0, 0.0, -1.0, -1.0 ),
-        initialTransform( NULL )
-    {
-    }
-
-    QSizeF defaultSize;
-    QVector<QwtPainterCommand> commands;
-    QVector<QwtGraphic::PathInfo> pathInfos;
-
-    QRectF boundingRect;
-    QRectF pointRect;
-
-    QwtGraphic::RenderHints renderHints;
-    QTransform *initialTransform;
-};
-
-/*!
-  \brief Constructor
-
-  Initializes a null graphic
-  \sa isNull()
- */
-QwtGraphic::QwtGraphic():
-    QwtNullPaintDevice()
-{
-    setMode( QwtNullPaintDevice::PathMode );
-    d_data = new PrivateData;
-}
-
-/*!
-  \brief Copy constructor
-
-  \param other Source 
-  \sa operator=()
- */
-QwtGraphic::QwtGraphic( const QwtGraphic &other ):
-    QwtNullPaintDevice()
-{
-    setMode( other.mode() );
-    d_data = new PrivateData( *other.d_data );
-}
-
-//! Destructor
-QwtGraphic::~QwtGraphic()
-{
-    delete d_data;
-}
-
-/*!
-  \brief Assignment operator
-
-  \param other Source 
-  \return A reference of this object
- */
-QwtGraphic& QwtGraphic::operator=(const QwtGraphic &other)
-{
-    setMode( other.mode() );
-    *d_data = *other.d_data;
-
-    return *this;
-}
-
-/*!
-  \brief Clear all stored commands 
-  \sa isNull()
- */
-void QwtGraphic::reset() 
-{
-    d_data->commands.clear();
-    d_data->pathInfos.clear();
-
-    d_data->boundingRect = QRectF( 0.0, 0.0, -1.0, -1.0 );
-    d_data->pointRect = QRectF( 0.0, 0.0, -1.0, -1.0 );
-    d_data->defaultSize = QSizeF();
-
-}
-
-/*!
-  \return True, when no painter commands have been stored
-  \sa isEmpty(), commands()
-*/
-bool QwtGraphic::isNull() const
-{
-    return d_data->commands.isEmpty();
-}
-
-/*!
-  \return True, when the bounding rectangle is empty
-  \sa boundingRect(), isNull()
-*/
-bool QwtGraphic::isEmpty() const
-{
-    return d_data->boundingRect.isEmpty();
-}
-
-/*!
-  Toggle an render hint
-
-  \param hint Render hint
-  \param on true/false
-
-  \sa testRenderHint(), RenderHint
-*/
-void QwtGraphic::setRenderHint( RenderHint hint, bool on )
-{
-    if ( on )
-        d_data->renderHints |= hint;
-    else
-        d_data->renderHints &= ~hint;
-}
-
-/*!
-  Test a render hint
-
-  \param hint Render hint
-  \return true/false
-  \sa setRenderHint(), RenderHint
-*/
-bool QwtGraphic::testRenderHint( RenderHint hint ) const
-{
-    return d_data->renderHints.testFlag( hint );
-}
-
-/*!
-  The bounding rectangle is the controlPointRect()
-  extended by the areas needed for rendering the outlines
-  with unscaled pens.
-
-  \return Bounding rectangle of the graphic
-  \sa controlPointRect(), scaledBoundingRect()
- */
-QRectF QwtGraphic::boundingRect() const
-{
-    if ( d_data->boundingRect.width() < 0 )
-        return QRectF();
-
-    return d_data->boundingRect;
-}
-
-/*!
-  The control point rectangle is the bounding rectangle 
-  of all control points of the paths and the target
-  rectangles of the images/pixmaps.
-
-  \return Control point rectangle
-  \sa boundingRect(), scaledBoundingRect()
- */
-QRectF QwtGraphic::controlPointRect() const
-{
-    if ( d_data->pointRect.width() < 0 )
-        return QRectF();
-
-    return d_data->pointRect;
-}
-
-/*!
-  \brief Calculate the target rectangle for scaling the graphic
-
-  \param sx Horizontal scaling factor 
-  \param sy Vertical scaling factor 
-
-  \note In case of paths that are painted with a cosmetic pen 
-        ( see QPen::isCosmetic() ) the target rectangle is different to
-        multiplying the bounding rectangle.
-
-  \return Scaled bounding rectangle
-  \sa boundingRect(), controlPointRect()
- */
-QRectF QwtGraphic::scaledBoundingRect( double sx, double sy ) const
-{
-    if ( sx == 1.0 && sy == 1.0 )
-        return d_data->boundingRect;
-
-    QTransform transform;
-    transform.scale( sx, sy );
-
-    QRectF rect = transform.mapRect( d_data->pointRect );
-
-    for ( int i = 0; i < d_data->pathInfos.size(); i++ )
-    {
-        rect |= d_data->pathInfos[i].scaledBoundingRect( sx, sy, 
-            !d_data->renderHints.testFlag( RenderPensUnscaled ) );
-    }
-
-    return rect;
-}
-
-//! \return Ceiled defaultSize()
-QSize QwtGraphic::sizeMetrics() const
-{
-    const QSizeF sz = defaultSize();
-    return QSize( qCeil( sz.width() ), qCeil( sz.height() ) );
-}
-
-/*!
-  \brief Set a default size
-
-  The default size is used in all methods rendering the graphic,
-  where no size is explicitly specified. Assigning an empty size
-  means, that the default size will be calculated from the bounding 
-  rectangle.
-
-  The default setting is an empty size.
-    
-  \param size Default size
-
-  \sa defaultSize(), boundingRect()
- */
-void QwtGraphic::setDefaultSize( const QSizeF &size )
-{
-    const double w = qMax( qreal( 0.0 ), size.width() );
-    const double h = qMax( qreal( 0.0 ), size.height() );
-
-    d_data->defaultSize = QSizeF( w, h );
-}
-
-/*!
-  \brief Default size
-
-  When a non empty size has been assigned by setDefaultSize() this
-  size will be returned. Otherwise the default size is the size
-  of the bounding rectangle.
-
-  The default size is used in all methods rendering the graphic,
-  where no size is explicitly specified. 
-
-  \return Default size
-  \sa setDefaultSize(), boundingRect()
- */
-QSizeF QwtGraphic::defaultSize() const
-{
-    if ( !d_data->defaultSize.isEmpty() )
-        return d_data->defaultSize;
-
-    return boundingRect().size();
-}
-
-/*!
-  \brief Replay all recorded painter commands
-  \param painter Qt painter
- */
-void QwtGraphic::render( QPainter *painter ) const
-{
-    if ( isNull() )
-        return;
-
-    const int numCommands = d_data->commands.size();
-    const QwtPainterCommand *commands = d_data->commands.constData();
-
-    const QTransform transform = painter->transform();
-
-    painter->save();
-
-    for ( int i = 0; i < numCommands; i++ )
-    {
-        qwtExecCommand( painter, commands[i], 
-            d_data->renderHints, transform, d_data->initialTransform );
-    }
-
-    painter->restore();
-}
-
-/*!
-  \brief Replay all recorded painter commands
-
-  The graphic is scaled to fit into the rectangle
-  of the given size starting at ( 0, 0 ).
-
-  \param painter Qt painter
-  \param size Size for the scaled graphic
-  \param aspectRatioMode Mode how to scale - See Qt::AspectRatioMode
- */
-void QwtGraphic::render( QPainter *painter, const QSizeF &size, 
-    Qt::AspectRatioMode aspectRatioMode ) const
-{
-    const QRectF r( 0.0, 0.0, size.width(), size.height() );
-    render( painter, r, aspectRatioMode );
-}
-
-/*!
-  \brief Replay all recorded painter commands
-
-  The graphic is scaled to fit into the given rectangle
-
-  \param painter Qt painter
-  \param rect Rectangle for the scaled graphic
-  \param aspectRatioMode Mode how to scale - See Qt::AspectRatioMode
- */
-void QwtGraphic::render( QPainter *painter, const QRectF &rect, 
-    Qt::AspectRatioMode aspectRatioMode ) const
-{
-    if ( isEmpty() || rect.isEmpty() )
-        return;
-
-    double sx = 1.0; 
-    double sy = 1.0;
-
-    if ( d_data->pointRect.width() > 0.0 )
-        sx = rect.width() / d_data->pointRect.width();
-
-    if ( d_data->pointRect.height() > 0.0 )
-        sy = rect.height() / d_data->pointRect.height();
-
-    const bool scalePens = 
-        !d_data->renderHints.testFlag( RenderPensUnscaled );
-
-    for ( int i = 0; i < d_data->pathInfos.size(); i++ )
-    {
-        const PathInfo info = d_data->pathInfos[i];
-
-        const double ssx = info.scaleFactorX( 
-            d_data->pointRect, rect, scalePens );
-
-        if ( ssx > 0.0 )
-            sx = qMin( sx, ssx );
-
-        const double ssy = info.scaleFactorY( 
-            d_data->pointRect, rect, scalePens );
-
-        if ( ssy > 0.0 )
-            sy = qMin( sy, ssy );
-    }
-
-    if ( aspectRatioMode == Qt::KeepAspectRatio )
-    {
-        const double s = qMin( sx, sy );
-        sx = s;
-        sy = s;
-    }
-    else if ( aspectRatioMode == Qt::KeepAspectRatioByExpanding )
-    {
-        const double s = qMax( sx, sy );
-        sx = s;
-        sy = s;
-    }
-
-    QTransform tr;
-    tr.translate( rect.center().x() - 0.5 * sx * d_data->pointRect.width(),
-        rect.center().y() - 0.5 * sy * d_data->pointRect.height() );
-    tr.scale( sx, sy );
-    tr.translate( -d_data->pointRect.x(), -d_data->pointRect.y() );
-
-    const QTransform transform = painter->transform();
-    if ( !scalePens && transform.isScaling() )
-    {
-        // we don't want to scale pens according to sx/sy,
-        // but we want to apply the scaling from the 
-        // painter transformation later
-
-        d_data->initialTransform = new QTransform();
-        d_data->initialTransform->scale( transform.m11(), transform.m22() );
-    }
-
-    painter->setTransform( tr, true );
-    render( painter );
-
-    painter->setTransform( transform );
-
-    delete d_data->initialTransform;
-    d_data->initialTransform = NULL;
-}
-
-/*!
-  \brief Replay all recorded painter commands
-
-  The graphic is scaled to the defaultSize() and aligned
-  to a position.
-
-  \param painter Qt painter
-  \param pos Reference point, where to render
-  \param alignment Flags how to align the target rectangle 
-                   to pos.
- */
-void QwtGraphic::render( QPainter *painter, 
-    const QPointF &pos, Qt::Alignment alignment ) const
-{
-    QRectF r( pos, defaultSize() );
-
-    if ( alignment & Qt::AlignLeft )
-    {
-        r.moveLeft( pos.x() );
-    }
-    else if ( alignment & Qt::AlignHCenter )
-    {
-        r.moveCenter( QPointF( pos.x(), r.center().y() ) );
-    }
-    else if ( alignment & Qt::AlignRight )
-    {
-        r.moveRight( pos.x() );
-    }
-
-    if ( alignment & Qt::AlignTop )
-    {
-        r.moveTop( pos.y() );
-    }
-    else if ( alignment & Qt::AlignVCenter )
-    {
-        r.moveCenter( QPointF( r.center().x(), pos.y() ) );
-    }
-    else if ( alignment & Qt::AlignBottom )
-    {
-        r.moveBottom( pos.y() );
-    }
-
-    render( painter, r );
-}
-
-/*!
-  \brief Convert the graphic to a QPixmap
-    
-  All pixels of the pixmap get initialized by Qt::transparent
-  before the graphic is scaled and rendered on it.
-    
-  The size of the pixmap is the default size ( ceiled to integers )
-  of the graphic.
-
-  \return The graphic as pixmap in default size
-  \sa defaultSize(), toImage(), render()
- */ 
-QPixmap QwtGraphic::toPixmap() const
-{
-    if ( isNull() )
-        return QPixmap();
-
-    const QSizeF sz = defaultSize();
-
-    const int w = qCeil( sz.width() );
-    const int h = qCeil( sz.height() );
-
-    QPixmap pixmap( w, h );
-    pixmap.fill( Qt::transparent );
-
-    const QRectF r( 0.0, 0.0, sz.width(), sz.height() );
-
-    QPainter painter( &pixmap );
-    render( &painter, r, Qt::KeepAspectRatio );
-    painter.end();
-
-    return pixmap;
-}
-
-/*!
-  \brief Convert the graphic to a QPixmap
-
-  All pixels of the pixmap get initialized by Qt::transparent
-  before the graphic is scaled and rendered on it.
-
-  \param size Size of the image
-  \param aspectRatioMode Aspect ratio how to scale the graphic
-
-  \return The graphic as pixmap
-  \sa toImage(), render()
- */
-QPixmap QwtGraphic::toPixmap( const QSize &size,
-    Qt::AspectRatioMode aspectRatioMode ) const
-{
-    QPixmap pixmap( size );
-    pixmap.fill( Qt::transparent );
-
-    const QRect r( 0, 0, size.width(), size.height() );
-
-    QPainter painter( &pixmap );
-    render( &painter, r, aspectRatioMode );
-    painter.end();
-
-    return pixmap;
-}
-
-/*!
-  \brief Convert the graphic to a QImage
-
-  All pixels of the image get initialized by 0 ( transparent )
-  before the graphic is scaled and rendered on it.
-
-  The format of the image is QImage::Format_ARGB32_Premultiplied.
-
-  \param size Size of the image
-  \param aspectRatioMode Aspect ratio how to scale the graphic
-
-  \return The graphic as image
-  \sa toPixmap(), render()
- */
-QImage QwtGraphic::toImage( const QSize &size,
-    Qt::AspectRatioMode aspectRatioMode  ) const
-{
-    QImage image( size, QImage::Format_ARGB32_Premultiplied );
-    image.fill( 0 );
-
-    const QRect r( 0, 0, size.width(), size.height() );
-
-    QPainter painter( &image );
-    render( &painter, r, aspectRatioMode );
-    painter.end();
-
-    return image;
-}
-
-/*!
-  \brief Convert the graphic to a QImage
-    
-  All pixels of the image get initialized by 0 ( transparent )
-  before the graphic is scaled and rendered on it.
-
-  The format of the image is QImage::Format_ARGB32_Premultiplied.
-
-  The size of the image is the default size ( ceiled to integers )
-  of the graphic.
-    
-  \return The graphic as image in default size
-  \sa defaultSize(), toPixmap(), render()
- */
-QImage QwtGraphic::toImage() const
-{
-    if ( isNull() )
-        return QImage();
-
-    const QSizeF sz = defaultSize();
-
-    const int w = qCeil( sz.width() );
-    const int h = qCeil( sz.height() );
-
-    QImage image( w, h, QImage::Format_ARGB32 );
-    image.fill( 0 );
-
-    const QRect r( 0, 0, sz.width(), sz.height() );
-
-    QPainter painter( &image );
-    render( &painter, r, Qt::KeepAspectRatio );
-    painter.end();
-
-    return image;
-}
-
-/*!
-  Store a path command in the command list
-
-  \param path Painter path
-  \sa QPaintEngine::drawPath()
-*/
-void QwtGraphic::drawPath( const QPainterPath &path )
-{
-    const QPainter *painter = paintEngine()->painter();
-    if ( painter == NULL )
-        return;
-
-    d_data->commands += QwtPainterCommand( path );
-
-    if ( !path.isEmpty() )
-    {
-        const QPainterPath scaledPath = painter->transform().map( path );
-
-        QRectF pointRect = scaledPath.boundingRect();
-        QRectF boundingRect = pointRect;
-
-        if ( painter->pen().style() != Qt::NoPen 
-            && painter->pen().brush().style() != Qt::NoBrush )
-        {
-            boundingRect = qwtStrokedPathRect( painter, path );
-        }
-
-        updateControlPointRect( pointRect );
-        updateBoundingRect( boundingRect );
-
-        d_data->pathInfos += PathInfo( pointRect, 
-            boundingRect, qwtHasScalablePen( painter ) );
-    }
-}
-
-/*!
-  \brief Store a pixmap command in the command list
-
-  \param rect target rectangle
-  \param pixmap Pixmap to be painted
-  \param subRect Reactangle of the pixmap to be painted
-
-  \sa QPaintEngine::drawPixmap()
-*/
-void QwtGraphic::drawPixmap( const QRectF &rect, 
-    const QPixmap &pixmap, const QRectF &subRect )
-{
-    const QPainter *painter = paintEngine()->painter();
-    if ( painter == NULL )
-        return;
-
-    d_data->commands += QwtPainterCommand( rect, pixmap, subRect );
-
-    const QRectF r = painter->transform().mapRect( rect );
-    updateControlPointRect( r );
-    updateBoundingRect( r );
-}
-
-/*!
-  \brief Store a image command in the command list
-
-  \param rect traget rectangle
-  \param image Image to be painted
-  \param subRect Reactangle of the pixmap to be painted
-  \param flags Image conversion flags
-
-  \sa QPaintEngine::drawImage()
- */
-void QwtGraphic::drawImage( const QRectF &rect, const QImage &image,
-    const QRectF &subRect, Qt::ImageConversionFlags flags)
-{
-    const QPainter *painter = paintEngine()->painter();
-    if ( painter == NULL )
-        return;
-
-    d_data->commands += QwtPainterCommand( rect, image, subRect, flags );
-
-    const QRectF r = painter->transform().mapRect( rect );
-
-    updateControlPointRect( r );
-    updateBoundingRect( r );
-}
-
-/*!
-  \brief Store a state command in the command list
-
-  \param state State to be stored
-  \sa QPaintEngine::updateState()
- */
-void QwtGraphic::updateState( const QPaintEngineState &state)
-{
-    d_data->commands += QwtPainterCommand( state );
-}
-
-void QwtGraphic::updateBoundingRect( const QRectF &rect )
-{
-    QRectF br = rect;
-
-    const QPainter *painter = paintEngine()->painter();
-    if ( painter && painter->hasClipping() )
-    {
-        QRectF cr = painter->clipRegion().boundingRect();
-        cr = painter->transform().mapRect( cr );
-
-        br &= cr;
-    }
-
-    if ( d_data->boundingRect.width() < 0 )
-        d_data->boundingRect = br;
-    else
-        d_data->boundingRect |= br;
-}
-
-void QwtGraphic::updateControlPointRect( const QRectF &rect )
-{
-    if ( d_data->pointRect.width() < 0.0 )
-        d_data->pointRect = rect;
-    else
-        d_data->pointRect |= rect;
-}
-
-/*!
-  \return List of recorded paint commands
-  \sa setCommands()
- */
-const QVector< QwtPainterCommand > &QwtGraphic::commands() const
-{
-    return d_data->commands;
-}
-
-/*!
-  \brief Append paint commands
-
-  \param commands Paint commands
-  \sa commands()
- */
-void QwtGraphic::setCommands( QVector< QwtPainterCommand > &commands )
-{
-    reset();
-
-    const int numCommands = commands.size();
-    if ( numCommands <= 0 )
-        return;
-
-    // to calculate a proper bounding rectangle we don't simply copy 
-    // the commands. 
-
-    const QwtPainterCommand *cmds = commands.constData();
-
-    QPainter painter( this );
-    for ( int i = 0; i < numCommands; i++ )
-        qwtExecCommand( &painter, cmds[i], RenderHints(), QTransform(), NULL );
-
-    painter.end();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_graphic.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_graphic.h
deleted file mode 100644
index 592b8c1793d8e1a76776880eac8b96206c6cddb5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_graphic.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_GRAPHIC_H
-#define QWT_GRAPHIC_H
-
-#include "qwt_global.h"
-#include "qwt_null_paintdevice.h"
-#include <qmetatype.h>
-#include <qimage.h>
-#include <qpixmap.h>
-
-class QwtPainterCommand;
-
-/*!
-    \brief A paint device for scalable graphics
-
-    QwtGraphic is the representation of a graphic that is tailored for
-    scalability. Like QPicture it will be initialized by QPainter
-    operations and can be replayed later to any target paint device.
-
-    While the usual image representations QImage and QPixmap are not
-    scalable Qt offers two paint devices, that might be candidates
-    for representing a vector graphic:
-
-    - QPicture\n
-      Unfortunately QPicture had been forgotten, when Qt4
-      introduced floating point based render engines. Its API
-      is still on integers, what make it unusable for proper scaling.
-
-    - QSvgRenderer/QSvgGenerator\n
-      Unfortunately QSvgRenderer hides to much information about
-      its nodes in internal APIs, that are necessary for proper 
-      layout calculations. Also it is derived from QObject and 
-      can't be copied like QImage/QPixmap.
-
-    QwtGraphic maps all scalable drawing primitives to a QPainterPath
-    and stores them together with the painter state changes 
-    ( pen, brush, transformation ... ) in a list of QwtPaintCommands. 
-    For being a complete QPaintDevice it also stores pixmaps or images, 
-    what is somehow against the idea of the class, because these objects 
-    can't be scaled without a loss in quality.
-
-    The main issue about scaling a QwtGraphic object are the pens used for
-    drawing the outlines of the painter paths. While non cosmetic pens 
-    ( QPen::isCosmetic() ) are scaled with the same ratio as the path, 
-    cosmetic pens have a fixed width. A graphic might have paths with 
-    different pens - cosmetic and non-cosmetic.
-
-    QwtGraphic caches 2 different rectangles:
-
-    - control point rectangle\n
-      The control point rectangle is the bounding rectangle of all
-      control point rectangles of the painter paths, or the target 
-      rectangle of the pixmaps/images.
-
-    - bounding rectangle\n
-      The bounding rectangle extends the control point rectangle by
-      what is needed for rendering the outline with an unscaled pen.
-
-    Because the offset for drawing the outline depends on the shape 
-    of the painter path ( the peak of a triangle is different than the flat side ) 
-    scaling with a fixed aspect ratio always needs to be calculated from the 
-    control point rectangle.
-
-    \sa QwtPainterCommand
- */
-class QWT_EXPORT QwtGraphic: public QwtNullPaintDevice
-{
-public:
-    /*! 
-        Hint how to render a graphic
-        \sa setRenderHint(), testRenderHint()
-     */
-    enum RenderHint
-    {
-        /*!
-           When rendering a QwtGraphic a specific scaling between 
-           the controlPointRect() and the coordinates of the target rectangle
-           is set up internally in render().
-
-           When RenderPensUnscaled is set this specific scaling is applied
-           for the control points only, but not for the pens.
-           All other painter transformations ( set up by application code )
-           are supposed to work like usual.
-
-           \sa render();
-         */
-        RenderPensUnscaled = 0x1
-    };
-
-    /*! 
-        \brief Render hints
-
-        The default setting is to disable all hints
-     */
-    typedef QFlags<RenderHint> RenderHints;
-
-    QwtGraphic();
-    QwtGraphic( const QwtGraphic & );
-
-    virtual ~QwtGraphic();
-
-    QwtGraphic& operator=( const QwtGraphic & );
-
-    void reset();
-
-    bool isNull() const;
-    bool isEmpty() const;
-
-    void render( QPainter * ) const;
-
-    void render( QPainter *, const QSizeF &, 
-            Qt::AspectRatioMode = Qt::IgnoreAspectRatio  ) const;
-
-    void render( QPainter *, const QRectF &, 
-            Qt::AspectRatioMode = Qt::IgnoreAspectRatio  ) const;
-
-    void render( QPainter *, const QPointF &,
-        Qt::Alignment = Qt::AlignTop | Qt::AlignLeft ) const;
-
-    QPixmap toPixmap() const; 
-    QPixmap toPixmap( const QSize &, 
-        Qt::AspectRatioMode = Qt::IgnoreAspectRatio  ) const;
-
-    QImage toImage() const; 
-    QImage toImage( const QSize &, 
-        Qt::AspectRatioMode = Qt::IgnoreAspectRatio  ) const;
-
-    QRectF scaledBoundingRect( double sx, double sy ) const;
-
-    QRectF boundingRect() const;
-    QRectF controlPointRect() const;
-
-    const QVector< QwtPainterCommand > &commands() const;
-    void setCommands( QVector< QwtPainterCommand > & );
-
-    void setDefaultSize( const QSizeF & );
-    QSizeF defaultSize() const;
-    
-    void setRenderHint( RenderHint, bool on = true );
-    bool testRenderHint( RenderHint ) const;
-
-protected:
-    virtual QSize sizeMetrics() const;
-
-    virtual void drawPath( const QPainterPath & );
-
-    virtual void drawPixmap( const QRectF &,
-        const QPixmap &, const QRectF & );
-
-    virtual void drawImage( const QRectF &,
-        const QImage &, const QRectF &, Qt::ImageConversionFlags );
-
-    virtual void updateState( const QPaintEngineState &state );
-
-private:
-    void updateBoundingRect( const QRectF & );
-    void updateControlPointRect( const QRectF & );
-
-    class PathInfo;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtGraphic::RenderHints )
-Q_DECLARE_METATYPE( QwtGraphic )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval.cpp
deleted file mode 100644
index 90f10d9c1c2fa2a53937ac72d08236e40d05507e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval.cpp
+++ /dev/null
@@ -1,354 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_interval.h"
-#include "qwt_math.h"
-#include <qalgorithms.h>
-
-/*!
-  \brief Normalize the limits of the interval
-
-  If maxValue() < minValue() the limits will be inverted.
-  \return Normalized interval
-
-  \sa isValid(), inverted()
-*/
-QwtInterval QwtInterval::normalized() const
-{
-    if ( d_minValue > d_maxValue )
-    {
-        return inverted();
-    }
-    if ( d_minValue == d_maxValue && d_borderFlags == ExcludeMinimum )
-    {
-        return inverted();
-    }
-
-    return *this;
-}
-
-/*!
-  Invert the limits of the interval
-  \return Inverted interval
-  \sa normalized()
-*/
-QwtInterval QwtInterval::inverted() const
-{
-    BorderFlags borderFlags = IncludeBorders;
-    if ( d_borderFlags & ExcludeMinimum )
-        borderFlags |= ExcludeMaximum;
-    if ( d_borderFlags & ExcludeMaximum )
-        borderFlags |= ExcludeMinimum;
-
-    return QwtInterval( d_maxValue, d_minValue, borderFlags );
-}
-
-/*!
-  Test if a value is inside an interval
-
-  \param value Value
-  \return true, if value >= minValue() && value <= maxValue()
-*/
-bool QwtInterval::contains( double value ) const
-{
-    if ( !isValid() )
-        return false;
-
-    if ( value < d_minValue || value > d_maxValue )
-        return false;
-
-    if ( value == d_minValue && d_borderFlags & ExcludeMinimum )
-        return false;
-
-    if ( value == d_maxValue && d_borderFlags & ExcludeMaximum )
-        return false;
-
-    return true;
-}
-
-//! Unite 2 intervals
-QwtInterval QwtInterval::unite( const QwtInterval &other ) const
-{
-    /*
-     If one of the intervals is invalid return the other one.
-     If both are invalid return an invalid default interval
-     */
-    if ( !isValid() )
-    {
-        if ( !other.isValid() )
-            return QwtInterval();
-        else
-            return other;
-    }
-    if ( !other.isValid() )
-        return *this;
-
-    QwtInterval united;
-    BorderFlags flags = IncludeBorders;
-
-    // minimum
-    if ( d_minValue < other.minValue() )
-    {
-        united.setMinValue( d_minValue );
-        flags &= d_borderFlags & ExcludeMinimum;
-    }
-    else if ( other.minValue() < d_minValue )
-    {
-        united.setMinValue( other.minValue() );
-        flags &= other.borderFlags() & ExcludeMinimum;
-    }
-    else // d_minValue == other.minValue()
-    {
-        united.setMinValue( d_minValue );
-        flags &= ( d_borderFlags & other.borderFlags() ) & ExcludeMinimum;
-    }
-
-    // maximum
-    if ( d_maxValue > other.maxValue() )
-    {
-        united.setMaxValue( d_maxValue );
-        flags &= d_borderFlags & ExcludeMaximum;
-    }
-    else if ( other.maxValue() > d_maxValue )
-    {
-        united.setMaxValue( other.maxValue() );
-        flags &= other.borderFlags() & ExcludeMaximum;
-    }
-    else // d_maxValue == other.maxValue() )
-    {
-        united.setMaxValue( d_maxValue );
-        flags &= d_borderFlags & other.borderFlags() & ExcludeMaximum;
-    }
-
-    united.setBorderFlags( flags );
-    return united;
-}
-
-/*! 
-  \brief Intersect 2 intervals
-  
-  \param other Interval to be intersect with
-  \return Intersection
- */
-QwtInterval QwtInterval::intersect( const QwtInterval &other ) const
-{
-    if ( !other.isValid() || !isValid() )
-        return QwtInterval();
-
-    QwtInterval i1 = *this;
-    QwtInterval i2 = other;
-
-    // swap i1/i2, so that the minimum of i1
-    // is smaller then the minimum of i2
-
-    if ( i1.minValue() > i2.minValue() )
-    {
-        qSwap( i1, i2 );
-    }
-    else if ( i1.minValue() == i2.minValue() )
-    {
-        if ( i1.borderFlags() & ExcludeMinimum )
-            qSwap( i1, i2 );
-    }
-
-    if ( i1.maxValue() < i2.minValue() )
-    {
-        return QwtInterval();
-    }
-
-    if ( i1.maxValue() == i2.minValue() )
-    {
-        if ( i1.borderFlags() & ExcludeMaximum ||
-            i2.borderFlags() & ExcludeMinimum )
-        {
-            return QwtInterval();
-        }
-    }
-
-    QwtInterval intersected;
-    BorderFlags flags = IncludeBorders;
-
-    intersected.setMinValue( i2.minValue() );
-    flags |= i2.borderFlags() & ExcludeMinimum;
-
-    if ( i1.maxValue() < i2.maxValue() )
-    {
-        intersected.setMaxValue( i1.maxValue() );
-        flags |= i1.borderFlags() & ExcludeMaximum;
-    }
-    else if ( i2.maxValue() < i1.maxValue() )
-    {
-        intersected.setMaxValue( i2.maxValue() );
-        flags |= i2.borderFlags() & ExcludeMaximum;
-    }
-    else // i1.maxValue() == i2.maxValue()
-    {
-        intersected.setMaxValue( i1.maxValue() );
-        flags |= i1.borderFlags() & i2.borderFlags() & ExcludeMaximum;
-    }
-
-    intersected.setBorderFlags( flags );
-    return intersected;
-}
-
-/*! 
-  \brief Unite this interval with the given interval.
-
-  \param other Interval to be united with
-  \return This interval
- */
-QwtInterval& QwtInterval::operator|=( const QwtInterval &other )
-{
-    *this = *this | other;
-    return *this;
-}
-
-/*! 
-  \brief Intersect this interval with the given interval.
-
-  \param other Interval to be intersected with
-  \return This interval
- */
-QwtInterval& QwtInterval::operator&=( const QwtInterval &other )
-{
-    *this = *this & other;
-    return *this;
-}
-
-/*!
-  \brief Test if two intervals overlap
-
-  \param other Interval
-  \return True, when the intervals are intersecting
-*/
-bool QwtInterval::intersects( const QwtInterval &other ) const
-{
-    if ( !isValid() || !other.isValid() )
-        return false;
-
-    QwtInterval i1 = *this;
-    QwtInterval i2 = other;
-
-    // swap i1/i2, so that the minimum of i1
-    // is smaller then the minimum of i2
-
-    if ( i1.minValue() > i2.minValue() )
-    {
-        qSwap( i1, i2 );
-    }
-    else if ( i1.minValue() == i2.minValue() &&
-              i1.borderFlags() & ExcludeMinimum )
-    {
-        qSwap( i1, i2 );
-    }
-
-    if ( i1.maxValue() > i2.minValue() )
-    {
-        return true;
-    }
-    if ( i1.maxValue() == i2.minValue() )
-    {
-        return !( ( i1.borderFlags() & ExcludeMaximum ) ||
-            ( i2.borderFlags() & ExcludeMinimum ) );
-    }
-    return false;
-}
-
-/*!
-  Adjust the limit that is closer to value, so that value becomes
-  the center of the interval.
-
-  \param value Center
-  \return Interval with value as center
-*/
-QwtInterval QwtInterval::symmetrize( double value ) const
-{
-    if ( !isValid() )
-        return *this;
-
-    const double delta =
-        qMax( qAbs( value - d_maxValue ), qAbs( value - d_minValue ) );
-
-    return QwtInterval( value - delta, value + delta );
-}
-
-/*!
-  Limit the interval, keeping the border modes
-
-  \param lowerBound Lower limit
-  \param upperBound Upper limit
-
-  \return Limited interval
-*/
-QwtInterval QwtInterval::limited( double lowerBound, double upperBound ) const
-{
-    if ( !isValid() || lowerBound > upperBound )
-        return QwtInterval();
-
-    double minValue = qMax( d_minValue, lowerBound );
-    minValue = qMin( minValue, upperBound );
-
-    double maxValue = qMax( d_maxValue, lowerBound );
-    maxValue = qMin( maxValue, upperBound );
-
-    return QwtInterval( minValue, maxValue, d_borderFlags );
-}
-
-/*!
-  \brief Extend the interval
-
-  If value is below minValue(), value becomes the lower limit.
-  If value is above maxValue(), value becomes the upper limit.
-
-  extend() has no effect for invalid intervals
-
-  \param value Value
-  \return extended interval
-
-  \sa isValid()
-*/
-QwtInterval QwtInterval::extend( double value ) const
-{
-    if ( !isValid() )
-        return *this;
-
-    return QwtInterval( qMin( value, d_minValue ),
-        qMax( value, d_maxValue ), d_borderFlags );
-}
-
-/*!
-  Extend an interval
-
-  \param value Value
-  \return Reference of the extended interval
-
-  \sa extend()
-*/
-QwtInterval& QwtInterval::operator|=( double value )
-{
-    *this = *this | value;
-    return *this;
-}
-
-#ifndef QT_NO_DEBUG_STREAM
-
-QDebug operator<<( QDebug debug, const QwtInterval &interval )
-{
-    const int flags = interval.borderFlags();
-
-    debug.nospace() << "QwtInterval("
-        << ( ( flags & QwtInterval::ExcludeMinimum ) ? "]" : "[" )
-        << interval.minValue() << "," << interval.maxValue()
-        << ( ( flags & QwtInterval::ExcludeMaximum ) ? "[" : "]" )
-        << ")";
-
-    return debug.space();
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval.h
deleted file mode 100644
index b55e434068d49f0ce53dc70806ee0dcc2ed2625c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval.h
+++ /dev/null
@@ -1,320 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_INTERVAL_H
-#define QWT_INTERVAL_H
-
-#include "qwt_global.h"
-#include <qmetatype.h>
-
-#ifndef QT_NO_DEBUG_STREAM
-#include <qdebug.h>
-#endif
-
-/*!
-  \brief A class representing an interval
-
-  The interval is represented by 2 doubles, the lower and the upper limit.
-*/
-
-class QWT_EXPORT QwtInterval
-{
-public:
-    /*!
-      Flag indicating if a border is included or excluded 
-      \sa setBorderFlags(), borderFlags()
-    */
-    enum BorderFlag
-    {
-        //! Min/Max values are inside the interval
-        IncludeBorders = 0x00,
-
-        //! Min value is not included in the interval
-        ExcludeMinimum = 0x01,
-
-        //! Max value is not included in the interval
-        ExcludeMaximum = 0x02,
-
-        //! Min/Max values are not included in the interval
-        ExcludeBorders = ExcludeMinimum | ExcludeMaximum
-    };
-
-    //! Border flags
-    typedef QFlags<BorderFlag> BorderFlags;
-
-    QwtInterval();
-    QwtInterval( double minValue, double maxValue,
-        BorderFlags = IncludeBorders );
-
-    void setInterval( double minValue, double maxValue,
-        BorderFlags = IncludeBorders );
-
-    QwtInterval normalized() const;
-    QwtInterval inverted() const;
-    QwtInterval limited( double minValue, double maxValue ) const;
-
-    bool operator==( const QwtInterval & ) const;
-    bool operator!=( const QwtInterval & ) const;
-
-    void setBorderFlags( BorderFlags );
-    BorderFlags borderFlags() const;
-
-    double minValue() const;
-    double maxValue() const;
-
-    double width() const;
-
-    void setMinValue( double );
-    void setMaxValue( double );
-
-    bool contains( double value ) const;
-
-    bool intersects( const QwtInterval & ) const;
-    QwtInterval intersect( const QwtInterval & ) const;
-    QwtInterval unite( const QwtInterval & ) const;
-
-    QwtInterval operator|( const QwtInterval & ) const;
-    QwtInterval operator&( const QwtInterval & ) const;
-
-    QwtInterval &operator|=( const QwtInterval & );
-    QwtInterval &operator&=( const QwtInterval & );
-
-    QwtInterval extend( double value ) const;
-    QwtInterval operator|( double ) const;
-    QwtInterval &operator|=( double );
-
-    bool isValid() const;
-    bool isNull() const;
-    void invalidate();
-
-    QwtInterval symmetrize( double value ) const;
-
-private:
-    double d_minValue;
-    double d_maxValue;
-    BorderFlags d_borderFlags;
-};
-
-Q_DECLARE_TYPEINFO(QwtInterval, Q_MOVABLE_TYPE);
-
-/*!
-  \brief Default Constructor
-
-  Creates an invalid interval [0.0, -1.0]
-  \sa setInterval(), isValid()
-*/
-inline QwtInterval::QwtInterval():
-    d_minValue( 0.0 ),
-    d_maxValue( -1.0 ),
-    d_borderFlags( IncludeBorders )
-{
-}
-
-/*!
-   Constructor
-
-   Build an interval with from min/max values
-
-   \param minValue Minimum value
-   \param maxValue Maximum value
-   \param borderFlags Include/Exclude borders
-*/
-inline QwtInterval::QwtInterval(
-        double minValue, double maxValue, BorderFlags borderFlags ):
-    d_minValue( minValue ),
-    d_maxValue( maxValue ),
-    d_borderFlags( borderFlags )
-{
-}
-
-/*!
-   Assign the limits of the interval
-
-   \param minValue Minimum value
-   \param maxValue Maximum value
-   \param borderFlags Include/Exclude borders
-*/
-inline void QwtInterval::setInterval(
-    double minValue, double maxValue, BorderFlags borderFlags )
-{
-    d_minValue = minValue;
-    d_maxValue = maxValue;
-    d_borderFlags = borderFlags;
-}
-
-/*!
-   Change the border flags
-
-   \param borderFlags Or'd BorderMode flags
-   \sa borderFlags()
-*/
-inline void QwtInterval::setBorderFlags( BorderFlags borderFlags )
-{
-    d_borderFlags = borderFlags;
-}
-
-/*!
-   \return Border flags
-   \sa setBorderFlags()
-*/
-inline QwtInterval::BorderFlags QwtInterval::borderFlags() const
-{
-    return d_borderFlags;
-}
-
-/*!
-   Assign the lower limit of the interval
-
-   \param minValue Minimum value
-*/
-inline void QwtInterval::setMinValue( double minValue )
-{
-    d_minValue = minValue;
-}
-
-/*!
-   Assign the upper limit of the interval
-
-   \param maxValue Maximum value
-*/
-inline void QwtInterval::setMaxValue( double maxValue )
-{
-    d_maxValue = maxValue;
-}
-
-//! \return Lower limit of the interval
-inline double QwtInterval::minValue() const
-{
-    return d_minValue;
-}
-
-//! \return Upper limit of the interval
-inline double QwtInterval::maxValue() const
-{
-    return d_maxValue;
-}
-
-/*!
-   A interval is valid when minValue() <= maxValue().
-   In case of QwtInterval::ExcludeBorders it is true
-   when minValue() < maxValue()
-
-   \return True, when the interval is valid
-*/
-inline bool QwtInterval::isValid() const
-{
-    if ( ( d_borderFlags & ExcludeBorders ) == 0 )
-        return d_minValue <= d_maxValue;
-    else
-        return d_minValue < d_maxValue;
-}
-
-/*!
-   \brief Return the width of an interval
-
-   The width of invalid intervals is 0.0, otherwise the result is
-   maxValue() - minValue().
-
-   \return Interval width
-   \sa isValid()
-*/
-inline double QwtInterval::width() const
-{
-    return isValid() ? ( d_maxValue - d_minValue ) : 0.0;
-}
-
-/*!
-   \brief Intersection of two intervals
- 
-   \param other Interval to intersect with
-   \return Intersection of this and other
-
-   \sa intersect()
-*/
-inline QwtInterval QwtInterval::operator&(
-    const QwtInterval &other ) const
-{
-    return intersect( other );
-}
-
-/*!
-   Union of two intervals
-
-   \param other Interval to unite with
-   \return Union of this and other
-
-   \sa unite()
-*/
-inline QwtInterval QwtInterval::operator|(
-    const QwtInterval &other ) const
-{
-    return unite( other );
-}
-
-/*! 
-   \brief Compare two intervals
-
-   \param other Interval to compare with
-   \return True, when this and other are equal
-*/
-inline bool QwtInterval::operator==( const QwtInterval &other ) const
-{
-    return ( d_minValue == other.d_minValue ) &&
-           ( d_maxValue == other.d_maxValue ) &&
-           ( d_borderFlags == other.d_borderFlags );
-}
-/*! 
-   \brief Compare two intervals
-
-   \param other Interval to compare with
-   \return True, when this and other are not equal
-*/
-inline bool QwtInterval::operator!=( const QwtInterval &other ) const
-{
-    return ( !( *this == other ) );
-}
-
-/*!
-   Extend an interval
-
-   \param value Value
-   \return Extended interval
-   \sa extend()
-*/
-inline QwtInterval QwtInterval::operator|( double value ) const
-{
-    return extend( value );
-}
-
-//! \return true, if isValid() && (minValue() >= maxValue())
-inline bool QwtInterval::isNull() const
-{
-    return isValid() && d_minValue >= d_maxValue;
-}
-
-/*!
-  Invalidate the interval
-
-  The limits are set to interval [0.0, -1.0]
-  \sa isValid()
-*/
-inline void QwtInterval::invalidate()
-{
-    d_minValue = 0.0;
-    d_maxValue = -1.0;
-}
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtInterval::BorderFlags )
-Q_DECLARE_METATYPE( QwtInterval )
-
-#ifndef QT_NO_DEBUG_STREAM
-QWT_EXPORT QDebug operator<<( QDebug, const QwtInterval & );
-#endif
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval_symbol.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval_symbol.cpp
deleted file mode 100644
index 9b782cf851a5b6df5000c04da9f3418f193b1ca5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval_symbol.cpp
+++ /dev/null
@@ -1,319 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_interval_symbol.h"
-#include "qwt_painter.h"
-#include "qwt_math.h"
-#include <qpainter.h>
-
-#if QT_VERSION < 0x040601
-#define qAtan2(y, x) ::atan2(y, x)
-#define qFastSin(x) qSin(x)
-#define qFastCos(x) qCos(x)
-#endif
-
-class QwtIntervalSymbol::PrivateData
-{
-public:
-    PrivateData():
-        style( QwtIntervalSymbol::NoSymbol ),
-        width( 6 )
-    {
-    }
-
-    bool operator==( const PrivateData &other ) const
-    {
-        return ( style == other.style )
-            && ( width == other.width )
-            && ( brush == other.brush )
-            && ( pen == other.pen );
-    }
-
-    QwtIntervalSymbol::Style style;
-    int width;
-
-    QPen pen;
-    QBrush brush;
-};
-
-/*!
-  Constructor
-
-  \param style Style of the symbol
-  \sa setStyle(), style(), Style
-*/
-QwtIntervalSymbol::QwtIntervalSymbol( Style style )
-{
-    d_data = new PrivateData();
-    d_data->style = style;
-}
-
-//! Copy constructor
-QwtIntervalSymbol::QwtIntervalSymbol( const QwtIntervalSymbol &other )
-{
-    d_data = new PrivateData();
-    *d_data = *other.d_data;
-}
-
-//! Destructor
-QwtIntervalSymbol::~QwtIntervalSymbol()
-{
-    delete d_data;
-}
-
-//! \brief Assignment operator
-QwtIntervalSymbol &QwtIntervalSymbol::operator=( 
-    const QwtIntervalSymbol &other )
-{
-    *d_data = *other.d_data;
-    return *this;
-}
-
-//! \brief Compare two symbols
-bool QwtIntervalSymbol::operator==( 
-    const QwtIntervalSymbol &other ) const
-{
-    return *d_data == *other.d_data;
-}
-
-//! \brief Compare two symbols
-bool QwtIntervalSymbol::operator!=( 
-    const QwtIntervalSymbol &other ) const
-{
-    return !( *d_data == *other.d_data );
-}
-
-/*!
-  Specify the symbol style
-
-  \param style Style
-  \sa style(), Style
-*/
-void QwtIntervalSymbol::setStyle( Style style )
-{
-    d_data->style = style;
-}
-
-/*!
-  \return Current symbol style
-  \sa setStyle()
-*/
-QwtIntervalSymbol::Style QwtIntervalSymbol::style() const
-{
-    return d_data->style;
-}
-
-/*!
-  Specify the width of the symbol
-  It is used depending on the style.
-
-  \param width Width
-  \sa width(), setStyle()
-*/
-void QwtIntervalSymbol::setWidth( int width )
-{
-    d_data->width = width;
-}
-
-/*!
-  \return Width of the symbol.
-  \sa setWidth(), setStyle()
-*/
-int QwtIntervalSymbol::width() const
-{
-    return d_data->width;
-}
-
-/*!
-  \brief Assign a brush
-
-  The brush is used for the Box style.
-
-  \param brush Brush
-  \sa brush()
-*/
-void QwtIntervalSymbol::setBrush( const QBrush &brush )
-{
-    d_data->brush = brush;
-}
-
-/*!
-  \return Brush
-  \sa setBrush()
-*/
-const QBrush& QwtIntervalSymbol::brush() const
-{
-    return d_data->brush;
-}
-
-/*! 
-  Build and assign a pen
-    
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-    
-  \sa pen(), brush()
- */ 
-void QwtIntervalSymbol::setPen( const QColor &color, 
-    qreal width, Qt::PenStyle style )
-{   
-    setPen( QPen( color, width, style ) );
-}
-
-/*!
-  Assign a pen
-
-  \param pen Pen
-  \sa pen(), setBrush()
-*/
-void QwtIntervalSymbol::setPen( const QPen &pen )
-{
-    d_data->pen = pen;
-}
-
-/*!
-  \return Pen
-  \sa setPen(), brush()
-*/
-const QPen& QwtIntervalSymbol::pen() const
-{
-    return d_data->pen;
-}
-
-/*!
-  Draw a symbol depending on its style
-
-  \param painter Painter
-  \param orientation Orientation
-  \param from Start point of the interval in target device coordinates
-  \param to End point of the interval in target device coordinates
-
-  \sa setStyle()
-*/
-void QwtIntervalSymbol::draw( QPainter *painter, Qt::Orientation orientation,
-    const QPointF &from, const QPointF &to ) const
-{
-    const qreal pw = qMax( painter->pen().widthF(), qreal( 1.0 ) );
-
-    QPointF p1 = from;
-    QPointF p2 = to;
-    if ( QwtPainter::roundingAlignment( painter ) )
-    {
-        p1 = p1.toPoint();
-        p2 = p2.toPoint();
-    }
-
-    switch ( d_data->style )
-    {
-        case QwtIntervalSymbol::Bar:
-        {
-            QwtPainter::drawLine( painter, p1, p2 );
-            if ( d_data->width > pw )
-            {
-                if ( ( orientation == Qt::Horizontal ) 
-                    && ( p1.y() == p2.y() ) )
-                {
-                    const double sw = d_data->width;
-
-                    const double y = p1.y() - sw / 2;
-                    QwtPainter::drawLine( painter,
-                        p1.x(), y, p1.x(), y + sw );
-                    QwtPainter::drawLine( painter,
-                        p2.x(), y, p2.x(), y + sw );
-                }
-                else if ( ( orientation == Qt::Vertical ) 
-                    && ( p1.x() == p2.x() ) )
-                {
-                    const double sw = d_data->width;
-
-                    const double x = p1.x() - sw / 2;
-                    QwtPainter::drawLine( painter,
-                        x, p1.y(), x + sw, p1.y() );
-                    QwtPainter::drawLine( painter,
-                        x, p2.y(), x + sw, p2.y() );
-                }
-                else
-                {
-                    const double sw = d_data->width;
-
-                    const double dx = p2.x() - p1.x();
-                    const double dy = p2.y() - p1.y();
-                    const double angle = qAtan2( dy, dx ) + M_PI_2;
-                    double dw2 = sw / 2.0;
-
-                    const double cx = qFastCos( angle ) * dw2;
-                    const double sy = qFastSin( angle ) * dw2;
-
-                    QwtPainter::drawLine( painter,
-                        p1.x() - cx, p1.y() - sy,
-                        p1.x() + cx, p1.y() + sy );
-                    QwtPainter::drawLine( painter,
-                        p2.x() - cx, p2.y() - sy,
-                        p2.x() + cx, p2.y() + sy );
-                }
-            }
-            break;
-        }
-        case QwtIntervalSymbol::Box:
-        {
-            if ( d_data->width <= pw )
-            {
-                QwtPainter::drawLine( painter, p1, p2 );
-            }
-            else
-            {
-                if ( ( orientation == Qt::Horizontal ) 
-                    && ( p1.y() == p2.y() ) )
-                {
-                    const double sw = d_data->width;
-
-                    const double y = p1.y() - d_data->width / 2;
-                    QwtPainter::drawRect( painter,
-                        p1.x(), y, p2.x() - p1.x(),  sw );
-                }
-                else if ( ( orientation == Qt::Vertical )
-                    && ( p1.x() == p2.x() ) )
-                {
-                    const double sw = d_data->width;
-
-                    const double x = p1.x() - d_data->width / 2;
-                    QwtPainter::drawRect( painter,
-                        x, p1.y(), sw, p2.y() - p1.y() );
-                }
-                else
-                {
-                    const double sw = d_data->width;
-
-                    const double dx = p2.x() - p1.x();
-                    const double dy = p2.y() - p1.y();
-                    const double angle = qAtan2( dy, dx ) + M_PI_2;
-                    double dw2 = sw / 2.0;
-
-                    const double cx = qFastCos( angle ) * dw2;
-                    const double sy = qFastSin( angle ) * dw2;
-
-                    QPolygonF polygon;
-                    polygon += QPointF( p1.x() - cx, p1.y() - sy );
-                    polygon += QPointF( p1.x() + cx, p1.y() + sy );
-                    polygon += QPointF( p2.x() + cx, p2.y() + sy );
-                    polygon += QPointF( p2.x() - cx, p2.y() - sy );
-
-                    QwtPainter::drawPolygon( painter, polygon );
-                }
-            }
-            break;
-        }
-        default:;
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval_symbol.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval_symbol.h
deleted file mode 100644
index c233213b6ef854a42532769b9d4db19a455644a3..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_interval_symbol.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_INTERVAL_SYMBOL_H
-#define QWT_INTERVAL_SYMBOL_H
-
-#include "qwt_global.h"
-#include <qpen.h>
-#include <qsize.h>
-
-class QPainter;
-class QRect;
-class QPointF;
-
-/*!
-  \brief A drawing primitive for displaying an interval like an error bar
-
-  \sa QwtPlotIntervalCurve
-*/
-class QWT_EXPORT QwtIntervalSymbol
-{
-public:
-    //! Symbol style
-    enum Style
-    {
-        //! No Style. The symbol cannot be drawn.
-        NoSymbol = -1,
-
-        /*!
-          The symbol displays a line with caps at the beginning/end.
-          The size of the caps depends on the symbol width().
-         */
-        Bar,
-
-        /*!
-          The symbol displays a plain rectangle using pen() and brush().
-          The size of the rectangle depends on the translated interval and
-          the width(),
-         */
-        Box,
-
-        /*!
-          Styles >= UserSymbol are reserved for derived
-          classes of QwtIntervalSymbol that overload draw() with
-          additional application specific symbol types.
-         */
-        UserSymbol = 1000
-    };
-
-public:
-    QwtIntervalSymbol( Style = NoSymbol );
-    QwtIntervalSymbol( const QwtIntervalSymbol & );
-    virtual ~QwtIntervalSymbol();
-
-    QwtIntervalSymbol &operator=( const QwtIntervalSymbol & );
-    bool operator==( const QwtIntervalSymbol & ) const;
-    bool operator!=( const QwtIntervalSymbol & ) const;
-
-    void setWidth( int );
-    int width() const;
-
-    void setBrush( const QBrush& b );
-    const QBrush& brush() const;
-
-    void setPen( const QColor &, qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setPen( const QPen & );
-    const QPen& pen() const;
-
-    void setStyle( Style );
-    Style style() const;
-
-    virtual void draw( QPainter *, Qt::Orientation,
-        const QPointF& from, const QPointF& to ) const;
-
-private:
-
-    class PrivateData;
-    PrivateData* d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_knob.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_knob.cpp
deleted file mode 100644
index f9bde9a10d238880b36fb520274b4bfcb604f833..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_knob.cpp
+++ /dev/null
@@ -1,855 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_knob.h"
-#include "qwt_round_scale_draw.h"
-#include "qwt_math.h"
-#include "qwt_painter.h"
-#include "qwt_scale_map.h"
-#include <qpainter.h>
-#include <qpalette.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-#include <qevent.h>
-#include <qmath.h>
-#include <qapplication.h>
-
-#if QT_VERSION < 0x040601
-#define qAtan2(y, x) ::atan2(y, x)
-#define qFabs(x) ::fabs(x)
-#define qFastCos(x) qCos(x)
-#define qFastSin(x) qSin(x)
-#endif
-
-static QSize qwtKnobSizeHint( const QwtKnob *knob, int min )
-{
-    int knobWidth = knob->knobWidth();
-    if ( knobWidth <= 0 )
-        knobWidth = qMax( 3 * knob->markerSize(), min );
-
-    // Add the scale radial thickness to the knobWidth
-    const int extent = qCeil( knob->scaleDraw()->extent( knob->font() ) );
-    const int d = 2 * ( extent + 4 ) + knobWidth;
-
-    int left, right, top, bottom;
-    knob->getContentsMargins( &left, &top, &right, &bottom );
-
-    return QSize( d + left + right, d + top + bottom );
-}
-
-static inline double qwtToScaleAngle( double angle )
-{
-    // the map is counter clockwise with the origin
-    // at 90° using angles from -180° -> 180°
-
-    double a = 90.0 - angle;
-    if ( a <= -180.0 )
-        a += 360.0;
-    else if ( a >= 180.0 )
-        a -= 360.0;
-
-    return a;
-}
-
-static double qwtToDegrees( double value )
-{
-    return qwtNormalizeDegrees( 90.0 - value );
-}
-
-class QwtKnob::PrivateData
-{
-public:
-    PrivateData():
-        knobStyle( QwtKnob::Raised ),
-        markerStyle( QwtKnob::Notch ),
-        borderWidth( 2 ),
-        borderDist( 4 ),
-        scaleDist( 4 ),
-        maxScaleTicks( 11 ),
-        knobWidth( 0 ),
-        alignment( Qt::AlignCenter ),
-        markerSize( 8 ),
-        totalAngle( 270.0 ),
-        mouseOffset( 0.0 )
-    {
-    }
-
-    QwtKnob::KnobStyle knobStyle;
-    QwtKnob::MarkerStyle markerStyle;
-
-    int borderWidth;
-    int borderDist;
-    int scaleDist;
-    int maxScaleTicks;
-    int knobWidth;
-    Qt::Alignment alignment;
-    int markerSize;
-
-    double totalAngle;
-
-    double mouseOffset;
-};
-
-/*!
-  \brief Constructor
-
-  Construct a knob with an angle of 270°. The style is
-  QwtKnob::Raised and the marker style is QwtKnob::Notch.
-  The width of the knob is set to 50 pixels.
-
-  \param parent Parent widget
-
-  \sa setTotalAngle()
-*/
-QwtKnob::QwtKnob( QWidget* parent ):
-    QwtAbstractSlider( parent )
-{
-    d_data = new PrivateData;
-
-    setScaleDraw( new QwtRoundScaleDraw() );
-
-    setTotalAngle( 270.0 );
-
-    setScale( 0.0, 10.0 );
-    setValue( 0.0 );
-
-    setSizePolicy( QSizePolicy::MinimumExpanding, 
-        QSizePolicy::MinimumExpanding );
-}
-
-//! Destructor
-QwtKnob::~QwtKnob()
-{
-    delete d_data;
-}
-
-/*!
-  \brief Set the knob type 
-
-  \param knobStyle Knob type
-  \sa knobStyle(), setBorderWidth()
-*/
-void QwtKnob::setKnobStyle( KnobStyle knobStyle )
-{
-    if ( d_data->knobStyle != knobStyle )
-    {
-        d_data->knobStyle = knobStyle;
-        update();
-    }
-}
-
-/*!
-    \return Marker type of the knob
-    \sa setKnobStyle(), setBorderWidth()
-*/
-QwtKnob::KnobStyle QwtKnob::knobStyle() const
-{
-    return d_data->knobStyle;
-}
-
-/*!
-  \brief Set the marker type of the knob
-
-  \param markerStyle Marker type
-  \sa markerStyle(), setMarkerSize()
-*/
-void QwtKnob::setMarkerStyle( MarkerStyle markerStyle )
-{
-    if ( d_data->markerStyle != markerStyle )
-    {
-        d_data->markerStyle = markerStyle;
-        update();
-    }
-}
-
-/*!
-  \return Marker type of the knob
-  \sa setMarkerStyle(), setMarkerSize()
-*/
-QwtKnob::MarkerStyle QwtKnob::markerStyle() const
-{
-    return d_data->markerStyle;
-}
-
-/*!
-  \brief Set the total angle by which the knob can be turned
-  \param angle Angle in degrees.
-
-  The angle has to be between [10, 360] degrees. Angles above
-  360 ( so that the knob can be turned several times around its axis )
-  have to be set using setNumTurns().
-
-  The default angle is 270 degrees. 
-
-  \sa totalAngle(), setNumTurns()
-*/
-void QwtKnob::setTotalAngle ( double angle )
-{
-    angle = qBound( 10.0, angle, 360.0 );
-
-    if ( angle != d_data->totalAngle )
-    {
-        d_data->totalAngle = angle;
-
-        scaleDraw()->setAngleRange( -0.5 * d_data->totalAngle,
-            0.5 * d_data->totalAngle );
-
-        updateGeometry();
-        update();
-    }
-}
-
-/*! 
-  \return the total angle
-  \sa setTotalAngle(), setNumTurns(), numTurns()
- */
-double QwtKnob::totalAngle() const
-{
-    return d_data->totalAngle;
-}
-
-/*!
-  \brief Set the number of turns
-
-  When numTurns > 1 the knob can be turned several times around its axis
-  - otherwise the total angle is floored to 360°.
-
-  \sa numTurns(), totalAngle(), setTotalAngle()
-*/
-  
-void QwtKnob::setNumTurns( int numTurns )
-{
-    numTurns = qMax( numTurns, 1 );
-
-    if ( numTurns == 1 && d_data->totalAngle <= 360.0 )
-        return;
-
-    const double angle = numTurns * 360.0;
-    if ( angle != d_data->totalAngle )
-    {
-        d_data->totalAngle = angle;
-
-        scaleDraw()->setAngleRange( -0.5 * d_data->totalAngle,
-            0.5 * d_data->totalAngle );
-
-        updateGeometry();
-        update();
-    }
-}
-
-/*!
-  \return Number of turns. 
-
-  When the total angle is below 360° numTurns() is ceiled to 1.
-  \sa setNumTurns(), setTotalAngle(), totalAngle()
- */
-int QwtKnob::numTurns() const
-{
-    return qCeil( d_data->totalAngle / 360.0 );
-}
-
-/*!
-   Change the scale draw of the knob
-
-   For changing the labels of the scales, it
-   is necessary to derive from QwtRoundScaleDraw and
-   overload QwtRoundScaleDraw::label().
-
-   \sa scaleDraw()
-*/
-void QwtKnob::setScaleDraw( QwtRoundScaleDraw *scaleDraw )
-{
-    setAbstractScaleDraw( scaleDraw );
-    setTotalAngle( d_data->totalAngle );
-
-    updateGeometry();
-    update();
-}
-
-/*!
-   \return the scale draw of the knob
-   \sa setScaleDraw()
-*/
-const QwtRoundScaleDraw *QwtKnob::scaleDraw() const
-{
-    return static_cast<const QwtRoundScaleDraw *>( abstractScaleDraw() );
-}
-
-/*!
-   \return the scale draw of the knob
-   \sa setScaleDraw()
-*/
-QwtRoundScaleDraw *QwtKnob::scaleDraw()
-{
-    return static_cast<QwtRoundScaleDraw *>( abstractScaleDraw() );
-}
-
-/*!
-  Calculate the bounding rectangle of the knob without the scale
-
-  \return Bounding rectangle of the knob
-  \sa knobWidth(), alignment(), QWidget::contentsRect()
- */
-QRect QwtKnob::knobRect() const
-{
-    const QRect cr = contentsRect();
-
-    const int extent = qCeil( scaleDraw()->extent( font() ) );
-    const int d = extent + d_data->scaleDist;
-
-    int w = d_data->knobWidth;
-    if ( w <= 0 )
-    {
-        const int dim = qMin( cr.width(), cr.height() );
-
-        w = dim - 2 * ( d );
-        w = qMax( 0, w );
-    }
-
-    QRect r( 0, 0, w, w );
-
-    if ( d_data->alignment & Qt::AlignLeft )
-    {
-        r.moveLeft( cr.left() + d );
-    }
-    else if ( d_data->alignment & Qt::AlignRight )
-    {
-        r.moveRight( cr.right() - d );
-    }
-    else
-    {
-        r.moveCenter( QPoint( cr.center().x(), r.center().y() ) );
-    }
-
-    if ( d_data->alignment & Qt::AlignTop )
-    {
-        r.moveTop( cr.top() + d );
-    }
-    else if ( d_data->alignment & Qt::AlignBottom )
-    {
-        r.moveBottom( cr.bottom() - d );
-    }
-    else 
-    {
-        r.moveCenter( QPoint( r.center().x(), cr.center().y() ) );
-    }
-
-    return r;
-}
-
-/*!
-  \brief Determine what to do when the user presses a mouse button.
-
-  \param pos Mouse position
-
-  \retval True, when pos is inside the circle of the knob.
-  \sa scrolledTo()
-*/
-bool QwtKnob::isScrollPosition( const QPoint &pos ) const
-{
-    const QRect kr = knobRect();
-
-    const QRegion region( kr, QRegion::Ellipse );
-    if ( region.contains( pos ) && ( pos != kr.center() ) )
-    {
-        const double angle = QLineF( kr.center(), pos ).angle();
-        const double valueAngle = qwtToDegrees( scaleMap().transform( value() ) );
-
-        d_data->mouseOffset = qwtNormalizeDegrees( angle - valueAngle );
-
-        return true;
-    }
-
-    return false;
-}
-
-/*!
-  \brief Determine the value for a new position of the mouse
-
-  \param pos Mouse position
-
-  \return Value for the mouse position
-  \sa isScrollPosition()
-*/
-double QwtKnob::scrolledTo( const QPoint &pos ) const
-{
-    double angle = QLineF( rect().center(), pos ).angle();
-    angle = qwtNormalizeDegrees( angle - d_data->mouseOffset );
-
-    if ( scaleMap().pDist() > 360.0 )
-    {
-        angle = qwtToDegrees( angle );
-
-        const double v = scaleMap().transform( value() );
-
-        int numTurns = qFloor( ( v - scaleMap().p1() ) / 360.0 );
-
-        double valueAngle = qwtNormalizeDegrees( v );
-        if ( qAbs( valueAngle - angle ) > 180.0 )
-        {
-            numTurns += ( angle > valueAngle ) ? -1 : 1;
-        }
-
-        angle += scaleMap().p1() + numTurns * 360.0;
-
-        if ( !wrapping() )
-        {
-            const double boundedAngle = 
-                qBound( scaleMap().p1(), angle, scaleMap().p2() );
-
-            d_data->mouseOffset += ( boundedAngle - angle );
-            angle = boundedAngle;
-        }
-    }
-    else
-    {
-        angle = qwtToScaleAngle( angle );
-
-        double boundedAngle = qBound( scaleMap().p1(), angle, scaleMap().p2() );
-
-        if ( !wrapping() )
-        {
-            const double currentAngle = scaleMap().transform( value() );
-
-            if ( ( currentAngle > 90.0 ) && ( boundedAngle < -90.0 ) )
-                boundedAngle = scaleMap().p2();
-            else if ( ( currentAngle < -90.0 ) && ( boundedAngle > 90.0 ) )
-                boundedAngle = scaleMap().p1();
-
-            d_data->mouseOffset += ( boundedAngle - angle );
-        }
-
-        angle = boundedAngle;
-    }
-
-    return scaleMap().invTransform( angle );
-}
-
-/*! 
-  Handle QEvent::StyleChange and QEvent::FontChange;
-  \param event Change event
-*/
-void QwtKnob::changeEvent( QEvent *event )
-{
-    switch( event->type() )
-    {
-        case QEvent::StyleChange:
-        case QEvent::FontChange:
-        {
-            updateGeometry();
-            update();
-            break;
-        }
-        default:
-            break;
-    }
-}
-
-/*!
-  Repaint the knob
-  \param event Paint event
-*/
-void QwtKnob::paintEvent( QPaintEvent *event )
-{
-    const QRectF knobRect = this->knobRect();
-
-    QPainter painter( this );
-    painter.setClipRegion( event->region() );
-
-    QStyleOption opt;
-    opt.init(this);
-    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
-
-    painter.setRenderHint( QPainter::Antialiasing, true );
-
-    if ( !knobRect.contains( event->region().boundingRect() ) )
-    {
-        scaleDraw()->setRadius( 0.5 * knobRect.width() + d_data->scaleDist );
-        scaleDraw()->moveCenter( knobRect.center() );
-
-        scaleDraw()->draw( &painter, palette() );
-    }
-
-    drawKnob( &painter, knobRect );
-
-    drawMarker( &painter, knobRect, 
-        qwtNormalizeDegrees( scaleMap().transform( value() ) ) );
-
-    painter.setRenderHint( QPainter::Antialiasing, false );
-
-    if ( hasFocus() )
-        drawFocusIndicator( &painter );
-}
-
-/*!
-  \brief Draw the knob
-
-  \param painter painter
-  \param knobRect Bounding rectangle of the knob (without scale)
-*/
-void QwtKnob::drawKnob( QPainter *painter, const QRectF &knobRect ) const
-{
-    double dim = qMin( knobRect.width(), knobRect.height() );
-    dim -= d_data->borderWidth * 0.5;
-
-    QRectF aRect( 0, 0, dim, dim );
-    aRect.moveCenter( knobRect.center() );
-
-    QPen pen( Qt::NoPen );
-    if ( d_data->borderWidth > 0 )
-    {
-        QColor c1 = palette().color( QPalette::Light );
-        QColor c2 = palette().color( QPalette::Dark );
-
-        QLinearGradient gradient( aRect.topLeft(), aRect.bottomRight() );
-        gradient.setColorAt( 0.0, c1 );
-        gradient.setColorAt( 0.3, c1 );
-        gradient.setColorAt( 0.7, c2 );
-        gradient.setColorAt( 1.0, c2 );
-
-        pen = QPen( gradient, d_data->borderWidth ); 
-    }
-
-    QBrush brush;
-    switch( d_data->knobStyle )
-    {
-        case QwtKnob::Raised:
-        {
-            double off = 0.3 * knobRect.width();
-            QRadialGradient gradient( knobRect.center(),
-                knobRect.width(), knobRect.topLeft() + QPointF( off, off ) );
-            
-            gradient.setColorAt( 0.0, palette().color( QPalette::Midlight ) );
-            gradient.setColorAt( 1.0, palette().color( QPalette::Button ) );
-
-            brush = QBrush( gradient );
-
-            break;
-        }
-        case QwtKnob::Styled:
-        {
-            QRadialGradient gradient(knobRect.center().x() - knobRect.width() / 3,
-                knobRect.center().y() - knobRect.height() / 2,
-                knobRect.width() * 1.3,
-                knobRect.center().x(),
-                knobRect.center().y() - knobRect.height() / 2);
-
-            const QColor c = palette().color( QPalette::Button );
-            gradient.setColorAt(0, c.lighter(110));
-            gradient.setColorAt(qreal(0.5), c);
-            gradient.setColorAt(qreal(0.501), c.darker(102));
-            gradient.setColorAt(1, c.darker(115));
-
-            brush = QBrush( gradient );
-
-            break;
-        }
-        case QwtKnob::Sunken:
-        {
-            QLinearGradient gradient( 
-                knobRect.topLeft(), knobRect.bottomRight() );
-            gradient.setColorAt( 0.0, palette().color( QPalette::Mid ) );
-            gradient.setColorAt( 0.5, palette().color( QPalette::Button ) );
-            gradient.setColorAt( 1.0, palette().color( QPalette::Midlight ) );
-            brush = QBrush( gradient );
-
-            break;
-        }
-        case QwtKnob::Flat:
-        default:
-            brush = palette().brush( QPalette::Button );
-    }
-
-    painter->setPen( pen );
-    painter->setBrush( brush );
-    painter->drawEllipse( aRect );
-}
-
-
-/*!
-  \brief Draw the marker at the knob's front
-
-  \param painter Painter
-  \param rect Bounding rectangle of the knob without scale
-  \param angle Angle of the marker in degrees 
-               ( clockwise, 0 at the 12 o'clock position )
-*/
-void QwtKnob::drawMarker( QPainter *painter, 
-    const QRectF &rect, double angle ) const
-{
-    if ( d_data->markerStyle == NoMarker || !isValid() )
-        return;
-
-    const double radians = qwtRadians( angle );
-    const double sinA = -qFastSin( radians );
-    const double cosA = qFastCos( radians );
-
-    const double xm = rect.center().x();
-    const double ym = rect.center().y();
-    const double margin = 4.0;
-
-    double radius = 0.5 * ( rect.width() - d_data->borderWidth ) - margin;
-    if ( radius < 1.0 )
-        radius = 1.0;
-
-    int markerSize = d_data->markerSize;
-    if ( markerSize <= 0 )
-        markerSize = qRound( 0.4 * radius );
-
-    switch ( d_data->markerStyle )
-    {
-        case Notch:
-        case Nub:
-        {
-            const double dotWidth = 
-                qMin( double( markerSize ), radius);
-
-            const double dotCenterDist = radius - 0.5 * dotWidth;
-            if ( dotCenterDist > 0.0 )
-            {
-                const QPointF center( xm - sinA * dotCenterDist, 
-                    ym - cosA * dotCenterDist );
-
-                QRectF ellipse( 0.0, 0.0, dotWidth, dotWidth );
-                ellipse.moveCenter( center );
-
-                QColor c1 = palette().color( QPalette::Light );
-                QColor c2 = palette().color( QPalette::Mid );
-
-                if ( d_data->markerStyle == Notch )
-                    qSwap( c1, c2 );
-
-                QLinearGradient gradient( 
-                    ellipse.topLeft(), ellipse.bottomRight() );
-                gradient.setColorAt( 0.0, c1 );
-                gradient.setColorAt( 1.0, c2 );
-
-                painter->setPen( Qt::NoPen );
-                painter->setBrush( gradient );
-
-                painter->drawEllipse( ellipse );
-            }
-            break;
-        }
-        case Dot:
-        {
-            const double dotWidth = 
-                qMin( double( markerSize ), radius);
-
-            const double dotCenterDist = radius - 0.5 * dotWidth;
-            if ( dotCenterDist > 0.0 )
-            {
-                const QPointF center( xm - sinA * dotCenterDist, 
-                    ym - cosA * dotCenterDist );
-
-                QRectF ellipse( 0.0, 0.0, dotWidth, dotWidth );
-                ellipse.moveCenter( center );
-
-                painter->setPen( Qt::NoPen );
-                painter->setBrush( palette().color( QPalette::ButtonText ) );
-                painter->drawEllipse( ellipse );
-            }
-
-            break;
-        }
-        case Tick:
-        {
-            const double rb = qMax( radius - markerSize, 1.0 );
-            const double re = radius;
-
-            const QLineF line( xm - sinA * rb, ym - cosA * rb,
-                xm - sinA * re, ym - cosA * re );
-
-            QPen pen( palette().color( QPalette::ButtonText ), 0 );
-            pen.setCapStyle( Qt::FlatCap );
-            painter->setPen( pen );
-            painter->drawLine ( line );
-
-            break;
-        }
-        case Triangle:
-        {
-            const double rb = qMax( radius - markerSize, 1.0 );
-            const double re = radius;
-
-            painter->translate( rect.center() );
-            painter->rotate( angle - 90.0 );
-            
-            QPolygonF polygon;
-            polygon += QPointF( re, 0.0 );
-            polygon += QPointF( rb, 0.5 * ( re - rb ) );
-            polygon += QPointF( rb, -0.5 * ( re - rb ) );
-
-            painter->setPen( Qt::NoPen );
-            painter->setBrush( palette().color( QPalette::ButtonText ) );
-            painter->drawPolygon( polygon );
-
-            painter->resetTransform();
-
-            break;
-        }
-        default:
-            break;
-    }
-}
-
-/*!
-  Draw the focus indicator
-  \param painter Painter
-*/
-void QwtKnob::drawFocusIndicator( QPainter *painter ) const
-{       
-    const QRect cr = contentsRect();
-
-    int w = d_data->knobWidth;
-    if ( w <= 0 )
-    {
-        w = qMin( cr.width(), cr.height() );
-    }
-    else
-    {
-        const int extent = qCeil( scaleDraw()->extent( font() ) );
-        w += 2 * ( extent + d_data->scaleDist );
-    }
-
-    QRect focusRect( 0, 0, w, w );
-    focusRect.moveCenter( cr.center() );
-
-    QwtPainter::drawFocusRect( painter, this, focusRect );
-}  
-
-/*!
-  \brief Set the alignment of the knob
-
-  Similar to a QLabel::alignment() the flags decide how
-  to align the knob inside of contentsRect(). 
-
-  The default setting is Qt::AlignCenter
-
-  \param alignment Or'd alignment flags
-
-  \sa alignment(), setKnobWidth(), knobRect()
- */
-void QwtKnob::setAlignment( Qt::Alignment alignment )
-{
-    if ( d_data->alignment != alignment )
-    {
-        d_data->alignment = alignment;
-        update();
-    }
-}
-
-/*!
-  \return Alignment of the knob inside of contentsRect()
-  \sa setAlignment(), knobWidth(), knobRect()
- */
-Qt::Alignment QwtKnob::alignment() const
-{
-    return d_data->alignment;
-}
-
-/*!
-  \brief Change the knob's width.
-
-  Setting a fixed value for the diameter of the knob 
-  is helpful for aligning several knobs in a row.
-
-  \param width New width
-
-  \sa knobWidth(), setAlignment()
-  \note Modifies the sizePolicy() 
-*/
-void QwtKnob::setKnobWidth( int width )
-{
-    width = qMax( width, 0 );
-
-    if ( width != d_data->knobWidth )
-    {
-        QSizePolicy::Policy policy;
-        if ( width > 0 )
-            policy = QSizePolicy::Minimum;
-        else
-            policy = QSizePolicy::MinimumExpanding;
-
-        setSizePolicy( policy, policy );
-
-        d_data->knobWidth = width;
-
-        updateGeometry();
-        update();
-    }
-}
-
-//! Return the width of the knob
-int QwtKnob::knobWidth() const
-{
-    return d_data->knobWidth;
-}
-
-/*!
-  \brief Set the knob's border width
-  \param borderWidth new border width
-*/
-void QwtKnob::setBorderWidth( int borderWidth )
-{
-    d_data->borderWidth = qMax( borderWidth, 0 );
-
-    updateGeometry();
-    update();
-}
-
-//! Return the border width
-int QwtKnob::borderWidth() const
-{
-    return d_data->borderWidth;
-}
-
-/*!
-  \brief Set the size of the marker
-
-  When setting a size <= 0 the marker will
-  automatically scaled to 40% of the radius of the knob.
-
-  \sa markerSize(), markerStyle()
-*/
-void QwtKnob::setMarkerSize( int size )
-{
-    if ( d_data->markerSize != size )
-    {
-        d_data->markerSize = size;
-        update();
-    }
-}
-
-/*! 
-  \return Marker size
-  \sa setMarkerSize()
- */
-int QwtKnob::markerSize() const
-{
-    return d_data->markerSize;
-}
-
-/*!
-  \return sizeHint()
-*/
-QSize QwtKnob::sizeHint() const
-{
-    const QSize hint = qwtKnobSizeHint( this, 50 );
-    return hint.expandedTo( QApplication::globalStrut() );
-}
-
-/*!
-  \return Minimum size hint
-  \sa sizeHint()
-*/
-QSize QwtKnob::minimumSizeHint() const
-{
-    return qwtKnobSizeHint( this, 20 );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_knob.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_knob.h
deleted file mode 100644
index 8a6f5c437e9688bb2a04130b38133df971d3a316..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_knob.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_KNOB_H
-#define QWT_KNOB_H
-
-#include "qwt_global.h"
-#include "qwt_abstract_slider.h"
-
-class QwtRoundScaleDraw;
-
-/*!
-  \brief The Knob Widget
-
-  The QwtKnob widget imitates look and behavior of a volume knob on a radio.
-  It looks similar to QDial - not to QwtDial.
-
-  The value range of a knob might be divided into several turns.
-
-  The layout of the knob depends on the knobWidth().
-
-  - width > 0 
-    The diameter of the knob is fixed and the knob is aligned
-    according to the alignment() flags inside of the contentsRect(). 
-
-  - width <= 0
-    The knob is extended to the minimum of width/height of the contentsRect()
-    and aligned in the other direction according to alignment().
-
-  Setting a fixed knobWidth() is helpful to align several knobs with different
-  scale labels.
-  
-  \image html knob.png
-*/
-
-class QWT_EXPORT QwtKnob: public QwtAbstractSlider
-{
-    Q_OBJECT
-
-    Q_ENUMS ( KnobStyle MarkerStyle )
-
-    Q_PROPERTY( KnobStyle knobStyle READ knobStyle WRITE setKnobStyle )
-    Q_PROPERTY( int knobWidth READ knobWidth WRITE setKnobWidth )
-    Q_PROPERTY( Qt::Alignment alignment READ alignment WRITE setAlignment )
-    Q_PROPERTY( double totalAngle READ totalAngle WRITE setTotalAngle )
-    Q_PROPERTY( int numTurns READ numTurns WRITE setNumTurns )
-    Q_PROPERTY( MarkerStyle markerStyle READ markerStyle WRITE setMarkerStyle )
-    Q_PROPERTY( int markerSize READ markerSize WRITE setMarkerSize )
-    Q_PROPERTY( int borderWidth READ borderWidth WRITE setBorderWidth )
-
-public:
-    /*! 
-       \brief Style of the knob surface
-
-       Depending on the KnobStyle the surface of the knob is
-       filled from the brushes of the widget palette().
-
-       \sa setKnobStyle(), knobStyle()
-     */
-    enum KnobStyle
-    {
-        //! Fill the knob with a brush from QPalette::Button.
-        Flat,
-
-        //! Build a gradient from QPalette::Midlight and QPalette::Button
-        Raised,
-
-        /*! 
-          Build a gradient from QPalette::Midlight, QPalette::Button
-          and QPalette::Midlight
-         */
-        Sunken,
-
-        /*! 
-          Build a radial gradient from QPalette::Button
-          like it is used for QDial in various Qt styles.
-         */
-        Styled
-    };
-
-    /*!
-        \brief Marker type
- 
-        The marker indicates the current value on the knob
-        The default setting is a Notch marker.
-
-        \sa setMarkerStyle(), setMarkerSize()
-    */
-    enum MarkerStyle 
-    { 
-        //! Don't paint any marker
-        NoMarker = -1,
-
-        //! Paint a single tick in QPalette::ButtonText color
-        Tick, 
-
-        //! Paint a triangle in QPalette::ButtonText color
-        Triangle, 
-
-        //! Paint a circle in QPalette::ButtonText color
-        Dot, 
-
-        /*! 
-          Draw a raised ellipse with a gradient build from
-          QPalette::Light and QPalette::Mid
-         */ 
-        Nub, 
-
-        /*! 
-          Draw a sunken ellipse with a gradient build from
-          QPalette::Light and QPalette::Mid
-         */ 
-        Notch 
-    };
-
-    explicit QwtKnob( QWidget* parent = NULL );
-    virtual ~QwtKnob();
-
-    void setAlignment( Qt::Alignment );
-    Qt::Alignment alignment() const;
-
-    void setKnobWidth( int );
-    int knobWidth() const;
-
-    void setNumTurns( int );
-    int numTurns() const;
-
-    void setTotalAngle ( double angle );
-    double totalAngle() const;
-
-    void setKnobStyle( KnobStyle );
-    KnobStyle knobStyle() const;
-
-    void setBorderWidth( int bw );
-    int borderWidth() const;
-
-    void setMarkerStyle( MarkerStyle );
-    MarkerStyle markerStyle() const;
-
-    void setMarkerSize( int );
-    int markerSize() const;
-
-    virtual QSize sizeHint() const;
-    virtual QSize minimumSizeHint() const;
-
-    void setScaleDraw( QwtRoundScaleDraw * );
-
-    const QwtRoundScaleDraw *scaleDraw() const;
-    QwtRoundScaleDraw *scaleDraw();
-
-    QRect knobRect() const;
-
-protected:
-    virtual void paintEvent( QPaintEvent * );
-    virtual void changeEvent( QEvent * );
-
-    virtual void drawKnob( QPainter *, const QRectF & ) const;
-
-    virtual void drawFocusIndicator( QPainter * ) const;
-
-    virtual void drawMarker( QPainter *, 
-        const QRectF &, double arc ) const;
-
-    virtual double scrolledTo( const QPoint & ) const;
-    virtual bool isScrollPosition( const QPoint & ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend.cpp
deleted file mode 100644
index afb3597fa64f5a19a78744e3bc46cafefd0c2dd8..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend.cpp
+++ /dev/null
@@ -1,811 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_legend.h"
-#include "qwt_legend_label.h"
-#include "qwt_dyngrid_layout.h"
-#include "qwt_math.h"
-#include "qwt_plot_item.h"
-#include "qwt_painter.h"
-#include <qapplication.h>
-#include <qscrollbar.h>
-#include <qscrollarea.h>
-#include <qpainter.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-
-class QwtLegendMap
-{
-public:
-    inline bool isEmpty() const { return d_entries.isEmpty(); }
-
-    void insert( const QVariant &, const QList<QWidget *> & );
-    void remove( const QVariant & );
-
-    void removeWidget( const QWidget * );
-
-    QList<QWidget *> legendWidgets( const QVariant & ) const;
-    QVariant itemInfo( const QWidget * ) const;
-
-private:
-    // we don't know anything about itemInfo and therefore don't have
-    // any key that can be used for a map or hashtab.
-    // But a simple linear list is o.k. here, as we will never have
-    // more than a few entries.
-
-    class Entry
-    {
-    public:
-        QVariant itemInfo;
-        QList<QWidget *> widgets;
-    };
-
-    QList< Entry > d_entries;
-};
-
-void QwtLegendMap::insert( const QVariant &itemInfo, 
-    const QList<QWidget *> &widgets )
-{
-    for ( int i = 0; i < d_entries.size(); i++ )
-    {
-        Entry &entry = d_entries[i];
-        if ( entry.itemInfo == itemInfo )
-        {
-            entry.widgets = widgets;
-            return;
-        }
-    }
-
-    Entry newEntry;
-    newEntry.itemInfo = itemInfo;
-    newEntry.widgets = widgets;
-
-    d_entries += newEntry;
-}
-
-void QwtLegendMap::remove( const QVariant &itemInfo )
-{
-    for ( int i = 0; i < d_entries.size(); i++ )
-    {
-        Entry &entry = d_entries[i];
-        if ( entry.itemInfo == itemInfo )
-        {
-            d_entries.removeAt( i );
-            return;
-        }
-    }
-}
-
-void QwtLegendMap::removeWidget( const QWidget *widget )
-{
-    QWidget *w = const_cast<QWidget *>( widget );
-
-    for ( int i = 0; i < d_entries.size(); i++ )
-        d_entries[ i ].widgets.removeAll( w );
-}
-
-QVariant QwtLegendMap::itemInfo( const QWidget *widget ) const
-{
-    if ( widget != NULL )
-    {
-        QWidget *w = const_cast<QWidget *>( widget );
-
-        for ( int i = 0; i < d_entries.size(); i++ )
-        {
-            const Entry &entry = d_entries[i];
-            if ( entry.widgets.indexOf( w ) >= 0 )
-                return entry.itemInfo;
-        }
-    }
-
-    return QVariant();
-}
-
-QList<QWidget *> QwtLegendMap::legendWidgets( const QVariant &itemInfo ) const
-{
-    if ( itemInfo.isValid() )
-    {
-        for ( int i = 0; i < d_entries.size(); i++ )
-        {
-            const Entry &entry = d_entries[i];
-            if ( entry.itemInfo == itemInfo )
-                return entry.widgets;
-        }
-    }
-
-    return QList<QWidget *>();
-}
-
-class QwtLegend::PrivateData
-{
-public:
-    PrivateData():
-        itemMode( QwtLegendData::ReadOnly ),
-        view( NULL )
-    {
-    }
-
-    QwtLegendData::Mode itemMode;
-    QwtLegendMap itemMap;
-
-    class LegendView;
-    LegendView *view;
-};
-
-class QwtLegend::PrivateData::LegendView: public QScrollArea
-{
-public:
-    LegendView( QWidget *parent ):
-        QScrollArea( parent )
-    {
-        contentsWidget = new QWidget( this );
-        contentsWidget->setObjectName( "QwtLegendViewContents" );
-
-        setWidget( contentsWidget );
-        setWidgetResizable( false );
-
-        viewport()->setObjectName( "QwtLegendViewport" );
-
-        // QScrollArea::setWidget internally sets autoFillBackground to true
-        // But we don't want a background.
-        contentsWidget->setAutoFillBackground( false );
-        viewport()->setAutoFillBackground( false );
-    }
-
-    virtual bool event( QEvent *event )
-    {
-        if ( event->type() == QEvent::PolishRequest )
-        {
-            setFocusPolicy( Qt::NoFocus );
-        }
-
-        if ( event->type() == QEvent::Resize )
-        {
-            // adjust the size to en/disable the scrollbars
-            // before QScrollArea adjusts the viewport size
-
-            const QRect cr = contentsRect();
-
-            int w = cr.width();
-            int h = contentsWidget->heightForWidth( cr.width() );
-            if ( h > w )
-            {
-                w -= verticalScrollBar()->sizeHint().width();
-                h = contentsWidget->heightForWidth( w );
-            }
-
-            contentsWidget->resize( w, h );
-        }
-
-        return QScrollArea::event( event );
-    }
-
-    virtual bool viewportEvent( QEvent *event )
-    {
-        bool ok = QScrollArea::viewportEvent( event );
-
-        if ( event->type() == QEvent::Resize )
-        {
-            layoutContents();
-        }
-        return ok;
-    }
-
-    QSize viewportSize( int w, int h ) const
-    {
-        const int sbHeight = horizontalScrollBar()->sizeHint().height();
-        const int sbWidth = verticalScrollBar()->sizeHint().width();
-
-        const int cw = contentsRect().width();
-        const int ch = contentsRect().height();
-
-        int vw = cw;
-        int vh = ch;
-
-        if ( w > vw )
-            vh -= sbHeight;
-
-        if ( h > vh )
-        {
-            vw -= sbWidth;
-            if ( w > vw && vh == ch )
-                vh -= sbHeight;
-        }
-        return QSize( vw, vh );
-    }
-
-    void layoutContents()
-    {
-        const QwtDynGridLayout *tl = qobject_cast<QwtDynGridLayout *>(
-            contentsWidget->layout() );
-        if ( tl == NULL )
-            return;
-
-        const QSize visibleSize = viewport()->contentsRect().size();
-
-        const int minW = int( tl->maxItemWidth() ) + 2 * tl->margin();
-
-        int w = qMax( visibleSize.width(), minW );
-        int h = qMax( tl->heightForWidth( w ), visibleSize.height() );
-
-        const int vpWidth = viewportSize( w, h ).width();
-        if ( w > vpWidth )
-        {
-            w = qMax( vpWidth, minW );
-            h = qMax( tl->heightForWidth( w ), visibleSize.height() );
-        }
-
-        contentsWidget->resize( w, h );
-    }
-
-    QWidget *contentsWidget;
-};
-
-/*!
-  Constructor
-  \param parent Parent widget
-*/
-QwtLegend::QwtLegend( QWidget *parent ):
-    QwtAbstractLegend( parent )
-{
-    setFrameStyle( NoFrame );
-
-    d_data = new QwtLegend::PrivateData;
-
-    d_data->view = new QwtLegend::PrivateData::LegendView( this );
-    d_data->view->setObjectName( "QwtLegendView" );
-    d_data->view->setFrameStyle( NoFrame );
-
-    QwtDynGridLayout *gridLayout = new QwtDynGridLayout(
-        d_data->view->contentsWidget );
-    gridLayout->setAlignment( Qt::AlignHCenter | Qt::AlignTop );
-
-    d_data->view->contentsWidget->installEventFilter( this );
-
-    QVBoxLayout *layout = new QVBoxLayout( this );
-    layout->setContentsMargins( 0, 0, 0, 0 );
-    layout->addWidget( d_data->view );
-}
-
-//! Destructor
-QwtLegend::~QwtLegend()
-{
-    delete d_data;
-}
-
-/*!
-  \brief Set the maximum number of entries in a row
-
-  F.e when the maximum is set to 1 all items are aligned
-  vertically. 0 means unlimited
-
-  \param numColums Maximum number of entries in a row
-
-  \sa maxColumns(), QwtDynGridLayout::setMaxColumns()
- */
-void QwtLegend::setMaxColumns( uint numColums )
-{
-    QwtDynGridLayout *tl = qobject_cast<QwtDynGridLayout *>(
-        d_data->view->contentsWidget->layout() );
-    if ( tl )
-        tl->setMaxColumns( numColums );
-}
-
-/*!
-  \return Maximum number of entries in a row
-  \sa setMaxColumns(), QwtDynGridLayout::maxColumns()
- */
-uint QwtLegend::maxColumns() const
-{
-    uint maxCols = 0;
-
-    const QwtDynGridLayout *tl = qobject_cast<const QwtDynGridLayout *>(
-        d_data->view->contentsWidget->layout() );
-    if ( tl )
-        maxCols = tl->maxColumns();
-
-    return maxCols;
-}
-
-/*!
-  \brief Set the default mode for legend labels
-
-  Legend labels will be constructed according to the
-  attributes in a QwtLegendData object. When it doesn't
-  contain a value for the QwtLegendData::ModeRole the
-  label will be initialized with the default mode of the legend.
-
-  \param mode Default item mode
-
-  \sa itemMode(), QwtLegendData::value(), QwtPlotItem::legendData()
-  \note Changing the mode doesn't have any effect on existing labels.
- */
-void QwtLegend::setDefaultItemMode( QwtLegendData::Mode mode )
-{
-    d_data->itemMode = mode;
-}
-
-/*!
-  \return Default item mode
-  \sa setDefaultItemMode()
-*/
-QwtLegendData::Mode QwtLegend::defaultItemMode() const
-{
-    return d_data->itemMode;
-}
-
-/*!
-  The contents widget is the only child of the viewport of 
-  the internal QScrollArea and the parent widget of all legend items.
-
-  \return Container widget of the legend items
-*/
-QWidget *QwtLegend::contentsWidget()
-{
-    return d_data->view->contentsWidget;
-}
-
-/*!
-  \return Horizontal scrollbar
-  \sa verticalScrollBar()
-*/
-QScrollBar *QwtLegend::horizontalScrollBar() const
-{
-    return d_data->view->horizontalScrollBar();
-}
-
-/*!
-  \return Vertical scrollbar
-  \sa horizontalScrollBar()
-*/
-QScrollBar *QwtLegend::verticalScrollBar() const
-{
-    return d_data->view->verticalScrollBar();
-}
-
-/*!
-  The contents widget is the only child of the viewport of 
-  the internal QScrollArea and the parent widget of all legend items.
-
-  \return Container widget of the legend items
-
-*/
-const QWidget *QwtLegend::contentsWidget() const
-{
-    return d_data->view->contentsWidget;
-}
-
-/*!
-  \brief Update the entries for an item
-
-  \param itemInfo Info for an item
-  \param data List of legend entry attributes for the item
- */
-void QwtLegend::updateLegend( const QVariant &itemInfo, 
-    const QList<QwtLegendData> &data )
-{
-    QList<QWidget *> widgetList = legendWidgets( itemInfo );
-
-    if ( widgetList.size() != data.size() )
-    {
-        QLayout *contentsLayout = d_data->view->contentsWidget->layout();
-
-        while ( widgetList.size() > data.size() )
-        {
-            QWidget *w = widgetList.takeLast();
-
-            contentsLayout->removeWidget( w );
-
-            // updates might be triggered by signals from the legend widget
-            // itself. So we better don't delete it here.
-
-            w->hide();
-            w->deleteLater();
-        }
-
-        for ( int i = widgetList.size(); i < data.size(); i++ )
-        {
-            QWidget *widget = createWidget( data[i] );
-
-            if ( contentsLayout )
-                contentsLayout->addWidget( widget );
-
-            if ( isVisible() )
-            {
-                // QLayout does a delayed show, with the effect, that
-                // the size hint will be wrong, when applications
-                // call replot() right after changing the list
-                // of plot items. So we better do the show now.
-
-                widget->setVisible( true );
-            }
-
-            widgetList += widget;
-        }
-
-        if ( widgetList.isEmpty() )
-        {
-            d_data->itemMap.remove( itemInfo );
-        }
-        else
-        {
-            d_data->itemMap.insert( itemInfo, widgetList );
-        }
-
-        updateTabOrder();
-    }
-    
-    for ( int i = 0; i < data.size(); i++ )
-        updateWidget( widgetList[i], data[i] );
-}
-
-/*!
-  \brief Create a widget to be inserted into the legend
-
-  The default implementation returns a QwtLegendLabel.
-
-  \param data Attributes of the legend entry
-  \return Widget representing data on the legend
-  
-  \note updateWidget() will called soon after createWidget()
-        with the same attributes.
- */
-QWidget *QwtLegend::createWidget( const QwtLegendData &data ) const
-{
-    Q_UNUSED( data );
-
-    QwtLegendLabel *label = new QwtLegendLabel();
-    label->setItemMode( defaultItemMode() );
-
-    connect( label, SIGNAL( clicked() ), SLOT( itemClicked() ) );
-    connect( label, SIGNAL( checked( bool ) ), SLOT( itemChecked( bool ) ) );
-
-    return label;
-}
-
-/*!
-  \brief Update the widget 
-
-  \param widget Usually a QwtLegendLabel
-  \param data Attributes to be displayed
-
-  \sa createWidget()
-  \note When widget is no QwtLegendLabel updateWidget() does nothing.
- */
-void QwtLegend::updateWidget( QWidget *widget, const QwtLegendData &data )
-{
-    QwtLegendLabel *label = qobject_cast<QwtLegendLabel *>( widget );
-    if ( label )
-    {
-        label->setData( data );
-        if ( !data.value( QwtLegendData::ModeRole ).isValid() )
-        {
-            // use the default mode, when there is no specific
-            // hint from the legend data
-
-            label->setItemMode( defaultItemMode() );
-        }
-    }
-}
-
-void QwtLegend::updateTabOrder()
-{
-    QLayout *contentsLayout = d_data->view->contentsWidget->layout();
-    if ( contentsLayout )
-    {
-        // set tab focus chain
-
-        QWidget *w = NULL;
-
-        for ( int i = 0; i < contentsLayout->count(); i++ )
-        {
-            QLayoutItem *item = contentsLayout->itemAt( i );
-            if ( w && item->widget() )
-                QWidget::setTabOrder( w, item->widget() );
-
-            w = item->widget();
-        }
-    }
-}
-
-//! Return a size hint.
-QSize QwtLegend::sizeHint() const
-{
-    QSize hint = d_data->view->contentsWidget->sizeHint();
-    hint += QSize( 2 * frameWidth(), 2 * frameWidth() );
-
-    return hint;
-}
-
-/*!
-  \return The preferred height, for a width.
-  \param width Width
-*/
-int QwtLegend::heightForWidth( int width ) const
-{
-    width -= 2 * frameWidth();
-
-    int h = d_data->view->contentsWidget->heightForWidth( width );
-    if ( h >= 0 )
-        h += 2 * frameWidth();
-
-    return h;
-}
-
-
-/*!
-  Handle QEvent::ChildRemoved andQEvent::LayoutRequest events 
-  for the contentsWidget().
-
-  \param object Object to be filtered
-  \param event Event
-
-  \return Forwarded to QwtAbstractLegend::eventFilter()
-*/
-bool QwtLegend::eventFilter( QObject *object, QEvent *event )
-{
-    if ( object == d_data->view->contentsWidget )
-    {
-        switch ( event->type() )
-        {
-            case QEvent::ChildRemoved:
-            {
-                const QChildEvent *ce = 
-                    static_cast<const QChildEvent *>(event);
-                if ( ce->child()->isWidgetType() )
-                {
-                    QWidget *w = static_cast< QWidget * >( ce->child() );
-                    d_data->itemMap.removeWidget( w );
-                }
-                break;
-            }
-            case QEvent::LayoutRequest:
-            {
-                d_data->view->layoutContents();
-
-                if ( parentWidget() && parentWidget()->layout() == NULL )
-                {
-                    /*
-                       We want the parent widget ( usually QwtPlot ) to recalculate
-                       its layout, when the contentsWidget has changed. But
-                       because of the scroll view we have to forward the LayoutRequest
-                       event manually.
-
-                       We don't use updateGeometry() because it doesn't post LayoutRequest
-                       events when the legend is hidden. But we want the
-                       parent widget notified, so it can show/hide the legend
-                       depending on its items.
-                     */
-                    QApplication::postEvent( parentWidget(),
-                        new QEvent( QEvent::LayoutRequest ) );
-                }                
-                break;
-            }
-            default:
-                break;
-        }
-    }
-
-    return QwtAbstractLegend::eventFilter( object, event );
-}
-
-/*!
-  Called internally when the legend has been clicked on.
-  Emits a clicked() signal.
-*/
-void QwtLegend::itemClicked()
-{
-    QWidget *w = qobject_cast<QWidget *>( sender() );
-    if ( w )
-    {
-        const QVariant itemInfo = d_data->itemMap.itemInfo( w );
-        if ( itemInfo.isValid() )
-        {
-            const QList<QWidget *> widgetList =
-                d_data->itemMap.legendWidgets( itemInfo );
-
-            const int index = widgetList.indexOf( w );
-            if ( index >= 0 )
-                Q_EMIT clicked( itemInfo, index );
-        }
-    }
-}
-
-/*!
-  Called internally when the legend has been checked
-  Emits a checked() signal.
-*/
-void QwtLegend::itemChecked( bool on )
-{
-    QWidget *w = qobject_cast<QWidget *>( sender() );
-    if ( w )
-    {
-        const QVariant itemInfo = d_data->itemMap.itemInfo( w );
-        if ( itemInfo.isValid() )
-        {
-            const QList<QWidget *> widgetList =
-                d_data->itemMap.legendWidgets( itemInfo );
-
-            const int index = widgetList.indexOf( w );
-            if ( index >= 0 )
-                Q_EMIT checked( itemInfo, on, index );
-        }
-    }
-}
-
-/*!
-  Render the legend into a given rectangle.
-
-  \param painter Painter
-  \param rect Bounding rectangle
-  \param fillBackground When true, fill rect with the widget background 
-
-  \sa renderLegend() is used by QwtPlotRenderer - not by QwtLegend itself
-*/
-void QwtLegend::renderLegend( QPainter *painter, 
-    const QRectF &rect, bool fillBackground ) const
-{
-    if ( d_data->itemMap.isEmpty() )
-        return;
-
-    if ( fillBackground )
-    {
-        if ( autoFillBackground() ||
-            testAttribute( Qt::WA_StyledBackground ) )
-        {
-            QwtPainter::drawBackgound( painter, rect, this );
-        }
-    }
-
-    const QwtDynGridLayout *legendLayout = 
-        qobject_cast<QwtDynGridLayout *>( contentsWidget()->layout() );
-    if ( legendLayout == NULL )
-        return;
-
-    int left, right, top, bottom;
-    getContentsMargins( &left, &top, &right, &bottom );
-
-    QRect layoutRect; 
-    layoutRect.setLeft( qCeil( rect.left() ) + left );
-    layoutRect.setTop( qCeil( rect.top() ) + top );
-    layoutRect.setRight( qFloor( rect.right() ) - right );
-    layoutRect.setBottom( qFloor( rect.bottom() ) - bottom );
-
-    uint numCols = legendLayout->columnsForWidth( layoutRect.width() );
-    QList<QRect> itemRects =
-        legendLayout->layoutItems( layoutRect, numCols );
-
-    int index = 0;
-
-    for ( int i = 0; i < legendLayout->count(); i++ )
-    {
-        QLayoutItem *item = legendLayout->itemAt( i );
-        QWidget *w = item->widget();
-        if ( w )
-        {
-            painter->save();
-
-            painter->setClipRect( itemRects[index], Qt::IntersectClip );
-            renderItem( painter, w, itemRects[index], fillBackground );
-
-            index++;
-            painter->restore();
-        }
-    }
-}
-
-/*!
-  Render a legend entry into a given rectangle.
-
-  \param painter Painter
-  \param widget Widget representing a legend entry
-  \param rect Bounding rectangle
-  \param fillBackground When true, fill rect with the widget background 
-
-  \note When widget is not derived from QwtLegendLabel renderItem
-        does nothing beside the background
-*/
-void QwtLegend::renderItem( QPainter *painter, 
-    const QWidget *widget, const QRectF &rect, bool fillBackground ) const
-{
-    if ( fillBackground )
-    {
-        if ( widget->autoFillBackground() ||
-            widget->testAttribute( Qt::WA_StyledBackground ) )
-        {
-            QwtPainter::drawBackgound( painter, rect, widget );
-        }
-    }
-
-    const QwtLegendLabel *label = qobject_cast<const QwtLegendLabel *>( widget );
-    if ( label )
-    {
-        // icon
-
-        const QwtGraphic &icon = label->data().icon();
-        const QSizeF sz = icon.defaultSize();
-
-        const QRectF iconRect( rect.x() + label->margin(),
-            rect.center().y() - 0.5 * sz.height(), 
-            sz.width(), sz.height() );
-
-        icon.render( painter, iconRect, Qt::KeepAspectRatio );
-
-        // title
-
-        QRectF titleRect = rect;
-        titleRect.setX( iconRect.right() + 2 * label->spacing() );
-
-        painter->setFont( label->font() );
-        painter->setPen( label->palette().color( QPalette::Text ) );
-        const_cast< QwtLegendLabel *>( label )->drawText( painter, titleRect );
-    }
-}
-
-/*!
-  \return List of widgets associated to a item
-  \param itemInfo Info about an item
-  \sa legendWidget(), itemInfo(), QwtPlot::itemToInfo()
- */
-QList<QWidget *> QwtLegend::legendWidgets( const QVariant &itemInfo ) const
-{
-    return d_data->itemMap.legendWidgets( itemInfo );
-}
-
-/*!
-  \return First widget in the list of widgets associated to an item
-  \param itemInfo Info about an item
-  \sa itemInfo(), QwtPlot::itemToInfo()
-  \note Almost all types of items have only one widget
-*/
-QWidget *QwtLegend::legendWidget( const QVariant &itemInfo ) const
-{
-    const QList<QWidget *> list = d_data->itemMap.legendWidgets( itemInfo );
-    if ( list.isEmpty() )
-        return NULL;
-
-    return list[0];
-}
-
-/*!
-  Find the item that is associated to a widget
-
-  \param widget Widget on the legend
-  \return Associated item info
-  \sa legendWidget()
- */
-QVariant QwtLegend::itemInfo( const QWidget *widget ) const
-{
-    return d_data->itemMap.itemInfo( widget );
-}
-
-//! \return True, when no item is inserted
-bool QwtLegend::isEmpty() const
-{
-    return d_data->itemMap.isEmpty();
-}
-
-/*!
-    Return the extent, that is needed for the scrollbars
-
-    \param orientation Orientation ( 
-    \return The width of the vertical scrollbar for Qt::Horizontal and v.v.
- */
-int QwtLegend::scrollExtent( Qt::Orientation orientation ) const
-{
-    int extent = 0;
-
-    if ( orientation == Qt::Horizontal )
-        extent = verticalScrollBar()->sizeHint().width();
-    else
-        extent = horizontalScrollBar()->sizeHint().height();
-
-    return extent;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend.h
deleted file mode 100644
index 6aefb0f6ce94de968c5fb2480c23779dd374be23..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_LEGEND_H
-#define QWT_LEGEND_H
-
-#include "qwt_global.h"
-#include "qwt_abstract_legend.h"
-#include <qvariant.h>
-
-class QScrollBar;
-
-/*!
-  \brief The legend widget
-
-  The QwtLegend widget is a tabular arrangement of legend items. Legend
-  items might be any type of widget, but in general they will be
-  a QwtLegendLabel.
-
-  \sa QwtLegendLabel, QwtPlotItem, QwtPlot
-*/
-
-class QWT_EXPORT QwtLegend : public QwtAbstractLegend
-{
-    Q_OBJECT
-
-public:
-    explicit QwtLegend( QWidget *parent = NULL );
-    virtual ~QwtLegend();
-
-    void setMaxColumns( uint numColums );
-    uint maxColumns() const;
-
-    void setDefaultItemMode( QwtLegendData::Mode );
-    QwtLegendData::Mode defaultItemMode() const;
-
-    QWidget *contentsWidget();
-    const QWidget *contentsWidget() const;
-
-    QWidget *legendWidget( const QVariant &  ) const;
-    QList<QWidget *> legendWidgets( const QVariant & ) const;
-
-    QVariant itemInfo( const QWidget * ) const;
-
-    virtual bool eventFilter( QObject *, QEvent * );
-
-    virtual QSize sizeHint() const;
-    virtual int heightForWidth( int w ) const;
-
-    QScrollBar *horizontalScrollBar() const;
-    QScrollBar *verticalScrollBar() const;
-
-    virtual void renderLegend( QPainter *, 
-        const QRectF &, bool fillBackground ) const;
-
-    virtual void renderItem( QPainter *, 
-        const QWidget *, const QRectF &, bool fillBackground ) const;
-
-    virtual bool isEmpty() const;
-    virtual int scrollExtent( Qt::Orientation ) const;
-
-Q_SIGNALS:
-    /*!
-      A signal which is emitted when the user has clicked on
-      a legend label, which is in QwtLegendData::Clickable mode.
-
-      \param itemInfo Info for the item item of the
-                      selected legend item
-      \param index Index of the legend label in the list of widgets
-                   that are associated with the plot item
-
-      \note clicks are disabled as default
-      \sa setDefaultItemMode(), defaultItemMode(), QwtPlot::itemToInfo()
-     */
-    void clicked( const QVariant &itemInfo, int index );
-
-    /*!
-      A signal which is emitted when the user has clicked on
-      a legend label, which is in QwtLegendData::Checkable mode
-
-      \param itemInfo Info for the item of the
-                      selected legend label
-      \param index Index of the legend label in the list of widgets
-                   that are associated with the plot item
-      \param on True when the legend label is checked
-
-      \note clicks are disabled as default
-      \sa setDefaultItemMode(), defaultItemMode(), QwtPlot::itemToInfo()
-     */
-    void checked( const QVariant &itemInfo, bool on, int index );
-
-public Q_SLOTS:
-    virtual void updateLegend( const QVariant &,
-        const QList<QwtLegendData> & );
-
-protected Q_SLOTS:
-    void itemClicked();
-    void itemChecked( bool );
-
-protected:
-    virtual QWidget *createWidget( const QwtLegendData & ) const;
-    virtual void updateWidget( QWidget *widget, const QwtLegendData &data );
-
-private:
-    void updateTabOrder();
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif 
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_data.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_data.cpp
deleted file mode 100644
index 9d346e9b6f83e9db0ba0bac4ff965ab8d009fa85..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_data.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_legend_data.h"
-
-//! Constructor
-QwtLegendData::QwtLegendData()
-{
-}
-
-//! Destructor
-QwtLegendData::~QwtLegendData()
-{
-}
-
-/*!
-  Set the legend attributes
-
-  QwtLegendData actually is a QMap<int, QVariant> with some
-  convenience interfaces
-
-  \param map Values
-  \sa values()
- */
-void QwtLegendData::setValues( const QMap<int, QVariant> &map )
-{
-    d_map = map;
-}
-
-/*!
-  \return Legend attributes
-  \sa setValues()
- */
-const QMap<int, QVariant> &QwtLegendData::values() const
-{
-    return d_map;
-}
-
-/*!
-  \param role Attribute role
-  \return True, when the internal map has an entry for role
- */
-bool QwtLegendData::hasRole( int role ) const
-{
-    return d_map.contains( role );
-}
-
-/*!
-  Set an attribute value
-
-  \param role Attribute role
-  \param data Attribute value
-
-  \sa value()
- */
-void QwtLegendData::setValue( int role, const QVariant &data )
-{
-    d_map[role] = data;
-}
-
-/*!
-  \param role Attribute role
-  \return Attribute value for a specific role
- */
-QVariant QwtLegendData::value( int role ) const
-{
-    if ( !d_map.contains( role ) )
-        return QVariant();
-
-    return d_map[role];
-}
-
-//! \return True, when the internal map is empty
-bool QwtLegendData::isValid() const
-{
-    return !d_map.isEmpty();
-}
-
-//! \return Value of the TitleRole attribute
-QwtText QwtLegendData::title() const
-{
-    QwtText text;
-
-    const QVariant titleValue = value( QwtLegendData::TitleRole );
-    if ( titleValue.canConvert<QwtText>() )
-    {
-        text = qvariant_cast<QwtText>( titleValue );
-    }
-    else if ( titleValue.canConvert<QString>() )
-    {
-        text.setText( qvariant_cast<QString>( titleValue ) );
-    }
-
-    return text;
-}
-
-//! \return Value of the IconRole attribute
-QwtGraphic QwtLegendData::icon() const
-{
-    const QVariant iconValue = value( QwtLegendData::IconRole );
-
-    QwtGraphic graphic;
-    if ( iconValue.canConvert<QwtGraphic>() )
-    {
-        graphic = qvariant_cast<QwtGraphic>( iconValue );
-    }
-
-    return graphic;
-}
-
-//! \return Value of the ModeRole attribute
-QwtLegendData::Mode QwtLegendData::mode() const
-{
-    const QVariant modeValue = value( QwtLegendData::ModeRole );
-    if ( modeValue.canConvert<int>() )
-    {
-        const int mode = qvariant_cast<int>( modeValue );
-        return static_cast<QwtLegendData::Mode>( mode );
-    }
-    
-    return QwtLegendData::ReadOnly;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_data.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_data.h
deleted file mode 100644
index c42debcc8ceebce8040108188a1f8346cf477e21..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_data.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_LEGEND_DATA_H
-#define QWT_LEGEND_DATA_H
-
-#include "qwt_global.h"
-#include "qwt_text.h"
-#include "qwt_graphic.h"
-#include <qvariant.h>
-#include <qpixmap.h>
-#include <qmap.h>
-
-/*!
-  \brief Attributes of an entry on a legend
-
-  QwtLegendData is an abstract container ( like QAbstractModel )
-  to exchange attributes, that are only known between to 
-  the plot item and the legend. 
-  
-  By overloading QwtPlotItem::legendData() any other set of attributes
-  could be used, that can be handled by a modified ( or completely 
-  different ) implementation of a legend.
-
-  \sa QwtLegend, QwtPlotLegendItem
-  \note The stockchart example implements a legend as a tree
-        with checkable items
- */
-class QWT_EXPORT QwtLegendData
-{
-public:
-    //! Mode defining how a legend entry interacts
-    enum Mode
-    {
-        //! The legend item is not interactive, like a label
-        ReadOnly,
-
-        //! The legend item is clickable, like a push button
-        Clickable,
-
-        //! The legend item is checkable, like a checkable button
-        Checkable
-    };
-
-    //! Identifier how to interprete a QVariant
-    enum Role
-    {
-        // The value is a Mode
-        ModeRole, 
-
-        // The value is a title
-        TitleRole, 
-
-        // The value is an icon
-        IconRole, 
-
-        // Values < UserRole are reserved for internal use
-        UserRole  = 32
-    };
-
-    QwtLegendData();
-    ~QwtLegendData();
-
-    void setValues( const QMap<int, QVariant> & );
-    const QMap<int, QVariant> &values() const;
-
-    void setValue( int role, const QVariant & );
-    QVariant value( int role ) const;
-
-    bool hasRole( int role ) const;
-    bool isValid() const;
-
-    QwtGraphic icon() const;
-    QwtText title() const;
-    Mode mode() const;
-
-private:
-    QMap<int, QVariant> d_map;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_label.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_label.cpp
deleted file mode 100644
index 674c0bd9ddd1273440d1e87d858bdc9bb0a3203c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_label.cpp
+++ /dev/null
@@ -1,421 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_legend_label.h"
-#include "qwt_legend_data.h"
-#include "qwt_math.h"
-#include "qwt_painter.h"
-#include "qwt_symbol.h"
-#include "qwt_graphic.h"
-#include <qpainter.h>
-#include <qdrawutil.h>
-#include <qstyle.h>
-#include <qpen.h>
-#include <qevent.h>
-#include <qstyleoption.h>
-#include <qapplication.h>
-
-static const int ButtonFrame = 2;
-static const int Margin = 2;
-
-static QSize buttonShift( const QwtLegendLabel *w )
-{
-    QStyleOption option;
-    option.init( w );
-
-    const int ph = w->style()->pixelMetric(
-        QStyle::PM_ButtonShiftHorizontal, &option, w );
-    const int pv = w->style()->pixelMetric(
-        QStyle::PM_ButtonShiftVertical, &option, w );
-    return QSize( ph, pv );
-}
-
-class QwtLegendLabel::PrivateData
-{
-public:
-    PrivateData():
-        itemMode( QwtLegendData::ReadOnly ),
-        isDown( false ),
-        spacing( Margin )
-    {
-    }
-
-    QwtLegendData::Mode itemMode;
-    QwtLegendData legendData;
-    bool isDown;
-
-    QPixmap icon;
-
-    int spacing;
-};
-
-/*!
-  Set the attributes of the legend label
-
-  \param legendData Attributes of the label
-  \sa data()
- */
-void QwtLegendLabel::setData( const QwtLegendData &legendData )
-{
-    d_data->legendData = legendData;
-
-    const bool doUpdate = updatesEnabled();
-    setUpdatesEnabled( false );
-
-    setText( legendData.title() );
-    setIcon( legendData.icon().toPixmap() );
-
-    if ( legendData.hasRole( QwtLegendData::ModeRole ) )
-        setItemMode( legendData.mode() );
-
-    if ( doUpdate )
-    {
-        setUpdatesEnabled( true );
-        update();
-    }
-}
-
-/*!
-  \return Attributes of the label
-  \sa setData(), QwtPlotItem::legendData()
- */
-const QwtLegendData &QwtLegendLabel::data() const
-{
-    return d_data->legendData;
-}
-
-/*!
-  \param parent Parent widget
-*/
-QwtLegendLabel::QwtLegendLabel( QWidget *parent ):
-    QwtTextLabel( parent )
-{
-    d_data = new PrivateData;
-    setMargin( Margin );
-    setIndent( Margin );
-}
-
-//! Destructor
-QwtLegendLabel::~QwtLegendLabel()
-{
-    delete d_data;
-    d_data = NULL;
-}
-
-/*!
-   Set the text to the legend item
-
-   \param text Text label
-    \sa QwtTextLabel::text()
-*/
-void QwtLegendLabel::setText( const QwtText &text )
-{
-    const int flags = Qt::AlignLeft | Qt::AlignVCenter
-        | Qt::TextExpandTabs | Qt::TextWordWrap;
-
-    QwtText txt = text;
-    txt.setRenderFlags( flags );
-
-    QwtTextLabel::setText( txt );
-}
-
-/*!
-   Set the item mode
-   The default is QwtLegendData::ReadOnly
-
-   \param mode Item mode
-   \sa itemMode()
-*/
-void QwtLegendLabel::setItemMode( QwtLegendData::Mode mode )
-{
-    if ( mode != d_data->itemMode )
-    {
-        d_data->itemMode = mode;
-        d_data->isDown = false;
-
-        setFocusPolicy( ( mode != QwtLegendData::ReadOnly ) 
-            ? Qt::TabFocus : Qt::NoFocus );
-        setMargin( ButtonFrame + Margin );
-
-        updateGeometry();
-    }
-}
-
-/*!
-   \return Item mode
-   \sa setItemMode()
-*/
-QwtLegendData::Mode QwtLegendLabel::itemMode() const
-{
-    return d_data->itemMode;
-}
-
-/*!
-  Assign the icon
-
-  \param icon Pixmap representing a plot item
-
-  \sa icon(), QwtPlotItem::legendIcon()
-*/
-void QwtLegendLabel::setIcon( const QPixmap &icon )
-{
-    d_data->icon = icon;
-
-    int indent = margin() + d_data->spacing;
-    if ( icon.width() > 0 )
-        indent += icon.width() + d_data->spacing;
-
-    setIndent( indent );
-}
-
-/*!
-  \return Pixmap representing a plot item
-  \sa setIcon()
-*/
-QPixmap QwtLegendLabel::icon() const
-{
-    return d_data->icon;
-}
-
-/*!
-   \brief Change the spacing between icon and text
-
-   \param spacing Spacing
-   \sa spacing(), QwtTextLabel::margin()
-*/
-void QwtLegendLabel::setSpacing( int spacing )
-{
-    spacing = qMax( spacing, 0 );
-    if ( spacing != d_data->spacing )
-    {
-        d_data->spacing = spacing;
-
-        int indent = margin() + d_data->spacing;
-        if ( d_data->icon.width() > 0 )
-            indent += d_data->icon.width() + d_data->spacing;
-
-        setIndent( indent );
-    }
-}
-
-/*!
-   \return Spacing between icon and text
-   \sa setSpacing(), QwtTextLabel::margin()
-*/
-int QwtLegendLabel::spacing() const
-{
-    return d_data->spacing;
-}
-
-/*!
-    Check/Uncheck a the item
-
-    \param on check/uncheck
-    \sa setItemMode()
-*/
-void QwtLegendLabel::setChecked( bool on )
-{
-    if ( d_data->itemMode == QwtLegendData::Checkable )
-    {
-        const bool isBlocked = signalsBlocked();
-        blockSignals( true );
-
-        setDown( on );
-
-        blockSignals( isBlocked );
-    }
-}
-
-//! Return true, if the item is checked
-bool QwtLegendLabel::isChecked() const
-{
-    return d_data->itemMode == QwtLegendData::Checkable && isDown();
-}
-
-//! Set the item being down
-void QwtLegendLabel::setDown( bool down )
-{
-    if ( down == d_data->isDown )
-        return;
-
-    d_data->isDown = down;
-    update();
-
-    if ( d_data->itemMode == QwtLegendData::Clickable )
-    {
-        if ( d_data->isDown )
-            Q_EMIT pressed();
-        else
-        {
-            Q_EMIT released();
-            Q_EMIT clicked();
-        }
-    }
-
-    if ( d_data->itemMode == QwtLegendData::Checkable )
-        Q_EMIT checked( d_data->isDown );
-}
-
-//! Return true, if the item is down
-bool QwtLegendLabel::isDown() const
-{
-    return d_data->isDown;
-}
-
-//! Return a size hint
-QSize QwtLegendLabel::sizeHint() const
-{
-    QSize sz = QwtTextLabel::sizeHint();
-    sz.setHeight( qMax( sz.height(), d_data->icon.height() + 4 ) );
-
-    if ( d_data->itemMode != QwtLegendData::ReadOnly )
-    {
-        sz += buttonShift( this );
-        sz = sz.expandedTo( QApplication::globalStrut() );
-    }
-
-    return sz;
-}
-
-//! Paint event
-void QwtLegendLabel::paintEvent( QPaintEvent *e )
-{
-    const QRect cr = contentsRect();
-
-    QPainter painter( this );
-    painter.setClipRegion( e->region() );
-
-    if ( d_data->isDown )
-    {
-        qDrawWinButton( &painter, 0, 0, width(), height(),
-            palette(), true );
-    }
-
-    painter.save();
-
-    if ( d_data->isDown )
-    {
-        const QSize shiftSize = buttonShift( this );
-        painter.translate( shiftSize.width(), shiftSize.height() );
-    }
-
-    painter.setClipRect( cr );
-
-    drawContents( &painter );
-
-    if ( !d_data->icon.isNull() )
-    {
-        QRect iconRect = cr;
-        iconRect.setX( iconRect.x() + margin() );
-        if ( d_data->itemMode != QwtLegendData::ReadOnly )
-            iconRect.setX( iconRect.x() + ButtonFrame );
-
-        iconRect.setSize( d_data->icon.size() );
-        iconRect.moveCenter( QPoint( iconRect.center().x(), cr.center().y() ) );
-
-        painter.drawPixmap( iconRect, d_data->icon );
-    }
-
-    painter.restore();
-}
-
-//! Handle mouse press events
-void QwtLegendLabel::mousePressEvent( QMouseEvent *e )
-{
-    if ( e->button() == Qt::LeftButton )
-    {
-        switch ( d_data->itemMode )
-        {
-            case QwtLegendData::Clickable:
-            {
-                setDown( true );
-                return;
-            }
-            case QwtLegendData::Checkable:
-            {
-                setDown( !isDown() );
-                return;
-            }
-            default:;
-        }
-    }
-    QwtTextLabel::mousePressEvent( e );
-}
-
-//! Handle mouse release events
-void QwtLegendLabel::mouseReleaseEvent( QMouseEvent *e )
-{
-    if ( e->button() == Qt::LeftButton )
-    {
-        switch ( d_data->itemMode )
-        {
-            case QwtLegendData::Clickable:
-            {
-                setDown( false );
-                return;
-            }
-            case QwtLegendData::Checkable:
-            {
-                return; // do nothing, but accept
-            }
-            default:;
-        }
-    }
-    QwtTextLabel::mouseReleaseEvent( e );
-}
-
-//! Handle key press events
-void QwtLegendLabel::keyPressEvent( QKeyEvent *e )
-{
-    if ( e->key() == Qt::Key_Space )
-    {
-        switch ( d_data->itemMode )
-        {
-            case QwtLegendData::Clickable:
-            {
-                if ( !e->isAutoRepeat() )
-                    setDown( true );
-                return;
-            }
-            case QwtLegendData::Checkable:
-            {
-                if ( !e->isAutoRepeat() )
-                    setDown( !isDown() );
-                return;
-            }
-            default:;
-        }
-    }
-
-    QwtTextLabel::keyPressEvent( e );
-}
-
-//! Handle key release events
-void QwtLegendLabel::keyReleaseEvent( QKeyEvent *e )
-{
-    if ( e->key() == Qt::Key_Space )
-    {
-        switch ( d_data->itemMode )
-        {
-            case QwtLegendData::Clickable:
-            {
-                if ( !e->isAutoRepeat() )
-                    setDown( false );
-                return;
-            }
-            case QwtLegendData::Checkable:
-            {
-                return; // do nothing, but accept
-            }
-            default:;
-        }
-    }
-
-    QwtTextLabel::keyReleaseEvent( e );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_label.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_label.h
deleted file mode 100644
index 9906b0313b27ed5b9448ff471ae76b35227ee262..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_legend_label.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_LEGEND_LABEL_H
-#define QWT_LEGEND_LABEL_H
-
-#include "qwt_global.h"
-#include "qwt_legend_data.h"
-#include "qwt_text.h"
-#include "qwt_text_label.h"
-#include <qpixmap.h>
-
-class QwtLegendData;
-
-/*!
-  \brief A widget representing something on a QwtLegend.
-*/
-class QWT_EXPORT QwtLegendLabel: public QwtTextLabel
-{
-    Q_OBJECT
-public:
-    explicit QwtLegendLabel( QWidget *parent = 0 );
-    virtual ~QwtLegendLabel();
-
-    void setData( const QwtLegendData & );
-    const QwtLegendData &data() const;
-
-    void setItemMode( QwtLegendData::Mode );
-    QwtLegendData::Mode itemMode() const;
-
-    void setSpacing( int spacing );
-    int spacing() const;
-
-    virtual void setText( const QwtText & );
-
-    void setIcon( const QPixmap & );
-    QPixmap icon() const;
-
-    virtual QSize sizeHint() const;
-
-    bool isChecked() const;
-
-public Q_SLOTS:
-    void setChecked( bool on );
-
-Q_SIGNALS:
-    //! Signal, when the legend item has been clicked
-    void clicked();
-
-    //! Signal, when the legend item has been pressed
-    void pressed();
-
-    //! Signal, when the legend item has been released
-    void released();
-
-    //! Signal, when the legend item has been toggled
-    void checked( bool );
-
-protected:
-    void setDown( bool );
-    bool isDown() const;
-
-    virtual void paintEvent( QPaintEvent * );
-    virtual void mousePressEvent( QMouseEvent * );
-    virtual void mouseReleaseEvent( QMouseEvent * );
-    virtual void keyPressEvent( QKeyEvent * );
-    virtual void keyReleaseEvent( QKeyEvent * );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif 
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_magnifier.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_magnifier.cpp
deleted file mode 100644
index c131f5fd6c2c67450dd094004267788d1f74709b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_magnifier.cpp
+++ /dev/null
@@ -1,492 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_magnifier.h"
-#include "qwt_math.h"
-#include <qevent.h>
-#include <qwidget.h>
-
-class QwtMagnifier::PrivateData
-{
-public:
-    PrivateData():
-        isEnabled( false ),
-        wheelFactor( 0.9 ),
-        wheelModifiers( Qt::NoModifier ),
-        mouseFactor( 0.95 ),
-        mouseButton( Qt::RightButton ),
-        mouseButtonModifiers( Qt::NoModifier ),
-        keyFactor( 0.9 ),
-        zoomInKey( Qt::Key_Plus ),
-        zoomInKeyModifiers( Qt::NoModifier ),
-        zoomOutKey( Qt::Key_Minus ),
-        zoomOutKeyModifiers( Qt::NoModifier ),
-        mousePressed( false )
-    {
-    }
-
-    bool isEnabled;
-
-    double wheelFactor;
-    Qt::KeyboardModifiers wheelModifiers;
-
-    double mouseFactor;
-
-    Qt::MouseButton mouseButton;
-    Qt::KeyboardModifiers mouseButtonModifiers;
-
-    double keyFactor;
-
-    int zoomInKey;
-    Qt::KeyboardModifiers zoomInKeyModifiers;
-
-    int zoomOutKey;
-    Qt::KeyboardModifiers  zoomOutKeyModifiers;
-
-    bool mousePressed;
-    bool hasMouseTracking;
-    QPoint mousePos;
-};
-
-/*!
-   Constructor
-   \param parent Widget to be magnified
-*/
-QwtMagnifier::QwtMagnifier( QWidget *parent ):
-    QObject( parent )
-{
-    d_data = new PrivateData();
-    setEnabled( true );
-}
-
-//! Destructor
-QwtMagnifier::~QwtMagnifier()
-{
-    delete d_data;
-}
-
-/*!
-  \brief En/disable the magnifier
-
-  When enabled is true an event filter is installed for
-  the observed widget, otherwise the event filter is removed.
-
-  \param on true or false
-  \sa isEnabled(), eventFilter()
-*/
-void QwtMagnifier::setEnabled( bool on )
-{
-    if ( d_data->isEnabled != on )
-    {
-        d_data->isEnabled = on;
-
-        QObject *o = parent();
-        if ( o )
-        {
-            if ( d_data->isEnabled )
-                o->installEventFilter( this );
-            else
-                o->removeEventFilter( this );
-        }
-    }
-}
-
-/*!
-  \return true when enabled, false otherwise
-  \sa setEnabled(), eventFilter()
-*/
-bool QwtMagnifier::isEnabled() const
-{
-    return d_data->isEnabled;
-}
-
-/*!
-   \brief Change the wheel factor
-
-   The wheel factor defines the ratio between the current range
-   on the parent widget and the zoomed range for each step of the wheel.
-
-   Use values > 1 for magnification (i.e. 2.0) and values < 1 for
-   scaling down (i.e. 1/2.0 = 0.5). You can use this feature for
-   inverting the direction of the wheel.
-
-   The default value is 0.9.
-
-   \param factor Wheel factor
-   \sa wheelFactor(), setWheelButtonState(),
-       setMouseFactor(), setKeyFactor()
-*/
-void QwtMagnifier::setWheelFactor( double factor )
-{
-    d_data->wheelFactor = factor;
-}
-
-/*!
-   \return Wheel factor
-   \sa setWheelFactor()
-*/
-double QwtMagnifier::wheelFactor() const
-{
-    return d_data->wheelFactor;
-}
-
-/*!
-   Assign keyboard modifiers for zooming in/out using the wheel.
-   The default modifiers are Qt::NoModifiers.
-
-   \param modifiers Keyboard modifiers
-   \sa wheelModifiers()
-*/
-void QwtMagnifier::setWheelModifiers( Qt::KeyboardModifiers modifiers )
-{
-    d_data->wheelModifiers = modifiers;
-}
-
-/*!
-   \return Wheel modifiers
-   \sa setWheelModifiers()
-*/
-Qt::KeyboardModifiers QwtMagnifier::wheelModifiers() const
-{
-    return d_data->wheelModifiers;
-}
-
-/*!
-   \brief Change the mouse factor
-
-   The mouse factor defines the ratio between the current range
-   on the parent widget and the zoomed range for each vertical mouse movement.
-   The default value is 0.95.
-
-   \param factor Wheel factor
-   \sa mouseFactor(), setMouseButton(), setWheelFactor(), setKeyFactor()
-*/
-void QwtMagnifier::setMouseFactor( double factor )
-{
-    d_data->mouseFactor = factor;
-}
-
-/*!
-   \return Mouse factor
-   \sa setMouseFactor()
-*/
-double QwtMagnifier::mouseFactor() const
-{
-    return d_data->mouseFactor;
-}
-
-/*!
-   Assign the mouse button, that is used for zooming in/out.
-   The default value is Qt::RightButton.
-
-   \param button Button
-   \param modifiers Keyboard modifiers
-
-   \sa getMouseButton()
-*/
-void QwtMagnifier::setMouseButton( 
-    Qt::MouseButton button, Qt::KeyboardModifiers modifiers )
-{
-    d_data->mouseButton = button;
-    d_data->mouseButtonModifiers = modifiers;
-}
-
-//! \sa setMouseButton()
-void QwtMagnifier::getMouseButton(
-    Qt::MouseButton &button, Qt::KeyboardModifiers &modifiers ) const
-{
-    button = d_data->mouseButton;
-    modifiers = d_data->mouseButtonModifiers;
-}
-
-/*!
-   \brief Change the key factor
-
-   The key factor defines the ratio between the current range
-   on the parent widget and the zoomed range for each key press of
-   the zoom in/out keys. The default value is 0.9.
-
-   \param factor Key factor
-   \sa keyFactor(), setZoomInKey(), setZoomOutKey(),
-       setWheelFactor, setMouseFactor()
-*/
-void QwtMagnifier::setKeyFactor( double factor )
-{
-    d_data->keyFactor = factor;
-}
-
-/*!
-   \return Key factor
-   \sa setKeyFactor()
-*/
-double QwtMagnifier::keyFactor() const
-{
-    return d_data->keyFactor;
-}
-
-/*!
-   Assign the key, that is used for zooming in.
-   The default combination is Qt::Key_Plus + Qt::NoModifier.
-
-   \param key
-   \param modifiers
-   \sa getZoomInKey(), setZoomOutKey()
-*/
-void QwtMagnifier::setZoomInKey( int key, 
-    Qt::KeyboardModifiers modifiers )
-{
-    d_data->zoomInKey = key;
-    d_data->zoomInKeyModifiers = modifiers;
-}
-
-/*! 
-   \brief Retrieve the settings of the zoom in key
-
-   \param key Key code, see Qt::Key
-   \param modifiers Keyboard modifiers
-
-   \sa setZoomInKey()
-*/
-void QwtMagnifier::getZoomInKey( int &key, 
-    Qt::KeyboardModifiers &modifiers ) const
-{
-    key = d_data->zoomInKey;
-    modifiers = d_data->zoomInKeyModifiers;
-}
-
-/*!
-   Assign the key, that is used for zooming out.
-   The default combination is Qt::Key_Minus + Qt::NoModifier.
-
-   \param key
-   \param modifiers
-   \sa getZoomOutKey(), setZoomOutKey()
-*/
-void QwtMagnifier::setZoomOutKey( int key, 
-    Qt::KeyboardModifiers modifiers )
-{
-    d_data->zoomOutKey = key;
-    d_data->zoomOutKeyModifiers = modifiers;
-}
-
-/*! 
-   \brief Retrieve the settings of the zoom out key
-
-   \param key Key code, see Qt::Key
-   \param modifiers Keyboard modifiers
-
-   \sa setZoomOutKey()
-*/
-void QwtMagnifier::getZoomOutKey( int &key, 
-    Qt::KeyboardModifiers &modifiers ) const
-{
-    key = d_data->zoomOutKey;
-    modifiers = d_data->zoomOutKeyModifiers;
-}
-
-/*!
-  \brief Event filter
-
-  When isEnabled() is true, the mouse events of the
-  observed widget are filtered.
-
-  \param object Object to be filtered
-  \param event Event
-
-  \return Forwarded to QObject::eventFilter()
-
-  \sa widgetMousePressEvent(), widgetMouseReleaseEvent(),
-      widgetMouseMoveEvent(), widgetWheelEvent(), widgetKeyPressEvent()
-      widgetKeyReleaseEvent()
-*/
-bool QwtMagnifier::eventFilter( QObject *object, QEvent *event )
-{
-    if ( object && object == parent() )
-    {
-        switch ( event->type() )
-        {
-            case QEvent::MouseButtonPress:
-            {
-                widgetMousePressEvent( static_cast<QMouseEvent *>( event ) );
-                break;
-            }
-            case QEvent::MouseMove:
-            {
-                widgetMouseMoveEvent( static_cast<QMouseEvent *>( event ) );
-                break;
-            }
-            case QEvent::MouseButtonRelease:
-            {
-                widgetMouseReleaseEvent( static_cast<QMouseEvent *>( event ) );
-                break;
-            }
-            case QEvent::Wheel:
-            {
-                widgetWheelEvent( static_cast<QWheelEvent *>( event ) );
-                break;
-            }
-            case QEvent::KeyPress:
-            {
-                widgetKeyPressEvent( static_cast<QKeyEvent *>( event ) );
-                break;
-            }
-            case QEvent::KeyRelease:
-            {
-                widgetKeyReleaseEvent( static_cast<QKeyEvent *>( event ) );
-                break;
-            }
-            default:;
-        }
-    }
-    return QObject::eventFilter( object, event );
-}
-
-/*!
-  Handle a mouse press event for the observed widget.
-
-  \param mouseEvent Mouse event
-  \sa eventFilter(), widgetMouseReleaseEvent(), widgetMouseMoveEvent()
-*/
-void QwtMagnifier::widgetMousePressEvent( QMouseEvent *mouseEvent )
-{
-    if ( parentWidget() == NULL )
-        return;
-
-    if ( ( mouseEvent->button() != d_data->mouseButton ) ||
-        ( mouseEvent->modifiers() != d_data->mouseButtonModifiers ) )
-    {
-        return;
-    }
-
-    d_data->hasMouseTracking = parentWidget()->hasMouseTracking();
-
-    parentWidget()->setMouseTracking( true );
-    d_data->mousePos = mouseEvent->pos();
-    d_data->mousePressed = true;
-}
-
-/*!
-  Handle a mouse release event for the observed widget.
-
-  \param mouseEvent Mouse event
-
-  \sa eventFilter(), widgetMousePressEvent(), widgetMouseMoveEvent(),
-*/
-void QwtMagnifier::widgetMouseReleaseEvent( QMouseEvent *mouseEvent )
-{
-    Q_UNUSED( mouseEvent );
-
-    if ( d_data->mousePressed && parentWidget() )
-    {
-        d_data->mousePressed = false;
-        parentWidget()->setMouseTracking( d_data->hasMouseTracking );
-    }
-}
-
-/*!
-  Handle a mouse move event for the observed widget.
-
-  \param mouseEvent Mouse event
-  \sa eventFilter(), widgetMousePressEvent(), widgetMouseReleaseEvent(),
-*/
-void QwtMagnifier::widgetMouseMoveEvent( QMouseEvent *mouseEvent )
-{
-    if ( !d_data->mousePressed )
-        return;
-
-    const int dy = mouseEvent->pos().y() - d_data->mousePos.y();
-    if ( dy != 0 )
-    {
-        double f = d_data->mouseFactor;
-        if ( dy < 0 )
-            f = 1 / f;
-
-        rescale( f );
-    }
-
-    d_data->mousePos = mouseEvent->pos();
-}
-
-/*!
-  Handle a wheel event for the observed widget.
-
-  \param wheelEvent Wheel event
-  \sa eventFilter()
-*/
-void QwtMagnifier::widgetWheelEvent( QWheelEvent *wheelEvent )
-{
-    if ( wheelEvent->modifiers() != d_data->wheelModifiers )
-    {
-        return;
-    }
-
-    if ( d_data->wheelFactor != 0.0 )
-    {
-        /*
-            A positive delta indicates that the wheel was
-            rotated forwards away from the user; a negative
-            value indicates that the wheel was rotated
-            backwards toward the user.
-            Most mouse types work in steps of 15 degrees,
-            in which case the delta value is a multiple
-            of 120 (== 15 * 8).
-         */
-        double f = qPow( d_data->wheelFactor, 
-            qAbs( wheelEvent->delta() / 120.0 ) );
-
-        if ( wheelEvent->delta() > 0 )
-            f = 1 / f;
-
-        rescale( f );
-    }
-}
-
-/*!
-  Handle a key press event for the observed widget.
-
-  \param keyEvent Key event
-  \sa eventFilter(), widgetKeyReleaseEvent()
-*/
-void QwtMagnifier::widgetKeyPressEvent( QKeyEvent *keyEvent )
-{
-    if ( keyEvent->key() == d_data->zoomInKey &&
-        keyEvent->modifiers() == d_data->zoomInKeyModifiers )
-    {
-        rescale( d_data->keyFactor );
-    }
-    else if ( keyEvent->key() == d_data->zoomOutKey &&
-        keyEvent->modifiers() == d_data->zoomOutKeyModifiers )
-    {
-        rescale( 1.0 / d_data->keyFactor );
-    }
-}
-
-/*!
-  Handle a key release event for the observed widget.
-
-  \param keyEvent Key event
-  \sa eventFilter(), widgetKeyReleaseEvent()
-*/
-void QwtMagnifier::widgetKeyReleaseEvent( QKeyEvent *keyEvent )
-{
-    Q_UNUSED( keyEvent );
-}
-
-//! \return Parent widget, where the rescaling happens
-QWidget *QwtMagnifier::parentWidget()
-{
-    return qobject_cast<QWidget *>( parent() );
-}
-
-//! \return Parent widget, where the rescaling happens
-const QWidget *QwtMagnifier::parentWidget() const
-{
-    return qobject_cast<const QWidget *>( parent() );
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_magnifier.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_magnifier.h
deleted file mode 100644
index 42ff41f852b4b4fe1c54b5d82755493d13b4905d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_magnifier.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_MAGNIFIER_H
-#define QWT_MAGNIFIER_H 1
-
-#include "qwt_global.h"
-#include <qobject.h>
-
-class QWidget;
-class QMouseEvent;
-class QWheelEvent;
-class QKeyEvent;
-
-/*!
-  \brief QwtMagnifier provides zooming, by magnifying in steps.
-
-  Using QwtMagnifier a plot can be zoomed in/out in steps using
-  keys, the mouse wheel or moving a mouse button in vertical direction.
-*/
-class QWT_EXPORT QwtMagnifier: public QObject
-{
-    Q_OBJECT
-
-public:
-    explicit QwtMagnifier( QWidget * );
-    virtual ~QwtMagnifier();
-
-    QWidget *parentWidget();
-    const QWidget *parentWidget() const;
-
-    void setEnabled( bool );
-    bool isEnabled() const;
-
-    // mouse
-    void setMouseFactor( double );
-    double mouseFactor() const;
-
-    void setMouseButton( Qt::MouseButton, Qt::KeyboardModifiers = Qt::NoModifier );
-    void getMouseButton( Qt::MouseButton &, Qt::KeyboardModifiers & ) const;
-
-    // mouse wheel
-    void setWheelFactor( double );
-    double wheelFactor() const;
-
-    void setWheelModifiers( Qt::KeyboardModifiers );
-    Qt::KeyboardModifiers wheelModifiers() const;
-
-    // keyboard
-    void setKeyFactor( double );
-    double keyFactor() const;
-
-    void setZoomInKey( int key, Qt::KeyboardModifiers = Qt::NoModifier );
-    void getZoomInKey( int &key, Qt::KeyboardModifiers & ) const;
-
-    void setZoomOutKey( int key, Qt::KeyboardModifiers = Qt::NoModifier );
-    void getZoomOutKey( int &key, Qt::KeyboardModifiers & ) const;
-
-    virtual bool eventFilter( QObject *, QEvent * );
-
-protected:
-    /*!
-       Rescale the parent widget
-       \param factor Scale factor
-     */
-    virtual void rescale( double factor ) = 0;
-
-    virtual void widgetMousePressEvent( QMouseEvent * );
-    virtual void widgetMouseReleaseEvent( QMouseEvent * );
-    virtual void widgetMouseMoveEvent( QMouseEvent * );
-    virtual void widgetWheelEvent( QWheelEvent * );
-    virtual void widgetKeyPressEvent( QKeyEvent * );
-    virtual void widgetKeyReleaseEvent( QKeyEvent * );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_math.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_math.cpp
deleted file mode 100644
index 2186e02ee3ea4058cacd36087b2b80e876560529..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_math.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_math.h"
-
-/*!
-  \brief Find the smallest value in an array
-  \param array Pointer to an array
-  \param size Array size
-*/
-double qwtGetMin( const double *array, int size )
-{
-    if ( size <= 0 )
-        return 0.0;
-
-    double rv = array[0];
-    for ( int i = 1; i < size; i++ )
-        rv = qMin( rv, array[i] );
-
-    return rv;
-}
-
-
-/*!
-  \brief Find the largest value in an array
-  \param array Pointer to an array
-  \param size Array size
-*/
-double qwtGetMax( const double *array, int size )
-{
-    if ( size <= 0 )
-        return 0.0;
-
-    double rv = array[0];
-    for ( int i = 1; i < size; i++ )
-        rv = qMax( rv, array[i] );
-
-    return rv;
-}
-
-/*!
-  \brief Normalize an angle to be int the range [0.0, 2 * PI[
-  \param radians Angle in radians
-  \return Normalized angle in radians
-*/
-double qwtNormalizeRadians( double radians )
-{
-    double a = ::fmod( radians, 2.0 * M_PI );
-    if ( a < 0.0 )
-        a += 2.0 * M_PI;
-
-    return a;
-
-}
-
-/*!
-  \brief Normalize an angle to be int the range [0.0, 360.0[
-  \param radians Angle in degrees
-  \return Normalized angle in degrees
-*/
-double qwtNormalizeDegrees( double degrees )
-{
-    double a = ::fmod( degrees, 360.0 );
-    if ( a < 0.0 )
-        a += 360.0;
-
-    return a;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_math.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_math.h
deleted file mode 100644
index d6d0495ff3540e003ebdcfa2ae082cbf0eafdfa7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_math.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_MATH_H
-#define QWT_MATH_H
-
-#include "qwt_global.h"
-
-#if defined(_MSC_VER)
-/*
-  Microsoft says:
-
-  Define _USE_MATH_DEFINES before including math.h to expose these macro
-  definitions for common math constants.  These are placed under an #ifdef
-  since these commonly-defined names are not part of the C/C++ standards.
-*/
-#define _USE_MATH_DEFINES 1
-#endif
-
-#include <qmath.h>
-#include "qwt_global.h"
-
-#ifndef M_PI_2
-// For Qt <= 4.8.4 M_PI_2 is not known by MinGW-w64 
-// when compiling with -std=c++11
-#define M_PI_2 (1.57079632679489661923)
-#endif
-
-#ifndef LOG_MIN
-//! Minimum value for logarithmic scales
-#define LOG_MIN 1.0e-100
-#endif
-
-#ifndef LOG_MAX
-//! Maximum value for logarithmic scales
-#define LOG_MAX 1.0e100
-#endif
-
-QWT_EXPORT double qwtGetMin( const double *array, int size );
-QWT_EXPORT double qwtGetMax( const double *array, int size );
-
-QWT_EXPORT double qwtNormalizeRadians( double radians );
-QWT_EXPORT double qwtNormalizeDegrees( double degrees );
-
-/*!
-  \brief Compare 2 values, relative to an interval
-
-  Values are "equal", when :
-  \f$\cdot value2 - value1 <= abs(intervalSize * 10e^{-6})\f$
-
-  \param value1 First value to compare
-  \param value2 Second value to compare
-  \param intervalSize interval size
-
-  \return 0: if equal, -1: if value2 > value1, 1: if value1 > value2
-*/
-inline int qwtFuzzyCompare( double value1, double value2, double intervalSize )
-{
-    const double eps = qAbs( 1.0e-6 * intervalSize );
-
-    if ( value2 - value1 > eps )
-        return -1;
-
-    if ( value1 - value2 > eps )
-        return 1;
-
-    return 0;
-}
-
-
-inline bool qwtFuzzyGreaterOrEqual( double d1, double d2 )
-{
-    return ( d1 >= d2 ) || qFuzzyCompare( d1, d2 );
-}
-
-inline bool qwtFuzzyLessOrEqual( double d1, double d2 )
-{
-    return ( d1 <= d2 ) || qFuzzyCompare( d1, d2 );
-}
-
-//! Return the sign
-inline int qwtSign( double x )
-{
-    if ( x > 0.0 )
-        return 1;
-    else if ( x < 0.0 )
-        return ( -1 );
-    else
-        return 0;
-}
-
-//! Return the square of a number
-inline double qwtSqr( double x )
-{
-    return x * x;
-}
-
-//! Approximation of arc tangent ( error below 0,005 radians )
-inline double qwtFastAtan( double x )
-{
-    if ( x < -1.0 )
-        return -M_PI_2 - x / ( x * x + 0.28 );
-
-    if ( x > 1.0 )
-        return M_PI_2 - x / ( x * x + 0.28 );
-
-    return x / ( 1.0 + x * x * 0.28 );
-}
-
-//! Approximation of arc tangent ( error below 0,005 radians )
-inline double qwtFastAtan2( double y, double x )
-{
-    if ( x > 0 )
-        return qwtFastAtan( y / x );
-
-    if ( x < 0 )
-    {
-        const double d = qwtFastAtan( y / x );
-        return ( y >= 0 ) ? d + M_PI : d - M_PI;
-    }
-
-    if ( y < 0.0 )
-        return -M_PI_2;
-
-    if ( y > 0.0 )
-        return M_PI_2;
-
-    return 0.0;
-}
-
-//! Translate degrees into radians
-inline double qwtRadians( double degrees )
-{
-    return degrees * M_PI / 180.0;
-}
-
-//! Translate radians into degrees
-inline double qwtDegrees( double degrees )
-{
-    return degrees * 180.0 / M_PI;
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_matrix_raster_data.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_matrix_raster_data.cpp
deleted file mode 100644
index d0d2703d06e65ff59cbb576d6debbd7bb8c2bee6..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_matrix_raster_data.cpp
+++ /dev/null
@@ -1,298 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_matrix_raster_data.h"
-#include <qnumeric.h>
-#include <qmath.h>
-
-class QwtMatrixRasterData::PrivateData
-{
-public:
-    PrivateData():
-        resampleMode(QwtMatrixRasterData::NearestNeighbour),
-        numColumns(0)
-    {
-    }
-
-    inline double value(int row, int col) const
-    {
-        return values.data()[ row * numColumns + col ];
-    }
-
-    QwtMatrixRasterData::ResampleMode resampleMode;
-
-    QVector<double> values;
-    int numColumns;
-    int numRows;
-
-    double dx;
-    double dy;
-};
-
-//! Constructor
-QwtMatrixRasterData::QwtMatrixRasterData()
-{
-    d_data = new PrivateData();
-    update();
-}
-
-//! Destructor
-QwtMatrixRasterData::~QwtMatrixRasterData()
-{
-    delete d_data;
-}
-
-/*!
-   \brief Set the resampling algorithm
-
-   \param mode Resampling mode
-   \sa resampleMode(), value()
-*/
-void QwtMatrixRasterData::setResampleMode( ResampleMode mode )
-{
-    d_data->resampleMode = mode;
-}
-
-/*!
-   \return resampling algorithm
-   \sa setResampleMode(), value()
-*/
-QwtMatrixRasterData::ResampleMode QwtMatrixRasterData::resampleMode() const
-{
-    return d_data->resampleMode;
-}
-
-/*!
-   \brief Assign the bounding interval for an axis
-
-   Setting the bounding intervals for the X/Y axis is mandatory
-   to define the positions for the values of the value matrix.
-   The interval in Z direction defines the possible range for
-   the values in the matrix, what is f.e used by QwtPlotSpectrogram
-   to map values to colors. The Z-interval might be the bounding
-   interval of the values in the matrix, but usually it isn't.
-   ( f.e a interval of 0.0-100.0 for values in percentage )
-
-   \param axis X, Y or Z axis
-   \param interval Interval
-   
-   \sa QwtRasterData::interval(), setValueMatrix()
-*/
-void QwtMatrixRasterData::setInterval( 
-    Qt::Axis axis, const QwtInterval &interval )
-{
-    QwtRasterData::setInterval( axis, interval );
-    update();
-}
-
-/*!
-   \brief Assign a value matrix
-
-   The positions of the values are calculated by dividing
-   the bounding rectangle of the X/Y intervals into equidistant
-   rectangles ( pixels ). Each value corresponds to the center of 
-   a pixel.
-
-   \param values Vector of values
-   \param numColumns Number of columns
-
-   \sa valueMatrix(), numColumns(), numRows(), setInterval()()
-*/
-void QwtMatrixRasterData::setValueMatrix( 
-    const QVector<double> &values, int numColumns )
-{
-    d_data->values = values;
-    d_data->numColumns = qMax( numColumns, 0 );
-    update();
-}
-
-/*!
-   \return Value matrix
-   \sa setValueMatrix(), numColumns(), numRows(), setInterval()
-*/
-const QVector<double> QwtMatrixRasterData::valueMatrix() const
-{
-    return d_data->values;
-}
-
-/*!
-  \brief Change a single value in the matrix
-
-  \param row Row index
-  \param col Column index
-  \param value New value
-
-  \sa value(), setValueMatrix()
-*/
-void QwtMatrixRasterData::setValue( int row, int col, double value )
-{
-    if ( row >= 0 && row < d_data->numRows &&
-        col >= 0 && col < d_data->numColumns )
-    {
-        const int index = row * d_data->numColumns + col;
-        d_data->values.data()[ index ] = value;
-    }
-}
-
-/*!
-   \return Number of columns of the value matrix
-   \sa valueMatrix(), numRows(), setValueMatrix()
-*/
-int QwtMatrixRasterData::numColumns() const
-{
-    return d_data->numColumns;
-}
-
-/*!
-   \return Number of rows of the value matrix
-   \sa valueMatrix(), numColumns(), setValueMatrix()
-*/
-int QwtMatrixRasterData::numRows() const
-{
-    return d_data->numRows;
-}
-
-/*!
-   \brief Calculate the pixel hint
-
-   pixelHint() returns the geometry of a pixel, that can be used 
-   to calculate the resolution and alignment of the plot item, that is
-   representing the data. 
-
-   - NearestNeighbour\n
-     pixelHint() returns the surrounding pixel of the top left value 
-     in the matrix.
-
-   - BilinearInterpolation\n
-     Returns an empty rectangle recommending
-     to render in target device ( f.e. screen ) resolution. 
-
-   \param area Requested area, ignored
-   \return Calculated hint
-
-   \sa ResampleMode, setMatrix(), setInterval()
-*/
-QRectF QwtMatrixRasterData::pixelHint( const QRectF &area ) const
-{
-    Q_UNUSED( area )
-
-    QRectF rect;
-    if ( d_data->resampleMode == NearestNeighbour )
-    {
-        const QwtInterval intervalX = interval( Qt::XAxis );
-        const QwtInterval intervalY = interval( Qt::YAxis );
-        if ( intervalX.isValid() && intervalY.isValid() )
-        {
-            rect = QRectF( intervalX.minValue(), intervalY.minValue(),
-                d_data->dx, d_data->dy );
-        }
-    }
-
-    return rect;
-}
-
-/*!
-   \return the value at a raster position
-
-   \param x X value in plot coordinates
-   \param y Y value in plot coordinates
-
-   \sa ResampleMode
-*/
-double QwtMatrixRasterData::value( double x, double y ) const
-{
-    const QwtInterval xInterval = interval( Qt::XAxis );
-    const QwtInterval yInterval = interval( Qt::YAxis );
-
-    if ( !( xInterval.contains(x) && yInterval.contains(y) ) )
-        return qQNaN();
-
-    double value;
-
-    switch( d_data->resampleMode )
-    {
-        case BilinearInterpolation:
-        {
-            int col1 = qRound( (x - xInterval.minValue() ) / d_data->dx ) - 1;
-            int row1 = qRound( (y - yInterval.minValue() ) / d_data->dy ) - 1;
-            int col2 = col1 + 1;
-            int row2 = row1 + 1;
-
-            if ( col1 < 0 )
-                col1 = col2;
-            else if ( col2 >= static_cast<int>( d_data->numColumns ) )
-                col2 = col1;
-
-            if ( row1 < 0 )
-                row1 = row2;
-            else if ( row2 >= static_cast<int>( d_data->numRows ) )
-                row2 = row1;
-
-            const double v11 = d_data->value( row1, col1 );
-            const double v21 = d_data->value( row1, col2 );
-            const double v12 = d_data->value( row2, col1 );
-            const double v22 = d_data->value( row2, col2 );
-
-            const double x2 = xInterval.minValue() + 
-                ( col2 + 0.5 ) * d_data->dx;
-            const double y2 = yInterval.minValue() + 
-                ( row2 + 0.5 ) * d_data->dy;
-                
-            const double rx = ( x2 - x ) / d_data->dx;
-            const double ry = ( y2 - y ) / d_data->dy;
-
-            const double vr1 = rx * v11 + ( 1.0 - rx ) * v21;
-            const double vr2 = rx * v12 + ( 1.0 - rx ) * v22;
-
-            value = ry * vr1 + ( 1.0 - ry ) * vr2;
-
-            break;
-        }
-        case NearestNeighbour:
-        default:
-        {
-            int row = int( (y - yInterval.minValue() ) / d_data->dy );
-            int col = int( (x - xInterval.minValue() ) / d_data->dx );
-
-            // In case of intervals, where the maximum is included
-            // we get out of bound for row/col, when the value for the
-            // maximum is requested. Instead we return the value
-            // from the last row/col
-
-            if ( row >= d_data->numRows )
-                row = d_data->numRows - 1;
-
-            if ( col >= d_data->numColumns )
-                col = d_data->numColumns - 1;
-
-            value = d_data->value( row, col );
-        }
-    }
-
-    return value;
-}
-
-void QwtMatrixRasterData::update()
-{
-    d_data->numRows = 0;
-    d_data->dx = 0.0;
-    d_data->dy = 0.0;
-
-    if ( d_data->numColumns > 0 )
-    {
-        d_data->numRows = d_data->values.size() / d_data->numColumns;
-
-        const QwtInterval xInterval = interval( Qt::XAxis );
-        const QwtInterval yInterval = interval( Qt::YAxis );
-        if ( xInterval.isValid() )
-            d_data->dx = xInterval.width() / d_data->numColumns;
-        if ( yInterval.isValid() )
-            d_data->dy = yInterval.width() / d_data->numRows;
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_matrix_raster_data.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_matrix_raster_data.h
deleted file mode 100644
index 34c4cf472aabe81cc2aa58228f6afebccef9d53f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_matrix_raster_data.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_MATRIX_RASTER_DATA_H
-#define QWT_MATRIX_RASTER_DATA_H 1
-
-#include "qwt_global.h"
-#include "qwt_raster_data.h"
-#include <qvector.h>
-
-/*!
-  \brief A class representing a matrix of values as raster data
-
-  QwtMatrixRasterData implements an interface for a matrix of
-  equidistant values, that can be used by a QwtPlotRasterItem. 
-  It implements a couple of resampling algorithms, to provide
-  values for positions, that or not on the value matrix.
-*/
-class QWT_EXPORT QwtMatrixRasterData: public QwtRasterData
-{
-public:
-    /*!
-      \brief Resampling algorithm
-      The default setting is NearestNeighbour;
-    */
-    enum ResampleMode
-    {
-        /*!
-          Return the value from the matrix, that is nearest to the
-          the requested position.
-         */
-        NearestNeighbour,
-
-        /*!
-          Interpolate the value from the distances and values of the 
-          4 surrounding values in the matrix,
-         */
-        BilinearInterpolation
-    };
-
-    QwtMatrixRasterData();
-    virtual ~QwtMatrixRasterData();
-
-    void setResampleMode(ResampleMode mode);
-    ResampleMode resampleMode() const;
-
-    virtual void setInterval( Qt::Axis, const QwtInterval & );
-
-    void setValueMatrix( const QVector<double> &values, int numColumns );
-    const QVector<double> valueMatrix() const;
-
-    void setValue( int row, int col, double value );
-
-    int numColumns() const;
-    int numRows() const;
-
-    virtual QRectF pixelHint( const QRectF & ) const;
-
-    virtual double value( double x, double y ) const;
-
-private:
-    void update();
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_null_paintdevice.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_null_paintdevice.cpp
deleted file mode 100644
index 1d1169f050286e1d54b8d8042167843e1cbc4cf1..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_null_paintdevice.cpp
+++ /dev/null
@@ -1,593 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_null_paintdevice.h"
-#include <qpaintengine.h>
-#include <qpixmap.h>
-
-class QwtNullPaintDevice::PrivateData
-{
-public:
-    PrivateData():
-        mode( QwtNullPaintDevice::NormalMode )
-    {
-    }
-
-    QwtNullPaintDevice::Mode mode;
-};
-
-class QwtNullPaintDevice::PaintEngine: public QPaintEngine
-{
-public:
-    PaintEngine();
-
-    virtual bool begin( QPaintDevice * );
-    virtual bool end();
-
-    virtual Type type () const;
-    virtual void updateState(const QPaintEngineState &);
-
-    virtual void drawRects(const QRect *, int );
-    virtual void drawRects(const QRectF *, int );
-
-    virtual void drawLines(const QLine *, int );
-    virtual void drawLines(const QLineF *, int );
-
-    virtual void drawEllipse(const QRectF &);
-    virtual void drawEllipse(const QRect &);
-
-    virtual void drawPath(const QPainterPath &);
-
-    virtual void drawPoints(const QPointF *, int );
-    virtual void drawPoints(const QPoint *, int );
-
-    virtual void drawPolygon(const QPointF *, int , PolygonDrawMode );
-    virtual void drawPolygon(const QPoint *, int , PolygonDrawMode );
-
-    virtual void drawPixmap(const QRectF &, 
-        const QPixmap &, const QRectF &);
-
-    virtual void drawTextItem(const QPointF &, const QTextItem &);
-
-    virtual void drawTiledPixmap(const QRectF &, 
-        const QPixmap &, const QPointF &s);
-
-    virtual void drawImage(const QRectF &, 
-        const QImage &, const QRectF &, Qt::ImageConversionFlags );
-
-private:
-    QwtNullPaintDevice *nullDevice();
-};
-    
-QwtNullPaintDevice::PaintEngine::PaintEngine():
-    QPaintEngine( QPaintEngine::AllFeatures )
-{
-}
-
-bool QwtNullPaintDevice::PaintEngine::begin( QPaintDevice * )
-{
-    setActive( true );
-    return true;
-}
-
-bool QwtNullPaintDevice::PaintEngine::end()
-{
-    setActive( false );
-    return true;
-}
-
-QPaintEngine::Type QwtNullPaintDevice::PaintEngine::type() const
-{
-    return QPaintEngine::User;
-}
-
-void QwtNullPaintDevice::PaintEngine::drawRects(
-    const QRect *rects, int rectCount)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() != QwtNullPaintDevice::NormalMode )
-    {
-        QPaintEngine::drawRects( rects, rectCount );
-        return;
-    }
-
-    device->drawRects( rects, rectCount );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawRects(
-    const QRectF *rects, int rectCount)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() != QwtNullPaintDevice::NormalMode )
-    {
-        QPaintEngine::drawRects( rects, rectCount );
-        return;
-    }
-
-    device->drawRects( rects, rectCount );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawLines(
-    const QLine *lines, int lineCount)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() != QwtNullPaintDevice::NormalMode )
-    {
-        QPaintEngine::drawLines( lines, lineCount );
-        return;
-    }
-
-    device->drawLines( lines, lineCount );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawLines(
-    const QLineF *lines, int lineCount)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() != QwtNullPaintDevice::NormalMode )
-    {
-        QPaintEngine::drawLines( lines, lineCount );
-        return;
-    }
-
-    device->drawLines( lines, lineCount );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawEllipse(
-    const QRectF &rect)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() != QwtNullPaintDevice::NormalMode )
-    {
-        QPaintEngine::drawEllipse( rect );
-        return;
-    }
-
-    device->drawEllipse( rect );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawEllipse(
-    const QRect &rect)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() != QwtNullPaintDevice::NormalMode )
-    {
-        QPaintEngine::drawEllipse( rect );
-        return;
-    }
-
-    device->drawEllipse( rect );
-}
-
-
-void QwtNullPaintDevice::PaintEngine::drawPath(
-    const QPainterPath &path)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    device->drawPath( path );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawPoints(
-    const QPointF *points, int pointCount)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() != QwtNullPaintDevice::NormalMode )
-    {
-        QPaintEngine::drawPoints( points, pointCount );
-        return;
-    }
-
-    device->drawPoints( points, pointCount );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawPoints(
-    const QPoint *points, int pointCount)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() != QwtNullPaintDevice::NormalMode )
-    {
-        QPaintEngine::drawPoints( points, pointCount );
-        return;
-    }
-
-    device->drawPoints( points, pointCount );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawPolygon(
-    const QPointF *points, int pointCount, PolygonDrawMode mode)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() == QwtNullPaintDevice::PathMode )
-    {
-        QPainterPath path;
-
-        if ( pointCount > 0 )
-        {
-            path.moveTo( points[0] );
-            for ( int i = 1; i < pointCount; i++ )
-                path.lineTo( points[i] );
-
-            if ( mode != PolylineMode )
-                path.closeSubpath();
-        }
-
-        device->drawPath( path );
-        return;
-    }
-
-    device->drawPolygon( points, pointCount, mode );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawPolygon(
-    const QPoint *points, int pointCount, PolygonDrawMode mode)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() == QwtNullPaintDevice::PathMode )
-    {
-        QPainterPath path;
-
-        if ( pointCount > 0 )
-        {
-            path.moveTo( points[0] );
-            for ( int i = 1; i < pointCount; i++ )
-                path.lineTo( points[i] );
-
-            if ( mode != PolylineMode )
-                path.closeSubpath();
-        }
-
-        device->drawPath( path );
-        return;
-    }
-
-    device->drawPolygon( points, pointCount, mode );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawPixmap( 
-    const QRectF &rect, const QPixmap &pm, const QRectF &subRect )
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    device->drawPixmap( rect, pm, subRect );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawTextItem(
-    const QPointF &pos, const QTextItem &textItem)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() != QwtNullPaintDevice::NormalMode )
-    {
-        QPaintEngine::drawTextItem( pos, textItem );
-        return;
-    }
-
-    device->drawTextItem( pos, textItem );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawTiledPixmap(
-    const QRectF &rect, const QPixmap &pixmap, 
-    const QPointF &subRect)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    if ( device->mode() != QwtNullPaintDevice::NormalMode )
-    {
-        QPaintEngine::drawTiledPixmap( rect, pixmap, subRect );
-        return;
-    }   
-
-    device->drawTiledPixmap( rect, pixmap, subRect );
-}
-
-void QwtNullPaintDevice::PaintEngine::drawImage(
-    const QRectF &rect, const QImage &image, 
-    const QRectF &subRect, Qt::ImageConversionFlags flags)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    device->drawImage( rect, image, subRect, flags );
-}
-
-void QwtNullPaintDevice::PaintEngine::updateState(
-    const QPaintEngineState &state)
-{
-    QwtNullPaintDevice *device = nullDevice();
-    if ( device == NULL )
-        return;
-
-    device->updateState( state );
-}
-
-inline QwtNullPaintDevice *QwtNullPaintDevice::PaintEngine::nullDevice()
-{
-    if ( !isActive() )
-        return NULL;
-
-    return static_cast<QwtNullPaintDevice *>( paintDevice() );
-}
-
-//! Constructor
-QwtNullPaintDevice::QwtNullPaintDevice():
-    d_engine( NULL )
-{
-    d_data = new PrivateData;
-}
-
-//! Destructor
-QwtNullPaintDevice::~QwtNullPaintDevice()
-{
-    delete d_engine;
-    delete d_data;
-}
-
-/*!
-    Set the render mode
-
-    \param mode New mode
-    \sa mode()
- */
-void QwtNullPaintDevice::setMode( Mode mode )
-{
-    d_data->mode = mode;
-}
-
-/*! 
-    \return Render mode
-    \sa setMode()
-*/
-QwtNullPaintDevice::Mode QwtNullPaintDevice::mode() const
-{
-    return d_data->mode;
-}
-
-//! See QPaintDevice::paintEngine()
-QPaintEngine *QwtNullPaintDevice::paintEngine() const
-{
-    if ( d_engine == NULL )
-    {
-        QwtNullPaintDevice *that = 
-            const_cast< QwtNullPaintDevice * >( this );
-
-        that->d_engine = new PaintEngine();
-    }
-
-    return d_engine;
-}
-
-/*! 
-    See QPaintDevice::metric()
-
-    \param deviceMetric Type of metric
-    \return Metric information for the given paint device metric.
-
-    \sa sizeMetrics()
-*/
-int QwtNullPaintDevice::metric( PaintDeviceMetric deviceMetric ) const
-{
-    int value;
-
-    switch ( deviceMetric ) 
-    {
-        case PdmWidth:
-        {
-            value = sizeMetrics().width();
-            break;
-        }
-        case PdmHeight:
-        {
-            value = sizeMetrics().height();
-            break;
-        }
-        case PdmNumColors:
-        {
-            value = 0xffffffff;
-            break;
-        }
-        case PdmDepth:
-        {
-            value = 32;
-            break;
-        }
-        case PdmPhysicalDpiX:
-        case PdmPhysicalDpiY:
-        case PdmDpiY:
-        case PdmDpiX:
-        {
-            value = 72;
-            break;
-        }
-        case PdmWidthMM:
-        {
-            value = qRound( metric( PdmWidth ) * 25.4 / metric( PdmDpiX ) );
-            break;
-        }
-        case PdmHeightMM:
-        {
-            value = qRound( metric( PdmHeight ) * 25.4 / metric( PdmDpiY ) );
-            break;
-        }
-        default:
-            value = 0;
-    }
-    return value;
-
-}
-
-//! See QPaintEngine::drawRects()
-void QwtNullPaintDevice::drawRects(
-    const QRect *rects, int rectCount)
-{
-    Q_UNUSED(rects);
-    Q_UNUSED(rectCount);
-}
-
-//! See QPaintEngine::drawRects()
-void QwtNullPaintDevice::drawRects(
-    const QRectF *rects, int rectCount)
-{
-    Q_UNUSED(rects);
-    Q_UNUSED(rectCount);
-}
-
-//! See QPaintEngine::drawLines()
-void QwtNullPaintDevice::drawLines(
-    const QLine *lines, int lineCount)
-{
-    Q_UNUSED(lines);
-    Q_UNUSED(lineCount);
-}
-
-//! See QPaintEngine::drawLines()
-void QwtNullPaintDevice::drawLines(
-    const QLineF *lines, int lineCount)
-{
-    Q_UNUSED(lines);
-    Q_UNUSED(lineCount);
-}
-
-//! See QPaintEngine::drawEllipse()
-void QwtNullPaintDevice::drawEllipse( const QRectF &rect )
-{
-    Q_UNUSED(rect);
-}
-
-//! See QPaintEngine::drawEllipse()
-void QwtNullPaintDevice::drawEllipse( const QRect &rect )
-{
-    Q_UNUSED(rect);
-}
-
-//! See QPaintEngine::drawPath()
-void QwtNullPaintDevice::drawPath( const QPainterPath &path )
-{
-    Q_UNUSED(path);
-}
-
-//! See QPaintEngine::drawPoints()
-void QwtNullPaintDevice::drawPoints(
-    const QPointF *points, int pointCount)
-{
-    Q_UNUSED(points);
-    Q_UNUSED(pointCount);
-}
-
-//! See QPaintEngine::drawPoints()
-void QwtNullPaintDevice::drawPoints(
-    const QPoint *points, int pointCount)
-{
-    Q_UNUSED(points);
-    Q_UNUSED(pointCount);
-}
-
-//! See QPaintEngine::drawPolygon()
-void QwtNullPaintDevice::drawPolygon(
-    const QPointF *points, int pointCount, 
-    QPaintEngine::PolygonDrawMode mode)
-{
-    Q_UNUSED(points);
-    Q_UNUSED(pointCount);
-    Q_UNUSED(mode);
-}
-
-//! See QPaintEngine::drawPolygon()
-void QwtNullPaintDevice::drawPolygon(
-    const QPoint *points, int pointCount, 
-    QPaintEngine::PolygonDrawMode mode)
-{
-    Q_UNUSED(points);
-    Q_UNUSED(pointCount);
-    Q_UNUSED(mode);
-}
-
-//! See QPaintEngine::drawPixmap()
-void QwtNullPaintDevice::drawPixmap( const QRectF &rect, 
-    const QPixmap &pm, const QRectF &subRect )
-{
-    Q_UNUSED(rect);
-    Q_UNUSED(pm);
-    Q_UNUSED(subRect);
-}
-
-//! See QPaintEngine::drawTextItem()
-void QwtNullPaintDevice::drawTextItem(
-    const QPointF &pos, const QTextItem &textItem)
-{
-    Q_UNUSED(pos);
-    Q_UNUSED(textItem);
-}
-
-//! See QPaintEngine::drawTiledPixmap()
-void QwtNullPaintDevice::drawTiledPixmap(
-    const QRectF &rect, const QPixmap &pixmap, 
-    const QPointF &subRect)
-{
-    Q_UNUSED(rect);
-    Q_UNUSED(pixmap);
-    Q_UNUSED(subRect);
-}
-
-//! See QPaintEngine::drawImage()
-void QwtNullPaintDevice::drawImage(
-    const QRectF &rect, const QImage &image, 
-    const QRectF &subRect, Qt::ImageConversionFlags flags)
-{
-    Q_UNUSED(rect);
-    Q_UNUSED(image);
-    Q_UNUSED(subRect);
-    Q_UNUSED(flags);
-}
-
-//! See QPaintEngine::updateState()
-void QwtNullPaintDevice::updateState( 
-    const QPaintEngineState &state )
-{
-    Q_UNUSED(state);
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_null_paintdevice.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_null_paintdevice.h
deleted file mode 100644
index 679ec5d55c1e25d779d25720b79a7794e8a41f73..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_null_paintdevice.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_NULL_PAINT_DEVICE_H
-#define QWT_NULL_PAINT_DEVICE_H 1
-
-#include "qwt_global.h"
-#include <qpaintdevice.h>
-#include <qpaintengine.h>
-
-/*!
-  \brief A null paint device doing nothing
-
-  Sometimes important layout/rendering geometries are not 
-  available or changeable from the public Qt class interface. 
-  ( f.e hidden in the style implementation ).
-
-  QwtNullPaintDevice can be used to manipulate or filter out 
-  this information by analyzing the stream of paint primitives.
-
-  F.e. QwtNullPaintDevice is used by QwtPlotCanvas to identify
-  styled backgrounds with rounded corners.
-*/
-
-class QWT_EXPORT QwtNullPaintDevice: public QPaintDevice
-{
-public:
-    /*!
-      \brief Render mode
-
-      \sa setMode(), mode()
-     */
-    enum Mode
-    {
-        /*!
-           All vector graphic primitives are painted by
-           the corresponding draw methods
-         */
-        NormalMode, 
-
-        /*!
-           Vector graphic primitives ( beside polygons ) are mapped to a QPainterPath
-           and are painted by drawPath. In PathMode mode
-           only a few draw methods are called:
-
-           - drawPath()
-           - drawPixmap()
-           - drawImage()
-           - drawPolygon()
-         */
-        PolygonPathMode,
-
-        /*!
-           Vector graphic primitives are mapped to a QPainterPath
-           and are painted by drawPath. In PathMode mode
-           only a few draw methods are called:
-
-           - drawPath()
-           - drawPixmap()
-           - drawImage()
-         */
-        PathMode
-    };
-
-    QwtNullPaintDevice();
-    virtual ~QwtNullPaintDevice();
-
-    void setMode( Mode );
-    Mode mode() const;
-
-    virtual QPaintEngine *paintEngine() const;
-
-    virtual int metric( PaintDeviceMetric metric ) const;
-
-    virtual void drawRects(const QRect *, int );
-    virtual void drawRects(const QRectF *, int );
-
-    virtual void drawLines(const QLine *, int );
-    virtual void drawLines(const QLineF *, int );
-
-    virtual void drawEllipse(const QRectF &);
-    virtual void drawEllipse(const QRect &);
-
-    virtual void drawPath(const QPainterPath &);
-
-    virtual void drawPoints(const QPointF *, int );
-    virtual void drawPoints(const QPoint *, int );
-
-    virtual void drawPolygon(
-        const QPointF *, int , QPaintEngine::PolygonDrawMode );
-
-    virtual void drawPolygon(
-        const QPoint *, int , QPaintEngine::PolygonDrawMode );
-
-    virtual void drawPixmap(const QRectF &,
-        const QPixmap &, const QRectF &);
-
-    virtual void drawTextItem(const QPointF &, const QTextItem &);
-
-    virtual void drawTiledPixmap(const QRectF &,
-        const QPixmap &, const QPointF &s);
-
-    virtual void drawImage(const QRectF &,
-        const QImage &, const QRectF &, Qt::ImageConversionFlags );
-
-    virtual void updateState( const QPaintEngineState &state );
-
-protected:
-    //! \return Size needed to implement metric()
-    virtual QSize sizeMetrics() const = 0;
-
-private:
-    class PaintEngine;
-    PaintEngine *d_engine;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter.cpp
deleted file mode 100644
index b952ea245babf5d244b60f96bd1430adf26f1453..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter.cpp
+++ /dev/null
@@ -1,1298 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_painter.h"
-#include "qwt_math.h"
-#include "qwt_clipper.h"
-#include "qwt_color_map.h"
-#include "qwt_scale_map.h"
-#include <qwindowdefs.h>
-#include <qwidget.h>
-#include <qframe.h>
-#include <qrect.h>
-#include <qpainter.h>
-#include <qpalette.h>
-#include <qpaintdevice.h>
-#include <qpixmap.h>
-#include <qstyle.h>
-#include <qtextdocument.h>
-#include <qabstracttextdocumentlayout.h>
-#include <qstyleoption.h>
-#include <qpaintengine.h>
-#include <qapplication.h>
-#include <qdesktopwidget.h>
-
-#if QT_VERSION >= 0x050000
-#include <qwindow.h>
-#endif
-
-#if QT_VERSION < 0x050000 
-
-#ifdef Q_WS_X11
-#include <qx11info_x11.h>
-#endif
-
-#endif
-
-bool QwtPainter::d_polylineSplitting = true;
-bool QwtPainter::d_roundingAlignment = true;
-
-static inline bool qwtIsClippingNeeded( 
-    const QPainter *painter, QRectF &clipRect )
-{
-    bool doClipping = false;
-    const QPaintEngine *pe = painter->paintEngine();
-    if ( pe && pe->type() == QPaintEngine::SVG )
-    {
-        // The SVG paint engine ignores any clipping,
-
-        if ( painter->hasClipping() )
-        {
-            doClipping = true;
-            clipRect = painter->clipRegion().boundingRect();
-        }
-    }
-
-    return doClipping;
-}
-
-template <class T>
-static inline void qwtDrawPolyline( QPainter *painter,
-    const T *points, int pointCount, bool polylineSplitting )
-{
-    bool doSplit = false;
-    if ( polylineSplitting )
-    {
-        const QPaintEngine *pe = painter->paintEngine();
-        if ( pe && pe->type() == QPaintEngine::Raster )
-        {
-            /*
-                The raster paint engine seems to use some algo with O(n*n).
-                ( Qt 4.3 is better than Qt 4.2, but remains unacceptable)
-                To work around this problem, we have to split the polygon into
-                smaller pieces.
-             */
-            doSplit = true;
-        }
-    }
-
-    if ( doSplit )
-    {
-        const int splitSize = 6;
-
-        for ( int i = 0; i < pointCount; i += splitSize )
-        {
-            const int n = qMin( splitSize + 1, pointCount - i );
-            painter->drawPolyline( points + i, n );
-        }
-    }
-    else
-    {
-        painter->drawPolyline( points, pointCount );
-    }
-}
-
-static inline QSize qwtScreenResolution()
-{
-    static QSize screenResolution;
-    if ( !screenResolution.isValid() )
-    {
-        QDesktopWidget *desktop = QApplication::desktop();
-        if ( desktop )
-        {
-            screenResolution.setWidth( desktop->logicalDpiX() );
-            screenResolution.setHeight( desktop->logicalDpiY() );
-        }
-    }
-
-    return screenResolution;
-}
-
-static inline void qwtUnscaleFont( QPainter *painter )
-{
-    if ( painter->font().pixelSize() >= 0 )
-        return;
-
-    const QSize screenResolution = qwtScreenResolution();
-
-    const QPaintDevice *pd = painter->device();
-    if ( pd->logicalDpiX() != screenResolution.width() ||
-        pd->logicalDpiY() != screenResolution.height() )
-    {
-        QFont pixelFont( painter->font(), QApplication::desktop() );
-        pixelFont.setPixelSize( QFontInfo( pixelFont ).pixelSize() );
-
-        painter->setFont( pixelFont );
-    }
-}
-
-/*!
-  Check is the application is running with the X11 graphics system
-  that has some special capabilities that can be used for incremental
-  painting to a widget.
-
-  \return True, when the graphics system is X11
-*/
-bool QwtPainter::isX11GraphicsSystem()
-{
-    static int onX11 = -1;
-    if ( onX11 < 0 )
-    {
-        QPixmap pm( 1, 1 );
-        QPainter painter( &pm );
-
-        onX11 = ( painter.paintEngine()->type() == QPaintEngine::X11 ) ? 1 : 0;
-    }
-
-    return onX11 == 1;
-}
-
-/*!
-  Check if the painter is using a paint engine, that aligns
-  coordinates to integers. Today these are all paint engines
-  beside QPaintEngine::Pdf and QPaintEngine::SVG.
-
-  If we have an integer based paint engine it is also
-  checked if the painter has a transformation matrix,
-  that rotates or scales.
-
-  \param  painter Painter
-  \return true, when the painter is aligning
-
-  \sa setRoundingAlignment()
-*/
-bool QwtPainter::isAligning( QPainter *painter )
-{
-    if ( painter && painter->isActive() )
-    {
-        switch ( painter->paintEngine()->type() )
-        {
-            case QPaintEngine::Pdf:
-            case QPaintEngine::SVG:
-                return false;
-
-            default:;
-        }
-
-        const QTransform tr = painter->transform();
-        if ( tr.isRotating() || tr.isScaling() )
-        {
-            // we might have to check translations too
-            return false;
-        }
-    }
-
-    return true;
-}
-
-/*!
-  Enable whether coordinates should be rounded, before they are painted
-  to a paint engine that floors to integer values. For other paint engines
-  ( PDF, SVG ) this flag has no effect.
-  QwtPainter stores this flag only, the rounding itself is done in 
-  the painting code ( f.e the plot items ).
-
-  The default setting is true. 
-
-  \sa roundingAlignment(), isAligning()
-*/
-void QwtPainter::setRoundingAlignment( bool enable )
-{
-    d_roundingAlignment = enable;
-}
-
-/*!
-  \brief En/Disable line splitting for the raster paint engine
-
-  In some Qt versions the raster paint engine paints polylines of many points
-  much faster when they are split in smaller chunks: f.e all supported Qt versions
-  >= Qt 5.0 when drawing an antialiased polyline with a pen width >=2.
-
-  The default setting is true.
-
-  \sa polylineSplitting()
-*/
-void QwtPainter::setPolylineSplitting( bool enable )
-{
-    d_polylineSplitting = enable;
-}
-
-//! Wrapper for QPainter::drawPath()
-void QwtPainter::drawPath( QPainter *painter, const QPainterPath &path )
-{
-    painter->drawPath( path );
-}
-
-//! Wrapper for QPainter::drawRect()
-void QwtPainter::drawRect( QPainter *painter, double x, double y, double w, double h )
-{
-    drawRect( painter, QRectF( x, y, w, h ) );
-}
-
-//! Wrapper for QPainter::drawRect()
-void QwtPainter::drawRect( QPainter *painter, const QRectF &rect )
-{
-    const QRectF r = rect;
-
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    if ( deviceClipping )
-    {
-        if ( !clipRect.intersects( r ) )
-            return;
-
-        if ( !clipRect.contains( r ) )
-        {
-            fillRect( painter, r & clipRect, painter->brush() );
-
-            painter->save();
-            painter->setBrush( Qt::NoBrush );
-            drawPolyline( painter, QPolygonF( r ) );
-            painter->restore();
-
-            return;
-        }
-    }
-
-    painter->drawRect( r );
-}
-
-//! Wrapper for QPainter::fillRect()
-void QwtPainter::fillRect( QPainter *painter,
-    const QRectF &rect, const QBrush &brush )
-{
-    if ( !rect.isValid() )
-        return;
-
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    /*
-      Performance of Qt4 is horrible for a non trivial brush. Without
-      clipping expect minutes or hours for repainting large rectangles
-      (might result from zooming)
-    */
-
-    if ( deviceClipping )
-        clipRect &= painter->window();
-    else
-        clipRect = painter->window();
-
-    if ( painter->hasClipping() )
-        clipRect &= painter->clipRegion().boundingRect();
-
-    QRectF r = rect;
-    if ( deviceClipping )
-        r = r.intersected( clipRect );
-
-    if ( r.isValid() )
-        painter->fillRect( r, brush );
-}
-
-//! Wrapper for QPainter::drawPie()
-void QwtPainter::drawPie( QPainter *painter, const QRectF &rect,
-    int a, int alen )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-    if ( deviceClipping && !clipRect.contains( rect ) )
-        return;
-
-    painter->drawPie( rect, a, alen );
-}
-
-//! Wrapper for QPainter::drawEllipse()
-void QwtPainter::drawEllipse( QPainter *painter, const QRectF &rect )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    if ( deviceClipping && !clipRect.contains( rect ) )
-        return;
-
-    painter->drawEllipse( rect );
-}
-
-//! Wrapper for QPainter::drawText()
-void QwtPainter::drawText( QPainter *painter, double x, double y,
-        const QString &text )
-{
-    drawText( painter, QPointF( x, y ), text );
-}
-
-//! Wrapper for QPainter::drawText()
-void QwtPainter::drawText( QPainter *painter, const QPointF &pos,
-        const QString &text )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    if ( deviceClipping && !clipRect.contains( pos ) )
-        return;
-
-
-    painter->save();
-    qwtUnscaleFont( painter );
-    painter->drawText( pos, text );
-    painter->restore();
-}
-
-//! Wrapper for QPainter::drawText()
-void QwtPainter::drawText( QPainter *painter,
-    double x, double y, double w, double h,
-    int flags, const QString &text )
-{
-    drawText( painter, QRectF( x, y, w, h ), flags, text );
-}
-
-//! Wrapper for QPainter::drawText()
-void QwtPainter::drawText( QPainter *painter, const QRectF &rect,
-        int flags, const QString &text )
-{
-    painter->save();
-    qwtUnscaleFont( painter );
-    painter->drawText( rect, flags, text );
-    painter->restore();
-}
-
-#ifndef QT_NO_RICHTEXT
-
-/*!
-  Draw a text document into a rectangle
-
-  \param painter Painter
-  \param rect Traget rectangle
-  \param flags Alignments/Text flags, see QPainter::drawText()
-  \param text Text document
-*/
-void QwtPainter::drawSimpleRichText( QPainter *painter, const QRectF &rect,
-    int flags, const QTextDocument &text )
-{
-    QTextDocument *txt = text.clone();
-
-    painter->save();
-
-    QRectF unscaledRect = rect;
-
-    if ( painter->font().pixelSize() < 0 )
-    {
-        const QSize res = qwtScreenResolution();
-
-        const QPaintDevice *pd = painter->device();
-        if ( pd->logicalDpiX() != res.width() ||
-            pd->logicalDpiY() != res.height() )
-        {
-            QTransform transform;
-            transform.scale( res.width() / double( pd->logicalDpiX() ),
-                res.height() / double( pd->logicalDpiY() ));
-
-            painter->setWorldTransform( transform, true );
-            unscaledRect = transform.inverted().mapRect(rect);
-        }
-    }  
-
-    txt->setDefaultFont( painter->font() );
-    txt->setPageSize( QSizeF( unscaledRect.width(), QWIDGETSIZE_MAX ) );
-
-    QAbstractTextDocumentLayout* layout = txt->documentLayout();
-
-    const double height = layout->documentSize().height();
-    double y = unscaledRect.y();
-    if ( flags & Qt::AlignBottom )
-        y += ( unscaledRect.height() - height );
-    else if ( flags & Qt::AlignVCenter )
-        y += ( unscaledRect.height() - height ) / 2;
-
-    QAbstractTextDocumentLayout::PaintContext context;
-    context.palette.setColor( QPalette::Text, painter->pen().color() );
-
-    painter->translate( unscaledRect.x(), y );
-    layout->draw( painter, context );
-
-    painter->restore();
-    delete txt;
-}
-
-#endif // !QT_NO_RICHTEXT
-
-
-//! Wrapper for QPainter::drawLine()
-void QwtPainter::drawLine( QPainter *painter,
-    const QPointF &p1, const QPointF &p2 )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    if ( deviceClipping &&
-        !( clipRect.contains( p1 ) && clipRect.contains( p2 ) ) )
-    {
-        QPolygonF polygon;
-        polygon += p1;
-        polygon += p2;
-        drawPolyline( painter, polygon );
-        return;
-    }
-
-    painter->drawLine( p1, p2 );
-}
-
-//! Wrapper for QPainter::drawPolygon()
-void QwtPainter::drawPolygon( QPainter *painter, const QPolygonF &polygon )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    QPolygonF cpa = polygon;
-    if ( deviceClipping )
-        cpa = QwtClipper::clipPolygonF( clipRect, polygon );
-
-    painter->drawPolygon( cpa );
-}
-
-//! Wrapper for QPainter::drawPolyline()
-void QwtPainter::drawPolyline( QPainter *painter, const QPolygonF &polygon )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    QPolygonF cpa = polygon;
-    if ( deviceClipping )
-        cpa = QwtClipper::clipPolygonF( clipRect, cpa );
-
-    qwtDrawPolyline<QPointF>( painter,
-        cpa.constData(), cpa.size(), d_polylineSplitting );
-}
-
-//! Wrapper for QPainter::drawPolyline()
-void QwtPainter::drawPolyline( QPainter *painter,
-    const QPointF *points, int pointCount )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    if ( deviceClipping )
-    {
-        QPolygonF polygon( pointCount );
-        ::memcpy( polygon.data(), points, pointCount * sizeof( QPointF ) );
-
-        polygon = QwtClipper::clipPolygonF( clipRect, polygon );
-        qwtDrawPolyline<QPointF>( painter,
-            polygon.constData(), polygon.size(), d_polylineSplitting );
-    }
-    else
-    {
-        qwtDrawPolyline<QPointF>( painter, points, pointCount, d_polylineSplitting );
-    }
-}
-
-//! Wrapper for QPainter::drawPolygon()
-void QwtPainter::drawPolygon( QPainter *painter, const QPolygon &polygon )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    QPolygon cpa = polygon;
-    if ( deviceClipping )
-        cpa = QwtClipper::clipPolygon( clipRect, polygon );
-
-    painter->drawPolygon( cpa );
-}
-
-//! Wrapper for QPainter::drawPolyline()
-void QwtPainter::drawPolyline( QPainter *painter, const QPolygon &polygon )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    QPolygon cpa = polygon;
-    if ( deviceClipping )
-        cpa = QwtClipper::clipPolygon( clipRect, cpa );
-
-    qwtDrawPolyline<QPoint>( painter,
-        cpa.constData(), cpa.size(), d_polylineSplitting );
-}
-
-//! Wrapper for QPainter::drawPolyline()
-void QwtPainter::drawPolyline( QPainter *painter,
-    const QPoint *points, int pointCount )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    if ( deviceClipping )
-    {
-        QPolygon polygon( pointCount );
-        ::memcpy( polygon.data(), points, pointCount * sizeof( QPoint ) );
-
-        polygon = QwtClipper::clipPolygon( clipRect, polygon );
-        qwtDrawPolyline<QPoint>( painter,
-            polygon.constData(), polygon.size(), d_polylineSplitting );
-    }
-    else
-        qwtDrawPolyline<QPoint>( painter, points, pointCount, d_polylineSplitting );
-}
-
-//! Wrapper for QPainter::drawPoint()
-void QwtPainter::drawPoint( QPainter *painter, const QPointF &pos )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    if ( deviceClipping && !clipRect.contains( pos ) )
-        return;
-
-    painter->drawPoint( pos );
-}
-
-//! Wrapper for QPainter::drawPoint()
-void QwtPainter::drawPoint( QPainter *painter, const QPoint &pos )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    if ( deviceClipping )
-    {
-        const int minX = qCeil( clipRect.left() );
-        const int maxX = qFloor( clipRect.right() );
-        const int minY = qCeil( clipRect.top() );
-        const int maxY = qFloor( clipRect.bottom() );
-
-        if ( pos.x() < minX || pos.x() > maxX 
-            || pos.y() < minY || pos.y() > maxY )
-        {
-            return;
-        }
-    }
-
-    painter->drawPoint( pos );
-}
-
-//! Wrapper for QPainter::drawPoints()
-void QwtPainter::drawPoints( QPainter *painter, 
-    const QPoint *points, int pointCount )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    if ( deviceClipping )
-    {
-        const int minX = qCeil( clipRect.left() );
-        const int maxX = qFloor( clipRect.right() );
-        const int minY = qCeil( clipRect.top() );
-        const int maxY = qFloor( clipRect.bottom() );
-
-        const QRect r( minX, minY, maxX - minX, maxY - minY );
-
-        QPolygon clippedPolygon( pointCount );
-        QPoint *clippedData = clippedPolygon.data();
-
-        int numClippedPoints = 0;
-        for ( int i = 0; i < pointCount; i++ )
-        {
-            if ( r.contains( points[i] ) )
-                clippedData[ numClippedPoints++ ] = points[i];
-        }
-        painter->drawPoints( clippedData, numClippedPoints );
-    }
-    else
-    {
-        painter->drawPoints( points, pointCount );
-    }
-}
-
-//! Wrapper for QPainter::drawPoints()
-void QwtPainter::drawPoints( QPainter *painter, 
-    const QPointF *points, int pointCount )
-{
-    QRectF clipRect;
-    const bool deviceClipping = qwtIsClippingNeeded( painter, clipRect );
-
-    if ( deviceClipping )
-    {
-        QPolygonF clippedPolygon( pointCount );
-        QPointF *clippedData = clippedPolygon.data();
-
-        int numClippedPoints = 0;
-        for ( int i = 0; i < pointCount; i++ )
-        {
-            if ( clipRect.contains( points[i] ) )
-                clippedData[ numClippedPoints++ ] = points[i];
-        }
-        painter->drawPoints( clippedData, numClippedPoints );
-    }
-    else
-    {
-        painter->drawPoints( points, pointCount );
-    }
-}
-
-//! Wrapper for QPainter::drawImage()
-void QwtPainter::drawImage( QPainter *painter,
-    const QRectF &rect, const QImage &image )
-{
-    const QRect alignedRect = rect.toAlignedRect();
-
-    if ( alignedRect != rect )
-    {
-        const QRectF clipRect = rect.adjusted( 0.0, 0.0, -1.0, -1.0 );
-
-        painter->save();
-        painter->setClipRect( clipRect, Qt::IntersectClip );
-        painter->drawImage( alignedRect, image );
-        painter->restore();
-    }
-    else
-    {
-        painter->drawImage( alignedRect, image );
-    }
-}
-
-//! Wrapper for QPainter::drawPixmap()
-void QwtPainter::drawPixmap( QPainter *painter,
-    const QRectF &rect, const QPixmap &pixmap )
-{
-    const QRect alignedRect = rect.toAlignedRect();
-
-    if ( alignedRect != rect )
-    {
-        const QRectF clipRect = rect.adjusted( 0.0, 0.0, -1.0, -1.0 );
-
-        painter->save();
-        painter->setClipRect( clipRect, Qt::IntersectClip );
-        painter->drawPixmap( alignedRect, pixmap );
-        painter->restore();
-    }
-    else
-    {
-        painter->drawPixmap( alignedRect, pixmap );
-    }
-}
-
-//! Draw a focus rectangle on a widget using its style.
-void QwtPainter::drawFocusRect( QPainter *painter, const QWidget *widget )
-{
-    drawFocusRect( painter, widget, widget->rect() );
-}
-
-//! Draw a focus rectangle on a widget using its style.
-void QwtPainter::drawFocusRect( QPainter *painter, const QWidget *widget,
-    const QRect &rect )
-{
-    QStyleOptionFocusRect opt;
-    opt.init( widget );
-    opt.rect = rect;
-    opt.state |= QStyle::State_HasFocus;
-
-    widget->style()->drawPrimitive( QStyle::PE_FrameFocusRect,
-        &opt, painter, widget );
-}
-
-/*!
-  Draw a round frame 
-
-  \param painter Painter
-  \param rect Frame rectangle
-  \param palette QPalette::WindowText is used for plain borders
-                 QPalette::Dark and QPalette::Light for raised
-                 or sunken borders
-  \param lineWidth Line width
-  \param frameStyle bitwise OR´ed value of QFrame::Shape and QFrame::Shadow
-*/
-void QwtPainter::drawRoundFrame( QPainter *painter,
-    const QRectF &rect, const QPalette &palette, 
-    int lineWidth, int frameStyle )
-{
-    enum Style
-    {
-        Plain,
-        Sunken,
-        Raised
-    };
-
-    Style style = Plain;
-    if ( (frameStyle & QFrame::Sunken) == QFrame::Sunken )
-        style = Sunken;
-    else if ( (frameStyle & QFrame::Raised) == QFrame::Raised )
-        style = Raised;
-
-    const double lw2 = 0.5 * lineWidth;
-    QRectF r = rect.adjusted( lw2, lw2, -lw2, -lw2 );
-
-    QBrush brush;
-
-    if ( style != Plain )
-    {
-        QColor c1 = palette.color( QPalette::Light );
-        QColor c2 = palette.color( QPalette::Dark );
-
-        if ( style == Sunken )
-            qSwap( c1, c2 );
-
-        QLinearGradient gradient( r.topLeft(), r.bottomRight() );
-        gradient.setColorAt( 0.0, c1 );
-#if 0
-        gradient.setColorAt( 0.3, c1 );
-        gradient.setColorAt( 0.7, c2 );
-#endif
-        gradient.setColorAt( 1.0, c2 );
-
-        brush = QBrush( gradient );
-    }
-    else // Plain
-    {
-        brush = palette.brush( QPalette::WindowText );
-    }
-
-    painter->save();
-
-    painter->setPen( QPen( brush, lineWidth ) );
-    painter->setBrush( Qt::NoBrush );
-
-    painter->drawEllipse( r );
-
-    painter->restore();
-}
-
-/*!
-  Draw a rectangular frame
-
-  \param painter Painter
-  \param rect Frame rectangle
-  \param palette Palette
-  \param foregroundRole Foreground role used for QFrame::Plain
-  \param frameWidth Frame width
-  \param midLineWidth Used for QFrame::Box
-  \param frameStyle bitwise OR´ed value of QFrame::Shape and QFrame::Shadow
-*/
-void QwtPainter::drawFrame( QPainter *painter, const QRectF &rect,
-    const QPalette &palette, QPalette::ColorRole foregroundRole,
-    int frameWidth, int midLineWidth, int frameStyle )
-{
-    if ( frameWidth <= 0 || rect.isEmpty() )
-        return;
-
-    const int shadow = frameStyle & QFrame::Shadow_Mask;
-
-    painter->save();
-
-    if ( shadow == QFrame::Plain )
-    {
-        const QRectF outerRect = rect.adjusted( 0.0, 0.0, -1.0, -1.0 );
-        const QRectF innerRect = outerRect.adjusted( 
-            frameWidth, frameWidth, -frameWidth, -frameWidth );
-
-        QPainterPath path;
-        path.addRect( outerRect );
-        path.addRect( innerRect );
-
-        painter->setPen( Qt::NoPen );
-        painter->setBrush( palette.color( foregroundRole ) );
-
-        painter->drawPath( path );
-    }
-    else
-    {
-        const int shape = frameStyle & QFrame::Shape_Mask;
-
-        if ( shape == QFrame::Box )
-        {
-            const QRectF outerRect = rect.adjusted( 0.0, 0.0, -1.0, -1.0 );
-            const QRectF midRect1 = outerRect.adjusted( 
-                frameWidth, frameWidth, -frameWidth, -frameWidth );
-            const QRectF midRect2 = midRect1.adjusted( 
-                midLineWidth, midLineWidth, -midLineWidth, -midLineWidth );
-
-            const QRectF innerRect = midRect2.adjusted( 
-                frameWidth, frameWidth, -frameWidth, -frameWidth );
-
-            QPainterPath path1;
-            path1.moveTo( outerRect.bottomLeft() );
-            path1.lineTo( outerRect.topLeft() );
-            path1.lineTo( outerRect.topRight() );
-            path1.lineTo( midRect1.topRight() );
-            path1.lineTo( midRect1.topLeft() );
-            path1.lineTo( midRect1.bottomLeft() );
-
-            QPainterPath path2;
-            path2.moveTo( outerRect.bottomLeft() );
-            path2.lineTo( outerRect.bottomRight() );
-            path2.lineTo( outerRect.topRight() );
-            path2.lineTo( midRect1.topRight() );
-            path2.lineTo( midRect1.bottomRight() );
-            path2.lineTo( midRect1.bottomLeft() );
-
-            QPainterPath path3;
-            path3.moveTo( midRect2.bottomLeft() );
-            path3.lineTo( midRect2.topLeft() );
-            path3.lineTo( midRect2.topRight() );
-            path3.lineTo( innerRect.topRight() );
-            path3.lineTo( innerRect.topLeft() );
-            path3.lineTo( innerRect.bottomLeft() );
-
-            QPainterPath path4;
-            path4.moveTo( midRect2.bottomLeft() );
-            path4.lineTo( midRect2.bottomRight() );
-            path4.lineTo( midRect2.topRight() );
-            path4.lineTo( innerRect.topRight() );
-            path4.lineTo( innerRect.bottomRight() );
-            path4.lineTo( innerRect.bottomLeft() );
-
-            QPainterPath path5;
-            path5.addRect( midRect1 );
-            path5.addRect( midRect2 );
-
-            painter->setPen( Qt::NoPen );
-
-            QBrush brush1 = palette.dark().color();
-            QBrush brush2 = palette.light().color();
-
-            if ( shadow == QFrame::Raised )
-                qSwap( brush1, brush2 );
-
-            painter->setBrush( brush1 );
-            painter->drawPath( path1 );
-            painter->drawPath( path4 );
-
-            painter->setBrush( brush2 );
-            painter->drawPath( path2 );
-            painter->drawPath( path3 );
-
-            painter->setBrush( palette.mid() );
-            painter->drawPath( path5 );
-        }
-#if 0
-        // qDrawWinPanel doesn't result in something nice
-        // on a scalable document like PDF. Better draw a
-        // Panel.
-
-        else if ( shape == QFrame::WinPanel )
-        {
-            painter->setRenderHint( QPainter::NonCosmeticDefaultPen, true );
-            qDrawWinPanel ( painter, rect.toRect(), palette,
-                frameStyle & QFrame::Sunken );
-        }
-        else if ( shape == QFrame::StyledPanel )
-        {
-        }
-#endif
-        else
-        {
-            const QRectF outerRect = rect.adjusted( 0.0, 0.0, -1.0, -1.0 );
-            const QRectF innerRect = outerRect.adjusted( 
-                frameWidth - 1.0, frameWidth - 1.0, 
-                -( frameWidth - 1.0 ), -( frameWidth - 1.0 ) );
-
-            QPainterPath path1;
-            path1.moveTo( outerRect.bottomLeft() );
-            path1.lineTo( outerRect.topLeft() );
-            path1.lineTo( outerRect.topRight() );
-            path1.lineTo( innerRect.topRight() );
-            path1.lineTo( innerRect.topLeft() );
-            path1.lineTo( innerRect.bottomLeft() );
-
-
-            QPainterPath path2;
-            path2.moveTo( outerRect.bottomLeft() );
-            path2.lineTo( outerRect.bottomRight() );
-            path2.lineTo( outerRect.topRight() );
-            path2.lineTo( innerRect.topRight() );
-            path2.lineTo( innerRect.bottomRight() );
-            path2.lineTo( innerRect.bottomLeft() );
-
-            painter->setPen( Qt::NoPen );
-
-            QBrush brush1 = palette.dark().color();
-            QBrush brush2 = palette.light().color();
-
-            if ( shadow == QFrame::Raised )
-                qSwap( brush1, brush2 );
-
-            painter->setBrush( brush1 );
-            painter->drawPath( path1 );
-
-            painter->setBrush( brush2 );
-            painter->drawPath( path2 );
-        }
-
-    }
-
-    painter->restore();
-}
-
-/*!
-  Draw a rectangular frame with rounded borders
-
-  \param painter Painter
-  \param rect Frame rectangle
-  \param xRadius x-radius of the ellipses defining the corners
-  \param yRadius y-radius of the ellipses defining the corners
-  \param palette QPalette::WindowText is used for plain borders
-                 QPalette::Dark and QPalette::Light for raised
-                 or sunken borders
-  \param lineWidth Line width
-  \param frameStyle bitwise OR´ed value of QFrame::Shape and QFrame::Shadow
-*/
-
-void QwtPainter::drawRoundedFrame( QPainter *painter, 
-    const QRectF &rect, double xRadius, double yRadius, 
-    const QPalette &palette, int lineWidth, int frameStyle )
-{
-    painter->save();
-    painter->setRenderHint( QPainter::Antialiasing, true );
-    painter->setBrush( Qt::NoBrush );
-
-    double lw2 = lineWidth * 0.5;
-    QRectF r = rect.adjusted( lw2, lw2, -lw2, -lw2 );
-
-    QPainterPath path;
-    path.addRoundedRect( r, xRadius, yRadius );
-
-    enum Style
-    {
-        Plain,
-        Sunken,
-        Raised
-    };
-
-    Style style = Plain;
-    if ( (frameStyle & QFrame::Sunken) == QFrame::Sunken )
-        style = Sunken;
-    else if ( (frameStyle & QFrame::Raised) == QFrame::Raised )
-        style = Raised;
-
-    if ( style != Plain && path.elementCount() == 17 )
-    {
-        // move + 4 * ( cubicTo + lineTo )
-        QPainterPath pathList[8];
-        
-        for ( int i = 0; i < 4; i++ )
-        {
-            const int j = i * 4 + 1;
-            
-            pathList[ 2 * i ].moveTo(
-                path.elementAt(j - 1).x, path.elementAt( j - 1 ).y
-            );  
-            
-            pathList[ 2 * i ].cubicTo(
-                path.elementAt(j + 0).x, path.elementAt(j + 0).y,
-                path.elementAt(j + 1).x, path.elementAt(j + 1).y,
-                path.elementAt(j + 2).x, path.elementAt(j + 2).y );
-                
-            pathList[ 2 * i + 1 ].moveTo(
-                path.elementAt(j + 2).x, path.elementAt(j + 2).y
-            );  
-            pathList[ 2 * i + 1 ].lineTo(
-                path.elementAt(j + 3).x, path.elementAt(j + 3).y
-            );  
-        }   
-
-        QColor c1( palette.color( QPalette::Dark ) );
-        QColor c2( palette.color( QPalette::Light ) );
-
-        if ( style == Raised )
-            qSwap( c1, c2 );
-
-        for ( int i = 0; i < 4; i++ )
-        {
-            QRectF r = pathList[2 * i].controlPointRect();
-
-            QPen arcPen;
-            arcPen.setCapStyle( Qt::FlatCap );
-            arcPen.setWidth( lineWidth );
-
-            QPen linePen;
-            linePen.setCapStyle( Qt::FlatCap );
-            linePen.setWidth( lineWidth );
-
-            switch( i )
-            {
-                case 0:
-                {
-                    arcPen.setColor( c1 );
-                    linePen.setColor( c1 );
-                    break;
-                }
-                case 1:
-                {
-                    QLinearGradient gradient;
-                    gradient.setStart( r.topLeft() );
-                    gradient.setFinalStop( r.bottomRight() );
-                    gradient.setColorAt( 0.0, c1 );
-                    gradient.setColorAt( 1.0, c2 );
-
-                    arcPen.setBrush( gradient );
-                    linePen.setColor( c2 );
-                    break;
-                }
-                case 2:
-                {
-                    arcPen.setColor( c2 );
-                    linePen.setColor( c2 );
-                    break;
-                }
-                case 3:
-                {
-                    QLinearGradient gradient;
-
-                    gradient.setStart( r.bottomRight() );
-                    gradient.setFinalStop( r.topLeft() );
-                    gradient.setColorAt( 0.0, c2 );
-                    gradient.setColorAt( 1.0, c1 );
-
-                    arcPen.setBrush( gradient );
-                    linePen.setColor( c1 );
-                    break;
-                }
-            }
-
-
-            painter->setPen( arcPen );
-            painter->drawPath( pathList[ 2 * i] );
-
-            painter->setPen( linePen );
-            painter->drawPath( pathList[ 2 * i + 1] );
-        }
-    }
-    else
-    {
-        QPen pen( palette.color( QPalette::WindowText ), lineWidth );
-        painter->setPen( pen );
-        painter->drawPath( path );
-    }
-
-    painter->restore();
-}
-
-/*!
-  Draw a color bar into a rectangle
-
-  \param painter Painter
-  \param colorMap Color map
-  \param interval Value range
-  \param scaleMap Scale map
-  \param orientation Orientation
-  \param rect Traget rectangle
-*/
-void QwtPainter::drawColorBar( QPainter *painter,
-        const QwtColorMap &colorMap, const QwtInterval &interval,
-        const QwtScaleMap &scaleMap, Qt::Orientation orientation,
-        const QRectF &rect )
-{
-    QVector<QRgb> colorTable;
-    if ( colorMap.format() == QwtColorMap::Indexed )
-        colorTable = colorMap.colorTable( interval );
-
-    QColor c;
-
-    const QRect devRect = rect.toAlignedRect();
-
-    /*
-      We paint to a pixmap first to have something scalable for printing
-      ( f.e. in a Pdf document )
-     */
-
-    QPixmap pixmap( devRect.size() );
-    pixmap.fill( Qt::transparent );
-
-    QPainter pmPainter( &pixmap );
-    pmPainter.translate( -devRect.x(), -devRect.y() );
-
-    if ( orientation == Qt::Horizontal )
-    {
-        QwtScaleMap sMap = scaleMap;
-        sMap.setPaintInterval( rect.left(), rect.right() );
-
-        for ( int x = devRect.left(); x <= devRect.right(); x++ )
-        {
-            const double value = sMap.invTransform( x );
-
-            if ( colorMap.format() == QwtColorMap::RGB )
-                c.setRgba( colorMap.rgb( interval, value ) );
-            else
-                c = colorTable[colorMap.colorIndex( interval, value )];
-
-            pmPainter.setPen( c );
-            pmPainter.drawLine( x, devRect.top(), x, devRect.bottom() );
-        }
-    }
-    else // Vertical
-    {
-        QwtScaleMap sMap = scaleMap;
-        sMap.setPaintInterval( rect.bottom(), rect.top() );
-
-        for ( int y = devRect.top(); y <= devRect.bottom(); y++ )
-        {
-            const double value = sMap.invTransform( y );
-
-            if ( colorMap.format() == QwtColorMap::RGB )
-                c.setRgba( colorMap.rgb( interval, value ) );
-            else
-                c = colorTable[colorMap.colorIndex( interval, value )];
-
-            pmPainter.setPen( c );
-            pmPainter.drawLine( devRect.left(), y, devRect.right(), y );
-        }
-    }
-    pmPainter.end();
-
-    drawPixmap( painter, rect, pixmap );
-}
-
-static inline void qwtFillRect( const QWidget *widget, QPainter *painter, 
-    const QRect &rect, const QBrush &brush)
-{
-    if ( brush.style() == Qt::TexturePattern ) 
-    {
-        painter->save();
-
-        painter->setClipRect( rect );
-        painter->drawTiledPixmap(rect, brush.texture(), rect.topLeft());
-
-        painter->restore();
-    } 
-    else if ( brush.gradient() )
-    {
-        painter->save();
-
-        painter->setClipRect( rect );
-        painter->fillRect(0, 0, widget->width(), 
-            widget->height(), brush);
-
-        painter->restore();
-    } 
-    else 
-    {
-        painter->fillRect(rect, brush);
-    }
-}
-
-/*!
-  Fill a pixmap with the content of a widget
-
-  In Qt >= 5.0 QPixmap::fill() is a nop, in Qt 4.x it is buggy
-  for backgrounds with gradients. Thus fillPixmap() offers 
-  an alternative implementation.
-
-  \param widget Widget
-  \param pixmap Pixmap to be filled
-  \param offset Offset 
-
-  \sa QPixmap::fill()
- */
-void QwtPainter::fillPixmap( const QWidget *widget, 
-    QPixmap &pixmap, const QPoint &offset )
-{
-    const QRect rect( offset, pixmap.size() );
-
-    QPainter painter( &pixmap );
-    painter.translate( -offset );
-
-    const QBrush autoFillBrush = 
-        widget->palette().brush( widget->backgroundRole() );
-
-    if ( !( widget->autoFillBackground() && autoFillBrush.isOpaque() ) ) 
-    {
-        const QBrush bg = widget->palette().brush( QPalette::Window );
-        qwtFillRect( widget, &painter, rect, bg);
-    }
-
-    if ( widget->autoFillBackground() )
-        qwtFillRect( widget, &painter, rect, autoFillBrush);
-
-    if ( widget->testAttribute(Qt::WA_StyledBackground) ) 
-    {
-        painter.setClipRegion( rect );
-
-        QStyleOption opt;
-        opt.initFrom( widget );
-        widget->style()->drawPrimitive( QStyle::PE_Widget, 
-            &opt, &painter, widget );
-    }
-}
-
-/*!
-  Fill rect with the background of a widget
-
-  \param painter Painter
-  \param rect Rectangle to be filled
-  \param widget Widget
-
-  \sa QStyle::PE_Widget, QWidget::backgroundRole()
- */
-void QwtPainter::drawBackgound( QPainter *painter,
-    const QRectF &rect, const QWidget *widget )
-{
-    if ( widget->testAttribute( Qt::WA_StyledBackground ) )
-    {
-        QStyleOption opt;
-        opt.initFrom( widget );
-        opt.rect = rect.toAlignedRect();
-
-        widget->style()->drawPrimitive(
-            QStyle::PE_Widget, &opt, painter, widget);
-    }
-    else
-    {
-        const QBrush brush =
-            widget->palette().brush( widget->backgroundRole() );
-
-        painter->fillRect( rect, brush );
-    }
-}
-
-/*!
-  \return A pixmap that can be used as backing store
-
-  \param widget Widget, for which the backinstore is intended
-  \param size Size of the pixmap
- */
-QPixmap QwtPainter::backingStore( QWidget *widget, const QSize &size )
-{
-    QPixmap pm;
-
-#define QWT_HIGH_DPI 1
-
-#if QT_VERSION >= 0x050000 && QWT_HIGH_DPI
-    qreal pixelRatio = 1.0;
-
-    if ( widget && widget->windowHandle() )
-    {
-#if QT_VERSION < 0x050100
-        pixelRatio = widget->windowHandle()->devicePixelRatio();
-#else
-        pixelRatio = widget->devicePixelRatio();
-#endif
-    }
-    else
-    {
-        if ( qApp )
-            pixelRatio = qApp->devicePixelRatio();
-    }
-
-    pm = QPixmap( size * pixelRatio );
-    pm.setDevicePixelRatio( pixelRatio );
-#else
-    Q_UNUSED( widget )
-    pm = QPixmap( size );
-#endif
-
-#if QT_VERSION < 0x050000 
-#ifdef Q_WS_X11
-    if ( widget && isX11GraphicsSystem() )
-    {
-        if ( pm.x11Info().screen() != widget->x11Info().screen() )
-            pm.x11SetScreen( widget->x11Info().screen() );
-    }
-#endif
-#endif
-
-    return pm;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter.h
deleted file mode 100644
index 871f95bf84f77a1ec2a0c0a2feae5dfe4548a7d8..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PAINTER_H
-#define QWT_PAINTER_H
-
-#include "qwt_global.h"
-
-#include <qpoint.h>
-#include <qrect.h>
-#include <qpen.h>
-#include <qline.h>
-#include <qpalette.h>
-
-class QPainter;
-class QBrush;
-class QColor;
-class QWidget;
-class QPolygonF;
-class QRectF;
-class QImage;
-class QPixmap;
-class QwtScaleMap;
-class QwtColorMap;
-class QwtInterval;
-
-class QTextDocument;
-class QPainterPath;
-
-/*!
-  \brief A collection of QPainter workarounds
-*/
-class QWT_EXPORT QwtPainter
-{
-public:
-    static void setPolylineSplitting( bool );
-    static bool polylineSplitting();
-
-    static void setRoundingAlignment( bool );
-    static bool roundingAlignment();
-    static bool roundingAlignment(QPainter *);
-
-    static void drawText( QPainter *, double x, double y, const QString & );
-    static void drawText( QPainter *, const QPointF &, const QString & );
-    static void drawText( QPainter *, double x, double y, double w, double h,
-        int flags, const QString & );
-    static void drawText( QPainter *, const QRectF &, 
-        int flags, const QString & );
-
-#ifndef QT_NO_RICHTEXT
-    static void drawSimpleRichText( QPainter *, const QRectF &,
-        int flags, const QTextDocument & );
-#endif
-
-    static void drawRect( QPainter *, double x, double y, double w, double h );
-    static void drawRect( QPainter *, const QRectF &rect );
-    static void fillRect( QPainter *, const QRectF &, const QBrush & );
-
-    static void drawEllipse( QPainter *, const QRectF & );
-    static void drawPie( QPainter *, const QRectF & r, int a, int alen );
-
-    static void drawLine( QPainter *, double x1, double y1, double x2, double y2 );
-    static void drawLine( QPainter *, const QPointF &p1, const QPointF &p2 );
-    static void drawLine( QPainter *, const QLineF & );
-
-    static void drawPolygon( QPainter *, const QPolygonF & );
-    static void drawPolyline( QPainter *, const QPolygonF & );
-    static void drawPolyline( QPainter *, const QPointF *, int pointCount );
-
-    static void drawPolygon( QPainter *, const QPolygon & );
-    static void drawPolyline( QPainter *, const QPolygon & );
-    static void drawPolyline( QPainter *, const QPoint *, int pointCount );
-
-    static void drawPoint( QPainter *, const QPoint & );
-    static void drawPoints( QPainter *, const QPolygon & );
-    static void drawPoints( QPainter *, const QPoint *, int pointCount );
-
-    static void drawPoint( QPainter *, double x, double y );
-    static void drawPoint( QPainter *, const QPointF & );
-    static void drawPoints( QPainter *, const QPolygonF & );
-    static void drawPoints( QPainter *, const QPointF *, int pointCount );
-
-    static void drawPath( QPainter *, const QPainterPath & );
-    static void drawImage( QPainter *, const QRectF &, const QImage & );
-    static void drawPixmap( QPainter *, const QRectF &, const QPixmap & );
-
-    static void drawRoundFrame( QPainter *,
-        const QRectF &, const QPalette &, int lineWidth, int frameStyle );
-
-    static void drawRoundedFrame( QPainter *, 
-        const QRectF &, double xRadius, double yRadius,
-        const QPalette &, int lineWidth, int frameStyle );
-
-    static void drawFrame( QPainter *, const QRectF &rect,
-        const QPalette &palette, QPalette::ColorRole foregroundRole,
-        int lineWidth, int midLineWidth, int frameStyle ); 
-
-    static void drawFocusRect( QPainter *, const QWidget * );
-    static void drawFocusRect( QPainter *, const QWidget *, const QRect & );
-
-    static void drawColorBar( QPainter *painter,
-        const QwtColorMap &, const QwtInterval &,
-        const QwtScaleMap &, Qt::Orientation, const QRectF & );
-
-    static bool isAligning( QPainter *painter );
-    static bool isX11GraphicsSystem();
-
-    static void fillPixmap( const QWidget *, 
-        QPixmap &, const QPoint &offset = QPoint() );
-
-    static void drawBackgound( QPainter *painter,
-        const QRectF &rect, const QWidget *widget );
-
-    static QPixmap backingStore( QWidget *, const QSize & );
-
-private:
-    static bool d_polylineSplitting;
-    static bool d_roundingAlignment;
-};
-
-//!  Wrapper for QPainter::drawPoint()
-inline void QwtPainter::drawPoint( QPainter *painter, double x, double y )
-{
-    QwtPainter::drawPoint( painter, QPointF( x, y ) );
-}
-
-//! Wrapper for QPainter::drawPoints()
-inline void QwtPainter::drawPoints( QPainter *painter, const QPolygon &polygon )
-{
-    drawPoints( painter, polygon.data(), polygon.size() );
-}
-
-//! Wrapper for QPainter::drawPoints()
-inline void QwtPainter::drawPoints( QPainter *painter, const QPolygonF &polygon )
-{
-    drawPoints( painter, polygon.data(), polygon.size() );
-}
-
-//!  Wrapper for QPainter::drawLine()
-inline void QwtPainter::drawLine( QPainter *painter,
-    double x1, double y1, double x2, double y2 )
-{
-    QwtPainter::drawLine( painter, QPointF( x1, y1 ), QPointF( x2, y2 ) );
-}
-
-//!  Wrapper for QPainter::drawLine()
-inline void QwtPainter::drawLine( QPainter *painter, const QLineF &line )
-{
-    QwtPainter::drawLine( painter, line.p1(), line.p2() );
-}
-
-/*!
-  \return True, when line splitting for the raster paint engine is enabled.
-  \sa setPolylineSplitting()
-*/
-inline bool QwtPainter::polylineSplitting()
-{
-    return d_polylineSplitting;
-}
-
-/*!
-  Check whether coordinates should be rounded, before they are painted
-  to a paint engine that rounds to integer values. For other paint engines
-  ( PDF, SVG ), this flag has no effect.
-
-  \return True, when rounding is enabled
-  \sa setRoundingAlignment(), isAligning()
-*/
-inline bool QwtPainter::roundingAlignment()
-{
-    return d_roundingAlignment;
-}
-
-/*!
-  \return roundingAlignment() && isAligning(painter);
-  \param painter Painter
-*/
-inline bool QwtPainter::roundingAlignment(QPainter *painter)
-{
-    return d_roundingAlignment && isAligning(painter);
-}
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter_command.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter_command.cpp
deleted file mode 100644
index 222f8b4311ee037d9ee258ef55e0efe73173a4ff..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter_command.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_painter_command.h"
-
-//! Construct an invalid command
-QwtPainterCommand::QwtPainterCommand():
-    d_type( Invalid )
-{
-}
-
-//! Copy constructor
-QwtPainterCommand::QwtPainterCommand( const QPainterPath &path ):
-    d_type( Path )
-{
-    d_path = new QPainterPath( path );
-}
-
-/*!
-  Constructor for Pixmap paint operation
-
-  \param rect Target rectangle
-  \param pixmap Pixmap
-  \param subRect Rectangle inside the pixmap
-
-  \sa QPainter::drawPixmap()
- */
-QwtPainterCommand::QwtPainterCommand( const QRectF &rect,
-        const QPixmap &pixmap, const QRectF& subRect ):
-    d_type( Pixmap )
-{
-    d_pixmapData = new PixmapData();
-    d_pixmapData->rect = rect;
-    d_pixmapData->pixmap = pixmap;
-    d_pixmapData->subRect = subRect;
-}
-
-/*!
-  Constructor for Image paint operation
-
-  \param rect Target rectangle
-  \param image Image
-  \param subRect Rectangle inside the image
-  \param flags Conversion flags
-
-  \sa QPainter::drawImage()
- */
-QwtPainterCommand::QwtPainterCommand( const QRectF &rect,
-        const QImage &image, const QRectF& subRect,
-        Qt::ImageConversionFlags flags ):
-    d_type( Image )
-{
-    d_imageData = new ImageData();
-    d_imageData->rect = rect;
-    d_imageData->image = image;
-    d_imageData->subRect = subRect;
-    d_imageData->flags = flags;
-}
-
-/*! 
-  Constructor for State paint operation
-  \param state Paint engine state
- */  
-QwtPainterCommand::QwtPainterCommand( const QPaintEngineState &state ):
-    d_type( State )
-{
-    d_stateData = new StateData();
-
-    d_stateData->flags = state.state();
-
-    if ( d_stateData->flags & QPaintEngine::DirtyPen ) 
-        d_stateData->pen = state.pen();
-
-    if ( d_stateData->flags & QPaintEngine::DirtyBrush ) 
-        d_stateData->brush = state.brush();
-
-    if ( d_stateData->flags & QPaintEngine::DirtyBrushOrigin ) 
-        d_stateData->brushOrigin = state.brushOrigin();
-
-    if ( d_stateData->flags & QPaintEngine::DirtyFont ) 
-        d_stateData->font = state.font();
-
-    if ( d_stateData->flags & QPaintEngine::DirtyBackground ) 
-    {
-        d_stateData->backgroundMode = state.backgroundMode();
-        d_stateData->backgroundBrush = state.backgroundBrush();
-    }
-
-    if ( d_stateData->flags & QPaintEngine::DirtyTransform ) 
-        d_stateData->transform = state.transform();
-
-    if ( d_stateData->flags & QPaintEngine::DirtyClipEnabled ) 
-        d_stateData->isClipEnabled = state.isClipEnabled();
-
-    if ( d_stateData->flags & QPaintEngine::DirtyClipRegion ) 
-    {
-        d_stateData->clipRegion = state.clipRegion();
-        d_stateData->clipOperation = state.clipOperation();
-    }
-
-    if ( d_stateData->flags & QPaintEngine::DirtyClipPath ) 
-    {
-        d_stateData->clipPath = state.clipPath();
-        d_stateData->clipOperation = state.clipOperation();
-    }
-
-    if ( d_stateData->flags & QPaintEngine::DirtyHints ) 
-        d_stateData->renderHints = state.renderHints();
-
-    if ( d_stateData->flags & QPaintEngine::DirtyCompositionMode ) 
-        d_stateData->compositionMode = state.compositionMode();
-
-    if ( d_stateData->flags & QPaintEngine::DirtyOpacity ) 
-        d_stateData->opacity = state.opacity();
-}
-
-/*!
-  Copy constructor
-  \param other Command to be copied
-  
- */
-QwtPainterCommand::QwtPainterCommand(const QwtPainterCommand &other)
-{
-    copy( other );
-}
-
-//! Destructor
-QwtPainterCommand::~QwtPainterCommand()
-{
-    reset();
-}
-
-/*!
-  Assignment operator
-
-  \param other Command to be copied
-  \return Modified command
- */
-QwtPainterCommand &QwtPainterCommand::operator=(const QwtPainterCommand &other)
-{
-    reset();
-    copy( other );
-
-    return *this;
-}
-
-void QwtPainterCommand::copy( const QwtPainterCommand &other )
-{
-    d_type = other.d_type;
-
-    switch( other.d_type )
-    {
-        case Path:
-        {
-            d_path = new QPainterPath( *other.d_path );
-            break;
-        }
-        case Pixmap:
-        {
-            d_pixmapData = new PixmapData( *other.d_pixmapData );
-            break;
-        }
-        case Image:
-        {
-            d_imageData = new ImageData( *other.d_imageData );
-            break;
-        }
-        case State:
-        {
-            d_stateData = new StateData( *other.d_stateData );
-            break;
-        }
-        default:
-            break;
-    }
-}
-
-void QwtPainterCommand::reset()
-{
-    switch( d_type )
-    {
-        case Path:
-        {
-            delete d_path;
-            break;
-        }
-        case Pixmap:
-        {
-            delete d_pixmapData;
-            break;
-        }
-        case Image:
-        {
-            delete d_imageData;
-            break;
-        }
-        case State:
-        {
-            delete d_stateData;
-            break;
-        }
-        default:
-            break;
-    }
-
-    d_type = Invalid;
-}
-
-//! \return Painter path to be painted
-QPainterPath *QwtPainterCommand::path() 
-{
-    return d_path;
-}
-
-//! \return Attributes how to paint a QPixmap
-QwtPainterCommand::PixmapData* QwtPainterCommand::pixmapData() 
-{
-    return d_pixmapData;
-}
-
-//! \return Attributes how to paint a QImage
-QwtPainterCommand::ImageData* QwtPainterCommand::imageData() 
-{
-    return d_imageData;
-}
-
-//! \return Attributes of a state change
-QwtPainterCommand::StateData* QwtPainterCommand::stateData() 
-{
-    return d_stateData;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter_command.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter_command.h
deleted file mode 100644
index e3cdcb265ffb09de188f2873b6f27d61f619e85f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_painter_command.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PAINTER_COMMAND_H
-#define QWT_PAINTER_COMMAND_H
-
-#include "qwt_global.h"
-#include <qpaintengine.h>
-#include <qpixmap.h>
-#include <qimage.h>
-#include <qpolygon.h>
-
-class QPainterPath;
-
-/*!
-  QwtPainterCommand represents the attributes of a paint operation
-  how it is used between QPainter and QPaintDevice
-
-  It is used by QwtGraphic to record and replay paint operations
-
-  \sa QwtGraphic::commands()
- */
-  
-class QWT_EXPORT QwtPainterCommand
-{
-public:
-    //! Type of the paint command
-    enum Type
-    {
-        //! Invalid command
-        Invalid = -1,
-
-        //! Draw a QPainterPath
-        Path,
-
-        //! Draw a QPixmap
-        Pixmap,
-
-        //! Draw a QImage
-        Image,
-
-        //! QPainter state change
-        State
-    };
-
-    //! Attributes how to paint a QPixmap 
-    struct PixmapData
-    {
-        QRectF rect;
-        QPixmap pixmap;
-        QRectF subRect;
-    };
-
-    //! Attributes how to paint a QImage 
-    struct ImageData
-    {
-        QRectF rect;
-        QImage image;
-        QRectF subRect;
-        Qt::ImageConversionFlags flags;
-    };
-
-    //! Attributes of a state change
-    struct StateData
-    {
-        QPaintEngine::DirtyFlags flags;
-
-        QPen pen;
-        QBrush brush;
-        QPointF brushOrigin;
-        QBrush backgroundBrush;
-        Qt::BGMode backgroundMode;
-        QFont font;
-        QMatrix matrix;
-        QTransform transform;
-
-        Qt::ClipOperation clipOperation;
-        QRegion clipRegion;
-        QPainterPath clipPath;
-        bool isClipEnabled;
-
-        QPainter::RenderHints renderHints;
-        QPainter::CompositionMode compositionMode;
-        qreal opacity;
-    };
-
-    QwtPainterCommand();
-    QwtPainterCommand(const QwtPainterCommand &);
-
-    QwtPainterCommand( const QPainterPath & );
-
-    QwtPainterCommand( const QRectF &rect,
-            const QPixmap &, const QRectF& subRect );
-
-    QwtPainterCommand( const QRectF &rect,
-            const QImage &, const QRectF& subRect,
-            Qt::ImageConversionFlags );
-
-    QwtPainterCommand( const QPaintEngineState & );
-
-    ~QwtPainterCommand();
-
-    QwtPainterCommand &operator=(const QwtPainterCommand & );
-
-    Type type() const;
-
-    QPainterPath *path();
-    const QPainterPath *path() const;
-
-    PixmapData* pixmapData();
-    const PixmapData* pixmapData() const;
-
-    ImageData* imageData();
-    const ImageData* imageData() const;
-
-    StateData* stateData();
-    const StateData* stateData() const;
-
-private:
-    void copy( const QwtPainterCommand & );
-    void reset();
-
-    Type d_type;
-
-    union
-    {
-        QPainterPath *d_path;
-        PixmapData *d_pixmapData;
-        ImageData *d_imageData;
-        StateData *d_stateData;
-    };
-};
-
-//! \return Type of the command
-inline QwtPainterCommand::Type QwtPainterCommand::type() const
-{
-    return d_type;
-}
-
-//! \return Painter path to be painted
-inline const QPainterPath *QwtPainterCommand::path() const
-{
-    return d_path;
-}
-
-//! \return Attributes how to paint a QPixmap
-inline const QwtPainterCommand::PixmapData* 
-QwtPainterCommand::pixmapData() const
-{
-    return d_pixmapData;
-}
-
-//! \return Attributes how to paint a QImage
-inline const QwtPainterCommand::ImageData * 
-QwtPainterCommand::imageData() const
-{
-    return d_imageData;
-}
-
-//! \return Attributes of a state change
-inline const QwtPainterCommand::StateData * 
-QwtPainterCommand::stateData() const
-{
-    return d_stateData;
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_panner.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_panner.cpp
deleted file mode 100644
index 187bfb616eb71bc10e3a642511234b15a4d42ffe..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_panner.cpp
+++ /dev/null
@@ -1,538 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_panner.h"
-#include "qwt_picker.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-#include <qpixmap.h>
-#include <qevent.h>
-#include <qcursor.h>
-#include <qbitmap.h>
-
-static QVector<QwtPicker *> qwtActivePickers( QWidget *w )
-{
-    QVector<QwtPicker *> pickers;
-
-    QObjectList children = w->children();
-    for ( int i = 0; i < children.size(); i++ )
-    {
-        QwtPicker *picker = qobject_cast<QwtPicker *>( children[i] );
-        if ( picker && picker->isEnabled() )
-            pickers += picker;
-    }
-
-    return pickers;
-}
-
-class QwtPanner::PrivateData
-{
-public:
-    PrivateData():
-        button( Qt::LeftButton ),
-        buttonModifiers( Qt::NoModifier ),
-        abortKey( Qt::Key_Escape ),
-        abortKeyModifiers( Qt::NoModifier ),
-#ifndef QT_NO_CURSOR
-        cursor( NULL ),
-        restoreCursor( NULL ),
-        hasCursor( false ),
-#endif
-        isEnabled( false )
-    {
-        orientations = Qt::Vertical | Qt::Horizontal;
-    }
-
-    ~PrivateData()
-    {
-#ifndef QT_NO_CURSOR
-        delete cursor;
-        delete restoreCursor;
-#endif
-    }
-
-    Qt::MouseButton button;
-    Qt::KeyboardModifiers  buttonModifiers;
-
-    int abortKey;
-    Qt::KeyboardModifiers abortKeyModifiers;
-
-    QPoint initialPos;
-    QPoint pos;
-
-    QPixmap pixmap;
-    QBitmap contentsMask;
-
-#ifndef QT_NO_CURSOR
-    QCursor *cursor;
-    QCursor *restoreCursor;
-    bool hasCursor;
-#endif
-    bool isEnabled;
-    Qt::Orientations orientations;
-};
-
-/*!
-  Creates an panner that is enabled for the left mouse button.
-
-  \param parent Parent widget to be panned
-*/
-QwtPanner::QwtPanner( QWidget *parent ):
-    QWidget( parent )
-{
-    d_data = new PrivateData();
-
-    setAttribute( Qt::WA_TransparentForMouseEvents );
-    setAttribute( Qt::WA_NoSystemBackground );
-    setFocusPolicy( Qt::NoFocus );
-    hide();
-
-    setEnabled( true );
-}
-
-//! Destructor
-QwtPanner::~QwtPanner()
-{
-    delete d_data;
-}
-
-/*!
-   Change the mouse button and modifiers used for panning
-   The defaults are Qt::LeftButton and Qt::NoModifier
-*/
-void QwtPanner::setMouseButton( Qt::MouseButton button,
-    Qt::KeyboardModifiers modifiers )
-{
-    d_data->button = button;
-    d_data->buttonModifiers = modifiers;
-}
-
-//! Get mouse button and modifiers used for panning
-void QwtPanner::getMouseButton( Qt::MouseButton &button,
-    Qt::KeyboardModifiers &modifiers ) const
-{
-    button = d_data->button;
-    modifiers = d_data->buttonModifiers;
-}
-
-/*!
-   Change the abort key
-   The defaults are Qt::Key_Escape and Qt::NoModifiers
-
-   \param key Key ( See Qt::Keycode )
-   \param modifiers Keyboard modifiers
-*/
-void QwtPanner::setAbortKey( int key, 
-    Qt::KeyboardModifiers modifiers )
-{
-    d_data->abortKey = key;
-    d_data->abortKeyModifiers = modifiers;
-}
-
-//! Get the abort key and modifiers
-void QwtPanner::getAbortKey( int &key, 
-    Qt::KeyboardModifiers &modifiers ) const
-{
-    key = d_data->abortKey;
-    modifiers = d_data->abortKeyModifiers;
-}
-
-/*!
-   Change the cursor, that is active while panning
-   The default is the cursor of the parent widget.
-
-   \param cursor New cursor
-
-   \sa setCursor()
-*/
-#ifndef QT_NO_CURSOR
-void QwtPanner::setCursor( const QCursor &cursor )
-{
-    d_data->cursor = new QCursor( cursor );
-}
-#endif
-
-/*!
-   \return Cursor that is active while panning
-   \sa setCursor()
-*/
-#ifndef QT_NO_CURSOR
-const QCursor QwtPanner::cursor() const
-{
-    if ( d_data->cursor )
-        return *d_data->cursor;
-
-    if ( parentWidget() )
-        return parentWidget()->cursor();
-
-    return QCursor();
-}
-#endif
-
-/*!
-  \brief En/disable the panner
-
-  When enabled is true an event filter is installed for
-  the observed widget, otherwise the event filter is removed.
-
-  \param on true or false
-  \sa isEnabled(), eventFilter()
-*/
-void QwtPanner::setEnabled( bool on )
-{
-    if ( d_data->isEnabled != on )
-    {
-        d_data->isEnabled = on;
-
-        QWidget *w = parentWidget();
-        if ( w )
-        {
-            if ( d_data->isEnabled )
-            {
-                w->installEventFilter( this );
-            }
-            else
-            {
-                w->removeEventFilter( this );
-                hide();
-            }
-        }
-    }
-}
-
-/*!
-   Set the orientations, where panning is enabled
-   The default value is in both directions: Qt::Horizontal | Qt::Vertical
-
-   /param o Orientation
-*/
-void QwtPanner::setOrientations( Qt::Orientations o )
-{
-    d_data->orientations = o;
-}
-
-//! Return the orientation, where paning is enabled
-Qt::Orientations QwtPanner::orientations() const
-{
-    return d_data->orientations;
-}
-
-/*!
-   \return True if an orientation is enabled
-   \sa orientations(), setOrientations()
-*/
-bool QwtPanner::isOrientationEnabled( Qt::Orientation o ) const
-{
-    return d_data->orientations & o;
-}
-
-/*!
-  \return true when enabled, false otherwise
-  \sa setEnabled, eventFilter()
-*/
-bool QwtPanner::isEnabled() const
-{
-    return d_data->isEnabled;
-}
-
-/*!
-   \brief Paint event
-
-   Repaint the grabbed pixmap on its current position and
-   fill the empty spaces by the background of the parent widget.
-
-   \param pe Paint event
-*/
-void QwtPanner::paintEvent( QPaintEvent *pe )
-{
-    int dx = d_data->pos.x() - d_data->initialPos.x();
-    int dy = d_data->pos.y() - d_data->initialPos.y();
-
-    QRect r( 0, 0, d_data->pixmap.width(), d_data->pixmap.height() );
-    r.moveCenter( QPoint( r.center().x() + dx, r.center().y() + dy ) );
-
-    QPixmap pm( size() );
-    QwtPainter::fillPixmap( parentWidget(), pm );
-
-    QPainter painter( &pm );
-
-    if ( !d_data->contentsMask.isNull() )
-    {
-        QPixmap masked = d_data->pixmap;
-        masked.setMask( d_data->contentsMask );
-        painter.drawPixmap( r, masked );
-    }
-    else
-    {
-        painter.drawPixmap( r, d_data->pixmap );
-    }
-
-    painter.end();
-
-    if ( !d_data->contentsMask.isNull() )
-        pm.setMask( d_data->contentsMask );
-
-    painter.begin( this );
-    painter.setClipRegion( pe->region() );
-    painter.drawPixmap( 0, 0, pm );
-}
-
-/*!
-  \brief Calculate a mask for the contents of the panned widget
-
-  Sometimes only parts of the contents of a widget should be
-  panned. F.e. for a widget with a styled background with rounded borders
-  only the area inside of the border should be panned.
-
-  \return An empty bitmap, indicating no mask
-*/
-QBitmap QwtPanner::contentsMask() const
-{
-    return QBitmap();
-}
-
-/*!
-  Grab the widget into a pixmap.
-  \return Grabbed pixmap
-*/
-QPixmap QwtPanner::grab() const
-{
-#if QT_VERSION >= 0x050000
-    return parentWidget()->grab( parentWidget()->rect() );
-#else
-    return QPixmap::grabWidget( parentWidget() );
-#endif
-}
-
-/*!
-  \brief Event filter
-
-  When isEnabled() is true mouse events of the
-  observed widget are filtered.
-
-  \param object Object to be filtered
-  \param event Event
-
-  \return Always false, beside for paint events for the
-          parent widget.
-
-  \sa widgetMousePressEvent(), widgetMouseReleaseEvent(),
-      widgetMouseMoveEvent()
-*/
-bool QwtPanner::eventFilter( QObject *object, QEvent *event )
-{
-    if ( object == NULL || object != parentWidget() )
-        return false;
-
-    switch ( event->type() )
-    {
-        case QEvent::MouseButtonPress:
-        {
-            widgetMousePressEvent( static_cast<QMouseEvent *>( event ) );
-            break;
-        }
-        case QEvent::MouseMove:
-        {
-            widgetMouseMoveEvent( static_cast<QMouseEvent *>( event ) );
-            break;
-        }
-        case QEvent::MouseButtonRelease:
-        {
-            widgetMouseReleaseEvent( static_cast<QMouseEvent *>( event ) );
-            break;
-        }
-        case QEvent::KeyPress:
-        {
-            widgetKeyPressEvent( static_cast<QKeyEvent *>( event ) );
-            break;
-        }
-        case QEvent::KeyRelease:
-        {
-            widgetKeyReleaseEvent( static_cast<QKeyEvent *>( event ) );
-            break;
-        }
-        case QEvent::Paint:
-        {
-            if ( isVisible() )
-                return true;
-            break;
-        }
-        default:;
-    }
-
-    return false;
-}
-
-/*!
-  Handle a mouse press event for the observed widget.
-
-  \param mouseEvent Mouse event
-  \sa eventFilter(), widgetMouseReleaseEvent(),
-      widgetMouseMoveEvent(),
-*/
-void QwtPanner::widgetMousePressEvent( QMouseEvent *mouseEvent )
-{
-    if ( ( mouseEvent->button() != d_data->button )
-        || ( mouseEvent->modifiers() != d_data->buttonModifiers ) )
-    {
-        return;
-    }
-
-    QWidget *w = parentWidget();
-    if ( w == NULL )
-        return;
-
-#ifndef QT_NO_CURSOR
-    showCursor( true );
-#endif
-
-    d_data->initialPos = d_data->pos = mouseEvent->pos();
-
-    setGeometry( parentWidget()->rect() );
-
-    // We don't want to grab the picker !
-    QVector<QwtPicker *> pickers = qwtActivePickers( parentWidget() );
-    for ( int i = 0; i < pickers.size(); i++ )
-        pickers[i]->setEnabled( false );
-
-    d_data->pixmap = grab();
-    d_data->contentsMask = contentsMask();
-
-    for ( int i = 0; i < pickers.size(); i++ )
-        pickers[i]->setEnabled( true );
-
-    show();
-}
-
-/*!
-  Handle a mouse move event for the observed widget.
-
-  \param mouseEvent Mouse event
-  \sa eventFilter(), widgetMousePressEvent(), widgetMouseReleaseEvent()
-*/
-void QwtPanner::widgetMouseMoveEvent( QMouseEvent *mouseEvent )
-{
-    if ( !isVisible() )
-        return;
-
-    QPoint pos = mouseEvent->pos();
-    if ( !isOrientationEnabled( Qt::Horizontal ) )
-        pos.setX( d_data->initialPos.x() );
-    if ( !isOrientationEnabled( Qt::Vertical ) )
-        pos.setY( d_data->initialPos.y() );
-
-    if ( pos != d_data->pos && rect().contains( pos ) )
-    {
-        d_data->pos = pos;
-        update();
-
-        Q_EMIT moved( d_data->pos.x() - d_data->initialPos.x(),
-            d_data->pos.y() - d_data->initialPos.y() );
-    }
-}
-
-/*!
-  Handle a mouse release event for the observed widget.
-
-  \param mouseEvent Mouse event
-  \sa eventFilter(), widgetMousePressEvent(),
-      widgetMouseMoveEvent(),
-*/
-void QwtPanner::widgetMouseReleaseEvent( QMouseEvent *mouseEvent )
-{
-    if ( isVisible() )
-    {
-        hide();
-#ifndef QT_NO_CURSOR
-        showCursor( false );
-#endif
-
-        QPoint pos = mouseEvent->pos();
-        if ( !isOrientationEnabled( Qt::Horizontal ) )
-            pos.setX( d_data->initialPos.x() );
-        if ( !isOrientationEnabled( Qt::Vertical ) )
-            pos.setY( d_data->initialPos.y() );
-
-        d_data->pixmap = QPixmap();
-        d_data->contentsMask = QBitmap();
-        d_data->pos = pos;
-
-        if ( d_data->pos != d_data->initialPos )
-        {
-            Q_EMIT panned( d_data->pos.x() - d_data->initialPos.x(),
-                d_data->pos.y() - d_data->initialPos.y() );
-        }
-    }
-}
-
-/*!
-  Handle a key press event for the observed widget.
-
-  \param keyEvent Key event
-  \sa eventFilter(), widgetKeyReleaseEvent()
-*/
-void QwtPanner::widgetKeyPressEvent( QKeyEvent *keyEvent )
-{
-    if ( ( keyEvent->key() == d_data->abortKey )
-        && ( keyEvent->modifiers() == d_data->abortKeyModifiers ) )
-    {
-        hide();
-
-#ifndef QT_NO_CURSOR
-        showCursor( false );
-#endif
-        d_data->pixmap = QPixmap();
-    }
-}
-
-/*!
-  Handle a key release event for the observed widget.
-
-  \param keyEvent Key event
-  \sa eventFilter(), widgetKeyReleaseEvent()
-*/
-void QwtPanner::widgetKeyReleaseEvent( QKeyEvent *keyEvent )
-{
-    Q_UNUSED( keyEvent );
-}
-
-#ifndef QT_NO_CURSOR
-void QwtPanner::showCursor( bool on )
-{
-    if ( on == d_data->hasCursor )
-        return;
-
-    QWidget *w = parentWidget();
-    if ( w == NULL || d_data->cursor == NULL )
-        return;
-
-    d_data->hasCursor = on;
-
-    if ( on )
-    {
-        if ( w->testAttribute( Qt::WA_SetCursor ) )
-        {
-            delete d_data->restoreCursor;
-            d_data->restoreCursor = new QCursor( w->cursor() );
-        }
-        w->setCursor( *d_data->cursor );
-    }
-    else
-    {
-        if ( d_data->restoreCursor )
-        {
-            w->setCursor( *d_data->restoreCursor );
-            delete d_data->restoreCursor;
-            d_data->restoreCursor = NULL;
-        }
-        else
-            w->unsetCursor();
-    }
-}
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_panner.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_panner.h
deleted file mode 100644
index e31b4abf368a26c6b51ab52080e05a9bd890925b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_panner.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PANNER_H
-#define QWT_PANNER_H 1
-
-#include "qwt_global.h"
-#include <qwidget.h>
-#include <qpixmap.h>
-
-class QCursor;
-
-/*!
-  \brief QwtPanner provides panning of a widget
-
-  QwtPanner grabs the contents of a widget, that can be dragged
-  in all directions. The offset between the start and the end position
-  is emitted by the panned signal.
-
-  QwtPanner grabs the content of the widget into a pixmap and moves
-  the pixmap around, without initiating any repaint events for the widget.
-  Areas, that are not part of content are not painted  while panning.
-  This makes panning fast enough for widgets, where
-  repaints are too slow for mouse movements.
-
-  For widgets, where repaints are very fast it might be better to
-  implement panning manually by mapping mouse events into paint events.
-*/
-class QWT_EXPORT QwtPanner: public QWidget
-{
-    Q_OBJECT
-
-public:
-    QwtPanner( QWidget* parent );
-    virtual ~QwtPanner();
-
-    void setEnabled( bool );
-    bool isEnabled() const;
-
-    void setMouseButton( Qt::MouseButton, 
-        Qt::KeyboardModifiers = Qt::NoModifier );
-    void getMouseButton( Qt::MouseButton &button, 
-        Qt::KeyboardModifiers & ) const;
-
-    void setAbortKey( int key, Qt::KeyboardModifiers = Qt::NoModifier );
-    void getAbortKey( int &key, Qt::KeyboardModifiers & ) const;
-
-    void setCursor( const QCursor & );
-    const QCursor cursor() const;
-
-    void setOrientations( Qt::Orientations );
-    Qt::Orientations orientations() const;
-
-    bool isOrientationEnabled( Qt::Orientation ) const;
-
-    virtual bool eventFilter( QObject *, QEvent * );
-
-Q_SIGNALS:
-    /*!
-      Signal emitted, when panning is done
-
-      \param dx Offset in horizontal direction
-      \param dy Offset in vertical direction
-    */
-    void panned( int dx, int dy );
-
-    /*!
-      Signal emitted, while the widget moved, but panning
-      is not finished.
-
-      \param dx Offset in horizontal direction
-      \param dy Offset in vertical direction
-    */
-    void moved( int dx, int dy );
-
-protected:
-    virtual void widgetMousePressEvent( QMouseEvent * );
-    virtual void widgetMouseReleaseEvent( QMouseEvent * );
-    virtual void widgetMouseMoveEvent( QMouseEvent * );
-    virtual void widgetKeyPressEvent( QKeyEvent * );
-    virtual void widgetKeyReleaseEvent( QKeyEvent * );
-
-    virtual void paintEvent( QPaintEvent * );
-
-    virtual QBitmap contentsMask() const;
-    virtual QPixmap grab() const;
-
-private:
-#ifndef QT_NO_CURSOR
-    void showCursor( bool );
-#endif
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker.cpp
deleted file mode 100644
index c6f06a5717359ec2b57a4e3d54dce11cb6e121e9..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker.cpp
+++ /dev/null
@@ -1,1593 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_picker.h"
-#include "qwt_picker_machine.h"
-#include "qwt_painter.h"
-#include "qwt_math.h"
-#include "qwt_widget_overlay.h"
-#include <qapplication.h>
-#include <qevent.h>
-#include <qpainter.h>
-#include <qframe.h>
-#include <qcursor.h>
-#include <qbitmap.h>
-#include <qpointer.h>
-#include <qpaintengine.h>
-#include <qmath.h>
-
-static inline QRegion qwtMaskRegion( const QRect &r, int penWidth )
-{
-    const int pw = qMax( penWidth, 1 );
-    const int pw2 = penWidth / 2;
-
-    int x1 = r.left() - pw2;
-    int x2 = r.right() + 1 + pw2 + ( pw % 2 );
-
-    int y1 = r.top() - pw2;
-    int y2 = r.bottom() + 1 + pw2 + ( pw % 2 );
-
-    QRegion region;
-
-    region += QRect( x1, y1, x2 - x1, pw );
-    region += QRect( x1, y1, pw, y2 - y1 );
-    region += QRect( x1, y2 - pw, x2 - x1, pw );
-    region += QRect( x2 - pw, y1, pw, y2 - y1 );
-
-    return region;
-}
-
-static inline QRegion qwtMaskRegion( const QLine &l, int penWidth )
-{
-    const int pw = qMax( penWidth, 1 );
-    const int pw2 = penWidth / 2;
-
-    QRegion region;
-
-    if ( l.x1() == l.x2() )
-    {
-        region += QRect( l.x1() - pw2, l.y1(), 
-            pw, l.y2() ).normalized();
-    }
-    else if ( l.y1() == l.y2() )
-    {
-        region += QRect( l.x1(), l.y1() - pw2, 
-            l.x2(), pw ).normalized();
-    }
-
-    return region;
-}
-
-class QwtPickerRubberband: public QwtWidgetOverlay
-{
-public:
-    QwtPickerRubberband( QwtPicker *, QWidget * );
-
-protected:
-    virtual void drawOverlay( QPainter * ) const;
-    virtual QRegion maskHint() const;
-
-    QwtPicker *d_picker;
-};
-
-class QwtPickerTracker: public QwtWidgetOverlay
-{                                  
-public:
-    QwtPickerTracker( QwtPicker *, QWidget * );
-    
-protected:
-    virtual void drawOverlay( QPainter * ) const;
-    virtual QRegion maskHint() const;
-    
-    QwtPicker *d_picker;
-};  
-
-
-class QwtPicker::PrivateData
-{
-public:
-    PrivateData():
-        enabled( false ),
-        stateMachine( NULL ),
-        resizeMode( QwtPicker::Stretch ),
-        rubberBand( QwtPicker::NoRubberBand ),
-        trackerMode( QwtPicker::AlwaysOff ),
-        isActive( false ),
-        trackerPosition( -1, -1 ),
-        mouseTracking( false ),
-        openGL( false )
-    {
-    }
-        
-    bool enabled;
-
-    QwtPickerMachine *stateMachine;
-
-    QwtPicker::ResizeMode resizeMode;
-
-    QwtPicker::RubberBand rubberBand;
-    QPen rubberBandPen;
-
-    QwtPicker::DisplayMode trackerMode;
-    QPen trackerPen;
-    QFont trackerFont;
-
-    QPolygon pickedPoints;
-    bool isActive;
-    QPoint trackerPosition;
-
-    bool mouseTracking; // used to save previous value
-
-    QPointer< QwtPickerRubberband > rubberBandOverlay;
-    QPointer< QwtPickerTracker> trackerOverlay;
-
-    bool openGL;
-};
-
-QwtPickerRubberband::QwtPickerRubberband(
-        QwtPicker *picker, QWidget *parent ):
-    QwtWidgetOverlay( parent ),
-    d_picker( picker )
-{
-    setMaskMode( QwtWidgetOverlay::MaskHint );
-}
-
-QRegion QwtPickerRubberband::maskHint() const
-{
-    return d_picker->rubberBandMask();
-}
-
-void QwtPickerRubberband::drawOverlay( QPainter *painter ) const
-{
-    painter->setPen( d_picker->rubberBandPen() );
-    d_picker->drawRubberBand( painter );
-}
-
-QwtPickerTracker::QwtPickerTracker(
-        QwtPicker *picker, QWidget *parent ):
-    QwtWidgetOverlay( parent ),
-    d_picker( picker )
-{
-    setMaskMode( QwtWidgetOverlay::MaskHint );
-}
-
-QRegion QwtPickerTracker::maskHint() const
-{
-    return d_picker->trackerRect( font() );
-}
-
-void QwtPickerTracker::drawOverlay( QPainter *painter ) const
-{
-    painter->setPen( d_picker->trackerPen() );
-    d_picker->drawTracker( painter );
-}
-
-/*!
-  Constructor
-
-  Creates an picker that is enabled, but without a state machine.
-  rubber band and tracker are disabled.
-
-  \param parent Parent widget, that will be observed
- */
-
-QwtPicker::QwtPicker( QWidget *parent ):
-    QObject( parent )
-{
-    init( parent, NoRubberBand, AlwaysOff );
-}
-
-/*!
-  Constructor
-
-  \param rubberBand Rubber band style
-  \param trackerMode Tracker mode
-  \param parent Parent widget, that will be observed
- */
-QwtPicker::QwtPicker( RubberBand rubberBand,
-        DisplayMode trackerMode, QWidget *parent ):
-    QObject( parent )
-{
-    init( parent, rubberBand, trackerMode );
-}
-
-//! Destructor
-QwtPicker::~QwtPicker()
-{
-    setMouseTracking( false );
-
-    delete d_data->stateMachine;
-    delete d_data->rubberBandOverlay;
-    delete d_data->trackerOverlay;
-
-    delete d_data;
-}
-
-//! Initialize the picker - used by the constructors
-void QwtPicker::init( QWidget *parent,
-    RubberBand rubberBand, DisplayMode trackerMode )
-{
-    d_data = new PrivateData;
-
-    d_data->rubberBand = rubberBand;
-
-    if ( parent )
-    {
-        if ( parent->focusPolicy() == Qt::NoFocus )
-            parent->setFocusPolicy( Qt::WheelFocus );
-
-        d_data->openGL = parent->inherits( "QGLWidget" );
-        d_data->trackerFont = parent->font();
-        d_data->mouseTracking = parent->hasMouseTracking();
-
-        setEnabled( true );
-    }
-
-    setTrackerMode( trackerMode );
-}
-
-/*!
-  Set a state machine and delete the previous one
-
-  \param stateMachine State machine
-  \sa stateMachine()
-*/
-void QwtPicker::setStateMachine( QwtPickerMachine *stateMachine )
-{
-    if ( d_data->stateMachine != stateMachine )
-    {
-        reset();
-
-        delete d_data->stateMachine;
-        d_data->stateMachine = stateMachine;
-
-        if ( d_data->stateMachine )
-            d_data->stateMachine->reset();
-    }
-}
-
-/*!
-  \return Assigned state machine
-  \sa setStateMachine()
-*/
-QwtPickerMachine *QwtPicker::stateMachine()
-{
-    return d_data->stateMachine;
-}
-
-/*!
-  \return Assigned state machine
-  \sa setStateMachine()
-*/
-const QwtPickerMachine *QwtPicker::stateMachine() const
-{
-    return d_data->stateMachine;
-}
-
-//! Return the parent widget, where the selection happens
-QWidget *QwtPicker::parentWidget()
-{
-    QObject *obj = parent();
-    if ( obj && obj->isWidgetType() )
-        return static_cast<QWidget *>( obj );
-
-    return NULL;
-}
-
-//! Return the parent widget, where the selection happens
-const QWidget *QwtPicker::parentWidget() const
-{
-    QObject *obj = parent();
-    if ( obj && obj->isWidgetType() )
-        return static_cast< const QWidget *>( obj );
-
-    return NULL;
-}
-
-/*!
-  Set the rubber band style
-
-  \param rubberBand Rubber band style
-         The default value is NoRubberBand.
-
-  \sa rubberBand(), RubberBand, setRubberBandPen()
-*/
-void QwtPicker::setRubberBand( RubberBand rubberBand )
-{
-    d_data->rubberBand = rubberBand;
-}
-
-/*!
-  \return Rubber band style
-  \sa setRubberBand(), RubberBand, rubberBandPen()
-*/
-QwtPicker::RubberBand QwtPicker::rubberBand() const
-{
-    return d_data->rubberBand;
-}
-
-/*!
-  \brief Set the display mode of the tracker.
-
-  A tracker displays information about current position of
-  the cursor as a string. The display mode controls
-  if the tracker has to be displayed whenever the observed
-  widget has focus and cursor (AlwaysOn), never (AlwaysOff), or
-  only when the selection is active (ActiveOnly).
-
-  \param mode Tracker display mode
-
-  \warning In case of AlwaysOn, mouseTracking will be enabled
-           for the observed widget.
-  \sa trackerMode(), DisplayMode
-*/
-
-void QwtPicker::setTrackerMode( DisplayMode mode )
-{
-    if ( d_data->trackerMode != mode )
-    {
-        d_data->trackerMode = mode;
-        setMouseTracking( d_data->trackerMode == AlwaysOn );
-    }
-}
-
-/*!
-  \return Tracker display mode
-  \sa setTrackerMode(), DisplayMode
-*/
-QwtPicker::DisplayMode QwtPicker::trackerMode() const
-{
-    return d_data->trackerMode;
-}
-
-/*!
-  \brief Set the resize mode.
-
-  The resize mode controls what to do with the selected points of an active
-  selection when the observed widget is resized.
-
-  Stretch means the points are scaled according to the new
-  size, KeepSize means the points remain unchanged.
-
-  The default mode is Stretch.
-
-  \param mode Resize mode
-  \sa resizeMode(), ResizeMode
-*/
-void QwtPicker::setResizeMode( ResizeMode mode )
-{
-    d_data->resizeMode = mode;
-}
-
-/*!
-  \return Resize mode
-  \sa setResizeMode(), ResizeMode
-*/
-
-QwtPicker::ResizeMode QwtPicker::resizeMode() const
-{
-    return d_data->resizeMode;
-}
-
-/*!
-  \brief En/disable the picker
-
-  When enabled is true an event filter is installed for
-  the observed widget, otherwise the event filter is removed.
-
-  \param enabled true or false
-  \sa isEnabled(), eventFilter()
-*/
-void QwtPicker::setEnabled( bool enabled )
-{
-    if ( d_data->enabled != enabled )
-    {
-        d_data->enabled = enabled;
-
-        QWidget *w = parentWidget();
-        if ( w )
-        {
-            if ( enabled )
-                w->installEventFilter( this );
-            else
-                w->removeEventFilter( this );
-        }
-
-        updateDisplay();
-    }
-}
-
-/*!
-  \return true when enabled, false otherwise
-  \sa setEnabled(), eventFilter()
-*/
-
-bool QwtPicker::isEnabled() const
-{
-    return d_data->enabled;
-}
-
-/*!
-  Set the font for the tracker
-
-  \param font Tracker font
-  \sa trackerFont(), setTrackerMode(), setTrackerPen()
-*/
-void QwtPicker::setTrackerFont( const QFont &font )
-{
-    if ( font != d_data->trackerFont )
-    {
-        d_data->trackerFont = font;
-        updateDisplay();
-    }
-}
-
-/*!
-  \return Tracker font
-  \sa setTrackerFont(), trackerMode(), trackerPen()
-*/
-
-QFont QwtPicker::trackerFont() const
-{
-    return d_data->trackerFont;
-}
-
-/*!
-  Set the pen for the tracker
-
-  \param pen Tracker pen
-  \sa trackerPen(), setTrackerMode(), setTrackerFont()
-*/
-void QwtPicker::setTrackerPen( const QPen &pen )
-{
-    if ( pen != d_data->trackerPen )
-    {
-        d_data->trackerPen = pen;
-        updateDisplay();
-    }
-}
-
-/*!
-  \return Tracker pen
-  \sa setTrackerPen(), trackerMode(), trackerFont()
-*/
-QPen QwtPicker::trackerPen() const
-{
-    return d_data->trackerPen;
-}
-
-/*!
-  Set the pen for the rubberband
-
-  \param pen Rubber band pen
-  \sa rubberBandPen(), setRubberBand()
-*/
-void QwtPicker::setRubberBandPen( const QPen &pen )
-{
-    if ( pen != d_data->rubberBandPen )
-    {
-        d_data->rubberBandPen = pen;
-        updateDisplay();
-    }
-}
-
-/*!
-  \return Rubber band pen
-  \sa setRubberBandPen(), rubberBand()
-*/
-QPen QwtPicker::rubberBandPen() const
-{
-    return d_data->rubberBandPen;
-}
-
-/*!
-   \brief Return the label for a position
-
-   In case of HLineRubberBand the label is the value of the
-   y position, in case of VLineRubberBand the value of the x position.
-   Otherwise the label contains x and y position separated by a ',' .
-
-   The format for the string conversion is "%d".
-
-   \param pos Position
-   \return Converted position as string
-*/
-
-QwtText QwtPicker::trackerText( const QPoint &pos ) const
-{
-    QString label;
-
-    switch ( rubberBand() )
-    {
-        case HLineRubberBand:
-            label.sprintf( "%d", pos.y() );
-            break;
-        case VLineRubberBand:
-            label.sprintf( "%d", pos.x() );
-            break;
-        default:
-            label.sprintf( "%d, %d", pos.x(), pos.y() );
-    }
-    return label;
-}
-
-/*!
-  Calculate the mask for the rubber band overlay
-
-  \return Region for the mask
-  \sa QWidget::setMask()
- */
-QRegion QwtPicker::rubberBandMask() const
-{
-    QRegion mask;
-
-    if ( !isActive() || rubberBand() == NoRubberBand ||
-        rubberBandPen().style() == Qt::NoPen )
-    {
-        return mask;
-    }
-
-    const QPolygon pa = adjustedPoints( d_data->pickedPoints );
-
-    QwtPickerMachine::SelectionType selectionType =
-        QwtPickerMachine::NoSelection;
-
-    if ( d_data->stateMachine )
-        selectionType = d_data->stateMachine->selectionType();
-
-    switch ( selectionType )
-    {
-        case QwtPickerMachine::NoSelection:
-        case QwtPickerMachine::PointSelection:
-        {
-            if ( pa.count() < 1 )
-                return mask;
-
-            const QPoint pos = pa[0];
-            const int pw = rubberBandPen().width();
-
-            const QRect pRect = pickArea().boundingRect().toRect();
-            switch ( rubberBand() )
-            {
-                case VLineRubberBand:
-                {
-                    mask += qwtMaskRegion( QLine( pos.x(), pRect.top(), 
-                        pos.x(), pRect.bottom() ), pw );
-                    break;
-                }
-                case HLineRubberBand:
-                {
-                    mask += qwtMaskRegion( QLine( pRect.left(), pos.y(), 
-                        pRect.right(), pos.y() ), pw );
-                    break;
-                }
-                case CrossRubberBand:
-                {
-                    mask += qwtMaskRegion( QLine( pos.x(), pRect.top(), 
-                        pos.x(), pRect.bottom() ), pw );
-                    mask += qwtMaskRegion( QLine( pRect.left(), pos.y(), 
-                        pRect.right(), pos.y() ), pw );
-                    break;
-                }
-                default:
-                    break;
-            }
-            break;
-        }
-        case QwtPickerMachine::RectSelection:
-        {
-            if ( pa.count() < 2 )
-                return mask;
-
-            const int pw = rubberBandPen().width();
-
-            switch ( rubberBand() )
-            {
-                case RectRubberBand:
-                {
-                    const QRect r = QRect( pa.first(), pa.last() );
-                    mask = qwtMaskRegion( r.normalized(), pw );
-                    break;
-                }
-                case EllipseRubberBand:
-                {
-                    const QRect r = QRect( pa.first(), pa.last() );
-                    mask += r.adjusted( -pw, -pw, pw, pw );
-                    break;
-                }
-                default:
-                    break;
-            }
-            break;
-        }
-        case QwtPickerMachine::PolygonSelection:
-        {
-            const int pw = rubberBandPen().width();
-            if ( pw <= 1 )
-            {
-                // because of the join style we better
-                // return a mask for a pen width <= 1 only
-
-                const int off = 2 * pw;
-                const QRect r = pa.boundingRect();
-                mask += r.adjusted( -off, -off, off, off );
-            }
-            break;
-        }
-        default:
-            break;
-    }
-
-    return mask;
-}
-
-/*!
-   Draw a rubber band, depending on rubberBand()
-
-   \param painter Painter, initialized with a clip region
-
-   \sa rubberBand(), RubberBand
-*/
-
-void QwtPicker::drawRubberBand( QPainter *painter ) const
-{
-    if ( !isActive() || rubberBand() == NoRubberBand ||
-        rubberBandPen().style() == Qt::NoPen )
-    {
-        return;
-    }
-
-    const QPolygon pa = adjustedPoints( d_data->pickedPoints );
-
-    QwtPickerMachine::SelectionType selectionType =
-        QwtPickerMachine::NoSelection;
-
-    if ( d_data->stateMachine )
-        selectionType = d_data->stateMachine->selectionType();
-
-    switch ( selectionType )
-    {
-        case QwtPickerMachine::NoSelection:
-        case QwtPickerMachine::PointSelection:
-        {
-            if ( pa.count() < 1 )
-                return;
-
-            const QPoint pos = pa[0];
-
-            const QRect pRect = pickArea().boundingRect().toRect();
-            switch ( rubberBand() )
-            {
-                case VLineRubberBand:
-                {
-                    QwtPainter::drawLine( painter, pos.x(),
-                        pRect.top(), pos.x(), pRect.bottom() );
-                    break;
-                }
-                case HLineRubberBand:
-                {
-                    QwtPainter::drawLine( painter, pRect.left(),
-                        pos.y(), pRect.right(), pos.y() );
-                    break;
-                }
-                case CrossRubberBand:
-                {
-                    QwtPainter::drawLine( painter, pos.x(),
-                        pRect.top(), pos.x(), pRect.bottom() );
-                    QwtPainter::drawLine( painter, pRect.left(),
-                        pos.y(), pRect.right(), pos.y() );
-                    break;
-                }
-                default:
-                    break;
-            }
-            break;
-        }
-        case QwtPickerMachine::RectSelection:
-        {
-            if ( pa.count() < 2 )
-                return;
-
-            const QRect rect = QRect( pa.first(), pa.last() ).normalized();
-            switch ( rubberBand() )
-            {
-                case EllipseRubberBand:
-                {
-                    QwtPainter::drawEllipse( painter, rect );
-                    break;
-                }
-                case RectRubberBand:
-                {
-                    QwtPainter::drawRect( painter, rect );
-                    break;
-                }
-                default:
-                    break;
-            }
-            break;
-        }
-        case QwtPickerMachine::PolygonSelection:
-        {
-            if ( rubberBand() == PolygonRubberBand )
-                painter->drawPolyline( pa );
-            break;
-        }
-        default:
-            break;
-    }
-}
-
-/*!
-   Draw the tracker
-
-   \param painter Painter
-   \sa trackerRect(), trackerText()
-*/
-
-void QwtPicker::drawTracker( QPainter *painter ) const
-{
-    const QRect textRect = trackerRect( painter->font() );
-    if ( !textRect.isEmpty() )
-    {
-        const QwtText label = trackerText( d_data->trackerPosition );
-        if ( !label.isEmpty() )
-            label.draw( painter, textRect );
-    }
-}
-
-/*!
-   \brief Map the pickedPoints() into a selection()
-
-   adjustedPoints() maps the points, that have been collected on
-   the parentWidget() into a selection(). The default implementation
-   simply returns the points unmodified.
-
-   The reason, why a selection() differs from the picked points
-   depends on the application requirements. F.e. :
-
-   - A rectangular selection might need to have a specific aspect ratio only.\n
-   - A selection could accept non intersecting polygons only.\n
-   - ...\n
-
-   The example below is for a rectangular selection, where the first
-   point is the center of the selected rectangle.
-  \par Example
-  \verbatim QPolygon MyPicker::adjustedPoints(const QPolygon &points) const
-{
-    QPolygon adjusted;
-    if ( points.size() == 2 )
-    {
-        const int width = qAbs(points[1].x() - points[0].x());
-        const int height = qAbs(points[1].y() - points[0].y());
-
-        QRect rect(0, 0, 2 * width, 2 * height);
-        rect.moveCenter(points[0]);
-
-        adjusted += rect.topLeft();
-        adjusted += rect.bottomRight();
-    }
-    return adjusted;
-}\endverbatim\n
-
-  \param points Selected points
-  \return Selected points unmodified
-*/
-QPolygon QwtPicker::adjustedPoints( const QPolygon &points ) const
-{
-    return points;
-}
-
-/*!
-  \return Selected points
-  \sa pickedPoints(), adjustedPoints()
-*/
-QPolygon QwtPicker::selection() const
-{
-    return adjustedPoints( d_data->pickedPoints );
-}
-
-//! \return Current position of the tracker
-QPoint QwtPicker::trackerPosition() const
-{
-    return d_data->trackerPosition;
-}
-
-/*!
-   Calculate the bounding rectangle for the tracker text
-   from the current position of the tracker
-
-   \param font Font of the tracker text
-   \return Bounding rectangle of the tracker text
-
-   \sa trackerPosition()
-*/
-QRect QwtPicker::trackerRect( const QFont &font ) const
-{
-    if ( trackerMode() == AlwaysOff ||
-        ( trackerMode() == ActiveOnly && !isActive() ) )
-    {
-        return QRect();
-    }
-
-    if ( d_data->trackerPosition.x() < 0 || d_data->trackerPosition.y() < 0 )
-        return QRect();
-
-    QwtText text = trackerText( d_data->trackerPosition );
-    if ( text.isEmpty() )
-        return QRect();
-
-    const QSizeF textSize = text.textSize( font );
-    QRect textRect( 0, 0, qCeil( textSize.width() ), qCeil( textSize.height() ) );
-
-    const QPoint &pos = d_data->trackerPosition;
-
-    int alignment = 0;
-    if ( isActive() && d_data->pickedPoints.count() > 1
-        && rubberBand() != NoRubberBand )
-    {
-        const QPoint last =
-            d_data->pickedPoints[int( d_data->pickedPoints.count() ) - 2];
-
-        alignment |= ( pos.x() >= last.x() ) ? Qt::AlignRight : Qt::AlignLeft;
-        alignment |= ( pos.y() > last.y() ) ? Qt::AlignBottom : Qt::AlignTop;
-    }
-    else
-        alignment = Qt::AlignTop | Qt::AlignRight;
-
-    const int margin = 5;
-
-    int x = pos.x();
-    if ( alignment & Qt::AlignLeft )
-        x -= textRect.width() + margin;
-    else if ( alignment & Qt::AlignRight )
-        x += margin;
-
-    int y = pos.y();
-    if ( alignment & Qt::AlignBottom )
-        y += margin;
-    else if ( alignment & Qt::AlignTop )
-        y -= textRect.height() + margin;
-
-    textRect.moveTopLeft( QPoint( x, y ) );
-
-    const QRect pickRect = pickArea().boundingRect().toRect();
-
-    int right = qMin( textRect.right(), pickRect.right() - margin );
-    int bottom = qMin( textRect.bottom(), pickRect.bottom() - margin );
-    textRect.moveBottomRight( QPoint( right, bottom ) );
-
-    int left = qMax( textRect.left(), pickRect.left() + margin );
-    int top = qMax( textRect.top(), pickRect.top() + margin );
-    textRect.moveTopLeft( QPoint( left, top ) );
-
-    return textRect;
-}
-
-/*!
-  \brief Event filter
-
-  When isEnabled() is true all events of the observed widget are filtered.
-  Mouse and keyboard events are translated into widgetMouse- and widgetKey-
-  and widgetWheel-events. Paint and Resize events are handled to keep
-  rubber band and tracker up to date.
-
-  \param object Object to be filtered
-  \param event Event
-
-  \return Always false.
-
-  \sa widgetEnterEvent(), widgetLeaveEvent(),
-      widgetMousePressEvent(), widgetMouseReleaseEvent(),
-      widgetMouseDoubleClickEvent(), widgetMouseMoveEvent(),
-      widgetWheelEvent(), widgetKeyPressEvent(), widgetKeyReleaseEvent(),
-      QObject::installEventFilter(), QObject::event()
-*/
-bool QwtPicker::eventFilter( QObject *object, QEvent *event )
-{
-    if ( object && object == parentWidget() )
-    {
-        switch ( event->type() )
-        {
-            case QEvent::Resize:
-            {
-                const QResizeEvent *re = static_cast<QResizeEvent *>( event );
-
-                /*
-                   Adding/deleting additional event filters inside of an event filter
-                   is not safe dues to the implementation in Qt ( changing alist while iterating ).
-                   So we create the overlays in a way, that they don't install en event filter
-                   ( parent set to NULL ) and do the resizing here.
-                 */
-                if ( d_data->trackerOverlay )
-                    d_data->trackerOverlay->resize( re->size() );
-
-                if ( d_data->rubberBandOverlay )
-                    d_data->rubberBandOverlay->resize( re->size() );
-
-                if ( d_data->resizeMode == Stretch )
-                    stretchSelection( re->oldSize(), re->size() );
-
-                updateDisplay();
-                break;
-            }
-            case QEvent::Enter:
-            {
-                widgetEnterEvent( event );
-                break;
-            }
-            case QEvent::Leave:
-            {
-                widgetLeaveEvent( event );
-                break;
-            }
-            case QEvent::MouseButtonPress:
-            {
-                widgetMousePressEvent( static_cast<QMouseEvent *>( event ) );
-                break;
-            }
-            case QEvent::MouseButtonRelease:
-            {
-                widgetMouseReleaseEvent( static_cast<QMouseEvent *>( event ) );
-                break;
-            }
-            case QEvent::MouseButtonDblClick:
-            {
-                widgetMouseDoubleClickEvent( static_cast<QMouseEvent *>( event ) );
-                break;
-            }
-            case QEvent::MouseMove:
-            {
-                widgetMouseMoveEvent( static_cast<QMouseEvent *>( event ) );
-                break;
-            }
-            case QEvent::KeyPress:
-            {
-                widgetKeyPressEvent( static_cast<QKeyEvent *>( event ) );
-                break;
-            }
-            case QEvent::KeyRelease:
-            {
-                widgetKeyReleaseEvent( static_cast<QKeyEvent *>( event ) );
-                break;
-            }
-            case QEvent::Wheel:
-            {
-                widgetWheelEvent( static_cast<QWheelEvent *>( event ) );
-                break;
-            }
-            default:
-                break;
-        }
-    }
-    return false;
-}
-
-/*!
-  Handle a mouse press event for the observed widget.
-
-  \param mouseEvent Mouse event
-
-  \sa eventFilter(), widgetMouseReleaseEvent(),
-      widgetMouseDoubleClickEvent(), widgetMouseMoveEvent(),
-      widgetWheelEvent(), widgetKeyPressEvent(), widgetKeyReleaseEvent()
-*/
-void QwtPicker::widgetMousePressEvent( QMouseEvent *mouseEvent )
-{
-    transition( mouseEvent );
-}
-
-/*!
-  Handle a mouse move event for the observed widget.
-
-  \param mouseEvent Mouse event
-
-  \sa eventFilter(), widgetMousePressEvent(), widgetMouseReleaseEvent(),
-      widgetMouseDoubleClickEvent(),
-      widgetWheelEvent(), widgetKeyPressEvent(), widgetKeyReleaseEvent()
-*/
-void QwtPicker::widgetMouseMoveEvent( QMouseEvent *mouseEvent )
-{
-    if ( pickArea().contains( mouseEvent->pos() ) )
-        d_data->trackerPosition = mouseEvent->pos();
-    else
-        d_data->trackerPosition = QPoint( -1, -1 );
-
-    if ( !isActive() )
-        updateDisplay();
-
-    transition( mouseEvent );
-}
-
-/*!
-  Handle a enter event for the observed widget.
-
-  \param event Qt event
-
-  \sa eventFilter(), widgetMousePressEvent(), widgetMouseReleaseEvent(),
-      widgetMouseDoubleClickEvent(),
-      widgetWheelEvent(), widgetKeyPressEvent(), widgetKeyReleaseEvent()
-*/
-void QwtPicker::widgetEnterEvent( QEvent *event )
-{
-    transition( event );
-}
-
-/*!
-  Handle a leave event for the observed widget.
-
-  \param event Qt event
-
-  \sa eventFilter(), widgetMousePressEvent(), widgetMouseReleaseEvent(),
-      widgetMouseDoubleClickEvent(),
-      widgetWheelEvent(), widgetKeyPressEvent(), widgetKeyReleaseEvent()
-*/
-void QwtPicker::widgetLeaveEvent( QEvent *event )
-{
-    transition( event );
-
-    d_data->trackerPosition = QPoint( -1, -1 );
-    if ( !isActive() )
-        updateDisplay();
-}
-
-/*!
-  Handle a mouse release event for the observed widget.
-
-  \param mouseEvent Mouse event
-
-  \sa eventFilter(), widgetMousePressEvent(),
-      widgetMouseDoubleClickEvent(), widgetMouseMoveEvent(),
-      widgetWheelEvent(), widgetKeyPressEvent(), widgetKeyReleaseEvent()
-*/
-void QwtPicker::widgetMouseReleaseEvent( QMouseEvent *mouseEvent )
-{
-    transition( mouseEvent );
-}
-
-/*!
-  Handle mouse double click event for the observed widget.
-
-  \param mouseEvent Mouse event
-
-  \sa eventFilter(), widgetMousePressEvent(), widgetMouseReleaseEvent(),
-      widgetMouseMoveEvent(),
-      widgetWheelEvent(), widgetKeyPressEvent(), widgetKeyReleaseEvent()
-*/
-void QwtPicker::widgetMouseDoubleClickEvent( QMouseEvent *mouseEvent )
-{
-    transition( mouseEvent );
-}
-
-
-/*!
-  Handle a wheel event for the observed widget.
-
-  Move the last point of the selection in case of isActive() == true
-
-  \param wheelEvent Wheel event
-
-  \sa eventFilter(), widgetMousePressEvent(), widgetMouseReleaseEvent(),
-      widgetMouseDoubleClickEvent(), widgetMouseMoveEvent(),
-      widgetKeyPressEvent(), widgetKeyReleaseEvent()
-*/
-void QwtPicker::widgetWheelEvent( QWheelEvent *wheelEvent )
-{
-    if ( pickArea().contains( wheelEvent->pos() ) )
-        d_data->trackerPosition = wheelEvent->pos();
-    else
-        d_data->trackerPosition = QPoint( -1, -1 );
-
-    updateDisplay();
-
-    transition( wheelEvent );
-}
-
-/*!
-  Handle a key press event for the observed widget.
-
-  Selections can be completely done by the keyboard. The arrow keys
-  move the cursor, the abort key aborts a selection. All other keys
-  are handled by the current state machine.
-
-  \param keyEvent Key event
-
-  \sa eventFilter(), widgetMousePressEvent(), widgetMouseReleaseEvent(),
-      widgetMouseDoubleClickEvent(), widgetMouseMoveEvent(),
-      widgetWheelEvent(), widgetKeyReleaseEvent(), stateMachine(),
-      QwtEventPattern::KeyPatternCode
-*/
-void QwtPicker::widgetKeyPressEvent( QKeyEvent *keyEvent )
-{
-    int dx = 0;
-    int dy = 0;
-
-    int offset = 1;
-    if ( keyEvent->isAutoRepeat() )
-        offset = 5;
-
-    if ( keyMatch( KeyLeft, keyEvent ) )
-        dx = -offset;
-    else if ( keyMatch( KeyRight, keyEvent ) )
-        dx = offset;
-    else if ( keyMatch( KeyUp, keyEvent ) )
-        dy = -offset;
-    else if ( keyMatch( KeyDown, keyEvent ) )
-        dy = offset;
-    else if ( keyMatch( KeyAbort, keyEvent ) )
-    {
-        reset();
-    }
-    else
-        transition( keyEvent );
-
-    if ( dx != 0 || dy != 0 )
-    {
-        const QRect rect = pickArea().boundingRect().toRect();
-        const QPoint pos = parentWidget()->mapFromGlobal( QCursor::pos() );
-
-        int x = pos.x() + dx;
-        x = qMax( rect.left(), x );
-        x = qMin( rect.right(), x );
-
-        int y = pos.y() + dy;
-        y = qMax( rect.top(), y );
-        y = qMin( rect.bottom(), y );
-
-        QCursor::setPos( parentWidget()->mapToGlobal( QPoint( x, y ) ) );
-    }
-}
-
-/*!
-  Handle a key release event for the observed widget.
-
-  Passes the event to the state machine.
-
-  \param keyEvent Key event
-
-  \sa eventFilter(), widgetMousePressEvent(), widgetMouseReleaseEvent(),
-      widgetMouseDoubleClickEvent(), widgetMouseMoveEvent(),
-      widgetWheelEvent(), widgetKeyPressEvent(), stateMachine()
-*/
-void QwtPicker::widgetKeyReleaseEvent( QKeyEvent *keyEvent )
-{
-    transition( keyEvent );
-}
-
-/*!
-  Passes an event to the state machine and executes the resulting
-  commands. Append and Move commands use the current position
-  of the cursor ( QCursor::pos() ).
-
-  \param event Event
-*/
-void QwtPicker::transition( const QEvent *event )
-{
-    if ( !d_data->stateMachine )
-        return;
-
-    const QList<QwtPickerMachine::Command> commandList =
-        d_data->stateMachine->transition( *this, event );
-
-    QPoint pos;
-    switch ( event->type() )
-    {
-        case QEvent::MouseButtonDblClick:
-        case QEvent::MouseButtonPress:
-        case QEvent::MouseButtonRelease:
-        case QEvent::MouseMove:
-        {
-            const QMouseEvent *me = 
-                static_cast< const QMouseEvent * >( event );
-            pos = me->pos();
-            break;
-        }
-        default:
-            pos = parentWidget()->mapFromGlobal( QCursor::pos() );
-    }
-
-    for ( int i = 0; i < commandList.count(); i++ )
-    {
-        switch ( commandList[i] )
-        {
-            case QwtPickerMachine::Begin:
-            {
-                begin();
-                break;
-            }
-            case QwtPickerMachine::Append:
-            {
-                append( pos );
-                break;
-            }
-            case QwtPickerMachine::Move:
-            {
-                move( pos );
-                break;
-            }
-            case QwtPickerMachine::Remove:
-            {
-                remove();
-                break;
-            }
-            case QwtPickerMachine::End:
-            {
-                end();
-                break;
-            }
-        }
-    }
-}
-
-/*!
-  Open a selection setting the state to active
-
-  \sa isActive(), end(), append(), move()
-*/
-void QwtPicker::begin()
-{
-    if ( d_data->isActive )
-        return;
-
-    d_data->pickedPoints.resize( 0 );
-    d_data->isActive = true;
-    Q_EMIT activated( true );
-
-    if ( trackerMode() != AlwaysOff )
-    {
-        if ( d_data->trackerPosition.x() < 0 || d_data->trackerPosition.y() < 0 )
-        {
-            QWidget *w = parentWidget();
-            if ( w )
-                d_data->trackerPosition = w->mapFromGlobal( QCursor::pos() );
-        }
-    }
-
-    updateDisplay();
-    setMouseTracking( true );
-}
-
-/*!
-  \brief Close a selection setting the state to inactive.
-
-  The selection is validated and maybe fixed by accept().
-
-  \param ok If true, complete the selection and emit a selected signal
-            otherwise discard the selection.
-  \return true if the selection is accepted, false otherwise
-  \sa isActive(), begin(), append(), move(), selected(), accept()
-*/
-bool QwtPicker::end( bool ok )
-{
-    if ( d_data->isActive )
-    {
-        setMouseTracking( false );
-
-        d_data->isActive = false;
-        Q_EMIT activated( false );
-
-        if ( trackerMode() == ActiveOnly )
-            d_data->trackerPosition = QPoint( -1, -1 );
-
-        if ( ok )
-            ok = accept( d_data->pickedPoints );
-
-        if ( ok )
-            Q_EMIT selected( d_data->pickedPoints );
-        else
-            d_data->pickedPoints.resize( 0 );
-
-        updateDisplay();
-    }
-    else
-        ok = false;
-
-    return ok;
-}
-
-/*!
-   Reset the state machine and terminate ( end(false) ) the selection
-*/
-void QwtPicker::reset()
-{
-    if ( d_data->stateMachine )
-        d_data->stateMachine->reset();
-
-    if ( isActive() )
-        end( false );
-}
-
-/*!
-  Append a point to the selection and update rubber band and tracker.
-  The appended() signal is emitted.
-
-  \param pos Additional point
-
-  \sa isActive(), begin(), end(), move(), appended()
-*/
-void QwtPicker::append( const QPoint &pos )
-{
-    if ( d_data->isActive )
-    {
-        const int idx = d_data->pickedPoints.count();
-        d_data->pickedPoints.resize( idx + 1 );
-        d_data->pickedPoints[idx] = pos;
-
-        updateDisplay();
-        Q_EMIT appended( pos );
-    }
-}
-
-/*!
-  Move the last point of the selection
-  The moved() signal is emitted.
-
-  \param pos New position
-  \sa isActive(), begin(), end(), append()
-*/
-void QwtPicker::move( const QPoint &pos )
-{
-    if ( d_data->isActive )
-    {
-        const int idx = d_data->pickedPoints.count() - 1;
-        if ( idx >= 0 )
-        {
-            if ( d_data->pickedPoints[idx] != pos )
-            {
-                d_data->pickedPoints[idx] = pos;
-
-                updateDisplay();
-                Q_EMIT moved( pos );
-            }
-        }
-    }
-}
-
-/*!
-  Remove the last point of the selection
-  The removed() signal is emitted.
-
-  \sa isActive(), begin(), end(), append(), move()
-*/
-void QwtPicker::remove()
-{
-    if ( d_data->isActive )
-    {
-        const int idx = d_data->pickedPoints.count() - 1;
-        if ( idx > 0 )
-        {
-            const int idx = d_data->pickedPoints.count();
-
-            const QPoint pos = d_data->pickedPoints[idx - 1];
-            d_data->pickedPoints.resize( idx - 1 );
-
-            updateDisplay();
-            Q_EMIT removed( pos );
-        }
-    }
-}
-
-/*!
-  \brief Validate and fix up the selection
-
-  Accepts all selections unmodified
-
-  \param selection Selection to validate and fix up
-  \return true, when accepted, false otherwise
-*/
-bool QwtPicker::accept( QPolygon &selection ) const
-{
-    Q_UNUSED( selection );
-    return true;
-}
-
-/*!
-  A picker is active between begin() and end().
-  \return true if the selection is active.
-*/
-bool QwtPicker::isActive() const
-{
-    return d_data->isActive;
-}
-
-/*!
-  Return the points, that have been collected so far. The selection()
-  is calculated from the pickedPoints() in adjustedPoints().
-  \return Picked points
-*/
-const QPolygon &QwtPicker::pickedPoints() const
-{
-    return d_data->pickedPoints;
-}
-
-/*!
-  Scale the selection by the ratios of oldSize and newSize
-  The changed() signal is emitted.
-
-  \param oldSize Previous size
-  \param newSize Current size
-
-  \sa ResizeMode, setResizeMode(), resizeMode()
-*/
-void QwtPicker::stretchSelection( const QSize &oldSize, const QSize &newSize )
-{
-    if ( oldSize.isEmpty() )
-    {
-        // avoid division by zero. But scaling for small sizes also
-        // doesn't make much sense, because of rounding losses. TODO ...
-        return;
-    }
-
-    const double xRatio =
-        double( newSize.width() ) / double( oldSize.width() );
-    const double yRatio =
-        double( newSize.height() ) / double( oldSize.height() );
-
-    for ( int i = 0; i < int( d_data->pickedPoints.count() ); i++ )
-    {
-        QPoint &p = d_data->pickedPoints[i];
-        p.setX( qRound( p.x() * xRatio ) );
-        p.setY( qRound( p.y() * yRatio ) );
-
-        Q_EMIT changed( d_data->pickedPoints );
-    }
-}
-
-/*!
-  Set mouse tracking for the observed widget.
-
-  In case of enable is true, the previous value
-  is saved, that is restored when enable is false.
-
-  \warning Even when enable is false, mouse tracking might be restored
-           to true. When mouseTracking for the observed widget
-           has been changed directly by QWidget::setMouseTracking
-           while mouse tracking has been set to true, this value can't
-           be restored.
-*/
-
-void QwtPicker::setMouseTracking( bool enable )
-{
-    QWidget *widget = parentWidget();
-    if ( !widget )
-        return;
-
-    if ( enable )
-    {
-        d_data->mouseTracking = widget->hasMouseTracking();
-        widget->setMouseTracking( true );
-    }
-    else
-    {
-        widget->setMouseTracking( d_data->mouseTracking );
-    }
-}
-
-/*!
-  Find the area of the observed widget, where selection might happen.
-
-  \return parentWidget()->contentsRect() 
-*/
-QPainterPath QwtPicker::pickArea() const
-{
-    QPainterPath path;
-
-    const QWidget *widget = parentWidget();
-    if ( widget )
-        path.addRect( widget->contentsRect() );
-
-    return path;
-}
-
-//! Update the state of rubber band and tracker label
-void QwtPicker::updateDisplay()
-{
-    QWidget *w = parentWidget();
-
-    bool showRubberband = false;
-    bool showTracker = false;
-
-    if ( w && w->isVisible() && d_data->enabled )
-    {
-        if ( rubberBand() != NoRubberBand && isActive() &&
-            rubberBandPen().style() != Qt::NoPen )
-        {
-            showRubberband = true;
-        }
-
-        if ( trackerMode() == AlwaysOn ||
-            ( trackerMode() == ActiveOnly && isActive() ) )
-        {
-            if ( trackerPen() != Qt::NoPen 
-                && !trackerRect( QFont() ).isEmpty() )
-            {
-                showTracker = true;
-            }
-        }
-    }
-
-    QPointer< QwtPickerRubberband > &rw = d_data->rubberBandOverlay;
-    if ( showRubberband )
-    {
-        if ( rw.isNull() )
-        {
-            rw = new QwtPickerRubberband( this, NULL ); // NULL -> no extra event filter
-            rw->setObjectName( "PickerRubberBand" );
-            rw->setParent( w );
-            rw->resize( w->size() );
-        }
-
-        if ( d_data->rubberBand <= RectRubberBand )
-            rw->setMaskMode( QwtWidgetOverlay::MaskHint );
-        else
-            rw->setMaskMode( QwtWidgetOverlay::AlphaMask );
-
-        rw->updateOverlay();
-    }
-    else
-    {
-        if ( d_data->openGL )
-        {
-            // Qt 4.8 crashes for a delete
-            if ( !rw.isNull() )
-            {
-                rw->hide();
-                rw->deleteLater();
-                rw = NULL;
-            }
-        }
-        else
-        {
-            delete rw;
-        }
-    }
-
-    QPointer< QwtPickerTracker > &tw = d_data->trackerOverlay;
-    if ( showTracker )
-    {
-        if ( tw.isNull() )
-        {
-            tw = new QwtPickerTracker( this, NULL ); // NULL -> no extra event filter
-            tw->setObjectName( "PickerTracker" );
-            tw->setParent( w );
-            tw->resize( w->size() );
-        }
-        tw->setFont( d_data->trackerFont );
-        tw->updateOverlay();
-    }
-    else
-    {
-        if ( d_data->openGL )
-        {
-            // Qt 4.8 crashes for a delete
-            if ( !tw.isNull() )
-            {
-                tw->hide();
-                tw->deleteLater();
-                tw = NULL;
-            }
-        }
-        else
-        {
-            delete tw;
-        }
-    }
-}
-
-//! \return Overlay displaying the rubber band
-const QwtWidgetOverlay *QwtPicker::rubberBandOverlay() const
-{
-    return d_data->rubberBandOverlay;
-}
-
-//! \return Overlay displaying the tracker text
-const QwtWidgetOverlay *QwtPicker::trackerOverlay() const
-{
-    return d_data->trackerOverlay;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker.h
deleted file mode 100644
index c847cd5440aeb7ff7a81107b425d1c37485363ee..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker.h
+++ /dev/null
@@ -1,329 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PICKER
-#define QWT_PICKER 1
-
-#include "qwt_global.h"
-#include "qwt_text.h"
-#include "qwt_event_pattern.h"
-#include <qobject.h>
-#include <qpen.h>
-#include <qfont.h>
-#include <qrect.h>
-#include <qpainterpath.h>
-
-class QWidget;
-class QMouseEvent;
-class QWheelEvent;
-class QKeyEvent;
-class QwtPickerMachine;
-class QwtWidgetOverlay;
-
-/*!
-  \brief QwtPicker provides selections on a widget
-
-  QwtPicker filters all enter, leave, mouse and keyboard events of a widget
-  and translates them into an array of selected points.
-
-  The way how the points are collected depends on type of state machine
-  that is connected to the picker. Qwt offers a couple of predefined
-  state machines for selecting:
-
-  - Nothing\n
-    QwtPickerTrackerMachine
-  - Single points\n
-    QwtPickerClickPointMachine, QwtPickerDragPointMachine
-  - Rectangles\n
-    QwtPickerClickRectMachine, QwtPickerDragRectMachine
-  - Polygons\n
-    QwtPickerPolygonMachine
-
-  While these state machines cover the most common ways to collect points
-  it is also possible to implement individual machines as well.
-
-  QwtPicker translates the picked points into a selection using the
-  adjustedPoints() method. adjustedPoints() is intended to be reimplemented
-  to fix up the selection according to application specific requirements.
-  (F.e. when an application accepts rectangles of a fixed aspect ratio only.)
-
-  Optionally QwtPicker support the process of collecting points by a
-  rubber band and tracker displaying a text for the current mouse
-  position.
-
-  \par Example
-  \verbatim #include <qwt_picker.h>
-#include <qwt_picker_machine.h>
-
-QwtPicker *picker = new QwtPicker(widget);
-picker->setStateMachine(new QwtPickerDragRectMachine);
-picker->setTrackerMode(QwtPicker::ActiveOnly);
-picker->setRubberBand(QwtPicker::RectRubberBand); \endverbatim\n
-
-  The state machine triggers the following commands:
-
-  - begin()\n
-    Activate/Initialize the selection.
-  - append()\n
-    Add a new point
-  - move() \n
-    Change the position of the last point.
-  - remove()\n
-    Remove the last point.
-  - end()\n
-    Terminate the selection and call accept to validate the picked points.
-
-  The picker is active (isActive()), between begin() and end().
-  In active state the rubber band is displayed, and the tracker is visible
-  in case of trackerMode is ActiveOnly or AlwaysOn.
-
-  The cursor can be moved using the arrow keys. All selections can be aborted
-  using the abort key. (QwtEventPattern::KeyPatternCode)
-
-  \warning In case of QWidget::NoFocus the focus policy of the observed
-           widget is set to QWidget::WheelFocus and mouse tracking
-           will be manipulated while the picker is active,
-           or if trackerMode() is AlwayOn.
-*/
-
-class QWT_EXPORT QwtPicker: public QObject, public QwtEventPattern
-{
-    Q_OBJECT
-
-    Q_ENUMS( RubberBand DisplayMode ResizeMode )
-
-    Q_PROPERTY( bool isEnabled READ isEnabled WRITE setEnabled )
-    Q_PROPERTY( ResizeMode resizeMode READ resizeMode WRITE setResizeMode )
-
-    Q_PROPERTY( DisplayMode trackerMode READ trackerMode WRITE setTrackerMode )
-    Q_PROPERTY( QPen trackerPen READ trackerPen WRITE setTrackerPen )
-    Q_PROPERTY( QFont trackerFont READ trackerFont WRITE setTrackerFont )
-
-    Q_PROPERTY( RubberBand rubberBand READ rubberBand WRITE setRubberBand )
-    Q_PROPERTY( QPen rubberBandPen READ rubberBandPen WRITE setRubberBandPen )
-
-public:
-    /*!
-      Rubber band style
-
-      The default value is QwtPicker::NoRubberBand.
-      \sa setRubberBand(), rubberBand()
-    */
-
-    enum RubberBand
-    {
-        //! No rubberband.
-        NoRubberBand = 0,
-
-        //! A horizontal line ( only for QwtPickerMachine::PointSelection )
-        HLineRubberBand,
-
-        //! A vertical line ( only for QwtPickerMachine::PointSelection )
-        VLineRubberBand,
-
-        //! A crosshair ( only for QwtPickerMachine::PointSelection )
-        CrossRubberBand,
-
-        //! A rectangle ( only for QwtPickerMachine::RectSelection )
-        RectRubberBand,
-
-        //! An ellipse ( only for QwtPickerMachine::RectSelection )
-        EllipseRubberBand,
-
-        //! A polygon ( only for QwtPickerMachine::PolygonSelection )
-        PolygonRubberBand,
-
-        /*!
-          Values >= UserRubberBand can be used to define additional
-          rubber bands.
-         */
-        UserRubberBand = 100
-    };
-
-    /*!
-      \brief Display mode
-      \sa setTrackerMode(), trackerMode(), isActive()
-    */
-    enum DisplayMode
-    {
-        //! Display never
-        AlwaysOff,
-
-        //! Display always
-        AlwaysOn,
-
-        //! Display only when the selection is active
-        ActiveOnly
-    };
-
-    /*!
-      Controls what to do with the selected points of an active
-         selection when the observed widget is resized.
-
-      The default value is QwtPicker::Stretch.
-      \sa setResizeMode()
-    */
-
-    enum ResizeMode
-    {
-        //! All points are scaled according to the new size,
-        Stretch,
-
-        //! All points remain unchanged.
-        KeepSize
-    };
-
-    explicit QwtPicker( QWidget *parent );
-    explicit QwtPicker( RubberBand rubberBand,
-                        DisplayMode trackerMode, QWidget * );
-
-    virtual ~QwtPicker();
-
-    void setStateMachine( QwtPickerMachine * );
-    const QwtPickerMachine *stateMachine() const;
-    QwtPickerMachine *stateMachine();
-
-    void setRubberBand( RubberBand );
-    RubberBand rubberBand() const;
-
-    void setTrackerMode( DisplayMode );
-    DisplayMode trackerMode() const;
-
-    void setResizeMode( ResizeMode );
-    ResizeMode resizeMode() const;
-
-    void setRubberBandPen( const QPen & );
-    QPen rubberBandPen() const;
-
-    void setTrackerPen( const QPen & );
-    QPen trackerPen() const;
-
-    void setTrackerFont( const QFont & );
-    QFont trackerFont() const;
-
-    bool isEnabled() const;
-    bool isActive() const;
-
-    virtual bool eventFilter( QObject *, QEvent * );
-
-    QWidget *parentWidget();
-    const QWidget *parentWidget() const;
-
-    virtual QPainterPath pickArea() const;
-
-    virtual void drawRubberBand( QPainter * ) const;
-    virtual void drawTracker( QPainter * ) const;
-
-    virtual QRegion rubberBandMask() const;
-
-    virtual QwtText trackerText( const QPoint &pos ) const;
-    QPoint trackerPosition() const;
-    virtual QRect trackerRect( const QFont & ) const;
-
-    QPolygon selection() const;
-
-public Q_SLOTS:
-    void setEnabled( bool );
-
-Q_SIGNALS:
-    /*!
-      A signal indicating, when the picker has been activated.
-      Together with setEnabled() it can be used to implement
-      selections with more than one picker.
-
-      \param on True, when the picker has been activated
-    */
-    void activated( bool on );
-
-    /*!
-      A signal emitting the selected points,
-      at the end of a selection.
-
-      \param polygon Selected points
-    */
-    void selected( const QPolygon &polygon );
-
-    /*!
-      A signal emitted when a point has been appended to the selection
-
-      \param pos Position of the appended point.
-      \sa append(). moved()
-    */
-    void appended( const QPoint &pos );
-
-    /*!
-      A signal emitted whenever the last appended point of the
-      selection has been moved.
-
-      \param pos Position of the moved last point of the selection.
-      \sa move(), appended()
-    */
-    void moved( const QPoint &pos );
-
-    /*!
-      A signal emitted whenever the last appended point of the
-      selection has been removed.
-
-      \param pos Position of the point, that has been removed
-      \sa remove(), appended()
-    */
-    void removed( const QPoint &pos );
-    /*!
-      A signal emitted when the active selection has been changed.
-      This might happen when the observed widget is resized.
-
-      \param selection Changed selection
-      \sa stretchSelection()
-    */
-    void changed( const QPolygon &selection );
-
-protected:
-    virtual QPolygon adjustedPoints( const QPolygon & ) const;
-
-    virtual void transition( const QEvent * );
-
-    virtual void begin();
-    virtual void append( const QPoint & );
-    virtual void move( const QPoint & );
-    virtual void remove();
-    virtual bool end( bool ok = true );
-
-    virtual bool accept( QPolygon & ) const;
-    virtual void reset();
-
-    virtual void widgetMousePressEvent( QMouseEvent * );
-    virtual void widgetMouseReleaseEvent( QMouseEvent * );
-    virtual void widgetMouseDoubleClickEvent( QMouseEvent * );
-    virtual void widgetMouseMoveEvent( QMouseEvent * );
-    virtual void widgetWheelEvent( QWheelEvent * );
-    virtual void widgetKeyPressEvent( QKeyEvent * );
-    virtual void widgetKeyReleaseEvent( QKeyEvent * );
-    virtual void widgetEnterEvent( QEvent * );
-    virtual void widgetLeaveEvent( QEvent * );
-
-    virtual void stretchSelection( const QSize &oldSize,
-                                   const QSize &newSize );
-
-    virtual void updateDisplay();
-
-    const QwtWidgetOverlay *rubberBandOverlay() const;
-    const QwtWidgetOverlay *trackerOverlay() const;
-
-    const QPolygon &pickedPoints() const;
-
-private:
-    void init( QWidget *, RubberBand rubberBand, DisplayMode trackerMode );
-
-    void setMouseTracking( bool );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker_machine.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker_machine.cpp
deleted file mode 100644
index 9f2f6f85b511622c0d3142421f8f397a74196333..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker_machine.cpp
+++ /dev/null
@@ -1,541 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_picker_machine.h"
-#include "qwt_event_pattern.h"
-#include <qevent.h>
-
-//! Constructor
-QwtPickerMachine::QwtPickerMachine( SelectionType type ):
-    d_selectionType( type ),
-    d_state( 0 )
-{
-}
-
-//! Destructor
-QwtPickerMachine::~QwtPickerMachine()
-{
-}
-
-//! Return the selection type
-QwtPickerMachine::SelectionType QwtPickerMachine::selectionType() const
-{
-    return d_selectionType;
-}
-
-//! Return the current state
-int QwtPickerMachine::state() const
-{
-    return d_state;
-}
-
-//! Change the current state
-void QwtPickerMachine::setState( int state )
-{
-    d_state = state;
-}
-
-//! Set the current state to 0.
-void QwtPickerMachine::reset()
-{
-    setState( 0 );
-}
-
-//! Constructor
-QwtPickerTrackerMachine::QwtPickerTrackerMachine():
-    QwtPickerMachine( NoSelection )
-{
-}
-
-//! Transition
-QList<QwtPickerMachine::Command> QwtPickerTrackerMachine::transition(
-    const QwtEventPattern &, const QEvent *e )
-{
-    QList<QwtPickerMachine::Command> cmdList;
-
-    switch ( e->type() )
-    {
-        case QEvent::Enter:
-        case QEvent::MouseMove:
-        {
-            if ( state() == 0 )
-            {
-                cmdList += Begin;
-                cmdList += Append;
-                setState( 1 );
-            }
-            else
-            {
-                cmdList += Move;
-            }
-            break;
-        }
-        case QEvent::Leave:
-        {
-            cmdList += Remove;
-            cmdList += End;
-            setState( 0 );
-        }
-        default:
-            break;
-    }
-
-    return cmdList;
-}
-
-//! Constructor
-QwtPickerClickPointMachine::QwtPickerClickPointMachine():
-    QwtPickerMachine( PointSelection )
-{
-}
-
-//! Transition
-QList<QwtPickerMachine::Command> QwtPickerClickPointMachine::transition(
-    const QwtEventPattern &eventPattern, const QEvent *event )
-{
-    QList<QwtPickerMachine::Command> cmdList;
-
-    switch ( event->type() )
-    {
-        case QEvent::MouseButtonPress:
-        {
-            if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1, 
-                static_cast<const QMouseEvent *>( event ) ) )
-            {
-                cmdList += Begin;
-                cmdList += Append;
-                cmdList += End;
-            }
-            break;
-        }
-        case QEvent::KeyPress:
-        {
-            const QKeyEvent *keyEvent = static_cast<const QKeyEvent *> ( event );
-            if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1, keyEvent ) )
-            {
-                if ( !keyEvent->isAutoRepeat() )
-                {
-                    cmdList += Begin;
-                    cmdList += Append;
-                    cmdList += End;
-                }
-            }
-            break;
-        }
-        default:
-            break;
-    }
-
-    return cmdList;
-}
-
-//! Constructor
-QwtPickerDragPointMachine::QwtPickerDragPointMachine():
-    QwtPickerMachine( PointSelection )
-{
-}
-
-//! Transition
-QList<QwtPickerMachine::Command> QwtPickerDragPointMachine::transition(
-    const QwtEventPattern &eventPattern, const QEvent *event )
-{
-    QList<QwtPickerMachine::Command> cmdList;
-
-    switch ( event->type() )
-    {
-        case QEvent::MouseButtonPress:
-        {
-            if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1, 
-                static_cast<const QMouseEvent *>( event ) ) )
-            {
-                if ( state() == 0 )
-                {
-                    cmdList += Begin;
-                    cmdList += Append;
-                    setState( 1 );
-                }
-            }
-            break;
-        }
-        case QEvent::MouseMove:
-        case QEvent::Wheel:
-        {
-            if ( state() != 0 )
-                cmdList += Move;
-            break;
-        }
-        case QEvent::MouseButtonRelease:
-        {
-            if ( state() != 0 )
-            {
-                cmdList += End;
-                setState( 0 );
-            }
-            break;
-        }
-        case QEvent::KeyPress:
-        {
-            const QKeyEvent *keyEvent = static_cast<const QKeyEvent *> ( event );
-            if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1, keyEvent ) )
-            {
-                if ( !keyEvent->isAutoRepeat() )
-                {
-                    if ( state() == 0 )
-                    {
-                        cmdList += Begin;
-                        cmdList += Append;
-                        setState( 1 );
-                    }
-                    else
-                    {
-                        cmdList += End;
-                        setState( 0 );
-                    }
-                }
-            }
-            break;
-        }
-        default:
-            break;
-    }
-
-    return cmdList;
-}
-
-//! Constructor
-QwtPickerClickRectMachine::QwtPickerClickRectMachine():
-    QwtPickerMachine( RectSelection )
-{
-}
-
-//! Transition
-QList<QwtPickerMachine::Command> QwtPickerClickRectMachine::transition(
-    const QwtEventPattern &eventPattern, const QEvent *event )
-{
-    QList<QwtPickerMachine::Command> cmdList;
-
-    switch ( event->type() )
-    {
-        case QEvent::MouseButtonPress:
-        {
-            if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1, 
-                static_cast<const QMouseEvent *>( event ) ) )
-            {
-                switch ( state() )
-                {
-                    case 0:
-                    {
-                        cmdList += Begin;
-                        cmdList += Append;
-                        setState( 1 );
-                        break;
-                    }
-                    case 1:
-                    {
-                        // Uh, strange we missed the MouseButtonRelease
-                        break;
-                    }
-                    default:
-                    {
-                        cmdList += End;
-                        setState( 0 );
-                    }
-                }
-            }
-            break;
-        }
-        case QEvent::MouseMove:
-        case QEvent::Wheel:
-        {
-            if ( state() != 0 )
-                cmdList += Move;
-            break;
-        }
-        case QEvent::MouseButtonRelease:
-        {
-            if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1, 
-                static_cast<const QMouseEvent *>( event ) ) )
-            {
-                if ( state() == 1 )
-                {
-                    cmdList += Append;
-                    setState( 2 );
-                }
-            }
-            break;
-        }
-        case QEvent::KeyPress:
-        {
-            const QKeyEvent *keyEvent = static_cast<const QKeyEvent *> ( event );
-            if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1, keyEvent ) )
-            {
-                if ( !keyEvent->isAutoRepeat() )
-                {
-                    if ( state() == 0 )
-                    {
-                        cmdList += Begin;
-                        cmdList += Append;
-                        setState( 1 );
-                    }
-                    else
-                    {
-                        if ( state() == 1 )
-                        {
-                            cmdList += Append;
-                            setState( 2 );
-                        }
-                        else if ( state() == 2 )
-                        {
-                            cmdList += End;
-                            setState( 0 );
-                        }
-                    }
-                }
-            }
-            break;
-        }
-        default:
-            break;
-    }
-
-    return cmdList;
-}
-
-//! Constructor
-QwtPickerDragRectMachine::QwtPickerDragRectMachine():
-    QwtPickerMachine( RectSelection )
-{
-}
-
-//! Transition
-QList<QwtPickerMachine::Command> QwtPickerDragRectMachine::transition(
-    const QwtEventPattern &eventPattern, const QEvent *event )
-{
-    QList<QwtPickerMachine::Command> cmdList;
-
-    switch ( event->type() )
-    {
-        case QEvent::MouseButtonPress:
-        {
-            if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1, 
-                static_cast<const QMouseEvent *>( event ) ) )
-            {
-                if ( state() == 0 )
-                {
-                    cmdList += Begin;
-                    cmdList += Append;
-                    cmdList += Append;
-                    setState( 2 );
-                }
-            }
-            break;
-        }
-        case QEvent::MouseMove:
-        case QEvent::Wheel:
-        {
-            if ( state() != 0 )
-                cmdList += Move;
-            break;
-        }
-        case QEvent::MouseButtonRelease:
-        {
-            if ( state() == 2 )
-            {
-                cmdList += End;
-                setState( 0 );
-            }
-            break;
-        }
-        case QEvent::KeyPress:
-        {
-            if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1, 
-                static_cast<const QKeyEvent *> ( event ) ) )
-            {
-                if ( state() == 0 )
-                {
-                    cmdList += Begin;
-                    cmdList += Append;
-                    cmdList += Append;
-                    setState( 2 );
-                }
-                else
-                {
-                    cmdList += End;
-                    setState( 0 );
-                }
-            }
-            break;
-        }
-        default:
-            break;
-    }
-
-    return cmdList;
-}
-
-//! Constructor
-QwtPickerPolygonMachine::QwtPickerPolygonMachine():
-    QwtPickerMachine( PolygonSelection )
-{
-}
-
-//! Transition
-QList<QwtPickerMachine::Command> QwtPickerPolygonMachine::transition(
-    const QwtEventPattern &eventPattern, const QEvent *event )
-{
-    QList<QwtPickerMachine::Command> cmdList;
-
-    switch ( event->type() )
-    {
-        case QEvent::MouseButtonPress:
-        {
-            if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1, 
-                static_cast<const QMouseEvent *>( event ) ) )
-            {
-                if ( state() == 0 )
-                {
-                    cmdList += Begin;
-                    cmdList += Append;
-                    cmdList += Append;
-                    setState( 1 );
-                }
-                else
-                {
-                    cmdList += Append;
-                }
-            }
-            if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect2, 
-                static_cast<const QMouseEvent *>( event ) ) )
-            {
-                if ( state() == 1 )
-                {
-                    cmdList += End;
-                    setState( 0 );
-                }
-            }
-            break;
-        }
-        case QEvent::MouseMove:
-        case QEvent::Wheel:
-        {
-            if ( state() != 0 )
-                cmdList += Move;
-            break;
-        }
-        case QEvent::KeyPress:
-        {
-            const QKeyEvent *keyEvent = static_cast<const QKeyEvent *> ( event );
-            if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1, keyEvent ) )
-            {
-                if ( !keyEvent->isAutoRepeat() )
-                {
-                    if ( state() == 0 )
-                    {
-                        cmdList += Begin;
-                        cmdList += Append;
-                        cmdList += Append;
-                        setState( 1 );
-                    }
-                    else
-                    {
-                        cmdList += Append;
-                    }
-                }
-            }
-            else if ( eventPattern.keyMatch( QwtEventPattern::KeySelect2, keyEvent ) )
-            {
-                if ( !keyEvent->isAutoRepeat() )
-                {
-                    if ( state() == 1 )
-                    {
-                        cmdList += End;
-                        setState( 0 );
-                    }
-                }
-            }
-            break;
-        }
-        default:
-            break;
-    }
-
-    return cmdList;
-}
-
-//! Constructor
-QwtPickerDragLineMachine::QwtPickerDragLineMachine():
-    QwtPickerMachine( PolygonSelection )
-{
-}
-
-//! Transition
-QList<QwtPickerMachine::Command> QwtPickerDragLineMachine::transition(
-    const QwtEventPattern &eventPattern, const QEvent *event )
-{
-    QList<QwtPickerMachine::Command> cmdList;
-
-    switch( event->type() )
-    {
-        case QEvent::MouseButtonPress:
-        {
-            if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1,
-                static_cast<const QMouseEvent *>( event ) ) )
-            {
-                if ( state() == 0 )
-                {
-                    cmdList += Begin;
-                    cmdList += Append;
-                    cmdList += Append;
-                    setState( 1 );
-                }
-            }
-            break;
-        }
-        case QEvent::KeyPress:
-        {
-            if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1,
-                static_cast<const QKeyEvent *> ( event ) ) )
-            {
-                if ( state() == 0 )
-                {
-                    cmdList += Begin;
-                    cmdList += Append;
-                    cmdList += Append;
-                    setState( 1 );
-                }
-                else
-                {
-                    cmdList += End;
-                    setState( 0 );
-                }
-            }
-            break;
-        }
-        case QEvent::MouseMove:
-        case QEvent::Wheel:
-        {
-            if ( state() != 0 )
-                cmdList += Move;
-
-            break;
-        }
-        case QEvent::MouseButtonRelease:
-        {
-            if ( state() != 0 )
-            {
-                cmdList += End;
-                setState( 0 );
-            }
-        }
-        default:
-            break;
-    }
-
-    return cmdList;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker_machine.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker_machine.h
deleted file mode 100644
index a1d2499eb93cc8a8c63e954d527de843498b9506..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_picker_machine.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PICKER_MACHINE
-#define QWT_PICKER_MACHINE 1
-
-#include "qwt_global.h"
-#include <qlist.h>
-
-class QEvent;
-class QwtEventPattern;
-
-/*!
-  \brief A state machine for QwtPicker selections
-
-  QwtPickerMachine accepts key and mouse events and translates them
-  into selection commands.
-
-  \sa QwtEventPattern::MousePatternCode, QwtEventPattern::KeyPatternCode
-*/
-
-class QWT_EXPORT QwtPickerMachine
-{
-public:
-    /*!
-      Type of a selection.
-      \sa selectionType()
-    */
-    enum SelectionType
-    {
-        //! The state machine not usable for any type of selection.
-        NoSelection = -1,
-
-        //! The state machine is for selecting a single point.
-        PointSelection,
-
-        //! The state machine is for selecting a rectangle (2 points).
-        RectSelection,
-
-        //! The state machine is for selecting a polygon (many points).
-        PolygonSelection
-    };
-
-    //! Commands - the output of a state machine
-    enum Command
-    {
-        Begin,
-        Append,
-        Move,
-        Remove,
-        End
-    };
-
-    QwtPickerMachine( SelectionType );
-    virtual ~QwtPickerMachine();
-
-    //! Transition
-    virtual QList<Command> transition(
-        const QwtEventPattern &, const QEvent * ) = 0;
-    void reset();
-
-    int state() const;
-    void setState( int );
-
-    SelectionType selectionType() const;
-
-private:
-    const SelectionType d_selectionType;
-    int d_state;
-};
-
-/*!
-  \brief A state machine for indicating mouse movements
-
-  QwtPickerTrackerMachine supports displaying information
-  corresponding to mouse movements, but is not intended for
-  selecting anything. Begin/End are related to Enter/Leave events.
-*/
-class QWT_EXPORT QwtPickerTrackerMachine: public QwtPickerMachine
-{
-public:
-    QwtPickerTrackerMachine();
-
-    virtual QList<Command> transition(
-        const QwtEventPattern &, const QEvent * );
-};
-
-/*!
-  \brief A state machine for point selections
-
-  Pressing QwtEventPattern::MouseSelect1 or
-  QwtEventPattern::KeySelect1 selects a point.
-
-  \sa QwtEventPattern::MousePatternCode, QwtEventPattern::KeyPatternCode
-*/
-class QWT_EXPORT QwtPickerClickPointMachine: public QwtPickerMachine
-{
-public:
-    QwtPickerClickPointMachine();
-
-    virtual QList<Command> transition(
-        const QwtEventPattern &, const QEvent * );
-};
-
-/*!
-  \brief A state machine for point selections
-
-  Pressing QwtEventPattern::MouseSelect1 or QwtEventPattern::KeySelect1
-  starts the selection, releasing QwtEventPattern::MouseSelect1 or
-  a second press of QwtEventPattern::KeySelect1 terminates it.
-*/
-class QWT_EXPORT QwtPickerDragPointMachine: public QwtPickerMachine
-{
-public:
-    QwtPickerDragPointMachine();
-
-    virtual QList<Command> transition(
-        const QwtEventPattern &, const QEvent * );
-};
-
-/*!
-  \brief A state machine for rectangle selections
-
-  Pressing QwtEventPattern::MouseSelect1 starts
-  the selection, releasing it selects the first point. Pressing it
-  again selects the second point and terminates the selection.
-  Pressing QwtEventPattern::KeySelect1 also starts the
-  selection, a second press selects the first point. A third one selects
-  the second point and terminates the selection.
-
-  \sa QwtEventPattern::MousePatternCode, QwtEventPattern::KeyPatternCode
-*/
-
-class QWT_EXPORT QwtPickerClickRectMachine: public QwtPickerMachine
-{
-public:
-    QwtPickerClickRectMachine();
-
-    virtual QList<Command> transition(
-        const QwtEventPattern &, const QEvent * );
-};
-
-/*!
-  \brief A state machine for rectangle selections
-
-  Pressing QwtEventPattern::MouseSelect1 selects
-  the first point, releasing it the second point.
-  Pressing QwtEventPattern::KeySelect1 also selects the
-  first point, a second press selects the second point and terminates
-  the selection.
-
-  \sa QwtEventPattern::MousePatternCode, QwtEventPattern::KeyPatternCode
-*/
-
-class QWT_EXPORT QwtPickerDragRectMachine: public QwtPickerMachine
-{
-public:
-    QwtPickerDragRectMachine();
-
-    virtual QList<Command> transition(
-        const QwtEventPattern &, const QEvent * );
-};
-
-/*!
-  \brief A state machine for line selections
-    
-  Pressing QwtEventPattern::MouseSelect1 selects
-  the first point, releasing it the second point.
-  Pressing QwtEventPattern::KeySelect1 also selects the
-  first point, a second press selects the second point and terminates
-  the selection.
-
-  A common use case of QwtPickerDragLineMachine are pickers for
-  distance measurements.
-  
-  \sa QwtEventPattern::MousePatternCode, QwtEventPattern::KeyPatternCode
-*/              
-                    
-class QWT_EXPORT QwtPickerDragLineMachine: public QwtPickerMachine
-{
-public:
-    QwtPickerDragLineMachine();
-
-    virtual QList<Command> transition(
-        const QwtEventPattern &, const QEvent * );
-};
-
-/*!
-  \brief A state machine for polygon selections
-
-  Pressing QwtEventPattern::MouseSelect1 or QwtEventPattern::KeySelect1
-  starts the selection and selects the first point, or appends a point.
-  Pressing QwtEventPattern::MouseSelect2 or QwtEventPattern::KeySelect2
-  appends the last point and terminates the selection.
-
-  \sa QwtEventPattern::MousePatternCode, QwtEventPattern::KeyPatternCode
-*/
-
-class QWT_EXPORT QwtPickerPolygonMachine: public QwtPickerMachine
-{
-public:
-    QwtPickerPolygonMachine();
-
-    virtual QList<Command> transition(
-        const QwtEventPattern &, const QEvent * );
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_pixel_matrix.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_pixel_matrix.cpp
deleted file mode 100644
index 6b28653b0b449337141de35d232c1b52e7b6046f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_pixel_matrix.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_pixel_matrix.h"
-
-/*!
-  \brief Constructor
-
-  \param rect Bounding rectangle for the matrix
-*/
-QwtPixelMatrix::QwtPixelMatrix( const QRect& rect ):
-    QBitArray( qMax( rect.width() * rect.height(), 0 ) ),
-    d_rect( rect )
-{
-}
-
-//! Destructor
-QwtPixelMatrix::~QwtPixelMatrix()
-{
-}
-
-/*!
-    Set the bounding rectangle of the matrix
-
-    \param rect Bounding rectangle
-
-    \note All bits are cleared
- */
-void QwtPixelMatrix::setRect( const QRect& rect )
-{
-    if ( rect != d_rect )
-    {
-        d_rect = rect;
-        const int sz = qMax( rect.width() * rect.height(), 0 );
-        resize( sz );
-    }
-
-    fill( false );
-}
-
-//! \return Bounding rectangle
-QRect QwtPixelMatrix::rect() const
-{
-    return d_rect;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_pixel_matrix.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_pixel_matrix.h
deleted file mode 100644
index 1428d1bd1a666ce30dbae95eb25d4e7b9764835a..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_pixel_matrix.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PIXEL_MATRIX_H
-#define QWT_PIXEL_MATRIX_H
-
-#include "qwt_global.h"
-#include <qbitarray.h>
-#include <qrect.h>
-
-/*!
-  \brief A bit field corresponding to the pixels of a rectangle
-
-  QwtPixelMatrix is intended to filter out duplicates in an
-  unsorted array of points.
-*/
-class QWT_EXPORT QwtPixelMatrix: public QBitArray
-{
-public:
-    QwtPixelMatrix( const QRect& rect );
-    ~QwtPixelMatrix();
-
-    void setRect( const QRect& rect );
-    QRect rect() const;
-
-    bool testPixel( int x, int y ) const;
-    bool testAndSetPixel( int x, int y, bool on );
-
-    int index( int x, int y ) const;
-
-private:
-    QRect d_rect;
-};
-
-/*!
-  \brief Test if a pixel has been set
-
-  \param x X-coordinate
-  \param y Y-coordinate
-
-  \return true, when pos is outside of rect(), or when the pixel
-          has already been set.
- */
-inline bool QwtPixelMatrix::testPixel( int x, int y ) const
-{
-    const int idx = index( x, y );
-    return ( idx >= 0 ) ? testBit( idx ) : true;
-}
-
-/*!
-  \brief Set a pixel and test if a pixel has been set before
-
-  \param x X-coordinate
-  \param y Y-coordinate
-  \param on Set/Clear the pixel
-
-  \return true, when pos is outside of rect(), or when the pixel
-          was set before.
- */
-inline bool QwtPixelMatrix::testAndSetPixel( int x, int y, bool on )
-{
-    const int idx = index( x, y );
-    if ( idx < 0 )
-        return true;
-
-    const bool onBefore = testBit( idx );
-    setBit( idx, on );
-
-    return onBefore;
-}
-
-/*!
-  \brief Calculate the index in the bit field corresponding to a position
-
-  \param x X-coordinate
-  \param y Y-coordinate
-  \return Index, when rect() contains pos - otherwise -1.
- */
-inline int QwtPixelMatrix::index( int x, int y ) const
-{
-    const int dx = x - d_rect.x();
-    if ( dx < 0 || dx >= d_rect.width() )
-        return -1;
-
-    const int dy = y - d_rect.y();
-    if ( dy < 0 || dy >= d_rect.height() )
-        return -1;
-
-    return dy * d_rect.width() + dx;
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot.cpp
deleted file mode 100644
index 7cba3557d459cd7b604f48028f2c60eedc6f06e4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot.cpp
+++ /dev/null
@@ -1,1176 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot.h"
-#include "qwt_plot_dict.h"
-#include "qwt_plot_layout.h"
-#include "qwt_scale_widget.h"
-#include "qwt_scale_engine.h"
-#include "qwt_text_label.h"
-#include "qwt_legend.h"
-#include "qwt_legend_data.h"
-#include "qwt_plot_canvas.h"
-#include <qmath.h>
-#include <qpainter.h>
-#include <qpointer.h>
-#include <qpaintengine.h>
-#include <qapplication.h>
-#include <qevent.h>
-
-static inline void qwtEnableLegendItems( QwtPlot *plot, bool on )
-{
-    if ( on )
-    {
-        QObject::connect( 
-            plot, SIGNAL( legendDataChanged(
-                const QVariant &, const QList<QwtLegendData> & ) ),
-            plot, SLOT( updateLegendItems( 
-                const QVariant &, const QList<QwtLegendData> & ) ) );
-    }
-    else
-    {
-        QObject::disconnect( 
-            plot, SIGNAL( legendDataChanged(
-                const QVariant &, const QList<QwtLegendData> & ) ),
-            plot, SLOT( updateLegendItems( 
-                const QVariant &, const QList<QwtLegendData> & ) ) );
-    }
-}
-
-static void qwtSetTabOrder( 
-    QWidget *first, QWidget *second, bool withChildren )
-{
-    QList<QWidget *> tabChain;
-    tabChain += first;
-    tabChain += second;
-
-    if ( withChildren )
-    {
-        QList<QWidget *> children = second->findChildren<QWidget *>();
-
-        QWidget *w = second->nextInFocusChain();
-        while ( children.contains( w ) )
-        {
-            children.removeAll( w );
-
-            tabChain += w;
-            w = w->nextInFocusChain();
-        }
-    }
-
-    for ( int i = 0; i < tabChain.size() - 1; i++ )
-    {
-        QWidget *from = tabChain[i];
-        QWidget *to = tabChain[i+1];
-
-        const Qt::FocusPolicy policy1 = from->focusPolicy();
-        const Qt::FocusPolicy policy2 = to->focusPolicy();
-
-        QWidget *proxy1 = from->focusProxy();
-        QWidget *proxy2 = to->focusProxy();
-
-        from->setFocusPolicy( Qt::TabFocus );
-        from->setFocusProxy( NULL);
-
-        to->setFocusPolicy( Qt::TabFocus );
-        to->setFocusProxy( NULL);
-
-        QWidget::setTabOrder( from, to );
-
-        from->setFocusPolicy( policy1 );
-        from->setFocusProxy( proxy1);
-
-        to->setFocusPolicy( policy2 );
-        to->setFocusProxy( proxy2 );
-    }
-}
-
-class QwtPlot::PrivateData
-{
-public:
-    QPointer<QwtTextLabel> titleLabel;
-    QPointer<QwtTextLabel> footerLabel;
-    QPointer<QWidget> canvas;
-    QPointer<QwtAbstractLegend> legend;
-    QwtPlotLayout *layout;
-
-    bool autoReplot;
-};
-
-/*!
-  \brief Constructor
-  \param parent Parent widget
- */
-QwtPlot::QwtPlot( QWidget *parent ):
-    QFrame( parent )
-{
-    initPlot( QwtText() );
-}
-
-/*!
-  \brief Constructor
-  \param title Title text
-  \param parent Parent widget
- */
-QwtPlot::QwtPlot( const QwtText &title, QWidget *parent ):
-    QFrame( parent )
-{
-    initPlot( title );
-}
-
-//! Destructor
-QwtPlot::~QwtPlot()
-{
-    setAutoReplot( false );
-    detachItems( QwtPlotItem::Rtti_PlotItem, autoDelete() );
-
-    delete d_data->layout;
-    deleteAxesData();
-    delete d_data;
-}
-
-/*!
-  \brief Initializes a QwtPlot instance
-  \param title Title text
- */
-void QwtPlot::initPlot( const QwtText &title )
-{
-    d_data = new PrivateData;
-
-    d_data->layout = new QwtPlotLayout;
-    d_data->autoReplot = false;
-
-    // title
-    d_data->titleLabel = new QwtTextLabel( this );
-    d_data->titleLabel->setObjectName( "QwtPlotTitle" );
-    d_data->titleLabel->setFont( QFont( fontInfo().family(), 14, QFont::Bold ) );
-
-    QwtText text( title );
-    text.setRenderFlags( Qt::AlignCenter | Qt::TextWordWrap );
-    d_data->titleLabel->setText( text );
-
-    // footer
-    d_data->footerLabel = new QwtTextLabel( this );
-    d_data->footerLabel->setObjectName( "QwtPlotFooter" );
-
-    QwtText footer;
-    footer.setRenderFlags( Qt::AlignCenter | Qt::TextWordWrap );
-    d_data->footerLabel->setText( footer );
-
-    // legend
-    d_data->legend = NULL;
-
-    // axis
-    initAxesData();
-
-    // canvas
-    d_data->canvas = new QwtPlotCanvas( this );
-    d_data->canvas->setObjectName( "QwtPlotCanvas" );
-    d_data->canvas->installEventFilter( this );
-
-    setSizePolicy( QSizePolicy::MinimumExpanding,
-        QSizePolicy::MinimumExpanding );
-
-    resize( 200, 200 );
-
-    QList<QWidget *> focusChain;
-    focusChain << this << d_data->titleLabel << axisWidget( xTop )
-        << axisWidget( yLeft ) << d_data->canvas << axisWidget( yRight )
-        << axisWidget( xBottom ) << d_data->footerLabel;
-
-    for ( int i = 0; i < focusChain.size() - 1; i++ )
-        qwtSetTabOrder( focusChain[i], focusChain[i+1], false );
-
-    qwtEnableLegendItems( this, true );
-}
-
-/*!
-  \brief Set the drawing canvas of the plot widget
-
-  QwtPlot invokes methods of the canvas as meta methods ( see QMetaObject ).
-  In opposite to using conventional C++ techniques like virtual methods
-  they allow to use canvas implementations that are derived from 
-  QWidget or QGLWidget.
-
-  The following meta methods could be implemented:
-
-  - replot()
-    When the canvas doesn't offer a replot method, QwtPlot calls
-    update() instead.
-
-  - borderPath()
-    The border path is necessary to clip the content of the canvas
-    When the canvas doesn't have any special border ( f.e rounded corners )
-    it is o.k. not to implement this method.
-
-  The default canvas is a QwtPlotCanvas 
-
-  \param canvas Canvas Widget
-  \sa canvas()
- */
-void QwtPlot::setCanvas( QWidget *canvas )
-{
-    if ( canvas == d_data->canvas )
-        return;
-
-    delete d_data->canvas;
-    d_data->canvas = canvas;
-
-    if ( canvas )
-    {
-        canvas->setParent( this );
-        canvas->installEventFilter( this );
-
-        if ( isVisible() )
-            canvas->show();
-    }
-}
-
-/*!
-  \brief Adds handling of layout requests
-  \param event Event
-
-  \return See QFrame::event()
-*/
-bool QwtPlot::event( QEvent *event )
-{
-    bool ok = QFrame::event( event );
-    switch ( event->type() )
-    {
-        case QEvent::LayoutRequest:
-            updateLayout();
-            break;
-        case QEvent::PolishRequest:
-            replot();
-            break;
-        default:;
-    }
-    return ok;
-}
-
-/*!
-  \brief Event filter
-
-  The plot handles the following events for the canvas:
-
-  - QEvent::Resize
-    The canvas margins might depend on its size
-
-  - QEvent::ContentsRectChange
-    The layout needs to be recalculated
-
-  \param object Object to be filtered
-  \param event Event
-
-  \return See QFrame::eventFilter()
-
-  \sa updateCanvasMargins(), updateLayout()
-*/
-bool QwtPlot::eventFilter( QObject *object, QEvent *event )
-{
-    if ( object == d_data->canvas )
-    {
-        if ( event->type() == QEvent::Resize )
-        {
-            updateCanvasMargins();
-        }
-        else if ( event->type() == QEvent::ContentsRectChange )
-        {
-            updateLayout();
-        }
-    }
-
-    return QFrame::eventFilter( object, event );
-}
-
-//! Replots the plot if autoReplot() is \c true.
-void QwtPlot::autoRefresh()
-{
-    if ( d_data->autoReplot )
-        replot();
-}
-
-/*!
-  \brief Set or reset the autoReplot option
-
-  If the autoReplot option is set, the plot will be
-  updated implicitly by manipulating member functions.
-  Since this may be time-consuming, it is recommended
-  to leave this option switched off and call replot()
-  explicitly if necessary.
-
-  The autoReplot option is set to false by default, which
-  means that the user has to call replot() in order to make
-  changes visible.
-  \param tf \c true or \c false. Defaults to \c true.
-  \sa replot()
-*/
-void QwtPlot::setAutoReplot( bool tf )
-{
-    d_data->autoReplot = tf;
-}
-
-/*! 
-  \return true if the autoReplot option is set.
-  \sa setAutoReplot()
-*/
-bool QwtPlot::autoReplot() const
-{
-    return d_data->autoReplot;
-}
-
-/*!
-  Change the plot's title
-  \param title New title
-*/
-void QwtPlot::setTitle( const QString &title )
-{
-    if ( title != d_data->titleLabel->text().text() )
-    {
-        d_data->titleLabel->setText( title );
-        updateLayout();
-    }
-}
-
-/*!
-  Change the plot's title
-  \param title New title
-*/
-void QwtPlot::setTitle( const QwtText &title )
-{
-    if ( title != d_data->titleLabel->text() )
-    {
-        d_data->titleLabel->setText( title );
-        updateLayout();
-    }
-}
-
-//! \return Title of the plot
-QwtText QwtPlot::title() const
-{
-    return d_data->titleLabel->text();
-}
-
-//! \return Title label widget.
-QwtTextLabel *QwtPlot::titleLabel()
-{
-    return d_data->titleLabel;
-}
-
-//! \return Title label widget.
-const QwtTextLabel *QwtPlot::titleLabel() const
-{
-    return d_data->titleLabel;
-}
-
-/*!
-  Change the text the footer 
-  \param text New text of the footer
-*/
-void QwtPlot::setFooter( const QString &text )
-{
-    if ( text != d_data->footerLabel->text().text() )
-    {
-        d_data->footerLabel->setText( text );
-        updateLayout();
-    }
-}
-
-/*!
-  Change the text the footer 
-  \param text New text of the footer
-*/
-void QwtPlot::setFooter( const QwtText &text )
-{
-    if ( text != d_data->footerLabel->text() )
-    {
-        d_data->footerLabel->setText( text );
-        updateLayout();
-    }
-}
-
-//! \return Text of the footer
-QwtText QwtPlot::footer() const
-{
-    return d_data->footerLabel->text();
-}
-
-//! \return Footer label widget.
-QwtTextLabel *QwtPlot::footerLabel()
-{
-    return d_data->footerLabel;
-}
-
-//! \return Footer label widget.
-const QwtTextLabel *QwtPlot::footerLabel() const
-{
-    return d_data->footerLabel;
-}
-
-/*!
-   \brief Assign a new plot layout
-
-   \param layout Layout()
-   \sa plotLayout()
- */
-void QwtPlot::setPlotLayout( QwtPlotLayout *layout )
-{
-    if ( layout != d_data->layout )
-    {
-        delete d_data->layout;
-        d_data->layout = layout;
-
-        updateLayout();
-    }
-}
-
-//! \return the plot's layout
-QwtPlotLayout *QwtPlot::plotLayout()
-{
-    return d_data->layout;
-}
-
-//! \return the plot's layout
-const QwtPlotLayout *QwtPlot::plotLayout() const
-{
-    return d_data->layout;
-}
-
-/*!
-  \return the plot's legend
-  \sa insertLegend()
-*/
-QwtAbstractLegend *QwtPlot::legend()
-{
-    return d_data->legend;
-}
-
-/*!
-  \return the plot's legend
-  \sa insertLegend()
-*/
-const QwtAbstractLegend *QwtPlot::legend() const
-{
-    return d_data->legend;
-}
-
-
-/*!
-  \return the plot's canvas
-*/
-QWidget *QwtPlot::canvas()
-{
-    return d_data->canvas;
-}
-
-/*!
-  \return the plot's canvas
-*/
-const QWidget *QwtPlot::canvas() const
-{
-    return d_data->canvas;
-}
-
-/*!
-  \return Size hint for the plot widget
-  \sa minimumSizeHint()
-*/
-QSize QwtPlot::sizeHint() const
-{
-    int dw = 0;
-    int dh = 0;
-    for ( int axisId = 0; axisId < axisCnt; axisId++ )
-    {
-        if ( axisEnabled( axisId ) )
-        {
-            const int niceDist = 40;
-            const QwtScaleWidget *scaleWidget = axisWidget( axisId );
-            const QwtScaleDiv &scaleDiv = scaleWidget->scaleDraw()->scaleDiv();
-            const int majCnt = scaleDiv.ticks( QwtScaleDiv::MajorTick ).count();
-
-            if ( axisId == yLeft || axisId == yRight )
-            {
-                int hDiff = ( majCnt - 1 ) * niceDist
-                    - scaleWidget->minimumSizeHint().height();
-                if ( hDiff > dh )
-                    dh = hDiff;
-            }
-            else
-            {
-                int wDiff = ( majCnt - 1 ) * niceDist
-                    - scaleWidget->minimumSizeHint().width();
-                if ( wDiff > dw )
-                    dw = wDiff;
-            }
-        }
-    }
-    return minimumSizeHint() + QSize( dw, dh );
-}
-
-/*!
-  \brief Return a minimum size hint
-*/
-QSize QwtPlot::minimumSizeHint() const
-{
-    QSize hint = d_data->layout->minimumSizeHint( this );
-    hint += QSize( 2 * frameWidth(), 2 * frameWidth() );
-
-    return hint;
-}
-
-/*!
-  Resize and update internal layout
-  \param e Resize event
-*/
-void QwtPlot::resizeEvent( QResizeEvent *e )
-{
-    QFrame::resizeEvent( e );
-    updateLayout();
-}
-
-/*!
-  \brief Redraw the plot
-
-  If the autoReplot option is not set (which is the default)
-  or if any curves are attached to raw data, the plot has to
-  be refreshed explicitly in order to make changes visible.
-
-  \sa updateAxes(), setAutoReplot()
-*/
-void QwtPlot::replot()
-{
-    bool doAutoReplot = autoReplot();
-    setAutoReplot( false );
-
-    updateAxes();
-
-    /*
-      Maybe the layout needs to be updated, because of changed
-      axes labels. We need to process them here before painting
-      to avoid that scales and canvas get out of sync.
-     */
-    QApplication::sendPostedEvents( this, QEvent::LayoutRequest );
-
-    if ( d_data->canvas )
-    {
-        const bool ok = QMetaObject::invokeMethod( 
-            d_data->canvas, "replot", Qt::DirectConnection );
-        if ( !ok )
-        {
-            // fallback, when canvas has no a replot method
-            d_data->canvas->update( d_data->canvas->contentsRect() );
-        }
-    }
-
-    setAutoReplot( doAutoReplot );
-}
-
-/*!
-  \brief Adjust plot content to its current size.
-  \sa resizeEvent()
-*/
-void QwtPlot::updateLayout()
-{
-    d_data->layout->activate( this, contentsRect() );
-
-    QRect titleRect = d_data->layout->titleRect().toRect();
-    QRect footerRect = d_data->layout->footerRect().toRect();
-    QRect scaleRect[QwtPlot::axisCnt];
-    for ( int axisId = 0; axisId < axisCnt; axisId++ )
-        scaleRect[axisId] = d_data->layout->scaleRect( axisId ).toRect();
-    QRect legendRect = d_data->layout->legendRect().toRect();
-    QRect canvasRect = d_data->layout->canvasRect().toRect();
-
-    // resize and show the visible widgets
-
-    if ( !d_data->titleLabel->text().isEmpty() )
-    {
-        d_data->titleLabel->setGeometry( titleRect );
-        if ( !d_data->titleLabel->isVisibleTo( this ) )
-            d_data->titleLabel->show();
-    }
-    else
-        d_data->titleLabel->hide();
-
-    if ( !d_data->footerLabel->text().isEmpty() )
-    {
-        d_data->footerLabel->setGeometry( footerRect );
-        if ( !d_data->footerLabel->isVisibleTo( this ) )
-            d_data->footerLabel->show();
-    }
-    else
-        d_data->footerLabel->hide();
-
-    for ( int axisId = 0; axisId < axisCnt; axisId++ )
-    {
-        if ( axisEnabled( axisId ) )
-        {
-            axisWidget( axisId )->setGeometry( scaleRect[axisId] );
-
-#if 1
-            if ( axisId == xBottom || axisId == xTop )
-            {
-                // do we need this code any longer ???
-
-                QRegion r( scaleRect[axisId] );
-                if ( axisEnabled( yLeft ) )
-                    r = r.subtracted( QRegion( scaleRect[yLeft] ) );
-                if ( axisEnabled( yRight ) )
-                    r = r.subtracted( QRegion( scaleRect[yRight] ) );
-                r.translate( -scaleRect[ axisId ].x(),
-                    -scaleRect[axisId].y() );
-
-                axisWidget( axisId )->setMask( r );
-            }
-#endif
-            if ( !axisWidget( axisId )->isVisibleTo( this ) )
-                axisWidget( axisId )->show();
-        }
-        else
-            axisWidget( axisId )->hide();
-    }
-
-    if ( d_data->legend )
-    {
-        if ( d_data->legend->isEmpty() )
-        {
-            d_data->legend->hide();
-        }
-        else
-        {
-            d_data->legend->setGeometry( legendRect );
-            d_data->legend->show();
-        }
-    }
-
-    d_data->canvas->setGeometry( canvasRect );
-}
-
-/*!
-  \brief Calculate the canvas margins
-
-  \param maps QwtPlot::axisCnt maps, mapping between plot and paint device coordinates
-  \param canvasRect Bounding rectangle where to paint
-  \param left Return parameter for the left margin
-  \param top Return parameter for the top margin
-  \param right Return parameter for the right margin
-  \param bottom Return parameter for the bottom margin
-
-  Plot items might indicate, that they need some extra space
-  at the borders of the canvas by the QwtPlotItem::Margins flag.
-
-  updateCanvasMargins(), QwtPlotItem::getCanvasMarginHint()
- */
-void QwtPlot::getCanvasMarginsHint(
-    const QwtScaleMap maps[], const QRectF &canvasRect,
-    double &left, double &top, double &right, double &bottom) const
-{
-    left = top = right = bottom = -1.0;
-
-    const QwtPlotItemList& itmList = itemList();
-    for ( QwtPlotItemIterator it = itmList.begin();
-        it != itmList.end(); ++it )
-    {
-        const QwtPlotItem *item = *it;
-        if ( item->testItemAttribute( QwtPlotItem::Margins ) )
-        {
-            double m[ QwtPlot::axisCnt ];
-            item->getCanvasMarginHint(
-                maps[ item->xAxis() ], maps[ item->yAxis() ],
-                canvasRect, m[yLeft], m[xTop], m[yRight], m[xBottom] );
-
-            left = qMax( left, m[yLeft] );
-            top = qMax( top, m[xTop] );
-            right = qMax( right, m[yRight] );
-            bottom = qMax( bottom, m[xBottom] );
-        }
-    }
-}
-
-/*!
-  \brief Update the canvas margins
-
-  Plot items might indicate, that they need some extra space
-  at the borders of the canvas by the QwtPlotItem::Margins flag.
-
-  getCanvasMarginsHint(), QwtPlotItem::getCanvasMarginHint()
- */
-void QwtPlot::updateCanvasMargins()
-{
-    QwtScaleMap maps[axisCnt];
-    for ( int axisId = 0; axisId < axisCnt; axisId++ )
-        maps[axisId] = canvasMap( axisId );
-
-    double margins[axisCnt];
-    getCanvasMarginsHint( maps, canvas()->contentsRect(),
-        margins[yLeft], margins[xTop], margins[yRight], margins[xBottom] );
-    
-    bool doUpdate = false;
-    for ( int axisId = 0; axisId < axisCnt; axisId++ )
-    {
-        if ( margins[axisId] >= 0.0 )
-        {
-            const int m = qCeil( margins[axisId] );
-            plotLayout()->setCanvasMargin( m, axisId);
-            doUpdate = true;
-        }
-    }
-
-    if ( doUpdate )
-        updateLayout();
-}
-
-/*!
-  Redraw the canvas.
-  \param painter Painter used for drawing
-
-  \warning drawCanvas calls drawItems what is also used
-           for printing. Applications that like to add individual
-           plot items better overload drawItems()
-  \sa drawItems()
-*/
-void QwtPlot::drawCanvas( QPainter *painter )
-{
-    QwtScaleMap maps[axisCnt];
-    for ( int axisId = 0; axisId < axisCnt; axisId++ )
-        maps[axisId] = canvasMap( axisId );
-
-    drawItems( painter, d_data->canvas->contentsRect(), maps );
-}
-
-/*!
-  Redraw the canvas items.
-
-  \param painter Painter used for drawing
-  \param canvasRect Bounding rectangle where to paint
-  \param maps QwtPlot::axisCnt maps, mapping between plot and paint device coordinates
-
-  \note Usually canvasRect is contentsRect() of the plot canvas.
-        Due to a bug in Qt this rectangle might be wrong for certain 
-        frame styles ( f.e QFrame::Box ) and it might be necessary to 
-        fix the margins manually using QWidget::setContentsMargins()
-*/
-
-void QwtPlot::drawItems( QPainter *painter, const QRectF &canvasRect,
-        const QwtScaleMap maps[axisCnt] ) const
-{
-    const QwtPlotItemList& itmList = itemList();
-    for ( QwtPlotItemIterator it = itmList.begin();
-        it != itmList.end(); ++it )
-    {
-        QwtPlotItem *item = *it;
-        if ( item && item->isVisible() )
-        {
-            painter->save();
-
-            painter->setRenderHint( QPainter::Antialiasing,
-                item->testRenderHint( QwtPlotItem::RenderAntialiased ) );
-            painter->setRenderHint( QPainter::HighQualityAntialiasing,
-                item->testRenderHint( QwtPlotItem::RenderAntialiased ) );
-
-            item->draw( painter,
-                maps[item->xAxis()], maps[item->yAxis()],
-                canvasRect );
-
-            painter->restore();
-        }
-    }
-}
-
-/*!
-  \param axisId Axis
-  \return Map for the axis on the canvas. With this map pixel coordinates can
-          translated to plot coordinates and vice versa.
-  \sa QwtScaleMap, transform(), invTransform()
-
-*/
-QwtScaleMap QwtPlot::canvasMap( int axisId ) const
-{
-    QwtScaleMap map;
-    if ( !d_data->canvas )
-        return map;
-
-    map.setTransformation( axisScaleEngine( axisId )->transformation() );
-
-    const QwtScaleDiv &sd = axisScaleDiv( axisId );
-    map.setScaleInterval( sd.lowerBound(), sd.upperBound() );
-
-    if ( axisEnabled( axisId ) )
-    {
-        const QwtScaleWidget *s = axisWidget( axisId );
-        if ( axisId == yLeft || axisId == yRight )
-        {
-            double y = s->y() + s->startBorderDist() - d_data->canvas->y();
-            double h = s->height() - s->startBorderDist() - s->endBorderDist();
-            map.setPaintInterval( y + h, y );
-        }
-        else
-        {
-            double x = s->x() + s->startBorderDist() - d_data->canvas->x();
-            double w = s->width() - s->startBorderDist() - s->endBorderDist();
-            map.setPaintInterval( x, x + w );
-        }
-    }
-    else
-    {
-        const QRect &canvasRect = d_data->canvas->contentsRect();
-        if ( axisId == yLeft || axisId == yRight )
-        {
-            int top = 0;
-            if ( !plotLayout()->alignCanvasToScale( xTop ) )
-                top = plotLayout()->canvasMargin( xTop );
-
-            int bottom = 0;
-            if ( !plotLayout()->alignCanvasToScale( xBottom ) )
-                bottom = plotLayout()->canvasMargin( xBottom );
-
-            map.setPaintInterval( canvasRect.bottom() - bottom,
-                canvasRect.top() + top );
-        }
-        else
-        {
-            int left = 0;
-            if ( !plotLayout()->alignCanvasToScale( yLeft ) )
-                left = plotLayout()->canvasMargin( yLeft );
-
-            int right = 0;
-            if ( !plotLayout()->alignCanvasToScale( yRight ) )
-                right = plotLayout()->canvasMargin( yRight );
-
-            map.setPaintInterval( canvasRect.left() + left,
-                canvasRect.right() - right );
-        }
-    }
-
-    return map;
-}
-
-/*!
-  \brief Change the background of the plotting area
-
-  Sets brush to QPalette::Window of all color groups of
-  the palette of the canvas. Using canvas()->setPalette()
-  is a more powerful way to set these colors.
-
-  \param brush New background brush
-  \sa canvasBackground()
-*/
-void QwtPlot::setCanvasBackground( const QBrush &brush )
-{
-    QPalette pal = d_data->canvas->palette();
-    pal.setBrush( QPalette::Window, brush );
-
-    canvas()->setPalette( pal );
-}
-
-/*!
-  Nothing else than: canvas()->palette().brush(
-        QPalette::Normal, QPalette::Window);
-
-  \return Background brush of the plotting area.
-  \sa setCanvasBackground()
-*/
-QBrush QwtPlot::canvasBackground() const
-{
-    return canvas()->palette().brush(
-        QPalette::Normal, QPalette::Window );
-}
-
-/*!
-  \return \c true if the specified axis exists, otherwise \c false
-  \param axisId axis index
- */
-bool QwtPlot::axisValid( int axisId )
-{
-    return ( ( axisId >= QwtPlot::yLeft ) && ( axisId < QwtPlot::axisCnt ) );
-}
-
-/*!
-  \brief Insert a legend
-
-  If the position legend is \c QwtPlot::LeftLegend or \c QwtPlot::RightLegend
-  the legend will be organized in one column from top to down.
-  Otherwise the legend items will be placed in a table
-  with a best fit number of columns from left to right.
-
-  insertLegend() will set the plot widget as parent for the legend.
-  The legend will be deleted in the destructor of the plot or when 
-  another legend is inserted.
-
-  Legends, that are not inserted into the layout of the plot widget
-  need to connect to the legendDataChanged() signal. Calling updateLegend()
-  initiates this signal for an initial update. When the application code
-  wants to implement its own layout this also needs to be done for
-  rendering plots to a document ( see QwtPlotRenderer ).
-
-  \param legend Legend
-  \param pos The legend's position. For top/left position the number
-             of columns will be limited to 1, otherwise it will be set to
-             unlimited.
-
-  \param ratio Ratio between legend and the bounding rectangle
-               of title, canvas and axes. The legend will be shrunk
-               if it would need more space than the given ratio.
-               The ratio is limited to ]0.0 .. 1.0]. In case of <= 0.0
-               it will be reset to the default ratio.
-               The default vertical/horizontal ratio is 0.33/0.5.
-
-  \sa legend(), QwtPlotLayout::legendPosition(),
-      QwtPlotLayout::setLegendPosition()
-*/
-void QwtPlot::insertLegend( QwtAbstractLegend *legend,
-    QwtPlot::LegendPosition pos, double ratio )
-{
-    d_data->layout->setLegendPosition( pos, ratio );
-
-    if ( legend != d_data->legend )
-    {
-        if ( d_data->legend && d_data->legend->parent() == this )
-            delete d_data->legend;
-
-        d_data->legend = legend;
-
-        if ( d_data->legend )
-        {
-            connect( this, 
-                SIGNAL( legendDataChanged( 
-                    const QVariant &, const QList<QwtLegendData> & ) ),
-                d_data->legend, 
-                SLOT( updateLegend( 
-                    const QVariant &, const QList<QwtLegendData> & ) ) 
-            );
-
-            if ( d_data->legend->parent() != this )
-                d_data->legend->setParent( this );
-
-            qwtEnableLegendItems( this, false );
-            updateLegend();
-            qwtEnableLegendItems( this, true );
-
-            QwtLegend *lgd = qobject_cast<QwtLegend *>( legend );
-            if ( lgd )
-            {
-                switch ( d_data->layout->legendPosition() )
-                {
-                    case LeftLegend:
-                    case RightLegend:
-                    {
-                        if ( lgd->maxColumns() == 0     )
-                            lgd->setMaxColumns( 1 ); // 1 column: align vertical
-                        break;
-                    }
-                    case TopLegend:
-                    case BottomLegend:
-                    {
-                        lgd->setMaxColumns( 0 ); // unlimited
-                        break;
-                    }
-                    default:
-                        break;
-                }
-            }
-
-            QWidget *previousInChain = NULL;
-            switch ( d_data->layout->legendPosition() )
-            {
-                case LeftLegend:
-                {
-                    previousInChain = axisWidget( QwtPlot::xTop );
-                    break;
-                }
-                case TopLegend:
-                {
-                    previousInChain = this;
-                    break;
-                }
-                case RightLegend:
-                {
-                    previousInChain = axisWidget( QwtPlot::yRight );
-                    break;
-                }
-                case BottomLegend:
-                {
-                    previousInChain = footerLabel();
-                    break;
-                }
-            }
-
-            if ( previousInChain )
-                qwtSetTabOrder( previousInChain, legend, true );
-        }
-    }
-
-    updateLayout();
-}
-
-/*!
-  Emit legendDataChanged() for all plot item
-
-  \sa QwtPlotItem::legendData(), legendDataChanged()
- */
-void QwtPlot::updateLegend()
-{
-    const QwtPlotItemList& itmList = itemList();
-    for ( QwtPlotItemIterator it = itmList.begin();
-        it != itmList.end(); ++it )
-    {
-        updateLegend( *it );
-    }
-}
-
-/*!
-  Emit legendDataChanged() for a plot item
-
-  \param plotItem Plot item
-  \sa QwtPlotItem::legendData(), legendDataChanged()
- */
-void QwtPlot::updateLegend( const QwtPlotItem *plotItem )
-{
-    if ( plotItem == NULL )
-        return;
-
-    QList<QwtLegendData> legendData;
-
-    if ( plotItem->testItemAttribute( QwtPlotItem::Legend ) )
-        legendData = plotItem->legendData();
-
-    const QVariant itemInfo = itemToInfo( const_cast< QwtPlotItem *>( plotItem) );
-    Q_EMIT legendDataChanged( itemInfo, legendData );
-}
-
-/*!
-  \brief Update all plot items interested in legend attributes
-
-  Call QwtPlotItem::updateLegend(), when the QwtPlotItem::LegendInterest
-  flag is set.
-
-  \param itemInfo Info about the plot item
-  \param legendData Entries to be displayed for the plot item ( usually 1 )
-
-  \sa QwtPlotItem::LegendInterest,
-      QwtPlotLegendItem, QwtPlotItem::updateLegend()
- */
-void QwtPlot::updateLegendItems( const QVariant &itemInfo,
-    const QList<QwtLegendData> &legendData )
-{
-    QwtPlotItem *plotItem = infoToItem( itemInfo );
-    if ( plotItem )
-    {
-        const QwtPlotItemList& itmList = itemList();
-        for ( QwtPlotItemIterator it = itmList.begin();
-            it != itmList.end(); ++it )
-        {
-            QwtPlotItem *item = *it;
-            if ( item->testItemInterest( QwtPlotItem::LegendInterest ) )
-                item->updateLegend( plotItem, legendData );
-        }
-    }
-}
-
-/*!
-  \brief Attach/Detach a plot item 
-
-  \param plotItem Plot item
-  \param on When true attach the item, otherwise detach it
- */
-void QwtPlot::attachItem( QwtPlotItem *plotItem, bool on )
-{
-    if ( plotItem->testItemInterest( QwtPlotItem::LegendInterest ) )
-    {
-        // plotItem is some sort of legend
-
-        const QwtPlotItemList& itmList = itemList();
-        for ( QwtPlotItemIterator it = itmList.begin();
-            it != itmList.end(); ++it )
-        {
-            QwtPlotItem *item = *it;
-
-            QList<QwtLegendData> legendData;
-            if ( on && item->testItemAttribute( QwtPlotItem::Legend ) )
-            {
-                legendData = item->legendData();
-                plotItem->updateLegend( item, legendData );
-            }
-        }
-    }
-
-    if ( on )
-        insertItem( plotItem );
-    else 
-        removeItem( plotItem );
-
-    Q_EMIT itemAttached( plotItem, on );
-
-    if ( plotItem->testItemAttribute( QwtPlotItem::Legend ) )
-    {
-        // the item wants to be represented on the legend
-
-        if ( on )
-        {
-            updateLegend( plotItem );
-        }
-        else
-        {
-            const QVariant itemInfo = itemToInfo( plotItem );
-            Q_EMIT legendDataChanged( itemInfo, QList<QwtLegendData>() );
-        }
-    }
-
-    autoRefresh();
-}
-
-/*!
-  \brief Build an information, that can be used to identify
-         a plot item on the legend.
-
-  The default implementation simply wraps the plot item
-  into a QVariant object. When overloading itemToInfo()
-  usually infoToItem() needs to reimplemeted too.
-
-\code
-    QVariant itemInfo;
-    qVariantSetValue( itemInfo, plotItem );
-\endcode
-
-  \param plotItem Plot item
-  \return Plot item embedded in a QVariant
-  \sa infoToItem()
- */
-QVariant QwtPlot::itemToInfo( QwtPlotItem *plotItem ) const
-{
-    QVariant itemInfo;
-    qVariantSetValue( itemInfo, plotItem );
-
-    return itemInfo;
-}
-
-/*!
-  \brief Identify the plot item according to an item info object,
-         that has bee generated from itemToInfo().
-
-  The default implementation simply tries to unwrap a QwtPlotItem 
-  pointer:
-
-\code
-    if ( itemInfo.canConvert<QwtPlotItem *>() )
-        return qvariant_cast<QwtPlotItem *>( itemInfo );
-\endcode
-  \param itemInfo Plot item
-  \return A plot item, when successful, otherwise a NULL pointer.
-  \sa itemToInfo()
-*/
-QwtPlotItem *QwtPlot::infoToItem( const QVariant &itemInfo ) const
-{
-    if ( itemInfo.canConvert<QwtPlotItem *>() )
-        return qvariant_cast<QwtPlotItem *>( itemInfo );
-
-    return NULL;
-}
-
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot.h
deleted file mode 100644
index a5d24efd9d8dba2b886644b1affc7b193148ce98..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot.h
+++ /dev/null
@@ -1,312 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_H
-#define QWT_PLOT_H
-
-#include "qwt_global.h"
-#include "qwt_text.h"
-#include "qwt_plot_dict.h"
-#include "qwt_scale_map.h"
-#include "qwt_interval.h"
-#include <qframe.h>
-#include <qlist.h>
-#include <qvariant.h>
-
-class QwtPlotLayout;
-class QwtAbstractLegend;
-class QwtScaleWidget;
-class QwtScaleEngine;
-class QwtScaleDiv;
-class QwtScaleDraw;
-class QwtTextLabel;
-
-/*!
-  \brief A 2-D plotting widget
-
-  QwtPlot is a widget for plotting two-dimensional graphs.
-  An unlimited number of plot items can be displayed on
-  its canvas. Plot items might be curves (QwtPlotCurve), markers
-  (QwtPlotMarker), the grid (QwtPlotGrid), or anything else derived
-  from QwtPlotItem.
-  A plot can have up to four axes, with each plot item attached to an x- and
-  a y axis. The scales at the axes can be explicitly set (QwtScaleDiv), or
-  are calculated from the plot items, using algorithms (QwtScaleEngine) which
-  can be configured separately for each axis.
-
-  The simpleplot example is a good starting point to see how to set up a 
-  plot widget.
-
-  \image html plot.png
-
-  \par Example
-  The following example shows (schematically) the most simple
-  way to use QwtPlot. By default, only the left and bottom axes are
-  visible and their scales are computed automatically.
-  \verbatim
-#include <qwt_plot.h>
-#include <qwt_plot_curve.h>
-
-QwtPlot *myPlot = new QwtPlot("Two Curves", parent);
-
-// add curves
-QwtPlotCurve *curve1 = new QwtPlotCurve("Curve 1");
-QwtPlotCurve *curve2 = new QwtPlotCurve("Curve 2");
-
-// connect or copy the data to the curves
-curve1->setData(...);
-curve2->setData(...);
-
-curve1->attach(myPlot);
-curve2->attach(myPlot);
-
-// finally, refresh the plot
-myPlot->replot();
-\endverbatim
-*/
-
-class QWT_EXPORT QwtPlot: public QFrame, public QwtPlotDict
-{
-    Q_OBJECT
-
-    Q_PROPERTY( QBrush canvasBackground 
-        READ canvasBackground WRITE setCanvasBackground )
-    Q_PROPERTY( bool autoReplot READ autoReplot WRITE setAutoReplot )
-
-#if 0
-    // This property is intended to configure the plot
-    // widget from a special dialog in the deigner plugin.
-    // Disabled until such a dialog has been implemented.
-
-    Q_PROPERTY( QString propertiesDocument
-        READ grabProperties WRITE applyProperties )
-#endif
-
-public:
-    //! \brief Axis index
-    enum Axis
-    {
-        //! Y axis left of the canvas
-        yLeft,
-
-        //! Y axis right of the canvas
-        yRight,
-
-        //! X axis below the canvas
-        xBottom,
-
-        //! X axis above the canvas
-        xTop,
-
-        //! Number of axes
-        axisCnt
-    };
-
-    /*!
-        Position of the legend, relative to the canvas.
-
-        \sa insertLegend()
-     */
-    enum LegendPosition
-    {
-        //! The legend will be left from the QwtPlot::yLeft axis.
-        LeftLegend,
-
-        //! The legend will be right from the QwtPlot::yRight axis.
-        RightLegend,
-
-        //! The legend will be below the footer 
-        BottomLegend,
-
-        //! The legend will be above the title
-        TopLegend
-    };
-
-    explicit QwtPlot( QWidget * = NULL );
-    explicit QwtPlot( const QwtText &title, QWidget * = NULL );
-
-    virtual ~QwtPlot();
-
-    void applyProperties( const QString & );
-    QString grabProperties() const;
-
-    void setAutoReplot( bool = true );
-    bool autoReplot() const;
-
-    // Layout
-
-    void setPlotLayout( QwtPlotLayout * );
-
-    QwtPlotLayout *plotLayout();
-    const QwtPlotLayout *plotLayout() const;
-
-    // Title
-
-    void setTitle( const QString & );
-    void setTitle( const QwtText &t );
-    QwtText title() const;
-
-    QwtTextLabel *titleLabel();
-    const QwtTextLabel *titleLabel() const;
-
-    // Footer
-
-    void setFooter( const QString & );
-    void setFooter( const QwtText &t );
-    QwtText footer() const;
-
-    QwtTextLabel *footerLabel();
-    const QwtTextLabel *footerLabel() const;
-
-    // Canvas
-
-    void setCanvas( QWidget * );
-
-    QWidget *canvas();
-    const QWidget *canvas() const;
-
-    void setCanvasBackground( const QBrush & );
-    QBrush canvasBackground() const;
-
-    virtual QwtScaleMap canvasMap( int axisId ) const;
-
-    double invTransform( int axisId, int pos ) const;
-    double transform( int axisId, double value ) const;
-
-    // Axes
-
-    QwtScaleEngine *axisScaleEngine( int axisId );
-    const QwtScaleEngine *axisScaleEngine( int axisId ) const;
-    void setAxisScaleEngine( int axisId, QwtScaleEngine * );
-
-    void setAxisAutoScale( int axisId, bool on = true );
-    bool axisAutoScale( int axisId ) const;
-
-    void enableAxis( int axisId, bool tf = true );
-    bool axisEnabled( int axisId ) const;
-
-    void setAxisFont( int axisId, const QFont &f );
-    QFont axisFont( int axisId ) const;
-
-    void setAxisScale( int axisId, double min, double max, double step = 0 );
-    void setAxisScaleDiv( int axisId, const QwtScaleDiv & );
-    void setAxisScaleDraw( int axisId, QwtScaleDraw * );
-
-    double axisStepSize( int axisId ) const;
-    QwtInterval axisInterval( int axisId ) const;
-
-    const QwtScaleDiv &axisScaleDiv( int axisId ) const;
-
-    const QwtScaleDraw *axisScaleDraw( int axisId ) const;
-    QwtScaleDraw *axisScaleDraw( int axisId );
-
-    const QwtScaleWidget *axisWidget( int axisId ) const;
-    QwtScaleWidget *axisWidget( int axisId );
-
-    void setAxisLabelAlignment( int axisId, Qt::Alignment );
-    void setAxisLabelRotation( int axisId, double rotation );
-
-    void setAxisTitle( int axisId, const QString & );
-    void setAxisTitle( int axisId, const QwtText & );
-    QwtText axisTitle( int axisId ) const;
-
-    void setAxisMaxMinor( int axisId, int maxMinor );
-    int axisMaxMinor( int axisId ) const;
-
-    void setAxisMaxMajor( int axisId, int maxMajor );
-    int axisMaxMajor( int axisId ) const;
-
-    // Legend
-
-    void insertLegend( QwtAbstractLegend *, 
-        LegendPosition = QwtPlot::RightLegend, double ratio = -1.0 );
-
-    QwtAbstractLegend *legend();
-    const QwtAbstractLegend *legend() const;
-
-    void updateLegend();
-    void updateLegend( const QwtPlotItem * );
-
-    // Misc
-
-    virtual QSize sizeHint() const;
-    virtual QSize minimumSizeHint() const;
-
-    virtual void updateLayout();
-    virtual void drawCanvas( QPainter * );
-
-    void updateAxes();
-    void updateCanvasMargins();
-
-    virtual void getCanvasMarginsHint( 
-        const QwtScaleMap maps[], const QRectF &canvasRect,
-        double &left, double &top, double &right, double &bottom) const;
-
-    virtual bool event( QEvent * );
-    virtual bool eventFilter( QObject *, QEvent * );
-
-    virtual void drawItems( QPainter *, const QRectF &,
-        const QwtScaleMap maps[axisCnt] ) const;
-
-    virtual QVariant itemToInfo( QwtPlotItem * ) const;
-    virtual QwtPlotItem *infoToItem( const QVariant & ) const;
-
-Q_SIGNALS:
-    /*!
-      A signal indicating, that an item has been attached/detached
-
-      \param plotItem Plot item
-      \param on Attached/Detached
-     */
-    void itemAttached( QwtPlotItem *plotItem, bool on );
-
-    /*!
-      A signal with the attributes how to update 
-      the legend entries for a plot item.
-
-      \param itemInfo Info about a plot item, build from itemToInfo()
-      \param data Attributes of the entries ( usually <= 1 ) for
-                  the plot item.
-
-      \sa itemToInfo(), infoToItem(), QwtAbstractLegend::updateLegend()
-     */
-    void legendDataChanged( const QVariant &itemInfo, 
-        const QList<QwtLegendData> &data );
-
-public Q_SLOTS:
-    virtual void replot();
-    void autoRefresh();
-
-protected:
-    static bool axisValid( int axisId );
-
-    virtual void resizeEvent( QResizeEvent *e );
-
-private Q_SLOTS:
-    void updateLegendItems( const QVariant &itemInfo,
-        const QList<QwtLegendData> &data );
-
-private:
-    friend class QwtPlotItem;
-    void attachItem( QwtPlotItem *, bool );
-
-    void initAxesData();
-    void deleteAxesData();
-    void updateScaleDiv();
-
-    void initPlot( const QwtText &title );
-
-    class AxisData;
-    AxisData *d_axisData[axisCnt];
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_abstract_barchart.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_abstract_barchart.cpp
deleted file mode 100644
index 3296fbada0622a19d5b176e87e18da92cb21a0ce..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_abstract_barchart.cpp
+++ /dev/null
@@ -1,368 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_abstract_barchart.h"
-#include "qwt_scale_map.h"
-
-static inline double qwtTransformWidth(
-    const QwtScaleMap &map, double value, double width )
-{
-    const double w2 = 0.5 * width;
-
-    const double v1 = map.transform( value - w2 );
-    const double v2 = map.transform( value + w2 );
-
-    return qAbs( v2 - v1 );
-}
-
-class QwtPlotAbstractBarChart::PrivateData
-{
-public:
-    PrivateData():
-        layoutPolicy( QwtPlotAbstractBarChart::AutoAdjustSamples ),
-        layoutHint( 0.5 ),
-        spacing( 10 ),
-        margin( 5 ),
-        baseline( 0.0 )
-    {
-    }
-
-    QwtPlotAbstractBarChart::LayoutPolicy layoutPolicy;
-    double layoutHint;
-    int spacing;
-    int margin;
-    double baseline;
-};
-
-/*!
-  Constructor
-  \param title Title of the chart
-*/
-QwtPlotAbstractBarChart::QwtPlotAbstractBarChart( const QwtText &title ):
-    QwtPlotSeriesItem( title )
-{
-    d_data = new PrivateData;
-
-    setItemAttribute( QwtPlotItem::Legend, true );
-    setItemAttribute( QwtPlotItem::AutoScale, true );
-    setItemAttribute( QwtPlotItem::Margins, true );
-    setZ( 19.0 );
-}
-
-//! Destructor
-QwtPlotAbstractBarChart::~QwtPlotAbstractBarChart()
-{
-    delete d_data;
-}
-
-/*!
-  The combination of layoutPolicy() and layoutHint() define how the width
-  of the bars is calculated
-
-  \param policy Layout policy
-
-  \sa layoutPolicy(), layoutHint()
- */
-void QwtPlotAbstractBarChart::setLayoutPolicy( LayoutPolicy policy )
-{
-    if ( policy != d_data->layoutPolicy )
-    {
-        d_data->layoutPolicy = policy;
-        itemChanged();
-    }
-}
-
-/*!
-  The combination of layoutPolicy() and layoutHint() define how the width
-  of the bars is calculated
-
-  \return Layout policy of the chart item
-  \sa setLayoutPolicy(), layoutHint()
- */
-QwtPlotAbstractBarChart::LayoutPolicy QwtPlotAbstractBarChart::layoutPolicy() const
-{
-    return d_data->layoutPolicy;
-}
-
-/*!
-  The combination of layoutPolicy() and layoutHint() define how the width
-  of the bars is calculated
-
-  \param hint Layout hint
-
-  \sa LayoutPolicy, layoutPolicy(), layoutHint()
- */
-void QwtPlotAbstractBarChart::setLayoutHint( double hint )
-{
-    hint = qMax( 0.0, hint );
-    if ( hint != d_data->layoutHint )
-    {
-        d_data->layoutHint = hint;
-        itemChanged();
-    }
-}
-
-/*!
-  The combination of layoutPolicy() and layoutHint() define how the width
-  of the bars is calculated
-
-  \return Layout policy of the chart item
-  \sa LayoutPolicy, setLayoutHint(), layoutPolicy()
-*/
-double QwtPlotAbstractBarChart::layoutHint() const
-{
-    return d_data->layoutHint;
-}
-
-/*!
-  \brief Set the spacing
-
-  The spacing is the distance between 2 samples ( bars for QwtPlotBarChart or
-  a group of bars for QwtPlotMultiBarChart ) in paint device coordinates.
-
-  \sa spacing()
- */
-void QwtPlotAbstractBarChart::setSpacing( int spacing )
-{
-    spacing = qMax( spacing, 0 );
-    if ( spacing != d_data->spacing )
-    {
-        d_data->spacing = spacing;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Spacing between 2 samples ( bars or groups of bars )
-  \sa setSpacing(), margin()
- */
-int QwtPlotAbstractBarChart::spacing() const
-{
-    return d_data->spacing;
-}
-/*!
-  \brief Set the margin
-
-  The margin is the distance between the outmost bars and the contentsRect()
-  of the canvas. The default setting is 5 pixels.
-
-  \param margin Margin
-
-  \sa spacing(), margin()
- */
-void QwtPlotAbstractBarChart::setMargin( int margin )
-{
-    margin = qMax( margin, 0 );
-    if ( margin != d_data->margin )
-    {
-        d_data->margin = margin;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Margin between the outmost bars and the contentsRect()
-  of the canvas.
-
-  \sa setMargin(), spacing()
- */
-int QwtPlotAbstractBarChart::margin() const
-{
-    return d_data->margin;
-}
-
-/*!
-   \brief Set the baseline
-
-   The baseline is the origin for the chart. Each bar is 
-   painted from the baseline in the direction of the sample 
-   value. In case of a horizontal orientation() the baseline
-   is interpreted as x - otherwise as y - value.
-
-   The default value for the baseline is 0.
-
-   \param value Value for the baseline
-
-   \sa baseline(), QwtPlotSeriesItem::orientation()
-*/
-void QwtPlotAbstractBarChart::setBaseline( double value )
-{
-    if ( value != d_data->baseline )
-    {
-        d_data->baseline = value;
-        itemChanged();
-    }
-}
-
-/*! 
-   \return Value for the origin of the bar chart
-   \sa setBaseline(), QwtPlotSeriesItem::orientation()
- */
-double QwtPlotAbstractBarChart::baseline() const
-{
-    return d_data->baseline;
-}
-
-/*!
-   Calculate the width for a sample in paint device coordinates
-
-   \param map Scale map for the corresponding scale
-   \param canvasSize Size of the canvas in paint device coordinates
-   \param boundingSize Bounding size of the chart in plot coordinates
-                       ( used in AutoAdjustSamples mode )
-   \param value Value of the sample
-
-   \return Sample width
-   \sa layoutPolicy(), layoutHint()
-*/
-double QwtPlotAbstractBarChart::sampleWidth( const QwtScaleMap &map,
-    double canvasSize, double boundingSize, double value ) const
-{
-    double width;
-
-    switch( d_data->layoutPolicy )
-    {
-        case ScaleSamplesToAxes:
-        {
-            width = qwtTransformWidth( map, value, d_data->layoutHint );
-            break;
-        }
-        case ScaleSampleToCanvas:
-        {
-            width = canvasSize * d_data->layoutHint;
-            break;
-        }
-        case FixedSampleSize:
-        {
-            width = d_data->layoutHint;
-            break;
-        }
-        case AutoAdjustSamples:
-        default:
-        {
-            const size_t numSamples = dataSize();
-
-            double w = 1.0;
-            if ( numSamples > 1 )
-            {
-                w = qAbs( boundingSize / ( numSamples - 1 ) );
-            }
-
-            width = qwtTransformWidth( map, value, w );
-            width -= d_data->spacing;
-            width = qMax( width, d_data->layoutHint );
-        }
-    }
-
-    return width;
-}
-
-/*!
-   \brief Calculate a hint for the canvas margin
-
-   Bar charts need to reserve some space for displaying the bars
-   for the first and the last sample.  The hint is calculated
-   from the layoutHint() depending on the layoutPolicy().
-
-   The margins are in target device coordinates ( pixels on screen )
-
-   \param xMap Maps x-values into pixel coordinates.
-   \param yMap Maps y-values into pixel coordinates.
-   \param canvasRect Contents rectangle of the canvas in painter coordinates
-   \param left Returns the left margin
-   \param top Returns the top margin
-   \param right Returns the right margin
-   \param bottom Returns the bottom margin
-
-   \return Margin
-
-   \sa layoutPolicy(), layoutHint(), QwtPlotItem::Margins
-       QwtPlot::getCanvasMarginsHint(), QwtPlot::updateCanvasMargins()
- */
-void QwtPlotAbstractBarChart::getCanvasMarginHint( const QwtScaleMap &xMap, 
-    const QwtScaleMap &yMap, const QRectF &canvasRect,
-    double &left, double &top, double &right, double &bottom ) const
-{
-    double hint = -1.0;
-
-    switch( layoutPolicy() )
-    {
-        case ScaleSampleToCanvas:
-        {
-            if ( orientation() == Qt::Vertical )
-                hint = 0.5 * canvasRect.width() * d_data->layoutHint;
-            else
-                hint = 0.5 * canvasRect.height() * d_data->layoutHint;
-
-            break;
-        }
-        case FixedSampleSize:
-        {
-            hint = 0.5 * d_data->layoutHint;
-            break;
-        }
-        case AutoAdjustSamples:
-        case ScaleSamplesToAxes:
-        default:
-        {
-            const size_t numSamples = dataSize();
-            if ( numSamples <= 0 )
-                break;
-
-            // doesn't work for nonlinear scales
-
-            const QRectF br = dataRect();
-            double spacing = 0.0;
-            double sampleWidthS = 1.0;
-
-            if ( layoutPolicy() == ScaleSamplesToAxes )
-            {
-                sampleWidthS = qMax( d_data->layoutHint, 0.0 );
-            }
-            else
-            {
-                spacing = d_data->spacing;
-
-                if ( numSamples > 1 )
-                {
-                    sampleWidthS = qAbs( br.width() / ( numSamples - 1 ) );
-                }
-            }
-
-            double ds, w;
-            if ( orientation() == Qt::Vertical )
-            {
-                ds = qAbs( xMap.sDist() );
-                w = canvasRect.width();
-            }
-            else
-            {
-                ds = qAbs( yMap.sDist() );
-                w = canvasRect.height();
-            }
-
-            const double sampleWidthP = ( w - spacing * ( numSamples - 1 ) )
-                * sampleWidthS / ( ds + sampleWidthS );
-
-            hint = 0.5 * sampleWidthP;
-            hint += qMax( d_data->margin, 0 );
-        }
-    }
-
-    if ( orientation() == Qt::Vertical )
-    {
-        left = right = hint;
-        top = bottom = -1.0; // no hint
-    }
-    else
-    {
-        left = right = -1.0; // no hint
-        top = bottom = hint;
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_abstract_barchart.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_abstract_barchart.h
deleted file mode 100644
index b948bcdd70bd2f0943de5cb880518be1fc2c1864..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_abstract_barchart.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_ABSTRACT_BAR_CHART_H
-#define QWT_PLOT_ABSTRACT_BAR_CHART_H
-
-#include "qwt_global.h"
-#include "qwt_plot_seriesitem.h"
-#include "qwt_series_data.h"
-
-/*!
-  \brief Abstract base class for bar chart items
-
-  In opposite to almost all other plot items bar charts can't be 
-  displayed inside of their bounding rectangle and need a special
-  API  how to calculate the width of the bars and how they affect
-  the layout of the attached plot.
- */
-class QWT_EXPORT QwtPlotAbstractBarChart: public QwtPlotSeriesItem
-{
-public:
-    /*!
-        \brief Mode how to calculate the bar width
-
-        setLayoutPolicy(), setLayoutHint(), barWidthHint()
-     */
-    enum LayoutPolicy
-    {
-        /*!
-          The sample width is calculated by dividing the bounding rectangle
-          by the number of samples. The layoutHint() is used as a minimum width
-          in paint device coordinates.
-
-          \sa boundingRectangle()
-         */
-        AutoAdjustSamples,
-
-        /*!
-          layoutHint() defines an interval in axis coordinates
-         */
-        ScaleSamplesToAxes,
-
-        /*!
-          The bar width is calculated by multiplying layoutHint()
-          with the height or width of the canvas.
-
-          \sa boundingRectangle()
-         */
-        ScaleSampleToCanvas,
-
-        /*!
-          layoutHint() defines a fixed width in paint device coordinates.
-         */
-        FixedSampleSize
-    };
-
-    explicit QwtPlotAbstractBarChart( const QwtText &title );
-    virtual ~QwtPlotAbstractBarChart();
-
-    void setLayoutPolicy( LayoutPolicy );
-    LayoutPolicy layoutPolicy() const;
-
-    void setLayoutHint( double );
-    double layoutHint() const;
-
-    void setSpacing( int );
-    int spacing() const;
-
-    void setMargin( int );
-    int margin() const;
-
-    void setBaseline( double );
-    double baseline() const;
-
-    virtual void getCanvasMarginHint( 
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect,
-        double &left, double &top, double &right, double &bottom) const;
-
-
-protected:
-    double sampleWidth( const QwtScaleMap &map,
-        double canvasSize, double dataSize,
-        double value ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_axis.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_axis.cpp
deleted file mode 100644
index 5cc6c173c3964c7ffd38a200be08d285840eb260..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_axis.cpp
+++ /dev/null
@@ -1,719 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot.h"
-#include "qwt_math.h"
-#include "qwt_scale_widget.h"
-#include "qwt_scale_div.h"
-#include "qwt_scale_engine.h"
-
-class QwtPlot::AxisData
-{
-public:
-    bool isEnabled;
-    bool doAutoScale;
-
-    double minValue;
-    double maxValue;
-    double stepSize;
-
-    int maxMajor;
-    int maxMinor;
-
-    bool isValid;
-
-    QwtScaleDiv scaleDiv;
-    QwtScaleEngine *scaleEngine;
-    QwtScaleWidget *scaleWidget;
-};
-
-//! Initialize axes
-void QwtPlot::initAxesData()
-{
-    int axisId;
-
-    for ( axisId = 0; axisId < axisCnt; axisId++ )
-        d_axisData[axisId] = new AxisData;
-
-    d_axisData[yLeft]->scaleWidget =
-        new QwtScaleWidget( QwtScaleDraw::LeftScale, this );
-    d_axisData[yRight]->scaleWidget =
-        new QwtScaleWidget( QwtScaleDraw::RightScale, this );
-    d_axisData[xTop]->scaleWidget =
-        new QwtScaleWidget( QwtScaleDraw::TopScale, this );
-    d_axisData[xBottom]->scaleWidget =
-        new QwtScaleWidget( QwtScaleDraw::BottomScale, this );
-
-    d_axisData[yLeft]->scaleWidget->setObjectName( "QwtPlotAxisYLeft" );
-    d_axisData[yRight]->scaleWidget->setObjectName( "QwtPlotAxisYRight" );
-    d_axisData[xTop]->scaleWidget->setObjectName( "QwtPlotAxisXTop" );
-    d_axisData[xBottom]->scaleWidget->setObjectName( "QwtPlotAxisXBottom" );
-
-#if 1
-    // better find the font sizes from the application font
-    QFont fscl( fontInfo().family(), 10 );
-    QFont fttl( fontInfo().family(), 12, QFont::Bold );
-#endif
-
-    for ( axisId = 0; axisId < axisCnt; axisId++ )
-    {
-        AxisData &d = *d_axisData[axisId];
-
-        d.scaleEngine = new QwtLinearScaleEngine;
-
-        d.scaleWidget->setTransformation( 
-            d.scaleEngine->transformation() );
-
-        d.scaleWidget->setFont( fscl );
-        d.scaleWidget->setMargin( 2 );
-
-        QwtText text = d.scaleWidget->title();
-        text.setFont( fttl );
-        d.scaleWidget->setTitle( text );
-
-        d.doAutoScale = true;
-
-        d.minValue = 0.0;
-        d.maxValue = 1000.0;
-        d.stepSize = 0.0;
-
-        d.maxMinor = 5;
-        d.maxMajor = 8;
-
-
-        d.isValid = false;
-    }
-
-    d_axisData[yLeft]->isEnabled = true;
-    d_axisData[yRight]->isEnabled = false;
-    d_axisData[xBottom]->isEnabled = true;
-    d_axisData[xTop]->isEnabled = false;
-}
-
-void QwtPlot::deleteAxesData()
-{
-    for ( int axisId = 0; axisId < axisCnt; axisId++ )
-    {
-        delete d_axisData[axisId]->scaleEngine;
-        delete d_axisData[axisId];
-        d_axisData[axisId] = NULL;
-    }
-}
-
-/*!
-  \return Scale widget of the specified axis, or NULL if axisId is invalid.
-  \param axisId Axis index
-*/
-const QwtScaleWidget *QwtPlot::axisWidget( int axisId ) const
-{
-    if ( axisValid( axisId ) )
-        return d_axisData[axisId]->scaleWidget;
-
-    return NULL;
-}
-
-/*!
-  \return Scale widget of the specified axis, or NULL if axisId is invalid.
-  \param axisId Axis index
-*/
-QwtScaleWidget *QwtPlot::axisWidget( int axisId )
-{
-    if ( axisValid( axisId ) )
-        return d_axisData[axisId]->scaleWidget;
-
-    return NULL;
-}
-
-/*!
-  Change the scale engine for an axis
-
-  \param axisId Axis index
-  \param scaleEngine Scale engine
-
-  \sa axisScaleEngine()
-*/
-void QwtPlot::setAxisScaleEngine( int axisId, QwtScaleEngine *scaleEngine )
-{
-    if ( axisValid( axisId ) && scaleEngine != NULL )
-    {
-        AxisData &d = *d_axisData[axisId];
-
-        delete d.scaleEngine;
-        d.scaleEngine = scaleEngine;
-
-        d_axisData[axisId]->scaleWidget->setTransformation( 
-            scaleEngine->transformation() );
-
-        d.isValid = false;
-
-        autoRefresh();
-    }
-}
-
-/*!
-  \param axisId Axis index
-  \return Scale engine for a specific axis
-*/
-QwtScaleEngine *QwtPlot::axisScaleEngine( int axisId )
-{
-    if ( axisValid( axisId ) )
-        return d_axisData[axisId]->scaleEngine;
-    else
-        return NULL;
-}
-
-/*!
-  \param axisId Axis index
-  \return Scale engine for a specific axis
-*/
-const QwtScaleEngine *QwtPlot::axisScaleEngine( int axisId ) const
-{
-    if ( axisValid( axisId ) )
-        return d_axisData[axisId]->scaleEngine;
-    else
-        return NULL;
-}
-/*!
-  \return \c True, if autoscaling is enabled
-  \param axisId Axis index
-*/
-bool QwtPlot::axisAutoScale( int axisId ) const
-{
-    if ( axisValid( axisId ) )
-        return d_axisData[axisId]->doAutoScale;
-    else
-        return false;
-
-}
-
-/*!
-  \return \c True, if a specified axis is enabled
-  \param axisId Axis index
-*/
-bool QwtPlot::axisEnabled( int axisId ) const
-{
-    if ( axisValid( axisId ) )
-        return d_axisData[axisId]->isEnabled;
-    else
-        return false;
-}
-
-/*!
-  \return The font of the scale labels for a specified axis
-  \param axisId Axis index
-*/
-QFont QwtPlot::axisFont( int axisId ) const
-{
-    if ( axisValid( axisId ) )
-        return axisWidget( axisId )->font();
-    else
-        return QFont();
-
-}
-
-/*!
-  \return The maximum number of major ticks for a specified axis
-  \param axisId Axis index
-  \sa setAxisMaxMajor(), QwtScaleEngine::divideScale()
-*/
-int QwtPlot::axisMaxMajor( int axisId ) const
-{
-    if ( axisValid( axisId ) )
-        return d_axisData[axisId]->maxMajor;
-    else
-        return 0;
-}
-
-/*!
-  \return the maximum number of minor ticks for a specified axis
-  \param axisId Axis index
-  \sa setAxisMaxMinor(), QwtScaleEngine::divideScale()
-*/
-int QwtPlot::axisMaxMinor( int axisId ) const
-{
-    if ( axisValid( axisId ) )
-        return d_axisData[axisId]->maxMinor;
-    else
-        return 0;
-}
-
-/*!
-  \brief Return the scale division of a specified axis
-
-  axisScaleDiv(axisId).lowerBound(), axisScaleDiv(axisId).upperBound()
-  are the current limits of the axis scale.
-
-  \param axisId Axis index
-  \return Scale division
-
-  \sa QwtScaleDiv, setAxisScaleDiv(), QwtScaleEngine::divideScale()
-*/
-const QwtScaleDiv &QwtPlot::axisScaleDiv( int axisId ) const
-{
-    return d_axisData[axisId]->scaleDiv;
-}
-
-/*!
-  \brief Return the scale draw of a specified axis
-
-  \param axisId Axis index
-  \return Specified scaleDraw for axis, or NULL if axis is invalid.
-*/
-const QwtScaleDraw *QwtPlot::axisScaleDraw( int axisId ) const
-{
-    if ( !axisValid( axisId ) )
-        return NULL;
-
-    return axisWidget( axisId )->scaleDraw();
-}
-
-/*!
-  \brief Return the scale draw of a specified axis
-
-  \param axisId Axis index
-  \return Specified scaleDraw for axis, or NULL if axis is invalid.
-*/
-QwtScaleDraw *QwtPlot::axisScaleDraw( int axisId )
-{
-    if ( !axisValid( axisId ) )
-        return NULL;
-
-    return axisWidget( axisId )->scaleDraw();
-}
-
-/*!
-  \brief Return the step size parameter that has been set in setAxisScale. 
-
-  This doesn't need to be the step size of the current scale.
-
-  \param axisId Axis index
-  \return step size parameter value
-
-   \sa setAxisScale(), QwtScaleEngine::divideScale()
-*/
-double QwtPlot::axisStepSize( int axisId ) const
-{
-    if ( !axisValid( axisId ) )
-        return 0;
-
-    return d_axisData[axisId]->stepSize;
-}
-
-/*!
-  \brief Return the current interval of the specified axis
-
-  This is only a convenience function for axisScaleDiv( axisId )->interval();
-  
-  \param axisId Axis index
-  \return Scale interval
-
-  \sa QwtScaleDiv, axisScaleDiv()
-*/
-QwtInterval QwtPlot::axisInterval( int axisId ) const
-{
-    if ( !axisValid( axisId ) )
-        return QwtInterval();
-
-    return d_axisData[axisId]->scaleDiv.interval();
-}
-
-/*!
-  \return Title of a specified axis
-  \param axisId Axis index
-*/
-QwtText QwtPlot::axisTitle( int axisId ) const
-{
-    if ( axisValid( axisId ) )
-        return axisWidget( axisId )->title();
-    else
-        return QwtText();
-}
-
-/*!
-  \brief Enable or disable a specified axis
-
-  When an axis is disabled, this only means that it is not
-  visible on the screen. Curves, markers and can be attached
-  to disabled axes, and transformation of screen coordinates
-  into values works as normal.
-
-  Only xBottom and yLeft are enabled by default.
-
-  \param axisId Axis index
-  \param tf \c true (enabled) or \c false (disabled)
-*/
-void QwtPlot::enableAxis( int axisId, bool tf )
-{
-    if ( axisValid( axisId ) && tf != d_axisData[axisId]->isEnabled )
-    {
-        d_axisData[axisId]->isEnabled = tf;
-        updateLayout();
-    }
-}
-
-/*!
-  Transform the x or y coordinate of a position in the
-  drawing region into a value.
-
-  \param axisId Axis index
-  \param pos position
-
-  \return Position as axis coordinate
-
-  \warning The position can be an x or a y coordinate,
-           depending on the specified axis.
-*/
-double QwtPlot::invTransform( int axisId, int pos ) const
-{
-    if ( axisValid( axisId ) )
-        return( canvasMap( axisId ).invTransform( pos ) );
-    else
-        return 0.0;
-}
-
-
-/*!
-  \brief Transform a value into a coordinate in the plotting region
-
-  \param axisId Axis index
-  \param value value
-  \return X or Y coordinate in the plotting region corresponding
-          to the value.
-*/
-double QwtPlot::transform( int axisId, double value ) const
-{
-    if ( axisValid( axisId ) )
-        return( canvasMap( axisId ).transform( value ) );
-    else
-        return 0.0;
-}
-
-/*!
-  \brief Change the font of an axis
-
-  \param axisId Axis index
-  \param font Font
-  \warning This function changes the font of the tick labels,
-           not of the axis title.
-*/
-void QwtPlot::setAxisFont( int axisId, const QFont &font )
-{
-    if ( axisValid( axisId ) )
-        axisWidget( axisId )->setFont( font );
-}
-
-/*!
-  \brief Enable autoscaling for a specified axis
-
-  This member function is used to switch back to autoscaling mode
-  after a fixed scale has been set. Autoscaling is enabled by default.
-
-  \param axisId Axis index
-  \param on On/Off
-  \sa setAxisScale(), setAxisScaleDiv(), updateAxes()
-
-  \note The autoscaling flag has no effect until updateAxes() is executed
-        ( called by replot() ).
-*/
-void QwtPlot::setAxisAutoScale( int axisId, bool on )
-{
-    if ( axisValid( axisId ) && ( d_axisData[axisId]->doAutoScale != on ) )
-    {
-        d_axisData[axisId]->doAutoScale = on;
-        autoRefresh();
-    }
-}
-
-/*!
-  \brief Disable autoscaling and specify a fixed scale for a selected axis.
-
-  In updateAxes() the scale engine calculates a scale division from the 
-  specified parameters, that will be assigned to the scale widget. So 
-  updates of the scale widget usually happen delayed with the next replot.
-
-  \param axisId Axis index
-  \param min Minimum of the scale
-  \param max Maximum of the scale
-  \param stepSize Major step size. If <code>step == 0</code>, the step size is
-                  calculated automatically using the maxMajor setting.
-
-  \sa setAxisMaxMajor(), setAxisAutoScale(), axisStepSize(), QwtScaleEngine::divideScale()
-*/
-void QwtPlot::setAxisScale( int axisId, double min, double max, double stepSize )
-{
-    if ( axisValid( axisId ) )
-    {
-        AxisData &d = *d_axisData[axisId];
-
-        d.doAutoScale = false;
-        d.isValid = false;
-
-        d.minValue = min;
-        d.maxValue = max;
-        d.stepSize = stepSize;
-
-        autoRefresh();
-    }
-}
-
-/*!
-  \brief Disable autoscaling and specify a fixed scale for a selected axis.
-
-  The scale division will be stored locally only until the next call
-  of updateAxes(). So updates of the scale widget usually happen delayed with 
-  the next replot.
-
-  \param axisId Axis index
-  \param scaleDiv Scale division
-
-  \sa setAxisScale(), setAxisAutoScale()
-*/
-void QwtPlot::setAxisScaleDiv( int axisId, const QwtScaleDiv &scaleDiv )
-{
-    if ( axisValid( axisId ) )
-    {
-        AxisData &d = *d_axisData[axisId];
-
-        d.doAutoScale = false;
-        d.scaleDiv = scaleDiv;
-        d.isValid = true;
-
-        autoRefresh();
-    }
-}
-
-/*!
-  \brief Set a scale draw
-
-  \param axisId Axis index
-  \param scaleDraw Object responsible for drawing scales.
-
-  By passing scaleDraw it is possible to extend QwtScaleDraw
-  functionality and let it take place in QwtPlot. Please note
-  that scaleDraw has to be created with new and will be deleted
-  by the corresponding QwtScale member ( like a child object ).
-
-  \sa QwtScaleDraw, QwtScaleWidget
-  \warning The attributes of scaleDraw will be overwritten by those of the
-           previous QwtScaleDraw.
-*/
-
-void QwtPlot::setAxisScaleDraw( int axisId, QwtScaleDraw *scaleDraw )
-{
-    if ( axisValid( axisId ) )
-    {
-        axisWidget( axisId )->setScaleDraw( scaleDraw );
-        autoRefresh();
-    }
-}
-
-/*!
-  Change the alignment of the tick labels
-
-  \param axisId Axis index
-  \param alignment Or'd Qt::AlignmentFlags see <qnamespace.h>
-
-  \sa QwtScaleDraw::setLabelAlignment()
-*/
-void QwtPlot::setAxisLabelAlignment( int axisId, Qt::Alignment alignment )
-{
-    if ( axisValid( axisId ) )
-        axisWidget( axisId )->setLabelAlignment( alignment );
-}
-
-/*!
-  Rotate all tick labels
-
-  \param axisId Axis index
-  \param rotation Angle in degrees. When changing the label rotation,
-                  the label alignment might be adjusted too.
-
-  \sa QwtScaleDraw::setLabelRotation(), setAxisLabelAlignment()
-*/
-void QwtPlot::setAxisLabelRotation( int axisId, double rotation )
-{
-    if ( axisValid( axisId ) )
-        axisWidget( axisId )->setLabelRotation( rotation );
-}
-
-/*!
-  Set the maximum number of minor scale intervals for a specified axis
-
-  \param axisId Axis index
-  \param maxMinor Maximum number of minor steps
-
-  \sa axisMaxMinor()
-*/
-void QwtPlot::setAxisMaxMinor( int axisId, int maxMinor )
-{
-    if ( axisValid( axisId ) )
-    {
-        maxMinor = qBound( 0, maxMinor, 100 );
-
-        AxisData &d = *d_axisData[axisId];
-        if ( maxMinor != d.maxMinor )
-        {
-            d.maxMinor = maxMinor;
-            d.isValid = false;
-            autoRefresh();
-        }
-    }
-}
-
-/*!
-  Set the maximum number of major scale intervals for a specified axis
-
-  \param axisId Axis index
-  \param maxMajor Maximum number of major steps
-
-  \sa axisMaxMajor()
-*/
-void QwtPlot::setAxisMaxMajor( int axisId, int maxMajor )
-{
-    if ( axisValid( axisId ) )
-    {
-        maxMajor = qBound( 1, maxMajor, 10000 );
-
-        AxisData &d = *d_axisData[axisId];
-        if ( maxMajor != d.maxMajor )
-        {
-            d.maxMajor = maxMajor;
-            d.isValid = false;
-            autoRefresh();
-        }
-    }
-}
-
-/*!
-  \brief Change the title of a specified axis
-
-  \param axisId Axis index
-  \param title axis title
-*/
-void QwtPlot::setAxisTitle( int axisId, const QString &title )
-{
-    if ( axisValid( axisId ) )
-        axisWidget( axisId )->setTitle( title );
-}
-
-/*!
-  \brief Change the title of a specified axis
-
-  \param axisId Axis index
-  \param title Axis title
-*/
-void QwtPlot::setAxisTitle( int axisId, const QwtText &title )
-{
-    if ( axisValid( axisId ) )
-        axisWidget( axisId )->setTitle( title );
-}
-
-/*! 
-  \brief Rebuild the axes scales
-
-  In case of autoscaling the boundaries of a scale are calculated 
-  from the bounding rectangles of all plot items, having the 
-  QwtPlotItem::AutoScale flag enabled ( QwtScaleEngine::autoScale() ). 
-  Then a scale division is calculated ( QwtScaleEngine::didvideScale() ) 
-  and assigned to scale widget.
-
-  When the scale boundaries have been assigned with setAxisScale() a 
-  scale division is calculated ( QwtScaleEngine::didvideScale() )
-  for this interval and assigned to the scale widget.
-
-  When the scale has been set explicitly by setAxisScaleDiv() the 
-  locally stored scale division gets assigned to the scale widget.
-
-  The scale widget indicates modifications by emitting a 
-  QwtScaleWidget::scaleDivChanged() signal.
-
-  updateAxes() is usually called by replot(). 
-
-  \sa setAxisAutoScale(), setAxisScale(), setAxisScaleDiv(), replot()
-      QwtPlotItem::boundingRect()
- */
-void QwtPlot::updateAxes()
-{
-    // Find bounding interval of the item data
-    // for all axes, where autoscaling is enabled
-
-    QwtInterval intv[axisCnt];
-
-    const QwtPlotItemList& itmList = itemList();
-
-    QwtPlotItemIterator it;
-    for ( it = itmList.begin(); it != itmList.end(); ++it )
-    {
-        const QwtPlotItem *item = *it;
-
-        if ( !item->testItemAttribute( QwtPlotItem::AutoScale ) )
-            continue;
-
-        if ( !item->isVisible() )
-            continue;
-
-        if ( axisAutoScale( item->xAxis() ) || axisAutoScale( item->yAxis() ) )
-        {
-            const QRectF rect = item->boundingRect();
-
-            if ( rect.width() >= 0.0 )
-                intv[item->xAxis()] |= QwtInterval( rect.left(), rect.right() );
-
-            if ( rect.height() >= 0.0 )
-                intv[item->yAxis()] |= QwtInterval( rect.top(), rect.bottom() );
-        }
-    }
-
-    // Adjust scales
-
-    for ( int axisId = 0; axisId < axisCnt; axisId++ )
-    {
-        AxisData &d = *d_axisData[axisId];
-
-        double minValue = d.minValue;
-        double maxValue = d.maxValue;
-        double stepSize = d.stepSize;
-
-        if ( d.doAutoScale && intv[axisId].isValid() )
-        {
-            d.isValid = false;
-
-            minValue = intv[axisId].minValue();
-            maxValue = intv[axisId].maxValue();
-
-            d.scaleEngine->autoScale( d.maxMajor,
-                minValue, maxValue, stepSize );
-        }
-        if ( !d.isValid )
-        {
-            d.scaleDiv = d.scaleEngine->divideScale(
-                minValue, maxValue,
-                d.maxMajor, d.maxMinor, stepSize );
-            d.isValid = true;
-        }
-
-        QwtScaleWidget *scaleWidget = axisWidget( axisId );
-        scaleWidget->setScaleDiv( d.scaleDiv );
-
-        int startDist, endDist;
-        scaleWidget->getBorderDistHint( startDist, endDist );
-        scaleWidget->setBorderDist( startDist, endDist );
-    }
-
-    for ( it = itmList.begin(); it != itmList.end(); ++it )
-    {
-        QwtPlotItem *item = *it;
-        if ( item->testItemInterest( QwtPlotItem::ScaleInterest ) )
-        {
-            item->updateScaleDiv( axisScaleDiv( item->xAxis() ),
-                axisScaleDiv( item->yAxis() ) );
-        }
-    }
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_barchart.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_barchart.cpp
deleted file mode 100644
index 97abc5010964087a0d439a80d45b375b41fecffc..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_barchart.cpp
+++ /dev/null
@@ -1,459 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_barchart.h"
-#include "qwt_scale_map.h"
-#include "qwt_column_symbol.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-
-class QwtPlotBarChart::PrivateData
-{
-public:
-    PrivateData():
-        symbol( NULL ),
-        legendMode( QwtPlotBarChart::LegendChartTitle )
-    {
-    }
- 
-    ~PrivateData()
-    {
-        delete symbol;
-    }
-
-    QwtColumnSymbol *symbol;
-    QwtPlotBarChart::LegendMode legendMode;
-};
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotBarChart::QwtPlotBarChart( const QwtText &title ):
-    QwtPlotAbstractBarChart( title )
-{
-    init();
-}
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotBarChart::QwtPlotBarChart( const QString &title ):
-    QwtPlotAbstractBarChart( QwtText( title ) )
-{
-    init();
-}
-
-//! Destructor
-QwtPlotBarChart::~QwtPlotBarChart()
-{
-    delete d_data;
-}
-
-void QwtPlotBarChart::init()
-{
-    d_data = new PrivateData;
-    setData( new QwtPointSeriesData() );
-}
-
-//! \return QwtPlotItem::Rtti_PlotBarChart
-int QwtPlotBarChart::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotBarChart;
-}
-
-/*!
-  Initialize data with an array of points
-
-  \param samples Vector of points
-  \note QVector is implicitly shared
-  \note QPolygonF is derived from QVector<QPointF>
-*/
-void QwtPlotBarChart::setSamples(
-    const QVector<QPointF> &samples )
-{
-    setData( new QwtPointSeriesData( samples ) );
-}
-
-/*!
-  Initialize data with an array of doubles
-
-  The indices in the array are taken as x coordinate,
-  while the doubles are interpreted as y values.
-
-  \param samples Vector of y coordinates
-  \note QVector is implicitly shared
-*/
-void QwtPlotBarChart::setSamples(
-    const QVector<double> &samples )
-{
-    QVector<QPointF> points;
-    for ( int i = 0; i < samples.size(); i++ )
-        points += QPointF( i, samples[ i ] );
-
-    setData( new QwtPointSeriesData( points ) );
-}
-
-/*!
-  Assign a series of samples
-
-  setSamples() is just a wrapper for setData() without any additional
-  value - beside that it is easier to find for the developer.
-
-  \param data Data
-  \warning The item takes ownership of the data object, deleting
-           it when its not used anymore.
-*/
-void QwtPlotBarChart::setSamples( QwtSeriesData<QPointF> *data )
-{
-    setData( data );
-}
-
-/*!
-  \brief Assign a symbol
-
-  The bar chart will take the ownership of the symbol, hence the previously
-  set symbol will be delete by setting a new one. If \p symbol is 
-  \c NULL no symbol will be drawn.
-
-  \param symbol Symbol
-  \sa symbol()
-*/
-void QwtPlotBarChart::setSymbol( QwtColumnSymbol *symbol )
-{
-    if ( symbol != d_data->symbol )
-    {
-        delete d_data->symbol;
-        d_data->symbol = symbol;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Current symbol or NULL, when no symbol has been assigned
-  \sa setSymbol()
-*/
-const QwtColumnSymbol *QwtPlotBarChart::symbol() const
-{
-    return d_data->symbol;
-}
-
-/*!
-  Set the mode that decides what to display on the legend
-
-  In case of LegendBarTitles barTitle() needs to be overloaded
-  to return individual titles for each bar.
-
-  \param mode New mode
-  \sa legendMode(), legendData(), barTitle(), QwtPlotItem::ItemAttribute
- */
-void QwtPlotBarChart::setLegendMode( LegendMode mode )
-{
-    if ( mode != d_data->legendMode )
-    {
-        d_data->legendMode = mode;
-        legendChanged();
-    }
-}
-
-/*!
-  \return Legend mode
-  \sa setLegendMode()
- */
-QwtPlotBarChart::LegendMode QwtPlotBarChart::legendMode() const
-{
-    return d_data->legendMode;
-}
-
-/*!
-  \return Bounding rectangle of all samples.
-  For an empty series the rectangle is invalid.
-*/
-QRectF QwtPlotBarChart::boundingRect() const
-{
-    const size_t numSamples = dataSize();
-    if ( numSamples == 0 )
-        return QwtPlotSeriesItem::boundingRect();
-
-    QRectF rect = QwtPlotSeriesItem::boundingRect();
-    if ( rect.height() >= 0 )
-    {
-        const double baseLine = baseline();
-
-        if ( rect.bottom() < baseLine )
-            rect.setBottom( baseLine );
-
-        if ( rect.top() > baseLine )
-            rect.setTop( baseLine );
-    }
-
-    if ( orientation() == Qt::Horizontal )
-        rect.setRect( rect.y(), rect.x(), rect.height(), rect.width() );
-
-    return rect;
-}
-
-/*!
-  Draw an interval of the bar chart
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rect of the canvas
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted. If to < 0 the
-         curve will be painted to its last point.
-
-  \sa drawSymbols()
-*/
-void QwtPlotBarChart::drawSeries( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    if ( to < 0 )
-        to = dataSize() - 1;
-
-    if ( from < 0 )
-        from = 0;
-
-    if ( from > to )
-        return;
-
-
-    const QRectF br = data()->boundingRect();
-    const QwtInterval interval( br.left(), br.right() );
-
-    painter->save();
-
-    for ( int i = from; i <= to; i++ )
-    {
-        drawSample( painter, xMap, yMap,
-                    canvasRect, interval, i, sample( i ) );
-    }
-
-    painter->restore();
-}
-
-/*!
-  Draw a sample
-
-  \param painter Painter
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rect of the canvas
-  \param boundingInterval Bounding interval of sample values
-  \param index Index of the sample
-  \param sample Value of the sample
-
-  \sa drawSeries()
-*/
-void QwtPlotBarChart::drawSample( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, const QwtInterval &boundingInterval,
-    int index, const QPointF &sample ) const
-{
-    QwtColumnRect barRect;
-
-    if ( orientation() == Qt::Horizontal )
-    {
-        const double barHeight = sampleWidth( yMap, canvasRect.height(),
-            boundingInterval.width(), sample.y() );
-
-        const double x1 = xMap.transform( baseline() );
-        const double x2 = xMap.transform( sample.y() );
-
-        const double y = yMap.transform( sample.x() );
-        const double y1 = y - 0.5 * barHeight;
-        const double y2 = y + 0.5 * barHeight;
-
-        barRect.direction = ( x1 < x2 ) ?
-            QwtColumnRect::LeftToRight : QwtColumnRect::RightToLeft;
-
-        barRect.hInterval = QwtInterval( x1, x2 ).normalized();
-        barRect.vInterval = QwtInterval( y1, y2 );
-    }
-    else
-    {
-        const double barWidth = sampleWidth( xMap, canvasRect.width(),
-            boundingInterval.width(), sample.y() );
-
-        const double x = xMap.transform( sample.x() );
-        const double x1 = x - 0.5 * barWidth;
-        const double x2 = x + 0.5 * barWidth;
-
-        const double y1 = yMap.transform( baseline() );
-        const double y2 = yMap.transform( sample.y() );
-
-        barRect.direction = ( y1 < y2 ) ?
-            QwtColumnRect::TopToBottom : QwtColumnRect::BottomToTop;
-
-        barRect.hInterval = QwtInterval( x1, x2 );
-        barRect.vInterval = QwtInterval( y1, y2 ).normalized();
-    }
-
-    drawBar( painter, index, sample, barRect );
-}
-
-/*!
-  Draw a bar 
-
-  \param painter Painter
-  \param sampleIndex Index of the sample represented by the bar
-  \param sample Value of the sample
-  \param rect Bounding rectangle of the bar
- */
-void QwtPlotBarChart::drawBar( QPainter *painter,
-    int sampleIndex, const QPointF &sample, 
-    const QwtColumnRect &rect ) const
-{
-    const QwtColumnSymbol *specialSym = 
-        specialSymbol( sampleIndex, sample );
-
-    const QwtColumnSymbol *sym = specialSym;
-    if ( sym == NULL )
-        sym = d_data->symbol;
-
-    if ( sym )
-    {
-        sym->draw( painter, rect );
-    }
-    else
-    {
-        // we build a temporary default symbol
-        QwtColumnSymbol sym( QwtColumnSymbol::Box );
-        sym.setLineWidth( 1 );
-        sym.setFrameStyle( QwtColumnSymbol::Plain );
-        sym.draw( painter, rect );
-    }
-
-    delete specialSym;
-}
-
-/*!
-  Needs to be overloaded to return a 
-  non default symbol for a specific sample
-
-  \param sampleIndex Index of the sample represented by the bar
-  \param sample Value of the sample
-
-  \return NULL, indicating to use the default symbol
- */
-QwtColumnSymbol *QwtPlotBarChart::specialSymbol( 
-    int sampleIndex, const QPointF &sample ) const
-{
-    Q_UNUSED( sampleIndex );
-    Q_UNUSED( sample );
-
-    return NULL;
-}
-
-/*!
-  \brief Return the title of a bar
-
-  In LegendBarTitles mode the title is displayed on
-  the legend entry corresponding to a bar.
-
-  The default implementation is a dummy, that is intended
-  to be overloaded.
-
-  \param sampleIndex Index of the bar
-  \return An empty text
-  \sa LegendBarTitles
- */
-QwtText QwtPlotBarChart::barTitle( int sampleIndex ) const
-{
-    Q_UNUSED( sampleIndex );
-    return QwtText();
-}
-
-/*!
-   \brief Return all information, that is needed to represent
-          the item on the legend
-
-   In case of LegendBarTitles an entry for each bar is returned,
-   otherwise the chart is represented like any other plot item
-   from its title() and the legendIcon().
-
-   \return Information, that is needed to represent the item on the legend
-   \sa title(), setLegendMode(), barTitle(), QwtLegend, QwtPlotLegendItem
- */
-QList<QwtLegendData> QwtPlotBarChart::legendData() const
-{
-    QList<QwtLegendData> list;
-
-    if ( d_data->legendMode == LegendBarTitles )
-    {
-        const size_t numSamples = dataSize();
-        for ( size_t i = 0; i < numSamples; i++ )
-        {
-            QwtLegendData data;
-
-            QVariant titleValue;
-            qVariantSetValue( titleValue, barTitle( i ) );
-            data.setValue( QwtLegendData::TitleRole, titleValue );
-
-            if ( !legendIconSize().isEmpty() )
-            {
-                QVariant iconValue;
-                qVariantSetValue( iconValue,
-                    legendIcon( i, legendIconSize() ) );
-
-                data.setValue( QwtLegendData::IconRole, iconValue );
-            }
-
-            list += data;
-        }
-    }
-    else
-    {
-        return QwtPlotAbstractBarChart::legendData();
-    }
-
-    return list;
-}
-
-/*!
-   \return Icon representing a bar or the chart on the legend
-
-   When the legendMode() is LegendBarTitles the icon shows
-   the bar corresponding to index - otherwise the bar
-   displays the default symbol.
-
-   \param index Index of the legend entry 
-   \param size Icon size
-
-   \sa setLegendMode(), drawBar(), 
-       QwtPlotItem::setLegendIconSize(), QwtPlotItem::legendData()
- */
-QwtGraphic QwtPlotBarChart::legendIcon( 
-    int index, const QSizeF &size ) const
-{
-    QwtColumnRect column;
-    column.hInterval = QwtInterval( 0.0, size.width() - 1.0 );
-    column.vInterval = QwtInterval( 0.0, size.height() - 1.0 );
-
-    QwtGraphic icon;
-    icon.setDefaultSize( size );
-    icon.setRenderHint( QwtGraphic::RenderPensUnscaled, true );
-
-    QPainter painter( &icon );
-    painter.setRenderHint( QPainter::Antialiasing,
-        testRenderHint( QwtPlotItem::RenderAntialiased ) );
-
-    int barIndex = -1;
-    if ( d_data->legendMode == QwtPlotBarChart::LegendBarTitles )
-        barIndex = index;
-        
-    drawBar( &painter, barIndex, QPointF(), column );
-
-    return icon;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_barchart.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_barchart.h
deleted file mode 100644
index f5cd9b255a4209d83df98e8f930011394acb3dee..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_barchart.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_BAR_CHART_H
-#define QWT_PLOT_BAR_CHART_H
-
-#include "qwt_global.h"
-#include "qwt_plot_abstract_barchart.h"
-#include "qwt_series_data.h"
-
-class QwtColumnRect;
-class QwtColumnSymbol;
-
-/*!
-  \brief QwtPlotBarChart displays a series of a values as bars.
-
-  Each bar might be customized individually by implementing
-  a specialSymbol(). Otherwise it is rendered using a default symbol.
-
-  Depending on its orientation() the bars are displayed horizontally 
-  or vertically. The bars cover the interval between the baseline() 
-  and the value.
-
-  By activating the LegendBarTitles mode each sample will have
-  its own entry on the legend.
-
-  The most common use case of a bar chart is to display a
-  list of y coordinates, where the x coordinate is simply the index
-  in the list. But for other situations ( f.e. when values are related
-  to dates ) it is also possible to set x coordinates explicitly.
-
-  \sa QwtPlotMultiBarChart, QwtPlotHistogram, QwtPlotCurve::Sticks,
-      QwtPlotSeriesItem::orientation(), QwtPlotAbstractBarChart::baseline()
- */
-class QWT_EXPORT QwtPlotBarChart:
-    public QwtPlotAbstractBarChart, public QwtSeriesStore<QPointF>
-{
-public:
-    /*!
-      \brief Legend modes.
-
-      The default setting is QwtPlotBarChart::LegendChartTitle.
-      \sa setLegendMode(), legendMode()
-    */
-    enum LegendMode
-    {
-        /*! 
-          One entry on the legend showing the default symbol
-          and the title() of the chart
-
-          \sa QwtPlotItem::title()
-         */
-        LegendChartTitle,
-
-        /*!
-          One entry for each value showing the individual symbol
-          of the corresponding bar and the bar title.
-
-          \sa specialSymbol(), barTitle()
-         */
-        LegendBarTitles
-    };
-
-    explicit QwtPlotBarChart( const QString &title = QString::null );
-    explicit QwtPlotBarChart( const QwtText &title );
-
-    virtual ~QwtPlotBarChart();
-
-    virtual int rtti() const;
-
-    void setSamples( const QVector<QPointF> & );
-    void setSamples( const QVector<double> & );
-    void setSamples( QwtSeriesData<QPointF> *series );
-
-    void setSymbol( QwtColumnSymbol * );
-    const QwtColumnSymbol *symbol() const;
-
-    void setLegendMode( LegendMode );
-    LegendMode legendMode() const;
-
-    virtual void drawSeries( QPainter *painter,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual QRectF boundingRect() const;
-
-    virtual QwtColumnSymbol *specialSymbol( 
-        int sampleIndex, const QPointF& ) const;
-
-    virtual QwtText barTitle( int sampleIndex ) const;
-
-protected:
-    virtual void drawSample( QPainter *painter,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, const QwtInterval &boundingInterval,
-        int index, const QPointF& sample ) const;
-
-    virtual void drawBar( QPainter *,
-        int sampleIndex, const QPointF& point, 
-        const QwtColumnRect & ) const;
-
-    QList<QwtLegendData> legendData() const;
-    QwtGraphic legendIcon( int index, const QSizeF & ) const;
-
-private:
-    void init();
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_canvas.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_canvas.cpp
deleted file mode 100644
index 660ef14a8e26997dbf58f88cd069db93a9b4db02..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_canvas.cpp
+++ /dev/null
@@ -1,1101 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_canvas.h"
-#include "qwt_painter.h"
-#include "qwt_null_paintdevice.h"
-#include "qwt_math.h"
-#include "qwt_plot.h"
-#include <qpainter.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-#include <qpaintengine.h>
-#include <qevent.h>
-
-class QwtStyleSheetRecorder: public QwtNullPaintDevice
-{
-public:
-    QwtStyleSheetRecorder( const QSize &size ):
-        d_size( size )
-    {
-    }
-
-    virtual void updateState( const QPaintEngineState &state )
-    {
-        if ( state.state() & QPaintEngine::DirtyPen )
-        {
-            d_pen = state.pen();
-        }
-        if ( state.state() & QPaintEngine::DirtyBrush )
-        {
-            d_brush = state.brush();
-        }
-        if ( state.state() & QPaintEngine::DirtyBrushOrigin )
-        {
-            d_origin = state.brushOrigin();
-        }
-    }
-
-    virtual void drawRects(const QRectF *rects, int count )
-    {
-        for ( int i = 0; i < count; i++ )
-            border.rectList += rects[i];
-    }
-
-    virtual void drawPath( const QPainterPath &path )
-    {
-        const QRectF rect( QPointF( 0.0, 0.0 ), d_size );
-        if ( path.controlPointRect().contains( rect.center() ) )
-        {
-            setCornerRects( path );
-            alignCornerRects( rect );
-
-            background.path = path;
-            background.brush = d_brush;
-            background.origin = d_origin;
-        }
-        else
-        {
-            border.pathList += path;
-        }
-    }
-
-    void setCornerRects( const QPainterPath &path )
-    {
-        QPointF pos( 0.0, 0.0 );
-
-        for ( int i = 0; i < path.elementCount(); i++ )
-        {
-            QPainterPath::Element el = path.elementAt(i); 
-            switch( el.type )
-            {
-                case QPainterPath::MoveToElement:
-                case QPainterPath::LineToElement:
-                {
-                    pos.setX( el.x );
-                    pos.setY( el.y );
-                    break;
-                }
-                case QPainterPath::CurveToElement:
-                {
-                    QRectF r( pos, QPointF( el.x, el.y ) );
-                    clipRects += r.normalized();
-
-                    pos.setX( el.x );
-                    pos.setY( el.y );
-
-                    break;
-                }
-                case QPainterPath::CurveToDataElement:
-                {
-                    if ( clipRects.size() > 0 )
-                    {
-                        QRectF r = clipRects.last();
-                        r.setCoords( 
-                            qMin( r.left(), el.x ),
-                            qMin( r.top(), el.y ),
-                            qMax( r.right(), el.x ),
-                            qMax( r.bottom(), el.y )
-                        );
-                        clipRects.last() = r.normalized();
-                    }
-                    break;
-                }
-            }
-        }
-    }
-
-protected:
-    virtual QSize sizeMetrics() const
-    {
-        return d_size;
-    }
-
-private:
-    void alignCornerRects( const QRectF &rect )
-    {
-        for ( int i = 0; i < clipRects.size(); i++ )
-        {
-            QRectF &r = clipRects[i];
-            if ( r.center().x() < rect.center().x() )
-                r.setLeft( rect.left() );
-            else
-                r.setRight( rect.right() );
-
-            if ( r.center().y() < rect.center().y() )
-                r.setTop( rect.top() );
-            else
-                r.setBottom( rect.bottom() );
-        }
-    }
-
-
-public:
-    QVector<QRectF> clipRects;
-
-    struct Border
-    {
-        QList<QPainterPath> pathList;
-        QList<QRectF> rectList;
-        QRegion clipRegion;
-    } border;
-
-    struct Background
-    {
-        QPainterPath path;
-        QBrush brush;
-        QPointF origin;
-    } background;
-
-private:
-    const QSize d_size;
-
-    QPen d_pen;
-    QBrush d_brush;
-    QPointF d_origin;
-};
-
-static void qwtDrawBackground( QPainter *painter, QwtPlotCanvas *canvas )
-{
-    painter->save();
-
-    const QPainterPath borderClip = canvas->borderPath( canvas->rect() );
-    if ( !borderClip.isEmpty() )
-        painter->setClipPath( borderClip, Qt::IntersectClip );
-
-    const QBrush &brush = 
-        canvas->palette().brush( canvas->backgroundRole() );
-
-    if ( brush.style() == Qt::TexturePattern )
-    {
-        QPixmap pm( canvas->size() );
-        QwtPainter::fillPixmap( canvas, pm );
-        painter->drawPixmap( 0, 0, pm );
-    }
-    else if ( brush.gradient() )
-    {
-        QVector<QRect> rects;
-
-        if ( brush.gradient()->coordinateMode() == QGradient::ObjectBoundingMode )
-        {
-            rects += canvas->rect();
-        } 
-        else 
-        {
-            rects = painter->clipRegion().rects();
-        }
-
-#if 1
-        bool useRaster = false;
-
-        if ( painter->paintEngine()->type() == QPaintEngine::X11 )
-        {
-            // Qt 4.7.1: gradients on X11 are broken ( subrects + 
-            // QGradient::StretchToDeviceMode ) and horrible slow.
-            // As workaround we have to use the raster paintengine.
-            // Even if the QImage -> QPixmap translation is slow
-            // it is three times faster, than using X11 directly
-
-            useRaster = true;
-        }
-#endif
-        if ( useRaster )
-        {
-            QImage::Format format = QImage::Format_RGB32;
-
-            const QGradientStops stops = brush.gradient()->stops();
-            for ( int i = 0; i < stops.size(); i++ )
-            {
-                if ( stops[i].second.alpha() != 255 )
-                {
-                    // don't use Format_ARGB32_Premultiplied. It's
-                    // recommended by the Qt docs, but QPainter::drawImage()
-                    // is horrible slow on X11.
-
-                    format = QImage::Format_ARGB32;
-                    break;
-                }
-            }
-            
-            QImage image( canvas->size(), format );
-
-            QPainter p( &image );
-            p.setPen( Qt::NoPen );
-            p.setBrush( brush );
-
-            p.drawRects( rects );
-
-            p.end();
-
-            painter->drawImage( 0, 0, image );
-        }
-        else
-        {
-            painter->setPen( Qt::NoPen );
-            painter->setBrush( brush );
-
-            painter->drawRects( rects );
-        }
-    }
-    else
-    {
-        painter->setPen( Qt::NoPen );
-        painter->setBrush( brush );
-
-        painter->drawRects( painter->clipRegion().rects() );
-
-    }
-
-    painter->restore();
-}
-
-static inline void qwtRevertPath( QPainterPath &path )
-{
-    if ( path.elementCount() == 4 )
-    {
-        QPainterPath::Element el0 = path.elementAt(0);
-        QPainterPath::Element el3 = path.elementAt(3);
-
-        path.setElementPositionAt( 0, el3.x, el3.y );
-        path.setElementPositionAt( 3, el0.x, el0.y );
-    }
-}
-
-static QPainterPath qwtCombinePathList( const QRectF &rect, 
-    const QList<QPainterPath> &pathList )
-{
-    if ( pathList.isEmpty() )
-        return QPainterPath();
-
-    QPainterPath ordered[8]; // starting top left
-
-    for ( int i = 0; i < pathList.size(); i++ )
-    {
-        int index = -1;
-        QPainterPath subPath = pathList[i];
-
-        const QRectF br = pathList[i].controlPointRect();
-        if ( br.center().x() < rect.center().x() )
-        {
-            if ( br.center().y() < rect.center().y() )
-            {
-                if ( qAbs( br.top() - rect.top() ) < 
-                    qAbs( br.left() - rect.left() ) )
-                {
-                    index = 1;
-                }
-                else
-                {
-                    index = 0;
-                }
-            }
-            else
-            {
-                if ( qAbs( br.bottom() - rect.bottom() ) < 
-                    qAbs( br.left() - rect.left() ) )
-                {
-                    index = 6;
-                }
-                else
-                {
-                    index = 7;
-                }
-            }
-
-            if ( subPath.currentPosition().y() > br.center().y() )
-                qwtRevertPath( subPath );
-        }
-        else
-        {
-            if ( br.center().y() < rect.center().y() )
-            {
-                if ( qAbs( br.top() - rect.top() ) < 
-                    qAbs( br.right() - rect.right() ) )
-                {
-                    index = 2;
-                }
-                else
-                {
-                    index = 3;
-                }
-            }
-            else
-            {
-                if ( qAbs( br.bottom() - rect.bottom() ) < 
-                    qAbs( br.right() - rect.right() ) )
-                {
-                    index = 5;
-                }
-                else
-                {
-                    index = 4;
-                }
-            }
-            if ( subPath.currentPosition().y() < br.center().y() )
-                qwtRevertPath( subPath );
-        }   
-        ordered[index] = subPath;
-    }
-
-    for ( int i = 0; i < 4; i++ )
-    {
-        if ( ordered[ 2 * i].isEmpty() != ordered[2 * i + 1].isEmpty() )
-        {
-            // we don't accept incomplete rounded borders
-            return QPainterPath();
-        }
-    }
-
-
-    const QPolygonF corners( rect );
-
-    QPainterPath path;
-    //path.moveTo( rect.topLeft() );
-
-    for ( int i = 0; i < 4; i++ )
-    {
-        if ( ordered[2 * i].isEmpty() )
-        {
-            path.lineTo( corners[i] );
-        }
-        else
-        {
-            path.connectPath( ordered[2 * i] );
-            path.connectPath( ordered[2 * i + 1] );
-        }
-    }
-
-    path.closeSubpath();
-
-#if 0
-    return path.simplified();
-#else
-    return path;
-#endif
-}
-
-static inline void qwtDrawStyledBackground( 
-    QWidget *w, QPainter *painter )
-{
-    QStyleOption opt;
-    opt.initFrom(w);
-    w->style()->drawPrimitive( QStyle::PE_Widget, &opt, painter, w);
-}
-
-static QWidget *qwtBackgroundWidget( QWidget *w )
-{
-    if ( w->parentWidget() == NULL )
-        return w;
-
-    if ( w->autoFillBackground() )
-    {
-        const QBrush brush = w->palette().brush( w->backgroundRole() );
-        if ( brush.color().alpha() > 0 )
-            return w;
-    }
-
-    if ( w->testAttribute( Qt::WA_StyledBackground ) )
-    {
-        QImage image( 1, 1, QImage::Format_ARGB32 );
-        image.fill( Qt::transparent );
-
-        QPainter painter( &image );
-        painter.translate( -w->rect().center() );
-        qwtDrawStyledBackground( w, &painter );
-        painter.end();
-
-        if ( qAlpha( image.pixel( 0, 0 ) ) != 0 )
-            return w;
-    }
-
-    return qwtBackgroundWidget( w->parentWidget() );
-}
-
-static void qwtFillBackground( QPainter *painter, 
-    QWidget *widget, const QVector<QRectF> &fillRects )
-{
-    if ( fillRects.isEmpty() )
-        return;
-
-    QRegion clipRegion;
-    if ( painter->hasClipping() )
-        clipRegion = painter->transform().map( painter->clipRegion() );
-    else
-        clipRegion = widget->contentsRect();
-
-    // Try to find out which widget fills
-    // the unfilled areas of the styled background
-
-    QWidget *bgWidget = qwtBackgroundWidget( widget->parentWidget() );
-
-    for ( int i = 0; i < fillRects.size(); i++ )
-    {
-        const QRect rect = fillRects[i].toAlignedRect();
-        if ( clipRegion.intersects( rect ) )
-        {
-            QPixmap pm( rect.size() );
-            QwtPainter::fillPixmap( bgWidget, pm, widget->mapTo( bgWidget, rect.topLeft() ) );
-            painter->drawPixmap( rect, pm );
-        }
-    }
-}
-
-static void qwtFillBackground( QPainter *painter, QwtPlotCanvas *canvas )
-{
-    QVector<QRectF> rects;
-
-    if ( canvas->testAttribute( Qt::WA_StyledBackground ) )
-    {
-        QwtStyleSheetRecorder recorder( canvas->size() );
-
-        QPainter p( &recorder );
-        qwtDrawStyledBackground( canvas, &p );
-        p.end();
-
-        if ( recorder.background.brush.isOpaque() )
-            rects = recorder.clipRects;
-        else
-            rects += canvas->rect();
-    }
-    else
-    {
-        const QRectF r = canvas->rect();
-        const double radius = canvas->borderRadius();
-        if ( radius > 0.0 )
-        {
-            QSizeF sz( radius, radius );
-
-            rects += QRectF( r.topLeft(), sz );
-            rects += QRectF( r.topRight() - QPointF( radius, 0 ), sz );
-            rects += QRectF( r.bottomRight() - QPointF( radius, radius ), sz );
-            rects += QRectF( r.bottomLeft() - QPointF( 0, radius ), sz );
-        }
-    }
-
-    qwtFillBackground( painter, canvas, rects);
-}
-
-
-class QwtPlotCanvas::PrivateData
-{
-public:
-    PrivateData():
-        focusIndicator( NoFocusIndicator ),
-        borderRadius( 0 ),
-        paintAttributes( 0 ),
-        backingStore( NULL )
-    {
-        styleSheet.hasBorder = false;
-    }
-
-    ~PrivateData()
-    {
-        delete backingStore;
-    }
-
-    FocusIndicator focusIndicator;
-    double borderRadius;
-    QwtPlotCanvas::PaintAttributes paintAttributes;
-    QPixmap *backingStore;
-
-    struct StyleSheet
-    {
-        bool hasBorder;
-        QPainterPath borderPath;
-        QVector<QRectF> cornerRects;
-
-        struct StyleSheetBackground
-        {
-            QBrush brush;
-            QPointF origin;
-        } background;
-
-    } styleSheet;
-
-};
-
-/*! 
-  \brief Constructor
-
-  \param plot Parent plot widget
-  \sa QwtPlot::setCanvas()
-*/
-QwtPlotCanvas::QwtPlotCanvas( QwtPlot *plot ):
-    QFrame( plot )
-{
-    setFrameStyle( QFrame::Panel | QFrame::Sunken );
-    setLineWidth( 2 );
-
-    d_data = new PrivateData;
-
-#ifndef QT_NO_CURSOR
-    setCursor( Qt::CrossCursor );
-#endif
-
-    setAutoFillBackground( true );
-    setPaintAttribute( QwtPlotCanvas::BackingStore, true );
-    setPaintAttribute( QwtPlotCanvas::Opaque, true );
-    setPaintAttribute( QwtPlotCanvas::HackStyledBackground, true );
-}
-
-//! Destructor
-QwtPlotCanvas::~QwtPlotCanvas()
-{
-    delete d_data;
-}
-
-//! Return parent plot widget
-QwtPlot *QwtPlotCanvas::plot()
-{
-    return qobject_cast<QwtPlot *>( parent() );
-}
-
-//! Return parent plot widget
-const QwtPlot *QwtPlotCanvas::plot() const
-{
-    return qobject_cast<const QwtPlot *>( parent() );
-}
-
-/*!
-  \brief Changing the paint attributes
-
-  \param attribute Paint attribute
-  \param on On/Off
-
-  \sa testPaintAttribute(), backingStore()
-*/
-void QwtPlotCanvas::setPaintAttribute( PaintAttribute attribute, bool on )
-{
-    if ( bool( d_data->paintAttributes & attribute ) == on )
-        return;
-
-    if ( on )
-        d_data->paintAttributes |= attribute;
-    else
-        d_data->paintAttributes &= ~attribute;
-
-    switch ( attribute )
-    {
-        case BackingStore:
-        {
-            if ( on )
-            {
-                if ( d_data->backingStore == NULL )
-                    d_data->backingStore = new QPixmap();
-
-                if ( isVisible() )
-                {
-#if QT_VERSION >= 0x050000
-                    *d_data->backingStore = grab( rect() );
-#else
-                    *d_data->backingStore = 
-                        QPixmap::grabWidget( this, rect() );
-#endif
-                }
-            }
-            else
-            {
-                delete d_data->backingStore;
-                d_data->backingStore = NULL;
-            }
-            break;
-        }
-        case Opaque:
-        {
-            if ( on )
-                setAttribute( Qt::WA_OpaquePaintEvent, true );
-
-            break;
-        }
-        case HackStyledBackground:
-        case ImmediatePaint:
-        {
-            break;
-        }
-    }
-}
-
-/*!
-  Test whether a paint attribute is enabled
-
-  \param attribute Paint attribute
-  \return true, when attribute is enabled
-  \sa setPaintAttribute()
-*/
-bool QwtPlotCanvas::testPaintAttribute( PaintAttribute attribute ) const
-{
-    return d_data->paintAttributes & attribute;
-}
-
-//! \return Backing store, might be null
-const QPixmap *QwtPlotCanvas::backingStore() const
-{
-    return d_data->backingStore;
-}
-
-//! Invalidate the internal backing store
-void QwtPlotCanvas::invalidateBackingStore()
-{
-    if ( d_data->backingStore )
-        *d_data->backingStore = QPixmap();
-}
-
-/*!
-  Set the focus indicator
-
-  \sa FocusIndicator, focusIndicator()
-*/
-void QwtPlotCanvas::setFocusIndicator( FocusIndicator focusIndicator )
-{
-    d_data->focusIndicator = focusIndicator;
-}
-
-/*!
-  \return Focus indicator
-
-  \sa FocusIndicator, setFocusIndicator()
-*/
-QwtPlotCanvas::FocusIndicator QwtPlotCanvas::focusIndicator() const
-{
-    return d_data->focusIndicator;
-}
-
-/*!
-  Set the radius for the corners of the border frame
-
-  \param radius Radius of a rounded corner
-  \sa borderRadius()
-*/
-void QwtPlotCanvas::setBorderRadius( double radius )
-{
-    d_data->borderRadius = qMax( 0.0, radius );
-}
-
-/*!
-  \return Radius for the corners of the border frame
-  \sa setBorderRadius()
-*/
-double QwtPlotCanvas::borderRadius() const
-{
-    return d_data->borderRadius;
-}
-
-/*!
-  Qt event handler for QEvent::PolishRequest and QEvent::StyleChange
-
-  \param event Qt Event
-  \return See QFrame::event()
-*/
-bool QwtPlotCanvas::event( QEvent *event )
-{
-    if ( event->type() == QEvent::PolishRequest ) 
-    {
-        if ( testPaintAttribute( QwtPlotCanvas::Opaque ) )
-        {
-            // Setting a style sheet changes the 
-            // Qt::WA_OpaquePaintEvent attribute, but we insist
-            // on painting the background.
-            
-            setAttribute( Qt::WA_OpaquePaintEvent, true );
-        }
-    }
-
-    if ( event->type() == QEvent::PolishRequest || 
-        event->type() == QEvent::StyleChange )
-    {
-        updateStyleSheetInfo();
-    }
-
-    return QFrame::event( event );
-}
-
-/*!
-  Paint event
-  \param event Paint event
-*/
-void QwtPlotCanvas::paintEvent( QPaintEvent *event )
-{
-    QPainter painter( this );
-    painter.setClipRegion( event->region() );
-
-    if ( testPaintAttribute( QwtPlotCanvas::BackingStore ) &&
-        d_data->backingStore != NULL )
-    {
-        QPixmap &bs = *d_data->backingStore;
-        if ( bs.size() != size() )
-        {
-            bs = QwtPainter::backingStore( this, size() );
-
-            if ( testAttribute(Qt::WA_StyledBackground) )
-            {
-                QPainter p( &bs );
-                qwtFillBackground( &p, this );
-                drawCanvas( &p, true );
-            }
-            else
-            {
-                QPainter p;
-                if ( d_data->borderRadius <= 0.0 )
-                {
-                    QwtPainter::fillPixmap( this, bs );
-                    p.begin( &bs );
-                    drawCanvas( &p, false );
-                }
-                else
-                {
-                    p.begin( &bs );
-                    qwtFillBackground( &p, this );
-                    drawCanvas( &p, true );
-                }
-
-                if ( frameWidth() > 0 )
-                    drawBorder( &p );
-            }
-        }
-
-        painter.drawPixmap( 0, 0, *d_data->backingStore );
-    }
-    else
-    {
-        if ( testAttribute(Qt::WA_StyledBackground ) )
-        {
-            if ( testAttribute( Qt::WA_OpaquePaintEvent ) )
-            {
-                qwtFillBackground( &painter, this );
-                drawCanvas( &painter, true );
-            }
-            else
-            {
-                drawCanvas( &painter, false );
-            }
-        }
-        else
-        {
-            if ( testAttribute( Qt::WA_OpaquePaintEvent ) )
-            {
-                if ( autoFillBackground() )
-                {
-                    qwtFillBackground( &painter, this );
-                    qwtDrawBackground( &painter, this );
-                }
-            }
-            else
-            {
-                if ( borderRadius() > 0.0 )
-                {
-                    QPainterPath clipPath;
-                    clipPath.addRect( rect() );
-                    clipPath = clipPath.subtracted( borderPath( rect() ) );
-
-                    painter.save();
-
-                    painter.setClipPath( clipPath, Qt::IntersectClip );
-                    qwtFillBackground( &painter, this );
-                    qwtDrawBackground( &painter, this );
-
-                    painter.restore();
-                }
-            }
-
-            drawCanvas( &painter, false );
-
-            if ( frameWidth() > 0 ) 
-                drawBorder( &painter );
-        }
-    }
-
-    if ( hasFocus() && focusIndicator() == CanvasFocusIndicator )
-        drawFocusIndicator( &painter );
-}
-
-void QwtPlotCanvas::drawCanvas( QPainter *painter, bool withBackground ) 
-{
-    bool hackStyledBackground = false;
-
-    if ( withBackground && testAttribute( Qt::WA_StyledBackground ) 
-        && testPaintAttribute( HackStyledBackground ) )
-    {
-        // Antialiasing rounded borders is done by
-        // inserting pixels with colors between the 
-        // border color and the color on the canvas,
-        // When the border is painted before the plot items
-        // these colors are interpolated for the canvas
-        // and the plot items need to be clipped excluding
-        // the anialiased pixels. In situations, where
-        // the plot items fill the area at the rounded
-        // borders this is noticeable.
-        // The only way to avoid these annoying "artefacts"
-        // is to paint the border on top of the plot items.
-
-        if ( d_data->styleSheet.hasBorder &&
-            !d_data->styleSheet.borderPath.isEmpty() )
-        {
-            // We have a border with at least one rounded corner
-            hackStyledBackground = true;
-        }
-    }
-
-    if ( withBackground )
-    {
-        painter->save();
-
-        if ( testAttribute( Qt::WA_StyledBackground ) )
-        {
-            if ( hackStyledBackground )
-            {
-                // paint background without border
-
-                painter->setPen( Qt::NoPen );
-                painter->setBrush( d_data->styleSheet.background.brush ); 
-                painter->setBrushOrigin( d_data->styleSheet.background.origin );
-                painter->setClipPath( d_data->styleSheet.borderPath );
-                painter->drawRect( contentsRect() );
-            }
-            else
-            {
-                qwtDrawStyledBackground( this, painter );
-            }
-        }
-        else if ( autoFillBackground() )
-        {
-            painter->setPen( Qt::NoPen );
-            painter->setBrush( palette().brush( backgroundRole() ) );
-
-            if ( d_data->borderRadius > 0.0 && ( rect() == frameRect() ) )
-            {
-                if ( frameWidth() > 0 )
-                {
-                    painter->setClipPath( borderPath( rect() ) );
-                    painter->drawRect( rect() );
-                }
-                else
-                {
-                    painter->setRenderHint( QPainter::Antialiasing, true );
-                    painter->drawPath( borderPath( rect() ) );
-                }
-            }
-            else
-            {
-                painter->drawRect( rect() );
-            }
-        }
-
-        painter->restore();
-    }
-
-    painter->save();
-
-    if ( !d_data->styleSheet.borderPath.isEmpty() )
-    {
-        painter->setClipPath( 
-            d_data->styleSheet.borderPath, Qt::IntersectClip );
-    }
-    else
-    {
-        if ( d_data->borderRadius > 0.0 )
-            painter->setClipPath( borderPath( frameRect() ), Qt::IntersectClip );
-        else
-            painter->setClipRect( contentsRect(), Qt::IntersectClip );
-    }
-
-    plot()->drawCanvas( painter );
-
-    painter->restore();
-
-    if ( withBackground && hackStyledBackground )
-    {
-        // Now paint the border on top
-        QStyleOptionFrame opt;
-        opt.initFrom(this);
-        style()->drawPrimitive( QStyle::PE_Frame, &opt, painter, this);
-    }
-}
-
-/*!
-  Draw the border of the plot canvas
-
-  \param painter Painter
-  \sa setBorderRadius()
-*/
-void QwtPlotCanvas::drawBorder( QPainter *painter )
-{
-    if ( d_data->borderRadius > 0 )
-    {
-        if ( frameWidth() > 0 )
-        {
-            QwtPainter::drawRoundedFrame( painter, QRectF( frameRect() ), 
-                d_data->borderRadius, d_data->borderRadius,
-                palette(), frameWidth(), frameStyle() );
-        }
-    }
-    else
-    {
-#if QT_VERSION >= 0x040500
-#if QT_VERSION < 0x050000
-        QStyleOptionFrameV3 opt;
-#else
-        QStyleOptionFrame opt;
-#endif
-        opt.init(this);
-
-        int frameShape  = frameStyle() & QFrame::Shape_Mask;
-        int frameShadow = frameStyle() & QFrame::Shadow_Mask;
-
-        opt.frameShape = QFrame::Shape( int( opt.frameShape ) | frameShape );
-#if 0
-        opt.rect = frameRect();
-#endif
-
-        switch (frameShape) 
-        {
-            case QFrame::Box:
-            case QFrame::HLine:
-            case QFrame::VLine:
-            case QFrame::StyledPanel:
-            case QFrame::Panel:
-            {
-                opt.lineWidth = lineWidth();
-                opt.midLineWidth = midLineWidth();
-                break; 
-            }
-            default: 
-            {
-                opt.lineWidth = frameWidth();
-                break;
-            }
-        }
-    
-        if ( frameShadow == Sunken )
-            opt.state |= QStyle::State_Sunken;
-        else if ( frameShadow == Raised )
-            opt.state |= QStyle::State_Raised;
-
-        style()->drawControl(QStyle::CE_ShapedFrame, &opt, painter, this);
-#else
-        drawFrame( painter );
-#endif
-    }
-}
-
-/*!
-  Resize event
-  \param event Resize event
-*/
-void QwtPlotCanvas::resizeEvent( QResizeEvent *event )
-{
-    QFrame::resizeEvent( event );
-    updateStyleSheetInfo();
-}
-
-/*!
-  Draw the focus indication
-  \param painter Painter
-*/
-void QwtPlotCanvas::drawFocusIndicator( QPainter *painter )
-{
-    const int margin = 1;
-
-    QRect focusRect = contentsRect();
-    focusRect.setRect( focusRect.x() + margin, focusRect.y() + margin,
-        focusRect.width() - 2 * margin, focusRect.height() - 2 * margin );
-
-    QwtPainter::drawFocusRect( painter, this, focusRect );
-}
-
-/*!
-   Invalidate the paint cache and repaint the canvas
-   \sa invalidatePaintCache()
-*/
-void QwtPlotCanvas::replot()
-{
-    invalidateBackingStore();
-
-    if ( testPaintAttribute( QwtPlotCanvas::ImmediatePaint ) )
-        repaint( contentsRect() );
-    else
-        update( contentsRect() );
-}
-
-//! Update the cached information about the current style sheet
-void QwtPlotCanvas::updateStyleSheetInfo()
-{
-    if ( !testAttribute(Qt::WA_StyledBackground ) )
-        return;
-
-    QwtStyleSheetRecorder recorder( size() );
-    
-    QPainter painter( &recorder );
-    
-    QStyleOption opt;
-    opt.initFrom(this);
-    style()->drawPrimitive( QStyle::PE_Widget, &opt, &painter, this);
-    
-    painter.end();
-
-    d_data->styleSheet.hasBorder = !recorder.border.rectList.isEmpty();
-    d_data->styleSheet.cornerRects = recorder.clipRects;
-
-    if ( recorder.background.path.isEmpty() )
-    {
-        if ( !recorder.border.rectList.isEmpty() )
-        {
-            d_data->styleSheet.borderPath = 
-                qwtCombinePathList( rect(), recorder.border.pathList );
-        }
-    }
-    else
-    {
-        d_data->styleSheet.borderPath = recorder.background.path;
-        d_data->styleSheet.background.brush = recorder.background.brush;
-        d_data->styleSheet.background.origin = recorder.background.origin;
-    }
-}
-
-/*!
-   Calculate the painter path for a styled or rounded border
-
-   When the canvas has no styled background or rounded borders
-   the painter path is empty.
-
-   \param rect Bounding rectangle of the canvas
-   \return Painter path, that can be used for clipping
-*/
-QPainterPath QwtPlotCanvas::borderPath( const QRect &rect ) const
-{
-    if ( testAttribute(Qt::WA_StyledBackground ) )
-    {
-        QwtStyleSheetRecorder recorder( rect.size() );
-
-        QPainter painter( &recorder );
-
-        QStyleOption opt;
-        opt.initFrom(this);
-        opt.rect = rect;
-        style()->drawPrimitive( QStyle::PE_Widget, &opt, &painter, this);
-
-        painter.end();
-
-        if ( !recorder.background.path.isEmpty() )
-            return recorder.background.path;
-
-        if ( !recorder.border.rectList.isEmpty() )
-            return qwtCombinePathList( rect, recorder.border.pathList );
-    }
-    else if ( d_data->borderRadius > 0.0 )
-    {
-        double fw2 = frameWidth() * 0.5;
-        QRectF r = QRectF(rect).adjusted( fw2, fw2, -fw2, -fw2 );
-
-        QPainterPath path;
-        path.addRoundedRect( r, d_data->borderRadius, d_data->borderRadius );
-        return path;
-    }
-    
-    return QPainterPath();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_canvas.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_canvas.h
deleted file mode 100644
index ccf7a6ae068eac0d809d4d18b863db13effb4846..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_canvas.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_CANVAS_H
-#define QWT_PLOT_CANVAS_H
-
-#include "qwt_global.h"
-#include <qframe.h>
-#include <qpainterpath.h>
-
-class QwtPlot;
-class QPixmap;
-
-/*!
-  \brief Canvas of a QwtPlot.
-  
-   Canvas is the widget where all plot items are displayed
-
-  \sa QwtPlot::setCanvas(), QwtPlotGLCanvas
-*/
-class QWT_EXPORT QwtPlotCanvas : public QFrame
-{
-    Q_OBJECT
-
-    Q_PROPERTY( double borderRadius READ borderRadius WRITE setBorderRadius )
-
-public:
-
-    /*!
-      \brief Paint attributes
-
-      The default setting enables BackingStore and Opaque.
-
-      \sa setPaintAttribute(), testPaintAttribute()
-     */
-    enum PaintAttribute
-    {
-        /*!
-          \brief Paint double buffered reusing the content 
-                 of the pixmap buffer when possible. 
-
-          Using a backing store might improve the performance
-          significantly, when working with widget overlays ( like rubber bands ).
-          Disabling the cache might improve the performance for
-          incremental paints (using QwtPlotDirectPainter ).
-
-          \sa backingStore(), invalidateBackingStore()
-         */
-        BackingStore = 1,
-
-        /*!
-          \brief Try to fill the complete contents rectangle
-                 of the plot canvas
-
-          When using styled backgrounds Qt assumes, that the
-          canvas doesn't fill its area completely 
-          ( f.e because of rounded borders ) and fills the area
-          below the canvas. When this is done with gradients it might
-          result in a serious performance bottleneck - depending on the size.
-
-          When the Opaque attribute is enabled the canvas tries to
-          identify the gaps with some heuristics and to fill those only. 
-
-          \warning Will not work for semitransparent backgrounds 
-         */
-        Opaque       = 2,
-
-        /*!
-          \brief Try to improve painting of styled backgrounds
-
-          QwtPlotCanvas supports the box model attributes for
-          customizing the layout with style sheets. Unfortunately
-          the design of Qt style sheets has no concept how to
-          handle backgrounds with rounded corners - beside of padding.
-
-          When HackStyledBackground is enabled the plot canvas tries
-          to separate the background from the background border
-          by reverse engineering to paint the background before and
-          the border after the plot items. In this order the border
-          gets perfectly antialiased and you can avoid some pixel
-          artifacts in the corners.
-         */
-        HackStyledBackground = 4,
-
-        /*!
-          When ImmediatePaint is set replot() calls repaint()
-          instead of update().
-
-          \sa replot(), QWidget::repaint(), QWidget::update()
-         */
-        ImmediatePaint = 8
-    };
-
-    //! Paint attributes
-    typedef QFlags<PaintAttribute> PaintAttributes;
-
-    /*!
-      \brief Focus indicator
-      The default setting is NoFocusIndicator
-      \sa setFocusIndicator(), focusIndicator(), drawFocusIndicator()
-    */
-
-    enum FocusIndicator
-    {
-        //! Don't paint a focus indicator
-        NoFocusIndicator,
-
-        /*!
-          The focus is related to the complete canvas.
-          Paint the focus indicator using drawFocusIndicator()
-         */
-        CanvasFocusIndicator,
-
-        /*!
-          The focus is related to an item (curve, point, ...) on
-          the canvas. It is up to the application to display a
-          focus indication using f.e. highlighting.
-         */
-        ItemFocusIndicator
-    };
-
-    explicit QwtPlotCanvas( QwtPlot * = NULL );
-    virtual ~QwtPlotCanvas();
-
-    QwtPlot *plot();
-    const QwtPlot *plot() const;
-
-    void setFocusIndicator( FocusIndicator );
-    FocusIndicator focusIndicator() const;
-
-    void setBorderRadius( double );
-    double borderRadius() const;
-
-    void setPaintAttribute( PaintAttribute, bool on = true );
-    bool testPaintAttribute( PaintAttribute ) const;
-
-    const QPixmap *backingStore() const;
-    void invalidateBackingStore();
-
-    virtual bool event( QEvent * );
-
-    Q_INVOKABLE QPainterPath borderPath( const QRect & ) const;
-
-public Q_SLOTS:
-    void replot();
-
-protected:
-    virtual void paintEvent( QPaintEvent * );
-    virtual void resizeEvent( QResizeEvent * );
-
-    virtual void drawFocusIndicator( QPainter * );
-    virtual void drawBorder( QPainter * );
-
-    void updateStyleSheetInfo();
-
-private:
-    void drawCanvas( QPainter *, bool withBackground );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotCanvas::PaintAttributes )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_curve.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_curve.cpp
deleted file mode 100644
index a29e42ec8d98a5922fdbfb667834e2e9b1a9dd16..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_curve.cpp
+++ /dev/null
@@ -1,1204 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_curve.h"
-#include "qwt_point_data.h"
-#include "qwt_math.h"
-#include "qwt_clipper.h"
-#include "qwt_painter.h"
-#include "qwt_scale_map.h"
-#include "qwt_plot.h"
-#include "qwt_curve_fitter.h"
-#include "qwt_symbol.h"
-#include "qwt_point_mapper.h"
-#include <qpainter.h>
-#include <qpixmap.h>
-#include <qalgorithms.h>
-#include <qmath.h>
-
-static void qwtUpdateLegendIconSize( QwtPlotCurve *curve )
-{
-    if ( curve->symbol() && 
-        curve->testLegendAttribute( QwtPlotCurve::LegendShowSymbol ) )
-    {
-        QSize sz = curve->symbol()->boundingRect().size();
-        sz += QSize( 2, 2 ); // margin
-
-        if ( curve->testLegendAttribute( QwtPlotCurve::LegendShowLine ) )
-        {
-            // Avoid, that the line is completely covered by the symbol
-
-            int w = qCeil( 1.5 * sz.width() );
-            if ( w % 2 )
-                w++;
-
-            sz.setWidth( qMax( 8, w ) );
-        }
-
-        curve->setLegendIconSize( sz );
-    }
-}
-
-static int qwtVerifyRange( int size, int &i1, int &i2 )
-{
-    if ( size < 1 )
-        return 0;
-
-    i1 = qBound( 0, i1, size - 1 );
-    i2 = qBound( 0, i2, size - 1 );
-
-    if ( i1 > i2 )
-        qSwap( i1, i2 );
-
-    return ( i2 - i1 + 1 );
-}
-
-class QwtPlotCurve::PrivateData
-{
-public:
-    PrivateData():
-        style( QwtPlotCurve::Lines ),
-        baseline( 0.0 ),
-        symbol( NULL ),
-        attributes( 0 ),
-        paintAttributes( 
-            QwtPlotCurve::ClipPolygons | QwtPlotCurve::FilterPoints ),
-        legendAttributes( 0 )
-    {
-        pen = QPen( Qt::black );
-        curveFitter = new QwtSplineCurveFitter;
-    }
-
-    ~PrivateData()
-    {
-        delete symbol;
-        delete curveFitter;
-    }
-
-    QwtPlotCurve::CurveStyle style;
-    double baseline;
-
-    const QwtSymbol *symbol;
-    QwtCurveFitter *curveFitter;
-
-    QPen pen;
-    QBrush brush;
-
-    QwtPlotCurve::CurveAttributes attributes;
-    QwtPlotCurve::PaintAttributes paintAttributes;
-
-    QwtPlotCurve::LegendAttributes legendAttributes;
-};
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotCurve::QwtPlotCurve( const QwtText &title ):
-    QwtPlotSeriesItem( title )
-{
-    init();
-}
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotCurve::QwtPlotCurve( const QString &title ):
-    QwtPlotSeriesItem( QwtText( title ) )
-{
-    init();
-}
-
-//! Destructor
-QwtPlotCurve::~QwtPlotCurve()
-{
-    delete d_data;
-}
-
-//! Initialize internal members
-void QwtPlotCurve::init()
-{
-    setItemAttribute( QwtPlotItem::Legend );
-    setItemAttribute( QwtPlotItem::AutoScale );
-
-    d_data = new PrivateData;
-    setData( new QwtPointSeriesData() );
-
-    setZ( 20.0 );
-}
-
-//! \return QwtPlotItem::Rtti_PlotCurve
-int QwtPlotCurve::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotCurve;
-}
-
-/*!
-  Specify an attribute how to draw the curve
-
-  \param attribute Paint attribute
-  \param on On/Off
-  \sa testPaintAttribute()
-*/
-void QwtPlotCurve::setPaintAttribute( PaintAttribute attribute, bool on )
-{
-    if ( on )
-        d_data->paintAttributes |= attribute;
-    else
-        d_data->paintAttributes &= ~attribute;
-}
-
-/*!
-    \return True, when attribute is enabled
-    \sa setPaintAttribute()
-*/
-bool QwtPlotCurve::testPaintAttribute( PaintAttribute attribute ) const
-{
-    return ( d_data->paintAttributes & attribute );
-}
-
-/*!
-  Specify an attribute how to draw the legend icon
-
-  \param attribute Attribute
-  \param on On/Off
-  /sa testLegendAttribute(). legendIcon()
-*/
-void QwtPlotCurve::setLegendAttribute( LegendAttribute attribute, bool on )
-{
-    if ( on != testLegendAttribute( attribute ) )
-    {
-        if ( on )
-            d_data->legendAttributes |= attribute;
-        else
-            d_data->legendAttributes &= ~attribute;
-
-        qwtUpdateLegendIconSize( this );
-        legendChanged();
-    }
-}
-
-/*!
-  \return True, when attribute is enabled
-  \sa setLegendAttribute()
-*/
-bool QwtPlotCurve::testLegendAttribute( LegendAttribute attribute ) const
-{
-    return ( d_data->legendAttributes & attribute );
-}
-
-/*!
-  Set the curve's drawing style
-
-  \param style Curve style
-  \sa style()
-*/
-void QwtPlotCurve::setStyle( CurveStyle style )
-{
-    if ( style != d_data->style )
-    {
-        d_data->style = style;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Style of the curve
-  \sa setStyle()
-*/
-QwtPlotCurve::CurveStyle QwtPlotCurve::style() const
-{
-    return d_data->style;
-}
-
-/*!
-  \brief Assign a symbol
-
-  The curve will take the ownership of the symbol, hence the previously
-  set symbol will be delete by setting a new one. If \p symbol is 
-  \c NULL no symbol will be drawn.
-
-  \param symbol Symbol
-  \sa symbol()
-*/
-void QwtPlotCurve::setSymbol( QwtSymbol *symbol )
-{
-    if ( symbol != d_data->symbol )
-    {
-        delete d_data->symbol;
-        d_data->symbol = symbol;
-
-        qwtUpdateLegendIconSize( this );
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Current symbol or NULL, when no symbol has been assigned
-  \sa setSymbol()
-*/
-const QwtSymbol *QwtPlotCurve::symbol() const
-{
-    return d_data->symbol;
-}
-
-/*!
-  Build and assign a pen
-
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-
-  \sa pen(), brush()
- */
-void QwtPlotCurve::setPen( const QColor &color, qreal width, Qt::PenStyle style )
-{
-    setPen( QPen( color, width, style ) );
-}
-
-/*!
-  Assign a pen
-
-  \param pen New pen
-  \sa pen(), brush()
-*/
-void QwtPlotCurve::setPen( const QPen &pen )
-{
-    if ( pen != d_data->pen )
-    {
-        d_data->pen = pen;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Pen used to draw the lines
-  \sa setPen(), brush()
-*/
-const QPen& QwtPlotCurve::pen() const
-{
-    return d_data->pen;
-}
-
-/*!
-  \brief Assign a brush.
-
-   In case of brush.style() != QBrush::NoBrush
-   and style() != QwtPlotCurve::Sticks
-   the area between the curve and the baseline will be filled.
-
-   In case !brush.color().isValid() the area will be filled by
-   pen.color(). The fill algorithm simply connects the first and the
-   last curve point to the baseline. So the curve data has to be sorted
-   (ascending or descending).
-
-  \param brush New brush
-  \sa brush(), setBaseline(), baseline()
-*/
-void QwtPlotCurve::setBrush( const QBrush &brush )
-{
-    if ( brush != d_data->brush )
-    {
-        d_data->brush = brush;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Brush used to fill the area between lines and the baseline
-  \sa setBrush(), setBaseline(), baseline()
-*/
-const QBrush& QwtPlotCurve::brush() const
-{
-    return d_data->brush;
-}
-
-/*!
-  Draw an interval of the curve
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rectangle of the canvas
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted. If to < 0 the
-         curve will be painted to its last point.
-
-  \sa drawCurve(), drawSymbols(),
-*/
-void QwtPlotCurve::drawSeries( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    const size_t numSamples = dataSize();
-
-    if ( !painter || numSamples <= 0 )
-        return;
-
-    if ( to < 0 )
-        to = numSamples - 1;
-
-    if ( qwtVerifyRange( numSamples, from, to ) > 0 )
-    {
-        painter->save();
-        painter->setPen( d_data->pen );
-
-        /*
-          Qt 4.0.0 is slow when drawing lines, but it's even
-          slower when the painter has a brush. So we don't
-          set the brush before we really need it.
-         */
-
-        drawCurve( painter, d_data->style, xMap, yMap, canvasRect, from, to );
-        painter->restore();
-
-        if ( d_data->symbol &&
-            ( d_data->symbol->style() != QwtSymbol::NoSymbol ) )
-        {
-            painter->save();
-            drawSymbols( painter, *d_data->symbol,
-                xMap, yMap, canvasRect, from, to );
-            painter->restore();
-        }
-    }
-}
-
-/*!
-  \brief Draw the line part (without symbols) of a curve interval.
-  \param painter Painter
-  \param style curve style, see QwtPlotCurve::CurveStyle
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param from index of the first point to be painted
-  \param to index of the last point to be painted
-  \sa draw(), drawDots(), drawLines(), drawSteps(), drawSticks()
-*/
-void QwtPlotCurve::drawCurve( QPainter *painter, int style,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    switch ( style )
-    {
-        case Lines:
-            if ( testCurveAttribute( Fitted ) )
-            {
-                // we always need the complete
-                // curve for fitting
-                from = 0;
-                to = dataSize() - 1;
-            }
-            drawLines( painter, xMap, yMap, canvasRect, from, to );
-            break;
-        case Sticks:
-            drawSticks( painter, xMap, yMap, canvasRect, from, to );
-            break;
-        case Steps:
-            drawSteps( painter, xMap, yMap, canvasRect, from, to );
-            break;
-        case Dots:
-            drawDots( painter, xMap, yMap, canvasRect, from, to );
-            break;
-        case NoCurve:
-        default:
-            break;
-    }
-}
-
-/*!
-  \brief Draw lines
-
-  If the CurveAttribute Fitted is enabled a QwtCurveFitter tries
-  to interpolate/smooth the curve, before it is painted.
-
-  \param painter Painter
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param from index of the first point to be painted
-  \param to index of the last point to be painted
-
-  \sa setCurveAttribute(), setCurveFitter(), draw(),
-      drawLines(), drawDots(), drawSteps(), drawSticks()
-*/
-void QwtPlotCurve::drawLines( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    if ( from > to )
-        return;
-
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-    const bool doFit = ( d_data->attributes & Fitted ) && d_data->curveFitter;
-    const bool doFill = ( d_data->brush.style() != Qt::NoBrush )
-            && ( d_data->brush.color().alpha() > 0 );
-
-    QRectF clipRect;
-    if ( d_data->paintAttributes & ClipPolygons )
-    {
-        qreal pw = qMax( qreal( 1.0 ), painter->pen().widthF());
-        clipRect = canvasRect.adjusted(-pw, -pw, pw, pw);
-    }
-
-    bool doIntegers = false;
-
-#if QT_VERSION < 0x040800
-
-    // For Qt <= 4.7 the raster paint engine is significantly faster
-    // for rendering QPolygon than for QPolygonF. So let's
-    // see if we can use it.
-
-    if ( painter->paintEngine()->type() == QPaintEngine::Raster )
-    {
-        // In case of filling or fitting performance doesn't count
-        // because both operations are much more expensive
-        // then drawing the polyline itself
-
-        if ( !doFit && !doFill )
-            doIntegers = true; 
-    }
-#endif
-
-    const bool noDuplicates = d_data->paintAttributes & FilterPoints;
-
-    QwtPointMapper mapper;
-    mapper.setFlag( QwtPointMapper::RoundPoints, doAlign );
-    mapper.setFlag( QwtPointMapper::WeedOutPoints, noDuplicates );
-    mapper.setBoundingRect( canvasRect );
-
-    if ( doIntegers )
-    {
-        QPolygon polyline = mapper.toPolygon( 
-            xMap, yMap, data(), from, to );
-
-        if ( d_data->paintAttributes & ClipPolygons )
-        {
-            polyline = QwtClipper::clipPolygon( 
-                clipRect.toAlignedRect(), polyline, false );
-        }
-
-        QwtPainter::drawPolyline( painter, polyline );
-    }
-    else
-    {
-        QPolygonF polyline = mapper.toPolygonF( xMap, yMap, data(), from, to );
-
-        if ( doFit )
-            polyline = d_data->curveFitter->fitCurve( polyline );
-
-        if ( doFill )
-        {
-            if ( painter->pen().style() != Qt::NoPen )
-            {
-                // here we are wasting memory for the filled copy,
-                // do polygon clipping twice etc .. TODO
-
-                QPolygonF filled = polyline;
-                fillCurve( painter, xMap, yMap, canvasRect, filled );
-                filled.clear();
-
-                if ( d_data->paintAttributes & ClipPolygons )
-                {
-                    polyline = QwtClipper::clipPolygonF( 
-                        clipRect, polyline, false );
-                }
-
-                QwtPainter::drawPolyline( painter, polyline );
-            }
-            else
-            {
-                fillCurve( painter, xMap, yMap, canvasRect, polyline );
-            }
-        }
-        else
-        {
-            if ( d_data->paintAttributes & ClipPolygons )
-            {
-                polyline = QwtClipper::clipPolygonF(
-                    clipRect, polyline, false );
-            }
-
-            QwtPainter::drawPolyline( painter, polyline );
-        }
-    }
-}
-
-/*!
-  Draw sticks
-
-  \param painter Painter
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param from index of the first point to be painted
-  \param to index of the last point to be painted
-
-  \sa draw(), drawCurve(), drawDots(), drawLines(), drawSteps()
-*/
-void QwtPlotCurve::drawSticks( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &, int from, int to ) const
-{
-    painter->save();
-    painter->setRenderHint( QPainter::Antialiasing, false );
-
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    double x0 = xMap.transform( d_data->baseline );
-    double y0 = yMap.transform( d_data->baseline );
-    if ( doAlign )
-    {
-        x0 = qRound( x0 );
-        y0 = qRound( y0 );
-    }
-
-    const Qt::Orientation o = orientation();
-
-    const QwtSeriesData<QPointF> *series = data();
-
-    for ( int i = from; i <= to; i++ )
-    {
-        const QPointF sample = series->sample( i );
-        double xi = xMap.transform( sample.x() );
-        double yi = yMap.transform( sample.y() );
-        if ( doAlign )
-        {
-            xi = qRound( xi );
-            yi = qRound( yi );
-        }
-
-        if ( o == Qt::Horizontal )
-            QwtPainter::drawLine( painter, x0, yi, xi, yi );
-        else
-            QwtPainter::drawLine( painter, xi, y0, xi, yi );
-    }
-
-    painter->restore();
-}
-
-/*!
-  Draw dots
-
-  \param painter Painter
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param from index of the first point to be painted
-  \param to index of the last point to be painted
-
-  \sa draw(), drawCurve(), drawSticks(), drawLines(), drawSteps()
-*/
-void QwtPlotCurve::drawDots( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    const QColor color = painter->pen().color();
-
-    if ( painter->pen().style() == Qt::NoPen || color.alpha() == 0 )
-    {
-        return;
-    }
-
-    const bool doFill = ( d_data->brush.style() != Qt::NoBrush )
-            && ( d_data->brush.color().alpha() > 0 );
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    QwtPointMapper mapper;
-    mapper.setBoundingRect( canvasRect );
-    mapper.setFlag( QwtPointMapper::RoundPoints, doAlign );
-
-    if ( d_data->paintAttributes & FilterPoints )
-    {
-        if ( ( color.alpha() == 255 )
-            && !( painter->renderHints() & QPainter::Antialiasing ) )
-        {
-            mapper.setFlag( QwtPointMapper::WeedOutPoints, true );
-        }
-    }
-
-    if ( doFill )
-    {
-        mapper.setFlag( QwtPointMapper::WeedOutPoints, false );
-
-        QPolygonF points = mapper.toPointsF( 
-            xMap, yMap, data(), from, to );
-
-        QwtPainter::drawPoints( painter, points );
-        fillCurve( painter, xMap, yMap, canvasRect, points );
-    }
-    else if ( d_data->paintAttributes & ImageBuffer )
-    {
-        const QImage image = mapper.toImage( xMap, yMap,
-            data(), from, to, d_data->pen, 
-            painter->testRenderHint( QPainter::Antialiasing ),
-            renderThreadCount() );
-
-        painter->drawImage( canvasRect.toAlignedRect(), image );
-    }
-    else if ( d_data->paintAttributes & MinimizeMemory )
-    {
-        const QwtSeriesData<QPointF> *series = data();
-
-        for ( int i = from; i <= to; i++ )
-        {
-            const QPointF sample = series->sample( i );
-
-            double xi = xMap.transform( sample.x() );
-            double yi = yMap.transform( sample.y() );
-
-            if ( doAlign )
-            {
-                xi = qRound( xi );
-                yi = qRound( yi );
-            }
-
-            QwtPainter::drawPoint( painter, QPointF( xi, yi ) );
-        }
-    }
-    else
-    {
-        if ( doAlign )
-        {
-            const QPolygon points = mapper.toPoints(
-                xMap, yMap, data(), from, to ); 
-
-            QwtPainter::drawPoints( painter, points );
-        }
-        else
-        {
-            const QPolygonF points = mapper.toPointsF( 
-                xMap, yMap, data(), from, to );
-
-            QwtPainter::drawPoints( painter, points );
-        }
-    }
-}
-
-/*!
-  Draw step function
-
-  The direction of the steps depends on Inverted attribute.
-
-  \param painter Painter
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param from index of the first point to be painted
-  \param to index of the last point to be painted
-
-  \sa CurveAttribute, setCurveAttribute(),
-      draw(), drawCurve(), drawDots(), drawLines(), drawSticks()
-*/
-void QwtPlotCurve::drawSteps( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    QPolygonF polygon( 2 * ( to - from ) + 1 );
-    QPointF *points = polygon.data();
-
-    bool inverted = orientation() == Qt::Vertical;
-    if ( d_data->attributes & Inverted )
-        inverted = !inverted;
-
-    const QwtSeriesData<QPointF> *series = data();
-
-    int i, ip;
-    for ( i = from, ip = 0; i <= to; i++, ip += 2 )
-    {
-        const QPointF sample = series->sample( i );
-        double xi = xMap.transform( sample.x() );
-        double yi = yMap.transform( sample.y() );
-        if ( doAlign )
-        {
-            xi = qRound( xi );
-            yi = qRound( yi );
-        }
-
-        if ( ip > 0 )
-        {
-            const QPointF &p0 = points[ip - 2];
-            QPointF &p = points[ip - 1];
-
-            if ( inverted )
-            {
-                p.rx() = p0.x();
-                p.ry() = yi;
-            }
-            else
-            {
-                p.rx() = xi;
-                p.ry() = p0.y();
-            }
-        }
-
-        points[ip].rx() = xi;
-        points[ip].ry() = yi;
-    }
-
-    if ( d_data->paintAttributes & ClipPolygons )
-    {
-        const QPolygonF clipped = QwtClipper::clipPolygonF( 
-            canvasRect, polygon, false );
-
-        QwtPainter::drawPolyline( painter, clipped );
-    }
-    else
-    {
-        QwtPainter::drawPolyline( painter, polygon );
-    }
-
-    if ( d_data->brush.style() != Qt::NoBrush )
-        fillCurve( painter, xMap, yMap, canvasRect, polygon );
-}
-
-
-/*!
-  Specify an attribute for drawing the curve
-
-  \param attribute Curve attribute
-  \param on On/Off
-
-  /sa testCurveAttribute(), setCurveFitter()
-*/
-void QwtPlotCurve::setCurveAttribute( CurveAttribute attribute, bool on )
-{
-    if ( bool( d_data->attributes & attribute ) == on )
-        return;
-
-    if ( on )
-        d_data->attributes |= attribute;
-    else
-        d_data->attributes &= ~attribute;
-
-    itemChanged();
-}
-
-/*!
-    \return true, if attribute is enabled
-    \sa setCurveAttribute()
-*/
-bool QwtPlotCurve::testCurveAttribute( CurveAttribute attribute ) const
-{
-    return d_data->attributes & attribute;
-}
-
-/*!
-  Assign a curve fitter
-
-  The curve fitter "smooths" the curve points, when the Fitted
-  CurveAttribute is set. setCurveFitter(NULL) also disables curve fitting.
-
-  The curve fitter operates on the translated points ( = widget coordinates)
-  to be functional for logarithmic scales. Obviously this is less performant
-  for fitting algorithms, that reduce the number of points.
-
-  For situations, where curve fitting is used to improve the performance
-  of painting huge series of points it might be better to execute the fitter
-  on the curve points once and to cache the result in the QwtSeriesData object.
-
-  \param curveFitter() Curve fitter
-  \sa Fitted
-*/
-void QwtPlotCurve::setCurveFitter( QwtCurveFitter *curveFitter )
-{
-    delete d_data->curveFitter;
-    d_data->curveFitter = curveFitter;
-
-    itemChanged();
-}
-
-/*!
-  Get the curve fitter. If curve fitting is disabled NULL is returned.
-
-  \return Curve fitter
-  \sa setCurveFitter(), Fitted
-*/
-QwtCurveFitter *QwtPlotCurve::curveFitter() const
-{
-    return d_data->curveFitter;
-}
-
-/*!
-  Fill the area between the curve and the baseline with
-  the curve brush
-
-  \param painter Painter
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param polygon Polygon - will be modified !
-
-  \sa setBrush(), setBaseline(), setStyle()
-*/
-void QwtPlotCurve::fillCurve( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, QPolygonF &polygon ) const
-{
-    if ( d_data->brush.style() == Qt::NoBrush )
-        return;
-
-    closePolyline( painter, xMap, yMap, polygon );
-    if ( polygon.count() <= 2 ) // a line can't be filled
-        return;
-
-    QBrush brush = d_data->brush;
-    if ( !brush.color().isValid() )
-        brush.setColor( d_data->pen.color() );
-
-    if ( d_data->paintAttributes & ClipPolygons )
-        polygon = QwtClipper::clipPolygonF( canvasRect, polygon, true );
-
-    painter->save();
-
-    painter->setPen( Qt::NoPen );
-    painter->setBrush( brush );
-
-    QwtPainter::drawPolygon( painter, polygon );
-
-    painter->restore();
-}
-
-/*!
-  \brief Complete a polygon to be a closed polygon including the 
-         area between the original polygon and the baseline.
-
-  \param painter Painter
-  \param xMap X map
-  \param yMap Y map
-  \param polygon Polygon to be completed
-*/
-void QwtPlotCurve::closePolyline( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    QPolygonF &polygon ) const
-{
-    if ( polygon.size() < 2 )
-        return;
-
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    double baseline = d_data->baseline;
-    
-    if ( orientation() == Qt::Vertical )
-    {
-        if ( yMap.transformation() )
-            baseline = yMap.transformation()->bounded( baseline );
-
-        double refY = yMap.transform( baseline );
-        if ( doAlign )
-            refY = qRound( refY );
-
-        polygon += QPointF( polygon.last().x(), refY );
-        polygon += QPointF( polygon.first().x(), refY );
-    }
-    else
-    {
-        if ( xMap.transformation() )
-            baseline = xMap.transformation()->bounded( baseline );
-
-        double refX = xMap.transform( baseline );
-        if ( doAlign )
-            refX = qRound( refX );
-
-        polygon += QPointF( refX, polygon.last().y() );
-        polygon += QPointF( refX, polygon.first().y() );
-    }
-}
-
-/*!
-  Draw symbols
-
-  \param painter Painter
-  \param symbol Curve symbol
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted
-
-  \sa setSymbol(), drawSeries(), drawCurve()
-*/
-void QwtPlotCurve::drawSymbols( QPainter *painter, const QwtSymbol &symbol,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    QwtPointMapper mapper;
-    mapper.setFlag( QwtPointMapper::RoundPoints, 
-        QwtPainter::roundingAlignment( painter ) );
-    mapper.setFlag( QwtPointMapper::WeedOutPoints, 
-        testPaintAttribute( QwtPlotCurve::FilterPoints ) );
-    mapper.setBoundingRect( canvasRect );
-
-    const int chunkSize = 500;
-
-    for ( int i = from; i <= to; i += chunkSize )
-    {
-        const int n = qMin( chunkSize, to - i + 1 );
-
-        const QPolygonF points = mapper.toPointsF( xMap, yMap,
-            data(), i, i + n - 1 );
-
-        if ( points.size() > 0 )
-            symbol.drawSymbols( painter, points );
-    }
-}
-
-/*!
-  \brief Set the value of the baseline
-
-  The baseline is needed for filling the curve with a brush or
-  the Sticks drawing style.
-
-  The interpretation of the baseline depends on the orientation().
-  With Qt::Horizontal, the baseline is interpreted as a horizontal line
-  at y = baseline(), with Qt::Vertical, it is interpreted as a vertical
-  line at x = baseline().
-
-  The default value is 0.0.
-
-  \param value Value of the baseline
-  \sa baseline(), setBrush(), setStyle(), QwtPlotAbstractSeriesItem::orientation()
-*/
-void QwtPlotCurve::setBaseline( double value )
-{
-    if ( d_data->baseline != value )
-    {
-        d_data->baseline = value;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Value of the baseline
-  \sa setBaseline()
-*/
-double QwtPlotCurve::baseline() const
-{
-    return d_data->baseline;
-}
-
-/*!
-  Find the closest curve point for a specific position
-
-  \param pos Position, where to look for the closest curve point
-  \param dist If dist != NULL, closestPoint() returns the distance between
-              the position and the closest curve point
-  \return Index of the closest curve point, or -1 if none can be found
-          ( f.e when the curve has no points )
-  \note closestPoint() implements a dumb algorithm, that iterates
-        over all points
-*/
-int QwtPlotCurve::closestPoint( const QPoint &pos, double *dist ) const
-{
-    const size_t numSamples = dataSize();
-
-    if ( plot() == NULL || numSamples <= 0 )
-        return -1;
-
-    const QwtSeriesData<QPointF> *series = data();
-
-    const QwtScaleMap xMap = plot()->canvasMap( xAxis() );
-    const QwtScaleMap yMap = plot()->canvasMap( yAxis() );
-
-    int index = -1;
-    double dmin = 1.0e10;
-
-    for ( uint i = 0; i < numSamples; i++ )
-    {
-        const QPointF sample = series->sample( i );
-
-        const double cx = xMap.transform( sample.x() ) - pos.x();
-        const double cy = yMap.transform( sample.y() ) - pos.y();
-
-        const double f = qwtSqr( cx ) + qwtSqr( cy );
-        if ( f < dmin )
-        {
-            index = i;
-            dmin = f;
-        }
-    }
-    if ( dist )
-        *dist = qSqrt( dmin );
-
-    return index;
-}
-
-/*!
-   \return Icon representing the curve on the legend
-
-   \param index Index of the legend entry 
-                ( ignored as there is only one )
-   \param size Icon size
-
-   \sa QwtPlotItem::setLegendIconSize(), QwtPlotItem::legendData()
- */
-QwtGraphic QwtPlotCurve::legendIcon( int index, 
-    const QSizeF &size ) const
-{
-    Q_UNUSED( index );
-
-    if ( size.isEmpty() )
-        return QwtGraphic();
-
-    QwtGraphic graphic;
-    graphic.setDefaultSize( size );
-    graphic.setRenderHint( QwtGraphic::RenderPensUnscaled, true );
-
-    QPainter painter( &graphic );
-    painter.setRenderHint( QPainter::Antialiasing,
-        testRenderHint( QwtPlotItem::RenderAntialiased ) );
-
-    if ( d_data->legendAttributes == 0 ||
-        d_data->legendAttributes & QwtPlotCurve::LegendShowBrush )
-    {
-        QBrush brush = d_data->brush;
-
-        if ( brush.style() == Qt::NoBrush &&
-            d_data->legendAttributes == 0 )
-        {
-            if ( style() != QwtPlotCurve::NoCurve )
-            {
-                brush = QBrush( pen().color() );
-            }
-            else if ( d_data->symbol &&
-                ( d_data->symbol->style() != QwtSymbol::NoSymbol ) )
-            {
-                brush = QBrush( d_data->symbol->pen().color() );
-            }
-        }
-
-        if ( brush.style() != Qt::NoBrush )
-        {
-            QRectF r( 0, 0, size.width(), size.height() );
-            painter.fillRect( r, brush );
-        }
-    }
-
-    if ( d_data->legendAttributes & QwtPlotCurve::LegendShowLine )
-    {
-        if ( pen() != Qt::NoPen )
-        {
-            QPen pn = pen();
-            pn.setCapStyle( Qt::FlatCap );
-
-            painter.setPen( pn );
-
-            const double y = 0.5 * size.height();
-            QwtPainter::drawLine( &painter, 0.0, y, size.width(), y );
-        }
-    }
-
-    if ( d_data->legendAttributes & QwtPlotCurve::LegendShowSymbol )
-    {
-        if ( d_data->symbol )
-        {
-            QRectF r( 0, 0, size.width(), size.height() );
-            d_data->symbol->drawSymbol( &painter, r );
-        }
-    }
-
-    return graphic;
-}
-
-/*!
-  Initialize data with an array of points.
-
-  \param samples Vector of points
-  \note QVector is implicitly shared
-  \note QPolygonF is derived from QVector<QPointF>
-*/
-void QwtPlotCurve::setSamples( const QVector<QPointF> &samples )
-{
-    setData( new QwtPointSeriesData( samples ) );
-}
-
-/*!
-  Assign a series of points
-
-  setSamples() is just a wrapper for setData() without any additional
-  value - beside that it is easier to find for the developer.
-
-  \param data Data
-  \warning The item takes ownership of the data object, deleting
-           it when its not used anymore.
-*/
-void QwtPlotCurve::setSamples( QwtSeriesData<QPointF> *data )
-{
-    setData( data );
-}
-
-#ifndef QWT_NO_COMPAT
-
-/*!
-  \brief Initialize the data by pointing to memory blocks which 
-         are not managed by QwtPlotCurve.
-
-  setRawSamples is provided for efficiency. 
-  It is important to keep the pointers
-  during the lifetime of the underlying QwtCPointerData class.
-
-  \param xData pointer to x data
-  \param yData pointer to y data
-  \param size size of x and y
-
-  \sa QwtCPointerData
-*/
-void QwtPlotCurve::setRawSamples( 
-    const double *xData, const double *yData, int size )
-{
-    setData( new QwtCPointerData( xData, yData, size ) );
-}
-
-/*!
-  Set data by copying x- and y-values from specified memory blocks.
-  Contrary to setRawSamples(), this function makes a 'deep copy' of
-  the data.
-
-  \param xData pointer to x values
-  \param yData pointer to y values
-  \param size size of xData and yData
-
-  \sa QwtPointArrayData
-*/
-void QwtPlotCurve::setSamples( 
-    const double *xData, const double *yData, int size )
-{
-    setData( new QwtPointArrayData( xData, yData, size ) );
-}
-
-/*!
-  \brief Initialize data with x- and y-arrays (explicitly shared)
-
-  \param xData x data
-  \param yData y data
-
-  \sa QwtPointArrayData
-*/
-void QwtPlotCurve::setSamples( const QVector<double> &xData,
-    const QVector<double> &yData )
-{
-    setData( new QwtPointArrayData( xData, yData ) );
-}
-
-#endif // !QWT_NO_COMPAT
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_curve.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_curve.h
deleted file mode 100644
index cfba1fb812f347d33c64828cc1306c18963023b5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_curve.h
+++ /dev/null
@@ -1,337 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_CURVE_H
-#define QWT_PLOT_CURVE_H
-
-#include "qwt_global.h"
-#include "qwt_plot_seriesitem.h"
-#include "qwt_series_data.h"
-#include "qwt_text.h"
-#include <qpen.h>
-#include <qstring.h>
-
-class QPainter;
-class QPolygonF;
-class QwtScaleMap;
-class QwtSymbol;
-class QwtCurveFitter;
-
-/*!
-  \brief A plot item, that represents a series of points
-
-  A curve is the representation of a series of points in the x-y plane.
-  It supports different display styles, interpolation ( f.e. spline )
-  and symbols.
-
-  \par Usage
-  <dl><dt>a) Assign curve properties</dt>
-  <dd>When a curve is created, it is configured to draw black solid lines
-  with in QwtPlotCurve::Lines style and no symbols. 
-  You can change this by calling
-  setPen(), setStyle() and setSymbol().</dd>
-  <dt>b) Connect/Assign data.</dt>
-  <dd>QwtPlotCurve gets its points using a QwtSeriesData object offering
-  a bridge to the real storage of the points ( like QAbstractItemModel ).
-  There are several convenience classes derived from QwtSeriesData, that also store
-  the points inside ( like QStandardItemModel ). QwtPlotCurve also offers
-  a couple of variations of setSamples(), that build QwtSeriesData objects from
-  arrays internally.</dd>
-  <dt>c) Attach the curve to a plot</dt>
-  <dd>See QwtPlotItem::attach()
-  </dd></dl>
-
-  \par Example:
-  see examples/bode
-
-  \sa QwtPointSeriesData, QwtSymbol, QwtScaleMap
-*/
-class QWT_EXPORT QwtPlotCurve: 
-    public QwtPlotSeriesItem, public QwtSeriesStore<QPointF>
-{
-public:
-    /*!
-        Curve styles.
-        \sa setStyle(), style()
-    */
-    enum CurveStyle
-    {
-        /*!
-           Don't draw a curve. Note: This doesn't affect the symbols.
-        */
-        NoCurve = -1,
-
-        /*!
-           Connect the points with straight lines. The lines might
-           be interpolated depending on the 'Fitted' attribute. Curve
-           fitting can be configured using setCurveFitter().
-        */
-        Lines,
-
-        /*!
-           Draw vertical or horizontal sticks ( depending on the 
-           orientation() ) from a baseline which is defined by setBaseline().
-        */
-        Sticks,
-
-        /*!
-           Connect the points with a step function. The step function
-           is drawn from the left to the right or vice versa,
-           depending on the QwtPlotCurve::Inverted attribute.
-        */
-        Steps,
-
-        /*!
-           Draw dots at the locations of the data points. Note:
-           This is different from a dotted line (see setPen()), and faster
-           as a curve in QwtPlotCurve::NoStyle style and a symbol 
-           painting a point.
-        */
-        Dots,
-
-        /*!
-           Styles >= QwtPlotCurve::UserCurve are reserved for derived
-           classes of QwtPlotCurve that overload drawCurve() with
-           additional application specific curve types.
-        */
-        UserCurve = 100
-    };
-
-    /*!
-      Attribute for drawing the curve
-      \sa setCurveAttribute(), testCurveAttribute(), curveFitter()
-    */
-    enum CurveAttribute
-    {
-        /*!
-           For QwtPlotCurve::Steps only. 
-           Draws a step function from the right to the left.
-         */
-        Inverted = 0x01,
-
-        /*!
-          Only in combination with QwtPlotCurve::Lines
-          A QwtCurveFitter tries to
-          interpolate/smooth the curve, before it is painted.
-
-          \note Curve fitting requires temporary memory
-          for calculating coefficients and additional points.
-          If painting in QwtPlotCurve::Fitted mode is slow it might be better
-          to fit the points, before they are passed to QwtPlotCurve.
-         */
-        Fitted = 0x02
-    };
-
-    //! Curve attributes
-    typedef QFlags<CurveAttribute> CurveAttributes;
-
-    /*!
-        Attributes how to represent the curve on the legend
-
-        \sa setLegendAttribute(), testLegendAttribute(),
-            QwtPlotItem::legendData(), legendIcon()
-     */
-
-    enum LegendAttribute
-    {
-        /*!
-          QwtPlotCurve tries to find a color representing the curve 
-          and paints a rectangle with it.
-         */
-        LegendNoAttribute = 0x00,
-
-        /*!
-          If the style() is not QwtPlotCurve::NoCurve a line 
-          is painted with the curve pen().
-         */
-        LegendShowLine = 0x01,
-
-        /*!
-          If the curve has a valid symbol it is painted.
-         */
-        LegendShowSymbol = 0x02,
-
-        /*!
-          If the curve has a brush a rectangle filled with the
-          curve brush() is painted.
-         */
-        LegendShowBrush = 0x04
-    };
-
-    //! Legend attributes
-    typedef QFlags<LegendAttribute> LegendAttributes;
-
-    /*!
-        Attributes to modify the drawing algorithm.
-        The default setting enables ClipPolygons | FilterPoints
-
-        \sa setPaintAttribute(), testPaintAttribute()
-    */
-    enum PaintAttribute
-    {
-        /*!
-          Clip polygons before painting them. In situations, where points
-          are far outside the visible area (f.e when zooming deep) this
-          might be a substantial improvement for the painting performance
-         */
-        ClipPolygons = 0x01,
-
-        /*!
-          Tries to reduce the data that has to be painted, by sorting out
-          duplicates, or paintings outside the visible area. Might have a
-          notable impact on curves with many close points.
-          Only a couple of very basic filtering algorithms are implemented.
-         */
-        FilterPoints = 0x02,
-
-        /*!
-          Minimize memory usage that is temporarily needed for the 
-          translated points, before they get painted.
-          This might slow down the performance of painting 
-         */
-        MinimizeMemory = 0x04,
-
-        /*!
-          Render the points to a temporary image and paint the image.
-          This is a very special optimization for Dots style, when
-          having a huge amount of points. 
-          With a reasonable number of points QPainter::drawPoints()
-          will be faster.
-         */
-        ImageBuffer = 0x08
-    };
-
-    //! Paint attributes
-    typedef QFlags<PaintAttribute> PaintAttributes;
-
-    explicit QwtPlotCurve( const QString &title = QString::null );
-    explicit QwtPlotCurve( const QwtText &title );
-
-    virtual ~QwtPlotCurve();
-
-    virtual int rtti() const;
-
-    void setPaintAttribute( PaintAttribute, bool on = true );
-    bool testPaintAttribute( PaintAttribute ) const;
-
-    void setLegendAttribute( LegendAttribute, bool on = true );
-    bool testLegendAttribute( LegendAttribute ) const;
-
-#ifndef QWT_NO_COMPAT
-    void setRawSamples( const double *xData, const double *yData, int size );
-    void setSamples( const double *xData, const double *yData, int size );
-    void setSamples( const QVector<double> &xData, const QVector<double> &yData );
-#endif
-    void setSamples( const QVector<QPointF> & );
-    void setSamples( QwtSeriesData<QPointF> * );
-
-    int closestPoint( const QPoint &pos, double *dist = NULL ) const;
-
-    double minXValue() const;
-    double maxXValue() const;
-    double minYValue() const;
-    double maxYValue() const;
-
-    void setCurveAttribute( CurveAttribute, bool on = true );
-    bool testCurveAttribute( CurveAttribute ) const;
-
-    void setPen( const QColor &, qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setPen( const QPen & );
-    const QPen &pen() const;
-
-    void setBrush( const QBrush & );
-    const QBrush &brush() const;
-
-    void setBaseline( double );
-    double baseline() const;
-
-    void setStyle( CurveStyle style );
-    CurveStyle style() const;
-
-    void setSymbol( QwtSymbol * );
-    const QwtSymbol *symbol() const;
-
-    void setCurveFitter( QwtCurveFitter * );
-    QwtCurveFitter *curveFitter() const;
-
-    virtual void drawSeries( QPainter *,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual QwtGraphic legendIcon( int index, const QSizeF & ) const;
-
-protected:
-
-    void init();
-
-    virtual void drawCurve( QPainter *p, int style,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual void drawSymbols( QPainter *p, const QwtSymbol &,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual void drawLines( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual void drawSticks( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual void drawDots( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual void drawSteps( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual void fillCurve( QPainter *,
-        const QwtScaleMap &, const QwtScaleMap &, 
-        const QRectF &canvasRect, QPolygonF & ) const;
-
-    void closePolyline( QPainter *,
-        const QwtScaleMap &, const QwtScaleMap &, QPolygonF & ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-//! boundingRect().left()
-inline double QwtPlotCurve::minXValue() const
-{
-    return boundingRect().left();
-}
-
-//! boundingRect().right()
-inline double QwtPlotCurve::maxXValue() const
-{
-    return boundingRect().right();
-}
-
-//! boundingRect().top()
-inline double QwtPlotCurve::minYValue() const
-{
-    return boundingRect().top();
-}
-
-//! boundingRect().bottom()
-inline double QwtPlotCurve::maxYValue() const
-{
-    return boundingRect().bottom();
-}
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotCurve::PaintAttributes )
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotCurve::LegendAttributes )
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotCurve::CurveAttributes )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_dict.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_dict.cpp
deleted file mode 100644
index 935d6df2f261c8c6b3478be0476569c45be1620c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_dict.cpp
+++ /dev/null
@@ -1,191 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_dict.h"
-
-class QwtPlotDict::PrivateData
-{
-public:
-
-    class ItemList: public QList<QwtPlotItem *>
-    {
-    public:
-        void insertItem( QwtPlotItem *item )
-        {
-            if ( item == NULL )
-                return;
-
-            QList<QwtPlotItem *>::iterator it =
-                qUpperBound( begin(), end(), item, LessZThan() );
-            insert( it, item );
-        }
-
-        void removeItem( QwtPlotItem *item )
-        {
-            if ( item == NULL )
-                return;
-
-            QList<QwtPlotItem *>::iterator it =
-                qLowerBound( begin(), end(), item, LessZThan() );
-
-            for ( ; it != end(); ++it )
-            {
-                if ( item == *it )
-                {
-                    erase( it );
-                    break;
-                }
-            }
-        }
-    private:
-        class LessZThan
-        {
-        public:
-            inline bool operator()( const QwtPlotItem *item1,
-                const QwtPlotItem *item2 ) const
-            {
-                return item1->z() < item2->z();
-            }
-        };
-    };
-
-    ItemList itemList;
-    bool autoDelete;
-};
-
-/*!
-   Constructor
-
-   Auto deletion is enabled.
-   \sa setAutoDelete(), QwtPlotItem::attach()
-*/
-QwtPlotDict::QwtPlotDict()
-{
-    d_data = new QwtPlotDict::PrivateData;
-    d_data->autoDelete = true;
-}
-
-/*!
-   Destructor
-
-   If autoDelete() is on, all attached items will be deleted
-   \sa setAutoDelete(), autoDelete(), QwtPlotItem::attach()
-*/
-QwtPlotDict::~QwtPlotDict()
-{
-    detachItems( QwtPlotItem::Rtti_PlotItem, d_data->autoDelete );
-    delete d_data;
-}
-
-/*!
-   En/Disable Auto deletion
-
-   If Auto deletion is on all attached plot items will be deleted
-   in the destructor of QwtPlotDict. The default value is on.
-
-   \sa autoDelete(), insertItem()
-*/
-void QwtPlotDict::setAutoDelete( bool autoDelete )
-{
-    d_data->autoDelete = autoDelete;
-}
-
-/*!
-   \return true if auto deletion is enabled
-   \sa setAutoDelete(), insertItem()
-*/
-bool QwtPlotDict::autoDelete() const
-{
-    return d_data->autoDelete;
-}
-
-/*!
-  Insert a plot item
-
-  \param item PlotItem
-  \sa removeItem()
- */
-void QwtPlotDict::insertItem( QwtPlotItem *item )
-{
-    d_data->itemList.insertItem( item );
-}
-
-/*!
-  Remove a plot item
-
-  \param item PlotItem
-  \sa insertItem()
- */
-void QwtPlotDict::removeItem( QwtPlotItem *item )
-{
-    d_data->itemList.removeItem( item );
-}
-
-/*!
-   Detach items from the dictionary
-
-   \param rtti In case of QwtPlotItem::Rtti_PlotItem detach all items
-               otherwise only those items of the type rtti.
-   \param autoDelete If true, delete all detached items
-*/
-void QwtPlotDict::detachItems( int rtti, bool autoDelete )
-{
-    PrivateData::ItemList list = d_data->itemList;
-    QwtPlotItemIterator it = list.begin();
-    while ( it != list.end() )
-    {
-        QwtPlotItem *item = *it;
-
-        ++it; // increment before removing item from the list
-
-        if ( rtti == QwtPlotItem::Rtti_PlotItem || item->rtti() == rtti )
-        {
-            item->attach( NULL );
-            if ( autoDelete )
-                delete item;
-        }
-    }
-}
-
-/*!
-  \brief A QwtPlotItemList of all attached plot items.
-
-  Use caution when iterating these lists, as removing/detaching an item will
-  invalidate the iterator. Instead you can place pointers to objects to be
-  removed in a removal list, and traverse that list later.
-
-  \return List of all attached plot items.
-*/
-const QwtPlotItemList &QwtPlotDict::itemList() const
-{
-    return d_data->itemList;
-}
-
-/*!
-  \return List of all attached plot items of a specific type.
-  \param rtti See QwtPlotItem::RttiValues
-  \sa QwtPlotItem::rtti()
-*/
-QwtPlotItemList QwtPlotDict::itemList( int rtti ) const
-{
-    if ( rtti == QwtPlotItem::Rtti_PlotItem )
-        return d_data->itemList;
-
-    QwtPlotItemList items;
-
-    PrivateData::ItemList list = d_data->itemList;
-    for ( QwtPlotItemIterator it = list.begin(); it != list.end(); ++it )
-    {
-        QwtPlotItem *item = *it;
-        if ( item->rtti() == rtti )
-            items += item;
-    }
-
-    return items;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_dict.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_dict.h
deleted file mode 100644
index 4da2ea2cf079ac7e4b247859ee322c7c3b685d48..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_dict.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-/*! \file !*/
-#ifndef QWT_PLOT_DICT
-#define QWT_PLOT_DICT
-
-#include "qwt_global.h"
-#include "qwt_plot_item.h"
-#include <qlist.h>
-
-/// \var typedef QList< QwtPlotItem *> QwtPlotItemList
-/// \brief See QT 4.x assistant documentation for QList
-typedef QList<QwtPlotItem *> QwtPlotItemList;
-typedef QList<QwtPlotItem *>::ConstIterator QwtPlotItemIterator;
-
-/*!
-  \brief A dictionary for plot items
-
-  QwtPlotDict organizes plot items in increasing z-order.
-  If autoDelete() is enabled, all attached items will be deleted
-  in the destructor of the dictionary.
-  QwtPlotDict can be used to get access to all QwtPlotItem items - or all
-  items of a specific type -  that are currently on the plot.
-
-  \sa QwtPlotItem::attach(), QwtPlotItem::detach(), QwtPlotItem::z()
-*/
-class QWT_EXPORT QwtPlotDict
-{
-public:
-    explicit QwtPlotDict();
-    virtual ~QwtPlotDict();
-
-    void setAutoDelete( bool );
-    bool autoDelete() const;
-
-    const QwtPlotItemList& itemList() const;
-    QwtPlotItemList itemList( int rtti ) const;
-
-    void detachItems( int rtti = QwtPlotItem::Rtti_PlotItem,
-        bool autoDelete = true );
-
-protected:
-    void insertItem( QwtPlotItem * );
-    void removeItem( QwtPlotItem * );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_directpainter.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_directpainter.cpp
deleted file mode 100644
index 53f8e32dcc974d138db1403fc12aefdcf17a9e86..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_directpainter.cpp
+++ /dev/null
@@ -1,321 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_directpainter.h"
-#include "qwt_scale_map.h"
-#include "qwt_plot.h"
-#include "qwt_plot_canvas.h"
-#include "qwt_plot_seriesitem.h"
-#include <qpainter.h>
-#include <qevent.h>
-#include <qapplication.h>
-#include <qpixmap.h>
-
-static inline void qwtRenderItem( 
-    QPainter *painter, const QRect &canvasRect,
-    QwtPlotSeriesItem *seriesItem, int from, int to )
-{
-    // A minor performance improvement is possible
-    // with caching the maps. TODO ...
-
-    QwtPlot *plot = seriesItem->plot();
-    const QwtScaleMap xMap = plot->canvasMap( seriesItem->xAxis() );
-    const QwtScaleMap yMap = plot->canvasMap( seriesItem->yAxis() );
-
-    painter->setRenderHint( QPainter::Antialiasing,
-        seriesItem->testRenderHint( QwtPlotItem::RenderAntialiased ) );
-    seriesItem->drawSeries( painter, xMap, yMap, canvasRect, from, to );
-}
-
-static inline bool qwtHasBackingStore( const QwtPlotCanvas *canvas )
-{
-    return canvas->testPaintAttribute( QwtPlotCanvas::BackingStore )
-        && canvas->backingStore() && !canvas->backingStore()->isNull();
-}
-
-class QwtPlotDirectPainter::PrivateData
-{
-public:
-    PrivateData():
-        attributes( 0 ),
-        hasClipping(false),
-        seriesItem( NULL ),
-        from( 0 ),
-        to( 0 )
-    {
-    }
-
-    QwtPlotDirectPainter::Attributes attributes;
-
-    bool hasClipping;
-    QRegion clipRegion;
-
-    QPainter painter;
-
-    QwtPlotSeriesItem *seriesItem;
-    int from;
-    int to;
-};
-
-//! Constructor
-QwtPlotDirectPainter::QwtPlotDirectPainter( QObject *parent ):
-    QObject( parent )
-{
-    d_data = new PrivateData;
-}
-
-//! Destructor
-QwtPlotDirectPainter::~QwtPlotDirectPainter()
-{
-    delete d_data;
-}
-
-/*!
-  Change an attribute
-
-  \param attribute Attribute to change
-  \param on On/Off
-
-  \sa Attribute, testAttribute()
-*/
-void QwtPlotDirectPainter::setAttribute( Attribute attribute, bool on )
-{
-    if ( bool( d_data->attributes & attribute ) != on )
-    {
-        if ( on )
-            d_data->attributes |= attribute;
-        else
-            d_data->attributes &= ~attribute;
-
-        if ( ( attribute == AtomicPainter ) && on )
-            reset();
-    }
-}
-
-/*!
-  \return True, when attribute is enabled
-  \param attribute Attribute to be tested
-  \sa Attribute, setAttribute()
-*/
-bool QwtPlotDirectPainter::testAttribute( Attribute attribute ) const
-{
-    return d_data->attributes & attribute;
-}
-
-/*!
-  En/Disables clipping 
-
-  \param enable Enables clipping is true, disable it otherwise
-  \sa hasClipping(), clipRegion(), setClipRegion()
-*/
-void QwtPlotDirectPainter::setClipping( bool enable )
-{
-    d_data->hasClipping = enable;
-}
-
-/*!
-  \return true, when clipping is enabled
-  \sa setClipping(), clipRegion(), setClipRegion()
-*/
-bool QwtPlotDirectPainter::hasClipping() const
-{
-    return d_data->hasClipping;
-}
-
-/*!
-   \brief Assign a clip region and enable clipping
-
-   Depending on the environment setting a proper clip region might improve 
-   the performance heavily. F.e. on Qt embedded only the clipped part of
-   the backing store will be copied to a ( maybe unaccelerated ) frame buffer
-   device.
-   
-   \param region Clip region
-   \sa clipRegion(), hasClipping(), setClipping()
-*/
-void QwtPlotDirectPainter::setClipRegion( const QRegion &region )
-{
-    d_data->clipRegion = region;
-    d_data->hasClipping = true;
-}
-
-/*!
-   \return Currently set clip region.
-   \sa setClipRegion(), setClipping(), hasClipping()
-*/
-QRegion QwtPlotDirectPainter::clipRegion() const
-{
-    return d_data->clipRegion;
-}
-
-/*!
-  \brief Draw a set of points of a seriesItem.
-
-  When observing an measurement while it is running, new points have to be
-  added to an existing seriesItem. drawSeries() can be used to display them avoiding
-  a complete redraw of the canvas.
-
-  Setting plot()->canvas()->setAttribute(Qt::WA_PaintOutsidePaintEvent, true);
-  will result in faster painting, if the paint engine of the canvas widget
-  supports this feature.
-
-  \param seriesItem Item to be painted
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted. If to < 0 the
-         series will be painted to its last point.
-*/
-void QwtPlotDirectPainter::drawSeries(
-    QwtPlotSeriesItem *seriesItem, int from, int to )
-{
-    if ( seriesItem == NULL || seriesItem->plot() == NULL )
-        return;
-
-    QWidget *canvas = seriesItem->plot()->canvas();
-    const QRect canvasRect = canvas->contentsRect();
-
-    QwtPlotCanvas *plotCanvas = qobject_cast<QwtPlotCanvas *>( canvas );
-
-    if ( plotCanvas && qwtHasBackingStore( plotCanvas ) )
-    {
-        QPainter painter( const_cast<QPixmap *>( plotCanvas->backingStore() ) );
-
-        if ( d_data->hasClipping )
-            painter.setClipRegion( d_data->clipRegion );
-
-        qwtRenderItem( &painter, canvasRect, seriesItem, from, to );
-
-        painter.end();
-
-        if ( testAttribute( QwtPlotDirectPainter::FullRepaint ) )
-        {
-            plotCanvas->repaint();
-            return;
-        }
-    }
-
-    bool immediatePaint = true;
-    if ( !canvas->testAttribute( Qt::WA_WState_InPaintEvent ) ) 
-    {
-#if QT_VERSION < 0x050000
-        if ( !canvas->testAttribute( Qt::WA_PaintOutsidePaintEvent ) )
-#endif
-            immediatePaint = false;
-    }
-
-    if ( immediatePaint )
-    {
-        if ( !d_data->painter.isActive() )
-        {
-            reset();
-
-            d_data->painter.begin( canvas );
-            canvas->installEventFilter( this );
-        }
-
-        if ( d_data->hasClipping )
-        {
-            d_data->painter.setClipRegion( 
-                QRegion( canvasRect ) & d_data->clipRegion );
-        }
-        else
-        {
-            if ( !d_data->painter.hasClipping() )
-                d_data->painter.setClipRect( canvasRect );
-        }
-
-        qwtRenderItem( &d_data->painter, canvasRect, seriesItem, from, to );
-
-        if ( d_data->attributes & QwtPlotDirectPainter::AtomicPainter )
-        {
-            reset();
-        }
-        else
-        {
-            if ( d_data->hasClipping )
-                d_data->painter.setClipping( false );
-        }
-    }
-    else
-    {
-        reset();
-
-        d_data->seriesItem = seriesItem;
-        d_data->from = from;
-        d_data->to = to;
-
-        QRegion clipRegion = canvasRect;
-        if ( d_data->hasClipping )
-            clipRegion &= d_data->clipRegion;
-
-        canvas->installEventFilter( this );
-        canvas->repaint(clipRegion);
-        canvas->removeEventFilter( this );
-
-        d_data->seriesItem = NULL;
-    }
-}
-
-//! Close the internal QPainter
-void QwtPlotDirectPainter::reset()
-{
-    if ( d_data->painter.isActive() )
-    {
-        QWidget *w = static_cast<QWidget *>( d_data->painter.device() );
-        if ( w )
-            w->removeEventFilter( this );
-
-        d_data->painter.end();
-    }
-}
-
-//! Event filter
-bool QwtPlotDirectPainter::eventFilter( QObject *, QEvent *event )
-{
-    if ( event->type() == QEvent::Paint )
-    {
-        reset();
-
-        if ( d_data->seriesItem )
-        {
-            const QPaintEvent *pe = static_cast< QPaintEvent *>( event );
-
-            QWidget *canvas = d_data->seriesItem->plot()->canvas();
-
-            QPainter painter( canvas );
-            painter.setClipRegion( pe->region() );
-
-            bool doCopyCache = testAttribute( CopyBackingStore );
-
-            if ( doCopyCache )
-            {
-                QwtPlotCanvas *plotCanvas = 
-                    qobject_cast<QwtPlotCanvas *>( canvas );
-                if ( plotCanvas )
-                {
-                    doCopyCache = qwtHasBackingStore( plotCanvas );
-                    if ( doCopyCache )
-                    {
-                        painter.drawPixmap( plotCanvas->contentsRect().topLeft(), 
-                            *plotCanvas->backingStore() );
-                    }
-                }
-            }
-
-            if ( !doCopyCache )
-            {
-                qwtRenderItem( &painter, canvas->contentsRect(),
-                    d_data->seriesItem, d_data->from, d_data->to );
-            }
-
-            return true; // don't call QwtPlotCanvas::paintEvent()
-        }
-    }
-
-    return false;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_directpainter.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_directpainter.h
deleted file mode 100644
index d39c7111c39c99e92f7cff3c5bb98c893b6e5831..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_directpainter.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_DIRECT_PAINTER_H
-#define QWT_PLOT_DIRECT_PAINTER_H
-
-#include "qwt_global.h"
-#include <qobject.h>
-
-class QRegion;
-class QwtPlotSeriesItem;
-
-/*!
-    \brief Painter object trying to paint incrementally
-
-    Often applications want to display samples while they are
-    collected. When there are too many samples complete replots
-    will be expensive to be processed in a collection cycle.
-
-    QwtPlotDirectPainter offers an API to paint
-    subsets ( f.e all additions points ) without erasing/repainting
-    the plot canvas.
-
-    On certain environments it might be important to calculate a proper
-    clip region before painting. F.e. for Qt Embedded only the clipped part
-    of the backing store will be copied to a ( maybe unaccelerated ) 
-    frame buffer.
-
-    \warning Incremental painting will only help when no replot is triggered
-             by another operation ( like changing scales ) and nothing needs
-             to be erased.
-*/
-class QWT_EXPORT QwtPlotDirectPainter: public QObject
-{
-public:
-    /*!
-      \brief Paint attributes
-      \sa setAttribute(), testAttribute(), drawSeries()
-    */
-    enum Attribute
-    {
-        /*!
-          Initializing a QPainter is an expensive operation.
-          When AtomicPainter is set each call of drawSeries() opens/closes
-          a temporary QPainter. Otherwise QwtPlotDirectPainter tries to
-          use the same QPainter as long as possible.
-         */
-        AtomicPainter = 0x01,
-
-        /*!
-          When FullRepaint is set the plot canvas is explicitly repainted
-          after the samples have been rendered.
-         */
-        FullRepaint = 0x02,
-
-        /*!
-          When QwtPlotCanvas::BackingStore is enabled the painter
-          has to paint to the backing store and the widget. In certain 
-          situations/environments it might be faster to paint to 
-          the backing store only and then copy the backing store to the canvas.
-          This flag can also be useful for settings, where Qt fills the
-          the clip region with the widget background.
-         */
-        CopyBackingStore = 0x04
-    };
-
-    //! Paint attributes
-    typedef QFlags<Attribute> Attributes;
-
-    QwtPlotDirectPainter( QObject *parent = NULL );
-    virtual ~QwtPlotDirectPainter();
-
-    void setAttribute( Attribute, bool on );
-    bool testAttribute( Attribute ) const;
-
-    void setClipping( bool );
-    bool hasClipping() const;
-
-    void setClipRegion( const QRegion & );
-    QRegion clipRegion() const;
-
-    void drawSeries( QwtPlotSeriesItem *, int from, int to );
-    void reset();
-
-    virtual bool eventFilter( QObject *, QEvent * );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotDirectPainter::Attributes )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_glcanvas.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_glcanvas.cpp
deleted file mode 100644
index 2900194205a049d3ba63d6900bab9edaae7ef2fb..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_glcanvas.cpp
+++ /dev/null
@@ -1,377 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_glcanvas.h"
-#include "qwt_plot.h"
-#include "qwt_painter.h"
-#include <qevent.h>
-#include <qpainter.h>
-#include <qdrawutil.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-
-#define FIX_GL_TRANSLATION 0
-
-static QWidget *qwtBGWidget( QWidget *widget )
-{
-    QWidget *w = widget;
-
-    for ( ; w->parentWidget() != NULL; w = w->parentWidget() )
-    {
-        if ( w->autoFillBackground() || 
-            w->testAttribute( Qt::WA_StyledBackground ) )
-        {
-            return w;
-        }
-    }
-
-    return w;
-}
-
-static void qwtUpdateContentsRect( QwtPlotGLCanvas *canvas )
-{
-    const int fw = canvas->frameWidth();
-    canvas->setContentsMargins( fw, fw, fw, fw );
-}
-
-class QwtPlotGLCanvas::PrivateData
-{
-public:
-    PrivateData():
-        frameStyle( QFrame::Panel | QFrame::Sunken),
-        lineWidth( 2 ),
-        midLineWidth( 0 )
-    {
-    }
-
-    int frameStyle;
-    int lineWidth;
-    int midLineWidth;
-};
-
-class QwtPlotGLCanvasFormat: public QGLFormat
-{
-public:
-    QwtPlotGLCanvasFormat():
-        QGLFormat( QGLFormat::defaultFormat() )
-    {
-        setSampleBuffers( true );
-    }
-};
-
-/*! 
-  \brief Constructor
-
-  \param plot Parent plot widget
-  \sa QwtPlot::setCanvas()
-*/
-QwtPlotGLCanvas::QwtPlotGLCanvas( QwtPlot *plot ):
-    QGLWidget( QwtPlotGLCanvasFormat(), plot )
-{
-    d_data = new PrivateData;
-
-#ifndef QT_NO_CURSOR
-    setCursor( Qt::CrossCursor );
-#endif
-
-    setAutoFillBackground( true );
-    qwtUpdateContentsRect( this );
-}
-
-//! Destructor
-QwtPlotGLCanvas::~QwtPlotGLCanvas()
-{
-    delete d_data;
-}
-
-/*!
-  Set the frame style
-
-  \param style The bitwise OR between a shape and a shadow. 
-  
-  \sa frameStyle(), QFrame::setFrameStyle(), 
-      setFrameShadow(), setFrameShape()
- */
-void QwtPlotGLCanvas::setFrameStyle( int style )
-{
-    if ( style != d_data->frameStyle )
-    {
-        d_data->frameStyle = style;
-        qwtUpdateContentsRect( this );
-
-        update();
-    }
-}
-
-/*!
-  \return The bitwise OR between a frameShape() and a frameShadow()
-  \sa setFrameStyle(), QFrame::frameStyle()
- */
-int QwtPlotGLCanvas::frameStyle() const
-{
-    return d_data->frameStyle;
-}
-
-/*!
-  Set the frame shadow
-
-  \param shadow Frame shadow
-  \sa frameShadow(), setFrameShape(), QFrame::setFrameShadow()
- */
-void QwtPlotGLCanvas::setFrameShadow( Shadow shadow )
-{
-    setFrameStyle(( d_data->frameStyle & QFrame::Shape_Mask ) | shadow );
-}
-
-/*!
-  \return Frame shadow
-  \sa setFrameShadow(), QFrame::setFrameShadow()
- */
-QwtPlotGLCanvas::Shadow QwtPlotGLCanvas::frameShadow() const
-{
-    return (Shadow) ( d_data->frameStyle & QFrame::Shadow_Mask );
-}
-
-/*!
-  Set the frame shape
-
-  \param shape Frame shape
-  \sa frameShape(), setFrameShadow(), QFrame::frameShape()
- */
-void QwtPlotGLCanvas::setFrameShape( Shape shape )
-{
-    setFrameStyle( ( d_data->frameStyle & QFrame::Shadow_Mask ) | shape );
-}
-
-/*!
-  \return Frame shape
-  \sa setFrameShape(), QFrame::frameShape()
- */
-QwtPlotGLCanvas::Shape QwtPlotGLCanvas::frameShape() const
-{
-    return (Shape) ( d_data->frameStyle & QFrame::Shape_Mask );
-}
-
-/*!
-   Set the frame line width
-
-   The default line width is 2 pixels.
-
-   \param width Line width of the frame
-   \sa lineWidth(), setMidLineWidth()
-*/
-void QwtPlotGLCanvas::setLineWidth( int width )
-{
-    width = qMax( width, 0 );
-    if ( width != d_data->lineWidth )
-    {
-        d_data->lineWidth = qMax( width, 0 );
-        qwtUpdateContentsRect( this );
-        update();
-    }
-}
-
-/*!
-  \return Line width of the frame
-  \sa setLineWidth(), midLineWidth()
- */
-int QwtPlotGLCanvas::lineWidth() const
-{
-    return d_data->lineWidth;
-}
-
-/*!
-   Set the frame mid line width
-
-   The default midline width is 0 pixels.
-
-   \param width Midline width of the frame
-   \sa midLineWidth(), setLineWidth()
-*/
-void QwtPlotGLCanvas::setMidLineWidth( int width )
-{
-    width = qMax( width, 0 );
-    if ( width != d_data->midLineWidth )
-    {
-        d_data->midLineWidth = width;
-        qwtUpdateContentsRect( this );
-        update();
-    }
-}
-
-/*!
-  \return Midline width of the frame
-  \sa setMidLineWidth(), lineWidth()
- */ 
-int QwtPlotGLCanvas::midLineWidth() const
-{
-    return d_data->midLineWidth;
-}
-
-/*!
-  \return Frame width depending on the style, line width and midline width.
- */
-int QwtPlotGLCanvas::frameWidth() const
-{
-    return ( frameStyle() != NoFrame ) ? d_data->lineWidth : 0;
-}
-
-/*!
-  Paint event
-
-  \param event Paint event
-  \sa QwtPlot::drawCanvas()
-*/
-void QwtPlotGLCanvas::paintEvent( QPaintEvent *event )
-{
-    Q_UNUSED( event );
-
-    QPainter painter( this );
-
-#if FIX_GL_TRANSLATION
-    if ( painter.paintEngine()->type() == QPaintEngine::OpenGL2 )
-    {
-        // work around a translation bug of QPaintEngine::OpenGL2
-        painter.translate( 1, 1 );
-    }
-#endif
-
-    drawBackground( &painter );
-    drawItems( &painter );
-
-    if ( !testAttribute( Qt::WA_StyledBackground ) )
-    {
-        if ( frameWidth() > 0 )
-            drawBorder( &painter );
-    }
-}
-/*!
-  Qt event handler for QEvent::PolishRequest and QEvent::StyleChange
-  \param event Qt Event
-  \return See QGLWidget::event()
-*/
-bool QwtPlotGLCanvas::event( QEvent *event )
-{
-    const bool ok = QGLWidget::event( event );
-
-    if ( event->type() == QEvent::PolishRequest ||
-        event->type() == QEvent::StyleChange )
-    {
-        // assuming, that we always have a styled background
-        // when we have a style sheet
-
-        setAttribute( Qt::WA_StyledBackground,
-            testAttribute( Qt::WA_StyleSheet ) );
-    }
-
-    return ok;
-}
-
-/*!
-  Draw the plot items
-  \param painter Painter
-
-  \sa QwtPlot::drawCanvas()
-*/  
-void QwtPlotGLCanvas::drawItems( QPainter *painter )
-{
-    painter->save();
-
-    painter->setClipRect( contentsRect(), Qt::IntersectClip );
-
-    QwtPlot *plot = qobject_cast< QwtPlot *>( parent() );
-    if ( plot )
-        plot->drawCanvas( painter );
-
-    painter->restore();
-}
-
-/*!
-  Draw the background of the canvas
-  \param painter Painter
-*/ 
-void QwtPlotGLCanvas::drawBackground( QPainter *painter )
-{
-    painter->save();
-
-    QWidget *w = qwtBGWidget( this );
-
-    const QPoint off = mapTo( w, QPoint() );
-    painter->translate( -off );
-
-    const QRect fillRect = rect().translated( off );
-
-    if ( w->testAttribute( Qt::WA_StyledBackground ) )
-    {
-        painter->setClipRect( fillRect );
-
-        QStyleOption opt;
-        opt.initFrom( w );
-        w->style()->drawPrimitive( QStyle::PE_Widget, &opt, painter, w);
-    }
-    else 
-    {
-        painter->fillRect( fillRect,
-            w->palette().brush( w->backgroundRole() ) );
-    }
-
-    painter->restore();
-}
-
-/*!
-  Draw the border of the canvas
-  \param painter Painter
-*/
-void QwtPlotGLCanvas::drawBorder( QPainter *painter )
-{
-    const int fw = frameWidth();
-    if ( fw <= 0 )
-        return;
-
-    if ( frameShadow() == QwtPlotGLCanvas::Plain )
-    {
-        qDrawPlainRect( painter, frameRect(), 
-            palette().shadow().color(), lineWidth() );
-    }
-    else
-    {
-        if ( frameShape() == QwtPlotGLCanvas::Box )
-        {
-            qDrawShadeRect( painter, frameRect(), palette(),
-                frameShadow() == Sunken, lineWidth(), midLineWidth() );
-        }
-        else
-        {
-            qDrawShadePanel( painter, frameRect(), palette(), 
-                frameShadow() == Sunken, lineWidth() );
-        }
-    }
-}
-
-//! Calls repaint()
-void QwtPlotGLCanvas::replot()
-{
-    repaint();
-}
-
-/*!
-   \return Empty path
-*/
-QPainterPath QwtPlotGLCanvas::borderPath( const QRect &rect ) const
-{
-    Q_UNUSED( rect );
-    return QPainterPath();
-}
-
-//! \return The rectangle where the frame is drawn in.
-QRect QwtPlotGLCanvas::frameRect() const
-{
-    const int fw = frameWidth();
-    return contentsRect().adjusted( -fw, -fw, fw, fw );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_glcanvas.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_glcanvas.h
deleted file mode 100644
index da0fb0e6ae3182e239342261042b3497eb3219d5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_glcanvas.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_GLCANVAS_H
-#define QWT_PLOT_GLCANVAS_H
-
-#include "qwt_global.h"
-#include <qframe.h>
-#include <qgl.h>
-
-class QwtPlot;
-
-/*!
-  \brief An alternative canvas for a QwtPlot derived from QGLWidget
-  
-  QwtPlotGLCanvas implements the very basics to act as canvas
-  inside of a QwtPlot widget. It might be extended to a full
-  featured alternative to QwtPlotCanvas in a future version of Qwt.
-
-  Even if QwtPlotGLCanvas is not derived from QFrame it imitates
-  its API. When using style sheets it supports the box model - beside
-  backgrounds with rounded borders.
-
-  \sa QwtPlot::setCanvas(), QwtPlotCanvas
-
-  \note With Qt4 you might want to use the QPaintEngine::OpenGL paint engine
-        ( see QGL::setPreferredPaintEngine() ). On a Linux test system 
-        QPaintEngine::OpenGL2 shows very basic problems like translated
-        geometries.
-*/
-class QWT_EXPORT QwtPlotGLCanvas: public QGLWidget
-{
-    Q_OBJECT
-
-    Q_ENUMS( Shape Shadow )
-
-    Q_PROPERTY( Shadow frameShadow READ frameShadow WRITE setFrameShadow )
-    Q_PROPERTY( Shape frameShape READ frameShape WRITE setFrameShape )
-    Q_PROPERTY( int lineWidth READ lineWidth WRITE setLineWidth )
-    Q_PROPERTY( int midLineWidth READ midLineWidth WRITE setMidLineWidth )
-    Q_PROPERTY( int frameWidth READ frameWidth )
-    Q_PROPERTY( QRect frameRect READ frameRect DESIGNABLE false )
-
-public:
-    /*!
-        \brief Frame shadow
-
-         Unfortunately it is not possible to use QFrame::Shadow
-         as a property of a widget that is not derived from QFrame.
-         The following enum is made for the designer only. It is safe
-         to use QFrame::Shadow instead.
-     */
-    enum Shadow
-    {
-        //! QFrame::Plain
-        Plain = QFrame::Plain,
-
-        //! QFrame::Raised
-        Raised = QFrame::Raised,
-
-        //! QFrame::Sunken
-        Sunken = QFrame::Sunken
-    };
-
-    /*!
-        \brief Frame shape
-
-        Unfortunately it is not possible to use QFrame::Shape
-        as a property of a widget that is not derived from QFrame.
-        The following enum is made for the designer only. It is safe
-        to use QFrame::Shadow instead.
-
-        \note QFrame::StyledPanel and QFrame::WinPanel are unsuported 
-              and will be displayed as QFrame::Panel.
-     */
-    enum Shape
-    {
-        NoFrame = QFrame::NoFrame,
-
-        Box = QFrame::Box,
-        Panel = QFrame::Panel
-    };
-
-    explicit QwtPlotGLCanvas( QwtPlot * = NULL );
-    virtual ~QwtPlotGLCanvas();
-
-    void setFrameStyle( int style );
-    int frameStyle() const;
-
-    void setFrameShadow( Shadow );
-    Shadow frameShadow() const;
-
-    void setFrameShape( Shape );
-    Shape frameShape() const;
-
-    void setLineWidth( int );
-    int lineWidth() const;
-
-    void setMidLineWidth( int );
-    int midLineWidth() const;
-
-    int frameWidth() const;
-    QRect frameRect() const;
-
-    Q_INVOKABLE QPainterPath borderPath( const QRect & ) const;
-
-    virtual bool event( QEvent * );
-
-public Q_SLOTS:
-    void replot();
-
-protected:
-    virtual void paintEvent( QPaintEvent * );
-
-    virtual void drawBackground( QPainter * );
-    virtual void drawBorder( QPainter * );
-    virtual void drawItems( QPainter * );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_grid.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_grid.cpp
deleted file mode 100644
index 31fb82133ef7033070b34856f39d49b90caf954e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_grid.cpp
+++ /dev/null
@@ -1,438 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_grid.h"
-#include "qwt_painter.h"
-#include "qwt_text.h"
-#include "qwt_scale_map.h"
-#include "qwt_scale_div.h"
-#include "qwt_math.h"
-#include <qpainter.h>
-#include <qpen.h>
-
-class QwtPlotGrid::PrivateData
-{
-public:
-    PrivateData():
-        xEnabled( true ),
-        yEnabled( true ),
-        xMinEnabled( false ),
-        yMinEnabled( false )
-    {
-    }
-
-    bool xEnabled;
-    bool yEnabled;
-    bool xMinEnabled;
-    bool yMinEnabled;
-
-    QwtScaleDiv xScaleDiv;
-    QwtScaleDiv yScaleDiv;
-
-    QPen majorPen;
-    QPen minorPen;
-};
-
-//! Enables major grid, disables minor grid
-QwtPlotGrid::QwtPlotGrid():
-    QwtPlotItem( QwtText( "Grid" ) )
-{
-    d_data = new PrivateData;
-
-    setItemInterest( QwtPlotItem::ScaleInterest, true );
-    setZ( 10.0 );
-}
-
-//! Destructor
-QwtPlotGrid::~QwtPlotGrid()
-{
-    delete d_data;
-}
-
-//! \return QwtPlotItem::Rtti_PlotGrid
-int QwtPlotGrid::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotGrid;
-}
-
-/*!
-  \brief Enable or disable vertical grid lines
-  \param on Enable (true) or disable
-
-  \sa Minor grid lines can be enabled or disabled with
-      enableXMin()
-*/
-void QwtPlotGrid::enableX( bool on )
-{
-    if ( d_data->xEnabled != on )
-    {
-        d_data->xEnabled = on;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \brief Enable or disable horizontal grid lines
-  \param on Enable (true) or disable
-  \sa Minor grid lines can be enabled or disabled with enableYMin()
-*/
-void QwtPlotGrid::enableY( bool on )
-{
-    if ( d_data->yEnabled != on )
-    {
-        d_data->yEnabled = on;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \brief Enable or disable  minor vertical grid lines.
-  \param on Enable (true) or disable
-  \sa enableX()
-*/
-void QwtPlotGrid::enableXMin( bool on )
-{
-    if ( d_data->xMinEnabled != on )
-    {
-        d_data->xMinEnabled = on;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \brief Enable or disable minor horizontal grid lines
-  \param on Enable (true) or disable
-  \sa enableY()
-*/
-void QwtPlotGrid::enableYMin( bool on )
-{
-    if ( d_data->yMinEnabled != on )
-    {
-        d_data->yMinEnabled = on;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  Assign an x axis scale division
-
-  \param scaleDiv Scale division
-*/
-void QwtPlotGrid::setXDiv( const QwtScaleDiv &scaleDiv )
-{
-    if ( d_data->xScaleDiv != scaleDiv )
-    {
-        d_data->xScaleDiv = scaleDiv;
-        itemChanged();
-    }
-}
-
-/*!
-  Assign a y axis division
-
-  \param scaleDiv Scale division
-*/
-void QwtPlotGrid::setYDiv( const QwtScaleDiv &scaleDiv )
-{
-    if ( d_data->yScaleDiv != scaleDiv )
-    {
-        d_data->yScaleDiv = scaleDiv;
-        itemChanged();
-    }
-}
-
-/*!
-  Build and assign a pen for both major and minor grid lines
-
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-
-  \sa pen(), brush()
- */
-void QwtPlotGrid::setPen( const QColor &color, qreal width, Qt::PenStyle style )
-{
-    setPen( QPen( color, width, style ) );
-}
-
-/*!
-  Assign a pen for both major and minor grid lines
-
-  \param pen Pen
-  \sa setMajorPen(), setMinorPen()
-*/
-void QwtPlotGrid::setPen( const QPen &pen )
-{
-    if ( d_data->majorPen != pen || d_data->minorPen != pen )
-    {
-        d_data->majorPen = pen;
-        d_data->minorPen = pen;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  Build and assign a pen for both major grid lines
-
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-
-  \sa pen(), brush()
- */
-void QwtPlotGrid::setMajorPen( const QColor &color, qreal width, Qt::PenStyle style )
-{
-    setMajorPen( QPen( color, width, style ) );
-}
-
-/*!
-  Assign a pen for the major grid lines
-
-  \param pen Pen
-  \sa majorPen(), setMinorPen(), setPen()
-*/
-void QwtPlotGrid::setMajorPen( const QPen &pen )
-{
-    if ( d_data->majorPen != pen )
-    {
-        d_data->majorPen = pen;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  Build and assign a pen for the minor grid lines
-
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-
-  \sa pen(), brush()
- */
-void QwtPlotGrid::setMinorPen( const QColor &color, qreal width, Qt::PenStyle style )
-{
-    setMinorPen( QPen( color, width, style ) );
-}
-
-/*!
-  Assign a pen for the minor grid lines
-
-  \param pen Pen
-  \sa minorPen(), setMajorPen(), setPen()
-*/
-void QwtPlotGrid::setMinorPen( const QPen &pen )
-{
-    if ( d_data->minorPen != pen )
-    {
-        d_data->minorPen = pen;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \brief Draw the grid
-
-  The grid is drawn into the bounding rectangle such that
-  grid lines begin and end at the rectangle's borders. The X and Y
-  maps are used to map the scale divisions into the drawing region
-  screen.
-
-  \param painter  Painter
-  \param xMap X axis map
-  \param yMap Y axis
-  \param canvasRect Contents rectangle of the plot canvas
-*/
-void QwtPlotGrid::draw( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect ) const
-{
-    //  draw minor grid lines
-    QPen minorPen = d_data->minorPen;
-    minorPen.setCapStyle( Qt::FlatCap );
-
-    painter->setPen( minorPen );
-
-    if ( d_data->xEnabled && d_data->xMinEnabled )
-    {
-        drawLines( painter, canvasRect, Qt::Vertical, xMap,
-            d_data->xScaleDiv.ticks( QwtScaleDiv::MinorTick ) );
-        drawLines( painter, canvasRect, Qt::Vertical, xMap,
-            d_data->xScaleDiv.ticks( QwtScaleDiv::MediumTick ) );
-    }
-
-    if ( d_data->yEnabled && d_data->yMinEnabled )
-    {
-        drawLines( painter, canvasRect, Qt::Horizontal, yMap,
-            d_data->yScaleDiv.ticks( QwtScaleDiv::MinorTick ) );
-        drawLines( painter, canvasRect, Qt::Horizontal, yMap,
-            d_data->yScaleDiv.ticks( QwtScaleDiv::MediumTick ) );
-    }
-
-    //  draw major grid lines
-    QPen majorPen = d_data->majorPen;
-    majorPen.setCapStyle( Qt::FlatCap );
-
-    painter->setPen( majorPen );
-
-    if ( d_data->xEnabled )
-    {
-        drawLines( painter, canvasRect, Qt::Vertical, xMap,
-            d_data->xScaleDiv.ticks( QwtScaleDiv::MajorTick ) );
-    }
-
-    if ( d_data->yEnabled )
-    {
-        drawLines( painter, canvasRect, Qt::Horizontal, yMap,
-            d_data->yScaleDiv.ticks( QwtScaleDiv::MajorTick ) );
-    }
-}
-
-void QwtPlotGrid::drawLines( QPainter *painter, const QRectF &canvasRect,
-    Qt::Orientation orientation, const QwtScaleMap &scaleMap,
-    const QList<double> &values ) const
-{
-    const double x1 = canvasRect.left();
-    const double x2 = canvasRect.right() - 1.0;
-    const double y1 = canvasRect.top();
-    const double y2 = canvasRect.bottom() - 1.0;
-
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    for ( int i = 0; i < values.count(); i++ )
-    {
-        double value = scaleMap.transform( values[i] );
-        if ( doAlign )
-            value = qRound( value );
-
-        if ( orientation == Qt::Horizontal )
-        {
-            if ( qwtFuzzyGreaterOrEqual( value, y1 ) &&
-                qwtFuzzyLessOrEqual( value, y2 ) )
-            {
-                QwtPainter::drawLine( painter, x1, value, x2, value );
-            }
-        }
-        else
-        {
-            if ( qwtFuzzyGreaterOrEqual( value, x1 ) &&
-                qwtFuzzyLessOrEqual( value, x2 ) )
-            {
-                QwtPainter::drawLine( painter, value, y1, value, y2 );
-            }
-        }
-    }
-}
-
-/*!
-  \return the pen for the major grid lines
-  \sa setMajorPen(), setMinorPen(), setPen()
-*/
-const QPen &QwtPlotGrid::majorPen() const
-{
-    return d_data->majorPen;
-}
-
-/*!
-  \return the pen for the minor grid lines
-  \sa setMinorPen(), setMajorPen(), setPen()
-*/
-const QPen &QwtPlotGrid::minorPen() const
-{
-    return d_data->minorPen;
-}
-
-/*!
-  \return true if vertical grid lines are enabled
-  \sa enableX()
-*/
-bool QwtPlotGrid::xEnabled() const
-{
-    return d_data->xEnabled;
-}
-
-/*!
-  \return true if minor vertical grid lines are enabled
-  \sa enableXMin()
-*/
-bool QwtPlotGrid::xMinEnabled() const
-{
-    return d_data->xMinEnabled;
-}
-
-/*!
-  \return true if horizontal grid lines are enabled
-  \sa enableY()
-*/
-bool QwtPlotGrid::yEnabled() const
-{
-    return d_data->yEnabled;
-}
-
-/*!
-  \return true if minor horizontal grid lines are enabled
-  \sa enableYMin()
-*/
-bool QwtPlotGrid::yMinEnabled() const
-{
-    return d_data->yMinEnabled;
-}
-
-
-/*! \return the scale division of the x axis */
-const QwtScaleDiv &QwtPlotGrid::xScaleDiv() const
-{
-    return d_data->xScaleDiv;
-}
-
-/*! \return the scale division of the y axis */
-const QwtScaleDiv &QwtPlotGrid::yScaleDiv() const
-{
-    return d_data->yScaleDiv;
-}
-
-/*!
-   Update the grid to changes of the axes scale division
-
-   \param xScaleDiv Scale division of the x-axis
-   \param yScaleDiv Scale division of the y-axis
-
-   \sa QwtPlot::updateAxes()
-*/
-void QwtPlotGrid::updateScaleDiv( const QwtScaleDiv& xScaleDiv,
-    const QwtScaleDiv& yScaleDiv )
-{
-    setXDiv( xScaleDiv );
-    setYDiv( yScaleDiv );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_grid.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_grid.h
deleted file mode 100644
index 50c343a3c60cdd7fa7478ef7df60864e9a3df7fd..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_grid.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_GRID_H
-#define QWT_PLOT_GRID_H
-
-#include "qwt_global.h"
-#include "qwt_plot_item.h"
-#include "qwt_scale_div.h"
-
-class QPainter;
-class QPen;
-class QwtScaleMap;
-class QwtScaleDiv;
-
-/*!
-  \brief A class which draws a coordinate grid
-
-  The QwtPlotGrid class can be used to draw a coordinate grid.
-  A coordinate grid consists of major and minor vertical
-  and horizontal grid lines. The locations of the grid lines
-  are determined by the X and Y scale divisions which can
-  be assigned with setXDiv() and setYDiv().
-  The draw() member draws the grid within a bounding
-  rectangle.
-*/
-
-class QWT_EXPORT QwtPlotGrid: public QwtPlotItem
-{
-public:
-    explicit QwtPlotGrid();
-    virtual ~QwtPlotGrid();
-
-    virtual int rtti() const;
-
-    void enableX( bool tf );
-    bool xEnabled() const;
-
-    void enableY( bool tf );
-    bool yEnabled() const;
-
-    void enableXMin( bool tf );
-    bool xMinEnabled() const;
-
-    void enableYMin( bool tf );
-    bool yMinEnabled() const;
-
-    void setXDiv( const QwtScaleDiv &sx );
-    const QwtScaleDiv &xScaleDiv() const;
-
-    void setYDiv( const QwtScaleDiv &sy );
-    const QwtScaleDiv &yScaleDiv() const;
-
-    void setPen( const QColor &, qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setPen( const QPen & );
-
-    void setMajorPen( const QColor &, qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setMajorPen( const QPen & );
-    const QPen& majorPen() const;
-
-    void setMinorPen( const QColor &, qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setMinorPen( const QPen &p );
-    const QPen& minorPen() const;
-
-    virtual void draw( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &rect ) const;
-
-    virtual void updateScaleDiv( 
-        const QwtScaleDiv &xMap, const QwtScaleDiv &yMap );
-
-private:
-    void drawLines( QPainter *painter, const QRectF &,
-        Qt::Orientation orientation, const QwtScaleMap &,
-        const QList<double> & ) const;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_histogram.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_histogram.cpp
deleted file mode 100644
index fd4a9d8475163e0b745accb223f5b30426403171..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_histogram.cpp
+++ /dev/null
@@ -1,690 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_histogram.h"
-#include "qwt_plot.h"
-#include "qwt_painter.h"
-#include "qwt_column_symbol.h"
-#include "qwt_scale_map.h"
-#include <qstring.h>
-#include <qpainter.h>
-
-static inline bool qwtIsCombinable( const QwtInterval &d1,
-    const QwtInterval &d2 )
-{
-    if ( d1.isValid() && d2.isValid() )
-    {
-        if ( d1.maxValue() == d2.minValue() )
-        {
-            if ( !( d1.borderFlags() & QwtInterval::ExcludeMaximum
-                && d2.borderFlags() & QwtInterval::ExcludeMinimum ) )
-            {
-                return true;
-            }
-        }
-    }
-
-    return false;
-}
-
-class QwtPlotHistogram::PrivateData
-{
-public:
-    PrivateData():
-        baseline( 0.0 ),
-        style( Columns ),
-        symbol( NULL )
-    {
-    }
-
-    ~PrivateData()
-    {
-        delete symbol;
-    }
-
-    double baseline;
-
-    QPen pen;
-    QBrush brush;
-    QwtPlotHistogram::HistogramStyle style;
-    const QwtColumnSymbol *symbol;
-};
-
-/*!
-  Constructor
-  \param title Title of the histogram.
-*/
-QwtPlotHistogram::QwtPlotHistogram( const QwtText &title ):
-    QwtPlotSeriesItem( title )
-{
-    init();
-}
-
-/*!
-  Constructor
-  \param title Title of the histogram.
-*/
-QwtPlotHistogram::QwtPlotHistogram( const QString &title ):
-    QwtPlotSeriesItem( title )
-{
-    init();
-}
-
-//! Destructor
-QwtPlotHistogram::~QwtPlotHistogram()
-{
-    delete d_data;
-}
-
-//! Initialize data members
-void QwtPlotHistogram::init()
-{
-    d_data = new PrivateData();
-    setData( new QwtIntervalSeriesData() );
-
-    setItemAttribute( QwtPlotItem::AutoScale, true );
-    setItemAttribute( QwtPlotItem::Legend, true );
-
-    setZ( 20.0 );
-}
-
-/*!
-  Set the histogram's drawing style
-
-  \param style Histogram style
-  \sa HistogramStyle, style()
-*/
-void QwtPlotHistogram::setStyle( HistogramStyle style )
-{
-    if ( style != d_data->style )
-    {
-        d_data->style = style;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-    \return Style of the histogram
-    \sa HistogramStyle, setStyle()
-*/
-QwtPlotHistogram::HistogramStyle QwtPlotHistogram::style() const
-{
-    return d_data->style;
-}
-
-/*!
-  Build and assign a pen
-    
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-    
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-    
-  \sa pen(), brush()
- */
-void QwtPlotHistogram::setPen( const QColor &color, qreal width, Qt::PenStyle style )
-{   
-    setPen( QPen( color, width, style ) );
-}   
-
-/*!
-  Assign a pen, that is used in a style() depending way.
-
-  \param pen New pen
-  \sa pen(), brush()
-*/
-void QwtPlotHistogram::setPen( const QPen &pen )
-{
-    if ( pen != d_data->pen )
-    {
-        d_data->pen = pen;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Pen used in a style() depending way.
-  \sa setPen(), brush()
-*/
-const QPen &QwtPlotHistogram::pen() const
-{
-    return d_data->pen;
-}
-
-/*!
-  Assign a brush, that is used in a style() depending way.
-
-  \param brush New brush
-  \sa pen(), brush()
-*/
-void QwtPlotHistogram::setBrush( const QBrush &brush )
-{
-    if ( brush != d_data->brush )
-    {
-        d_data->brush = brush;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Brush used in a style() depending way.
-  \sa setPen(), brush()
-*/
-const QBrush &QwtPlotHistogram::brush() const
-{
-    return d_data->brush;
-}
-
-/*!
-  \brief Assign a symbol
-
-  In Column style an optional symbol can be assigned, that is responsible
-  for displaying the rectangle that is defined by the interval and
-  the distance between baseline() and value. When no symbol has been
-  defined the area is displayed as plain rectangle using pen() and brush().
-
-  \sa style(), symbol(), drawColumn(), pen(), brush()
-
-  \note In applications, where different intervals need to be displayed
-        in a different way ( f.e different colors or even using different symbols)
-        it is recommended to overload drawColumn().
-*/
-void QwtPlotHistogram::setSymbol( const QwtColumnSymbol *symbol )
-{
-    if ( symbol != d_data->symbol )
-    {
-        delete d_data->symbol;
-        d_data->symbol = symbol;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Current symbol or NULL, when no symbol has been assigned
-  \sa setSymbol()
-*/
-const QwtColumnSymbol *QwtPlotHistogram::symbol() const
-{
-    return d_data->symbol;
-}
-
-/*!
-  \brief Set the value of the baseline
-
-  Each column representing an QwtIntervalSample is defined by its
-  interval and the interval between baseline and the value of the sample.
-
-  The default value of the baseline is 0.0.
-
-  \param value Value of the baseline
-  \sa baseline()
-*/
-void QwtPlotHistogram::setBaseline( double value )
-{
-    if ( d_data->baseline != value )
-    {
-        d_data->baseline = value;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Value of the baseline
-  \sa setBaseline()
-*/
-double QwtPlotHistogram::baseline() const
-{
-    return d_data->baseline;
-}
-
-/*!
-  \return Bounding rectangle of all samples.
-  For an empty series the rectangle is invalid.
-*/
-QRectF QwtPlotHistogram::boundingRect() const
-{
-    QRectF rect = data()->boundingRect();
-    if ( !rect.isValid() )
-        return rect;
-
-    if ( orientation() == Qt::Horizontal )
-    {
-        rect = QRectF( rect.y(), rect.x(),
-            rect.height(), rect.width() );
-
-        if ( rect.left() > d_data->baseline )
-            rect.setLeft( d_data->baseline );
-        else if ( rect.right() < d_data->baseline )
-            rect.setRight( d_data->baseline );
-    }
-    else
-    {
-        if ( rect.bottom() < d_data->baseline )
-            rect.setBottom( d_data->baseline );
-        else if ( rect.top() > d_data->baseline )
-            rect.setTop( d_data->baseline );
-    }
-
-    return rect;
-}
-
-//! \return QwtPlotItem::Rtti_PlotHistogram
-int QwtPlotHistogram::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotHistogram;
-}
-
-/*!
-  Initialize data with an array of samples.
-  \param samples Vector of points
-*/
-void QwtPlotHistogram::setSamples(
-    const QVector<QwtIntervalSample> &samples )
-{
-    setData( new QwtIntervalSeriesData( samples ) );
-}
-
-/*!
-  Assign a series of samples
-    
-  setSamples() is just a wrapper for setData() without any additional
-  value - beside that it is easier to find for the developer.
-    
-  \param data Data
-  \warning The item takes ownership of the data object, deleting
-           it when its not used anymore.
-*/
-void QwtPlotHistogram::setSamples( 
-    QwtSeriesData<QwtIntervalSample> *data )
-{
-    setData( data );
-}
-
-/*!
-  Draw a subset of the histogram samples
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rectangle of the canvas
-  \param from Index of the first sample to be painted
-  \param to Index of the last sample to be painted. If to < 0 the
-         series will be painted to its last sample.
-
-  \sa drawOutline(), drawLines(), drawColumns
-*/
-void QwtPlotHistogram::drawSeries( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &, int from, int to ) const
-{
-    if ( !painter || dataSize() <= 0 )
-        return;
-
-    if ( to < 0 )
-        to = dataSize() - 1;
-
-    switch ( d_data->style )
-    {
-        case Outline:
-            drawOutline( painter, xMap, yMap, from, to );
-            break;
-        case Lines:
-            drawLines( painter, xMap, yMap, from, to );
-            break;
-        case Columns:
-            drawColumns( painter, xMap, yMap, from, to );
-            break;
-        default:
-            break;
-    }
-}
-
-/*!
-  Draw a histogram in Outline style()
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param from Index of the first sample to be painted
-  \param to Index of the last sample to be painted. If to < 0 the
-         histogram will be painted to its last point.
-
-  \sa setStyle(), style()
-  \warning The outline style requires, that the intervals are in increasing
-           order and not overlapping.
-*/
-void QwtPlotHistogram::drawOutline( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    int from, int to ) const
-{
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    double v0 = ( orientation() == Qt::Horizontal ) ?
-        xMap.transform( baseline() ) : yMap.transform( baseline() );
-    if ( doAlign )
-        v0 = qRound( v0 );
-
-    QwtIntervalSample previous;
-
-    QPolygonF polygon;
-    for ( int i = from; i <= to; i++ )
-    {
-        const QwtIntervalSample sample = this->sample( i );
-
-        if ( !sample.interval.isValid() )
-        {
-            flushPolygon( painter, v0, polygon );
-            previous = sample;
-            continue;
-        }
-
-        if ( previous.interval.isValid() )
-        {
-            if ( !qwtIsCombinable( previous.interval, sample.interval ) )
-                flushPolygon( painter, v0, polygon );
-        }
-
-        if ( orientation() == Qt::Vertical )
-        {
-            double x1 = xMap.transform( sample.interval.minValue() );
-            double x2 = xMap.transform( sample.interval.maxValue() );
-            double y = yMap.transform( sample.value );
-            if ( doAlign )
-            {
-                x1 = qRound( x1 );
-                x2 = qRound( x2 );
-                y = qRound( y );
-            }
-
-            if ( polygon.size() == 0 )
-                polygon += QPointF( x1, v0 );
-
-            polygon += QPointF( x1, y );
-            polygon += QPointF( x2, y );
-        }
-        else
-        {
-            double y1 = yMap.transform( sample.interval.minValue() );
-            double y2 = yMap.transform( sample.interval.maxValue() );
-            double x = xMap.transform( sample.value );
-            if ( doAlign )
-            {
-                y1 = qRound( y1 );
-                y2 = qRound( y2 );
-                x = qRound( x );
-            }
-
-            if ( polygon.size() == 0 )
-                polygon += QPointF( v0, y1 );
-
-            polygon += QPointF( x, y1 );
-            polygon += QPointF( x, y2 );
-        }
-        previous = sample;
-    }
-
-    flushPolygon( painter, v0, polygon );
-}
-
-/*!
-  Draw a histogram in Columns style()
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param from Index of the first sample to be painted
-  \param to Index of the last sample to be painted. If to < 0 the
-         histogram will be painted to its last point.
-
-  \sa setStyle(), style(), setSymbol(), drawColumn()
-*/
-void QwtPlotHistogram::drawColumns( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    int from, int to ) const
-{
-    painter->setPen( d_data->pen );
-    painter->setBrush( d_data->brush );
-
-    const QwtSeriesData<QwtIntervalSample> *series = data();
-
-    for ( int i = from; i <= to; i++ )
-    {
-        const QwtIntervalSample sample = series->sample( i );
-        if ( !sample.interval.isNull() )
-        {
-            const QwtColumnRect rect = columnRect( sample, xMap, yMap );
-            drawColumn( painter, rect, sample );
-        }
-    }
-}
-
-/*!
-  Draw a histogram in Lines style()
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param from Index of the first sample to be painted
-  \param to Index of the last sample to be painted. If to < 0 the
-         histogram will be painted to its last point.
-
-  \sa setStyle(), style(), setPen()
-*/
-void QwtPlotHistogram::drawLines( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    int from, int to ) const
-{
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    painter->setPen( d_data->pen );
-    painter->setBrush( Qt::NoBrush );
-
-    const QwtSeriesData<QwtIntervalSample> *series = data();
-
-    for ( int i = from; i <= to; i++ )
-    {
-        const QwtIntervalSample sample = series->sample( i );
-        if ( !sample.interval.isNull() )
-        {
-            const QwtColumnRect rect = columnRect( sample, xMap, yMap );
-
-            QRectF r = rect.toRect();
-            if ( doAlign )
-            {
-                r.setLeft( qRound( r.left() ) );
-                r.setRight( qRound( r.right() ) );
-                r.setTop( qRound( r.top() ) );
-                r.setBottom( qRound( r.bottom() ) );
-            }
-
-            switch ( rect.direction )
-            {
-                case QwtColumnRect::LeftToRight:
-                {
-                    QwtPainter::drawLine( painter,
-                        r.topRight(), r.bottomRight() );
-                    break;
-                }
-                case QwtColumnRect::RightToLeft:
-                {
-                    QwtPainter::drawLine( painter,
-                        r.topLeft(), r.bottomLeft() );
-                    break;
-                }
-                case QwtColumnRect::TopToBottom:
-                {
-                    QwtPainter::drawLine( painter,
-                        r.bottomRight(), r.bottomLeft() );
-                    break;
-                }
-                case QwtColumnRect::BottomToTop:
-                {
-                    QwtPainter::drawLine( painter,
-                        r.topRight(), r.topLeft() );
-                    break;
-                }
-            }
-        }
-    }
-}
-
-//! Internal, used by the Outline style.
-void QwtPlotHistogram::flushPolygon( QPainter *painter,
-    double baseLine, QPolygonF &polygon ) const
-{
-    if ( polygon.size() == 0 )
-        return;
-
-    if ( orientation() == Qt::Horizontal )
-        polygon += QPointF( baseLine, polygon.last().y() );
-    else
-        polygon += QPointF( polygon.last().x(), baseLine );
-
-    if ( d_data->brush.style() != Qt::NoBrush )
-    {
-        painter->setPen( Qt::NoPen );
-        painter->setBrush( d_data->brush );
-
-        if ( orientation() == Qt::Horizontal )
-        {
-            polygon += QPointF( polygon.last().x(), baseLine );
-            polygon += QPointF( polygon.first().x(), baseLine );
-        }
-        else
-        {
-            polygon += QPointF( baseLine, polygon.last().y() );
-            polygon += QPointF( baseLine, polygon.first().y() );
-        }
-
-        QwtPainter::drawPolygon( painter, polygon );
-
-        polygon.pop_back();
-        polygon.pop_back();
-    }
-    if ( d_data->pen.style() != Qt::NoPen )
-    {
-        painter->setBrush( Qt::NoBrush );
-        painter->setPen( d_data->pen );
-        QwtPainter::drawPolyline( painter, polygon );
-    }
-    polygon.clear();
-}
-
-/*!
-  Calculate the area that is covered by a sample
-
-  \param sample Sample
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-
-  \return Rectangle, that is covered by a sample
-*/
-QwtColumnRect QwtPlotHistogram::columnRect( const QwtIntervalSample &sample,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap ) const
-{
-    QwtColumnRect rect;
-
-    const QwtInterval &iv = sample.interval;
-    if ( !iv.isValid() )
-        return rect;
-
-    if ( orientation() == Qt::Horizontal )
-    {
-        const double x0 = xMap.transform( baseline() );
-        const double x  = xMap.transform( sample.value );
-        const double y1 = yMap.transform( iv.minValue() );
-        const double y2 = yMap.transform( iv.maxValue() );
-
-        rect.hInterval.setInterval( x0, x );
-        rect.vInterval.setInterval( y1, y2, iv.borderFlags() );
-        rect.direction = ( x < x0 ) ? QwtColumnRect::RightToLeft :
-                         QwtColumnRect::LeftToRight;
-    }
-    else
-    {
-        const double x1 = xMap.transform( iv.minValue() );
-        const double x2 = xMap.transform( iv.maxValue() );
-        const double y0 = yMap.transform( baseline() );
-        const double y = yMap.transform( sample.value );
-
-        rect.hInterval.setInterval( x1, x2, iv.borderFlags() );
-        rect.vInterval.setInterval( y0, y );
-        rect.direction = ( y < y0 ) ? QwtColumnRect::BottomToTop :
-            QwtColumnRect::TopToBottom;
-    }
-
-    return rect;
-}
-
-/*!
-  Draw a column for a sample in Columns style().
-
-  When a symbol() has been set the symbol is used otherwise the
-  column is displayed as plain rectangle using pen() and brush().
-
-  \param painter Painter
-  \param rect Rectangle where to paint the column in paint device coordinates
-  \param sample Sample to be displayed
-
-  \note In applications, where different intervals need to be displayed
-        in a different way ( f.e different colors or even using different symbols)
-        it is recommended to overload drawColumn().
-*/
-void QwtPlotHistogram::drawColumn( QPainter *painter,
-    const QwtColumnRect &rect, const QwtIntervalSample &sample ) const
-{
-    Q_UNUSED( sample );
-
-    if ( d_data->symbol &&
-        ( d_data->symbol->style() != QwtColumnSymbol::NoStyle ) )
-    {
-        d_data->symbol->draw( painter, rect );
-    }
-    else
-    {
-        QRectF r = rect.toRect();
-        if ( QwtPainter::roundingAlignment( painter ) )
-        {
-            r.setLeft( qRound( r.left() ) );
-            r.setRight( qRound( r.right() ) );
-            r.setTop( qRound( r.top() ) );
-            r.setBottom( qRound( r.bottom() ) );
-        }
-
-        QwtPainter::drawRect( painter, r );
-    }
-}
-
-/*!
-  A plain rectangle without pen using the brush()
-
-  \param index Index of the legend entry 
-                ( ignored as there is only one )
-  \param size Icon size
-  \return A graphic displaying the icon
-    
-  \sa QwtPlotItem::setLegendIconSize(), QwtPlotItem::legendData()
-*/
-QwtGraphic QwtPlotHistogram::legendIcon( int index,
-    const QSizeF &size ) const
-{
-    Q_UNUSED( index );
-    return defaultIcon( d_data->brush, size );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_histogram.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_histogram.h
deleted file mode 100644
index a000d58422eb68eee2e3fac09d26540b16004004..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_histogram.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_HISTOGRAM_H
-#define QWT_PLOT_HISTOGRAM_H
-
-#include "qwt_global.h"
-#include "qwt_plot_seriesitem.h"
-#include "qwt_column_symbol.h"
-#include <qcolor.h>
-#include <qvector.h>
-
-class QwtIntervalData;
-class QString;
-class QPolygonF;
-
-/*!
-  \brief QwtPlotHistogram represents a series of samples, where an interval
-         is associated with a value ( \f$y = f([x1,x2])\f$ ).
-
-  The representation depends on the style() and an optional symbol()
-  that is displayed for each interval.
-
-  \note The term "histogram" is used in a different way in the areas of
-        digital image processing and statistics. Wikipedia introduces the
-        terms "image histogram" and "color histogram" to avoid confusions.
-        While "image histograms" can be displayed by a QwtPlotCurve there
-        is no applicable plot item for a "color histogram" yet.
-
-  \sa QwtPlotBarChart, QwtPlotMultiBarChart
-*/
-
-class QWT_EXPORT QwtPlotHistogram: 
-    public QwtPlotSeriesItem, public QwtSeriesStore<QwtIntervalSample>
-{
-public:
-    /*!
-        Histogram styles.
-        The default style is QwtPlotHistogram::Columns.
-
-        \sa setStyle(), style(), setSymbol(), symbol(), setBaseline()
-    */
-    enum HistogramStyle
-    {
-        /*!
-           Draw an outline around the area, that is build by all intervals
-           using the pen() and fill it with the brush(). The outline style
-           requires, that the intervals are in increasing order and
-           not overlapping.
-         */
-        Outline,
-
-        /*!
-           Draw a column for each interval. When a symbol() has been set
-           the symbol is used otherwise the column is displayed as 
-           plain rectangle using pen() and brush().
-         */
-        Columns,
-
-        /*!
-           Draw a simple line using the pen() for each interval.
-         */
-        Lines,
-
-        /*!
-           Styles >= UserStyle are reserved for derived
-           classes that overload drawSeries() with
-           additional application specific ways to display a histogram.
-         */
-        UserStyle = 100
-    };
-
-    explicit QwtPlotHistogram( const QString &title = QString::null );
-    explicit QwtPlotHistogram( const QwtText &title );
-    virtual ~QwtPlotHistogram();
-
-    virtual int rtti() const;
-
-    void setPen( const QColor &, qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setPen( const QPen & );
-    const QPen &pen() const;
-
-    void setBrush( const QBrush & );
-    const QBrush &brush() const;
-
-    void setSamples( const QVector<QwtIntervalSample> & );
-    void setSamples( QwtSeriesData<QwtIntervalSample> * );
-
-    void setBaseline( double reference );
-    double baseline() const;
-
-    void setStyle( HistogramStyle style );
-    HistogramStyle style() const;
-
-    void setSymbol( const QwtColumnSymbol * );
-    const QwtColumnSymbol *symbol() const;
-
-    virtual void drawSeries( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual QRectF boundingRect() const;
-
-    virtual QwtGraphic legendIcon( int index, const QSizeF & ) const;
-
-protected:
-    virtual QwtColumnRect columnRect( const QwtIntervalSample &,
-        const QwtScaleMap &, const QwtScaleMap & ) const;
-
-    virtual void drawColumn( QPainter *, const QwtColumnRect &,
-        const QwtIntervalSample & ) const;
-
-    void drawColumns( QPainter *,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        int from, int to ) const;
-
-    void drawOutline( QPainter *,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        int from, int to ) const;
-
-    void drawLines( QPainter *,
-         const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-         int from, int to ) const;
-
-private:
-    void init();
-    void flushPolygon( QPainter *, double baseLine, QPolygonF & ) const;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_intervalcurve.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_intervalcurve.cpp
deleted file mode 100644
index 3b06a6651d9d475e98f885c204cbb69a0d29700a..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_intervalcurve.cpp
+++ /dev/null
@@ -1,603 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_intervalcurve.h"
-#include "qwt_interval_symbol.h"
-#include "qwt_scale_map.h"
-#include "qwt_clipper.h"
-#include "qwt_painter.h"
-#include <string.h>
-
-#include <qpainter.h>
-
-static inline bool qwtIsHSampleInside( const QwtIntervalSample &sample,
-    double xMin, double xMax, double yMin, double yMax )
-{
-    const double y = sample.value;
-    const double x1 = sample.interval.minValue();
-    const double x2 = sample.interval.maxValue();
-
-    const bool isOffScreen = ( y < yMin ) || ( y > yMax )
-        || ( x1 < xMin && x2 < xMin ) || ( x1 > xMax && x2 > xMax );
-
-    return !isOffScreen;
-}
-
-static inline bool qwtIsVSampleInside( const QwtIntervalSample &sample,
-    double xMin, double xMax, double yMin, double yMax )
-{
-    const double x = sample.value;
-    const double y1 = sample.interval.minValue();
-    const double y2 = sample.interval.maxValue();
-
-    const bool isOffScreen = ( x < xMin ) || ( x > xMax )
-        || ( y1 < yMin && y2 < yMin ) || ( y1 > yMax && y2 > yMax );
-
-    return !isOffScreen;
-}
-
-class QwtPlotIntervalCurve::PrivateData
-{
-public:
-    PrivateData():
-        style( QwtPlotIntervalCurve::Tube ),
-        symbol( NULL ),
-        pen( Qt::black ),
-        brush( Qt::white )
-    {
-        paintAttributes = QwtPlotIntervalCurve::ClipPolygons;
-        paintAttributes |= QwtPlotIntervalCurve::ClipSymbol;
-
-        pen.setCapStyle( Qt::FlatCap );
-    }
-
-    ~PrivateData()
-    {
-        delete symbol;
-    }
-
-    QwtPlotIntervalCurve::CurveStyle style;
-    const QwtIntervalSymbol *symbol;
-
-    QPen pen;
-    QBrush brush;
-
-    QwtPlotIntervalCurve::PaintAttributes paintAttributes;
-};
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotIntervalCurve::QwtPlotIntervalCurve( const QwtText &title ):
-    QwtPlotSeriesItem( title )
-{
-    init();
-}
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotIntervalCurve::QwtPlotIntervalCurve( const QString &title ):
-    QwtPlotSeriesItem( QwtText( title ) )
-{
-    init();
-}
-
-//! Destructor
-QwtPlotIntervalCurve::~QwtPlotIntervalCurve()
-{
-    delete d_data;
-}
-
-//! Initialize internal members
-void QwtPlotIntervalCurve::init()
-{
-    setItemAttribute( QwtPlotItem::Legend, true );
-    setItemAttribute( QwtPlotItem::AutoScale, true );
-
-    d_data = new PrivateData;
-    setData( new QwtIntervalSeriesData() );
-
-    setZ( 19.0 );
-}
-
-//! \return QwtPlotItem::Rtti_PlotIntervalCurve
-int QwtPlotIntervalCurve::rtti() const
-{
-    return QwtPlotIntervalCurve::Rtti_PlotIntervalCurve;
-}
-
-/*!
-  Specify an attribute how to draw the curve
-
-  \param attribute Paint attribute
-  \param on On/Off
-  \sa testPaintAttribute()
-*/
-void QwtPlotIntervalCurve::setPaintAttribute(
-    PaintAttribute attribute, bool on )
-{
-    if ( on )
-        d_data->paintAttributes |= attribute;
-    else
-        d_data->paintAttributes &= ~attribute;
-}
-
-/*!
-    \return True, when attribute is enabled
-    \sa PaintAttribute, setPaintAttribute()
-*/
-bool QwtPlotIntervalCurve::testPaintAttribute(
-    PaintAttribute attribute ) const
-{
-    return ( d_data->paintAttributes & attribute );
-}
-
-/*!
-  Initialize data with an array of samples.
-  \param samples Vector of samples
-*/
-void QwtPlotIntervalCurve::setSamples(
-    const QVector<QwtIntervalSample> &samples )
-{
-    setData( new QwtIntervalSeriesData( samples ) );
-}
-
-/*!
-  Assign a series of samples
-    
-  setSamples() is just a wrapper for setData() without any additional
-  value - beside that it is easier to find for the developer.
-    
-  \param data Data
-  \warning The item takes ownership of the data object, deleting
-           it when its not used anymore.
-*/
-void QwtPlotIntervalCurve::setSamples( 
-    QwtSeriesData<QwtIntervalSample> *data )
-{
-    setData( data );
-}
-
-/*!
-  Set the curve's drawing style
-
-  \param style Curve style
-  \sa CurveStyle, style()
-*/
-void QwtPlotIntervalCurve::setStyle( CurveStyle style )
-{
-    if ( style != d_data->style )
-    {
-        d_data->style = style;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-    \return Style of the curve
-    \sa setStyle()
-*/
-QwtPlotIntervalCurve::CurveStyle QwtPlotIntervalCurve::style() const
-{
-    return d_data->style;
-}
-
-/*!
-  Assign a symbol.
-
-  \param symbol Symbol
-  \sa symbol()
-*/
-void QwtPlotIntervalCurve::setSymbol( const QwtIntervalSymbol *symbol )
-{
-    if ( symbol != d_data->symbol )
-    {
-        delete d_data->symbol;
-        d_data->symbol = symbol;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Current symbol or NULL, when no symbol has been assigned
-  \sa setSymbol()
-*/
-const QwtIntervalSymbol *QwtPlotIntervalCurve::symbol() const
-{
-    return d_data->symbol;
-}
-
-/*!
-  Build and assign a pen
-    
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-    
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-    
-  \sa pen(), brush()
- */
-void QwtPlotIntervalCurve::setPen( const QColor &color, qreal width, Qt::PenStyle style )
-{   
-    setPen( QPen( color, width, style ) );
-}   
-
-/*!
-  \brief Assign a pen
-  \param pen New pen
-  \sa pen(), brush()
-*/
-void QwtPlotIntervalCurve::setPen( const QPen &pen )
-{
-    if ( pen != d_data->pen )
-    {
-        d_data->pen = pen;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-    \return Pen used to draw the lines
-    \sa setPen(), brush()
-*/
-const QPen& QwtPlotIntervalCurve::pen() const
-{
-    return d_data->pen;
-}
-
-/*!
-  Assign a brush.
-
-  The brush is used to fill the area in Tube style().
-
-  \param brush Brush
-  \sa brush(), pen(), setStyle(), CurveStyle
-*/
-void QwtPlotIntervalCurve::setBrush( const QBrush &brush )
-{
-    if ( brush != d_data->brush )
-    {
-        d_data->brush = brush;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Brush used to fill the area in Tube style()
-  \sa setBrush(), setStyle(), CurveStyle
-*/
-const QBrush& QwtPlotIntervalCurve::brush() const
-{
-    return d_data->brush;
-}
-
-/*!
-  \return Bounding rectangle of all samples.
-  For an empty series the rectangle is invalid.
-*/
-QRectF QwtPlotIntervalCurve::boundingRect() const
-{
-    QRectF rect = QwtPlotSeriesItem::boundingRect();
-    if ( rect.isValid() && orientation() == Qt::Vertical )
-        rect.setRect( rect.y(), rect.x(), rect.height(), rect.width() );
-
-    return rect;
-}
-
-/*!
-  Draw a subset of the samples
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rectangle of the canvas
-  \param from Index of the first sample to be painted
-  \param to Index of the last sample to be painted. If to < 0 the
-         series will be painted to its last sample.
-
-  \sa drawTube(), drawSymbols()
-*/
-void QwtPlotIntervalCurve::drawSeries( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    if ( to < 0 )
-        to = dataSize() - 1;
-
-    if ( from < 0 )
-        from = 0;
-
-    if ( from > to )
-        return;
-
-    switch ( d_data->style )
-    {
-        case Tube:
-            drawTube( painter, xMap, yMap, canvasRect, from, to );
-            break;
-
-        case NoCurve:
-        default:
-            break;
-    }
-
-    if ( d_data->symbol &&
-        ( d_data->symbol->style() != QwtIntervalSymbol::NoSymbol ) )
-    {
-        drawSymbols( painter, *d_data->symbol,
-            xMap, yMap, canvasRect, from, to );
-    }
-}
-
-/*!
-  Draw a tube
-
-  Builds 2 curves from the upper and lower limits of the intervals
-  and draws them with the pen(). The area between the curves is
-  filled with the brush().
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rectangle of the canvas
-  \param from Index of the first sample to be painted
-  \param to Index of the last sample to be painted. If to < 0 the
-         series will be painted to its last sample.
-
-  \sa drawSeries(), drawSymbols()
-*/
-void QwtPlotIntervalCurve::drawTube( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    painter->save();
-
-    const size_t size = to - from + 1;
-    QPolygonF polygon( 2 * size );
-    QPointF *points = polygon.data();
-
-    for ( uint i = 0; i < size; i++ )
-    {
-        QPointF &minValue = points[i];
-        QPointF &maxValue = points[2 * size - 1 - i];
-
-        const QwtIntervalSample intervalSample = sample( from + i );
-        if ( orientation() == Qt::Vertical )
-        {
-            double x = xMap.transform( intervalSample.value );
-            double y1 = yMap.transform( intervalSample.interval.minValue() );
-            double y2 = yMap.transform( intervalSample.interval.maxValue() );
-            if ( doAlign )
-            {
-                x = qRound( x );
-                y1 = qRound( y1 );
-                y2 = qRound( y2 );
-            }
-
-            minValue.rx() = x;
-            minValue.ry() = y1;
-            maxValue.rx() = x;
-            maxValue.ry() = y2;
-        }
-        else
-        {
-            double y = yMap.transform( intervalSample.value );
-            double x1 = xMap.transform( intervalSample.interval.minValue() );
-            double x2 = xMap.transform( intervalSample.interval.maxValue() );
-            if ( doAlign )
-            {
-                y = qRound( y );
-                x1 = qRound( x1 );
-                x2 = qRound( x2 );
-            }
-
-            minValue.rx() = x1;
-            minValue.ry() = y;
-            maxValue.rx() = x2;
-            maxValue.ry() = y;
-        }
-    }
-
-    if ( d_data->brush.style() != Qt::NoBrush )
-    {
-        painter->setPen( QPen( Qt::NoPen ) );
-        painter->setBrush( d_data->brush );
-
-        if ( d_data->paintAttributes & ClipPolygons )
-        {
-            const qreal m = 1.0;
-            const QPolygonF p = QwtClipper::clipPolygonF(
-               canvasRect.adjusted( -m, -m, m, m ), polygon, true );
-
-            QwtPainter::drawPolygon( painter, p );
-        }
-        else
-        {
-            QwtPainter::drawPolygon( painter, polygon );
-        }
-    }
-
-    if ( d_data->pen.style() != Qt::NoPen )
-    {
-        painter->setPen( d_data->pen );
-        painter->setBrush( Qt::NoBrush );
-
-        if ( d_data->paintAttributes & ClipPolygons )
-        {
-            qreal pw = qMax( qreal( 1.0 ), painter->pen().widthF() );
-            const QRectF clipRect = canvasRect.adjusted( -pw, -pw, pw, pw );
-
-            QPolygonF p;
-
-            p.resize( size );
-            ::memcpy( p.data(), points, size * sizeof( QPointF ) );
-            p = QwtClipper::clipPolygonF( clipRect, p );
-            QwtPainter::drawPolyline( painter, p );
-
-            p.resize( size );
-            ::memcpy( p.data(), points + size, size * sizeof( QPointF ) );
-            p = QwtClipper::clipPolygonF( clipRect, p );
-            QwtPainter::drawPolyline( painter, p );
-        }
-        else
-        {
-            QwtPainter::drawPolyline( painter, points, size );
-            QwtPainter::drawPolyline( painter, points + size, size );
-        }
-    }
-
-    painter->restore();
-}
-
-/*!
-  Draw symbols for a subset of the samples
-
-  \param painter Painter
-  \param symbol Interval symbol
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param from Index of the first sample to be painted
-  \param to Index of the last sample to be painted
-
-  \sa setSymbol(), drawSeries(), drawTube()
-*/
-void QwtPlotIntervalCurve::drawSymbols(
-    QPainter *painter, const QwtIntervalSymbol &symbol,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    painter->save();
-
-    QPen pen = symbol.pen();
-    pen.setCapStyle( Qt::FlatCap );
-
-    painter->setPen( pen );
-    painter->setBrush( symbol.brush() );
-
-    const QRectF tr = QwtScaleMap::invTransform( xMap, yMap, canvasRect );
-
-    const double xMin = tr.left();
-    const double xMax = tr.right();
-    const double yMin = tr.top();
-    const double yMax = tr.bottom();
-
-    const bool doClip = d_data->paintAttributes & ClipSymbol;
-
-    for ( int i = from; i <= to; i++ )
-    {
-        const QwtIntervalSample s = sample( i );
-
-        if ( orientation() == Qt::Vertical )
-        {
-            if ( !doClip || qwtIsVSampleInside( s, xMin, xMax, yMin, yMax ) )
-            {
-                const double x = xMap.transform( s.value );
-                const double y1 = yMap.transform( s.interval.minValue() );
-                const double y2 = yMap.transform( s.interval.maxValue() );
-
-                symbol.draw( painter, orientation(),
-                    QPointF( x, y1 ), QPointF( x, y2 ) );
-            }
-        }
-        else
-        {
-            if ( !doClip || qwtIsHSampleInside( s, xMin, xMax, yMin, yMax ) )
-            {
-                const double y = yMap.transform( s.value );
-                const double x1 = xMap.transform( s.interval.minValue() );
-                const double x2 = xMap.transform( s.interval.maxValue() );
-
-                symbol.draw( painter, orientation(),
-                    QPointF( x1, y ), QPointF( x2, y ) );
-            }
-        }
-    }
-
-    painter->restore();
-}
-
-/*!
-  \return Icon for the legend
-
-  In case of Tube style() the icon is a plain rectangle filled with the brush().
-  If a symbol is assigned it is scaled to size.
-
-  \param index Index of the legend entry 
-               ( ignored as there is only one )
-  \param size Icon size
-    
-  \sa QwtPlotItem::setLegendIconSize(), QwtPlotItem::legendData()
-*/
-QwtGraphic QwtPlotIntervalCurve::legendIcon( 
-    int index, const QSizeF &size ) const
-{
-    Q_UNUSED( index );
-
-    if ( size.isEmpty() )
-        return QwtGraphic();
-
-    QwtGraphic icon;
-    icon.setDefaultSize( size );
-    icon.setRenderHint( QwtGraphic::RenderPensUnscaled, true );
-
-    QPainter painter( &icon );
-    painter.setRenderHint( QPainter::Antialiasing,
-        testRenderHint( QwtPlotItem::RenderAntialiased ) );
-
-    if ( d_data->style == Tube )
-    {
-        QRectF r( 0, 0, size.width(), size.height() );
-        painter.fillRect( r, d_data->brush );
-    }
-
-    if ( d_data->symbol &&
-        ( d_data->symbol->style() != QwtIntervalSymbol::NoSymbol ) )
-    {
-        QPen pen = d_data->symbol->pen();
-        pen.setWidthF( pen.widthF() );
-        pen.setCapStyle( Qt::FlatCap );
-
-        painter.setPen( pen );
-        painter.setBrush( d_data->symbol->brush() );
-
-        if ( orientation() == Qt::Vertical )
-        {
-            const double x = 0.5 * size.width();
-
-            d_data->symbol->draw( &painter, orientation(),
-                QPointF( x, 0 ), QPointF( x, size.height() - 1.0 ) );
-        }
-        else
-        {
-            const double y = 0.5 * size.height();
-
-            d_data->symbol->draw( &painter, orientation(),
-                QPointF( 0.0, y ), QPointF( size.width() - 1.0, y ) );
-        }
-    }
-
-    return icon;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_intervalcurve.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_intervalcurve.h
deleted file mode 100644
index 74a422635f3b521d66ffb046eee19111e58b2ba4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_intervalcurve.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_INTERVAL_CURVE_H
-#define QWT_PLOT_INTERVAL_CURVE_H
-
-#include "qwt_global.h"
-#include "qwt_plot_seriesitem.h"
-#include "qwt_series_data.h"
-
-class QwtIntervalSymbol;
-
-/*!
-  \brief QwtPlotIntervalCurve represents a series of samples, where each value
-         is associated with an interval ( \f$[y1,y2] = f(x)\f$ ).
-
-  The representation depends on the style() and an optional symbol()
-  that is displayed for each interval. QwtPlotIntervalCurve might be used
-  to display error bars or the area between 2 curves.
-*/
-class QWT_EXPORT QwtPlotIntervalCurve: 
-    public QwtPlotSeriesItem, public QwtSeriesStore<QwtIntervalSample>
-{
-public:
-    /*!
-        \brief Curve styles.
-        The default setting is QwtPlotIntervalCurve::Tube.
-
-        \sa setStyle(), style()
-    */
-    enum CurveStyle
-    {
-        /*!
-           Don't draw a curve. Note: This doesn't affect the symbols.
-         */
-        NoCurve,
-
-        /*!
-           Build 2 curves from the upper and lower limits of the intervals
-           and draw them with the pen(). The area between the curves is
-           filled with the brush().
-         */
-        Tube,
-
-        /*!
-           Styles >= QwtPlotIntervalCurve::UserCurve are reserved for derived
-           classes that overload drawSeries() with
-           additional application specific curve types.
-         */
-        UserCurve = 100
-    };
-
-    /*!
-        Attributes to modify the drawing algorithm.
-        \sa setPaintAttribute(), testPaintAttribute()
-    */
-    enum PaintAttribute
-    {
-        /*!
-          Clip polygons before painting them. In situations, where points
-          are far outside the visible area (f.e when zooming deep) this
-          might be a substantial improvement for the painting performance.
-         */
-        ClipPolygons = 0x01,
-
-        //! Check if a symbol is on the plot canvas before painting it.
-        ClipSymbol   = 0x02
-    };
-
-    //! Paint attributes
-    typedef QFlags<PaintAttribute> PaintAttributes;
-
-    explicit QwtPlotIntervalCurve( const QString &title = QString::null );
-    explicit QwtPlotIntervalCurve( const QwtText &title );
-
-    virtual ~QwtPlotIntervalCurve();
-
-    virtual int rtti() const;
-
-    void setPaintAttribute( PaintAttribute, bool on = true );
-    bool testPaintAttribute( PaintAttribute ) const;
-
-    void setSamples( const QVector<QwtIntervalSample> & );
-    void setSamples( QwtSeriesData<QwtIntervalSample> * );
-
-    void setPen( const QColor &, qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setPen( const QPen & );
-    const QPen &pen() const;
-
-    void setBrush( const QBrush & );
-    const QBrush &brush() const;
-
-    void setStyle( CurveStyle style );
-    CurveStyle style() const;
-
-    void setSymbol( const QwtIntervalSymbol * );
-    const QwtIntervalSymbol *symbol() const;
-
-    virtual void drawSeries( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual QRectF boundingRect() const;
-
-    virtual QwtGraphic legendIcon( int index, const QSizeF & ) const;
-
-protected:
-
-    void init();
-
-    virtual void drawTube( QPainter *,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual void drawSymbols( QPainter *, const QwtIntervalSymbol &,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotIntervalCurve::PaintAttributes )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_item.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_item.cpp
deleted file mode 100644
index 15ae7248332d3bf70b69681b4c206f832ca73fe9..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_item.cpp
+++ /dev/null
@@ -1,698 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_item.h"
-#include "qwt_text.h"
-#include "qwt_plot.h"
-#include "qwt_legend_data.h"
-#include "qwt_scale_div.h"
-#include "qwt_graphic.h"
-#include <qpainter.h>
-
-class QwtPlotItem::PrivateData
-{
-public:
-    PrivateData():
-        plot( NULL ),
-        isVisible( true ),
-        attributes( 0 ),
-        interests( 0 ),
-        renderHints( 0 ),
-        renderThreadCount( 1 ),
-        z( 0.0 ),
-        xAxis( QwtPlot::xBottom ),
-        yAxis( QwtPlot::yLeft ),
-        legendIconSize( 8, 8 )
-    {
-    }
-
-    mutable QwtPlot *plot;
-
-    bool isVisible;
-
-    QwtPlotItem::ItemAttributes attributes;
-    QwtPlotItem::ItemInterests interests;
-
-    QwtPlotItem::RenderHints renderHints;
-    uint renderThreadCount;
-
-    double z;
-
-    int xAxis;
-    int yAxis;
-
-    QwtText title;
-    QSize legendIconSize;
-};
-
-/*!
-   Constructor
-   \param title Title of the item
-*/
-QwtPlotItem::QwtPlotItem( const QwtText &title )
-{
-    d_data = new PrivateData;
-    d_data->title = title;
-}
-
-//! Destroy the QwtPlotItem
-QwtPlotItem::~QwtPlotItem()
-{
-    attach( NULL );
-    delete d_data;
-}
-
-/*!
-  \brief Attach the item to a plot.
-
-  This method will attach a QwtPlotItem to the QwtPlot argument. It will first
-  detach the QwtPlotItem from any plot from a previous call to attach (if
-  necessary). If a NULL argument is passed, it will detach from any QwtPlot it
-  was attached to.
-
-  \param plot Plot widget
-  \sa detach()
-*/
-void QwtPlotItem::attach( QwtPlot *plot )
-{
-    if ( plot == d_data->plot )
-        return;
-
-    if ( d_data->plot )
-        d_data->plot->attachItem( this, false );
-
-    d_data->plot = plot;
-
-    if ( d_data->plot )
-        d_data->plot->attachItem( this, true );
-}
-
-/*!
-   \brief This method detaches a QwtPlotItem from any 
-          QwtPlot it has been associated with.
-
-   detach() is equivalent to calling attach( NULL )
-   \sa attach()
-*/
-void QwtPlotItem::detach()
-{
-    attach( NULL );
-}
-
-/*!
-   Return rtti for the specific class represented. QwtPlotItem is simply
-   a virtual interface class, and base classes will implement this method
-   with specific rtti values so a user can differentiate them.
-
-   The rtti value is useful for environments, where the
-   runtime type information is disabled and it is not possible
-   to do a dynamic_cast<...>.
-
-   \return rtti value
-   \sa RttiValues
-*/
-int QwtPlotItem::rtti() const
-{
-    return Rtti_PlotItem;
-}
-
-//! Return attached plot
-QwtPlot *QwtPlotItem::plot() const
-{
-    return d_data->plot;
-}
-
-/*!
-   Plot items are painted in increasing z-order.
-
-   \return setZ(), QwtPlotDict::itemList()
-*/
-double QwtPlotItem::z() const
-{
-    return d_data->z;
-}
-
-/*!
-   \brief Set the z value
-
-   Plot items are painted in increasing z-order.
-
-   \param z Z-value
-   \sa z(), QwtPlotDict::itemList()
-*/
-void QwtPlotItem::setZ( double z )
-{
-    if ( d_data->z != z )
-    {
-        if ( d_data->plot ) // update the z order
-            d_data->plot->attachItem( this, false );
-
-        d_data->z = z;
-
-        if ( d_data->plot )
-            d_data->plot->attachItem( this, true );
-
-        itemChanged();
-    }
-}
-
-/*!
-   Set a new title
-
-   \param title Title
-   \sa title()
-*/
-void QwtPlotItem::setTitle( const QString &title )
-{
-    setTitle( QwtText( title ) );
-}
-
-/*!
-   Set a new title
-
-   \param title Title
-   \sa title()
-*/
-void QwtPlotItem::setTitle( const QwtText &title )
-{
-    if ( d_data->title != title )
-    {
-        d_data->title = title;
-
-        legendChanged();
-#if 0
-        itemChanged();
-#endif
-    }
-}
-
-/*!
-   \return Title of the item
-   \sa setTitle()
-*/
-const QwtText &QwtPlotItem::title() const
-{
-    return d_data->title;
-}
-
-/*!
-   Toggle an item attribute
-
-   \param attribute Attribute type
-   \param on true/false
-
-   \sa testItemAttribute(), ItemInterest
-*/
-void QwtPlotItem::setItemAttribute( ItemAttribute attribute, bool on )
-{
-    if ( d_data->attributes.testFlag( attribute ) != on )
-    {
-        if ( on )
-            d_data->attributes |= attribute;
-        else
-            d_data->attributes &= ~attribute;
-
-        if ( attribute == QwtPlotItem::Legend )
-            legendChanged();
-
-        itemChanged();
-    }
-}
-
-/*!
-   Test an item attribute
-
-   \param attribute Attribute type
-   \return true/false
-   \sa setItemAttribute(), ItemInterest
-*/
-bool QwtPlotItem::testItemAttribute( ItemAttribute attribute ) const
-{
-    return d_data->attributes.testFlag( attribute );
-}
-
-/*!
-   Toggle an item interest
-
-   \param interest Interest type
-   \param on true/false
-
-   \sa testItemInterest(), ItemAttribute
-*/
-void QwtPlotItem::setItemInterest( ItemInterest interest, bool on )
-{
-    if ( d_data->interests.testFlag( interest ) != on )
-    {
-        if ( on )
-            d_data->interests |= interest;
-        else
-            d_data->interests &= ~interest;
-
-        itemChanged();
-    }
-}
-
-/*!
-   Test an item interest
-
-   \param interest Interest type
-   \return true/false
-   \sa setItemInterest(), ItemAttribute
-*/
-bool QwtPlotItem::testItemInterest( ItemInterest interest ) const
-{
-    return d_data->interests.testFlag( interest );
-}
-
-/*!
-   Toggle an render hint
-
-   \param hint Render hint
-   \param on true/false
-
-   \sa testRenderHint(), RenderHint
-*/
-void QwtPlotItem::setRenderHint( RenderHint hint, bool on )
-{
-    if ( d_data->renderHints.testFlag( hint ) != on )
-    {
-        if ( on )
-            d_data->renderHints |= hint;
-        else
-            d_data->renderHints &= ~hint;
-
-        itemChanged();
-    }
-}
-
-/*!
-   Test a render hint
-
-   \param hint Render hint
-   \return true/false
-   \sa setRenderHint(), RenderHint
-*/
-bool QwtPlotItem::testRenderHint( RenderHint hint ) const
-{
-    return d_data->renderHints.testFlag( hint );
-}
-
-/*!
-   On multi core systems rendering of certain plot item 
-   ( f.e QwtPlotRasterItem ) can be done in parallel in 
-   several threads.
-
-   The default setting is set to 1.
-
-   \param numThreads Number of threads to be used for rendering.
-                     If numThreads is set to 0, the system specific
-                     ideal thread count is used.
-
-   The default thread count is 1 ( = no additional threads )
-*/
-void QwtPlotItem::setRenderThreadCount( uint numThreads )
-{
-    d_data->renderThreadCount = numThreads;
-}
-
-/*!
-   \return Number of threads to be used for rendering.
-           If numThreads() is set to 0, the system specific
-           ideal thread count is used.
-*/
-uint QwtPlotItem::renderThreadCount() const
-{
-    return d_data->renderThreadCount;
-}
-
-/*!
-   Set the size of the legend icon
-
-   The default setting is 8x8 pixels
-
-   \param size Size
-   \sa legendIconSize(), legendIcon()
-*/
-void QwtPlotItem::setLegendIconSize( const QSize &size )
-{
-    if ( d_data->legendIconSize != size )
-    {
-        d_data->legendIconSize = size;
-        legendChanged();
-    }
-}
-
-/*!
-   \return Legend icon size
-   \sa setLegendIconSize(), legendIcon()
-*/
-QSize QwtPlotItem::legendIconSize() const
-{
-    return d_data->legendIconSize;
-}
-
-/*!
-   \return Icon representing the item on the legend
-
-   The default implementation returns an invalid icon
-
-   \param index Index of the legend entry 
-                ( usually there is only one )
-   \param size Icon size
-
-   \sa setLegendIconSize(), legendData()
- */
-QwtGraphic QwtPlotItem::legendIcon( 
-    int index, const QSizeF &size ) const
-{
-    Q_UNUSED( index )
-    Q_UNUSED( size )
-
-    return QwtGraphic();
-}
-
-/*!
-   \brief Return a default icon from a brush
-
-   The default icon is a filled rectangle used
-   in several derived classes as legendIcon().
-
-   \param brush Fill brush
-   \param size Icon size
-
-   \return A filled rectangle
- */
-QwtGraphic QwtPlotItem::defaultIcon( 
-    const QBrush &brush, const QSizeF &size ) const
-{   
-    QwtGraphic icon;
-    if ( !size.isEmpty() )
-    {
-        icon.setDefaultSize( size );
-        
-        QRectF r( 0, 0, size.width(), size.height() );
-        
-        QPainter painter( &icon );
-        painter.fillRect( r, brush );
-    }   
-    
-    return icon;
-}   
-
-//! Show the item
-void QwtPlotItem::show()
-{
-    setVisible( true );
-}
-
-//! Hide the item
-void QwtPlotItem::hide()
-{
-    setVisible( false );
-}
-
-/*!
-    Show/Hide the item
-
-    \param on Show if true, otherwise hide
-    \sa isVisible(), show(), hide()
-*/
-void QwtPlotItem::setVisible( bool on )
-{
-    if ( on != d_data->isVisible )
-    {
-        d_data->isVisible = on;
-        itemChanged();
-    }
-}
-
-/*!
-    \return true if visible
-    \sa setVisible(), show(), hide()
-*/
-bool QwtPlotItem::isVisible() const
-{
-    return d_data->isVisible;
-}
-
-/*!
-   Update the legend and call QwtPlot::autoRefresh() for the
-   parent plot.
-
-   \sa QwtPlot::legendChanged(), QwtPlot::autoRefresh()
-*/
-void QwtPlotItem::itemChanged()
-{
-    if ( d_data->plot )
-        d_data->plot->autoRefresh();
-}
-
-/*!
-   Update the legend of the parent plot.
-   \sa QwtPlot::updateLegend(), itemChanged()
-*/
-void QwtPlotItem::legendChanged()
-{
-    if ( testItemAttribute( QwtPlotItem::Legend ) && d_data->plot )
-        d_data->plot->updateLegend( this );
-}
-
-/*!
-   Set X and Y axis
-
-   The item will painted according to the coordinates of its Axes.
-
-   \param xAxis X Axis ( QwtPlot::xBottom or QwtPlot::xTop )
-   \param yAxis Y Axis ( QwtPlot::yLeft or QwtPlot::yRight )
-
-   \sa setXAxis(), setYAxis(), xAxis(), yAxis(), QwtPlot::Axis
-*/
-void QwtPlotItem::setAxes( int xAxis, int yAxis )
-{
-    if ( xAxis == QwtPlot::xBottom || xAxis == QwtPlot::xTop )
-        d_data->xAxis = xAxis;
-
-    if ( yAxis == QwtPlot::yLeft || yAxis == QwtPlot::yRight )
-        d_data->yAxis = yAxis;
-
-    itemChanged();
-}
-
-/*!
-   Set the X axis
-
-   The item will painted according to the coordinates its Axes.
-
-   \param axis X Axis ( QwtPlot::xBottom or QwtPlot::xTop )
-   \sa setAxes(), setYAxis(), xAxis(), QwtPlot::Axis
-*/
-void QwtPlotItem::setXAxis( int axis )
-{
-    if ( axis == QwtPlot::xBottom || axis == QwtPlot::xTop )
-    {
-        d_data->xAxis = axis;
-        itemChanged();
-    }
-}
-
-/*!
-   Set the Y axis
-
-   The item will painted according to the coordinates its Axes.
-
-   \param axis Y Axis ( QwtPlot::yLeft or QwtPlot::yRight )
-   \sa setAxes(), setXAxis(), yAxis(), QwtPlot::Axis
-*/
-void QwtPlotItem::setYAxis( int axis )
-{
-    if ( axis == QwtPlot::yLeft || axis == QwtPlot::yRight )
-    {
-        d_data->yAxis = axis;
-        itemChanged();
-    }
-}
-
-//! Return xAxis
-int QwtPlotItem::xAxis() const
-{
-    return d_data->xAxis;
-}
-
-//! Return yAxis
-int QwtPlotItem::yAxis() const
-{
-    return d_data->yAxis;
-}
-
-/*!
-   \return An invalid bounding rect: QRectF(1.0, 1.0, -2.0, -2.0)
-   \note A width or height < 0.0 is ignored by the autoscaler
-*/
-QRectF QwtPlotItem::boundingRect() const
-{
-    return QRectF( 1.0, 1.0, -2.0, -2.0 ); // invalid
-}
-
-/*!
-   \brief Calculate a hint for the canvas margin
-
-   When the QwtPlotItem::Margins flag is enabled the plot item
-   indicates, that it needs some margins at the borders of the canvas.
-   This is f.e. used by bar charts to reserve space for displaying
-   the bars.
-
-   The margins are in target device coordinates ( pixels on screen )
-
-   \param xMap Maps x-values into pixel coordinates.
-   \param yMap Maps y-values into pixel coordinates.
-   \param canvasRect Contents rectangle of the canvas in painter coordinates
-   \param left Returns the left margin
-   \param top Returns the top margin
-   \param right Returns the right margin
-   \param bottom Returns the bottom margin
-
-   \return The default implementation returns 0 for all margins
-
-   \sa QwtPlot::getCanvasMarginsHint(), QwtPlot::updateCanvasMargins()
- */
-void QwtPlotItem::getCanvasMarginHint( const QwtScaleMap &xMap, 
-    const QwtScaleMap &yMap, const QRectF &canvasRect,
-    double &left, double &top, double &right, double &bottom ) const
-{
-    Q_UNUSED( xMap );
-    Q_UNUSED( yMap );
-    Q_UNUSED( canvasRect );
-
-    // use QMargins, when we don't need to support Qt < 4.6 anymore
-    left = top = right = bottom = 0.0;
-}
-
-/*!
-   \brief Return all information, that is needed to represent
-          the item on the legend
-
-   Most items are represented by one entry on the legend
-   showing an icon and a text, but f.e. QwtPlotMultiBarChart
-   displays one entry for each bar.
-
-   QwtLegendData is basically a list of QVariants that makes it
-   possible to overload and reimplement legendData() to 
-   return almost any type of information, that is understood
-   by the receiver that acts as the legend.
-
-   The default implementation returns one entry with 
-   the title() of the item and the legendIcon().
-
-   \return Data, that is needed to represent the item on the legend
-   \sa title(), legendIcon(), QwtLegend, QwtPlotLegendItem
- */
-QList<QwtLegendData> QwtPlotItem::legendData() const
-{
-    QwtLegendData data;
-
-    QwtText label = title();
-    label.setRenderFlags( label.renderFlags() & Qt::AlignLeft );
-            
-    QVariant titleValue;
-    qVariantSetValue( titleValue, label );
-    data.setValue( QwtLegendData::TitleRole, titleValue );
-        
-    const QwtGraphic graphic = legendIcon( 0, legendIconSize() );
-    if ( !graphic.isNull() )
-    {   
-        QVariant iconValue;
-        qVariantSetValue( iconValue, graphic );
-        data.setValue( QwtLegendData::IconRole, iconValue );
-    }   
-        
-    QList<QwtLegendData> list;
-    list += data;
-
-    return list;
-}
-
-/*!
-   \brief Update the item to changes of the axes scale division
-
-   Update the item, when the axes of plot have changed.
-   The default implementation does nothing, but items that depend
-   on the scale division (like QwtPlotGrid()) have to reimplement
-   updateScaleDiv()
-
-   updateScaleDiv() is only called when the ScaleInterest interest
-   is enabled. The default implementation does nothing.
-
-   \param xScaleDiv Scale division of the x-axis
-   \param yScaleDiv Scale division of the y-axis
-
-   \sa QwtPlot::updateAxes(), ScaleInterest
-*/
-void QwtPlotItem::updateScaleDiv( const QwtScaleDiv &xScaleDiv,
-    const QwtScaleDiv &yScaleDiv )
-{
-    Q_UNUSED( xScaleDiv );
-    Q_UNUSED( yScaleDiv );
-}
-
-/*!
-   \brief Update the item to changes of the legend info
-
-   Plot items that want to display a legend ( not those, that want to
-   be displayed on a legend ! ) will have to implement updateLegend().
-
-   updateLegend() is only called when the LegendInterest interest
-   is enabled. The default implementation does nothing.
-
-   \param item Plot item to be displayed on a legend
-   \param data Attributes how to display item on the legend
-
-   \sa QwtPlotLegendItem
-
-   \note Plot items, that want to be displayed on a legend
-         need to enable the QwtPlotItem::Legend flag and to implement
-         legendData() and legendIcon()
- */
-void QwtPlotItem::updateLegend( const QwtPlotItem *item, 
-    const QList<QwtLegendData> &data )
-{
-    Q_UNUSED( item );
-    Q_UNUSED( data );
-}
-
-/*!
-   \brief Calculate the bounding scale rectangle of 2 maps
-
-   \param xMap Maps x-values into pixel coordinates.
-   \param yMap Maps y-values into pixel coordinates.
-
-   \return Bounding scale rect of the scale maps, not normalized
-*/
-QRectF QwtPlotItem::scaleRect( const QwtScaleMap &xMap,
-    const QwtScaleMap &yMap ) const
-{
-    return QRectF( xMap.s1(), yMap.s1(),
-        xMap.sDist(), yMap.sDist() );
-}
-
-/*!
-   \brief Calculate the bounding paint rectangle of 2 maps
-
-   \param xMap Maps x-values into pixel coordinates.
-   \param yMap Maps y-values into pixel coordinates.
-
-   \return Bounding paint rectangle of the scale maps, not normalized
-*/
-QRectF QwtPlotItem::paintRect( const QwtScaleMap &xMap,
-    const QwtScaleMap &yMap ) const
-{
-    const QRectF rect( xMap.p1(), yMap.p1(),
-        xMap.pDist(), yMap.pDist() );
-
-    return rect;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_item.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_item.h
deleted file mode 100644
index 1683d2900ca323997b1e7c485b39881b969aaa91..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_item.h
+++ /dev/null
@@ -1,307 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_ITEM_H
-#define QWT_PLOT_ITEM_H
-
-#include "qwt_global.h"
-#include "qwt_text.h"
-#include "qwt_legend_data.h"
-#include "qwt_graphic.h"
-#include <qrect.h>
-#include <qlist.h>
-#include <qmetatype.h>
-
-class QPainter;
-class QwtScaleMap;
-class QwtScaleDiv;
-class QwtPlot;
-
-/*!
-  \brief Base class for items on the plot canvas
-
-  A plot item is "something", that can be painted on the plot canvas,
-  or only affects the scales of the plot widget. They can be categorized as:
-
-  - Representator\n
-    A "Representator" is an item that represents some sort of data
-    on the plot canvas. The different representator classes are organized
-    according to the characteristics of the data:
-    - QwtPlotMarker
-      Represents a point or a horizontal/vertical coordinate
-    - QwtPlotCurve
-      Represents a series of points
-    - QwtPlotSpectrogram ( QwtPlotRasterItem )
-      Represents raster data
-    - ...
-
-  - Decorators\n
-    A "Decorator" is an item, that displays additional information, that
-    is not related to any data:
-    - QwtPlotGrid
-    - QwtPlotScaleItem
-    - QwtPlotSvgItem
-    - ...
-
-  Depending on the QwtPlotItem::ItemAttribute flags, an item is included
-  into autoscaling or has an entry on the legend.
-
-  Before misusing the existing item classes it might be better to
-  implement a new type of plot item
-  ( don't implement a watermark as spectrogram ).
-  Deriving a new type of QwtPlotItem primarily means to implement
-  the YourPlotItem::draw() method.
-
-  \sa The cpuplot example shows the implementation of additional plot items.
-*/
-
-class QWT_EXPORT QwtPlotItem
-{
-public:
-    /*!
-        \brief Runtime type information
-
-        RttiValues is used to cast plot items, without
-        having to enable runtime type information of the compiler.
-     */
-    enum RttiValues
-    {
-        //! Unspecific value, that can be used, when it doesn't matter
-        Rtti_PlotItem = 0,
-
-        //! For QwtPlotGrid
-        Rtti_PlotGrid,
-
-        //! For QwtPlotScaleItem
-        Rtti_PlotScale,
-
-        //! For QwtPlotLegendItem
-        Rtti_PlotLegend,
-
-        //! For QwtPlotMarker
-        Rtti_PlotMarker,
-
-        //! For QwtPlotCurve
-        Rtti_PlotCurve,
-
-        //! For QwtPlotSpectroCurve
-        Rtti_PlotSpectroCurve,
-
-        //! For QwtPlotIntervalCurve
-        Rtti_PlotIntervalCurve,
-
-        //! For QwtPlotHistogram
-        Rtti_PlotHistogram,
-
-        //! For QwtPlotSpectrogram
-        Rtti_PlotSpectrogram,
-
-        //! For QwtPlotSvgItem
-        Rtti_PlotSVG,
-
-        //! For QwtPlotTradingCurve
-        Rtti_PlotTradingCurve,
-
-        //! For QwtPlotBarChart
-        Rtti_PlotBarChart,
-
-        //! For QwtPlotMultiBarChart
-        Rtti_PlotMultiBarChart,
-
-        //! For QwtPlotShapeItem
-        Rtti_PlotShape,
-
-        //! For QwtPlotTextLabel
-        Rtti_PlotTextLabel,
-
-        //! For QwtPlotZoneItem
-        Rtti_PlotZone,
-
-        /*! 
-           Values >= Rtti_PlotUserItem are reserved for plot items
-           not implemented in the Qwt library.
-         */
-        Rtti_PlotUserItem = 1000
-    };
-
-    /*!
-       \brief Plot Item Attributes
-
-       Various aspects of a plot widget depend on the attributes of
-       the attached plot items. If and how a single plot item 
-       participates in these updates depends on its attributes.
-       
-       \sa setItemAttribute(), testItemAttribute(), ItemInterest
-     */
-    enum ItemAttribute
-    {
-        //! The item is represented on the legend.
-        Legend = 0x01,
-
-        /*!
-           The boundingRect() of the item is included in the
-           autoscaling calculation as long as its width or height
-           is >= 0.0.
-         */
-        AutoScale = 0x02,
-
-        /*!
-           The item needs extra space to display something outside
-           its bounding rectangle. 
-           \sa getCanvasMarginHint()
-         */
-        Margins = 0x04
-    };
-
-    //! Plot Item Attributes
-    typedef QFlags<ItemAttribute> ItemAttributes;
-
-    /*!
-       \brief Plot Item Interests
-
-       Plot items might depend on the situation of the corresponding
-       plot widget. By enabling an interest the plot item will be
-       notified, when the corresponding attribute of the plot widgets
-       has changed.
-
-       \sa setItemAttribute(), testItemAttribute(), ItemInterest
-     */
-    enum ItemInterest
-    {
-        /*! 
-           The item is interested in updates of the scales
-           \sa updateScaleDiv()
-         */
-        ScaleInterest = 0x01,
-
-        /*! 
-           The item is interested in updates of the legend ( of other items )
-           This flag is intended for items, that want to implement a legend
-           for displaying entries of other plot item.
-
-           \note If the plot item wants to be represented on a legend
-                 enable QwtPlotItem::Legend instead.
-
-           \sa updateLegend()
-         */
-        LegendInterest = 0x02
-    };
-
-    //! Plot Item Interests
-    typedef QFlags<ItemInterest> ItemInterests;
-
-    //! Render hints
-    enum RenderHint
-    {
-        //! Enable antialiasing
-        RenderAntialiased = 0x1
-    };
-
-    //! Render hints
-    typedef QFlags<RenderHint> RenderHints;
-
-    explicit QwtPlotItem( const QwtText &title = QwtText() );
-    virtual ~QwtPlotItem();
-
-    void attach( QwtPlot *plot );
-    void detach();
-
-    QwtPlot *plot() const;
-
-    void setTitle( const QString &title );
-    void setTitle( const QwtText &title );
-    const QwtText &title() const;
-
-    virtual int rtti() const;
-
-    void setItemAttribute( ItemAttribute, bool on = true );
-    bool testItemAttribute( ItemAttribute ) const;
-
-    void setItemInterest( ItemInterest, bool on = true );
-    bool testItemInterest( ItemInterest ) const;
-
-    void setRenderHint( RenderHint, bool on = true );
-    bool testRenderHint( RenderHint ) const;
-
-    void setRenderThreadCount( uint numThreads );
-    uint renderThreadCount() const;
-
-    void setLegendIconSize( const QSize & );
-    QSize legendIconSize() const;
-
-    double z() const;
-    void setZ( double z );
-
-    void show();
-    void hide();
-    virtual void setVisible( bool );
-    bool isVisible () const;
-
-    void setAxes( int xAxis, int yAxis );
-
-    void setXAxis( int axis );
-    int xAxis() const;
-
-    void setYAxis( int axis );
-    int yAxis() const;
-
-    virtual void itemChanged();
-    virtual void legendChanged();
-
-    /*!
-      \brief Draw the item
-
-      \param painter Painter
-      \param xMap Maps x-values into pixel coordinates.
-      \param yMap Maps y-values into pixel coordinates.
-      \param canvasRect Contents rect of the canvas in painter coordinates
-    */
-    virtual void draw( QPainter *painter,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect ) const = 0;
-
-    virtual QRectF boundingRect() const;
-
-    virtual void getCanvasMarginHint( 
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasSize,
-        double &left, double &top, double &right, double &bottom) const;
-
-    virtual void updateScaleDiv( 
-        const QwtScaleDiv&, const QwtScaleDiv& );
-
-    virtual void updateLegend( const QwtPlotItem *,
-        const QList<QwtLegendData> & );
-
-    QRectF scaleRect( const QwtScaleMap &, const QwtScaleMap & ) const;
-    QRectF paintRect( const QwtScaleMap &, const QwtScaleMap & ) const;
-
-    virtual QList<QwtLegendData> legendData() const;
-
-    virtual QwtGraphic legendIcon( int index, const QSizeF  & ) const;
-
-protected:
-    QwtGraphic defaultIcon( const QBrush &, const QSizeF & ) const;
-
-private:
-    // Disabled copy constructor and operator=
-    QwtPlotItem( const QwtPlotItem & );
-    QwtPlotItem &operator=( const QwtPlotItem & );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotItem::ItemAttributes )
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotItem::ItemInterests )
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotItem::RenderHints )
-
-Q_DECLARE_METATYPE( QwtPlotItem * )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_layout.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_layout.cpp
deleted file mode 100644
index 56ee44158b44fee71542fd5524f933cdc19d66f5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_layout.cpp
+++ /dev/null
@@ -1,1442 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_layout.h"
-#include "qwt_text.h"
-#include "qwt_text_label.h"
-#include "qwt_scale_widget.h"
-#include "qwt_abstract_legend.h"
-#include <qscrollbar.h>
-#include <qmath.h>
-
-class QwtPlotLayout::LayoutData
-{
-public:
-    void init( const QwtPlot *, const QRectF &rect );
-
-    struct t_legendData
-    {
-        int frameWidth;
-        int hScrollExtent;
-        int vScrollExtent;
-        QSize hint;
-    } legend;
-
-    struct t_titleData
-    {
-        QwtText text;
-        int frameWidth;
-    } title;
-
-    struct t_footerData
-    {
-        QwtText text;
-        int frameWidth;
-    } footer;
-
-    struct t_scaleData
-    {
-        bool isEnabled;
-        const QwtScaleWidget *scaleWidget;
-        QFont scaleFont;
-        int start;
-        int end;
-        int baseLineOffset;
-        double tickOffset;
-        int dimWithoutTitle;
-    } scale[QwtPlot::axisCnt];
-
-    struct t_canvasData
-    {
-        int contentsMargins[ QwtPlot::axisCnt ];
-
-    } canvas;
-};
-
-/*
-  Extract all layout relevant data from the plot components
-*/
-void QwtPlotLayout::LayoutData::init( const QwtPlot *plot, const QRectF &rect )
-{
-    // legend
-
-    if ( plot->legend() )
-    {
-        legend.frameWidth = plot->legend()->frameWidth();
-        legend.hScrollExtent =
-            plot->legend()->scrollExtent( Qt::Horizontal );
-        legend.vScrollExtent =
-            plot->legend()->scrollExtent( Qt::Vertical );
-
-        const QSize hint = plot->legend()->sizeHint();
-
-        const int w = qMin( hint.width(), qFloor( rect.width() ) );
-
-        int h = plot->legend()->heightForWidth( w );
-        if ( h <= 0 )
-            h = hint.height();
-
-        legend.hint = QSize( w, h );
-    }
-
-    // title
-
-    title.frameWidth = 0;
-    title.text = QwtText();
-
-    if ( plot->titleLabel() )
-    {
-        const QwtTextLabel *label = plot->titleLabel();
-        title.text = label->text();
-        if ( !( title.text.testPaintAttribute( QwtText::PaintUsingTextFont ) ) )
-            title.text.setFont( label->font() );
-
-        title.frameWidth = plot->titleLabel()->frameWidth();
-    }
-
-    // footer
-
-    footer.frameWidth = 0;
-    footer.text = QwtText();
-
-    if ( plot->footerLabel() )
-    {
-        const QwtTextLabel *label = plot->footerLabel();
-        footer.text = label->text();
-        if ( !( footer.text.testPaintAttribute( QwtText::PaintUsingTextFont ) ) )
-            footer.text.setFont( label->font() );
-
-        footer.frameWidth = plot->footerLabel()->frameWidth();
-    }
-
-    // scales
-
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-    {
-        if ( plot->axisEnabled( axis ) )
-        {
-            const QwtScaleWidget *scaleWidget = plot->axisWidget( axis );
-
-            scale[axis].isEnabled = true;
-
-            scale[axis].scaleWidget = scaleWidget;
-
-            scale[axis].scaleFont = scaleWidget->font();
-
-            scale[axis].start = scaleWidget->startBorderDist();
-            scale[axis].end = scaleWidget->endBorderDist();
-
-            scale[axis].baseLineOffset = scaleWidget->margin();
-            scale[axis].tickOffset = scaleWidget->margin();
-            if ( scaleWidget->scaleDraw()->hasComponent(
-                QwtAbstractScaleDraw::Ticks ) )
-            {
-                scale[axis].tickOffset +=
-                    scaleWidget->scaleDraw()->maxTickLength();
-            }
-
-            scale[axis].dimWithoutTitle = scaleWidget->dimForLength(
-                QWIDGETSIZE_MAX, scale[axis].scaleFont );
-
-            if ( !scaleWidget->title().isEmpty() )
-            {
-                scale[axis].dimWithoutTitle -=
-                    scaleWidget->titleHeightForWidth( QWIDGETSIZE_MAX );
-            }
-        }
-        else
-        {
-            scale[axis].isEnabled = false;
-            scale[axis].start = 0;
-            scale[axis].end = 0;
-            scale[axis].baseLineOffset = 0;
-            scale[axis].tickOffset = 0.0;
-            scale[axis].dimWithoutTitle = 0;
-        }
-    }
-
-    // canvas
-
-    plot->canvas()->getContentsMargins( 
-        &canvas.contentsMargins[ QwtPlot::yLeft ], 
-        &canvas.contentsMargins[ QwtPlot::xTop ],
-        &canvas.contentsMargins[ QwtPlot::yRight ],
-        &canvas.contentsMargins[ QwtPlot::xBottom ] );
-}
-
-class QwtPlotLayout::PrivateData
-{
-public:
-    PrivateData():
-        spacing( 5 )
-    {
-    }
-
-    QRectF titleRect;
-    QRectF footerRect;
-    QRectF legendRect;
-    QRectF scaleRect[QwtPlot::axisCnt];
-    QRectF canvasRect;
-
-    QwtPlotLayout::LayoutData layoutData;
-
-    QwtPlot::LegendPosition legendPos;
-    double legendRatio;
-    unsigned int spacing;
-    unsigned int canvasMargin[QwtPlot::axisCnt];
-    bool alignCanvasToScales[QwtPlot::axisCnt];
-};
-
-/*!
-  \brief Constructor
- */
-
-QwtPlotLayout::QwtPlotLayout()
-{
-    d_data = new PrivateData;
-
-    setLegendPosition( QwtPlot::BottomLegend );
-    setCanvasMargin( 4 );
-    setAlignCanvasToScales( false );
-
-    invalidate();
-}
-
-//! Destructor
-QwtPlotLayout::~QwtPlotLayout()
-{
-    delete d_data;
-}
-
-/*!
-  Change a margin of the canvas. The margin is the space
-  above/below the scale ticks. A negative margin will
-  be set to -1, excluding the borders of the scales.
-
-  \param margin New margin
-  \param axis One of QwtPlot::Axis. Specifies where the position of the margin.
-              -1 means margin at all borders.
-  \sa canvasMargin()
-
-  \warning The margin will have no effect when alignCanvasToScale() is true
-*/
-
-void QwtPlotLayout::setCanvasMargin( int margin, int axis )
-{
-    if ( margin < -1 )
-        margin = -1;
-
-    if ( axis == -1 )
-    {
-        for ( axis = 0; axis < QwtPlot::axisCnt; axis++ )
-            d_data->canvasMargin[axis] = margin;
-    }
-    else if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        d_data->canvasMargin[axis] = margin;
-}
-
-/*!
-    \param axisId Axis index
-    \return Margin around the scale tick borders
-    \sa setCanvasMargin()
-*/
-int QwtPlotLayout::canvasMargin( int axisId ) const
-{
-    if ( axisId < 0 || axisId >= QwtPlot::axisCnt )
-        return 0;
-
-    return d_data->canvasMargin[axisId];
-}
-
-/*!
-  \brief Set the align-canvas-to-axis-scales flag for all axes
-
-  \param on True/False
-  \sa setAlignCanvasToScale(), alignCanvasToScale()
-*/
-void QwtPlotLayout::setAlignCanvasToScales( bool on )
-{
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-        d_data->alignCanvasToScales[axis] = on;
-}
-
-/*!
-  Change the align-canvas-to-axis-scales setting. The canvas may:
-
-  - extend beyond the axis scale ends to maximize its size,
-  - align with the axis scale ends to control its size.
-
-  The axisId parameter is somehow confusing as it identifies a border
-  of the plot and not the axes, that are aligned. F.e when QwtPlot::yLeft
-  is set, the left end of the the x-axes ( QwtPlot::xTop, QwtPlot::xBottom )
-  is aligned.
-
-  \param axisId Axis index
-  \param on New align-canvas-to-axis-scales setting
-
-  \sa setCanvasMargin(), alignCanvasToScale(), setAlignCanvasToScales()
-  \warning In case of on == true canvasMargin() will have no effect
-*/
-void QwtPlotLayout::setAlignCanvasToScale( int axisId, bool on )
-{
-    if ( axisId >= 0 && axisId < QwtPlot::axisCnt )
-        d_data->alignCanvasToScales[axisId] = on;
-}
-
-/*!
-  Return the align-canvas-to-axis-scales setting. The canvas may:
-  - extend beyond the axis scale ends to maximize its size
-  - align with the axis scale ends to control its size.
-
-  \param axisId Axis index
-  \return align-canvas-to-axis-scales setting
-  \sa setAlignCanvasToScale(), setAlignCanvasToScale(), setCanvasMargin()
-*/
-bool QwtPlotLayout::alignCanvasToScale( int axisId ) const
-{
-    if ( axisId < 0 || axisId >= QwtPlot::axisCnt )
-        return false;
-
-    return d_data->alignCanvasToScales[ axisId ];
-}
-
-/*!
-  Change the spacing of the plot. The spacing is the distance
-  between the plot components.
-
-  \param spacing New spacing
-  \sa setCanvasMargin(), spacing()
-*/
-void QwtPlotLayout::setSpacing( int spacing )
-{
-    d_data->spacing = qMax( 0, spacing );
-}
-
-/*!
-  \return Spacing
-  \sa margin(), setSpacing()
-*/
-int QwtPlotLayout::spacing() const
-{
-    return d_data->spacing;
-}
-
-/*!
-  \brief Specify the position of the legend
-  \param pos The legend's position.
-  \param ratio Ratio between legend and the bounding rectangle
-               of title, footer, canvas and axes. The legend will be shrunk
-               if it would need more space than the given ratio.
-               The ratio is limited to ]0.0 .. 1.0]. In case of <= 0.0
-               it will be reset to the default ratio.
-               The default vertical/horizontal ratio is 0.33/0.5.
-
-  \sa QwtPlot::setLegendPosition()
-*/
-
-void QwtPlotLayout::setLegendPosition( QwtPlot::LegendPosition pos, double ratio )
-{
-    if ( ratio > 1.0 )
-        ratio = 1.0;
-
-    switch ( pos )
-    {
-        case QwtPlot::TopLegend:
-        case QwtPlot::BottomLegend:
-            if ( ratio <= 0.0 )
-                ratio = 0.33;
-            d_data->legendRatio = ratio;
-            d_data->legendPos = pos;
-            break;
-        case QwtPlot::LeftLegend:
-        case QwtPlot::RightLegend:
-            if ( ratio <= 0.0 )
-                ratio = 0.5;
-            d_data->legendRatio = ratio;
-            d_data->legendPos = pos;
-            break;
-        default:
-            break;
-    }
-}
-
-/*!
-  \brief Specify the position of the legend
-  \param pos The legend's position. Valid values are
-      \c QwtPlot::LeftLegend, \c QwtPlot::RightLegend,
-      \c QwtPlot::TopLegend, \c QwtPlot::BottomLegend.
-
-  \sa QwtPlot::setLegendPosition()
-*/
-void QwtPlotLayout::setLegendPosition( QwtPlot::LegendPosition pos )
-{
-    setLegendPosition( pos, 0.0 );
-}
-
-/*!
-  \return Position of the legend
-  \sa setLegendPosition(), QwtPlot::setLegendPosition(),
-      QwtPlot::legendPosition()
-*/
-QwtPlot::LegendPosition QwtPlotLayout::legendPosition() const
-{
-    return d_data->legendPos;
-}
-
-/*!
-  Specify the relative size of the legend in the plot
-  \param ratio Ratio between legend and the bounding rectangle
-               of title, footer, canvas and axes. The legend will be shrunk
-               if it would need more space than the given ratio.
-               The ratio is limited to ]0.0 .. 1.0]. In case of <= 0.0
-               it will be reset to the default ratio.
-               The default vertical/horizontal ratio is 0.33/0.5.
-*/
-void QwtPlotLayout::setLegendRatio( double ratio )
-{
-    setLegendPosition( legendPosition(), ratio );
-}
-
-/*!
-  \return The relative size of the legend in the plot.
-  \sa setLegendPosition()
-*/
-double QwtPlotLayout::legendRatio() const
-{
-    return d_data->legendRatio;
-}
-
-/*!
-  \brief Set the geometry for the title
-
-  This method is intended to be used from derived layouts
-  overloading activate()
-
-  \sa titleRect(), activate()
- */
-void QwtPlotLayout::setTitleRect( const QRectF &rect )
-{
-    d_data->titleRect = rect;
-}
-
-/*!
-  \return Geometry for the title
-  \sa activate(), invalidate()
-*/
-QRectF QwtPlotLayout::titleRect() const
-{
-    return d_data->titleRect;
-}
-
-/*!
-  \brief Set the geometry for the footer
-
-  This method is intended to be used from derived layouts
-  overloading activate()
-
-  \sa footerRect(), activate()
- */
-void QwtPlotLayout::setFooterRect( const QRectF &rect )
-{
-    d_data->footerRect = rect;
-}
-
-/*!
-  \return Geometry for the footer
-  \sa activate(), invalidate()
-*/
-QRectF QwtPlotLayout::footerRect() const
-{
-    return d_data->footerRect;
-}
-
-/*!
-  \brief Set the geometry for the legend
-
-  This method is intended to be used from derived layouts
-  overloading activate()
-
-  \param rect Rectangle for the legend
-
-  \sa legendRect(), activate()
- */
-void QwtPlotLayout::setLegendRect( const QRectF &rect )
-{
-    d_data->legendRect = rect;
-}
-
-/*!
-  \return Geometry for the legend
-  \sa activate(), invalidate()
-*/
-QRectF QwtPlotLayout::legendRect() const
-{
-    return d_data->legendRect;
-}
-
-/*!
-  \brief Set the geometry for an axis
-
-  This method is intended to be used from derived layouts
-  overloading activate()
-
-  \param axis Axis index
-  \param rect Rectangle for the scale
-
-  \sa scaleRect(), activate()
- */
-void QwtPlotLayout::setScaleRect( int axis, const QRectF &rect )
-{
-    if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        d_data->scaleRect[axis] = rect;
-}
-
-/*!
-  \param axis Axis index
-  \return Geometry for the scale
-  \sa activate(), invalidate()
-*/
-QRectF QwtPlotLayout::scaleRect( int axis ) const
-{
-    if ( axis < 0 || axis >= QwtPlot::axisCnt )
-    {
-        static QRectF dummyRect;
-        return dummyRect;
-    }
-    return d_data->scaleRect[axis];
-}
-
-/*!
-  \brief Set the geometry for the canvas
-
-  This method is intended to be used from derived layouts
-  overloading activate()
-
-  \sa canvasRect(), activate()
- */
-void QwtPlotLayout::setCanvasRect( const QRectF &rect )
-{
-    d_data->canvasRect = rect;
-}
-
-/*!
-  \return Geometry for the canvas
-  \sa activate(), invalidate()
-*/
-QRectF QwtPlotLayout::canvasRect() const
-{
-    return d_data->canvasRect;
-}
-
-/*!
-  Invalidate the geometry of all components.
-  \sa activate()
-*/
-void QwtPlotLayout::invalidate()
-{
-    d_data->titleRect = d_data->footerRect
-        = d_data->legendRect = d_data->canvasRect = QRect();
-
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-        d_data->scaleRect[axis] = QRect();
-}
-
-/*!
-  \return Minimum size hint
-  \param plot Plot widget
-
-  \sa QwtPlot::minimumSizeHint()
-*/
-
-QSize QwtPlotLayout::minimumSizeHint( const QwtPlot *plot ) const
-{
-    class ScaleData
-    {
-    public:
-        ScaleData()
-        {
-            w = h = minLeft = minRight = tickOffset = 0;
-        }
-
-        int w;
-        int h;
-        int minLeft;
-        int minRight;
-        int tickOffset;
-    } scaleData[QwtPlot::axisCnt];
-
-    int canvasBorder[QwtPlot::axisCnt];
-
-    int fw;
-    plot->canvas()->getContentsMargins( &fw, NULL, NULL, NULL );
-
-    int axis;
-    for ( axis = 0; axis < QwtPlot::axisCnt; axis++ )
-    {
-        if ( plot->axisEnabled( axis ) )
-        {
-            const QwtScaleWidget *scl = plot->axisWidget( axis );
-            ScaleData &sd = scaleData[axis];
-
-            const QSize hint = scl->minimumSizeHint();
-            sd.w = hint.width();
-            sd.h = hint.height();
-            scl->getBorderDistHint( sd.minLeft, sd.minRight );
-            sd.tickOffset = scl->margin();
-            if ( scl->scaleDraw()->hasComponent( QwtAbstractScaleDraw::Ticks ) )
-                sd.tickOffset += qCeil( scl->scaleDraw()->maxTickLength() );
-        }
-
-        canvasBorder[axis] = fw + d_data->canvasMargin[axis] + 1;
-    }
-
-
-    for ( axis = 0; axis < QwtPlot::axisCnt; axis++ )
-    {
-        ScaleData &sd = scaleData[axis];
-        if ( sd.w && ( axis == QwtPlot::xBottom || axis == QwtPlot::xTop ) )
-        {
-            if ( ( sd.minLeft > canvasBorder[QwtPlot::yLeft] )
-                && scaleData[QwtPlot::yLeft].w )
-            {
-                int shiftLeft = sd.minLeft - canvasBorder[QwtPlot::yLeft];
-                if ( shiftLeft > scaleData[QwtPlot::yLeft].w )
-                    shiftLeft = scaleData[QwtPlot::yLeft].w;
-
-                sd.w -= shiftLeft;
-            }
-            if ( ( sd.minRight > canvasBorder[QwtPlot::yRight] )
-                && scaleData[QwtPlot::yRight].w )
-            {
-                int shiftRight = sd.minRight - canvasBorder[QwtPlot::yRight];
-                if ( shiftRight > scaleData[QwtPlot::yRight].w )
-                    shiftRight = scaleData[QwtPlot::yRight].w;
-
-                sd.w -= shiftRight;
-            }
-        }
-
-        if ( sd.h && ( axis == QwtPlot::yLeft || axis == QwtPlot::yRight ) )
-        {
-            if ( ( sd.minLeft > canvasBorder[QwtPlot::xBottom] ) &&
-                scaleData[QwtPlot::xBottom].h )
-            {
-                int shiftBottom = sd.minLeft - canvasBorder[QwtPlot::xBottom];
-                if ( shiftBottom > scaleData[QwtPlot::xBottom].tickOffset )
-                    shiftBottom = scaleData[QwtPlot::xBottom].tickOffset;
-
-                sd.h -= shiftBottom;
-            }
-            if ( ( sd.minLeft > canvasBorder[QwtPlot::xTop] ) &&
-                scaleData[QwtPlot::xTop].h )
-            {
-                int shiftTop = sd.minRight - canvasBorder[QwtPlot::xTop];
-                if ( shiftTop > scaleData[QwtPlot::xTop].tickOffset )
-                    shiftTop = scaleData[QwtPlot::xTop].tickOffset;
-
-                sd.h -= shiftTop;
-            }
-        }
-    }
-
-    const QWidget *canvas = plot->canvas();
-
-    int left, top, right, bottom;
-    canvas->getContentsMargins( &left, &top, &right, &bottom );
-
-    const QSize minCanvasSize = canvas->minimumSize();
-
-    int w = scaleData[QwtPlot::yLeft].w + scaleData[QwtPlot::yRight].w;
-    int cw = qMax( scaleData[QwtPlot::xBottom].w, scaleData[QwtPlot::xTop].w )
-        + left + 1 + right + 1;
-    w += qMax( cw, minCanvasSize.width() );
-
-    int h = scaleData[QwtPlot::xBottom].h + scaleData[QwtPlot::xTop].h;
-    int ch = qMax( scaleData[QwtPlot::yLeft].h, scaleData[QwtPlot::yRight].h )
-        + top + 1 + bottom + 1;
-    h += qMax( ch, minCanvasSize.height() );
-
-    const QwtTextLabel *labels[2];
-    labels[0] = plot->titleLabel();
-    labels[1] = plot->footerLabel();
-
-    for ( int i = 0; i < 2; i++ )
-    {
-        const QwtTextLabel *label   = labels[i];
-        if ( label && !label->text().isEmpty() )
-        {
-            // If only QwtPlot::yLeft or QwtPlot::yRight is showing,
-            // we center on the plot canvas.
-            const bool centerOnCanvas = !( plot->axisEnabled( QwtPlot::yLeft )
-                && plot->axisEnabled( QwtPlot::yRight ) );
-
-            int labelW = w;
-            if ( centerOnCanvas )
-            {
-                labelW -= scaleData[QwtPlot::yLeft].w
-                    + scaleData[QwtPlot::yRight].w;
-            }
-
-            int labelH = label->heightForWidth( labelW );
-            if ( labelH > labelW ) // Compensate for a long title
-            {
-                w = labelW = labelH;
-                if ( centerOnCanvas )
-                {
-                    w += scaleData[QwtPlot::yLeft].w
-                        + scaleData[QwtPlot::yRight].w;
-                }
-
-                labelH = label->heightForWidth( labelW );
-            }
-            h += labelH + d_data->spacing;
-        }
-    }
-
-    // Compute the legend contribution
-
-    const QwtAbstractLegend *legend = plot->legend();
-    if ( legend && !legend->isEmpty() )
-    {
-        if ( d_data->legendPos == QwtPlot::LeftLegend
-            || d_data->legendPos == QwtPlot::RightLegend )
-        {
-            int legendW = legend->sizeHint().width();
-            int legendH = legend->heightForWidth( legendW );
-
-            if ( legend->frameWidth() > 0 )
-                w += d_data->spacing;
-
-            if ( legendH > h )
-                legendW += legend->scrollExtent( Qt::Horizontal );
-
-            if ( d_data->legendRatio < 1.0 )
-                legendW = qMin( legendW, int( w / ( 1.0 - d_data->legendRatio ) ) );
-
-            w += legendW + d_data->spacing;
-        }
-        else // QwtPlot::Top, QwtPlot::Bottom
-        {
-            int legendW = qMin( legend->sizeHint().width(), w );
-            int legendH = legend->heightForWidth( legendW );
-
-            if ( legend->frameWidth() > 0 )
-                h += d_data->spacing;
-
-            if ( d_data->legendRatio < 1.0 )
-                legendH = qMin( legendH, int( h / ( 1.0 - d_data->legendRatio ) ) );
-
-            h += legendH + d_data->spacing;
-        }
-    }
-
-    return QSize( w, h );
-}
-
-/*!
-  Find the geometry for the legend
-
-  \param options Options how to layout the legend
-  \param rect Rectangle where to place the legend
-
-  \return Geometry for the legend
-  \sa Options
-*/
-
-QRectF QwtPlotLayout::layoutLegend( Options options,
-    const QRectF &rect ) const
-{
-    const QSize hint( d_data->layoutData.legend.hint );
-
-    int dim;
-    if ( d_data->legendPos == QwtPlot::LeftLegend
-        || d_data->legendPos == QwtPlot::RightLegend )
-    {
-        // We don't allow vertical legends to take more than
-        // half of the available space.
-
-        dim = qMin( hint.width(), int( rect.width() * d_data->legendRatio ) );
-
-        if ( !( options & IgnoreScrollbars ) )
-        {
-            if ( hint.height() > rect.height() )
-            {
-                // The legend will need additional
-                // space for the vertical scrollbar.
-
-                dim += d_data->layoutData.legend.hScrollExtent;
-            }
-        }
-    }
-    else
-    {
-        dim = qMin( hint.height(), int( rect.height() * d_data->legendRatio ) );
-        dim = qMax( dim, d_data->layoutData.legend.vScrollExtent );
-    }
-
-    QRectF legendRect = rect;
-    switch ( d_data->legendPos )
-    {
-        case QwtPlot::LeftLegend:
-            legendRect.setWidth( dim );
-            break;
-        case QwtPlot::RightLegend:
-            legendRect.setX( rect.right() - dim );
-            legendRect.setWidth( dim );
-            break;
-        case QwtPlot::TopLegend:
-            legendRect.setHeight( dim );
-            break;
-        case QwtPlot::BottomLegend:
-            legendRect.setY( rect.bottom() - dim );
-            legendRect.setHeight( dim );
-            break;
-    }
-
-    return legendRect;
-}
-
-/*!
-  Align the legend to the canvas
-
-  \param canvasRect Geometry of the canvas
-  \param legendRect Maximum geometry for the legend
-
-  \return Geometry for the aligned legend
-*/
-QRectF QwtPlotLayout::alignLegend( const QRectF &canvasRect,
-    const QRectF &legendRect ) const
-{
-    QRectF alignedRect = legendRect;
-
-    if ( d_data->legendPos == QwtPlot::BottomLegend
-        || d_data->legendPos == QwtPlot::TopLegend )
-    {
-        if ( d_data->layoutData.legend.hint.width() < canvasRect.width() )
-        {
-            alignedRect.setX( canvasRect.x() );
-            alignedRect.setWidth( canvasRect.width() );
-        }
-    }
-    else
-    {
-        if ( d_data->layoutData.legend.hint.height() < canvasRect.height() )
-        {
-            alignedRect.setY( canvasRect.y() );
-            alignedRect.setHeight( canvasRect.height() );
-        }
-    }
-
-    return alignedRect;
-}
-
-/*!
-  Expand all line breaks in text labels, and calculate the height
-  of their widgets in orientation of the text.
-
-  \param options Options how to layout the legend
-  \param rect Bounding rectangle for title, footer, axes and canvas.
-  \param dimTitle Expanded height of the title widget
-  \param dimFooter Expanded height of the footer widget
-  \param dimAxis Expanded heights of the axis in axis orientation.
-
-  \sa Options
-*/
-void QwtPlotLayout::expandLineBreaks( Options options, const QRectF &rect,
-    int &dimTitle, int &dimFooter, int dimAxis[QwtPlot::axisCnt] ) const
-{
-    dimTitle = dimFooter = 0;
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-        dimAxis[axis] = 0;
-
-    int backboneOffset[QwtPlot::axisCnt];
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-    {
-        backboneOffset[axis] = 0;
-        if ( !( options & IgnoreFrames ) )
-            backboneOffset[axis] += d_data->layoutData.canvas.contentsMargins[ axis ];
-
-        if ( !d_data->alignCanvasToScales[axis] )
-            backboneOffset[axis] += d_data->canvasMargin[axis];
-    }
-
-    bool done = false;
-    while ( !done )
-    {
-        done = true;
-
-        // the size for the 4 axis depend on each other. Expanding
-        // the height of a horizontal axis will shrink the height
-        // for the vertical axis, shrinking the height of a vertical
-        // axis will result in a line break what will expand the
-        // width and results in shrinking the width of a horizontal
-        // axis what might result in a line break of a horizontal
-        // axis ... . So we loop as long until no size changes.
-
-        if ( !( ( options & IgnoreTitle ) ||
-            d_data->layoutData.title.text.isEmpty() ) )
-        {
-            double w = rect.width();
-
-            if ( d_data->layoutData.scale[QwtPlot::yLeft].isEnabled
-                != d_data->layoutData.scale[QwtPlot::yRight].isEnabled )
-            {
-                // center to the canvas
-                w -= dimAxis[QwtPlot::yLeft] + dimAxis[QwtPlot::yRight];
-            }
-
-            int d = qCeil( d_data->layoutData.title.text.heightForWidth( w ) );
-            if ( !( options & IgnoreFrames ) )
-                d += 2 * d_data->layoutData.title.frameWidth;
-
-            if ( d > dimTitle )
-            {
-                dimTitle = d;
-                done = false;
-            }
-        }
-
-        if ( !( ( options & IgnoreFooter ) ||
-            d_data->layoutData.footer.text.isEmpty() ) )
-        {
-            double w = rect.width();
-
-            if ( d_data->layoutData.scale[QwtPlot::yLeft].isEnabled
-                != d_data->layoutData.scale[QwtPlot::yRight].isEnabled )
-            {
-                // center to the canvas
-                w -= dimAxis[QwtPlot::yLeft] + dimAxis[QwtPlot::yRight];
-            }
-
-            int d = qCeil( d_data->layoutData.footer.text.heightForWidth( w ) );
-            if ( !( options & IgnoreFrames ) )
-                d += 2 * d_data->layoutData.footer.frameWidth;
-
-            if ( d > dimFooter )
-            {
-                dimFooter = d;
-                done = false;
-            }
-        }
-
-        for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-        {
-            const struct LayoutData::t_scaleData &scaleData =
-                d_data->layoutData.scale[axis];
-
-            if ( scaleData.isEnabled )
-            {
-                double length;
-                if ( axis == QwtPlot::xTop || axis == QwtPlot::xBottom )
-                {
-                    length = rect.width() - dimAxis[QwtPlot::yLeft]
-                        - dimAxis[QwtPlot::yRight];
-                    length -= scaleData.start + scaleData.end;
-
-                    if ( dimAxis[QwtPlot::yRight] > 0 )
-                        length -= 1;
-
-                    length += qMin( dimAxis[QwtPlot::yLeft],
-                        scaleData.start - backboneOffset[QwtPlot::yLeft] );
-                    length += qMin( dimAxis[QwtPlot::yRight],
-                        scaleData.end - backboneOffset[QwtPlot::yRight] );
-                }
-                else // QwtPlot::yLeft, QwtPlot::yRight
-                {
-                    length = rect.height() - dimAxis[QwtPlot::xTop]
-                        - dimAxis[QwtPlot::xBottom];
-                    length -= scaleData.start + scaleData.end;
-                    length -= 1;
-
-                    if ( dimAxis[QwtPlot::xBottom] <= 0 )
-                        length -= 1;
-                    if ( dimAxis[QwtPlot::xTop] <= 0 )
-                        length -= 1;
-
-                    if ( dimAxis[QwtPlot::xBottom] > 0 )
-                    {
-                        length += qMin(
-                            d_data->layoutData.scale[QwtPlot::xBottom].tickOffset,
-                            double( scaleData.start - backboneOffset[QwtPlot::xBottom] ) );
-                    }
-                    if ( dimAxis[QwtPlot::xTop] > 0 )
-                    {
-                        length += qMin(
-                            d_data->layoutData.scale[QwtPlot::xTop].tickOffset,
-                            double( scaleData.end - backboneOffset[QwtPlot::xTop] ) );
-                    }
-
-                    if ( dimTitle > 0 )
-                        length -= dimTitle + d_data->spacing;
-                }
-
-                int d = scaleData.dimWithoutTitle;
-                if ( !scaleData.scaleWidget->title().isEmpty() )
-                {
-                    d += scaleData.scaleWidget->titleHeightForWidth( qFloor( length ) );
-                }
-
-
-                if ( d > dimAxis[axis] )
-                {
-                    dimAxis[axis] = d;
-                    done = false;
-                }
-            }
-        }
-    }
-}
-
-/*!
-  Align the ticks of the axis to the canvas borders using
-  the empty corners.
-
-  \param options Layout options
-  \param canvasRect Geometry of the canvas ( IN/OUT )
-  \param scaleRect Geometries of the scales ( IN/OUT )
-
-  \sa Options
-*/
-
-void QwtPlotLayout::alignScales( Options options,
-    QRectF &canvasRect, QRectF scaleRect[QwtPlot::axisCnt] ) const
-{
-    int backboneOffset[QwtPlot::axisCnt];
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-    {
-        backboneOffset[axis] = 0;
-
-        if ( !d_data->alignCanvasToScales[axis] )
-        {
-            backboneOffset[axis] += d_data->canvasMargin[axis];
-        }
-
-        if ( !( options & IgnoreFrames ) )
-        {
-            backboneOffset[axis] += 
-                d_data->layoutData.canvas.contentsMargins[axis];
-        }
-    }
-
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-    {
-        if ( !scaleRect[axis].isValid() )
-            continue;
-
-        const int startDist = d_data->layoutData.scale[axis].start;
-        const int endDist = d_data->layoutData.scale[axis].end;
-
-        QRectF &axisRect = scaleRect[axis];
-
-        if ( axis == QwtPlot::xTop || axis == QwtPlot::xBottom )
-        {
-            const QRectF &leftScaleRect = scaleRect[QwtPlot::yLeft];
-            const int leftOffset =
-                backboneOffset[QwtPlot::yLeft] - startDist;
-
-            if ( leftScaleRect.isValid() )
-            {
-                const double dx = leftOffset + leftScaleRect.width();
-                if ( d_data->alignCanvasToScales[QwtPlot::yLeft] && dx < 0.0 )
-                {
-                    /*
-                      The axis needs more space than the width
-                      of the left scale.
-                     */
-                    const double cLeft = canvasRect.left(); // qreal -> double
-                    canvasRect.setLeft( qMax( cLeft, axisRect.left() - dx ) );
-                }
-                else
-                {
-                    const double minLeft = leftScaleRect.left();
-                    const double left = axisRect.left() + leftOffset;
-                    axisRect.setLeft( qMax( left, minLeft ) );
-                }
-            }
-            else
-            {
-                if ( d_data->alignCanvasToScales[QwtPlot::yLeft] && leftOffset < 0 )
-                {
-                    canvasRect.setLeft( qMax( canvasRect.left(),
-                        axisRect.left() - leftOffset ) );
-                }
-                else
-                {
-                    if ( leftOffset > 0 )
-                        axisRect.setLeft( axisRect.left() + leftOffset );
-                }
-            }
-
-            const QRectF &rightScaleRect = scaleRect[QwtPlot::yRight];
-            const int rightOffset =
-                backboneOffset[QwtPlot::yRight] - endDist + 1;
-
-            if ( rightScaleRect.isValid() )
-            {
-                const double dx = rightOffset + rightScaleRect.width();
-                if ( d_data->alignCanvasToScales[QwtPlot::yRight] && dx < 0 )
-                {
-                    /*
-                      The axis needs more space than the width
-                      of the right scale.
-                     */
-                    const double cRight = canvasRect.right(); // qreal -> double
-                    canvasRect.setRight( qMin( cRight, axisRect.right() + dx ) );
-                }   
-
-                const double maxRight = rightScaleRect.right();
-                const double right = axisRect.right() - rightOffset;
-                axisRect.setRight( qMin( right, maxRight ) );
-            }
-            else
-            {
-                if ( d_data->alignCanvasToScales[QwtPlot::yRight] && rightOffset < 0 )
-                {
-                    canvasRect.setRight( qMin( canvasRect.right(),
-                        axisRect.right() + rightOffset ) );
-                }
-                else
-                {
-                    if ( rightOffset > 0 )
-                        axisRect.setRight( axisRect.right() - rightOffset );
-                }
-            }
-        }
-        else // QwtPlot::yLeft, QwtPlot::yRight
-        {
-            const QRectF &bottomScaleRect = scaleRect[QwtPlot::xBottom];
-            const int bottomOffset =
-                backboneOffset[QwtPlot::xBottom] - endDist + 1;
-
-            if ( bottomScaleRect.isValid() )
-            {
-                const double dy = bottomOffset + bottomScaleRect.height();
-                if ( d_data->alignCanvasToScales[QwtPlot::xBottom] && dy < 0 )
-                {
-                    /*
-                      The axis needs more space than the height
-                      of the bottom scale.
-                     */
-                    const double cBottom = canvasRect.bottom(); // qreal -> double
-                    canvasRect.setBottom( qMin( cBottom, axisRect.bottom() + dy ) );
-                }
-                else
-                {
-                    const double maxBottom = bottomScaleRect.top() +
-                        d_data->layoutData.scale[QwtPlot::xBottom].tickOffset;
-                    const double bottom = axisRect.bottom() - bottomOffset;
-                    axisRect.setBottom( qMin( bottom, maxBottom ) );
-                }
-            }
-            else
-            {
-                if ( d_data->alignCanvasToScales[QwtPlot::xBottom] && bottomOffset < 0 )
-                {
-                    canvasRect.setBottom( qMin( canvasRect.bottom(),
-                        axisRect.bottom() + bottomOffset ) );
-                }
-                else
-                {
-                    if ( bottomOffset > 0 )
-                        axisRect.setBottom( axisRect.bottom() - bottomOffset );
-                }
-            }
-
-            const QRectF &topScaleRect = scaleRect[QwtPlot::xTop];
-            const int topOffset = backboneOffset[QwtPlot::xTop] - startDist;
-
-            if ( topScaleRect.isValid() )
-            {
-                const double dy = topOffset + topScaleRect.height();
-                if ( d_data->alignCanvasToScales[QwtPlot::xTop] && dy < 0 )
-                {
-                    /*
-                      The axis needs more space than the height
-                      of the top scale.
-                     */
-                    const double cTop = canvasRect.top(); // qreal -> double
-                    canvasRect.setTop( qMax( cTop, axisRect.top() - dy ) );
-                }
-                else
-                {
-                    const double minTop = topScaleRect.bottom() -
-                        d_data->layoutData.scale[QwtPlot::xTop].tickOffset;
-                    const double top = axisRect.top() + topOffset;
-                    axisRect.setTop( qMax( top, minTop ) );
-                }
-            }
-            else
-            {
-                if ( d_data->alignCanvasToScales[QwtPlot::xTop] && topOffset < 0 )
-                {
-                    canvasRect.setTop( qMax( canvasRect.top(),
-                        axisRect.top() - topOffset ) );
-                }
-                else
-                {
-                    if ( topOffset > 0 )
-                        axisRect.setTop( axisRect.top() + topOffset );
-                }
-            }
-        }
-    }
-
-    /*
-      The canvas has been aligned to the scale with largest
-      border distances. Now we have to realign the other scale.
-     */
-
-
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-    {
-        QRectF &sRect = scaleRect[axis];
-
-        if ( !sRect.isValid() )
-            continue;
-
-        if ( axis == QwtPlot::xBottom || axis == QwtPlot::xTop )
-        {
-            if ( d_data->alignCanvasToScales[QwtPlot::yLeft] )
-            {
-                double y = canvasRect.left() - d_data->layoutData.scale[axis].start;
-                if ( !( options & IgnoreFrames ) )
-                    y += d_data->layoutData.canvas.contentsMargins[ QwtPlot::yLeft ];
-
-                sRect.setLeft( y );
-            }
-            if ( d_data->alignCanvasToScales[QwtPlot::yRight] )
-            {
-                double y = canvasRect.right() - 1 + d_data->layoutData.scale[axis].end;
-                if ( !( options & IgnoreFrames ) )
-                    y -= d_data->layoutData.canvas.contentsMargins[ QwtPlot::yRight ];
-
-                sRect.setRight( y );
-            }
-
-            if ( d_data->alignCanvasToScales[ axis ] )
-            {
-                if ( axis == QwtPlot::xTop )
-                    sRect.setBottom( canvasRect.top() );
-                else
-                    sRect.setTop( canvasRect.bottom() );
-            }
-        }
-        else
-        {
-            if ( d_data->alignCanvasToScales[QwtPlot::xTop] )
-            {
-                double x = canvasRect.top() - d_data->layoutData.scale[axis].start;
-                if ( !( options & IgnoreFrames ) )
-                    x += d_data->layoutData.canvas.contentsMargins[ QwtPlot::xTop ];
-
-                sRect.setTop( x );
-            }
-            if ( d_data->alignCanvasToScales[QwtPlot::xBottom] )
-            {
-                double x = canvasRect.bottom() - 1 + d_data->layoutData.scale[axis].end;
-                if ( !( options & IgnoreFrames ) )
-                    x -= d_data->layoutData.canvas.contentsMargins[ QwtPlot::xBottom ];
-
-                sRect.setBottom( x );
-            }
-
-            if ( d_data->alignCanvasToScales[ axis ] )
-            {
-                if ( axis == QwtPlot::yLeft )
-                    sRect.setRight( canvasRect.left() );
-                else
-                    sRect.setLeft( canvasRect.right() );
-            }
-        }
-    }
-}
-
-/*!
-  \brief Recalculate the geometry of all components.
-
-  \param plot Plot to be layout
-  \param plotRect Rectangle where to place the components
-  \param options Layout options
-
-  \sa invalidate(), titleRect(), footerRect()
-      legendRect(), scaleRect(), canvasRect()
-*/
-void QwtPlotLayout::activate( const QwtPlot *plot,
-    const QRectF &plotRect, Options options )
-{
-    invalidate();
-
-    QRectF rect( plotRect );  // undistributed rest of the plot rect
-
-    // We extract all layout relevant parameters from the widgets,
-    // and save them to d_data->layoutData.
-
-    d_data->layoutData.init( plot, rect );
-
-    if ( !( options & IgnoreLegend )
-        && plot->legend() && !plot->legend()->isEmpty() )
-    {
-        d_data->legendRect = layoutLegend( options, rect );
-
-        // subtract d_data->legendRect from rect
-
-        const QRegion region( rect.toRect() );
-        rect = region.subtracted( d_data->legendRect.toRect() ).boundingRect();
-
-        switch ( d_data->legendPos )
-        {
-            case QwtPlot::LeftLegend:
-                rect.setLeft( rect.left() + d_data->spacing );
-                break;
-            case QwtPlot::RightLegend:
-                rect.setRight( rect.right() - d_data->spacing );
-                break;
-            case QwtPlot::TopLegend:
-                rect.setTop( rect.top() + d_data->spacing );
-                break;
-            case QwtPlot::BottomLegend:
-                rect.setBottom( rect.bottom() - d_data->spacing );
-                break;
-        }
-    }
-
-    /*
-     +---+-----------+---+
-     |       Title       |
-     +---+-----------+---+
-     |   |   Axis    |   |
-     +---+-----------+---+
-     | A |           | A |
-     | x |  Canvas   | x |
-     | i |           | i |
-     | s |           | s |
-     +---+-----------+---+
-     |   |   Axis    |   |
-     +---+-----------+---+
-     |      Footer       |
-     +---+-----------+---+
-    */
-
-    // title, footer and axes include text labels. The height of each
-    // label depends on its line breaks, that depend on the width
-    // for the label. A line break in a horizontal text will reduce
-    // the available width for vertical texts and vice versa.
-    // expandLineBreaks finds the height/width for title, footer and axes
-    // including all line breaks.
-
-    int dimTitle, dimFooter, dimAxes[QwtPlot::axisCnt];
-    expandLineBreaks( options, rect, dimTitle, dimFooter, dimAxes );
-
-    if ( dimTitle > 0 )
-    {
-        d_data->titleRect.setRect(
-            rect.left(), rect.top(), rect.width(), dimTitle );
-
-        rect.setTop( d_data->titleRect.bottom() + d_data->spacing );
-
-        if ( d_data->layoutData.scale[QwtPlot::yLeft].isEnabled !=
-            d_data->layoutData.scale[QwtPlot::yRight].isEnabled )
-        {
-            // if only one of the y axes is missing we align
-            // the title centered to the canvas
-
-            d_data->titleRect.setX( rect.left() + dimAxes[QwtPlot::yLeft] );
-            d_data->titleRect.setWidth( rect.width()
-                - dimAxes[QwtPlot::yLeft] - dimAxes[QwtPlot::yRight] );
-        }
-    }
-
-    if ( dimFooter > 0 )
-    {
-        d_data->footerRect.setRect(
-            rect.left(), rect.bottom() - dimFooter, rect.width(), dimFooter );
-
-        rect.setBottom( d_data->footerRect.top() - d_data->spacing );
-
-        if ( d_data->layoutData.scale[QwtPlot::yLeft].isEnabled !=
-            d_data->layoutData.scale[QwtPlot::yRight].isEnabled )
-        {
-            // if only one of the y axes is missing we align
-            // the footer centered to the canvas
-
-            d_data->footerRect.setX( rect.left() + dimAxes[QwtPlot::yLeft] );
-            d_data->footerRect.setWidth( rect.width()
-                - dimAxes[QwtPlot::yLeft] - dimAxes[QwtPlot::yRight] );
-        }
-    }
-
-    d_data->canvasRect.setRect(
-        rect.x() + dimAxes[QwtPlot::yLeft],
-        rect.y() + dimAxes[QwtPlot::xTop],
-        rect.width() - dimAxes[QwtPlot::yRight] - dimAxes[QwtPlot::yLeft],
-        rect.height() - dimAxes[QwtPlot::xBottom] - dimAxes[QwtPlot::xTop] );
-
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-    {
-        // set the rects for the axes
-
-        if ( dimAxes[axis] )
-        {
-            int dim = dimAxes[axis];
-            QRectF &scaleRect = d_data->scaleRect[axis];
-
-            scaleRect = d_data->canvasRect;
-            switch ( axis )
-            {
-                case QwtPlot::yLeft:
-                    scaleRect.setX( d_data->canvasRect.left() - dim );
-                    scaleRect.setWidth( dim );
-                    break;
-                case QwtPlot::yRight:
-                    scaleRect.setX( d_data->canvasRect.right() );
-                    scaleRect.setWidth( dim );
-                    break;
-                case QwtPlot::xBottom:
-                    scaleRect.setY( d_data->canvasRect.bottom() );
-                    scaleRect.setHeight( dim );
-                    break;
-                case QwtPlot::xTop:
-                    scaleRect.setY( d_data->canvasRect.top() - dim );
-                    scaleRect.setHeight( dim );
-                    break;
-            }
-            scaleRect = scaleRect.normalized();
-        }
-    }
-
-    // +---+-----------+---+
-    // |  <-   Axis   ->   |
-    // +-^-+-----------+-^-+
-    // | | |           | | |
-    // |   |           |   |
-    // | A |           | A |
-    // | x |  Canvas   | x |
-    // | i |           | i |
-    // | s |           | s |
-    // |   |           |   |
-    // | | |           | | |
-    // +-V-+-----------+-V-+
-    // |   <-  Axis   ->   |
-    // +---+-----------+---+
-
-    // The ticks of the axes - not the labels above - should
-    // be aligned to the canvas. So we try to use the empty
-    // corners to extend the axes, so that the label texts
-    // left/right of the min/max ticks are moved into them.
-
-    alignScales( options, d_data->canvasRect, d_data->scaleRect );
-
-    if ( !d_data->legendRect.isEmpty() )
-    {
-        // We prefer to align the legend to the canvas - not to
-        // the complete plot - if possible.
-
-        d_data->legendRect = alignLegend( d_data->canvasRect, d_data->legendRect );
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_layout.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_layout.h
deleted file mode 100644
index 27feab500d0f729dc04e7a0348b8ae3be6871ad7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_layout.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_LAYOUT_H
-#define QWT_PLOT_LAYOUT_H
-
-#include "qwt_global.h"
-#include "qwt_plot.h"
-
-/*!
-  \brief Layout engine for QwtPlot.
-
-  It is used by the QwtPlot widget to organize its internal widgets
-  or by QwtPlot::print() to render its content to a QPaintDevice like
-  a QPrinter, QPixmap/QImage or QSvgRenderer.
-
-  \sa QwtPlot::setPlotLayout()
-*/
-
-class QWT_EXPORT QwtPlotLayout
-{
-public:
-    /*!
-      Options to configure the plot layout engine
-      \sa activate(), QwtPlotRenderer
-     */
-    enum Option
-    {
-        //! Unused
-        AlignScales = 0x01,
-
-        /*!
-          Ignore the dimension of the scrollbars. There are no
-          scrollbars, when the plot is not rendered to widgets.
-         */
-        IgnoreScrollbars = 0x02,
-
-        //! Ignore all frames. 
-        IgnoreFrames = 0x04,
-
-        //! Ignore the legend.
-        IgnoreLegend = 0x08,
-
-        //! Ignore the title.
-        IgnoreTitle = 0x10,
-
-        //! Ignore the footer.
-        IgnoreFooter = 0x20
-    };
-
-    //! Layout options
-    typedef QFlags<Option> Options;
-
-    explicit QwtPlotLayout();
-    virtual ~QwtPlotLayout();
-
-    void setCanvasMargin( int margin, int axis = -1 );
-    int canvasMargin( int axis ) const;
-
-    void setAlignCanvasToScales( bool );
-
-    void setAlignCanvasToScale( int axisId, bool );
-    bool alignCanvasToScale( int axisId ) const;
-
-    void setSpacing( int );
-    int spacing() const;
-
-    void setLegendPosition( QwtPlot::LegendPosition pos, double ratio );
-    void setLegendPosition( QwtPlot::LegendPosition pos );
-    QwtPlot::LegendPosition legendPosition() const;
-
-    void setLegendRatio( double ratio );
-    double legendRatio() const;
-
-    virtual QSize minimumSizeHint( const QwtPlot * ) const;
-
-    virtual void activate( const QwtPlot *,
-        const QRectF &rect, Options options = 0x00 );
-
-    virtual void invalidate();
-
-    QRectF titleRect() const;
-    QRectF footerRect() const;
-    QRectF legendRect() const;
-    QRectF scaleRect( int axis ) const;
-    QRectF canvasRect() const;
-
-    class LayoutData;
-
-protected:
-
-    void setTitleRect( const QRectF & );
-    void setFooterRect( const QRectF & );
-    void setLegendRect( const QRectF & );
-    void setScaleRect( int axis, const QRectF & );
-    void setCanvasRect( const QRectF & );
-
-    QRectF layoutLegend( Options options, const QRectF & ) const;
-    QRectF alignLegend( const QRectF &canvasRect,
-        const QRectF &legendRect ) const;
-
-    void expandLineBreaks( Options options, const QRectF &rect,
-        int &dimTitle, int &dimFooter, int dimAxes[QwtPlot::axisCnt] ) const;
-
-    void alignScales( Options options, QRectF &canvasRect,
-        QRectF scaleRect[QwtPlot::axisCnt] ) const;
-
-private:
-    class PrivateData;
-
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotLayout::Options )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_legenditem.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_legenditem.cpp
deleted file mode 100644
index 1ca021b95fd48c6b8b9d82135a59e2ef2b735047..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_legenditem.cpp
+++ /dev/null
@@ -1,872 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_legenditem.h"
-#include "qwt_dyngrid_layout.h"
-#include "qwt_scale_map.h"
-#include "qwt_painter.h"
-#include <qlayoutitem.h>
-#include <qpen.h>
-#include <qbrush.h>
-#include <qpainter.h>
-#include <qmath.h>
-
-class QwtLegendLayoutItem: public QLayoutItem
-{
-public:
-    QwtLegendLayoutItem( const QwtPlotLegendItem *, const QwtPlotItem * );
-    virtual ~QwtLegendLayoutItem();
-
-    const QwtPlotItem *plotItem() const;
-
-    void setData( const QwtLegendData & );
-    const QwtLegendData &data() const;
-
-    virtual Qt::Orientations expandingDirections() const;
-    virtual QRect geometry() const;
-    virtual bool hasHeightForWidth() const;
-    virtual int heightForWidth( int w ) const;
-    virtual bool isEmpty() const;
-    virtual QSize maximumSize() const;
-    virtual int minimumHeightForWidth( int w ) const;
-    virtual QSize minimumSize() const;
-    virtual void setGeometry( const QRect & r );
-    virtual QSize sizeHint() const;
-
-private:
-
-    const QwtPlotLegendItem *d_legendItem;
-    const QwtPlotItem *d_plotItem;
-    QwtLegendData d_data;
-
-    QRect d_rect;
-};
-
-QwtLegendLayoutItem::QwtLegendLayoutItem( 
-        const QwtPlotLegendItem *legendItem, const QwtPlotItem *plotItem ):
-    d_legendItem( legendItem ),
-    d_plotItem( plotItem)
-{
-}
-
-QwtLegendLayoutItem::~QwtLegendLayoutItem()
-{
-}
-
-const QwtPlotItem *QwtLegendLayoutItem::plotItem() const
-{
-    return d_plotItem;
-}
-
-void QwtLegendLayoutItem::setData( const QwtLegendData &data )
-{
-    d_data = data;
-}
-
-const QwtLegendData &QwtLegendLayoutItem::data() const
-{
-    return d_data;
-}
-
-Qt::Orientations QwtLegendLayoutItem::expandingDirections() const
-{
-    return Qt::Horizontal;
-}
-
-bool QwtLegendLayoutItem::hasHeightForWidth() const
-{
-    return !d_data.title().isEmpty();
-}
-
-int QwtLegendLayoutItem::minimumHeightForWidth( int w ) const
-{
-    return d_legendItem->heightForWidth( d_data, w );
-}
-
-int QwtLegendLayoutItem::heightForWidth( int w ) const
-{
-    return d_legendItem->heightForWidth( d_data, w );
-}
-
-bool QwtLegendLayoutItem::isEmpty() const
-{
-    return false;
-}
-
-QSize QwtLegendLayoutItem::maximumSize() const
-{
-    return QSize( QLAYOUTSIZE_MAX, QLAYOUTSIZE_MAX );
-}
-
-QSize QwtLegendLayoutItem::minimumSize() const
-{
-    return d_legendItem->minimumSize( d_data );
-}
-
-QSize QwtLegendLayoutItem::sizeHint() const
-{
-    return minimumSize();
-}
-
-void QwtLegendLayoutItem::setGeometry( const QRect &rect )
-{
-    d_rect = rect;
-}
-
-QRect QwtLegendLayoutItem::geometry() const
-{
-    return d_rect;
-}
-
-class QwtPlotLegendItem::PrivateData
-{
-public:
-    PrivateData():
-        itemMargin( 4 ),
-        itemSpacing( 4 ),
-        borderRadius( 0.0 ),
-        borderPen( Qt::NoPen ),
-        backgroundBrush( Qt::NoBrush ),
-        backgroundMode( QwtPlotLegendItem::LegendBackground ),
-        borderDistance( 10 ),
-        alignment( Qt::AlignRight | Qt::AlignBottom )
-    {
-        layout = new QwtDynGridLayout();
-        layout->setMaxColumns( 2 );
-
-        layout->setSpacing( 0 );
-        layout->setContentsMargins( 0, 0, 0, 0 );
-    }
-
-    ~PrivateData()
-    {
-        delete layout;
-    }
-
-    QFont font;
-    QPen textPen;
-    int itemMargin;
-    int itemSpacing;
-
-    double borderRadius;
-    QPen borderPen;
-    QBrush backgroundBrush;
-    QwtPlotLegendItem::BackgroundMode backgroundMode;
-
-    int borderDistance;
-    Qt::Alignment alignment;
-
-    QMap< const QwtPlotItem *, QList<QwtLegendLayoutItem *> > map;
-    QwtDynGridLayout *layout;
-};
-
-//! Constructor 
-QwtPlotLegendItem::QwtPlotLegendItem():
-    QwtPlotItem( QwtText( "Legend" ) )
-{
-    d_data = new PrivateData;
-
-    setItemInterest( QwtPlotItem::LegendInterest, true );
-    setZ( 100.0 );
-}
-
-//! Destructor
-QwtPlotLegendItem::~QwtPlotLegendItem()
-{
-    clearLegend();
-    delete d_data;
-}
-
-//! \return QwtPlotItem::Rtti_PlotLegend
-int QwtPlotLegendItem::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotLegend;
-}
-
-/*!
-  \brief Set the alignmnet
-
-  Alignment means the position of the legend relative
-  to the geometry of the plot canvas. 
-
-  \param alignment Alignment flags
-
-  \sa alignment(), setMaxColumns()
-
-  \note To align a legend with many items horizontally 
-        the number of columns need to be limited
- */
-void QwtPlotLegendItem::setAlignment( Qt::Alignment alignment )
-{
-    if ( d_data->alignment != alignment )
-    {
-        d_data->alignment = alignment;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Alignment flags
-  \sa setAlignment()
- */
-Qt::Alignment QwtPlotLegendItem::alignment() const
-{
-    return d_data->alignment;
-}
-
-/*!
-  \brief Limit the number of columns
-
-  When aligning the legend horizontally ( Qt::AlignLeft, Qt::AlignRight )
-  the number of columns needs to be limited to avoid, that
-  the width of the legend grows with an increasing number of entries.
-
-  \param maxColumns Maximum number of columns. 0 means unlimited.
-  \sa maxColumns(), QwtDynGridLayout::setMaxColumns()
- */
-void QwtPlotLegendItem::setMaxColumns( uint maxColumns )
-{
-    if ( maxColumns != d_data->layout->maxColumns() )
-    {
-        d_data->layout->setMaxColumns( maxColumns );
-        itemChanged();
-    }
-}
-
-/*!
-  \return Maximum number of columns
-  \sa maxColumns(), QwtDynGridLayout::maxColumns()
- */
-uint QwtPlotLegendItem::maxColumns() const
-{
-    return d_data->layout->maxColumns();
-}
-
-/*!
-  \brief Set the margin around legend items
-
-  The default setting for the margin is 0.
-
-  \param margin Margin in pixels
-  \sa margin(), setSpacing(), setItemMargin(), setItemSpacing
- */
-void QwtPlotLegendItem::setMargin( int margin )
-{
-    margin = qMax( margin, 0 );
-    if ( margin != this->margin() )
-    {
-        d_data->layout->setContentsMargins( 
-            margin, margin, margin, margin );
-
-        itemChanged();
-    }
-}
-
-/*!
-  \return Margin around the legend items
-  \sa setMargin(), spacing(), itemMargin(), itemSpacing()
- */
-int QwtPlotLegendItem::margin() const
-{
-    int left;
-    d_data->layout->getContentsMargins( &left, NULL, NULL, NULL );
-
-    return left;
-}
-
-/*!
-  \brief Set the spacing between the legend items
-
-  \param spacing Spacing in pixels
-  \sa spacing(), setMargin()
-*/
-void QwtPlotLegendItem::setSpacing( int spacing )
-{
-    spacing = qMax( spacing, 0 );
-    if ( spacing != d_data->layout->spacing() )
-    {
-        d_data->layout->setSpacing( spacing );
-        itemChanged();
-    }
-}
-
-/*!
-  \return Spacing between the legend items
-  \sa setSpacing(), margin(), itemSpacing(), itemMargin()
- */
-int QwtPlotLegendItem::spacing() const
-{
-    return d_data->layout->spacing();
-}
-
-/*!
-  Set the margin around each item
-
-  \param margin Margin
-  \sa itemMargin(), setItemSpacing(), setMargin(), setSpacing()
- */
-void QwtPlotLegendItem::setItemMargin( int margin )
-{
-    margin = qMax( margin, 0 );
-    if ( margin != d_data->itemMargin )
-    {
-        d_data->itemMargin = margin;
-
-        d_data->layout->invalidate();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Margin around each item
-  \sa setItemMargin(), itemSpacing(), margin(), spacing()
-*/
-int QwtPlotLegendItem::itemMargin() const
-{
-    return d_data->itemMargin;
-}
-
-/*!
-  Set the spacing inside of each item
-
-  \param spacing Spacing
-  \sa itemSpacing(), setItemMargin(), setMargin(), setSpacing()
- */
-void QwtPlotLegendItem::setItemSpacing( int spacing )
-{
-    spacing = qMax( spacing, 0 );
-    if ( spacing != d_data->itemSpacing )
-    {
-        d_data->itemSpacing = spacing;
-
-        d_data->layout->invalidate();
-        itemChanged();
-    }
-
-}
-
-/*!
-  \return Spacing inside of each item
-  \sa setItemSpacing(), itemMargin(), margin(), spacing()
-*/
-int QwtPlotLegendItem::itemSpacing() const
-{
-    return d_data->itemSpacing;
-}
-
-/*!
-   Change the font used for drawing the text label
-
-   \param font Legend font
-   \sa font()
-*/
-void QwtPlotLegendItem::setFont( const QFont &font )
-{
-    if ( font != d_data->font )
-    {
-        d_data->font = font;
-
-        d_data->layout->invalidate();
-        itemChanged();
-    }
-}
-
-/*!
-   \return Font used for drawing the text label
-   \sa setFont()
-*/
-QFont QwtPlotLegendItem::font() const
-{
-    return d_data->font;
-}
-
-/*!
-  \brief Set the margin between the legend and the canvas border
-
-  The default setting for the margin is 10 pixels.
-
-  \param distance Margin in pixels
-  \sa setMargin()
- */
-void QwtPlotLegendItem::setBorderDistance( int distance )
-{
-    if ( distance < 0 )
-        distance = -1;
-
-    if ( distance != d_data->borderDistance )
-    {
-        d_data->borderDistance = distance;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Margin between the legend and the canvas border
-  \sa margin()
- */
-int QwtPlotLegendItem::borderDistance() const
-{
-    return d_data->borderDistance;
-}
-
-/*!
-  Set the radius for the border
-  
-  \param radius A value <= 0 defines a rectangular border
-  \sa borderRadius(), setBorderPen()
- */
-void QwtPlotLegendItem::setBorderRadius( double radius )
-{
-    radius = qMax( 0.0, radius );
-
-    if ( radius != d_data->borderRadius )
-    {
-        d_data->borderRadius = radius;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Radius of the border
-  \sa setBorderRadius(), setBorderPen()
- */
-double QwtPlotLegendItem::borderRadius() const
-{
-    return d_data->borderRadius;
-}
-
-/*!
-  Set the pen for drawing the border
-
-  \param pen Border pen
-  \sa borderPen(), setBackgroundBrush()
- */
-void QwtPlotLegendItem::setBorderPen( const QPen &pen )
-{
-    if ( d_data->borderPen != pen )
-    {
-        d_data->borderPen = pen;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Pen for drawing the border
-  \sa setBorderPen(), backgroundBrush()
- */
-QPen QwtPlotLegendItem::borderPen() const
-{
-    return d_data->borderPen;
-}
-
-/*!
-  \brief Set the background brush
-
-  The brush is used to fill the background
-
-  \param brush Brush
-  \sa backgroundBrush(), setBackgroundMode(), drawBackground()
- */
-void QwtPlotLegendItem::setBackgroundBrush( const QBrush &brush )
-{
-    if ( d_data->backgroundBrush != brush )
-    {
-        d_data->backgroundBrush = brush;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Brush is used to fill the background
-  \sa setBackgroundBrush(), backgroundMode(), drawBackground()
- */
-QBrush QwtPlotLegendItem::backgroundBrush() const
-{
-    return d_data->backgroundBrush;
-}
-
-/*!
-  \brief Set the background mode
-
-  Depending on the mode the complete legend or each item 
-  might have an background.
-
-  The default setting is LegendBackground.
-
-   \sa backgroundMode(), setBackgroundBrush(), drawBackground()
- */
-void QwtPlotLegendItem::setBackgroundMode( BackgroundMode mode )
-{
-    if ( mode != d_data->backgroundMode )
-    {
-        d_data->backgroundMode = mode;
-        itemChanged();
-    }
-}
-
-/*! 
-  \return backgroundMode
-  \sa setBackgroundMode(), backgroundBrush(), drawBackground()
- */
-QwtPlotLegendItem::BackgroundMode QwtPlotLegendItem::backgroundMode() const
-{
-    return d_data->backgroundMode;
-}
-
-/*!
-  \brief Set the pen for drawing text labels
-
-  \param pen Text pen
-  \sa textPen(), setFont()
- */
-void QwtPlotLegendItem::setTextPen( const QPen &pen )
-{
-    if ( d_data->textPen != pen )
-    {
-        d_data->textPen = pen;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Pen for drawing text labels
-  \sa setTextPen(), font()
- */
-QPen QwtPlotLegendItem::textPen() const
-{
-    return d_data->textPen;
-}
-
-/*!
-  Draw the legend
-
-  \param painter Painter
-  \param xMap x Scale Map
-  \param yMap y Scale Map
-  \param canvasRect Contents rectangle of the canvas in painter coordinates
-*/
-void QwtPlotLegendItem::draw( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect ) const
-{
-    Q_UNUSED( xMap );
-    Q_UNUSED( yMap );
-
-    d_data->layout->setGeometry( geometry( canvasRect ) );
-    if ( d_data->layout->geometry().isEmpty() )
-    {
-        // don't draw a legend when having no content
-        return;
-    }
-
-    if ( d_data->backgroundMode == QwtPlotLegendItem::LegendBackground )
-        drawBackground( painter, d_data->layout->geometry() );
-    
-    for ( int i = 0; i <  d_data->layout->count(); i++ )
-    {
-        const QwtLegendLayoutItem *layoutItem = 
-            static_cast<QwtLegendLayoutItem *>( d_data->layout->itemAt( i ) );
-
-        if ( d_data->backgroundMode == QwtPlotLegendItem::ItemBackground )
-            drawBackground( painter, layoutItem->geometry() );
-
-        painter->save();
-
-        drawLegendData( painter, layoutItem->plotItem(),
-            layoutItem->data(), layoutItem->geometry() );
-
-        painter->restore();
-    }
-}
-
-/*!
-  Draw a rounded rect
-
-  \param painter Painter
-  \param rect Bounding rectangle
-
-  \sa setBorderRadius(), setBorderPen(),
-      setBackgroundBrush(), setBackgroundMode()
- */
-void QwtPlotLegendItem::drawBackground( 
-    QPainter *painter, const QRectF &rect ) const
-{
-    painter->save();
-
-    painter->setPen( d_data->borderPen );
-    painter->setBrush( d_data->backgroundBrush );
-    
-    const double radius = d_data->borderRadius;
-    painter->drawRoundedRect( rect, radius, radius );
-    
-    painter->restore();
-}
-
-/*!
-  Calculate the geometry of the legend on the canvas
-
-  \param canvasRect Geometry of the canvas
-  \return Geometry of the legend
-*/
-QRect QwtPlotLegendItem::geometry( const QRectF &canvasRect ) const
-{
-    QRect rect;
-    rect.setSize( d_data->layout->sizeHint() );
-
-    int margin = d_data->borderDistance;
-    if ( d_data->alignment & Qt::AlignHCenter )
-    {
-        int x = qRound( canvasRect.center().x() );
-        rect.moveCenter( QPoint( x, rect.center().y() ) ); 
-    }
-    else if ( d_data->alignment & Qt::AlignRight )
-    {
-        rect.moveRight( qFloor( canvasRect.right() - margin ) );
-    }
-    else 
-    {
-        rect.moveLeft( qCeil( canvasRect.left() + margin ) );
-    }
-
-    if ( d_data->alignment & Qt::AlignVCenter )
-    {
-        int y = qRound( canvasRect.center().y() );
-        rect.moveCenter( QPoint( rect.center().x(), y ) );
-    }
-    else if ( d_data->alignment & Qt::AlignBottom )
-    {
-        rect.moveBottom( qFloor( canvasRect.bottom() - margin ) );
-    }
-    else 
-    {
-        rect.moveTop( qCeil( canvasRect.top() + margin ) ); 
-    }
-
-    return rect;
-}
-
-/*!
-  Update the legend items according to modifications of a 
-  plot item
-
-  \param plotItem Plot item
-  \param data Attributes of the legend entries
- */
-void QwtPlotLegendItem::updateLegend( const QwtPlotItem *plotItem,
-        const QList<QwtLegendData> &data )
-{
-    if ( plotItem == NULL )
-        return;
-
-    QList<QwtLegendLayoutItem *> layoutItems;
-
-    QMap<const QwtPlotItem *, QList<QwtLegendLayoutItem *> >::iterator it = 
-        d_data->map.find( plotItem );
-    if ( it != d_data->map.end() )
-        layoutItems = it.value();
-
-    bool changed = false;
-
-    if ( data.size() != layoutItems.size() )
-    {
-        changed = true;
-
-        for ( int i = 0; i < layoutItems.size(); i++ )
-        {
-            d_data->layout->removeItem( layoutItems[i] );
-            delete layoutItems[i];
-        }
-        layoutItems.clear();
-
-        if ( it != d_data->map.end() )
-            d_data->map.remove( plotItem );
-
-        if ( !data.isEmpty() )
-        {
-            for ( int i = 0; i < data.size(); i++ )
-            {
-                QwtLegendLayoutItem *layoutItem = 
-                    new QwtLegendLayoutItem( this, plotItem );
-                d_data->layout->addItem( layoutItem );
-                layoutItems += layoutItem;
-            }
-
-            d_data->map.insert( plotItem, layoutItems );
-        }
-    }
-
-    for ( int i = 0; i < data.size(); i++ )
-    {
-        if ( layoutItems[i]->data().values() != data[i].values() )
-        {
-            layoutItems[i]->setData( data[i] );
-            changed = true;
-        }
-    }
-
-    if ( changed )
-    {
-        d_data->layout->invalidate();
-        itemChanged();
-    }
-}
-
-//! Remove all items from the legend
-void QwtPlotLegendItem::clearLegend()
-{
-    if ( !d_data->map.isEmpty() )
-    {
-        d_data->map.clear();
-
-        for ( int i = d_data->layout->count() - 1; i >= 0; i-- )
-            delete d_data->layout->takeAt( i );
-
-        itemChanged();
-    }
-}
-
-/*!
-  Draw an entry on the legend
-
-  \param painter Qt Painter
-  \param plotItem Plot item, represented by the entry
-  \param data Attributes of the legend entry
-  \param rect Bounding rectangle for the entry
- */
-void QwtPlotLegendItem::drawLegendData( QPainter *painter,
-    const QwtPlotItem *plotItem, const QwtLegendData &data, 
-    const QRectF &rect ) const
-{
-    Q_UNUSED( plotItem );
-
-    const int m = d_data->itemMargin;
-    const QRectF r = rect.toRect().adjusted( m, m, -m, -m );
-
-    painter->setClipRect( r, Qt::IntersectClip );
-
-    int titleOff = 0;
-
-    const QwtGraphic graphic = data.icon();
-    if ( !graphic.isEmpty() )
-    {
-        QRectF iconRect( r.topLeft(), graphic.defaultSize() );
-
-        iconRect.moveCenter( 
-            QPoint( iconRect.center().x(), rect.center().y() ) );
-
-        graphic.render( painter, iconRect, Qt::KeepAspectRatio );
-
-        titleOff += iconRect.width() + d_data->itemSpacing;
-    }
-
-    const QwtText text = data.title();
-    if ( !text.isEmpty() )
-    {
-        painter->setPen( textPen() );
-        painter->setFont( font() );
-
-        const QRectF textRect = r.adjusted( titleOff, 0, 0, 0 );
-        text.draw( painter, textRect );
-    }
-}
-
-/*!
-  Minimum size hint needed to display an entry
-
-  \param data Attributes of the legend entry
-  \return Minimum size
- */
-QSize QwtPlotLegendItem::minimumSize( const QwtLegendData &data ) const
-{
-    QSize size( 2 * d_data->itemMargin, 2 * d_data->itemMargin );
-
-    if ( !data.isValid() )
-        return size;
-
-    const QwtGraphic graphic = data.icon();
-    const QwtText text = data.title();
-
-    int w = 0;
-    int h = 0;
-
-    if ( !graphic.isNull() )
-    {
-        w = graphic.width();
-        h = graphic.height();
-    }
-
-    if ( !text.isEmpty() )
-    {
-        const QSizeF sz = text.textSize( font() );
-
-        w += qCeil( sz.width() );
-        h = qMax( h, qCeil( sz.height() ) );
-    }
-
-    if ( graphic.width() > 0 && !text.isEmpty() )
-        w += d_data->itemSpacing;
-
-    size += QSize( w, h );
-    return size;
-}
-
-/*!
-  \return The preferred height, for a width.
-  \param data Attributes of the legend entry
-  \param width Width
-*/
-int QwtPlotLegendItem::heightForWidth( 
-    const QwtLegendData &data, int width ) const
-{
-    width -= 2 * d_data->itemMargin;
-
-    const QwtGraphic graphic = data.icon();
-    const QwtText text = data.title();
-
-    if ( text.isEmpty() )
-        return graphic.height();
-
-    if ( graphic.width() > 0 )
-        width -= graphic.width() + d_data->itemSpacing;
-
-    int h = text.heightForWidth( width, font() );
-    h += 2 * d_data->itemMargin;
-
-    return qMax( graphic.height(), h );
-}
-
-/*! 
-  \return All plot items with an entry on the legend
-  \note A plot item might have more than one entry on the legend
- */
-QList< const QwtPlotItem * > QwtPlotLegendItem::plotItems() const
-{
-    return d_data->map.keys();
-}
-
-/*!
-  \return Geometries of the items of a plot item
-  \note Usually a plot item has only one entry on the legend
-*/
-QList< QRect > QwtPlotLegendItem::legendGeometries( 
-    const QwtPlotItem *plotItem ) const
-{
-    QList<QwtLegendLayoutItem *> layoutItems;
-
-    QMap<const QwtPlotItem *, QList<QwtLegendLayoutItem *> >::iterator it =
-        d_data->map.find( plotItem );
-    if ( it != d_data->map.end() )
-        layoutItems = it.value();
-
-    QList<QRect> geometries;
-    for ( int i = 0; i < layoutItems.size(); i++ )
-        geometries += layoutItems[i]->geometry();
-
-    return geometries;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_legenditem.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_legenditem.h
deleted file mode 100644
index 2611267b35d84ec1e3a2698ab04f3b47da48ca27..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_legenditem.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_LEGEND_ITEM_H
-#define QWT_PLOT_LEGEND_ITEM_H
-
-#include "qwt_global.h"
-#include "qwt_plot_item.h"
-#include "qwt_legend_data.h"
-
-class QFont;
-
-/*!
-  \brief A class which draws a legend inside the plot canvas
-
-  QwtPlotLegendItem can be used to draw a inside the plot canvas.
-  It can be used together with a QwtLegend or instead of it
-  to have more space for the plot canvas.
-
-  In opposite to QwtLegend the legend item is not interactive. 
-  To identify mouse clicks on a legend item an event filter
-  needs to be installed catching mouse events ob the plot canvas.
-  The geometries of the legend items are available using
-  legendGeometries().
-  
-  The legend item is aligned to plot canvas according to 
-  its alignment() flags. It might have a background for the
-  complete legend ( usually semi transparent ) or for
-  each legend item.
-
-  \note An external QwtLegend with a transparent background 
-        on top the plot canvas might be another option 
-        with a similar effect.
-*/
-
-class QWT_EXPORT QwtPlotLegendItem: public QwtPlotItem
-{
-public:
-    /*!
-      \brief Background mode
-
-      Depending on the mode the complete legend or each item 
-      might have an background.
-
-      The default setting is LegendBackground.
-
-       \sa setBackgroundMode(), setBackgroundBrush(), drawBackground()
-     */
-    enum BackgroundMode
-    {
-        //! The legend has a background
-        LegendBackground,
-
-        //! Each item has a background
-        ItemBackground
-    };
-
-    explicit QwtPlotLegendItem();
-    virtual ~QwtPlotLegendItem();
-
-    virtual int rtti() const;
-
-    void setAlignment( Qt::Alignment );
-    Qt::Alignment alignment() const;
-
-    void setMaxColumns( uint );
-    uint maxColumns() const;
-
-    void setMargin( int );
-    int margin() const;
-
-    void setSpacing( int );
-    int spacing() const;
-
-    void setItemMargin( int );
-    int itemMargin() const;
-
-    void setItemSpacing( int );
-    int itemSpacing() const;
-    
-    void setFont( const QFont& );
-    QFont font() const;
-
-    void setBorderDistance( int numPixels );
-    int borderDistance() const;
-
-    void setBorderRadius( double );
-    double borderRadius() const;
-
-    void setBorderPen( const QPen & );
-    QPen borderPen() const;
-
-    void setBackgroundBrush( const QBrush & );
-    QBrush backgroundBrush() const;
-
-    void setBackgroundMode( BackgroundMode );
-    BackgroundMode backgroundMode() const;
-
-    void setTextPen( const QPen & );
-    QPen textPen() const;
-
-    virtual void draw( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &rect ) const;
-
-    void clearLegend();
-
-    virtual void updateLegend( const QwtPlotItem *,
-        const QList<QwtLegendData> & );
-
-    virtual QRect geometry( const QRectF &canvasRect ) const;
-
-    virtual QSize minimumSize( const QwtLegendData & ) const;
-    virtual int heightForWidth( const QwtLegendData &, int w ) const;
-
-    QList< const QwtPlotItem * > plotItems() const;
-    QList< QRect > legendGeometries( const QwtPlotItem * ) const;
-
-protected:
-    virtual void drawLegendData( QPainter *painter, 
-        const QwtPlotItem *, const QwtLegendData &, const QRectF & ) const;
-
-    virtual void drawBackground( QPainter *, const QRectF &rect ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_magnifier.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_magnifier.cpp
deleted file mode 100644
index bfb4b3cb4899aaef7b2cd93eefb6d6a46ffeebf7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_magnifier.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot.h"
-#include "qwt_scale_div.h"
-#include "qwt_plot_magnifier.h"
-#include <qevent.h>
-
-class QwtPlotMagnifier::PrivateData
-{
-public:
-    PrivateData()
-    {
-        for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-            isAxisEnabled[axis] = true;
-    }
-
-    bool isAxisEnabled[QwtPlot::axisCnt];
-};
-
-/*!
-   Constructor
-   \param canvas Plot canvas to be magnified
-*/
-QwtPlotMagnifier::QwtPlotMagnifier( QWidget *canvas ):
-    QwtMagnifier( canvas )
-{
-    d_data = new PrivateData();
-}
-
-//! Destructor
-QwtPlotMagnifier::~QwtPlotMagnifier()
-{
-    delete d_data;
-}
-
-/*!
-   \brief En/Disable an axis
-
-   Only Axes that are enabled will be zoomed.
-   All other axes will remain unchanged.
-
-   \param axis Axis, see QwtPlot::Axis
-   \param on On/Off
-
-   \sa isAxisEnabled()
-*/
-void QwtPlotMagnifier::setAxisEnabled( int axis, bool on )
-{
-    if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        d_data->isAxisEnabled[axis] = on;
-}
-
-/*!
-   Test if an axis is enabled
-
-   \param axis Axis, see QwtPlot::Axis
-   \return True, if the axis is enabled
-
-   \sa setAxisEnabled()
-*/
-bool QwtPlotMagnifier::isAxisEnabled( int axis ) const
-{
-    if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        return d_data->isAxisEnabled[axis];
-
-    return true;
-}
-
-//! Return observed plot canvas
-QWidget *QwtPlotMagnifier::canvas()
-{
-    return parentWidget();
-}
-
-//! Return Observed plot canvas
-const QWidget *QwtPlotMagnifier::canvas() const
-{
-    return parentWidget();
-}
-
-//! Return plot widget, containing the observed plot canvas
-QwtPlot *QwtPlotMagnifier::plot()
-{
-    QWidget *w = canvas();
-    if ( w )
-        w = w->parentWidget();
-
-    return qobject_cast<QwtPlot *>( w );
-}
-
-//! Return plot widget, containing the observed plot canvas
-const QwtPlot *QwtPlotMagnifier::plot() const
-{
-    const QWidget *w = canvas();
-    if ( w )
-        w = w->parentWidget();
-
-    return qobject_cast<const QwtPlot *>( w );
-}
-
-/*!
-   Zoom in/out the axes scales
-   \param factor A value < 1.0 zooms in, a value > 1.0 zooms out.
-*/
-void QwtPlotMagnifier::rescale( double factor )
-{
-    QwtPlot* plt = plot();
-    if ( plt == NULL )
-        return;
-
-    factor = qAbs( factor );
-    if ( factor == 1.0 || factor == 0.0 )
-        return;
-
-    bool doReplot = false;
-
-    const bool autoReplot = plt->autoReplot();
-    plt->setAutoReplot( false );
-
-    for ( int axisId = 0; axisId < QwtPlot::axisCnt; axisId++ )
-    {
-        if ( isAxisEnabled( axisId ) )
-        {
-            const QwtScaleMap scaleMap = plt->canvasMap( axisId );
-
-            double v1 = scaleMap.s1();
-            double v2 = scaleMap.s2();
-
-            if ( scaleMap.transformation() )
-            {
-                // the coordinate system of the paint device is always linear
-
-                v1 = scaleMap.transform( v1 ); // scaleMap.p1()
-                v2 = scaleMap.transform( v2 ); // scaleMap.p2()
-            }
-
-            const double center = 0.5 * ( v1 + v2 );
-            const double width_2 = 0.5 * ( v2 - v1 ) * factor;
-
-            v1 = center - width_2;
-            v2 = center + width_2;
-
-            if ( scaleMap.transformation() )
-            {
-                v1 = scaleMap.invTransform( v1 );
-                v2 = scaleMap.invTransform( v2 );
-            }
-
-            plt->setAxisScale( axisId, v1, v2 );
-            doReplot = true;
-        }
-    }
-
-    plt->setAutoReplot( autoReplot );
-
-    if ( doReplot )
-        plt->replot();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_magnifier.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_magnifier.h
deleted file mode 100644
index 635a799b457cd0d9647bfbbd0d7355d916336e99..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_magnifier.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_MAGNIFIER_H
-#define QWT_PLOT_MAGNIFIER_H 1
-
-#include "qwt_global.h"
-#include "qwt_magnifier.h"
-
-class QwtPlot;
-
-/*!
-  \brief QwtPlotMagnifier provides zooming, by magnifying in steps.
-
-  Using QwtPlotMagnifier a plot can be zoomed in/out in steps using
-  keys, the mouse wheel or moving a mouse button in vertical direction.
-
-  Together with QwtPlotZoomer and QwtPlotPanner it is possible to implement
-  individual and powerful navigation of the plot canvas.
-
-  \sa QwtPlotZoomer, QwtPlotPanner, QwtPlot
-*/
-class QWT_EXPORT QwtPlotMagnifier: public QwtMagnifier
-{
-    Q_OBJECT
-
-public:
-    explicit QwtPlotMagnifier( QWidget * );
-    virtual ~QwtPlotMagnifier();
-
-    void setAxisEnabled( int axis, bool on );
-    bool isAxisEnabled( int axis ) const;
-
-    QWidget *canvas();
-    const QWidget *canvas() const;
-
-    QwtPlot *plot();
-    const QwtPlot *plot() const;
-
-protected:
-    virtual void rescale( double factor );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_marker.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_marker.cpp
deleted file mode 100644
index c2c0a3f8e2da477b5b366d0534df4cd9fc247d27..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_marker.cpp
+++ /dev/null
@@ -1,610 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_marker.h"
-#include "qwt_painter.h"
-#include "qwt_scale_map.h"
-#include "qwt_symbol.h"
-#include "qwt_text.h"
-#include "qwt_math.h"
-#include <qpainter.h>
-
-class QwtPlotMarker::PrivateData
-{
-public:
-    PrivateData():
-        labelAlignment( Qt::AlignCenter ),
-        labelOrientation( Qt::Horizontal ),
-        spacing( 2 ),
-        symbol( NULL ),
-        style( QwtPlotMarker::NoLine ),
-        xValue( 0.0 ),
-        yValue( 0.0 )
-    {
-    }
-
-    ~PrivateData()
-    {
-        delete symbol;
-    }
-
-    QwtText label;
-    Qt::Alignment labelAlignment;
-    Qt::Orientation labelOrientation;
-    int spacing;
-
-    QPen pen;
-    const QwtSymbol *symbol;
-    LineStyle style;
-
-    double xValue;
-    double yValue;
-};
-
-//! Sets alignment to Qt::AlignCenter, and style to QwtPlotMarker::NoLine
-QwtPlotMarker::QwtPlotMarker( const QString &title ):
-    QwtPlotItem( QwtText( title ) )
-{
-    d_data = new PrivateData;
-    setZ( 30.0 );
-}
-
-//! Sets alignment to Qt::AlignCenter, and style to QwtPlotMarker::NoLine
-QwtPlotMarker::QwtPlotMarker( const QwtText &title ):
-    QwtPlotItem( title )
-{
-    d_data = new PrivateData;
-    setZ( 30.0 );
-}
-
-//! Destructor
-QwtPlotMarker::~QwtPlotMarker()
-{
-    delete d_data;
-}
-
-//! \return QwtPlotItem::Rtti_PlotMarker
-int QwtPlotMarker::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotMarker;
-}
-
-//! Return Value
-QPointF QwtPlotMarker::value() const
-{
-    return QPointF( d_data->xValue, d_data->yValue );
-}
-
-//! Return x Value
-double QwtPlotMarker::xValue() const
-{
-    return d_data->xValue;
-}
-
-//! Return y Value
-double QwtPlotMarker::yValue() const
-{
-    return d_data->yValue;
-}
-
-//! Set Value
-void QwtPlotMarker::setValue( const QPointF& pos )
-{
-    setValue( pos.x(), pos.y() );
-}
-
-//! Set Value
-void QwtPlotMarker::setValue( double x, double y )
-{
-    if ( x != d_data->xValue || y != d_data->yValue )
-    {
-        d_data->xValue = x;
-        d_data->yValue = y;
-        itemChanged();
-    }
-}
-
-//! Set X Value
-void QwtPlotMarker::setXValue( double x )
-{
-    setValue( x, d_data->yValue );
-}
-
-//! Set Y Value
-void QwtPlotMarker::setYValue( double y )
-{
-    setValue( d_data->xValue, y );
-}
-
-/*!
-  Draw the marker
-
-  \param painter Painter
-  \param xMap x Scale Map
-  \param yMap y Scale Map
-  \param canvasRect Contents rectangle of the canvas in painter coordinates
-*/
-void QwtPlotMarker::draw( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect ) const
-{
-    const QPointF pos( xMap.transform( d_data->xValue ), 
-        yMap.transform( d_data->yValue ) );
-
-    // draw lines
-
-    drawLines( painter, canvasRect, pos );
-
-    // draw symbol
-    if ( d_data->symbol &&
-        ( d_data->symbol->style() != QwtSymbol::NoSymbol ) )
-    {
-        const QSizeF sz = d_data->symbol->size();
-
-        const QRectF clipRect = canvasRect.adjusted( 
-            -sz.width(), -sz.height(), sz.width(), sz.height() );
-
-        if ( clipRect.contains( pos ) )
-            d_data->symbol->drawSymbol( painter, pos );
-    }
-
-    drawLabel( painter, canvasRect, pos );
-}
-
-/*!
-  Draw the lines marker
-
-  \param painter Painter
-  \param canvasRect Contents rectangle of the canvas in painter coordinates
-  \param pos Position of the marker, translated into widget coordinates
-
-  \sa drawLabel(), QwtSymbol::drawSymbol()
-*/
-void QwtPlotMarker::drawLines( QPainter *painter,
-    const QRectF &canvasRect, const QPointF &pos ) const
-{
-    if ( d_data->style == NoLine )
-        return;
-
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    painter->setPen( d_data->pen );
-    if ( d_data->style == QwtPlotMarker::HLine ||
-        d_data->style == QwtPlotMarker::Cross )
-    {
-        double y = pos.y();
-        if ( doAlign )
-            y = qRound( y );
-
-        QwtPainter::drawLine( painter, canvasRect.left(),
-            y, canvasRect.right() - 1.0, y );
-    }
-    if ( d_data->style == QwtPlotMarker::VLine ||
-        d_data->style == QwtPlotMarker::Cross )
-    {
-        double x = pos.x();
-        if ( doAlign )
-            x = qRound( x );
-
-        QwtPainter::drawLine( painter, x,
-            canvasRect.top(), x, canvasRect.bottom() - 1.0 );
-    }
-}
-
-/*!
-  Align and draw the text label of the marker
-
-  \param painter Painter
-  \param canvasRect Contents rectangle of the canvas in painter coordinates
-  \param pos Position of the marker, translated into widget coordinates
-
-  \sa drawLabel(), QwtSymbol::drawSymbol()
-*/
-void QwtPlotMarker::drawLabel( QPainter *painter,
-    const QRectF &canvasRect, const QPointF &pos ) const
-{
-    if ( d_data->label.isEmpty() )
-        return;
-
-    Qt::Alignment align = d_data->labelAlignment;
-    QPointF alignPos = pos;
-
-    QSizeF symbolOff( 0, 0 );
-
-    switch ( d_data->style )
-    {
-        case QwtPlotMarker::VLine:
-        {
-            // In VLine-style the y-position is pointless and
-            // the alignment flags are relative to the canvas
-
-            if ( d_data->labelAlignment & Qt::AlignTop )
-            {
-                alignPos.setY( canvasRect.top() );
-                align &= ~Qt::AlignTop;
-                align |= Qt::AlignBottom;
-            }
-            else if ( d_data->labelAlignment & Qt::AlignBottom )
-            {
-                // In HLine-style the x-position is pointless and
-                // the alignment flags are relative to the canvas
-
-                alignPos.setY( canvasRect.bottom() - 1 );
-                align &= ~Qt::AlignBottom;
-                align |= Qt::AlignTop;
-            }
-            else
-            {
-                alignPos.setY( canvasRect.center().y() );
-            }
-            break;
-        }
-        case QwtPlotMarker::HLine:
-        {
-            if ( d_data->labelAlignment & Qt::AlignLeft )
-            {
-                alignPos.setX( canvasRect.left() );
-                align &= ~Qt::AlignLeft;
-                align |= Qt::AlignRight;
-            }
-            else if ( d_data->labelAlignment & Qt::AlignRight )
-            {
-                alignPos.setX( canvasRect.right() - 1 );
-                align &= ~Qt::AlignRight;
-                align |= Qt::AlignLeft;
-            }
-            else
-            {
-                alignPos.setX( canvasRect.center().x() );
-            }
-            break;
-        }
-        default:
-        {
-            if ( d_data->symbol &&
-                ( d_data->symbol->style() != QwtSymbol::NoSymbol ) )
-            {
-                symbolOff = d_data->symbol->size() + QSizeF( 1, 1 );
-                symbolOff /= 2;
-            }
-        }
-    }
-
-    qreal pw2 = d_data->pen.widthF() / 2.0;
-    if ( pw2 == 0.0 )
-        pw2 = 0.5;
-
-    const int spacing = d_data->spacing;
-
-    const qreal xOff = qMax( pw2, symbolOff.width() );
-    const qreal yOff = qMax( pw2, symbolOff.height() );
-
-    const QSizeF textSize = d_data->label.textSize( painter->font() );
-
-    if ( align & Qt::AlignLeft )
-    {
-        alignPos.rx() -= xOff + spacing;
-        if ( d_data->labelOrientation == Qt::Vertical )
-            alignPos.rx() -= textSize.height();
-        else
-            alignPos.rx() -= textSize.width();
-    }
-    else if ( align & Qt::AlignRight )
-    {
-        alignPos.rx() += xOff + spacing;
-    }
-    else
-    {
-        if ( d_data->labelOrientation == Qt::Vertical )
-            alignPos.rx() -= textSize.height() / 2;
-        else
-            alignPos.rx() -= textSize.width() / 2;
-    }
-
-    if ( align & Qt::AlignTop )
-    {
-        alignPos.ry() -= yOff + spacing;
-        if ( d_data->labelOrientation != Qt::Vertical )
-            alignPos.ry() -= textSize.height();
-    }
-    else if ( align & Qt::AlignBottom )
-    {
-        alignPos.ry() += yOff + spacing;
-        if ( d_data->labelOrientation == Qt::Vertical )
-            alignPos.ry() += textSize.width();
-    }
-    else
-    {
-        if ( d_data->labelOrientation == Qt::Vertical )
-            alignPos.ry() += textSize.width() / 2;
-        else
-            alignPos.ry() -= textSize.height() / 2;
-    }
-
-    painter->translate( alignPos.x(), alignPos.y() );
-    if ( d_data->labelOrientation == Qt::Vertical )
-        painter->rotate( -90.0 );
-
-    const QRectF textRect( 0, 0, textSize.width(), textSize.height() );
-    d_data->label.draw( painter, textRect );
-}
-
-/*!
-  \brief Set the line style
-  \param style Line style. 
-  \sa lineStyle()
-*/
-void QwtPlotMarker::setLineStyle( LineStyle style )
-{
-    if ( style != d_data->style )
-    {
-        d_data->style = style;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return the line style
-  \sa setLineStyle()
-*/
-QwtPlotMarker::LineStyle QwtPlotMarker::lineStyle() const
-{
-    return d_data->style;
-}
-
-/*!
-  \brief Assign a symbol
-  \param symbol New symbol
-  \sa symbol()
-*/
-void QwtPlotMarker::setSymbol( const QwtSymbol *symbol )
-{
-    if ( symbol != d_data->symbol )
-    {
-        delete d_data->symbol;
-        d_data->symbol = symbol;
-
-        if ( symbol )
-            setLegendIconSize( symbol->boundingRect().size() );
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return the symbol
-  \sa setSymbol(), QwtSymbol
-*/
-const QwtSymbol *QwtPlotMarker::symbol() const
-{
-    return d_data->symbol;
-}
-
-/*!
-  \brief Set the label
-  \param label Label text
-  \sa label()
-*/
-void QwtPlotMarker::setLabel( const QwtText& label )
-{
-    if ( label != d_data->label )
-    {
-        d_data->label = label;
-        itemChanged();
-    }
-}
-
-/*!
-  \return the label
-  \sa setLabel()
-*/
-QwtText QwtPlotMarker::label() const
-{
-    return d_data->label;
-}
-
-/*!
-  \brief Set the alignment of the label
-
-  In case of QwtPlotMarker::HLine the alignment is relative to the
-  y position of the marker, but the horizontal flags correspond to the
-  canvas rectangle. In case of QwtPlotMarker::VLine the alignment is
-  relative to the x position of the marker, but the vertical flags
-  correspond to the canvas rectangle.
-
-  In all other styles the alignment is relative to the marker's position.
-
-  \param align Alignment. 
-  \sa labelAlignment(), labelOrientation()
-*/
-void QwtPlotMarker::setLabelAlignment( Qt::Alignment align )
-{
-    if ( align != d_data->labelAlignment )
-    {
-        d_data->labelAlignment = align;
-        itemChanged();
-    }
-}
-
-/*!
-  \return the label alignment
-  \sa setLabelAlignment(), setLabelOrientation()
-*/
-Qt::Alignment QwtPlotMarker::labelAlignment() const
-{
-    return d_data->labelAlignment;
-}
-
-/*!
-  \brief Set the orientation of the label
-
-  When orientation is Qt::Vertical the label is rotated by 90.0 degrees
-  ( from bottom to top ).
-
-  \param orientation Orientation of the label
-
-  \sa labelOrientation(), setLabelAlignment()
-*/
-void QwtPlotMarker::setLabelOrientation( Qt::Orientation orientation )
-{
-    if ( orientation != d_data->labelOrientation )
-    {
-        d_data->labelOrientation = orientation;
-        itemChanged();
-    }
-}
-
-/*!
-  \return the label orientation
-  \sa setLabelOrientation(), labelAlignment()
-*/
-Qt::Orientation QwtPlotMarker::labelOrientation() const
-{
-    return d_data->labelOrientation;
-}
-
-/*!
-  \brief Set the spacing
-
-  When the label is not centered on the marker position, the spacing
-  is the distance between the position and the label.
-
-  \param spacing Spacing
-  \sa spacing(), setLabelAlignment()
-*/
-void QwtPlotMarker::setSpacing( int spacing )
-{
-    if ( spacing < 0 )
-        spacing = 0;
-
-    if ( spacing == d_data->spacing )
-        return;
-
-    d_data->spacing = spacing;
-    itemChanged();
-}
-
-/*!
-  \return the spacing
-  \sa setSpacing()
-*/
-int QwtPlotMarker::spacing() const
-{
-    return d_data->spacing;
-}
-
-/*! 
-  Build and assign a line pen
-    
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-    
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-    
-  \sa pen(), brush()
- */ 
-void QwtPlotMarker::setLinePen( const QColor &color, qreal width, Qt::PenStyle style )
-{   
-    setLinePen( QPen( color, width, style ) );
-}
-
-/*!
-  Specify a pen for the line.
-
-  \param pen New pen
-  \sa linePen()
-*/
-void QwtPlotMarker::setLinePen( const QPen &pen )
-{
-    if ( pen != d_data->pen )
-    {
-        d_data->pen = pen;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return the line pen
-  \sa setLinePen()
-*/
-const QPen &QwtPlotMarker::linePen() const
-{
-    return d_data->pen;
-}
-
-QRectF QwtPlotMarker::boundingRect() const
-{
-    return QRectF( d_data->xValue, d_data->yValue, 0.0, 0.0 );
-}
-
-/*!
-   \return Icon representing the marker on the legend
-
-   \param index Index of the legend entry 
-                ( usually there is only one )
-   \param size Icon size
-
-   \sa setLegendIconSize(), legendData()
-*/
-QwtGraphic QwtPlotMarker::legendIcon( int index,
-    const QSizeF &size ) const
-{
-    Q_UNUSED( index );
-
-    if ( size.isEmpty() )
-        return QwtGraphic();
-
-    QwtGraphic icon;
-    icon.setDefaultSize( size );
-    icon.setRenderHint( QwtGraphic::RenderPensUnscaled, true );
-
-    QPainter painter( &icon );
-    painter.setRenderHint( QPainter::Antialiasing,
-        testRenderHint( QwtPlotItem::RenderAntialiased ) );
-
-    if ( d_data->style != QwtPlotMarker::NoLine )
-    {
-        painter.setPen( d_data->pen );
-
-        if ( d_data->style == QwtPlotMarker::HLine ||
-            d_data->style == QwtPlotMarker::Cross )
-        {
-            const double y = 0.5 * size.height();
-
-            QwtPainter::drawLine( &painter, 
-                0.0, y, size.width(), y );
-        }
-
-        if ( d_data->style == QwtPlotMarker::VLine ||
-            d_data->style == QwtPlotMarker::Cross )
-        {
-            const double x = 0.5 * size.width();
-
-            QwtPainter::drawLine( &painter, 
-                x, 0.0, x, size.height() );
-        }
-    }
-
-    if ( d_data->symbol )
-    {
-        const QRect r( 0.0, 0.0, size.width(), size.height() );
-        d_data->symbol->drawSymbol( &painter, r );
-    }
-
-    return icon;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_marker.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_marker.h
deleted file mode 100644
index b5d04a0ff9e539b8933688e822d4bb62857aa803..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_marker.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_MARKER_H
-#define QWT_PLOT_MARKER_H
-
-#include <qpen.h>
-#include <qfont.h>
-#include <qstring.h>
-#include <qbrush.h>
-#include "qwt_global.h"
-#include "qwt_plot_item.h"
-
-class QRectF;
-class QwtText;
-class QwtSymbol;
-
-/*!
-  \brief A class for drawing markers
-
-  A marker can be a horizontal line, a vertical line,
-  a symbol, a label or any combination of them, which can
-  be drawn around a center point inside a bounding rectangle.
-
-  The setSymbol() member assigns a symbol to the marker.
-  The symbol is drawn at the specified point.
-
-  With setLabel(), a label can be assigned to the marker.
-  The setLabelAlignment() member specifies where the label is
-  drawn. All the Align*-constants in Qt::AlignmentFlags (see Qt documentation)
-  are valid. The interpretation of the alignment depends on the marker's
-  line style. The alignment refers to the center point of
-  the marker, which means, for example, that the label would be printed
-  left above the center point if the alignment was set to 
-  Qt::AlignLeft | Qt::AlignTop.
-
-  \note QwtPlotTextLabel is intended to align a text label
-        according to the geometry of canvas 
-        ( unrelated to plot coordinates )
-*/
-
-class QWT_EXPORT QwtPlotMarker: public QwtPlotItem
-{
-public:
-
-    /*!
-        Line styles.
-        \sa setLineStyle(), lineStyle()
-    */
-    enum LineStyle
-    {
-        //! No line
-        NoLine,
-
-        //! A horizontal line
-        HLine,
-
-        //! A vertical line
-        VLine,
-
-        //! A crosshair
-        Cross
-    };
-
-    explicit QwtPlotMarker( const QString &title = QString::null );
-    explicit QwtPlotMarker( const QwtText &title );
-
-    virtual ~QwtPlotMarker();
-
-    virtual int rtti() const;
-
-    double xValue() const;
-    double yValue() const;
-    QPointF value() const;
-
-    void setXValue( double );
-    void setYValue( double );
-    void setValue( double, double );
-    void setValue( const QPointF & );
-
-    void setLineStyle( LineStyle st );
-    LineStyle lineStyle() const;
-
-    void setLinePen( const QColor &, qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setLinePen( const QPen &p );
-    const QPen &linePen() const;
-
-    void setSymbol( const QwtSymbol * );
-    const QwtSymbol *symbol() const;
-
-    void setLabel( const QwtText& );
-    QwtText label() const;
-
-    void setLabelAlignment( Qt::Alignment );
-    Qt::Alignment labelAlignment() const;
-
-    void setLabelOrientation( Qt::Orientation );
-    Qt::Orientation labelOrientation() const;
-
-    void setSpacing( int );
-    int spacing() const;
-
-    virtual void draw( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF & ) const;
-
-    virtual QRectF boundingRect() const;
-
-    virtual QwtGraphic legendIcon( int index, const QSizeF & ) const;
-
-protected:
-    virtual void drawLines( QPainter *, 
-        const QRectF &, const QPointF & ) const;
-
-    virtual void drawLabel( QPainter *, 
-        const QRectF &, const QPointF & ) const;
-
-private:
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_multi_barchart.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_multi_barchart.cpp
deleted file mode 100644
index 4041de4e17b1f6e20409a15fd547500d4e41a610..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_multi_barchart.cpp
+++ /dev/null
@@ -1,744 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_multi_barchart.h"
-#include "qwt_scale_map.h"
-#include "qwt_column_symbol.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-#include <qpalette.h>
-#include <qmap.h>
-
-inline static bool qwtIsIncreasing(
-    const QwtScaleMap &map, const QVector<double> &values )
-{
-    bool isInverting = map.isInverting();
-
-    for ( int i = 0; i < values.size(); i++ )
-    {
-        const double y = values[ i ];
-        if ( y != 0.0 )
-            return ( map.isInverting() != ( y > 0.0 ) );
-    }
-
-    return !isInverting;
-}
-
-class QwtPlotMultiBarChart::PrivateData
-{
-public:
-    PrivateData():
-        style( QwtPlotMultiBarChart::Grouped )
-    {
-    }
-
-    QwtPlotMultiBarChart::ChartStyle style;
-    QList<QwtText> barTitles;
-    QMap<int, QwtColumnSymbol *> symbolMap;
-};
-
-/*!
-  Constructor
-  \param title Title of the chart
-*/
-QwtPlotMultiBarChart::QwtPlotMultiBarChart( const QwtText &title ):
-    QwtPlotAbstractBarChart( title )
-{
-    init();
-}
-
-/*!
-  Constructor
-  \param title Title of the chart
-*/
-QwtPlotMultiBarChart::QwtPlotMultiBarChart( const QString &title ):
-    QwtPlotAbstractBarChart( QwtText( title ) )
-{
-    init();
-}
-
-//! Destructor
-QwtPlotMultiBarChart::~QwtPlotMultiBarChart()
-{
-    resetSymbolMap();
-    delete d_data;
-}
-
-void QwtPlotMultiBarChart::init()
-{
-    d_data = new PrivateData;
-    setData( new QwtSetSeriesData() );
-}
-
-//! \return QwtPlotItem::Rtti_PlotBarChart
-int QwtPlotMultiBarChart::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotMultiBarChart;
-}
-
-/*!
-  Initialize data with an array of samples.
-  \param samples Vector of points
-*/
-void QwtPlotMultiBarChart::setSamples(
-    const QVector<QwtSetSample> &samples )
-{
-    setData( new QwtSetSeriesData( samples ) );
-}
-
-/*!
-  Initialize data with an array of samples.
-  \param samples Vector of points
-*/
-void QwtPlotMultiBarChart::setSamples(
-    const QVector< QVector<double> > &samples )
-{
-    QVector<QwtSetSample> s;
-    for ( int i = 0; i < samples.size(); i++ )
-        s += QwtSetSample( i, samples[ i ] );
-
-    setData( new QwtSetSeriesData( s ) );
-}
-
-/*!
-  Assign a series of samples
-    
-  setSamples() is just a wrapper for setData() without any additional
-  value - beside that it is easier to find for the developer.
-    
-  \param data Data
-  \warning The item takes ownership of the data object, deleting
-           it when its not used anymore.
-*/  
-void QwtPlotMultiBarChart::setSamples( 
-    QwtSeriesData<QwtSetSample> *data )
-{       
-    setData( data );
-}       
-
-/*!
-  \brief Set the titles for the bars
-
-  The titles are used for the legend.
-
-  \param titles Bar titles
-
-  \sa barTitles(), legendData()
- */
-void QwtPlotMultiBarChart::setBarTitles( const QList<QwtText> &titles )
-{
-    d_data->barTitles = titles;
-    itemChanged();
-}
-
-/*! 
-  \return Bar titles
-  \sa setBarTitles(), legendData()
- */
-QList<QwtText> QwtPlotMultiBarChart::barTitles() const
-{
-    return d_data->barTitles;
-}
-
-/*!
-  \brief Add a symbol to the symbol map
-
-  Assign a default symbol for drawing the bar representing all values
-  with the same index in a set.
-
-  \param valueIndex Index of a value in a set
-  \param symbol Symbol used for drawing a bar
-
-  \sa symbol(), resetSymbolMap(), specialSymbol()
-*/
-void QwtPlotMultiBarChart::setSymbol( int valueIndex, QwtColumnSymbol *symbol )
-{
-    if ( valueIndex < 0 )
-        return;
-
-    QMap<int, QwtColumnSymbol *>::iterator it = 
-        d_data->symbolMap.find(valueIndex);
-    if ( it == d_data->symbolMap.end() )
-    {
-        if ( symbol != NULL )
-        {
-            d_data->symbolMap.insert( valueIndex, symbol );
-
-            legendChanged();
-            itemChanged();
-        }
-    }
-    else
-    {
-        if ( symbol != it.value() )
-        {
-            delete it.value();
-
-            if ( symbol == NULL )
-            {
-                d_data->symbolMap.remove( valueIndex );
-            }
-            else
-            {
-                it.value() = symbol;
-            }
-
-            legendChanged();
-            itemChanged();
-        }
-    }
-}
-
-/*!
-  Find a symbol in the symbol map
-
-  \param valueIndex Index of a value in a set
-  \return The symbol, that had been set by setSymbol() or NULL.
-
-  \sa setSymbol(), specialSymbol(), drawBar()
-*/
-const QwtColumnSymbol *QwtPlotMultiBarChart::symbol( int valueIndex ) const
-{
-    QMap<int, QwtColumnSymbol *>::const_iterator it =
-        d_data->symbolMap.find( valueIndex );
-
-    return ( it == d_data->symbolMap.end() ) ? NULL : it.value();
-}
-
-/*!
-  Find a symbol in the symbol map
-
-  \param valueIndex Index of a value in a set
-  \return The symbol, that had been set by setSymbol() or NULL.
-
-  \sa setSymbol(), specialSymbol(), drawBar()
-*/
-QwtColumnSymbol *QwtPlotMultiBarChart::symbol( int valueIndex ) 
-{
-    QMap<int, QwtColumnSymbol *>::iterator it =
-        d_data->symbolMap.find( valueIndex );
-
-    return ( it == d_data->symbolMap.end() ) ? NULL : it.value();
-}
-
-/*!
-  Remove all symbols from the symbol map
- */
-void QwtPlotMultiBarChart::resetSymbolMap()
-{
-    for ( QMap<int, QwtColumnSymbol *>::iterator it 
-        = d_data->symbolMap.begin(); it != d_data->symbolMap.end(); ++it )
-    {
-        delete it.value();
-    }
-
-    d_data->symbolMap.clear();
-}
-
-/*!
-  \brief Create a symbol for special values
-
-  Usually the symbols for displaying a bar are set by setSymbols() and
-  common for all sets. By overloading specialSymbol() it is possible to
-  create a temporary symbol() for displaying a special value.
-
-  The symbol has to be created by new each time specialSymbol() is
-  called. As soon as the symbol is painted this symbol gets deleted.
-
-  When no symbol ( NULL ) is returned, the value will be displayed
-  with the standard symbol that is used for all symbols with the same 
-  valueIndex.
-
-  \param sampleIndex Index of the sample
-  \param valueIndex Index of the value in the set
-
-  \return NULL, meaning that the value is not special
-    
- */
-QwtColumnSymbol *QwtPlotMultiBarChart::specialSymbol( 
-    int sampleIndex, int valueIndex ) const
-{
-    Q_UNUSED( sampleIndex );
-    Q_UNUSED( valueIndex );
-
-    return NULL;
-}
-
-/*!
-  Set the style of the chart
-
-  \param style Chart style
-  \sa style()
- */
-void QwtPlotMultiBarChart::setStyle( ChartStyle style )
-{
-    if ( style != d_data->style )
-    {
-        d_data->style = style;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Style of the chart
-  \sa setStyle()
- */
-QwtPlotMultiBarChart::ChartStyle QwtPlotMultiBarChart::style() const
-{
-    return d_data->style;
-}
-
-/*!
-  \return Bounding rectangle of all samples.
-  For an empty series the rectangle is invalid.
-*/
-QRectF QwtPlotMultiBarChart::boundingRect() const
-{
-    const size_t numSamples = dataSize();
-
-    if ( numSamples == 0 )
-        return QwtPlotSeriesItem::boundingRect();
-
-    const double baseLine = baseline();
-
-    QRectF rect;
-
-    if ( d_data->style != QwtPlotMultiBarChart::Stacked )
-    {
-        rect = QwtPlotSeriesItem::boundingRect();
-
-        if ( rect.height() >= 0 )
-        {
-            if ( rect.bottom() < baseLine )
-                rect.setBottom( baseLine );
-            if ( rect.top() > baseLine )
-                rect.setTop( baseLine );
-        }
-    }
-    else
-    {
-        double xMin, xMax, yMin, yMax;
-
-        xMin = xMax = 0.0;
-        yMin = yMax = baseLine;
-
-        const QwtSeriesData<QwtSetSample> *series = data();
-
-        for ( size_t i = 0; i < numSamples; i++ )
-        {
-            const QwtSetSample sample = series->sample( i );
-            if ( i == 0 )
-            {
-                xMin = xMax = sample.value;
-            }
-            else
-            {
-                xMin = qMin( xMin, sample.value );
-                xMax = qMax( xMax, sample.value );
-            }
-
-            const double y = baseLine + sample.added();
-
-            yMin = qMin( yMin, y );
-            yMax = qMax( yMax, y );
-        }
-        rect.setRect( xMin, yMin, xMax - xMin, yMax - yMin );
-    }
-
-    if ( orientation() == Qt::Horizontal )
-        rect.setRect( rect.y(), rect.x(), rect.height(), rect.width() );
-
-    return rect;
-}
-
-/*!
-  Draw an interval of the bar chart
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rectangle of the canvas
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted. If to < 0 the
-         curve will be painted to its last point.
-
-  \sa drawSymbols()
-*/
-void QwtPlotMultiBarChart::drawSeries( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    if ( to < 0 )
-        to = dataSize() - 1;
-
-    if ( from < 0 )
-        from = 0;
-
-    if ( from > to )
-        return;
-
-
-    const QRectF br = data()->boundingRect();
-    const QwtInterval interval( br.left(), br.right() );
-
-    painter->save();
-
-    for ( int i = from; i <= to; i++ )
-    {
-        drawSample( painter, xMap, yMap,
-            canvasRect, interval, i, sample( i ) );
-    }
-
-    painter->restore();
-}
-
-/*!
-  Draw a sample
-
-  \param painter Painter
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param boundingInterval Bounding interval of sample values
-  \param index Index of the sample to be painted
-  \param sample Sample value
-
-  \sa drawSeries()
-*/
-void QwtPlotMultiBarChart::drawSample( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, const QwtInterval &boundingInterval,
-    int index, const QwtSetSample& sample ) const
-{
-    if ( sample.set.size() <= 0 )
-        return;
-
-    double sampleW;
-
-    if ( orientation() == Qt::Horizontal )
-    {
-        sampleW = sampleWidth( yMap, canvasRect.height(),
-            boundingInterval.width(), sample.value );
-    }
-    else
-    {
-        sampleW = sampleWidth( xMap, canvasRect.width(),
-            boundingInterval.width(), sample.value );
-    }
-
-    if ( d_data->style == Stacked )
-    {
-        drawStackedBars( painter, xMap, yMap,
-            canvasRect, index, sampleW, sample );
-    }
-    else
-    {
-        drawGroupedBars( painter, xMap, yMap,
-            canvasRect, index, sampleW, sample );
-    }
-}
-
-/*!
-  Draw a grouped sample
-
-  \param painter Painter
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param index Index of the sample to be painted
-  \param sampleWidth Boundng width for all bars of the smaple
-  \param sample Sample 
-
-  \sa drawSeries(), sampleWidth()
-*/
-void QwtPlotMultiBarChart::drawGroupedBars( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int index, double sampleWidth,
-    const QwtSetSample& sample ) const
-{
-    Q_UNUSED( canvasRect );
-
-    const int numBars = sample.set.size();
-    if ( numBars == 0 )
-        return;
-
-    if ( orientation() == Qt::Vertical )
-    {
-        const double barWidth = sampleWidth / numBars;
-
-        const double y1 = yMap.transform( baseline() );
-        const double x0 = xMap.transform( sample.value ) - 0.5 * sampleWidth;
-
-        for ( int i = 0; i < numBars; i++ )
-        {
-            const double x1 = x0 + i * barWidth;
-            const double x2 = x1 + barWidth;
-
-            const double y2 = yMap.transform( sample.set[i] );
-
-            QwtColumnRect barRect;
-            barRect.direction = ( y1 < y2 ) ?
-                QwtColumnRect::TopToBottom : QwtColumnRect::BottomToTop;
-
-            barRect.hInterval = QwtInterval( x1, x2 ).normalized();
-            if ( i != 0 )
-                barRect.hInterval.setBorderFlags( QwtInterval::ExcludeMinimum );
-
-            barRect.vInterval = QwtInterval( y1, y2 ).normalized();
-
-            drawBar( painter, index, i, barRect );
-        }
-    }
-    else
-    {
-        const double barHeight = sampleWidth / numBars;
-
-        const double x1 = xMap.transform( baseline() );
-        const double y0 = yMap.transform( sample.value ) - 0.5 * sampleWidth;
-
-        for ( int i = 0; i < numBars; i++ )
-        {
-            double y1 = y0 + i * barHeight;
-            double y2 = y1 + barHeight;
-
-            double x2 = xMap.transform( sample.set[i] );
-
-            QwtColumnRect barRect;
-            barRect.direction = x1 < x2 ?
-                QwtColumnRect::LeftToRight : QwtColumnRect::RightToLeft;
-
-            barRect.hInterval = QwtInterval( x1, x2 ).normalized();
-
-            barRect.vInterval = QwtInterval( y1, y2 );
-            if ( i != 0 )
-                barRect.vInterval.setBorderFlags( QwtInterval::ExcludeMinimum );
-
-            drawBar( painter, index, i, barRect );
-        }
-    }
-}
-
-/*!
-  Draw a stacked sample
-
-  \param painter Painter
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param index Index of the sample to be painted
-  \param sampleWidth Width of the bars
-  \param sample Sample 
-
-  \sa drawSeries(), sampleWidth()
-*/
-void QwtPlotMultiBarChart::drawStackedBars( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int index, 
-    double sampleWidth, const QwtSetSample& sample ) const
-{
-    Q_UNUSED( canvasRect ); // clipping the bars ?
-
-    const int numBars = sample.set.size();
-    if ( numBars == 0 )
-        return;
-
-    QwtInterval::BorderFlag borderFlags = QwtInterval::IncludeBorders;
-
-    if ( orientation() == Qt::Vertical )
-    {
-        const double x1 = xMap.transform( sample.value ) - 0.5 * sampleWidth;
-        const double x2 = x1 + sampleWidth;
-
-        const bool increasing = qwtIsIncreasing( yMap, sample.set );
-
-        QwtColumnRect bar;
-        bar.direction = increasing ?
-            QwtColumnRect::TopToBottom : QwtColumnRect::BottomToTop;
-
-        bar.hInterval = QwtInterval( x1, x2 ).normalized();
-
-        double sum = baseline();
-
-        const int numBars = sample.set.size();
-        for ( int i = 0; i < numBars; i++ )
-        {
-            const double si = sample.set[ i ];
-            if ( si == 0.0 )
-                continue;
-
-            const double y1 = yMap.transform( sum );
-            const double y2 = yMap.transform( sum + si );
-
-            if ( ( y2 > y1 ) != increasing )
-            {
-                // stacked bars need to be in the same direction
-                continue;
-            }
-
-            bar.vInterval = QwtInterval( y1, y2 ).normalized();
-            bar.vInterval.setBorderFlags( borderFlags );
-
-            drawBar( painter, index, i, bar );
-
-            sum += si;
-
-            if ( increasing )
-                borderFlags = QwtInterval::ExcludeMinimum;
-            else
-                borderFlags = QwtInterval::ExcludeMaximum;
-        }
-    }
-    else
-    {
-        const double y1 = yMap.transform( sample.value ) - 0.5 * sampleWidth;
-        const double y2 = y1 + sampleWidth;
-
-        const bool increasing = qwtIsIncreasing( xMap, sample.set );
-
-        QwtColumnRect bar;
-        bar.direction = increasing ?
-            QwtColumnRect::LeftToRight : QwtColumnRect::RightToLeft;
-        bar.vInterval = QwtInterval( y1, y2 ).normalized();
-
-        double sum = baseline();
-
-        for ( int i = 0; i < sample.set.size(); i++ )
-        {
-            const double si = sample.set[ i ];
-            if ( si == 0.0 )
-                continue;
-
-            const double x1 = xMap.transform( sum );
-            const double x2 = xMap.transform( sum + si );
-
-            if ( ( x2 > x1 ) != increasing )
-            {
-                // stacked bars need to be in the same direction
-                continue;
-            }
-
-            bar.hInterval = QwtInterval( x1, x2 ).normalized();
-            bar.hInterval.setBorderFlags( borderFlags );
-
-            drawBar( painter, index, i, bar );
-
-            sum += si;
-
-            if ( increasing )
-                borderFlags = QwtInterval::ExcludeMinimum;
-            else
-                borderFlags = QwtInterval::ExcludeMaximum;
-        }
-    }
-}
-
-/*!
-  Draw a bar
-
-  \param painter Painter
-  \param sampleIndex Index of the sample - might be -1 when the
-                     bar is painted for the legend
-  \param valueIndex Index of a value in a set
-  \param rect Directed target rectangle for the bar
-
-  \sa drawSeries()
-*/
-void QwtPlotMultiBarChart::drawBar( QPainter *painter,
-    int sampleIndex, int valueIndex, const QwtColumnRect &rect ) const
-{
-    const QwtColumnSymbol *specialSym = NULL;
-    if ( sampleIndex >= 0 )
-        specialSym = specialSymbol( sampleIndex, valueIndex );
-
-    const QwtColumnSymbol *sym = specialSym;
-    if ( sym == NULL )
-        sym = symbol( valueIndex );
-
-    if ( sym )
-    {
-        sym->draw( painter, rect );
-    }
-    else
-    {
-        // we build a temporary default symbol
-        QwtColumnSymbol sym( QwtColumnSymbol::Box );
-        sym.setLineWidth( 1 );
-        sym.setFrameStyle( QwtColumnSymbol::Plain );
-        sym.draw( painter, rect );
-    }
-
-    delete specialSym;
-}
-
-/*!
-  \return Information to be displayed on the legend
-
-  The chart is represented by a list of entries - one for each bar title.
-  Each element contains a bar title and an icon showing its corresponding bar.
-
-  \sa barTitles(), legendIcon(), legendIconSize()
-*/
-QList<QwtLegendData> QwtPlotMultiBarChart::legendData() const
-{
-    QList<QwtLegendData> list;
-
-    for ( int i = 0; i < d_data->barTitles.size(); i++ )
-    {
-        QwtLegendData data;
-
-        QVariant titleValue;
-        qVariantSetValue( titleValue, d_data->barTitles[i] );
-        data.setValue( QwtLegendData::TitleRole, titleValue );
-
-        if ( !legendIconSize().isEmpty() )
-        {
-            QVariant iconValue;
-            qVariantSetValue( iconValue, 
-                legendIcon( i, legendIconSize() ) );
-
-            data.setValue( QwtLegendData::IconRole, iconValue );
-        }
-
-        list += data;
-    }
-
-    return list;
-}
-
-/*!
-  \return Icon for representing a bar on the legend
-
-  \param index Index of the bar
-  \param size Icon size
-  
-  \return An icon showing a bar
-  \sa drawBar(), legendData()
- */
-QwtGraphic QwtPlotMultiBarChart::legendIcon( int index,
-    const QSizeF &size ) const
-{
-    QwtColumnRect column;
-    column.hInterval = QwtInterval( 0.0, size.width() - 1.0 );
-    column.vInterval = QwtInterval( 0.0, size.height() - 1.0 );
-
-    QwtGraphic icon;
-    icon.setDefaultSize( size );
-    icon.setRenderHint( QwtGraphic::RenderPensUnscaled, true );
-
-    QPainter painter( &icon );
-    painter.setRenderHint( QPainter::Antialiasing,
-        testRenderHint( QwtPlotItem::RenderAntialiased ) );
-
-    drawBar( &painter, -1, index, column );
-
-    return icon;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_multi_barchart.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_multi_barchart.h
deleted file mode 100644
index dbdcb4ff5bb6d53b1501311d3cee68c2fcdfac62..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_multi_barchart.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_MULTI_BAR_CHART_H
-#define QWT_PLOT_MULTI_BAR_CHART_H
-
-#include "qwt_global.h"
-#include "qwt_plot_abstract_barchart.h"
-#include "qwt_series_data.h"
-
-class QwtColumnRect;
-class QwtColumnSymbol;
-
-/*!
-  \brief QwtPlotMultiBarChart displays a series of a samples that consist
-         each of a set of values. 
-
-  Each value is displayed as a bar, the bars of each set can be organized 
-  side by side or accumulated.
-
-  Each bar of a set is rendered by a QwtColumnSymbol, that is set by setSymbol().
-  The bars of different sets use the same symbols. Exceptions are possible
-  by overloading specialSymbol() or overloading drawBar().
-
-  Depending on its orientation() the bars are displayed horizontally 
-  or vertically. The bars cover the interval between the baseline() 
-  and the value.
-
-  In opposite to most other plot items, QwtPlotMultiBarChart returns more
-  than one entry for the legend - one for each symbol.
-   
-  \sa QwtPlotBarChart, QwtPlotHistogram
-      QwtPlotSeriesItem::orientation(), QwtPlotAbstractBarChart::baseline()
- */
-class QWT_EXPORT QwtPlotMultiBarChart: 
-    public QwtPlotAbstractBarChart, public QwtSeriesStore<QwtSetSample>
-{
-public:
-    /*!
-        \brief Chart styles.
-
-        The default setting is QwtPlotMultiBarChart::Grouped.
-        \sa setStyle(), style()
-    */
-    enum ChartStyle
-    {
-        //! The bars of a set are displayed side by side
-        Grouped,
-
-        /*!
-            The bars are displayed on top of each other accumulating
-            to a single bar. All values of a set need to have the same
-            sign.
-         */
-        Stacked
-    };
-
-    explicit QwtPlotMultiBarChart( const QString &title = QString::null );
-    explicit QwtPlotMultiBarChart( const QwtText &title );
-
-    virtual ~QwtPlotMultiBarChart();
-
-    virtual int rtti() const;
-
-    void setBarTitles( const QList<QwtText> & );
-    QList<QwtText> barTitles() const;
-
-    void setSamples( const QVector<QwtSetSample> & );
-    void setSamples( const QVector< QVector<double> > & );
-    void setSamples( QwtSeriesData<QwtSetSample> * );
-
-    void setStyle( ChartStyle style );
-    ChartStyle style() const;
-
-    void setSymbol( int barIndex, QwtColumnSymbol *symbol );
-    const QwtColumnSymbol *symbol( int barIndex ) const;
-
-    void resetSymbolMap();
-
-    virtual void drawSeries( QPainter *painter,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual QRectF boundingRect() const;
-
-    virtual QList<QwtLegendData> legendData() const;
-
-    virtual QwtGraphic legendIcon( int index, const QSizeF & ) const;
-
-protected:
-    QwtColumnSymbol *symbol( int barIndex );
-
-    virtual QwtColumnSymbol *specialSymbol( 
-        int sampleIndex, int valueIndex ) const;
-
-    virtual void drawSample( QPainter *painter,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, const QwtInterval &boundingInterval,
-        int index, const QwtSetSample& sample ) const;
-
-    virtual void drawBar( QPainter *, int sampleIndex,
-        int barIndex, const QwtColumnRect & ) const;
-
-    void drawStackedBars( QPainter *painter,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int index,
-        double sampleWidth, const QwtSetSample& sample ) const;
-
-    void drawGroupedBars( QPainter *painter,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int index,
-        double sampleWidth, const QwtSetSample& sample ) const;
-
-private:
-    void init();
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_panner.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_panner.cpp
deleted file mode 100644
index a1bb8d54364fa29696af3ace6ed42a470bb56225..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_panner.cpp
+++ /dev/null
@@ -1,275 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_panner.h"
-#include "qwt_scale_div.h"
-#include "qwt_plot.h"
-#include "qwt_painter.h"
-#include <qbitmap.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-
-static QBitmap qwtBorderMask( const QWidget *canvas, const QSize &size )
-{
-    const QRect r( 0, 0, size.width(), size.height() );
-
-    QPainterPath borderPath;
-
-    ( void )QMetaObject::invokeMethod( 
-        const_cast< QWidget *>( canvas ), "borderPath", Qt::DirectConnection,
-        Q_RETURN_ARG( QPainterPath, borderPath ), Q_ARG( QRect, r ) );
-
-    if ( borderPath.isEmpty() )
-    {
-        if ( canvas->contentsRect() == canvas->rect() )
-            return QBitmap();
-
-        QBitmap mask( size );
-        mask.fill( Qt::color0 );
-
-        QPainter painter( &mask );
-        painter.fillRect( canvas->contentsRect(), Qt::color1 );
-
-        return mask;
-    }
-
-    QImage image( size, QImage::Format_ARGB32_Premultiplied );
-    image.fill( Qt::color0 );
-
-    QPainter painter( &image );
-    painter.setClipPath( borderPath );
-    painter.fillRect( r, Qt::color1 );
-
-    // now erase the frame
-
-    painter.setCompositionMode( QPainter::CompositionMode_DestinationOut );
-
-    if ( canvas->testAttribute(Qt::WA_StyledBackground ) )
-    {
-        QStyleOptionFrame opt;
-        opt.initFrom(canvas);
-        opt.rect = r;
-        canvas->style()->drawPrimitive( QStyle::PE_Frame, &opt, &painter, canvas );
-    }
-    else
-    {
-        const QVariant borderRadius = canvas->property( "borderRadius" );
-        const QVariant frameWidth = canvas->property( "frameWidth" );
-
-        if ( borderRadius.type() == QVariant::Double 
-            && frameWidth.type() == QVariant::Int )
-        {
-            const double br = borderRadius.toDouble();
-            const int fw = frameWidth.toInt();
-        
-            if ( br > 0.0 && fw > 0 )
-            {
-                painter.setPen( QPen( Qt::color1, fw ) );
-                painter.setBrush( Qt::NoBrush );
-                painter.setRenderHint( QPainter::Antialiasing, true );
-
-                painter.drawPath( borderPath );
-            }
-        }
-    }
-
-    painter.end();
-
-    const QImage mask = image.createMaskFromColor(
-        QColor( Qt::color1 ).rgb(), Qt::MaskOutColor );
-
-    return QBitmap::fromImage( mask );
-}
-
-class QwtPlotPanner::PrivateData
-{
-public:
-    PrivateData()
-    {
-        for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-            isAxisEnabled[axis] = true;
-    }
-
-    bool isAxisEnabled[QwtPlot::axisCnt];
-};
-
-/*!
-  \brief A panner for the canvas of a QwtPlot
-
-  The panner is enabled for all axes
-
-  \param canvas Plot canvas to pan, also the parent object
-
-  \sa setAxisEnabled()
-*/
-QwtPlotPanner::QwtPlotPanner( QWidget *canvas ):
-    QwtPanner( canvas )
-{
-    d_data = new PrivateData();
-
-    connect( this, SIGNAL( panned( int, int ) ),
-        SLOT( moveCanvas( int, int ) ) );
-}
-
-//! Destructor
-QwtPlotPanner::~QwtPlotPanner()
-{
-    delete d_data;
-}
-
-/*!
-   \brief En/Disable an axis
-
-   Axes that are enabled will be synchronized to the
-   result of panning. All other axes will remain unchanged.
-
-   \param axis Axis, see QwtPlot::Axis
-   \param on On/Off
-
-   \sa isAxisEnabled(), moveCanvas()
-*/
-void QwtPlotPanner::setAxisEnabled( int axis, bool on )
-{
-    if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        d_data->isAxisEnabled[axis] = on;
-}
-
-/*!
-   Test if an axis is enabled
-
-   \param axis Axis, see QwtPlot::Axis
-   \return True, if the axis is enabled
-
-   \sa setAxisEnabled(), moveCanvas()
-*/
-bool QwtPlotPanner::isAxisEnabled( int axis ) const
-{
-    if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        return d_data->isAxisEnabled[axis];
-
-    return true;
-}
-
-//! Return observed plot canvas
-QWidget *QwtPlotPanner::canvas()
-{
-    return parentWidget();
-}
-
-//! Return Observed plot canvas
-const QWidget *QwtPlotPanner::canvas() const
-{
-    return parentWidget();
-}
-
-//! Return plot widget, containing the observed plot canvas
-QwtPlot *QwtPlotPanner::plot()
-{
-    QWidget *w = canvas();
-    if ( w )
-        w = w->parentWidget();
-
-    return qobject_cast<QwtPlot *>( w );
-}
-
-//! Return plot widget, containing the observed plot canvas
-const QwtPlot *QwtPlotPanner::plot() const
-{
-    const QWidget *w = canvas();
-    if ( w )
-        w = w->parentWidget();
-
-    return qobject_cast<const QwtPlot *>( w );
-}
-
-/*!
-   Adjust the enabled axes according to dx/dy
-
-   \param dx Pixel offset in x direction
-   \param dy Pixel offset in y direction
-
-   \sa QwtPanner::panned()
-*/
-void QwtPlotPanner::moveCanvas( int dx, int dy )
-{
-    if ( dx == 0 && dy == 0 )
-        return;
-
-    QwtPlot *plot = this->plot();
-    if ( plot == NULL )
-        return;
-
-    const bool doAutoReplot = plot->autoReplot();
-    plot->setAutoReplot( false );
-
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-    {
-        if ( !d_data->isAxisEnabled[axis] )
-            continue;
-
-        const QwtScaleMap map = plot->canvasMap( axis );
-
-        const double p1 = map.transform( plot->axisScaleDiv( axis ).lowerBound() );
-        const double p2 = map.transform( plot->axisScaleDiv( axis ).upperBound() );
-
-        double d1, d2;
-        if ( axis == QwtPlot::xBottom || axis == QwtPlot::xTop )
-        {
-            d1 = map.invTransform( p1 - dx );
-            d2 = map.invTransform( p2 - dx );
-        }
-        else
-        {
-            d1 = map.invTransform( p1 - dy );
-            d2 = map.invTransform( p2 - dy );
-        }
-
-        plot->setAxisScale( axis, d1, d2 );
-    }
-
-    plot->setAutoReplot( doAutoReplot );
-    plot->replot();
-}
-
-/*!
-   Calculate a mask from the border path of the canvas
-
-   \return Mask as bitmap
-   \sa QwtPlotCanvas::borderPath()
-*/
-QBitmap QwtPlotPanner::contentsMask() const
-{
-    if ( canvas() )
-        return qwtBorderMask( canvas(), size() );
-
-    return QwtPanner::contentsMask();
-}
-
-/*!
-   \return Pixmap with the content of the canvas
- */
-QPixmap QwtPlotPanner::grab() const
-{   
-    const QWidget *cv = canvas();
-    if ( cv && cv->inherits( "QGLWidget" ) )
-    {
-        // we can't grab from a QGLWidget
-
-        QPixmap pm( cv->size() );
-        QwtPainter::fillPixmap( cv, pm );
-
-        QPainter painter( &pm );
-        const_cast<QwtPlot *>( plot() )->drawCanvas( &painter );
-
-        return pm;
-    }
-
-    return QwtPanner::grab();
-}   
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_panner.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_panner.h
deleted file mode 100644
index 5a0c7629112c61a34b2ff138eb3978010f8ef3d9..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_panner.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_PANNER_H
-#define QWT_PLOT_PANNER_H 1
-
-#include "qwt_global.h"
-#include "qwt_panner.h"
-
-class QwtPlot;
-
-/*!
-  \brief QwtPlotPanner provides panning of a plot canvas
-
-  QwtPlotPanner is a panner for a plot canvas, that
-  adjusts the scales of the axes after dropping
-  the canvas on its new position.
-
-  Together with QwtPlotZoomer and QwtPlotMagnifier powerful ways
-  of navigating on a QwtPlot widget can be implemented easily.
-
-  \note The axes are not updated, while dragging the canvas
-  \sa QwtPlotZoomer, QwtPlotMagnifier
-*/
-class QWT_EXPORT QwtPlotPanner: public QwtPanner
-{
-    Q_OBJECT
-
-public:
-    explicit QwtPlotPanner( QWidget * );
-    virtual ~QwtPlotPanner();
-
-    QWidget *canvas();
-    const QWidget *canvas() const;
-
-    QwtPlot *plot();
-    const QwtPlot *plot() const;
-
-    void setAxisEnabled( int axis, bool on );
-    bool isAxisEnabled( int axis ) const;
-
-protected Q_SLOTS:
-    virtual void moveCanvas( int dx, int dy );
-
-protected:
-    virtual QBitmap contentsMask() const;
-    virtual QPixmap grab() const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_picker.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_picker.cpp
deleted file mode 100644
index dcb1c5f68dcadf64e9c2be7c86619f75ae7d1fda..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_picker.cpp
+++ /dev/null
@@ -1,378 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_picker.h"
-#include "qwt_plot.h"
-#include "qwt_scale_div.h"
-#include "qwt_painter.h"
-#include "qwt_scale_map.h"
-#include "qwt_picker_machine.h"
-
-/*!
-  \brief Create a plot picker
-
-  The picker is set to those x- and y-axis of the plot
-  that are enabled. If both or no x-axis are enabled, the picker
-  is set to QwtPlot::xBottom. If both or no y-axis are
-  enabled, it is set to QwtPlot::yLeft.
-
-  \param canvas Plot canvas to observe, also the parent object
-
-  \sa QwtPlot::autoReplot(), QwtPlot::replot(), scaleRect()
-*/
-
-QwtPlotPicker::QwtPlotPicker( QWidget *canvas ):
-    QwtPicker( canvas ),
-    d_xAxis( -1 ),
-    d_yAxis( -1 )
-{
-    if ( !canvas )
-        return;
-
-    // attach axes
-
-    int xAxis = QwtPlot::xBottom;
-
-    const QwtPlot *plot = QwtPlotPicker::plot();
-    if ( !plot->axisEnabled( QwtPlot::xBottom ) &&
-        plot->axisEnabled( QwtPlot::xTop ) )
-    {
-        xAxis = QwtPlot::xTop;
-    }
-
-    int yAxis = QwtPlot::yLeft;
-    if ( !plot->axisEnabled( QwtPlot::yLeft ) &&
-        plot->axisEnabled( QwtPlot::yRight ) )
-    {
-        yAxis = QwtPlot::yRight;
-    }
-
-    setAxis( xAxis, yAxis );
-}
-
-/*!
-  Create a plot picker
-
-  \param xAxis Set the x axis of the picker
-  \param yAxis Set the y axis of the picker
-  \param canvas Plot canvas to observe, also the parent object
-
-  \sa QwtPlot::autoReplot(), QwtPlot::replot(), scaleRect()
-*/
-QwtPlotPicker::QwtPlotPicker( int xAxis, int yAxis, QWidget *canvas ):
-    QwtPicker( canvas ),
-    d_xAxis( xAxis ),
-    d_yAxis( yAxis )
-{
-}
-
-/*!
-  Create a plot picker
-
-  \param xAxis X axis of the picker
-  \param yAxis Y axis of the picker
-  \param rubberBand Rubber band style
-  \param trackerMode Tracker mode
-  \param canvas Plot canvas to observe, also the parent object
-
-  \sa QwtPicker, QwtPicker::setSelectionFlags(), QwtPicker::setRubberBand(),
-      QwtPicker::setTrackerMode
-
-  \sa QwtPlot::autoReplot(), QwtPlot::replot(), scaleRect()
-*/
-QwtPlotPicker::QwtPlotPicker( int xAxis, int yAxis,
-        RubberBand rubberBand, DisplayMode trackerMode,
-        QWidget *canvas ):
-    QwtPicker( rubberBand, trackerMode, canvas ),
-    d_xAxis( xAxis ),
-    d_yAxis( yAxis )
-{
-}
-
-//! Destructor
-QwtPlotPicker::~QwtPlotPicker()
-{
-}
-
-//! \return Observed plot canvas
-QWidget *QwtPlotPicker::canvas()
-{
-    return parentWidget();
-}
-
-//! \return Observed plot canvas
-const QWidget *QwtPlotPicker::canvas() const
-{
-    return parentWidget();
-}
-
-//! \return Plot widget, containing the observed plot canvas
-QwtPlot *QwtPlotPicker::plot()
-{
-    QWidget *w = canvas();
-    if ( w )
-        w = w->parentWidget();
-
-    return qobject_cast<QwtPlot *>( w );
-}
-
-//! \return Plot widget, containing the observed plot canvas
-const QwtPlot *QwtPlotPicker::plot() const
-{
-    const QWidget *w = canvas();
-    if ( w )
-        w = w->parentWidget();
-
-    return qobject_cast<const QwtPlot *>( w );
-}
-
-/*!
-  \return Normalized bounding rectangle of the axes
-  \sa QwtPlot::autoReplot(), QwtPlot::replot().
-*/
-QRectF QwtPlotPicker::scaleRect() const
-{
-    QRectF rect;
-
-    if ( plot() )
-    {
-        const QwtScaleDiv &xs = plot()->axisScaleDiv( xAxis() );
-        const QwtScaleDiv &ys = plot()->axisScaleDiv( yAxis() );
-
-        rect = QRectF( xs.lowerBound(), ys.lowerBound(),
-            xs.range(), ys.range() );
-        rect = rect.normalized();
-    }
-
-    return rect;
-}
-
-/*!
-  Set the x and y axes of the picker
-
-  \param xAxis X axis
-  \param yAxis Y axis
-*/
-void QwtPlotPicker::setAxis( int xAxis, int yAxis )
-{
-    const QwtPlot *plt = plot();
-    if ( !plt )
-        return;
-
-    if ( xAxis != d_xAxis || yAxis != d_yAxis )
-    {
-        d_xAxis = xAxis;
-        d_yAxis = yAxis;
-    }
-}
-
-//! Return x axis
-int QwtPlotPicker::xAxis() const
-{
-    return d_xAxis;
-}
-
-//! Return y axis
-int QwtPlotPicker::yAxis() const
-{
-    return d_yAxis;
-}
-
-/*!
-  Translate a pixel position into a position string
-
-  \param pos Position in pixel coordinates
-  \return Position string
-*/
-QwtText QwtPlotPicker::trackerText( const QPoint &pos ) const
-{
-    return trackerTextF( invTransform( pos ) );
-}
-
-/*!
-  \brief Translate a position into a position string
-
-  In case of HLineRubberBand the label is the value of the
-  y position, in case of VLineRubberBand the value of the x position.
-  Otherwise the label contains x and y position separated by a ',' .
-
-  The format for the double to string conversion is "%.4f".
-
-  \param pos Position
-  \return Position string
-*/
-QwtText QwtPlotPicker::trackerTextF( const QPointF &pos ) const
-{
-    QString text;
-
-    switch ( rubberBand() )
-    {
-        case HLineRubberBand:
-            text.sprintf( "%.4f", pos.y() );
-            break;
-        case VLineRubberBand:
-            text.sprintf( "%.4f", pos.x() );
-            break;
-        default:
-            text.sprintf( "%.4f, %.4f", pos.x(), pos.y() );
-    }
-    return QwtText( text );
-}
-
-/*!
-  Append a point to the selection and update rubber band and tracker.
-
-  \param pos Additional point
-  \sa isActive, begin(), end(), move(), appended()
-
-  \note The appended(const QPoint &), appended(const QDoublePoint &)
-        signals are emitted.
-*/
-void QwtPlotPicker::append( const QPoint &pos )
-{
-    QwtPicker::append( pos );
-    Q_EMIT appended( invTransform( pos ) );
-}
-
-/*!
-  Move the last point of the selection
-
-  \param pos New position
-  \sa isActive, begin(), end(), append()
-
-  \note The moved(const QPoint &), moved(const QDoublePoint &)
-        signals are emitted.
-*/
-void QwtPlotPicker::move( const QPoint &pos )
-{
-    QwtPicker::move( pos );
-    Q_EMIT moved( invTransform( pos ) );
-}
-
-/*!
-  Close a selection setting the state to inactive.
-
-  \param ok If true, complete the selection and emit selected signals
-            otherwise discard the selection.
-  \return True if the selection has been accepted, false otherwise
-*/
-
-bool QwtPlotPicker::end( bool ok )
-{
-    ok = QwtPicker::end( ok );
-    if ( !ok )
-        return false;
-
-    QwtPlot *plot = QwtPlotPicker::plot();
-    if ( !plot )
-        return false;
-
-    const QPolygon points = selection();
-    if ( points.count() == 0 )
-        return false;
-
-    QwtPickerMachine::SelectionType selectionType =
-        QwtPickerMachine::NoSelection;
-
-    if ( stateMachine() )
-        selectionType = stateMachine()->selectionType();
-
-    switch ( selectionType )
-    {
-        case QwtPickerMachine::PointSelection:
-        {
-            const QPointF pos = invTransform( points.first() );
-            Q_EMIT selected( pos );
-            break;
-        }
-        case QwtPickerMachine::RectSelection:
-        {
-            if ( points.count() >= 2 )
-            {
-                const QPoint p1 = points.first();
-                const QPoint p2 = points.last();
-
-                const QRect rect = QRect( p1, p2 ).normalized();
-                Q_EMIT selected( invTransform( rect ) );
-            }
-            break;
-        }
-        case QwtPickerMachine::PolygonSelection:
-        {
-            QVector<QPointF> dpa( points.count() );
-            for ( int i = 0; i < points.count(); i++ )
-                dpa[i] = invTransform( points[i] );
-
-            Q_EMIT selected( dpa );
-        }
-        default:
-            break;
-    }
-
-    return true;
-}
-
-/*!
-    Translate a rectangle from pixel into plot coordinates
-
-    \return Rectangle in plot coordinates
-    \sa transform()
-*/
-QRectF QwtPlotPicker::invTransform( const QRect &rect ) const
-{
-    const QwtScaleMap xMap = plot()->canvasMap( d_xAxis );
-    const QwtScaleMap yMap = plot()->canvasMap( d_yAxis );
-
-    return QwtScaleMap::invTransform( xMap, yMap, rect );
-}
-
-/*!
-    Translate a rectangle from plot into pixel coordinates
-    \return Rectangle in pixel coordinates
-    \sa invTransform()
-*/
-QRect QwtPlotPicker::transform( const QRectF &rect ) const
-{
-    const QwtScaleMap xMap = plot()->canvasMap( d_xAxis );
-    const QwtScaleMap yMap = plot()->canvasMap( d_yAxis );
-
-    return QwtScaleMap::transform( xMap, yMap, rect ).toRect();
-}
-
-/*!
-    Translate a point from pixel into plot coordinates
-    \return Point in plot coordinates
-    \sa transform()
-*/
-QPointF QwtPlotPicker::invTransform( const QPoint &pos ) const
-{
-    QwtScaleMap xMap = plot()->canvasMap( d_xAxis );
-    QwtScaleMap yMap = plot()->canvasMap( d_yAxis );
-
-    return QPointF(
-        xMap.invTransform( pos.x() ),
-        yMap.invTransform( pos.y() )
-    );
-}
-
-/*!
-    Translate a point from plot into pixel coordinates
-    \return Point in pixel coordinates
-    \sa invTransform()
-*/
-QPoint QwtPlotPicker::transform( const QPointF &pos ) const
-{
-    QwtScaleMap xMap = plot()->canvasMap( d_xAxis );
-    QwtScaleMap yMap = plot()->canvasMap( d_yAxis );
-
-    const QPointF p( xMap.transform( pos.x() ),
-        yMap.transform( pos.y() ) );
-
-    return p.toPoint();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_picker.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_picker.h
deleted file mode 100644
index 7d21523700a9494fe90b2517943466a0ce8470e3..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_picker.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_PICKER_H
-#define QWT_PLOT_PICKER_H
-
-#include "qwt_global.h"
-#include "qwt_picker.h"
-#include <qvector.h>
-
-class QwtPlot;
-
-/*!
-  \brief QwtPlotPicker provides selections on a plot canvas
-
-  QwtPlotPicker is a QwtPicker tailored for selections on
-  a plot canvas. It is set to a x-Axis and y-Axis and
-  translates all pixel coordinates into this coordinate system.
-*/
-
-class QWT_EXPORT QwtPlotPicker: public QwtPicker
-{
-    Q_OBJECT
-
-public:
-    explicit QwtPlotPicker( QWidget *canvas );
-    virtual ~QwtPlotPicker();
-
-    explicit QwtPlotPicker( int xAxis, int yAxis, QWidget * );
-
-    explicit QwtPlotPicker( int xAxis, int yAxis,
-        RubberBand rubberBand, DisplayMode trackerMode, QWidget * );
-
-    virtual void setAxis( int xAxis, int yAxis );
-
-    int xAxis() const;
-    int yAxis() const;
-
-    QwtPlot *plot();
-    const QwtPlot *plot() const;
-
-    QWidget *canvas();
-    const QWidget *canvas() const;
-
-Q_SIGNALS:
-
-    /*!
-      A signal emitted in case of QwtPickerMachine::PointSelection.
-      \param pos Selected point
-    */
-    void selected( const QPointF &pos );
-
-    /*!
-      A signal emitted in case of QwtPickerMachine::RectSelection.
-      \param rect Selected rectangle
-    */
-    void selected( const QRectF &rect );
-
-    /*!
-      A signal emitting the selected points,
-      at the end of a selection.
-
-      \param pa Selected points
-    */
-    void selected( const QVector<QPointF> &pa );
-
-    /*!
-      A signal emitted when a point has been appended to the selection
-
-      \param pos Position of the appended point.
-      \sa append(). moved()
-    */
-    void appended( const QPointF &pos );
-
-    /*!
-      A signal emitted whenever the last appended point of the
-      selection has been moved.
-
-      \param pos Position of the moved last point of the selection.
-      \sa move(), appended()
-    */
-    void moved( const QPointF &pos );
-
-protected:
-    QRectF scaleRect() const;
-
-    QRectF invTransform( const QRect & ) const;
-    QRect transform( const QRectF & ) const;
-
-    QPointF invTransform( const QPoint & ) const;
-    QPoint transform( const QPointF & ) const;
-
-    virtual QwtText trackerText( const QPoint & ) const;
-    virtual QwtText trackerTextF( const QPointF & ) const;
-
-    virtual void move( const QPoint & );
-    virtual void append( const QPoint & );
-    virtual bool end( bool ok = true );
-
-private:
-    int d_xAxis;
-    int d_yAxis;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rasteritem.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rasteritem.cpp
deleted file mode 100644
index 3b8c0a4903e8e7a476ccbbbc38c96c81d2e16bf0..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rasteritem.cpp
+++ /dev/null
@@ -1,961 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_rasteritem.h"
-#include "qwt_scale_map.h"
-#include "qwt_painter.h"
-#include <qapplication.h>
-#include <qdesktopwidget.h>
-#include <qpainter.h>
-#include <qpaintengine.h>
-#include <qmath.h>
-#if QT_VERSION >= 0x040400
-#include <qthread.h>
-#include <qfuture.h>
-#include <qtconcurrentrun.h>
-#endif
-#include <float.h>
-
-class QwtPlotRasterItem::PrivateData
-{
-public:
-    PrivateData():
-        alpha( -1 ),
-        paintAttributes( QwtPlotRasterItem::PaintInDeviceResolution )
-    {
-        cache.policy = QwtPlotRasterItem::NoCache;
-    }
-
-    int alpha;
-
-    QwtPlotRasterItem::PaintAttributes paintAttributes;
-
-    struct ImageCache
-    {
-        QwtPlotRasterItem::CachePolicy policy;
-        QRectF area;
-        QSizeF size;
-        QImage image;
-    } cache;
-};
-
-
-static QRectF qwtAlignRect(const QRectF &rect)
-{
-    QRectF r;
-    r.setLeft( qRound( rect.left() ) );
-    r.setRight( qRound( rect.right() ) );
-    r.setTop( qRound( rect.top() ) );
-    r.setBottom( qRound( rect.bottom() ) );
-
-    return r;
-}
-
-static QRectF qwtStripRect(const QRectF &rect, const QRectF &area,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtInterval &xInterval, const QwtInterval &yInterval)
-{
-    QRectF r = rect;
-    if ( xInterval.borderFlags() & QwtInterval::ExcludeMinimum )
-    {
-        if ( area.left() <= xInterval.minValue() )
-        {
-            if ( xMap.isInverting() )
-                r.adjust(0, 0, -1, 0);
-            else
-                r.adjust(1, 0, 0, 0);
-        }
-    }
-
-    if ( xInterval.borderFlags() & QwtInterval::ExcludeMaximum )
-    {
-        if ( area.right() >= xInterval.maxValue() )
-        {
-            if ( xMap.isInverting() )
-                r.adjust(1, 0, 0, 0);
-            else
-                r.adjust(0, 0, -1, 0);
-        }
-    }
-
-    if ( yInterval.borderFlags() & QwtInterval::ExcludeMinimum )
-    {
-        if ( area.top() <= yInterval.minValue() )
-        {
-            if ( yMap.isInverting() )
-                r.adjust(0, 0, 0, -1);
-            else
-                r.adjust(0, 1, 0, 0);
-        }
-    }
-
-    if ( yInterval.borderFlags() & QwtInterval::ExcludeMaximum )
-    {
-        if ( area.bottom() >= yInterval.maxValue() )
-        {
-            if ( yMap.isInverting() )
-                r.adjust(0, 1, 0, 0);
-            else
-                r.adjust(0, 0, 0, -1);
-        }
-    }
-
-    return r;
-}
-
-static QImage qwtExpandImage(const QImage &image,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &area, const QRectF &area2, const QRectF &paintRect,
-    const QwtInterval &xInterval, const QwtInterval &yInterval )
-{
-    const QRectF strippedRect = qwtStripRect(paintRect, area2,
-        xMap, yMap, xInterval, yInterval);
-    const QSize sz = strippedRect.toRect().size();
-
-    const int w = image.width();
-    const int h = image.height();
-
-    const QRectF r = QwtScaleMap::transform(xMap, yMap, area).normalized();
-    const double pw = ( r.width() - 1) / w;
-    const double ph = ( r.height() - 1) / h;
-
-    double px0, py0;
-    if ( !xMap.isInverting() )
-    {
-        px0 = xMap.transform( area2.left() );
-        px0 = qRound( px0 );
-        px0 = px0 - xMap.transform( area.left() );
-    }
-    else
-    {
-        px0 = xMap.transform( area2.right() );
-        px0 = qRound( px0 );
-        px0 -= xMap.transform( area.right() );
-
-        px0 -= 1.0;
-    }
-    px0 += strippedRect.left() - paintRect.left();
-
-    if ( !yMap.isInverting() )
-    {
-        py0 = yMap.transform( area2.top() );
-        py0 = qRound( py0 );
-        py0 -= yMap.transform( area.top() );
-    }
-    else
-    {
-        py0 = yMap.transform( area2.bottom() );
-        py0 = qRound( py0 );
-        py0 -= yMap.transform( area.bottom() );
-
-        py0 -= 1.0;
-    }
-    py0 += strippedRect.top() - paintRect.top();
-
-    QImage expanded(sz, image.format());
-
-    switch( image.depth() )
-    {
-        case 32:
-        {
-            for ( int y1 = 0; y1 < h; y1++ )
-            {
-                int yy1;
-                if ( y1 == 0 )
-                {
-                    yy1 = 0;
-                }
-                else
-                {
-                    yy1 = qRound( y1 * ph - py0 );
-                    if ( yy1 < 0 )
-                        yy1 = 0;
-                }
-
-                int yy2;
-                if ( y1 == h - 1 )
-                {
-                    yy2 = sz.height();
-                }
-                else
-                {
-                    yy2 = qRound( ( y1 + 1 ) * ph - py0 );
-                    if ( yy2 > sz.height() )
-                        yy2 = sz.height();
-                }
-
-                const quint32 *line1 = 
-                    reinterpret_cast<const quint32 *>( image.scanLine( y1 ) );
-
-                for ( int x1 = 0; x1 < w; x1++ )
-                {
-                    int xx1;
-                    if ( x1 == 0 )
-                    {
-                        xx1 = 0;
-                    }
-                    else
-                    {
-                        xx1 = qRound( x1 * pw - px0 );
-                        if ( xx1 < 0 )
-                            xx1 = 0;
-                    }
-
-                    int xx2;
-                    if ( x1 == w - 1 )
-                    {
-                        xx2 = sz.width();
-                    }
-                    else
-                    {
-                        xx2 = qRound( ( x1 + 1 ) * pw - px0 );
-                        if ( xx2 > sz.width() )
-                            xx2 = sz.width();
-                    }
-
-                    const quint32 rgb( line1[x1] );
-                    for ( int y2 = yy1; y2 < yy2; y2++ )
-                    {
-                        quint32 *line2 = reinterpret_cast<quint32 *>( 
-                            expanded.scanLine( y2 ) );
-
-                        for ( int x2 = xx1; x2 < xx2; x2++ ) 
-                            line2[x2] = rgb;
-                    }       
-                }   
-            }   
-            break;
-        }
-        case 8:
-        {
-            for ( int y1 = 0; y1 < h; y1++ )
-            {
-                int yy1;
-                if ( y1 == 0 )
-                {
-                    yy1 = 0;
-                }   
-                else
-                {
-                    yy1 = qRound( y1 * ph - py0 );
-                    if ( yy1 < 0 )
-                        yy1 = 0; 
-                }       
-                
-                int yy2;
-                if ( y1 == h - 1 )
-                {
-                    yy2 = sz.height();
-                }   
-                else
-                {
-                    yy2 = qRound( ( y1 + 1 ) * ph - py0 );
-                    if ( yy2 > sz.height() )
-                        yy2 = sz.height();
-                }
-    
-                const uchar *line1 = image.scanLine( y1 );
-
-                for ( int x1 = 0; x1 < w; x1++ )
-                {
-                    int xx1;
-                    if ( x1 == 0 )
-                    {
-                        xx1 = 0;
-                    }
-                    else
-                    {
-                        xx1 = qRound( x1 * pw - px0 );
-                        if ( xx1 < 0 )
-                            xx1 = 0;
-                    }
-
-                    int xx2;
-                    if ( x1 == w - 1 )
-                    {
-                        xx2 = sz.width();
-                    }
-                    else
-                    {
-                        xx2 = qRound( ( x1 + 1 ) * pw - px0 );
-                        if ( xx2 > sz.width() )
-                            xx2 = sz.width();
-                    }
-
-                    for ( int y2 = yy1; y2 < yy2; y2++ )
-                    {
-                        uchar *line2 = expanded.scanLine( y2 );
-                        memset( line2 + xx1, line1[x1], xx2 - xx1 );
-                    }       
-                }   
-            }
-            break;
-        }
-        default:
-            expanded = image;
-    }
-    
-    return expanded;
-}   
-
-static QRectF qwtExpandToPixels(const QRectF &rect, const QRectF &pixelRect)
-{
-    const double pw = pixelRect.width();
-    const double ph = pixelRect.height();
-
-    const double dx1 = pixelRect.left() - rect.left();
-    const double dx2 = pixelRect.right() - rect.right();
-    const double dy1 = pixelRect.top() - rect.top();
-    const double dy2 = pixelRect.bottom() - rect.bottom();
-
-    QRectF r;
-    r.setLeft( pixelRect.left() - qCeil( dx1 / pw ) * pw );
-    r.setTop( pixelRect.top() - qCeil( dy1 / ph ) * ph );
-    r.setRight( pixelRect.right() - qFloor( dx2 / pw ) * pw );
-    r.setBottom( pixelRect.bottom() - qFloor( dy2 / ph ) * ph );
-
-    return r;
-}
-
-static void qwtTransformMaps( const QTransform &tr,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    QwtScaleMap &xxMap, QwtScaleMap &yyMap )
-{
-    const QPointF p1 = tr.map( QPointF( xMap.p1(), yMap.p1() ) );
-    const QPointF p2 = tr.map( QPointF( xMap.p2(), yMap.p2() ) );
-
-    xxMap = xMap;
-    xxMap.setPaintInterval( p1.x(), p2.x() );
-
-    yyMap = yMap;
-    yyMap.setPaintInterval( p1.y(), p2.y() );
-}
-
-static void qwtAdjustMaps( QwtScaleMap &xMap, QwtScaleMap &yMap,
-    const QRectF &area, const QRectF &paintRect)
-{
-    double sx1 = area.left();
-    double sx2 = area.right();
-    if ( xMap.isInverting() )
-        qSwap(sx1, sx2);
-
-    double sy1 = area.top();
-    double sy2 = area.bottom();
-
-    if ( yMap.isInverting() )
-        qSwap(sy1, sy2);
-
-    xMap.setPaintInterval(paintRect.left(), paintRect.right());
-    xMap.setScaleInterval(sx1, sx2);
-
-    yMap.setPaintInterval(paintRect.top(), paintRect.bottom());
-    yMap.setScaleInterval(sy1, sy2);
-}
-
-static bool qwtUseCache( QwtPlotRasterItem::CachePolicy policy,
-    const QPainter *painter )
-{
-    bool doCache = false;
-
-    if ( policy == QwtPlotRasterItem::PaintCache )
-    {
-        // Caching doesn't make sense, when the item is
-        // not painted to screen
-
-        switch ( painter->paintEngine()->type() )
-        {
-            case QPaintEngine::SVG:
-            case QPaintEngine::Pdf:
-            case QPaintEngine::PostScript:
-            case QPaintEngine::MacPrinter:
-            case QPaintEngine::Picture:
-                break;
-            default:;
-                doCache = true;
-        }
-    }
-
-    return doCache;
-}
-
-static void qwtToRgba( const QImage* from, QImage* to,  
-    const QRect& tile, int alpha )
-{
-    const QRgb mask1 = qRgba( 0, 0, 0, alpha );
-    const QRgb mask2 = qRgba( 255, 255, 255, 0 );
-    const QRgb mask3 = qRgba( 0, 0, 0, 255 );
-
-    const int y0 = tile.top();
-    const int y1 = tile.bottom();
-    const int x0 = tile.left();
-    const int x1 = tile.right();
-
-    if ( from->depth() == 8 )
-    {
-        for ( int y = y0; y <= y1; y++ )
-        {
-            QRgb *alphaLine = reinterpret_cast<QRgb *>( to->scanLine( y ) );
-            const unsigned char *line = from->scanLine( y );
-
-            for ( int x = x0; x <= x1; x++ )
-                *alphaLine++ = ( from->color( *line++ ) & mask2 ) | mask1;
-        }
-    }
-    else if ( from->depth() == 32 )
-    {
-        for ( int y = y0; y <= y1; y++ )
-        {
-            QRgb *alphaLine = reinterpret_cast<QRgb *>( to->scanLine( y ) );
-            const QRgb *line = reinterpret_cast<const QRgb *>( from->scanLine( y ) );
-
-            for ( int x = x0; x <= x1; x++ )
-            {
-                const QRgb rgb = *line++;
-                if ( rgb & mask3 ) // alpha != 0
-                    *alphaLine++ = ( rgb & mask2 ) | mask1;
-                else
-                    *alphaLine++ = rgb;
-            }
-        }
-    }
-}
-
-//! Constructor
-QwtPlotRasterItem::QwtPlotRasterItem( const QString& title ):
-    QwtPlotItem( QwtText( title ) )
-{
-    init();
-}
-
-//! Constructor
-QwtPlotRasterItem::QwtPlotRasterItem( const QwtText& title ):
-    QwtPlotItem( title )
-{
-    init();
-}
-
-//! Destructor
-QwtPlotRasterItem::~QwtPlotRasterItem()
-{
-    delete d_data;
-}
-
-void QwtPlotRasterItem::init()
-{
-    d_data = new PrivateData();
-
-    setItemAttribute( QwtPlotItem::AutoScale, true );
-    setItemAttribute( QwtPlotItem::Legend, false );
-
-    setZ( 8.0 );
-}
-
-/*!
-  Specify an attribute how to draw the raster item
-
-  \param attribute Paint attribute
-  \param on On/Off
-  /sa PaintAttribute, testPaintAttribute()
-*/
-void QwtPlotRasterItem::setPaintAttribute( PaintAttribute attribute, bool on )
-{
-    if ( on )
-        d_data->paintAttributes |= attribute;
-    else
-        d_data->paintAttributes &= ~attribute;
-}
-
-/*!
-    \return True, when attribute is enabled
-    \sa PaintAttribute, setPaintAttribute()
-*/
-bool QwtPlotRasterItem::testPaintAttribute( PaintAttribute attribute ) const
-{
-    return ( d_data->paintAttributes & attribute );
-}
-
-/*!
-   \brief Set an alpha value for the raster data
-
-   Often a plot has several types of raster data organized in layers.
-   ( f.e a geographical map, with weather statistics ).
-   Using setAlpha() raster items can be stacked easily.
-
-   The alpha value is a value [0, 255] to
-   control the transparency of the image. 0 represents a fully
-   transparent color, while 255 represents a fully opaque color.
-
-   \param alpha Alpha value
-
-   - alpha >= 0\n
-     All alpha values of the pixels returned by renderImage() will be set to
-     alpha, beside those with an alpha value of 0 (invalid pixels).
-   - alpha < 0
-     The alpha values returned by renderImage() are not changed.
-
-   The default alpha value is -1.
-
-   \sa alpha()
-*/
-void QwtPlotRasterItem::setAlpha( int alpha )
-{
-    if ( alpha < 0 )
-        alpha = -1;
-
-    if ( alpha > 255 )
-        alpha = 255;
-
-    if ( alpha != d_data->alpha )
-    {
-        d_data->alpha = alpha;
-
-        itemChanged();
-    }
-}
-
-/*!
-  \return Alpha value of the raster item
-  \sa setAlpha()
-*/
-int QwtPlotRasterItem::alpha() const
-{
-    return d_data->alpha;
-}
-
-/*!
-  Change the cache policy
-
-  The default policy is NoCache
-
-  \param policy Cache policy
-  \sa CachePolicy, cachePolicy()
-*/
-void QwtPlotRasterItem::setCachePolicy(
-    QwtPlotRasterItem::CachePolicy policy )
-{
-    if ( d_data->cache.policy != policy )
-    {
-        d_data->cache.policy = policy;
-
-        invalidateCache();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Cache policy
-  \sa CachePolicy, setCachePolicy()
-*/
-QwtPlotRasterItem::CachePolicy QwtPlotRasterItem::cachePolicy() const
-{
-    return d_data->cache.policy;
-}
-
-/*!
-   Invalidate the paint cache
-   \sa setCachePolicy()
-*/
-void QwtPlotRasterItem::invalidateCache()
-{
-    d_data->cache.image = QImage();
-    d_data->cache.area = QRect();
-    d_data->cache.size = QSize();
-}
-
-/*!
-   \brief Pixel hint
-
-   The geometry of a pixel is used to calculated the resolution and
-   alignment of the rendered image. 
-
-   Width and height of the hint need to be the horizontal  
-   and vertical distances between 2 neighbored points. 
-   The center of the hint has to be the position of any point 
-   ( it doesn't matter which one ).
-
-   Limiting the resolution of the image might significantly improve
-   the performance and heavily reduce the amount of memory when rendering
-   a QImage from the raster data. 
-
-   The default implementation returns an empty rectangle (QRectF()),
-   meaning, that the image will be rendered in target device ( f.e screen )
-   resolution.
-
-   \param area In most implementations the resolution of the data doesn't
-               depend on the requested area.
-
-   \return Bounding rectangle of a pixel
-
-   \sa render(), renderImage()
-*/
-QRectF QwtPlotRasterItem::pixelHint( const QRectF &area ) const
-{
-    Q_UNUSED( area );
-    return QRectF();
-}
-
-/*!
-  \brief Draw the raster data
-  \param painter Painter
-  \param xMap X-Scale Map
-  \param yMap Y-Scale Map
-  \param canvasRect Contents rectangle of the plot canvas
-*/
-void QwtPlotRasterItem::draw( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect ) const
-{
-    if ( canvasRect.isEmpty() || d_data->alpha == 0 )
-        return;
-
-    const bool doCache = qwtUseCache( d_data->cache.policy, painter );
-
-    const QwtInterval xInterval = interval( Qt::XAxis );
-    const QwtInterval yInterval = interval( Qt::YAxis );
-
-    /*
-        Scaling an image always results in a loss of
-        precision/quality. So we always render the image in
-        paint device resolution.
-    */
-
-    QwtScaleMap xxMap, yyMap;
-    qwtTransformMaps( painter->transform(), xMap, yMap, xxMap, yyMap );
-
-    QRectF paintRect = painter->transform().mapRect( canvasRect );
-    QRectF area = QwtScaleMap::invTransform( xxMap, yyMap, paintRect );
-
-    const QRectF br = boundingRect();
-    if ( br.isValid() && !br.contains( area ) )
-    {
-        area &= br;
-        if ( !area.isValid() )
-            return;
-
-        paintRect = QwtScaleMap::transform( xxMap, yyMap, area );
-    }
-
-    QRectF imageRect;
-    QImage image;
-
-    QRectF pixelRect = pixelHint(area);
-    if ( !pixelRect.isEmpty() )
-    {
-        // one pixel of the target device in plot coordinates
-        const double dx = qAbs( xxMap.invTransform( 1 ) - xxMap.invTransform( 0 ) );
-        const double dy = qAbs( yyMap.invTransform( 1 ) - yyMap.invTransform( 0 ) );
-
-        if ( dx > pixelRect.width() && dy > pixelRect.height() )
-        {
-            /*
-              When the resolution of the data pixels is higher than
-              the resolution of the target device we render in
-              target device resolution.
-             */
-            pixelRect = QRectF();
-        }
-        else
-        {
-            /*
-              If only one dimension is of the data pixel is higher 
-              we expand the pixel rect to the resolution of the target device.
-             */
-
-            if ( dx > pixelRect.width() )
-                pixelRect.setWidth( dx );
-
-            if ( dy > pixelRect.height() )
-                pixelRect.setHeight( dy );
-        }
-    }
-
-    if ( pixelRect.isEmpty() )
-    {
-        if ( QwtPainter::roundingAlignment( painter ) )
-        {
-            // we want to have maps, where the boundaries of
-            // the aligned paint rectangle exactly match the area
-
-            paintRect = qwtAlignRect(paintRect);
-            qwtAdjustMaps(xxMap, yyMap, area, paintRect);
-        }
-
-        // When we have no information about position and size of
-        // data pixels we render in resolution of the paint device.
-
-        image = compose(xxMap, yyMap, 
-            area, paintRect, paintRect.size().toSize(), doCache);
-        if ( image.isNull() )
-            return;
-
-        // Remove pixels at the boundaries, when explicitly
-        // excluded in the intervals
-
-        imageRect = qwtStripRect(paintRect, area, 
-            xxMap, yyMap, xInterval, yInterval);
-
-        if ( imageRect != paintRect )
-        {
-            const QRect r( 
-                qRound( imageRect.x() - paintRect.x()),
-                qRound( imageRect.y() - paintRect.y() ),
-                qRound( imageRect.width() ),
-                qRound( imageRect.height() ) );
-                
-            image = image.copy(r);
-        }   
-    }
-    else
-    {
-        if ( QwtPainter::roundingAlignment( painter ) )
-            paintRect = qwtAlignRect(paintRect);
-
-        // align the area to the data pixels
-        QRectF imageArea = qwtExpandToPixels(area, pixelRect);
-
-        if ( imageArea.right() == xInterval.maxValue() &&
-            !( xInterval.borderFlags() & QwtInterval::ExcludeMaximum ) )
-        {
-            imageArea.adjust(0, 0, pixelRect.width(), 0);
-        }
-        if ( imageArea.bottom() == yInterval.maxValue() &&
-            !( yInterval.borderFlags() & QwtInterval::ExcludeMaximum ) )
-        {
-            imageArea.adjust(0, 0, 0, pixelRect.height() );
-        }
-
-        QSize imageSize;
-        imageSize.setWidth( qRound( imageArea.width() / pixelRect.width() ) );
-        imageSize.setHeight( qRound( imageArea.height() / pixelRect.height() ) );
-
-        image = compose(xxMap, yyMap, 
-            imageArea, paintRect, imageSize, doCache );
-
-        if ( image.isNull() )
-            return;
-
-        imageRect = qwtStripRect(paintRect, area, 
-            xxMap, yyMap, xInterval, yInterval);
-
-        if ( ( image.width() > 1 || image.height() > 1 ) &&
-            testPaintAttribute( PaintInDeviceResolution ) )
-        {
-            // Because of rounding errors the pixels 
-            // need to be expanded manually to rectangles of 
-            // different sizes
-
-            image = qwtExpandImage(image, xxMap, yyMap, 
-                imageArea, area, paintRect, xInterval, yInterval );
-        }
-    }
-
-    painter->save();
-    painter->setWorldTransform( QTransform() );
-    
-    QwtPainter::drawImage( painter, imageRect, image );
-
-    painter->restore();
-}
-
-/*!
-   \return Bounding interval for an axis
-
-   This method is intended to be reimplemented by derived classes.
-   The default implementation returns an invalid interval.
-   
-   \param axis X, Y, or Z axis
-*/
-QwtInterval QwtPlotRasterItem::interval(Qt::Axis axis) const
-{
-    Q_UNUSED( axis );
-    return QwtInterval();
-}
-
-/*!
-   \return Bounding rectangle of the data
-   \sa QwtPlotRasterItem::interval()
-*/
-QRectF QwtPlotRasterItem::boundingRect() const
-{
-    const QwtInterval intervalX = interval( Qt::XAxis );
-    const QwtInterval intervalY = interval( Qt::YAxis );
-
-    if ( !intervalX.isValid() && !intervalY.isValid() )
-        return QRectF(); // no bounding rect
-
-    QRectF r;
-
-    if ( intervalX.isValid() )
-    {
-        r.setLeft( intervalX.minValue() );
-        r.setRight( intervalX.maxValue() );
-    }
-    else
-    {
-        r.setLeft(-0.5 * FLT_MAX);
-        r.setWidth(FLT_MAX);
-    }
-
-    if ( intervalY.isValid() )
-    {
-        r.setTop( intervalY.minValue() );
-        r.setBottom( intervalY.maxValue() );
-    }
-    else
-    {
-        r.setTop(-0.5 * FLT_MAX);
-        r.setHeight(FLT_MAX);
-    }
-
-    return r.normalized();
-}
-
-QImage QwtPlotRasterItem::compose( 
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &imageArea, const QRectF &paintRect, 
-    const QSize &imageSize, bool doCache) const
-{
-    QImage image;
-    if ( imageArea.isEmpty() || paintRect.isEmpty() || imageSize.isEmpty() )
-        return image;
-
-    if ( doCache )
-    {
-        if ( !d_data->cache.image.isNull()
-            && d_data->cache.area == imageArea
-            && d_data->cache.size == paintRect.size() )
-        {
-            image = d_data->cache.image;
-        }
-    }
-
-    if ( image.isNull() )
-    {
-        double dx = 0.0;
-        if ( paintRect.toRect().width() > imageSize.width() )
-            dx = imageArea.width() / imageSize.width();
-
-        const QwtScaleMap xxMap = 
-            imageMap(Qt::Horizontal, xMap, imageArea, imageSize, dx);
-        
-        double dy = 0.0;
-        if ( paintRect.toRect().height() > imageSize.height() )
-            dy = imageArea.height() / imageSize.height();
-
-        const QwtScaleMap yyMap = 
-            imageMap(Qt::Vertical, yMap, imageArea, imageSize, dy);
-
-        image = renderImage( xxMap, yyMap, imageArea, imageSize );
-
-        if ( doCache )
-        {
-            d_data->cache.area = imageArea;
-            d_data->cache.size = paintRect.size();
-            d_data->cache.image = image;
-        }
-    }
-
-    if ( d_data->alpha >= 0 && d_data->alpha < 255 )
-    {
-        QImage alphaImage( image.size(), QImage::Format_ARGB32 );
-
-#if QT_VERSION >= 0x040400 && !defined(QT_NO_QFUTURE)
-        uint numThreads = renderThreadCount();
-
-        if ( numThreads <= 0 )
-            numThreads = QThread::idealThreadCount();
-
-        if ( numThreads <= 0 )
-            numThreads = 1;
-
-        const int numRows = image.height() / numThreads;
-
-        QList< QFuture<void> > futures;
-        for ( uint i = 0; i < numThreads; i++ )
-        {
-            QRect tile( 0, i * numRows, image.width(), numRows );
-            if ( i == numThreads - 1 )
-            {
-                tile.setHeight( image.height() - i * numRows );
-                qwtToRgba( &image, &alphaImage, tile, d_data->alpha );
-            }
-            else
-            {
-                futures += QtConcurrent::run(
-                    &qwtToRgba, &image, &alphaImage, tile, d_data->alpha );
-            }
-        }
-        for ( int i = 0; i < futures.size(); i++ )
-            futures[i].waitForFinished();
-#else
-        const QRect tile( 0, 0, image.width(), image.height() );
-        qwtToRgba( &image, &alphaImage, tile, d_data->alpha );
-#endif
-        image = alphaImage;
-    }
-
-    return image;
-}
-
-/*!
-   \brief Calculate a scale map for painting to an image
-
-   \param orientation Orientation, Qt::Horizontal means a X axis
-   \param map Scale map for rendering the plot item
-   \param area Area to be painted on the image
-   \param imageSize Image size
-   \param pixelSize Width/Height of a data pixel
-
-   \return Calculated scale map
-*/
-QwtScaleMap QwtPlotRasterItem::imageMap(
-    Qt::Orientation orientation,
-    const QwtScaleMap &map, const QRectF &area,
-    const QSize &imageSize, double pixelSize) const
-{
-    double p1, p2, s1, s2;
-
-    if ( orientation == Qt::Horizontal )
-    {
-        p1 = 0.0;
-        p2 = imageSize.width();
-        s1 = area.left();
-        s2 = area.right();
-    }
-    else
-    {
-        p1 = 0.0;
-        p2 = imageSize.height();
-        s1 = area.top();
-        s2 = area.bottom();
-    }
-
-    if ( pixelSize > 0.0 )
-    {
-        double off = 0.5 * pixelSize;
-        if ( map.isInverting() )
-            off = -off;
-
-        s1 += off;
-        s2 += off;
-    }
-    else
-    {
-        p2--;
-    }
-
-    if ( map.isInverting() && ( s1 < s2 ) )
-        qSwap( s1, s2 );
-
-    QwtScaleMap newMap = map;
-    newMap.setPaintInterval( p1, p2 );
-    newMap.setScaleInterval( s1, s2 );
-
-    return newMap;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rasteritem.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rasteritem.h
deleted file mode 100644
index 81c813e1b2ba4bff0ddabd70b6163555f801ab79..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rasteritem.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_RASTERITEM_H
-#define QWT_PLOT_RASTERITEM_H
-
-#include "qwt_global.h"
-#include "qwt_plot_item.h"
-#include "qwt_interval.h"
-#include <qglobal.h>
-#include <qstring.h>
-#include <qimage.h>
-
-/*!
-  \brief A class, which displays raster data
-
-  Raster data is a grid of pixel values, that can be represented
-  as a QImage. It is used for many types of information like
-  spectrograms, cartograms, geographical maps ...
-
-  Often a plot has several types of raster data organized in layers.
-  ( f.e a geographical map, with weather statistics ).
-  Using setAlpha() raster items can be stacked easily.
-
-  QwtPlotRasterItem is only implemented for images of the following formats:
-  QImage::Format_Indexed8, QImage::Format_ARGB32.
-
-  \sa QwtPlotSpectrogram
-*/
-
-class QWT_EXPORT QwtPlotRasterItem: public QwtPlotItem
-{
-public:
-    /*!
-      \brief Cache policy
-      The default policy is NoCache
-     */
-    enum CachePolicy
-    {
-        /*!
-          renderImage() is called each time the item has to be repainted
-         */
-        NoCache,
-
-        /*!
-          renderImage() is called, whenever the image cache is not valid,
-          or the scales, or the size of the canvas has changed. 
-
-          This type of cache is useful for improving the performance 
-          of hide/show operations or manipulations of the alpha value. 
-          All other situations are handled by the canvas backing store.
-         */
-        PaintCache
-    };
-
-    /*!
-        Attributes to modify the drawing algorithm.
-        \sa setPaintAttribute(), testPaintAttribute()
-    */
-    enum PaintAttribute
-    {
-        /*!
-          When the image is rendered according to the data pixels
-          ( QwtRasterData::pixelHint() ) it can be expanded to paint
-          device resolution before it is passed to QPainter. 
-          The expansion algorithm rounds the pixel borders in the same 
-          way as the axis ticks, what is usually better than the
-          scaling algorithm implemented in Qt.
-          Disabling this flag might make sense, to reduce the size of a 
-          document/file. If this is possible for a document format
-          depends on the implementation of the specific QPaintEngine.
-         */
-
-        PaintInDeviceResolution = 1
-    };
-
-    //! Paint attributes
-    typedef QFlags<PaintAttribute> PaintAttributes;
-
-    explicit QwtPlotRasterItem( const QString& title = QString::null );
-    explicit QwtPlotRasterItem( const QwtText& title );
-    virtual ~QwtPlotRasterItem();
-
-    void setPaintAttribute( PaintAttribute, bool on = true );
-    bool testPaintAttribute( PaintAttribute ) const;
-
-    void setAlpha( int alpha );
-    int alpha() const;
-
-    void setCachePolicy( CachePolicy );
-    CachePolicy cachePolicy() const;
-
-    void invalidateCache();
-
-    virtual void draw( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &rect ) const;
-
-    virtual QRectF pixelHint( const QRectF & ) const;
-
-    virtual QwtInterval interval(Qt::Axis) const;
-    virtual QRectF boundingRect() const;
-
-protected:
-    /*!
-      \brief Render an image 
-
-      An implementation of render() might iterate over all
-      pixels of imageRect. Each pixel has to be translated into 
-      the corresponding position in scale coordinates using the maps.
-      This position can be used to look up a value in a implementation
-      specific way and to map it into a color.
-
-      \param xMap X-Scale Map
-      \param yMap Y-Scale Map
-      \param area Requested area for the image in scale coordinates
-      \param imageSize Requested size of the image
-   
-      \return Rendered image
-     */
-    virtual QImage renderImage( const QwtScaleMap &xMap,
-        const QwtScaleMap &yMap, const QRectF &area,
-        const QSize &imageSize ) const = 0;
-
-    virtual QwtScaleMap imageMap( Qt::Orientation,
-        const QwtScaleMap &map, const QRectF &area,
-        const QSize &imageSize, double pixelSize) const;
-
-private:
-    QwtPlotRasterItem( const QwtPlotRasterItem & );
-    QwtPlotRasterItem &operator=( const QwtPlotRasterItem & );
-
-    void init();
-
-    QImage compose( const QwtScaleMap &, const QwtScaleMap &,
-        const QRectF &imageArea, const QRectF &paintRect,
-        const QSize &imageSize, bool doCache) const;
-
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotRasterItem::PaintAttributes )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_renderer.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_renderer.cpp
deleted file mode 100644
index e2c66b90bdc3f28cbb049fea9e9997d97937aee9..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_renderer.cpp
+++ /dev/null
@@ -1,1014 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_renderer.h"
-#include "qwt_plot.h"
-#include "qwt_painter.h"
-#include "qwt_plot_layout.h"
-#include "qwt_abstract_legend.h"
-#include "qwt_scale_widget.h"
-#include "qwt_scale_engine.h"
-#include "qwt_text.h"
-#include "qwt_text_label.h"
-#include "qwt_math.h"
-#include <qpainter.h>
-#include <qpaintengine.h>
-#include <qtransform.h>
-#include <qprinter.h>
-#include <qprintdialog.h>
-#include <qfiledialog.h>
-#include <qfileinfo.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-#include <qimagewriter.h>
-#ifndef QWT_NO_SVG
-#ifdef QT_SVG_LIB
-#include <qsvggenerator.h>
-#endif
-#endif
-
-static QPainterPath qwtCanvasClip( 
-    const QWidget* canvas, const QRectF &canvasRect )
-{
-    // The clip region is calculated in integers
-    // To avoid too much rounding errors better
-    // calculate it in target device resolution
-
-    int x1 = qCeil( canvasRect.left() );
-    int x2 = qFloor( canvasRect.right() );
-    int y1 = qCeil( canvasRect.top() );
-    int y2 = qFloor( canvasRect.bottom() );
-
-    const QRect r( x1, y1, x2 - x1 - 1, y2 - y1 - 1 );
-
-    QPainterPath clipPath;
-
-    ( void ) QMetaObject::invokeMethod(
-        const_cast< QWidget *>( canvas ), "borderPath",
-        Qt::DirectConnection,
-        Q_RETURN_ARG( QPainterPath, clipPath ), Q_ARG( QRect, r ) );
-
-    return clipPath;
-}
-
-class QwtPlotRenderer::PrivateData
-{
-public:
-    PrivateData():
-        discardFlags( QwtPlotRenderer::DiscardNone ),
-        layoutFlags( QwtPlotRenderer::DefaultLayout )
-    {
-    }
-
-    QwtPlotRenderer::DiscardFlags discardFlags;
-    QwtPlotRenderer::LayoutFlags layoutFlags;
-};
-
-/*! 
-   Constructor
-   \param parent Parent object
-*/
-QwtPlotRenderer::QwtPlotRenderer( QObject *parent ):
-    QObject( parent )
-{
-    d_data = new PrivateData;
-}
-
-//! Destructor
-QwtPlotRenderer::~QwtPlotRenderer()
-{
-    delete d_data;
-}
-
-/*!
-  Change a flag, indicating what to discard from rendering
-
-  \param flag Flag to change
-  \param on On/Off
-
-  \sa DiscardFlag, testDiscardFlag(), setDiscardFlags(), discardFlags()
-*/
-void QwtPlotRenderer::setDiscardFlag( DiscardFlag flag, bool on )
-{
-    if ( on )
-        d_data->discardFlags |= flag;
-    else
-        d_data->discardFlags &= ~flag;
-}
-
-/*!
-  \return True, if flag is enabled.
-  \param flag Flag to be tested
-  \sa DiscardFlag, setDiscardFlag(), setDiscardFlags(), discardFlags()
-*/
-bool QwtPlotRenderer::testDiscardFlag( DiscardFlag flag ) const
-{
-    return d_data->discardFlags & flag;
-}
-
-/*!
-  Set the flags, indicating what to discard from rendering
-
-  \param flags Flags
-  \sa DiscardFlag, setDiscardFlag(), testDiscardFlag(), discardFlags()
-*/
-void QwtPlotRenderer::setDiscardFlags( DiscardFlags flags )
-{
-    d_data->discardFlags = flags;
-}
-
-/*!
-  \return Flags, indicating what to discard from rendering
-  \sa DiscardFlag, setDiscardFlags(), setDiscardFlag(), testDiscardFlag()
-*/
-QwtPlotRenderer::DiscardFlags QwtPlotRenderer::discardFlags() const
-{
-    return d_data->discardFlags;
-}
-
-/*!
-  Change a layout flag
-
-  \param flag Flag to change
-  \param on On/Off
-
-  \sa LayoutFlag, testLayoutFlag(), setLayoutFlags(), layoutFlags()
-*/
-void QwtPlotRenderer::setLayoutFlag( LayoutFlag flag, bool on )
-{
-    if ( on )
-        d_data->layoutFlags |= flag;
-    else
-        d_data->layoutFlags &= ~flag;
-}
-
-/*!
-  \return True, if flag is enabled.
-  \param flag Flag to be tested
-  \sa LayoutFlag, setLayoutFlag(), setLayoutFlags(), layoutFlags()
-*/
-bool QwtPlotRenderer::testLayoutFlag( LayoutFlag flag ) const
-{
-    return d_data->layoutFlags & flag;
-}
-
-/*!
-  Set the layout flags
-
-  \param flags Flags
-  \sa LayoutFlag, setLayoutFlag(), testLayoutFlag(), layoutFlags()
-*/
-void QwtPlotRenderer::setLayoutFlags( LayoutFlags flags )
-{
-    d_data->layoutFlags = flags;
-}
-
-/*!
-  \return Layout flags
-  \sa LayoutFlag, setLayoutFlags(), setLayoutFlag(), testLayoutFlag()
-*/
-QwtPlotRenderer::LayoutFlags QwtPlotRenderer::layoutFlags() const
-{
-    return d_data->layoutFlags;
-}
-
-/*!
-  Render a plot to a file
-
-  The format of the document will be auto-detected from the
-  suffix of the file name.
-
-  \param plot Plot widget
-  \param fileName Path of the file, where the document will be stored
-  \param sizeMM Size for the document in millimeters.
-  \param resolution Resolution in dots per Inch (dpi)
-*/
-void QwtPlotRenderer::renderDocument( QwtPlot *plot,
-    const QString &fileName, const QSizeF &sizeMM, int resolution )
-{
-    renderDocument( plot, fileName,
-        QFileInfo( fileName ).suffix(), sizeMM, resolution );
-}
-
-/*!
-  Render a plot to a file
-
-  Supported formats are:
-
-  - pdf\n
-    Portable Document Format PDF
-  - ps\n
-    Postcript
-  - svg\n
-    Scalable Vector Graphics SVG
-  - all image formats supported by Qt\n
-    see QImageWriter::supportedImageFormats()
-
-  Scalable vector graphic formats like PDF or SVG are superior to
-  raster graphics formats.
-
-  \param plot Plot widget
-  \param fileName Path of the file, where the document will be stored
-  \param format Format for the document
-  \param sizeMM Size for the document in millimeters.
-  \param resolution Resolution in dots per Inch (dpi)
-
-  \sa renderTo(), render(), QwtPainter::setRoundingAlignment()
-*/
-void QwtPlotRenderer::renderDocument( QwtPlot *plot,
-    const QString &fileName, const QString &format,
-    const QSizeF &sizeMM, int resolution )
-{
-    if ( plot == NULL || sizeMM.isEmpty() || resolution <= 0 )
-        return;
-
-    QString title = plot->title().text();
-    if ( title.isEmpty() )
-        title = "Plot Document";
-
-    const double mmToInch = 1.0 / 25.4;
-    const QSizeF size = sizeMM * mmToInch * resolution;
-
-    const QRectF documentRect( 0.0, 0.0, size.width(), size.height() );
-
-    const QString fmt = format.toLower();
-    if ( fmt == "pdf" )
-    {
-#ifndef QT_NO_PRINTER
-        QPrinter printer;
-        printer.setOutputFormat( QPrinter::PdfFormat );
-        printer.setColorMode( QPrinter::Color );
-        printer.setFullPage( true );
-        printer.setPaperSize( sizeMM, QPrinter::Millimeter );
-        printer.setDocName( title );
-        printer.setOutputFileName( fileName );
-        printer.setResolution( resolution );
-
-        QPainter painter( &printer );
-        render( plot, &painter, documentRect );
-#endif
-    }
-    else if ( fmt == "ps" )
-    {
-#if QT_VERSION < 0x050000
-#ifndef QT_NO_PRINTER
-        QPrinter printer;
-        printer.setOutputFormat( QPrinter::PostScriptFormat );
-        printer.setColorMode( QPrinter::Color );
-        printer.setFullPage( true );
-        printer.setPaperSize( sizeMM, QPrinter::Millimeter );
-        printer.setDocName( title );
-        printer.setOutputFileName( fileName );
-        printer.setResolution( resolution );
-
-        QPainter painter( &printer );
-        render( plot, &painter, documentRect );
-#endif
-#endif
-    }
-    else if ( fmt == "svg" )
-    {
-#ifndef QWT_NO_SVG
-#ifdef QT_SVG_LIB
-#if QT_VERSION >= 0x040500
-        QSvgGenerator generator;
-        generator.setTitle( title );
-        generator.setFileName( fileName );
-        generator.setResolution( resolution );
-        generator.setViewBox( documentRect );
-
-        QPainter painter( &generator );
-        render( plot, &painter, documentRect );
-#endif
-#endif
-#endif
-    }
-    else
-    {
-        if ( QImageWriter::supportedImageFormats().indexOf(
-            format.toLatin1() ) >= 0 )
-        {
-            const QRect imageRect = documentRect.toRect();
-            const int dotsPerMeter = qRound( resolution * mmToInch * 1000.0 );
-
-            QImage image( imageRect.size(), QImage::Format_ARGB32 );
-            image.setDotsPerMeterX( dotsPerMeter );
-            image.setDotsPerMeterY( dotsPerMeter );
-            image.fill( QColor( Qt::white ).rgb() );
-
-            QPainter painter( &image );
-            render( plot, &painter, imageRect );
-            painter.end();
-
-            image.save( fileName, format.toLatin1() );
-        }
-    }
-}
-
-/*!
-  \brief Render the plot to a \c QPaintDevice
-
-  This function renders the contents of a QwtPlot instance to
-  \c QPaintDevice object. The target rectangle is derived from
-  its device metrics.
-
-  \param plot Plot to be rendered
-  \param paintDevice device to paint on, f.e a QImage
-
-  \sa renderDocument(), render(), QwtPainter::setRoundingAlignment()
-*/
-
-void QwtPlotRenderer::renderTo(
-    QwtPlot *plot, QPaintDevice &paintDevice ) const
-{
-    int w = paintDevice.width();
-    int h = paintDevice.height();
-
-    QPainter p( &paintDevice );
-    render( plot, &p, QRectF( 0, 0, w, h ) );
-}
-
-/*!
-  \brief Render the plot to a QPrinter
-
-  This function renders the contents of a QwtPlot instance to
-  \c QPaintDevice object. The size is derived from the printer
-  metrics.
-
-  \param plot Plot to be rendered
-  \param printer Printer to paint on
-
-  \sa renderDocument(), render(), QwtPainter::setRoundingAlignment()
-*/
-
-#ifndef QT_NO_PRINTER
-
-void QwtPlotRenderer::renderTo(
-    QwtPlot *plot, QPrinter &printer ) const
-{
-    int w = printer.width();
-    int h = printer.height();
-
-    QRectF rect( 0, 0, w, h );
-    double aspect = rect.width() / rect.height();
-    if ( ( aspect < 1.0 ) )
-        rect.setHeight( aspect * rect.width() );
-
-    QPainter p( &printer );
-    render( plot, &p, rect );
-}
-
-#endif
-
-#ifndef QWT_NO_SVG
-#ifdef QT_SVG_LIB
-#if QT_VERSION >= 0x040500
-
-/*!
-  \brief Render the plot to a QSvgGenerator
-
-  If the generator has a view box, the plot will be rendered into it.
-  If it has no viewBox but a valid size the target coordinates
-  will be (0, 0, generator.width(), generator.height()). Otherwise
-  the target rectangle will be QRectF(0, 0, 800, 600);
-
-  \param plot Plot to be rendered
-  \param generator SVG generator
-*/
-void QwtPlotRenderer::renderTo(
-    QwtPlot *plot, QSvgGenerator &generator ) const
-{
-    QRectF rect = generator.viewBoxF();
-    if ( rect.isEmpty() )
-        rect.setRect( 0, 0, generator.width(), generator.height() );
-
-    if ( rect.isEmpty() )
-        rect.setRect( 0, 0, 800, 600 ); // something
-
-    QPainter p( &generator );
-    render( plot, &p, rect );
-}
-#endif
-#endif
-#endif
-
-/*!
-  Paint the contents of a QwtPlot instance into a given rectangle.
-
-  \param plot Plot to be rendered
-  \param painter Painter
-  \param plotRect Bounding rectangle
-
-  \sa renderDocument(), renderTo(), QwtPainter::setRoundingAlignment()
-*/
-void QwtPlotRenderer::render( QwtPlot *plot,
-    QPainter *painter, const QRectF &plotRect ) const
-{
-    if ( painter == 0 || !painter->isActive() ||
-            !plotRect.isValid() || plot->size().isNull() )
-    {
-        return;
-    }
-
-    if ( !( d_data->discardFlags & DiscardBackground ) )
-        QwtPainter::drawBackgound( painter, plotRect, plot );
-
-    /*
-      The layout engine uses the same methods as they are used
-      by the Qt layout system. Therefore we need to calculate the
-      layout in screen coordinates and paint with a scaled painter.
-     */
-    QTransform transform;
-    transform.scale(
-        double( painter->device()->logicalDpiX() ) / plot->logicalDpiX(),
-        double( painter->device()->logicalDpiY() ) / plot->logicalDpiY() );
-
-    QRectF layoutRect = transform.inverted().mapRect( plotRect );
-
-    if ( !( d_data->discardFlags & DiscardBackground ) )
-    {
-        // subtract the contents margins
-
-        int left, top, right, bottom;
-        plot->getContentsMargins( &left, &top, &right, &bottom );
-        layoutRect.adjust( left, top, -right, -bottom );
-    }
-
-    QwtPlotLayout *layout = plot->plotLayout();
-
-    int baseLineDists[QwtPlot::axisCnt];
-    int canvasMargins[QwtPlot::axisCnt];
-
-    for ( int axisId = 0; axisId < QwtPlot::axisCnt; axisId++ )
-    {
-        canvasMargins[ axisId ] = layout->canvasMargin( axisId );
-
-        if ( d_data->layoutFlags & FrameWithScales )
-        {
-            QwtScaleWidget *scaleWidget = plot->axisWidget( axisId );
-            if ( scaleWidget )
-            {
-                baseLineDists[axisId] = scaleWidget->margin();
-                scaleWidget->setMargin( 0 );
-            }
-
-            if ( !plot->axisEnabled( axisId ) )
-            {
-                int left = 0;
-                int right = 0;
-                int top = 0;
-                int bottom = 0;
-
-                // When we have a scale the frame is painted on
-                // the position of the backbone - otherwise we
-                // need to introduce a margin around the canvas
-
-                switch( axisId )
-                {
-                    case QwtPlot::yLeft:
-                        layoutRect.adjust( 1, 0, 0, 0 );
-                        break;
-                    case QwtPlot::yRight:
-                        layoutRect.adjust( 0, 0, -1, 0 );
-                        break;
-                    case QwtPlot::xTop:
-                        layoutRect.adjust( 0, 1, 0, 0 );
-                        break;
-                    case QwtPlot::xBottom:
-                        layoutRect.adjust( 0, 0, 0, -1 );
-                        break;
-                    default:
-                        break;
-                }
-                layoutRect.adjust( left, top, right, bottom );
-            }
-        }
-    }
-
-    // Calculate the layout for the document.
-
-    QwtPlotLayout::Options layoutOptions = QwtPlotLayout::IgnoreScrollbars;
-
-    if ( ( d_data->layoutFlags & FrameWithScales ) ||
-        ( d_data->discardFlags & DiscardCanvasFrame ) )
-    {
-        layoutOptions |= QwtPlotLayout::IgnoreFrames;
-    } 
-
-
-    if ( d_data->discardFlags & DiscardLegend )
-        layoutOptions |= QwtPlotLayout::IgnoreLegend;
-
-    if ( d_data->discardFlags & DiscardTitle )
-        layoutOptions |= QwtPlotLayout::IgnoreTitle;
-
-    if ( d_data->discardFlags & DiscardFooter )
-        layoutOptions |= QwtPlotLayout::IgnoreFooter;
-
-    layout->activate( plot, layoutRect, layoutOptions );
-
-    // canvas
-
-    QwtScaleMap maps[QwtPlot::axisCnt];
-    buildCanvasMaps( plot, layout->canvasRect(), maps );
-    if ( updateCanvasMargins( plot, layout->canvasRect(), maps ) )
-    {
-        // recalculate maps and layout, when the margins
-        // have been changed
-
-        layout->activate( plot, layoutRect, layoutOptions );
-        buildCanvasMaps( plot, layout->canvasRect(), maps );
-    }
-
-    // now start painting
-
-    painter->save();
-    painter->setWorldTransform( transform, true );
-
-    renderCanvas( plot, painter, layout->canvasRect(), maps );
-
-    if ( !( d_data->discardFlags & DiscardTitle )
-        && ( !plot->titleLabel()->text().isEmpty() ) )
-    {
-        renderTitle( plot, painter, layout->titleRect() );
-    }
-
-    if ( !( d_data->discardFlags & DiscardFooter )
-        && ( !plot->footerLabel()->text().isEmpty() ) )
-    {
-        renderFooter( plot, painter, layout->footerRect() );
-    }
-
-    if ( !( d_data->discardFlags & DiscardLegend )
-        && plot->legend() && !plot->legend()->isEmpty() )
-    {
-        renderLegend( plot, painter, layout->legendRect() );
-    }
-
-    for ( int axisId = 0; axisId < QwtPlot::axisCnt; axisId++ )
-    {
-        QwtScaleWidget *scaleWidget = plot->axisWidget( axisId );
-        if ( scaleWidget )
-        {
-            int baseDist = scaleWidget->margin();
-
-            int startDist, endDist;
-            scaleWidget->getBorderDistHint( startDist, endDist );
-
-            renderScale( plot, painter, axisId, startDist, endDist,
-                baseDist, layout->scaleRect( axisId ) );
-        }
-    }
-
-    painter->restore();
-
-    // restore all setting to their original attributes.
-    for ( int axisId = 0; axisId < QwtPlot::axisCnt; axisId++ )
-    {
-        if ( d_data->layoutFlags & FrameWithScales )
-        {
-            QwtScaleWidget *scaleWidget = plot->axisWidget( axisId );
-            if ( scaleWidget  )
-                scaleWidget->setMargin( baseLineDists[axisId] );
-        }
-
-        layout->setCanvasMargin( canvasMargins[axisId] );
-    }
-
-    layout->invalidate();
-
-}
-
-/*!
-  Render the title into a given rectangle.
-
-  \param plot Plot widget
-  \param painter Painter
-  \param rect Bounding rectangle
-*/
-void QwtPlotRenderer::renderTitle( const QwtPlot *plot,
-    QPainter *painter, const QRectF &rect ) const
-{
-    painter->setFont( plot->titleLabel()->font() );
-
-    const QColor color = plot->titleLabel()->palette().color(
-            QPalette::Active, QPalette::Text );
-
-    painter->setPen( color );
-    plot->titleLabel()->text().draw( painter, rect );
-}
-
-/*!
-  Render the footer into a given rectangle.
-
-  \param plot Plot widget
-  \param painter Painter
-  \param rect Bounding rectangle
-*/
-void QwtPlotRenderer::renderFooter( const QwtPlot *plot,
-    QPainter *painter, const QRectF &rect ) const
-{
-    painter->setFont( plot->footerLabel()->font() );
-
-    const QColor color = plot->footerLabel()->palette().color(
-            QPalette::Active, QPalette::Text );
-
-    painter->setPen( color );
-    plot->footerLabel()->text().draw( painter, rect );
-}
-
-
-/*!
-  Render the legend into a given rectangle.
-
-  \param plot Plot widget
-  \param painter Painter
-  \param rect Bounding rectangle
-*/
-void QwtPlotRenderer::renderLegend( const QwtPlot *plot,
-    QPainter *painter, const QRectF &rect ) const
-{
-    if ( plot->legend() )
-    {
-        bool fillBackground = !( d_data->discardFlags & DiscardBackground );
-        plot->legend()->renderLegend( painter, rect, fillBackground );
-    }
-}
-
-/*!
-  \brief Paint a scale into a given rectangle.
-  Paint the scale into a given rectangle.
-
-  \param plot Plot widget
-  \param painter Painter
-  \param axisId Axis
-  \param startDist Start border distance
-  \param endDist End border distance
-  \param baseDist Base distance
-  \param rect Bounding rectangle
-*/
-void QwtPlotRenderer::renderScale( const QwtPlot *plot,
-    QPainter *painter,
-    int axisId, int startDist, int endDist, int baseDist,
-    const QRectF &rect ) const
-{
-    if ( !plot->axisEnabled( axisId ) )
-        return;
-
-    const QwtScaleWidget *scaleWidget = plot->axisWidget( axisId );
-    if ( scaleWidget->isColorBarEnabled()
-        && scaleWidget->colorBarWidth() > 0 )
-    {
-        scaleWidget->drawColorBar( painter, scaleWidget->colorBarRect( rect ) );
-        baseDist += scaleWidget->colorBarWidth() + scaleWidget->spacing();
-    }
-
-    painter->save();
-
-    QwtScaleDraw::Alignment align;
-    double x, y, w;
-
-    switch ( axisId )
-    {
-        case QwtPlot::yLeft:
-        {
-            x = rect.right() - 1.0 - baseDist;
-            y = rect.y() + startDist;
-            w = rect.height() - startDist - endDist;
-            align = QwtScaleDraw::LeftScale;
-            break;
-        }
-        case QwtPlot::yRight:
-        {
-            x = rect.left() + baseDist;
-            y = rect.y() + startDist;
-            w = rect.height() - startDist - endDist;
-            align = QwtScaleDraw::RightScale;
-            break;
-        }
-        case QwtPlot::xTop:
-        {
-            x = rect.left() + startDist;
-            y = rect.bottom() - 1.0 - baseDist;
-            w = rect.width() - startDist - endDist;
-            align = QwtScaleDraw::TopScale;
-            break;
-        }
-        case QwtPlot::xBottom:
-        {
-            x = rect.left() + startDist;
-            y = rect.top() + baseDist;
-            w = rect.width() - startDist - endDist;
-            align = QwtScaleDraw::BottomScale;
-            break;
-        }
-        default:
-            return;
-    }
-
-    scaleWidget->drawTitle( painter, align, rect );
-
-    painter->setFont( scaleWidget->font() );
-
-    QwtScaleDraw *sd = const_cast<QwtScaleDraw *>( scaleWidget->scaleDraw() );
-    const QPointF sdPos = sd->pos();
-    const double sdLength = sd->length();
-
-    sd->move( x, y );
-    sd->setLength( w );
-
-    QPalette palette = scaleWidget->palette();
-    palette.setCurrentColorGroup( QPalette::Active );
-    sd->draw( painter, palette );
-
-    // reset previous values
-    sd->move( sdPos );
-    sd->setLength( sdLength );
-
-    painter->restore();
-}
-
-/*!
-  Render the canvas into a given rectangle.
-
-  \param plot Plot widget
-  \param painter Painter
-  \param map Maps mapping between plot and paint device coordinates
-  \param canvasRect Canvas rectangle
-*/
-void QwtPlotRenderer::renderCanvas( const QwtPlot *plot,
-    QPainter *painter, const QRectF &canvasRect, 
-    const QwtScaleMap *map ) const
-{
-    const QWidget *canvas = plot->canvas();
-
-    QRectF r = canvasRect.adjusted( 0.0, 0.0, -1.0, -1.0 );
-
-    if ( d_data->layoutFlags & FrameWithScales )
-    {
-        painter->save();
-
-        r.adjust( -1.0, -1.0, 1.0, 1.0 );
-        painter->setPen( QPen( Qt::black ) );
-
-        if ( !( d_data->discardFlags & DiscardCanvasBackground ) )
-        {
-            const QBrush bgBrush =
-                canvas->palette().brush( plot->backgroundRole() );
-            painter->setBrush( bgBrush );
-        }
-
-        QwtPainter::drawRect( painter, r );
-
-        painter->restore();
-        painter->save();
-
-        painter->setClipRect( canvasRect );
-        plot->drawItems( painter, canvasRect, map );
-
-        painter->restore();
-    }
-    else if ( canvas->testAttribute( Qt::WA_StyledBackground ) )
-    {
-        QPainterPath clipPath;
-
-        painter->save();
-
-        if ( !( d_data->discardFlags & DiscardCanvasBackground ) )
-        {
-            QwtPainter::drawBackgound( painter, r, canvas );
-            clipPath = qwtCanvasClip( canvas, canvasRect );
-        }
-
-        painter->restore();
-        painter->save();
-
-        if ( clipPath.isEmpty() )
-            painter->setClipRect( canvasRect );
-        else
-            painter->setClipPath( clipPath );
-
-        plot->drawItems( painter, canvasRect, map );
-
-        painter->restore();
-    }
-    else
-    {
-        QPainterPath clipPath;
-
-        int frameWidth = 0;
-
-        if ( !( d_data->discardFlags & DiscardCanvasFrame ) )
-        {
-            const QVariant fw = canvas->property( "frameWidth" );
-            if ( fw.type() == QVariant::Int )
-                frameWidth = fw.toInt();
-
-            clipPath = qwtCanvasClip( canvas, canvasRect );
-        }
-
-        QRectF innerRect = canvasRect.adjusted( 
-            frameWidth, frameWidth, -frameWidth, -frameWidth );
-
-        painter->save();
-
-        if ( clipPath.isEmpty() )
-        {
-            painter->setClipRect( innerRect );
-        }
-        else
-        {
-            painter->setClipPath( clipPath );
-        }
-
-        if ( !( d_data->discardFlags & DiscardCanvasBackground ) )
-        {
-            QwtPainter::drawBackgound( painter, innerRect, canvas );
-        }
-
-        plot->drawItems( painter, innerRect, map );
-
-        painter->restore();
-
-        if ( frameWidth > 0 )
-        {
-            painter->save();
-
-            const int frameStyle =
-                canvas->property( "frameShadow" ).toInt() |
-                canvas->property( "frameShape" ).toInt();
-
-            const int frameWidth = canvas->property( "frameWidth" ).toInt();
-
-
-            const QVariant borderRadius = canvas->property( "borderRadius" );
-            if ( borderRadius.type() == QVariant::Double 
-                && borderRadius.toDouble() > 0.0 )
-            {
-                const double r = borderRadius.toDouble();
-
-                QwtPainter::drawRoundedFrame( painter, canvasRect,
-                    r, r, canvas->palette(), frameWidth, frameStyle );
-            }
-            else
-            {
-                const int midLineWidth = canvas->property( "midLineWidth" ).toInt();
-
-                QwtPainter::drawFrame( painter, canvasRect,
-                    canvas->palette(), canvas->foregroundRole(),
-                    frameWidth, midLineWidth, frameStyle );
-            }
-            painter->restore();
-        }
-    }
-}
-
-/*!
-   Calculated the scale maps for rendering the canvas
-
-   \param plot Plot widget
-   \param canvasRect Target rectangle
-   \param maps Scale maps to be calculated
-*/
-void QwtPlotRenderer::buildCanvasMaps( const QwtPlot *plot,
-    const QRectF &canvasRect, QwtScaleMap maps[] ) const
-{
-    for ( int axisId = 0; axisId < QwtPlot::axisCnt; axisId++ )
-    {
-        maps[axisId].setTransformation(
-            plot->axisScaleEngine( axisId )->transformation() );
-
-        const QwtScaleDiv &scaleDiv = plot->axisScaleDiv( axisId );
-        maps[axisId].setScaleInterval(
-            scaleDiv.lowerBound(), scaleDiv.upperBound() );
-
-        double from, to;
-        if ( plot->axisEnabled( axisId ) )
-        {
-            const int sDist = plot->axisWidget( axisId )->startBorderDist();
-            const int eDist = plot->axisWidget( axisId )->endBorderDist();
-            const QRectF scaleRect = plot->plotLayout()->scaleRect( axisId );
-
-            if ( axisId == QwtPlot::xTop || axisId == QwtPlot::xBottom )
-            {
-                from = scaleRect.left() + sDist;
-                to = scaleRect.right() - eDist;
-            }
-            else
-            {
-                from = scaleRect.bottom() - eDist;
-                to = scaleRect.top() + sDist;
-            }
-        }
-        else
-        {
-            int margin = 0;
-            if ( !plot->plotLayout()->alignCanvasToScale( axisId ) )
-                margin = plot->plotLayout()->canvasMargin( axisId );
-
-            if ( axisId == QwtPlot::yLeft || axisId == QwtPlot::yRight )
-            {
-                from = canvasRect.bottom() - margin;
-                to = canvasRect.top() + margin;
-            }
-            else
-            {
-                from = canvasRect.left() + margin;
-                to = canvasRect.right() - margin;
-            }
-        }
-        maps[axisId].setPaintInterval( from, to );
-    }
-}
-
-bool QwtPlotRenderer::updateCanvasMargins( QwtPlot *plot,
-    const QRectF &canvasRect, const QwtScaleMap maps[] ) const
-{
-    double margins[QwtPlot::axisCnt];
-    plot->getCanvasMarginsHint( maps, canvasRect,
-        margins[QwtPlot::yLeft], margins[QwtPlot::xTop], 
-        margins[QwtPlot::yRight], margins[QwtPlot::xBottom] );
-
-    bool marginsChanged = false;
-    for ( int axisId = 0; axisId < QwtPlot::axisCnt; axisId++ )
-    {
-        if ( margins[axisId] >= 0.0 )
-        {
-            const int m = qCeil( margins[axisId] );
-            plot->plotLayout()->setCanvasMargin( m, axisId);
-            marginsChanged = true;
-        }
-    }
-
-    return marginsChanged;
-}
-
-/*!
-   \brief Execute a file dialog and render the plot to the selected file
-
-   \param plot Plot widget
-   \param documentName Default document name
-   \param sizeMM Size for the document in millimeters.
-   \param resolution Resolution in dots per Inch (dpi)
-
-   \return True, when exporting was successful
-   \sa renderDocument()
-*/
-bool QwtPlotRenderer::exportTo( QwtPlot *plot, const QString &documentName,
-     const QSizeF &sizeMM, int resolution )
-{       
-    if ( plot == NULL )
-        return false;
-    
-    QString fileName = documentName;
-
-    // What about translation 
-
-#ifndef QT_NO_FILEDIALOG
-    const QList<QByteArray> imageFormats =
-        QImageWriter::supportedImageFormats();
-        
-    QStringList filter;
-#ifndef QT_NO_PRINTER
-    filter += QString( "PDF " ) + tr( "Documents" ) + " (*.pdf)";
-#endif
-#ifndef QWT_NO_SVG 
-    filter += QString( "SVG " ) + tr( "Documents" ) + " (*.svg)";
-#endif
-#ifndef QT_NO_PRINTER
-    filter += QString( "Postscript " ) + tr( "Documents" ) + " (*.ps)";
-#endif
-    
-    if ( imageFormats.size() > 0 )
-    {
-        QString imageFilter( tr( "Images" ) );
-        imageFilter += " (";
-        for ( int i = 0; i < imageFormats.size(); i++ )
-        {
-            if ( i > 0 )
-                imageFilter += " ";
-            imageFilter += "*."; 
-            imageFilter += imageFormats[i];
-        }   
-        imageFilter += ")";
-        
-        filter += imageFilter;
-    }   
-    
-    fileName = QFileDialog::getSaveFileName(
-        NULL, tr( "Export File Name" ), fileName,
-        filter.join( ";;" ), NULL, QFileDialog::DontConfirmOverwrite );
-#endif  
-    if ( fileName.isEmpty() )
-        return false;
-
-    renderDocument( plot, fileName, sizeMM, resolution );
-
-    return true;
-}   
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_renderer.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_renderer.h
deleted file mode 100644
index 4fc45727aac4efd768a29b907757c0b86a842764..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_renderer.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_RENDERER_H
-#define QWT_PLOT_RENDERER_H
-
-#include "qwt_global.h"
-#include <qobject.h>
-#include <qsize.h>
-
-class QwtPlot;
-class QwtScaleMap;
-class QRectF;
-class QPainter;
-class QPaintDevice;
-
-#ifndef QT_NO_PRINTER
-class QPrinter;
-#endif
-
-#ifndef QWT_NO_SVG
-#ifdef QT_SVG_LIB
-class QSvgGenerator;
-#endif
-#endif
-
-/*!
-    \brief Renderer for exporting a plot to a document, a printer
-           or anything else, that is supported by QPainter/QPaintDevice
-*/
-class QWT_EXPORT QwtPlotRenderer: public QObject
-{
-    Q_OBJECT
-
-public:
-    //! Disard flags
-    enum DiscardFlag
-    {
-        //! Render all components of the plot
-        DiscardNone             = 0x00,
-
-        //! Don't render the background of the plot
-        DiscardBackground       = 0x01,
-
-        //! Don't render the title of the plot
-        DiscardTitle            = 0x02,
-
-        //! Don't render the legend of the plot
-        DiscardLegend           = 0x04,
-
-        //! Don't render the background of the canvas
-        DiscardCanvasBackground = 0x08,
-
-        //! Don't render the footer of the plot
-        DiscardFooter           = 0x10,
-
-        /*! 
-            Don't render the frame of the canvas
-
-            \note This flag has no effect when using
-                  style sheets, where the frame is part
-                  of the background
-         */
-        DiscardCanvasFrame           = 0x20
-
-    };
-
-    //! Disard flags
-    typedef QFlags<DiscardFlag> DiscardFlags;
-
-    /*!
-       \brief Layout flags
-       \sa setLayoutFlag(), testLayoutFlag()
-     */
-    enum LayoutFlag
-    {
-        //! Use the default layout as on screen
-        DefaultLayout   = 0x00,
-
-        /*!
-          Instead of the scales a box is painted around the plot canvas,
-          where the scale ticks are aligned to.
-         */
-        FrameWithScales = 0x01
-    };
-
-    //! Layout flags
-    typedef QFlags<LayoutFlag> LayoutFlags;
-
-    explicit QwtPlotRenderer( QObject * = NULL );
-    virtual ~QwtPlotRenderer();
-
-    void setDiscardFlag( DiscardFlag flag, bool on = true );
-    bool testDiscardFlag( DiscardFlag flag ) const;
-
-    void setDiscardFlags( DiscardFlags flags );
-    DiscardFlags discardFlags() const;
-
-    void setLayoutFlag( LayoutFlag flag, bool on = true );
-    bool testLayoutFlag( LayoutFlag flag ) const;
-
-    void setLayoutFlags( LayoutFlags flags );
-    LayoutFlags layoutFlags() const;
-
-    void renderDocument( QwtPlot *, const QString &fileName,
-        const QSizeF &sizeMM, int resolution = 85 );
-
-    void renderDocument( QwtPlot *,
-        const QString &fileName, const QString &format,
-        const QSizeF &sizeMM, int resolution = 85 );
-
-#ifndef QWT_NO_SVG
-#ifdef QT_SVG_LIB
-#if QT_VERSION >= 0x040500
-    void renderTo( QwtPlot *, QSvgGenerator & ) const;
-#endif
-#endif
-#endif
-
-#ifndef QT_NO_PRINTER
-    void renderTo( QwtPlot *, QPrinter & ) const;
-#endif
-
-    void renderTo( QwtPlot *, QPaintDevice &p ) const;
-
-    virtual void render( QwtPlot *,
-        QPainter *, const QRectF &rect ) const;
-
-    virtual void renderTitle( const QwtPlot *,
-        QPainter *, const QRectF & ) const;
-
-    virtual void renderFooter( const QwtPlot *,
-        QPainter *, const QRectF & ) const;
-
-    virtual void renderScale( const QwtPlot *, QPainter *,
-        int axisId, int startDist, int endDist,
-        int baseDist, const QRectF & ) const;
-
-    virtual void renderCanvas( const QwtPlot *,
-        QPainter *, const QRectF &canvasRect,
-        const QwtScaleMap* maps ) const;
-
-    virtual void renderLegend( 
-        const QwtPlot *, QPainter *, const QRectF & ) const;
-
-    bool exportTo( QwtPlot *, const QString &documentName,
-        const QSizeF &sizeMM = QSizeF( 300, 200 ), int resolution = 85 );
-
-private:
-    void buildCanvasMaps( const QwtPlot *,
-        const QRectF &, QwtScaleMap maps[] ) const;
-
-    bool updateCanvasMargins( QwtPlot *,
-        const QRectF &, const QwtScaleMap maps[] ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotRenderer::DiscardFlags )
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotRenderer::LayoutFlags )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rescaler.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rescaler.cpp
deleted file mode 100644
index a496579f3d3d7d90d83d13177a8bdf7ba111f3c7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rescaler.cpp
+++ /dev/null
@@ -1,631 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_rescaler.h"
-#include "qwt_plot.h"
-#include "qwt_scale_div.h"
-#include "qwt_interval.h"
-#include "qwt_plot_canvas.h"
-#include <qevent.h>
-#include <qalgorithms.h>
-
-class QwtPlotRescaler::AxisData
-{
-public:
-    AxisData():
-        aspectRatio( 1.0 ),
-        expandingDirection( QwtPlotRescaler::ExpandUp )
-    {
-    }
-
-    double aspectRatio;
-    QwtInterval intervalHint;
-    QwtPlotRescaler::ExpandingDirection expandingDirection;
-    mutable QwtScaleDiv scaleDiv;
-};
-
-class QwtPlotRescaler::PrivateData
-{
-public:
-    PrivateData():
-        referenceAxis( QwtPlot::xBottom ),
-        rescalePolicy( QwtPlotRescaler::Expanding ),
-        isEnabled( false ),
-        inReplot( 0 )
-    {
-    }
-
-    int referenceAxis;
-    RescalePolicy rescalePolicy;
-    QwtPlotRescaler::AxisData axisData[QwtPlot::axisCnt];
-    bool isEnabled;
-
-    mutable int inReplot;
-};
-
-/*!
-   Constructor
-
-   \param canvas Canvas
-   \param referenceAxis Reference axis, see RescalePolicy
-   \param policy Rescale policy
-
-   \sa setRescalePolicy(), setReferenceAxis()
-*/
-QwtPlotRescaler::QwtPlotRescaler( QWidget *canvas,
-        int referenceAxis, RescalePolicy policy ):
-    QObject( canvas )
-{
-    d_data = new PrivateData;
-    d_data->referenceAxis = referenceAxis;
-    d_data->rescalePolicy = policy;
-
-    setEnabled( true );
-}
-
-//! Destructor
-QwtPlotRescaler::~QwtPlotRescaler()
-{
-    delete d_data;
-}
-
-/*!
-  \brief En/disable the rescaler
-
-  When enabled is true an event filter is installed for
-  the canvas, otherwise the event filter is removed.
-
-  \param on true or false
-  \sa isEnabled(), eventFilter()
-*/
-void QwtPlotRescaler::setEnabled( bool on )
-{
-    if ( d_data->isEnabled != on )
-    {
-        d_data->isEnabled = on;
-
-        QWidget *w = canvas();
-        if ( w )
-        {
-            if ( d_data->isEnabled )
-                w->installEventFilter( this );
-            else
-                w->removeEventFilter( this );
-        }
-    }
-}
-
-/*!
-  \return true when enabled, false otherwise
-  \sa setEnabled, eventFilter()
-*/
-bool QwtPlotRescaler::isEnabled() const
-{
-    return d_data->isEnabled;
-}
-
-/*!
-  Change the rescale policy
-
-  \param policy Rescale policy
-  \sa rescalePolicy()
-*/
-void QwtPlotRescaler::setRescalePolicy( RescalePolicy policy )
-{
-    d_data->rescalePolicy = policy;
-}
-
-/*!
-  \return Rescale policy
-  \sa setRescalePolicy()
-*/
-QwtPlotRescaler::RescalePolicy QwtPlotRescaler::rescalePolicy() const
-{
-    return d_data->rescalePolicy;
-}
-
-/*!
-  Set the reference axis ( see RescalePolicy )
-
-  \param axis Axis index ( QwtPlot::Axis )
-  \sa referenceAxis()
-*/
-void QwtPlotRescaler::setReferenceAxis( int axis )
-{
-    d_data->referenceAxis = axis;
-}
-
-/*!
-  \return Reference axis ( see RescalePolicy )
-  \sa setReferenceAxis()
-*/
-int QwtPlotRescaler::referenceAxis() const
-{
-    return d_data->referenceAxis;
-}
-
-/*!
-  Set the direction in which all axis should be expanded
-
-  \param direction Direction
-  \sa expandingDirection()
-*/
-void QwtPlotRescaler::setExpandingDirection(
-    ExpandingDirection direction )
-{
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-        setExpandingDirection( axis, direction );
-}
-
-/*!
-  Set the direction in which an axis should be expanded
-
-  \param axis Axis index ( see QwtPlot::AxisId )
-  \param direction Direction
-  \sa expandingDirection()
-*/
-void QwtPlotRescaler::setExpandingDirection(
-    int axis, ExpandingDirection direction )
-{
-    if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        d_data->axisData[axis].expandingDirection = direction;
-}
-
-/*!
-  \return Direction in which an axis should be expanded
-
-  \param axis Axis index ( see QwtPlot::AxisId )
-  \sa setExpandingDirection()
-*/
-QwtPlotRescaler::ExpandingDirection
-QwtPlotRescaler::expandingDirection( int axis ) const
-{
-    if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        return d_data->axisData[axis].expandingDirection;
-
-    return ExpandBoth;
-}
-
-/*!
-  Set the aspect ratio between the scale of the reference axis
-  and the other scales. The default ratio is 1.0
-
-  \param ratio Aspect ratio
-  \sa aspectRatio()
-*/
-void QwtPlotRescaler::setAspectRatio( double ratio )
-{
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-        setAspectRatio( axis, ratio );
-}
-
-/*!
-  Set the aspect ratio between the scale of the reference axis
-  and another scale. The default ratio is 1.0
-
-  \param axis Axis index ( see QwtPlot::AxisId )
-  \param ratio Aspect ratio
-  \sa aspectRatio()
-*/
-void QwtPlotRescaler::setAspectRatio( int axis, double ratio )
-{
-    if ( ratio < 0.0 )
-        ratio = 0.0;
-
-    if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        d_data->axisData[axis].aspectRatio = ratio;
-}
-
-/*!
-  \return Aspect ratio between an axis and the reference axis.
-
-  \param axis Axis index ( see QwtPlot::AxisId )
-  \sa setAspectRatio()
-*/
-double QwtPlotRescaler::aspectRatio( int axis ) const
-{
-    if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        return d_data->axisData[axis].aspectRatio;
-
-    return 0.0;
-}
-
-/*!
-  Set an interval hint for an axis
-
-  In Fitting mode, the hint is used as minimal interval
-  that always needs to be displayed.
-
-  \param axis Axis, see QwtPlot::Axis
-  \param interval Axis
-  \sa intervalHint(), RescalePolicy
-*/
-void QwtPlotRescaler::setIntervalHint( int axis,
-    const QwtInterval &interval )
-{
-    if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        d_data->axisData[axis].intervalHint = interval;
-}
-
-/*!
-  \param axis Axis, see QwtPlot::Axis
-  \return Interval hint
-  \sa setIntervalHint(), RescalePolicy
-*/
-QwtInterval QwtPlotRescaler::intervalHint( int axis ) const
-{
-    if ( axis >= 0 && axis < QwtPlot::axisCnt )
-        return d_data->axisData[axis].intervalHint;
-
-    return QwtInterval();
-}
-
-//! \return plot canvas
-QWidget *QwtPlotRescaler::canvas()
-{
-    return qobject_cast<QWidget *>( parent() );
-}
-
-//! \return plot canvas
-const QWidget *QwtPlotRescaler::canvas() const
-{
-    return qobject_cast<const QWidget *>( parent() );
-}
-
-//! \return plot widget
-QwtPlot *QwtPlotRescaler::plot()
-{
-    QWidget *w = canvas();
-    if ( w )
-        w = w->parentWidget();
-
-    return qobject_cast<QwtPlot *>( w );
-}
-
-//! \return plot widget
-const QwtPlot *QwtPlotRescaler::plot() const
-{
-    const QWidget *w = canvas();
-    if ( w )
-        w = w->parentWidget();
-
-    return qobject_cast<const QwtPlot *>( w );
-}
-
-//!  Event filter for the plot canvas
-bool QwtPlotRescaler::eventFilter( QObject *object, QEvent *event )
-{
-    if ( object && object == canvas() )
-    {
-        switch ( event->type() )
-        {
-            case QEvent::Resize:
-            {
-                canvasResizeEvent( static_cast<QResizeEvent *>( event ) );
-                break;
-            }
-            case QEvent::PolishRequest:
-            {
-                rescale();
-                break;
-            }
-            default:;
-        }
-    }
-
-    return false;
-}
-
-/*!
-  Event handler for resize events of the plot canvas
-
-  \param event Resize event
-  \sa rescale()
-*/
-void QwtPlotRescaler::canvasResizeEvent( QResizeEvent* event )
-{
-    int left, top, right, bottom;
-    canvas()->getContentsMargins( &left, &top, &right, &bottom );
-
-    const QSize marginSize( left + right, top + bottom );
-
-    const QSize newSize = event->size() - marginSize;
-    const QSize oldSize = event->oldSize() - marginSize;
-
-    rescale( oldSize, newSize );
-}
-
-//! Adjust the plot axes scales
-void QwtPlotRescaler::rescale() const
-{
-    const QSize size = canvas()->contentsRect().size();
-    rescale( size, size );
-}
-
-/*!
-   Adjust the plot axes scales
-
-   \param oldSize Previous size of the canvas
-   \param newSize New size of the canvas
-*/
-void QwtPlotRescaler::rescale(
-    const QSize &oldSize, const QSize &newSize ) const
-{
-    if ( newSize.isEmpty() )
-        return;
-
-    QwtInterval intervals[QwtPlot::axisCnt];
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-        intervals[axis] = interval( axis );
-
-    const int refAxis = referenceAxis();
-    intervals[refAxis] = expandScale( refAxis, oldSize, newSize );
-
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-    {
-        if ( aspectRatio( axis ) > 0.0 && axis != refAxis )
-            intervals[axis] = syncScale( axis, intervals[refAxis], newSize );
-    }
-
-    updateScales( intervals );
-}
-
-/*!
-  Calculate the new scale interval of a plot axis
-
-  \param axis Axis index ( see QwtPlot::AxisId )
-  \param oldSize Previous size of the canvas
-  \param newSize New size of the canvas
-
-  \return Calculated new interval for the axis
-*/
-QwtInterval QwtPlotRescaler::expandScale( int axis,
-        const QSize &oldSize, const QSize &newSize ) const
-{
-    const QwtInterval oldInterval = interval( axis );
-
-    QwtInterval expanded = oldInterval;
-    switch ( rescalePolicy() )
-    {
-        case Fixed:
-        {
-            break; // do nothing
-        }
-        case Expanding:
-        {
-            if ( !oldSize.isEmpty() )
-            {
-                double width = oldInterval.width();
-                if ( orientation( axis ) == Qt::Horizontal )
-                    width *= double( newSize.width() ) / oldSize.width();
-                else
-                    width *= double( newSize.height() ) / oldSize.height();
-
-                expanded = expandInterval( oldInterval,
-                    width, expandingDirection( axis ) );
-            }
-            break;
-        }
-        case Fitting:
-        {
-            double dist = 0.0;
-            for ( int ax = 0; ax < QwtPlot::axisCnt; ax++ )
-            {
-                const double d = pixelDist( ax, newSize );
-                if ( d > dist )
-                    dist = d;
-            }
-            if ( dist > 0.0 )
-            {
-                double width;
-                if ( orientation( axis ) == Qt::Horizontal )
-                    width = newSize.width() * dist;
-                else
-                    width = newSize.height() * dist;
-
-                expanded = expandInterval( intervalHint( axis ),
-                    width, expandingDirection( axis ) );
-            }
-            break;
-        }
-    }
-
-    return expanded;
-}
-
-/*!
-  Synchronize an axis scale according to the scale of the reference axis
-
-  \param axis Axis index ( see QwtPlot::AxisId )
-  \param reference Interval of the reference axis
-  \param size Size of the canvas
-
-  \return New interval for axis
-*/
-QwtInterval QwtPlotRescaler::syncScale( int axis,
-    const QwtInterval& reference, const QSize &size ) const
-{
-    double dist;
-    if ( orientation( referenceAxis() ) == Qt::Horizontal )
-        dist = reference.width() / size.width();
-    else
-        dist = reference.width() / size.height();
-
-    if ( orientation( axis ) == Qt::Horizontal )
-        dist *= size.width();
-    else
-        dist *= size.height();
-
-    dist /= aspectRatio( axis );
-
-    QwtInterval intv;
-    if ( rescalePolicy() == Fitting )
-        intv = intervalHint( axis );
-    else
-        intv = interval( axis );
-
-    intv = expandInterval( intv, dist, expandingDirection( axis ) );
-
-    return intv;
-}
-
-/*!
-  \return Orientation of an axis
-  \param axis Axis index ( see QwtPlot::AxisId )
-*/
-Qt::Orientation QwtPlotRescaler::orientation( int axis ) const
-{
-    if ( axis == QwtPlot::yLeft || axis == QwtPlot::yRight )
-        return Qt::Vertical;
-
-    return Qt::Horizontal;
-}
-
-/*!
-  \param axis Axis index ( see QwtPlot::AxisId )
-  \return Normalized interval of an axis
-*/
-QwtInterval QwtPlotRescaler::interval( int axis ) const
-{
-    if ( axis < 0 || axis >= QwtPlot::axisCnt )
-        return QwtInterval();
-
-    return plot()->axisScaleDiv( axis ).interval().normalized();
-}
-
-/*!
-  Expand the interval
-
-  \param interval Interval to be expanded
-  \param width Distance to be added to the interval
-  \param direction Direction of the expand operation
-
-  \return Expanded interval
-*/
-QwtInterval QwtPlotRescaler::expandInterval(
-    const QwtInterval &interval, double width,
-    ExpandingDirection direction ) const
-{
-    QwtInterval expanded = interval;
-
-    switch ( direction )
-    {
-        case ExpandUp:
-            expanded.setMinValue( interval.minValue() );
-            expanded.setMaxValue( interval.minValue() + width );
-            break;
-
-        case ExpandDown:
-            expanded.setMaxValue( interval.maxValue() );
-            expanded.setMinValue( interval.maxValue() - width );
-            break;
-
-        case ExpandBoth:
-        default:
-            expanded.setMinValue( interval.minValue() +
-                interval.width() / 2.0 - width / 2.0 );
-            expanded.setMaxValue( expanded.minValue() + width );
-    }
-    return expanded;
-}
-
-double QwtPlotRescaler::pixelDist( int axis, const QSize &size ) const
-{
-    const QwtInterval intv = intervalHint( axis );
-
-    double dist = 0.0;
-    if ( !intv.isNull() )
-    {
-        if ( axis == referenceAxis() )
-            dist = intv.width();
-        else
-        {
-            const double r = aspectRatio( axis );
-            if ( r > 0.0 )
-                dist = intv.width() * r;
-        }
-    }
-
-    if ( dist > 0.0 )
-    {
-        if ( orientation( axis ) == Qt::Horizontal )
-            dist /= size.width();
-        else
-            dist /= size.height();
-    }
-
-    return dist;
-}
-
-/*!
-   Update the axes scales
-
-   \param intervals Scale intervals
-*/
-void QwtPlotRescaler::updateScales(
-    QwtInterval intervals[QwtPlot::axisCnt] ) const
-{
-    if ( d_data->inReplot >= 5 )
-    {
-        return;
-    }
-
-    QwtPlot *plt = const_cast<QwtPlot *>( plot() );
-
-    const bool doReplot = plt->autoReplot();
-    plt->setAutoReplot( false );
-
-    for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
-    {
-        if ( axis == referenceAxis() || aspectRatio( axis ) > 0.0 )
-        {
-            double v1 = intervals[axis].minValue();
-            double v2 = intervals[axis].maxValue();
-
-            if ( !plt->axisScaleDiv( axis ).isIncreasing() )
-                qSwap( v1, v2 );
-
-            if ( d_data->inReplot >= 1 )
-                d_data->axisData[axis].scaleDiv = plt->axisScaleDiv( axis );
-
-            if ( d_data->inReplot >= 2 )
-            {
-                QList<double> ticks[QwtScaleDiv::NTickTypes];
-                for ( int i = 0; i < QwtScaleDiv::NTickTypes; i++ )
-                    ticks[i] = d_data->axisData[axis].scaleDiv.ticks( i );
-
-                plt->setAxisScaleDiv( axis, QwtScaleDiv( v1, v2, ticks ) );
-            }
-            else
-            {
-                plt->setAxisScale( axis, v1, v2 );
-            }
-        }
-    }
-
-    QwtPlotCanvas *canvas = qobject_cast<QwtPlotCanvas *>( plt->canvas() );
-
-    bool immediatePaint = false;
-    if ( canvas )
-    {
-        immediatePaint = canvas->testPaintAttribute( QwtPlotCanvas::ImmediatePaint );
-        canvas->setPaintAttribute( QwtPlotCanvas::ImmediatePaint, false );
-    }
-
-    plt->setAutoReplot( doReplot );
-
-    d_data->inReplot++;
-    plt->replot();
-    d_data->inReplot--;
-
-    if ( canvas && immediatePaint )
-    {
-        canvas->setPaintAttribute( QwtPlotCanvas::ImmediatePaint, true );
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rescaler.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rescaler.h
deleted file mode 100644
index 82fec26ae33f382440e85ad5e3aa4325c51eede0..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_rescaler.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_RESCALER_H
-#define QWT_PLOT_RESCALER_H 1
-
-#include "qwt_global.h"
-#include "qwt_interval.h"
-#include "qwt_plot.h"
-#include <qobject.h>
-
-class QwtPlot;
-class QResizeEvent;
-
-/*!
-    \brief QwtPlotRescaler takes care of fixed aspect ratios for plot scales
-
-    QwtPlotRescaler auto adjusts the axes of a QwtPlot according
-    to fixed aspect ratios.
-*/
-
-class QWT_EXPORT QwtPlotRescaler: public QObject
-{
-public:
-    /*!
-      The rescale policy defines how to rescale the reference axis and
-      their depending axes.
-
-      \sa ExpandingDirection, setIntervalHint()
-    */
-    enum RescalePolicy
-    {
-        /*!
-          The interval of the reference axis remains unchanged, when the
-          geometry of the canvas changes. All other axes
-          will be adjusted according to their aspect ratio.
-         */
-        Fixed,
-
-        /*!
-          The interval of the reference axis will be shrunk/expanded,
-          when the geometry of the canvas changes. All other axes
-          will be adjusted according to their aspect ratio.
-
-          The interval, that is represented by one pixel is fixed.
-
-         */
-        Expanding,
-
-        /*!
-          The intervals of the axes are calculated, so that all axes include
-          their interval hint.
-         */
-        Fitting
-    };
-
-    /*!
-       When rescalePolicy() is set to Expanding its direction depends
-       on ExpandingDirection
-     */
-    enum ExpandingDirection
-    {
-        //! The upper limit of the scale is adjusted
-        ExpandUp,
-
-        //! The lower limit of the scale is adjusted
-        ExpandDown,
-
-        //! Both limits of the scale are adjusted
-        ExpandBoth
-    };
-
-    explicit QwtPlotRescaler( QWidget *canvas,
-        int referenceAxis = QwtPlot::xBottom,
-        RescalePolicy = Expanding );
-
-    virtual ~QwtPlotRescaler();
-
-    void setEnabled( bool );
-    bool isEnabled() const;
-
-    void setRescalePolicy( RescalePolicy );
-    RescalePolicy rescalePolicy() const;
-
-    void setExpandingDirection( ExpandingDirection );
-    void setExpandingDirection( int axis, ExpandingDirection );
-    ExpandingDirection expandingDirection( int axis ) const;
-
-    void setReferenceAxis( int axis );
-    int referenceAxis() const;
-
-    void setAspectRatio( double ratio );
-    void setAspectRatio( int axis, double ratio );
-    double aspectRatio( int axis ) const;
-
-    void setIntervalHint( int axis, const QwtInterval& );
-    QwtInterval intervalHint( int axis ) const;
-
-    QWidget *canvas();
-    const QWidget *canvas() const;
-
-    QwtPlot *plot();
-    const QwtPlot *plot() const;
-
-    virtual bool eventFilter( QObject *, QEvent * );
-
-    void rescale() const;
-
-protected:
-    virtual void canvasResizeEvent( QResizeEvent * );
-
-    virtual void rescale( const QSize &oldSize, const QSize &newSize ) const;
-    virtual QwtInterval expandScale( 
-        int axis, const QSize &oldSize, const QSize &newSize ) const;
-
-    virtual QwtInterval syncScale(
-        int axis, const QwtInterval& reference,
-        const QSize &size ) const;
-
-    virtual void updateScales(
-        QwtInterval intervals[QwtPlot::axisCnt] ) const;
-
-    Qt::Orientation orientation( int axis ) const;
-    QwtInterval interval( int axis ) const;
-    QwtInterval expandInterval( const QwtInterval &,
-        double width, ExpandingDirection ) const;
-
-private:
-    double pixelDist( int axis, const QSize & ) const;
-
-    class AxisData;
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_scaleitem.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_scaleitem.cpp
deleted file mode 100644
index 4fd150aa562e03c803c01f19fff0f726cd1c0012..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_scaleitem.cpp
+++ /dev/null
@@ -1,478 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_scaleitem.h"
-#include "qwt_plot.h"
-#include "qwt_scale_map.h"
-#include "qwt_interval.h"
-#include <qpalette.h>
-#include <qpainter.h>
-
-class QwtPlotScaleItem::PrivateData
-{
-public:
-    PrivateData():
-        position( 0.0 ),
-        borderDistance( -1 ),
-        scaleDivFromAxis( true ),
-        scaleDraw( new QwtScaleDraw() )
-    {
-    }
-
-    ~PrivateData()
-    {
-        delete scaleDraw;
-    }
-
-    QwtInterval scaleInterval( const QRectF &,
-        const QwtScaleMap &, const QwtScaleMap & ) const;
-
-    QPalette palette;
-    QFont font;
-    double position;
-    int borderDistance;
-    bool scaleDivFromAxis;
-    QwtScaleDraw *scaleDraw;
-};
-
-QwtInterval QwtPlotScaleItem::PrivateData::scaleInterval( const QRectF &canvasRect,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap ) const
-{
-    QwtInterval interval;
-    if ( scaleDraw->orientation() == Qt::Horizontal )
-    {
-        interval.setMinValue( xMap.invTransform( canvasRect.left() ) );
-        interval.setMaxValue( xMap.invTransform( canvasRect.right() - 1 ) );
-    }
-    else
-    {
-        interval.setMinValue( yMap.invTransform( canvasRect.bottom() - 1 ) );
-        interval.setMaxValue( yMap.invTransform( canvasRect.top() ) );
-    }
-
-    return interval;
-}
-
-/*!
-   \brief Constructor for scale item at the position pos.
-
-   \param alignment In case of QwtScaleDraw::BottomScale or QwtScaleDraw::TopScale
-                    the scale item is corresponding to the xAxis(),
-                    otherwise it corresponds to the yAxis().
-
-   \param pos x or y position, depending on the corresponding axis.
-
-   \sa setPosition(), setAlignment()
-*/
-QwtPlotScaleItem::QwtPlotScaleItem(
-        QwtScaleDraw::Alignment alignment, const double pos ):
-    QwtPlotItem( QwtText( "Scale" ) )
-{
-    d_data = new PrivateData;
-    d_data->position = pos;
-    d_data->scaleDraw->setAlignment( alignment );
-
-    setItemInterest( QwtPlotItem::ScaleInterest, true );
-    setZ( 11.0 );
-}
-
-//! Destructor
-QwtPlotScaleItem::~QwtPlotScaleItem()
-{
-    delete d_data;
-}
-
-//! \return QwtPlotItem::Rtti_PlotScale
-int QwtPlotScaleItem::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotScale;
-}
-
-/*!
-   \brief Assign a scale division
-
-   When assigning a scaleDiv the scale division won't be synchronized
-   with the corresponding axis anymore.
-
-   \param scaleDiv Scale division
-   \sa scaleDiv(), setScaleDivFromAxis(), isScaleDivFromAxis()
-*/
-void QwtPlotScaleItem::setScaleDiv( const QwtScaleDiv& scaleDiv )
-{
-    d_data->scaleDivFromAxis = false;
-    d_data->scaleDraw->setScaleDiv( scaleDiv );
-}
-
-//! \return Scale division
-const QwtScaleDiv& QwtPlotScaleItem::scaleDiv() const
-{
-    return d_data->scaleDraw->scaleDiv();
-}
-
-/*!
-   Enable/Disable the synchronization of the scale division with
-   the corresponding axis.
-
-   \param on true/false
-   \sa isScaleDivFromAxis()
-*/
-void QwtPlotScaleItem::setScaleDivFromAxis( bool on )
-{
-    if ( on != d_data->scaleDivFromAxis )
-    {
-        d_data->scaleDivFromAxis = on;
-        if ( on )
-        {
-            const QwtPlot *plt = plot();
-            if ( plt )
-            {
-                updateScaleDiv( plt->axisScaleDiv( xAxis() ),
-                    plt->axisScaleDiv( yAxis() ) );
-                itemChanged();
-            }
-        }
-    }
-}
-
-/*!
-   \return True, if the synchronization of the scale division with
-           the corresponding axis is enabled.
-   \sa setScaleDiv(), setScaleDivFromAxis()
-*/
-bool QwtPlotScaleItem::isScaleDivFromAxis() const
-{
-    return d_data->scaleDivFromAxis;
-}
-
-/*!
-   Set the palette
-   \sa QwtAbstractScaleDraw::draw(), palette()
-*/
-void QwtPlotScaleItem::setPalette( const QPalette &palette )
-{
-    if ( palette != d_data->palette )
-    {
-        d_data->palette = palette;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-   \return palette
-   \sa setPalette()
-*/
-QPalette QwtPlotScaleItem::palette() const
-{
-    return d_data->palette;
-}
-
-/*!
-   Change the tick label font
-   \sa font()
-*/
-void QwtPlotScaleItem::setFont( const QFont &font )
-{
-    if ( font != d_data->font )
-    {
-        d_data->font = font;
-        itemChanged();
-    }
-}
-
-/*!
-   \return tick label font
-   \sa setFont()
-*/
-QFont QwtPlotScaleItem::font() const
-{
-    return d_data->font;
-}
-
-/*!
-  \brief Set a scale draw
-
-  \param scaleDraw object responsible for drawing scales.
-
-  The main use case for replacing the default QwtScaleDraw is
-  to overload QwtAbstractScaleDraw::label, to replace or swallow
-  tick labels.
-
-  \sa scaleDraw()
-*/
-void QwtPlotScaleItem::setScaleDraw( QwtScaleDraw *scaleDraw )
-{
-    if ( scaleDraw == NULL )
-        return;
-
-    if ( scaleDraw != d_data->scaleDraw )
-        delete d_data->scaleDraw;
-
-    d_data->scaleDraw = scaleDraw;
-
-    const QwtPlot *plt = plot();
-    if ( plt )
-    {
-        updateScaleDiv( plt->axisScaleDiv( xAxis() ),
-            plt->axisScaleDiv( yAxis() ) );
-    }
-
-    itemChanged();
-}
-
-/*!
-   \return Scale draw
-   \sa setScaleDraw()
-*/
-const QwtScaleDraw *QwtPlotScaleItem::scaleDraw() const
-{
-    return d_data->scaleDraw;
-}
-
-/*!
-   \return Scale draw
-   \sa setScaleDraw()
-*/
-QwtScaleDraw *QwtPlotScaleItem::scaleDraw()
-{
-    return d_data->scaleDraw;
-}
-
-/*!
-   Change the position of the scale
-
-   The position is interpreted as y value for horizontal axes
-   and as x value for vertical axes.
-
-   The border distance is set to -1.
-
-   \param pos New position
-   \sa position(), setAlignment()
-*/
-void QwtPlotScaleItem::setPosition( double pos )
-{
-    if ( d_data->position != pos )
-    {
-        d_data->position = pos;
-        d_data->borderDistance = -1;
-        itemChanged();
-    }
-}
-
-/*!
-   \return Position of the scale
-   \sa setPosition(), setAlignment()
-*/
-double QwtPlotScaleItem::position() const
-{
-    return d_data->position;
-}
-
-/*!
-   \brief Align the scale to the canvas
-
-   If distance is >= 0 the scale will be aligned to a
-   border of the contents rectangle of the canvas. If
-   alignment() is QwtScaleDraw::LeftScale, the scale will
-   be aligned to the right border, if it is QwtScaleDraw::TopScale
-   it will be aligned to the bottom (and vice versa),
-
-   If distance is < 0 the scale will be at the position().
-
-   \param distance Number of pixels between the canvas border and the
-                   backbone of the scale.
-
-   \sa setPosition(), borderDistance()
-*/
-void QwtPlotScaleItem::setBorderDistance( int distance )
-{
-    if ( distance < 0 )
-        distance = -1;
-
-    if ( distance != d_data->borderDistance )
-    {
-        d_data->borderDistance = distance;
-        itemChanged();
-    }
-}
-
-/*!
-   \return Distance from a canvas border
-   \sa setBorderDistance(), setPosition()
-*/
-int QwtPlotScaleItem::borderDistance() const
-{
-    return d_data->borderDistance;
-}
-
-/*!
-   Change the alignment of the scale
-
-   The alignment sets the orientation of the scale and the position of
-   the ticks:
-
-   - QwtScaleDraw::BottomScale: horizontal, ticks below
-   - QwtScaleDraw::TopScale: horizontal, ticks above
-   - QwtScaleDraw::LeftScale: vertical, ticks left
-   - QwtScaleDraw::RightScale: vertical, ticks right
-
-   For horizontal scales the position corresponds to QwtPlotItem::yAxis(),
-   otherwise to QwtPlotItem::xAxis().
-
-   \sa scaleDraw(), QwtScaleDraw::alignment(), setPosition()
-*/
-void QwtPlotScaleItem::setAlignment( QwtScaleDraw::Alignment alignment )
-{
-    QwtScaleDraw *sd = d_data->scaleDraw;
-    if ( sd->alignment() != alignment )
-    {
-        sd->setAlignment( alignment );
-        itemChanged();
-    }
-}
-
-/*!
-  \brief Draw the scale
-*/
-void QwtPlotScaleItem::draw( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect ) const
-{
-    QwtScaleDraw *sd = d_data->scaleDraw;
-
-    if ( d_data->scaleDivFromAxis )
-    {
-        const QwtInterval interval = 
-            d_data->scaleInterval( canvasRect, xMap, yMap );
-
-        if ( interval != sd->scaleDiv().interval() )
-        {
-            QwtScaleDiv scaleDiv = sd->scaleDiv();
-            scaleDiv.setInterval( interval );
-            sd->setScaleDiv( scaleDiv );
-        }
-    }
-
-    QPen pen = painter->pen();
-    pen.setStyle( Qt::SolidLine );
-    painter->setPen( pen );
-
-    if ( sd->orientation() == Qt::Horizontal )
-    {
-        double y;
-        if ( d_data->borderDistance >= 0 )
-        {
-            if ( sd->alignment() == QwtScaleDraw::BottomScale )
-                y = canvasRect.top() + d_data->borderDistance;
-            else
-            {
-                y = canvasRect.bottom() - d_data->borderDistance;
-            }
-
-        }
-        else
-        {
-            y = yMap.transform( d_data->position );
-        }
-
-        if ( y < canvasRect.top() || y > canvasRect.bottom() )
-            return;
-
-        sd->move( canvasRect.left(), y );
-        sd->setLength( canvasRect.width() - 1 );
-
-        QwtTransform *transform = NULL;
-        if ( xMap.transformation() )
-            transform = xMap.transformation()->copy();
-
-        sd->setTransformation( transform );
-    }
-    else // == Qt::Vertical
-    {
-        double x;
-        if ( d_data->borderDistance >= 0 )
-        {
-            if ( sd->alignment() == QwtScaleDraw::RightScale )
-                x = canvasRect.left() + d_data->borderDistance;
-            else
-            {
-                x = canvasRect.right() - d_data->borderDistance;
-            }
-        }
-        else
-        {
-            x = xMap.transform( d_data->position );
-        }
-        if ( x < canvasRect.left() || x > canvasRect.right() )
-            return;
-
-        sd->move( x, canvasRect.top() );
-        sd->setLength( canvasRect.height() - 1 );
-
-        QwtTransform *transform = NULL;
-        if ( yMap.transformation() )
-            transform = yMap.transformation()->copy();
-
-        sd->setTransformation( transform );
-    }
-
-    painter->setFont( d_data->font );
-
-    sd->draw( painter, d_data->palette );
-}
-
-/*!
-   \brief Update the item to changes of the axes scale division
-
-   In case of isScaleDivFromAxis(), the scale draw is synchronized
-   to the correspond axis.
-
-   \param xScaleDiv Scale division of the x-axis
-   \param yScaleDiv Scale division of the y-axis
-
-   \sa QwtPlot::updateAxes()
-*/
-
-void QwtPlotScaleItem::updateScaleDiv( const QwtScaleDiv& xScaleDiv,
-    const QwtScaleDiv& yScaleDiv )
-{
-    QwtScaleDraw *scaleDraw = d_data->scaleDraw;
-
-    if ( d_data->scaleDivFromAxis && scaleDraw )
-    {
-        const QwtScaleDiv &scaleDiv = 
-            scaleDraw->orientation() == Qt::Horizontal ? xScaleDiv : yScaleDiv;
-
-        const QwtPlot *plt = plot();
-        if ( plt != NULL )
-        {
-            const QRectF canvasRect = plt->canvas()->contentsRect();
-
-            const QwtInterval interval = d_data->scaleInterval( 
-                canvasRect, plt->canvasMap( xAxis() ), plt->canvasMap( yAxis() ) );
-
-            QwtScaleDiv sd = scaleDiv;
-            sd.setInterval( interval );
-
-            if ( sd != scaleDraw->scaleDiv() )
-            {
-                // the internal label cache of QwtScaleDraw
-                // is cleared here, so better avoid pointless
-                // assignments.
-
-                scaleDraw->setScaleDiv( sd );
-            }
-        }
-        else
-        {
-            scaleDraw->setScaleDiv( scaleDiv );
-        }
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_scaleitem.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_scaleitem.h
deleted file mode 100644
index 5490c2b3f07c681af4d431906131454fde2471e4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_scaleitem.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_SCALE_ITEM_H
-#define QWT_PLOT_SCALE_ITEM_H
-
-#include "qwt_global.h"
-#include "qwt_plot_item.h"
-#include "qwt_scale_draw.h"
-
-class QPalette;
-
-/*!
-  \brief A class which draws a scale inside the plot canvas
-
-  QwtPlotScaleItem can be used to draw an axis inside the plot canvas.
-  It might by synchronized to one of the axis of the plot, but can
-  also display its own ticks and labels.
-
-  It is allowed to synchronize the scale item with a disabled axis.
-  In plots with vertical and horizontal scale items, it might be
-  necessary to remove ticks at the intersections, by overloading
-  updateScaleDiv().
-
-  The scale might be at a specific position (f.e 0.0) or it might be
-  aligned to a canvas border.
-
-  \par Example
-  The following example shows how to replace the left axis, by a scale item
-  at the x position 0.0.
-  \verbatim
-QwtPlotScaleItem *scaleItem =
-    new QwtPlotScaleItem(QwtScaleDraw::RightScale, 0.0);
-scaleItem->setFont(plot->axisWidget(QwtPlot::yLeft)->font());
-scaleItem->attach(plot);
-
-plot->enableAxis(QwtPlot::yLeft, false);
-\endverbatim
-*/
-
-class QWT_EXPORT QwtPlotScaleItem: public QwtPlotItem
-{
-public:
-    explicit QwtPlotScaleItem(
-        QwtScaleDraw::Alignment = QwtScaleDraw::BottomScale,
-        const double pos = 0.0 );
-
-    virtual ~QwtPlotScaleItem();
-
-    virtual int rtti() const;
-
-    void setScaleDiv( const QwtScaleDiv& );
-    const QwtScaleDiv& scaleDiv() const;
-
-    void setScaleDivFromAxis( bool on );
-    bool isScaleDivFromAxis() const;
-
-    void setPalette( const QPalette & );
-    QPalette palette() const;
-
-    void setFont( const QFont& );
-    QFont font() const;
-
-    void setScaleDraw( QwtScaleDraw * );
-
-    const QwtScaleDraw *scaleDraw() const;
-    QwtScaleDraw *scaleDraw();
-
-    void setPosition( double pos );
-    double position() const;
-
-    void setBorderDistance( int numPixels );
-    int borderDistance() const;
-
-    void setAlignment( QwtScaleDraw::Alignment );
-
-    virtual void draw( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &rect ) const;
-
-    virtual void updateScaleDiv( const QwtScaleDiv &, const QwtScaleDiv & );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_seriesitem.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_seriesitem.cpp
deleted file mode 100644
index a2259572b45e7e5166f14b88241d89e97176c323..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_seriesitem.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_seriesitem.h"
-
-class QwtPlotSeriesItem::PrivateData
-{
-public:
-    PrivateData():
-        orientation( Qt::Vertical )
-    {
-    }
-
-    Qt::Orientation orientation;
-};
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotSeriesItem::QwtPlotSeriesItem( const QwtText &title ):
-    QwtPlotItem( title )
-{
-    d_data = new PrivateData();
-    setItemInterest( QwtPlotItem::ScaleInterest, true );
-}
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotSeriesItem::QwtPlotSeriesItem( const QString &title ):
-    QwtPlotItem( QwtText( title ) )
-{
-    d_data = new PrivateData();
-}
-
-//! Destructor
-QwtPlotSeriesItem::~QwtPlotSeriesItem()
-{
-    delete d_data;
-}
-
-/*!
-  Set the orientation of the item.
-
-  The orientation() might be used in specific way by a plot item.
-  F.e. a QwtPlotCurve uses it to identify how to display the curve
-  int QwtPlotCurve::Steps or QwtPlotCurve::Sticks style.
-
-  \sa orientation()
-*/
-void QwtPlotSeriesItem::setOrientation( Qt::Orientation orientation )
-{
-    if ( d_data->orientation != orientation )
-    {
-        d_data->orientation = orientation;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Orientation of the plot item
-  \sa setOrientation()
-*/
-Qt::Orientation QwtPlotSeriesItem::orientation() const
-{
-    return d_data->orientation;
-}
-
-/*!
-  \brief Draw the complete series
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rectangle of the canvas
-*/
-void QwtPlotSeriesItem::draw( QPainter *painter,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect ) const
-{
-    drawSeries( painter, xMap, yMap, canvasRect, 0, -1 );
-}
-
-QRectF QwtPlotSeriesItem::boundingRect() const
-{
-    return dataRect();
-}
-
-void QwtPlotSeriesItem::updateScaleDiv(
-    const QwtScaleDiv &xScaleDiv, const QwtScaleDiv &yScaleDiv )
-{   
-    const QRectF rect = QRectF(
-        xScaleDiv.lowerBound(), yScaleDiv.lowerBound(),
-        xScaleDiv.range(), yScaleDiv.range() );
-        
-    setRectOfInterest( rect );
-}   
-
-void QwtPlotSeriesItem::dataChanged()
-{
-    itemChanged();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_seriesitem.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_seriesitem.h
deleted file mode 100644
index 72f22f1152b8ece8f2f1558901aedc6150a7058c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_seriesitem.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_SERIES_ITEM_H
-#define QWT_PLOT_SERIES_ITEM_H
-
-#include "qwt_global.h"
-#include "qwt_plot_item.h"
-#include "qwt_scale_div.h"
-#include "qwt_series_data.h"
-#include "qwt_series_store.h"
-
-/*!
-  \brief Base class for plot items representing a series of samples
-*/
-class QWT_EXPORT QwtPlotSeriesItem: public QwtPlotItem,
-    public virtual QwtAbstractSeriesStore
-{
-public:
-    explicit QwtPlotSeriesItem( const QString &title = QString::null );
-    explicit QwtPlotSeriesItem( const QwtText &title );
-
-    virtual ~QwtPlotSeriesItem();
-
-    void setOrientation( Qt::Orientation );
-    Qt::Orientation orientation() const;
-
-    virtual void draw( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF & ) const;
-
-    /*!
-      Draw a subset of the samples
-
-      \param painter Painter
-      \param xMap Maps x-values into pixel coordinates.
-      \param yMap Maps y-values into pixel coordinates.
-      \param canvasRect Contents rectangle of the canvas
-      \param from Index of the first point to be painted
-      \param to Index of the last point to be painted. If to < 0 the
-             curve will be painted to its last point.
-    */
-    virtual void drawSeries( QPainter *painter,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const = 0;
-
-    virtual QRectF boundingRect() const;
-
-    virtual void updateScaleDiv( 
-        const QwtScaleDiv &, const QwtScaleDiv & );
-
-protected:
-    virtual void dataChanged();
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_shapeitem.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_shapeitem.cpp
deleted file mode 100644
index cae1487ccf6a1267c67990ca12de43ffd92195e2..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_shapeitem.cpp
+++ /dev/null
@@ -1,497 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_shapeitem.h"
-#include "qwt_scale_map.h"
-#include "qwt_painter.h"
-#include "qwt_curve_fitter.h"
-#include "qwt_clipper.h"
-
-static QPainterPath qwtTransformPath( const QwtScaleMap &xMap,
-        const QwtScaleMap &yMap, const QPainterPath &path, bool doAlign )
-{
-    QPainterPath shape;
-    shape.setFillRule( path.fillRule() );
-
-    for ( int i = 0; i < path.elementCount(); i++ )
-    {
-        const QPainterPath::Element &element = path.elementAt( i );
-
-        double x = xMap.transform( element.x );
-        double y = yMap.transform( element.y );
-
-        switch( element.type )
-        {
-            case QPainterPath::MoveToElement:
-            {
-                if ( doAlign )
-                {
-                    x = qRound( x );
-                    y = qRound( y );
-                }
-
-                shape.moveTo( x, y );
-                break;
-            }
-            case QPainterPath::LineToElement:
-            {
-                if ( doAlign )
-                {
-                    x = qRound( x );
-                    y = qRound( y );
-                }
-
-                shape.lineTo( x, y );
-                break;
-            }
-            case QPainterPath::CurveToElement:
-            {
-                const QPainterPath::Element& element1 = path.elementAt( ++i );
-                const double x1 = xMap.transform( element1.x );
-                const double y1 = yMap.transform( element1.y );
-
-                const QPainterPath::Element& element2 = path.elementAt( ++i );
-                const double x2 = xMap.transform( element2.x );
-                const double y2 = yMap.transform( element2.y );
-
-                shape.cubicTo( x, y, x1, y1, x2, y2 );
-                break;
-            }
-            case QPainterPath::CurveToDataElement:
-            {
-                break;
-            }
-        }
-    }
-
-    return shape;
-}
-
-
-class QwtPlotShapeItem::PrivateData
-{
-public:
-    PrivateData():
-        legendMode( QwtPlotShapeItem::LegendColor ),
-        renderTolerance( 0.0 )
-    {
-    }
-
-    QwtPlotShapeItem::PaintAttributes paintAttributes;
-    QwtPlotShapeItem::LegendMode legendMode;
-
-    double renderTolerance;
-    QRectF boundingRect;
-
-    QPen pen;
-    QBrush brush;
-    QPainterPath shape;
-};
-
-/*!
-   \brief Constructor
-
-   Sets the following item attributes:
-   - QwtPlotItem::AutoScale: true
-   - QwtPlotItem::Legend:    false
-
-   \param title Title
-*/
-QwtPlotShapeItem::QwtPlotShapeItem( const QString& title ):
-    QwtPlotItem( QwtText( title ) )
-{
-    init();
-}
-
-/*!
-   \brief Constructor
-
-   Sets the following item attributes:
-   - QwtPlotItem::AutoScale: true
-   - QwtPlotItem::Legend:    false
-
-   \param title Title
-*/
-QwtPlotShapeItem::QwtPlotShapeItem( const QwtText& title ):
-    QwtPlotItem( title )
-{
-    init();
-}
-
-//! Destructor
-QwtPlotShapeItem::~QwtPlotShapeItem()
-{
-    delete d_data;
-}
-
-void QwtPlotShapeItem::init()
-{
-    d_data = new PrivateData();
-    d_data->boundingRect = QwtPlotItem::boundingRect();
-
-    setItemAttribute( QwtPlotItem::AutoScale, true );
-    setItemAttribute( QwtPlotItem::Legend, false );
-
-    setZ( 8.0 );
-}
-
-//! \return QwtPlotItem::Rtti_PlotShape
-int QwtPlotShapeItem::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotShape;
-}
-
-/*!
-  Specify an attribute how to draw the shape
-
-  \param attribute Paint attribute
-  \param on On/Off
-  \sa testPaintAttribute()
-*/
-void QwtPlotShapeItem::setPaintAttribute( PaintAttribute attribute, bool on )
-{
-    if ( on )
-        d_data->paintAttributes |= attribute;
-    else
-        d_data->paintAttributes &= ~attribute;
-}
-
-/*!
-  \return True, when attribute is enabled
-  \sa setPaintAttribute()
-*/
-bool QwtPlotShapeItem::testPaintAttribute( PaintAttribute attribute ) const
-{
-    return ( d_data->paintAttributes & attribute );
-}
-
-/*!
-  Set the mode how to represent the item on the legend
-
-  \param mode Mode
-  \sa legendMode()
- */
-void QwtPlotShapeItem::setLegendMode( LegendMode mode )
-{
-    if ( mode != d_data->legendMode )
-    {
-        d_data->legendMode = mode;
-        legendChanged();
-    }
-}
-
-/*!
-  \return Mode how to represent the item on the legend
-  \sa legendMode()
- */
-QwtPlotShapeItem::LegendMode QwtPlotShapeItem::legendMode() const
-{
-    return d_data->legendMode;
-}
-
-//! Bounding rectangle of the shape
-QRectF QwtPlotShapeItem::boundingRect() const
-{
-    return d_data->boundingRect;
-}
-
-/*!
-  \brief Set a path built from a rectangle
-
-  \param rect Rectangle
-  \sa setShape(), setPolygon(), shape()
- */
-void QwtPlotShapeItem::setRect( const QRectF &rect ) 
-{
-    QPainterPath path;
-    path.addRect( rect );
-
-    setShape( path );
-}
-
-/*!
-  \brief Set a path built from a polygon
-
-  \param polygon Polygon
-  \sa setShape(), setRect(), shape()
- */
-void QwtPlotShapeItem::setPolygon( const QPolygonF &polygon )
-{
-    QPainterPath shape;
-    shape.addPolygon( polygon );
-
-    setShape( shape );
-}
-
-/*!
-  \brief Set the shape to be displayed
-
-  \param shape Shape
-  \sa setShape(), shape()
- */
-void QwtPlotShapeItem::setShape( const QPainterPath &shape )
-{
-    if ( shape != d_data->shape )
-    {
-        d_data->shape = shape;
-        if ( shape.isEmpty() )
-        {
-            d_data->boundingRect = QwtPlotItem::boundingRect();
-        }
-        else
-        {
-            d_data->boundingRect = shape.boundingRect();
-        }
-
-        itemChanged();
-    }
-}
-
-/*!
-  \return Shape to be displayed
-  \sa setShape()
- */
-QPainterPath QwtPlotShapeItem::shape() const
-{
-    return d_data->shape;
-}
-
-/*! 
-  Build and assign a pen
-    
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-    
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-    
-  \sa pen(), brush()
- */ 
-void QwtPlotShapeItem::setPen( const QColor &color, qreal width, Qt::PenStyle style )
-{   
-    setPen( QPen( color, width, style ) );
-}
-
-/*!
-  \brief Assign a pen
-
-  The pen is used to draw the outline of the shape
-
-  \param pen Pen
-  \sa pen(), brush()
-*/
-void QwtPlotShapeItem::setPen( const QPen &pen )
-{
-    if ( pen != d_data->pen )
-    {
-        d_data->pen = pen;
-        itemChanged();
-    }
-}
-
-/*!
-    \return Pen used to draw the outline of the shape
-    \sa setPen(), brush()
-*/
-QPen QwtPlotShapeItem::pen() const
-{
-    return d_data->pen;
-}
-
-/*!
-  Assign a brush.
-
-  The brush is used to fill the path
-
-  \param brush Brush
-  \sa brush(), pen()
-*/
-void QwtPlotShapeItem::setBrush( const QBrush &brush )
-{
-    if ( brush != d_data->brush )
-    {
-        d_data->brush = brush;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Brush used to fill the shape
-  \sa setBrush(), pen()
-*/
-QBrush QwtPlotShapeItem::brush() const
-{
-    return d_data->brush;
-}
-
-/*!
-  \brief Set the tolerance for the weeding optimization
-
-  After translating the shape into target device coordinate 
-  ( usually widget geometries ) the painter path can be simplified
-  by a point weeding algorithm ( Douglas-Peucker ).
-
-  For shapes built from curves and ellipses weeding might
-  have the opposite effect because they have to be expanded
-  to polygons.
-
-  \param tolerance Accepted error when reducing the number of points
-                   A value <= 0.0 disables weeding.
-
-  \sa renderTolerance(), QwtWeedingCurveFitter
- */
-void QwtPlotShapeItem::setRenderTolerance( double tolerance )
-{
-    tolerance = qMax( tolerance, 0.0 );
-
-    if ( tolerance != d_data->renderTolerance )
-    {
-        d_data->renderTolerance = tolerance;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Tolerance for the weeding optimization
-  \sa setRenderTolerance()
- */
-double QwtPlotShapeItem::renderTolerance() const
-{
-    return d_data->renderTolerance;
-}
-
-/*!
-  Draw the shape item
-
-  \param painter Painter
-  \param xMap X-Scale Map
-  \param yMap Y-Scale Map
-  \param canvasRect Contents rect of the plot canvas
-*/
-void QwtPlotShapeItem::draw( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect ) const
-{
-    if ( d_data->shape.isEmpty() )
-        return;
-
-    if ( d_data->pen.style() == Qt::NoPen 
-        && d_data->brush.style() == Qt::NoBrush )
-    {
-        return;
-    }
-
-    const QRectF cr = QwtScaleMap::invTransform(
-        xMap, yMap, canvasRect.toRect() );
-
-    const QRectF &br = d_data->boundingRect;
-
-    if ( ( br.left() > cr.right() ) || ( br.right() < cr.left() )
-        || ( br.top() > cr.bottom() ) || ( br.bottom() < cr.top() ) )
-    {
-        // outside the visisble area
-        return;
-    }
-
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    QPainterPath path = qwtTransformPath( xMap, yMap, 
-        d_data->shape, doAlign );
-
-    if ( testPaintAttribute( QwtPlotShapeItem::ClipPolygons ) )
-    {
-        qreal pw = qMax( qreal( 1.0 ), painter->pen().widthF());
-        QRectF clipRect = canvasRect.adjusted( -pw, -pw, pw, pw );
-
-        QPainterPath clippedPath;
-        clippedPath.setFillRule( path.fillRule() );
-
-        const QList<QPolygonF> polygons = path.toSubpathPolygons();
-        for ( int i = 0; i < polygons.size(); i++ )
-        {
-            const QPolygonF p = QwtClipper::clipPolygonF(
-                clipRect, polygons[i], true );
-
-            clippedPath.addPolygon( p );
-
-        }
-
-        path = clippedPath;
-    }
-
-    if ( d_data->renderTolerance > 0.0 )
-    {
-        QwtWeedingCurveFitter fitter( d_data->renderTolerance );
-
-        QPainterPath fittedPath;
-        fittedPath.setFillRule( path.fillRule() );
-
-        const QList<QPolygonF> polygons = path.toSubpathPolygons();
-        for ( int i = 0; i < polygons.size(); i++ )
-            fittedPath.addPolygon( fitter.fitCurve( polygons[ i ] ) );
-
-        path = fittedPath;
-    }
-
-    painter->setPen( d_data->pen );
-    painter->setBrush( d_data->brush );
-
-    painter->drawPath( path );
-}
-
-/*!
-  \return A rectangle filled with the color of the brush ( or the pen )
-
-  \param index Index of the legend entry 
-                ( usually there is only one )
-  \param size Icon size
-
-  \sa setLegendIconSize(), legendData()
-*/
-QwtGraphic QwtPlotShapeItem::legendIcon( int index,
-    const QSizeF &size ) const
-{
-    Q_UNUSED( index );
-
-    QwtGraphic icon;
-    icon.setDefaultSize( size );
-
-    if ( size.isEmpty() )
-        return icon;
-
-    if ( d_data->legendMode == QwtPlotShapeItem::LegendShape )
-    {
-        const QRectF &br = d_data->boundingRect;
-
-        QPainter painter( &icon );
-        painter.setRenderHint( QPainter::Antialiasing,
-            testRenderHint( QwtPlotItem::RenderAntialiased ) );
-
-        painter.translate( -br.topLeft() );
-
-        painter.setPen( d_data->pen );
-        painter.setBrush( d_data->brush );
-        painter.drawPath( d_data->shape );
-    }
-    else
-    {
-        QColor iconColor;
-        if ( d_data->brush.style() != Qt::NoBrush )
-            iconColor = d_data->brush.color();
-        else
-            iconColor = d_data->pen.color();
-
-        icon = defaultIcon( iconColor, size );
-    }
-
-    return icon;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_shapeitem.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_shapeitem.h
deleted file mode 100644
index f638dd1a73c20b41d11f53baf318c37f9682ba03..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_shapeitem.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_SHAPE_ITEM_H
-#define QWT_PLOT_SHAPE_ITEM_H
-
-#include "qwt_global.h"
-#include "qwt_plot_item.h"
-#include <qpainterpath.h>
-
-/*!
-  \brief A plot item, which displays any graphical shape, 
-         that can be defined by a QPainterPath
-
-  A QPainterPath is a shape composed from intersecting and uniting
-  regions, rectangles, ellipses or irregular areas defined by lines, and curves.
-  QwtPlotShapeItem displays a shape with a pen and brush.
-
-  QwtPlotShapeItem offers a couple of optimizations like clipping or weeding.
-  These algorithms need to convert the painter path into polygons that might be
-  less performant for paths built from curves and ellipses.
-
-  \sa QwtPlotZone
-*/
-class QWT_EXPORT QwtPlotShapeItem: public QwtPlotItem
-{
-public:
-    /*!
-        Attributes to modify the drawing algorithm.
-        The default disables all attributes
-
-        \sa setPaintAttribute(), testPaintAttribute()
-    */
-    enum PaintAttribute
-    {
-        /*!
-          Clip polygons before painting them. In situations, where points
-          are far outside the visible area (f.e when zooming deep) this
-          might be a substantial improvement for the painting performance
-
-          But polygon clipping will convert the painter path into
-          polygons what might introduce a negative impact on the
-          performance of paths composed from curves or ellipses.
-         */
-        ClipPolygons = 0x01,
-    };
-
-    //! Paint attributes
-    typedef QFlags<PaintAttribute> PaintAttributes;
-
-    //! Mode how to display the item on the legend
-    enum LegendMode
-    {
-        //! Display a scaled down version of the shape
-        LegendShape,
-
-        //! Display a filled rectangle 
-        LegendColor
-    };
-
-    explicit QwtPlotShapeItem( const QString &title = QString::null );
-    explicit QwtPlotShapeItem( const QwtText &title );
-
-    virtual ~QwtPlotShapeItem();
-
-    void setPaintAttribute( PaintAttribute, bool on = true );
-    bool testPaintAttribute( PaintAttribute ) const;
-
-    void setLegendMode( LegendMode );
-    LegendMode legendMode() const;
-
-    void setRect( const QRectF & );
-    void setPolygon( const QPolygonF & );
-
-    void setShape( const QPainterPath & );
-    QPainterPath shape() const;
-
-    void setPen( const QColor &, qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setPen( const QPen & );
-    QPen pen() const;
-
-    void setBrush( const QBrush & );
-    QBrush brush() const;
-
-    void setRenderTolerance( double );
-    double renderTolerance() const;
-
-    virtual QRectF boundingRect() const;
-
-    virtual void draw( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &rect ) const;
-
-    virtual QwtGraphic legendIcon( int index, const QSizeF & ) const;
-
-    virtual int rtti() const;
-
-private:
-    void init();
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrocurve.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrocurve.cpp
deleted file mode 100644
index 5b11d55031aa39c6b7a57fbe39a41bd22a3d0d6c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrocurve.cpp
+++ /dev/null
@@ -1,321 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_spectrocurve.h"
-#include "qwt_color_map.h"
-#include "qwt_scale_map.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-
-class QwtPlotSpectroCurve::PrivateData
-{
-public:
-    PrivateData():
-        colorRange( 0.0, 1000.0 ),
-        penWidth(0.0),
-        paintAttributes( QwtPlotSpectroCurve::ClipPoints )
-    {
-        colorMap = new QwtLinearColorMap();
-    }
-
-    ~PrivateData()
-    {
-        delete colorMap;
-    }
-
-    QwtColorMap *colorMap;
-    QwtInterval colorRange;
-    QVector<QRgb> colorTable;
-    double penWidth;
-    QwtPlotSpectroCurve::PaintAttributes paintAttributes;
-};
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotSpectroCurve::QwtPlotSpectroCurve( const QwtText &title ):
-    QwtPlotSeriesItem( title )
-{
-    init();
-}
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotSpectroCurve::QwtPlotSpectroCurve( const QString &title ):
-    QwtPlotSeriesItem( QwtText( title ) )
-{
-    init();
-}
-
-//! Destructor
-QwtPlotSpectroCurve::~QwtPlotSpectroCurve()
-{
-    delete d_data;
-}
-
-/*!
-  \brief Initialize data members
-*/
-void QwtPlotSpectroCurve::init()
-{
-    setItemAttribute( QwtPlotItem::Legend );
-    setItemAttribute( QwtPlotItem::AutoScale );
-
-    d_data = new PrivateData;
-    setData( new QwtPoint3DSeriesData() );
-
-    setZ( 20.0 );
-}
-
-//! \return QwtPlotItem::Rtti_PlotSpectroCurve
-int QwtPlotSpectroCurve::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotSpectroCurve;
-}
-
-/*!
-  Specify an attribute how to draw the curve
-
-  \param attribute Paint attribute
-  \param on On/Off
-  /sa PaintAttribute, testPaintAttribute()
-*/
-void QwtPlotSpectroCurve::setPaintAttribute( PaintAttribute attribute, bool on )
-{
-    if ( on )
-        d_data->paintAttributes |= attribute;
-    else
-        d_data->paintAttributes &= ~attribute;
-}
-
-/*!
-    \return True, when attribute is enabled
-    \sa PaintAttribute, setPaintAttribute()
-*/
-bool QwtPlotSpectroCurve::testPaintAttribute( PaintAttribute attribute ) const
-{
-    return ( d_data->paintAttributes & attribute );
-}
-
-/*!
-  Initialize data with an array of samples.
-  \param samples Vector of points
-*/
-void QwtPlotSpectroCurve::setSamples( const QVector<QwtPoint3D> &samples )
-{
-    setData( new QwtPoint3DSeriesData( samples ) );
-}
-
-/*!
-  Assign a series of samples
-    
-  setSamples() is just a wrapper for setData() without any additional
-  value - beside that it is easier to find for the developer.
-    
-  \param data Data
-  \warning The item takes ownership of the data object, deleting
-           it when its not used anymore. 
-*/
-void QwtPlotSpectroCurve::setSamples(
-    QwtSeriesData<QwtPoint3D> *data )
-{
-    setData( data );
-}  
-
-/*!
-  Change the color map
-
-  Often it is useful to display the mapping between intensities and
-  colors as an additional plot axis, showing a color bar.
-
-  \param colorMap Color Map
-
-  \sa colorMap(), setColorRange(), QwtColorMap::color(),
-      QwtScaleWidget::setColorBarEnabled(), QwtScaleWidget::setColorMap()
-*/
-void QwtPlotSpectroCurve::setColorMap( QwtColorMap *colorMap )
-{
-    if ( colorMap != d_data->colorMap )
-    {
-        delete d_data->colorMap;
-        d_data->colorMap = colorMap;
-    }
-
-    legendChanged();
-    itemChanged();
-}
-
-/*!
-   \return Color Map used for mapping the intensity values to colors
-   \sa setColorMap(), setColorRange(), QwtColorMap::color()
-*/
-const QwtColorMap *QwtPlotSpectroCurve::colorMap() const
-{
-    return d_data->colorMap;
-}
-
-/*!
-   Set the value interval, that corresponds to the color map
-
-   \param interval interval.minValue() corresponds to 0.0,
-                   interval.maxValue() to 1.0 on the color map.
-
-   \sa colorRange(), setColorMap(), QwtColorMap::color()
-*/
-void QwtPlotSpectroCurve::setColorRange( const QwtInterval &interval )
-{
-    if ( interval != d_data->colorRange )
-    {
-        d_data->colorRange = interval;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Value interval, that corresponds to the color map
-  \sa setColorRange(), setColorMap(), QwtColorMap::color()
-*/
-QwtInterval &QwtPlotSpectroCurve::colorRange() const
-{
-    return d_data->colorRange;
-}
-
-/*!
-  Assign a pen width
-
-  \param penWidth New pen width
-  \sa penWidth()
-*/
-void QwtPlotSpectroCurve::setPenWidth(double penWidth)
-{
-    if ( penWidth < 0.0 )
-        penWidth = 0.0;
-
-    if ( d_data->penWidth != penWidth )
-    {
-        d_data->penWidth = penWidth;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Pen width used to draw a dot
-  \sa setPenWidth()
-*/
-double QwtPlotSpectroCurve::penWidth() const
-{
-    return d_data->penWidth;
-}
-
-/*!
-  Draw a subset of the points
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rectangle of the canvas
-  \param from Index of the first sample to be painted
-  \param to Index of the last sample to be painted. If to < 0 the
-         series will be painted to its last sample.
-
-  \sa drawDots()
-*/
-void QwtPlotSpectroCurve::drawSeries( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    if ( !painter || dataSize() <= 0 )
-        return;
-
-    if ( to < 0 )
-        to = dataSize() - 1;
-
-    if ( from < 0 )
-        from = 0;
-
-    if ( from > to )
-        return;
-
-    drawDots( painter, xMap, yMap, canvasRect, from, to );
-}
-
-/*!
-  Draw a subset of the points
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rectangle of the canvas
-  \param from Index of the first sample to be painted
-  \param to Index of the last sample to be painted. If to < 0 the
-         series will be painted to its last sample.
-
-  \sa drawSeries()
-*/
-void QwtPlotSpectroCurve::drawDots( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    if ( !d_data->colorRange.isValid() )
-        return;
-
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    const QwtColorMap::Format format = d_data->colorMap->format();
-    if ( format == QwtColorMap::Indexed )
-        d_data->colorTable = d_data->colorMap->colorTable( d_data->colorRange );
-
-    const QwtSeriesData<QwtPoint3D> *series = data();
-
-    for ( int i = from; i <= to; i++ )
-    {
-        const QwtPoint3D sample = series->sample( i );
-
-        double xi = xMap.transform( sample.x() );
-        double yi = yMap.transform( sample.y() );
-        if ( doAlign )
-        {
-            xi = qRound( xi );
-            yi = qRound( yi );
-        }
-
-        if ( d_data->paintAttributes & QwtPlotSpectroCurve::ClipPoints )
-        {
-            if ( !canvasRect.contains( xi, yi ) )
-                continue;
-        }
-
-        if ( format == QwtColorMap::RGB )
-        {
-            const QRgb rgb = d_data->colorMap->rgb(
-                d_data->colorRange, sample.z() );
-
-            painter->setPen( QPen( QColor::fromRgba( rgb ), d_data->penWidth ) );
-        }
-        else
-        {
-            const unsigned char index = d_data->colorMap->colorIndex(
-                d_data->colorRange, sample.z() );
-
-            painter->setPen( QPen( QColor::fromRgba( d_data->colorTable[index] ), 
-                d_data->penWidth ) );
-        }
-
-        QwtPainter::drawPoint( painter, QPointF( xi, yi ) );
-    }
-
-    d_data->colorTable.clear();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrocurve.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrocurve.h
deleted file mode 100644
index 55508ad167cb06857587dfe79a20f90bce012a9c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrocurve.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_CURVE_3D_H
-#define QWT_PLOT_CURVE_3D_H
-
-#include "qwt_global.h"
-#include "qwt_plot_seriesitem.h"
-#include "qwt_series_data.h"
-
-class QwtSymbol;
-class QwtColorMap;
-
-/*!
-    \brief Curve that displays 3D points as dots, where the z coordinate is
-           mapped to a color.
-*/
-class QWT_EXPORT QwtPlotSpectroCurve: 
-    public QwtPlotSeriesItem, QwtSeriesStore<QwtPoint3D>
-{
-public:
-    //! Paint attributes
-    enum PaintAttribute
-    {
-        //! Clip points outside the canvas rectangle
-        ClipPoints = 1
-    };
-
-    //! Paint attributes
-    typedef QFlags<PaintAttribute> PaintAttributes;
-
-    explicit QwtPlotSpectroCurve( const QString &title = QString::null );
-    explicit QwtPlotSpectroCurve( const QwtText &title );
-
-    virtual ~QwtPlotSpectroCurve();
-
-    virtual int rtti() const;
-
-    void setPaintAttribute( PaintAttribute, bool on = true );
-    bool testPaintAttribute( PaintAttribute ) const;
-
-    void setSamples( const QVector<QwtPoint3D> & );
-    void setSamples( QwtSeriesData<QwtPoint3D> * );
-
-
-    void setColorMap( QwtColorMap * );
-    const QwtColorMap *colorMap() const;
-
-    void setColorRange( const QwtInterval & );
-    QwtInterval & colorRange() const;
-
-    virtual void drawSeries( QPainter *,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    void setPenWidth(double width);
-    double penWidth() const;
-
-protected:
-    virtual void drawDots( QPainter *,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-private:
-    void init();
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotSpectroCurve::PaintAttributes )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrogram.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrogram.cpp
deleted file mode 100644
index 41b0ca4bf665e4bfd8281f6b43e4b23b8efd65bc..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrogram.cpp
+++ /dev/null
@@ -1,676 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_spectrogram.h"
-#include "qwt_painter.h"
-#include "qwt_interval.h"
-#include "qwt_scale_map.h"
-#include "qwt_color_map.h"
-#include <qimage.h>
-#include <qpen.h>
-#include <qpainter.h>
-#include <qmath.h>
-#include <qalgorithms.h>
-#if QT_VERSION >= 0x040400
-#include <qthread.h>
-#include <qfuture.h>
-#include <qtconcurrentrun.h>
-#endif
-
-#define DEBUG_RENDER 0
-
-#if DEBUG_RENDER
-#include <QElapsedTimer>
-#endif
-
-class QwtPlotSpectrogram::PrivateData
-{
-public:
-    PrivateData():
-        data( NULL )
-    {
-        colorMap = new QwtLinearColorMap();
-        displayMode = ImageMode;
-
-        conrecFlags = QwtRasterData::IgnoreAllVerticesOnLevel;
-#if 0
-        conrecFlags |= QwtRasterData::IgnoreOutOfRange;
-#endif
-    }
-    ~PrivateData()
-    {
-        delete data;
-        delete colorMap;
-    }
-
-    QwtRasterData *data;
-    QwtColorMap *colorMap;
-    DisplayModes displayMode;
-
-    QList<double> contourLevels;
-    QPen defaultContourPen;
-    QwtRasterData::ConrecFlags conrecFlags;
-};
-
-/*!
-   Sets the following item attributes:
-   - QwtPlotItem::AutoScale: true
-   - QwtPlotItem::Legend:    false
-
-   The z value is initialized by 8.0.
-
-   \param title Title
-
-   \sa QwtPlotItem::setItemAttribute(), QwtPlotItem::setZ()
-*/
-QwtPlotSpectrogram::QwtPlotSpectrogram( const QString &title ):
-    QwtPlotRasterItem( title )
-{
-    d_data = new PrivateData();
-
-    setItemAttribute( QwtPlotItem::AutoScale, true );
-    setItemAttribute( QwtPlotItem::Legend, false );
-
-    setZ( 8.0 );
-}
-
-//! Destructor
-QwtPlotSpectrogram::~QwtPlotSpectrogram()
-{
-    delete d_data;
-}
-
-//! \return QwtPlotItem::Rtti_PlotSpectrogram
-int QwtPlotSpectrogram::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotSpectrogram;
-}
-
-/*!
-   The display mode controls how the raster data will be represented.
-
-   \param mode Display mode
-   \param on On/Off
-
-   The default setting enables ImageMode.
-
-   \sa DisplayMode, displayMode()
-*/
-void QwtPlotSpectrogram::setDisplayMode( DisplayMode mode, bool on )
-{
-    if ( on != bool( mode & d_data->displayMode ) )
-    {
-        if ( on )
-            d_data->displayMode |= mode;
-        else
-            d_data->displayMode &= ~mode;
-    }
-
-    legendChanged();
-    itemChanged();
-}
-
-/*!
-   The display mode controls how the raster data will be represented.
-
-   \param mode Display mode
-   \return true if mode is enabled
-*/
-bool QwtPlotSpectrogram::testDisplayMode( DisplayMode mode ) const
-{
-    return ( d_data->displayMode & mode );
-}
-
-/*!
-  Change the color map
-
-  Often it is useful to display the mapping between intensities and
-  colors as an additional plot axis, showing a color bar.
-
-  \param colorMap Color Map
-
-  \sa colorMap(), QwtScaleWidget::setColorBarEnabled(),
-      QwtScaleWidget::setColorMap()
-*/
-void QwtPlotSpectrogram::setColorMap( QwtColorMap *colorMap )
-{
-    if ( d_data->colorMap != colorMap )
-    {
-        delete d_data->colorMap;
-        d_data->colorMap = colorMap;
-    }
-
-    invalidateCache();
-
-    legendChanged();
-    itemChanged();
-}
-
-/*!
-   \return Color Map used for mapping the intensity values to colors
-   \sa setColorMap()
-*/
-const QwtColorMap *QwtPlotSpectrogram::colorMap() const
-{
-    return d_data->colorMap;
-}
-
-/*! 
-  Build and assign the default pen for the contour lines
-    
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-    
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-    
-  \sa pen(), brush()
- */ 
-void QwtPlotSpectrogram::setDefaultContourPen( 
-    const QColor &color, qreal width, Qt::PenStyle style )
-{   
-    setDefaultContourPen( QPen( color, width, style ) );
-}
-
-/*!
-   \brief Set the default pen for the contour lines
-
-   If the spectrogram has a valid default contour pen
-   a contour line is painted using the default contour pen.
-   Otherwise (pen.style() == Qt::NoPen) the pen is calculated
-   for each contour level using contourPen().
-
-   \sa defaultContourPen(), contourPen()
-*/
-void QwtPlotSpectrogram::setDefaultContourPen( const QPen &pen )
-{
-    if ( pen != d_data->defaultContourPen )
-    {
-        d_data->defaultContourPen = pen;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-   \return Default contour pen
-   \sa setDefaultContourPen()
-*/
-QPen QwtPlotSpectrogram::defaultContourPen() const
-{
-    return d_data->defaultContourPen;
-}
-
-/*!
-   \brief Calculate the pen for a contour line
-
-   The color of the pen is the color for level calculated by the color map
-
-   \param level Contour level
-   \return Pen for the contour line
-   \note contourPen is only used if defaultContourPen().style() == Qt::NoPen
-
-   \sa setDefaultContourPen(), setColorMap(), setContourLevels()
-*/
-QPen QwtPlotSpectrogram::contourPen( double level ) const
-{
-    if ( d_data->data == NULL || d_data->colorMap == NULL )
-        return QPen();
-
-    const QwtInterval intensityRange = d_data->data->interval(Qt::ZAxis);
-    const QColor c( d_data->colorMap->rgb( intensityRange, level ) );
-
-    return QPen( c );
-}
-
-/*!
-   Modify an attribute of the CONREC algorithm, used to calculate
-   the contour lines.
-
-   \param flag CONREC flag
-   \param on On/Off
-
-   \sa testConrecFlag(), renderContourLines(),
-       QwtRasterData::contourLines()
-*/
-void QwtPlotSpectrogram::setConrecFlag(
-    QwtRasterData::ConrecFlag flag, bool on )
-{
-    if ( bool( d_data->conrecFlags & flag ) == on )
-        return;
-
-    if ( on )
-        d_data->conrecFlags |= flag;
-    else
-        d_data->conrecFlags &= ~flag;
-
-    itemChanged();
-}
-
-/*!
-   Test an attribute of the CONREC algorithm, used to calculate
-   the contour lines.
-
-   \param flag CONREC flag
-   \return true, is enabled
-
-   The default setting enables QwtRasterData::IgnoreAllVerticesOnLevel
-
-   \sa setConrecClag(), renderContourLines(),
-       QwtRasterData::contourLines()
-*/
-bool QwtPlotSpectrogram::testConrecFlag(
-    QwtRasterData::ConrecFlag flag ) const
-{
-    return d_data->conrecFlags & flag;
-}
-
-/*!
-   Set the levels of the contour lines
-
-   \param levels Values of the contour levels
-   \sa contourLevels(), renderContourLines(),
-       QwtRasterData::contourLines()
-
-   \note contourLevels returns the same levels but sorted.
-*/
-void QwtPlotSpectrogram::setContourLevels( const QList<double> &levels )
-{
-    d_data->contourLevels = levels;
-    qSort( d_data->contourLevels );
-
-    legendChanged();
-    itemChanged();
-}
-
-/*!
-   \return Levels of the contour lines.
-
-   The levels are sorted in increasing order.
-
-   \sa contourLevels(), renderContourLines(),
-       QwtRasterData::contourLines()
-*/
-QList<double> QwtPlotSpectrogram::contourLevels() const
-{
-    return d_data->contourLevels;
-}
-
-/*!
-  Set the data to be displayed
-
-  \param data Spectrogram Data
-  \sa data()
-*/
-void QwtPlotSpectrogram::setData( QwtRasterData *data )
-{
-    if ( data != d_data->data )
-    {
-        delete d_data->data;
-        d_data->data = data;
-
-        invalidateCache();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Spectrogram data
-  \sa setData()
-*/
-const QwtRasterData *QwtPlotSpectrogram::data() const
-{
-    return d_data->data;
-}
-
-/*!
-  \return Spectrogram data
-  \sa setData()
-*/
-QwtRasterData *QwtPlotSpectrogram::data()
-{
-    return d_data->data;
-}
-
-/*!
-   \return Bounding interval for an axis
-
-   The default implementation returns the interval of the
-   associated raster data object.
-
-   \param axis X, Y, or Z axis
-   \sa QwtRasterData::interval()
-*/
-QwtInterval QwtPlotSpectrogram::interval(Qt::Axis axis) const
-{
-    if ( d_data->data == NULL )
-        return QwtInterval();
-
-    return d_data->data->interval( axis );
-}
-
-/*!
-   \brief Pixel hint
-
-   The geometry of a pixel is used to calculated the resolution and
-   alignment of the rendered image. 
-
-   The default implementation returns data()->pixelHint( rect );
-
-   \param area In most implementations the resolution of the data doesn't
-               depend on the requested area.
-
-   \return Bounding rectangle of a pixel
-
-   \sa QwtPlotRasterItem::pixelHint(), QwtRasterData::pixelHint(), 
-       render(), renderImage()
-*/
-QRectF QwtPlotSpectrogram::pixelHint( const QRectF &area ) const
-{
-    if ( d_data->data == NULL )
-        return QRectF();
-
-    return d_data->data->pixelHint( area );
-}
-
-/*!
-   \brief Render an image from data and color map.
-
-   For each pixel of area the value is mapped into a color.
-
-  \param xMap X-Scale Map
-  \param yMap Y-Scale Map
-  \param area Requested area for the image in scale coordinates
-  \param imageSize Size of the requested image
-
-   \return A QImage::Format_Indexed8 or QImage::Format_ARGB32 depending
-           on the color map.
-
-   \sa QwtRasterData::value(), QwtColorMap::rgb(),
-       QwtColorMap::colorIndex()
-*/
-QImage QwtPlotSpectrogram::renderImage(
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &area, const QSize &imageSize ) const
-{
-    if ( imageSize.isEmpty() || d_data->data == NULL 
-        || d_data->colorMap == NULL )
-    {
-        return QImage();
-    }
-
-    const QwtInterval intensityRange = d_data->data->interval( Qt::ZAxis );
-    if ( !intensityRange.isValid() )
-        return QImage();
-
-    QImage::Format format = ( d_data->colorMap->format() == QwtColorMap::RGB )
-        ? QImage::Format_ARGB32 : QImage::Format_Indexed8;
-
-    QImage image( imageSize, format );
-
-    if ( d_data->colorMap->format() == QwtColorMap::Indexed )
-        image.setColorTable( d_data->colorMap->colorTable( intensityRange ) );
-
-    d_data->data->initRaster( area, image.size() );
-
-#if DEBUG_RENDER
-    QElapsedTimer time;
-    time.start();
-#endif
-
-#if QT_VERSION >= 0x040400 && !defined(QT_NO_QFUTURE)
-    uint numThreads = renderThreadCount();
-
-    if ( numThreads <= 0 )
-        numThreads = QThread::idealThreadCount();
-
-    if ( numThreads <= 0 )
-        numThreads = 1;
-
-    const int numRows = imageSize.height() / numThreads;
-
-    QList< QFuture<void> > futures;
-    for ( uint i = 0; i < numThreads; i++ )
-    {
-        QRect tile( 0, i * numRows, image.width(), numRows );
-        if ( i == numThreads - 1 )
-        {
-            tile.setHeight( image.height() - i * numRows );
-            renderTile( xMap, yMap, tile, &image );
-        }
-        else
-        {
-            futures += QtConcurrent::run(
-                this, &QwtPlotSpectrogram::renderTile,
-                xMap, yMap, tile, &image );
-        }
-    }
-    for ( int i = 0; i < futures.size(); i++ )
-        futures[i].waitForFinished();
-
-#else // QT_VERSION < 0x040400
-    const QRect tile( 0, 0, image.width(), image.height() );
-    renderTile( xMap, yMap, tile, &image );
-#endif
-
-#if DEBUG_RENDER
-    const qint64 elapsed = time.elapsed();
-    qDebug() << "renderImage" << imageSize << elapsed;
-#endif
-
-    d_data->data->discardRaster();
-
-    return image;
-}
-
-/*!
-    \brief Render a tile of an image.
-
-    Rendering in tiles can be used to composite an image in parallel
-    threads.
-
-    \param xMap X-Scale Map
-    \param yMap Y-Scale Map
-    \param tile Geometry of the tile in image coordinates
-    \param image Image to be rendered
-*/
-void QwtPlotSpectrogram::renderTile(
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRect &tile, QImage *image ) const
-{
-    const QwtInterval range = d_data->data->interval( Qt::ZAxis );
-    if ( !range.isValid() )
-        return;
-
-    if ( d_data->colorMap->format() == QwtColorMap::RGB )
-    {
-        for ( int y = tile.top(); y <= tile.bottom(); y++ )
-        {
-            const double ty = yMap.invTransform( y );
-
-            QRgb *line = reinterpret_cast<QRgb *>( image->scanLine( y ) );
-            line += tile.left();
-
-            for ( int x = tile.left(); x <= tile.right(); x++ )
-            {
-                const double tx = xMap.invTransform( x );
-
-                *line++ = d_data->colorMap->rgb( range,
-                    d_data->data->value( tx, ty ) );
-            }
-        }
-    }
-    else if ( d_data->colorMap->format() == QwtColorMap::Indexed )
-    {
-        for ( int y = tile.top(); y <= tile.bottom(); y++ )
-        {
-            const double ty = yMap.invTransform( y );
-
-            unsigned char *line = image->scanLine( y );
-            line += tile.left();
-
-            for ( int x = tile.left(); x <= tile.right(); x++ )
-            {
-                const double tx = xMap.invTransform( x );
-
-                *line++ = d_data->colorMap->colorIndex( range,
-                    d_data->data->value( tx, ty ) );
-            }
-        }
-    }
-}
-
-/*!
-   \brief Return the raster to be used by the CONREC contour algorithm.
-
-   A larger size will improve the precision of the CONREC algorithm,
-   but will slow down the time that is needed to calculate the lines.
-
-   The default implementation returns rect.size() / 2 bounded to
-   the resolution depending on pixelSize().
-
-   \param area Rectangle, where to calculate the contour lines
-   \param rect Rectangle in pixel coordinates, where to paint the contour lines
-   \return Raster to be used by the CONREC contour algorithm.
-
-   \note The size will be bounded to rect.size().
-
-   \sa drawContourLines(), QwtRasterData::contourLines()
-*/
-QSize QwtPlotSpectrogram::contourRasterSize( 
-    const QRectF &area, const QRect &rect ) const
-{
-    QSize raster = rect.size() / 2;
-
-    const QRectF pixelRect = pixelHint( area );
-    if ( !pixelRect.isEmpty() )
-    {
-        const QSize res( qCeil( rect.width() / pixelRect.width() ),
-            qCeil( rect.height() / pixelRect.height() ) );
-        raster = raster.boundedTo( res );
-    }
-
-    return raster;
-}
-
-/*!
-   Calculate contour lines
-
-   \param rect Rectangle, where to calculate the contour lines
-   \param raster Raster, used by the CONREC algorithm
-   \return Calculated contour lines
-
-   \sa contourLevels(), setConrecFlag(),
-       QwtRasterData::contourLines()
-*/
-QwtRasterData::ContourLines QwtPlotSpectrogram::renderContourLines(
-    const QRectF &rect, const QSize &raster ) const
-{
-    if ( d_data->data == NULL )
-        return QwtRasterData::ContourLines();
-
-    return d_data->data->contourLines( rect, raster,
-        d_data->contourLevels, d_data->conrecFlags );
-}
-
-/*!
-   Paint the contour lines
-
-   \param painter Painter
-   \param xMap Maps x-values into pixel coordinates.
-   \param yMap Maps y-values into pixel coordinates.
-   \param contourLines Contour lines
-
-   \sa renderContourLines(), defaultContourPen(), contourPen()
-*/
-void QwtPlotSpectrogram::drawContourLines( QPainter *painter,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QwtRasterData::ContourLines &contourLines ) const
-{
-    if ( d_data->data == NULL )
-        return;
-
-    const int numLevels = d_data->contourLevels.size();
-    for ( int l = 0; l < numLevels; l++ )
-    {
-        const double level = d_data->contourLevels[l];
-
-        QPen pen = defaultContourPen();
-        if ( pen.style() == Qt::NoPen )
-            pen = contourPen( level );
-
-        if ( pen.style() == Qt::NoPen )
-            continue;
-
-        painter->setPen( pen );
-
-        const QPolygonF &lines = contourLines[level];
-        for ( int i = 0; i < lines.size(); i += 2 )
-        {
-            const QPointF p1( xMap.transform( lines[i].x() ),
-                yMap.transform( lines[i].y() ) );
-            const QPointF p2( xMap.transform( lines[i+1].x() ),
-                yMap.transform( lines[i+1].y() ) );
-
-            QwtPainter::drawLine( painter, p1, p2 );
-        }
-    }
-}
-
-/*!
-  \brief Draw the spectrogram
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rectangle of the canvas in painter coordinates
-
-  \sa setDisplayMode(), renderImage(),
-      QwtPlotRasterItem::draw(), drawContourLines()
-*/
-void QwtPlotSpectrogram::draw( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect ) const
-{
-    if ( d_data->displayMode & ImageMode )
-        QwtPlotRasterItem::draw( painter, xMap, yMap, canvasRect );
-
-    if ( d_data->displayMode & ContourMode )
-    {
-        // Add some pixels at the borders
-        const int margin = 2;
-        QRectF rasterRect( canvasRect.x() - margin, canvasRect.y() - margin,
-            canvasRect.width() + 2 * margin, canvasRect.height() + 2 * margin );
-
-        QRectF area = QwtScaleMap::invTransform( xMap, yMap, rasterRect );
-
-        const QRectF br = boundingRect();
-        if ( br.isValid() )
-        {
-            area &= br;
-            if ( area.isEmpty() )
-                return;
-
-            rasterRect = QwtScaleMap::transform( xMap, yMap, area );
-        }
-
-        QSize raster = contourRasterSize( area, rasterRect.toRect() );
-        raster = raster.boundedTo( rasterRect.toRect().size() );
-        if ( raster.isValid() )
-        {
-            const QwtRasterData::ContourLines lines =
-                renderContourLines( area, raster );
-
-            drawContourLines( painter, xMap, yMap, lines );
-        }
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrogram.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrogram.h
deleted file mode 100644
index 2eab0d8bc32023becabe00c636c02ee64995e50a..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_spectrogram.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_SPECTROGRAM_H
-#define QWT_PLOT_SPECTROGRAM_H
-
-#include "qwt_global.h"
-#include "qwt_raster_data.h"
-#include "qwt_plot_rasteritem.h"
-#include <qlist.h>
-
-class QwtColorMap;
-
-/*!
-  \brief A plot item, which displays a spectrogram
-
-  A spectrogram displays 3-dimensional data, where the 3rd dimension
-  ( the intensity ) is displayed using colors. The colors are calculated
-  from the values using a color map.
-
-  On multi-core systems the performance of the image composition
-  can often be improved by dividing the area into tiles - each of them
-  rendered in a different thread ( see QwtPlotItem::setRenderThreadCount() ).
-
-  In ContourMode contour lines are painted for the contour levels.
-
-  \image html spectrogram3.png
-
-  \sa QwtRasterData, QwtColorMap, QwtPlotItem::setRenderThreadCount()
-*/
-
-class QWT_EXPORT QwtPlotSpectrogram: public QwtPlotRasterItem
-{
-public:
-    /*!
-      The display mode controls how the raster data will be represented.
-      \sa setDisplayMode(), testDisplayMode()
-    */
-
-    enum DisplayMode
-    {
-        //! The values are mapped to colors using a color map.
-        ImageMode = 0x01,
-
-        //! The data is displayed using contour lines
-        ContourMode = 0x02
-    };
-
-    //! Display modes
-    typedef QFlags<DisplayMode> DisplayModes;
-
-    explicit QwtPlotSpectrogram( const QString &title = QString::null );
-    virtual ~QwtPlotSpectrogram();
-
-    void setDisplayMode( DisplayMode, bool on = true );
-    bool testDisplayMode( DisplayMode ) const;
-
-    void setData( QwtRasterData *data );
-    const QwtRasterData *data() const;
-    QwtRasterData *data();
-
-    void setColorMap( QwtColorMap * );
-    const QwtColorMap *colorMap() const;
-
-    virtual QwtInterval interval(Qt::Axis) const;
-    virtual QRectF pixelHint( const QRectF & ) const;
-
-    void setDefaultContourPen( const QColor &, 
-        qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setDefaultContourPen( const QPen & );
-    QPen defaultContourPen() const;
-
-    virtual QPen contourPen( double level ) const;
-
-    void setConrecFlag( QwtRasterData::ConrecFlag, bool on );
-    bool testConrecFlag( QwtRasterData::ConrecFlag ) const;
-
-    void setContourLevels( const QList<double> & );
-    QList<double> contourLevels() const;
-
-    virtual int rtti() const;
-
-    virtual void draw( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &rect ) const;
-
-protected:
-    virtual QImage renderImage(
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &area, const QSize &imageSize ) const;
-
-    virtual QSize contourRasterSize(
-        const QRectF &, const QRect & ) const;
-
-    virtual QwtRasterData::ContourLines renderContourLines(
-        const QRectF &rect, const QSize &raster ) const;
-
-    virtual void drawContourLines( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QwtRasterData::ContourLines& lines ) const;
-
-    void renderTile( const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRect &imageRect, QImage *image ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotSpectrogram::DisplayModes )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_svgitem.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_svgitem.cpp
deleted file mode 100644
index 8e22ab3d9ae395cc6417ca98c27217ddb761840c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_svgitem.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_svgitem.h"
-#include "qwt_scale_map.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-#include <qsvgrenderer.h>
-
-class QwtPlotSvgItem::PrivateData
-{
-public:
-    PrivateData()
-    {
-    }
-
-    QRectF boundingRect;
-    QSvgRenderer renderer;
-};
-
-/*!
-   \brief Constructor
-
-   Sets the following item attributes:
-   - QwtPlotItem::AutoScale: true
-   - QwtPlotItem::Legend:    false
-
-   \param title Title
-*/
-QwtPlotSvgItem::QwtPlotSvgItem( const QString& title ):
-    QwtPlotItem( QwtText( title ) )
-{
-    init();
-}
-
-/*!
-   \brief Constructor
-
-   Sets the following item attributes:
-   - QwtPlotItem::AutoScale: true
-   - QwtPlotItem::Legend:    false
-
-   \param title Title
-*/
-QwtPlotSvgItem::QwtPlotSvgItem( const QwtText& title ):
-    QwtPlotItem( title )
-{
-    init();
-}
-
-//! Destructor
-QwtPlotSvgItem::~QwtPlotSvgItem()
-{
-    delete d_data;
-}
-
-void QwtPlotSvgItem::init()
-{
-    d_data = new PrivateData();
-    d_data->boundingRect = QwtPlotItem::boundingRect();
-
-    setItemAttribute( QwtPlotItem::AutoScale, true );
-    setItemAttribute( QwtPlotItem::Legend, false );
-
-    setZ( 8.0 );
-}
-
-//! \return QwtPlotItem::Rtti_PlotSVG
-int QwtPlotSvgItem::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotSVG;
-}
-
-/*!
-   Load a SVG file
-
-   \param rect Bounding rectangle
-   \param fileName SVG file name
-
-   \return true, if the SVG file could be loaded
-*/
-bool QwtPlotSvgItem::loadFile( const QRectF &rect,
-    const QString &fileName )
-{
-    d_data->boundingRect = rect;
-    const bool ok = d_data->renderer.load( fileName );
-
-    legendChanged();
-    itemChanged();
-
-    return ok;
-}
-
-/*!
-   Load SVG data
-
-   \param rect Bounding rectangle
-   \param data in SVG format
-
-   \return true, if the SVG data could be loaded
-*/
-bool QwtPlotSvgItem::loadData( const QRectF &rect,
-    const QByteArray &data )
-{
-    d_data->boundingRect = rect;
-    const bool ok = d_data->renderer.load( data );
-
-    legendChanged();
-    itemChanged();
-
-    return ok;
-}
-
-//! Bounding rectangle of the item
-QRectF QwtPlotSvgItem::boundingRect() const
-{
-    return d_data->boundingRect;
-}
-
-//! \return Renderer used to render the SVG data
-const QSvgRenderer &QwtPlotSvgItem::renderer() const
-{
-    return d_data->renderer;
-}
-
-//! \return Renderer used to render the SVG data
-QSvgRenderer &QwtPlotSvgItem::renderer()
-{
-    return d_data->renderer;
-}
-
-/*!
-  Draw the SVG item
-
-  \param painter Painter
-  \param xMap X-Scale Map
-  \param yMap Y-Scale Map
-  \param canvasRect Contents rect of the plot canvas
-*/
-void QwtPlotSvgItem::draw( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect ) const
-{
-    const QRectF cRect = QwtScaleMap::invTransform(
-        xMap, yMap, canvasRect.toRect() );
-    const QRectF bRect = boundingRect();
-    if ( bRect.isValid() && cRect.isValid() )
-    {
-        QRectF rect = bRect;
-        if ( bRect.contains( cRect ) )
-            rect = cRect;
-
-        const QRectF r = QwtScaleMap::transform( xMap, yMap, rect );
-        render( painter, viewBox( rect ), r );
-    }
-}
-
-/*!
-  Render the SVG data
-
-  \param painter Painter
-  \param viewBox View Box, see QSvgRenderer::viewBox()
-  \param rect Target rectangle on the paint device
-*/
-void QwtPlotSvgItem::render( QPainter *painter,
-    const QRectF &viewBox, const QRectF &rect ) const
-{
-    if ( !viewBox.isValid() )
-        return;
-
-    QRectF r = rect;
-
-    if ( QwtPainter::roundingAlignment( painter ) )
-    {
-        r.setLeft ( qRound( r.left() ) );
-        r.setRight ( qRound( r.right() ) );
-        r.setTop ( qRound( r.top() ) );
-        r.setBottom ( qRound( r.bottom() ) );
-    }
-
-    d_data->renderer.setViewBox( viewBox );
-    d_data->renderer.render( painter, r );
-}
-
-/*!
-  Calculate the view box from rect and boundingRect().
-
-  \param rect Rectangle in scale coordinates
-  \return View box, see QSvgRenderer::viewBox()
-*/
-QRectF QwtPlotSvgItem::viewBox( const QRectF &rect ) const
-{
-    const QSize sz = d_data->renderer.defaultSize();
-    const QRectF br = boundingRect();
-
-    if ( !rect.isValid() || !br.isValid() || sz.isNull() )
-        return QRectF();
-
-    QwtScaleMap xMap;
-    xMap.setScaleInterval( br.left(), br.right() );
-    xMap.setPaintInterval( 0, sz.width() );
-
-    QwtScaleMap yMap;
-    yMap.setScaleInterval( br.top(), br.bottom() );
-    yMap.setPaintInterval( sz.height(), 0 );
-
-    const double x1 = xMap.transform( rect.left() );
-    const double x2 = xMap.transform( rect.right() );
-    const double y1 = yMap.transform( rect.bottom() );
-    const double y2 = yMap.transform( rect.top() );
-
-    return QRectF( x1, y1, x2 - x1, y2 - y1 );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_svgitem.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_svgitem.h
deleted file mode 100644
index 8a10caf1de0572d7e9a554a94ea0af4723dfa8b6..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_svgitem.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_SVGITEM_H
-#define QWT_PLOT_SVGITEM_H
-
-#include "qwt_global.h"
-#include "qwt_plot_item.h"
-#include <qstring.h>
-
-class QSvgRenderer;
-class QByteArray;
-
-/*!
-  \brief A plot item, which displays
-         data in Scalable Vector Graphics (SVG) format.
-
-  SVG images are often used to display maps
-*/
-
-class QWT_EXPORT QwtPlotSvgItem: public QwtPlotItem
-{
-public:
-    explicit QwtPlotSvgItem( const QString& title = QString::null );
-    explicit QwtPlotSvgItem( const QwtText& title );
-    virtual ~QwtPlotSvgItem();
-
-    bool loadFile( const QRectF&, const QString &fileName );
-    bool loadData( const QRectF&, const QByteArray & );
-
-    virtual QRectF boundingRect() const;
-
-    virtual void draw( QPainter *p,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &rect ) const;
-
-    virtual int rtti() const;
-
-protected:
-    const QSvgRenderer &renderer() const;
-    QSvgRenderer &renderer();
-
-    void render( QPainter *painter,
-        const QRectF &viewBox, const QRectF &rect ) const;
-
-    QRectF viewBox( const QRectF &area ) const;
-
-private:
-    void init();
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_textlabel.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_textlabel.cpp
deleted file mode 100644
index 478b66a33e287c696c67a323df4b90a43e865d45..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_textlabel.cpp
+++ /dev/null
@@ -1,272 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_textlabel.h"
-#include "qwt_painter.h"
-#include "qwt_scale_map.h"
-#include <qpainter.h>
-#include <qpixmap.h>
-#include <qmath.h>
-
-static QRect qwtItemRect( int renderFlags,
-    const QRectF &rect, const QSizeF &itemSize ) 
-{
-    int x;
-    if ( renderFlags & Qt::AlignLeft )
-    {
-        x = rect.left();
-    }
-    else if ( renderFlags & Qt::AlignRight )
-    {
-        x = rect.right() - itemSize.width();
-    }
-    else
-    {
-        x = rect.center().x() - 0.5 * itemSize.width();
-    }
-
-    int y;
-    if ( renderFlags & Qt::AlignTop ) 
-    {
-        y = rect.top();
-    }
-    else if ( renderFlags & Qt::AlignBottom )
-    {
-        y = rect.bottom() - itemSize.height();
-    }
-    else
-    {
-        y = rect.center().y() - 0.5 * itemSize.height();
-    }
-
-    return QRect( x, y, itemSize.width(), itemSize.height() );
-}
-
-class QwtPlotTextLabel::PrivateData
-{   
-public:
-    PrivateData():
-        margin( 5 )
-    {
-    }
-
-    QwtText text;
-    int margin;
-
-    QPixmap pixmap;
-};  
-
-/*!
-   \brief Constructor
-
-   Initializes an text label with an empty text
-
-   Sets the following item attributes:
-
-   - QwtPlotItem::AutoScale: true
-   - QwtPlotItem::Legend:    false
-
-   The z value is initialized by 150
-
-   \sa QwtPlotItem::setItemAttribute(), QwtPlotItem::setZ()
-*/
-
-QwtPlotTextLabel::QwtPlotTextLabel():
-    QwtPlotItem( QwtText( "Label" ) )
-{
-    d_data = new PrivateData;
-
-    setItemAttribute( QwtPlotItem::AutoScale, false );
-    setItemAttribute( QwtPlotItem::Legend, false );
-
-    setZ( 150 );
-}
-
-//! Destructor
-QwtPlotTextLabel::~QwtPlotTextLabel()
-{
-    delete d_data;
-}
-
-//! \return QwtPlotItem::Rtti_PlotTextLabel
-int QwtPlotTextLabel::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotTextLabel;
-}
-
-/*!
-  Set the text 
-
-  The label will be aligned to the plot canvas according to
-  the alignment flags of text.
-
-  \param text Text to be displayed
-
-  \sa text(), QwtText::renderFlags()
-*/
-void QwtPlotTextLabel::setText( const QwtText &text )
-{
-    if ( d_data->text != text )
-    {
-        d_data->text = text;
-
-        invalidateCache();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Text to be displayed
-  \sa setText()
-*/
-QwtText QwtPlotTextLabel::text() const
-{
-    return d_data->text;
-}
-
-/*!
-  Set the margin
-
-  The margin is the distance between the contentsRect()
-  of the plot canvas and the rectangle where the label can
-  be displayed.
-
-  \param margin Margin
-
-  \sa margin(), textRect()
- */
-void QwtPlotTextLabel::setMargin( int margin )
-{
-    margin = qMax( margin, 0 );
-    if ( d_data->margin != margin )
-    {
-        d_data->margin = margin;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Margin added to the contentsMargins() of the canvas
-  \sa setMargin()
-*/
-int QwtPlotTextLabel::margin() const
-{
-    return d_data->margin;
-}
-
-/*!
-  Draw the text label
-
-  \param painter Painter
-  \param xMap x Scale Map
-  \param yMap y Scale Map
-  \param canvasRect Contents rectangle of the canvas in painter coordinates
-
-  \sa textRect()
-*/
-
-void QwtPlotTextLabel::draw( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect ) const
-{
-    Q_UNUSED( xMap );
-    Q_UNUSED( yMap );
-
-    const int m = d_data->margin;
-
-    const QRectF rect = textRect( canvasRect.adjusted( m, m, -m, -m ),
-        d_data->text.textSize( painter->font() ) );
-
-    bool doCache = QwtPainter::roundingAlignment( painter );
-    if ( doCache )
-    {
-        switch( painter->paintEngine()->type() )
-        {
-            case QPaintEngine::Picture:
-            case QPaintEngine::User: // usually QwtGraphic
-            {
-                // don't use a cache for record/replay devices
-                doCache = false;
-                break;
-            }
-            default:;
-        }
-    }
-
-    if ( doCache )
-    {
-        // when the paint device is aligning it is not one
-        // where scalability matters ( PDF, SVG ).
-        // As rendering a text label is an expensive operation
-        // we use a cache.
-
-        int pw = 0;
-        if ( d_data->text.borderPen().style() != Qt::NoPen )
-            pw = qMax( d_data->text.borderPen().width(), 1 );
-
-        QRect pixmapRect; 
-        pixmapRect.setLeft( qFloor( rect.left() ) - pw );
-        pixmapRect.setTop( qFloor( rect.top() ) - pw );
-        pixmapRect.setRight( qCeil( rect.right() ) + pw );
-        pixmapRect.setBottom( qCeil( rect.bottom() ) + pw );
-        
-#define QWT_HIGH_DPI 1
-
-#if QT_VERSION >= 0x050100 && QWT_HIGH_DPI
-        const qreal pixelRatio = painter->device()->devicePixelRatio();
-        const QSize scaledSize = pixmapRect.size() * pixelRatio;
-#else
-        const QSize scaledSize = pixmapRect.size();
-#endif
-        if ( d_data->pixmap.isNull() || 
-            ( scaledSize != d_data->pixmap.size() )  )
-        {
-            d_data->pixmap = QPixmap( scaledSize );
-#if QT_VERSION >= 0x050100 && QWT_HIGH_DPI
-            d_data->pixmap.setDevicePixelRatio( pixelRatio );
-#endif
-            d_data->pixmap.fill( Qt::transparent );
-
-            const QRect r( pw, pw, 
-                pixmapRect.width() - 2 * pw, pixmapRect.height() - 2 * pw );
-
-            QPainter pmPainter( &d_data->pixmap );
-            d_data->text.draw( &pmPainter, r );
-        }
-
-        painter->drawPixmap( pixmapRect, d_data->pixmap );
-    }
-    else
-    {
-        d_data->text.draw( painter, rect );
-    }
-}
-
-/*!
-   \brief Align the text label
-
-   \param rect Canvas rectangle with margins subtracted
-   \param textSize Size required to draw the text
-
-   \return A rectangle aligned according the the alignment flags of
-           the text.
-
-   \sa setMargin(), QwtText::renderFlags(), QwtText::textSize()
- */
-QRectF QwtPlotTextLabel::textRect( 
-    const QRectF &rect, const QSizeF &textSize ) const
-{
-    return qwtItemRect( d_data->text.renderFlags(), rect, textSize );
-}
-
-//!  Invalidate all internal cache
-void QwtPlotTextLabel::invalidateCache()
-{
-    d_data->pixmap = QPixmap();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_textlabel.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_textlabel.h
deleted file mode 100644
index d79fdd1ac1e726f2907a90967b488148ff230737..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_textlabel.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_TEXT_LABEL_H
-#define QWT_PLOT_TEXT_LABEL_H 1
-
-#include "qwt_global.h"
-#include "qwt_plot_item.h"
-#include "qwt_text.h"
-
-/*!
-  \brief A plot item, which displays a text label
-
-  QwtPlotTextLabel displays a text label aligned to the plot canvas.
-
-  In opposite to QwtPlotMarker the position of the label is unrelated to
-  plot coordinates.
-    
-  As drawing a text is an expensive operation the label is cached
-  in a pixmap to speed up replots.
-
-  \par Example
-  The following code shows how to add a title.
-
-\verbatim
-    QwtText title( "Plot Title" );
-    title.setRenderFlags( Qt::AlignHCenter | Qt::AlignTop );
-
-    QFont font;
-    font.setBold( true );
-    title.setFont( font );
-
-    QwtPlotTextLabel *titleItem = new QwtPlotTextLabel();
-    titleItem->setText( title );
-    titleItem->attach( this );
-\endverbatim
-
-  \sa QwtPlotMarker
-*/  
-
-class QWT_EXPORT QwtPlotTextLabel: public QwtPlotItem
-{
-public:
-    QwtPlotTextLabel();
-    virtual ~QwtPlotTextLabel();
-
-    virtual int rtti() const;
-
-    void setText( const QwtText & );
-    QwtText text() const;
-
-    void setMargin( int margin );
-    int margin() const;
-
-    virtual QRectF textRect( const QRectF &, const QSizeF & ) const;
-
-protected:
-    virtual void draw( QPainter *,
-        const QwtScaleMap &, const QwtScaleMap &,
-        const QRectF &) const;
-
-    void invalidateCache();
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_tradingcurve.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_tradingcurve.cpp
deleted file mode 100644
index 7f20e878cfc63e7a1a7051fd088d89f288962b50..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_tradingcurve.cpp
+++ /dev/null
@@ -1,682 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_tradingcurve.h"
-#include "qwt_scale_map.h"
-#include "qwt_clipper.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-
-static inline bool qwtIsSampleInside( const QwtOHLCSample &sample,
-    double tMin, double tMax, double vMin, double vMax )
-{
-    const double t = sample.time;
-    const QwtInterval interval = sample.boundingInterval();
-
-    const bool isOffScreen = ( t < tMin ) || ( t > tMax )
-        || ( interval.maxValue() < vMin ) || ( interval.minValue() > vMax );
-
-    return !isOffScreen;
-}
-
-class QwtPlotTradingCurve::PrivateData
-{
-public:
-    PrivateData():
-        symbolStyle( QwtPlotTradingCurve::CandleStick ),
-        symbolExtent( 0.6 ),
-        minSymbolWidth( 2.0 ),
-        maxSymbolWidth( -1.0 ),
-        paintAttributes( QwtPlotTradingCurve::ClipSymbols )
-    {
-        symbolBrush[0] = QBrush( Qt::white );
-        symbolBrush[1] = QBrush( Qt::black );
-    }
-
-    QwtPlotTradingCurve::SymbolStyle symbolStyle;
-    double symbolExtent;
-    double minSymbolWidth;
-    double maxSymbolWidth;
-
-    QPen symbolPen;
-    QBrush symbolBrush[2]; // Increasing/Decreasing
-
-    QwtPlotTradingCurve::PaintAttributes paintAttributes;
-};
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotTradingCurve::QwtPlotTradingCurve( const QwtText &title ):
-    QwtPlotSeriesItem( title )
-{
-    init();
-}
-
-/*!
-  Constructor
-  \param title Title of the curve
-*/
-QwtPlotTradingCurve::QwtPlotTradingCurve( const QString &title ):
-    QwtPlotSeriesItem( QwtText( title ) )
-{
-    init();
-}
-
-//! Destructor
-QwtPlotTradingCurve::~QwtPlotTradingCurve()
-{
-    delete d_data;
-}
-
-//! Initialize internal members
-void QwtPlotTradingCurve::init()
-{
-    setItemAttribute( QwtPlotItem::Legend, true );
-    setItemAttribute( QwtPlotItem::AutoScale, true );
-
-    d_data = new PrivateData;
-    setData( new QwtTradingChartData() );
-
-    setZ( 19.0 );
-}
-
-//! \return QwtPlotItem::Rtti_PlotTradingCurve
-int QwtPlotTradingCurve::rtti() const
-{
-    return QwtPlotTradingCurve::Rtti_PlotTradingCurve;
-}
-
-/*!
-  Specify an attribute how to draw the curve
-
-  \param attribute Paint attribute
-  \param on On/Off
-  \sa testPaintAttribute()
-*/
-void QwtPlotTradingCurve::setPaintAttribute(
-    PaintAttribute attribute, bool on )
-{
-    if ( on )
-        d_data->paintAttributes |= attribute;
-    else
-        d_data->paintAttributes &= ~attribute;
-}
-
-/*!
-    \return True, when attribute is enabled
-    \sa PaintAttribute, setPaintAttribute()
-*/
-bool QwtPlotTradingCurve::testPaintAttribute(
-    PaintAttribute attribute ) const
-{
-    return ( d_data->paintAttributes & attribute );
-}
-
-/*!
-  Initialize data with an array of samples.
-  \param samples Vector of samples
-
-  \sa QwtPlotSeriesItem::setData()
-*/
-void QwtPlotTradingCurve::setSamples(
-    const QVector<QwtOHLCSample> &samples )
-{
-    setData( new QwtTradingChartData( samples ) );
-}
-
-/*!
-  Assign a series of samples
-    
-  setSamples() is just a wrapper for setData() without any additional
-  value - beside that it is easier to find for the developer.
-    
-  \param data Data
-  \warning The item takes ownership of the data object, deleting
-           it when its not used anymore. 
-*/
-void QwtPlotTradingCurve::setSamples(
-    QwtSeriesData<QwtOHLCSample> *data )
-{
-    setData( data );
-}   
-
-/*!
-  Set the symbol style
-
-  \param style Symbol style
-
-  \sa symbolStyle(), setSymbolExtent(),
-      setSymbolPen(), setSymbolBrush()
-*/
-void QwtPlotTradingCurve::setSymbolStyle( SymbolStyle style )
-{
-    if ( style != d_data->symbolStyle )
-    {
-        d_data->symbolStyle = style;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Symbol style
-  \sa setSymbolStyle(), symbolExtent(), symbolPen(), symbolBrush()
-*/
-QwtPlotTradingCurve::SymbolStyle QwtPlotTradingCurve::symbolStyle() const
-{
-    return d_data->symbolStyle;
-}
-
-/*! 
-  Build and assign the symbol pen
-    
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-    
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-    
-  \sa pen(), brush()
- */ 
-void QwtPlotTradingCurve::setSymbolPen( 
-    const QColor &color, qreal width, Qt::PenStyle style )
-{   
-    setSymbolPen( QPen( color, width, style ) );
-}
-
-/*!
-  \brief Set the symbol pen
-
-  The symbol pen is used for rendering the lines of the
-  bar or candlestick symbols
-
-  \sa symbolPen(), setSymbolBrush()
-*/
-void QwtPlotTradingCurve::setSymbolPen( const QPen &pen )
-{
-    if ( pen != d_data->symbolPen )
-    {
-        d_data->symbolPen = pen;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Symbol pen
-  \sa setSymbolPen(), symbolBrush()
-*/
-QPen QwtPlotTradingCurve::symbolPen() const
-{
-    return d_data->symbolPen;
-}
-
-/*!
-  Set the symbol brush
-
-  \param direction Direction type
-  \param brush Brush used to fill the body of all candlestick
-               symbols with the direction
-
-  \sa symbolBrush(), setSymbolPen()
-*/
-void QwtPlotTradingCurve::setSymbolBrush(
-    Direction direction, const QBrush &brush )
-{
-    if ( direction < 0 || direction >= 2 )
-        return;
-
-    if ( brush != d_data->symbolBrush[ direction ] )
-    {
-        d_data->symbolBrush[ direction ] = brush;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \param direction
-  \return Brush used to fill the body of all candlestick
-          symbols with the direction
-
-  \sa setSymbolPen(), symbolBrush()
-*/
-QBrush QwtPlotTradingCurve::symbolBrush( Direction direction ) const
-{
-    if ( direction < 0 || direction >= 2 )
-        return QBrush();
-
-    return d_data->symbolBrush[ direction ];
-}
-
-/*!
-  \brief Set the extent of the symbol
-
-  The width of the symbol is given in scale coordinates. When painting
-  a symbol the width is scaled into paint device coordinates
-  by scaledSymbolWidth(). The scaled width is bounded by
-  minSymbolWidth(), maxSymbolWidth()
-
-  \param extent Symbol width in scale coordinates
-
-  \sa symbolExtent(), scaledSymbolWidth(), 
-      setMinSymbolWidth(), setMaxSymbolWidth()
-*/
-void QwtPlotTradingCurve::setSymbolExtent( double extent )
-{
-    extent = qMax( 0.0, extent );
-    if ( extent != d_data->symbolExtent )
-    {
-        d_data->symbolExtent = extent;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Extent of a symbol in scale coordinates
-  \sa setSymbolExtent(), scaledSymbolWidth(),
-      minSymbolWidth(), maxSymbolWidth()
-*/
-double QwtPlotTradingCurve::symbolExtent() const
-{
-    return d_data->symbolExtent;
-}
-
-/*!
-  Set a minimum for the symbol width
-
-  \param width Width in paint device coordinates
-  \sa minSymbolWidth(), setMaxSymbolWidth(), setSymbolExtent()
- */
-void QwtPlotTradingCurve::setMinSymbolWidth( double width )
-{
-    width = qMax( width, 0.0 );
-    if ( width != d_data->minSymbolWidth )
-    {
-        d_data->minSymbolWidth = width;
-
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Minmum for the symbol width
-  \sa setMinSymbolWidth(), maxSymbolWidth(), symbolExtent()
- */
-double QwtPlotTradingCurve::minSymbolWidth() const
-{
-    return d_data->minSymbolWidth;
-}
-
-/*!
-  Set a maximum for the symbol width
-
-  A value <= 0.0 means an unlimited width
-
-  \param width Width in paint device coordinates
-  \sa maxSymbolWidth(), setMinSymbolWidth(), setSymbolExtent()
- */
-void QwtPlotTradingCurve::setMaxSymbolWidth( double width )
-{
-    if ( width != d_data->maxSymbolWidth )
-    {
-        d_data->maxSymbolWidth = width;
-    
-        legendChanged();
-        itemChanged();
-    }
-}
-
-/*!
-  \return Maximum for the symbol width
-  \sa setMaxSymbolWidth(), minSymbolWidth(), symbolExtent()
- */
-double QwtPlotTradingCurve::maxSymbolWidth() const
-{
-    return d_data->maxSymbolWidth;
-}
-
-/*!
-  \return Bounding rectangle of all samples.
-  For an empty series the rectangle is invalid.
-*/
-QRectF QwtPlotTradingCurve::boundingRect() const
-{
-    QRectF rect = QwtPlotSeriesItem::boundingRect();
-    if ( rect.isValid() && orientation() == Qt::Vertical )
-        rect.setRect( rect.y(), rect.x(), rect.height(), rect.width() );
-
-    return rect;
-}
-
-/*!
-  Draw an interval of the curve
-
-  \param painter Painter
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rectangle of the canvas
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted. If to < 0 the
-         curve will be painted to its last point.
-
-  \sa drawSymbols()
-*/
-void QwtPlotTradingCurve::drawSeries( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    if ( to < 0 )
-        to = dataSize() - 1;
-
-    if ( from < 0 )
-        from = 0;
-
-    if ( from > to )
-        return;
-
-    painter->save();
-
-    if ( d_data->symbolStyle != QwtPlotTradingCurve::NoSymbol )
-        drawSymbols( painter, xMap, yMap, canvasRect, from, to );
-
-    painter->restore();
-}
-
-/*!
-  Draw symbols
-
-  \param painter Painter
-  \param xMap x map
-  \param yMap y map
-  \param canvasRect Contents rectangle of the canvas
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted
-
-  \sa drawSeries()
-*/
-void QwtPlotTradingCurve::drawSymbols( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect, int from, int to ) const
-{
-    const QRectF tr = QwtScaleMap::invTransform( xMap, yMap, canvasRect );
-
-    const QwtScaleMap *timeMap, *valueMap;
-    double tMin, tMax, vMin, vMax;
-
-    const Qt::Orientation orient = orientation();
-    if ( orient == Qt::Vertical )
-    {
-        timeMap = &xMap;
-        valueMap = &yMap;
-
-        tMin = tr.left();
-        tMax = tr.right();
-        vMin = tr.top();
-        vMax = tr.bottom();
-    }
-    else
-    {
-        timeMap = &yMap;
-        valueMap = &xMap;
-
-        vMin = tr.left();
-        vMax = tr.right();
-        tMin = tr.top();
-        tMax = tr.bottom();
-    }
-
-    const bool inverted = timeMap->isInverting();
-    const bool doClip = d_data->paintAttributes & ClipSymbols;
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    double symbolWidth = scaledSymbolWidth( xMap, yMap, canvasRect );
-    if ( doAlign )
-        symbolWidth = qFloor( 0.5 * symbolWidth ) * 2.0;
-
-    QPen pen = d_data->symbolPen;
-    pen.setCapStyle( Qt::FlatCap );
-
-    painter->setPen( pen );
-
-    for ( int i = from; i <= to; i++ )
-    {
-        const QwtOHLCSample s = sample( i );
-
-        if ( !doClip || qwtIsSampleInside( s, tMin, tMax, vMin, vMax ) )
-        {
-            QwtOHLCSample translatedSample;
-
-            translatedSample.time = timeMap->transform( s.time );
-            translatedSample.open = valueMap->transform( s.open );
-            translatedSample.high = valueMap->transform( s.high );
-            translatedSample.low = valueMap->transform( s.low );
-            translatedSample.close = valueMap->transform( s.close );
-
-            const int brushIndex = ( s.open < s.close )
-                ? QwtPlotTradingCurve::Increasing
-                : QwtPlotTradingCurve::Decreasing;
-
-            if ( doAlign )
-            {
-                translatedSample.time = qRound( translatedSample.time );
-                translatedSample.open = qRound( translatedSample.open );
-                translatedSample.high = qRound( translatedSample.high );
-                translatedSample.low = qRound( translatedSample.low );
-                translatedSample.close = qRound( translatedSample.close );
-            }
-
-            switch( d_data->symbolStyle )
-            {
-                case Bar:
-                {
-                    drawBar( painter, translatedSample, 
-                        orient, inverted, symbolWidth );
-                    break;
-                }
-                case CandleStick:
-                {
-                    painter->setBrush( d_data->symbolBrush[ brushIndex ] );
-                    drawCandleStick( painter, translatedSample, 
-                        orient, symbolWidth );
-                    break;
-                }
-                default:
-                {
-                    if ( d_data->symbolStyle >= UserSymbol )
-                    {
-                        painter->setBrush( d_data->symbolBrush[ brushIndex ] );
-                        drawUserSymbol( painter, d_data->symbolStyle,
-                            translatedSample, orient, inverted, symbolWidth );
-                    }
-                }
-            }
-        }
-    }
-}
-
-/*!
-  \brief Draw a symbol for a symbol style >= UserSymbol
-
-  The implementation does nothing and is intended to be overloaded
-
-  \param painter Qt painter, initialized with pen/brush
-  \param symbolStyle Symbol style
-  \param sample Samples already translated into paint device coordinates
-  \param orientation Vertical or horizontal
-  \param inverted True, when the opposite scale 
-                  ( Qt::Vertical: x, Qt::Horizontal: y ) is increasing
-                  in the opposite direction as QPainter coordinates.
-  \param symbolWidth Width of the symbol in paint device coordinates
-*/
-void QwtPlotTradingCurve::drawUserSymbol( QPainter *painter,
-    SymbolStyle symbolStyle, const QwtOHLCSample &sample,
-    Qt::Orientation orientation, bool inverted, double symbolWidth ) const
-{
-    Q_UNUSED( painter )
-    Q_UNUSED( symbolStyle )
-    Q_UNUSED( orientation )
-    Q_UNUSED( inverted )
-    Q_UNUSED( symbolWidth )
-    Q_UNUSED( sample )
-}
-
-/*!
-  \brief Draw a bar
-
-  \param painter Qt painter, initialized with pen/brush
-  \param sample Sample, already translated into paint device coordinates
-  \param orientation Vertical or horizontal
-  \param inverted When inverted is false the open tick is painted
-                  to the left/top, otherwise it is painted right/bottom.
-                  The close tick is painted in the opposite direction
-                  of the open tick.
-                  painted in the opposite d
-                  opposite direction.
-  \param width Width or height of the candle, depending on the orientation
-
-  \sa Bar
-*/
-void QwtPlotTradingCurve::drawBar( QPainter *painter,
-    const QwtOHLCSample &sample, Qt::Orientation orientation, 
-    bool inverted, double width ) const
-{
-    double w2 = 0.5 * width;
-    if ( inverted )
-        w2 *= -1;
-
-    if ( orientation == Qt::Vertical )
-    {
-        QwtPainter::drawLine( painter,
-            sample.time, sample.low, sample.time, sample.high );
-
-        QwtPainter::drawLine( painter,
-            sample.time - w2, sample.open, sample.time, sample.open );
-        QwtPainter::drawLine( painter,
-            sample.time + w2, sample.close, sample.time, sample.close );
-    }
-    else
-    {
-        QwtPainter::drawLine( painter, sample.low, sample.time,
-            sample.high, sample.time );
-        QwtPainter::drawLine( painter,
-            sample.open, sample.time - w2, sample.open, sample.time );
-        QwtPainter::drawLine( painter,
-            sample.close, sample.time + w2, sample.close, sample.time );
-    }
-}
-
-/*!
-  \brief Draw a candle stick
-
-  \param painter Qt painter, initialized with pen/brush
-  \param sample Samples already translated into paint device coordinates
-  \param orientation Vertical or horizontal
-  \param width Width or height of the candle, depending on the orientation
-
-  \sa CandleStick
-*/
-void QwtPlotTradingCurve::drawCandleStick( QPainter *painter,
-    const QwtOHLCSample &sample, Qt::Orientation orientation, 
-    double width ) const
-{
-    const double t = sample.time;
-    const double v1 = qMin( sample.low, sample.high );
-    const double v2 = qMin( sample.open, sample.close );
-    const double v3 = qMax( sample.low, sample.high );
-    const double v4 = qMax( sample.open, sample.close );
-
-    if ( orientation == Qt::Vertical )
-    {
-        QwtPainter::drawLine( painter, t, v1, t, v2 );
-        QwtPainter::drawLine( painter, t, v3, t, v4 );
-
-        QRectF rect( t - 0.5 * width, sample.open,
-            width, sample.close - sample.open );
-
-        QwtPainter::drawRect( painter, rect );
-    }
-    else
-    {
-        QwtPainter::drawLine( painter, v1, t, v2, t );
-        QwtPainter::drawLine( painter, v3, t, v4, t );
-
-        const QRectF rect( sample.open, t - 0.5 * width,
-            sample.close - sample.open, width );
-
-        QwtPainter::drawRect( painter, rect );
-    }
-}
-
-/*!
-  \return A rectangle filled with the color of the symbol pen
-
-  \param index Index of the legend entry 
-                ( usually there is only one )
-  \param size Icon size
-
-  \sa setLegendIconSize(), legendData()
-*/
-QwtGraphic QwtPlotTradingCurve::legendIcon( int index,
-    const QSizeF &size ) const
-{
-    Q_UNUSED( index );
-    return defaultIcon( d_data->symbolPen.color(), size );
-}
-
-/*!
-  Calculate the symbol width in paint coordinates
-
-  The width is calculated by scaling the symbol extent into
-  paint device coordinates bounded by the minimum/maximum
-  symbol width.
-
-  \param xMap Maps x-values into pixel coordinates.
-  \param yMap Maps y-values into pixel coordinates.
-  \param canvasRect Contents rectangle of the canvas
-
-  \return Symbol width in paint coordinates
-
-  \sa symbolExtent(), minSymbolWidth(), maxSymbolWidth()
-*/
-double QwtPlotTradingCurve::scaledSymbolWidth(
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect ) const
-{
-    Q_UNUSED( canvasRect );
-
-    if ( d_data->maxSymbolWidth > 0.0 &&
-        d_data->minSymbolWidth >= d_data->maxSymbolWidth )
-    {
-        return d_data->minSymbolWidth;
-    }
-
-    const QwtScaleMap *map =
-        ( orientation() == Qt::Vertical ) ? &xMap : &yMap;
-
-    const double pos = map->transform( map->s1() + d_data->symbolExtent ); 
-
-    double width = qAbs( pos - map->p1() );
-
-    width = qMax( width,  d_data->minSymbolWidth );
-    if ( d_data->maxSymbolWidth > 0.0 )
-        width = qMin( width, d_data->maxSymbolWidth );
-
-    return width;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_tradingcurve.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_tradingcurve.h
deleted file mode 100644
index 5853bbb51386acb85c5c075d5217821c57f61583..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_tradingcurve.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_TRADING_CURVE_H
-#define QWT_PLOT_TRADING_CURVE_H
-
-#include "qwt_global.h"
-#include "qwt_plot_seriesitem.h"
-#include "qwt_series_data.h"
-
-/*!
-  \brief QwtPlotTradingCurve illustrates movements in the price of a
-         financial instrument over time.
-
-  QwtPlotTradingCurve supports candlestick or bar ( OHLC ) charts
-  that are used in the domain of technical analysis.
-
-  While the length ( height or width depending on orientation() ) 
-  of each symbol depends on the corresponding OHLC sample the size
-  of the other dimension can be controlled using:
-
-  - setSymbolExtent()
-  - setSymbolMinWidth()
-  - setSymbolMaxWidth()
-
-  The extent is a size in scale coordinates, so that the symbol width
-  is increasing when the plot is zoomed in. Minimum/Maximum width
-  is in widget coordinates independent from the zoom level. 
-  When setting the minimum and maximum to the same value, the width of 
-  the symbol is fixed. 
-*/
-class QWT_EXPORT QwtPlotTradingCurve: 
-    public QwtPlotSeriesItem, QwtSeriesStore<QwtOHLCSample>
-{
-public:
-    /*!
-        \brief Symbol styles.
-
-        The default setting is QwtPlotSeriesItem::CandleStick.
-        \sa setSymbolStyle(), symbolStyle()
-    */
-    enum SymbolStyle
-    {
-        //! Nothing is displayed
-        NoSymbol = -1,
-
-        /*!
-          A line on the chart shows the price range (the highest and lowest
-          prices) over one unit of time, e.g. one day or one hour.
-          Tick marks project from each side of the line indicating the
-          opening and closing price.
-         */
-        Bar,
-
-        /*!
-          The range between opening/closing price are displayed as
-          a filled box. The fill brush depends on the direction of the
-          price movement. The box is connected to the highest/lowest
-          values by lines.
-        */
-        CandleStick,
-
-        /*!
-          SymbolTypes >= UserSymbol are displayed by drawUserSymbol(),
-          that needs to be overloaded and implemented in derived
-          curve classes.
-
-          \sa drawUserSymbol()
-        */
-        UserSymbol = 100
-    };
-
-    /*!
-        \brief Direction of a price movement
-     */
-    enum Direction
-    {
-        //! The closing price is higher than the opening price
-        Increasing,
-
-        //! The closing price is lower than the opening price
-        Decreasing
-    };
-
-    /*!
-        Attributes to modify the drawing algorithm.
-        \sa setPaintAttribute(), testPaintAttribute()
-    */
-    enum PaintAttribute
-    {
-        //! Check if a symbol is on the plot canvas before painting it.
-        ClipSymbols   = 0x01
-    };
-
-    //! Paint attributes
-    typedef QFlags<PaintAttribute> PaintAttributes;
-
-    explicit QwtPlotTradingCurve( const QString &title = QString::null );
-    explicit QwtPlotTradingCurve( const QwtText &title );
-
-    virtual ~QwtPlotTradingCurve();
-
-    virtual int rtti() const;
-
-    void setPaintAttribute( PaintAttribute, bool on = true );
-    bool testPaintAttribute( PaintAttribute ) const;
-
-    void setSamples( const QVector<QwtOHLCSample> & );
-    void setSamples( QwtSeriesData<QwtOHLCSample> * );
-
-    void setSymbolStyle( SymbolStyle style );
-    SymbolStyle symbolStyle() const;
-
-    void setSymbolPen( const QColor &, 
-        qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setSymbolPen( const QPen & );
-    QPen symbolPen() const;
-
-    void setSymbolBrush( Direction, const QBrush & );
-    QBrush symbolBrush( Direction ) const;
-
-    void setSymbolExtent( double width );
-    double symbolExtent() const;
-
-    void setMinSymbolWidth( double );
-    double minSymbolWidth() const;
-
-    void setMaxSymbolWidth( double );
-    double maxSymbolWidth() const;
-
-    virtual void drawSeries( QPainter *painter,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual QRectF boundingRect() const;
-
-    virtual QwtGraphic legendIcon( int index, const QSizeF & ) const;
-
-protected:
-
-    void init();
-
-    virtual void drawSymbols( QPainter *,
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect, int from, int to ) const;
-
-    virtual void drawUserSymbol( QPainter *, 
-        SymbolStyle, const QwtOHLCSample &,
-        Qt::Orientation, bool inverted, double width ) const;
-
-    void drawBar( QPainter *painter, const QwtOHLCSample &, 
-        Qt::Orientation, bool inverted, double width ) const;
-
-    void drawCandleStick( QPainter *, const QwtOHLCSample &, 
-        Qt::Orientation, double width ) const;
-
-    virtual double scaledSymbolWidth(
-        const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QRectF &canvasRect ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotTradingCurve::PaintAttributes )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_xml.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_xml.cpp
deleted file mode 100644
index f2c121389ac9ab0d690bdb3b1cd8e8eca33b45dd..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_xml.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot.h"
-
-/*!
-  This method is intended for manipulating the plot widget
-  from a specific editor in the Qwt designer plugin.
-
-  \warning The plot editor has never been implemented.
-*/
-void QwtPlot::applyProperties( const QString & /* xmlDocument */ )
-{
-#if 0
-    // Temporary dummy code, for designer tests
-    setTitle( xmlDocument );
-    replot();
-#endif
-}
-
-/*!
-  This method is intended for manipulating the plot widget
-  from a specific editor in the Qwt designer plugin.
-
-  \return QString::null
-  \warning The plot editor has never been implemented.
-*/
-QString QwtPlot::grabProperties() const
-{
-#if 0
-    // Temporary dummy code, for designer tests
-    return title().text();
-#else
-    return QString::null;
-#endif
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoneitem.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoneitem.cpp
deleted file mode 100644
index 81efb41f1eb87810f8a84ac14724393a31c06f6c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoneitem.cpp
+++ /dev/null
@@ -1,315 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_zoneitem.h"
-#include "qwt_painter.h"
-#include "qwt_scale_map.h"
-#include <qpainter.h>
-
-class QwtPlotZoneItem::PrivateData
-{   
-public:
-    PrivateData():
-        orientation( Qt::Vertical ),
-        pen( Qt::NoPen )
-    {
-        QColor c( Qt::darkGray );
-        c.setAlpha( 100 );
-        brush = QBrush( c );
-    }
-        
-    Qt::Orientation orientation;
-    QPen pen;
-    QBrush brush;
-    QwtInterval interval;
-};  
-
-/*!
-   \brief Constructor
-
-   Initializes the zone with no pen and a semi transparent gray brush
-
-   Sets the following item attributes:
-
-   - QwtPlotItem::AutoScale: false
-   - QwtPlotItem::Legend:    false
-
-   The z value is initialized by 5
-
-   \sa QwtPlotItem::setItemAttribute(), QwtPlotItem::setZ()
-*/
-QwtPlotZoneItem::QwtPlotZoneItem():
-    QwtPlotItem( QwtText( "Zone" ) )
-{
-    d_data = new PrivateData;
-
-    setItemAttribute( QwtPlotItem::AutoScale, false );
-    setItemAttribute( QwtPlotItem::Legend, false );
-
-    setZ( 5 );
-}
-
-//! Destructor
-QwtPlotZoneItem::~QwtPlotZoneItem()
-{
-    delete d_data;
-}
-
-//! \return QwtPlotItem::Rtti_PlotZone
-int QwtPlotZoneItem::rtti() const
-{
-    return QwtPlotItem::Rtti_PlotZone;
-}
-
-/*! 
-  Build and assign a pen
-    
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 ) what makes it
-  non cosmetic ( see QPen::isCosmetic() ). This method has been introduced
-  to hide this incompatibility.
-    
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-    
-  \sa pen(), brush()
- */ 
-void QwtPlotZoneItem::setPen( const QColor &color, qreal width, Qt::PenStyle style )
-{   
-    setPen( QPen( color, width, style ) );
-}
-
-/*!
-  \brief Assign a pen 
-
-  The pen is used to draw the border lines of the zone
-
-  \param pen Pen
-  \sa pen(), setBrush()
-*/
-void QwtPlotZoneItem::setPen( const QPen &pen )
-{
-    if ( d_data->pen != pen )
-    {
-        d_data->pen = pen;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Pen used to draw the border lines
-  \sa setPen(), brush()
-*/
-const QPen &QwtPlotZoneItem::pen() const
-{
-    return d_data->pen;
-}
-
-/*! 
-  \brief Assign a brush 
-    
-  The brush is used to fill the zone
-
-  \param brush Brush
-  \sa pen(), setBrush()
-*/
-void QwtPlotZoneItem::setBrush( const QBrush &brush )
-{
-    if ( d_data->brush != brush )
-    {
-        d_data->brush = brush;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Brush used to fill the zone
-  \sa setPen(), brush()
-*/
-const QBrush &QwtPlotZoneItem::brush() const
-{
-    return d_data->brush;
-}
-
-/*!
-  \brief Set the orientation of the zone
-
-  A horizontal zone highlights an interval of the y axis, 
-  a vertical zone of the x axis. It is unbounded in the 
-  opposite direction.
-
-  \sa orientation(), QwtPlotItem::setAxes()
-*/
-void QwtPlotZoneItem::setOrientation( Qt::Orientation orientation )
-{
-    if ( d_data->orientation != orientation )
-    {
-        d_data->orientation = orientation;
-        itemChanged();
-    }
-}
-
-/*!
-  \return Orientation of the zone
-  \sa setOrientation()
- */
-Qt::Orientation QwtPlotZoneItem::orientation()
-{
-    return d_data->orientation;
-}
-
-/*!
-  Set the interval of the zone
-
-  For a horizontal zone the interval is related to the y axis,
-  for a vertical zone it is related to the x axis.
-
-  \param min Minimum of the interval
-  \param max Maximum of the interval
-
-  \sa interval(), setOrientation()
- */
-void QwtPlotZoneItem::setInterval( double min, double max )
-{
-    setInterval( QwtInterval( min, max ) );
-}
-
-/*!
-  Set the interval of the zone
-
-  For a horizontal zone the interval is related to the y axis,
-  for a vertical zone it is related to the x axis.
-
-  \param interval Zone interval
-
-  \sa interval(), setOrientation()
- */
-void QwtPlotZoneItem::setInterval( const QwtInterval &interval )
-{
-    if ( d_data->interval != interval )
-    {
-        d_data->interval = interval;
-        itemChanged(); 
-    }   
-}   
-
-/*!
-  \return Zone interval
-  \sa setInterval(), orientation()
- */
-QwtInterval QwtPlotZoneItem::interval() const
-{
-    return d_data->interval;
-}   
-
-/*!
-  Draw the zone
-
-  \param painter Painter
-  \param xMap x Scale Map
-  \param yMap y Scale Map
-  \param canvasRect Contents rectangle of the canvas in painter coordinates
-*/
-
-void QwtPlotZoneItem::draw( QPainter *painter,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QRectF &canvasRect ) const
-{
-    if ( !d_data->interval.isValid() )
-        return;
-
-    QPen pen = d_data->pen;
-    pen.setCapStyle( Qt::FlatCap );
-
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    if ( d_data->orientation == Qt::Horizontal )
-    {
-        double y1 = yMap.transform( d_data->interval.minValue() );
-        double y2 = yMap.transform( d_data->interval.maxValue() );
-
-        if ( doAlign )
-        {
-            y1 = qRound( y1 );
-            y2 = qRound( y2 );
-        }
-
-        QRectF r( canvasRect.left(), y1, canvasRect.width(), y2 - y1 );
-        r = r.normalized();
-
-        if ( ( d_data->brush.style() != Qt::NoBrush ) && ( y1 != y2 ) )
-        {
-            QwtPainter::fillRect( painter, r, d_data->brush );
-        }
-
-        if ( d_data->pen.style() != Qt::NoPen )
-        {
-            painter->setPen( d_data->pen );
-
-            QwtPainter::drawLine( painter, r.left(), r.top(), r.right(), r.top() );
-            QwtPainter::drawLine( painter, r.left(), r.bottom(), r.right(), r.bottom() );
-        }
-    }
-    else
-    {
-        double x1 = xMap.transform( d_data->interval.minValue() );
-        double x2 = xMap.transform( d_data->interval.maxValue() );
-
-        if ( doAlign )
-        {
-            x1 = qRound( x1 );
-            x2 = qRound( x2 );
-        }
-
-        QRectF r( x1, canvasRect.top(), x2 - x1, canvasRect.height() );
-        r = r.normalized();
-
-        if ( ( d_data->brush.style() != Qt::NoBrush ) && ( x1 != x2 ) )
-        {
-            QwtPainter::fillRect( painter, r, d_data->brush );
-        }
-
-        if ( d_data->pen.style() != Qt::NoPen )
-        {
-            painter->setPen( d_data->pen );
-
-            QwtPainter::drawLine( painter, r.left(), r.top(), r.left(), r.bottom() );
-            QwtPainter::drawLine( painter, r.right(), r.top(), r.right(), r.bottom() );
-        }
-    }
-}
-
-/*! 
-  The bounding rectangle is build from the interval in one direction
-  and something invalid for the opposite direction.
-
-  \return An invalid rectangle with valid boundaries in one direction
-*/
-QRectF QwtPlotZoneItem::boundingRect() const
-{
-    QRectF br = QwtPlotItem::boundingRect();
-
-    const QwtInterval &intv = d_data->interval;
-
-    if ( intv.isValid() )
-    {
-        if ( d_data->orientation == Qt::Horizontal )
-        {
-            br.setTop( intv.minValue() );
-            br.setBottom( intv.maxValue() );
-        }
-        else
-        {
-            br.setLeft( intv.minValue() );
-            br.setRight( intv.maxValue() );
-        }
-    }
-
-    return br;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoneitem.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoneitem.h
deleted file mode 100644
index 3aae258ba59b8319b45db714e32f04f11851fc2f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoneitem.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_ZONE_ITEM_H
-#define QWT_PLOT_ZONE_ITEM_H
-
-#include "qwt_global.h"
-#include "qwt_plot_item.h"
-#include "qwt_interval.h"
-
-class QPen;
-class QBrush;
-
-/*!
-  \brief A plot item, which displays a zone
-
-  A horizontal zone highlights an interval of the y axis - a vertical 
-  zone an interval of the x axis - and is unbounded in the opposite direction.
-  It is filled with a brush and its border lines are optionally displayed with a pen. 
-
-  \note For displaying an area that is bounded for x and y coordinates 
-        use QwtPlotShapeItem
-*/
-
-class QWT_EXPORT QwtPlotZoneItem: 
-    public QwtPlotItem
-{
-public:
-    explicit QwtPlotZoneItem();
-    virtual ~QwtPlotZoneItem();
-
-    virtual int rtti() const;
-
-    void setOrientation( Qt::Orientation );
-    Qt::Orientation orientation();
-
-    void setInterval( double min, double max );
-    void setInterval( const QwtInterval & );
-    QwtInterval interval() const;
-
-    void setPen( const QColor &, qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setPen( const QPen & );
-    const QPen &pen() const;
-
-    void setBrush( const QBrush & );
-    const QBrush &brush() const;
-
-    virtual void draw( QPainter *,
-        const QwtScaleMap &, const QwtScaleMap &,
-        const QRectF &) const;
-
-    virtual QRectF boundingRect() const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoomer.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoomer.cpp
deleted file mode 100644
index 95e1c7771ff51a5e0e2ebaf69f7e639652359f46..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoomer.cpp
+++ /dev/null
@@ -1,664 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_plot_zoomer.h"
-#include "qwt_plot.h"
-#include "qwt_scale_div.h"
-#include "qwt_picker_machine.h"
-#include <qalgorithms.h>
-
-static QwtInterval qwtExpandedZoomInterval( double v1, double v2, 
-    double minRange, const QwtTransform* transform )
-{
-    double min = v1;
-    double max = v2;
-
-    if ( max - min < minRange )
-    {
-        min = 0.5 * ( min + max - minRange );
-        max = min + minRange;
-
-        if ( transform )
-        {
-            // f.e the logarithmic scale doesn't allow values
-            // outside [QwtLogTransform::LogMin/QwtLogTransform::LogMax]
-
-            double minBounded = transform->bounded( min );
-            double maxBounded = transform->bounded( max );
-
-            if ( minBounded != min )
-            {
-                maxBounded = transform->bounded( minBounded + minRange );
-            }
-            else if ( maxBounded != max )
-            {
-                minBounded = transform->bounded( maxBounded - minRange );
-            }
-
-            min = minBounded;
-            max = maxBounded;
-        }
-    }
-
-    return QwtInterval( min, max );
-}
-
-static QRectF qwtExpandedZoomRect( const QRectF &zoomRect, const QSizeF &minSize,
-    const QwtTransform* transformX, const QwtTransform* transformY )
-{
-    QRectF r = zoomRect;
-
-    if ( minSize.width() > r.width() )
-    {
-        const QwtInterval intv = qwtExpandedZoomInterval(
-            r.left(), r.right(), minSize.width(), transformX );
-
-        r.setLeft( intv.minValue() );
-        r.setRight( intv.maxValue() );
-    }
-
-    if ( minSize.height() > r.height() )
-    {
-        const QwtInterval intv = qwtExpandedZoomInterval(
-            zoomRect.top(), zoomRect.bottom(), minSize.height(), transformY );
-
-        r.setTop( intv.minValue() );
-        r.setBottom( intv.maxValue() );
-    }
-
-    return r;
-}
-
-class QwtPlotZoomer::PrivateData
-{
-public:
-    uint zoomRectIndex;
-    QStack<QRectF> zoomStack;
-
-    int maxStackDepth;
-};
-
-/*!
-  \brief Create a zoomer for a plot canvas.
-
-  The zoomer is set to those x- and y-axis of the parent plot of the
-  canvas that are enabled. If both or no x-axis are enabled, the picker
-  is set to QwtPlot::xBottom. If both or no y-axis are
-  enabled, it is set to QwtPlot::yLeft.
-
-  The zoomer is initialized with a QwtPickerDragRectMachine,
-  the tracker mode is set to QwtPicker::ActiveOnly and the rubber band
-  is set to QwtPicker::RectRubberBand
-
-  \param canvas Plot canvas to observe, also the parent object
-  \param doReplot Call QwtPlot::replot() for the attached plot before initializing
-                  the zoomer with its scales. This might be necessary,
-                  when the plot is in a state with pending scale changes.
-
-  \sa QwtPlot::autoReplot(), QwtPlot::replot(), setZoomBase()
-*/
-QwtPlotZoomer::QwtPlotZoomer( QWidget *canvas, bool doReplot ):
-    QwtPlotPicker( canvas )
-{
-    if ( canvas )
-        init( doReplot );
-}
-
-/*!
-  \brief Create a zoomer for a plot canvas.
-
-  The zoomer is initialized with a QwtPickerDragRectMachine,
-  the tracker mode is set to QwtPicker::ActiveOnly and the rubber band
-  is set to QwtPicker;;RectRubberBand
-
-  \param xAxis X axis of the zoomer
-  \param yAxis Y axis of the zoomer
-  \param canvas Plot canvas to observe, also the parent object
-  \param doReplot Call QwtPlot::replot() for the attached plot before initializing
-                  the zoomer with its scales. This might be necessary,
-                  when the plot is in a state with pending scale changes.
-
-  \sa QwtPlot::autoReplot(), QwtPlot::replot(), setZoomBase()
-*/
-
-QwtPlotZoomer::QwtPlotZoomer( int xAxis, int yAxis,
-        QWidget *canvas, bool doReplot ):
-    QwtPlotPicker( xAxis, yAxis, canvas )
-{
-    if ( canvas )
-        init( doReplot );
-}
-
-//! Init the zoomer, used by the constructors
-void QwtPlotZoomer::init( bool doReplot )
-{
-    d_data = new PrivateData;
-
-    d_data->maxStackDepth = -1;
-
-    setTrackerMode( ActiveOnly );
-    setRubberBand( RectRubberBand );
-    setStateMachine( new QwtPickerDragRectMachine() );
-
-    if ( doReplot && plot() )
-        plot()->replot();
-
-    setZoomBase( scaleRect() );
-}
-
-QwtPlotZoomer::~QwtPlotZoomer()
-{
-    delete d_data;
-}
-
-/*!
-  \brief Limit the number of recursive zoom operations to depth.
-
-  A value of -1 set the depth to unlimited, 0 disables zooming.
-  If the current zoom rectangle is below depth, the plot is unzoomed.
-
-  \param depth Maximum for the stack depth
-  \sa maxStackDepth()
-  \note depth doesn't include the zoom base, so zoomStack().count() might be
-              maxStackDepth() + 1.
-*/
-void QwtPlotZoomer::setMaxStackDepth( int depth )
-{
-    d_data->maxStackDepth = depth;
-
-    if ( depth >= 0 )
-    {
-        // unzoom if the current depth is below d_data->maxStackDepth
-
-        const int zoomOut =
-            int( d_data->zoomStack.count() ) - 1 - depth; // -1 for the zoom base
-
-        if ( zoomOut > 0 )
-        {
-            zoom( -zoomOut );
-            for ( int i = int( d_data->zoomStack.count() ) - 1;
-                i > int( d_data->zoomRectIndex ); i-- )
-            {
-                ( void )d_data->zoomStack.pop(); // remove trailing rects
-            }
-        }
-    }
-}
-
-/*!
-  \return Maximal depth of the zoom stack.
-  \sa setMaxStackDepth()
-*/
-int QwtPlotZoomer::maxStackDepth() const
-{
-    return d_data->maxStackDepth;
-}
-
-/*!
-  \return The zoom stack. zoomStack()[0] is the zoom base,
-          zoomStack()[1] the first zoomed rectangle.
-
-  \sa setZoomStack(), zoomRectIndex()
-*/
-const QStack<QRectF> &QwtPlotZoomer::zoomStack() const
-{
-    return d_data->zoomStack;
-}
-
-/*!
-  \return Initial rectangle of the zoomer
-  \sa setZoomBase(), zoomRect()
-*/
-QRectF QwtPlotZoomer::zoomBase() const
-{
-    return d_data->zoomStack[0];
-}
-
-/*!
-  Reinitialized the zoom stack with scaleRect() as base.
-
-  \param doReplot Call QwtPlot::replot() for the attached plot before initializing
-                  the zoomer with its scales. This might be necessary,
-                  when the plot is in a state with pending scale changes.
-
-  \sa zoomBase(), scaleRect() QwtPlot::autoReplot(), QwtPlot::replot().
-*/
-void QwtPlotZoomer::setZoomBase( bool doReplot )
-{
-    QwtPlot *plt = plot();
-    if ( plt == NULL )
-        return;
-
-    if ( doReplot )
-        plt->replot();
-
-    d_data->zoomStack.clear();
-    d_data->zoomStack.push( scaleRect() );
-    d_data->zoomRectIndex = 0;
-
-    rescale();
-}
-
-/*!
-  \brief Set the initial size of the zoomer.
-
-  base is united with the current scaleRect() and the zoom stack is
-  reinitialized with it as zoom base. plot is zoomed to scaleRect().
-
-  \param base Zoom base
-
-  \sa zoomBase(), scaleRect()
-*/
-void QwtPlotZoomer::setZoomBase( const QRectF &base )
-{
-    const QwtPlot *plt = plot();
-    if ( !plt )
-        return;
-
-    const QRectF sRect = scaleRect();
-    const QRectF bRect = base | sRect;
-
-    d_data->zoomStack.clear();
-    d_data->zoomStack.push( bRect );
-    d_data->zoomRectIndex = 0;
-
-    if ( base != sRect )
-    {
-        d_data->zoomStack.push( sRect );
-        d_data->zoomRectIndex++;
-    }
-
-    rescale();
-}
-
-/*!
-  \return Rectangle at the current position on the zoom stack.
-  \sa zoomRectIndex(), scaleRect().
-*/
-QRectF QwtPlotZoomer::zoomRect() const
-{
-    return d_data->zoomStack[d_data->zoomRectIndex];
-}
-
-/*!
-  \return Index of current position of zoom stack.
-*/
-uint QwtPlotZoomer::zoomRectIndex() const
-{
-    return d_data->zoomRectIndex;
-}
-
-/*!
-  \brief Zoom in
-
-  Clears all rectangles above the current position of the
-  zoom stack and pushes the normalized rectangle on it.
-
-  \note If the maximal stack depth is reached, zoom is ignored.
-  \note The zoomed signal is emitted.
-*/
-
-void QwtPlotZoomer::zoom( const QRectF &rect )
-{
-    if ( d_data->maxStackDepth >= 0 &&
-            int( d_data->zoomRectIndex ) >= d_data->maxStackDepth )
-    {
-        return;
-    }
-
-    const QRectF zoomRect = rect.normalized();
-    if ( zoomRect != d_data->zoomStack[d_data->zoomRectIndex] )
-    {
-        for ( uint i = int( d_data->zoomStack.count() ) - 1;
-           i > d_data->zoomRectIndex; i-- )
-        {
-            ( void )d_data->zoomStack.pop();
-        }
-
-        d_data->zoomStack.push( zoomRect );
-        d_data->zoomRectIndex++;
-
-        rescale();
-
-        Q_EMIT zoomed( zoomRect );
-    }
-}
-
-/*!
-  \brief Zoom in or out
-
-  Activate a rectangle on the zoom stack with an offset relative
-  to the current position. Negative values of offset will zoom out,
-  positive zoom in. A value of 0 zooms out to the zoom base.
-
-  \param offset Offset relative to the current position of the zoom stack.
-  \note The zoomed signal is emitted.
-  \sa zoomRectIndex()
-*/
-void QwtPlotZoomer::zoom( int offset )
-{
-    if ( offset == 0 )
-        d_data->zoomRectIndex = 0;
-    else
-    {
-        int newIndex = d_data->zoomRectIndex + offset;
-        newIndex = qMax( 0, newIndex );
-        newIndex = qMin( int( d_data->zoomStack.count() ) - 1, newIndex );
-
-        d_data->zoomRectIndex = uint( newIndex );
-    }
-
-    rescale();
-
-    Q_EMIT zoomed( zoomRect() );
-}
-
-/*!
-  \brief Assign a zoom stack
-
-  In combination with other types of navigation it might be useful to
-  modify to manipulate the complete zoom stack.
-
-  \param zoomStack New zoom stack
-  \param zoomRectIndex Index of the current position of zoom stack.
-                       In case of -1 the current position is at the top
-                       of the stack.
-
-  \note The zoomed signal might be emitted.
-  \sa zoomStack(), zoomRectIndex()
-*/
-void QwtPlotZoomer::setZoomStack(
-    const QStack<QRectF> &zoomStack, int zoomRectIndex )
-{
-    if ( zoomStack.isEmpty() )
-        return;
-
-    if ( d_data->maxStackDepth >= 0 &&
-        int( zoomStack.count() ) > d_data->maxStackDepth )
-    {
-        return;
-    }
-
-    if ( zoomRectIndex < 0 || zoomRectIndex > int( zoomStack.count() ) )
-        zoomRectIndex = zoomStack.count() - 1;
-
-    const bool doRescale = zoomStack[zoomRectIndex] != zoomRect();
-
-    d_data->zoomStack = zoomStack;
-    d_data->zoomRectIndex = uint( zoomRectIndex );
-
-    if ( doRescale )
-    {
-        rescale();
-        Q_EMIT zoomed( zoomRect() );
-    }
-}
-
-/*!
-  Adjust the observed plot to zoomRect()
-
-  \note Initiates QwtPlot::replot()
-*/
-
-void QwtPlotZoomer::rescale()
-{
-    QwtPlot *plt = plot();
-    if ( !plt )
-        return;
-
-    const QRectF &rect = d_data->zoomStack[d_data->zoomRectIndex];
-    if ( rect != scaleRect() )
-    {
-        const bool doReplot = plt->autoReplot();
-        plt->setAutoReplot( false );
-
-        double x1 = rect.left();
-        double x2 = rect.right();
-        if ( !plt->axisScaleDiv( xAxis() ).isIncreasing() )
-            qSwap( x1, x2 );
-
-        plt->setAxisScale( xAxis(), x1, x2 );
-
-        double y1 = rect.top();
-        double y2 = rect.bottom();
-        if ( !plt->axisScaleDiv( yAxis() ).isIncreasing() )
-            qSwap( y1, y2 );
-
-        plt->setAxisScale( yAxis(), y1, y2 );
-
-        plt->setAutoReplot( doReplot );
-
-        plt->replot();
-    }
-}
-
-/*!
-  Reinitialize the axes, and set the zoom base to their scales.
-
-  \param xAxis X axis
-  \param yAxis Y axis
-*/
-
-void QwtPlotZoomer::setAxis( int xAxis, int yAxis )
-{
-    if ( xAxis != QwtPlotPicker::xAxis() || yAxis != QwtPlotPicker::yAxis() )
-    {
-        QwtPlotPicker::setAxis( xAxis, yAxis );
-        setZoomBase( scaleRect() );
-    }
-}
-
-/*!
-   Qt::MidButton zooms out one position on the zoom stack,
-   Qt::RightButton to the zoom base.
-
-   Changes the current position on the stack, but doesn't pop
-   any rectangle.
-
-   \note The mouse events can be changed, using
-         QwtEventPattern::setMousePattern: 2, 1
-*/
-void QwtPlotZoomer::widgetMouseReleaseEvent( QMouseEvent *me )
-{
-    if ( mouseMatch( MouseSelect2, me ) )
-        zoom( 0 );
-    else if ( mouseMatch( MouseSelect3, me ) )
-        zoom( -1 );
-    else if ( mouseMatch( MouseSelect6, me ) )
-        zoom( +1 );
-    else
-        QwtPlotPicker::widgetMouseReleaseEvent( me );
-}
-
-/*!
-   Qt::Key_Plus zooms in, Qt::Key_Minus zooms out one position on the
-   zoom stack, Qt::Key_Escape zooms out to the zoom base.
-
-   Changes the current position on the stack, but doesn't pop
-   any rectangle.
-
-   \note The keys codes can be changed, using
-         QwtEventPattern::setKeyPattern: 3, 4, 5
-*/
-
-void QwtPlotZoomer::widgetKeyPressEvent( QKeyEvent *ke )
-{
-    if ( !isActive() )
-    {
-        if ( keyMatch( KeyUndo, ke ) )
-            zoom( -1 );
-        else if ( keyMatch( KeyRedo, ke ) )
-            zoom( +1 );
-        else if ( keyMatch( KeyHome, ke ) )
-            zoom( 0 );
-    }
-
-    QwtPlotPicker::widgetKeyPressEvent( ke );
-}
-
-/*!
-  Move the current zoom rectangle.
-
-  \param dx X offset
-  \param dy Y offset
-
-  \note The changed rectangle is limited by the zoom base
-*/
-void QwtPlotZoomer::moveBy( double dx, double dy )
-{
-    const QRectF &rect = d_data->zoomStack[d_data->zoomRectIndex];
-    moveTo( QPointF( rect.left() + dx, rect.top() + dy ) );
-}
-
-/*!
-  Move the the current zoom rectangle.
-
-  \param pos New position
-
-  \sa QRectF::moveTo()
-  \note The changed rectangle is limited by the zoom base
-*/
-void QwtPlotZoomer::moveTo( const QPointF &pos )
-{
-    double x = pos.x();
-    double y = pos.y();
-
-    if ( x < zoomBase().left() )
-        x = zoomBase().left();
-    if ( x > zoomBase().right() - zoomRect().width() )
-        x = zoomBase().right() - zoomRect().width();
-
-    if ( y < zoomBase().top() )
-        y = zoomBase().top();
-    if ( y > zoomBase().bottom() - zoomRect().height() )
-        y = zoomBase().bottom() - zoomRect().height();
-
-    if ( x != zoomRect().left() || y != zoomRect().top() )
-    {
-        d_data->zoomStack[d_data->zoomRectIndex].moveTo( x, y );
-        rescale();
-    }
-}
-
-/*!
-  \brief Check and correct a selected rectangle
-
-  Reject rectangles with a height or width < 2, otherwise
-  expand the selected rectangle to a minimum size of 11x11
-  and accept it.
-
-  \return true If the rectangle is accepted, or has been changed
-          to an accepted one.
-*/
-
-bool QwtPlotZoomer::accept( QPolygon &pa ) const
-{
-    if ( pa.count() < 2 )
-        return false;
-
-    QRect rect = QRect( pa[0], pa[int( pa.count() ) - 1] );
-    rect = rect.normalized();
-
-    const int minSize = 2;
-    if ( rect.width() < minSize && rect.height() < minSize )
-        return false;
-
-    const int minZoomSize = 11;
-
-    const QPoint center = rect.center();
-    rect.setSize( rect.size().expandedTo( QSize( minZoomSize, minZoomSize ) ) );
-    rect.moveCenter( center );
-
-    pa.resize( 2 );
-    pa[0] = rect.topLeft();
-    pa[1] = rect.bottomRight();
-
-    return true;
-}
-
-/*!
-  \brief Limit zooming by a minimum rectangle
-
-  \return zoomBase().width() / 10e4, zoomBase().height() / 10e4
-*/
-QSizeF QwtPlotZoomer::minZoomSize() const
-{
-    return QSizeF( d_data->zoomStack[0].width() / 10e4,
-        d_data->zoomStack[0].height() / 10e4 );
-}
-
-/*!
-  Rejects selections, when the stack depth is too deep, or
-  the zoomed rectangle is minZoomSize().
-
-  \sa minZoomSize(), maxStackDepth()
-*/
-void QwtPlotZoomer::begin()
-{
-    if ( d_data->maxStackDepth >= 0 )
-    {
-        if ( d_data->zoomRectIndex >= uint( d_data->maxStackDepth ) )
-            return;
-    }
-
-    const QSizeF minSize = minZoomSize();
-    if ( minSize.isValid() )
-    {
-        const QSizeF sz =
-            d_data->zoomStack[d_data->zoomRectIndex].size() * 0.9999;
-
-        if ( minSize.width() >= sz.width() &&
-            minSize.height() >= sz.height() )
-        {
-            return;
-        }
-    }
-
-    QwtPlotPicker::begin();
-}
-
-/*!
-  Expand the selected rectangle to minZoomSize() and zoom in
-  if accepted.
-
-  \param ok If true, complete the selection and emit selected signals
-            otherwise discard the selection.
-
-  \sa accept(), minZoomSize()
-  \return True if the selection has been accepted, false otherwise
-*/
-bool QwtPlotZoomer::end( bool ok )
-{
-    ok = QwtPlotPicker::end( ok );
-    if ( !ok )
-        return false;
-
-    QwtPlot *plot = QwtPlotZoomer::plot();
-    if ( !plot )
-        return false;
-
-    const QPolygon &pa = selection();
-    if ( pa.count() < 2 )
-        return false;
-
-    QRect rect = QRect( pa[0], pa[int( pa.count() - 1 )] );
-    rect = rect.normalized();
-
-    const QwtScaleMap xMap = plot->canvasMap( xAxis() );
-    const QwtScaleMap yMap = plot->canvasMap( yAxis() );
-
-    QRectF zoomRect = QwtScaleMap::invTransform( xMap, yMap, rect ).normalized();
-
-    zoomRect = qwtExpandedZoomRect( zoomRect, minZoomSize(),
-        xMap.transformation(), yMap.transformation() );
-
-    zoom( zoomRect );
-
-    return true;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoomer.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoomer.h
deleted file mode 100644
index eaec2f3c78eb8e3f17496d91bd997e339fb7b956..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_plot_zoomer.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_PLOT_ZOOMER_H
-#define QWT_PLOT_ZOOMER_H
-
-#include "qwt_global.h"
-#include "qwt_plot_picker.h"
-#include <qstack.h>
-
-/*!
-  \brief QwtPlotZoomer provides stacked zooming for a plot widget
-
-  QwtPlotZoomer selects rectangles from user inputs ( mouse or keyboard )
-  translates them into plot coordinates and adjusts the axes to them.
-  The selection is supported by a rubber band and optionally by displaying
-  the coordinates of the current mouse position.
-
-  Zooming can be repeated as often as possible, limited only by 
-  maxStackDepth() or minZoomSize().  Each rectangle is pushed on a stack.
-
-  The default setting how to select rectangles is 
-  a QwtPickerDragRectMachine with the following bindings:
-
-  - QwtEventPattern::MouseSelect1\n
-    The first point of the zoom rectangle is selected by a mouse press, 
-    the second point from the position, where the mouse is released.
-
-  - QwtEventPattern::KeySelect1\n
-    The first key press selects the first, the second key press
-    selects the second point.
-
-  - QwtEventPattern::KeyAbort\n
-    Discard the selection in the state, where the first point
-    is selected.
-
-  To traverse the zoom stack the following bindings are used:
-
-  - QwtEventPattern::MouseSelect3, QwtEventPattern::KeyUndo\n
-    Zoom out one position on the zoom stack
-    
-  - QwtEventPattern::MouseSelect6, QwtEventPattern::KeyRedo\n
-    Zoom in one position on the zoom stack
-
-  - QwtEventPattern::MouseSelect2, QwtEventPattern::KeyHome\n
-    Zoom to the zoom base
-
-  The setKeyPattern() and setMousePattern() functions can be used
-  to configure the zoomer actions. The following example 
-  shows, how to configure the 'I' and 'O' keys for zooming in and out 
-  one position on the zoom stack. The "Home" key is used to 
-  "unzoom" the plot.
-
-  \code
-   zoomer = new QwtPlotZoomer( plot );
-   zoomer->setKeyPattern( QwtEventPattern::KeyRedo, Qt::Key_I, Qt::ShiftModifier );
-   zoomer->setKeyPattern( QwtEventPattern::KeyUndo, Qt::Key_O, Qt::ShiftModifier );
-   zoomer->setKeyPattern( QwtEventPattern::KeyHome, Qt::Key_Home );
-  \endcode
-
-  QwtPlotZoomer is tailored for plots with one x and y axis, but it is
-  allowed to attach a second QwtPlotZoomer ( without rubber band and tracker )
-  for the other axes.
-
-  \note The realtime example includes an derived zoomer class that adds
-        scrollbars to the plot canvas.
-
-  \sa QwtPlotPanner, QwtPlotMagnifier
-*/
-
-class QWT_EXPORT QwtPlotZoomer: public QwtPlotPicker
-{
-    Q_OBJECT
-public:
-    explicit QwtPlotZoomer( QWidget *, bool doReplot = true );
-    explicit QwtPlotZoomer( int xAxis, int yAxis,
-                            QWidget *, bool doReplot = true );
-
-    virtual ~QwtPlotZoomer();
-
-    virtual void setZoomBase( bool doReplot = true );
-    virtual void setZoomBase( const QRectF & );
-
-    QRectF zoomBase() const;
-    QRectF zoomRect() const;
-
-    virtual void setAxis( int xAxis, int yAxis );
-
-    void setMaxStackDepth( int );
-    int maxStackDepth() const;
-
-    const QStack<QRectF> &zoomStack() const;
-    void setZoomStack( const QStack<QRectF> &,
-        int zoomRectIndex = -1 );
-
-    uint zoomRectIndex() const;
-
-public Q_SLOTS:
-    void moveBy( double x, double y );
-    virtual void moveTo( const QPointF & );
-
-    virtual void zoom( const QRectF & );
-    virtual void zoom( int up );
-
-Q_SIGNALS:
-    /*!
-      A signal emitting the zoomRect(), when the plot has been
-      zoomed in or out.
-
-      \param rect Current zoom rectangle.
-    */
-
-    void zoomed( const QRectF &rect );
-
-protected:
-    virtual void rescale();
-
-    virtual QSizeF minZoomSize() const;
-
-    virtual void widgetMouseReleaseEvent( QMouseEvent * );
-    virtual void widgetKeyPressEvent( QKeyEvent * );
-
-    virtual void begin();
-    virtual bool end( bool ok = true );
-    virtual bool accept( QPolygon & ) const;
-
-private:
-    void init( bool doReplot );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_3d.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_3d.cpp
deleted file mode 100644
index ff10b713be878b7d37888a654e3d212f7b2cb745..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_3d.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_point_3d.h"
-
-#ifndef QT_NO_DEBUG_STREAM
-
-QDebug operator<<( QDebug debug, const QwtPoint3D &point )
-{
-    debug.nospace() << "QwtPoint3D(" << point.x() 
-        << "," << point.y() << "," << point.z() << ")";
-    return debug.space();
-}
-
-#endif
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_3d.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_3d.h
deleted file mode 100644
index 3aea74f8cdcefcd51062c6eaa4b1f4aab5d235e0..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_3d.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-/*! \file */
-#ifndef QWT_POINT_3D_H
-#define QWT_POINT_3D_H 1
-
-#include "qwt_global.h"
-#include <qpoint.h>
-#ifndef QT_NO_DEBUG_STREAM
-#include <qdebug.h>
-#endif
-
-/*!
-  \brief QwtPoint3D class defines a 3D point in double coordinates
-*/
-
-class QWT_EXPORT QwtPoint3D
-{
-public:
-    QwtPoint3D();
-    QwtPoint3D( double x, double y, double z );
-    QwtPoint3D( const QwtPoint3D & );
-    QwtPoint3D( const QPointF & );
-
-    bool isNull()    const;
-
-    double x() const;
-    double y() const;
-    double z() const;
-
-    double &rx();
-    double &ry();
-    double &rz();
-
-    void setX( double x );
-    void setY( double y );
-    void setZ( double y );
-
-    QPointF toPoint() const;
-
-    bool operator==( const QwtPoint3D & ) const;
-    bool operator!=( const QwtPoint3D & ) const;
-
-private:
-    double d_x;
-    double d_y;
-    double d_z;
-};
-
-Q_DECLARE_TYPEINFO(QwtPoint3D, Q_MOVABLE_TYPE);
-
-#ifndef QT_NO_DEBUG_STREAM
-QWT_EXPORT QDebug operator<<( QDebug, const QwtPoint3D & );
-#endif
-
-/*!
-    Constructs a null point.
-    \sa isNull()
-*/
-inline QwtPoint3D::QwtPoint3D():
-    d_x( 0.0 ),
-    d_y( 0.0 ),
-    d_z( 0.0 )
-{
-}
-
-//! Constructs a point with coordinates specified by x, y and z.
-inline QwtPoint3D::QwtPoint3D( double x, double y, double z = 0.0 ):
-    d_x( x ),
-    d_y( y ),
-    d_z( z )
-{
-}
-
-/*!
-    Copy constructor.
-    Constructs a point using the values of the point specified.
-*/
-inline QwtPoint3D::QwtPoint3D( const QwtPoint3D &other ):
-    d_x( other.d_x ),
-    d_y( other.d_y ),
-    d_z( other.d_z )
-{
-}
-
-/*!
-    Constructs a point with x and y coordinates from a 2D point,
-    and a z coordinate of 0.
-*/
-inline QwtPoint3D::QwtPoint3D( const QPointF &other ):
-    d_x( other.x() ),
-    d_y( other.y() ),
-    d_z( 0.0 )
-{
-}
-
-/*!
-    \return True if the point is null; otherwise returns false.
-
-    A point is considered to be null if x, y and z-coordinates
-    are equal to zero.
-*/
-inline bool QwtPoint3D::isNull() const
-{
-    return d_x == 0.0 && d_y == 0.0 && d_z == 0.0;
-}
-
-//! \return The x-coordinate of the point.
-inline double QwtPoint3D::x() const
-{
-    return d_x;
-}
-
-//! \return The y-coordinate of the point.
-inline double QwtPoint3D::y() const
-{
-    return d_y;
-}
-
-//! \return The z-coordinate of the point.
-inline double QwtPoint3D::z() const
-{
-    return d_z;
-}
-
-//! \return A reference to the x-coordinate of the point.
-inline double &QwtPoint3D::rx()
-{
-    return d_x;
-}
-
-//! \return A reference to the y-coordinate of the point.
-inline double &QwtPoint3D::ry()
-{
-    return d_y;
-}
-
-//! \return A reference to the z-coordinate of the point.
-inline double &QwtPoint3D::rz()
-{
-    return d_z;
-}
-
-//! Sets the x-coordinate of the point to the value specified by x.
-inline void QwtPoint3D::setX( double x )
-{
-    d_x = x;
-}
-
-//! Sets the y-coordinate of the point to the value specified by y.
-inline void QwtPoint3D::setY( double y )
-{
-    d_y = y;
-}
-
-//! Sets the z-coordinate of the point to the value specified by z.
-inline void QwtPoint3D::setZ( double z )
-{
-    d_z = z;
-}
-
-/*!
-   \return 2D point, where the z coordinate is dropped.
-*/
-inline QPointF QwtPoint3D::toPoint() const
-{
-    return QPointF( d_x, d_y );
-}
-
-//! \return True, if this point and other are equal; otherwise returns false.
-inline bool QwtPoint3D::operator==( const QwtPoint3D &other ) const
-{
-    return ( d_x == other.d_x ) && ( d_y == other.d_y ) && ( d_z == other.d_z );
-}
-
-//! \return True if this rect and other are different; otherwise returns false.
-inline bool QwtPoint3D::operator!=( const QwtPoint3D &other ) const
-{
-    return !operator==( other );
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_data.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_data.cpp
deleted file mode 100644
index 00f582b09a66942393d582c05511fa0cea2bc219..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_data.cpp
+++ /dev/null
@@ -1,307 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_point_data.h"
-#include "qwt_math.h"
-#include <string.h>
-
-/*!
-  Constructor
-
-  \param x Array of x values
-  \param y Array of y values
-
-  \sa QwtPlotCurve::setData(), QwtPlotCurve::setSamples()
-*/
-QwtPointArrayData::QwtPointArrayData(
-        const QVector<double> &x, const QVector<double> &y ):
-    d_x( x ),
-    d_y( y )
-{
-}
-
-/*!
-  Constructor
-
-  \param x Array of x values
-  \param y Array of y values
-  \param size Size of the x and y arrays
-  \sa QwtPlotCurve::setData(), QwtPlotCurve::setSamples()
-*/
-QwtPointArrayData::QwtPointArrayData( const double *x,
-        const double *y, size_t size )
-{
-    d_x.resize( size );
-    ::memcpy( d_x.data(), x, size * sizeof( double ) );
-
-    d_y.resize( size );
-    ::memcpy( d_y.data(), y, size * sizeof( double ) );
-}
-
-/*!
-  \brief Calculate the bounding rectangle
-
-  The bounding rectangle is calculated once by iterating over all
-  points and is stored for all following requests.
-
-  \return Bounding rectangle
-*/
-QRectF QwtPointArrayData::boundingRect() const
-{
-    if ( d_boundingRect.width() < 0 )
-        d_boundingRect = qwtBoundingRect( *this );
-
-    return d_boundingRect;
-}
-
-//! \return Size of the data set
-size_t QwtPointArrayData::size() const
-{
-    return qMin( d_x.size(), d_y.size() );
-}
-
-/*!
-  Return the sample at position i
-
-  \param index Index
-  \return Sample at position i
-*/
-QPointF QwtPointArrayData::sample( size_t index ) const
-{
-    return QPointF( d_x[int( index )], d_y[int( index )] );
-}
-
-//! \return Array of the x-values
-const QVector<double> &QwtPointArrayData::xData() const
-{
-    return d_x;
-}
-
-//! \return Array of the y-values
-const QVector<double> &QwtPointArrayData::yData() const
-{
-    return d_y;
-}
-
-/*!
-  Constructor
-
-  \param x Array of x values
-  \param y Array of y values
-  \param size Size of the x and y arrays
-
-  \warning The programmer must assure that the memory blocks referenced
-           by the pointers remain valid during the lifetime of the
-           QwtPlotCPointer object.
-
-  \sa QwtPlotCurve::setData(), QwtPlotCurve::setRawSamples()
-*/
-QwtCPointerData::QwtCPointerData(
-        const double *x, const double *y, size_t size ):
-    d_x( x ),
-    d_y( y ),
-    d_size( size )
-{
-}
-
-/*!
-  \brief Calculate the bounding rectangle
-
-  The bounding rectangle is calculated once by iterating over all
-  points and is stored for all following requests.
-
-  \return Bounding rectangle
-*/
-QRectF QwtCPointerData::boundingRect() const
-{
-    if ( d_boundingRect.width() < 0 )
-        d_boundingRect = qwtBoundingRect( *this );
-
-    return d_boundingRect;
-}
-
-//! \return Size of the data set
-size_t QwtCPointerData::size() const
-{
-    return d_size;
-}
-
-/*!
-  Return the sample at position i
-
-  \param index Index
-  \return Sample at position i
-*/
-QPointF QwtCPointerData::sample( size_t index ) const
-{
-    return QPointF( d_x[int( index )], d_y[int( index )] );
-}
-
-//! \return Array of the x-values
-const double *QwtCPointerData::xData() const
-{
-    return d_x;
-}
-
-//! \return Array of the y-values
-const double *QwtCPointerData::yData() const
-{
-    return d_y;
-}
-
-/*!
-   Constructor
-
-   \param size Number of points
-   \param interval Bounding interval for the points
-
-   \sa setInterval(), setSize()
-*/
-QwtSyntheticPointData::QwtSyntheticPointData(
-        size_t size, const QwtInterval &interval ):
-    d_size( size ),
-    d_interval( interval )
-{
-}
-
-/*!
-  Change the number of points
-
-  \param size Number of points
-  \sa size(), setInterval()
-*/
-void QwtSyntheticPointData::setSize( size_t size )
-{
-    d_size = size;
-}
-
-/*!
-  \return Number of points
-  \sa setSize(), interval()
-*/
-size_t QwtSyntheticPointData::size() const
-{
-    return d_size;
-}
-
-/*!
-   Set the bounding interval
-
-   \param interval Interval
-   \sa interval(), setSize()
-*/
-void QwtSyntheticPointData::setInterval( const QwtInterval &interval )
-{
-    d_interval = interval.normalized();
-}
-
-/*!
-   \return Bounding interval
-   \sa setInterval(), size()
-*/
-QwtInterval QwtSyntheticPointData::interval() const
-{
-    return d_interval;
-}
-
-/*!
-   Set a the "rectangle of interest"
-
-   QwtPlotSeriesItem defines the current area of the plot canvas
-   as "rect of interest" ( QwtPlotSeriesItem::updateScaleDiv() ).
-
-   If interval().isValid() == false the x values are calculated
-   in the interval rect.left() -> rect.right().
-
-   \sa rectOfInterest()
-*/
-void QwtSyntheticPointData::setRectOfInterest( const QRectF &rect )
-{
-    d_rectOfInterest = rect;
-    d_intervalOfInterest = QwtInterval(
-        rect.left(), rect.right() ).normalized();
-}
-
-/*!
-   \return "rectangle of interest"
-   \sa setRectOfInterest()
-*/
-QRectF QwtSyntheticPointData::rectOfInterest() const
-{
-    return d_rectOfInterest;
-}
-
-/*!
-  \brief Calculate the bounding rectangle
-
-  This implementation iterates over all points, what could often
-  be implemented much faster using the characteristics of the series.
-  When there are many points it is recommended to overload and
-  reimplement this method using the characteristics of the series
-  ( if possible ).
-
-  \return Bounding rectangle
-*/
-QRectF QwtSyntheticPointData::boundingRect() const
-{
-    if ( d_size == 0 ||
-        !( d_interval.isValid() || d_intervalOfInterest.isValid() ) )
-    {
-        return QRectF( 1.0, 1.0, -2.0, -2.0 ); // something invalid
-    }
-
-    return qwtBoundingRect( *this );
-}
-
-/*!
-   Calculate the point from an index
-
-   \param index Index
-   \return QPointF(x(index), y(x(index)));
-
-   \warning For invalid indices ( index < 0 || index >= size() )
-            (0, 0) is returned.
-*/
-QPointF QwtSyntheticPointData::sample( size_t index ) const
-{
-    if ( index >= d_size )
-        return QPointF( 0, 0 );
-
-    const double xValue = x( index );
-    const double yValue = y( xValue );
-
-    return QPointF( xValue, yValue );
-}
-
-/*!
-   Calculate a x-value from an index
-
-   x values are calculated by dividing an interval into
-   equidistant steps. If !interval().isValid() the
-   interval is calculated from the "rectangle of interest".
-
-   \param index Index of the requested point 
-   \return Calculated x coordinate
-
-   \sa interval(), rectOfInterest(), y()
-*/
-double QwtSyntheticPointData::x( uint index ) const
-{
-    const QwtInterval &interval = d_interval.isValid() ?
-        d_interval : d_intervalOfInterest;
-
-    if ( !interval.isValid() ) 
-        return 0.0;
-
-    if ( d_size <= 1 )
-        return interval.minValue();
-
-    const double dx = interval.width() / ( d_size - 1 );
-    return interval.minValue() + index * dx;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_data.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_data.h
deleted file mode 100644
index f9be472014b1bdb054631e17aa74cff46348e276..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_data.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_POINT_DATA_H
-#define QWT_POINT_DATA_H 1
-
-#include "qwt_global.h"
-#include "qwt_series_data.h"
-
-/*!
-  \brief Interface for iterating over two QVector<double> objects.
-*/
-class QWT_EXPORT QwtPointArrayData: public QwtSeriesData<QPointF>
-{
-public:
-    QwtPointArrayData( const QVector<double> &x, const QVector<double> &y );
-    QwtPointArrayData( const double *x, const double *y, size_t size );
-
-    virtual QRectF boundingRect() const;
-
-    virtual size_t size() const;
-    virtual QPointF sample( size_t i ) const;
-
-    const QVector<double> &xData() const;
-    const QVector<double> &yData() const;
-
-private:
-    QVector<double> d_x;
-    QVector<double> d_y;
-};
-
-/*!
-  \brief Data class containing two pointers to memory blocks of doubles.
- */
-class QWT_EXPORT QwtCPointerData: public QwtSeriesData<QPointF>
-{
-public:
-    QwtCPointerData( const double *x, const double *y, size_t size );
-
-    virtual QRectF boundingRect() const;
-    virtual size_t size() const;
-    virtual QPointF sample( size_t i ) const;
-
-    const double *xData() const;
-    const double *yData() const;
-
-private:
-    const double *d_x;
-    const double *d_y;
-    size_t d_size;
-};
-
-/*!
-  \brief Synthetic point data
-
-  QwtSyntheticPointData provides a fixed number of points for an interval.
-  The points are calculated in equidistant steps in x-direction.
-
-  If the interval is invalid, the points are calculated for
-  the "rectangle of interest", what normally is the displayed area on the
-  plot canvas. In this mode you get different levels of detail, when
-  zooming in/out.
-
-  \par Example
-
-  The following example shows how to implement a sinus curve.
-
-  \code
-#include <cmath>
-#include <qwt_series_data.h>
-#include <qwt_plot_curve.h>
-#include <qwt_plot.h>
-#include <qapplication.h>
-
-class SinusData: public QwtSyntheticPointData
-{
-public:
-    SinusData():
-        QwtSyntheticPointData( 100 )
-    {
-    }
-
-    virtual double y( double x ) const
-    {
-        return qSin( x );
-    }
-};
-
-int main(int argc, char **argv)
-{
-    QApplication a( argc, argv );
-
-    QwtPlot plot;
-    plot.setAxisScale( QwtPlot::xBottom, 0.0, 10.0 );
-    plot.setAxisScale( QwtPlot::yLeft, -1.0, 1.0 );
-
-    QwtPlotCurve *curve = new QwtPlotCurve( "y = sin(x)" );
-    curve->setData( new SinusData() );
-    curve->attach( &plot );
-
-    plot.show();
-    return a.exec();
-}
-   \endcode
-*/
-class QWT_EXPORT QwtSyntheticPointData: public QwtSeriesData<QPointF>
-{
-public:
-    QwtSyntheticPointData( size_t size,
-        const QwtInterval & = QwtInterval() );
-
-    void setSize( size_t size );
-    virtual size_t size() const;
-
-    void setInterval( const QwtInterval& );
-    QwtInterval interval() const;
-
-    virtual QRectF boundingRect() const;
-    virtual QPointF sample( size_t i ) const;
-
-    /*!
-       Calculate a y value for a x value
-
-       \param x x value
-       \return Corresponding y value
-     */
-    virtual double y( double x ) const = 0;
-    virtual double x( uint index ) const;
-
-    virtual void setRectOfInterest( const QRectF & );
-    QRectF rectOfInterest() const;
-
-private:
-    size_t d_size;
-    QwtInterval d_interval;
-    QRectF d_rectOfInterest;
-    QwtInterval d_intervalOfInterest;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_mapper.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_mapper.cpp
deleted file mode 100644
index f3573584ebdf61b7c47e63db705d49afcce390a8..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_mapper.cpp
+++ /dev/null
@@ -1,717 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_point_mapper.h"
-#include "qwt_scale_map.h"
-#include "qwt_pixel_matrix.h"
-#include <qpolygon.h>
-#include <qimage.h>
-#include <qpen.h>
-#include <qpainter.h>
-
-#if QT_VERSION >= 0x040400
-
-#include <qthread.h>
-#include <qfuture.h>
-#include <qtconcurrentrun.h>
-
-#if !defined(QT_NO_QFUTURE)
-#define QWT_USE_THREADS 0
-#endif
-
-#endif
-
-static QRectF qwtInvalidRect( 0.0, 0.0, -1.0, -1.0 );
-
-// Helper class to work around the 5 parameters
-// limitation of QtConcurrent::run()
-class QwtDotsCommand
-{
-public:
-    const QwtSeriesData<QPointF> *series;
-    int from;
-    int to;
-    QRgb rgb;
-};
-
-static void qwtRenderDots(
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtDotsCommand command, const QPoint &pos, QImage *image ) 
-{
-    const QRgb rgb = command.rgb;
-    QRgb *bits = reinterpret_cast<QRgb *>( image->bits() );
-
-    const int w = image->width();
-    const int h = image->height();
-
-    const int x0 = pos.x();
-    const int y0 = pos.y();
-
-    for ( int i = command.from; i <= command.to; i++ )
-    {
-        const QPointF sample = command.series->sample( i );
-
-        const int x = static_cast<int>( xMap.transform( sample.x() ) + 0.5 ) - x0;
-        const int y = static_cast<int>( yMap.transform( sample.y() ) + 0.5 ) - y0;
-
-        if ( x >= 0 && x < w && y >= 0 && y < h )
-            bits[ y * w + x ] = rgb;
-    }
-}
-
-static inline int qwtRoundValue( double value )
-{
-    return qRound( value );
-}
-
-// some functors, so that the compile can inline
-struct QwtRoundI
-{
-    inline int operator()( double value )
-    {
-        return qwtRoundValue( value );
-    }
-};
-
-struct QwtRoundF
-{
-    inline double operator()( double value )
-    {
-#if 1
-        // MS Windows and at least IRIX does not have C99's nearbyint() function
-        return ( value >= 0.0 ) ? ::floor( value + 0.5 ) : ::ceil( value - 0.5 );
-#else
-        // slightly faster than the code above
-        return nearbyint( value );
-#endif
-    }
-};
-
-struct QwtNoRoundF
-{   
-    inline double operator()( double value )
-    {
-        return value;
-    }
-};
-
-// mapping points without any filtering - beside checking
-// the bounding rectangle
-
-template<class Polygon, class Point, class Round>
-static inline Polygon qwtToPoints( 
-    const QRectF &boundingRect,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series, 
-    int from, int to, Round round )
-{
-    Polygon polyline( to - from + 1 );
-    Point *points = polyline.data();
-
-    int numPoints = 0;
-
-    if ( boundingRect.isValid() )
-    {
-        // iterating over all values
-        // filtering out all points outside of
-        // the bounding rectangle
-
-        for ( int i = from; i <= to; i++ )
-        {
-            const QPointF sample = series->sample( i );
-
-            const double x = xMap.transform( sample.x() );
-            const double y = yMap.transform( sample.y() );
-
-            if ( boundingRect.contains( x, y ) )
-            {
-                points[ numPoints ].rx() = round( x );
-                points[ numPoints ].ry() = round( y );
-
-                numPoints++;
-            }
-        }
-
-        polyline.resize( numPoints );
-    }
-    else
-    {
-        // simply iterating over all values
-        // without any filtering
-
-        for ( int i = from; i <= to; i++ )
-        {
-            const QPointF sample = series->sample( i );
-
-            const double x = xMap.transform( sample.x() );
-            const double y = yMap.transform( sample.y() );
-
-            points[ numPoints ].rx() = round( x );
-            points[ numPoints ].ry() = round( y );
-
-            numPoints++;
-        }
-    }
-
-    return polyline;
-}
-
-static inline QPolygon qwtToPointsI(
-    const QRectF &boundingRect,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series,
-    int from, int to )
-{
-    return qwtToPoints<QPolygon, QPoint>( 
-        boundingRect, xMap, yMap, series, from, to, QwtRoundI() );
-}
-
-template<class Round>
-static inline QPolygonF qwtToPointsF(
-    const QRectF &boundingRect,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series,
-    int from, int to, Round round )
-{
-    return qwtToPoints<QPolygonF, QPointF>( 
-        boundingRect, xMap, yMap, series, from, to, round );
-}
-
-// Mapping points with filtering out consecutive
-// points mapped to the same position
-
-template<class Polygon, class Point, class Round>
-static inline Polygon qwtToPolylineFiltered( 
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series, 
-    int from, int to, Round round )
-{
-    // in curves with many points consecutive points
-    // are often mapped to the same position. As this might
-    // result in empty lines ( or symbols hidden by others )
-    // we try to filter them out
-
-    Polygon polyline( to - from + 1 );
-    Point *points = polyline.data();
-
-    const QPointF sample0 = series->sample( from );
-
-    points[0].rx() = round( xMap.transform( sample0.x() ) );
-    points[0].ry() = round( yMap.transform( sample0.y() ) );
-
-    int pos = 0;
-    for ( int i = from + 1; i <= to; i++ )
-    {
-        const QPointF sample = series->sample( i );
-
-        const Point p( round( xMap.transform( sample.x() ) ),
-            round( yMap.transform( sample.y() ) ) );
-
-        if ( points[pos] != p )
-            points[++pos] = p;
-    }
-
-    polyline.resize( pos + 1 );
-    return polyline;
-}
-
-static inline QPolygon qwtToPolylineFilteredI(
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series,
-    int from, int to )
-{
-    return qwtToPolylineFiltered<QPolygon, QPoint>(
-        xMap, yMap, series, from, to, QwtRoundI() );
-}
-
-template<class Round>
-static inline QPolygonF qwtToPolylineFilteredF(
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series,
-    int from, int to, Round round )
-{
-    return qwtToPolylineFiltered<QPolygonF, QPointF>(
-        xMap, yMap, series, from, to, round );
-} 
-
-template<class Polygon, class Point>
-static inline Polygon qwtToPointsFiltered(
-    const QRectF &boundingRect,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series, int from, int to )
-{
-    // F.e. in scatter plots ( no connecting lines ) we
-    // can sort out all duplicates ( not only consecutive points )
-
-    Polygon polygon( to - from + 1 );
-    Point *points = polygon.data();
-
-    QwtPixelMatrix pixelMatrix( boundingRect.toAlignedRect() );
-
-    int numPoints = 0;
-    for ( int i = from; i <= to; i++ )
-    {
-        const QPointF sample = series->sample( i );
-
-        const int x = qwtRoundValue( xMap.transform( sample.x() ) );
-        const int y = qwtRoundValue( yMap.transform( sample.y() ) );
-
-        if ( pixelMatrix.testAndSetPixel( x, y, true ) == false )
-        {
-            points[ numPoints ].rx() = x;
-            points[ numPoints ].ry() = y;
-
-            numPoints++;
-        }
-    }
-
-    polygon.resize( numPoints );
-    return polygon;
-}
-
-static inline QPolygon qwtToPointsFilteredI(
-    const QRectF &boundingRect,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series, int from, int to )
-{
-    return qwtToPointsFiltered<QPolygon, QPoint>(
-        boundingRect, xMap, yMap, series, from, to );
-} 
-
-static inline QPolygonF qwtToPointsFilteredF(
-    const QRectF &boundingRect,
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series, int from, int to )
-{
-    return qwtToPointsFiltered<QPolygonF, QPointF>(
-        boundingRect, xMap, yMap, series, from, to );
-}
-
-class QwtPointMapper::PrivateData
-{
-public:
-    PrivateData():
-        boundingRect( qwtInvalidRect )
-    {
-    }
-
-    QRectF boundingRect;
-    QwtPointMapper::TransformationFlags flags;
-};
-
-//! Constructor
-QwtPointMapper::QwtPointMapper()
-{
-    d_data = new PrivateData();
-}
-
-//! Destructor
-QwtPointMapper::~QwtPointMapper()
-{
-    delete d_data;
-}
-
-/*!
-  Set the flags affecting the transformation process
-
-  \param flags Flags
-  \sa flags(), setFlag()
- */
-void QwtPointMapper::setFlags( TransformationFlags flags )
-{
-    d_data->flags = flags;
-}
-
-/*!
-  \return Flags affecting the transformation process
-  \sa setFlags(), setFlag()
- */
-QwtPointMapper::TransformationFlags QwtPointMapper::flags() const
-{
-    return d_data->flags;
-}
-
-/*!
-  Modify a flag affecting the transformation process
-
-  \param flag Flag type
-  \param on Value
-
-  \sa flag(), setFlags()
- */
-void QwtPointMapper::setFlag( TransformationFlag flag, bool on )
-{
-    if ( on )
-        d_data->flags |= flag;
-    else
-        d_data->flags &= ~flag;
-}
-
-/*!
-  \return True, when the flag is set
-  \param flag Flag type
-  \sa setFlag(), setFlags()
- */
-bool QwtPointMapper::testFlag( TransformationFlag flag ) const
-{
-    return d_data->flags & flag;
-}
-
-/*!
-  Set a bounding rectangle for the point mapping algorithm
-
-  A valid bounding rectangle can be used for optimizations
-
-  \param rect Bounding rectangle
-  \sa boundingRect()
- */
-void QwtPointMapper::setBoundingRect( const QRectF &rect )
-{
-    d_data->boundingRect = rect;
-}
-
-/*!
-  \return Bounding rectangle
-  \sa setBoundingRect()
- */
-QRectF QwtPointMapper::boundingRect() const
-{
-    return d_data->boundingRect;
-}
-
-/*!
-  \brief Translate a series of points into a QPolygonF
-
-  When the WeedOutPoints flag is enabled consecutive points,
-  that are mapped to the same position will be one point. 
-
-  When RoundPoints is set all points are rounded to integers
-  but returned as PolygonF - what only makes sense
-  when the further processing of the values need a QPolygonF.
-
-  \param xMap x map
-  \param yMap y map
-  \param series Series of points to be mapped
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted
-
-  \return Translated polygon
-*/
-QPolygonF QwtPointMapper::toPolygonF(
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series, int from, int to ) const
-{
-    QPolygonF polyline;
-
-    if ( d_data->flags & WeedOutPoints )
-    {
-        if ( d_data->flags & RoundPoints )
-        {
-            polyline = qwtToPolylineFilteredF( 
-                xMap, yMap, series, from, to, QwtRoundF() );
-        }
-        else
-        {
-            polyline = qwtToPolylineFilteredF( 
-                xMap, yMap, series, from, to, QwtNoRoundF() );
-        }
-    }
-    else
-    {
-        if ( d_data->flags & RoundPoints )
-        {
-            polyline = qwtToPointsF( qwtInvalidRect, 
-                xMap, yMap, series, from, to, QwtRoundF() );
-        }
-        else
-        {
-            polyline = qwtToPointsF( qwtInvalidRect, 
-                xMap, yMap, series, from, to, QwtNoRoundF() );
-        }
-    }
-
-    return polyline;
-}
-
-/*!
-  \brief Translate a series of points into a QPolygon
-
-  When the WeedOutPoints flag is enabled consecutive points,
-  that are mapped to the same position will be one point. 
-
-  \param xMap x map
-  \param yMap y map
-  \param series Series of points to be mapped
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted
-
-  \return Translated polygon
-*/
-QPolygon QwtPointMapper::toPolygon(
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series, int from, int to ) const
-{
-    QPolygon polyline;
-
-    if ( d_data->flags & WeedOutPoints )
-    {
-        polyline = qwtToPolylineFilteredI( 
-            xMap, yMap, series, from, to );
-    }
-    else
-    {
-        polyline = qwtToPointsI( 
-            qwtInvalidRect, xMap, yMap, series, from, to );
-    }
-
-    return polyline;
-}
-
-/*!
-  \brief Translate a series into a QPolygonF
-
-  - WeedOutPoints & RoundPoints & boundingRect().isValid()
-    All points that are mapped to the same position 
-    will be one point. Points outside of the bounding
-    rectangle are ignored.
- 
-  - WeedOutPoints & RoundPoints & !boundingRect().isValid()
-    All consecutive points that are mapped to the same position 
-    will one point
-
-  - WeedOutPoints & !RoundPoints 
-    All consecutive points that are mapped to the same position 
-    will one point
-
-  - !WeedOutPoints & boundingRect().isValid()
-    Points outside of the bounding rectangle are ignored.
-
-  When RoundPoints is set all points are rounded to integers
-  but returned as PolygonF - what only makes sense
-  when the further processing of the values need a QPolygonF.
-
-  \param xMap x map
-  \param yMap y map
-  \param series Series of points to be mapped
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted
-
-  \return Translated polygon
-*/
-QPolygonF QwtPointMapper::toPointsF(
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series, int from, int to ) const
-{
-    QPolygonF points;
-
-    if ( d_data->flags & WeedOutPoints )
-    {
-        if ( d_data->flags & RoundPoints )
-        {
-            if ( d_data->boundingRect.isValid() )
-            {   
-                points = qwtToPointsFilteredF( d_data->boundingRect,
-                    xMap, yMap, series, from, to );
-            }
-            else
-            {   
-                // without a bounding rectangle all we can
-                // do is to filter out duplicates of
-                // consecutive points
-
-                points = qwtToPolylineFilteredF( 
-                    xMap, yMap, series, from, to, QwtRoundF() );
-            }
-        }
-        else
-        {
-            // when rounding is not allowed we can't use
-            // qwtToPointsFilteredF
-
-            points = qwtToPolylineFilteredF( 
-                xMap, yMap, series, from, to, QwtNoRoundF() );
-        }
-    }
-    else
-    {
-        if ( d_data->flags & RoundPoints )
-        {
-            points = qwtToPointsF( d_data->boundingRect,
-                xMap, yMap, series, from, to, QwtRoundF() );
-        }
-        else
-        {
-            points = qwtToPointsF( d_data->boundingRect,
-                xMap, yMap, series, from, to, QwtNoRoundF() );
-        }
-    }
-
-    return points;
-}
-
-/*!
-  \brief Translate a series of points into a QPolygon
-
-  - WeedOutPoints & boundingRect().isValid()
-    All points that are mapped to the same position 
-    will be one point. Points outside of the bounding
-    rectangle are ignored.
- 
-  - WeedOutPoints & !boundingRect().isValid()
-    All consecutive points that are mapped to the same position 
-    will one point
-
-  - !WeedOutPoints & boundingRect().isValid()
-    Points outside of the bounding rectangle are ignored.
-
-  \param xMap x map
-  \param yMap y map
-  \param series Series of points to be mapped
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted
-
-  \return Translated polygon
-*/
-QPolygon QwtPointMapper::toPoints(
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series, int from, int to ) const
-{
-    QPolygon points;
-
-    if ( d_data->flags & WeedOutPoints )
-    {
-        if ( d_data->boundingRect.isValid() )
-        {
-            points = qwtToPointsFilteredI( d_data->boundingRect,
-                xMap, yMap, series, from, to );
-        }
-        else
-        {
-            // when we don't have the bounding rectangle all
-            // we can do is to filter out consecutive duplicates
-
-            points = qwtToPolylineFilteredI( 
-                xMap, yMap, series, from, to );
-        }
-    }
-    else
-    {
-        points = qwtToPointsI( 
-            d_data->boundingRect, xMap, yMap, series, from, to );
-    }
-
-    return points;
-}
-
-
-/*!
-  \brief Translate a series into a QImage
-
-  \param xMap x map
-  \param yMap y map
-  \param series Series of points to be mapped
-  \param from Index of the first point to be painted
-  \param to Index of the last point to be painted
-  \param pen Pen used for drawing a point
-             of the image, where a point is mapped to
-  \param antialiased True, when the dots should be displayed
-                     antialiased
-  \param numThreads Number of threads to be used for rendering.
-                   If numThreads is set to 0, the system specific
-                   ideal thread count is used.
-
-  \return Image displaying the series
-*/
-QImage QwtPointMapper::toImage(
-    const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-    const QwtSeriesData<QPointF> *series, int from, int to, 
-    const QPen &pen, bool antialiased, uint numThreads ) const
-{
-    Q_UNUSED( antialiased )
-
-#if QWT_USE_THREADS
-    if ( numThreads == 0 )
-        numThreads = QThread::idealThreadCount();
-
-    if ( numThreads <= 0 )
-        numThreads = 1;
-#else
-    Q_UNUSED( numThreads )
-#endif
-
-    // a very special optimization for scatter plots
-    // where every sample is mapped to one pixel only.
-
-    const QRect rect = d_data->boundingRect.toAlignedRect();
-
-    QImage image( rect.size(), QImage::Format_ARGB32 );
-    image.fill( Qt::transparent );
-
-    if ( pen.width() <= 1 && pen.color().alpha() == 255 )
-    {
-        QwtDotsCommand command;
-        command.series = series;
-        command.rgb = pen.color().rgba();
-
-#if QWT_USE_THREADS
-        const int numPoints = ( to - from + 1 ) / numThreads;
-
-        QList< QFuture<void> > futures;
-        for ( uint i = 0; i < numThreads; i++ )
-        {
-            const QPoint pos = rect.topLeft();
-
-            const int index0 = from + i * numPoints;
-            if ( i == numThreads - 1 )
-            {
-                command.from = index0;
-                command.to = to;
-
-                qwtRenderDots( xMap, yMap, command, pos, &image );
-            }
-            else
-            {
-                command.from = index0;
-                command.to = index0 + numPoints - 1;
-
-                futures += QtConcurrent::run( &qwtRenderDots, 
-                    xMap, yMap, command, pos, &image );
-            }
-        }
-        for ( int i = 0; i < futures.size(); i++ )
-            futures[i].waitForFinished();
-#else
-        command.from = from;
-        command.to = to;
-
-        qwtRenderDots( xMap, yMap, command, rect.topLeft(), &image );
-#endif
-    }
-    else
-    {
-        // fallback implementation: to be replaced later by
-        // setting the pixels of the image like above, TODO ...
-
-        QPainter painter( &image );
-        painter.setPen( pen );
-        painter.setRenderHint( QPainter::Antialiasing, antialiased );
-
-        const int chunkSize = 1000;
-        for ( int i = from; i <= to; i += chunkSize )
-        {
-            const int indexTo = qMin( i + chunkSize - 1, to );
-            const QPolygon points = toPoints(
-                xMap, yMap, series, i, indexTo );
-
-            painter.drawPoints( points );
-        }
-    }
-
-    return image;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_mapper.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_mapper.h
deleted file mode 100644
index f634271d84df62513fd687978320112408d7f311..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_mapper.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_POINT_MAPPER_H
-#define QWT_POINT_MAPPER_H
-
-#include "qwt_global.h"
-#include "qwt_series_data.h"
-#include <qimage.h>
-
-class QwtScaleMap;
-class QPolygonF;
-class QPolygon;
-
-/*!
-  \brief A helper class for translating a series of points
-
-  QwtPointMapper is a collection of methods and optimizations
-  for translating a series of points into paint device coordinates. 
-  It is used by QwtPlotCurve but might also be useful for 
-  similar plot items displaying a QwtSeriesData<QPointF>.
- */
-class QWT_EXPORT QwtPointMapper
-{
-public:
-    /*!  
-      \brief Flags affecting the transformation process
-      \sa setFlag(), setFlags()
-     */
-    enum TransformationFlag
-    {
-        //! Round points to integer values
-        RoundPoints = 0x01,
-
-        /*! 
-          Try to remove points, that are translated to the
-          same position.
-         */
-        WeedOutPoints = 0x02
-    };
-
-    /*!  
-      \brief Flags affecting the transformation process
-      \sa setFlag(), setFlags()
-     */
-    typedef QFlags<TransformationFlag> TransformationFlags;
-
-    QwtPointMapper();
-    ~QwtPointMapper();
-
-    void setFlags( TransformationFlags );
-    TransformationFlags flags() const;
-
-    void setFlag( TransformationFlag, bool on = true );
-    bool testFlag( TransformationFlag ) const;
-
-    void setBoundingRect( const QRectF & );
-    QRectF boundingRect() const;
-
-    QPolygonF toPolygonF( const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QwtSeriesData<QPointF> *series, int from, int to ) const;
-
-    QPolygon toPolygon( const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QwtSeriesData<QPointF> *series, int from, int to ) const;
-
-    QPolygon toPoints( const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QwtSeriesData<QPointF> *series, int from, int to ) const;
-
-    QPolygonF toPointsF( const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QwtSeriesData<QPointF> *series, int from, int to ) const;
-
-    QImage toImage( const QwtScaleMap &xMap, const QwtScaleMap &yMap,
-        const QwtSeriesData<QPointF> *series, int from, int to, 
-        const QPen &, bool antialiased, uint numThreads ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPointMapper::TransformationFlags )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_polar.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_polar.cpp
deleted file mode 100644
index a555a73d63dc5b58f9759a4e13183d13dae06900..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_polar.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * QwtPolar Widget Library
- * Copyright (C) 2008   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_point_polar.h"
-#include "qwt_math.h"
-
-#if QT_VERSION < 0x040601
-#define qAtan2(y, x) ::atan2(y, x)
-#endif
-
-/*!
-   Convert and assign values from a point in Cartesian coordinates
-
-   \param p Point in Cartesian coordinates
-   \sa setPoint(), toPoint()
-*/
-QwtPointPolar::QwtPointPolar( const QPointF &p )
-{
-    d_radius = qSqrt( qwtSqr( p.x() ) + qwtSqr( p.y() ) );
-    d_azimuth = qAtan2( p.y(), p.x() );
-}
-
-/*!
-   Convert and assign values from a point in Cartesian coordinates
-   \param p Point in Cartesian coordinates
-*/
-void QwtPointPolar::setPoint( const QPointF &p )
-{
-    d_radius = qSqrt( qwtSqr( p.x() ) + qwtSqr( p.y() ) );
-    d_azimuth = qAtan2( p.y(), p.x() );
-}
-
-/*!
-   Convert and return values in Cartesian coordinates
-
-   \return Converted point in Cartesian coordinates
-
-   \note Invalid or null points will be returned as QPointF(0.0, 0.0)
-   \sa isValid(), isNull()
-*/
-QPointF QwtPointPolar::toPoint() const
-{
-    if ( d_radius <= 0.0 )
-        return QPointF( 0.0, 0.0 );
-
-    const double x = d_radius * qCos( d_azimuth );
-    const double y = d_radius * qSin( d_azimuth );
-
-    return QPointF( x, y );
-}
-
-/*!
-    \brief Compare 2 points
-
-    Two points are equal to each other if radius and
-    azimuth-coordinates are the same. Points are not equal, when
-    the azimuth differs, but other.azimuth() == azimuth() % (2 * PI).
-
-    \return True if the point is equal to other; otherwise return false.
-
-    \sa normalized()
-*/
-bool QwtPointPolar::operator==( const QwtPointPolar &other ) const
-{
-    return d_radius == other.d_radius && d_azimuth == other.d_azimuth;
-}
-
-/*!
-    Compare 2 points
-
-    Two points are equal to each other if radius and
-    azimuth-coordinates are the same. Points are not equal, when
-    the azimuth differs, but other.azimuth() == azimuth() % (2 * PI).
-
-    \return True if the point is not equal to other; otherwise return false.
-    \sa normalized()
-*/
-bool QwtPointPolar::operator!=( const QwtPointPolar &other ) const
-{
-    return d_radius != other.d_radius || d_azimuth != other.d_azimuth;
-}
-
-/*!
-   Normalize radius and azimuth
-
-   When the radius is < 0.0 it is set to 0.0. The azimuth is
-   a value >= 0.0 and < 2 * M_PI.
-
-   \return Normalized point
-*/
-QwtPointPolar QwtPointPolar::normalized() const
-{
-    const double radius = qMax( d_radius, 0.0 );
-
-    double azimuth = d_azimuth;
-    if ( azimuth < -2.0 * M_PI || azimuth >= 2 * M_PI )
-        azimuth = ::fmod( d_azimuth, 2 * M_PI );
-
-    if ( azimuth < 0.0 )
-        azimuth += 2 * M_PI;
-
-    return QwtPointPolar( azimuth, radius );
-}
-
-#ifndef QT_NO_DEBUG_STREAM
-
-QDebug operator<<( QDebug debug, const QwtPointPolar &point )
-{
-    debug.nospace() << "QwtPointPolar(" 
-        << point.azimuth() << "," << point.radius() << ")";
-
-    return debug.space();
-}
-
-#endif
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_polar.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_polar.h
deleted file mode 100644
index 8a4b45069ae957200a8a29563be4f6c363daccad..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_point_polar.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-/*! \file */
-#ifndef _QWT_POINT_POLAR_H_
-#define _QWT_POINT_POLAR_H_ 1
-
-#include "qwt_global.h"
-#include "qwt_math.h"
-#include <qpoint.h>
-#ifndef QT_NO_DEBUG_STREAM
-#include <qdebug.h>
-#endif
-
-/*!
-  \brief A point in polar coordinates
-
-  In polar coordinates a point is determined by an angle and a distance.
-  See http://en.wikipedia.org/wiki/Polar_coordinate_system
-*/
-
-class QWT_EXPORT QwtPointPolar
-{
-public:
-    QwtPointPolar();
-    QwtPointPolar( double azimuth, double radius );
-    QwtPointPolar( const QwtPointPolar & );
-    QwtPointPolar( const QPointF & );
-
-    void setPoint( const QPointF & );
-    QPointF toPoint() const;
-
-    bool isValid() const;
-    bool isNull() const;
-
-    double radius() const;
-    double azimuth() const;
-
-    double &rRadius();
-    double &rAzimuth();
-
-    void setRadius( double );
-    void setAzimuth( double );
-
-    bool operator==( const QwtPointPolar & ) const;
-    bool operator!=( const QwtPointPolar & ) const;
-
-    QwtPointPolar normalized() const;
-
-private:
-    double d_azimuth;
-    double d_radius;
-};
-
-/*!
-    Constructs a null point, with a radius and azimuth set to 0.0.
-    \sa QPointF::isNull()
-*/
-inline QwtPointPolar::QwtPointPolar():
-    d_azimuth( 0.0 ),
-    d_radius( 0.0 )
-{
-}
-
-/*!
-   Constructs a point with coordinates specified by radius and azimuth.
-
-   \param azimuth Azimuth
-   \param radius Radius
-*/
-inline QwtPointPolar::QwtPointPolar( double azimuth, double radius ):
-    d_azimuth( azimuth ),
-    d_radius( radius )
-{
-}
-
-/*!
-    Constructs a point using the values of the point specified.
-    \param other Other point
-*/
-inline QwtPointPolar::QwtPointPolar( const QwtPointPolar &other ):
-    d_azimuth( other.d_azimuth ),
-    d_radius( other.d_radius )
-{
-}
-
-//! Returns true if radius() >= 0.0
-inline bool QwtPointPolar::isValid() const
-{
-    return d_radius >= 0.0;
-}
-
-//! Returns true if radius() >= 0.0
-inline bool QwtPointPolar::isNull() const
-{
-    return d_radius == 0.0;
-}
-
-//! Returns the radius.
-inline double QwtPointPolar::radius() const
-{
-    return d_radius;
-}
-
-//! Returns the azimuth.
-inline double QwtPointPolar::azimuth() const
-{
-    return d_azimuth;
-}
-
-//! Returns the radius.
-inline double &QwtPointPolar::rRadius()
-{
-    return d_radius;
-}
-
-//! Returns the azimuth.
-inline double &QwtPointPolar::rAzimuth()
-{
-    return d_azimuth;
-}
-
-//! Sets the radius to radius.
-inline void QwtPointPolar::setRadius( double radius )
-{
-    d_radius = radius;
-}
-
-//! Sets the atimuth to atimuth.
-inline void QwtPointPolar::setAzimuth( double azimuth )
-{
-    d_azimuth = azimuth;
-}
-
-#ifndef QT_NO_DEBUG_STREAM
-QWT_EXPORT QDebug operator<<( QDebug, const QwtPointPolar & );
-#endif
-
-inline QPoint qwtPolar2Pos( const QPoint &pole,
-    double radius, double angle )
-{
-    const double x = pole.x() + radius * qCos( angle );
-    const double y = pole.y() - radius * qSin( angle );
-
-    return QPoint( qRound( x ), qRound( y ) );
-}
-
-inline QPoint qwtDegree2Pos( const QPoint &pole,
-    double radius, double angle )
-{
-    return qwtPolar2Pos( pole, radius, angle / 180.0 * M_PI );
-}
-
-inline QPointF qwtPolar2Pos( const QPointF &pole,
-    double radius, double angle )
-{
-    const double x = pole.x() + radius * qCos( angle );
-    const double y = pole.y() - radius * qSin( angle );
-
-    return QPointF( x, y);
-}
-
-inline QPointF qwtDegree2Pos( const QPointF &pole,
-    double radius, double angle )
-{
-    return qwtPolar2Pos( pole, radius, angle / 180.0 * M_PI );
-}
-
-inline QPointF qwtFastPolar2Pos( const QPointF &pole,
-    double radius, double angle )
-{
-#if QT_VERSION < 0x040601
-    const double x = pole.x() + radius * ::cos( angle );
-    const double y = pole.y() - radius * ::sin( angle );
-#else
-    const double x = pole.x() + radius * qFastCos( angle );
-    const double y = pole.y() - radius * qFastSin( angle );
-#endif
-
-    return QPointF( x, y);
-}
-
-inline QPointF qwtFastDegree2Pos( const QPointF &pole,
-    double radius, double angle )
-{   
-    return qwtFastPolar2Pos( pole, radius, angle / 180.0 * M_PI );
-} 
-
-inline QwtPointPolar qwtFastPos2Polar( const QPointF &pos )
-{
-    return QwtPointPolar( qwtFastAtan2( pos.y(), pos.x() ),
-        qSqrt( qwtSqr( pos.x() ) + qwtSqr( pos.y() ) ) );
-}
-
-#endif 
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_raster_data.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_raster_data.cpp
deleted file mode 100644
index 8ebb4640c6f75fad9b8cba47d369a6cfc5e6b1b7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_raster_data.cpp
+++ /dev/null
@@ -1,404 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_raster_data.h"
-#include "qwt_point_3d.h"
-#include <qnumeric.h>
-
-class QwtRasterData::ContourPlane
-{
-public:
-    inline ContourPlane( double z ):
-        d_z( z )
-    {
-    }
-
-    inline bool intersect( const QwtPoint3D vertex[3],
-        QPointF line[2], bool ignoreOnPlane ) const;
-
-    inline double z() const { return d_z; }
-
-private:
-    inline int compare( double z ) const;
-    inline QPointF intersection(
-        const QwtPoint3D& p1, const QwtPoint3D &p2 ) const;
-
-    double d_z;
-};
-
-inline bool QwtRasterData::ContourPlane::intersect(
-    const QwtPoint3D vertex[3], QPointF line[2],
-    bool ignoreOnPlane ) const
-{
-    bool found = true;
-
-    // Are the vertices below (-1), on (0) or above (1) the plan ?
-    const int eq1 = compare( vertex[0].z() );
-    const int eq2 = compare( vertex[1].z() );
-    const int eq3 = compare( vertex[2].z() );
-
-    /*
-        (a) All the vertices lie below the contour level.
-        (b) Two vertices lie below and one on the contour level.
-        (c) Two vertices lie below and one above the contour level.
-        (d) One vertex lies below and two on the contour level.
-        (e) One vertex lies below, one on and one above the contour level.
-        (f) One vertex lies below and two above the contour level.
-        (g) Three vertices lie on the contour level.
-        (h) Two vertices lie on and one above the contour level.
-        (i) One vertex lies on and two above the contour level.
-        (j) All the vertices lie above the contour level.
-     */
-
-    static const int tab[3][3][3] =
-    {
-        // jump table to avoid nested case statements
-        { { 0, 0, 8 }, { 0, 2, 5 }, { 7, 6, 9 } },
-        { { 0, 3, 4 }, { 1, 10, 1 }, { 4, 3, 0 } },
-        { { 9, 6, 7 }, { 5, 2, 0 }, { 8, 0, 0 } }
-    };
-
-    const int edgeType = tab[eq1+1][eq2+1][eq3+1];
-    switch ( edgeType )
-    {
-        case 1:
-            // d(0,0,-1), h(0,0,1)
-            line[0] = vertex[0].toPoint();
-            line[1] = vertex[1].toPoint();
-            break;
-        case 2:
-            // d(-1,0,0), h(1,0,0)
-            line[0] = vertex[1].toPoint();
-            line[1] = vertex[2].toPoint();
-            break;
-        case 3:
-            // d(0,-1,0), h(0,1,0)
-            line[0] = vertex[2].toPoint();
-            line[1] = vertex[0].toPoint();
-            break;
-        case 4:
-            // e(0,-1,1), e(0,1,-1)
-            line[0] = vertex[0].toPoint();
-            line[1] = intersection( vertex[1], vertex[2] );
-            break;
-        case 5:
-            // e(-1,0,1), e(1,0,-1)
-            line[0] = vertex[1].toPoint();
-            line[1] = intersection( vertex[2], vertex[0] );
-            break;
-        case 6:
-            // e(-1,1,0), e(1,0,-1)
-            line[0] = vertex[2].toPoint();
-            line[1] = intersection( vertex[0], vertex[1] );
-            break;
-        case 7:
-            // c(-1,1,-1), f(1,1,-1)
-            line[0] = intersection( vertex[0], vertex[1] );
-            line[1] = intersection( vertex[1], vertex[2] );
-            break;
-        case 8:
-            // c(-1,-1,1), f(1,1,-1)
-            line[0] = intersection( vertex[1], vertex[2] );
-            line[1] = intersection( vertex[2], vertex[0] );
-            break;
-        case 9:
-            // f(-1,1,1), c(1,-1,-1)
-            line[0] = intersection( vertex[2], vertex[0] );
-            line[1] = intersection( vertex[0], vertex[1] );
-            break;
-        case 10:
-            // g(0,0,0)
-            // The CONREC algorithm has no satisfying solution for
-            // what to do, when all vertices are on the plane.
-
-            if ( ignoreOnPlane )
-                found = false;
-            else
-            {
-                line[0] = vertex[2].toPoint();
-                line[1] = vertex[0].toPoint();
-            }
-            break;
-        default:
-            found = false;
-    }
-
-    return found;
-}
-
-inline int QwtRasterData::ContourPlane::compare( double z ) const
-{
-    if ( z > d_z )
-        return 1;
-
-    if ( z < d_z )
-        return -1;
-
-    return 0;
-}
-
-inline QPointF QwtRasterData::ContourPlane::intersection(
-    const QwtPoint3D& p1, const QwtPoint3D &p2 ) const
-{
-    const double h1 = p1.z() - d_z;
-    const double h2 = p2.z() - d_z;
-
-    const double x = ( h2 * p1.x() - h1 * p2.x() ) / ( h2 - h1 );
-    const double y = ( h2 * p1.y() - h1 * p2.y() ) / ( h2 - h1 );
-
-    return QPointF( x, y );
-}
-
-//! Constructor
-QwtRasterData::QwtRasterData()
-{
-}
-
-//! Destructor
-QwtRasterData::~QwtRasterData()
-{
-}
-
-/*!
-   Set the bounding interval for the x, y or z coordinates.
-
-   \param axis Axis
-   \param interval Bounding interval
-
-   \sa interval()
-*/
-void QwtRasterData::setInterval( Qt::Axis axis, const QwtInterval &interval )
-{
-    d_intervals[axis] = interval;
-}
-
-/*!
-  \brief Initialize a raster
-
-  Before the composition of an image QwtPlotSpectrogram calls initRaster(),
-  announcing the area and its resolution that will be requested.
-
-  The default implementation does nothing, but for data sets that
-  are stored in files, it might be good idea to reimplement initRaster(),
-  where the data is resampled and loaded into memory.
-
-  \param area Area of the raster
-  \param raster Number of horizontal and vertical pixels
-
-  \sa initRaster(), value()
-*/
-void QwtRasterData::initRaster( const QRectF &area, const QSize &raster )
-{
-    Q_UNUSED( area );
-    Q_UNUSED( raster );
-}
-
-/*!
-  \brief Discard a raster
-
-  After the composition of an image QwtPlotSpectrogram calls discardRaster().
-
-  The default implementation does nothing, but if data has been loaded
-  in initRaster(), it could deleted now.
-
-  \sa initRaster(), value()
-*/
-void QwtRasterData::discardRaster()
-{
-}
-
-/*!
-   \brief Pixel hint
-
-   pixelHint() returns the geometry of a pixel, that can be used 
-   to calculate the resolution and alignment of the plot item, that is
-   representing the data. 
-   
-   Width and height of the hint need to be the horizontal  
-   and vertical distances between 2 neighbored points. 
-   The center of the hint has to be the position of any point 
-   ( it doesn't matter which one ).
-
-   An empty hint indicates, that there are values for any detail level.
-
-   Limiting the resolution of the image might significantly improve
-   the performance and heavily reduce the amount of memory when rendering
-   a QImage from the raster data. 
-
-   The default implementation returns an empty rectangle recommending
-   to render in target device ( f.e. screen ) resolution.
-
-   \param area In most implementations the resolution of the data doesn't
-               depend on the requested area.
-
-   \return Bounding rectangle of a pixel 
-*/
-QRectF QwtRasterData::pixelHint( const QRectF &area ) const
-{
-    Q_UNUSED( area );
-    return QRectF(); 
-}
-
-/*!
-   Calculate contour lines
-
-   \param rect Bounding rectangle for the contour lines
-   \param raster Number of data pixels of the raster data
-   \param levels List of limits, where to insert contour lines
-   \param flags Flags to customize the contouring algorithm
-
-   \return Calculated contour lines
-
-   An adaption of CONREC, a simple contouring algorithm.
-   http://local.wasp.uwa.edu.au/~pbourke/papers/conrec/
-*/
-QwtRasterData::ContourLines QwtRasterData::contourLines(
-    const QRectF &rect, const QSize &raster,
-    const QList<double> &levels, ConrecFlags flags ) const
-{
-    ContourLines contourLines;
-
-    if ( levels.size() == 0 || !rect.isValid() || !raster.isValid() )
-        return contourLines;
-
-    const double dx = rect.width() / raster.width();
-    const double dy = rect.height() / raster.height();
-
-    const bool ignoreOnPlane =
-        flags & QwtRasterData::IgnoreAllVerticesOnLevel;
-
-    const QwtInterval range = interval( Qt::ZAxis );
-    bool ignoreOutOfRange = false;
-    if ( range.isValid() )
-        ignoreOutOfRange = flags & IgnoreOutOfRange;
-
-    QwtRasterData *that = const_cast<QwtRasterData *>( this );
-    that->initRaster( rect, raster );
-
-    for ( int y = 0; y < raster.height() - 1; y++ )
-    {
-        enum Position
-        {
-            Center,
-
-            TopLeft,
-            TopRight,
-            BottomRight,
-            BottomLeft,
-
-            NumPositions
-        };
-
-        QwtPoint3D xy[NumPositions];
-
-        for ( int x = 0; x < raster.width() - 1; x++ )
-        {
-            const QPointF pos( rect.x() + x * dx, rect.y() + y * dy );
-
-            if ( x == 0 )
-            {
-                xy[TopRight].setX( pos.x() );
-                xy[TopRight].setY( pos.y() );
-                xy[TopRight].setZ(
-                    value( xy[TopRight].x(), xy[TopRight].y() )
-                );
-
-                xy[BottomRight].setX( pos.x() );
-                xy[BottomRight].setY( pos.y() + dy );
-                xy[BottomRight].setZ(
-                    value( xy[BottomRight].x(), xy[BottomRight].y() )
-                );
-            }
-
-            xy[TopLeft] = xy[TopRight];
-            xy[BottomLeft] = xy[BottomRight];
-
-            xy[TopRight].setX( pos.x() + dx );
-            xy[TopRight].setY( pos.y() );
-            xy[BottomRight].setX( pos.x() + dx );
-            xy[BottomRight].setY( pos.y() + dy );
-
-            xy[TopRight].setZ(
-                value( xy[TopRight].x(), xy[TopRight].y() )
-            );
-            xy[BottomRight].setZ(
-                value( xy[BottomRight].x(), xy[BottomRight].y() )
-            );
-
-            double zMin = xy[TopLeft].z();
-            double zMax = zMin;
-            double zSum = zMin;
-
-            for ( int i = TopRight; i <= BottomLeft; i++ )
-            {
-                const double z = xy[i].z();
-
-                zSum += z;
-                if ( z < zMin )
-                    zMin = z;
-                if ( z > zMax )
-                    zMax = z;
-            }
-
-            if ( qIsNaN( zSum ) )
-            {
-                // one of the points is NaN
-                continue;
-            }
-
-            if ( ignoreOutOfRange )
-            {
-                if ( !range.contains( zMin ) || !range.contains( zMax ) )
-                    continue;
-            }
-
-            if ( zMax < levels[0] ||
-                zMin > levels[levels.size() - 1] )
-            {
-                continue;
-            }
-
-            xy[Center].setX( pos.x() + 0.5 * dx );
-            xy[Center].setY( pos.y() + 0.5 * dy );
-            xy[Center].setZ( 0.25 * zSum );
-
-            const int numLevels = levels.size();
-            for ( int l = 0; l < numLevels; l++ )
-            {
-                const double level = levels[l];
-                if ( level < zMin || level > zMax )
-                    continue;
-                QPolygonF &lines = contourLines[level];
-                const ContourPlane plane( level );
-
-                QPointF line[2];
-                QwtPoint3D vertex[3];
-
-                for ( int m = TopLeft; m < NumPositions; m++ )
-                {
-                    vertex[0] = xy[m];
-                    vertex[1] = xy[0];
-                    vertex[2] = xy[m != BottomLeft ? m + 1 : TopLeft];
-
-                    const bool intersects =
-                        plane.intersect( vertex, line, ignoreOnPlane );
-                    if ( intersects )
-                    {
-                        lines += line[0];
-                        lines += line[1];
-                    }
-                }
-            }
-        }
-    }
-
-    that->discardRaster();
-
-    return contourLines;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_raster_data.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_raster_data.h
deleted file mode 100644
index 19d6d65fd10e84138833eb2a9b20238bb27b1a70..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_raster_data.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_RASTER_DATA_H
-#define QWT_RASTER_DATA_H 1
-
-#include "qwt_global.h"
-#include "qwt_interval.h"
-#include <qmap.h>
-#include <qlist.h>
-#include <qpolygon.h>
-
-class QwtScaleMap;
-
-/*!
-  \brief QwtRasterData defines an interface to any type of raster data.
-
-  QwtRasterData is an abstract interface, that is used by
-  QwtPlotRasterItem to find the values at the pixels of its raster.
-
-  Often a raster item is used to display values from a matrix. Then the
-  derived raster data class needs to implement some sort of resampling,
-  that maps the raster of the matrix into the requested raster of
-  the raster item ( depending on resolution and scales of the canvas ).
-*/
-class QWT_EXPORT QwtRasterData
-{
-public:
-    //! Contour lines
-    typedef QMap<double, QPolygonF> ContourLines;
-
-    //! Flags to modify the contour algorithm
-    enum ConrecFlag
-    {
-        //! Ignore all vertices on the same level
-        IgnoreAllVerticesOnLevel = 0x01,
-
-        //! Ignore all values, that are out of range
-        IgnoreOutOfRange = 0x02
-    };
-
-    //! Flags to modify the contour algorithm
-    typedef QFlags<ConrecFlag> ConrecFlags;
-
-    QwtRasterData();
-    virtual ~QwtRasterData();
-
-    virtual void setInterval( Qt::Axis, const QwtInterval & );
-    const QwtInterval &interval(Qt::Axis) const;
-
-    virtual QRectF pixelHint( const QRectF & ) const;
-
-    virtual void initRaster( const QRectF &, const QSize& raster );
-    virtual void discardRaster();
-
-    /*!
-       \return the value at a raster position
-       \param x X value in plot coordinates
-       \param y Y value in plot coordinates
-    */
-    virtual double value( double x, double y ) const = 0;
-
-    virtual ContourLines contourLines( const QRectF &rect,
-        const QSize &raster, const QList<double> &levels,
-        ConrecFlags ) const;
-
-    class Contour3DPoint;
-    class ContourPlane;
-
-private:
-    // Disabled copy constructor and operator=
-    QwtRasterData( const QwtRasterData & );
-    QwtRasterData &operator=( const QwtRasterData & );
-
-    QwtInterval d_intervals[3];
-};
-
-/*!
-   \return Bounding interval for a axis
-   \sa setInterval
-*/
-inline const QwtInterval &QwtRasterData::interval( Qt::Axis axis) const
-{
-    return d_intervals[axis];
-}
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtRasterData::ConrecFlags )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_round_scale_draw.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_round_scale_draw.cpp
deleted file mode 100644
index 9e7d75c48bf3ea06bd8d830c0f67f7e6eddc903b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_round_scale_draw.cpp
+++ /dev/null
@@ -1,314 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_round_scale_draw.h"
-#include "qwt_painter.h"
-#include "qwt_scale_div.h"
-#include "qwt_scale_map.h"
-#include "qwt_math.h"
-#include <qpen.h>
-#include <qpainter.h>
-#include <qfontmetrics.h>
-#include <qmath.h>
-
-class QwtRoundScaleDraw::PrivateData
-{
-public:
-    PrivateData():
-        center( 50.0, 50.0 ),
-        radius( 50.0 ),
-        startAngle( -135.0 ),
-        endAngle( 135.0 )
-    {
-    }
-
-    QPointF center;
-    double radius;
-
-    double startAngle;
-    double endAngle;
-};
-
-/*!
-  \brief Constructor
-
-  The range of the scale is initialized to [0, 100],
-  The center is set to (50, 50) with a radius of 50.
-  The angle range is set to [-135, 135].
-*/
-QwtRoundScaleDraw::QwtRoundScaleDraw()
-{
-    d_data = new QwtRoundScaleDraw::PrivateData;
-
-    setRadius( 50 );
-    scaleMap().setPaintInterval( d_data->startAngle, d_data->endAngle );
-}
-
-//! Destructor
-QwtRoundScaleDraw::~QwtRoundScaleDraw()
-{
-    delete d_data;
-}
-
-/*!
-  Change of radius the scale
-
-  Radius is the radius of the backbone without ticks and labels.
-
-  \param radius New Radius
-  \sa moveCenter()
-*/
-void QwtRoundScaleDraw::setRadius( double radius )
-{
-    d_data->radius = radius;
-}
-
-/*!
-  Get the radius
-
-  Radius is the radius of the backbone without ticks and labels.
-
-  \return Radius of the scale
-  \sa setRadius(), extent()
-*/
-double QwtRoundScaleDraw::radius() const
-{
-    return d_data->radius;
-}
-
-/*!
-   Move the center of the scale draw, leaving the radius unchanged
-
-   \param center New center
-   \sa setRadius()
-*/
-void QwtRoundScaleDraw::moveCenter( const QPointF &center )
-{
-    d_data->center = center;
-}
-
-//! Get the center of the scale
-QPointF QwtRoundScaleDraw::center() const
-{
-    return d_data->center;
-}
-
-/*!
-  \brief Adjust the baseline circle segment for round scales.
-
-  The baseline will be drawn from min(angle1,angle2) to max(angle1, angle2).
-  The default setting is [ -135, 135 ].
-  An angle of 0 degrees corresponds to the 12 o'clock position,
-  and positive angles count in a clockwise direction.
-  \param angle1
-  \param angle2 boundaries of the angle interval in degrees.
-  \warning <ul>
-  <li>The angle range is limited to [-360, 360] degrees. Angles exceeding
-      this range will be clipped.
-  <li>For angles more or equal than 360 degrees above or below min(angle1, angle2),
-      scale marks will not be drawn.
-  <li>If you need a counterclockwise scale, use QwtScaleDiv::setInterval()
-  </ul>
-*/
-void QwtRoundScaleDraw::setAngleRange( double angle1, double angle2 )
-{
-#if 0
-    angle1 = qBound( -360.0, angle1, 360.0 );
-    angle2 = qBound( -360.0, angle2, 360.0 );
-#endif
-
-    d_data->startAngle = angle1;
-    d_data->endAngle = angle2;
-
-    if ( d_data->startAngle == d_data->endAngle )
-    {
-        d_data->startAngle -= 1;
-        d_data->endAngle += 1;
-    }
-
-    scaleMap().setPaintInterval( d_data->startAngle, d_data->endAngle );
-}
-
-/*!
-   Draws the label for a major scale tick
-
-   \param painter Painter
-   \param value Value
-
-   \sa drawTick(), drawBackbone()
-*/
-void QwtRoundScaleDraw::drawLabel( QPainter *painter, double value ) const
-{
-    const double tval = scaleMap().transform( value );
-    if ( ( tval >= d_data->startAngle + 360.0 )
-        || ( tval <= d_data->startAngle - 360.0 ) )
-    {
-        return;
-    }
-
-    const QwtText label = tickLabel( painter->font(), value );
-    if ( label.isEmpty() )
-        return;
-
-    double radius = d_data->radius;
-    if ( hasComponent( QwtAbstractScaleDraw::Ticks ) ||
-        hasComponent( QwtAbstractScaleDraw::Backbone ) )
-    {
-        radius += spacing();
-    }
-
-    if ( hasComponent( QwtAbstractScaleDraw::Ticks ) )
-        radius += tickLength( QwtScaleDiv::MajorTick );
-
-    const QSizeF sz = label.textSize( painter->font() );
-    const double arc = qwtRadians( tval );
-
-    const double x = d_data->center.x() +
-        ( radius + sz.width() / 2.0 ) * qSin( arc );
-    const double y = d_data->center.y() -
-        ( radius + sz.height() / 2.0 ) * qCos( arc );
-
-    const QRectF r( x - sz.width() / 2, y - sz.height() / 2,
-        sz.width(), sz.height() );
-    label.draw( painter, r );
-}
-
-/*!
-   Draw a tick
-
-   \param painter Painter
-   \param value Value of the tick
-   \param len Lenght of the tick
-
-   \sa drawBackbone(), drawLabel()
-*/
-void QwtRoundScaleDraw::drawTick( QPainter *painter, double value, double len ) const
-{
-    if ( len <= 0 )
-        return;
-
-    const double tval = scaleMap().transform( value );
-
-    const double cx = d_data->center.x();
-    const double cy = d_data->center.y();
-    const double radius = d_data->radius;
-
-    if ( ( tval < d_data->startAngle + 360.0 )
-        && ( tval > d_data->startAngle - 360.0 ) )
-    {
-        const double arc = qwtRadians( tval );
-
-        const double sinArc = qSin( arc );
-        const double cosArc = qCos( arc );
-
-        const double x1 = cx + radius * sinArc;
-        const double x2 = cx + ( radius + len ) * sinArc;
-        const double y1 = cy - radius * cosArc;
-        const double y2 = cy - ( radius + len ) * cosArc;
-
-        QwtPainter::drawLine( painter, x1, y1, x2, y2 );
-    }
-}
-
-/*!
-   Draws the baseline of the scale
-   \param painter Painter
-
-   \sa drawTick(), drawLabel()
-*/
-void QwtRoundScaleDraw::drawBackbone( QPainter *painter ) const
-{
-    const double deg1 = scaleMap().p1();
-    const double deg2 = scaleMap().p2();
-
-    const int a1 = qRound( qMin( deg1, deg2 ) - 90 );
-    const int a2 = qRound( qMax( deg1, deg2 ) - 90 );
-
-    const double radius = d_data->radius;
-    const double x = d_data->center.x() - radius;
-    const double y = d_data->center.y() - radius;
-
-    painter->drawArc( QRectF( x, y, 2 * radius, 2 * radius ),
-        -a2 * 16, ( a2 - a1 + 1 ) * 16 );          // counterclockwise
-}
-
-/*!
-   Calculate the extent of the scale
-
-   The extent is the distance between the baseline to the outermost
-   pixel of the scale draw. radius() + extent() is an upper limit
-   for the radius of the bounding circle.
-
-   \param font Font used for painting the labels
-   \return Calculated extent
-
-   \sa setMinimumExtent(), minimumExtent()
-   \warning The implemented algorithm is not too smart and
-            calculates only an upper limit, that might be a
-            few pixels too large
-*/
-double QwtRoundScaleDraw::extent( const QFont &font ) const
-{
-    double d = 0.0;
-
-    if ( hasComponent( QwtAbstractScaleDraw::Labels ) )
-    {
-        const QwtScaleDiv &sd = scaleDiv();
-        const QList<double> &ticks = sd.ticks( QwtScaleDiv::MajorTick );
-        for ( int i = 0; i < ticks.count(); i++ )
-        {
-            const double value = ticks[i];
-            if ( !sd.contains( value ) )
-                continue;
-
-            const double tval = scaleMap().transform( value );
-            if ( ( tval < d_data->startAngle + 360 )
-                && ( tval > d_data->startAngle - 360 ) )
-            {
-                const QwtText label = tickLabel( font, value );
-                if ( label.isEmpty() )
-                    continue;
-
-                const double arc = qwtRadians( tval );
-
-                const QSizeF sz = label.textSize( font );
-                const double off = qMax( sz.width(), sz.height() );
-
-                double x = off * qSin( arc );
-                double y = off * qCos( arc );
-
-                const double dist = qSqrt( x * x + y * y );
-                if ( dist > d )
-                    d = dist;
-            }
-        }
-    }
-
-    if ( hasComponent( QwtAbstractScaleDraw::Ticks ) )
-    {
-        d += maxTickLength();
-    }
-
-    if ( hasComponent( QwtAbstractScaleDraw::Backbone ) )
-    {
-        const double pw = qMax( 1, penWidth() );  // pen width can be zero
-        d += pw;
-    }
-
-    if ( hasComponent( QwtAbstractScaleDraw::Labels ) &&
-        ( hasComponent( QwtAbstractScaleDraw::Ticks ) ||
-            hasComponent( QwtAbstractScaleDraw::Backbone ) ) )
-    {
-        d += spacing();
-    }
-
-    d = qMax( d, minimumExtent() );
-
-    return d;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_round_scale_draw.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_round_scale_draw.h
deleted file mode 100644
index eed06f61ca8850858d41a622a3d411725ab8dbee..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_round_scale_draw.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_ROUND_SCALE_DRAW_H
-#define QWT_ROUND_SCALE_DRAW_H
-
-#include "qwt_global.h"
-#include "qwt_abstract_scale_draw.h"
-#include <qpoint.h>
-
-/*!
-  \brief A class for drawing round scales
-
-  QwtRoundScaleDraw can be used to draw round scales.
-  The circle segment can be adjusted by setAngleRange().
-  The geometry of the scale can be specified with
-  moveCenter() and setRadius().
-
-  After a scale division has been specified as a QwtScaleDiv object
-  using QwtAbstractScaleDraw::setScaleDiv(const QwtScaleDiv &s),
-  the scale can be drawn with the QwtAbstractScaleDraw::draw() member.
-*/
-
-class QWT_EXPORT QwtRoundScaleDraw: public QwtAbstractScaleDraw
-{
-public:
-    QwtRoundScaleDraw();
-    virtual ~QwtRoundScaleDraw();
-
-    void setRadius( double radius );
-    double radius() const;
-
-    void moveCenter( double x, double y );
-    void moveCenter( const QPointF & );
-    QPointF center() const;
-
-    void setAngleRange( double angle1, double angle2 );
-
-    virtual double extent( const QFont & ) const;
-
-protected:
-    virtual void drawTick( QPainter *, double val, double len ) const;
-    virtual void drawBackbone( QPainter * ) const;
-    virtual void drawLabel( QPainter *, double val ) const;
-
-private:
-    QwtRoundScaleDraw( const QwtRoundScaleDraw & );
-    QwtRoundScaleDraw &operator=( const QwtRoundScaleDraw &other );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-//! Move the center of the scale draw, leaving the radius unchanged
-inline void QwtRoundScaleDraw::moveCenter( double x, double y )
-{
-    moveCenter( QPointF( x, y ) );
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_samples.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_samples.h
deleted file mode 100644
index d54461fafbfa498d9cdf33ca8a381cbee79771df..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_samples.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SAMPLES_H
-#define QWT_SAMPLES_H 1
-
-#include "qwt_global.h"
-#include "qwt_interval.h"
-#include <qvector.h>
-#include <qrect.h>
-
-//! \brief A sample of the types (x1-x2, y) or (x, y1-y2)
-class QWT_EXPORT QwtIntervalSample
-{
-public:
-    QwtIntervalSample();
-    QwtIntervalSample( double, const QwtInterval & );
-    QwtIntervalSample( double value, double min, double max );
-
-    bool operator==( const QwtIntervalSample & ) const;
-    bool operator!=( const QwtIntervalSample & ) const;
-
-    //! Value
-    double value;
-
-    //! Interval
-    QwtInterval interval;
-};
-
-/*!
-  Constructor
-  The value is set to 0.0, the interval is invalid
-*/
-inline QwtIntervalSample::QwtIntervalSample():
-    value( 0.0 )
-{
-}
-
-//! Constructor
-inline QwtIntervalSample::QwtIntervalSample(
-        double v, const QwtInterval &intv ):
-    value( v ),
-    interval( intv )
-{
-}
-
-//! Constructor
-inline QwtIntervalSample::QwtIntervalSample(
-        double v, double min, double max ):
-    value( v ),
-    interval( min, max )
-{
-}
-
-//! Compare operator
-inline bool QwtIntervalSample::operator==(
-    const QwtIntervalSample &other ) const
-{
-    return value == other.value && interval == other.interval;
-}
-
-//! Compare operator
-inline bool QwtIntervalSample::operator!=(
-    const QwtIntervalSample &other ) const
-{
-    return !( *this == other );
-}
-
-//! \brief A sample of the types (x1...xn, y) or (x, y1..yn)
-class QWT_EXPORT QwtSetSample
-{
-public:
-    QwtSetSample();
-    QwtSetSample( double, const QVector<double> & = QVector<double>() );
-
-    bool operator==( const QwtSetSample &other ) const;
-    bool operator!=( const QwtSetSample &other ) const;
-
-    double added() const;
-
-    //! value
-    double value;
-
-    //! Vector of values associated to value
-    QVector<double> set;
-};
-
-/*!
-  Constructor
-  The value is set to 0.0
-*/
-inline QwtSetSample::QwtSetSample():
-    value( 0.0 )
-{
-}
-
-/*!
-  Constructor
-
-  \param v Value
-  \param s Set of values
-*/
-inline QwtSetSample::QwtSetSample( double v, const QVector< double > &s ):
-    value( v ),
-    set( s )
-{
-}
-
-//! Compare operator
-inline bool QwtSetSample::operator==( const QwtSetSample &other ) const
-{
-    return value == other.value && set == other.set;
-}
-
-//! Compare operator
-inline bool QwtSetSample::operator!=( const QwtSetSample &other ) const
-{
-    return !( *this == other );
-}
-
-//! \return All values of the set added
-inline double QwtSetSample::added() const
-{
-    double y = 0.0;
-    for ( int i = 0; i < set.size(); i++ )
-        y += set[i];
-
-    return y;
-}
-
-/*!
-   \brief Open-High-Low-Close sample used in financial charts
-
-   In financial charts the movement of a price in a time interval is often
-   represented by the opening/closing prices and the lowest/highest prices
-   in this interval.
-
-   \sa QwtTradingChartData
-*/
-class QWT_EXPORT QwtOHLCSample
-{
-public:
-    QwtOHLCSample( double time = 0.0,
-        double open = 0.0, double high = 0.0,
-        double low = 0.0, double close = 0.0 );
-
-    QwtInterval boundingInterval() const;
-
-    bool isValid() const;
-
-    /*!
-      Time of the sample, usually a number representing
-      a specific interval - like a day.
-    */
-    double time;
-
-    //! Opening price
-    double open;
-
-    //! Highest price
-    double high;
-
-    //! Lowest price
-    double low;
-
-    //! Closing price
-    double close;
-};
-
-
-/*!
-  Constructor
-
-  \param t Time value
-  \param o Open value
-  \param h High value
-  \param l Low value
-  \param c Close value
-*/
-inline QwtOHLCSample::QwtOHLCSample( double t,
-        double o, double h, double l, double c ):
-    time( t ),
-    open( o ),
-    high( h ),
-    low( l ),
-    close( c )
-{
-}
-
-/*!
-  \brief Check if a sample is valid
-
-  A sample is valid, when all of the following checks are true:
-
-  - low <= high
-  - low <= open <= high
-  - low <= close <= high
-
-  \return True, when the sample is valid
- */
-inline bool QwtOHLCSample::isValid() const
-{
-    return ( low <= high )
-        && ( open >= low )
-        && ( open <= high )
-        && ( close >= low )
-        && ( close <= high );
-}
-
-/*!
-   \brief Calculate the bounding interval of the OHLC values
-
-   For valid samples the limits of this interval are always low/high.
-
-   \return Bounding interval
-   \sa isValid()
- */
-inline QwtInterval QwtOHLCSample::boundingInterval() const
-{
-    double minY = open;
-    minY = qMin( minY, high );
-    minY = qMin( minY, low );
-    minY = qMin( minY, close );
-
-    double maxY = open;
-    maxY = qMax( maxY, high );
-    maxY = qMax( maxY, low );
-    maxY = qMax( maxY, close );
-
-    return QwtInterval( minY, maxY );
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_sampling_thread.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_sampling_thread.cpp
deleted file mode 100644
index c948daf2304cbc46670c10a59469b2afc4d1b98b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_sampling_thread.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_sampling_thread.h"
-#include "qwt_system_clock.h"
-
-class QwtSamplingThread::PrivateData
-{
-public:
-    QwtSystemClock clock;
-
-    double interval;
-    bool isStopped;
-};
-
-
-//! Constructor
-QwtSamplingThread::QwtSamplingThread( QObject *parent ):
-    QThread( parent )
-{
-    d_data = new PrivateData;
-    d_data->interval = 1000; // 1 second
-    d_data->isStopped = true;
-}
-
-//! Destructor
-QwtSamplingThread::~QwtSamplingThread()
-{
-    delete d_data;
-}
-
-/*!
-   Change the interval (in ms), when sample() is called.
-   The default interval is 1000.0 ( = 1s )
-
-   \param interval Interval
-   \sa interval()
-*/
-void QwtSamplingThread::setInterval( double interval )
-{
-    if ( interval < 0.0 )
-        interval = 0.0;
-
-    d_data->interval = interval;
-}
-
-/*!
-   \return Interval (in ms), between 2 calls of sample()
-   \sa setInterval()
-*/
-double QwtSamplingThread::interval() const
-{
-    return d_data->interval;
-}
-
-/*!
-   \return Time (in ms) since the thread was started
-   \sa QThread::start(), run()
-*/
-double QwtSamplingThread::elapsed() const
-{
-    if ( d_data->isStopped )
-        return 0.0;
-
-    return d_data->clock.elapsed();
-}
-
-/*!
-   Terminate the collecting thread
-   \sa QThread::start(), run()
-*/
-void QwtSamplingThread::stop()
-{
-    d_data->isStopped = true;
-}
-
-/*!
-   Loop collecting samples started from QThread::start()
-   \sa stop()
-*/
-void QwtSamplingThread::run()
-{
-    d_data->clock.start();
-    d_data->isStopped = false;
-
-    while ( !d_data->isStopped )
-    {
-        const double elapsed = d_data->clock.elapsed();
-        sample( elapsed / 1000.0 );
-
-        if ( d_data->interval > 0.0 )
-        {
-            const double msecs =
-                d_data->interval - ( d_data->clock.elapsed() - elapsed );
-
-            if ( msecs > 0.0 )
-                usleep( qRound( 1000.0 * msecs ) );
-        }
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_sampling_thread.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_sampling_thread.h
deleted file mode 100644
index 74b6cd4c29c3cf967527f9e150a20f8efb1d9f8d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_sampling_thread.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef _QWT_SAMPLING_THREAD_H_
-#define _QWT_SAMPLING_THREAD_H_
-
-#include "qwt_global.h"
-#include <qthread.h>
-
-/*!
-  \brief A thread collecting samples at regular intervals.
-
-  Continuous signals are converted into a discrete signal by
-  collecting samples at regular intervals. A discrete signal
-  can be displayed by a QwtPlotSeriesItem on a QwtPlot widget.
-
-  QwtSamplingThread starts a thread calling periodically sample(),
-  to collect and store ( or emit ) a single sample.
-
-  \sa QwtPlotCurve, QwtPlotSeriesItem
-*/
-class QWT_EXPORT QwtSamplingThread: public QThread
-{
-    Q_OBJECT
-
-public:
-    virtual ~QwtSamplingThread();
-
-    double interval() const;
-    double elapsed() const;
-
-public Q_SLOTS:
-    void setInterval( double interval );
-    void stop();
-
-protected:
-    explicit QwtSamplingThread( QObject *parent = NULL );
-
-    virtual void run();
-
-    /*!
-       Collect a sample
-
-       \param elapsed Time since the thread was started in milliseconds
-     */
-    virtual void sample( double elapsed ) = 0;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_div.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_div.cpp
deleted file mode 100644
index 40a8ddefe1b417c0e93b0f372ad627a6d0e2fb5f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_div.cpp
+++ /dev/null
@@ -1,331 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_scale_div.h"
-#include "qwt_math.h"
-#include <qalgorithms.h>
-
-/*!
-  Construct a division without ticks
-
-  \param lowerBound First boundary
-  \param upperBound Second boundary
-
-  \note lowerBound might be greater than upperBound for inverted scales
- */
-QwtScaleDiv::QwtScaleDiv( double lowerBound, double upperBound ):
-    d_lowerBound( lowerBound ),
-    d_upperBound( upperBound )
-{
-}
-
-/*!
-  Construct a scale division
-
-  \param interval Interval
-  \param ticks List of major, medium and minor ticks
-*/
-QwtScaleDiv::QwtScaleDiv( const QwtInterval &interval,
-        QList<double> ticks[NTickTypes] ):
-    d_lowerBound( interval.minValue() ),
-    d_upperBound( interval.maxValue() )
-{
-    for ( int i = 0; i < NTickTypes; i++ )
-        d_ticks[i] = ticks[i];
-}
-
-/*!
-  Construct a scale division
-
-  \param lowerBound First boundary
-  \param upperBound Second boundary
-  \param ticks List of major, medium and minor ticks
-
-  \note lowerBound might be greater than upperBound for inverted scales
-*/
-QwtScaleDiv::QwtScaleDiv( double lowerBound, double upperBound,
-        QList<double> ticks[NTickTypes] ):
-    d_lowerBound( lowerBound ),
-    d_upperBound( upperBound )
-{
-    for ( int i = 0; i < NTickTypes; i++ )
-        d_ticks[i] = ticks[i];
-}
-
-/*!
-  Construct a scale division
-
-  \param lowerBound First boundary
-  \param upperBound Second boundary
-  \param minorTicks List of minor ticks
-  \param mediumTicks List medium ticks
-  \param majorTicks List of major ticks
-
-  \note lowerBound might be greater than upperBound for inverted scales
-*/
-QwtScaleDiv::QwtScaleDiv( double lowerBound, double upperBound,
-        const QList<double> &minorTicks, 
-        const QList<double> &mediumTicks,
-        const QList<double> &majorTicks ):
-    d_lowerBound( lowerBound ),
-    d_upperBound( upperBound )
-{
-    d_ticks[ MinorTick ] = minorTicks;
-    d_ticks[ MediumTick ] = mediumTicks;
-    d_ticks[ MajorTick ] = majorTicks;
-}
-
-/*!
-  Change the interval
-
-  \param lowerBound First boundary
-  \param upperBound Second boundary
-
-  \note lowerBound might be greater than upperBound for inverted scales
-*/
-void QwtScaleDiv::setInterval( double lowerBound, double upperBound )
-{
-    d_lowerBound = lowerBound;
-    d_upperBound = upperBound;
-}
-
-/*!
-   Change the interval
-
-   \param interval Interval
-*/
-void QwtScaleDiv::setInterval( const QwtInterval &interval )
-{
-    d_lowerBound = interval.minValue();
-    d_upperBound = interval.maxValue();
-}
-
-/*!
-  \return lowerBound -> upperBound
-*/
-QwtInterval QwtScaleDiv::interval() const
-{
-    return QwtInterval( d_lowerBound, d_upperBound );
-}
-
-/*!
-  Set the first boundary
-
-  \param lowerBound First boundary
-  \sa lowerBiound(), setUpperBound()
- */
-void QwtScaleDiv::setLowerBound( double lowerBound  )
-{
-    d_lowerBound = lowerBound;
-}
-
-/*!
-  \return First boundary
-  \sa upperBound()
-*/
-double QwtScaleDiv::lowerBound() const
-{
-    return d_lowerBound;
-}   
-
-/*!
-  Set the second boundary
-
-  \param upperBound Second boundary
-  \sa upperBound(), setLowerBound()
- */
-void QwtScaleDiv::setUpperBound( double upperBound  )
-{
-    d_upperBound = upperBound;
-} 
-
-/*!
-  \return upper bound
-  \sa lowerBound()
-*/
-double QwtScaleDiv::upperBound() const
-{
-    return d_upperBound;
-}
-
-/*!
-  \return upperBound() - lowerBound()
-*/
-double QwtScaleDiv::range() const
-{
-    return d_upperBound - d_lowerBound;
-}
-
-/*!
-  \brief Equality operator
-  \return true if this instance is equal to other
-*/
-bool QwtScaleDiv::operator==( const QwtScaleDiv &other ) const
-{
-    if ( d_lowerBound != other.d_lowerBound ||
-        d_upperBound != other.d_upperBound )
-    {
-        return false;
-    }
-
-    for ( int i = 0; i < NTickTypes; i++ )
-    {
-        if ( d_ticks[i] != other.d_ticks[i] )
-            return false;
-    }
-
-    return true;
-}
-
-/*!
-  \brief Inequality
-  \return true if this instance is not equal to other
-*/
-bool QwtScaleDiv::operator!=( const QwtScaleDiv &other ) const
-{
-    return ( !( *this == other ) );
-}
-
-//! Check if the scale division is empty( lowerBound() == upperBound() )
-bool QwtScaleDiv::isEmpty() const
-{
-    return ( d_lowerBound == d_upperBound );
-}
-
-//! Check if the scale division is increasing( lowerBound() <= upperBound() )
-bool QwtScaleDiv::isIncreasing() const
-{
-    return d_lowerBound <= d_upperBound;
-}
-
-/*!
-  Return if a value is between lowerBound() and upperBound()
-
-  \param value Value
-  \return true/false
-*/
-bool QwtScaleDiv::contains( double value ) const
-{
-    const double min = qMin( d_lowerBound, d_upperBound );
-    const double max = qMax( d_lowerBound, d_upperBound );
-
-    return value >= min && value <= max;
-}
-
-/*! 
-   Invert the scale division
-   \sa inverted()
- */
-void QwtScaleDiv::invert()
-{
-    qSwap( d_lowerBound, d_upperBound );
-
-    for ( int i = 0; i < NTickTypes; i++ )
-    {
-        QList<double>& ticks = d_ticks[i];
-
-        const int size = ticks.count();
-        const int size2 = size / 2;
-
-        for ( int j = 0; j < size2; j++ )
-            qSwap( ticks[j], ticks[size - 1 - j] );
-    }
-}
-
-/*! 
-  \return A scale division with inverted boundaries and ticks
-  \sa invert()
- */
-QwtScaleDiv QwtScaleDiv::inverted() const
-{
-    QwtScaleDiv other = *this;
-    other.invert();
-
-    return other;
-}
-
-/*! 
-   Return a scale division with an interval [lowerBound, upperBound]
-   where all ticks outside this interval are removed
-
-   \param lowerBound Lower bound
-   \param upperBound Upper bound
-
-   \return Scale division with all ticks inside of the given interval
-
-   \note lowerBound might be greater than upperBound for inverted scales
-*/
-QwtScaleDiv QwtScaleDiv::bounded( 
-    double lowerBound, double upperBound ) const
-{
-    const double min = qMin( lowerBound, upperBound );
-    const double max = qMax( lowerBound, upperBound );
-
-    QwtScaleDiv sd;
-    sd.setInterval( lowerBound, upperBound );
-
-    for ( int tickType = 0; tickType < QwtScaleDiv::NTickTypes; tickType++ )
-    {
-        const QList<double> &ticks = d_ticks[ tickType ];
-
-        QList<double> boundedTicks;
-        for ( int i = 0; i < ticks.size(); i++ )
-        {
-            const double tick = ticks[i];
-            if ( tick >= min && tick <= max )
-                boundedTicks += tick;
-        }
-
-        sd.setTicks( tickType, boundedTicks );
-    }
-
-    return sd;
-
-}
-
-/*!
-    Assign ticks
-
-   \param type MinorTick, MediumTick or MajorTick
-   \param ticks Values of the tick positions
-*/
-void QwtScaleDiv::setTicks( int type, const QList<double> &ticks )
-{
-    if ( type >= 0 && type < NTickTypes )
-        d_ticks[type] = ticks;
-}
-
-/*!
-   Return a list of ticks
-
-   \param type MinorTick, MediumTick or MajorTick
-   \return Tick list
-*/
-QList<double> QwtScaleDiv::ticks( int type ) const
-{
-    if ( type >= 0 && type < NTickTypes )
-        return d_ticks[type];
-
-    return QList<double>();
-}
-
-#ifndef QT_NO_DEBUG_STREAM
-
-QDebug operator<<( QDebug debug, const QwtScaleDiv &scaleDiv )
-{
-    debug << scaleDiv.lowerBound() << "<->" << scaleDiv.upperBound();
-    debug << "Major: " << scaleDiv.ticks( QwtScaleDiv::MajorTick );
-    debug << "Medium: " << scaleDiv.ticks( QwtScaleDiv::MediumTick );
-    debug << "Minor: " << scaleDiv.ticks( QwtScaleDiv::MinorTick );
-
-    return debug;
-}
-
-#endif
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_div.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_div.h
deleted file mode 100644
index c3b9fc6ead4cddf61251d429efffe393de94b2b6..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_div.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SCALE_DIV_H
-#define QWT_SCALE_DIV_H
-
-#include "qwt_global.h"
-#include "qwt_interval.h"
-#include <qlist.h>
-
-#ifndef QT_NO_DEBUG_STREAM
-#include <qdebug.h>
-#endif
-
-/*!
-  \brief A class representing a scale division
-
-  A Qwt scale is defined by its boundaries and 3 list
-  for the positions of the major, medium and minor ticks.
-
-  The upperBound() might be smaller than the lowerBound()
-  to indicate inverted scales.
-
-  Scale divisions can be calculated from a QwtScaleEngine.
-
-  \sa QwtScaleEngine::divideScale(), QwtPlot::setAxisScaleDiv(),
-      QwtAbstractSlider::setScaleDiv()
-*/
-
-class QWT_EXPORT QwtScaleDiv
-{
-public:
-    //! Scale tick types
-    enum TickType
-    {
-        //! No ticks
-        NoTick = -1,
-
-        //! Minor ticks
-        MinorTick,
-
-        //! Medium ticks
-        MediumTick,
-
-        //! Major ticks
-        MajorTick,
-
-        //! Number of valid tick types
-        NTickTypes
-    };
-
-    explicit QwtScaleDiv( double lowerBound = 0.0, 
-        double upperBound = 0.0 );
-
-    explicit QwtScaleDiv( const QwtInterval &, QList<double>[NTickTypes] );
-
-    explicit QwtScaleDiv( double lowerBound, double upperBound,
-        QList<double>[NTickTypes] );
-
-    explicit QwtScaleDiv( double lowerBound, double upperBound, 
-        const QList<double> &minorTicks, const QList<double> &mediumTicks,
-        const QList<double> &majorTicks );
-
-    bool operator==( const QwtScaleDiv & ) const;
-    bool operator!=( const QwtScaleDiv & ) const;
-
-    void setInterval( double lowerBound, double upperBound );
-    void setInterval( const QwtInterval & );
-    QwtInterval interval() const;
-
-    void setLowerBound( double );
-    double lowerBound() const;
-
-    void setUpperBound( double );
-    double upperBound() const;
-
-    double range() const;
-
-    bool contains( double value ) const;
-
-    void setTicks( int tickType, const QList<double> & );
-    QList<double> ticks( int tickType ) const;
-
-    bool isEmpty() const;
-    bool isIncreasing() const;
-
-    void invert();
-    QwtScaleDiv inverted() const;
-
-    QwtScaleDiv bounded( double lowerBound, double upperBound ) const;
-
-private:
-    double d_lowerBound;
-    double d_upperBound;
-    QList<double> d_ticks[NTickTypes];
-};
-
-Q_DECLARE_TYPEINFO( QwtScaleDiv, Q_MOVABLE_TYPE );
-
-#ifndef QT_NO_DEBUG_STREAM
-QWT_EXPORT QDebug operator<<( QDebug, const QwtScaleDiv & );
-#endif
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_draw.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_draw.cpp
deleted file mode 100644
index e9220cc3bc81015b748451bc7609e96acfaafe3c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_draw.cpp
+++ /dev/null
@@ -1,926 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_scale_draw.h"
-#include "qwt_scale_div.h"
-#include "qwt_scale_map.h"
-#include "qwt_math.h"
-#include "qwt_painter.h"
-#include <qpen.h>
-#include <qpainter.h>
-#include <qmath.h>
-
-#if QT_VERSION < 0x040601
-#define qFastSin(x) qSin(x)
-#define qFastCos(x) qCos(x)
-#endif
-
-class QwtScaleDraw::PrivateData
-{
-public:
-    PrivateData():
-        len( 0 ),
-        alignment( QwtScaleDraw::BottomScale ),
-        labelAlignment( 0 ),
-        labelRotation( 0.0 )
-    {
-    }
-
-    QPointF pos;
-    double len;
-
-    Alignment alignment;
-
-    Qt::Alignment labelAlignment;
-    double labelRotation;
-};
-
-/*!
-  \brief Constructor
-
-  The range of the scale is initialized to [0, 100],
-  The position is at (0, 0) with a length of 100.
-  The orientation is QwtAbstractScaleDraw::Bottom.
-*/
-QwtScaleDraw::QwtScaleDraw()
-{
-    d_data = new QwtScaleDraw::PrivateData;
-    setLength( 100 );
-}
-
-//! Destructor
-QwtScaleDraw::~QwtScaleDraw()
-{
-    delete d_data;
-}
-
-/*!
-   Return alignment of the scale
-   \sa setAlignment()
-   \return Alignment of the scale
-*/
-QwtScaleDraw::Alignment QwtScaleDraw::alignment() const
-{
-    return d_data->alignment;
-}
-
-/*!
-   Set the alignment of the scale
-
-   \param align Alignment of the scale
-
-   The default alignment is QwtScaleDraw::BottomScale
-   \sa alignment()
-*/
-void QwtScaleDraw::setAlignment( Alignment align )
-{
-    d_data->alignment = align;
-}
-
-/*!
-  Return the orientation
-
-  TopScale, BottomScale are horizontal (Qt::Horizontal) scales,
-  LeftScale, RightScale are vertical (Qt::Vertical) scales.
-
-  \return Orientation of the scale
-
-  \sa alignment()
-*/
-Qt::Orientation QwtScaleDraw::orientation() const
-{
-    switch ( d_data->alignment )
-    {
-        case TopScale:
-        case BottomScale:
-            return Qt::Horizontal;
-        case LeftScale:
-        case RightScale:
-        default:
-            return Qt::Vertical;
-    }
-}
-
-/*!
-  \brief Determine the minimum border distance
-
-  This member function returns the minimum space
-  needed to draw the mark labels at the scale's endpoints.
-
-  \param font Font
-  \param start Start border distance
-  \param end End border distance
-*/
-void QwtScaleDraw::getBorderDistHint( 
-    const QFont &font, int &start, int &end ) const
-{
-    start = 0;
-    end = 1.0;
-
-    if ( !hasComponent( QwtAbstractScaleDraw::Labels ) )
-        return;
-
-    const QList<double> &ticks = scaleDiv().ticks( QwtScaleDiv::MajorTick );
-    if ( ticks.count() == 0 )
-        return;
-
-    // Find the ticks, that are mapped to the borders.
-    // minTick is the tick, that is mapped to the top/left-most position
-    // in widget coordinates.
-
-    double minTick = ticks[0];
-    double minPos = scaleMap().transform( minTick );
-    double maxTick = minTick;
-    double maxPos = minPos;
-
-    for ( int i = 1; i < ticks.count(); i++ )
-    {
-        const double tickPos = scaleMap().transform( ticks[i] );
-        if ( tickPos < minPos )
-        {
-            minTick = ticks[i];
-            minPos = tickPos;
-        }
-        if ( tickPos > scaleMap().transform( maxTick ) )
-        {
-            maxTick = ticks[i];
-            maxPos = tickPos;
-        }
-    }
-
-    double e = 0.0;
-    double s = 0.0;
-    if ( orientation() == Qt::Vertical )
-    {
-        s = -labelRect( font, minTick ).top();
-        s -= qAbs( minPos - qRound( scaleMap().p2() ) );
-
-        e = labelRect( font, maxTick ).bottom();
-        e -= qAbs( maxPos - scaleMap().p1() );
-    }
-    else
-    {
-        s = -labelRect( font, minTick ).left();
-        s -= qAbs( minPos - scaleMap().p1() );
-
-        e = labelRect( font, maxTick ).right();
-        e -= qAbs( maxPos - scaleMap().p2() );
-    }
-
-    if ( s < 0.0 )
-        s = 0.0;
-    if ( e < 0.0 )
-        e = 0.0;
-
-    start = qCeil( s );
-    end = qCeil( e );
-}
-
-/*!
-  Determine the minimum distance between two labels, that is necessary
-  that the texts don't overlap.
-
-  \param font Font
-  \return The maximum width of a label
-
-  \sa getBorderDistHint()
-*/
-
-int QwtScaleDraw::minLabelDist( const QFont &font ) const
-{
-    if ( !hasComponent( QwtAbstractScaleDraw::Labels ) )
-        return 0;
-
-    const QList<double> &ticks = scaleDiv().ticks( QwtScaleDiv::MajorTick );
-    if ( ticks.isEmpty() )
-        return 0;
-
-    const QFontMetrics fm( font );
-
-    const bool vertical = ( orientation() == Qt::Vertical );
-
-    QRectF bRect1;
-    QRectF bRect2 = labelRect( font, ticks[0] );
-    if ( vertical )
-    {
-        bRect2.setRect( -bRect2.bottom(), 0.0, bRect2.height(), bRect2.width() );
-    }
-
-    double maxDist = 0.0;
-
-    for ( int i = 1; i < ticks.count(); i++ )
-    {
-        bRect1 = bRect2;
-        bRect2 = labelRect( font, ticks[i] );
-        if ( vertical )
-        {
-            bRect2.setRect( -bRect2.bottom(), 0.0,
-                bRect2.height(), bRect2.width() );
-        }
-
-        double dist = fm.leading(); // space between the labels
-        if ( bRect1.right() > 0 )
-            dist += bRect1.right();
-        if ( bRect2.left() < 0 )
-            dist += -bRect2.left();
-
-        if ( dist > maxDist )
-            maxDist = dist;
-    }
-
-    double angle = qwtRadians( labelRotation() ); 
-    if ( vertical )
-        angle += M_PI / 2;
-
-    const double sinA = qFastSin( angle ); // qreal -> double
-    if ( qFuzzyCompare( sinA + 1.0, 1.0 ) )
-        return qCeil( maxDist );
-
-    const int fmHeight = fm.ascent() - 2;
-
-    // The distance we need until there is
-    // the height of the label font. This height is needed
-    // for the neighbored label.
-
-    double labelDist = fmHeight / qFastSin( angle ) * qFastCos( angle );
-    if ( labelDist < 0 )
-        labelDist = -labelDist;
-
-    // For text orientations close to the scale orientation
-
-    if ( labelDist > maxDist )
-        labelDist = maxDist;
-
-    // For text orientations close to the opposite of the
-    // scale orientation
-
-    if ( labelDist < fmHeight )
-        labelDist = fmHeight;
-
-    return qCeil( labelDist );
-}
-
-/*!
-   Calculate the width/height that is needed for a
-   vertical/horizontal scale.
-
-   The extent is calculated from the pen width of the backbone,
-   the major tick length, the spacing and the maximum width/height
-   of the labels.
-
-   \param font Font used for painting the labels
-   \return Extent
-
-   \sa minLength()
-*/
-double QwtScaleDraw::extent( const QFont &font ) const
-{
-    double d = 0;
-
-    if ( hasComponent( QwtAbstractScaleDraw::Labels ) )
-    {
-        if ( orientation() == Qt::Vertical )
-            d = maxLabelWidth( font );
-        else
-            d = maxLabelHeight( font );
-
-        if ( d > 0 )
-            d += spacing();
-    }
-
-    if ( hasComponent( QwtAbstractScaleDraw::Ticks ) )
-    {
-        d += maxTickLength();
-    }
-
-    if ( hasComponent( QwtAbstractScaleDraw::Backbone ) )
-    {
-        const double pw = qMax( 1, penWidth() );  // pen width can be zero
-        d += pw;
-    }
-
-    d = qMax( d, minimumExtent() );
-    return d;
-}
-
-/*!
-   Calculate the minimum length that is needed to draw the scale
-
-   \param font Font used for painting the labels
-   \return Minimum length that is needed to draw the scale
-
-   \sa extent()
-*/
-int QwtScaleDraw::minLength( const QFont &font ) const
-{
-    int startDist, endDist;
-    getBorderDistHint( font, startDist, endDist );
-
-    const QwtScaleDiv &sd = scaleDiv();
-
-    const uint minorCount =
-        sd.ticks( QwtScaleDiv::MinorTick ).count() +
-        sd.ticks( QwtScaleDiv::MediumTick ).count();
-    const uint majorCount =
-        sd.ticks( QwtScaleDiv::MajorTick ).count();
-
-    int lengthForLabels = 0;
-    if ( hasComponent( QwtAbstractScaleDraw::Labels ) )
-        lengthForLabels = minLabelDist( font ) * majorCount;
-
-    int lengthForTicks = 0;
-    if ( hasComponent( QwtAbstractScaleDraw::Ticks ) )
-    {
-        const double pw = qMax( 1, penWidth() );  // penwidth can be zero
-        lengthForTicks = qCeil( ( majorCount + minorCount ) * ( pw + 1.0 ) );
-    }
-
-    return startDist + endDist + qMax( lengthForLabels, lengthForTicks );
-}
-
-/*!
-   Find the position, where to paint a label
-
-   The position has a distance that depends on the length of the ticks 
-   in direction of the alignment().
-
-   \param value Value
-   \return Position, where to paint a label
-*/
-QPointF QwtScaleDraw::labelPosition( double value ) const
-{
-    const double tval = scaleMap().transform( value );
-    double dist = spacing();
-    if ( hasComponent( QwtAbstractScaleDraw::Backbone ) )
-        dist += qMax( 1, penWidth() );
-
-    if ( hasComponent( QwtAbstractScaleDraw::Ticks ) )
-        dist += tickLength( QwtScaleDiv::MajorTick );
-
-    double px = 0;
-    double py = 0;
-
-    switch ( alignment() )
-    {
-        case RightScale:
-        {
-            px = d_data->pos.x() + dist;
-            py = tval;
-            break;
-        }
-        case LeftScale:
-        {
-            px = d_data->pos.x() - dist;
-            py = tval;
-            break;
-        }
-        case BottomScale:
-        {
-            px = tval;
-            py = d_data->pos.y() + dist;
-            break;
-        }
-        case TopScale:
-        {
-            px = tval;
-            py = d_data->pos.y() - dist;
-            break;
-        }
-    }
-
-    return QPointF( px, py );
-}
-
-/*!
-   Draw a tick
-
-   \param painter Painter
-   \param value Value of the tick
-   \param len Length of the tick
-
-   \sa drawBackbone(), drawLabel()
-*/
-void QwtScaleDraw::drawTick( QPainter *painter, double value, double len ) const
-{
-    if ( len <= 0 )
-        return;
-
-    const bool roundingAlignment = QwtPainter::roundingAlignment( painter );
-
-    QPointF pos = d_data->pos;
-
-    double tval = scaleMap().transform( value );
-    if ( roundingAlignment )
-        tval = qRound( tval );
-
-    const int pw = penWidth();
-    int a = 0;
-    if ( pw > 1 && roundingAlignment )
-        a = 1;
-
-    switch ( alignment() )
-    {
-        case LeftScale:
-        {
-            double x1 = pos.x() + a;
-            double x2 = pos.x() + a - pw - len;
-            if ( roundingAlignment )
-            {
-                x1 = qRound( x1 );
-                x2 = qRound( x2 );
-            }
-
-            QwtPainter::drawLine( painter, x1, tval, x2, tval );
-            break;
-        }
-
-        case RightScale:
-        {
-            double x1 = pos.x();
-            double x2 = pos.x() + pw + len;
-            if ( roundingAlignment )
-            {
-                x1 = qRound( x1 );
-                x2 = qRound( x2 );
-            }
-
-            QwtPainter::drawLine( painter, x1, tval, x2, tval );
-            break;
-        }
-
-        case BottomScale:
-        {
-            double y1 = pos.y();
-            double y2 = pos.y() + pw + len;
-            if ( roundingAlignment )
-            {
-                y1 = qRound( y1 );
-                y2 = qRound( y2 );
-            }
-
-            QwtPainter::drawLine( painter, tval, y1, tval, y2 );
-            break;
-        }
-
-        case TopScale:
-        {
-            double y1 = pos.y() + a;
-            double y2 = pos.y() - pw - len + a;
-            if ( roundingAlignment )
-            {
-                y1 = qRound( y1 );
-                y2 = qRound( y2 );
-            }
-
-            QwtPainter::drawLine( painter, tval, y1, tval, y2 );
-            break;
-        }
-    }
-}
-
-/*!
-   Draws the baseline of the scale
-   \param painter Painter
-
-   \sa drawTick(), drawLabel()
-*/
-void QwtScaleDraw::drawBackbone( QPainter *painter ) const
-{
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    const QPointF &pos = d_data->pos;
-    const double len = d_data->len;
-    const int pw = qMax( penWidth(), 1 );
-
-    // pos indicates a border not the center of the backbone line
-    // so we need to shift its position depending on the pen width
-    // and the alignment of the scale
-
-    double off;
-    if ( doAlign )
-    {
-        if ( alignment() == LeftScale || alignment() == TopScale )
-            off = ( pw - 1 ) / 2;
-        else
-            off = pw / 2;
-    }
-    else
-    {
-        off = 0.5 * penWidth();
-    }
-
-    switch ( alignment() )
-    {
-        case LeftScale:
-        {
-            double x = pos.x() - off;
-            if ( doAlign )
-                x = qRound( x );
-
-            QwtPainter::drawLine( painter, x, pos.y(), x, pos.y() + len );
-            break;
-        }
-        case RightScale:
-        {
-            double x = pos.x() + off;
-            if ( doAlign )
-                x = qRound( x );
-
-            QwtPainter::drawLine( painter, x, pos.y(), x, pos.y() + len );
-            break;
-        }
-        case TopScale:
-        {
-            double y = pos.y() - off;
-            if ( doAlign )
-                y = qRound( y );
-
-            QwtPainter::drawLine( painter, pos.x(), y, pos.x() + len, y );
-            break;
-        }
-        case BottomScale:
-        {
-            double y = pos.y() + off;
-            if ( doAlign )
-                y = qRound( y );
-
-            QwtPainter::drawLine( painter, pos.x(), y, pos.x() + len, y );
-            break;
-        }
-    }
-}
-
-/*!
-  \brief Move the position of the scale
-
-  The meaning of the parameter pos depends on the alignment:
-  <dl>
-  <dt>QwtScaleDraw::LeftScale
-  <dd>The origin is the topmost point of the
-      backbone. The backbone is a vertical line.
-      Scale marks and labels are drawn
-      at the left of the backbone.
-  <dt>QwtScaleDraw::RightScale
-  <dd>The origin is the topmost point of the
-      backbone. The backbone is a vertical line.
-      Scale marks and labels are drawn
-      at the right of the backbone.
-  <dt>QwtScaleDraw::TopScale
-  <dd>The origin is the leftmost point of the
-      backbone. The backbone is a horizontal line.
-      Scale marks and labels are drawn
-      above the backbone.
-  <dt>QwtScaleDraw::BottomScale
-  <dd>The origin is the leftmost point of the
-      backbone. The backbone is a horizontal line
-      Scale marks and labels are drawn
-      below the backbone.
-  </dl>
-
-  \param pos Origin of the scale
-
-  \sa pos(), setLength()
-*/
-void QwtScaleDraw::move( const QPointF &pos )
-{
-    d_data->pos = pos;
-    updateMap();
-}
-
-/*!
-   \return Origin of the scale
-   \sa move(), length()
-*/
-QPointF QwtScaleDraw::pos() const
-{
-    return d_data->pos;
-}
-
-/*!
-  Set the length of the backbone.
-
-  The length doesn't include the space needed for
-  overlapping labels.
-
-  \param length Length of the backbone
-
-  \sa move(), minLabelDist()
-*/
-void QwtScaleDraw::setLength( double length )
-{
-#if 1
-    if ( length >= 0 && length < 10 )
-        length = 10;
-
-    // why should we accept negative lengths ???
-    if ( length < 0 && length > -10 )
-        length = -10;
-#else
-    length = qMax( length, 10 );
-#endif
-
-    d_data->len = length;
-    updateMap();
-}
-
-/*!
-   \return the length of the backbone
-   \sa setLength(), pos()
-*/
-double QwtScaleDraw::length() const
-{
-    return d_data->len;
-}
-
-/*!
-   Draws the label for a major scale tick
-
-   \param painter Painter
-   \param value Value
-
-   \sa drawTick(), drawBackbone(), boundingLabelRect()
-*/
-void QwtScaleDraw::drawLabel( QPainter *painter, double value ) const
-{
-    QwtText lbl = tickLabel( painter->font(), value );
-    if ( lbl.isEmpty() )
-        return;
-
-    QPointF pos = labelPosition( value );
-
-    QSizeF labelSize = lbl.textSize( painter->font() );
-
-    const QTransform transform = labelTransformation( pos, labelSize );
-
-    painter->save();
-    painter->setWorldTransform( transform, true );
-
-    lbl.draw ( painter, QRect( QPoint( 0, 0 ), labelSize.toSize() ) );
-
-    painter->restore();
-}
-
-/*!
-  \brief Find the bounding rectangle for the label.
-
-  The coordinates of the rectangle are absolute ( calculated from pos() ).
-  in direction of the tick.
-
-  \param font Font used for painting
-  \param value Value
-
-  \return Bounding rectangle
-  \sa labelRect()
-*/
-QRect QwtScaleDraw::boundingLabelRect( const QFont &font, double value ) const
-{
-    QwtText lbl = tickLabel( font, value );
-    if ( lbl.isEmpty() )
-        return QRect();
-
-    const QPointF pos = labelPosition( value );
-    QSizeF labelSize = lbl.textSize( font );
-
-    const QTransform transform = labelTransformation( pos, labelSize );
-    return transform.mapRect( QRect( QPoint( 0, 0 ), labelSize.toSize() ) );
-}
-
-/*!
-   Calculate the transformation that is needed to paint a label
-   depending on its alignment and rotation.
-
-   \param pos Position where to paint the label
-   \param size Size of the label
-
-   \return Transformation matrix
-   \sa setLabelAlignment(), setLabelRotation()
-*/
-QTransform QwtScaleDraw::labelTransformation(
-    const QPointF &pos, const QSizeF &size ) const
-{
-    QTransform transform;
-    transform.translate( pos.x(), pos.y() );
-    transform.rotate( labelRotation() );
-
-    int flags = labelAlignment();
-    if ( flags == 0 )
-    {
-        switch ( alignment() )
-        {
-            case RightScale:
-            {
-                if ( flags == 0 )
-                    flags = Qt::AlignRight | Qt::AlignVCenter;
-                break;
-            }
-            case LeftScale:
-            {
-                if ( flags == 0 )
-                    flags = Qt::AlignLeft | Qt::AlignVCenter;
-                break;
-            }
-            case BottomScale:
-            {
-                if ( flags == 0 )
-                    flags = Qt::AlignHCenter | Qt::AlignBottom;
-                break;
-            }
-            case TopScale:
-            {
-                if ( flags == 0 )
-                    flags = Qt::AlignHCenter | Qt::AlignTop;
-                break;
-            }
-        }
-    }
-
-    double x, y;
-
-    if ( flags & Qt::AlignLeft )
-        x = -size.width();
-    else if ( flags & Qt::AlignRight )
-        x = 0.0;
-    else // Qt::AlignHCenter
-        x = -( 0.5 * size.width() );
-
-    if ( flags & Qt::AlignTop )
-        y = -size.height();
-    else if ( flags & Qt::AlignBottom )
-        y = 0;
-    else // Qt::AlignVCenter
-        y = -( 0.5 * size.height() );
-
-    transform.translate( x, y );
-
-    return transform;
-}
-
-/*!
-  Find the bounding rectangle for the label. The coordinates of
-  the rectangle are relative to spacing + tick length from the backbone
-  in direction of the tick.
-
-  \param font Font used for painting
-  \param value Value
-
-   \return Bounding rectangle that is needed to draw a label
-*/
-QRectF QwtScaleDraw::labelRect( const QFont &font, double value ) const
-{
-    QwtText lbl = tickLabel( font, value );
-    if ( lbl.isEmpty() )
-        return QRectF( 0.0, 0.0, 0.0, 0.0 );
-
-    const QPointF pos = labelPosition( value );
-
-    const QSizeF labelSize = lbl.textSize( font );
-    const QTransform transform = labelTransformation( pos, labelSize );
-
-    QRectF br = transform.mapRect( QRectF( QPointF( 0, 0 ), labelSize ) );
-    br.translate( -pos.x(), -pos.y() );
-
-    return br;
-}
-
-/*!
-   Calculate the size that is needed to draw a label
-
-   \param font Label font
-   \param value Value
-
-   \return Size that is needed to draw a label
-*/
-QSizeF QwtScaleDraw::labelSize( const QFont &font, double value ) const
-{
-    return labelRect( font, value ).size();
-}
-
-/*!
-  Rotate all labels.
-
-  When changing the rotation, it might be necessary to
-  adjust the label flags too. Finding a useful combination is
-  often the result of try and error.
-
-  \param rotation Angle in degrees. When changing the label rotation,
-                  the label flags often needs to be adjusted too.
-
-  \sa setLabelAlignment(), labelRotation(), labelAlignment().
-
-*/
-void QwtScaleDraw::setLabelRotation( double rotation )
-{
-    d_data->labelRotation = rotation;
-}
-
-/*!
-  \return the label rotation
-  \sa setLabelRotation(), labelAlignment()
-*/
-double QwtScaleDraw::labelRotation() const
-{
-    return d_data->labelRotation;
-}
-
-/*!
-  \brief Change the label flags
-
-  Labels are aligned to the point tick length + spacing away from the backbone.
-
-  The alignment is relative to the orientation of the label text.
-  In case of an flags of 0 the label will be aligned
-  depending on the orientation of the scale:
-
-      QwtScaleDraw::TopScale: Qt::AlignHCenter | Qt::AlignTop\n
-      QwtScaleDraw::BottomScale: Qt::AlignHCenter | Qt::AlignBottom\n
-      QwtScaleDraw::LeftScale: Qt::AlignLeft | Qt::AlignVCenter\n
-      QwtScaleDraw::RightScale: Qt::AlignRight | Qt::AlignVCenter\n
-
-  Changing the alignment is often necessary for rotated labels.
-
-  \param alignment Or'd Qt::AlignmentFlags see <qnamespace.h>
-
-  \sa setLabelRotation(), labelRotation(), labelAlignment()
-  \warning The various alignments might be confusing.
-           The alignment of the label is not the alignment
-           of the scale and is not the alignment of the flags
-           ( QwtText::flags() ) returned from QwtAbstractScaleDraw::label().
-*/
-
-void QwtScaleDraw::setLabelAlignment( Qt::Alignment alignment )
-{
-    d_data->labelAlignment = alignment;
-}
-
-/*!
-  \return the label flags
-  \sa setLabelAlignment(), labelRotation()
-*/
-Qt::Alignment QwtScaleDraw::labelAlignment() const
-{
-    return d_data->labelAlignment;
-}
-
-/*!
-  \param font Font
-  \return the maximum width of a label
-*/
-int QwtScaleDraw::maxLabelWidth( const QFont &font ) const
-{
-    double maxWidth = 0.0;
-
-    const QList<double> &ticks = scaleDiv().ticks( QwtScaleDiv::MajorTick );
-    for ( int i = 0; i < ticks.count(); i++ )
-    {
-        const double v = ticks[i];
-        if ( scaleDiv().contains( v ) )
-        {
-            const double w = labelSize( font, ticks[i] ).width();
-            if ( w > maxWidth )
-                maxWidth = w;
-        }
-    }
-
-    return qCeil( maxWidth );
-}
-
-/*!
-  \param font Font
-  \return the maximum height of a label
-*/
-int QwtScaleDraw::maxLabelHeight( const QFont &font ) const
-{
-    double maxHeight = 0.0;
-
-    const QList<double> &ticks = scaleDiv().ticks( QwtScaleDiv::MajorTick );
-    for ( int i = 0; i < ticks.count(); i++ )
-    {
-        const double v = ticks[i];
-        if ( scaleDiv().contains( v ) )
-        {
-            const double h = labelSize( font, ticks[i] ).height();
-            if ( h > maxHeight )
-                maxHeight = h;
-        }
-    }
-
-    return qCeil( maxHeight );
-}
-
-void QwtScaleDraw::updateMap()
-{
-    const QPointF pos = d_data->pos;
-    double len = d_data->len;
-
-    QwtScaleMap &sm = scaleMap();
-    if ( orientation() == Qt::Vertical )
-        sm.setPaintInterval( pos.y() + len, pos.y() );
-    else
-        sm.setPaintInterval( pos.x(), pos.x() + len );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_draw.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_draw.h
deleted file mode 100644
index 1571d9576daefa939409fccd4741d25a8633788e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_draw.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SCALE_DRAW_H
-#define QWT_SCALE_DRAW_H
-
-#include "qwt_global.h"
-#include "qwt_abstract_scale_draw.h"
-#include <qpoint.h>
-#include <qrect.h>
-#include <qtransform.h>
-
-/*!
-  \brief A class for drawing scales
-
-  QwtScaleDraw can be used to draw linear or logarithmic scales.
-  A scale has a position, an alignment and a length, which can be specified .
-  The labels can be rotated and aligned
-  to the ticks using setLabelRotation() and setLabelAlignment().
-
-  After a scale division has been specified as a QwtScaleDiv object
-  using QwtAbstractScaleDraw::setScaleDiv(const QwtScaleDiv &s),
-  the scale can be drawn with the QwtAbstractScaleDraw::draw() member.
-*/
-class QWT_EXPORT QwtScaleDraw: public QwtAbstractScaleDraw
-{
-public:
-    /*!
-        Alignment of the scale draw
-        \sa setAlignment(), alignment()
-     */
-    enum Alignment 
-    { 
-        //! The scale is below
-        BottomScale, 
-
-        //! The scale is above
-        TopScale, 
-
-        //! The scale is left
-        LeftScale, 
-
-        //! The scale is right
-        RightScale 
-    };
-
-    QwtScaleDraw();
-    virtual ~QwtScaleDraw();
-
-    void getBorderDistHint( const QFont &, int &start, int &end ) const;
-    int minLabelDist( const QFont & ) const;
-
-    int minLength( const QFont & ) const;
-    virtual double extent( const QFont & ) const;
-
-    void move( double x, double y );
-    void move( const QPointF & );
-    void setLength( double length );
-
-    Alignment alignment() const;
-    void setAlignment( Alignment );
-
-    Qt::Orientation orientation() const;
-
-    QPointF pos() const;
-    double length() const;
-
-    void setLabelAlignment( Qt::Alignment );
-    Qt::Alignment labelAlignment() const;
-
-    void setLabelRotation( double rotation );
-    double labelRotation() const;
-
-    int maxLabelHeight( const QFont & ) const;
-    int maxLabelWidth( const QFont & ) const;
-
-    QPointF labelPosition( double val ) const;
-
-    QRectF labelRect( const QFont &, double val ) const;
-    QSizeF labelSize( const QFont &, double val ) const;
-
-    QRect boundingLabelRect( const QFont &, double val ) const;
-
-protected:
-    QTransform labelTransformation( const QPointF &, const QSizeF & ) const;
-
-    virtual void drawTick( QPainter *, double val, double len ) const;
-    virtual void drawBackbone( QPainter * ) const;
-    virtual void drawLabel( QPainter *, double val ) const;
-
-private:
-    QwtScaleDraw( const QwtScaleDraw & );
-    QwtScaleDraw &operator=( const QwtScaleDraw &other );
-
-    void updateMap();
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-/*!
-   Move the position of the scale
-
-   \param x X coordinate
-   \param y Y coordinate
-
-   \sa move(const QPointF &)
-*/
-inline void QwtScaleDraw::move( double x, double y )
-{
-    move( QPointF( x, y ) );
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_engine.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_engine.cpp
deleted file mode 100644
index 055b92ef138664ac42c996f7b9166ef8785888df..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_engine.cpp
+++ /dev/null
@@ -1,1140 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_scale_engine.h"
-#include "qwt_math.h"
-#include "qwt_scale_map.h"
-#include <qalgorithms.h>
-#include <qmath.h>
-#include <float.h>
-#include <limits>
-
-#if QT_VERSION < 0x040601
-#define qFabs(x) ::fabs(x)
-#define qExp(x) ::exp(x)
-#endif
-
-static inline double qwtLog( double base, double value )
-{
-    return log( value ) / log( base );
-}
-
-static inline QwtInterval qwtLogInterval( double base, const QwtInterval &interval )
-{
-    return QwtInterval( qwtLog( base, interval.minValue() ),
-            qwtLog( base, interval.maxValue() ) );
-}
-
-static inline QwtInterval qwtPowInterval( double base, const QwtInterval &interval ) 
-{
-    return QwtInterval( qPow( base, interval.minValue() ),
-            qPow( base, interval.maxValue() ) );
-}
-
-static inline long double qwtIntervalWidthL( const QwtInterval &interval )
-{
-    if ( !interval.isValid() )
-        return 0.0;
-
-    return static_cast<long double>( interval.maxValue() )
-        - static_cast<long double>( interval.minValue() );
-}
-
-#if 1
-
-// this version often doesn't find the best ticks: f.e for 15: 5, 10
-static double qwtStepSize( double intervalSize, int maxSteps, uint base )
-{
-    const double minStep = 
-        QwtScaleArithmetic::divideInterval( intervalSize, maxSteps, base );
-
-    if ( minStep != 0.0 )
-    {
-        // # ticks per interval
-        const int numTicks = qCeil( qAbs( intervalSize / minStep ) ) - 1;
-
-        // Do the minor steps fit into the interval?
-        if ( qwtFuzzyCompare( ( numTicks +  1 ) * qAbs( minStep ),
-            qAbs( intervalSize ), intervalSize ) > 0 )
-        {
-            // The minor steps doesn't fit into the interval
-            return 0.5 * intervalSize;
-        }
-    }
-
-    return minStep;
-}
-
-#else
-
-static double qwtStepSize( double intervalSize, int maxSteps, uint base )
-{
-    if ( maxSteps <= 0 )
-        return 0.0;
-
-    if ( maxSteps > 2 )
-    {
-        for ( int numSteps = maxSteps; numSteps > 1; numSteps-- )
-        {
-            const double stepSize = intervalSize / numSteps;
-
-            const double p = ::floor( ::log( stepSize ) / ::log( base ) );
-            const double fraction = qPow( base, p );
-
-            for ( uint n = base; n > 1; n /= 2 )
-            {
-                if ( qFuzzyCompare( stepSize, n * fraction ) )
-                    return stepSize;
-
-                if ( n == 3 && ( base % 2 ) == 0 )
-                {
-                    if ( qFuzzyCompare( stepSize, 2 * fraction ) )
-                        return stepSize;
-                }
-            }
-        }
-    }
-
-    return intervalSize * 0.5;
-}
-
-#endif
-
-static const double _eps = 1.0e-6;
-
-/*!
-  Ceil a value, relative to an interval
-
-  \param value Value to be ceiled
-  \param intervalSize Interval size
-
-  \return Rounded value
-
-  \sa floorEps()
-*/
-double QwtScaleArithmetic::ceilEps( double value,
-    double intervalSize )
-{
-    const double eps = _eps * intervalSize;
-
-    value = ( value - eps ) / intervalSize;
-    return ::ceil( value ) * intervalSize;
-}
-
-/*!
-  Floor a value, relative to an interval
-
-  \param value Value to be floored
-  \param intervalSize Interval size
-
-  \return Rounded value
-  \sa floorEps()
-*/
-double QwtScaleArithmetic::floorEps( double value, double intervalSize )
-{
-    const double eps = _eps * intervalSize;
-
-    value = ( value + eps ) / intervalSize;
-    return ::floor( value ) * intervalSize;
-}
-
-/*!
-  \brief Divide an interval into steps
-
-  \f$stepSize = (intervalSize - intervalSize * 10e^{-6}) / numSteps\f$
-
-  \param intervalSize Interval size
-  \param numSteps Number of steps
-  \return Step size
-*/
-double QwtScaleArithmetic::divideEps( double intervalSize, double numSteps )
-{
-    if ( numSteps == 0.0 || intervalSize == 0.0 )
-        return 0.0;
-
-    return ( intervalSize - ( _eps * intervalSize ) ) / numSteps;
-}
-
-/*!
-  Calculate a step size for a given interval
-
-  \param intervalSize Interval size
-  \param numSteps Number of steps
-  \param base Base for the division ( usually 10 )
-
-  \return Calculated step size
- */
-double QwtScaleArithmetic::divideInterval( 
-    double intervalSize, int numSteps, uint base ) 
-{
-    if ( numSteps <= 0 )
-        return 0.0;
-
-    const double v = QwtScaleArithmetic::divideEps( intervalSize, numSteps );
-    if ( v == 0.0 )
-        return 0.0;
-
-    const double lx = qwtLog( base, qFabs( v ) );
-    const double p = ::floor( lx );
-
-    const double fraction = qPow( base, lx - p );
-
-    uint n = base;
-    while ( ( n > 1 ) && ( fraction <= n / 2 ) )
-        n /= 2;
-
-    double stepSize = n * qPow( base, p );
-    if ( v < 0 )
-        stepSize = -stepSize;
-
-    return stepSize;
-}
-
-class QwtScaleEngine::PrivateData
-{
-public:
-    PrivateData():
-        attributes( QwtScaleEngine::NoAttribute ),
-        lowerMargin( 0.0 ),
-        upperMargin( 0.0 ),
-        referenceValue( 0.0 ),
-        base( 10 ),
-        transform( NULL )
-    {
-    }
-
-    ~PrivateData()
-    {
-        delete transform;
-    }
-
-    QwtScaleEngine::Attributes attributes;
-
-    double lowerMargin;
-    double upperMargin;
-
-    double referenceValue;
-
-    uint base;
-
-    QwtTransform* transform;
-};
-
-/*!
-  Constructor
-
-  \param base Base of the scale engine
-  \sa setBase()
- */
-QwtScaleEngine::QwtScaleEngine( uint base )
-{
-    d_data = new PrivateData;
-    setBase( base );
-}
-
-
-//! Destructor
-QwtScaleEngine::~QwtScaleEngine ()
-{
-    delete d_data;
-}
-
-/*!
-   Assign a transformation
-
-   \param transform Transformation
-
-   The transformation object is used as factory for clones
-   that are returned by transformation()
-
-   The scale engine takes ownership of the transformation.
-
-   \sa QwtTransform::copy(), transformation()
-
- */
-void QwtScaleEngine::setTransformation( QwtTransform *transform )
-{
-    if ( transform != d_data->transform )
-    {
-        delete d_data->transform;
-        d_data->transform = transform;
-    }
-}
-
-/*!
-   Create and return a clone of the transformation 
-   of the engine. When the engine has no special transformation
-   NULL is returned, indicating no transformation.
-
-   \return A clone of the transfomation
-   \sa setTransformation()
- */
-QwtTransform *QwtScaleEngine::transformation() const
-{
-    QwtTransform *transform = NULL;
-    if ( d_data->transform )
-        transform = d_data->transform->copy();
-
-    return transform;
-}
-
-/*!
-    \return the margin at the lower end of the scale
-    The default margin is 0.
-
-    \sa setMargins()
-*/
-double QwtScaleEngine::lowerMargin() const
-{
-    return d_data->lowerMargin;
-}
-
-/*!
-    \return the margin at the upper end of the scale
-    The default margin is 0.
-
-    \sa setMargins()
-*/
-double QwtScaleEngine::upperMargin() const
-{
-    return d_data->upperMargin;
-}
-
-/*!
-  \brief Specify margins at the scale's endpoints
-  \param lower minimum distance between the scale's lower boundary and the
-             smallest enclosed value
-  \param upper minimum distance between the scale's upper boundary and the
-             greatest enclosed value
-
-  Margins can be used to leave a minimum amount of space between
-  the enclosed intervals and the boundaries of the scale.
-
-  \warning
-  \li QwtLogScaleEngine measures the margins in decades.
-
-  \sa upperMargin(), lowerMargin()
-*/
-
-void QwtScaleEngine::setMargins( double lower, double upper )
-{
-    d_data->lowerMargin = qMax( lower, 0.0 );
-    d_data->upperMargin = qMax( upper, 0.0 );
-}
-
-/*!
-  Calculate a step size for an interval size
-
-  \param intervalSize Interval size
-  \param numSteps Number of steps
-
-  \return Step size
-*/
-double QwtScaleEngine::divideInterval(
-    double intervalSize, int numSteps ) const
-{
-    return QwtScaleArithmetic::divideInterval( 
-        intervalSize, numSteps, d_data->base );
-}
-
-/*!
-  Check if an interval "contains" a value
-
-  \param interval Interval
-  \param value Value
-
-  \return True, when the value is inside the interval
-*/
-bool QwtScaleEngine::contains(
-    const QwtInterval &interval, double value ) const
-{
-    if ( !interval.isValid() )
-        return false;
-
-    if ( qwtFuzzyCompare( value, interval.minValue(), interval.width() ) < 0 )
-        return false;
-
-    if ( qwtFuzzyCompare( value, interval.maxValue(), interval.width() ) > 0 )
-        return false;
-
-    return true;
-}
-
-/*!
-  Remove ticks from a list, that are not inside an interval
-
-  \param ticks Tick list
-  \param interval Interval
-
-  \return Stripped tick list
-*/
-QList<double> QwtScaleEngine::strip( const QList<double>& ticks,
-    const QwtInterval &interval ) const
-{
-    if ( !interval.isValid() || ticks.count() == 0 )
-        return QList<double>();
-
-    if ( contains( interval, ticks.first() )
-        && contains( interval, ticks.last() ) )
-    {
-        return ticks;
-    }
-
-    QList<double> strippedTicks;
-    for ( int i = 0; i < ticks.count(); i++ )
-    {
-        if ( contains( interval, ticks[i] ) )
-            strippedTicks += ticks[i];
-    }
-    return strippedTicks;
-}
-
-/*!
-  \brief Build an interval around a value
-
-  In case of v == 0.0 the interval is [-0.5, 0.5],
-  otherwide it is [0.5 * v, 1.5 * v]
-
-  \param value Initial value
-  \return Calculated interval
-*/
-
-QwtInterval QwtScaleEngine::buildInterval( double value ) const
-{
-    const double delta = ( value == 0.0 ) ? 0.5 : qAbs( 0.5 * value );
-
-    if ( DBL_MAX - delta < value )
-        return QwtInterval( DBL_MAX - delta, DBL_MAX );
-
-    if ( -DBL_MAX + delta > value )
-        return QwtInterval( -DBL_MAX, -DBL_MAX + delta );
-
-    return QwtInterval( value - delta, value + delta );
-}
-
-/*!
-  Change a scale attribute
-
-  \param attribute Attribute to change
-  \param on On/Off
-
-  \sa Attribute, testAttribute()
-*/
-void QwtScaleEngine::setAttribute( Attribute attribute, bool on )
-{
-    if ( on )
-        d_data->attributes |= attribute;
-    else
-        d_data->attributes &= ~attribute;
-}
-
-/*!
-  \return True, if attribute is enabled.
-
-  \param attribute Attribute to be tested
-  \sa Attribute, setAttribute()
-*/
-bool QwtScaleEngine::testAttribute( Attribute attribute ) const
-{
-    return ( d_data->attributes & attribute );
-}
-
-/*!
-  Change the scale attribute
-
-  \param attributes Set scale attributes
-  \sa Attribute, attributes()
-*/
-void QwtScaleEngine::setAttributes( Attributes attributes )
-{
-    d_data->attributes = attributes;
-}
-
-/*!
-  \return Scale attributes
-  \sa Attribute, setAttributes(), testAttribute()
-*/
-QwtScaleEngine::Attributes QwtScaleEngine::attributes() const
-{
-    return d_data->attributes;
-}
-
-/*!
-  \brief Specify a reference point
-  \param r new reference value
-
-  The reference point is needed if options IncludeReference or
-  Symmetric are active. Its default value is 0.0.
-
-  \sa Attribute
-*/
-void QwtScaleEngine::setReference( double r )
-{
-    d_data->referenceValue = r;
-}
-
-/*!
-  \return the reference value
-  \sa setReference(), setAttribute()
-*/
-double QwtScaleEngine::reference() const
-{
-    return d_data->referenceValue;
-}
-
-/*!
-  Set the base of the scale engine
-
-  While a base of 10 is what 99.9% of all applications need
-  certain scales might need a different base: f.e 2
-
-  The default setting is 10
-
-  \param base Base of the engine
-
-  \sa base()
- */
-void QwtScaleEngine::setBase( uint base )
-{ 
-    d_data->base = qMax( base, 2U );
-}
-
-/*!
-  \return base Base of the scale engine
-  \sa setBase()
- */
-uint QwtScaleEngine::base() const
-{
-    return d_data->base;
-}
-
-/*!
-  Constructor
-
-  \param base Base of the scale engine
-  \sa setBase()
- */
-QwtLinearScaleEngine::QwtLinearScaleEngine( uint base ):
-    QwtScaleEngine( base )
-{
-}
-
-//! Destructor
-QwtLinearScaleEngine::~QwtLinearScaleEngine()
-{
-}
-
-/*!
-  Align and divide an interval
-
-  \param maxNumSteps Max. number of steps
-  \param x1 First limit of the interval (In/Out)
-  \param x2 Second limit of the interval (In/Out)
-  \param stepSize Step size (Out)
-
-  \sa setAttribute()
-*/
-void QwtLinearScaleEngine::autoScale( int maxNumSteps,
-    double &x1, double &x2, double &stepSize ) const
-{
-    QwtInterval interval( x1, x2 );
-    interval = interval.normalized();
-
-    interval.setMinValue( interval.minValue() - lowerMargin() );
-    interval.setMaxValue( interval.maxValue() + upperMargin() );
-
-    if ( testAttribute( QwtScaleEngine::Symmetric ) )
-        interval = interval.symmetrize( reference() );
-
-    if ( testAttribute( QwtScaleEngine::IncludeReference ) )
-        interval = interval.extend( reference() );
-
-    if ( interval.width() == 0.0 )
-        interval = buildInterval( interval.minValue() );
-
-    stepSize = QwtScaleArithmetic::divideInterval( 
-        interval.width(), qMax( maxNumSteps, 1 ), base() );
-
-    if ( !testAttribute( QwtScaleEngine::Floating ) )
-        interval = align( interval, stepSize );
-
-    x1 = interval.minValue();
-    x2 = interval.maxValue();
-
-    if ( testAttribute( QwtScaleEngine::Inverted ) )
-    {
-        qSwap( x1, x2 );
-        stepSize = -stepSize;
-    }
-}
-
-/*!
-   \brief Calculate a scale division for an interval
-
-   \param x1 First interval limit
-   \param x2 Second interval limit
-   \param maxMajorSteps Maximum for the number of major steps
-   \param maxMinorSteps Maximum number of minor steps
-   \param stepSize Step size. If stepSize == 0, the engine
-                   calculates one.
-
-   \return Calculated scale division
-*/
-QwtScaleDiv QwtLinearScaleEngine::divideScale( double x1, double x2,
-    int maxMajorSteps, int maxMinorSteps, double stepSize ) const
-{
-    QwtInterval interval = QwtInterval( x1, x2 ).normalized();
-
-    if ( qwtIntervalWidthL( interval ) > std::numeric_limits<double>::max() )
-    {
-        qWarning() << "QwtLinearScaleEngine::divideScale: overflow";
-        return QwtScaleDiv();
-    }
-
-    if ( interval.width() <= 0 )
-        return QwtScaleDiv();
-
-    stepSize = qAbs( stepSize );
-    if ( stepSize == 0.0 )
-    {
-        if ( maxMajorSteps < 1 )
-            maxMajorSteps = 1;
-
-        stepSize = QwtScaleArithmetic::divideInterval( 
-            interval.width(), maxMajorSteps, base() );
-    }
-
-    QwtScaleDiv scaleDiv;
-
-    if ( stepSize != 0.0 )
-    {
-        QList<double> ticks[QwtScaleDiv::NTickTypes];
-        buildTicks( interval, stepSize, maxMinorSteps, ticks );
-
-        scaleDiv = QwtScaleDiv( interval, ticks );
-    }
-
-    if ( x1 > x2 )
-        scaleDiv.invert();
-
-    return scaleDiv;
-}
-
-/*!
-   \brief Calculate ticks for an interval
-
-   \param interval Interval
-   \param stepSize Step size
-   \param maxMinorSteps Maximum number of minor steps
-   \param ticks Arrays to be filled with the calculated ticks
-
-   \sa buildMajorTicks(), buildMinorTicks
-*/
-void QwtLinearScaleEngine::buildTicks(
-    const QwtInterval& interval, double stepSize, int maxMinorSteps,
-    QList<double> ticks[QwtScaleDiv::NTickTypes] ) const
-{
-    const QwtInterval boundingInterval = align( interval, stepSize );
-
-    ticks[QwtScaleDiv::MajorTick] =
-        buildMajorTicks( boundingInterval, stepSize );
-
-    if ( maxMinorSteps > 0 )
-    {
-        buildMinorTicks( ticks[QwtScaleDiv::MajorTick], maxMinorSteps, stepSize,
-            ticks[QwtScaleDiv::MinorTick], ticks[QwtScaleDiv::MediumTick] );
-    }
-
-    for ( int i = 0; i < QwtScaleDiv::NTickTypes; i++ )
-    {
-        ticks[i] = strip( ticks[i], interval );
-
-        // ticks very close to 0.0 are
-        // explicitely set to 0.0
-
-        for ( int j = 0; j < ticks[i].count(); j++ )
-        {
-            if ( qwtFuzzyCompare( ticks[i][j], 0.0, stepSize ) == 0 )
-                ticks[i][j] = 0.0;
-        }
-    }
-}
-
-/*!
-   \brief Calculate major ticks for an interval
-
-   \param interval Interval
-   \param stepSize Step size
-
-   \return Calculated ticks
-*/
-QList<double> QwtLinearScaleEngine::buildMajorTicks(
-    const QwtInterval &interval, double stepSize ) const
-{
-    int numTicks = qRound( interval.width() / stepSize ) + 1;
-    if ( numTicks > 10000 )
-        numTicks = 10000;
-
-    QList<double> ticks;
-
-    ticks += interval.minValue();
-    for ( int i = 1; i < numTicks - 1; i++ )
-        ticks += interval.minValue() + i * stepSize;
-    ticks += interval.maxValue();
-
-    return ticks;
-}
-
-/*!
-   \brief Calculate minor/medium ticks for major ticks
-
-   \param majorTicks Major ticks
-   \param maxMinorSteps Maximum number of minor steps
-   \param stepSize Step size
-   \param minorTicks Array to be filled with the calculated minor ticks
-   \param mediumTicks Array to be filled with the calculated medium ticks
-
-*/
-void QwtLinearScaleEngine::buildMinorTicks(
-    const QList<double>& majorTicks,
-    int maxMinorSteps, double stepSize,
-    QList<double> &minorTicks,
-    QList<double> &mediumTicks ) const
-{
-    double minStep = qwtStepSize( stepSize, maxMinorSteps, base() );
-    if ( minStep == 0.0 )
-        return;
-
-    // # ticks per interval
-    const int numTicks = qCeil( qAbs( stepSize / minStep ) ) - 1;
-
-    int medIndex = -1;
-    if ( numTicks % 2 )
-        medIndex = numTicks / 2;
-
-    // calculate minor ticks
-
-    for ( int i = 0; i < majorTicks.count(); i++ )
-    {
-        double val = majorTicks[i];
-        for ( int k = 0; k < numTicks; k++ )
-        {
-            val += minStep;
-
-            double alignedValue = val;
-            if ( qwtFuzzyCompare( val, 0.0, stepSize ) == 0 )
-                alignedValue = 0.0;
-
-            if ( k == medIndex )
-                mediumTicks += alignedValue;
-            else
-                minorTicks += alignedValue;
-        }
-    }
-}
-
-/*!
-  \brief Align an interval to a step size
-
-  The limits of an interval are aligned that both are integer
-  multiples of the step size.
-
-  \param interval Interval
-  \param stepSize Step size
-
-  \return Aligned interval
-*/
-QwtInterval QwtLinearScaleEngine::align(
-    const QwtInterval &interval, double stepSize ) const
-{
-    double x1 = interval.minValue();
-    double x2 = interval.maxValue();
-
-    // when there is no rounding beside some effect, when 
-    // calculating with doubles, we keep the original value
-
-    const double eps = 0.000000000001; // since Qt 4.8: qFuzzyIsNull
-    if ( -DBL_MAX + stepSize <= x1 )
-    {
-        const double x = QwtScaleArithmetic::floorEps( x1, stepSize );
-        if ( qAbs(x) <= eps || !qFuzzyCompare( x1, x ) )
-            x1 = x;
-    }
-
-    if ( DBL_MAX - stepSize >= x2 )
-    {
-        const double x = QwtScaleArithmetic::ceilEps( x2, stepSize );
-        if ( qAbs(x) <= eps || !qFuzzyCompare( x2, x ) )
-            x2 = x;
-    }
-
-    return QwtInterval( x1, x2 );
-}
-
-/*!
-  Constructor
-
-  \param base Base of the scale engine
-  \sa setBase()
- */
-QwtLogScaleEngine::QwtLogScaleEngine( uint base ):
-    QwtScaleEngine( base )
-{
-    setTransformation( new QwtLogTransform() );
-}
-
-//! Destructor
-QwtLogScaleEngine::~QwtLogScaleEngine()
-{
-}
-
-/*!
-    Align and divide an interval
-
-   \param maxNumSteps Max. number of steps
-   \param x1 First limit of the interval (In/Out)
-   \param x2 Second limit of the interval (In/Out)
-   \param stepSize Step size (Out)
-
-   \sa QwtScaleEngine::setAttribute()
-*/
-void QwtLogScaleEngine::autoScale( int maxNumSteps,
-    double &x1, double &x2, double &stepSize ) const
-{
-    if ( x1 > x2 )
-        qSwap( x1, x2 );
-
-    const double logBase = base();
-
-    QwtInterval interval( x1 / qPow( logBase, lowerMargin() ),
-        x2 * qPow( logBase, upperMargin() ) );
-
-    if ( interval.maxValue() / interval.minValue() < logBase )
-    {
-        // scale width is less than one step -> try to build a linear scale
-
-        QwtLinearScaleEngine linearScaler;
-        linearScaler.setAttributes( attributes() );
-        linearScaler.setReference( reference() );
-        linearScaler.setMargins( lowerMargin(), upperMargin() );
-
-        linearScaler.autoScale( maxNumSteps, x1, x2, stepSize );
-
-        QwtInterval linearInterval = QwtInterval( x1, x2 ).normalized();
-        linearInterval = linearInterval.limited( LOG_MIN, LOG_MAX );
-
-        if ( linearInterval.maxValue() / linearInterval.minValue() < logBase )
-        {
-            // the aligned scale is still less than one step
-
-#if 1
-            // this code doesn't make any sense, but for compatibility
-            // reasons we keep it until 6.2. But it will be ignored
-            // in divideScale
-
-            if ( stepSize < 0.0 )
-                stepSize = -qwtLog( logBase, qAbs( stepSize ) );
-            else
-                stepSize = qwtLog( logBase, stepSize );
-#endif
-
-            return;
-        }
-    }
-
-    double logRef = 1.0;
-    if ( reference() > LOG_MIN / 2 )
-        logRef = qMin( reference(), LOG_MAX / 2 );
-
-    if ( testAttribute( QwtScaleEngine::Symmetric ) )
-    {
-        const double delta = qMax( interval.maxValue() / logRef,
-            logRef / interval.minValue() );
-        interval.setInterval( logRef / delta, logRef * delta );
-    }
-
-    if ( testAttribute( QwtScaleEngine::IncludeReference ) )
-        interval = interval.extend( logRef );
-
-    interval = interval.limited( LOG_MIN, LOG_MAX );
-
-    if ( interval.width() == 0.0 )
-        interval = buildInterval( interval.minValue() );
-
-    stepSize = divideInterval( qwtLogInterval( logBase, interval ).width(), 
-        qMax( maxNumSteps, 1 ) );
-    if ( stepSize < 1.0 )
-        stepSize = 1.0;
-
-    if ( !testAttribute( QwtScaleEngine::Floating ) )
-        interval = align( interval, stepSize );
-
-    x1 = interval.minValue();
-    x2 = interval.maxValue();
-
-    if ( testAttribute( QwtScaleEngine::Inverted ) )
-    {
-        qSwap( x1, x2 );
-        stepSize = -stepSize;
-    }
-}
-
-/*!
-   \brief Calculate a scale division for an interval
-
-   \param x1 First interval limit
-   \param x2 Second interval limit
-   \param maxMajorSteps Maximum for the number of major steps
-   \param maxMinorSteps Maximum number of minor steps
-   \param stepSize Step size. If stepSize == 0, the engine
-                   calculates one.
-
-   \return Calculated scale division
-*/
-QwtScaleDiv QwtLogScaleEngine::divideScale( double x1, double x2,
-    int maxMajorSteps, int maxMinorSteps, double stepSize ) const
-{
-    QwtInterval interval = QwtInterval( x1, x2 ).normalized();
-    interval = interval.limited( LOG_MIN, LOG_MAX );
-
-    if ( interval.width() <= 0 )
-        return QwtScaleDiv();
-
-    const double logBase = base();
-
-    if ( interval.maxValue() / interval.minValue() < logBase )
-    {
-        // scale width is less than one decade -> build linear scale
-
-        QwtLinearScaleEngine linearScaler;
-        linearScaler.setAttributes( attributes() );
-        linearScaler.setReference( reference() );
-        linearScaler.setMargins( lowerMargin(), upperMargin() );
-
-        return linearScaler.divideScale( x1, x2,
-            maxMajorSteps, maxMinorSteps, 0.0 );
-    }
-
-    stepSize = qAbs( stepSize );
-    if ( stepSize == 0.0 )
-    {
-        if ( maxMajorSteps < 1 )
-            maxMajorSteps = 1;
-
-        stepSize = divideInterval( 
-            qwtLogInterval( logBase, interval ).width(), maxMajorSteps );
-        if ( stepSize < 1.0 )
-            stepSize = 1.0; // major step must be >= 1 decade
-    }
-
-    QwtScaleDiv scaleDiv;
-    if ( stepSize != 0.0 )
-    {
-        QList<double> ticks[QwtScaleDiv::NTickTypes];
-        buildTicks( interval, stepSize, maxMinorSteps, ticks );
-
-        scaleDiv = QwtScaleDiv( interval, ticks );
-    }
-
-    if ( x1 > x2 )
-        scaleDiv.invert();
-
-    return scaleDiv;
-}
-
-/*!
-   \brief Calculate ticks for an interval
-
-   \param interval Interval
-   \param maxMinorSteps Maximum number of minor steps
-   \param stepSize Step size
-   \param ticks Arrays to be filled with the calculated ticks
-
-   \sa buildMajorTicks(), buildMinorTicks
-*/
-void QwtLogScaleEngine::buildTicks(
-    const QwtInterval& interval, double stepSize, int maxMinorSteps,
-    QList<double> ticks[QwtScaleDiv::NTickTypes] ) const
-{
-    const QwtInterval boundingInterval = align( interval, stepSize );
-
-    ticks[QwtScaleDiv::MajorTick] =
-        buildMajorTicks( boundingInterval, stepSize );
-
-    if ( maxMinorSteps > 0 )
-    {
-        buildMinorTicks( ticks[QwtScaleDiv::MajorTick], maxMinorSteps, stepSize,
-            ticks[QwtScaleDiv::MinorTick], ticks[QwtScaleDiv::MediumTick] );
-    }
-
-    for ( int i = 0; i < QwtScaleDiv::NTickTypes; i++ )
-        ticks[i] = strip( ticks[i], interval );
-}
-
-/*!
-   \brief Calculate major ticks for an interval
-
-   \param interval Interval
-   \param stepSize Step size
-
-   \return Calculated ticks
-*/
-QList<double> QwtLogScaleEngine::buildMajorTicks(
-    const QwtInterval &interval, double stepSize ) const
-{
-    double width = qwtLogInterval( base(), interval ).width();
-
-    int numTicks = qRound( width / stepSize ) + 1;
-    if ( numTicks > 10000 )
-        numTicks = 10000;
-
-    const double lxmin = ::log( interval.minValue() );
-    const double lxmax = ::log( interval.maxValue() );
-    const double lstep = ( lxmax - lxmin ) / double( numTicks - 1 );
-
-    QList<double> ticks;
-
-    ticks += interval.minValue();
-
-    for ( int i = 1; i < numTicks - 1; i++ )
-        ticks += qExp( lxmin + double( i ) * lstep );
-
-    ticks += interval.maxValue();
-
-    return ticks;
-}
-
-/*!
-   \brief Calculate minor/medium ticks for major ticks
-
-   \param majorTicks Major ticks
-   \param maxMinorSteps Maximum number of minor steps
-   \param stepSize Step size
-   \param minorTicks Array to be filled with the calculated minor ticks
-   \param mediumTicks Array to be filled with the calculated medium ticks
-*/
-void QwtLogScaleEngine::buildMinorTicks(
-    const QList<double> &majorTicks,
-    int maxMinorSteps, double stepSize,
-    QList<double> &minorTicks,
-    QList<double> &mediumTicks ) const
-{
-    const double logBase = base();
-
-    if ( stepSize < 1.1 )          // major step width is one base
-    {
-        double minStep = divideInterval( stepSize, maxMinorSteps + 1 );
-        if ( minStep == 0.0 )
-            return;
-        
-        const int numSteps = qRound( stepSize / minStep ); 
-
-        int mediumTickIndex = -1;
-        if ( ( numSteps > 2 ) && ( numSteps % 2 == 0 ) )
-            mediumTickIndex = numSteps / 2;
-
-        for ( int i = 0; i < majorTicks.count() - 1; i++ )
-        {
-            const double v = majorTicks[i];
-            const double s = logBase / numSteps;
-
-            if ( s >= 1.0 )
-            {
-                if ( !qFuzzyCompare( s, 1.0 ) )
-                    minorTicks += v * s;
-
-                for ( int j = 2; j < numSteps; j++ )
-                {
-                    minorTicks += v * j * s;
-                }
-            }
-            else
-            {
-                for ( int j = 1; j < numSteps; j++ )
-                {
-                    const double tick = v + j * v * ( logBase - 1 ) / numSteps;
-                    if ( j == mediumTickIndex )
-                        mediumTicks += tick;
-                    else
-                        minorTicks += tick;
-                }
-            }
-        }
-    }
-    else
-    {
-        double minStep = divideInterval( stepSize, maxMinorSteps );
-        if ( minStep == 0.0 )
-            return;
-
-        if ( minStep < 1.0 )
-            minStep = 1.0;
-
-        // # subticks per interval
-        int numTicks = qRound( stepSize / minStep ) - 1;
-
-        // Do the minor steps fit into the interval?
-        if ( qwtFuzzyCompare( ( numTicks +  1 ) * minStep,
-            stepSize, stepSize ) > 0 )
-        {
-            numTicks = 0;
-        }
-
-        if ( numTicks < 1 )
-            return; 
-
-        int mediumTickIndex = -1;
-        if ( ( numTicks > 2 ) && ( numTicks % 2 ) )
-            mediumTickIndex = numTicks / 2;
-
-        // substep factor = base^substeps
-        const qreal minFactor = qMax( qPow( logBase, minStep ), qreal( logBase ) );
-
-        for ( int i = 0; i < majorTicks.count(); i++ )
-        {
-            double tick = majorTicks[i];
-            for ( int j = 0; j < numTicks; j++ )
-            {
-                tick *= minFactor;
-
-                if ( j == mediumTickIndex )
-                    mediumTicks += tick;
-                else
-                    minorTicks += tick;
-            }
-        }
-    }
-}
-
-/*!
-  \brief Align an interval to a step size
-
-  The limits of an interval are aligned that both are integer
-  multiples of the step size.
-
-  \param interval Interval
-  \param stepSize Step size
-
-  \return Aligned interval
-*/
-QwtInterval QwtLogScaleEngine::align(
-    const QwtInterval &interval, double stepSize ) const
-{
-    const QwtInterval intv = qwtLogInterval( base(), interval );
-
-    double x1 = QwtScaleArithmetic::floorEps( intv.minValue(), stepSize );
-    if ( qwtFuzzyCompare( interval.minValue(), x1, stepSize ) == 0 )
-        x1 = interval.minValue();
-
-    double x2 = QwtScaleArithmetic::ceilEps( intv.maxValue(), stepSize );
-    if ( qwtFuzzyCompare( interval.maxValue(), x2, stepSize ) == 0 )
-        x2 = interval.maxValue();
-
-    return qwtPowInterval( base(), QwtInterval( x1, x2 ) );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_engine.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_engine.h
deleted file mode 100644
index fc5ac3536510370431956423f3e75ed85dd76502..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_engine.h
+++ /dev/null
@@ -1,220 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SCALE_ENGINE_H
-#define QWT_SCALE_ENGINE_H
-
-#include "qwt_global.h"
-#include "qwt_scale_div.h"
-#include "qwt_interval.h"
-
-class QwtTransform;
-
-/*!
-  \brief Arithmetic including a tolerance
-*/
-class QWT_EXPORT QwtScaleArithmetic
-{
-public:
-    static double ceilEps( double value, double intervalSize );
-    static double floorEps( double value, double intervalSize );
-
-    static double divideEps( double interval, double steps );
-
-    static double divideInterval( double interval, 
-        int numSteps, uint base );
-};
-
-/*!
-  \brief Base class for scale engines.
-
-  A scale engine tries to find "reasonable" ranges and step sizes
-  for scales.
-
-  The layout of the scale can be varied with setAttribute().
-
-  Qwt offers implementations for logarithmic and linear scales. 
-*/
-
-class QWT_EXPORT QwtScaleEngine
-{
-public:
-    /*! 
-       Layout attributes
-       \sa setAttribute(), testAttribute(), reference(),
-           lowerMargin(), upperMargin()
-     */
-
-    enum Attribute
-    {
-        //! No attributes
-        NoAttribute = 0x00,
-
-        //! Build a scale which includes the reference() value.
-        IncludeReference = 0x01,
-
-        //! Build a scale which is symmetric to the reference() value.
-        Symmetric = 0x02,
-
-        /*!
-           The endpoints of the scale are supposed to be equal the
-           outmost included values plus the specified margins 
-           (see setMargins()).
-           If this attribute is *not* set, the endpoints of the scale will
-           be integer multiples of the step size.
-         */
-        Floating = 0x04,
-
-        //! Turn the scale upside down.
-        Inverted = 0x08
-    };
-
-    //! Layout attributes
-    typedef QFlags<Attribute> Attributes;
-
-    explicit QwtScaleEngine( uint base = 10 );
-    virtual ~QwtScaleEngine();
-
-    void setBase( uint base );
-    uint base() const;
-
-    void setAttribute( Attribute, bool on = true );
-    bool testAttribute( Attribute ) const;
-
-    void setAttributes( Attributes );
-    Attributes attributes() const;
-
-    void setReference( double reference );
-    double reference() const;
-
-    void setMargins( double lower, double upper );
-    double lowerMargin() const;
-    double upperMargin() const;
-
-    /*!
-      Align and divide an interval
-
-      \param maxNumSteps Max. number of steps
-      \param x1 First limit of the interval (In/Out)
-      \param x2 Second limit of the interval (In/Out)
-      \param stepSize Step size (Return value)
-    */
-    virtual void autoScale( int maxNumSteps,
-        double &x1, double &x2, double &stepSize ) const = 0;
-
-    /*!
-      \brief Calculate a scale division
-
-      \param x1 First interval limit
-      \param x2 Second interval limit
-      \param maxMajorSteps Maximum for the number of major steps
-      \param maxMinorSteps Maximum number of minor steps
-      \param stepSize Step size. If stepSize == 0.0, the scaleEngine
-                   calculates one.
-
-      \return Calculated scale division
-    */
-    virtual QwtScaleDiv divideScale( double x1, double x2,
-        int maxMajorSteps, int maxMinorSteps,
-        double stepSize = 0.0 ) const = 0;
-
-    void setTransformation( QwtTransform * );
-    QwtTransform *transformation() const;
-
-protected:
-    bool contains( const QwtInterval &, double val ) const;
-    QList<double> strip( const QList<double>&, const QwtInterval & ) const;
-
-    double divideInterval( double interval, int numSteps ) const;
-
-    QwtInterval buildInterval( double v ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-/*!
-  \brief A scale engine for linear scales
-
-  The step size will fit into the pattern
-  \f$\left\{ 1,2,5\right\} \cdot 10^{n}\f$, where n is an integer.
-*/
-
-class QWT_EXPORT QwtLinearScaleEngine: public QwtScaleEngine
-{
-public:
-    QwtLinearScaleEngine( uint base = 10 );
-    virtual ~QwtLinearScaleEngine();
-
-    virtual void autoScale( int maxSteps,
-        double &x1, double &x2, double &stepSize ) const;
-
-    virtual QwtScaleDiv divideScale( double x1, double x2,
-        int numMajorSteps, int numMinorSteps,
-                                     double stepSize = 0.0 ) const;
-
-
-protected:
-    QwtInterval align( const QwtInterval&, double stepSize ) const;
-
-    void buildTicks(
-        const QwtInterval &, double stepSize, int maxMinSteps,
-        QList<double> ticks[QwtScaleDiv::NTickTypes] ) const;
-
-    QList<double> buildMajorTicks(
-        const QwtInterval &interval, double stepSize ) const;
-
-    void buildMinorTicks( const QList<double>& majorTicks,
-        int maxMinorSteps, double stepSize,
-        QList<double> &minorTicks, QList<double> &mediumTicks ) const;
-};
-
-/*!
-  \brief A scale engine for logarithmic scales
-
-  The step size is measured in *decades*
-  and the major step size will be adjusted to fit the pattern
-  \f$\left\{ 1,2,3,5\right\} \cdot 10^{n}\f$, where n is a natural number
-  including zero.
-
-  \warning the step size as well as the margins are measured in *decades*.
-*/
-
-class QWT_EXPORT QwtLogScaleEngine: public QwtScaleEngine
-{
-public:
-    QwtLogScaleEngine( uint base = 10 );
-    virtual ~QwtLogScaleEngine();
-
-    virtual void autoScale( int maxSteps,
-        double &x1, double &x2, double &stepSize ) const;
-
-    virtual QwtScaleDiv divideScale( double x1, double x2,
-        int numMajorSteps, int numMinorSteps,
-        double stepSize = 0.0 ) const;
-
-protected:
-    QwtInterval align( const QwtInterval&, double stepSize ) const;
-
-    void buildTicks(
-        const QwtInterval &, double stepSize, int maxMinSteps,
-        QList<double> ticks[QwtScaleDiv::NTickTypes] ) const;
-
-    QList<double> buildMajorTicks(
-        const QwtInterval &interval, double stepSize ) const;
-
-    void buildMinorTicks( const QList<double>& majorTicks,
-        int maxMinorSteps, double stepSize,
-        QList<double> &minorTicks, QList<double> &mediumTicks ) const;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtScaleEngine::Attributes )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_map.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_map.cpp
deleted file mode 100644
index 17e399923e4c7808dd3be11f1d43ade4118cd041..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_map.cpp
+++ /dev/null
@@ -1,248 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_scale_map.h"
-#include "qwt_math.h"
-#include <qrect.h>
-#include <qdebug.h>
-
-/*!
-  \brief Constructor
-
-  The scale and paint device intervals are both set to [0,1].
-*/
-QwtScaleMap::QwtScaleMap():
-    d_s1( 0.0 ),
-    d_s2( 1.0 ),
-    d_p1( 0.0 ),
-    d_p2( 1.0 ),
-    d_cnv( 1.0 ),
-    d_ts1( 0.0 ),
-    d_transform( NULL )
-{
-}
-
-//! Copy constructor
-QwtScaleMap::QwtScaleMap( const QwtScaleMap& other ):
-    d_s1( other.d_s1 ),
-    d_s2( other.d_s2 ),
-    d_p1( other.d_p1 ),
-    d_p2( other.d_p2 ),
-    d_cnv( other.d_cnv ),
-    d_ts1( other.d_ts1 ),
-    d_transform( NULL )
-{
-    if ( other.d_transform )
-        d_transform = other.d_transform->copy();
-}
-
-/*!
-  Destructor
-*/
-QwtScaleMap::~QwtScaleMap()
-{
-    delete d_transform;
-}
-
-//! Assignment operator
-QwtScaleMap &QwtScaleMap::operator=( const QwtScaleMap & other )
-{
-    d_s1 = other.d_s1;
-    d_s2 = other.d_s2;
-    d_p1 = other.d_p1;
-    d_p2 = other.d_p2;
-    d_cnv = other.d_cnv;
-    d_ts1 = other.d_ts1;
-
-    delete d_transform;
-    d_transform = NULL;
-
-    if ( other.d_transform )
-        d_transform = other.d_transform->copy();
-
-    return *this;
-}
-
-/*!
-   Initialize the map with a transformation
-*/
-void QwtScaleMap::setTransformation( QwtTransform *transform )
-{
-    if ( transform != d_transform )
-    {
-        delete d_transform;
-        d_transform = transform;
-    }
-
-    setScaleInterval( d_s1, d_s2 );
-}
-
-//! Get the transformation
-const QwtTransform *QwtScaleMap::transformation() const
-{
-    return d_transform;
-}
-
-/*!
-  \brief Specify the borders of the scale interval
-  \param s1 first border
-  \param s2 second border
-  \warning scales might be aligned to 
-           transformation depending boundaries
-*/
-void QwtScaleMap::setScaleInterval( double s1, double s2 )
-{
-    d_s1 = s1;
-    d_s2 = s2;
-
-    if ( d_transform )
-    {
-        d_s1 = d_transform->bounded( d_s1 );
-        d_s2 = d_transform->bounded( d_s2 );
-    }
-
-    updateFactor();
-}
-
-/*!
-  \brief Specify the borders of the paint device interval
-  \param p1 first border
-  \param p2 second border
-*/
-void QwtScaleMap::setPaintInterval( double p1, double p2 )
-{
-    d_p1 = p1;
-    d_p2 = p2;
-
-    updateFactor();
-}
-
-void QwtScaleMap::updateFactor()
-{
-    d_ts1 = d_s1;
-    double ts2 = d_s2;
-
-    if ( d_transform )
-    {
-        d_ts1 = d_transform->transform( d_ts1 );
-        ts2 = d_transform->transform( ts2 );
-    }
-
-    d_cnv = 1.0;
-    if ( d_ts1 != ts2 )
-        d_cnv = ( d_p2 - d_p1 ) / ( ts2 - d_ts1 );
-}
-
-/*!
-   Transform a rectangle from scale to paint coordinates
-
-   \param xMap X map
-   \param yMap Y map
-   \param rect Rectangle in scale coordinates
-   \return Rectangle in paint coordinates
-
-   \sa invTransform()
-*/
-QRectF QwtScaleMap::transform( const QwtScaleMap &xMap,
-    const QwtScaleMap &yMap, const QRectF &rect )
-{
-    double x1 = xMap.transform( rect.left() );
-    double x2 = xMap.transform( rect.right() );
-    double y1 = yMap.transform( rect.top() );
-    double y2 = yMap.transform( rect.bottom() );
-
-    if ( x2 < x1 )
-        qSwap( x1, x2 );
-    if ( y2 < y1 )
-        qSwap( y1, y2 );
-
-    if ( qwtFuzzyCompare( x1, 0.0, x2 - x1 ) == 0 )
-        x1 = 0.0;
-    if ( qwtFuzzyCompare( x2, 0.0, x2 - x1 ) == 0 )
-        x2 = 0.0;
-    if ( qwtFuzzyCompare( y1, 0.0, y2 - y1 ) == 0 )
-        y1 = 0.0;
-    if ( qwtFuzzyCompare( y2, 0.0, y2 - y1 ) == 0 )
-        y2 = 0.0;
-
-    return QRectF( x1, y1, x2 - x1 + 1, y2 - y1 + 1 );
-}
-
-/*!
-   Transform a rectangle from paint to scale coordinates
-
-   \param xMap X map
-   \param yMap Y map
-   \param pos Position in paint coordinates
-   \return Position in scale coordinates
-   \sa transform()
-*/
-QPointF QwtScaleMap::invTransform( const QwtScaleMap &xMap,
-    const QwtScaleMap &yMap, const QPointF &pos )
-{
-    return QPointF( 
-        xMap.invTransform( pos.x() ), 
-        yMap.invTransform( pos.y() ) 
-    );
-}
-
-/*!
-   Transform a point from scale to paint coordinates
-
-   \param xMap X map
-   \param yMap Y map
-   \param pos Position in scale coordinates
-   \return Position in paint coordinates
-
-   \sa invTransform()
-*/
-QPointF QwtScaleMap::transform( const QwtScaleMap &xMap,
-    const QwtScaleMap &yMap, const QPointF &pos )
-{
-    return QPointF( 
-        xMap.transform( pos.x() ), 
-        yMap.transform( pos.y() )
-    );
-}
-
-/*!
-   Transform a rectangle from paint to scale coordinates
-
-   \param xMap X map
-   \param yMap Y map
-   \param rect Rectangle in paint coordinates
-   \return Rectangle in scale coordinates
-   \sa transform()
-*/
-QRectF QwtScaleMap::invTransform( const QwtScaleMap &xMap,
-    const QwtScaleMap &yMap, const QRectF &rect )
-{
-    const double x1 = xMap.invTransform( rect.left() );
-    const double x2 = xMap.invTransform( rect.right() - 1 );
-    const double y1 = yMap.invTransform( rect.top() );
-    const double y2 = yMap.invTransform( rect.bottom() - 1 );
-
-    const QRectF r( x1, y1, x2 - x1, y2 - y1 );
-    return r.normalized();
-}
-
-#ifndef QT_NO_DEBUG_STREAM
-
-QDebug operator<<( QDebug debug, const QwtScaleMap &map )
-{
-    debug.nospace() << "QwtScaleMap("
-        << map.transformation()
-        << ", s:" << map.s1() << "->" << map.s2()
-        << ", p:" << map.p1() << "->" << map.p2()
-        << ")";
-
-    return debug.space();
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_map.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_map.h
deleted file mode 100644
index 3fdf422ae56ba6c8b3b377c7549cdedf391b57ca..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_map.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SCALE_MAP_H
-#define QWT_SCALE_MAP_H
-
-#include "qwt_global.h"
-#include "qwt_transform.h"
-#include <qrect.h>
-
-#ifndef QT_NO_DEBUG_STREAM
-#include <qdebug.h>
-#endif
-
-class QRectF;
-
-/*!
-   \brief A scale map
-
-   QwtScaleMap offers transformations from the coordinate system
-   of a scale into the linear coordinate system of a paint device 
-   and vice versa.
-*/
-class QWT_EXPORT QwtScaleMap
-{
-public:
-    QwtScaleMap();
-    QwtScaleMap( const QwtScaleMap& );
-
-    ~QwtScaleMap();
-
-    QwtScaleMap &operator=( const QwtScaleMap & );
-
-    void setTransformation( QwtTransform * );
-    const QwtTransform *transformation() const;
-
-    void setPaintInterval( double p1, double p2 );
-    void setScaleInterval( double s1, double s2 );
-
-    double transform( double s ) const;
-    double invTransform( double p ) const;
-
-    double p1() const;
-    double p2() const;
-
-    double s1() const;
-    double s2() const;
-
-    double pDist() const;
-    double sDist() const;
-
-    static QRectF transform( const QwtScaleMap &,
-        const QwtScaleMap &, const QRectF & );
-    static QRectF invTransform( const QwtScaleMap &,
-        const QwtScaleMap &, const QRectF & );
-
-    static QPointF transform( const QwtScaleMap &,
-        const QwtScaleMap &, const QPointF & );
-    static QPointF invTransform( const QwtScaleMap &,
-        const QwtScaleMap &, const QPointF & );
-
-    bool isInverting() const;
-
-private:
-    void updateFactor();
-
-    double d_s1, d_s2;     // scale interval boundaries
-    double d_p1, d_p2;     // paint device interval boundaries
-
-    double d_cnv;       // conversion factor
-    double d_ts1;
-
-    QwtTransform *d_transform;
-};
-
-/*!
-    \return First border of the scale interval
-*/
-inline double QwtScaleMap::s1() const
-{
-    return d_s1;
-}
-
-/*!
-    \return Second border of the scale interval
-*/
-inline double QwtScaleMap::s2() const
-{
-    return d_s2;
-}
-
-/*!
-    \return First border of the paint interval
-*/
-inline double QwtScaleMap::p1() const
-{
-    return d_p1;
-}
-
-/*!
-    \return Second border of the paint interval
-*/
-inline double QwtScaleMap::p2() const
-{
-    return d_p2;
-}
-
-/*!
-    \return qwtAbs(p2() - p1())
-*/
-inline double QwtScaleMap::pDist() const
-{
-    return qAbs( d_p2 - d_p1 );
-}
-
-/*!
-    \return qwtAbs(s2() - s1())
-*/
-inline double QwtScaleMap::sDist() const
-{
-    return qAbs( d_s2 - d_s1 );
-}
-
-/*!
-  Transform a point related to the scale interval into an point
-  related to the interval of the paint device
-
-  \param s Value relative to the coordinates of the scale
-  \return Transformed value
-
-  \sa invTransform()
-*/
-inline double QwtScaleMap::transform( double s ) const
-{
-    if ( d_transform )
-        s = d_transform->transform( s );
-
-    return d_p1 + ( s - d_ts1 ) * d_cnv;
-}
-
-/*!
-  Transform an paint device value into a value in the
-  interval of the scale.
-
-  \param p Value relative to the coordinates of the paint device
-  \return Transformed value
-
-  \sa transform()
-*/
-inline double QwtScaleMap::invTransform( double p ) const
-{
-    double s = d_ts1 + ( p - d_p1 ) / d_cnv;
-    if ( d_transform )
-        s = d_transform->invTransform( s );
-
-    return s;
-}
-
-//! \return True, when ( p1() < p2() ) != ( s1() < s2() )
-inline bool QwtScaleMap::isInverting() const
-{
-    return ( ( d_p1 < d_p2 ) != ( d_s1 < d_s2 ) );
-}
-
-#ifndef QT_NO_DEBUG_STREAM
-QWT_EXPORT QDebug operator<<( QDebug, const QwtScaleMap & );
-#endif
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_widget.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_widget.cpp
deleted file mode 100644
index dccf1a476d22ad3763e0af4993bf9a1c2ebf4215..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_widget.cpp
+++ /dev/null
@@ -1,942 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_scale_widget.h"
-#include "qwt_painter.h"
-#include "qwt_color_map.h"
-#include "qwt_scale_map.h"
-#include "qwt_math.h"
-#include "qwt_scale_div.h"
-#include "qwt_text.h"
-#include "qwt_scale_engine.h"
-#include <qpainter.h>
-#include <qevent.h>
-#include <qmath.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-
-class QwtScaleWidget::PrivateData
-{
-public:
-    PrivateData():
-        scaleDraw( NULL )
-    {
-        colorBar.colorMap = NULL;
-    }
-
-    ~PrivateData()
-    {
-        delete scaleDraw;
-        delete colorBar.colorMap;
-    }
-
-    QwtScaleDraw *scaleDraw;
-
-    int borderDist[2];
-    int minBorderDist[2];
-    int scaleLength;
-    int margin;
-
-    int titleOffset;
-    int spacing;
-    QwtText title;
-
-    QwtScaleWidget::LayoutFlags layoutFlags;
-
-    struct t_colorBar
-    {
-        bool isEnabled;
-        int width;
-        QwtInterval interval;
-        QwtColorMap *colorMap;
-    } colorBar;
-};
-
-/*!
-  \brief Create a scale with the position QwtScaleWidget::Left
-  \param parent Parent widget
-*/
-QwtScaleWidget::QwtScaleWidget( QWidget *parent ):
-    QWidget( parent )
-{
-    initScale( QwtScaleDraw::LeftScale );
-}
-
-/*!
-  \brief Constructor
-  \param align Alignment.
-  \param parent Parent widget
-*/
-QwtScaleWidget::QwtScaleWidget(
-        QwtScaleDraw::Alignment align, QWidget *parent ):
-    QWidget( parent )
-{
-    initScale( align );
-}
-
-//! Destructor
-QwtScaleWidget::~QwtScaleWidget()
-{
-    delete d_data;
-}
-
-//! Initialize the scale
-void QwtScaleWidget::initScale( QwtScaleDraw::Alignment align )
-{
-    d_data = new PrivateData;
-
-    d_data->layoutFlags = 0;
-    if ( align == QwtScaleDraw::RightScale )
-        d_data->layoutFlags |= TitleInverted;
-
-    d_data->borderDist[0] = 0;
-    d_data->borderDist[1] = 0;
-    d_data->minBorderDist[0] = 0;
-    d_data->minBorderDist[1] = 0;
-    d_data->margin = 4;
-    d_data->titleOffset = 0;
-    d_data->spacing = 2;
-
-    d_data->scaleDraw = new QwtScaleDraw;
-    d_data->scaleDraw->setAlignment( align );
-    d_data->scaleDraw->setLength( 10 );
-
-    d_data->scaleDraw->setScaleDiv(
-        QwtLinearScaleEngine().divideScale( 0.0, 100.0, 10, 5 ) );
-
-    d_data->colorBar.colorMap = new QwtLinearColorMap();
-    d_data->colorBar.isEnabled = false;
-    d_data->colorBar.width = 10;
-
-    const int flags = Qt::AlignHCenter
-        | Qt::TextExpandTabs | Qt::TextWordWrap;
-    d_data->title.setRenderFlags( flags );
-    d_data->title.setFont( font() );
-
-    QSizePolicy policy( QSizePolicy::MinimumExpanding,
-        QSizePolicy::Fixed );
-    if ( d_data->scaleDraw->orientation() == Qt::Vertical )
-        policy.transpose();
-
-    setSizePolicy( policy );
-
-    setAttribute( Qt::WA_WState_OwnSizePolicy, false );
-}
-
-/*!
-   Toggle an layout flag
-
-   \param flag Layout flag
-   \param on true/false
-
-   \sa testLayoutFlag(), LayoutFlag
-*/
-void QwtScaleWidget::setLayoutFlag( LayoutFlag flag, bool on )
-{
-    if ( ( ( d_data->layoutFlags & flag ) != 0 ) != on )
-    {
-        if ( on )
-            d_data->layoutFlags |= flag;
-        else
-            d_data->layoutFlags &= ~flag;
-    }
-}
-
-/*!
-   Test a layout flag
-
-   \param flag Layout flag
-   \return true/false
-   \sa setLayoutFlag(), LayoutFlag
-*/
-bool QwtScaleWidget::testLayoutFlag( LayoutFlag flag ) const
-{
-    return ( d_data->layoutFlags & flag );
-}
-
-/*!
-  Give title new text contents
-
-  \param title New title
-  \sa title(), setTitle(const QwtText &);
-*/
-void QwtScaleWidget::setTitle( const QString &title )
-{
-    if ( d_data->title.text() != title )
-    {
-        d_data->title.setText( title );
-        layoutScale();
-    }
-}
-
-/*!
-  Give title new text contents
-
-  \param title New title
-  \sa title()
-  \warning The title flags are interpreted in
-               direction of the label, AlignTop, AlignBottom can't be set
-               as the title will always be aligned to the scale.
-*/
-void QwtScaleWidget::setTitle( const QwtText &title )
-{
-    QwtText t = title;
-    const int flags = title.renderFlags() & ~( Qt::AlignTop | Qt::AlignBottom );
-    t.setRenderFlags( flags );
-
-    if ( t != d_data->title )
-    {
-        d_data->title = t;
-        layoutScale();
-    }
-}
-
-/*!
-  Change the alignment
-
-  \param alignment New alignment
-  \sa alignment()
-*/
-void QwtScaleWidget::setAlignment( QwtScaleDraw::Alignment alignment )
-{
-    if ( d_data->scaleDraw )
-        d_data->scaleDraw->setAlignment( alignment );
-
-    if ( !testAttribute( Qt::WA_WState_OwnSizePolicy ) )
-    {
-        QSizePolicy policy( QSizePolicy::MinimumExpanding,
-            QSizePolicy::Fixed );
-        if ( d_data->scaleDraw->orientation() == Qt::Vertical )
-            policy.transpose();
-
-        setSizePolicy( policy );
-
-        setAttribute( Qt::WA_WState_OwnSizePolicy, false );
-    }
-
-    layoutScale();
-}
-
-
-/*!
-    \return position
-    \sa setPosition()
-*/
-QwtScaleDraw::Alignment QwtScaleWidget::alignment() const
-{
-    if ( !scaleDraw() )
-        return QwtScaleDraw::LeftScale;
-
-    return scaleDraw()->alignment();
-}
-
-/*!
-  Specify distances of the scale's endpoints from the
-  widget's borders. The actual borders will never be less
-  than minimum border distance.
-  \param dist1 Left or top Distance
-  \param dist2 Right or bottom distance
-  \sa borderDist()
-*/
-void QwtScaleWidget::setBorderDist( int dist1, int dist2 )
-{
-    if ( dist1 != d_data->borderDist[0] || dist2 != d_data->borderDist[1] )
-    {
-        d_data->borderDist[0] = dist1;
-        d_data->borderDist[1] = dist2;
-        layoutScale();
-    }
-}
-
-/*!
-  \brief Specify the margin to the colorBar/base line.
-  \param margin Margin
-  \sa margin()
-*/
-void QwtScaleWidget::setMargin( int margin )
-{
-    margin = qMax( 0, margin );
-    if ( margin != d_data->margin )
-    {
-        d_data->margin = margin;
-        layoutScale();
-    }
-}
-
-/*!
-  \brief Specify the distance between color bar, scale and title
-  \param spacing Spacing
-  \sa spacing()
-*/
-void QwtScaleWidget::setSpacing( int spacing )
-{
-    spacing = qMax( 0, spacing );
-    if ( spacing != d_data->spacing )
-    {
-        d_data->spacing = spacing;
-        layoutScale();
-    }
-}
-
-/*!
-  \brief Change the alignment for the labels.
-
-  \sa QwtScaleDraw::setLabelAlignment(), setLabelRotation()
-*/
-void QwtScaleWidget::setLabelAlignment( Qt::Alignment alignment )
-{
-    d_data->scaleDraw->setLabelAlignment( alignment );
-    layoutScale();
-}
-
-/*!
-  \brief Change the rotation for the labels.
-  See QwtScaleDraw::setLabelRotation().
-
-  \param rotation Rotation
-  \sa QwtScaleDraw::setLabelRotation(), setLabelFlags()
-*/
-void QwtScaleWidget::setLabelRotation( double rotation )
-{
-    d_data->scaleDraw->setLabelRotation( rotation );
-    layoutScale();
-}
-
-/*!
-  Set a scale draw
-
-  scaleDraw has to be created with new and will be deleted in
-  ~QwtScaleWidget() or the next call of setScaleDraw().
-  scaleDraw will be initialized with the attributes of
-  the previous scaleDraw object.
-
-  \param scaleDraw ScaleDraw object
-  \sa scaleDraw()
-*/
-void QwtScaleWidget::setScaleDraw( QwtScaleDraw *scaleDraw )
-{
-    if ( ( scaleDraw == NULL ) || ( scaleDraw == d_data->scaleDraw ) )
-        return;
-
-    const QwtScaleDraw* sd = d_data->scaleDraw;
-    if ( sd )
-    {
-        scaleDraw->setAlignment( sd->alignment() );
-        scaleDraw->setScaleDiv( sd->scaleDiv() );
-
-        QwtTransform *transform = NULL;
-        if ( sd->scaleMap().transformation() )
-            transform = sd->scaleMap().transformation()->copy();
-
-        scaleDraw->setTransformation( transform );
-    }
-
-    delete d_data->scaleDraw;
-    d_data->scaleDraw = scaleDraw;
-
-    layoutScale();
-}
-
-/*!
-    \return scaleDraw of this scale
-    \sa setScaleDraw(), QwtScaleDraw::setScaleDraw()
-*/
-const QwtScaleDraw *QwtScaleWidget::scaleDraw() const
-{
-    return d_data->scaleDraw;
-}
-
-/*!
-    \return scaleDraw of this scale
-    \sa QwtScaleDraw::setScaleDraw()
-*/
-QwtScaleDraw *QwtScaleWidget::scaleDraw()
-{
-    return d_data->scaleDraw;
-}
-
-/*!
-    \return title
-    \sa setTitle()
-*/
-QwtText QwtScaleWidget::title() const
-{
-    return d_data->title;
-}
-
-/*!
-    \return start border distance
-    \sa setBorderDist()
-*/
-int QwtScaleWidget::startBorderDist() const
-{
-    return d_data->borderDist[0];
-}
-
-/*!
-    \return end border distance
-    \sa setBorderDist()
-*/
-int QwtScaleWidget::endBorderDist() const
-{
-    return d_data->borderDist[1];
-}
-
-/*!
-    \return margin
-    \sa setMargin()
-*/
-int QwtScaleWidget::margin() const
-{
-    return d_data->margin;
-}
-
-/*!
-    \return distance between scale and title
-    \sa setMargin()
-*/
-int QwtScaleWidget::spacing() const
-{
-    return d_data->spacing;
-}
-
-/*!
-  \brief paintEvent
-*/
-void QwtScaleWidget::paintEvent( QPaintEvent *event )
-{
-    QPainter painter( this );
-    painter.setClipRegion( event->region() );
-
-    QStyleOption opt;
-    opt.init(this);
-    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
-
-    draw( &painter );
-}
-
-/*!
-  \brief draw the scale
-*/
-void QwtScaleWidget::draw( QPainter *painter ) const
-{
-    d_data->scaleDraw->draw( painter, palette() );
-
-    if ( d_data->colorBar.isEnabled && d_data->colorBar.width > 0 &&
-        d_data->colorBar.interval.isValid() )
-    {
-        drawColorBar( painter, colorBarRect( contentsRect() ) );
-    }
-
-    QRect r = contentsRect();
-    if ( d_data->scaleDraw->orientation() == Qt::Horizontal )
-    {
-        r.setLeft( r.left() + d_data->borderDist[0] );
-        r.setWidth( r.width() - d_data->borderDist[1] );
-    }
-    else
-    {
-        r.setTop( r.top() + d_data->borderDist[0] );
-        r.setHeight( r.height() - d_data->borderDist[1] );
-    }
-
-    if ( !d_data->title.isEmpty() )
-        drawTitle( painter, d_data->scaleDraw->alignment(), r );
-}
-
-/*!
-  Calculate the the rectangle for the color bar
-
-  \param rect Bounding rectangle for all components of the scale
-  \return Rectangle for the color bar
-*/
-QRectF QwtScaleWidget::colorBarRect( const QRectF& rect ) const
-{
-    QRectF cr = rect;
-
-    if ( d_data->scaleDraw->orientation() == Qt::Horizontal )
-    {
-        cr.setLeft( cr.left() + d_data->borderDist[0] );
-        cr.setWidth( cr.width() - d_data->borderDist[1] + 1 );
-    }
-    else
-    {
-        cr.setTop( cr.top() + d_data->borderDist[0] );
-        cr.setHeight( cr.height() - d_data->borderDist[1] + 1 );
-    }
-
-    switch ( d_data->scaleDraw->alignment() )
-    {
-        case QwtScaleDraw::LeftScale:
-        {
-            cr.setLeft( cr.right() - d_data->margin
-                - d_data->colorBar.width );
-            cr.setWidth( d_data->colorBar.width );
-            break;
-        }
-
-        case QwtScaleDraw::RightScale:
-        {
-            cr.setLeft( cr.left() + d_data->margin );
-            cr.setWidth( d_data->colorBar.width );
-            break;
-        }
-
-        case QwtScaleDraw::BottomScale:
-        {
-            cr.setTop( cr.top() + d_data->margin );
-            cr.setHeight( d_data->colorBar.width );
-            break;
-        }
-
-        case QwtScaleDraw::TopScale:
-        {
-            cr.setTop( cr.bottom() - d_data->margin
-                - d_data->colorBar.width );
-            cr.setHeight( d_data->colorBar.width );
-            break;
-        }
-    }
-
-    return cr;
-}
-
-/*!
-  Event handler for resize events
-  \param event Resize event
-*/
-void QwtScaleWidget::resizeEvent( QResizeEvent *event )
-{
-    Q_UNUSED( event );
-    layoutScale( false );
-}
-
-/*!
-  Recalculate the scale's geometry and layout based on
-  the current geometry and fonts.
-
-  \param update_geometry Notify the layout system and call update
-                         to redraw the scale
-*/
-
-void QwtScaleWidget::layoutScale( bool update_geometry )
-{
-    int bd0, bd1;
-    getBorderDistHint( bd0, bd1 );
-    if ( d_data->borderDist[0] > bd0 )
-        bd0 = d_data->borderDist[0];
-    if ( d_data->borderDist[1] > bd1 )
-        bd1 = d_data->borderDist[1];
-
-    int colorBarWidth = 0;
-    if ( d_data->colorBar.isEnabled && d_data->colorBar.interval.isValid() )
-        colorBarWidth = d_data->colorBar.width + d_data->spacing;
-
-    const QRectF r = contentsRect();
-    double x, y, length;
-
-    if ( d_data->scaleDraw->orientation() == Qt::Vertical )
-    {
-        y = r.top() + bd0;
-        length = r.height() - ( bd0 + bd1 );
-
-        if ( d_data->scaleDraw->alignment() == QwtScaleDraw::LeftScale )
-            x = r.right() - 1.0 - d_data->margin - colorBarWidth;
-        else
-            x = r.left() + d_data->margin + colorBarWidth;
-    }
-    else
-    {
-        x = r.left() + bd0;
-        length = r.width() - ( bd0 + bd1 );
-
-        if ( d_data->scaleDraw->alignment() == QwtScaleDraw::BottomScale )
-            y = r.top() + d_data->margin + colorBarWidth;
-        else
-            y = r.bottom() - 1.0 - d_data->margin - colorBarWidth;
-    }
-
-    d_data->scaleDraw->move( x, y );
-    d_data->scaleDraw->setLength( length );
-
-    const int extent = qCeil( d_data->scaleDraw->extent( font() ) );
-
-    d_data->titleOffset =
-        d_data->margin + d_data->spacing + colorBarWidth + extent;
-
-    if ( update_geometry )
-    {
-        updateGeometry();
-        update();
-    }
-}
-
-/*!
-  Draw the color bar of the scale widget
-
-  \param painter Painter
-  \param rect Bounding rectangle for the color bar
-
-  \sa setColorBarEnabled()
-*/
-void QwtScaleWidget::drawColorBar( QPainter *painter, const QRectF& rect ) const
-{
-    if ( !d_data->colorBar.interval.isValid() )
-        return;
-
-    const QwtScaleDraw* sd = d_data->scaleDraw;
-
-    QwtPainter::drawColorBar( painter, *d_data->colorBar.colorMap,
-        d_data->colorBar.interval.normalized(), sd->scaleMap(),
-        sd->orientation(), rect );
-}
-
-/*!
-  Rotate and paint a title according to its position into a given rectangle.
-
-  \param painter Painter
-  \param align Alignment
-  \param rect Bounding rectangle
-*/
-
-void QwtScaleWidget::drawTitle( QPainter *painter,
-    QwtScaleDraw::Alignment align, const QRectF &rect ) const
-{
-    QRectF r = rect;
-    double angle;
-    int flags = d_data->title.renderFlags() &
-        ~( Qt::AlignTop | Qt::AlignBottom | Qt::AlignVCenter );
-
-    switch ( align )
-    {
-        case QwtScaleDraw::LeftScale:
-            angle = -90.0;
-            flags |= Qt::AlignTop;
-            r.setRect( r.left(), r.bottom(),
-                r.height(), r.width() - d_data->titleOffset );
-            break;
-
-        case QwtScaleDraw::RightScale:
-            angle = -90.0;
-            flags |= Qt::AlignTop;
-            r.setRect( r.left() + d_data->titleOffset, r.bottom(),
-                r.height(), r.width() - d_data->titleOffset );
-            break;
-
-        case QwtScaleDraw::BottomScale:
-            angle = 0.0;
-            flags |= Qt::AlignBottom;
-            r.setTop( r.top() + d_data->titleOffset );
-            break;
-
-        case QwtScaleDraw::TopScale:
-        default:
-            angle = 0.0;
-            flags |= Qt::AlignTop;
-            r.setBottom( r.bottom() - d_data->titleOffset );
-            break;
-    }
-
-    if ( d_data->layoutFlags & TitleInverted )
-    {
-        if ( align == QwtScaleDraw::LeftScale
-            || align == QwtScaleDraw::RightScale )
-        {
-            angle = -angle;
-            r.setRect( r.x() + r.height(), r.y() - r.width(),
-                r.width(), r.height() );
-        }
-    }
-
-    painter->save();
-    painter->setFont( font() );
-    painter->setPen( palette().color( QPalette::Text ) );
-
-    painter->translate( r.x(), r.y() );
-    if ( angle != 0.0 )
-        painter->rotate( angle );
-
-    QwtText title = d_data->title;
-    title.setRenderFlags( flags );
-    title.draw( painter, QRectF( 0.0, 0.0, r.width(), r.height() ) );
-
-    painter->restore();
-}
-
-/*!
-  \brief Notify a change of the scale
-
-  This virtual function can be overloaded by derived
-  classes. The default implementation updates the geometry
-  and repaints the widget.
-*/
-
-void QwtScaleWidget::scaleChange()
-{
-    layoutScale();
-}
-
-/*!
-  \return a size hint
-*/
-QSize QwtScaleWidget::sizeHint() const
-{
-    return minimumSizeHint();
-}
-
-/*!
-  \return a minimum size hint
-*/
-QSize QwtScaleWidget::minimumSizeHint() const
-{
-    const Qt::Orientation o = d_data->scaleDraw->orientation();
-
-    // Border Distance cannot be less than the scale borderDistHint
-    // Note, the borderDistHint is already included in minHeight/minWidth
-    int length = 0;
-    int mbd1, mbd2;
-    getBorderDistHint( mbd1, mbd2 );
-    length += qMax( 0, d_data->borderDist[0] - mbd1 );
-    length += qMax( 0, d_data->borderDist[1] - mbd2 );
-    length += d_data->scaleDraw->minLength( font() );
-
-    int dim = dimForLength( length, font() );
-    if ( length < dim )
-    {
-        // compensate for long titles
-        length = dim;
-        dim = dimForLength( length, font() );
-    }
-
-    QSize size( length + 2, dim );
-    if ( o == Qt::Vertical )
-        size.transpose();
-
-    int left, right, top, bottom;
-    getContentsMargins( &left, &top, &right, &bottom );
-    return size + QSize( left + right, top + bottom );
-}
-
-/*!
-  \brief Find the height of the title for a given width.
-  \param width Width
-  \return height Height
- */
-
-int QwtScaleWidget::titleHeightForWidth( int width ) const
-{
-    return qCeil( d_data->title.heightForWidth( width, font() ) );
-}
-
-/*!
-  \brief Find the minimum dimension for a given length.
-         dim is the height, length the width seen in
-         direction of the title.
-  \param length width for horizontal, height for vertical scales
-  \param scaleFont Font of the scale
-  \return height for horizontal, width for vertical scales
-*/
-
-int QwtScaleWidget::dimForLength( int length, const QFont &scaleFont ) const
-{
-    const int extent = qCeil( d_data->scaleDraw->extent( scaleFont ) );
-
-    int dim = d_data->margin + extent + 1;
-
-    if ( !d_data->title.isEmpty() )
-        dim += titleHeightForWidth( length ) + d_data->spacing;
-
-    if ( d_data->colorBar.isEnabled && d_data->colorBar.interval.isValid() )
-        dim += d_data->colorBar.width + d_data->spacing;
-
-    return dim;
-}
-
-/*!
-  \brief Calculate a hint for the border distances.
-
-  This member function calculates the distance
-  of the scale's endpoints from the widget borders which
-  is required for the mark labels to fit into the widget.
-  The maximum of this distance an the minimum border distance
-  is returned.
-
-  \param start Return parameter for the border width at 
-               the beginning of the scale
-  \param end Return parameter for the border width at the 
-             end of the scale
-
-  \warning
-  <ul> <li>The minimum border distance depends on the font.</ul>
-  \sa setMinBorderDist(), getMinBorderDist(), setBorderDist()
-*/
-void QwtScaleWidget::getBorderDistHint( int &start, int &end ) const
-{
-    d_data->scaleDraw->getBorderDistHint( font(), start, end );
-
-    if ( start < d_data->minBorderDist[0] )
-        start = d_data->minBorderDist[0];
-
-    if ( end < d_data->minBorderDist[1] )
-        end = d_data->minBorderDist[1];
-}
-
-/*!
-  Set a minimum value for the distances of the scale's endpoints from
-  the widget borders. This is useful to avoid that the scales
-  are "jumping", when the tick labels or their positions change
-  often.
-
-  \param start Minimum for the start border
-  \param end Minimum for the end border
-  \sa getMinBorderDist(), getBorderDistHint()
-*/
-void QwtScaleWidget::setMinBorderDist( int start, int end )
-{
-    d_data->minBorderDist[0] = start;
-    d_data->minBorderDist[1] = end;
-}
-
-/*!
-  Get the minimum value for the distances of the scale's endpoints from
-  the widget borders.
-
-  \param start Return parameter for the border width at 
-               the beginning of the scale
-  \param end Return parameter for the border width at the 
-             end of the scale
-
-  \sa setMinBorderDist(), getBorderDistHint()
-*/
-void QwtScaleWidget::getMinBorderDist( int &start, int &end ) const
-{
-    start = d_data->minBorderDist[0];
-    end = d_data->minBorderDist[1];
-}
-
-/*!
-  \brief Assign a scale division
-
-  The scale division determines where to set the tick marks.
-
-  \param scaleDiv Scale Division
-  \sa For more information about scale divisions, see QwtScaleDiv.
-*/
-void QwtScaleWidget::setScaleDiv( const QwtScaleDiv &scaleDiv )
-{
-    QwtScaleDraw *sd = d_data->scaleDraw;
-    if ( sd->scaleDiv() != scaleDiv )
-    {
-        sd->setScaleDiv( scaleDiv );
-        layoutScale();
-
-        Q_EMIT scaleDivChanged();
-    }
-}
-
-/*!
-  Set the transformation
-
-  \param transformation Transformation
-  \sa QwtAbstractScaleDraw::scaleDraw(), QwtScaleMap
- */
-void QwtScaleWidget::setTransformation( QwtTransform *transformation )
-{
-    d_data->scaleDraw->setTransformation( transformation );
-    layoutScale();
-}
-
-/*!
-  En/disable a color bar associated to the scale
-  \sa isColorBarEnabled(), setColorBarWidth()
-*/
-void QwtScaleWidget::setColorBarEnabled( bool on )
-{
-    if ( on != d_data->colorBar.isEnabled )
-    {
-        d_data->colorBar.isEnabled = on;
-        layoutScale();
-    }
-}
-
-/*!
-  \return true, when the color bar is enabled
-  \sa setColorBarEnabled(), setColorBarWidth()
-*/
-bool QwtScaleWidget::isColorBarEnabled() const
-{
-    return d_data->colorBar.isEnabled;
-}
-
-/*!
-  Set the width of the color bar
-
-  \param width Width
-  \sa colorBarWidth(), setColorBarEnabled()
-*/
-void QwtScaleWidget::setColorBarWidth( int width )
-{
-    if ( width != d_data->colorBar.width )
-    {
-        d_data->colorBar.width = width;
-        if ( isColorBarEnabled() )
-            layoutScale();
-    }
-}
-
-/*!
-  \return Width of the color bar
-  \sa setColorBarEnabled(), setColorBarEnabled()
-*/
-int QwtScaleWidget::colorBarWidth() const
-{
-    return d_data->colorBar.width;
-}
-
-/*!
-  \return Value interval for the color bar
-  \sa setColorMap(), colorMap()
-*/
-QwtInterval QwtScaleWidget::colorBarInterval() const
-{
-    return d_data->colorBar.interval;
-}
-
-/*!
-  Set the color map and value interval, that are used for displaying
-  the color bar.
-
-  \param interval Value interval
-  \param colorMap Color map
-
-  \sa colorMap(), colorBarInterval()
-*/
-void QwtScaleWidget::setColorMap(
-    const QwtInterval &interval, QwtColorMap *colorMap )
-{
-    d_data->colorBar.interval = interval;
-
-    if ( colorMap != d_data->colorBar.colorMap )
-    {
-        delete d_data->colorBar.colorMap;
-        d_data->colorBar.colorMap = colorMap;
-    }
-
-    if ( isColorBarEnabled() )
-        layoutScale();
-}
-
-/*!
-  \return Color map
-  \sa setColorMap(), colorBarInterval()
-*/
-const QwtColorMap *QwtScaleWidget::colorMap() const
-{
-    return d_data->colorBar.colorMap;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_widget.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_widget.h
deleted file mode 100644
index 3a2cfa3b759a24cb0b05603b8aebe597c1db9111..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_scale_widget.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SCALE_WIDGET_H
-#define QWT_SCALE_WIDGET_H
-
-#include "qwt_global.h"
-#include "qwt_text.h"
-#include "qwt_scale_draw.h"
-#include <qwidget.h>
-#include <qfont.h>
-#include <qcolor.h>
-#include <qstring.h>
-
-class QPainter;
-class QwtTransform;
-class QwtScaleDiv;
-class QwtColorMap;
-
-/*!
-  \brief A Widget which contains a scale
-
-  This Widget can be used to decorate composite widgets with
-  a scale.
-*/
-
-class QWT_EXPORT QwtScaleWidget : public QWidget
-{
-    Q_OBJECT
-
-public:
-    //! Layout flags of the title
-    enum LayoutFlag
-    {
-        /*!
-          The title of vertical scales is painted from top to bottom. 
-          Otherwise it is painted from bottom to top.
-         */
-        TitleInverted = 1
-    };
-
-    //! Layout flags of the title
-    typedef QFlags<LayoutFlag> LayoutFlags;
-
-    explicit QwtScaleWidget( QWidget *parent = NULL );
-    explicit QwtScaleWidget( QwtScaleDraw::Alignment, QWidget *parent = NULL );
-    virtual ~QwtScaleWidget();
-
-Q_SIGNALS:
-    //! Signal emitted, whenever the scale division changes
-    void scaleDivChanged();
-
-public:
-    void setTitle( const QString &title );
-    void setTitle( const QwtText &title );
-    QwtText title() const;
-
-    void setLayoutFlag( LayoutFlag, bool on );
-    bool testLayoutFlag( LayoutFlag ) const;
-
-    void setBorderDist( int start, int end );
-    int startBorderDist() const;
-    int endBorderDist() const;
-
-    void getBorderDistHint( int &start, int &end ) const;
-
-    void getMinBorderDist( int &start, int &end ) const;
-    void setMinBorderDist( int start, int end );
-
-    void setMargin( int );
-    int margin() const;
-
-    void setSpacing( int td );
-    int spacing() const;
-
-    void setScaleDiv( const QwtScaleDiv &sd );
-    void setTransformation( QwtTransform * );
-
-    void setScaleDraw( QwtScaleDraw * );
-    const QwtScaleDraw *scaleDraw() const;
-    QwtScaleDraw *scaleDraw();
-
-    void setLabelAlignment( Qt::Alignment );
-    void setLabelRotation( double rotation );
-
-    void setColorBarEnabled( bool );
-    bool isColorBarEnabled() const;
-
-    void setColorBarWidth( int );
-    int colorBarWidth() const;
-
-    void setColorMap( const QwtInterval &, QwtColorMap * );
-
-    QwtInterval colorBarInterval() const;
-    const QwtColorMap *colorMap() const;
-
-    virtual QSize sizeHint() const;
-    virtual QSize minimumSizeHint() const;
-
-    int titleHeightForWidth( int width ) const;
-    int dimForLength( int length, const QFont &scaleFont ) const;
-
-    void drawColorBar( QPainter *painter, const QRectF & ) const;
-    void drawTitle( QPainter *painter, QwtScaleDraw::Alignment,
-        const QRectF &rect ) const;
-
-    void setAlignment( QwtScaleDraw::Alignment );
-    QwtScaleDraw::Alignment alignment() const;
-
-    QRectF colorBarRect( const QRectF& ) const;
-
-protected:
-    virtual void paintEvent( QPaintEvent * );
-    virtual void resizeEvent( QResizeEvent * );
-
-    void draw( QPainter *p ) const;
-
-    void scaleChange();
-    void layoutScale( bool update = true );
-
-private:
-    void initScale( QwtScaleDraw::Alignment );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtScaleWidget::LayoutFlags )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_series_data.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_series_data.cpp
deleted file mode 100644
index 483c210ee4c6f29b2d72ef9ec0b0cd8e6bf04875..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_series_data.cpp
+++ /dev/null
@@ -1,346 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_series_data.h"
-#include "qwt_math.h"
-
-static inline QRectF qwtBoundingRect( const QPointF &sample )
-{
-    return QRectF( sample.x(), sample.y(), 0.0, 0.0 );
-}
-
-static inline QRectF qwtBoundingRect( const QwtPoint3D &sample )
-{
-    return QRectF( sample.x(), sample.y(), 0.0, 0.0 );
-}
-
-static inline QRectF qwtBoundingRect( const QwtPointPolar &sample )
-{
-    return QRectF( sample.azimuth(), sample.radius(), 0.0, 0.0 );
-}
-
-static inline QRectF qwtBoundingRect( const QwtIntervalSample &sample )
-{
-    return QRectF( sample.interval.minValue(), sample.value,
-        sample.interval.maxValue() - sample.interval.minValue(), 0.0 );
-}
-
-static inline QRectF qwtBoundingRect( const QwtSetSample &sample )
-{
-    double minY = sample.set[0];
-    double maxY = sample.set[0];
-
-    for ( int i = 1; i < sample.set.size(); i++ )
-    {
-        if ( sample.set[i] < minY )
-            minY = sample.set[i];
-        if ( sample.set[i] > maxY )
-            maxY = sample.set[i];
-    }
-
-    double minX = sample.value;
-    double maxX = sample.value;
-
-    return QRectF( minX, minY, maxX - minX, maxY - minY );
-}
-
-static inline QRectF qwtBoundingRect( const QwtOHLCSample &sample )
-{
-    const QwtInterval interval = sample.boundingInterval();
-    return QRectF( interval.minValue(), sample.time, interval.width(), 0.0 );
-}
-
-/*!
-  \brief Calculate the bounding rectangle of a series subset
-
-  Slow implementation, that iterates over the series.
-
-  \param series Series
-  \param from Index of the first sample, <= 0 means from the beginning
-  \param to Index of the last sample, < 0 means to the end
-
-  \return Bounding rectangle
-*/
-
-template <class T>
-QRectF qwtBoundingRectT(
-    const QwtSeriesData<T>& series, int from, int to )
-{
-    QRectF boundingRect( 1.0, 1.0, -2.0, -2.0 ); // invalid;
-
-    if ( from < 0 )
-        from = 0;
-
-    if ( to < 0 )
-        to = series.size() - 1;
-
-    if ( to < from )
-        return boundingRect;
-
-    int i;
-    for ( i = from; i <= to; i++ )
-    {
-        const QRectF rect = qwtBoundingRect( series.sample( i ) );
-        if ( rect.width() >= 0.0 && rect.height() >= 0.0 )
-        {
-            boundingRect = rect;
-            i++;
-            break;
-        }
-    }
-
-    for ( ; i <= to; i++ )
-    {
-        const QRectF rect = qwtBoundingRect( series.sample( i ) );
-        if ( rect.width() >= 0.0 && rect.height() >= 0.0 )
-        {
-            boundingRect.setLeft( qMin( boundingRect.left(), rect.left() ) );
-            boundingRect.setRight( qMax( boundingRect.right(), rect.right() ) );
-            boundingRect.setTop( qMin( boundingRect.top(), rect.top() ) );
-            boundingRect.setBottom( qMax( boundingRect.bottom(), rect.bottom() ) );
-        }
-    }
-
-    return boundingRect;
-}
-
-/*!
-  \brief Calculate the bounding rectangle of a series subset
-
-  Slow implementation, that iterates over the series.
-
-  \param series Series
-  \param from Index of the first sample, <= 0 means from the beginning
-  \param to Index of the last sample, < 0 means to the end
-
-  \return Bounding rectangle
-*/
-QRectF qwtBoundingRect(
-    const QwtSeriesData<QPointF> &series, int from, int to )
-{
-    return qwtBoundingRectT<QPointF>( series, from, to );
-}
-
-/*!
-  \brief Calculate the bounding rectangle of a series subset
-
-  Slow implementation, that iterates over the series.
-
-  \param series Series
-  \param from Index of the first sample, <= 0 means from the beginning
-  \param to Index of the last sample, < 0 means to the end
-
-  \return Bounding rectangle
-*/
-QRectF qwtBoundingRect(
-    const QwtSeriesData<QwtPoint3D> &series, int from, int to )
-{
-    return qwtBoundingRectT<QwtPoint3D>( series, from, to );
-}
-
-/*!
-  \brief Calculate the bounding rectangle of a series subset
-
-  The horizontal coordinates represent the azimuth, the
-  vertical coordinates the radius.
-
-  Slow implementation, that iterates over the series.
-
-  \param series Series
-  \param from Index of the first sample, <= 0 means from the beginning
-  \param to Index of the last sample, < 0 means to the end
-
-  \return Bounding rectangle
-*/
-QRectF qwtBoundingRect(
-    const QwtSeriesData<QwtPointPolar> &series, int from, int to )
-{
-    return qwtBoundingRectT<QwtPointPolar>( series, from, to );
-}
-
-/*!
-  \brief Calculate the bounding rectangle of a series subset
-
-  Slow implementation, that iterates over the series.
-
-  \param series Series
-  \param from Index of the first sample, <= 0 means from the beginning
-  \param to Index of the last sample, < 0 means to the end
-
-  \return Bounding rectangle
-*/
-QRectF qwtBoundingRect(
-    const QwtSeriesData<QwtIntervalSample>& series, int from, int to )
-{
-    return qwtBoundingRectT<QwtIntervalSample>( series, from, to );
-}
-
-/*!
-  \brief Calculate the bounding rectangle of a series subset
-
-  Slow implementation, that iterates over the series.
-
-  \param series Series
-  \param from Index of the first sample, <= 0 means from the beginning
-  \param to Index of the last sample, < 0 means to the end
-
-  \return Bounding rectangle
-*/
-QRectF qwtBoundingRect(
-    const QwtSeriesData<QwtOHLCSample>& series, int from, int to )
-{
-    return qwtBoundingRectT<QwtOHLCSample>( series, from, to );
-}
-
-/*!
-  \brief Calculate the bounding rectangle of a series subset
-
-  Slow implementation, that iterates over the series.
-
-  \param series Series
-  \param from Index of the first sample, <= 0 means from the beginning
-  \param to Index of the last sample, < 0 means to the end
-
-  \return Bounding rectangle
-*/
-QRectF qwtBoundingRect(
-    const QwtSeriesData<QwtSetSample>& series, int from, int to )
-{
-    return qwtBoundingRectT<QwtSetSample>( series, from, to );
-}
-
-/*!
-   Constructor
-   \param samples Samples
-*/
-QwtPointSeriesData::QwtPointSeriesData(
-        const QVector<QPointF> &samples ):
-    QwtArraySeriesData<QPointF>( samples )
-{
-}
-
-/*!
-  \brief Calculate the bounding rectangle
-
-  The bounding rectangle is calculated once by iterating over all
-  points and is stored for all following requests.
-
-  \return Bounding rectangle
-*/
-QRectF QwtPointSeriesData::boundingRect() const
-{
-    if ( d_boundingRect.width() < 0.0 )
-        d_boundingRect = qwtBoundingRect( *this );
-
-    return d_boundingRect;
-}
-
-/*!
-   Constructor
-   \param samples Samples
-*/
-QwtPoint3DSeriesData::QwtPoint3DSeriesData(
-        const QVector<QwtPoint3D> &samples ):
-    QwtArraySeriesData<QwtPoint3D>( samples )
-{
-}
-
-/*!
-  \brief Calculate the bounding rectangle
-
-  The bounding rectangle is calculated once by iterating over all
-  points and is stored for all following requests.
-
-  \return Bounding rectangle
-*/
-QRectF QwtPoint3DSeriesData::boundingRect() const
-{
-    if ( d_boundingRect.width() < 0.0 )
-        d_boundingRect = qwtBoundingRect( *this );
-
-    return d_boundingRect;
-}
-
-/*!
-   Constructor
-   \param samples Samples
-*/
-QwtIntervalSeriesData::QwtIntervalSeriesData(
-        const QVector<QwtIntervalSample> &samples ):
-    QwtArraySeriesData<QwtIntervalSample>( samples )
-{
-}
-
-/*!
-  \brief Calculate the bounding rectangle
-
-  The bounding rectangle is calculated once by iterating over all
-  points and is stored for all following requests.
-
-  \return Bounding rectangle
-*/
-QRectF QwtIntervalSeriesData::boundingRect() const
-{
-    if ( d_boundingRect.width() < 0.0 )
-        d_boundingRect = qwtBoundingRect( *this );
-
-    return d_boundingRect;
-}
-
-/*!
-   Constructor
-   \param samples Samples
-*/
-QwtSetSeriesData::QwtSetSeriesData(
-        const QVector<QwtSetSample> &samples ):
-    QwtArraySeriesData<QwtSetSample>( samples )
-{
-}
-
-/*!
-  \brief Calculate the bounding rectangle
-
-  The bounding rectangle is calculated once by iterating over all
-  points and is stored for all following requests.
-
-  \return Bounding rectangle
-*/
-QRectF QwtSetSeriesData::boundingRect() const
-{
-    if ( d_boundingRect.width() < 0.0 )
-        d_boundingRect = qwtBoundingRect( *this );
-
-    return d_boundingRect;
-}
-
-/*!
-   Constructor
-   \param samples Samples
-*/
-QwtTradingChartData::QwtTradingChartData(
-        const QVector<QwtOHLCSample> &samples ):
-    QwtArraySeriesData<QwtOHLCSample>( samples )
-{
-}
-
-/*!
-  \brief Calculate the bounding rectangle
-
-  The bounding rectangle is calculated once by iterating over all
-  points and is stored for all following requests.
-
-  \return Bounding rectangle
-*/
-QRectF QwtTradingChartData::boundingRect() const
-{
-    if ( d_boundingRect.width() < 0.0 )
-        d_boundingRect = qwtBoundingRect( *this );
-
-    return d_boundingRect;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_series_data.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_series_data.h
deleted file mode 100644
index a4d3714f87e1f42a56df9dfa743c1de8b7b15a53..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_series_data.h
+++ /dev/null
@@ -1,355 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SERIES_DATA_H
-#define QWT_SERIES_DATA_H 1
-
-#include "qwt_global.h"
-#include "qwt_samples.h"
-#include "qwt_point_3d.h"
-#include "qwt_point_polar.h"
-#include <qvector.h>
-#include <qrect.h>
-
-/*!
-   \brief Abstract interface for iterating over samples
-
-   Qwt offers several implementations of the QwtSeriesData API,
-   but in situations, where data of an application specific format
-   needs to be displayed, without having to copy it, it is recommended
-   to implement an individual data access.
-
-   A subclass of QwtSeriesData<QPointF> must implement: 
-
-   - size()\n 
-     Should return number of data points.
-
-   - sample()\n
-     Should return values x and y values of the sample at specific position
-     as QPointF object.
-
-   - boundingRect()\n 
-     Should return the bounding rectangle of the data series.
-     It is used for autoscaling and might help certain algorithms for displaying
-     the data. You can use qwtBoundingRect() for an implementation
-     but often it is possible to implement a more efficient algorithm 
-     depending on the characteristics of the series.
-     The member d_boundingRect is intended for caching the calculated rectangle.
-    
-*/
-template <typename T>
-class QwtSeriesData
-{
-public:
-    //! Constructor
-    QwtSeriesData();
-
-    //! Destructor
-    virtual ~QwtSeriesData();
-
-    //! \return Number of samples
-    virtual size_t size() const = 0;
-
-    /*!
-      Return a sample
-      \param i Index
-      \return Sample at position i
-     */
-    virtual T sample( size_t i ) const = 0;
-
-    /*!
-       Calculate the bounding rect of all samples
-
-       The bounding rect is necessary for autoscaling and can be used
-       for a couple of painting optimizations.
-
-       qwtBoundingRect(...) offers slow implementations iterating
-       over the samples. For large sets it is recommended to implement
-       something faster f.e. by caching the bounding rectangle.
-
-       \return Bounding rectangle
-     */
-    virtual QRectF boundingRect() const = 0;
-
-    /*!
-       Set a the "rect of interest"
-
-       QwtPlotSeriesItem defines the current area of the plot canvas
-       as "rectangle of interest" ( QwtPlotSeriesItem::updateScaleDiv() ).
-       It can be used to implement different levels of details.
-
-       The default implementation does nothing.
-   
-       \param rect Rectangle of interest
-    */
-    virtual void setRectOfInterest( const QRectF &rect );
-
-protected:
-    //! Can be used to cache a calculated bounding rectangle
-    mutable QRectF d_boundingRect;
-
-private:
-    QwtSeriesData<T> &operator=( const QwtSeriesData<T> & );
-};
-
-template <typename T>
-QwtSeriesData<T>::QwtSeriesData():
-    d_boundingRect( 0.0, 0.0, -1.0, -1.0 )
-{
-}
-
-template <typename T>
-QwtSeriesData<T>::~QwtSeriesData()
-{
-}
-
-template <typename T>
-void QwtSeriesData<T>::setRectOfInterest( const QRectF & )
-{
-}
-
-/*!
-  \brief Template class for data, that is organized as QVector
-
-  QVector uses implicit data sharing and can be
-  passed around as argument efficiently.
-*/
-template <typename T>
-class QwtArraySeriesData: public QwtSeriesData<T>
-{
-public:
-    //! Constructor
-    QwtArraySeriesData();
-
-    /*!
-       Constructor
-       \param samples Array of samples
-    */
-    QwtArraySeriesData( const QVector<T> &samples );
-
-    /*!
-      Assign an array of samples
-      \param samples Array of samples
-    */
-    void setSamples( const QVector<T> &samples );
-
-    //! \return Array of samples
-    const QVector<T> samples() const;
-
-    //! \return Number of samples
-    virtual size_t size() const;
-
-    /*!
-      \return Sample at a specific position
-
-      \param index Index
-      \return Sample at position index
-    */
-    virtual T sample( size_t index ) const;
-
-protected:
-    //! Vector of samples
-    QVector<T> d_samples;
-};
-
-template <typename T>
-QwtArraySeriesData<T>::QwtArraySeriesData()
-{
-}
-
-template <typename T>
-QwtArraySeriesData<T>::QwtArraySeriesData( const QVector<T> &samples ):
-    d_samples( samples )
-{
-}
-
-template <typename T>
-void QwtArraySeriesData<T>::setSamples( const QVector<T> &samples )
-{
-    QwtSeriesData<T>::d_boundingRect = QRectF( 0.0, 0.0, -1.0, -1.0 );
-    d_samples = samples;
-}
-
-template <typename T>
-const QVector<T> QwtArraySeriesData<T>::samples() const
-{
-    return d_samples;
-}
-
-template <typename T>
-size_t QwtArraySeriesData<T>::size() const
-{
-    return d_samples.size();
-}
-
-template <typename T>
-T QwtArraySeriesData<T>::sample( size_t i ) const
-{
-    return d_samples[ static_cast<int>( i ) ];
-}
-
-//! Interface for iterating over an array of points
-class QWT_EXPORT QwtPointSeriesData: public QwtArraySeriesData<QPointF>
-{
-public:
-    QwtPointSeriesData(
-        const QVector<QPointF> & = QVector<QPointF>() );
-
-    virtual QRectF boundingRect() const;
-};
-
-//! Interface for iterating over an array of 3D points
-class QWT_EXPORT QwtPoint3DSeriesData: public QwtArraySeriesData<QwtPoint3D>
-{
-public:
-    QwtPoint3DSeriesData(
-        const QVector<QwtPoint3D> & = QVector<QwtPoint3D>() );
-    virtual QRectF boundingRect() const;
-};
-
-//! Interface for iterating over an array of intervals
-class QWT_EXPORT QwtIntervalSeriesData: public QwtArraySeriesData<QwtIntervalSample>
-{
-public:
-    QwtIntervalSeriesData(
-        const QVector<QwtIntervalSample> & = QVector<QwtIntervalSample>() );
-
-    virtual QRectF boundingRect() const;
-};
-
-//! Interface for iterating over an array of samples
-class QWT_EXPORT QwtSetSeriesData: public QwtArraySeriesData<QwtSetSample>
-{
-public:
-    QwtSetSeriesData(
-        const QVector<QwtSetSample> & = QVector<QwtSetSample>() );
-
-    virtual QRectF boundingRect() const;
-};
-
-/*!
-    Interface for iterating over an array of OHLC samples
-*/
-class QWT_EXPORT QwtTradingChartData: public QwtArraySeriesData<QwtOHLCSample>
-{
-public:
-    QwtTradingChartData(
-        const QVector<QwtOHLCSample> & = QVector<QwtOHLCSample>() );
-
-    virtual QRectF boundingRect() const;
-};
-
-QWT_EXPORT QRectF qwtBoundingRect(
-    const QwtSeriesData<QPointF> &, int from = 0, int to = -1 );
-
-QWT_EXPORT QRectF qwtBoundingRect(
-    const QwtSeriesData<QwtPoint3D> &, int from = 0, int to = -1 );
-
-QWT_EXPORT QRectF qwtBoundingRect(
-    const QwtSeriesData<QwtPointPolar> &, int from = 0, int to = -1 );
-
-QWT_EXPORT QRectF qwtBoundingRect(
-    const QwtSeriesData<QwtIntervalSample> &, int from = 0, int to = -1 );
-
-QWT_EXPORT QRectF qwtBoundingRect(
-    const QwtSeriesData<QwtSetSample> &, int from = 0, int to = -1 );
-
-QWT_EXPORT QRectF qwtBoundingRect(
-    const QwtSeriesData<QwtOHLCSample> &, int from = 0, int to = -1 );
-
-/*!
-    Binary search for a sorted series of samples
-
-    qwtUpperSampleIndex returns the index of sample that is the upper bound
-    of value. Is the the value smaller than the smallest value the return
-    value will be 0. Is the value greater or equal than the largest
-    value the return value will be -1.
-
-  \par Example
-    The following example shows finds a point of curve from an x
-    coordinate
-
-  \verbatim
-#include <qwt_series_data.h>
-#include <qwt_plot_curve.h>
-
-struct compareX
-{
-    inline bool operator()( const double x, const QPointF &pos ) const
-    {
-        return ( x < pos.x() );
-    }
-};
-
-QLineF curveLineAt( const QwtPlotCurve *curve, double x )
-{
-    int index = qwtUpperSampleIndex<QPointF>( 
-        *curve->data(), x, compareX() );
-            
-    if ( index == -1 && 
-        x == curve->sample( curve->dataSize() - 1 ).x() )
-    {   
-        // the last sample is excluded from qwtUpperSampleIndex
-        index = curve->dataSize() - 1;
-    }
-
-    QLineF line; // invalid
-    if ( index > 0 )
-    {
-        line.setP1( curve->sample( index - 1 ) );
-        line.setP2( curve->sample( index ) );
-    }
-
-    return line;
-}
-
-\endverbatim
-
-
-    \param series Series of samples
-    \param value Value
-    \param lessThan Compare operation
-
-    \note The samples must be sorted according to the order specified 
-          by the lessThan object
-
-of the range [begin, end) and returns the position of the one-past-the-last occurrence of value. If no such item is found, returns the position where the item should be inserted.
- */
-template <typename T, typename LessThan>
-inline int qwtUpperSampleIndex( const QwtSeriesData<T> &series,
-    double value, LessThan lessThan  ) 
-{
-    const int indexMax = series.size() - 1;
-
-    if ( indexMax < 0 || !lessThan( value, series.sample( indexMax ) )  )
-        return -1;
-
-    int indexMin = 0;
-    int n = indexMax;
-
-    while ( n > 0 )
-    {
-        const int half = n >> 1;
-        const int indexMid = indexMin + half;
-
-        if ( lessThan( value, series.sample( indexMid ) ) )
-        {
-            n = half;
-        }
-        else
-        {
-            indexMin = indexMid + 1;
-            n -= half + 1;
-        }
-    }
-
-    return indexMin;
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_series_store.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_series_store.h
deleted file mode 100644
index 4f467f250b937984191e6129ea990d328fe77377..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_series_store.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SERIES_STORE_H
-#define QWT_SERIES_STORE_H
-
-#include "qwt_global.h"
-#include "qwt_series_data.h"
-
-/*!
-  \brief Bridge between QwtSeriesStore and QwtPlotSeriesItem
-
-  QwtAbstractSeriesStore is an abstract interface only
-  to make it possible to isolate the template based methods ( QwtSeriesStore )
-  from the regular methods ( QwtPlotSeriesItem ) to make it possible
-  to derive from QwtPlotSeriesItem without any hassle with templates.
-*/
-class QwtAbstractSeriesStore
-{
-protected:
-    //! Destructor
-    virtual ~QwtAbstractSeriesStore() {}
-
-    //! dataChanged() indicates, that the series has been changed.
-    virtual void dataChanged() = 0;
-
-    /*!
-      Set a the "rectangle of interest" for the stored series
-      \sa QwtSeriesData<T>::setRectOfInterest()
-     */
-    virtual void setRectOfInterest( const QRectF & ) = 0;
-
-    //! \return Bounding rectangle of the stored series
-    virtual QRectF dataRect() const = 0;
-
-    //! \return Number of samples
-    virtual size_t dataSize() const = 0;
-};
-
-/*!
-  \brief Class storing a QwtSeriesData object
-
-  QwtSeriesStore and QwtPlotSeriesItem are intended as base classes for all
-  plot items iterating over a series of samples. Both classes share
-  a virtual base class ( QwtAbstractSeriesStore ) to bridge between them.
-
-  QwtSeriesStore offers the template based part for the plot item API, so
-  that QwtPlotSeriesItem can be derived without any hassle with templates.
- */
-template <typename T>
-class QwtSeriesStore: public virtual QwtAbstractSeriesStore
-{
-public:
-    /*!
-      \brief Constructor
-      The store contains no series
-    */
-    explicit QwtSeriesStore<T>();
-
-    //! Destructor
-    ~QwtSeriesStore<T>();
-
-    /*!
-      Assign a series of samples
-
-      \param series Data
-      \warning The item takes ownership of the data object, deleting
-               it when its not used anymore.
-    */
-    void setData( QwtSeriesData<T> *series );
-
-    //! \return the the series data
-    QwtSeriesData<T> *data();
-
-    //! \return the the series data
-    const QwtSeriesData<T> *data() const;
-
-    /*!
-        \param index Index
-        \return Sample at position index
-    */
-    T sample( int index ) const;
-
-    /*!
-      \return Number of samples of the series
-      \sa setData(), QwtSeriesData<T>::size()
-    */
-    virtual size_t dataSize() const;
-
-    /*!
-      \return Bounding rectangle of the series
-              or an invalid rectangle, when no series is stored
-
-      \sa QwtSeriesData<T>::boundingRect()
-    */
-    virtual QRectF dataRect() const;
-
-    /*!
-      Set a the "rect of interest" for the series
-
-      \param rect Rectangle of interest
-      \sa QwtSeriesData<T>::setRectOfInterest()
-    */
-    virtual void setRectOfInterest( const QRectF &rect );
-
-    /*!
-      Replace a series without deleting the previous one
-
-      \param series New series
-      \return Previously assigned series
-     */
-    QwtSeriesData<T> *swapData( QwtSeriesData<T> *series );
-
-private:
-    QwtSeriesData<T> *d_series;
-};
-
-template <typename T>
-QwtSeriesStore<T>::QwtSeriesStore():
-    d_series( NULL )
-{
-}
-
-template <typename T>
-QwtSeriesStore<T>::~QwtSeriesStore()
-{
-    delete d_series;
-}
-
-template <typename T>
-inline QwtSeriesData<T> *QwtSeriesStore<T>::data()
-{
-    return d_series;
-}
-
-template <typename T>
-inline const QwtSeriesData<T> *QwtSeriesStore<T>::data() const
-{
-    return d_series;
-}
-
-template <typename T>
-inline T QwtSeriesStore<T>::sample( int index ) const
-{
-    return d_series ? d_series->sample( index ) : T();
-}
-
-template <typename T>
-void QwtSeriesStore<T>::setData( QwtSeriesData<T> *series )
-{
-    if ( d_series != series )
-    {
-        delete d_series;
-        d_series = series;
-        dataChanged();
-    }
-}
-
-template <typename T>
-size_t QwtSeriesStore<T>::dataSize() const
-{
-    if ( d_series == NULL )
-        return 0;
-
-    return d_series->size();
-}
-
-template <typename T>
-QRectF QwtSeriesStore<T>::dataRect() const
-{
-    if ( d_series == NULL )
-        return QRectF( 1.0, 1.0, -2.0, -2.0 ); // invalid
-
-    return d_series->boundingRect();
-}
-
-template <typename T>
-void QwtSeriesStore<T>::setRectOfInterest( const QRectF &rect )
-{
-    if ( d_series )
-        d_series->setRectOfInterest( rect );
-}
-
-template <typename T>
-QwtSeriesData<T>* QwtSeriesStore<T>::swapData( QwtSeriesData<T> *series )
-{
-    QwtSeriesData<T> * swappedSeries = d_series;
-    d_series = series;
-
-    return swappedSeries;
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_slider.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_slider.cpp
deleted file mode 100644
index de5cf1792853dc16d9ede10ac695f8194cd101c1..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_slider.cpp
+++ /dev/null
@@ -1,1004 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_slider.h"
-#include "qwt_painter.h"
-#include "qwt_scale_draw.h"
-#include "qwt_scale_map.h"
-#include <qevent.h>
-#include <qdrawutil.h>
-#include <qpainter.h>
-#include <qalgorithms.h>
-#include <qmath.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-#include <qapplication.h>
-
-static QSize qwtHandleSize( const QSize &size, 
-    Qt::Orientation orientation, bool hasTrough )
-{
-    QSize handleSize = size;
-
-    if ( handleSize.isEmpty() )
-    {
-        const int handleThickness = 16;
-        handleSize.setWidth( 2 * handleThickness );
-        handleSize.setHeight( handleThickness );
-
-        if ( !hasTrough )
-            handleSize.transpose();
-
-        if ( orientation == Qt::Vertical )
-            handleSize.transpose();
-    }
-
-    return handleSize;
-}
-
-static QwtScaleDraw::Alignment qwtScaleDrawAlignment( 
-    Qt::Orientation orientation, QwtSlider::ScalePosition scalePos )
-{
-    QwtScaleDraw::Alignment align;
-
-    if ( orientation == Qt::Vertical )
-    {
-        // NoScale lays out like Left
-        if ( scalePos == QwtSlider::LeadingScale )
-            align = QwtScaleDraw::RightScale;
-        else
-            align = QwtScaleDraw::LeftScale;
-    }
-    else
-    {
-        // NoScale lays out like Bottom
-        if ( scalePos == QwtSlider::TrailingScale )
-            align = QwtScaleDraw::TopScale;
-        else
-            align = QwtScaleDraw::BottomScale;
-    }
-
-    return align;
-}
-
-class QwtSlider::PrivateData
-{
-public:
-    PrivateData():
-        repeatTimerId( 0 ),
-        updateInterval( 150 ),
-        stepsIncrement( 0 ),
-        pendingValueChange( false ),
-        borderWidth( 2 ),
-        spacing( 4 ),
-        scalePosition( QwtSlider::TrailingScale ),
-        hasTrough( true ),
-        hasGroove( false ),
-        mouseOffset( 0 )
-    {
-    }
-
-    int repeatTimerId;
-    bool timerTick;
-    int updateInterval;
-    int stepsIncrement;
-    bool pendingValueChange;
-
-    QRect sliderRect;
-
-    QSize handleSize;
-    int borderWidth;
-    int spacing;
-
-    Qt::Orientation orientation;
-    QwtSlider::ScalePosition scalePosition;
-
-    bool hasTrough;
-    bool hasGroove;
-
-    int mouseOffset;
-
-    mutable QSize sizeHintCache;
-};
-/*!
-  Construct vertical slider in QwtSlider::Trough style
-  with a scale to the left. 
-
-  The scale is initialized to [0.0, 100.0] and the value set to 0.0.
-
-  \param parent Parent widget
-
-  \sa setOrientation(), setScalePosition(), setBackgroundStyle()
-*/
-QwtSlider::QwtSlider( QWidget *parent ):
-    QwtAbstractSlider( parent )
-{
-    initSlider( Qt::Vertical );
-}
-
-/*!
-  Construct a slider in QwtSlider::Trough style
-
-  When orientation is Qt::Vertical the scale will be aligned to
-  the left - otherwise at the the top of the slider.
-
-  The scale is initialized to [0.0, 100.0] and the value set to 0.0.
-
-  \param parent Parent widget
-  \param orientation Orientation of the slider. 
-*/
-QwtSlider::QwtSlider( Qt::Orientation orientation, QWidget *parent ):
-    QwtAbstractSlider( parent )
-{
-    initSlider( orientation );
-}
-
-//! Destructor
-QwtSlider::~QwtSlider()
-{
-    delete d_data;
-}
-
-void QwtSlider::initSlider( Qt::Orientation orientation )
-{
-    if ( orientation == Qt::Vertical )
-        setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Expanding );
-    else
-        setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed );
-
-    setAttribute( Qt::WA_WState_OwnSizePolicy, false );
-
-    d_data = new QwtSlider::PrivateData;
-
-    d_data->orientation = orientation;
-
-    scaleDraw()->setAlignment( 
-        qwtScaleDrawAlignment( orientation, d_data->scalePosition ) );
-    scaleDraw()->setLength( 100 );
-
-    setScale( 0.0, 100.0 );
-    setValue( 0.0 );
-}
-
-/*!
-  \brief Set the orientation.
-  \param orientation Allowed values are Qt::Horizontal and Qt::Vertical.
-
-  \sa orientation(), scalePosition()
-*/
-void QwtSlider::setOrientation( Qt::Orientation orientation )
-{
-    if ( orientation == d_data->orientation )
-        return;
-
-    d_data->orientation = orientation;
-
-    scaleDraw()->setAlignment( 
-        qwtScaleDrawAlignment( orientation, d_data->scalePosition ) );
-
-    if ( !testAttribute( Qt::WA_WState_OwnSizePolicy ) )
-    {
-        QSizePolicy sp = sizePolicy();
-        sp.transpose();
-        setSizePolicy( sp );
-
-        setAttribute( Qt::WA_WState_OwnSizePolicy, false );
-    }
-
-    if ( testAttribute( Qt::WA_WState_Polished ) )
-        layoutSlider( true );
-}
-
-/*!
-  \return Orientation
-  \sa setOrientation()
-*/
-Qt::Orientation QwtSlider::orientation() const
-{
-    return d_data->orientation;
-}
-
-/*!
-  \brief Change the position of the scale
-  \param scalePosition Position of the scale.
-
-  \sa ScalePosition, scalePosition()
-*/
-void QwtSlider::setScalePosition( ScalePosition scalePosition )
-{
-    if ( d_data->scalePosition == scalePosition )
-        return;
-
-    d_data->scalePosition = scalePosition;
-    scaleDraw()->setAlignment( 
-        qwtScaleDrawAlignment( d_data->orientation, scalePosition ) );
-
-    if ( testAttribute( Qt::WA_WState_Polished ) )
-        layoutSlider( true );
-}
-
-/*! 
-  \return Position of the scale
-  \sa setScalePosition()
- */
-QwtSlider::ScalePosition QwtSlider::scalePosition() const
-{
-    return d_data->scalePosition;
-}
-
-/*!
-  \brief Change the slider's border width
-
-  The border width is used for drawing the slider handle and the
-  trough.
-
-  \param width Border width
-  \sa borderWidth()
-*/
-void QwtSlider::setBorderWidth( int width )
-{
-    if ( width < 0 )
-        width = 0;
-
-    if ( width != d_data->borderWidth )
-    {
-        d_data->borderWidth = width;
-
-        if ( testAttribute( Qt::WA_WState_Polished ) )
-            layoutSlider( true );
-    }
-}
-
-/*!
-  \return the border width.
-  \sa setBorderWidth()
-*/
-int QwtSlider::borderWidth() const
-{
-    return d_data->borderWidth;
-}
-
-/*!
-  \brief Change the spacing between trough and scale
-
-  A spacing of 0 means, that the backbone of the scale is covered
-  by the trough.
-
-  The default setting is 4 pixels.
-
-  \param spacing Number of pixels
-  \sa spacing();
-*/
-void QwtSlider::setSpacing( int spacing )
-{
-    if ( spacing <= 0 )
-        spacing = 0;
-
-    if ( spacing != d_data->spacing  )
-    {
-        d_data->spacing = spacing;
-
-        if ( testAttribute( Qt::WA_WState_Polished ) )
-            layoutSlider( true );
-    }
-}
-
-/*!
-  \return Number of pixels between slider and scale
-  \sa setSpacing()
-*/
-int QwtSlider::spacing() const
-{
-    return d_data->spacing;
-}
-
-/*!
-  \brief Set the slider's handle size
-
-  When the size is empty the slider handle will be painted with a
-  default size depending on its orientation() and backgroundStyle().
-
-  \param size New size
-
-  \sa handleSize()
-*/
-void QwtSlider::setHandleSize( const QSize &size )
-{
-    if ( size != d_data->handleSize )
-    {
-        d_data->handleSize = size;
-
-        if ( testAttribute( Qt::WA_WState_Polished ) )
-            layoutSlider( true );
-    }
-}
-
-/*!
-  \return Size of the handle.
-  \sa setHandleSize()
-*/
-QSize QwtSlider::handleSize() const
-{
-    return d_data->handleSize;
-}
-
-/*!
-  \brief Set a scale draw
-
-  For changing the labels of the scales, it
-  is necessary to derive from QwtScaleDraw and
-  overload QwtScaleDraw::label().
-
-  \param scaleDraw ScaleDraw object, that has to be created with
-                   new and will be deleted in ~QwtSlider() or the next
-                   call of setScaleDraw().
-
-  \sa scaleDraw()
-*/
-void QwtSlider::setScaleDraw( QwtScaleDraw *scaleDraw )
-{
-    const QwtScaleDraw *previousScaleDraw = this->scaleDraw();
-    if ( scaleDraw == NULL || scaleDraw == previousScaleDraw )
-        return;
-
-    if ( previousScaleDraw )
-        scaleDraw->setAlignment( previousScaleDraw->alignment() );
-
-    setAbstractScaleDraw( scaleDraw );
-
-    if ( testAttribute( Qt::WA_WState_Polished ) )
-        layoutSlider( true );
-}
-
-/*!
-  \return the scale draw of the slider
-  \sa setScaleDraw()
-*/
-const QwtScaleDraw *QwtSlider::scaleDraw() const
-{
-    return static_cast<const QwtScaleDraw *>( abstractScaleDraw() );
-}
-
-/*!
-  \return the scale draw of the slider
-  \sa setScaleDraw()
-*/
-QwtScaleDraw *QwtSlider::scaleDraw()
-{
-    return static_cast<QwtScaleDraw *>( abstractScaleDraw() );
-}
-
-//! Notify changed scale
-void QwtSlider::scaleChange()
-{
-    QwtAbstractSlider::scaleChange();
-
-    if ( testAttribute( Qt::WA_WState_Polished ) )
-        layoutSlider( true );
-}
-
-/*!
-  \brief Specify the update interval for automatic scrolling
-
-  The minimal accepted value is 50 ms.
-
-  \param interval Update interval in milliseconds
-
-  \sa setUpdateInterval()
-*/
-void QwtSlider::setUpdateInterval( int interval )
-{
-    d_data->updateInterval = qMax( interval, 50 );
-}
-
-/*!
-  \return Update interval in milliseconds for automatic scrolling
-  \sa setUpdateInterval()
- */
-int QwtSlider::updateInterval() const
-{
-    return d_data->updateInterval;
-}
-
-/*!
-   Draw the slider into the specified rectangle.
-
-   \param painter Painter
-   \param sliderRect Bounding rectangle of the slider
-*/
-void QwtSlider::drawSlider( 
-    QPainter *painter, const QRect &sliderRect ) const
-{
-    QRect innerRect( sliderRect );
-
-    if ( d_data->hasTrough )
-    {
-        const int bw = d_data->borderWidth;
-        innerRect = sliderRect.adjusted( bw, bw, -bw, -bw );
-
-        painter->fillRect( innerRect, palette().brush( QPalette::Mid ) );
-        qDrawShadePanel( painter, sliderRect, palette(), true, bw, NULL );
-    }
-
-    const QSize handleSize = qwtHandleSize( d_data->handleSize,
-        d_data->orientation, d_data->hasTrough );
-
-    if ( d_data->hasGroove )
-    {
-        const int slotExtent = 4;
-        const int slotMargin = 4;
-
-        QRect slotRect; 
-        if ( orientation() == Qt::Horizontal )
-        {
-            int slotOffset = qMax( 1, handleSize.width() / 2 - slotMargin );
-            int slotHeight = slotExtent + ( innerRect.height() % 2 );
-
-            slotRect.setWidth( innerRect.width() - 2 * slotOffset );
-            slotRect.setHeight( slotHeight );
-        }
-        else
-        {
-            int slotOffset = qMax( 1, handleSize.height() / 2 - slotMargin );
-            int slotWidth = slotExtent + ( innerRect.width() % 2 );
-
-            slotRect.setWidth( slotWidth );
-            slotRect.setHeight( innerRect.height() - 2 * slotOffset );
-
-        }
-
-        slotRect.moveCenter( innerRect.center() );
-
-        QBrush brush = palette().brush( QPalette::Dark );
-        qDrawShadePanel( painter, slotRect, palette(), true, 1 , &brush );
-    }
-
-    if ( isValid() )
-        drawHandle( painter, handleRect(), transform( value() ) );
-}
-
-/*!
-  Draw the thumb at a position
-
-  \param painter Painter
-  \param handleRect Bounding rectangle of the handle
-  \param pos Position of the handle marker in widget coordinates
-*/
-void QwtSlider::drawHandle( QPainter *painter, 
-    const QRect &handleRect, int pos ) const
-{
-    const int bw = d_data->borderWidth;
-
-    qDrawShadePanel( painter, 
-        handleRect, palette(), false, bw,
-        &palette().brush( QPalette::Button ) );
-
-    pos++; // shade line points one pixel below
-    if ( orientation() == Qt::Horizontal )
-    {
-        qDrawShadeLine( painter, pos, handleRect.top() + bw,
-            pos, handleRect.bottom() - bw, palette(), true, 1 );
-    }
-    else // Vertical
-    {
-        qDrawShadeLine( painter, handleRect.left() + bw, pos,
-            handleRect.right() - bw, pos, palette(), true, 1 );
-    }
-}
-
-/*!
-  \brief Determine what to do when the user presses a mouse button.
-
-  \param pos Mouse position
-
-  \retval True, when handleRect() contains pos 
-  \sa scrolledTo()
-*/
-bool QwtSlider::isScrollPosition( const QPoint &pos ) const
-{
-    if ( handleRect().contains( pos ) )
-    {
-        const double v = ( orientation() == Qt::Horizontal ) 
-            ? pos.x() : pos.y();
-
-        d_data->mouseOffset = v - transform( value() );
-        return true;
-    }
-
-    return false;
-}
-
-/*!
-  \brief Determine the value for a new position of the
-         slider handle.
-
-  \param pos Mouse position
-
-  \return Value for the mouse position
-  \sa isScrollPosition()
-*/
-double QwtSlider::scrolledTo( const QPoint &pos ) const
-{
-    int p = ( orientation() == Qt::Horizontal ) 
-        ? pos.x() : pos.y();
-
-    p -= d_data->mouseOffset;
-
-    int min = transform( lowerBound() );
-    int max = transform( upperBound() );
-    if ( min > max )
-        qSwap( min, max );
-
-    p = qBound( min, p, max );
-
-    return scaleMap().invTransform( p );
-}
-
-/*!
-   Mouse press event handler
-   \param event Mouse event
-*/
-void QwtSlider::mousePressEvent( QMouseEvent *event )
-{
-    if ( isReadOnly() )
-    {
-        event->ignore();
-        return;
-    }
-
-    const QPoint pos = event->pos();
-
-    if ( isValid() && d_data->sliderRect.contains( pos ) )
-    {
-        if ( !handleRect().contains( pos ) )
-        {
-            const int markerPos = transform( value() );
-
-            d_data->stepsIncrement = pageSteps();
-
-            if ( d_data->orientation == Qt::Horizontal )
-            {
-                if ( pos.x() < markerPos )
-                    d_data->stepsIncrement = -d_data->stepsIncrement;
-            }
-            else
-            {
-                if ( pos.y() < markerPos )
-                    d_data->stepsIncrement = -d_data->stepsIncrement;
-            }
-
-            if ( isInverted() )
-                d_data->stepsIncrement = -d_data->stepsIncrement;
-
-            const double v = value();
-            incrementValue( d_data->stepsIncrement );
-
-            if ( v != value() )
-            {
-                if ( isTracking() )
-                    Q_EMIT valueChanged( value() );
-                else
-                    d_data->pendingValueChange = true;
-
-                Q_EMIT sliderMoved( value() );
-            }
-
-            d_data->timerTick = false;
-            d_data->repeatTimerId = startTimer( qMax( 250, 2 * updateInterval() ) );
-
-            return;
-        }
-    }
-
-    QwtAbstractSlider::mousePressEvent( event );
-}
-
-/*!
-   Mouse release event handler
-   \param event Mouse event
-*/
-void QwtSlider::mouseReleaseEvent( QMouseEvent *event )
-{
-    if ( d_data->repeatTimerId > 0 )
-    {
-        killTimer( d_data->repeatTimerId );
-        d_data->repeatTimerId = 0;
-        d_data->timerTick = false;
-        d_data->stepsIncrement = 0;
-    }
-
-    if ( d_data->pendingValueChange )
-    {
-        d_data->pendingValueChange = false;
-        Q_EMIT valueChanged( value() );
-    }
-
-    QwtAbstractSlider::mouseReleaseEvent( event );
-}
-
-/*!
-   Timer event handler
-
-   Handles the timer, when the mouse stays pressed
-   inside the sliderRect().
-
-   \param event Mouse event
-*/  
-void QwtSlider::timerEvent( QTimerEvent *event )
-{
-    if ( event->timerId() != d_data->repeatTimerId )
-    {
-        QwtAbstractSlider::timerEvent( event );
-        return;
-    }
-
-    if ( !isValid() )
-    {
-        killTimer( d_data->repeatTimerId );
-        d_data->repeatTimerId = 0;
-        return;
-    }
-
-    const double v = value();
-    incrementValue( d_data->stepsIncrement );
-
-    if ( v != value() )
-    {
-        if ( isTracking() )
-            Q_EMIT valueChanged( value() );
-        else
-            d_data->pendingValueChange = true;
-
-        Q_EMIT sliderMoved( value() );
-    }
-
-    if ( !d_data->timerTick )
-    {
-        // restart the timer with a shorter interval
-        killTimer( d_data->repeatTimerId );
-        d_data->repeatTimerId = startTimer( updateInterval() );
-        
-        d_data->timerTick = true;
-    }   
-}
-
-/*!
-   Qt paint event handler
-   \param event Paint event
-*/
-void QwtSlider::paintEvent( QPaintEvent *event )
-{
-    QPainter painter( this );
-    painter.setClipRegion( event->region() );
-
-    QStyleOption opt;
-    opt.init(this);
-    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
-
-    if ( d_data->scalePosition != QwtSlider::NoScale )
-    {
-        if ( !d_data->sliderRect.contains( event->rect() ) )
-            scaleDraw()->draw( &painter, palette() );
-    }
-
-    drawSlider( &painter, d_data->sliderRect );
-
-    if ( hasFocus() )
-        QwtPainter::drawFocusRect( &painter, this, d_data->sliderRect );
-}
-
-/*!
-   Qt resize event handler
-   \param event Resize event
-*/
-void QwtSlider::resizeEvent( QResizeEvent *event )
-{
-    Q_UNUSED( event );
-
-    layoutSlider( false );
-}
-
-/*!
-   Handles QEvent::StyleChange and QEvent::FontChange events
-   \param event Change event
-*/
-void QwtSlider::changeEvent( QEvent *event )
-{
-    if ( event->type() == QEvent::StyleChange || 
-        event->type() == QEvent::FontChange )
-    {
-        if ( testAttribute( Qt::WA_WState_Polished ) )
-            layoutSlider( true );
-    }
-
-    QwtAbstractSlider::changeEvent( event );
-}
-
-/*!
-  Recalculate the slider's geometry and layout based on
-  the current geometry and fonts.
-
-  \param update_geometry  notify the layout system and call update
-         to redraw the scale
-*/
-void QwtSlider::layoutSlider( bool update_geometry )
-{
-    int bw = 0;
-    if ( d_data->hasTrough )
-        bw = d_data->borderWidth;
-
-    const QSize handleSize = qwtHandleSize( d_data->handleSize,
-        d_data->orientation, d_data->hasTrough );
-
-    QRect sliderRect = contentsRect();
-
-    /*
-       The marker line of the handle needs to be aligned to
-       the scale. But the marker is in the center 
-       and we need space enough to display the rest of the handle.
-
-       But the scale itself usually needs margins for displaying
-       the tick labels, that also might needs space beyond the
-       backbone.
-
-       Now it depends on what needs more margins. If it is the
-       slider the scale gets shrunk, otherwise the slider.
-     */
-
-    int scaleMargin = 0;
-    if ( d_data->scalePosition != QwtSlider::NoScale )
-    {
-        int d1, d2;
-        scaleDraw()->getBorderDistHint( font(), d1, d2 );
-
-        scaleMargin = qMax( d1, d2 ) - bw;
-    }
-
-    int scaleX, scaleY, scaleLength;
-
-    if ( d_data->orientation == Qt::Horizontal )
-    {
-        const int handleMargin = handleSize.width() / 2 - 1;
-        if ( scaleMargin > handleMargin )
-        {
-            int off = scaleMargin - handleMargin;
-            sliderRect.adjust( off, 0, -off, 0 );
-        }
-
-        scaleX = sliderRect.left() + bw + handleSize.width() / 2 - 1;
-        scaleLength = sliderRect.width() - handleSize.width();
-    }
-    else
-    {
-        int handleMargin = handleSize.height() / 2 - 1;
-        if ( scaleMargin > handleMargin )
-        {
-            int off = scaleMargin - handleMargin;
-            sliderRect.adjust( 0, off, 0, -off );
-        }
-
-        scaleY = sliderRect.top() + bw + handleSize.height() / 2 - 1;
-        scaleLength = sliderRect.height() - handleSize.height();
-    }
-
-    scaleLength -= 2 * bw;
-
-    // now align slider and scale according to the ScalePosition
-
-    if ( d_data->orientation == Qt::Horizontal )
-    {
-        const int h = handleSize.height() + 2 * bw;
-
-        if ( d_data->scalePosition == QwtSlider::TrailingScale )
-        {
-            sliderRect.setTop( sliderRect.bottom() + 1 - h );
-            scaleY = sliderRect.top() - d_data->spacing;
-        }
-        else
-        {
-            sliderRect.setHeight( h );
-            scaleY = sliderRect.bottom() + 1 + d_data->spacing;
-        }
-    }
-    else // Qt::Vertical
-    {
-        const int w = handleSize.width() + 2 * bw;
-
-        if ( d_data->scalePosition == QwtSlider::LeadingScale )
-        {
-            sliderRect.setWidth( w );
-            scaleX = sliderRect.right() + 1 + d_data->spacing;
-        }
-        else
-        {
-            sliderRect.setLeft( sliderRect.right() + 1 - w );
-            scaleX = sliderRect.left() - d_data->spacing;
-        }
-    }
-
-    d_data->sliderRect = sliderRect;
-
-    scaleDraw()->move( scaleX, scaleY );
-    scaleDraw()->setLength( scaleLength );
-
-    if ( update_geometry )
-    {
-        d_data->sizeHintCache = QSize(); // invalidate
-        updateGeometry();
-        update();
-    }
-}
-
-/*!
-  En/Disable the trough
-
-  The slider can be cutomized by showing a trough for the
-  handle.
-
-  \param on When true, the groove is visible
-  \sa hasTrough(), setGroove()
- */
-void QwtSlider::setTrough( bool on )
-{
-    if ( d_data->hasTrough != on )
-    {
-        d_data->hasTrough = on;
-
-        if ( testAttribute( Qt::WA_WState_Polished ) )
-            layoutSlider( true );
-    }
-}
-
-/*!
-  \return True, when the trough is visisble
-  \sa setTrough(), hasGroove()
- */
-bool QwtSlider::hasTrough() const
-{
-    return d_data->hasTrough;
-}
-
-/*!
-  En/Disable the groove
-
-  The slider can be cutomized by showing a groove for the
-  handle.
-
-  \param on When true, the groove is visible
-  \sa hasGroove(), setThrough()
- */
-void QwtSlider::setGroove( bool on )
-{
-    if ( d_data->hasGroove != on )
-    {
-        d_data->hasGroove = on;
-        
-        if ( testAttribute( Qt::WA_WState_Polished ) )
-            layoutSlider( true );
-    }
-}
-
-/*!
-  \return True, when the groove is visisble
-  \sa setGroove(), hasTrough()
- */
-bool QwtSlider::hasGroove() const
-{
-    return d_data->hasGroove;
-} 
-
-/*!
-  \return minimumSizeHint()
-*/
-QSize QwtSlider::sizeHint() const
-{
-    const QSize hint = minimumSizeHint();
-    return hint.expandedTo( QApplication::globalStrut() );
-}
-
-/*!
-  \return Minimum size hint
-  \sa sizeHint()
-*/
-QSize QwtSlider::minimumSizeHint() const
-{
-    if ( !d_data->sizeHintCache.isEmpty() )
-        return d_data->sizeHintCache;
-
-    const QSize handleSize = qwtHandleSize( d_data->handleSize,
-        d_data->orientation, d_data->hasTrough );
-
-    int bw = 0;
-    if ( d_data->hasTrough )
-        bw = d_data->borderWidth;
-
-    int sliderLength = 0; 
-    int scaleExtent = 0;
-
-    if ( d_data->scalePosition != QwtSlider::NoScale )
-    {
-        int d1, d2;
-        scaleDraw()->getBorderDistHint( font(), d1, d2 );
-
-        const int scaleBorderDist = 2 * ( qMax( d1, d2 ) - bw );
-
-        int handleBorderDist;
-        if ( d_data->orientation == Qt::Horizontal )
-            handleBorderDist = handleSize.width();
-        else
-            handleBorderDist = handleSize.height();
-
-        sliderLength = scaleDraw()->minLength( font() );
-        if ( handleBorderDist > scaleBorderDist )
-        {
-            // We need additional space for the overlapping handle
-            sliderLength += handleBorderDist - scaleBorderDist;
-        }
-
-        scaleExtent += d_data->spacing;
-        scaleExtent += qCeil( scaleDraw()->extent( font() ) );
-    }
-
-    sliderLength = qMax( sliderLength, 84 ); // from QSlider
-
-    int w = 0;
-    int h = 0;
-
-    if ( d_data->orientation == Qt::Horizontal )
-    {
-        w = sliderLength;
-        h = handleSize.height() + 2 * bw + scaleExtent;
-    }
-    else
-    {
-        w = handleSize.width() + 2 * bw + scaleExtent;
-        h = sliderLength;
-    }
-
-    // finally add margins
-    int left, right, top, bottom;
-    getContentsMargins( &left, &top, &right, &bottom );
-
-    w += left + right;
-    h += top + bottom;
-
-    d_data->sizeHintCache = QSize( w, h );
-    return d_data->sizeHintCache;
-}
-
-/*!
-   \return Bounding rectangle of the slider handle
- */
-QRect QwtSlider::handleRect() const
-{
-    if ( !isValid() )
-        return QRect();
-
-    const int markerPos = transform( value() );
-
-    QPoint center = d_data->sliderRect.center();
-    if ( d_data->orientation == Qt::Horizontal )
-        center.setX( markerPos );
-    else
-        center.setY( markerPos );
-
-    QRect rect;
-    rect.setSize( qwtHandleSize( d_data->handleSize,
-        d_data->orientation, d_data->hasTrough ) );
-    rect.moveCenter( center );
-
-    return rect;
-}
-
-/*!
- \return Bounding rectangle of the slider - without the scale
- */
-QRect QwtSlider::sliderRect() const
-{
-    return d_data->sliderRect;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_slider.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_slider.h
deleted file mode 100644
index 76d7260ae58a65537ad2b1d0fab5d2bcf3b2c614..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_slider.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SLIDER_H
-#define QWT_SLIDER_H
-
-#include "qwt_global.h"
-#include "qwt_abstract_slider.h"
-
-class QwtScaleDraw;
-
-/*!
-  \brief The Slider Widget
-
-  QwtSlider is a slider widget which operates on an interval
-  of type double. Its position is related to a scale showing
-  the current value.
-
-  The slider can be customized by having a through, a groove - or both.
-
-  \image html sliders.png
-*/
-
-class QWT_EXPORT QwtSlider: public QwtAbstractSlider
-{
-    Q_OBJECT
-
-    Q_ENUMS( ScalePosition BackgroundStyle )
-
-    Q_PROPERTY( Qt::Orientation orientation
-                READ orientation WRITE setOrientation )
-    Q_PROPERTY( ScalePosition scalePosition READ scalePosition
-        WRITE setScalePosition )
-
-    Q_PROPERTY( bool trough READ hasTrough WRITE setTrough )
-    Q_PROPERTY( bool groove READ hasGroove WRITE setGroove )
-
-    Q_PROPERTY( QSize handleSize READ handleSize WRITE setHandleSize )
-    Q_PROPERTY( int borderWidth READ borderWidth WRITE setBorderWidth )
-    Q_PROPERTY( int spacing READ spacing WRITE setSpacing )
-
-public:
-
-    /*!
-      Position of the scale
-      \sa QwtSlider(), setScalePosition(), setOrientation()
-     */
-    enum ScalePosition
-    {
-        //! The slider has no scale
-        NoScale,
-
-        //! The scale is right of a vertical or below a horizontal slider
-        LeadingScale,
-
-        //! The scale is left of a vertical or above a horizontal slider
-        TrailingScale
-    };
-
-    explicit QwtSlider( QWidget *parent = NULL );
-    explicit QwtSlider( Qt::Orientation, QWidget *parent = NULL );
-
-    virtual ~QwtSlider();
-
-    void setOrientation( Qt::Orientation );
-    Qt::Orientation orientation() const;
-
-    void setScalePosition( ScalePosition );
-    ScalePosition scalePosition() const;
-
-    void setTrough( bool );
-    bool hasTrough() const;
-
-    void setGroove( bool );
-    bool hasGroove() const;
-
-    void setHandleSize( const QSize & );
-    QSize handleSize() const;
-
-    void setBorderWidth( int bw );
-    int borderWidth() const;
-
-    void setSpacing( int );
-    int spacing() const;
-
-    virtual QSize sizeHint() const;
-    virtual QSize minimumSizeHint() const;
-
-    void setScaleDraw( QwtScaleDraw * );
-    const QwtScaleDraw *scaleDraw() const;
-
-    void setUpdateInterval( int );
-    int updateInterval() const;
-
-protected:
-    virtual double scrolledTo( const QPoint & ) const;
-    virtual bool isScrollPosition( const QPoint & ) const;
-
-    virtual void drawSlider ( QPainter *, const QRect & ) const;
-    virtual void drawHandle( QPainter *, const QRect &, int pos ) const;
-
-    virtual void mousePressEvent( QMouseEvent * );
-    virtual void mouseReleaseEvent( QMouseEvent * );
-    virtual void resizeEvent( QResizeEvent * );
-    virtual void paintEvent ( QPaintEvent * );
-    virtual void changeEvent( QEvent * );
-    virtual void timerEvent( QTimerEvent * );
-
-    virtual void scaleChange();
-
-    QRect sliderRect() const;
-    QRect handleRect() const;
-
-private:
-    QwtScaleDraw *scaleDraw();
-
-    void layoutSlider( bool );
-    void initSlider( Qt::Orientation );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_spline.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_spline.cpp
deleted file mode 100644
index add9a48eef7f5d7de90c4c1a4352a9def2471b7c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_spline.cpp
+++ /dev/null
@@ -1,384 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_spline.h"
-#include "qwt_math.h"
-
-class QwtSpline::PrivateData
-{
-public:
-    PrivateData():
-        splineType( QwtSpline::Natural )
-    {
-    }
-
-    QwtSpline::SplineType splineType;
-
-    // coefficient vectors
-    QVector<double> a;
-    QVector<double> b;
-    QVector<double> c;
-
-    // control points
-    QPolygonF points;
-};
-
-static int lookup( double x, const QPolygonF &values )
-{
-#if 0
-//qLowerBound/qHigherBound ???
-#endif
-    int i1;
-    const int size = values.size();
-
-    if ( x <= values[0].x() )
-        i1 = 0;
-    else if ( x >= values[size - 2].x() )
-        i1 = size - 2;
-    else
-    {
-        i1 = 0;
-        int i2 = size - 2;
-        int i3 = 0;
-
-        while ( i2 - i1 > 1 )
-        {
-            i3 = i1 + ( ( i2 - i1 ) >> 1 );
-
-            if ( values[i3].x() > x )
-                i2 = i3;
-            else
-                i1 = i3;
-        }
-    }
-    return i1;
-}
-
-//! Constructor
-QwtSpline::QwtSpline()
-{
-    d_data = new PrivateData;
-}
-
-/*!
-   Copy constructor
-   \param other Spline used for initialization
-*/
-QwtSpline::QwtSpline( const QwtSpline& other )
-{
-    d_data = new PrivateData( *other.d_data );
-}
-
-/*!
-   Assignment operator
-   \param other Spline used for initialization
-   \return *this
-*/
-QwtSpline &QwtSpline::operator=( const QwtSpline & other )
-{
-    *d_data = *other.d_data;
-    return *this;
-}
-
-//! Destructor
-QwtSpline::~QwtSpline()
-{
-    delete d_data;
-}
-
-/*!
-   Select the algorithm used for calculating the spline
-
-   \param splineType Spline type
-   \sa splineType()
-*/
-void QwtSpline::setSplineType( SplineType splineType )
-{
-    d_data->splineType = splineType;
-}
-
-/*!
-   \return the spline type
-   \sa setSplineType()
-*/
-QwtSpline::SplineType QwtSpline::splineType() const
-{
-    return d_data->splineType;
-}
-
-/*!
-  \brief Calculate the spline coefficients
-
-  Depending on the value of \a periodic, this function
-  will determine the coefficients for a natural or a periodic
-  spline and store them internally.
-
-  \param points Points
-  \return true if successful
-  \warning The sequence of x (but not y) values has to be strictly monotone
-           increasing, which means <code>points[i].x() < points[i+1].x()</code>.
-       If this is not the case, the function will return false
-*/
-bool QwtSpline::setPoints( const QPolygonF& points )
-{
-    const int size = points.size();
-    if ( size <= 2 )
-    {
-        reset();
-        return false;
-    }
-
-    d_data->points = points;
-
-    d_data->a.resize( size - 1 );
-    d_data->b.resize( size - 1 );
-    d_data->c.resize( size - 1 );
-
-    bool ok;
-    if ( d_data->splineType == Periodic )
-        ok = buildPeriodicSpline( points );
-    else
-        ok = buildNaturalSpline( points );
-
-    if ( !ok )
-        reset();
-
-    return ok;
-}
-
-/*!
-   \return Points, that have been by setPoints()
-*/
-QPolygonF QwtSpline::points() const
-{
-    return d_data->points;
-}
-
-//! \return A coefficients
-const QVector<double> &QwtSpline::coefficientsA() const
-{
-    return d_data->a;
-}
-
-//! \return B coefficients
-const QVector<double> &QwtSpline::coefficientsB() const
-{
-    return d_data->b;
-}
-
-//! \return C coefficients
-const QVector<double> &QwtSpline::coefficientsC() const
-{
-    return d_data->c;
-}
-
-
-//! Free allocated memory and set size to 0
-void QwtSpline::reset()
-{
-    d_data->a.resize( 0 );
-    d_data->b.resize( 0 );
-    d_data->c.resize( 0 );
-    d_data->points.resize( 0 );
-}
-
-//! True if valid
-bool QwtSpline::isValid() const
-{
-    return d_data->a.size() > 0;
-}
-
-/*!
-  Calculate the interpolated function value corresponding
-  to a given argument x.
-
-  \param x Coordinate
-  \return Interpolated coordinate
-*/
-double QwtSpline::value( double x ) const
-{
-    if ( d_data->a.size() == 0 )
-        return 0.0;
-
-    const int i = lookup( x, d_data->points );
-
-    const double delta = x - d_data->points[i].x();
-    return( ( ( ( d_data->a[i] * delta ) + d_data->b[i] )
-        * delta + d_data->c[i] ) * delta + d_data->points[i].y() );
-}
-
-/*!
-  \brief Determines the coefficients for a natural spline
-  \return true if successful
-*/
-bool QwtSpline::buildNaturalSpline( const QPolygonF &points )
-{
-    int i;
-
-    const QPointF *p = points.data();
-    const int size = points.size();
-
-    double *a = d_data->a.data();
-    double *b = d_data->b.data();
-    double *c = d_data->c.data();
-
-    //  set up tridiagonal equation system; use coefficient
-    //  vectors as temporary buffers
-    QVector<double> h( size - 1 );
-    for ( i = 0; i < size - 1; i++ )
-    {
-        h[i] = p[i+1].x() - p[i].x();
-        if ( h[i] <= 0 )
-            return false;
-    }
-
-    QVector<double> d( size - 1 );
-    double dy1 = ( p[1].y() - p[0].y() ) / h[0];
-    for ( i = 1; i < size - 1; i++ )
-    {
-        b[i] = c[i] = h[i];
-        a[i] = 2.0 * ( h[i-1] + h[i] );
-
-        const double dy2 = ( p[i+1].y() - p[i].y() ) / h[i];
-        d[i] = 6.0 * ( dy1 - dy2 );
-        dy1 = dy2;
-    }
-
-    //
-    // solve it
-    //
-
-    // L-U Factorization
-    for ( i = 1; i < size - 2; i++ )
-    {
-        c[i] /= a[i];
-        a[i+1] -= b[i] * c[i];
-    }
-
-    // forward elimination
-    QVector<double> s( size );
-    s[1] = d[1];
-    for ( i = 2; i < size - 1; i++ )
-        s[i] = d[i] - c[i-1] * s[i-1];
-
-    // backward elimination
-    s[size - 2] = - s[size - 2] / a[size - 2];
-    for ( i = size - 3; i > 0; i-- )
-        s[i] = - ( s[i] + b[i] * s[i+1] ) / a[i];
-    s[size - 1] = s[0] = 0.0;
-
-    //
-    // Finally, determine the spline coefficients
-    //
-    for ( i = 0; i < size - 1; i++ )
-    {
-        a[i] = ( s[i+1] - s[i] ) / ( 6.0 * h[i] );
-        b[i] = 0.5 * s[i];
-        c[i] = ( p[i+1].y() - p[i].y() ) / h[i]
-            - ( s[i+1] + 2.0 * s[i] ) * h[i] / 6.0;
-    }
-
-    return true;
-}
-
-/*!
-  \brief Determines the coefficients for a periodic spline
-  \return true if successful
-*/
-bool QwtSpline::buildPeriodicSpline( const QPolygonF &points )
-{
-    int i;
-
-    const QPointF *p = points.data();
-    const int size = points.size();
-
-    double *a = d_data->a.data();
-    double *b = d_data->b.data();
-    double *c = d_data->c.data();
-
-    QVector<double> d( size - 1 );
-    QVector<double> h( size - 1 );
-    QVector<double> s( size );
-
-    //
-    //  setup equation system; use coefficient
-    //  vectors as temporary buffers
-    //
-    for ( i = 0; i < size - 1; i++ )
-    {
-        h[i] = p[i+1].x() - p[i].x();
-        if ( h[i] <= 0.0 )
-            return false;
-    }
-
-    const int imax = size - 2;
-    double htmp = h[imax];
-    double dy1 = ( p[0].y() - p[imax].y() ) / htmp;
-    for ( i = 0; i <= imax; i++ )
-    {
-        b[i] = c[i] = h[i];
-        a[i] = 2.0 * ( htmp + h[i] );
-        const double dy2 = ( p[i+1].y() - p[i].y() ) / h[i];
-        d[i] = 6.0 * ( dy1 - dy2 );
-        dy1 = dy2;
-        htmp = h[i];
-    }
-
-    //
-    // solve it
-    //
-
-    // L-U Factorization
-    a[0] = qSqrt( a[0] );
-    c[0] = h[imax] / a[0];
-    double sum = 0;
-
-    for ( i = 0; i < imax - 1; i++ )
-    {
-        b[i] /= a[i];
-        if ( i > 0 )
-            c[i] = - c[i-1] * b[i-1] / a[i];
-        a[i+1] = qSqrt( a[i+1] - qwtSqr( b[i] ) );
-        sum += qwtSqr( c[i] );
-    }
-    b[imax-1] = ( b[imax-1] - c[imax-2] * b[imax-2] ) / a[imax-1];
-    a[imax] = qSqrt( a[imax] - qwtSqr( b[imax-1] ) - sum );
-
-
-    // forward elimination
-    s[0] = d[0] / a[0];
-    sum = 0;
-    for ( i = 1; i < imax; i++ )
-    {
-        s[i] = ( d[i] - b[i-1] * s[i-1] ) / a[i];
-        sum += c[i-1] * s[i-1];
-    }
-    s[imax] = ( d[imax] - b[imax-1] * s[imax-1] - sum ) / a[imax];
-
-
-    // backward elimination
-    s[imax] = - s[imax] / a[imax];
-    s[imax-1] = -( s[imax-1] + b[imax-1] * s[imax] ) / a[imax-1];
-    for ( i = imax - 2; i >= 0; i-- )
-        s[i] = - ( s[i] + b[i] * s[i+1] + c[i] * s[imax] ) / a[i];
-
-    //
-    // Finally, determine the spline coefficients
-    //
-    s[size-1] = s[0];
-    for ( i = 0; i < size - 1; i++ )
-    {
-        a[i] = ( s[i+1] - s[i] ) / ( 6.0 * h[i] );
-        b[i] = 0.5 * s[i];
-        c[i] = ( p[i+1].y() - p[i].y() )
-            / h[i] - ( s[i+1] + 2.0 * s[i] ) * h[i] / 6.0;
-    }
-
-    return true;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_spline.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_spline.h
deleted file mode 100644
index 363cbda488314d67083f47e04cb1aede53f91619..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_spline.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SPLINE_H
-#define QWT_SPLINE_H
-
-#include "qwt_global.h"
-#include <qpolygon.h>
-#include <qvector.h>
-
-/*!
-  \brief A class for spline interpolation
-
-  The QwtSpline class is used for cubical spline interpolation.
-  Two types of splines, natural and periodic, are supported.
-
-  \par Usage:
-  <ol>
-  <li>First call setPoints() to determine the spline coefficients
-      for a tabulated function y(x).
-  <li>After the coefficients have been set up, the interpolated
-      function value for an argument x can be determined by calling
-      QwtSpline::value().
-  </ol>
-
-  \par Example:
-  \code
-#include <qwt_spline.h>
-
-QPolygonF interpolate(const QPolygonF& points, int numValues)
-{
-    QwtSpline spline;
-    if ( !spline.setPoints(points) )
-        return points;
-
-    QPolygonF interpolatedPoints(numValues);
-
-    const double delta =
-        (points[numPoints - 1].x() - points[0].x()) / (points.size() - 1);
-    for(i = 0; i < points.size(); i++)  / interpolate
-    {
-        const double x = points[0].x() + i * delta;
-        interpolatedPoints[i].setX(x);
-        interpolatedPoints[i].setY(spline.value(x));
-    }
-    return interpolatedPoints;
-}
-  \endcode
-*/
-
-class QWT_EXPORT QwtSpline
-{
-public:
-    //! Spline type
-    enum SplineType
-    {
-        //! A natural spline
-        Natural,
-
-        //! A periodic spline
-        Periodic
-    };
-
-    QwtSpline();
-    QwtSpline( const QwtSpline & );
-
-    ~QwtSpline();
-
-    QwtSpline &operator=( const QwtSpline & );
-
-    void setSplineType( SplineType );
-    SplineType splineType() const;
-
-    bool setPoints( const QPolygonF& points );
-    QPolygonF points() const;
-
-    void reset();
-
-    bool isValid() const;
-    double value( double x ) const;
-
-    const QVector<double> &coefficientsA() const;
-    const QVector<double> &coefficientsB() const;
-    const QVector<double> &coefficientsC() const;
-
-protected:
-    bool buildNaturalSpline( const QPolygonF & );
-    bool buildPeriodicSpline( const QPolygonF & );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_symbol.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_symbol.cpp
deleted file mode 100644
index 65147519385e31de88b98b52c5179b457fbf75cc..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_symbol.cpp
+++ /dev/null
@@ -1,1770 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_symbol.h"
-#include "qwt_painter.h"
-#include "qwt_graphic.h"
-#include <qapplication.h>
-#include <qpainter.h>
-#include <qpainterpath.h>
-#include <qpixmap.h>
-#include <qpaintengine.h>
-#include <qmath.h>
-#ifndef QWT_NO_SVG
-#include <qsvgrenderer.h>
-#endif
-
-namespace QwtTriangle
-{
-    enum Type
-    {
-        Left,
-        Right,
-        Up,
-        Down
-    };
-}
-
-static QwtGraphic qwtPathGraphic( const QPainterPath &path, 
-    const QPen &pen, const QBrush& brush )
-{
-    QwtGraphic graphic;
-    graphic.setRenderHint( QwtGraphic::RenderPensUnscaled );
-
-    QPainter painter( &graphic );
-    painter.setPen( pen );
-    painter.setBrush( brush );
-    painter.drawPath( path );
-    painter.end();
-
-    return graphic;
-}
-
-static inline QRectF qwtScaledBoundingRect( 
-    const QwtGraphic &graphic, const QSizeF size )
-{
-    QSizeF scaledSize = size;
-    if ( scaledSize.isEmpty() )
-        scaledSize = graphic.defaultSize();
-        
-    const QSizeF sz = graphic.controlPointRect().size();
-
-    double sx = 1.0;
-    if ( sz.width() > 0.0 )
-        sx = scaledSize.width() / sz.width();
-    
-    double sy = 1.0;
-    if ( sz.height() > 0.0 )
-        sy = scaledSize.height() / sz.height();
-
-    return graphic.scaledBoundingRect( sx, sy );
-}
-
-static inline void qwtDrawPixmapSymbols( QPainter *painter,
-    const QPointF *points, int numPoints, const QwtSymbol &symbol )
-{
-    QSize size = symbol.size();
-    if ( size.isEmpty() )
-        size = symbol.pixmap().size();
-
-    const QTransform transform = painter->transform();
-    if ( transform.isScaling() )
-    {
-        const QRect r( 0, 0, size.width(), size.height() );
-        size = transform.mapRect( r ).size();
-    }
-
-    QPixmap pm = symbol.pixmap();
-    if ( pm.size() != size )
-        pm = pm.scaled( size );
-    
-    QPointF pinPoint( 0.5 * size.width(), 0.5 * size.height() );
-    if ( symbol.isPinPointEnabled() )
-        pinPoint = symbol.pinPoint();
-
-    painter->resetTransform();
-
-    for ( int i = 0; i < numPoints; i++ )
-    {
-        const QPointF pos = transform.map( points[i] ) - pinPoint;
-
-        QwtPainter::drawPixmap( painter, 
-            QRect( pos.toPoint(), pm.size() ), pm );
-    }
-}
-
-#ifndef QWT_NO_SVG
-
-static inline void qwtDrawSvgSymbols( QPainter *painter, 
-    const QPointF *points, int numPoints, 
-    QSvgRenderer *renderer, const QwtSymbol &symbol )
-{
-    if ( renderer == NULL || !renderer->isValid() )
-        return;
-
-    const QRectF viewBox = renderer->viewBoxF();
-    if ( viewBox.isEmpty() )
-        return;
-
-    QSizeF sz = symbol.size();
-    if ( !sz.isValid() )
-        sz = viewBox.size();
-
-    const double sx = sz.width() / viewBox.width();
-    const double sy = sz.height() / viewBox.height();
-
-    QPointF pinPoint = viewBox.center();
-    if ( symbol.isPinPointEnabled() )
-        pinPoint = symbol.pinPoint();
-
-    const double dx = sx * ( pinPoint.x() - viewBox.left() );
-    const double dy = sy * ( pinPoint.y() - viewBox.top() );
-
-    for ( int i = 0; i < numPoints; i++ )
-    {
-        const double x = points[i].x() - dx;
-        const double y = points[i].y() - dy;
-
-        renderer->render( painter, 
-            QRectF( x, y, sz.width(), sz.height() ) );
-    }
-}
-
-#endif
-
-static inline void qwtDrawGraphicSymbols( QPainter *painter, 
-    const QPointF *points, int numPoints, const QwtGraphic &graphic,
-    const QwtSymbol &symbol )
-{
-    const QRectF pointRect = graphic.controlPointRect();
-    if ( pointRect.isEmpty() )
-        return;
-
-    double sx = 1.0;
-    double sy = 1.0;
-
-    const QSize sz = symbol.size();
-    if ( sz.isValid() )
-    {
-        sx = sz.width() / pointRect.width();
-        sy = sz.height() / pointRect.height();
-    }
-
-    QPointF pinPoint = pointRect.center();
-    if ( symbol.isPinPointEnabled() )
-        pinPoint = symbol.pinPoint();
-
-    const QTransform transform = painter->transform();
-
-    for ( int i = 0; i < numPoints; i++ )
-    {
-        QTransform tr = transform;
-        tr.translate( points[i].x(), points[i].y() );
-        tr.scale( sx, sy );
-        tr.translate( -pinPoint.x(), -pinPoint.y() );
-
-        painter->setTransform( tr );
-
-        graphic.render( painter );
-    }
-
-    painter->setTransform( transform );
-}
-
-static inline void qwtDrawEllipseSymbols( QPainter *painter,
-    const QPointF *points, int numPoints, const QwtSymbol &symbol )
-{
-    painter->setBrush( symbol.brush() );
-    painter->setPen( symbol.pen() );
-
-    const QSize size = symbol.size();
-
-    if ( QwtPainter::roundingAlignment( painter ) )
-    {
-        const int sw = size.width();
-        const int sh = size.height();
-        const int sw2 = size.width() / 2;
-        const int sh2 = size.height() / 2;
-
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            const int x = qRound( points[i].x() );
-            const int y = qRound( points[i].y() );
-
-            const QRectF r( x - sw2, y - sh2, sw, sh );
-            QwtPainter::drawEllipse( painter, r );
-        }
-    }
-    else
-    {
-        const double sw = size.width();
-        const double sh = size.height();
-        const double sw2 = 0.5 * size.width();
-        const double sh2 = 0.5 * size.height();
-
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            const double x = points[i].x();
-            const double y = points[i].y();
-
-            const QRectF r( x - sw2, y - sh2, sw, sh );
-            QwtPainter::drawEllipse( painter, r );
-        }
-    }
-}
-
-static inline void qwtDrawRectSymbols( QPainter *painter,
-    const QPointF *points, int numPoints, const QwtSymbol &symbol )
-{
-    const QSize size = symbol.size();
-
-    QPen pen = symbol.pen();
-    pen.setJoinStyle( Qt::MiterJoin );
-    painter->setPen( pen );
-    painter->setBrush( symbol.brush() );
-    painter->setRenderHint( QPainter::Antialiasing, false );
-
-    if ( QwtPainter::roundingAlignment( painter ) )
-    {
-        const int sw = size.width();
-        const int sh = size.height();
-        const int sw2 = size.width() / 2;
-        const int sh2 = size.height() / 2;
-
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            const int x = qRound( points[i].x() );
-            const int y = qRound( points[i].y() );
-
-            const QRect r( x - sw2, y - sh2, sw, sh );
-            QwtPainter::drawRect( painter, r );
-        }
-    }
-    else
-    {
-        const double sw = size.width();
-        const double sh = size.height();
-        const double sw2 = 0.5 * size.width();
-        const double sh2 = 0.5 * size.height();
-
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            const double x = points[i].x();
-            const double y = points[i].y();
-
-            const QRectF r( x - sw2, y - sh2, sw, sh );
-            QwtPainter::drawRect( painter, r );
-        }
-    }
-}
-
-static inline void qwtDrawDiamondSymbols( QPainter *painter,
-    const QPointF *points, int numPoints, const QwtSymbol &symbol )
-{
-    const QSize size = symbol.size();
-
-    QPen pen = symbol.pen();
-    pen.setJoinStyle( Qt::MiterJoin );
-    painter->setPen( pen );
-    painter->setBrush( symbol.brush() );
-
-    if ( QwtPainter::roundingAlignment( painter ) )
-    {
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            const int x = qRound( points[i].x() );
-            const int y = qRound( points[i].y() );
-
-            const int x1 = x - size.width() / 2;
-            const int y1 = y - size.height() / 2;
-            const int x2 = x1 + size.width();
-            const int y2 = y1 + size.height();
-
-            QPolygonF polygon;
-            polygon += QPointF( x, y1 );
-            polygon += QPointF( x1, y );
-            polygon += QPointF( x, y2 );
-            polygon += QPointF( x2, y );
-
-            QwtPainter::drawPolygon( painter, polygon );
-        }
-    }
-    else
-    {
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            const QPointF &pos = points[i];
-
-            const double x1 = pos.x() - 0.5 * size.width();
-            const double y1 = pos.y() - 0.5 * size.height();
-            const double x2 = x1 + size.width();
-            const double y2 = y1 + size.height();
-
-            QPolygonF polygon;
-            polygon += QPointF( pos.x(), y1 );
-            polygon += QPointF( x2, pos.y() );
-            polygon += QPointF( pos.x(), y2 );
-            polygon += QPointF( x1, pos.y() );
-
-            QwtPainter::drawPolygon( painter, polygon );
-        }
-    }
-}
-
-static inline void qwtDrawTriangleSymbols(
-    QPainter *painter, QwtTriangle::Type type,
-    const QPointF *points, int numPoints,
-    const QwtSymbol &symbol )
-{
-    const QSize size = symbol.size();
-
-    QPen pen = symbol.pen();
-    pen.setJoinStyle( Qt::MiterJoin );
-    painter->setPen( pen );
-
-    painter->setBrush( symbol.brush() );
-
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    double sw2 = 0.5 * size.width();
-    double sh2 = 0.5 * size.height();
-
-    if ( doAlign )
-    {
-        sw2 = qFloor( sw2 );
-        sh2 = qFloor( sh2 );
-    }
-
-    QPolygonF triangle( 3 );
-    QPointF *trianglePoints = triangle.data();
-
-    for ( int i = 0; i < numPoints; i++ )
-    {
-        const QPointF &pos = points[i];
-
-        double x = pos.x();
-        double y = pos.y();
-
-        if ( doAlign )
-        {
-            x = qRound( x );
-            y = qRound( y );
-        }
-
-        const double x1 = x - sw2;
-        const double x2 = x1 + size.width();
-        const double y1 = y - sh2;
-        const double y2 = y1 + size.height();
-
-        switch ( type )
-        {
-            case QwtTriangle::Left:
-            {
-                trianglePoints[0].rx() = x2;
-                trianglePoints[0].ry() = y1;
-
-                trianglePoints[1].rx() = x1;
-                trianglePoints[1].ry() = y;
-
-                trianglePoints[2].rx() = x2;
-                trianglePoints[2].ry() = y2;
-
-                break;
-            }
-            case QwtTriangle::Right:
-            {
-                trianglePoints[0].rx() = x1;
-                trianglePoints[0].ry() = y1;
-
-                trianglePoints[1].rx() = x2;
-                trianglePoints[1].ry() = y;
-
-                trianglePoints[2].rx() = x1;
-                trianglePoints[2].ry() = y2;
-
-                break;
-            }
-            case QwtTriangle::Up:
-            {
-                trianglePoints[0].rx() = x1;
-                trianglePoints[0].ry() = y2;
-
-                trianglePoints[1].rx() = x;
-                trianglePoints[1].ry() = y1;
-
-                trianglePoints[2].rx() = x2;
-                trianglePoints[2].ry() = y2;
-
-                break;
-            }
-            case QwtTriangle::Down:
-            {
-                trianglePoints[0].rx() = x1;
-                trianglePoints[0].ry() = y1;
-
-                trianglePoints[1].rx() = x;
-                trianglePoints[1].ry() = y2;
-
-                trianglePoints[2].rx() = x2;
-                trianglePoints[2].ry() = y1;
-
-                break;
-            }
-        }
-        QwtPainter::drawPolygon( painter, triangle );
-    }
-}
-
-static inline void qwtDrawLineSymbols(
-    QPainter *painter, int orientations,
-    const QPointF *points, int numPoints, const QwtSymbol &symbol )
-{
-    const QSize size = symbol.size();
-
-    int off = 0;
-
-    QPen pen = symbol.pen();
-    if ( pen.width() > 1 )
-    {
-        pen.setCapStyle( Qt::FlatCap );
-        off = 1;
-    }
-
-    painter->setPen( pen );
-    painter->setRenderHint( QPainter::Antialiasing, false );
-
-    if ( QwtPainter::roundingAlignment( painter ) )
-    {
-        const int sw = qFloor( size.width() );
-        const int sh = qFloor( size.height() );
-        const int sw2 = size.width() / 2;
-        const int sh2 = size.height() / 2;
-
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            if ( orientations & Qt::Horizontal )
-            {
-                const int x = qRound( points[i].x() ) - sw2;
-                const int y = qRound( points[i].y() );
-
-                QwtPainter::drawLine( painter, x, y, x + sw + off, y );
-            }
-            if ( orientations & Qt::Vertical )
-            {
-                const int x = qRound( points[i].x() );
-                const int y = qRound( points[i].y() ) - sh2;
-
-                QwtPainter::drawLine( painter, x, y, x, y + sh + off );
-            }
-        }
-    }
-    else
-    {
-        const double sw = size.width();
-        const double sh = size.height();
-        const double sw2 = 0.5 * size.width();
-        const double sh2 = 0.5 * size.height();
-
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            if ( orientations & Qt::Horizontal )
-            {
-                const double x = points[i].x() - sw2;
-                const double y = points[i].y();
-
-                QwtPainter::drawLine( painter, x, y, x + sw, y );
-            }
-            if ( orientations & Qt::Vertical )
-            {
-                const double y = points[i].y() - sh2;
-                const double x = points[i].x();
-
-                QwtPainter::drawLine( painter, x, y, x, y + sh );
-            }
-        }
-    }
-}
-
-static inline void qwtDrawXCrossSymbols( QPainter *painter,
-    const QPointF *points, int numPoints, const QwtSymbol &symbol )
-{
-    const QSize size = symbol.size();
-    int off = 0;
-
-    QPen pen = symbol.pen();
-    if ( pen.width() > 1 )
-    {
-        pen.setCapStyle( Qt::FlatCap );
-        off = 1;
-    }
-    painter->setPen( pen );
-
-
-    if ( QwtPainter::roundingAlignment( painter ) )
-    {
-        const int sw = size.width();
-        const int sh = size.height();
-        const int sw2 = size.width() / 2;
-        const int sh2 = size.height() / 2;
-
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            const QPointF &pos = points[i];
-
-            const int x = qRound( pos.x() );
-            const int y = qRound( pos.y() );
-
-            const int x1 = x - sw2;
-            const int x2 = x1 + sw + off;
-            const int y1 = y - sh2;
-            const int y2 = y1 + sh + off;
-
-            QwtPainter::drawLine( painter, x1, y1, x2, y2 );
-            QwtPainter::drawLine( painter, x2, y1, x1, y2 );
-        }
-    }
-    else
-    {
-        const double sw = size.width();
-        const double sh = size.height();
-        const double sw2 = 0.5 * size.width();
-        const double sh2 = 0.5 * size.height();
-
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            const QPointF &pos = points[i];
-
-            const double x1 = pos.x() - sw2;
-            const double x2 = x1 + sw;
-            const double y1 = pos.y() - sh2;
-            const double y2 = y1 + sh;
-
-            QwtPainter::drawLine( painter, x1, y1, x2, y2 );
-            QwtPainter::drawLine( painter, x1, y2, x2, y1 );
-        }
-    }
-}
-
-static inline void qwtDrawStar1Symbols( QPainter *painter,
-    const QPointF *points, int numPoints, const QwtSymbol &symbol )
-{
-    const QSize size = symbol.size();
-    painter->setPen( symbol.pen() );
-
-    if ( QwtPainter::roundingAlignment( painter ) )
-    {
-        QRect r( 0, 0, size.width(), size.height() );
-
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            r.moveCenter( points[i].toPoint() );
-
-            const double sqrt1_2 = 0.70710678118654752440; /* 1/sqrt(2) */
-
-            const double d1 = r.width() / 2.0 * ( 1.0 - sqrt1_2 );
-
-            QwtPainter::drawLine( painter,
-                qRound( r.left() + d1 ), qRound( r.top() + d1 ),
-                qRound( r.right() - d1 ), qRound( r.bottom() - d1 ) );
-            QwtPainter::drawLine( painter,
-                qRound( r.left() + d1 ), qRound( r.bottom() - d1 ),
-                qRound( r .right() - d1), qRound( r.top() + d1 ) );
-
-            const QPoint c = r.center();
-
-            QwtPainter::drawLine( painter,
-                c.x(), r.top(), c.x(), r.bottom() );
-            QwtPainter::drawLine( painter,
-                r.left(), c.y(), r.right(), c.y() );
-        }
-    }
-    else
-    {
-        QRectF r( 0, 0, size.width(), size.height() );
-
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            r.moveCenter( points[i] );
-
-            const double sqrt1_2 = 0.70710678118654752440; /* 1/sqrt(2) */
-
-            const QPointF c = r.center();
-            const double d1  = r.width() / 2.0 * ( 1.0 - sqrt1_2 );
-
-            QwtPainter::drawLine( painter,
-                r.left() + d1, r.top() + d1,
-                r.right() - d1, r.bottom() - d1 );
-            QwtPainter::drawLine( painter,
-                r.left() + d1, r.bottom() - d1,
-                r.right() - d1, r.top() + d1 );
-            QwtPainter::drawLine( painter,
-                c.x(), r.top(),
-                c.x(), r.bottom() );
-            QwtPainter::drawLine( painter,
-                r.left(), c.y(),
-                r.right(), c.y() );
-        }
-    }
-}
-
-static inline void qwtDrawStar2Symbols( QPainter *painter,
-    const QPointF *points, int numPoints, const QwtSymbol &symbol )
-{
-    QPen pen = symbol.pen();
-    if ( pen.width() > 1 )
-        pen.setCapStyle( Qt::FlatCap );
-    pen.setJoinStyle( Qt::MiterJoin );
-    painter->setPen( pen );
-
-    painter->setBrush( symbol.brush() );
-
-    const double cos30 = 0.866025; // cos(30°)
-
-    const double dy = 0.25 * symbol.size().height();
-    const double dx = 0.5 * symbol.size().width() * cos30 / 3.0;
-
-    QPolygonF star( 12 );
-    QPointF *starPoints = star.data();
-
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    for ( int i = 0; i < numPoints; i++ )
-    {
-        double x = points[i].x();
-        double y = points[i].y();
-        if ( doAlign )
-        {
-            x = qRound( x );
-            y = qRound( y );
-        }
-
-        double x1 = x - 3 * dx;
-        double y1 = y - 2 * dy;
-        if ( doAlign )
-        {
-            x1 = qRound( x - 3 * dx );
-            y1 = qRound( y - 2 * dy );
-        }
-
-        const double x2 = x1 + 1 * dx;
-        const double x3 = x1 + 2 * dx;
-        const double x4 = x1 + 3 * dx;
-        const double x5 = x1 + 4 * dx;
-        const double x6 = x1 + 5 * dx;
-        const double x7 = x1 + 6 * dx;
-
-        const double y2 = y1 + 1 * dy;
-        const double y3 = y1 + 2 * dy;
-        const double y4 = y1 + 3 * dy;
-        const double y5 = y1 + 4 * dy;
-
-        starPoints[0].rx() = x4;
-        starPoints[0].ry() = y1;
-
-        starPoints[1].rx() = x5;
-        starPoints[1].ry() = y2;
-
-        starPoints[2].rx() = x7;
-        starPoints[2].ry() = y2;
-
-        starPoints[3].rx() = x6;
-        starPoints[3].ry() = y3;
-
-        starPoints[4].rx() = x7;
-        starPoints[4].ry() = y4;
-
-        starPoints[5].rx() = x5;
-        starPoints[5].ry() = y4;
-
-        starPoints[6].rx() = x4;
-        starPoints[6].ry() = y5;
-
-        starPoints[7].rx() = x3;
-        starPoints[7].ry() = y4;
-
-        starPoints[8].rx() = x1;
-        starPoints[8].ry() = y4;
-
-        starPoints[9].rx() = x2;
-        starPoints[9].ry() = y3;
-
-        starPoints[10].rx() = x1;
-        starPoints[10].ry() = y2;
-
-        starPoints[11].rx() = x3;
-        starPoints[11].ry() = y2;
-
-        QwtPainter::drawPolygon( painter, star );
-    }
-}
-
-static inline void qwtDrawHexagonSymbols( QPainter *painter,
-    const QPointF *points, int numPoints, const QwtSymbol &symbol )
-{
-    painter->setBrush( symbol.brush() );
-    painter->setPen( symbol.pen() );
-
-    const double cos30 = 0.866025; // cos(30°)
-    const double dx = 0.5 * ( symbol.size().width() - cos30 );
-
-    const double dy = 0.25 * symbol.size().height();
-
-    QPolygonF hexaPolygon( 6 );
-    QPointF *hexaPoints = hexaPolygon.data();
-
-    const bool doAlign = QwtPainter::roundingAlignment( painter );
-
-    for ( int i = 0; i < numPoints; i++ )
-    {
-        double x = points[i].x();
-        double y = points[i].y();
-        if ( doAlign )
-        {
-            x = qRound( x );
-            y = qRound( y );
-        }
-
-        double x1 = x - dx;
-        double y1 = y - 2 * dy;
-        if ( doAlign )
-        {
-            x1 = qCeil( x1 );
-            y1 = qCeil( y1 );
-        }
-
-        const double x2 = x1 + 1 * dx;
-        const double x3 = x1 + 2 * dx;
-
-        const double y2 = y1 + 1 * dy;
-        const double y3 = y1 + 3 * dy;
-        const double y4 = y1 + 4 * dy;
-
-        hexaPoints[0].rx() = x2;
-        hexaPoints[0].ry() = y1;
-
-        hexaPoints[1].rx() = x3;
-        hexaPoints[1].ry() = y2;
-
-        hexaPoints[2].rx() = x3;
-        hexaPoints[2].ry() = y3;
-
-        hexaPoints[3].rx() = x2;
-        hexaPoints[3].ry() = y4;
-
-        hexaPoints[4].rx() = x1;
-        hexaPoints[4].ry() = y3;
-
-        hexaPoints[5].rx() = x1;
-        hexaPoints[5].ry() = y2;
-
-        QwtPainter::drawPolygon( painter, hexaPolygon );
-    }
-}
-
-class QwtSymbol::PrivateData
-{
-public:
-    PrivateData( QwtSymbol::Style st, const QBrush &br,
-            const QPen &pn, const QSize &sz ):
-        style( st ),
-        size( sz ),
-        brush( br ),
-        pen( pn ),
-        isPinPointEnabled( false )
-    {
-        cache.policy = QwtSymbol::AutoCache;
-#ifndef QWT_NO_SVG
-        svg.renderer = NULL;
-#endif
-    }
-
-    ~PrivateData()
-    {
-#ifndef QWT_NO_SVG
-        delete svg.renderer;
-#endif
-    }
-
-    Style style;
-    QSize size;
-    QBrush brush;
-    QPen pen;
-
-    bool isPinPointEnabled;
-    QPointF pinPoint;
-
-    struct Path
-    {
-        QPainterPath path;
-        QwtGraphic graphic;
-
-    } path;
-
-    struct Pixmap
-    {
-        QPixmap pixmap;
-
-    } pixmap;
-
-    struct Graphic
-    {
-        QwtGraphic graphic;
-
-    } graphic;
-
-#ifndef QWT_NO_SVG
-    struct SVG
-    {
-        QSvgRenderer *renderer;
-    } svg;
-#endif
-
-    struct PaintCache
-    {
-        QwtSymbol::CachePolicy policy;
-        QPixmap pixmap;
-
-    } cache;
-};
-
-/*!
-  Default Constructor
-  \param style Symbol Style
-
-  The symbol is constructed with gray interior,
-  black outline with zero width, no size and style 'NoSymbol'.
-*/
-QwtSymbol::QwtSymbol( Style style )
-{
-    d_data = new PrivateData( style, QBrush( Qt::gray ),
-        QPen( Qt::black, 0 ), QSize() );
-}
-
-/*!
-  \brief Constructor
-  \param style Symbol Style
-  \param brush brush to fill the interior
-  \param pen outline pen
-  \param size size
-
-  \sa setStyle(), setBrush(), setPen(), setSize()
-*/
-QwtSymbol::QwtSymbol( QwtSymbol::Style style, const QBrush &brush,
-    const QPen &pen, const QSize &size )
-{
-    d_data = new PrivateData( style, brush, pen, size );
-}
-
-/*!
-  \brief Constructor
-
-  The symbol gets initialized by a painter path. The style is
-  set to QwtSymbol::Path, the size is set to empty ( the path
-  is displayed unscaled ).
-
-  \param path painter path
-  \param brush brush to fill the interior
-  \param pen outline pen
-
-  \sa setPath(), setBrush(), setPen(), setSize()
-*/
-
-QwtSymbol::QwtSymbol( const QPainterPath &path, 
-    const QBrush &brush, const QPen &pen )
-{
-    d_data = new PrivateData( QwtSymbol::Path, brush, pen, QSize() );
-    setPath( path );
-}
-
-//! Destructor
-QwtSymbol::~QwtSymbol()
-{
-    delete d_data;
-}
-
-/*!
-  Change the cache policy
-
-  The default policy is AutoCache
-
-  \param policy Cache policy
-  \sa CachePolicy, cachePolicy()
-*/
-void QwtSymbol::setCachePolicy(
-    QwtSymbol::CachePolicy policy )
-{
-    if ( d_data->cache.policy != policy )
-    {
-        d_data->cache.policy = policy;
-        invalidateCache();
-    }
-}
-
-/*!
-  \return Cache policy
-  \sa CachePolicy, setCachePolicy()
-*/
-QwtSymbol::CachePolicy QwtSymbol::cachePolicy() const
-{
-    return d_data->cache.policy;
-}
-
-/*!
-  \brief Set a painter path as symbol
-
-  The symbol is represented by a painter path, where the 
-  origin ( 0, 0 ) of the path coordinate system is mapped to
-  the position of the symbol.
-
-  When the symbol has valid size the painter path gets scaled
-  to fit into the size. Otherwise the symbol size depends on
-  the bounding rectangle of the path.
-
-  The following code defines a symbol drawing an arrow:
-
-  \verbatim
-#include <qwt_symbol.h>
-
-QwtSymbol *symbol = new QwtSymbol();
-
-QPen pen( Qt::black, 2 );
-pen.setJoinStyle( Qt::MiterJoin );
-
-symbol->setPen( pen );
-symbol->setBrush( Qt::red );
-
-QPainterPath path;
-path.moveTo( 0, 8 );
-path.lineTo( 0, 5 );
-path.lineTo( -3, 5 );
-path.lineTo( 0, 0 );
-path.lineTo( 3, 5 );
-path.lineTo( 0, 5 );
-
-QTransform transform;
-transform.rotate( -30.0 );
-path = transform.map( path );
-
-symbol->setPath( path );
-symbol->setPinPoint( QPointF( 0.0, 0.0 ) );
-
-setSize( 10, 14 );
-\endverbatim
-
-  \param path Painter path
-
-  \note The style is implicitely set to QwtSymbol::Path.
-  \sa path(), setSize()
- */
-void QwtSymbol::setPath( const QPainterPath &path )
-{
-    d_data->style = QwtSymbol::Path;
-    d_data->path.path = path;
-    d_data->path.graphic.reset();
-}
-
-/*!
-   \return Painter path for displaying the symbol
-   \sa setPath()
-*/
-const QPainterPath &QwtSymbol::path() const
-{
-    return d_data->path.path;
-}
-
-/*!
-  Set a pixmap as symbol
-
-  \param pixmap Pixmap
-
-  \sa pixmap(), setGraphic()
-
-  \note the style() is set to QwtSymbol::Pixmap
-  \note brush() and pen() have no effect
- */
-void QwtSymbol::setPixmap( const QPixmap &pixmap )
-{
-    d_data->style = QwtSymbol::Pixmap;
-    d_data->pixmap.pixmap = pixmap;
-}
-
-/*!
-  \return Assigned pixmap
-  \sa setPixmap()
- */
-const QPixmap &QwtSymbol::pixmap() const
-{
-    return d_data->pixmap.pixmap;
-}
-
-/*!
-  Set a graphic as symbol
-
-  \param graphic Graphic
-
-  \sa graphic(), setPixmap()
-
-  \note the style() is set to QwtSymbol::Graphic
-  \note brush() and pen() have no effect
- */
-void QwtSymbol::setGraphic( const QwtGraphic &graphic )
-{
-    d_data->style = QwtSymbol::Graphic;
-    d_data->graphic.graphic = graphic;
-}
-
-/*!
-  \return Assigned graphic
-  \sa setGraphic()
- */
-const QwtGraphic &QwtSymbol::graphic() const
-{
-    return d_data->graphic.graphic;
-}
-
-#ifndef QWT_NO_SVG
-
-/*!
-  Set a SVG icon as symbol
-
-  \param svgDocument SVG icon
-
-  \sa setGraphic(), setPixmap()
-
-  \note the style() is set to QwtSymbol::SvgDocument
-  \note brush() and pen() have no effect
- */
-void QwtSymbol::setSvgDocument( const QByteArray &svgDocument )
-{
-    d_data->style = QwtSymbol::SvgDocument;
-    if ( d_data->svg.renderer == NULL )
-        d_data->svg.renderer = new QSvgRenderer();
-
-    d_data->svg.renderer->load( svgDocument );
-}
-
-#endif
-
-/*!
-  \brief Specify the symbol's size
-
-  If the 'h' parameter is left out or less than 0,
-  and the 'w' parameter is greater than or equal to 0,
-  the symbol size will be set to (w,w).
-
-  \param width Width
-  \param height Height (defaults to -1)
-
-  \sa size()
-*/
-void QwtSymbol::setSize( int width, int height )
-{
-    if ( ( width >= 0 ) && ( height < 0 ) )
-        height = width;
-
-    setSize( QSize( width, height ) );
-}
-
-/*!
-   Set the symbol's size
-   \param size Size
-
-   \sa size()
-*/
-void QwtSymbol::setSize( const QSize &size )
-{
-    if ( size.isValid() && size != d_data->size )
-    {
-        d_data->size = size;
-        invalidateCache();
-    }
-}
-
-/*!
-   \return Size
-   \sa setSize()
-*/
-const QSize& QwtSymbol::size() const
-{
-    return d_data->size;
-}
-
-/*!
-  \brief Assign a brush
-
-  The brush is used to draw the interior of the symbol.
-  \param brush Brush
-
-  \sa brush()
-*/
-void QwtSymbol::setBrush( const QBrush &brush )
-{
-    if ( brush != d_data->brush )
-    {
-        d_data->brush = brush;
-        invalidateCache();
-
-        if ( d_data->style == QwtSymbol::Path )
-            d_data->path.graphic.reset();
-    }
-}
-
-/*!
-  \return Brush
-  \sa setBrush()
-*/
-const QBrush& QwtSymbol::brush() const
-{
-    return d_data->brush;
-}
-
-/*!
-  Build and assign a pen
-
-  In Qt5 the default pen width is 1.0 ( 0.0 in Qt4 )
-  what makes it non cosmetic ( see QPen::isCosmetic() ).
-  This method has been introduced to hide this incompatibility.
-
-  \param color Pen color
-  \param width Pen width
-  \param style Pen style
-
-  \sa pen(), brush()
- */
-void QwtSymbol::setPen( const QColor &color,
-    qreal width, Qt::PenStyle style )
-{
-    setPen( QPen( color, width, style ) );
-}
-
-/*!
-  Assign a pen
-
-  The pen is used to draw the symbol's outline.
-
-  \param pen Pen
-  \sa pen(), setBrush()
-*/
-void QwtSymbol::setPen( const QPen &pen )
-{
-    if ( pen != d_data->pen )
-    {
-        d_data->pen = pen;
-        invalidateCache();
-
-        if ( d_data->style == QwtSymbol::Path )
-            d_data->path.graphic.reset();
-    }
-}
-
-/*!
-  \return Pen
-  \sa setPen(), brush()
-*/
-const QPen& QwtSymbol::pen() const
-{
-    return d_data->pen;
-}
-
-/*!
-  \brief Set the color of the symbol
-
-  Change the color of the brush for symbol types with a filled area.
-  For all other symbol types the color will be assigned to the pen.
-
-  \param color Color
-
-  \sa setBrush(), setPen(), brush(), pen()
-*/
-void QwtSymbol::setColor( const QColor &color )
-{
-    switch ( d_data->style )
-    {
-        case QwtSymbol::Ellipse:
-        case QwtSymbol::Rect:
-        case QwtSymbol::Diamond:
-        case QwtSymbol::Triangle:
-        case QwtSymbol::UTriangle:
-        case QwtSymbol::DTriangle:
-        case QwtSymbol::RTriangle:
-        case QwtSymbol::LTriangle:
-        case QwtSymbol::Star2:
-        case QwtSymbol::Hexagon:
-        {
-            if ( d_data->brush.color() != color )
-            {
-                d_data->brush.setColor( color );
-                invalidateCache();
-            }
-            break;
-        }
-        case QwtSymbol::Cross:
-        case QwtSymbol::XCross:
-        case QwtSymbol::HLine:
-        case QwtSymbol::VLine:
-        case QwtSymbol::Star1:
-        {
-            if ( d_data->pen.color() != color )
-            {
-                d_data->pen.setColor( color );
-                invalidateCache();
-            }
-            break;
-        }
-        default:
-        {
-            if ( d_data->brush.color() != color ||
-                d_data->pen.color() != color )
-            {
-                invalidateCache();
-            }
-
-            d_data->brush.setColor( color );
-            d_data->pen.setColor( color );
-        }
-    }
-}
-
-/*!
-  \brief Set and enable a pin point
-
-  The position of a complex symbol is not always aligned to its center
-  ( f.e an arrow, where the peak points to a position ). The pin point
-  defines the position inside of a Pixmap, Graphic, SvgDocument 
-  or PainterPath symbol where the represented point has to
-  be aligned to.
-  
-  \param pos Position
-  \param enable En/Disable the pin point alignment
-
-  \sa pinPoint(), setPinPointEnabled()
- */
-void QwtSymbol::setPinPoint( const QPointF &pos, bool enable )
-{
-    if ( d_data->pinPoint != pos )
-    {
-        d_data->pinPoint = pos;
-        if ( d_data->isPinPointEnabled )
-        {
-            invalidateCache();
-        }
-    }
-
-    setPinPointEnabled( enable );
-}
-
-/*!
-  \return Pin point
-  \sa setPinPoint(), setPinPointEnabled()
- */
-QPointF QwtSymbol::pinPoint() const
-{
-    return d_data->pinPoint;
-}
-
-/*!
-  En/Disable the pin point alignment
-
-  \param on Enabled, when on is true
-  \sa setPinPoint(), isPinPointEnabled()
- */
-void QwtSymbol::setPinPointEnabled( bool on )
-{
-    if ( d_data->isPinPointEnabled != on )
-    {
-        d_data->isPinPointEnabled = on;
-        invalidateCache();
-    }
-}
-
-/*!
-  \return True, when the pin point translation is enabled
-  \sa setPinPoint(), setPinPointEnabled()
- */
-bool QwtSymbol::isPinPointEnabled() const
-{
-    return d_data->isPinPointEnabled;
-}
-
-/*!
-  Render an array of symbols
-
-  Painting several symbols is more effective than drawing symbols
-  one by one, as a couple of layout calculations and setting of pen/brush
-  can be done once for the complete array.
-
-  \param painter Painter
-  \param points Array of points
-  \param numPoints Number of points
-*/
-void QwtSymbol::drawSymbols( QPainter *painter,
-    const QPointF *points, int numPoints ) const
-{
-    if ( numPoints <= 0 )
-        return;
-
-    bool useCache = false;
-
-    // Don't use the pixmap, when the paint device
-    // could generate scalable vectors
-
-    if ( QwtPainter::roundingAlignment( painter ) &&
-        !painter->transform().isScaling() )
-    {
-        if ( d_data->cache.policy == QwtSymbol::Cache )
-        {
-            useCache = true;
-        }
-        else if ( d_data->cache.policy == QwtSymbol::AutoCache )
-        {
-            if ( painter->paintEngine()->type() == QPaintEngine::Raster )
-            {
-                useCache = true;
-            }
-            else
-            {
-                switch( d_data->style )
-                {
-                    case QwtSymbol::XCross:
-                    case QwtSymbol::HLine:
-                    case QwtSymbol::VLine:
-                    case QwtSymbol::Cross:
-                        break;
-
-                    case QwtSymbol::Pixmap:
-                    {
-                        if ( !d_data->size.isEmpty() &&
-                            d_data->size != d_data->pixmap.pixmap.size() ) 
-                        {
-                            useCache = true;
-                        }
-                        break;
-                    }                       
-                    default:
-                        useCache = true;
-                }
-            }
-        }
-    }
-
-    if ( useCache )
-    {
-        const QRect br = boundingRect();
-
-        const QRect rect( 0, 0, br.width(), br.height() );
-        
-        if ( d_data->cache.pixmap.isNull() )
-        {
-            d_data->cache.pixmap = QwtPainter::backingStore( NULL, br.size() );
-            d_data->cache.pixmap.fill( Qt::transparent );
-
-            QPainter p( &d_data->cache.pixmap );
-            p.setRenderHints( painter->renderHints() );
-            p.translate( -br.topLeft() );
-
-            const QPointF pos;
-            renderSymbols( &p, &pos, 1 );
-        }
-
-        const int dx = br.left();
-        const int dy = br.top();
-
-        for ( int i = 0; i < numPoints; i++ )
-        {
-            const int left = qRound( points[i].x() ) + dx;
-            const int top = qRound( points[i].y() ) + dy;
-
-            painter->drawPixmap( left, top, d_data->cache.pixmap );
-        }
-    }
-    else
-    {
-        painter->save();
-        renderSymbols( painter, points, numPoints );
-        painter->restore();
-    }
-}
-
-/*!
-  \brief Draw the symbol into a rectangle
-
-  The symbol is painted centered and scaled into the target rectangle.
-  It is always painted uncached and the pin point is ignored.
-
-  This method is primarily intended for drawing a symbol to
-  the legend.
-
-  \param painter Painter
-  \param rect Target rectangle for the symbol 
-*/
-void QwtSymbol::drawSymbol( QPainter *painter, const QRectF &rect ) const
-{
-    if ( d_data->style == QwtSymbol::NoSymbol )
-        return;
-
-    if ( d_data->style == QwtSymbol::Graphic )
-    {
-        d_data->graphic.graphic.render( 
-            painter, rect, Qt::KeepAspectRatio );
-    }
-    else if ( d_data->style == QwtSymbol::Path )
-    {
-        if ( d_data->path.graphic.isNull() )
-        {
-            d_data->path.graphic = qwtPathGraphic( 
-                d_data->path.path, d_data->pen, d_data->brush );
-        }
-
-        d_data->path.graphic.render( 
-            painter, rect, Qt::KeepAspectRatio );
-        return;
-    }
-    else if ( d_data->style == QwtSymbol::SvgDocument )
-    {
-#ifndef QWT_NO_SVG
-        if ( d_data->svg.renderer )
-        {
-            QRectF scaledRect;
-
-            QSizeF sz = d_data->svg.renderer->viewBoxF().size();
-            if ( !sz.isEmpty() )
-            {
-                sz.scale( rect.size(), Qt::KeepAspectRatio );
-                scaledRect.setSize( sz );
-                scaledRect.moveCenter( rect.center() );
-            }
-            else
-            {
-                scaledRect = rect;
-            }
-
-            d_data->svg.renderer->render( 
-                painter, scaledRect );
-        }
-#endif
-    }
-    else
-    {
-        const QRect br = boundingRect();
-
-        // scale the symbol size to fit into rect.
-
-        const double ratio = qMin( rect.width() / br.width(), 
-            rect.height() / br.height() );
-
-        painter->save();
-
-        painter->translate( rect.center() );
-        painter->scale( ratio, ratio );
-
-        const bool isPinPointEnabled = d_data->isPinPointEnabled;
-        d_data->isPinPointEnabled = false;
-
-        const QPointF pos;
-        renderSymbols( painter, &pos, 1 );
-    
-        d_data->isPinPointEnabled = isPinPointEnabled;
-
-        painter->restore();
-    }
-}
-
-/*!
-  Render the symbol to series of points
-
-  \param painter Qt painter
-  \param points Positions of the symbols
-  \param numPoints Number of points
- */
-void QwtSymbol::renderSymbols( QPainter *painter,
-    const QPointF *points, int numPoints ) const
-{
-    switch ( d_data->style )
-    {
-        case QwtSymbol::Ellipse:
-        {
-            qwtDrawEllipseSymbols( painter, points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::Rect:
-        {
-            qwtDrawRectSymbols( painter, points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::Diamond:
-        {
-            qwtDrawDiamondSymbols( painter, points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::Cross:
-        {
-            qwtDrawLineSymbols( painter, Qt::Horizontal | Qt::Vertical,
-                points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::XCross:
-        {
-            qwtDrawXCrossSymbols( painter, points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::Triangle:
-        case QwtSymbol::UTriangle:
-        {
-            qwtDrawTriangleSymbols( painter, QwtTriangle::Up,
-                points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::DTriangle:
-        {
-            qwtDrawTriangleSymbols( painter, QwtTriangle::Down,
-                points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::RTriangle:
-        {
-            qwtDrawTriangleSymbols( painter, QwtTriangle::Right,
-                points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::LTriangle:
-        {
-            qwtDrawTriangleSymbols( painter, QwtTriangle::Left,
-                points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::HLine:
-        {
-            qwtDrawLineSymbols( painter, Qt::Horizontal,
-                points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::VLine:
-        {
-            qwtDrawLineSymbols( painter, Qt::Vertical,
-                points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::Star1:
-        {
-            qwtDrawStar1Symbols( painter, points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::Star2:
-        {
-            qwtDrawStar2Symbols( painter, points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::Hexagon:
-        {
-            qwtDrawHexagonSymbols( painter, points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::Path:
-        {
-            if ( d_data->path.graphic.isNull() )
-            {
-                d_data->path.graphic = qwtPathGraphic( d_data->path.path, 
-                    d_data->pen, d_data->brush );
-            }
-
-            qwtDrawGraphicSymbols( painter, points, numPoints, 
-                d_data->path.graphic, *this );
-            break;
-        }
-        case QwtSymbol::Pixmap:
-        {
-            qwtDrawPixmapSymbols( painter, points, numPoints, *this );
-            break;
-        }
-        case QwtSymbol::Graphic:
-        {
-            qwtDrawGraphicSymbols( painter, points, numPoints, 
-                d_data->graphic.graphic, *this );
-            break;
-        }
-        case QwtSymbol::SvgDocument:
-        {
-#ifndef QWT_NO_SVG
-            qwtDrawSvgSymbols( painter, points, numPoints, 
-                d_data->svg.renderer, *this );
-#endif
-            break;
-        }
-        default:;
-    }
-}
-
-/*!
-  Calculate the bounding rectangle for a symbol
-  at position (0,0).
-
-  \return Bounding rectangle
- */
-QRect QwtSymbol::boundingRect() const
-{
-    QRectF rect;
-
-    bool pinPointTranslation = false;
-
-    switch ( d_data->style )
-    {
-        case QwtSymbol::Ellipse:
-        case QwtSymbol::Rect:
-        case QwtSymbol::Hexagon:
-        {
-            qreal pw = 0.0;
-            if ( d_data->pen.style() != Qt::NoPen )
-                pw = qMax( d_data->pen.widthF(), qreal( 1.0 ) );
-
-            rect.setSize( d_data->size + QSizeF( pw, pw ) );
-            rect.moveCenter( QPointF( 0.0, 0.0 ) );
-
-            break;
-        }
-        case QwtSymbol::XCross:
-        case QwtSymbol::Diamond:
-        case QwtSymbol::Triangle:
-        case QwtSymbol::UTriangle:
-        case QwtSymbol::DTriangle:
-        case QwtSymbol::RTriangle:
-        case QwtSymbol::LTriangle:
-        case QwtSymbol::Star1:
-        case QwtSymbol::Star2:
-        {
-            qreal pw = 0.0;
-            if ( d_data->pen.style() != Qt::NoPen )
-                pw = qMax( d_data->pen.widthF(), qreal( 1.0 ) );
-
-            rect.setSize( d_data->size + QSizeF( 2 * pw, 2 * pw ) );
-            rect.moveCenter( QPointF( 0.0, 0.0 ) );
-            break;
-        }
-        case QwtSymbol::Path:
-        {
-            if ( d_data->path.graphic.isNull() )
-            {
-                d_data->path.graphic = qwtPathGraphic(
-                    d_data->path.path, d_data->pen, d_data->brush );
-            }
-
-            rect = qwtScaledBoundingRect( 
-                d_data->path.graphic, d_data->size );
-            pinPointTranslation = true;
-
-            break;
-        }
-        case QwtSymbol::Pixmap:
-        {
-            if ( d_data->size.isEmpty() )
-                rect.setSize( d_data->pixmap.pixmap.size() );
-            else
-                rect.setSize( d_data->size );
-            
-            pinPointTranslation = true;
-
-            break;
-        }
-        case QwtSymbol::Graphic:
-        {
-            rect = qwtScaledBoundingRect( 
-                d_data->graphic.graphic, d_data->size );
-            pinPointTranslation = true;
-
-            break;
-        }
-#ifndef QWT_NO_SVG
-        case QwtSymbol::SvgDocument:
-        {
-            if ( d_data->svg.renderer )
-                rect = d_data->svg.renderer->viewBoxF();
-
-            if ( d_data->size.isValid() && !rect.isEmpty() )
-            {
-                QSizeF sz = rect.size();
-
-                const double sx = d_data->size.width() / sz.width();
-                const double sy = d_data->size.height() / sz.height();
-
-                QTransform transform;
-                transform.scale( sx, sy );
-
-                rect = transform.mapRect( rect );
-            }
-            pinPointTranslation = true;
-            break;
-        }
-#endif
-        default:
-        {
-            rect.setSize( d_data->size );
-            rect.moveCenter( QPointF( 0.0, 0.0 ) );
-        }
-    }
-
-    if ( pinPointTranslation )
-    {
-        QPointF pinPoint( 0.0, 0.0 );
-        if ( d_data->isPinPointEnabled )
-            pinPoint = rect.center() - d_data->pinPoint;
-
-        rect.moveCenter( pinPoint );
-    }
-
-    QRect r;
-    r.setLeft( qFloor( rect.left() ) );
-    r.setTop( qFloor( rect.top() ) );
-    r.setRight( qCeil( rect.right() ) );
-    r.setBottom( qCeil( rect.bottom() ) );
-
-    if ( d_data->style != QwtSymbol::Pixmap )
-        r.adjust( -1, -1, 1, 1 ); // for antialiasing
-
-    return r;
-}
-
-/*!
-  Invalidate the cached symbol pixmap
-
-  The symbol invalidates its cache, whenever an attribute is changed
-  that has an effect ob how to display a symbol. In case of derived
-  classes with individual styles ( >= QwtSymbol::UserStyle ) it
-  might be necessary to call invalidateCache() for attributes
-  that are relevant for this style.
-
-  \sa CachePolicy, setCachePolicy(), drawSymbols()
- */
-void QwtSymbol::invalidateCache()
-{
-    if ( !d_data->cache.pixmap.isNull() )
-        d_data->cache.pixmap = QPixmap();
-}
-
-/*!
-  Specify the symbol style
-
-  \param style Style
-  \sa style()
-*/
-void QwtSymbol::setStyle( QwtSymbol::Style style )
-{
-    if ( d_data->style != style )
-    {
-        d_data->style = style;
-        invalidateCache();
-    }
-}
-
-/*!
-  \return Current symbol style
-  \sa setStyle()
-*/
-QwtSymbol::Style QwtSymbol::style() const
-{
-    return d_data->style;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_symbol.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_symbol.h
deleted file mode 100644
index 9249b962c2f8c0dfd22fda7ea1abf86f365672a4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_symbol.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SYMBOL_H
-#define QWT_SYMBOL_H
-
-#include "qwt_global.h"
-#include <qpolygon.h>
-
-class QPainter;
-class QRect;
-class QSize;
-class QBrush;
-class QPen;
-class QColor;
-class QPointF;
-class QPolygonF;
-class QPainterPath;
-class QPixmap;
-class QByteArray;
-class QwtGraphic;
-
-//! A class for drawing symbols
-class QWT_EXPORT QwtSymbol
-{
-public:
-    /*!
-      Symbol Style
-      \sa setStyle(), style()
-     */
-    enum Style
-    {
-        //! No Style. The symbol cannot be drawn.
-        NoSymbol = -1,
-
-        //! Ellipse or circle
-        Ellipse,
-
-        //! Rectangle
-        Rect,
-
-        //!  Diamond
-        Diamond,
-
-        //! Triangle pointing upwards
-        Triangle,
-
-        //! Triangle pointing downwards
-        DTriangle,
-
-        //! Triangle pointing upwards
-        UTriangle,
-
-        //! Triangle pointing left
-        LTriangle,
-
-        //! Triangle pointing right
-        RTriangle,
-
-        //! Cross (+)
-        Cross,
-
-        //! Diagonal cross (X)
-        XCross,
-
-        //! Horizontal line
-        HLine,
-
-        //! Vertical line
-        VLine,
-
-        //! X combined with +
-        Star1,
-
-        //! Six-pointed star
-        Star2,
-
-        //! Hexagon
-        Hexagon,
-
-        /*!
-          The symbol is represented by a painter path, where the 
-          origin ( 0, 0 ) of the path coordinate system is mapped to
-          the position of the symbol.
-
-          \sa setPath(), path()
-         */
-        Path,
-
-        /*!
-          The symbol is represented by a pixmap. The pixmap is centered
-          or aligned to its pin point.
-
-          \sa setPinPoint()
-         */
-        Pixmap,
-
-        /*!
-          The symbol is represented by a graphic. The graphic is centered
-          or aligned to its pin point.
-
-          \sa setPinPoint()
-         */
-        Graphic,
-
-        /*!
-          The symbol is represented by a SVG graphic. The graphic is centered
-          or aligned to its pin point.
-
-          \sa setPinPoint()
-         */
-        SvgDocument,
-
-        /*!
-         Styles >= QwtSymbol::UserSymbol are reserved for derived
-         classes of QwtSymbol that overload drawSymbols() with
-         additional application specific symbol types.
-         */
-        UserStyle = 1000
-    };
-
-    /*!
-      Depending on the render engine and the complexity of the
-      symbol shape it might be faster to render the symbol
-      to a pixmap and to paint this pixmap.
-
-      F.e. the raster paint engine is a pure software renderer
-      where in cache mode a draw operation usually ends in 
-      raster operation with the the backing store, that are usually
-      faster, than the algorithms for rendering polygons.
-      But the opposite can be expected for graphic pipelines
-      that can make use of hardware acceleration.
-
-      The default setting is AutoCache
-
-      \sa setCachePolicy(), cachePolicy()
-
-      \note The policy has no effect, when the symbol is painted 
-            to a vector graphics format ( PDF, SVG ).
-      \warning Since Qt 4.8 raster is the default backend on X11
-     */
-
-    enum CachePolicy
-    {
-        //! Don't use a pixmap cache
-        NoCache,
-
-        //! Always use a pixmap cache
-        Cache,
-
-        /*! 
-           Use a cache when one of the following conditions is true:
-
-           - The symbol is rendered with the software 
-             renderer ( QPaintEngine::Raster )
-         */
-        AutoCache
-    };
-
-public:
-    QwtSymbol( Style = NoSymbol );
-    QwtSymbol( Style, const QBrush &, const QPen &, const QSize & );
-    QwtSymbol( const QPainterPath &, const QBrush &, const QPen & );
-
-    virtual ~QwtSymbol();
-
-    void setCachePolicy( CachePolicy );
-    CachePolicy cachePolicy() const;
-
-    void setSize( const QSize & );
-    void setSize( int width, int height = -1 );
-    const QSize& size() const;
-
-    void setPinPoint( const QPointF &pos, bool enable = true );
-    QPointF pinPoint() const;
-
-    void setPinPointEnabled( bool );
-    bool isPinPointEnabled() const;
-
-    virtual void setColor( const QColor & );
-
-    void setBrush( const QBrush& b );
-    const QBrush& brush() const;
-
-    void setPen( const QColor &, qreal width = 0.0, Qt::PenStyle = Qt::SolidLine );
-    void setPen( const QPen & );
-    const QPen& pen() const;
-
-    void setStyle( Style );
-    Style style() const;
-
-    void setPath( const QPainterPath & );
-    const QPainterPath &path() const;
-
-    void setPixmap( const QPixmap & );
-    const QPixmap &pixmap() const;
-
-    void setGraphic( const QwtGraphic & );
-    const QwtGraphic &graphic() const;
-
-#ifndef QWT_NO_SVG
-    void setSvgDocument( const QByteArray & );
-#endif
-
-    void drawSymbol( QPainter *, const QRectF & ) const;
-    void drawSymbol( QPainter *, const QPointF & ) const;
-    void drawSymbols( QPainter *, const QPolygonF & ) const;
-    void drawSymbols( QPainter *,
-        const QPointF *, int numPoints ) const;
-
-    virtual QRect boundingRect() const;
-    void invalidateCache();
-
-protected:
-    virtual void renderSymbols( QPainter *,
-        const QPointF *, int numPoints ) const;
-
-private:
-    // Disabled copy constructor and operator=
-    QwtSymbol( const QwtSymbol & );
-    QwtSymbol &operator=( const QwtSymbol & );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-/*!
-  \brief Draw the symbol at a specified position
-
-  \param painter Painter
-  \param pos Position of the symbol in screen coordinates
-*/
-inline void QwtSymbol::drawSymbol(
-    QPainter *painter, const QPointF &pos ) const
-{
-    drawSymbols( painter, &pos, 1 );
-}
-
-/*!
-  \brief Draw symbols at the specified points
-
-  \param painter Painter
-  \param points Positions of the symbols in screen coordinates
-*/
-
-inline void QwtSymbol::drawSymbols(
-    QPainter *painter, const QPolygonF &points ) const
-{
-    drawSymbols( painter, points.data(), points.size() );
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_system_clock.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_system_clock.cpp
deleted file mode 100644
index 44ae0bb513ce3710c8e8f2e05afe89c62cbd0d7e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_system_clock.cpp
+++ /dev/null
@@ -1,396 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_system_clock.h"
-
-#if QT_VERSION >= 0x040800
-#define USE_ELAPSED_TIMER 1
-#endif
-
-#if USE_ELAPSED_TIMER
-
-#include <qelapsedtimer.h>
-
-class QwtSystemClock::PrivateData
-{
-public:
-    QElapsedTimer timer;
-};
-
-QwtSystemClock::QwtSystemClock()
-{
-    d_data = new PrivateData();
-}
-
-QwtSystemClock::~QwtSystemClock()
-{
-    delete d_data;
-}
-    
-bool QwtSystemClock::isNull() const
-{
-    return d_data->timer.isValid();
-}
-        
-void QwtSystemClock::start()
-{
-    d_data->timer.start();
-}
-
-double QwtSystemClock::restart()
-{
-    const qint64 nsecs = d_data->timer.restart();
-    return nsecs / 1e6;
-}
-
-double QwtSystemClock::elapsed() const
-{
-    const qint64 nsecs = d_data->timer.nsecsElapsed();
-    return nsecs / 1e6;
-}
-    
-#else // !USE_ELAPSED_TIMER
-
-#include <qdatetime.h>
-
-#if !defined(Q_OS_WIN)
-#include <unistd.h>
-#endif
-
-#if defined(Q_OS_MAC)
-#include <stdint.h>
-#include <mach/mach_time.h>
-#define QWT_HIGH_RESOLUTION_CLOCK
-#elif defined(_POSIX_TIMERS)
-#include <time.h>
-#define QWT_HIGH_RESOLUTION_CLOCK
-#elif defined(Q_OS_WIN)
-#define QWT_HIGH_RESOLUTION_CLOCK
-#include <qt_windows.h>
-#endif
-
-#if defined(QWT_HIGH_RESOLUTION_CLOCK)
-
-class QwtHighResolutionClock
-{
-public:
-    QwtHighResolutionClock();
-
-    void start();
-    double restart();
-    double elapsed() const;
-
-    bool isNull() const;
-
-    static double precision();
-
-private:
-
-#if defined(Q_OS_MAC)
-    static double msecsTo( uint64_t, uint64_t );
-
-    uint64_t d_timeStamp;
-#elif defined(_POSIX_TIMERS)
-
-    static double msecsTo( const struct timespec &,
-        const struct timespec & );
-
-    static bool isMonotonic();
-
-    struct timespec d_timeStamp;
-    clockid_t d_clockId;
-
-#elif defined(Q_OS_WIN)
-
-    LARGE_INTEGER d_startTicks;
-    LARGE_INTEGER d_ticksPerSecond;
-#endif
-};
-
-#if defined(Q_OS_MAC)
-QwtHighResolutionClock::QwtHighResolutionClock():
-    d_timeStamp( 0 )
-{
-}
-
-double QwtHighResolutionClock::precision()
-{
-    return 1e-6;
-}
-
-void QwtHighResolutionClock::start()
-{
-    d_timeStamp = mach_absolute_time();
-}
-
-double QwtHighResolutionClock::restart()
-{
-    const uint64_t timeStamp = mach_absolute_time();
-    const double elapsed = msecsTo( d_timeStamp, timeStamp );
-    d_timeStamp = timeStamp;
-
-    return elapsed;
-}
-
-double QwtHighResolutionClock::elapsed() const
-{
-    return msecsTo( d_timeStamp, mach_absolute_time() );
-}
-
-bool QwtHighResolutionClock::isNull() const
-{
-    return d_timeStamp == 0;
-}
-
-double QwtHighResolutionClock::msecsTo(
-    uint64_t from, uint64_t to )
-{
-    const uint64_t difference = to - from;
-
-    static double conversion = 0.0;
-    if ( conversion == 0.0 )
-    {
-        mach_timebase_info_data_t info;
-        kern_return_t err = mach_timebase_info( &info );
-
-        // convert the timebase into ms
-        if ( err == 0  )
-            conversion = 1e-6 * ( double ) info.numer / ( double ) info.denom;
-    }
-
-    return conversion * ( double ) difference;
-}
-
-#elif defined(_POSIX_TIMERS)
-
-QwtHighResolutionClock::QwtHighResolutionClock()
-{
-    d_clockId = isMonotonic() ? CLOCK_MONOTONIC : CLOCK_REALTIME;
-    d_timeStamp.tv_sec = d_timeStamp.tv_nsec = 0;
-}
-
-double QwtHighResolutionClock::precision()
-{
-    struct timespec resolution;
-
-    int clockId = isMonotonic() ? CLOCK_MONOTONIC : CLOCK_REALTIME;
-    ::clock_getres( clockId, &resolution );
-
-    return resolution.tv_nsec / 1e3;
-}
-
-inline bool QwtHighResolutionClock::isNull() const
-{
-    return d_timeStamp.tv_sec <= 0 && d_timeStamp.tv_nsec <= 0;
-}
-
-inline void QwtHighResolutionClock::start()
-{
-    ::clock_gettime( d_clockId, &d_timeStamp );
-}
-
-double QwtHighResolutionClock::restart()
-{
-    struct timespec timeStamp;
-    ::clock_gettime( d_clockId, &timeStamp );
-
-    const double elapsed = msecsTo( d_timeStamp, timeStamp );
-
-    d_timeStamp = timeStamp;
-    return elapsed;
-}
-
-inline double QwtHighResolutionClock::elapsed() const
-{
-    struct timespec timeStamp;
-    ::clock_gettime( d_clockId, &timeStamp );
-
-    return msecsTo( d_timeStamp, timeStamp );
-}
-
-inline double QwtHighResolutionClock::msecsTo(
-    const struct timespec &t1, const struct timespec &t2 )
-{
-    return ( t2.tv_sec - t1.tv_sec ) * 1e3
-        + ( t2.tv_nsec - t1.tv_nsec ) * 1e-6;
-}
-
-bool QwtHighResolutionClock::isMonotonic()
-{
-    // code copied from qcore_unix.cpp
-
-#if (_POSIX_MONOTONIC_CLOCK-0 > 0)
-    return true;
-#else
-    static int returnValue = 0;
-
-    if ( returnValue == 0 )
-    {
-#if (_POSIX_MONOTONIC_CLOCK-0 < 0) || !defined(_SC_MONOTONIC_CLOCK)
-        returnValue = -1;
-#elif (_POSIX_MONOTONIC_CLOCK == 0)
-        // detect if the system support monotonic timers
-        const long x = sysconf( _SC_MONOTONIC_CLOCK );
-        returnValue = ( x >= 200112L ) ? 1 : -1;
-#endif
-    }
-
-    return returnValue != -1;
-#endif
-}
-
-#elif defined(Q_OS_WIN)
-
-QwtHighResolutionClock::QwtHighResolutionClock()
-{
-    d_startTicks.QuadPart = 0;
-    QueryPerformanceFrequency( &d_ticksPerSecond );
-}
-
-double QwtHighResolutionClock::precision()
-{
-    LARGE_INTEGER ticks;
-    if ( QueryPerformanceFrequency( &ticks ) && ticks.QuadPart > 0 )
-        return 1e3 / ticks.QuadPart;
-
-    return 0.0;
-}
-
-inline bool QwtHighResolutionClock::isNull() const
-{
-    return d_startTicks.QuadPart <= 0;
-}
-
-inline void QwtHighResolutionClock::start()
-{
-    QueryPerformanceCounter( &d_startTicks );
-}
-
-inline double QwtHighResolutionClock::restart()
-{
-    LARGE_INTEGER ticks;
-    QueryPerformanceCounter( &ticks );
-
-    const double dt = ticks.QuadPart - d_startTicks.QuadPart;
-    d_startTicks = ticks;
-
-    return dt / d_ticksPerSecond.QuadPart * 1e3;
-}
-
-inline double QwtHighResolutionClock::elapsed() const
-{
-    LARGE_INTEGER ticks;
-    QueryPerformanceCounter( &ticks );
-
-    const double dt = ticks.QuadPart - d_startTicks.QuadPart;
-    return dt / d_ticksPerSecond.QuadPart * 1e3;
-}
-
-#endif
-
-#endif // QWT_HIGH_RESOLUTION_CLOCK
-
-class QwtSystemClock::PrivateData
-{
-public:
-#if defined(QWT_HIGH_RESOLUTION_CLOCK)
-    QwtHighResolutionClock *clock;
-#endif
-    QTime time;
-};
-
-//!  Constructs a null clock object.
-QwtSystemClock::QwtSystemClock()
-{
-    d_data = new PrivateData;
-
-#if defined(QWT_HIGH_RESOLUTION_CLOCK)
-    d_data->clock = NULL;
-    if ( QwtHighResolutionClock::precision() > 0.0 )
-        d_data->clock = new QwtHighResolutionClock;
-#endif
-}
-
-//! Destructor
-QwtSystemClock::~QwtSystemClock()
-{
-#if defined(QWT_HIGH_RESOLUTION_CLOCK)
-    delete d_data->clock;
-#endif
-    delete d_data;
-}
-
-/*!
-  \return true if the clock has never been started.
-*/
-bool QwtSystemClock::isNull() const
-{
-#if defined(QWT_HIGH_RESOLUTION_CLOCK)
-    if ( d_data->clock )
-        return d_data->clock->isNull();
-#endif
-
-    return d_data->time.isNull();
-}
-
-/*!
-  Sets the start time to the current time.
-*/
-void QwtSystemClock::start()
-{
-#if defined(QWT_HIGH_RESOLUTION_CLOCK)
-    if ( d_data->clock )
-    {
-        d_data->clock->start();
-        return;
-    }
-#endif
-
-    d_data->time.start();
-}
-
-/*!
-  Set the start time to the current time 
-  \return Time, that is elapsed since the previous start time.
-*/
-double QwtSystemClock::restart()
-{
-#if defined(QWT_HIGH_RESOLUTION_CLOCK)
-    if ( d_data->clock )
-        return d_data->clock->restart();
-#endif
-
-    return d_data->time.restart();
-}
-
-/*!
-  \return Number of milliseconds that have elapsed since the last time
-          start() or restart() was called or 0.0 for null clocks.
-*/
-double QwtSystemClock::elapsed() const
-{
-    double elapsed = 0.0;
-
-#if defined(QWT_HIGH_RESOLUTION_CLOCK)
-    if ( d_data->clock )
-    {
-        if ( !d_data->clock->isNull() )
-            elapsed = d_data->clock->elapsed();
-
-        return elapsed;
-    }
-#endif
-
-    if ( !d_data->time.isNull() )
-        elapsed = d_data->time.elapsed();
-
-    return elapsed;
-}
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_system_clock.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_system_clock.h
deleted file mode 100644
index 24270aa9d6b83f14469c8a9f60d55584a1ac981d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_system_clock.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_SYSTEM_CLOCK_H
-#define QWT_SYSTEM_CLOCK_H
-
-#include "qwt_global.h"
-
-/*!
-  \brief QwtSystemClock provides high resolution clock time functions.
-
-  Sometimes the resolution offered by QTime ( millisecond ) is not accurate
-  enough for implementing time measurements ( f.e. sampling ).
-  QwtSystemClock offers a subset of the QTime functionality using higher
-  resolution timers ( if possible ).
-
-  Precision and time intervals are multiples of milliseconds (ms).
-
-  \note The implementation uses high-resolution performance counter on Windows,
-        mach_absolute_time() on the Mac or POSIX timers on other systems. 
-        If none is available it falls back on QTimer.
-*/
-
-class QWT_EXPORT QwtSystemClock
-{
-public:
-    QwtSystemClock();
-    virtual ~QwtSystemClock();
-
-    bool isNull() const;
-
-    void start();
-    double restart();
-    double elapsed() const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text.cpp
deleted file mode 100644
index 47d7d156a416529d8f8ca939aec7b2cde9628950..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text.cpp
+++ /dev/null
@@ -1,676 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_text.h"
-#include "qwt_painter.h"
-#include "qwt_text_engine.h"
-#include <qmap.h>
-#include <qfont.h>
-#include <qcolor.h>
-#include <qpen.h>
-#include <qbrush.h>
-#include <qpainter.h>
-#include <qapplication.h>
-#include <qdesktopwidget.h>
-#include <qmath.h>
-
-class QwtTextEngineDict
-{
-public:
-    static QwtTextEngineDict &dict();
-
-    void setTextEngine( QwtText::TextFormat, QwtTextEngine * );
-
-    const QwtTextEngine *textEngine( QwtText::TextFormat ) const;
-    const QwtTextEngine *textEngine( const QString &,
-        QwtText::TextFormat ) const;
-
-private:
-    QwtTextEngineDict();
-    ~QwtTextEngineDict();
-
-    typedef QMap<int, QwtTextEngine *> EngineMap;
-
-    inline const QwtTextEngine *engine( EngineMap::const_iterator &it ) const
-    {
-        return it.value();
-    }
-
-    EngineMap d_map;
-};
-
-QwtTextEngineDict &QwtTextEngineDict::dict()
-{
-    static QwtTextEngineDict engineDict;
-    return engineDict;
-}
-
-QwtTextEngineDict::QwtTextEngineDict()
-{
-    d_map.insert( QwtText::PlainText, new QwtPlainTextEngine() );
-#ifndef QT_NO_RICHTEXT
-    d_map.insert( QwtText::RichText, new QwtRichTextEngine() );
-#endif
-}
-
-QwtTextEngineDict::~QwtTextEngineDict()
-{
-    for ( EngineMap::const_iterator it = d_map.begin();
-        it != d_map.end(); ++it )
-    {
-        const QwtTextEngine *textEngine = engine( it );
-        delete textEngine;
-    }
-}
-
-const QwtTextEngine *QwtTextEngineDict::textEngine( const QString& text,
-    QwtText::TextFormat format ) const
-{
-    if ( format == QwtText::AutoText )
-    {
-        for ( EngineMap::const_iterator it = d_map.begin();
-            it != d_map.end(); ++it )
-        {
-            if ( it.key() != QwtText::PlainText )
-            {
-                const QwtTextEngine *e = engine( it );
-                if ( e && e->mightRender( text ) )
-                    return e;
-            }
-        }
-    }
-
-    EngineMap::const_iterator it = d_map.find( format );
-    if ( it != d_map.end() )
-    {
-        const QwtTextEngine *e = engine( it );
-        if ( e )
-            return e;
-    }
-
-    it = d_map.find( QwtText::PlainText );
-    return engine( it );
-}
-
-void QwtTextEngineDict::setTextEngine( QwtText::TextFormat format,
-    QwtTextEngine *engine )
-{
-    if ( format == QwtText::AutoText )
-        return;
-
-    if ( format == QwtText::PlainText && engine == NULL )
-        return;
-
-    EngineMap::const_iterator it = d_map.find( format );
-    if ( it != d_map.end() )
-    {
-        const QwtTextEngine *e = this->engine( it );
-        if ( e )
-            delete e;
-
-        d_map.remove( format );
-    }
-
-    if ( engine != NULL )
-        d_map.insert( format, engine );
-}
-
-const QwtTextEngine *QwtTextEngineDict::textEngine(
-    QwtText::TextFormat format ) const
-{
-    const QwtTextEngine *e = NULL;
-
-    EngineMap::const_iterator it = d_map.find( format );
-    if ( it != d_map.end() )
-        e = engine( it );
-
-    return e;
-}
-
-class QwtText::PrivateData
-{
-public:
-    PrivateData():
-        renderFlags( Qt::AlignCenter ),
-        borderRadius( 0 ),
-        borderPen( Qt::NoPen ),
-        backgroundBrush( Qt::NoBrush ),
-        paintAttributes( 0 ),
-        layoutAttributes( 0 ),
-        textEngine( NULL )
-    {
-    }
-
-    int renderFlags;
-    QString text;
-    QFont font;
-    QColor color;
-    double borderRadius;
-    QPen borderPen;
-    QBrush backgroundBrush;
-
-    QwtText::PaintAttributes paintAttributes;
-    QwtText::LayoutAttributes layoutAttributes;
-
-    const QwtTextEngine *textEngine;
-};
-
-class QwtText::LayoutCache
-{
-public:
-    void invalidate()
-    {
-        textSize = QSizeF();
-    }
-
-    QFont font;
-    QSizeF textSize;
-};
-
-/*!
-   Constructor
-
-   \param text Text content
-   \param textFormat Text format
-*/
-QwtText::QwtText( const QString &text, QwtText::TextFormat textFormat )
-{
-    d_data = new PrivateData;
-    d_data->text = text;
-    d_data->textEngine = textEngine( text, textFormat );
-
-    d_layoutCache = new LayoutCache;
-}
-
-//! Copy constructor
-QwtText::QwtText( const QwtText &other )
-{
-    d_data = new PrivateData;
-    *d_data = *other.d_data;
-
-    d_layoutCache = new LayoutCache;
-    *d_layoutCache = *other.d_layoutCache;
-}
-
-//! Destructor
-QwtText::~QwtText()
-{
-    delete d_data;
-    delete d_layoutCache;
-}
-
-//! Assignment operator
-QwtText &QwtText::operator=( const QwtText & other )
-{
-    *d_data = *other.d_data;
-    *d_layoutCache = *other.d_layoutCache;
-    return *this;
-}
-
-//! Relational operator
-bool QwtText::operator==( const QwtText &other ) const
-{
-    return d_data->renderFlags == other.d_data->renderFlags &&
-        d_data->text == other.d_data->text &&
-        d_data->font == other.d_data->font &&
-        d_data->color == other.d_data->color &&
-        d_data->borderRadius == other.d_data->borderRadius &&
-        d_data->borderPen == other.d_data->borderPen &&
-        d_data->backgroundBrush == other.d_data->backgroundBrush &&
-        d_data->paintAttributes == other.d_data->paintAttributes &&
-        d_data->textEngine == other.d_data->textEngine;
-}
-
-//! Relational operator
-bool QwtText::operator!=( const QwtText &other ) const // invalidate
-{
-    return !( other == *this );
-}
-
-/*!
-   Assign a new text content
-
-   \param text Text content
-   \param textFormat Text format
-
-   \sa text()
-*/
-void QwtText::setText( const QString &text,
-    QwtText::TextFormat textFormat )
-{
-    d_data->text = text;
-    d_data->textEngine = textEngine( text, textFormat );
-    d_layoutCache->invalidate();
-}
-
-/*!
-   \return Text as QString.
-   \sa setText()
-*/
-QString QwtText::text() const
-{
-    return d_data->text;
-}
-
-/*!
-   \brief Change the render flags
-
-   The default setting is Qt::AlignCenter
-
-   \param renderFlags Bitwise OR of the flags used like in QPainter::drawText()
-
-   \sa renderFlags(), QwtTextEngine::draw()
-   \note Some renderFlags might have no effect, depending on the text format.
-*/
-void QwtText::setRenderFlags( int renderFlags )
-{
-    if ( renderFlags != d_data->renderFlags )
-    {
-        d_data->renderFlags = renderFlags;
-        d_layoutCache->invalidate();
-    }
-}
-
-/*!
-   \return Render flags
-   \sa setRenderFlags()
-*/
-int QwtText::renderFlags() const
-{
-    return d_data->renderFlags;
-}
-
-/*!
-   Set the font.
-
-   \param font Font
-   \note Setting the font might have no effect, when
-         the text contains control sequences for setting fonts.
-*/
-void QwtText::setFont( const QFont &font )
-{
-    d_data->font = font;
-    setPaintAttribute( PaintUsingTextFont );
-}
-
-//! Return the font.
-QFont QwtText::font() const
-{
-    return d_data->font;
-}
-
-/*!
-   Return the font of the text, if it has one.
-   Otherwise return defaultFont.
-
-   \param defaultFont Default font
-   \return Font used for drawing the text
-
-   \sa setFont(), font(), PaintAttributes
-*/
-QFont QwtText::usedFont( const QFont &defaultFont ) const
-{
-    if ( d_data->paintAttributes & PaintUsingTextFont )
-        return d_data->font;
-
-    return defaultFont;
-}
-
-/*!
-   Set the pen color used for drawing the text.
-
-   \param color Color
-   \note Setting the color might have no effect, when
-         the text contains control sequences for setting colors.
-*/
-void QwtText::setColor( const QColor &color )
-{
-    d_data->color = color;
-    setPaintAttribute( PaintUsingTextColor );
-}
-
-//! Return the pen color, used for painting the text
-QColor QwtText::color() const
-{
-    return d_data->color;
-}
-
-/*!
-  Return the color of the text, if it has one.
-  Otherwise return defaultColor.
-
-  \param defaultColor Default color
-  \return Color used for drawing the text
-
-  \sa setColor(), color(), PaintAttributes
-*/
-QColor QwtText::usedColor( const QColor &defaultColor ) const
-{
-    if ( d_data->paintAttributes & PaintUsingTextColor )
-        return d_data->color;
-
-    return defaultColor;
-}
-
-/*!
-  Set the radius for the corners of the border frame
-
-  \param radius Radius of a rounded corner
-  \sa borderRadius(), setBorderPen(), setBackgroundBrush()
-*/
-void QwtText::setBorderRadius( double radius )
-{
-    d_data->borderRadius = qMax( 0.0, radius );
-}
-
-/*!
-  \return Radius for the corners of the border frame
-  \sa setBorderRadius(), borderPen(), backgroundBrush()
-*/
-double QwtText::borderRadius() const
-{
-    return d_data->borderRadius;
-}
-
-/*!
-   Set the background pen
-
-   \param pen Background pen
-   \sa borderPen(), setBackgroundBrush()
-*/
-void QwtText::setBorderPen( const QPen &pen )
-{
-    d_data->borderPen = pen;
-    setPaintAttribute( PaintBackground );
-}
-
-/*!
-   \return Background pen
-   \sa setBorderPen(), backgroundBrush()
-*/
-QPen QwtText::borderPen() const
-{
-    return d_data->borderPen;
-}
-
-/*!
-   Set the background brush
-
-   \param brush Background brush
-   \sa backgroundBrush(), setBorderPen()
-*/
-void QwtText::setBackgroundBrush( const QBrush &brush )
-{
-    d_data->backgroundBrush = brush;
-    setPaintAttribute( PaintBackground );
-}
-
-/*!
-   \return Background brush
-   \sa setBackgroundBrush(), borderPen()
-*/
-QBrush QwtText::backgroundBrush() const
-{
-    return d_data->backgroundBrush;
-}
-
-/*!
-   Change a paint attribute
-
-   \param attribute Paint attribute
-   \param on On/Off
-
-   \note Used by setFont(), setColor(),
-         setBorderPen() and setBackgroundBrush()
-   \sa testPaintAttribute()
-*/
-void QwtText::setPaintAttribute( PaintAttribute attribute, bool on )
-{
-    if ( on )
-        d_data->paintAttributes |= attribute;
-    else
-        d_data->paintAttributes &= ~attribute;
-}
-
-/*!
-   Test a paint attribute
-
-   \param attribute Paint attribute
-   \return true, if attribute is enabled
-
-   \sa setPaintAttribute()
-*/
-bool QwtText::testPaintAttribute( PaintAttribute attribute ) const
-{
-    return d_data->paintAttributes & attribute;
-}
-
-/*!
-   Change a layout attribute
-
-   \param attribute Layout attribute
-   \param on On/Off
-   \sa testLayoutAttribute()
-*/
-void QwtText::setLayoutAttribute( LayoutAttribute attribute, bool on )
-{
-    if ( on )
-        d_data->layoutAttributes |= attribute;
-    else
-        d_data->layoutAttributes &= ~attribute;
-}
-
-/*!
-   Test a layout attribute
-
-   \param attribute Layout attribute
-   \return true, if attribute is enabled
-
-   \sa setLayoutAttribute()
-*/
-bool QwtText::testLayoutAttribute( LayoutAttribute attribute ) const
-{
-    return d_data->layoutAttributes | attribute;
-}
-
-/*!
-   Find the height for a given width
-
-   \param defaultFont Font, used for the calculation if the text has no font
-   \param width Width
-
-   \return Calculated height
-*/
-double QwtText::heightForWidth( double width, const QFont &defaultFont ) const
-{
-    // We want to calculate in screen metrics. So
-    // we need a font that uses screen metrics
-
-    const QFont font( usedFont( defaultFont ), QApplication::desktop() );
-
-    double h = 0;
-
-    if ( d_data->layoutAttributes & MinimumLayout )
-    {
-        double left, right, top, bottom;
-        d_data->textEngine->textMargins( font, d_data->text,
-            left, right, top, bottom );
-
-        h = d_data->textEngine->heightForWidth(
-            font, d_data->renderFlags, d_data->text,
-            width + left + right );
-
-        h -= top + bottom;
-    }
-    else
-    {
-        h = d_data->textEngine->heightForWidth(
-            font, d_data->renderFlags, d_data->text, width );
-    }
-
-    return h;
-}
-
-/*!
-   Returns the size, that is needed to render text
-
-   \param defaultFont Font of the text
-   \return Calculated size
-*/
-QSizeF QwtText::textSize( const QFont &defaultFont ) const
-{
-    // We want to calculate in screen metrics. So
-    // we need a font that uses screen metrics
-
-    const QFont font( usedFont( defaultFont ), QApplication::desktop() );
-
-    if ( !d_layoutCache->textSize.isValid()
-        || d_layoutCache->font != font )
-    {
-        d_layoutCache->textSize = d_data->textEngine->textSize(
-            font, d_data->renderFlags, d_data->text );
-        d_layoutCache->font = font;
-    }
-
-    QSizeF sz = d_layoutCache->textSize;
-
-    if ( d_data->layoutAttributes & MinimumLayout )
-    {
-        double left, right, top, bottom;
-        d_data->textEngine->textMargins( font, d_data->text,
-            left, right, top, bottom );
-        sz -= QSizeF( left + right, top + bottom );
-    }
-
-    return sz;
-}
-
-/*!
-   Draw a text into a rectangle
-
-   \param painter Painter
-   \param rect Rectangle
-*/
-void QwtText::draw( QPainter *painter, const QRectF &rect ) const
-{
-    if ( d_data->paintAttributes & PaintBackground )
-    {
-        if ( d_data->borderPen != Qt::NoPen ||
-            d_data->backgroundBrush != Qt::NoBrush )
-        {
-            painter->save();
-
-            painter->setPen( d_data->borderPen );
-            painter->setBrush( d_data->backgroundBrush );
-
-            if ( d_data->borderRadius == 0 )
-            {
-                QwtPainter::drawRect( painter, rect );
-            }
-            else
-            {
-                painter->setRenderHint( QPainter::Antialiasing, true );
-                painter->drawRoundedRect( rect,
-                    d_data->borderRadius, d_data->borderRadius );
-            }
-
-            painter->restore();
-        }
-    }
-
-    painter->save();
-
-    if ( d_data->paintAttributes & PaintUsingTextFont )
-    {
-        painter->setFont( d_data->font );
-    }
-
-    if ( d_data->paintAttributes & PaintUsingTextColor )
-    {
-        if ( d_data->color.isValid() )
-            painter->setPen( d_data->color );
-    }
-
-    QRectF expandedRect = rect;
-    if ( d_data->layoutAttributes & MinimumLayout )
-    {
-        // We want to calculate in screen metrics. So
-        // we need a font that uses screen metrics
-
-        const QFont font( painter->font(), QApplication::desktop() );
-
-        double left, right, top, bottom;
-        d_data->textEngine->textMargins(
-            font, d_data->text, left, right, top, bottom );
-
-        expandedRect.setTop( rect.top() - top );
-        expandedRect.setBottom( rect.bottom() + bottom );
-        expandedRect.setLeft( rect.left() - left );
-        expandedRect.setRight( rect.right() + right );
-    }
-
-    d_data->textEngine->draw( painter, expandedRect,
-        d_data->renderFlags, d_data->text );
-
-    painter->restore();
-}
-
-/*!
-   Find the text engine for a text format
-
-   In case of QwtText::AutoText the first text engine
-   (beside QwtPlainTextEngine) is returned, where QwtTextEngine::mightRender
-   returns true. If there is none QwtPlainTextEngine is returned.
-
-   If no text engine is registered for the format QwtPlainTextEngine
-   is returnd.
-
-   \param text Text, needed in case of AutoText
-   \param format Text format
-
-   \return Corresponding text engine
-*/
-const QwtTextEngine *QwtText::textEngine( const QString &text,
-    QwtText::TextFormat format )
-{
-    return QwtTextEngineDict::dict().textEngine( text, format );
-}
-
-/*!
-   Assign/Replace a text engine for a text format
-
-   With setTextEngine it is possible to extend Qwt with
-   other types of text formats.
-
-   For QwtText::PlainText it is not allowed to assign a engine == NULL.
-
-   \param format Text format
-   \param engine Text engine
-
-   \sa QwtMathMLTextEngine
-   \warning Using QwtText::AutoText does nothing.
-*/
-void QwtText::setTextEngine( QwtText::TextFormat format,
-    QwtTextEngine *engine )
-{
-    QwtTextEngineDict::dict().setTextEngine( format, engine );
-}
-
-/*!
-   \brief Find the text engine for a text format
-
-   textEngine can be used to find out if a text format is supported.
-
-   \param format Text format
-   \return The text engine, or NULL if no engine is available.
-*/
-const QwtTextEngine *QwtText::textEngine( QwtText::TextFormat format )
-{
-    return  QwtTextEngineDict::dict().textEngine( format );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text.h
deleted file mode 100644
index f26b22b00dd1bae312d1c9a830e8624ce403c288..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_TEXT_H
-#define QWT_TEXT_H
-
-#include "qwt_global.h"
-#include <qstring.h>
-#include <qsize.h>
-#include <qfont.h>
-#include <qmetatype.h>
-
-class QColor;
-class QPen;
-class QBrush;
-class QRectF;
-class QPainter;
-class QwtTextEngine;
-
-/*!
-  \brief A class representing a text
-
-  A QwtText is a text including a set of attributes how to render it.
-
-  - Format\n
-    A text might include control sequences (f.e tags) describing
-    how to render it. Each format (f.e MathML, TeX, Qt Rich Text)
-    has its own set of control sequences, that can be handles by
-    a special QwtTextEngine for this format.
-  - Background\n
-    A text might have a background, defined by a QPen and QBrush
-    to improve its visibility. The corners of the background might
-    be rounded.
-  - Font\n
-    A text might have an individual font.
-  - Color\n
-    A text might have an individual color.
-  - Render Flags\n
-    Flags from Qt::AlignmentFlag and Qt::TextFlag used like in
-    QPainter::drawText().
-
-  \sa QwtTextEngine, QwtTextLabel
-*/
-
-class QWT_EXPORT QwtText
-{
-public:
-
-    /*!
-      \brief Text format
-
-      The text format defines the QwtTextEngine, that is used to render
-      the text.
-
-      \sa QwtTextEngine, setTextEngine()
-    */
-
-    enum TextFormat
-    {
-        /*!
-          The text format is determined using QwtTextEngine::mightRender() for
-          all available text engines in increasing order > PlainText.
-          If none of the text engines can render the text is rendered
-          like QwtText::PlainText.
-         */
-        AutoText = 0,
-
-        //! Draw the text as it is, using a QwtPlainTextEngine.
-        PlainText,
-
-        //! Use the Scribe framework (Qt Rich Text) to render the text.
-        RichText,
-
-        /*!
-          Use a MathML (http://en.wikipedia.org/wiki/MathML) render engine
-          to display the text. The Qwt MathML extension offers such an engine
-          based on the MathML renderer of the Qt solutions package. 
-          To enable MathML support the following code needs to be added to the
-          application:
-\verbatim QwtText::setTextEngine(QwtText::MathMLText, new QwtMathMLTextEngine()); \endverbatim
-         */
-        MathMLText,
-
-        /*!
-          Use a TeX (http://en.wikipedia.org/wiki/TeX) render engine
-          to display the text ( not implemented yet ).
-         */
-        TeXText,
-
-        /*!
-          The number of text formats can be extended using setTextEngine.
-          Formats >= QwtText::OtherFormat are not used by Qwt.
-         */
-        OtherFormat = 100
-    };
-
-    /*!
-      \brief Paint Attributes
-
-      Font and color and background are optional attributes of a QwtText.
-      The paint attributes hold the information, if they are set.
-    */
-    enum PaintAttribute
-    {
-        //! The text has an individual font.
-        PaintUsingTextFont = 0x01,
-
-        //! The text has an individual color.
-        PaintUsingTextColor = 0x02,
-
-        //! The text has an individual background.
-        PaintBackground = 0x04
-    };
-
-    //! Paint attributes
-    typedef QFlags<PaintAttribute> PaintAttributes;
-
-    /*!
-      \brief Layout Attributes
-      The layout attributes affects some aspects of the layout of the text.
-    */
-    enum LayoutAttribute
-    {
-        /*!
-          Layout the text without its margins. This mode is useful if a
-          text needs to be aligned accurately, like the tick labels of a scale.
-          If QwtTextEngine::textMargins is not implemented for the format
-          of the text, MinimumLayout has no effect.
-         */
-        MinimumLayout = 0x01
-    };
-
-    //! Layout attributes
-    typedef QFlags<LayoutAttribute> LayoutAttributes;
-
-    QwtText( const QString & = QString::null,
-             TextFormat textFormat = AutoText );
-    QwtText( const QwtText & );
-    ~QwtText();
-
-    QwtText &operator=( const QwtText & );
-
-    bool operator==( const QwtText & ) const;
-    bool operator!=( const QwtText & ) const;
-
-    void setText( const QString &,
-        QwtText::TextFormat textFormat = AutoText );
-    QString text() const;
-
-    bool isNull() const;
-    bool isEmpty() const;
-
-    void setFont( const QFont & );
-    QFont font() const;
-
-    QFont usedFont( const QFont & ) const;
-
-    void setRenderFlags( int flags );
-    int renderFlags() const;
-
-    void setColor( const QColor & );
-    QColor color() const;
-
-    QColor usedColor( const QColor & ) const;
-
-    void setBorderRadius( double );
-    double borderRadius() const;
-
-    void setBorderPen( const QPen & );
-    QPen borderPen() const;
-
-    void setBackgroundBrush( const QBrush & );
-    QBrush backgroundBrush() const;
-
-    void setPaintAttribute( PaintAttribute, bool on = true );
-    bool testPaintAttribute( PaintAttribute ) const;
-
-    void setLayoutAttribute( LayoutAttribute, bool on = true );
-    bool testLayoutAttribute( LayoutAttribute ) const;
-
-    double heightForWidth( double width, const QFont & = QFont() ) const;
-    QSizeF textSize( const QFont & = QFont() ) const;
-
-    void draw( QPainter *painter, const QRectF &rect ) const;
-
-    static const QwtTextEngine *textEngine( 
-        const QString &text, QwtText::TextFormat = AutoText );
-
-    static const QwtTextEngine *textEngine( QwtText::TextFormat );
-    static void setTextEngine( QwtText::TextFormat, QwtTextEngine * );
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-
-    class LayoutCache;
-    LayoutCache *d_layoutCache;
-};
-
-//! \return text().isNull()
-inline bool QwtText::isNull() const
-{
-    return text().isNull();
-}
-
-//! \return text().isEmpty()
-inline bool QwtText::isEmpty() const
-{
-    return text().isEmpty();
-}
-
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtText::PaintAttributes )
-Q_DECLARE_OPERATORS_FOR_FLAGS( QwtText::LayoutAttributes )
-
-Q_DECLARE_METATYPE( QwtText )
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_engine.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_engine.cpp
deleted file mode 100644
index 303548bb8bbac94b24eea86e441916eae4ba210b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_engine.cpp
+++ /dev/null
@@ -1,345 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_text_engine.h"
-#include "qwt_math.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-#include <qpixmap.h>
-#include <qimage.h>
-#include <qmap.h>
-#include <qwidget.h>
-#include <qtextobject.h>
-#include <qtextdocument.h>
-#include <qabstracttextdocumentlayout.h>
-
-static QString taggedRichText( const QString &text, int flags )
-{
-    QString richText = text;
-
-    // By default QSimpleRichText is Qt::AlignLeft
-    if ( flags & Qt::AlignJustify )
-    {
-        richText.prepend( QString::fromLatin1( "<div align=\"justify\">" ) );
-        richText.append( QString::fromLatin1( "</div>" ) );
-    }
-    else if ( flags & Qt::AlignRight )
-    {
-        richText.prepend( QString::fromLatin1( "<div align=\"right\">" ) );
-        richText.append( QString::fromLatin1( "</div>" ) );
-    }
-    else if ( flags & Qt::AlignHCenter )
-    {
-        richText.prepend( QString::fromLatin1( "<div align=\"center\">" ) );
-        richText.append( QString::fromLatin1( "</div>" ) );
-    }
-
-    return richText;
-}
-
-class QwtRichTextDocument: public QTextDocument
-{
-public:
-    QwtRichTextDocument( const QString &text, int flags, const QFont &font )
-    {
-        setUndoRedoEnabled( false );
-        setDefaultFont( font );
-        setHtml( text );
-
-        // make sure we have a document layout
-        ( void )documentLayout();
-
-        QTextOption option = defaultTextOption();
-        if ( flags & Qt::TextWordWrap )
-            option.setWrapMode( QTextOption::WordWrap );
-        else
-            option.setWrapMode( QTextOption::NoWrap );
-
-        option.setAlignment( static_cast<Qt::Alignment>( flags ) );
-        setDefaultTextOption( option );
-
-        QTextFrame *root = rootFrame();
-        QTextFrameFormat fm = root->frameFormat();
-        fm.setBorder( 0 );
-        fm.setMargin( 0 );
-        fm.setPadding( 0 );
-        fm.setBottomMargin( 0 );
-        fm.setLeftMargin( 0 );
-        root->setFrameFormat( fm );
-
-        adjustSize();
-    }
-};
-
-class QwtPlainTextEngine::PrivateData
-{
-public:
-    int effectiveAscent( const QFont &font ) const
-    {
-        const QString fontKey = font.key();
-
-        QMap<QString, int>::const_iterator it =
-            d_ascentCache.find( fontKey );
-        if ( it == d_ascentCache.end() )
-        {
-            int ascent = findAscent( font );
-            it = d_ascentCache.insert( fontKey, ascent );
-        }
-
-        return ( *it );
-    }
-
-private:
-    int findAscent( const QFont &font ) const
-    {
-        static const QString dummy( "E" );
-        static const QColor white( Qt::white );
-
-        const QFontMetrics fm( font );
-        QPixmap pm( fm.width( dummy ), fm.height() );
-        pm.fill( white );
-
-        QPainter p( &pm );
-        p.setFont( font );
-        p.drawText( 0, 0,  pm.width(), pm.height(), 0, dummy );
-        p.end();
-
-        const QImage img = pm.toImage();
-
-        int row = 0;
-        for ( row = 0; row < img.height(); row++ )
-        {
-            const QRgb *line = reinterpret_cast<const QRgb *>( 
-                img.scanLine( row ) );
-
-            const int w = pm.width();
-            for ( int col = 0; col < w; col++ )
-            {
-                if ( line[col] != white.rgb() )
-                    return fm.ascent() - row + 1;
-            }
-        }
-
-        return fm.ascent();
-    }
-
-    mutable QMap<QString, int> d_ascentCache;
-};
-
-//! Constructor
-QwtTextEngine::QwtTextEngine()
-{
-}
-
-//! Destructor
-QwtTextEngine::~QwtTextEngine()
-{
-}
-
-//! Constructor
-QwtPlainTextEngine::QwtPlainTextEngine()
-{
-    d_data = new PrivateData;
-}
-
-//! Destructor
-QwtPlainTextEngine::~QwtPlainTextEngine()
-{
-    delete d_data;
-}
-
-/*!
-   Find the height for a given width
-
-   \param font Font of the text
-   \param flags Bitwise OR of the flags used like in QPainter::drawText
-   \param text Text to be rendered
-   \param width Width
-
-   \return Calculated height
-*/
-double QwtPlainTextEngine::heightForWidth( const QFont& font, int flags,
-        const QString& text, double width ) const
-{
-    const QFontMetricsF fm( font );
-    const QRectF rect = fm.boundingRect(
-        QRectF( 0, 0, width, QWIDGETSIZE_MAX ), flags, text );
-
-    return rect.height();
-}
-
-/*!
-  Returns the size, that is needed to render text
-
-  \param font Font of the text
-  \param flags Bitwise OR of the flags used like in QPainter::drawText
-  \param text Text to be rendered
-
-  \return Calculated size
-*/
-QSizeF QwtPlainTextEngine::textSize( const QFont &font,
-    int flags, const QString& text ) const
-{
-    const QFontMetricsF fm( font );
-    const QRectF rect = fm.boundingRect(
-        QRectF( 0, 0, QWIDGETSIZE_MAX, QWIDGETSIZE_MAX ), flags, text );
-
-    return rect.size();
-}
-
-/*!
-  Return margins around the texts
-
-  \param font Font of the text
-  \param left Return 0
-  \param right Return 0
-  \param top Return value for the top margin
-  \param bottom Return value for the bottom margin
-*/
-void QwtPlainTextEngine::textMargins( const QFont &font, const QString &,
-    double &left, double &right, double &top, double &bottom ) const
-{
-    left = right = top = 0;
-
-    const QFontMetricsF fm( font );
-    top = fm.ascent() - d_data->effectiveAscent( font );
-    bottom = fm.descent();
-}
-
-/*!
-  \brief Draw the text in a clipping rectangle
-
-  A wrapper for QPainter::drawText.
-
-  \param painter Painter
-  \param rect Clipping rectangle
-  \param flags Bitwise OR of the flags used like in QPainter::drawText
-  \param text Text to be rendered
-*/
-void QwtPlainTextEngine::draw( QPainter *painter, const QRectF &rect,
-    int flags, const QString& text ) const
-{
-    QwtPainter::drawText( painter, rect, flags, text );
-}
-
-/*!
-  Test if a string can be rendered by this text engine.
-  \return Always true. All texts can be rendered by QwtPlainTextEngine
-*/
-bool QwtPlainTextEngine::mightRender( const QString & ) const
-{
-    return true;
-}
-
-#ifndef QT_NO_RICHTEXT
-
-//! Constructor
-QwtRichTextEngine::QwtRichTextEngine()
-{
-}
-
-/*!
-   Find the height for a given width
-
-   \param font Font of the text
-   \param flags Bitwise OR of the flags used like in QPainter::drawText()
-   \param text Text to be rendered
-   \param width Width
-
-   \return Calculated height
-*/
-double QwtRichTextEngine::heightForWidth( const QFont& font, int flags,
-        const QString& text, double width ) const
-{
-    QwtRichTextDocument doc( text, flags, font );
-
-    doc.setPageSize( QSizeF( width, QWIDGETSIZE_MAX ) );
-    return doc.documentLayout()->documentSize().height();
-}
-
-/*!
-  Returns the size, that is needed to render text
-
-  \param font Font of the text
-  \param flags Bitwise OR of the flags used like in QPainter::drawText()
-  \param text Text to be rendered
-
-  \return Calculated size
-*/
-
-QSizeF QwtRichTextEngine::textSize( const QFont &font,
-    int flags, const QString& text ) const
-{
-    QwtRichTextDocument doc( text, flags, font );
-
-    QTextOption option = doc.defaultTextOption();
-    if ( option.wrapMode() != QTextOption::NoWrap )
-    {
-        option.setWrapMode( QTextOption::NoWrap );
-        doc.setDefaultTextOption( option );
-        doc.adjustSize();
-    }
-
-    return doc.size();
-}
-
-/*!
-  Draw the text in a clipping rectangle
-
-  \param painter Painter
-  \param rect Clipping rectangle
-  \param flags Bitwise OR of the flags like in for QPainter::drawText()
-  \param text Text to be rendered
-*/
-void QwtRichTextEngine::draw( QPainter *painter, const QRectF &rect,
-    int flags, const QString& text ) const
-{
-    QwtRichTextDocument doc( text, flags, painter->font() );
-    QwtPainter::drawSimpleRichText( painter, rect, flags, doc );
-}
-
-/*!
-   Wrap text into <div align=...> </div> tags according flags
-
-   \param text Text
-   \param flags Bitwise OR of the flags like in for QPainter::drawText()
-
-   \return Tagged text
-*/
-QString QwtRichTextEngine::taggedText( const QString &text, int flags ) const
-{
-    return taggedRichText( text, flags );
-}
-
-/*!
-  Test if a string can be rendered by this text engine
-
-  \param text Text to be tested
-  \return Qt::mightBeRichText(text);
-*/
-bool QwtRichTextEngine::mightRender( const QString &text ) const
-{
-    return Qt::mightBeRichText( text );
-}
-
-/*!
-  Return margins around the texts
-
-  \param left Return 0
-  \param right Return 0
-  \param top Return 0
-  \param bottom Return 0
-*/
-void QwtRichTextEngine::textMargins( const QFont &, const QString &,
-    double &left, double &right, double &top, double &bottom ) const
-{
-    left = right = top = bottom = 0;
-}
-
-#endif // !QT_NO_RICHTEXT
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_engine.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_engine.h
deleted file mode 100644
index 9d73aadb02dce00dc738428e8f6f1ee5f6fdc726..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_engine.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_TEXT_ENGINE_H
-#define QWT_TEXT_ENGINE_H 1
-
-#include "qwt_global.h"
-#include <qsize.h>
-
-class QFont;
-class QRectF;
-class QString;
-class QPainter;
-
-/*!
-  \brief Abstract base class for rendering text strings
-
-  A text engine is responsible for rendering texts for a
-  specific text format. They are used by QwtText to render a text.
-
-  QwtPlainTextEngine and QwtRichTextEngine are part of the Qwt library.
-  The implementation of QwtMathMLTextEngine uses code from the 
-  Qt solution package. Because of license implications it is built into
-  a separate library.
- 
-  \sa QwtText::setTextEngine()
-*/
-
-class QWT_EXPORT QwtTextEngine
-{
-public:
-    virtual ~QwtTextEngine();
-
-    /*!
-      Find the height for a given width
-
-      \param font Font of the text
-      \param flags Bitwise OR of the flags used like in QPainter::drawText
-      \param text Text to be rendered
-      \param width Width
-
-      \return Calculated height
-     */
-    virtual double heightForWidth( const QFont &font, int flags,
-        const QString &text, double width ) const = 0;
-
-    /*!
-      Returns the size, that is needed to render text
-
-      \param font Font of the text
-      \param flags Bitwise OR of the flags like in for QPainter::drawText
-      \param text Text to be rendered
-
-      \return Calculated size
-     */
-    virtual QSizeF textSize( const QFont &font, int flags,
-        const QString &text ) const = 0;
-
-    /*!
-      Test if a string can be rendered by this text engine
-
-      \param text Text to be tested
-      \return true, if it can be rendered
-     */
-    virtual bool mightRender( const QString &text ) const = 0;
-
-    /*!
-      Return margins around the texts
-
-      The textSize might include margins around the
-      text, like QFontMetrics::descent(). In situations
-      where texts need to be aligned in detail, knowing
-      these margins might improve the layout calculations.
-
-      \param font Font of the text
-      \param text Text to be rendered
-      \param left Return value for the left margin
-      \param right Return value for the right margin
-      \param top Return value for the top margin
-      \param bottom Return value for the bottom margin
-     */
-    virtual void textMargins( const QFont &font, const QString &text,
-        double &left, double &right, double &top, double &bottom ) const = 0;
-
-    /*!
-      Draw the text in a clipping rectangle
-
-      \param painter Painter
-      \param rect Clipping rectangle
-      \param flags Bitwise OR of the flags like in for QPainter::drawText()
-      \param text Text to be rendered
-     */
-    virtual void draw( QPainter *painter, const QRectF &rect,
-        int flags, const QString &text ) const = 0;
-
-protected:
-    QwtTextEngine();
-};
-
-
-/*!
-  \brief A text engine for plain texts
-
-  QwtPlainTextEngine renders texts using the basic Qt classes
-  QPainter and QFontMetrics.
-*/
-class QWT_EXPORT QwtPlainTextEngine: public QwtTextEngine
-{
-public:
-    QwtPlainTextEngine();
-    virtual ~QwtPlainTextEngine();
-
-    virtual double heightForWidth( const QFont &font, int flags,
-        const QString &text, double width ) const;
-
-    virtual QSizeF textSize( const QFont &font, int flags,
-        const QString &text ) const;
-
-    virtual void draw( QPainter *painter, const QRectF &rect,
-        int flags, const QString &text ) const;
-
-    virtual bool mightRender( const QString & ) const;
-
-    virtual void textMargins( const QFont &, const QString &,
-        double &left, double &right, double &top, double &bottom ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-
-#ifndef QT_NO_RICHTEXT
-
-/*!
-  \brief A text engine for Qt rich texts
-
-  QwtRichTextEngine renders Qt rich texts using the classes
-  of the Scribe framework of Qt.
-*/
-class QWT_EXPORT QwtRichTextEngine: public QwtTextEngine
-{
-public:
-    QwtRichTextEngine();
-
-    virtual double heightForWidth( const QFont &font, int flags,
-        const QString &text, double width ) const;
-
-    virtual QSizeF textSize( const QFont &font, int flags,
-        const QString &text ) const;
-
-    virtual void draw( QPainter *painter, const QRectF &rect,
-        int flags, const QString &text ) const;
-
-    virtual bool mightRender( const QString & ) const;
-
-    virtual void textMargins( const QFont &, const QString &,
-        double &left, double &right, double &top, double &bottom ) const;
-
-private:
-    QString taggedText( const QString &, int flags ) const;
-};
-
-#endif // !QT_NO_RICHTEXT
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_label.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_label.cpp
deleted file mode 100644
index c07fd28c6563270d83dc62d1944412184e66aa82..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_label.cpp
+++ /dev/null
@@ -1,324 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_text_label.h"
-#include "qwt_text.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-#include <qevent.h>
-#include <qmath.h>
-
-class QwtTextLabel::PrivateData
-{
-public:
-    PrivateData():
-        indent( 4 ),
-        margin( 0 )
-    {
-    }
-
-    int indent;
-    int margin;
-    QwtText text;
-};
-
-/*!
-  Constructs an empty label.
-  \param parent Parent widget
-*/
-QwtTextLabel::QwtTextLabel( QWidget *parent ):
-    QFrame( parent )
-{
-    init();
-}
-
-/*!
-  Constructs a label that displays the text, text
-  \param parent Parent widget
-  \param text Text
-*/
-QwtTextLabel::QwtTextLabel( const QwtText &text, QWidget *parent ):
-    QFrame( parent )
-{
-    init();
-    d_data->text = text;
-}
-
-//! Destructor
-QwtTextLabel::~QwtTextLabel()
-{
-    delete d_data;
-}
-
-void QwtTextLabel::init()
-{
-    d_data = new PrivateData();
-    setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
-}
-
-/*!
-   Interface for the designer plugin - does the same as setText()
-   \sa plainText()
- */
-void QwtTextLabel::setPlainText( const QString &text )
-{
-    setText( QwtText( text ) );
-}
-
-/*!
-   Interface for the designer plugin
-
-   \return Text as plain text
-   \sa setPlainText(), text()
- */
-QString QwtTextLabel::plainText() const
-{
-    return d_data->text.text();
-}
-
-/*!
-   Change the label's text, keeping all other QwtText attributes
-   \param text New text
-   \param textFormat Format of text
-
-  \sa QwtText
-*/
-void QwtTextLabel::setText( const QString &text, 
-    QwtText::TextFormat textFormat )
-{
-    d_data->text.setText( text, textFormat );
-
-    update();
-    updateGeometry();
-}
-
-/*!
-   Change the label's text
-   \param text New text
-*/
-void QwtTextLabel::setText( const QwtText &text )
-{
-    d_data->text = text;
-
-    update();
-    updateGeometry();
-}
-
-//! Return the text
-const QwtText &QwtTextLabel::text() const
-{
-    return d_data->text;
-}
-
-//! Clear the text and all QwtText attributes
-void QwtTextLabel::clear()
-{
-    d_data->text = QwtText();
-
-    update();
-    updateGeometry();
-}
-
-//! Return label's text indent in pixels
-int QwtTextLabel::indent() const
-{
-    return d_data->indent;
-}
-
-/*!
-  Set label's text indent in pixels
-  \param indent Indentation in pixels
-*/
-void QwtTextLabel::setIndent( int indent )
-{
-    if ( indent < 0 )
-        indent = 0;
-
-    d_data->indent = indent;
-
-    update();
-    updateGeometry();
-}
-
-//! Return label's text margin in pixels
-int QwtTextLabel::margin() const
-{
-    return d_data->margin;
-}
-
-/*!
-  Set label's margin in pixels
-  \param margin Margin in pixels
-*/
-void QwtTextLabel::setMargin( int margin )
-{
-    d_data->margin = margin;
-
-    update();
-    updateGeometry();
-}
-
-//! Return a size hint
-QSize QwtTextLabel::sizeHint() const
-{
-    return minimumSizeHint();
-}
-
-//! Return a minimum size hint
-QSize QwtTextLabel::minimumSizeHint() const
-{
-    QSizeF sz = d_data->text.textSize( font() );
-
-    int mw = 2 * ( frameWidth() + d_data->margin );
-    int mh = mw;
-
-    int indent = d_data->indent;
-    if ( indent <= 0 )
-        indent = defaultIndent();
-
-    if ( indent > 0 )
-    {
-        const int align = d_data->text.renderFlags();
-        if ( align & Qt::AlignLeft || align & Qt::AlignRight )
-            mw += d_data->indent;
-        else if ( align & Qt::AlignTop || align & Qt::AlignBottom )
-            mh += d_data->indent;
-    }
-
-    sz += QSizeF( mw, mh );
-
-    return QSize( qCeil( sz.width() ), qCeil( sz.height() ) );
-}
-
-/*!
-   \param width Width
-   \return Preferred height for this widget, given the width.
-*/
-int QwtTextLabel::heightForWidth( int width ) const
-{
-    const int renderFlags = d_data->text.renderFlags();
-
-    int indent = d_data->indent;
-    if ( indent <= 0 )
-        indent = defaultIndent();
-
-    width -= 2 * frameWidth();
-    if ( renderFlags & Qt::AlignLeft || renderFlags & Qt::AlignRight )
-        width -= indent;
-
-    int height = qCeil( d_data->text.heightForWidth( width, font() ) );
-    if ( ( renderFlags & Qt::AlignTop ) || ( renderFlags & Qt::AlignBottom ) )
-        height += indent;
-
-    height += 2 * frameWidth();
-
-    return height;
-}
-
-/*!
-   Qt paint event
-   \param event Paint event
-*/
-void QwtTextLabel::paintEvent( QPaintEvent *event )
-{
-    QPainter painter( this );
-
-    if ( !contentsRect().contains( event->rect() ) )
-    {
-        painter.save();
-        painter.setClipRegion( event->region() & frameRect() );
-        drawFrame( &painter );
-        painter.restore();
-    }
-
-    painter.setClipRegion( event->region() & contentsRect() );
-
-    drawContents( &painter );
-}
-
-//! Redraw the text and focus indicator
-void QwtTextLabel::drawContents( QPainter *painter )
-{
-    const QRect r = textRect();
-    if ( r.isEmpty() )
-        return;
-
-    painter->setFont( font() );
-    painter->setPen( palette().color( QPalette::Active, QPalette::Text ) );
-
-    drawText( painter, QRectF( r ) );
-
-    if ( hasFocus() )
-    {
-        const int m = 2;
-
-        QRect focusRect = contentsRect().adjusted( m, m, -m + 1, -m + 1);
-
-        QwtPainter::drawFocusRect( painter, this, focusRect );
-    }
-}
-
-//! Redraw the text
-void QwtTextLabel::drawText( QPainter *painter, const QRectF &textRect )
-{
-    d_data->text.draw( painter, textRect );
-}
-
-/*!
-  Calculate geometry for the text in widget coordinates
-  \return Geometry for the text
-*/
-QRect QwtTextLabel::textRect() const
-{
-    QRect r = contentsRect();
-
-    if ( !r.isEmpty() && d_data->margin > 0 )
-    {
-        r.setRect( r.x() + d_data->margin, r.y() + d_data->margin,
-            r.width() - 2 * d_data->margin, r.height() - 2 * d_data->margin );
-    }
-
-    if ( !r.isEmpty() )
-    {
-        int indent = d_data->indent;
-        if ( indent <= 0 )
-            indent = defaultIndent();
-
-        if ( indent > 0 )
-        {
-            const int renderFlags = d_data->text.renderFlags();
-
-            if ( renderFlags & Qt::AlignLeft )
-                r.setX( r.x() + indent );
-            else if ( renderFlags & Qt::AlignRight )
-                r.setWidth( r.width() - indent );
-            else if ( renderFlags & Qt::AlignTop )
-                r.setY( r.y() + indent );
-            else if ( renderFlags & Qt::AlignBottom )
-                r.setHeight( r.height() - indent );
-        }
-    }
-
-    return r;
-}
-
-int QwtTextLabel::defaultIndent() const
-{
-    if ( frameWidth() <= 0 )
-        return 0;
-
-    QFont fnt;
-    if ( d_data->text.testPaintAttribute( QwtText::PaintUsingTextFont ) )
-        fnt = d_data->text.font();
-    else
-        fnt = font();
-
-    return QFontMetrics( fnt ).width( 'x' ) / 2;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_label.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_label.h
deleted file mode 100644
index 1fdd71b3488dec6da5981458e228b14114899aa7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_text_label.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_TEXT_LABEL_H
-#define QWT_TEXT_LABEL_H
-
-#include "qwt_global.h"
-#include "qwt_text.h"
-#include <qframe.h>
-
-class QString;
-class QPaintEvent;
-class QPainter;
-
-/*!
-   \brief A Widget which displays a QwtText
-*/
-
-class QWT_EXPORT QwtTextLabel : public QFrame
-{
-    Q_OBJECT
-
-    Q_PROPERTY( int indent READ indent WRITE setIndent )
-    Q_PROPERTY( int margin READ margin WRITE setMargin )
-    Q_PROPERTY( QString plainText READ plainText WRITE setPlainText )
-
-public:
-    explicit QwtTextLabel( QWidget *parent = NULL );
-    explicit QwtTextLabel( const QwtText &, QWidget *parent = NULL );
-    virtual ~QwtTextLabel();
-
-    void setPlainText( const QString & );
-    QString plainText() const;
-
-public Q_SLOTS:
-    void setText( const QString &,
-        QwtText::TextFormat textFormat = QwtText::AutoText );
-    virtual void setText( const QwtText & );
-
-    void clear();
-
-public:
-    const QwtText &text() const;
-
-    int indent() const;
-    void setIndent( int );
-
-    int margin() const;
-    void setMargin( int );
-
-    virtual QSize sizeHint() const;
-    virtual QSize minimumSizeHint() const;
-    virtual int heightForWidth( int ) const;
-
-    QRect textRect() const;
-
-    virtual void drawText( QPainter *, const QRectF & );
-
-protected:
-    virtual void paintEvent( QPaintEvent *e );
-    virtual void drawContents( QPainter * );
-
-private:
-    void init();
-    int defaultIndent() const;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_thermo.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_thermo.cpp
deleted file mode 100644
index 7249604ca46dee1c01024b5451608c1681e08440..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_thermo.cpp
+++ /dev/null
@@ -1,1005 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_thermo.h"
-#include "qwt_scale_engine.h"
-#include "qwt_scale_draw.h"
-#include "qwt_scale_map.h"
-#include "qwt_color_map.h"
-#include <qpainter.h>
-#include <qevent.h>
-#include <qdrawutil.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-#include <qmath.h>
-
-static inline void qwtDrawLine( QPainter *painter, int pos, 
-    const QColor &color, const QRect &pipeRect, const QRect &liquidRect,
-    Qt::Orientation orientation )
-{
-    painter->setPen( color );
-    if ( orientation == Qt::Horizontal )
-    {
-        if ( pos >= liquidRect.left() && pos < liquidRect.right() )
-            painter->drawLine( pos, pipeRect.top(), pos, pipeRect.bottom() );
-    }
-    else
-    {
-        if ( pos >= liquidRect.top() && pos < liquidRect.bottom() )
-            painter->drawLine( pipeRect.left(), pos, pipeRect.right(), pos );
-    }
-}
-
-QVector<double> qwtTickList( const QwtScaleDiv &scaleDiv )
-{
-    QVector<double> values;
-
-    double lowerLimit = scaleDiv.interval().minValue();
-    double upperLimit = scaleDiv.interval().maxValue();
-
-    if ( upperLimit < lowerLimit )
-        qSwap( lowerLimit, upperLimit );
-
-    values += lowerLimit;
-
-    for ( int tickType = QwtScaleDiv::MinorTick;
-        tickType < QwtScaleDiv::NTickTypes; tickType++ )
-    {
-        const QList<double> ticks = scaleDiv.ticks( tickType );
-
-        for ( int i = 0; i < ticks.count(); i++ )
-        {
-            const double v = ticks[i];
-            if ( v > lowerLimit && v < upperLimit )
-                values += v;
-        }       
-    }   
-
-    values += upperLimit;
-    
-    return values;
-}
-
-class QwtThermo::PrivateData
-{
-public:
-    PrivateData():
-        orientation( Qt::Vertical ),
-        scalePosition( QwtThermo::TrailingScale ),
-        spacing( 3 ),
-        borderWidth( 2 ),
-        pipeWidth( 10 ),
-        alarmLevel( 0.0 ),
-        alarmEnabled( false ),
-        autoFillPipe( true ),
-        originMode( QwtThermo::OriginMinimum ),
-        origin( 0.0 ),
-        colorMap( NULL ),
-        value( 0.0 )
-    {
-        rangeFlags = QwtInterval::IncludeBorders;
-    }
-
-    ~PrivateData()
-    {
-        delete colorMap;
-    }
-
-    Qt::Orientation orientation;
-    QwtThermo::ScalePosition scalePosition;
-
-    int spacing;
-    int borderWidth;
-    int pipeWidth;
-
-    QwtInterval::BorderFlags rangeFlags;
-    double alarmLevel;
-    bool alarmEnabled;
-    bool autoFillPipe;
-    QwtThermo::OriginMode originMode;
-    double origin;
-
-    QwtColorMap *colorMap;
-
-    double value;
-};
-
-/*!
-  Constructor
-  \param parent Parent widget
-*/
-QwtThermo::QwtThermo( QWidget *parent ):
-    QwtAbstractScale( parent )
-{
-    d_data = new PrivateData;
-
-    QSizePolicy policy( QSizePolicy::MinimumExpanding, QSizePolicy::Fixed );
-    if ( d_data->orientation == Qt::Vertical )
-        policy.transpose();
-
-    setSizePolicy( policy );
-
-    setAttribute( Qt::WA_WState_OwnSizePolicy, false );
-    layoutThermo( true );
-}
-
-//! Destructor
-QwtThermo::~QwtThermo()
-{
-    delete d_data;
-}
-
-/*!
-  \brief Exclude/Include min/max values
-
-  According to the flags minValue() and maxValue()
-  are included/excluded from the pipe. In case of an
-  excluded value the corresponding tick is painted
-  1 pixel off of the pipeRect().
-
-  F.e. when a minimum
-  of 0.0 has to be displayed as an empty pipe the minValue()
-  needs to be excluded.
-
-  \param flags Range flags
-  \sa rangeFlags()
-*/
-void QwtThermo::setRangeFlags( QwtInterval::BorderFlags flags )
-{
-    if ( d_data->rangeFlags != flags )
-    {
-        d_data->rangeFlags = flags;
-        update();
-    }
-}
-
-/*!
-  \return Range flags
-  \sa setRangeFlags()
-*/
-QwtInterval::BorderFlags QwtThermo::rangeFlags() const
-{
-    return d_data->rangeFlags;
-}
-
-/*!
-  Set the current value.
-
-  \param value New Value
-  \sa value()
-*/
-void QwtThermo::setValue( double value )
-{
-    if ( d_data->value != value )
-    {
-        d_data->value = value;
-        update();
-    }
-}
-
-//! Return the value.
-double QwtThermo::value() const
-{
-    return d_data->value;
-}
-
-/*!
-  \brief Set a scale draw
-
-  For changing the labels of the scales, it
-  is necessary to derive from QwtScaleDraw and
-  overload QwtScaleDraw::label().
-
-  \param scaleDraw ScaleDraw object, that has to be created with
-                   new and will be deleted in ~QwtThermo() or the next
-                   call of setScaleDraw().
-*/
-void QwtThermo::setScaleDraw( QwtScaleDraw *scaleDraw )
-{
-    setAbstractScaleDraw( scaleDraw );
-    layoutThermo( true );
-}
-
-/*!
-   \return the scale draw of the thermo
-   \sa setScaleDraw()
-*/
-const QwtScaleDraw *QwtThermo::scaleDraw() const
-{
-    return static_cast<const QwtScaleDraw *>( abstractScaleDraw() );
-}
-
-/*!
-   \return the scale draw of the thermo
-   \sa setScaleDraw()
-*/
-QwtScaleDraw *QwtThermo::scaleDraw()
-{
-    return static_cast<QwtScaleDraw *>( abstractScaleDraw() );
-}
-
-/*!
-  Paint event handler
-  \param event Paint event
-*/
-void QwtThermo::paintEvent( QPaintEvent *event )
-{
-    QPainter painter( this );
-    painter.setClipRegion( event->region() );
-
-    QStyleOption opt;
-    opt.init(this);
-    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
-
-    const QRect tRect = pipeRect();
-
-    if ( !tRect.contains( event->rect() ) )
-    {
-        if ( d_data->scalePosition != QwtThermo::NoScale )
-            scaleDraw()->draw( &painter, palette() );
-    }
-
-    const int bw = d_data->borderWidth;
-
-    const QBrush brush = palette().brush( QPalette::Base );
-    qDrawShadePanel( &painter, 
-        tRect.adjusted( -bw, -bw, bw, bw ),
-        palette(), true, bw, 
-        d_data->autoFillPipe ? &brush : NULL );
-
-    drawLiquid( &painter, tRect );
-}
-
-/*! 
-  Resize event handler
-  \param event Resize event
-*/
-void QwtThermo::resizeEvent( QResizeEvent *event )
-{
-    Q_UNUSED( event );
-    layoutThermo( false );
-}
-
-/*! 
-  Qt change event handler
-  \param event Event
-*/
-void QwtThermo::changeEvent( QEvent *event )
-{
-    switch( event->type() )
-    {
-        case QEvent::StyleChange:
-        case QEvent::FontChange:
-        {
-            layoutThermo( true );
-            break;
-        }
-        default:
-            break;
-    }
-}
-
-/*!
-  Recalculate the QwtThermo geometry and layout based on
-  pipeRect() and the fonts.
-
-  \param update_geometry notify the layout system and call update
-         to redraw the scale
-*/
-void QwtThermo::layoutThermo( bool update_geometry )
-{
-    const QRect tRect = pipeRect();
-    const int bw = d_data->borderWidth + d_data->spacing;
-    const bool inverted = ( upperBound() < lowerBound() );
-
-    int from, to;
-
-    if ( d_data->orientation == Qt::Horizontal )
-    {
-        from = tRect.left();
-        to = tRect.right();
-
-        if ( d_data->rangeFlags & QwtInterval::ExcludeMinimum )
-        {
-            if ( inverted )
-                to++;
-            else
-                from--;
-        }
-        if ( d_data->rangeFlags & QwtInterval::ExcludeMaximum )
-        {
-            if ( inverted )
-                from--;
-            else
-                to++;
-        }
-
-        if ( d_data->scalePosition == QwtThermo::TrailingScale )
-        {
-            scaleDraw()->setAlignment( QwtScaleDraw::TopScale );
-            scaleDraw()->move( from, tRect.top() - bw );
-        }
-        else
-        {
-            scaleDraw()->setAlignment( QwtScaleDraw::BottomScale );
-            scaleDraw()->move( from, tRect.bottom() + bw );
-        }
-
-        scaleDraw()->setLength( qMax( to - from, 0 ) );
-    }
-    else // Qt::Vertical
-    {
-        from = tRect.top();
-        to = tRect.bottom();
-
-        if ( d_data->rangeFlags & QwtInterval::ExcludeMinimum )
-        {
-            if ( inverted )
-                from--;
-            else
-                to++;
-        }
-        if ( d_data->rangeFlags & QwtInterval::ExcludeMaximum )
-        {
-            if ( inverted )
-                to++;
-            else
-                from--;
-        }
-
-        if ( d_data->scalePosition == QwtThermo::LeadingScale )
-        {
-            scaleDraw()->setAlignment( QwtScaleDraw::RightScale );
-            scaleDraw()->move( tRect.right() + bw, from );
-        }
-        else
-        {
-            scaleDraw()->setAlignment( QwtScaleDraw::LeftScale );
-            scaleDraw()->move( tRect.left() - bw, from );
-        }
-
-        scaleDraw()->setLength( qMax( to - from, 0 ) );
-    }
-
-    if ( update_geometry )
-    {
-        updateGeometry();
-        update();
-    }
-}
-
-/*!
-  \return Bounding rectangle of the pipe ( without borders )
-          in widget coordinates
-*/
-QRect QwtThermo::pipeRect() const
-{
-    int mbd = 0;
-    if ( d_data->scalePosition != QwtThermo::NoScale )
-    {
-        int d1, d2;
-        scaleDraw()->getBorderDistHint( font(), d1, d2 );
-        mbd = qMax( d1, d2 );
-    }
-    const int bw = d_data->borderWidth;
-    const int scaleOff = bw + mbd;
-
-    const QRect cr = contentsRect();
-
-    QRect pipeRect = cr;
-    if ( d_data->orientation == Qt::Horizontal )
-    {
-        pipeRect.adjust( scaleOff, 0, -scaleOff, 0 );
-
-        if ( d_data->scalePosition == QwtThermo::TrailingScale )
-            pipeRect.setTop( cr.top() + cr.height() - bw - d_data->pipeWidth );
-        else
-            pipeRect.setTop( bw );
-
-        pipeRect.setHeight( d_data->pipeWidth );
-    }
-    else // Qt::Vertical
-    {
-        pipeRect.adjust( 0, scaleOff, 0, -scaleOff );
-
-        if ( d_data->scalePosition == QwtThermo::LeadingScale )
-            pipeRect.setLeft( bw );
-        else 
-            pipeRect.setLeft( cr.left() + cr.width() - bw - d_data->pipeWidth );
-
-        pipeRect.setWidth( d_data->pipeWidth );
-    }
-
-    return pipeRect;
-}
-
-/*!
-  \brief Set the orientation.
-  \param orientation Allowed values are Qt::Horizontal and Qt::Vertical.
-
-  \sa orientation(), scalePosition()
-*/
-void QwtThermo::setOrientation( Qt::Orientation orientation )
-{
-    if ( orientation == d_data->orientation )
-        return;
-
-    d_data->orientation = orientation;
-
-    if ( !testAttribute( Qt::WA_WState_OwnSizePolicy ) )
-    {
-        QSizePolicy sp = sizePolicy();
-        sp.transpose();
-        setSizePolicy( sp );
-
-        setAttribute( Qt::WA_WState_OwnSizePolicy, false );
-    }
-
-    layoutThermo( true );
-}
-
-/*!
-  \return Orientation
-  \sa setOrientation()
-*/
-Qt::Orientation QwtThermo::orientation() const
-{
-    return d_data->orientation;
-}
-
-/*!
-  \brief Change how the origin is determined.
-  \sa originMode(), serOrigin(), origin()
- */
-void QwtThermo::setOriginMode( OriginMode m )
-{
-    if ( m == d_data->originMode )
-        return;
-
-    d_data->originMode = m;
-    update();
-}
-
-/*!
-  \return Mode, how the origin is determined.
-  \sa setOriginMode(), serOrigin(), origin()
- */
-QwtThermo::OriginMode QwtThermo::originMode() const
-{
-    return d_data->originMode;
-}
-
-/*!
-  \brief Specifies the custom origin.
-
-  If originMode is set to OriginCustom this property controls where the
-  liquid starts.
-
-  \param origin New origin level
-  \sa setOriginMode(), originMode(), origin()
- */
-void QwtThermo::setOrigin( double origin )
-{
-    if ( origin == d_data->origin )
-        return;
-
-    d_data->origin = origin;
-    update();
-}
-
-/*!
-  \return Origin of the thermo, when OriginCustom is enabled
-  \sa setOrigin(), setOriginMode(), originMode()
- */
-double QwtThermo::origin() const
-{
-    return d_data->origin;
-}
-
-/*!
-  \brief Change the position of the scale
-  \param scalePosition Position of the scale.
-
-  \sa ScalePosition, scalePosition()
-*/
-void QwtThermo::setScalePosition( ScalePosition scalePosition )
-{
-    if ( d_data->scalePosition == scalePosition )
-        return;
-
-    d_data->scalePosition = scalePosition;
-
-    if ( testAttribute( Qt::WA_WState_Polished ) )
-        layoutThermo( true );
-}
-
-/*!
-   \return Scale position.
-   \sa setScalePosition()
-*/
-QwtThermo::ScalePosition QwtThermo::scalePosition() const
-{
-    return d_data->scalePosition;
-}
-
-//! Notify a scale change.
-void QwtThermo::scaleChange()
-{
-    layoutThermo( true );
-}
-
-/*!
-   Redraw the liquid in thermometer pipe.
-   \param painter Painter
-   \param pipeRect Bounding rectangle of the pipe without borders
-*/
-void QwtThermo::drawLiquid( 
-    QPainter *painter, const QRect &pipeRect ) const
-{
-    painter->save();
-    painter->setClipRect( pipeRect, Qt::IntersectClip );
-    painter->setPen( Qt::NoPen );
-
-    const QwtScaleMap scaleMap = scaleDraw()->scaleMap();
-
-    QRect liquidRect = fillRect( pipeRect );
-
-    if ( d_data->colorMap != NULL )
-    {
-        const QwtInterval interval = scaleDiv().interval().normalized();
-
-        // Because the positions of the ticks are rounded
-        // we calculate the colors for the rounded tick values
-
-        QVector<double> values = qwtTickList( scaleDraw()->scaleDiv() );
-
-        if ( scaleMap.isInverting() )
-            qSort( values.begin(), values.end(), qGreater<double>() );
-        else
-            qSort( values.begin(), values.end(), qLess<double>() );
-
-        int from;
-        if ( !values.isEmpty() )
-        {
-            from = qRound( scaleMap.transform( values[0] ) );
-            qwtDrawLine( painter, from,
-                d_data->colorMap->color( interval, values[0] ),
-                pipeRect, liquidRect, d_data->orientation );
-        }
-
-        for ( int i = 1; i < values.size(); i++ )
-        {
-            const int to = qRound( scaleMap.transform( values[i] ) );
-
-            for ( int pos = from + 1; pos < to; pos++ )
-            {
-                const double v = scaleMap.invTransform( pos );
-
-                qwtDrawLine( painter, pos, 
-                    d_data->colorMap->color( interval, v ),
-                    pipeRect, liquidRect, d_data->orientation );
-            }
-
-            qwtDrawLine( painter, to,
-                d_data->colorMap->color( interval, values[i] ),
-                pipeRect, liquidRect, d_data->orientation );
-
-            from = to;
-        }
-    }
-    else
-    {
-        if ( !liquidRect.isEmpty() && d_data->alarmEnabled )
-        {
-            const QRect r = alarmRect( liquidRect );
-            if ( !r.isEmpty() )
-            {
-                painter->fillRect( r, palette().brush( QPalette::Highlight ) );
-                liquidRect = QRegion( liquidRect ).subtracted( r ).boundingRect();
-            }
-        }
-
-        painter->fillRect( liquidRect, palette().brush( QPalette::ButtonText ) );
-    }
-
-    painter->restore();
-}
-
-/*!
-  \brief Change the spacing between pipe and scale
-
-  A spacing of 0 means, that the backbone of the scale is below
-  the pipe.
-
-  The default setting is 3 pixels.
-
-  \param spacing Number of pixels
-  \sa spacing();
-*/
-void QwtThermo::setSpacing( int spacing )
-{
-    if ( spacing <= 0 )
-        spacing = 0;
-
-    if ( spacing != d_data->spacing  )
-    {
-        d_data->spacing = spacing;
-        layoutThermo( true );
-    }
-}
-
-/*!
-  \return Number of pixels between pipe and scale
-  \sa setSpacing()
-*/
-int QwtThermo::spacing() const
-{
-    return d_data->spacing;
-}
-
-/*!
-   Set the border width of the pipe.
-   \param width Border width
-   \sa borderWidth()
-*/
-void QwtThermo::setBorderWidth( int width )
-{
-    if ( width <= 0 )
-        width = 0;
-
-    if ( width != d_data->borderWidth  )
-    {
-        d_data->borderWidth = width;
-        layoutThermo( true );
-    }
-}
-
-/*!
-   \return Border width of the thermometer pipe.
-   \sa setBorderWidth()
-*/
-int QwtThermo::borderWidth() const
-{
-    return d_data->borderWidth;
-}
-
-/*!
-  \brief Assign a color map for the fill color
-
-  \param colorMap Color map
-  \warning The alarm threshold has no effect, when
-           a color map has been assigned
-*/
-void QwtThermo::setColorMap( QwtColorMap *colorMap )
-{
-    if ( colorMap != d_data->colorMap )
-    {
-        delete d_data->colorMap;
-        d_data->colorMap = colorMap;
-    }
-}
-
-/*!
-  \return Color map for the fill color
-  \warning The alarm threshold has no effect, when
-           a color map has been assigned
-*/
-QwtColorMap *QwtThermo::colorMap()
-{
-    return d_data->colorMap;
-}
-
-/*!
-  \return Color map for the fill color
-  \warning The alarm threshold has no effect, when
-           a color map has been assigned
-*/
-const QwtColorMap *QwtThermo::colorMap() const
-{
-    return d_data->colorMap;
-}
-
-/*!
-  \brief Change the brush of the liquid.
- 
-  Changes the QPalette::ButtonText brush of the palette.
-
-  \param brush New brush. 
-  \sa fillBrush(), QWidget::setPalette()
-*/
-void QwtThermo::setFillBrush( const QBrush& brush )
-{
-    QPalette pal = palette();
-    pal.setBrush( QPalette::ButtonText, brush );
-    setPalette( pal );
-}
-
-/*!
-  \return Liquid ( QPalette::ButtonText ) brush. 
-  \sa setFillBrush(), QWidget::palette()
-*/
-QBrush QwtThermo::fillBrush() const
-{
-    return palette().brush( QPalette::ButtonText );
-}
-
-/*!
-  \brief Specify the liquid brush above the alarm threshold
-
-  Changes the QPalette::Highlight brush of the palette.
-
-  \param brush New brush. 
-  \sa alarmBrush(), QWidget::setPalette()
-
-  \warning The alarm threshold has no effect, when
-           a color map has been assigned
-*/
-void QwtThermo::setAlarmBrush( const QBrush& brush )
-{
-    QPalette pal = palette();
-    pal.setBrush( QPalette::Highlight, brush );
-    setPalette( pal );
-}
-
-/*!
-  \return Liquid brush ( QPalette::Highlight ) above the alarm threshold.
-  \sa setAlarmBrush(), QWidget::palette()
-
-  \warning The alarm threshold has no effect, when
-           a color map has been assigned
-*/
-QBrush QwtThermo::alarmBrush() const
-{
-    return palette().brush( QPalette::Highlight );
-}
-
-/*!
-  Specify the alarm threshold.
-
-  \param level Alarm threshold
-  \sa alarmLevel()
-
-  \warning The alarm threshold has no effect, when
-           a color map has been assigned
-*/
-void QwtThermo::setAlarmLevel( double level )
-{
-    d_data->alarmLevel = level;
-    d_data->alarmEnabled = 1;
-    update();
-}
-
-/*!
-  \return Alarm threshold.
-  \sa setAlarmLevel()
-
-  \warning The alarm threshold has no effect, when
-           a color map has been assigned
-*/
-double QwtThermo::alarmLevel() const
-{
-    return d_data->alarmLevel;
-}
-
-/*!
-  Change the width of the pipe.
-
-  \param width Width of the pipe
-  \sa pipeWidth()
-*/
-void QwtThermo::setPipeWidth( int width )
-{
-    if ( width > 0 )
-    {
-        d_data->pipeWidth = width;
-        layoutThermo( true );
-    }
-}
-
-/*!
-  \return Width of the pipe.
-  \sa setPipeWidth()
-*/
-int QwtThermo::pipeWidth() const
-{
-    return d_data->pipeWidth;
-}
-
-/*!
-  \brief Enable or disable the alarm threshold
-  \param on true (disabled) or false (enabled)
-
-  \warning The alarm threshold has no effect, when
-           a color map has been assigned
-*/
-void QwtThermo::setAlarmEnabled( bool on )
-{
-    d_data->alarmEnabled = on;
-    update();
-}
-
-/*! 
-  \return True, when the alarm threshold is enabled.
-
-  \warning The alarm threshold has no effect, when
-           a color map has been assigned
-*/
-bool QwtThermo::alarmEnabled() const
-{
-    return d_data->alarmEnabled;
-}
-
-/*!
-  \return the minimum size hint
-  \sa minimumSizeHint()
-*/
-QSize QwtThermo::sizeHint() const
-{
-    return minimumSizeHint();
-}
-
-/*!
-  \return Minimum size hint
-  \warning The return value depends on the font and the scale.
-  \sa sizeHint()
-*/
-QSize QwtThermo::minimumSizeHint() const
-{
-    int w = 0, h = 0;
-
-    if ( d_data->scalePosition != NoScale )
-    {
-        const int sdExtent = qCeil( scaleDraw()->extent( font() ) );
-        const int sdLength = scaleDraw()->minLength( font() );
-
-        w = sdLength;
-        h = d_data->pipeWidth + sdExtent + d_data->spacing;
-
-    }
-    else // no scale
-    {
-        w = 200;
-        h = d_data->pipeWidth;
-    }
-
-    if ( d_data->orientation == Qt::Vertical )
-        qSwap( w, h );
-
-    w += 2 * d_data->borderWidth;
-    h += 2 * d_data->borderWidth;
-
-    // finally add the margins
-    int left, right, top, bottom;
-    getContentsMargins( &left, &top, &right, &bottom );
-    w += left + right;
-    h += top + bottom;
-
-    return QSize( w, h );
-}
-
-/*!
-  \brief Calculate the filled rectangle of the pipe
-
-  \param pipeRect Rectangle of the pipe
-  \return Rectangle to be filled ( fill and alarm brush )
-
-  \sa pipeRect(), alarmRect()
- */
-QRect QwtThermo::fillRect( const QRect &pipeRect ) const
-{
-    double origin;        
-    if ( d_data->originMode == OriginMinimum )
-    {
-        origin = qMin( lowerBound(), upperBound() );
-    }
-    else if ( d_data->originMode == OriginMaximum )
-    {
-        origin = qMax( lowerBound(), upperBound() );
-    }
-    else // OriginCustom
-    {
-        origin = d_data->origin;
-    }
-
-    const QwtScaleMap scaleMap = scaleDraw()->scaleMap();
-
-    int from = qRound( scaleMap.transform( d_data->value ) );
-    int to = qRound( scaleMap.transform( origin ) );
-
-    if ( to < from )
-        qSwap( from, to );
-    
-    QRect fillRect = pipeRect;
-    if ( d_data->orientation == Qt::Horizontal )
-    {
-        fillRect.setLeft( from );
-        fillRect.setRight( to );
-    }
-    else // Qt::Vertical
-    {
-        fillRect.setTop( from );
-        fillRect.setBottom( to );
-    }
-
-    return fillRect.normalized();
-}
-
-/*!
-  \brief Calculate the alarm rectangle of the pipe
-
-  \param fillRect Filled rectangle in the pipe
-  \return Rectangle to be filled with the alarm brush
-
-  \sa pipeRect(), fillRect(), alarmLevel(), alarmBrush()
- */
-QRect QwtThermo::alarmRect( const QRect &fillRect ) const
-{
-    QRect alarmRect( 0, 0, -1, -1); // something invalid
-
-    if ( !d_data->alarmEnabled )
-        return alarmRect;
-
-    const bool inverted = ( upperBound() < lowerBound() );
-    
-    bool increasing;
-    if ( d_data->originMode == OriginCustom )
-    {
-        increasing = d_data->value > d_data->origin;
-    }
-    else
-    {
-        increasing = d_data->originMode == OriginMinimum;
-    }
-
-    const QwtScaleMap map = scaleDraw()->scaleMap();
-    const int alarmPos = qRound( map.transform( d_data->alarmLevel ) );
-    const int valuePos = qRound( map.transform( d_data->value ) );
-    
-    if ( d_data->orientation == Qt::Horizontal )
-    {
-        int v1, v2;
-        if ( inverted )
-        {
-            v1 = fillRect.left();
-
-            v2 = alarmPos - 1;
-            v2 = qMin( v2, increasing ? fillRect.right() : valuePos );
-        }
-        else
-        {
-            v1 = alarmPos + 1;
-            v1 = qMax( v1, increasing ? fillRect.left() : valuePos );
-
-            v2 = fillRect.right();
-
-        }
-        alarmRect.setRect( v1, fillRect.top(), v2 - v1 + 1, fillRect.height() );
-    }
-    else
-    {
-        int v1, v2;
-        if ( inverted )
-        {
-            v1 = alarmPos + 1;
-            v1 = qMax( v1, increasing ? fillRect.top() : valuePos );
-
-            v2 = fillRect.bottom();
-        }
-        else
-        {
-            v1 = fillRect.top();
-
-            v2 = alarmPos - 1;
-            v2 = qMin( v2, increasing ? fillRect.bottom() : valuePos );
-        }
-        alarmRect.setRect( fillRect.left(), v1, fillRect.width(), v2 - v1 + 1 );
-    }
-
-    return alarmRect;
-} 
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_thermo.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_thermo.h
deleted file mode 100644
index b92f5205e0a0472d69ada8937500ed23435221a6..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_thermo.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_THERMO_H
-#define QWT_THERMO_H
-
-#include "qwt_global.h"
-#include "qwt_abstract_scale.h"
-#include "qwt_interval.h"
-
-class QwtScaleDraw;
-class QwtColorMap;
-
-/*!
-  \brief The Thermometer Widget
-
-  QwtThermo is a widget which displays a value in an interval. It supports:
-  - a horizontal or vertical layout;
-  - a range;
-  - a scale;
-  - an alarm level.
-
-  \image html sysinfo.png
-
-  The fill colors might be calculated from an optional color map
-  If no color map has been assigned QwtThermo uses the 
-  following colors/brushes from the widget palette:
-
-  - QPalette::Base
-    Background of the pipe
-  - QPalette::ButtonText
-    Fill brush below the alarm level
-  - QPalette::Highlight
-    Fill brush for the values above the alarm level
-  - QPalette::WindowText
-    For the axis of the scale
-  - QPalette::Text
-    For the labels of the scale
-*/
-class QWT_EXPORT QwtThermo: public QwtAbstractScale
-{
-    Q_OBJECT
-
-    Q_ENUMS( ScalePosition )
-    Q_ENUMS( OriginMode )
-
-    Q_PROPERTY( Qt::Orientation orientation
-        READ orientation WRITE setOrientation )
-    Q_PROPERTY( ScalePosition scalePosition 
-        READ scalePosition WRITE setScalePosition )
-    Q_PROPERTY( OriginMode originMode READ originMode WRITE setOriginMode )
-
-    Q_PROPERTY( bool alarmEnabled READ alarmEnabled WRITE setAlarmEnabled )
-    Q_PROPERTY( double alarmLevel READ alarmLevel WRITE setAlarmLevel )
-    Q_PROPERTY( double origin READ origin WRITE setOrigin )
-    Q_PROPERTY( int spacing READ spacing WRITE setSpacing )
-    Q_PROPERTY( int borderWidth READ borderWidth WRITE setBorderWidth )
-    Q_PROPERTY( int pipeWidth READ pipeWidth WRITE setPipeWidth )
-    Q_PROPERTY( double value READ value WRITE setValue )
-
-public:
-
-    /*!
-      Position of the scale
-      \sa setScalePosition(), setOrientation()
-     */
-    enum ScalePosition
-    {
-        //! The slider has no scale
-        NoScale,
-
-        //! The scale is right of a vertical or below of a horizontal slider
-        LeadingScale,
-
-        //! The scale is left of a vertical or above of a horizontal slider
-        TrailingScale
-    };
-
-    /*!
-      Origin mode. This property specifies where the beginning of the liquid
-      is placed.
-
-      \sa setOriginMode(), setOrigin()
-    */
-    enum OriginMode
-    {
-        //! The origin is the minimum of the scale
-        OriginMinimum,
-
-        //! The origin is the maximum of the scale
-        OriginMaximum,
-
-        //! The origin is specified using the origin() property
-        OriginCustom
-    };
-
-    explicit QwtThermo( QWidget *parent = NULL );
-    virtual ~QwtThermo();
-
-    void setOrientation( Qt::Orientation );
-    Qt::Orientation orientation() const;
-
-    void setScalePosition( ScalePosition );
-    ScalePosition scalePosition() const;
-
-    void setSpacing( int );
-    int spacing() const;
-
-    void setBorderWidth( int w );
-    int borderWidth() const;
-
-    void setOriginMode( OriginMode );
-    OriginMode originMode() const;
-
-    void setOrigin( double );
-    double origin() const;
-
-    void setFillBrush( const QBrush &b );
-    QBrush fillBrush() const;
-
-    void setAlarmBrush( const QBrush &b );
-    QBrush alarmBrush() const;
-
-    void setAlarmLevel( double v );
-    double alarmLevel() const;
-
-    void setAlarmEnabled( bool tf );
-    bool alarmEnabled() const;
-
-    void setColorMap( QwtColorMap * );
-    QwtColorMap *colorMap();
-    const QwtColorMap *colorMap() const;
-
-    void setPipeWidth( int w );
-    int pipeWidth() const;
-
-    void setRangeFlags( QwtInterval::BorderFlags );
-    QwtInterval::BorderFlags rangeFlags() const;
-
-    double value() const;
-
-    virtual QSize sizeHint() const;
-    virtual QSize minimumSizeHint() const;
-
-    void setScaleDraw( QwtScaleDraw * );
-    const QwtScaleDraw *scaleDraw() const;
-
-public Q_SLOTS:
-    virtual void setValue( double val );
-
-protected:
-    virtual void drawLiquid( QPainter *, const QRect & ) const;
-    virtual void scaleChange();
-
-    virtual void paintEvent( QPaintEvent * );
-    virtual void resizeEvent( QResizeEvent * );
-    virtual void changeEvent( QEvent * );
-
-    QwtScaleDraw *scaleDraw();
-
-    QRect pipeRect() const;
-    QRect fillRect( const QRect & ) const;
-    QRect alarmRect( const QRect & ) const;
-
-private:
-    void layoutThermo( bool );
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_transform.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_transform.cpp
deleted file mode 100644
index 7a965276ecf0eeca13c00f92eb595bc353f2881c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_transform.cpp
+++ /dev/null
@@ -1,177 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_transform.h"
-#include "qwt_math.h"
-
-#if QT_VERSION < 0x040601
-#define qExp(x) ::exp(x)
-#endif
-
-#if QT_VERSION >= 0x050400
-
-//! Smallest allowed value for logarithmic scales: 1.0e-150
-const double QwtLogTransform::LogMin = 1.0e-150;
-    
-//! Largest allowed value for logarithmic scales: 1.0e150
-const double QwtLogTransform::LogMax = 1.0e150;
-
-#else
-
-//! Smallest allowed value for logarithmic scales: 1.0e-150
-QT_STATIC_CONST_IMPL double QwtLogTransform::LogMin = 1.0e-150;
-
-//! Largest allowed value for logarithmic scales: 1.0e150
-QT_STATIC_CONST_IMPL double QwtLogTransform::LogMax = 1.0e150;
-
-#endif
-
-//! Constructor
-QwtTransform::QwtTransform()
-{
-}
-
-//! Destructor
-QwtTransform::~QwtTransform()
-{
-}
-
-/*! 
-  \param value Value to be bounded
-  \return value unmodified
- */
-double QwtTransform::bounded( double value ) const
-{
-    return value;
-}
-
-//! Constructor
-QwtNullTransform::QwtNullTransform():
-    QwtTransform()
-{
-}
-
-//! Destructor
-QwtNullTransform::~QwtNullTransform()
-{
-}
-
-/*! 
-  \param value Value to be transformed
-  \return value unmodified
- */
-double QwtNullTransform::transform( double value ) const
-{
-    return value;
-}
-
-/*! 
-  \param value Value to be transformed
-  \return value unmodified
- */
-double QwtNullTransform::invTransform( double value ) const
-{
-    return value;
-}
-
-//! \return Clone of the transformation
-QwtTransform *QwtNullTransform::copy() const
-{
-    return new QwtNullTransform();
-}
-
-//! Constructor
-QwtLogTransform::QwtLogTransform():
-    QwtTransform()
-{
-}
-
-//! Destructor
-QwtLogTransform::~QwtLogTransform()
-{
-}
-
-/*! 
-  \param value Value to be transformed
-  \return log( value )
- */
-double QwtLogTransform::transform( double value ) const
-{
-    return ::log( value );
-}
-
-/*! 
-  \param value Value to be transformed
-  \return exp( value )
- */
-double QwtLogTransform::invTransform( double value ) const
-{
-    return qExp( value );
-}
-
-/*! 
-  \param value Value to be bounded
-  \return qBound( LogMin, value, LogMax )
- */
-double QwtLogTransform::bounded( double value ) const
-{
-    return qBound( LogMin, value, LogMax );
-}
-
-//! \return Clone of the transformation
-QwtTransform *QwtLogTransform::copy() const
-{
-    return new QwtLogTransform();
-}
-
-/*!
-  Constructor
-  \param exponent Exponent
-*/
-QwtPowerTransform::QwtPowerTransform( double exponent ):
-    QwtTransform(),
-    d_exponent( exponent )
-{
-}
-
-//! Destructor
-QwtPowerTransform::~QwtPowerTransform()
-{
-}
-
-/*! 
-  \param value Value to be transformed
-  \return Exponentiation preserving the sign
- */
-double QwtPowerTransform::transform( double value ) const
-{
-    if ( value < 0.0 )
-        return -qPow( -value, 1.0 / d_exponent );
-    else
-        return qPow( value, 1.0 / d_exponent );
-    
-}
-
-/*! 
-  \param value Value to be transformed
-  \return Inverse exponentiation preserving the sign
- */
-double QwtPowerTransform::invTransform( double value ) const
-{
-    if ( value < 0.0 )
-        return -qPow( -value, d_exponent );
-    else
-        return qPow( value, d_exponent );
-}
-
-//! \return Clone of the transformation
-QwtTransform *QwtPowerTransform::copy() const
-{
-    return new QwtPowerTransform( d_exponent );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_transform.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_transform.h
deleted file mode 100644
index 3e4b0df56cf90f765c5e948bd068a2acfdc6a432..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_transform.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_TRANSFORM_H
-#define QWT_TRANSFORM_H
-
-#include "qwt_global.h"
-
-/*!
-   \brief A transformation between coordinate systems
-
-   QwtTransform manipulates values, when being mapped between
-   the scale and the paint device coordinate system.
-
-   A transformation consists of 2 methods:
-
-   - transform
-   - invTransform
-
-   where one is is the inverse function of the other.
-
-   When p1, p2 are the boundaries of the paint device coordinates
-   and s1, s2 the boundaries of the scale, QwtScaleMap uses the
-   following calculations:
-
-   - p = p1 + ( p2 - p1 ) * ( T( s ) - T( s1 ) / ( T( s2 ) - T( s1 ) );
-   - s = invT ( T( s1 ) + ( T( s2 ) - T( s1 ) ) * ( p - p1 ) / ( p2 - p1 ) );
-*/
-class QWT_EXPORT QwtTransform
-{
-public:
-    QwtTransform();
-    virtual ~QwtTransform();
-
-    /*!
-       Modify value to be a valid value for the transformation.
-       The default implementation does nothing.
-     */
-    virtual double bounded( double value ) const;
-
-    /*!
-        Transformation function
-
-        \param value Value
-        \return Modified value
-
-        \sa invTransform()
-     */
-    virtual double transform( double value ) const = 0;
-
-    /*!
-        Inverse transformation function
-
-        \param value Value
-        \return Modified value
-
-        \sa transform()
-     */
-    virtual double invTransform( double value ) const = 0;
-
-    //! Virtualized copy operation
-    virtual QwtTransform *copy() const = 0;
-};
-
-/*!
-   \brief Null transformation
-
-   QwtNullTransform returns the values unmodified.
-   
- */
-class QWT_EXPORT QwtNullTransform: public QwtTransform
-{
-public:
-    QwtNullTransform();
-    virtual ~QwtNullTransform();
-
-    virtual double transform( double value ) const;
-    virtual double invTransform( double value ) const;
-
-    virtual QwtTransform *copy() const;
-};
-/*!
-   \brief Logarithmic transformation
-
-   QwtLogTransform modifies the values using log() and exp().
-
-   \note In the calculations of QwtScaleMap the base of the log function
-         has no effect on the mapping. So QwtLogTransform can be used 
-         for log2(), log10() or any other logarithmic scale.
- */
-class QWT_EXPORT QwtLogTransform: public QwtTransform
-{   
-public:
-    QwtLogTransform();
-    virtual ~QwtLogTransform();
-    
-    virtual double transform( double value ) const;
-    virtual double invTransform( double value ) const;
-
-    virtual double bounded( double value ) const;
-
-    virtual QwtTransform *copy() const;
-
-#if QT_VERSION >= 0x050400
-    static const double LogMin;
-    static const double LogMax;
-#else
-    QT_STATIC_CONST double LogMin;
-    QT_STATIC_CONST double LogMax;
-#endif
-};
-
-/*!
-   \brief A transformation using pow()
-
-   QwtPowerTransform preserves the sign of a value. 
-   F.e. a transformation with a factor of 2
-   transforms a value of -3 to -9 and v.v. Thus QwtPowerTransform
-   can be used for scales including negative values.
- */
-class QWT_EXPORT QwtPowerTransform: public QwtTransform
-{
-public:
-    QwtPowerTransform( double exponent );
-    virtual ~QwtPowerTransform();
-
-    virtual double transform( double value ) const;
-    virtual double invTransform( double value ) const;
-
-    virtual QwtTransform *copy() const;
-
-private:
-    const double d_exponent;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_wheel.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_wheel.cpp
deleted file mode 100644
index d97778297ea5a72cd95d1725c234cbb7bbce44d3..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_wheel.cpp
+++ /dev/null
@@ -1,1299 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_wheel.h"
-#include "qwt_math.h"
-#include "qwt_painter.h"
-#include <qevent.h>
-#include <qdrawutil.h>
-#include <qpainter.h>
-#include <qstyle.h>
-#include <qstyleoption.h>
-#include <qapplication.h>
-#include <qdatetime.h>
-
-#if QT_VERSION < 0x040601
-#define qFabs(x) ::fabs(x)
-#define qFastSin(x) ::sin(x)
-#define qExp(x) ::exp(x)
-#endif
-
-class QwtWheel::PrivateData
-{
-public:
-    PrivateData():
-        orientation( Qt::Horizontal ),
-        viewAngle( 175.0 ),
-        totalAngle( 360.0 ),
-        tickCount( 10 ),
-        wheelBorderWidth( 2 ),
-        borderWidth( 2 ),
-        wheelWidth( 20 ),
-        isScrolling( false ),
-        mouseOffset( 0.0 ),
-        tracking( true ),
-        pendingValueChanged( false ),
-        updateInterval( 50 ),
-        mass( 0.0 ),
-        timerId( 0 ),
-        speed( 0.0 ),
-        mouseValue( 0.0 ),
-        flyingValue( 0.0 ),
-        minimum( 0.0 ),
-        maximum( 100.0 ),
-        singleStep( 1.0 ),
-        pageStepCount( 1 ),
-        stepAlignment( true ),
-        value( 0.0 ),
-        inverted( false ),
-        wrapping( false )
-    {
-    };
-
-    Qt::Orientation orientation;
-    double viewAngle;
-    double totalAngle;
-    int tickCount;
-    int wheelBorderWidth;
-    int borderWidth;
-    int wheelWidth;
-
-    bool isScrolling;
-    double mouseOffset;
-
-    bool tracking;
-    bool pendingValueChanged; // when not tracking
-
-    int updateInterval;
-    double mass;
-
-    // for the flying wheel effect
-    int timerId;
-    QTime time;
-    double speed;
-    double mouseValue;
-    double flyingValue;
-
-    double minimum;
-    double maximum;
-
-    double singleStep;
-    int pageStepCount;
-    bool stepAlignment;
-
-    double value;
-
-    bool inverted;
-    bool wrapping;
-};
-
-//! Constructor
-QwtWheel::QwtWheel( QWidget *parent ):
-    QWidget( parent )
-{
-    d_data = new PrivateData;
-
-    setFocusPolicy( Qt::StrongFocus );
-    setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed );
-    setAttribute( Qt::WA_WState_OwnSizePolicy, false );
-}
-
-//! Destructor
-QwtWheel::~QwtWheel()
-{
-    delete d_data;
-}
-
-/*!
-  \brief En/Disable tracking
-
-  If tracking is enabled (the default), the wheel emits the valueChanged() 
-  signal while the wheel is moving. If tracking is disabled, the wheel 
-  emits the valueChanged() signal only when the wheel movement is terminated.
-
-  The wheelMoved() signal is emitted regardless id tracking is enabled or not.
-
-  \param enable On/Off
-  \sa isTracking()
- */
-void QwtWheel::setTracking( bool enable )
-{
-    d_data->tracking = enable;
-}
-
-/*!
-  \return True, when tracking is enabled
-  \sa setTracking(), valueChanged(), wheelMoved()
-*/
-bool QwtWheel::isTracking() const
-{
-    return d_data->tracking;
-}
-
-/*!
-  \brief Specify the update interval when the wheel is flying
-
-  Default and minimum value is 50 ms.
-
-  \param interval Interval in milliseconds
-  \sa updateInterval(), setMass(), setTracking()
-*/
-void QwtWheel::setUpdateInterval( int interval )
-{
-    d_data->updateInterval = qMax( interval, 50 );
-}
-
-/*!
-  \return Update interval when the wheel is flying
-  \sa setUpdateInterval(), mass(), isTracking()
- */
-int QwtWheel::updateInterval() const
-{
-    return d_data->updateInterval;
-}
-
-/*!
-   \brief Mouse press event handler
-
-   Start movement of the wheel. 
-
-   \param event Mouse event
-*/
-void QwtWheel::mousePressEvent( QMouseEvent *event )
-{
-    stopFlying();
-
-    d_data->isScrolling = wheelRect().contains( event->pos() );
-
-    if ( d_data->isScrolling )
-    {
-        d_data->time.start();
-        d_data->speed = 0.0;
-        d_data->mouseValue = valueAt( event->pos() );
-        d_data->mouseOffset = d_data->mouseValue - d_data->value;
-        d_data->pendingValueChanged = false;
-
-        Q_EMIT wheelPressed();
-    }
-}
-
-/*!
-   \brief Mouse Move Event handler
-
-   Turn the wheel according to the mouse position
-
-   \param event Mouse event
-*/
-void QwtWheel::mouseMoveEvent( QMouseEvent *event )
-{
-    if ( !d_data->isScrolling )
-        return;
-
-    double mouseValue = valueAt( event->pos() );
-
-    if ( d_data->mass > 0.0 )
-    {
-        double ms = d_data->time.restart();
-
-        // the interval when mouse move events are posted are somehow
-        // random. To avoid unrealistic speed values we limit ms
-
-        ms = qMax( ms, 5.0 );
-
-        d_data->speed = ( mouseValue - d_data->mouseValue ) / ms;
-    }
-    
-    d_data->mouseValue = mouseValue; 
-
-    double value = boundedValue( mouseValue - d_data->mouseOffset );
-    if ( d_data->stepAlignment )
-        value = alignedValue( value );
-        
-    if ( value != d_data->value )
-    {
-        d_data->value = value;
-
-        update();
-
-        Q_EMIT wheelMoved( d_data->value );
-
-        if ( d_data->tracking )
-            Q_EMIT valueChanged( d_data->value );
-        else
-            d_data->pendingValueChanged = true;
-    }
-}
-
-/*!
-   \brief Mouse Release Event handler
-
-   When the wheel has no mass the movement of the wheel stops, otherwise
-   it starts flying.
-
-   \param event Mouse event
-*/  
-
-void QwtWheel::mouseReleaseEvent( QMouseEvent *event )
-{
-    Q_UNUSED( event );
-
-    if ( !d_data->isScrolling )
-        return;
-
-    d_data->isScrolling = false;
-
-    bool startFlying = false;
-
-    if ( d_data->mass > 0.0 )
-    {
-        const int ms = d_data->time.elapsed();
-        if ( ( qFabs( d_data->speed ) > 0.0 ) && ( ms < 50 ) )
-            startFlying = true;
-    }
-
-    if ( startFlying )
-    {
-        d_data->flyingValue = 
-            boundedValue( d_data->mouseValue - d_data->mouseOffset );
-
-        d_data->timerId = startTimer( d_data->updateInterval );
-    }
-    else
-    {
-        if ( d_data->pendingValueChanged )
-            Q_EMIT valueChanged( d_data->value );
-    }
-
-    d_data->pendingValueChanged = false;
-    d_data->mouseOffset = 0.0;
-
-    Q_EMIT wheelReleased();
-}
-
-/*!
-  \brief Qt timer event
-
-  The flying wheel effect is implemented using a timer
-   
-  \param event Timer event
-
-  \sa updateInterval()
- */
-void QwtWheel::timerEvent( QTimerEvent *event )
-{
-    if ( event->timerId() != d_data->timerId )
-    {
-        QWidget::timerEvent( event );
-        return;
-    }
-
-    d_data->speed *= qExp( -d_data->updateInterval * 0.001 / d_data->mass );
-
-    d_data->flyingValue += d_data->speed * d_data->updateInterval;
-    d_data->flyingValue = boundedValue( d_data->flyingValue );
-
-    double value = d_data->flyingValue;
-    if ( d_data->stepAlignment )
-        value = alignedValue( value );
-
-    if ( qFabs( d_data->speed ) < 0.001 * d_data->singleStep )
-    {
-        // stop if d_data->speed < one step per second
-        stopFlying();
-    }
-
-    if ( value != d_data->value )
-    {
-        d_data->value = value;
-        update();
-
-        if ( d_data->tracking || d_data->timerId == 0 )
-            Q_EMIT valueChanged( d_data->value );
-    }
-}
-
-
-/*!
-  \brief Handle wheel events
-
-  In/Decrement the value 
-
-  \param event Wheel event
-*/
-void QwtWheel::wheelEvent( QWheelEvent *event )
-{
-    if ( !wheelRect().contains( event->pos() ) )
-    {
-        event->ignore();
-        return;
-    }
-
-    if ( d_data->isScrolling )
-        return;
-
-    stopFlying();
-
-    double increment = 0.0;
-
-    if ( ( event->modifiers() & Qt::ControlModifier) || 
-        ( event->modifiers() & Qt::ShiftModifier ) )
-    {
-        // one page regardless of delta
-        increment = d_data->singleStep * d_data->pageStepCount;
-        if ( event->delta() < 0 )
-            increment = -increment;
-    }
-    else
-    {
-        const int numSteps = event->delta() / 120;
-        increment = d_data->singleStep * numSteps;
-    }
-
-    if ( d_data->orientation == Qt::Vertical && d_data->inverted )
-        increment = -increment;
-
-    double value = boundedValue( d_data->value + increment );
-
-    if ( d_data->stepAlignment )
-        value = alignedValue( value );
-
-    if ( value != d_data->value )
-    {
-        d_data->value = value;
-        update();
-
-        Q_EMIT valueChanged( d_data->value );
-        Q_EMIT wheelMoved( d_data->value );
-    }
-}
-
-/*!
-  Handle key events
-
-  - Qt::Key_Home\n
-    Step to minimum()
-
-  - Qt::Key_End\n
-    Step to maximum()
-
-  - Qt::Key_Up\n
-    In case of a horizontal or not inverted vertical wheel the value 
-    will be incremented by the step size. For an inverted vertical wheel
-    the value will be decremented by the step size.
-
-  - Qt::Key_Down\n
-    In case of a horizontal or not inverted vertical wheel the value 
-    will be decremented by the step size. For an inverted vertical wheel
-    the value will be incremented by the step size.
-
-  - Qt::Key_PageUp\n
-    The value will be incremented by pageStepSize() * singleStepSize().
-
-  - Qt::Key_PageDown\n
-    The value will be decremented by pageStepSize() * singleStepSize().
-
-  \param event Key event
-*/
-void QwtWheel::keyPressEvent( QKeyEvent *event )
-{
-    if ( d_data->isScrolling )
-    {
-        // don't interfere mouse scrolling
-        return;
-    }
-
-    double value = d_data->value;
-    double increment = 0.0;
-
-    switch ( event->key() )
-    {
-        case Qt::Key_Down:
-        {
-            if ( d_data->orientation == Qt::Vertical && d_data->inverted )
-                increment = d_data->singleStep;
-            else
-                increment = -d_data->singleStep;
-
-            break;
-        }
-        case Qt::Key_Up:
-        {
-            if ( d_data->orientation == Qt::Vertical && d_data->inverted )
-                increment = -d_data->singleStep;
-            else
-                increment = d_data->singleStep;
-
-            break;
-        }
-        case Qt::Key_Left:
-        {
-            if ( d_data->orientation == Qt::Horizontal )
-            {
-                if ( d_data->inverted )
-                    increment = d_data->singleStep;
-                else
-                    increment = -d_data->singleStep;
-            }
-            break;
-        }
-        case Qt::Key_Right:
-        {
-            if ( d_data->orientation == Qt::Horizontal )
-            {
-                if ( d_data->inverted )
-                    increment = -d_data->singleStep;
-                else
-                    increment = d_data->singleStep;
-            }
-            break;
-        }
-        case Qt::Key_PageUp:
-        {
-            increment = d_data->pageStepCount * d_data->singleStep;
-            break;
-        }
-        case Qt::Key_PageDown:
-        {
-            increment = -d_data->pageStepCount * d_data->singleStep;
-            break;
-        }
-        case Qt::Key_Home:
-        {
-            value = d_data->minimum;
-            break;
-        }
-        case Qt::Key_End:
-        {
-            value = d_data->maximum;
-            break;
-        }
-        default:;
-        {
-            event->ignore();
-        }
-    }
-
-    if ( event->isAccepted() )
-        stopFlying();
-    
-    if ( increment != 0.0 )
-    {
-        value = boundedValue( d_data->value + increment );
-
-        if ( d_data->stepAlignment )
-            value = alignedValue( value );
-    }
-
-    if ( value != d_data->value )
-    {
-        d_data->value = value;
-        update();
-
-        Q_EMIT valueChanged( d_data->value );
-        Q_EMIT wheelMoved( d_data->value );
-    }
-}
-
-/*!
-  \brief Adjust the number of grooves in the wheel's surface.
-
-  The number of grooves is limited to 6 <= count <= 50.
-  Values outside this range will be clipped.
-  The default value is 10.
-
-  \param count Number of grooves per 360 degrees
-  \sa tickCount()
-*/
-void QwtWheel::setTickCount( int count )
-{
-    count = qBound( 6, count, 50 );
-
-    if ( count != d_data->tickCount )
-    {
-        d_data->tickCount = qBound( 6, count, 50 );
-        update();
-    }
-}
-
-/*!
-  \return Number of grooves in the wheel's surface.
-  \sa setTickCnt()
-*/
-int QwtWheel::tickCount() const
-{
-    return d_data->tickCount;
-}
-
-/*!
-  \brief Set the wheel border width of the wheel.
-
-  The wheel border must not be smaller than 1
-  and is limited in dependence on the wheel's size.
-  Values outside the allowed range will be clipped.
-
-  The wheel border defaults to 2.
-
-  \param borderWidth Border width
-  \sa internalBorder()
-*/
-void QwtWheel::setWheelBorderWidth( int borderWidth )
-{
-    const int d = qMin( width(), height() ) / 3;
-    borderWidth = qMin( borderWidth, d );
-    d_data->wheelBorderWidth = qMax( borderWidth, 1 );
-    update();
-}
-
-/*!
-   \return Wheel border width 
-   \sa setWheelBorderWidth()
-*/
-int QwtWheel::wheelBorderWidth() const
-{
-    return d_data->wheelBorderWidth;
-}
-
-/*!
-  \brief Set the border width 
-
-  The border defaults to 2.
-
-  \param width Border width
-  \sa borderWidth()
-*/
-void QwtWheel::setBorderWidth( int width )
-{
-    d_data->borderWidth = qMax( width, 0 );
-    update();
-}
-
-/*!
-   \return Border width 
-   \sa setBorderWidth()
-*/
-int QwtWheel::borderWidth() const
-{
-    return d_data->borderWidth;
-}
-
-/*!
-   \return Rectangle of the wheel without the outer border
-*/
-QRect QwtWheel::wheelRect() const
-{
-    const int bw = d_data->borderWidth;
-    return contentsRect().adjusted( bw, bw, -bw, -bw );
-}
-
-/*!
-  \brief Set the total angle which the wheel can be turned.
-
-  One full turn of the wheel corresponds to an angle of
-  360 degrees. A total angle of n*360 degrees means
-  that the wheel has to be turned n times around its axis
-  to get from the minimum value to the maximum value.
-
-  The default setting of the total angle is 360 degrees.
-
-  \param angle total angle in degrees
-  \sa totalAngle()
-*/
-void QwtWheel::setTotalAngle( double angle )
-{
-    if ( angle < 0.0 )
-        angle = 0.0;
-
-    d_data->totalAngle = angle;
-    update();
-}
-
-/*!
-  \return Total angle which the wheel can be turned.
-  \sa setTotalAngle()
-*/
-double QwtWheel::totalAngle() const
-{
-    return d_data->totalAngle;
-}
-
-/*!
-  \brief Set the wheel's orientation.
-
-  The default orientation is Qt::Horizontal.
-
-  \param orientation Qt::Horizontal or Qt::Vertical.
-  \sa orientation()
-*/
-void QwtWheel::setOrientation( Qt::Orientation orientation )
-{
-    if ( d_data->orientation == orientation )
-        return;
-
-    if ( !testAttribute( Qt::WA_WState_OwnSizePolicy ) )
-    {
-        QSizePolicy sp = sizePolicy();
-        sp.transpose();
-        setSizePolicy( sp );
-
-        setAttribute( Qt::WA_WState_OwnSizePolicy, false );
-    }
-
-    d_data->orientation = orientation;
-    update();
-}
-
-/*!
-  \return Orientation
-  \sa setOrientation()
-*/
-Qt::Orientation QwtWheel::orientation() const
-{
-    return d_data->orientation;
-}
-
-/*!
-  \brief Specify the visible portion of the wheel.
-
-  You may use this function for fine-tuning the appearance of
-  the wheel. The default value is 175 degrees. The value is
-  limited from 10 to 175 degrees.
-
-  \param angle Visible angle in degrees
-  \sa viewAngle(), setTotalAngle()
-*/
-void QwtWheel::setViewAngle( double angle )
-{
-    d_data->viewAngle = qBound( 10.0, angle, 175.0 );
-    update();
-}
-
-/*!
-  \return Visible portion of the wheel
-  \sa setViewAngle(), totalAngle()
-*/
-double QwtWheel::viewAngle() const
-{
-    return d_data->viewAngle;
-}
-
-/*! 
-  Determine the value corresponding to a specified point
-
-  \param pos Position
-  \return Value corresponding to pos
-*/
-double QwtWheel::valueAt( const QPoint &pos ) const
-{
-    const QRectF rect = wheelRect();
-
-    double w, dx;
-    if ( d_data->orientation == Qt::Vertical )
-    {
-        w = rect.height();
-        dx = rect.top() - pos.y();
-    }
-    else
-    {
-        w = rect.width();
-        dx = pos.x() - rect.left();
-    }
-
-    if ( w == 0.0 )
-        return 0.0;
-
-    if ( d_data->inverted )
-    {
-        dx = w - dx;
-    }
-
-    // w pixels is an arc of viewAngle degrees,
-    // so we convert change in pixels to change in angle
-    const double ang = dx * d_data->viewAngle / w;
-
-    // value range maps to totalAngle degrees,
-    // so convert the change in angle to a change in value
-    const double val = ang * ( maximum() - minimum() ) / d_data->totalAngle;
-
-    return val;
-}
-
-/*! 
-   \brief Qt Paint Event
-   \param event Paint event
-*/
-void QwtWheel::paintEvent( QPaintEvent *event )
-{
-    QPainter painter( this );
-    painter.setClipRegion( event->region() );
-
-    QStyleOption opt;
-    opt.init(this);
-    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
-
-    qDrawShadePanel( &painter, 
-        contentsRect(), palette(), true, d_data->borderWidth );
-
-    drawWheelBackground( &painter, wheelRect() );
-    drawTicks( &painter, wheelRect() );
-
-    if ( hasFocus() )
-        QwtPainter::drawFocusRect( &painter, this );
-}
-
-/*!
-   Draw the Wheel's background gradient
-
-   \param painter Painter
-   \param rect Geometry for the wheel
-*/
-void QwtWheel::drawWheelBackground( 
-    QPainter *painter, const QRectF &rect )
-{
-    painter->save();
-
-    QPalette pal = palette();
-
-    //  draw shaded background
-    QLinearGradient gradient( rect.topLeft(), 
-        ( d_data->orientation == Qt::Horizontal ) ? rect.topRight() : rect.bottomLeft() );
-    gradient.setColorAt( 0.0, pal.color( QPalette::Button ) );
-    gradient.setColorAt( 0.2, pal.color( QPalette::Midlight ) );
-    gradient.setColorAt( 0.7, pal.color( QPalette::Mid ) );
-    gradient.setColorAt( 1.0, pal.color( QPalette::Dark ) );
-
-    painter->fillRect( rect, gradient );
-
-    // draw internal border
-
-    const QPen lightPen( palette().color( QPalette::Light ), 
-        d_data->wheelBorderWidth, Qt::SolidLine, Qt::FlatCap );
-    const QPen darkPen( pal.color( QPalette::Dark ), 
-        d_data->wheelBorderWidth, Qt::SolidLine, Qt::FlatCap );
-
-    const double bw2 = 0.5 * d_data->wheelBorderWidth;
-
-    if ( d_data->orientation == Qt::Horizontal )
-    {
-        painter->setPen( lightPen );
-        painter->drawLine( QPointF( rect.left(), rect.top() + bw2 ), 
-            QPointF( rect.right(), rect.top() + bw2 ) );
-
-        painter->setPen( darkPen );
-        painter->drawLine( QPointF( rect.left(), rect.bottom() - bw2 ), 
-            QPointF( rect.right(), rect.bottom() - bw2 ) );
-    }
-    else // Qt::Vertical
-    {
-        painter->setPen( lightPen );
-        painter->drawLine( QPointF( rect.left() + bw2, rect.top() ), 
-            QPointF( rect.left() + bw2, rect.bottom() ) );
-
-        painter->setPen( darkPen );
-        painter->drawLine( QPointF( rect.right() - bw2, rect.top() ), 
-            QPointF( rect.right() - bw2, rect.bottom() ) );
-    }
-
-    painter->restore();
-}
-
-/*!
-   Draw the Wheel's ticks
-
-   \param painter Painter
-   \param rect Geometry for the wheel
-*/
-void QwtWheel::drawTicks( QPainter *painter, const QRectF &rect )
-{
-    const double range = d_data->maximum - d_data->minimum;
-
-    if ( range == 0.0 || d_data->totalAngle == 0.0 )
-    {
-        return;
-    }
-
-    const QPen lightPen( palette().color( QPalette::Light ), 
-        0, Qt::SolidLine, Qt::FlatCap );
-    const QPen darkPen( palette().color( QPalette::Dark ), 
-        0, Qt::SolidLine, Qt::FlatCap );
-
-    const double cnvFactor = qAbs( d_data->totalAngle / range );
-    const double halfIntv = 0.5 * d_data->viewAngle / cnvFactor;
-    const double loValue = value() - halfIntv;
-    const double hiValue = value() + halfIntv;
-    const double tickWidth = 360.0 / double( d_data->tickCount ) / cnvFactor;
-    const double sinArc = qFastSin( d_data->viewAngle * M_PI / 360.0 );
-
-    if ( d_data->orientation == Qt::Horizontal )
-    {
-        const double radius = rect.width() * 0.5;
-
-        double l1 = rect.top() + d_data->wheelBorderWidth;
-        double l2 = rect.bottom() - d_data->wheelBorderWidth - 1;
-
-        // draw one point over the border if border > 1
-        if ( d_data->wheelBorderWidth > 1 )
-        {
-            l1--;
-            l2++;
-        }
-
-        const double maxpos = rect.right() - 2;
-        const double minpos = rect.left() + 2;
-
-        // draw tick marks
-        for ( double tickValue = ::ceil( loValue / tickWidth ) * tickWidth;
-            tickValue < hiValue; tickValue += tickWidth )
-        {
-            const double angle = qwtRadians( tickValue - value() );
-            const double s = qFastSin( angle * cnvFactor );
-
-            const double off = radius * ( sinArc + s ) / sinArc;
-
-            double tickPos;
-            if ( d_data->inverted ) 
-                tickPos = rect.left() + off;
-            else
-                tickPos = rect.right() - off;
-
-            if ( ( tickPos <= maxpos ) && ( tickPos > minpos ) )
-            {
-                painter->setPen( darkPen );
-                painter->drawLine( QPointF( tickPos - 1 , l1 ), 
-                    QPointF( tickPos - 1,  l2 ) );
-                painter->setPen( lightPen );
-                painter->drawLine( QPointF( tickPos, l1 ), 
-                    QPointF( tickPos, l2 ) );
-            }
-        }
-    }
-    else // Qt::Vertical
-    {
-        const double radius = rect.height() * 0.5;
-
-        double l1 = rect.left() + d_data->wheelBorderWidth;
-        double l2 = rect.right() - d_data->wheelBorderWidth - 1;
-
-        if ( d_data->wheelBorderWidth > 1 )
-        {
-            l1--;
-            l2++;
-        }
-
-        const double maxpos = rect.bottom() - 2;
-        const double minpos = rect.top() + 2;
-
-        for ( double tickValue = ::ceil( loValue / tickWidth ) * tickWidth;
-            tickValue < hiValue; tickValue += tickWidth )
-        {
-            const double angle = qwtRadians( tickValue - value() );
-            const double s = qFastSin( angle * cnvFactor );
-
-            const double off = radius * ( sinArc + s ) / sinArc;
-
-            double tickPos;
-
-            if ( d_data->inverted )
-                tickPos = rect.bottom() - off;
-            else
-                tickPos = rect.top() + off;
-
-            if ( ( tickPos <= maxpos ) && ( tickPos > minpos ) )
-            {
-                painter->setPen( darkPen );
-                painter->drawLine( QPointF( l1, tickPos - 1 ), 
-                    QPointF( l2, tickPos - 1 ) );
-                painter->setPen( lightPen );
-                painter->drawLine( QPointF( l1, tickPos ), 
-                    QPointF( l2, tickPos ) );
-            }
-        }
-    }
-}
-
-/*!
-  \brief Set the width of the wheel
-
-  Corresponds to the wheel height for horizontal orientation,
-  and the wheel width for vertical orientation.
-
-  \param width the wheel's width
-  \sa wheelWidth()
-*/
-void QwtWheel::setWheelWidth( int width )
-{
-    d_data->wheelWidth = width;
-    update();
-}
-
-/*!
-  \return Width of the wheel
-  \sa setWheelWidth()
-*/
-int QwtWheel::wheelWidth() const
-{
-    return d_data->wheelWidth;
-}
-
-/*!
-  \return a size hint
-*/
-QSize QwtWheel::sizeHint() const
-{
-    const QSize hint = minimumSizeHint();
-    return hint.expandedTo( QApplication::globalStrut() );
-}
-
-/*!
-  \return Minimum size hint
-  \warning The return value is based on the wheel width.
-*/
-QSize QwtWheel::minimumSizeHint() const
-{
-    QSize sz( 3 * d_data->wheelWidth + 2 * d_data->borderWidth,
-        d_data->wheelWidth + 2 * d_data->borderWidth );
-    if ( d_data->orientation != Qt::Horizontal )
-        sz.transpose();
-
-    return sz;
-}
-
-/*!
-  \brief Set the step size of the counter
-
-  A value <= 0.0 disables stepping
-
-  \param stepSize Single step size
-  \sa singleStep(), setPageStepCount()
-*/
-void QwtWheel::setSingleStep( double stepSize )
-{
-    d_data->singleStep = qMax( stepSize, 0.0 );
-}
-
-/*!
-  \return Single step size
-  \sa setSingleStep()
- */
-double QwtWheel::singleStep() const
-{
-    return d_data->singleStep;
-}
-
-/*!
-  \brief En/Disable step alignment
-
-  When step alignment is enabled value changes initiated by
-  user input ( mouse, keyboard, wheel ) are aligned to
-  the multiples of the single step.
-
-  \param on On/Off
-  \sa stepAlignment(), setSingleStep()
- */
-void QwtWheel::setStepAlignment( bool on )
-{
-    if ( on != d_data->stepAlignment )
-    {
-        d_data->stepAlignment = on;
-    }
-}
-
-/*!
-  \return True, when the step alignment is enabled
-  \sa setStepAlignment(), singleStep()
- */
-bool QwtWheel::stepAlignment() const
-{
-    return d_data->stepAlignment;
-}
-
-/*!
-  \brief Set the page step count  
-    
-  pageStepCount is a multiplicator for the single step size
-  that typically corresponds to the user pressing PageUp or PageDown.
-    
-  A value of 0 disables page stepping. 
-
-  The default value is 1.
-
-  \param count Multiplicator for the single step size
-  \sa pageStepCount(), setSingleStep()
- */
-void QwtWheel::setPageStepCount( int count )
-{
-    d_data->pageStepCount = qMax( 0, count );
-}
-
-/*! 
-  \return Page step count
-  \sa setPageStepCount(), singleStep()
- */
-int QwtWheel::pageStepCount() const
-{
-    return d_data->pageStepCount;
-}
-
-/*!
-  \brief Set the minimum and maximum values
-
-  The maximum is adjusted if necessary to ensure that the range remains valid.
-  The value might be modified to be inside of the range.
-
-  \param min Minimum value
-  \param max Maximum value
-
-  \sa minimum(), maximum()
- */
-void QwtWheel::setRange( double min, double max )
-{
-    max = qMax( min, max );
-
-    if ( d_data->minimum == min && d_data->maximum == max )
-        return;
-
-    d_data->minimum = min;
-    d_data->maximum = max;
-
-    if ( d_data->value < min || d_data->value > max )
-    {
-        d_data->value = qBound( min, d_data->value, max );
-
-        update();
-        Q_EMIT valueChanged( d_data->value );
-    }
-}
-/*!
-  Set the minimum value of the range
-
-  \param value Minimum value
-  \sa setRange(), setMaximum(), minimum()
-
-  \note The maximum is adjusted if necessary to ensure that the range remains valid.
-*/
-void QwtWheel::setMinimum( double value )
-{
-    setRange( value, maximum() );
-}
-
-/*!
-  \return The minimum of the range
-  \sa setRange(), setMinimum(), maximum()
-*/
-double QwtWheel::minimum() const
-{
-    return d_data->minimum;
-}
-
-/*!
-  Set the maximum value of the range
-
-  \param value Maximum value
-  \sa setRange(), setMinimum(), maximum()
-*/
-void QwtWheel::setMaximum( double value )
-{
-    setRange( minimum(), value );
-}
-
-/*!
-  \return The maximum of the range
-  \sa setRange(), setMaximum(), minimum()
-*/
-double QwtWheel::maximum() const
-{
-    return d_data->maximum;
-}
-
-/*!
-  \brief Set a new value without adjusting to the step raster
-
-  \param value New value
-
-  \sa value(), valueChanged()
-  \warning The value is clipped when it lies outside the range.
-*/
-void QwtWheel::setValue( double value )
-{
-    stopFlying();
-    d_data->isScrolling = false;
-
-    value = qBound( d_data->minimum, value, d_data->maximum );
-
-    if ( d_data->value != value )
-    {
-        d_data->value = value;
-
-        update();
-        Q_EMIT valueChanged( d_data->value );
-    }
-}
-
-/*!
-  \return Current value of the wheel
-  \sa setValue(), valueChanged()
- */
-double QwtWheel::value() const
-{
-    return d_data->value;
-}
-
-/*!
-  \brief En/Disable inverted appearance
-
-  An inverted wheel increases its values in the opposite direction.
-  The direction of an inverted horizontal wheel will be from right to left
-  an inverted vertical wheel will increase from bottom to top.
-  
-  \param on En/Disable inverted appearance
-  \sa isInverted()
- 
- */
-void QwtWheel::setInverted( bool on )
-{
-    if ( d_data->inverted != on )
-    {
-        d_data->inverted = on;
-        update();
-    }
-}
-
-/*!
-  \return True, when the wheel is inverted
-  \sa setInverted()
- */
-bool QwtWheel::isInverted() const
-{
-    return d_data->inverted;
-}
-
-/*!
-  \brief En/Disable wrapping
-
-  If wrapping is true stepping up from maximum() value will take 
-  you to the minimum() value and vice versa. 
-
-  \param on En/Disable wrapping
-  \sa wrapping()
- */
-void QwtWheel::setWrapping( bool on )
-{
-    d_data->wrapping = on;
-}
-
-/*!
-  \return True, when wrapping is set
-  \sa setWrapping()
- */
-bool QwtWheel::wrapping() const
-{
-    return d_data->wrapping;
-}
-
-/*!
-  \brief Set the slider's mass for flywheel effect.
-
-  If the slider's mass is greater then 0, it will continue
-  to move after the mouse button has been released. Its speed
-  decreases with time at a rate depending on the slider's mass.
-  A large mass means that it will continue to move for a
-  long time.
-
-  Derived widgets may overload this function to make it public.
-
-  \param mass New mass in kg
-
-  \bug If the mass is smaller than 1g, it is set to zero.
-       The maximal mass is limited to 100kg.
-  \sa mass()
-*/
-void QwtWheel::setMass( double mass )
-{
-    if ( mass < 0.001 )
-    {
-        d_data->mass = 0.0;
-    }
-    else
-    {
-        d_data->mass = qMin( 100.0, mass );
-    }
-
-    if ( d_data->mass <= 0.0 )
-        stopFlying();
-}
-
-/*!
-  \return mass
-  \sa setMass()
-*/
-double QwtWheel::mass() const
-{
-    return d_data->mass;
-}
-
-//!  Stop the flying movement of the wheel
-void QwtWheel::stopFlying()
-{
-    if ( d_data->timerId != 0 )
-    {
-        killTimer( d_data->timerId );
-        d_data->timerId = 0;
-        d_data->speed = 0.0;
-    }
-}
-
-double QwtWheel::boundedValue( double value ) const
-{
-    const double range = d_data->maximum - d_data->minimum;
-    
-    if ( d_data->wrapping && range >= 0.0 )
-    {
-        if ( value < d_data->minimum )
-        {
-            value += ::ceil( ( d_data->minimum - value ) / range ) * range;
-        }       
-        else if ( value > d_data->maximum )
-        {
-            value -= ::ceil( ( value - d_data->maximum ) / range ) * range;
-        }
-    }
-    else
-    {
-        value = qBound( d_data->minimum, value, d_data->maximum );
-    }
-
-    return value;
-}
-
-double QwtWheel::alignedValue( double value ) const
-{
-    const double stepSize = d_data->singleStep;
-
-    if ( stepSize > 0.0 )
-    {
-        value = d_data->minimum +
-            qRound( ( value - d_data->minimum ) / stepSize ) * stepSize;
-
-        if ( stepSize > 1e-12 )
-        {
-            if ( qFuzzyCompare( value + 1.0, 1.0 ) )
-            {
-                // correct rounding error if value = 0
-                value = 0.0;
-            }
-            else if ( qFuzzyCompare( value, d_data->maximum ) )
-            {
-                // correct rounding error at the border
-                value = d_data->maximum;
-            }
-        }
-    }       
-
-    return value;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_wheel.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_wheel.h
deleted file mode 100644
index 4592c639ea18083806ad4b0e8537e07ee6c67b80..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_wheel.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_WHEEL_H
-#define QWT_WHEEL_H
-
-#include "qwt_global.h"
-#include <qwidget.h>
-
-/*!
-  \brief The Wheel Widget
-
-  The wheel widget can be used to change values over a very large range
-  in very small steps. Using the setMass() member, it can be configured
-  as a flying wheel.
-
-  The default range of the wheel is [0.0, 100.0]
-
-  \sa The radio example.
-*/
-class QWT_EXPORT QwtWheel: public QWidget
-{
-    Q_OBJECT
-
-    Q_PROPERTY( Qt::Orientation orientation
-                READ orientation WRITE setOrientation )
-
-    Q_PROPERTY( double value READ value WRITE setValue )
-    Q_PROPERTY( double minimum READ minimum WRITE setMinimum )
-    Q_PROPERTY( double maximum READ maximum WRITE setMaximum )
-
-    Q_PROPERTY( double singleStep READ singleStep WRITE setSingleStep )
-    Q_PROPERTY( int pageStepCount READ pageStepCount WRITE setPageStepCount )
-    Q_PROPERTY( bool stepAlignment READ stepAlignment WRITE setStepAlignment )
-
-    Q_PROPERTY( bool tracking READ isTracking WRITE setTracking )
-    Q_PROPERTY( bool wrapping READ wrapping WRITE setWrapping )
-    Q_PROPERTY( bool inverted READ isInverted WRITE setInverted )
-
-    Q_PROPERTY( double mass READ mass WRITE setMass )
-    Q_PROPERTY( int updateInterval READ updateInterval WRITE setUpdateInterval )
-
-    Q_PROPERTY( double totalAngle READ totalAngle WRITE setTotalAngle )
-    Q_PROPERTY( double viewAngle READ viewAngle WRITE setViewAngle )
-    Q_PROPERTY( int tickCount READ tickCount WRITE setTickCount )
-    Q_PROPERTY( int wheelWidth READ wheelWidth WRITE setWheelWidth )
-    Q_PROPERTY( int borderWidth READ borderWidth WRITE setBorderWidth )
-    Q_PROPERTY( int wheelBorderWidth READ wheelBorderWidth WRITE setWheelBorderWidth )
-
-public:
-    explicit QwtWheel( QWidget *parent = NULL );
-    virtual ~QwtWheel();
-
-    double value() const;
-
-    void setOrientation( Qt::Orientation );
-    Qt::Orientation orientation() const;
-
-    double totalAngle() const;
-    double viewAngle() const;
-
-    void setTickCount( int );
-    int tickCount() const;
-
-    void setWheelWidth( int );
-    int wheelWidth() const;
-
-    void setWheelBorderWidth( int );
-    int wheelBorderWidth() const;
-
-    void setBorderWidth( int );
-    int borderWidth() const;
-
-    void setInverted( bool tf );
-    bool isInverted() const;
-
-    void setWrapping( bool tf );
-    bool wrapping() const;
-
-    void setSingleStep( double );
-    double singleStep() const;
-
-    void setPageStepCount( int );
-    int pageStepCount() const;
-
-    void setStepAlignment( bool on );
-    bool stepAlignment() const;
-
-    void setRange( double vmin, double vmax );
-
-    void setMinimum( double min );
-    double minimum() const;
-
-    void setMaximum( double max );
-    double maximum() const;
-
-    void setUpdateInterval( int );
-    int updateInterval() const;
-
-    void setTracking( bool enable );
-    bool isTracking() const;
-
-    double mass() const;
-
-public Q_SLOTS:
-    void setValue( double );
-    void setTotalAngle ( double );
-    void setViewAngle( double );
-    void setMass( double );
-
-Q_SIGNALS:
-
-    /*!
-      \brief Notify a change of value.
-
-      When tracking is enabled this signal will be emitted every
-      time the value changes. 
-
-      \param value new value
-      \sa setTracking()
-    */
-    void valueChanged( double value );
-
-    /*!
-      This signal is emitted when the user presses the
-      the wheel with the mouse
-    */
-    void wheelPressed();
-
-    /*!
-      This signal is emitted when the user releases the mouse
-    */
-    void wheelReleased();
-
-    /*!
-      This signal is emitted when the user moves the
-      wheel with the mouse.
-
-      \param value new value
-    */
-    void wheelMoved( double value );
-
-protected:
-    virtual void paintEvent( QPaintEvent * );
-    virtual void mousePressEvent( QMouseEvent * );
-    virtual void mouseReleaseEvent( QMouseEvent * );
-    virtual void mouseMoveEvent( QMouseEvent * );
-    virtual void keyPressEvent( QKeyEvent * );
-    virtual void wheelEvent( QWheelEvent * );
-    virtual void timerEvent( QTimerEvent * );
-
-    void stopFlying();
-
-    QRect wheelRect() const;
-
-    virtual QSize sizeHint() const;
-    virtual QSize minimumSizeHint() const;
-
-    virtual void drawTicks( QPainter *, const QRectF & );
-    virtual void drawWheelBackground( QPainter *, const QRectF & );
-
-    virtual double valueAt( const QPoint & ) const;
-
-private:
-    double alignedValue( double ) const;
-    double boundedValue( double ) const;
-
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_widget_overlay.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_widget_overlay.cpp
deleted file mode 100644
index ed8ac4c9738b82f5c0ec9d295477aaf619a67a81..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_widget_overlay.cpp
+++ /dev/null
@@ -1,376 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#include "qwt_widget_overlay.h"
-#include "qwt_painter.h"
-#include <qpainter.h>
-#include <qpaintengine.h>
-#include <qimage.h>
-#include <qevent.h>
-
-static QImage::Format qwtMaskImageFormat()
-{
-    if ( QwtPainter::isX11GraphicsSystem() )
-        return QImage::Format_ARGB32;
-
-    return QImage::Format_ARGB32_Premultiplied;
-}
-
-static QRegion qwtAlphaMask( 
-    const QImage& image, const QVector<QRect> rects )
-{
-    const int w = image.width();
-    const int h = image.height();
-
-    QRegion region;
-    QRect rect;
-
-    for ( int i = 0; i < rects.size(); i++ )
-    {
-        int x1, x2, y1, y2;
-        rects[i].getCoords( &x1, &y1, &x2, &y2 );
-
-        x1 = qMax( x1, 0 );
-        x2 = qMin( x2, w - 1 );
-        y1 = qMax( y1, 0 );
-        y2 = qMin( y2, h - 1 );
-
-        for ( int y = y1; y <= y2; ++y ) 
-        {
-            bool inRect = false;
-            int rx0 = -1;
-
-            const uint *line = 
-                reinterpret_cast<const uint *> ( image.scanLine( y ) ) + x1;
-            for ( int x = x1; x <= x2; x++ ) 
-            {
-                const bool on = ( ( *line++ >> 24 ) != 0 );
-                if ( on != inRect ) 
-                {
-                    if ( inRect  ) 
-                    {
-                        rect.setCoords( rx0, y, x - 1, y );
-                        region += rect;
-                    } 
-                    else 
-                    {
-                        rx0 = x;
-                    }
-
-                    inRect = on;
-                } 
-            }
-
-            if ( inRect ) 
-            {
-                rect.setCoords( rx0, y, x2, y );
-                region = region.united( rect );
-            }
-        }
-    }
-
-    return region;
-}
-
-class QwtWidgetOverlay::PrivateData
-{
-public:
-    PrivateData():
-        maskMode( QwtWidgetOverlay::MaskHint ),
-        renderMode( QwtWidgetOverlay::AutoRenderMode ),
-        rgbaBuffer( NULL )
-    {
-    }
-
-    ~PrivateData()
-    {
-        resetRgbaBuffer();
-    }
-
-    void resetRgbaBuffer()
-    {
-        if ( rgbaBuffer )
-        {
-            ::free( rgbaBuffer );
-            rgbaBuffer = NULL;
-        }
-    }
-
-    MaskMode maskMode;
-    RenderMode renderMode;
-    uchar *rgbaBuffer;
-};
-
-/*!
-   \brief Constructor
-   \param widget Parent widget, where the overlay is aligned to
-*/
-QwtWidgetOverlay::QwtWidgetOverlay( QWidget* widget ):
-    QWidget( widget )
-{
-    d_data = new PrivateData;
-
-    setAttribute( Qt::WA_TransparentForMouseEvents );
-    setAttribute( Qt::WA_NoSystemBackground );
-    setFocusPolicy( Qt::NoFocus );
-
-    if ( widget )
-    {
-        resize( widget->size() );
-        widget->installEventFilter( this );
-    }
-}
-
-//! Destructor
-QwtWidgetOverlay::~QwtWidgetOverlay()
-{
-    delete d_data;
-}
-
-/*!
-   \brief Specify how to find the mask for the overlay
-
-   \param mode New mode
-   \sa maskMode()
- */
-void QwtWidgetOverlay::setMaskMode( MaskMode mode )
-{
-    if ( mode != d_data->maskMode )
-    {
-        d_data->maskMode = mode;
-        d_data->resetRgbaBuffer();
-    }
-}
-
-/*!
-   \return Mode how to find the mask for the overlay
-   \sa setMaskMode()
- */
-QwtWidgetOverlay::MaskMode QwtWidgetOverlay::maskMode() const
-{
-    return d_data->maskMode;
-}
-
-/*!
-   Set the render mode
-   \param mode Render mode
-
-   \sa RenderMode, renderMode()
-*/
-void QwtWidgetOverlay::setRenderMode( RenderMode mode )
-{
-    d_data->renderMode = mode;
-}
-
-/*!
-   \return Render mode
-   \sa RenderMode, setRenderMode()
- */
-QwtWidgetOverlay::RenderMode QwtWidgetOverlay::renderMode() const
-{
-    return d_data->renderMode;
-}
-
-/*!
-   Recalculate the mask and repaint the overlay
- */
-void QwtWidgetOverlay::updateOverlay()
-{
-    updateMask();
-    update();
-}
-
-void QwtWidgetOverlay::updateMask()
-{
-    d_data->resetRgbaBuffer();
-
-    QRegion mask;
-
-    if ( d_data->maskMode == QwtWidgetOverlay::MaskHint )
-    {
-        mask = maskHint();
-    }
-    else if ( d_data->maskMode == QwtWidgetOverlay::AlphaMask )
-    {
-        // TODO: the image doesn't need to be larger than
-        //       the bounding rectangle of the hint !!
-
-        QRegion hint = maskHint();
-        if ( hint.isEmpty() )
-            hint += QRect( 0, 0, width(), height() );
-
-        // A fresh buffer from calloc() is usually faster
-        // than reinitializing an existing one with
-        // QImage::fill( 0 ) or memset()
-
-        d_data->rgbaBuffer = ( uchar* )::calloc( width() * height(), 4 );
-
-        QImage image( d_data->rgbaBuffer, 
-            width(), height(), qwtMaskImageFormat() );
-
-        QPainter painter( &image );
-        draw( &painter );
-        painter.end();
-
-        mask = qwtAlphaMask( image, hint.rects() );
-
-        if ( d_data->renderMode == QwtWidgetOverlay::DrawOverlay )
-        {
-            // we don't need the buffer later
-            d_data->resetRgbaBuffer();
-        }
-    }
-
-    // A bug in Qt initiates a full repaint of the widget
-    // when we change the mask, while we are visible !
-
-    setVisible( false );
-
-    if ( mask.isEmpty() )
-        clearMask();
-    else
-        setMask( mask );
-
-    setVisible( true );
-}
-
-/*!
-  Paint event
-  \param event Paint event
-
-  \sa drawOverlay()
-*/
-void QwtWidgetOverlay::paintEvent( QPaintEvent* event )
-{
-    const QRegion clipRegion = event->region();
-
-    QPainter painter( this );
-
-    bool useRgbaBuffer = false;
-    if ( d_data->renderMode == QwtWidgetOverlay::CopyAlphaMask )
-    {
-        useRgbaBuffer = true;
-    }
-    else if ( d_data->renderMode == QwtWidgetOverlay::AutoRenderMode )
-    {
-        if ( painter.paintEngine()->type() == QPaintEngine::Raster )
-            useRgbaBuffer = true;
-    }
-
-    if ( d_data->rgbaBuffer && useRgbaBuffer )
-    {
-        const QImage image( d_data->rgbaBuffer, 
-            width(), height(), qwtMaskImageFormat() );
-
-        QVector<QRect> rects;
-        if ( clipRegion.rects().size() > 2000 )
-        {
-            // the region is to complex
-            painter.setClipRegion( clipRegion );
-            rects += clipRegion.boundingRect();
-        }
-        else
-        {
-            rects = clipRegion.rects();
-        }
-
-        for ( int i = 0; i < rects.size(); i++ )
-        {
-            const QRect r = rects[i];
-            painter.drawImage( r.topLeft(), image, r );
-        }
-    }
-    else
-    {
-        painter.setClipRegion( clipRegion );
-        draw( &painter );
-    }
-}
-
-/*!
-  Resize event
-  \param event Resize event
-*/
-void QwtWidgetOverlay::resizeEvent( QResizeEvent* event )
-{
-    Q_UNUSED( event );
-
-    d_data->resetRgbaBuffer();
-}
-
-void QwtWidgetOverlay::draw( QPainter *painter ) const
-{
-    QWidget *widget = const_cast< QWidget *>( parentWidget() );
-    if ( widget )
-    {
-        painter->setClipRect( parentWidget()->contentsRect() );
-
-        // something special for the plot canvas
-
-        const int idx = widget->metaObject()->indexOfMethod( "borderPath(QRect)" );
-        if ( idx >= 0 )
-        {
-            QPainterPath clipPath;
-
-            ( void )QMetaObject::invokeMethod(
-                widget, "borderPath", Qt::DirectConnection,
-                Q_RETURN_ARG( QPainterPath, clipPath ), Q_ARG( QRect, rect() ) );
-
-            if (!clipPath.isEmpty())
-                painter->setClipPath( clipPath, Qt::IntersectClip );
-        }
-    }
-
-    drawOverlay( painter );
-}
-
-/*!
-   \brief Calculate an approximation for the mask
-
-   - MaskHint
-     The hint is used as mask.
-
-   - AlphaMask
-     The hint is used to speed up the algorithm
-     for calculating a mask from non transparent pixels
-
-   - NoMask
-     The hint is unused.
-
-   The default implementation returns an invalid region
-   indicating no hint.
-
-   \return Hint for the mask
- */
-QRegion QwtWidgetOverlay::maskHint() const
-{
-    return QRegion();
-}
-
-/*!
-  \brief Event filter
-
-  Resize the overlay according to the size of the parent widget.
-
-  \param object Object to be filtered
-  \param event Event
-
-  \return See QObject::eventFilter()
-*/
-
-bool QwtWidgetOverlay::eventFilter( QObject* object, QEvent* event )
-{
-    if ( object == parent() && event->type() == QEvent::Resize )
-    {
-        QResizeEvent *resizeEvent = static_cast<QResizeEvent *>( event );
-        resize( resizeEvent->size() );
-    }
-
-    return QObject::eventFilter( object, event );
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_widget_overlay.h b/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_widget_overlay.h
deleted file mode 100644
index b820ec20bad2be4688c3f2f945156c05e3461d9f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ExternLib/qwt/qwt_widget_overlay.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997   Josef Wilgen
- * Copyright (C) 2002   Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
-
-#ifndef QWT_WIDGET_OVERLAY_H
-#define QWT_WIDGET_OVERLAY_H
-
-#include "qwt_global.h"
-#include <qwidget.h>
-#include <qregion.h>
-
-class QPainter;
-
-/*!
-   \brief An overlay for a widget
-
-   The main use case of an widget overlay is to avoid
-   heavy repaint operation of the widget below.
-
-   F.e. in combination with the plot canvas an overlay 
-   avoid replots as the content of the canvas can be restored from 
-   its backing store.
-
-   QwtWidgetOverlay is an abstract base class. Deriving classes are
-   supposed to reimplement the following methods:
-
-   - drawOverlay()
-   - maskHint()
-
-   Internally QwtPlotPicker uses overlays for displaying 
-   the rubber band and the tracker text.
-
-   \sa QwtPlotCanvas::BackingStore
- */
-class QWT_EXPORT QwtWidgetOverlay: public QWidget
-{
-public:
-    /*!
-       \brief Mask mode
-
-       When using masks the widget below gets paint events for
-       the masked regions of the overlay only. Otherwise
-       Qt triggers full repaints. On less powerful hardware
-       ( f.e embedded systems ) - or when using the raster paint 
-       engine on a remote desktop - bit blitting is a noticeable
-       operation, that needs to be avoided.
-       
-       If and how to mask depends on how expensive the calculation 
-       of the mask is and how many pixels can be excluded by the mask.
-
-       The default setting is MaskHint.
-
-       \sa setMaskMode(), maskMode()
-     */
-    enum MaskMode
-    {
-        //! Don't use a mask.
-        NoMask,
-
-        /*!
-           \brief Use maskHint() as mask
-
-           For many situations a fast approximation is good enough 
-           and it is not necessary to build a more detailed mask
-           ( f.e the bounding rectangle of a text ).
-         */
-        MaskHint,
-
-        /*!
-           \brief Calculate a mask by checking the alpha values
-
-           Sometimes it is not possible to give a fast approximation
-           and the mask needs to be calculated by drawing the overlay
-           and testing the result.
-          
-           When a valid maskHint() is available
-           only pixels inside this approximation are checked.
-         */
-        AlphaMask
-    };
-
-    /*!
-       \brief Render mode
-
-       For calculating the alpha mask the overlay has already
-       been painted to a temporary QImage. Instead of rendering
-       the overlay twice this buffer can be copied for drawing
-       the overlay.
-
-       On graphic systems using the raster paint engine ( QWS, Windows )
-       it means usually copying some memory only. On X11 it results in an
-       expensive operation building a pixmap and for simple overlays
-       it might not be recommended.
-
-       \note The render mode has no effect, when maskMode() != AlphaMask.
-     */
-    enum RenderMode
-    {
-        //! Copy the buffer, when using the raster paint engine.
-        AutoRenderMode,
-
-        //! Always copy the buffer
-        CopyAlphaMask,
-
-        //! Never copy the buffer
-        DrawOverlay
-    };
-
-    QwtWidgetOverlay( QWidget* );
-    virtual ~QwtWidgetOverlay();
-
-    void setMaskMode( MaskMode );
-    MaskMode maskMode() const;
-
-    void setRenderMode( RenderMode );
-    RenderMode renderMode() const;
-
-    void updateOverlay();
-
-    virtual bool eventFilter( QObject *, QEvent *);
-
-protected:
-    virtual void paintEvent( QPaintEvent* event );
-    virtual void resizeEvent( QResizeEvent* event );
-
-    virtual QRegion maskHint() const;
-
-    /*!
-       Draw the widget overlay
-       \param painter Painter
-     */
-    virtual void drawOverlay( QPainter *painter ) const = 0;
-
-private:
-    void updateMask();
-    void draw( QPainter * ) const;
-
-private:
-    class PrivateData;
-    PrivateData *d_data;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/FeatureObserver.cpp b/VimbaCPP/Examples/VimbaViewer/Source/FeatureObserver.cpp
deleted file mode 100644
index d2e947417c525497d9ad4ae63e84c489c76cd95e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/FeatureObserver.cpp
+++ /dev/null
@@ -1,218 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FeatureObserver.cpp
-
-  Description: A notification whenever feature state or value has been changed
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "FeatureObserver.h"
-
-#ifndef WIN32
-    #include <cstring>
-#endif
-
-
-FeatureObserver::FeatureObserver ( CameraPtr pCam ) : m_bIsEventRunning ( false )
-{ 
-    m_pCam = pCam;
-    m_Timer = new QTimer(this);
-    connect(m_Timer, SIGNAL(timeout()), this, SLOT(checkSendEvent()));
-}
-
-FeatureObserver::~FeatureObserver ( void )
-{
-
-}
-
-void FeatureObserver::startObserverTimer ( void )
-{
-    if( !m_Timer->isActive())
-    {
-        m_Timer->start(500);
-    }
-}
-
-void FeatureObserver::stopObserverTimer ( void )
-{
-    if( m_Timer->isActive())
-    {
-        m_Timer->stop();
-    }
-}
-
-void FeatureObserver::checkSendEvent ( void )
-{
-    emit setEventMessage(m_Message);
-    m_Message.clear();
-    stopObserverTimer();
-    m_bIsEventRunning = false;
-}
-
-bool FeatureObserver::isEventRunning ( void )
-{
-    return m_bIsEventRunning;
-}
-
-void FeatureObserver::FeatureChanged ( const AVT::VmbAPI::FeaturePtr &feature )
-{
-    if ( feature != NULL )
-    {
-        std::string stdName("");
-
-        VmbError_t error = feature->GetDisplayName(stdName);
-        if(stdName.empty())
-        {
-            error = feature->GetName(stdName);
-        }
-
-        if(VmbErrorSuccess == error)    
-        {
-            QString sName = QString::fromStdString(stdName);
-
-            VmbFeatureDataType pDataType = VmbFeatureDataUnknown;
-            error = feature->GetDataType(pDataType);
-
-            if(VmbErrorSuccess == error)
-            {
-                VmbInt64_t  nValue64    = 0;
-                double      dValue      = 0;
-                bool        bValue      = false;
-
-                QString sValue("");
-                std::string stdValue;
-
-                switch(pDataType)
-                {
-                case VmbFeatureDataInt:
-                    if(VmbErrorSuccess == feature->GetValue(nValue64))
-                    {
-                        sValue = QString::number(nValue64);
-                        isEventFeature( feature );
-                    }
-                    break;
-
-                case VmbFeatureDataFloat:
-                    if(VmbErrorSuccess == feature->GetValue(dValue))
-                        sValue = QString::number(dValue);
-                    break;
-
-                case VmbFeatureDataEnum:
-                    if(VmbErrorSuccess == feature->GetValue(stdValue))
-                        sValue = QString::fromStdString(stdValue);
-                    break;
-
-                case VmbFeatureDataString:
-                    if(VmbErrorSuccess == feature->GetValue(stdValue))
-                        sValue = QString::fromStdString (stdValue);
-                    break;
-
-                case VmbFeatureDataBool:
-                    if(VmbErrorSuccess == feature->GetValue(bValue))
-                        bValue ? sValue = "true" : sValue = "false";
-                    break;
-
-                case VmbFeatureDataCommand: 
-                    sValue = "[COMMAND]";
-                    break;
-
-                case VmbFeatureDataRaw: 
-                    sValue = "Click here to open";
-                    break;
-
-                default: break;
-
-                }
-
-                bool bIsWritable = false;
-                if( VmbErrorSuccess == feature->IsWritable(bIsWritable) )
-                {
-                    emit setChangedFeature(sName, sValue, bIsWritable );
-                }
-            }
-        }
-    }
-}
-
-bool FeatureObserver::isEventFeature( const FeaturePtr pFeature )
-{
-    std::string sCategory;
-    if (    !SP_ISNULL( pFeature )                                                  // Test for being beneath EventID category
-         && VmbErrorSuccess == SP_ACCESS( pFeature )->GetCategory( sCategory )
-         && std::strstr( sCategory.c_str(), "/EventID" ))
-    {
-        sendEventMessage( pFeature );                                               // Send Qt Signal to display event data
-        return true;
-    }
-    else
-    {
-        return false;
-    }
-}
-
-void FeatureObserver::sendEventMessage ( const FeaturePtr pFeature )
-{
-    FeaturePtr pFeatureTimeStamp;                           // Every event feature has two according event data features. These are
-    FeaturePtr pFeatureFrameID;                             // XYZTimestamp and XYZFrameID
-
-    std::string name;
-    std::string nameTimestamp;
-    std::string nameFrameID;
-
-    VmbInt64_t nValue;
-    VmbInt64_t nValueTimeStamp = 0;
-    VmbInt64_t nValueFrameID = 0;
-    
-    static int i = 0;
-
-    if ( VmbErrorSuccess == SP_ACCESS( pFeature )->GetName( name ))
-    {
-        nameTimestamp = nameFrameID = name;
-        nameTimestamp.append( "Timestamp" );                // Construct the Timestamp feature name
-        nameFrameID.append( "FrameID" );                    // Construct the FrameID feature name
-        if (    VmbErrorSuccess == SP_ACCESS( m_pCam )->GetFeatureByName( nameTimestamp.c_str(), pFeatureTimeStamp )
-             && VmbErrorSuccess == SP_ACCESS( m_pCam )->GetFeatureByName( nameFrameID.c_str(), pFeatureFrameID )        // Get the values of:
-             && VmbErrorSuccess == SP_ACCESS( pFeatureTimeStamp )->GetValue( nValueTimeStamp )                          // - the according timestamp event data
-             && VmbErrorSuccess == SP_ACCESS( pFeatureFrameID )->GetValue( nValueFrameID )                              // - the according frame ID event data
-             && VmbErrorSuccess == SP_ACCESS( pFeature )->GetValue( nValue ))                                           // - the feature itself
-        {
-            ++i;
-
-            QString sMessage( name.c_str() );
-            sMessage.   append( " (" ).append( QString::number( nValue )).append( ")     " ).append( "\t" ).
-                        append( "Timestamp: " ).append( QString::number( nValueTimeStamp )).
-                        append( ", FrameID: " ).append(QString::number(nValueFrameID));
-
-            m_Message << sMessage;
-            m_bIsEventRunning = true;
-
-            if( MAX_EVENTS == i )
-            {
-                emit setEventMessage( m_Message );
-                m_Message.clear();
-                i = 0;
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/FeatureObserver.h b/VimbaCPP/Examples/VimbaViewer/Source/FeatureObserver.h
deleted file mode 100644
index 405798760dddf42c12a823b22a92af3e2eafefa9..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/FeatureObserver.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FeatureObserver.h
-
-  Description: A notification whenever feature state or value has been changed
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef FEATUREOBSERVER_H
-#define FEATUREOBSERVER_H
-
-#include <QStringList>
-#include <QObject>
-#include <QTimer>
-#include <VimbaCPP/Include/Feature.h>
-#include <VimbaCPP/Include/IFeatureObserver.h>
-#include <VimbaCPP/Include/VimbaSystem.h>
-
-const unsigned int MAX_EVENTS = 13;
-
-using AVT::VmbAPI::FeaturePtr;
-using AVT::VmbAPI::CameraPtr;
-
-class FeatureObserver : public QObject, public AVT::VmbAPI::IFeatureObserver
-{
-    Q_OBJECT
-
-    private:
-          CameraPtr         m_pCam;
-          QStringList       m_Message;
-          QTimer           *m_Timer;
-          bool              m_bIsEventRunning;
-          
-    public:
-        
-          FeatureObserver(CameraPtr pCam);
-         ~FeatureObserver(void);
-
-          void startObserverTimer ( void );
-          void stopObserverTimer  ( void );
-          bool isEventRunning     ( void );
-          virtual void FeatureChanged(const FeaturePtr &feature);  
-
-    protected:
-    private:
-          bool isEventFeature( const FeaturePtr pFeature );
-          void sendEventMessage ( const FeaturePtr pFeature );
-    
-    private slots:
-          void checkSendEvent ( void );
-
-    signals:
-          void setChangedFeature ( const QString &sFeat, const QString &sValue, const bool &bIsWritable );
-          void setEventMessage  ( const QStringList &sMsg );
-};
-
-typedef SP_DECL(FeatureObserver) FeatureObserverPtr;
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ForceIP.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ForceIP.cpp
deleted file mode 100644
index 2e96c4c4d1342aeea0b6056cddc5a63d41ecf2dd..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ForceIP.cpp
+++ /dev/null
@@ -1,1277 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ForceIP.h
-
-  Description: Dialog for sending GigEVision FORCEIP_CMD
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "ForceIP.h"
-#include "qdebug.h"
-#include "qendian.h"
-
-// define feature names for Force IP API usage
-const char* kFeatureSend            = "GevDeviceForceIP";
-const char* kFeatureMacAddress      = "GevDeviceForceMACAddress";
-const char* kFeatureIpAddress       = "GevDeviceForceIPAddress";
-const char* kFeatureSubnetMask      = "GevDeviceForceSubnetMask";
-const char* kFeatureGateway         = "GevDeviceForceGateway";
-const char* kFeatureDeviceSelector  = "DeviceSelector";
-
-ForceIPDialog::ForceIPDialog( AVT::VmbAPI::VimbaSystem &system )
-    : m_Dialog( NULL )
-    , m_InitializedFlag( false )
-    , m_MsgBox( NULL )
-    , m_Sys( system )
-    , m_InterfaceList( NULL )
-    , m_SelectedInterface( -1 )
-    , m_SelectedDevice( -1 )
-{
-    // create and setup Qt dialog
-    this->m_Dialog = new QDialog( this, windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowMaximizeButtonHint );
-    this->m_Ui.setupUi( m_Dialog );
-
-    // setup message box
-    this->m_MsgBox = new QMessageBox( this );
-
-    // create new interface list
-    this->m_InterfaceList = new QList<InterfaceInfo*>();
-}
-
-ForceIPDialog::~ForceIPDialog()
-{
-    // delete allocated pointer
-    if( NULL != this->m_Dialog ) delete m_Dialog;
-    if( NULL != this->m_MsgBox ) delete m_MsgBox;
-
-    // clear and delete interface list
-    if( NULL != this->m_InterfaceList )
-    {
-        this->ClearInterfaceList( &this->m_InterfaceList );
-        delete this->m_InterfaceList;
-        this->m_InterfaceList = NULL;
-    }
-}
-
-bool ForceIPDialog::InitializeDialog()
-{
-    bool            check   = true;
-    VmbErrorType    err     = VmbErrorSuccess;
-
-    // connect slots
-    check = connect( this->m_Ui.comboBox_networkInterface,  SIGNAL(currentIndexChanged(int)),   this, SLOT(OnComboBoxNetworkInterface(int)) );
-    check = connect( this->m_Ui.checkBox_networkInterface,  SIGNAL(clicked(bool)),              this, SLOT(OnCheckBoxNetworkInterface(void)) );
-    check = connect( this->m_Ui.comboBox_deviceSelector,    SIGNAL(currentIndexChanged(int)),   this, SLOT(OnComboBoxDeviceSelector(int)) );
-
-    if( false == check )
-    {
-        this->PrepareMsgBox( QMessageBox::Critical, "Failed to initialize Force IP dialog", err );
-    }
-    else
-    {
-        // reset and disable all widgets
-        this->ResetAllWidgets();
-        this->EnableAllWidgets( false );
-
-        // get available interfaces
-        check = this->GetInterfaces();
-        if( (true == check) && (false == this->m_InterfaceList->isEmpty()) )
-        {
-            // enable network interface group widgets
-            // and update combobox with found interfaces
-            this->EnableNetworkInterfaceGroup( true );
-            this->UpdateInterfaceComboBox();
-
-            // enable force ip command group
-            this->EnableForceIPCommandGroup( true );
-
-            bool enableMACInput = this->m_Ui.checkBox_networkInterface->isChecked();
-            this->m_Ui.lineEdit_forceIPCommandMAC->setEnabled(enableMACInput);
-            this->m_Ui.label_forceIPCommandMAC->setEnabled(enableMACInput);
-        }
-    }
-
-    // in case of any failure, show message box
-    if( false == check )
-    {
-        this->ShowMsgBox();
-    }
-    else
-    {
-        this->m_InitializedFlag = true;
-    }
-
-    return check;
-}
-
-void ForceIPDialog::ResetDialog()
-{
-    // reset all widgets
-    this->ResetAllWidgets();
-
-    // refill interface combobox
-    if( (NULL != this->m_InterfaceList) && (false == this->m_InterfaceList->isEmpty()) )
-    {
-        this->EnableNetworkInterfaceGroup( true );
-        this->UpdateInterfaceComboBox();
-
-        bool enableMACInput = this->m_Ui.checkBox_networkInterface->isChecked();
-        this->m_Ui.lineEdit_forceIPCommandMAC->setEnabled(enableMACInput);
-        this->m_Ui.label_forceIPCommandMAC->setEnabled(enableMACInput);
-    }
-
-}
-
-bool ForceIPDialog::RunDialog()
-{
-    bool            rval        = false;
-    VmbErrorType    err         = VmbErrorSuccess;
-    QString         msg         = "";
-
-    if( NULL != this->m_Dialog )
-    {
-        // run and show Qt dialog
-        int dialogResult = this->m_Dialog->exec();
-
-        // check dialog result (if Send button was clicked or dialog canceled)
-        if( QDialog::Accepted == dialogResult )
-        {
-            // create ForceIP command struct
-            ForceIPCommand command;
-
-            // fetch user input and fill command struct
-            rval = this->CreateCommand( &command );
-            if( true == rval )
-            {
-                // prepare local variables for further usage
-                InterfaceInfo*                              interfaceInfoStruct;
-                AVT::VmbAPI::FeaturePtr                     feature;
-                AVT::VmbAPI::InterfacePtr                   interfacePtr;
-                QMap<const char*, AVT::VmbAPI::FeaturePtr>  featureMapSystem;
-                QMap<const char*, AVT::VmbAPI::FeaturePtr>  featureMapInterface;
-
-                // transer fetched user information to Vimba API
-                // depending which setting was chosen by user
-                // and send command
-                try
-                {
-                    // user System module and send command via all interfaces
-                    // or user Interface module and send on chosen interface
-                    if( -1 == this->m_SelectedInterface )
-                    {
-                        // get MAC address feature
-                        err = m_Sys.GetFeatureByName( kFeatureMacAddress, feature );
-                        if( VmbErrorSuccess != err )
-                        {
-                            msg = "Failed to get feature '" + QString( kFeatureMacAddress ) + "' from System module";
-                            this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                            throw std::exception();
-                        }
-
-                        // add MAC address feature to system map
-                        featureMapSystem.insert( kFeatureMacAddress, feature );
-
-                        // get IP address feature
-                        err = m_Sys.GetFeatureByName( kFeatureIpAddress, feature );
-                        if( VmbErrorSuccess != err )
-                        {
-                            msg = "Failed to get feature '" + QString( kFeatureIpAddress ) + "' from System module";
-                            this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                            throw std::exception();
-                        }
-
-                        // add IP address feature to system map
-                        featureMapSystem.insert( kFeatureIpAddress, feature );
-
-                        // get Subnet mask feature
-                        err = m_Sys.GetFeatureByName( kFeatureSubnetMask, feature );
-                        if( VmbErrorSuccess != err )
-                        {
-                            msg = "Failed to get feature '" + QString( kFeatureSubnetMask ) + "' from System module";
-                            this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                            throw std::exception();
-                        }
-
-                        // add Subnet mask feature to system map
-                        featureMapSystem.insert( kFeatureSubnetMask, feature );
-
-                        // get Gateway feature
-                        err = m_Sys.GetFeatureByName( kFeatureGateway, feature );
-                        if( VmbErrorSuccess != err )
-                        {
-                            msg = "Failed to get feature '" + QString( kFeatureGateway ) + "' from System module";
-                            this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                            throw std::exception();
-                        }
-
-                        // add MAC address feature to system map
-                        featureMapSystem.insert( kFeatureGateway, feature );
-                    }
-                    else
-                    {
-                        // get interface info struct
-                        interfaceInfoStruct = this->m_InterfaceList->at( this->m_SelectedInterface );
-                        if( NULL != interfaceInfoStruct )
-                        {
-                            // get interface pointer and open interface
-                            interfacePtr = interfaceInfoStruct->mInterfacePtr;
-                            if( NULL != interfacePtr )
-                            {
-                                err = interfacePtr->Open();
-                                if( VmbErrorSuccess != err )
-                                {
-                                    msg = "Failed to open interface '" + interfaceInfoStruct->mInterfaceID + "'";
-                                    this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                                    throw std::exception();
-                                }
-
-                                // get device selector feature
-                                err = interfacePtr->GetFeatureByName( kFeatureDeviceSelector, feature );
-                                if( VmbErrorSuccess != err )
-                                {
-                                    msg = "Failed to get feature '" + QString( kFeatureDeviceSelector ) + "' from Interface module";
-                                    this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                                    throw std::exception();
-                                }
-
-                                // add device selector feature to system map
-                                featureMapInterface.insert( kFeatureDeviceSelector, feature );
-
-                                // get IP address feature
-                                err = interfacePtr->GetFeatureByName( kFeatureIpAddress, feature );
-                                if( VmbErrorSuccess != err )
-                                {
-                                    msg = "Failed to get feature '" + QString( kFeatureIpAddress ) + "' from Interface module";
-                                    this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                                    throw std::exception();
-                                }
-
-                                // add IP address feature to system map
-                                featureMapInterface.insert( kFeatureIpAddress, feature );
-
-                                // get Subnet mask feature
-                                err = interfacePtr->GetFeatureByName( kFeatureSubnetMask, feature );
-                                if( VmbErrorSuccess != err )
-                                {
-                                    msg = "Failed to get feature '" + QString( kFeatureSubnetMask ) + "' from Interface module";
-                                    this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                                    throw std::exception();
-                                }
-
-                                // add Subnet mask feature to system map
-                                featureMapInterface.insert( kFeatureSubnetMask, feature );
-
-                                // get Gateway geature
-                                err = interfacePtr->GetFeatureByName( kFeatureGateway, feature );
-                                if( VmbErrorSuccess != err )
-                                {
-                                    msg = "Failed to get feature '" + QString( kFeatureGateway ) + "' from Interface module";
-                                    this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                                    throw std::exception();
-                                }
-
-                                // add Gateway feature to system map
-                                featureMapInterface.insert( kFeatureGateway, feature );
-                            }
-                        }
-                    }
-
-                    // set feature value to Vimba (with regard to System or Interface module choice)
-
-                    // fetch MAC address feature
-                    QMap<const char*, AVT::VmbAPI::FeaturePtr>* featureMapPtr = NULL;
-                    if( -1 == this->m_SelectedInterface )
-                    {
-                        featureMapPtr = &featureMapSystem;
-
-                        // set MAC address to Vimba
-                        rval = this->SetFeatureValue( featureMapPtr, kFeatureMacAddress, command.mMACAddress );
-                        if( false == rval )
-                        {
-                            msg = "Failed to set value '" + Helper::MACToString(command.mMACAddress) + "' for feature '" + QString( kFeatureMacAddress );
-                            this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                            throw std::exception();
-                        }
-                    }
-                    else
-                    {
-                        featureMapPtr = &featureMapInterface;
-
-                        // set device selector to Vimba
-                        rval = this->SetFeatureValue( featureMapPtr, kFeatureDeviceSelector, command.mDeviceSelector );
-                        if( false == rval )
-                        {
-                            msg = "Failed to set value '" + QString::number(command.mDeviceSelector) + "' for feature '" + QString( kFeatureDeviceSelector );
-                            this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                            throw std::exception();
-                        }
-                    }
-
-                    // set IP address to Vimba
-                    rval = this->SetFeatureValue( featureMapPtr, kFeatureIpAddress, command.mIPAddress );
-                    if( false == rval )
-                    {
-                        msg = "Failed to set value '0x" + QString::number(command.mIPAddress, 16).toUpper() + "' for feature '" + QString( kFeatureIpAddress );
-                        this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                        throw std::exception();
-                    }
-
-                    // set Subnet mask to Vimba
-                    rval = this->SetFeatureValue( featureMapPtr, kFeatureSubnetMask, command.mSubnetMask );
-                    if( false == rval )
-                    {
-                        msg = "Failed to set value '0x" + QString::number(command.mSubnetMask, 16).toUpper() + "' for feature '" + QString( kFeatureSubnetMask );
-                        this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                        throw std::exception();
-                    }
-
-                    // set Gateway to Vimba
-                    rval = this->SetFeatureValue( featureMapPtr, kFeatureGateway, command.mGateway );
-                    if( false == rval )
-                    {
-                        msg = "Failed to set value '0x" + QString::number(command.mGateway, 16).toUpper() + "' for feature '" + QString( kFeatureGateway );
-                        this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                        throw std::exception();
-                    }
-
-                    rval = this->SendCommand( &command );
-
-                    // close interface, if necessary
-                    if( (-1 != this->m_SelectedInterface) && (false == SP_ISNULL( interfacePtr )) )
-                    {
-                        err = interfacePtr->Close();
-                        if( VmbErrorSuccess != err )
-                        {
-                            msg = "Failed to close interface '" + interfaceInfoStruct->mInterfaceID + "'";
-                            this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-                            throw std::exception();
-                        }
-                    }
-
-                }
-                catch( std::exception& e )
-                {
-                    this->ShowMsgBox();
-                }
-                catch(...)
-                {
-                    this->ShowMsgBox();
-                }
-
-            }
-
-        }
-    }
-
-    return rval;
-}
-
-void ForceIPDialog::OnComboBoxNetworkInterface( int index )
-{
-    // update selected interface
-    this->m_SelectedInterface = index;
-
-    // get devices for selected interface and update combobox
-    bool check = this->GetDevices();
-    this->UpdateDeviceComboBox();
-
-    // in case devices were found
-    if( true == check )
-    {
-        if( (NULL != this->m_InterfaceList->at(index)->mDevices) && (0 != this->m_InterfaceList->at(index)->mDevices->count()))
-        {
-            this->EnableDeviceSelectorGroup( true );
-        }
-        else
-        {
-            this->ResetDeviceSelectorGroup( true );
-            this->ResetDeviceInformationGroup();
-
-            this->m_Ui.lineEdit_forceIPCommandMAC->setText("");
-
-            this->EnableDeviceSelectorGroup( false );
-            this->EnableDeviceInformationGroup( false );
-        }
-    }
-    else
-    {
-        this->ResetDeviceSelectorGroup( true );
-        this->ResetDeviceInformationGroup();
-
-        this->EnableDeviceSelectorGroup( false );
-        this->EnableDeviceInformationGroup( false );
-    }
-
-}
-
-void ForceIPDialog::OnComboBoxDeviceSelector( int index )
-{
-    // update selected device
-    this->m_SelectedDevice = index;
-
-    if( -1 != this->m_SelectedInterface )
-    {
-        // get device info struct
-        DeviceInfo* deviceInfoStruct = this->m_InterfaceList->at( this->m_SelectedInterface )->mDevices->at( index );
-        if( NULL != deviceInfoStruct )
-        {
-            // enable update device information
-            this->EnableDeviceInformationGroup( true );
-            this->UpdateDeviceInformation( deviceInfoStruct );
-        }
-    }
-}
-
-void ForceIPDialog::OnCheckBoxNetworkInterface( void )
-{
-    // if checkbox is checked,
-    // set internal variable accordingly
-    if( true == this->m_Ui.checkBox_networkInterface->isChecked() )
-    {
-        // reset and disable network interface combobox
-        this->ResetNetworkInterfaceGroup( false );
-        this->m_Ui.comboBox_networkInterface->setEnabled( false );
-
-        //Enable the MAC field
-        this->m_Ui.label_forceIPCommandMAC->setEnabled(true);
-        this->m_Ui.lineEdit_forceIPCommandMAC->setEnabled(true);
-
-        // set selected interface index to -1 (no interface selected)
-        this->m_SelectedInterface = -1;
-
-        // reset and disable device- selector and information group
-        this->ResetDeviceSelectorGroup( true );
-        this->ResetDeviceInformationGroup();
-        this->EnableDeviceSelectorGroup( false );
-        this->EnableDeviceInformationGroup( false );
-    }
-    else
-    {
-        // enable network interface combobox and update it
-        this->m_Ui.comboBox_networkInterface->setEnabled( true );
-
-        //Enable the MAC field
-        this->m_Ui.label_forceIPCommandMAC->setEnabled(false);
-        this->m_Ui.lineEdit_forceIPCommandMAC->setEnabled(false);
-
-        this->UpdateInterfaceComboBox();
-    }
-}
-
-bool ForceIPDialog::GetInterfaces()
-{
-    VmbErrorType err = VmbErrorSuccess;
-
-    // get available interfaces from Vimba
-    // return and show message box, if no interface found
-    AVT::VmbAPI::InterfacePtrVector interfacePtrList;
-    err = m_Sys.GetInterfaces( interfacePtrList );
-    if( VmbErrorSuccess != err )
-    {
-        this->PrepareMsgBox( QMessageBox::Critical, "Failed to get avaiable Interfaces from Vimba", err );
-        return false;
-    }
-    else if( true == interfacePtrList.empty() )
-    {
-        this->PrepareMsgBox( QMessageBox::Critical, "No Interfaces found", err );
-        return false;
-    }
-
-    // set selected interface to first in list
-    this->m_SelectedInterface = 0;
-
-    // prepare local variables for upcoming loop
-    std::string                                 interfaceId = "";
-    VmbInterfaceType                            interfaceType = VmbInterfaceUnknown;
-    AVT::VmbAPI::InterfacePtr                   interfacePtr;
-    AVT::VmbAPI::InterfacePtrVector::iterator   iter_interfaces;
-
-    // iterate through interface list, determine GigE interfaces,
-    // create interface info structs and add them to internal list
-    for( iter_interfaces = interfacePtrList.begin(); iter_interfaces != interfacePtrList.end(); ++iter_interfaces )
-    {
-        // get current interface pointer
-        interfacePtr = *iter_interfaces;
-        if( false == SP_ISNULL(interfacePtr) )
-        {
-            // determine interface type (GigE only)
-            err = interfacePtr->GetType( interfaceType );
-            if( (VmbErrorSuccess != err) || (VmbInterfaceEthernet != interfaceType) )
-            {
-                continue;
-            }
-
-            // get interface ID
-            err = interfacePtr->GetID( interfaceId );
-            if( VmbErrorSuccess != err )
-            {
-                continue;
-            }
-
-            // create interface info struct and initialize it
-            InterfaceInfo* interfaceInfoStruct = new InterfaceInfo;
-            this->InitializeInterfaceInfoStruct( &interfaceInfoStruct );
-
-            // add interface id and pointer to info struct
-            interfaceInfoStruct->mInterfaceID       = QString( interfaceId.c_str() );
-            interfaceInfoStruct->mInterfacePtr      = interfacePtr;
-            interfaceInfoStruct->mDevices           = NULL;
-
-            // add info struct to internal list
-            this->m_InterfaceList->append( interfaceInfoStruct );
-        }
-    }
-
-    // check if GigE interfaces were found
-    if( true == this->m_InterfaceList->isEmpty() )
-    {
-        this->PrepareMsgBox( QMessageBox::Critical, "No GigE Interfaces found", err );
-        return false;
-    }
-
-    return true;
-}
-
-bool ForceIPDialog::GetDevices()
-{
-    bool            rval    = true;
-    VmbErrorType    err     = VmbErrorSuccess;
-
-    // check if valid interface was selected
-    if( -1 != this->m_SelectedInterface )
-    {
-        // get interface info struct for selected interface
-        InterfaceInfo* interfaceInfoStruct = this->m_InterfaceList->at( this->m_SelectedInterface );
-        if( NULL != interfaceInfoStruct )
-        {
-            // check if info struct has no device list allocated
-            if( NULL == interfaceInfoStruct->mDevices )
-            {
-                // allocate new device info struct list
-                interfaceInfoStruct->mDevices = new QList<DeviceInfo*>();
-            }
-            else
-            {
-                // clear already existing device info struct list
-                this->ClearDeviceList( &interfaceInfoStruct->mDevices );
-            }
-
-            // get interface pointer
-            AVT::VmbAPI::InterfacePtr interfacePtr = interfaceInfoStruct->mInterfacePtr;
-            if( false == SP_ISNULL(interfacePtr) )
-            {
-                // open current interface
-                err = interfacePtr->Open();
-                if( VmbErrorSuccess == err )
-                {
-                    AVT::VmbAPI::FeaturePtr feature;
-                    err = interfacePtr->GetFeatureByName( "DeviceUpdateList", feature );
-                    if( VmbErrorSuccess == err )
-                    {
-                        err = feature->RunCommand();
-                    }
-
-                    // get device count
-                    VmbInt64_t deviceCount = 0;
-                    if( VmbErrorSuccess == err )
-                    {
-                        err = interfacePtr->GetFeatureByName( "DeviceCount", feature );
-                        if( VmbErrorSuccess == err )
-                        {
-                            err = feature->GetValue( deviceCount );
-                        }
-                    }
-
-                    // proceed if no error occured and devices were found on interface
-                    if( (VmbErrorSuccess == err) && ( 0 < deviceCount ) )
-                    {
-                        // prepare local variables for loop
-                        std::string temp = "";
-                        VmbInt64_t temp2 = 0;
-                        AVT::VmbAPI::CameraPtr devicePtr;
-                        AVT::VmbAPI::FeaturePtr selectorFeature;
-
-                        // get interface device selector
-                        err = interfacePtr->GetFeatureByName( kFeatureDeviceSelector, selectorFeature );
-                        if( VmbErrorSuccess == err )
-                        {
-                            // iterate through device list
-                            for( int i=0; i<deviceCount; ++i )
-                            {
-                                // select current device
-                                err = selectorFeature->SetValue(i);
-                                if( VmbErrorSuccess == err )
-                                {
-                                    // create device info struct and initialize it
-                                    DeviceInfo* deviceInfoStruct = new DeviceInfo;
-                                    this->InitializeDeviceInfoStruct( &deviceInfoStruct );
-                                    deviceInfoStruct->mDeviceSelector = (VmbInt64_t)i;
-
-                                    // get device id
-                                    err = interfacePtr->GetFeatureByName( "DeviceID", feature );
-                                    if( VmbErrorSuccess == err )
-                                    {
-                                        err = feature->GetValue( temp );
-                                        if( VmbErrorSuccess == err )
-                                        {
-                                            deviceInfoStruct->mDeviceID = QString( temp.c_str() );
-                                        }
-
-                                        // get device pointer
-                                        err = m_Sys.GetCameraByID( temp.c_str(), devicePtr );
-                                        if( VmbErrorSuccess == err )
-                                        {
-                                            deviceInfoStruct->mDevicePtr = devicePtr;
-                                        }
-                                    }
-
-                                    // get device model name
-                                    err = interfacePtr->GetFeatureByName( "DeviceModelName", feature );
-                                    if( VmbErrorSuccess == err )
-                                    {
-                                        err = feature->GetValue( temp );
-                                        if( VmbErrorSuccess == err )
-                                        {
-                                            deviceInfoStruct->mModelName = QString( temp.c_str() );
-                                        }
-                                    }
-
-                                    // get device access status
-                                    err = interfacePtr->GetFeatureByName( "DeviceAccessStatus", feature );
-                                    if( VmbErrorSuccess == err )
-                                    {
-                                        err = feature->GetValue( temp );
-                                        if( VmbErrorSuccess == err )
-                                        {
-                                            deviceInfoStruct->mAccessStatus = QString( temp.c_str() );
-                                        }
-                                    }
-
-                                    // get device MAC address
-                                    err = interfacePtr->GetFeatureByName( "GevDeviceMACAddress", feature );
-                                    if( VmbErrorSuccess == err )
-                                    {
-                                        err = feature->GetValue( temp2 );
-                                        if( VmbErrorSuccess == err )
-                                        {
-                                            deviceInfoStruct->mMACAddress = temp2;
-                                        }
-                                    }
-
-                                    // get device IP address
-                                    err = interfacePtr->GetFeatureByName( "GevDeviceIPAddress", feature );
-                                    if( VmbErrorSuccess == err )
-                                    {
-                                        err = feature->GetValue( temp2 );
-                                        if( VmbErrorSuccess == err )
-                                        {
-                                            deviceInfoStruct->mIPAddress = temp2;
-                                        }
-                                    }
-
-                                    // get device subnet mask
-                                    err = interfacePtr->GetFeatureByName( "GevDeviceSubnetMask", feature );
-                                    if( VmbErrorSuccess == err )
-                                    {
-                                        err = feature->GetValue( temp2 );
-                                        if( VmbErrorSuccess == err )
-                                        {
-                                            deviceInfoStruct->mSubnetMask = temp2;
-                                        }
-                                    }
-
-                                    // in case of no error add device info struct to list
-                                    if( VmbErrorSuccess == err )
-                                    {
-                                        interfaceInfoStruct->mDevices->append( deviceInfoStruct );
-                                    }
-                                }
-
-                            } // end of for loop
-                        }
-                    }
-
-                    // close interface
-                    err = interfacePtr->Close();
-                }
-
-                // in case of any failure clear device list
-                if( VmbErrorSuccess != err )
-                {
-                    this->ClearDeviceList( &interfaceInfoStruct->mDevices );
-                    rval = false;
-                }
-           }
-        }
-    }
-    return rval;
-}
-
-void ForceIPDialog::InitializeInterfaceInfoStruct( InterfaceInfo** interfaceInfoStruct )
-{
-    if( NULL != interfaceInfoStruct )
-    {
-        (*interfaceInfoStruct)->mInterfaceID    = "";
-        (*interfaceInfoStruct)->mDevices        = NULL;
-
-        SP_RESET( (*interfaceInfoStruct)->mInterfacePtr );
-    }
-}
-
-void ForceIPDialog::InitializeDeviceInfoStruct( DeviceInfo** deviceInfoStruct )
-{
-    if( NULL != deviceInfoStruct )
-    {
-        (*deviceInfoStruct)->mDeviceID          = "";
-        (*deviceInfoStruct)->mModelName         = "";
-        (*deviceInfoStruct)->mAccessStatus      = "";
-        (*deviceInfoStruct)->mMACAddress        = 0;
-        (*deviceInfoStruct)->mIPAddress         = 0;
-        (*deviceInfoStruct)->mSubnetMask        = 0;
-        (*deviceInfoStruct)->mGateway           = 0;
-        (*deviceInfoStruct)->mDeviceSelector    = 0;
-
-        SP_RESET( (*deviceInfoStruct)->mDevicePtr );
-    }
-}
-
-bool ForceIPDialog::SetFeatureValue( QMap<const char*,AVT::VmbAPI::FeaturePtr>* featureMap, const char* featureName, VmbInt64_t featureValue )
-{
-    bool            rval    = false;
-    VmbErrorType    err     = VmbErrorSuccess;
-    QString         msg     = "";
-
-    // fetch feature from given map
-    if( (NULL != featureMap) && (true == featureMap->contains(featureName)) )
-    {
-        AVT::VmbAPI::FeaturePtr feature = (*featureMap)[featureName];
-        if( false == SP_ISNULL( feature ) )
-        {
-            // set value to Vimba
-            err = feature->SetValue( featureValue );
-            if( VmbErrorSuccess == err )
-            {
-                rval = true;
-            }
-        }
-    }
-
-    return rval;
-}
-
-bool ForceIPDialog::GetUserMACAddress( VmbInt64_t* macAddress )
-{
-    bool        rval    = false;
-    QString     temp    = "";
-    VmbInt64_t  temp2   = 0;
-
-    // get user input
-    temp = this->m_Ui.lineEdit_forceIPCommandMAC->text();
-    if( false == temp.isEmpty() )
-    {
-        temp2 = Helper::StringToMAC( temp );
-        if( -1 != temp2 )
-        {
-            rval = true;
-            *macAddress = temp2;
-        }
-    }
-
-    return rval;
-}
-
-bool ForceIPDialog::GetUserIPAddress( VmbInt64_t* ipAddress )
-{
-    bool        rval    = false;
-    QString     temp    = "";
-    VmbInt64_t  temp2   = 0;
-
-    // get user input
-    temp = this->m_Ui.lineEdit_forceIPCommandIP->text();
-    if( false == temp.isEmpty() )
-    {
-        temp2 = Helper::StringToIPv4( temp);
-        if( -1 != temp2 )
-        {
-            rval = true;
-            *ipAddress = temp2;
-        }
-    }
-
-    return rval;
-}
-
-bool ForceIPDialog::GetUserSubnetMask( VmbInt64_t* subnetMask )
-{
-    bool        rval    = false;
-    QString     temp    = "";
-    VmbInt64_t  temp2   = 0;
-
-    // get user input
-    temp = this->m_Ui.lineEdit_forceIPCommandSubnet->text();
-    if( false == temp.isEmpty() )
-    {
-        temp2 = Helper::StringToIPv4( temp);
-        if( -1 != temp2 )
-        {
-            rval = true;
-            *subnetMask = temp2;
-        }
-    }
-
-    return rval;
-}
-
-bool ForceIPDialog::GetUserGateway( VmbInt64_t* gateway )
-{
-    bool        rval    = false;
-    QString     temp    = "";
-    VmbInt64_t  temp2   = 0;
-
-    // get user input
-    temp = this->m_Ui.lineEdit_forceIPCommandGateway->text();
-    if( false == temp.isEmpty() )
-    {
-        temp2 = Helper::StringToIPv4( temp);
-        if( -1 != temp2 )
-        {
-            rval = true;
-            *gateway = temp2;
-        }
-    }
-
-    return rval;
-}
-
-bool ForceIPDialog::CreateCommand( ForceIPCommand* command )
-{
-    bool        rval = false;
-    VmbInt64_t  temp = 0;
-
-    if( NULL != command )
-    {
-        try
-        {
-            // get user MAC address
-            rval = this->GetUserMACAddress( &temp );
-            if( true == rval )
-            {
-                command->mMACAddress = temp;
-            }
-            else
-            {
-                this->PrepareMsgBox( QMessageBox::Critical, "Invalid MAC address given", VmbErrorBadParameter );
-                throw std::exception();
-            }
-
-            // get user IP address
-            rval = this->GetUserIPAddress( &temp );
-            if( true == rval )
-            {
-                command->mIPAddress = temp;
-            }
-            else
-            {
-                this->PrepareMsgBox( QMessageBox::Critical, "Invalid IP address given", VmbErrorBadParameter );
-                throw std::exception();
-            }
-
-            // get user subnet mask
-            rval = this->GetUserSubnetMask( &temp );
-            if( true == rval )
-            {
-                command->mSubnetMask = temp;
-            }
-            else
-            {
-                this->PrepareMsgBox( QMessageBox::Critical, "Invalid Subnet mask given", VmbErrorBadParameter );
-                throw std::exception();
-            }
-
-            // get user gateway
-            rval = this->GetUserGateway( &temp );
-            if( true == rval )
-            {
-                command->mGateway = temp;
-            }
-            else
-            {
-                this->PrepareMsgBox( QMessageBox::Critical, "Invalid Gateway given", VmbErrorBadParameter );
-                throw std::exception();
-            }
-
-            //get device selector
-            if( -1 != m_SelectedDevice )
-            {
-                command->mDeviceSelector = m_Ui.comboBox_deviceSelector->currentIndex();
-            }
-        }
-        catch( std::exception& e )
-        {
-            this->ShowMsgBox();
-        }
-        catch(...)
-        {
-            this->ShowMsgBox();
-        }
-
-    }
-
-    return rval;
-}
-
-bool ForceIPDialog::SendCommand( ForceIPCommand* command )
-{
-    bool            rval    = false;
-    VmbErrorType    err     = VmbErrorSuccess;
-    QString         msg     = "";
-
-    if( NULL != command )
-    {
-        AVT::VmbAPI::FeaturePtr feature;
-
-        // determine if command shall be sent via all interfaces
-        // or on specific interface
-        if( -1 == this->m_SelectedInterface )
-        {
-            err = m_Sys.GetFeatureByName( kFeatureSend, feature );
-        }
-        else
-        {
-            // get interface info struct and poniter
-            InterfaceInfo* interfaceInfoStruct = this->m_InterfaceList->at( this->m_SelectedInterface );
-            if( NULL != interfaceInfoStruct )
-            {
-                AVT::VmbAPI::InterfacePtr interfacePtr = interfaceInfoStruct->mInterfacePtr;
-                if( false == SP_ISNULL( interfacePtr ) )
-                {
-                    err = interfacePtr->GetFeatureByName( kFeatureSend, feature );
-                }
-            }
-        }
-
-        if( VmbErrorSuccess == err )
-        {
-            err = feature->RunCommand();
-            if( VmbErrorSuccess != err )
-            {
-                msg = "Failed to send Force IP command { MAC: " + QString::number(command->mMACAddress) + ", IP: " + QString::number(command->mIPAddress) + ", Snet: " + QString::number(command->mSubnetMask) + ", Gw: " + QString::number(command->mGateway) + "}";
-                this->PrepareMsgBox( QMessageBox::Critical, msg, err );
-            }
-            else
-            {
-
-                this->PrepareMsgBox( QMessageBox::Information, "Force IP command has been sent successfully", err );
-                rval = true;
-            }
-        }
-    }
-
-    return rval;
-}
-
-void ForceIPDialog::UpdateInterfaceComboBox()
-{
-    // block signals for combobox
-    this->m_Ui.comboBox_networkInterface->blockSignals( true );
-
-    // if combo box is already filled, reset it
-    if( 0 != this->m_Ui.comboBox_networkInterface->count() )
-    {
-        this->ResetNetworkInterfaceGroup( false );
-    }
-
-    // iterate through internal interface list
-    QList<InterfaceInfo*>::Iterator iter;
-    for( iter = this->m_InterfaceList->begin(); iter != this->m_InterfaceList->end(); ++iter )
-    {
-        // get current interface id
-        // and add it to combobox
-        QString interfaceId = (*iter)->mInterfaceID;
-        if( false == interfaceId.isEmpty() )
-        {
-            this->m_Ui.comboBox_networkInterface->addItem( interfaceId );
-        }
-    }
-
-    // set combobox index to 0
-    if( 0 != this->m_Ui.comboBox_networkInterface->count() )
-    {
-        this->OnComboBoxNetworkInterface( 0 );
-    }
-
-    // unblock signals for combobox
-    this->m_Ui.comboBox_networkInterface->blockSignals( false );
-}
-
-void ForceIPDialog::UpdateDeviceComboBox()
-{
-    // block signals for combobox
-    this->m_Ui.comboBox_deviceSelector->blockSignals( true );
-
-    // if combo box is already filled, reset it
-    if( 0 != this->m_Ui.comboBox_deviceSelector->count() )
-    {
-        this->ResetDeviceSelectorGroup( false );
-    }
-
-    if( -1 != this->m_SelectedInterface )
-    {
-        // get pointer to interface info struct
-        InterfaceInfo* interfaceInfoStruct = this->m_InterfaceList->at( this->m_SelectedInterface );
-        if( NULL != interfaceInfoStruct )
-        {
-            // check if internal device list has been allocated
-            if( NULL != interfaceInfoStruct->mDevices )
-            {
-                // iterate through list
-                QList<DeviceInfo*>::Iterator iter;
-                for( iter = interfaceInfoStruct->mDevices->begin(); iter != interfaceInfoStruct->mDevices->end(); ++iter )
-                {
-                    // get current device id and add it to combobox
-                    QString deviceId = (*iter)->mDeviceID;
-                    if( false == deviceId.isEmpty() )
-                    {
-                        this->m_Ui.comboBox_deviceSelector->addItem( deviceId );
-                    }
-                }
-
-                // set combobox index to 0
-                if( 0 != this->m_Ui.comboBox_deviceSelector->count() )
-                {
-                    this->OnComboBoxDeviceSelector( 0 );
-                }
-            }
-        }
-    }
-
-    // unblock signals for combobox
-    this->m_Ui.comboBox_deviceSelector->blockSignals( false );
-}
-
-void ForceIPDialog::UpdateDeviceInformation( DeviceInfo* deviceInfoStruct )
-{
-    if( NULL != deviceInfoStruct )
-    {
-        QString temp = "";
-
-        this->m_Ui.lineEdit_deviceInformationID->setText( deviceInfoStruct->mDeviceID );
-        this->m_Ui.lineEdit_deviceInformationModel->setText( deviceInfoStruct->mModelName );
-        this->m_Ui.lineEdit_deviceInformationAccess->setText( deviceInfoStruct->mAccessStatus );
-
-        // update device MAC address
-        temp = Helper::MACToString( deviceInfoStruct->mMACAddress );
-        temp = temp.toUpper();
-        this->m_Ui.lineEdit_deviceInformationMAC->setText( temp );
-        this->m_Ui.lineEdit_forceIPCommandMAC->setText( temp );
-
-        // update device IP address
-        temp = Helper::IPv4ToString( deviceInfoStruct->mIPAddress);
-        this->m_Ui.lineEdit_deviceInformationIP->setText( temp );
-        this->m_Ui.lineEdit_forceIPCommandIP->setText( temp );
-
-        // update device subnet mask
-        temp = Helper::IPv4ToString( deviceInfoStruct->mSubnetMask );
-        this->m_Ui.lineEdit_deviceInformationSubnet->setText( temp );
-        this->m_Ui.lineEdit_forceIPCommandSubnet->setText( temp );
-
-        // update device gateway
-        temp = Helper::IPv4ToString( deviceInfoStruct->mGateway );
-        this->m_Ui.lineEdit_deviceInformationGateway->setText( temp );
-        this->m_Ui.lineEdit_forceIPCommandGateway->setText( temp );
-    }
-}
-
-void ForceIPDialog::ResetAllWidgets()
-{
-    this->ResetNetworkInterfaceGroup( true );
-    this->ResetDeviceSelectorGroup( true );
-    this->ResetForceIPCommandGroup();
-    this->ResetDeviceInformationGroup();
-}
-
-void ForceIPDialog::ResetNetworkInterfaceGroup( bool withCheckBox )
-{
-    this->m_Ui.comboBox_networkInterface->blockSignals( true );
-    this->m_Ui.checkBox_networkInterface->blockSignals( true );
-    this->m_Ui.comboBox_networkInterface->clear();
-
-    if( true == withCheckBox )
-    {
-        this->m_Ui.checkBox_networkInterface->setChecked( false );
-    }
-
-    this->m_Ui.comboBox_networkInterface->blockSignals( false );
-    this->m_Ui.checkBox_networkInterface->blockSignals( false );
-}
-
-void ForceIPDialog::ResetDeviceSelectorGroup( bool withCheckBox )
-{
-    this->m_Ui.comboBox_deviceSelector->blockSignals( true );
-    this->m_Ui.comboBox_deviceSelector->clear();
-
-    this->m_Ui.comboBox_deviceSelector->blockSignals( false );
-}
-
-void ForceIPDialog::ResetForceIPCommandGroup()
-{
-    this->m_Ui.lineEdit_forceIPCommandMAC->setText( "" );
-    this->m_Ui.lineEdit_forceIPCommandIP->setText( "" );
-    this->m_Ui.lineEdit_forceIPCommandSubnet->setText( "" );
-    this->m_Ui.lineEdit_forceIPCommandGateway->setText( "" );
-}
-
-void ForceIPDialog::ResetDeviceInformationGroup()
-{
-    this->m_Ui.lineEdit_deviceInformationID->setText( "" );
-    this->m_Ui.lineEdit_deviceInformationModel->setText( "" );
-    this->m_Ui.lineEdit_deviceInformationAccess->setText( "" );
-    this->m_Ui.lineEdit_deviceInformationMAC->setText( "" );
-    this->m_Ui.lineEdit_deviceInformationIP->setText( "" );
-    this->m_Ui.lineEdit_deviceInformationSubnet->setText( "" );
-    this->m_Ui.lineEdit_deviceInformationGateway->setText( "" );
-}
-
-void ForceIPDialog::EnableAllWidgets( bool enable )
-{
-    this->EnableNetworkInterfaceGroup( enable );
-    this->EnableDeviceSelectorGroup( enable );
-    this->EnableForceIPCommandGroup( enable );
-    this->EnableDeviceInformationGroup( enable );
-}
-
-void ForceIPDialog::EnableNetworkInterfaceGroup( bool enable )
-{
-    this->m_Ui.comboBox_networkInterface->setEnabled( enable );
-    this->m_Ui.checkBox_networkInterface->setEnabled( enable );
-}
-
-void ForceIPDialog::EnableDeviceSelectorGroup( bool enable )
-{
-    this->m_Ui.comboBox_deviceSelector->setEnabled( enable );
-}
-
-void ForceIPDialog::EnableForceIPCommandGroup( bool enable )
-{
-    this->m_Ui.lineEdit_forceIPCommandMAC->setEnabled( enable );
-    this->m_Ui.lineEdit_forceIPCommandIP->setEnabled( enable );
-    this->m_Ui.lineEdit_forceIPCommandSubnet->setEnabled( enable );
-    this->m_Ui.lineEdit_forceIPCommandGateway->setEnabled( enable );
-    this->m_Ui.pushButton_forceIPCommandSend->setEnabled( enable );
-    this->m_Ui.pushButton_forceIPCommandCancel->setEnabled( enable );
-}
-
-void ForceIPDialog::EnableDeviceInformationGroup( bool enable )
-{
-    this->m_Ui.lineEdit_deviceInformationID->setEnabled( enable );
-    this->m_Ui.lineEdit_deviceInformationModel->setEnabled( enable );
-    this->m_Ui.lineEdit_deviceInformationAccess->setEnabled( enable );
-    this->m_Ui.lineEdit_deviceInformationMAC->setEnabled( enable );
-    this->m_Ui.lineEdit_deviceInformationIP->setEnabled( enable );
-    this->m_Ui.lineEdit_deviceInformationSubnet->setEnabled( enable );
-    this->m_Ui.lineEdit_deviceInformationGateway->setEnabled( enable );
-}
-
-void ForceIPDialog::ClearInterfaceList( QList<InterfaceInfo*>** interfaceList )
-{
-    if( (NULL != interfaceList) && (false == (*interfaceList)->isEmpty()) )
-    {
-        // iterate through given list
-        QList<InterfaceInfo*>::Iterator iter;
-        for( iter = (*interfaceList)->begin(); iter != (*interfaceList)->end(); ++iter )
-        {
-            // get current interface info struct
-            InterfaceInfo* interfaceInfoStruct = *iter;
-            if( NULL != interfaceInfoStruct )
-            {
-                // check for internal device list
-                // and clear list
-                if( NULL != interfaceInfoStruct->mDevices )
-                {
-                    this->ClearDeviceList( &interfaceInfoStruct->mDevices );
-                }
-
-                delete interfaceInfoStruct;
-                interfaceInfoStruct = NULL;
-            }
-
-        }
-
-        // clear list
-        (*interfaceList)->clear();
-    }
-}
-
-void ForceIPDialog::ClearDeviceList( QList<DeviceInfo*>** deviceList )
-{
-    if( (NULL != deviceList) && (false == (*deviceList)->isEmpty()) )
-    {
-        // iterate through given list
-        QList<DeviceInfo*>::Iterator iter;
-        for( iter = (*deviceList)->begin(); iter != (*deviceList)->end(); ++iter )
-        {
-            // get current device info struct
-            DeviceInfo* deviceInfoStruct = *iter;
-            if( NULL != deviceInfoStruct )
-            {
-                delete deviceInfoStruct;
-                deviceInfoStruct = NULL;
-            }
-        }
-
-        // clear list
-        (*deviceList)->clear();
-    }
-}
-
-void ForceIPDialog::PrepareMsgBox( QMessageBox::Icon icon, QString text, VmbErrorType err )
-{
-    if( NULL != this->m_MsgBox )
-    {
-        this->m_MsgBox->setIcon( icon );
-        QString msg = text;
-        if( 0 != err )
-        {
-            msg + ".\n[error code: " + QString::number(err) + "]";
-        }
-        this->m_MsgBox->setText( msg );
-    }
-}
-
-void ForceIPDialog::ShowMsgBox()
-{
-    if( NULL != this->m_MsgBox )
-    {
-        this->m_MsgBox->exec();
-    }
-}
-
-bool ForceIPDialog::GetInitializedFlag()
-{
-    return this->m_InitializedFlag;
-}
-
-void ForceIPDialog::SetInitializedFlag( bool flag )
-{
-    this->m_InitializedFlag = flag;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ForceIP.h b/VimbaCPP/Examples/VimbaViewer/Source/ForceIP.h
deleted file mode 100644
index 0c9f3116af74c43e5cecb5b19892f13f7cd1c2da..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ForceIP.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ForceIP.h
-
-  Description: Dialog for sending GigEVision FORCEIP_CMD
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef FORCE_IP_H
-#define FORCE_IP_H
-
-#include "Helper.h"
-#include "ui_ForceIP.h"
-#include <QMessageBox>
-#include <VimbaCPP/Include/VimbaSystem.h>
-
-// representation of Force IP command
-typedef struct ForceIPCommand
-{
-    VmbInt64_t  mMACAddress;
-    VmbInt64_t  mIPAddress;
-    VmbInt64_t  mSubnetMask;
-    VmbInt64_t  mGateway;
-    VmbInt64_t  mDeviceSelector;
-
-} ForceIPCommand;
-
-// struct collecting information about a device
-typedef struct DeviceInfo
-{
-    QString                 mDeviceID;
-    AVT::VmbAPI::CameraPtr  mDevicePtr;
-    QString                 mModelName;
-    QString                 mAccessStatus;
-    VmbUint64_t             mMACAddress;
-    VmbUint64_t             mIPAddress;
-    VmbUint64_t             mSubnetMask;
-    VmbUint64_t             mGateway;
-    VmbInt64_t              mDeviceSelector;
-
-} DeviceInfo;
-
-// struct collecting information about an interface
-typedef struct InterfaceInfo
-{
-    QString                     mInterfaceID;
-    AVT::VmbAPI::InterfacePtr   mInterfacePtr;
-    QList<DeviceInfo*>*         mDevices;
-
-} InterfaceInfo;
-
-class ForceIPDialog : public QDialog
-{
-    Q_OBJECT
-
-    private:
-        Ui::ForceIPDialog                   m_Ui;
-        QDialog*                            m_Dialog;
-        bool                                m_InitializedFlag;
-        QMessageBox*                        m_MsgBox;
-        AVT::VmbAPI::VimbaSystem&           m_Sys;
-        QList<InterfaceInfo*>*              m_InterfaceList;
-        int                                 m_SelectedInterface;
-        int                                 m_SelectedDevice;
-
-    // constructors and destructors
-    public:
-         ForceIPDialog( AVT::VmbAPI::VimbaSystem &system );
-        ~ForceIPDialog();
-
-    // public methods called by Viewer instance
-    public:
-        bool InitializeDialog();
-        void ResetDialog();
-        bool RunDialog();
-
-    // Qt slots
-    private slots:
-        void OnComboBoxNetworkInterface( int index );
-        void OnComboBoxDeviceSelector( int index );
-
-        void OnCheckBoxNetworkInterface( void );
-
-    // Interface and Device methods
-    private:
-        bool GetInterfaces();
-        bool GetDevices();
-
-        void InitializeInterfaceInfoStruct( InterfaceInfo** interfaceInfoStruct );
-        void InitializeDeviceInfoStruct( DeviceInfo** deviceInfoStruct );
-
-    private:
-        bool SetFeatureValue( QMap<const char*,AVT::VmbAPI::FeaturePtr>* featureMap, const char* featureName, VmbInt64_t featureValue );
-
-    // Methods for fetching user input
-    private:
-        bool GetUserMACAddress( VmbInt64_t* macAddress );
-        bool GetUserIPAddress( VmbInt64_t* ipAddress );
-        bool GetUserSubnetMask( VmbInt64_t* subnetMask );
-        bool GetUserGateway( VmbInt64_t* gateway );
-
-    // Methods for creating, validating and sending a ForceIP command
-    private:
-        bool CreateCommand( ForceIPCommand* command );
-        bool SendCommand( ForceIPCommand* command );
-
-    // Widget update methods
-    private:
-        void UpdateInterfaceComboBox();
-        void UpdateDeviceComboBox();
-        void UpdateDeviceInformation( DeviceInfo* deviceInfoStruct );
-
-    // Methods for resetting Widgets with default values
-    private:
-        void ResetAllWidgets();
-        void ResetNetworkInterfaceGroup( bool withCheckBox );
-        void ResetDeviceSelectorGroup( bool withCheckBox );
-        void ResetForceIPCommandGroup();
-        void ResetDeviceInformationGroup();
-
-    // Methods for enabling and disabling widgets
-    private:
-        void EnableAllWidgets( bool enable );
-        void EnableNetworkInterfaceGroup( bool enable );
-        void EnableDeviceSelectorGroup( bool enable );
-        void EnableForceIPCommandGroup( bool enable );
-        void EnableDeviceInformationGroup( bool enable );
-
-    // Cleanup methods
-    private:
-        void ClearInterfaceList( QList<InterfaceInfo*>** interfaceList );
-        void ClearDeviceList( QList<DeviceInfo*>** deviceList );
-
-    // Messaging and Error handling methods
-    private:
-        void PrepareMsgBox( QMessageBox::Icon icon, QString text, VmbErrorType err );
-        void ShowMsgBox();
-
-    // getter & setter
-    public:
-        bool GetInitializedFlag();
-        void SetInitializedFlag( bool flag );
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ForceIP.ui b/VimbaCPP/Examples/VimbaViewer/Source/ForceIP.ui
deleted file mode 100644
index 01599ff10b0c5c383e56dbe595e9c75341f9d110..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ForceIP.ui
+++ /dev/null
@@ -1,1036 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ForceIPDialog</class>
- <widget class="QDialog" name="ForceIPDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>1024</width>
-    <height>370</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>1024</width>
-    <height>370</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>1024</width>
-    <height>370</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Send Force IP Command</string>
-  </property>
-  <property name="windowIcon">
-   <iconset>
-    <normaloff>Images/stripes_256.png</normaloff>Images/stripes_256.png</iconset>
-  </property>
-  <widget class="QGroupBox" name="groupBox_networkInterface">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>10</y>
-     <width>381</width>
-     <height>181</height>
-    </rect>
-   </property>
-   <property name="title">
-    <string>Network Interface</string>
-   </property>
-   <widget class="QWidget" name="layoutWidget">
-    <property name="geometry">
-     <rect>
-      <x>22</x>
-      <y>32</y>
-      <width>361</width>
-      <height>109</height>
-     </rect>
-    </property>
-    <layout class="QGridLayout" name="gridLayout_2">
-     <item row="0" column="0">
-      <widget class="QLabel" name="label_networkInterface">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>0</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>16777215</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Select Interface</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1" rowspan="4">
-      <widget class="QLabel" name="image_networkInterface">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>100</width>
-         <height>100</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>100</width>
-         <height>100</height>
-        </size>
-       </property>
-       <property name="frameShape">
-        <enum>QFrame::NoFrame</enum>
-       </property>
-       <property name="frameShadow">
-        <enum>QFrame::Plain</enum>
-       </property>
-       <property name="text">
-        <string/>
-       </property>
-       <property name="pixmap">
-        <pixmap resource="VimbaViewer.qrc">:/VimbaViewer/Images/network.png</pixmap>
-       </property>
-       <property name="scaledContents">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <widget class="QComboBox" name="comboBox_networkInterface">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>250</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>16777215</width>
-         <height>20</height>
-        </size>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="0">
-      <widget class="QCheckBox" name="checkBox_networkInterface">
-       <property name="minimumSize">
-        <size>
-         <width>0</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>16777215</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>All Interfaces</string>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="0">
-      <spacer name="horizontalSpacer_networkInterface">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>238</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </widget>
-  </widget>
-  <widget class="QGroupBox" name="groupBox_forceIPCommand">
-   <property name="geometry">
-    <rect>
-     <x>410</x>
-     <y>10</y>
-     <width>601</width>
-     <height>181</height>
-    </rect>
-   </property>
-   <property name="title">
-    <string>Force IP Command</string>
-   </property>
-   <widget class="QWidget" name="layoutWidget">
-    <property name="geometry">
-     <rect>
-      <x>20</x>
-      <y>30</y>
-      <width>281</width>
-      <height>140</height>
-     </rect>
-    </property>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0">
-      <layout class="QVBoxLayout" name="verticalLayout">
-       <property name="spacing">
-        <number>9</number>
-       </property>
-       <item>
-        <widget class="QLabel" name="label_forceIPCommandMAC">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>MAC Address</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_forceIPCommandIP">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>IP Address</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_label_forceIPCommandSubnet">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>Subnet Mask</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_forceIPCommandGateway">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>100</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>Gateway</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item row="0" column="1" colspan="2">
-      <layout class="QVBoxLayout" name="verticalLayout_2">
-       <item>
-        <widget class="QLineEdit" name="lineEdit_forceIPCommandMAC">
-         <property name="enabled">
-          <bool>true</bool>
-         </property>
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>150</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>150</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="inputMask">
-          <string/>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLineEdit" name="lineEdit_forceIPCommandIP">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>150</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>150</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="inputMask">
-          <string/>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLineEdit" name="lineEdit_forceIPCommandSubnet">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>150</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>150</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="inputMask">
-          <string/>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLineEdit" name="lineEdit_forceIPCommandGateway">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>150</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>150</width>
-           <height>20</height>
-          </size>
-         </property>
-         <property name="inputMask">
-          <string/>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item row="1" column="2">
-      <widget class="QPushButton" name="pushButton_forceIPCommandCancel">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>75</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>75</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Cancel</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <spacer name="horizontalSpacer_forceIP">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>88</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item row="1" column="1">
-      <widget class="QPushButton" name="pushButton_forceIPCommandSend">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>75</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>75</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Send</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </widget>
-   <widget class="QLabel" name="image_forceIPCommand">
-    <property name="geometry">
-     <rect>
-      <x>400</x>
-      <y>40</y>
-      <width>100</width>
-      <height>100</height>
-     </rect>
-    </property>
-    <property name="sizePolicy">
-     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-      <horstretch>0</horstretch>
-      <verstretch>0</verstretch>
-     </sizepolicy>
-    </property>
-    <property name="minimumSize">
-     <size>
-      <width>100</width>
-      <height>100</height>
-     </size>
-    </property>
-    <property name="maximumSize">
-     <size>
-      <width>100</width>
-      <height>100</height>
-     </size>
-    </property>
-    <property name="text">
-     <string/>
-    </property>
-    <property name="pixmap">
-     <pixmap resource="VimbaViewer.qrc">:/VimbaViewer/Images/forceIP.png</pixmap>
-    </property>
-    <property name="scaledContents">
-     <bool>true</bool>
-    </property>
-   </widget>
-  </widget>
-  <widget class="QGroupBox" name="groupBox_deviceSelector">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>200</y>
-     <width>381</width>
-     <height>151</height>
-    </rect>
-   </property>
-   <property name="title">
-    <string>Device Selector</string>
-   </property>
-   <widget class="QWidget" name="layoutWidget">
-    <property name="geometry">
-     <rect>
-      <x>20</x>
-      <y>31</y>
-      <width>341</width>
-      <height>83</height>
-     </rect>
-    </property>
-    <layout class="QGridLayout" name="gridLayout_3">
-     <item row="0" column="1" rowspan="2">
-      <widget class="QLabel" name="image_deviceSelector">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>100</width>
-         <height>45</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>100</width>
-         <height>45</height>
-        </size>
-       </property>
-       <property name="text">
-        <string/>
-       </property>
-       <property name="pixmap">
-        <pixmap>:/VimbaViewer/Images/gigEVision.png</pixmap>
-       </property>
-       <property name="scaledContents">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="0">
-      <widget class="QLabel" name="label_deviceSelector">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>120</horstretch>
-         <verstretch>20</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>120</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Select Device</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <widget class="QComboBox" name="comboBox_deviceSelector">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>200</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>200</width>
-         <height>20</height>
-        </size>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </widget>
-  </widget>
-  <widget class="QGroupBox" name="groupBox_deviceInformation">
-   <property name="geometry">
-    <rect>
-     <x>410</x>
-     <y>200</y>
-     <width>601</width>
-     <height>151</height>
-    </rect>
-   </property>
-   <property name="title">
-    <string>Device Information</string>
-   </property>
-   <widget class="QWidget" name="layoutWidget">
-    <property name="geometry">
-     <rect>
-      <x>20</x>
-      <y>30</y>
-      <width>561</width>
-      <height>109</height>
-     </rect>
-    </property>
-    <layout class="QGridLayout" name="gridLayout_4">
-     <item row="0" column="0">
-      <widget class="QLabel" name="label_deviceInformationID">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>120</horstretch>
-         <verstretch>20</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Device ID</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QLineEdit" name="lineEdit_deviceInformationID">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="readOnly">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="2">
-      <widget class="QLabel" name="label_deviceInformationMAC">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>120</horstretch>
-         <verstretch>20</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>MAC Address</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="3">
-      <widget class="QLineEdit" name="lineEdit_deviceInformationMAC">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="inputMask">
-        <string/>
-       </property>
-       <property name="readOnly">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <widget class="QLabel" name="label_deviceInformationModel">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>120</horstretch>
-         <verstretch>20</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>100</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Model Name</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="1">
-      <widget class="QLineEdit" name="lineEdit_deviceInformationModel">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maxLength">
-        <number>18</number>
-       </property>
-       <property name="alignment">
-        <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-       </property>
-       <property name="readOnly">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="2">
-      <widget class="QLabel" name="label_deviceInformationIP">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>120</horstretch>
-         <verstretch>20</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>IP Address</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="3">
-      <widget class="QLineEdit" name="lineEdit_deviceInformationIP">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="inputMask">
-        <string/>
-       </property>
-       <property name="readOnly">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="0">
-      <widget class="QLabel" name="label_deviceInformationAccess">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>120</horstretch>
-         <verstretch>20</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Access Status</string>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="1">
-      <widget class="QLineEdit" name="lineEdit_deviceInformationAccess">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="readOnly">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="2">
-      <widget class="QLabel" name="label_deviceInformationSubnet">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>120</horstretch>
-         <verstretch>20</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Subnet Mask</string>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="3">
-      <widget class="QLineEdit" name="lineEdit_deviceInformationSubnet">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="inputMask">
-        <string/>
-       </property>
-       <property name="readOnly">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="2">
-      <widget class="QLabel" name="label_deviceInformationGateway">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>120</horstretch>
-         <verstretch>20</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>100</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Gateway</string>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="3">
-      <widget class="QLineEdit" name="lineEdit_deviceInformationGateway">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>150</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="inputMask">
-        <string/>
-       </property>
-       <property name="readOnly">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </widget>
-  </widget>
- </widget>
- <resources>
-  <include location="VimbaViewer.qrc"/>
- </resources>
- <connections>
-  <connection>
-   <sender>pushButton_forceIPCommandSend</sender>
-   <signal>clicked()</signal>
-   <receiver>ForceIPDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>603</x>
-     <y>158</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>403</x>
-     <y>185</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/FrameObserver.cpp b/VimbaCPP/Examples/VimbaViewer/Source/FrameObserver.cpp
deleted file mode 100644
index 2cf01405fc48fcee6fa03aa27a913b46921f1b00..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/FrameObserver.cpp
+++ /dev/null
@@ -1,323 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameObserver.cpp
-
-  Description: Frame callback.
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "FrameObserver.h"
-#include "VmbImageTransformHelper.hpp"
-#include <QFile>
-#include <QMetaType>
-#include <QTextStream>
-#include <math.h>
-
-FrameObserver::FrameObserver ( CameraPtr pCam )
-    : IFrameObserver                ( pCam )
-    , m_nFramesCounter              ( 0 )
-    , m_nRawImagesToSave            ( 0 )
-    , m_nRawImagesCounter           ( 0 )
-    , m_bIsReset                    ( false )
-    , m_EmitFrame                   ( true )
-    , m_nFrames                     ( MAX_FRAMES_TO_COUNT )
-    , m_bIsHistogramEnabled         ( false )
-    , m_bColorInterpolation         ( true )
-    , m_IsStopping                  ( false )
-    , m_bTransferFullBitDepthImage  ( false )
-    , m_pCam                        ( pCam )
-{ 
-    m_pImageProcessingThread    = QSharedPointer<ImageProcessingThread>(new ImageProcessingThread());
-    m_pHistogramThread          = QSharedPointer<HistogramThread>(new HistogramThread());
-
-    connect ( m_pImageProcessingThread.data(), SIGNAL ( frameReadyFromThread (QImage, const QString &, const QString &, const QString &) ), 
-              this, SLOT ( getFrameFromThread (QImage, const QString &, const QString &, const QString &) ) );
-
-    connect ( m_pImageProcessingThread.data(), SIGNAL ( frameReadyFromThreadFullBitDepth ( tFrameInfo) ), 
-              this, SLOT ( getFullBitDepthFrameFromThread ( tFrameInfo) ) );
-
-    // We need to register QVector <quint32> because it is not known to Qt's meta-object system
-    qRegisterMetaType< QVector<QVector <quint32> > >("QVector<QVector <quint32> >");
-    qRegisterMetaType< QVector <QStringList> >("QVector <QStringList>");
-
-    // register tFrameInfo type to use with frameReadyFromObserver signal
-    qRegisterMetaType< tFrameInfo >("tFrameInfo");
-
-    connect ( m_pHistogramThread.data(), SIGNAL ( histogramDataFromThread ( const QVector<QVector <quint32> > &, const QString &, const double &, const double &, const QVector<QStringList> & )), 
-              this, SLOT ( getHistogramDataFromThread ( const QVector<QVector <quint32> > &, const QString &, const double &, const double &, const QVector<QStringList>& )) );
-}
-
-FrameObserver::~FrameObserver ( void )
-{
-    if( NULL != m_pImageProcessingThread || m_pImageProcessingThread->isRunning() )
-    {
-        m_pImageProcessingThread->quit();
-    }
-}
-
-void FrameObserver::FrameReceived ( const AVT::VmbAPI::FramePtr frame  )
-{    
-    QMutexLocker guard ( &m_StoppingLock );
-    if( m_IsStopping )
-    {
-        return;
-    }
-    VmbFrameStatusType statusType = VmbFrameStatusInvalid;
-    if( VmbErrorSuccess == frame->GetReceiveStatus(statusType) )
-    {
-        /* ignore any incompletely frame */
-        if( VmbFrameStatusComplete != statusType )
-        {
-            m_pCam->QueueFrame(frame);
-            return; 
-        }
-
-        m_nFramesCounter++;
-        emit setFrameCounter ( m_nFramesCounter );
-        
-        m_FPSReceived.count( m_nFramesCounter );
-        VmbUint64_t camera_frame_id;
-        frame->GetFrameID( camera_frame_id );
-        m_FPSCamera.count( camera_frame_id ); 
-        static const char token[] = {'-','\\','|','/'};
-        QString fps(token[ m_nFramesCounter%4] );
-        if( m_FPSReceived.isValid() )
-        {
-            
-            fps = QString("Rcv:") + QString::number( static_cast<size_t>(m_FPSReceived.CurrentFPS()*100)/100.0 );
-            if( m_FPSCamera.isValid() )
-            {
-                fps += " Cam:" + QString::number(static_cast<size_t>(m_FPSCamera.CurrentFPS()*100)/100.0 );
-            }
-            if( m_pImageProcessingThread->getFPSCounter().isValid() )
-            {
-                fps += " Dis:" + QString::number(static_cast<size_t>(m_pImageProcessingThread->getFPSCounter().CurrentFPS()*100)/100.0 );
-            }
-        }
-        emit setCurrentFPS( fps );
-        if( m_EmitFrame )
-        {
-            setFrame( frame );
-        }
-    }
-    m_pCam->QueueFrame(frame);
-}
-
-void FrameObserver::enableHistogram ( bool bIsHistogramEnabled )
-{
-    m_bIsHistogramEnabled = bIsHistogramEnabled;
-}
-
-void FrameObserver::setColorInterpolation (bool bState )
-{
-    m_bColorInterpolation = bState;
-}
-
-bool FrameObserver::getColorInterpolation ( void )
-{
-    return m_bColorInterpolation;
-}
-
-void FrameObserver::enableFullBitDepthTransfer(bool bIsFullBitDepthEnabled)
-{
-    m_bTransferFullBitDepthImage = bIsFullBitDepthEnabled;
-}
-
-void FrameObserver::setEmitFrame( bool bEmitFrame )
-{
-    m_EmitFrame = bEmitFrame;
-}
-void FrameObserver::setDisplayInterval ( unsigned int nInterval )
-{
-    m_pImageProcessingThread->LimitFrameRate( nInterval != 0  );
-}
-
-void FrameObserver::resetFrameCounter ( bool bIsRestart )
-{
-    if( bIsRestart )
-    {
-        m_nFramesCounter        = 0;
-    }
-    
-    m_nFrames                   = MAX_FRAMES_TO_COUNT;
-    m_bIsReset = true;
-    emit setCurrentFPS ( "-" );
-}
-
-bool FrameObserver::setFrame (const AVT::VmbAPI::FramePtr &frame )
-{
-    try
-    {
-        tFrameInfo tmpInfo( frame, m_bColorInterpolation );
-        m_pImageProcessingThread->setThreadFrame( tmpInfo, m_bTransferFullBitDepthImage);
-        if(m_bIsHistogramEnabled)
-        {
-            m_pHistogramThread->setThreadFrame ( tmpInfo );
-            m_pHistogramThread->start();
-        }
-
-        /* saving Raw Data */
-        if( m_nRawImagesToSave > 0)
-        {
-            m_nRawImagesCounter++;
-            QString s = m_sPathDestination;
-            s.append("\\");
-            s.append(m_sRawImagesName).append(QString::number(m_nRawImagesCounter)).append(".bin");
-            m_nRawImagesToSave--;
-
-            QFile rawFile(s);
-            rawFile.open(QIODevice::WriteOnly);
-            QDataStream out(&rawFile);
-            out.writeRawData((const char*)tmpInfo.Data(), tmpInfo.Size() );
-            rawFile.close();
-        }
-    }
-    catch (...)
-    {
-        return false;
-    }
-        
-    return true;
-}
-
-void FrameObserver::saveRawData ( unsigned int nNumberOfRawImagesToSave, const QString& sPath, const QString &sFileName )
-{
-    m_nRawImagesCounter = 0;
-    m_nRawImagesToSave = nNumberOfRawImagesToSave;
-    m_sPathDestination = sPath;
-    m_sRawImagesName   = sFileName;
-}
-
-
-void FrameObserver::getFrameFromThread ( QImage image, const QString &sFormat, const QString &sHeight, const QString &sWidth )
-{    
-    emit frameReadyFromObserver (image, sFormat, sHeight, sWidth);    
-}
-
-
-void FrameObserver::getFullBitDepthFrameFromThread ( tFrameInfo mFullImageInfo )
-{
-    if ( true == m_bTransferFullBitDepthImage )
-    {
-        emit frameReadyFromObserverFullBitDepth ( mFullImageInfo );
-    }
-}
-
-
-void FrameObserver::getHistogramDataFromThread ( const QVector<QVector <quint32> > &histData, const QString &sHistogramTitle, 
-                                                 const double &nMaxHeight_YAxis, const double &nMaxWidth_XAxis ,const QVector <QStringList> &statistics)
-{
-    emit histogramDataFromObserver ( histData, sHistogramTitle, nMaxHeight_YAxis, nMaxWidth_XAxis, statistics );
-}
-
-void ImageProcessingThread::run()
-{
-    FrameData tmpFrameData;
-    while(      !m_Stopping
-            &&  m_FrameQueue.WaitData( tmpFrameData) 
-            )
-    {
-        if( m_LimitFrameRate )
-        {
-            double currentTime = m_Timer.elapsed();
-            if ( m_LastTime.isValid() )
-            {
-               const double frameLimit = 33.0; // limit about time for 33 fps
-               const double deltaTime = currentTime - m_LastTime();
-               if( frameLimit > deltaTime)
-               {
-                   continue;
-               }
-               const double newTime =currentTime + (frameLimit - deltaTime);
-               m_LastTime(newTime);
-            }
-            else
-            {
-                m_LastTime( currentTime);
-            }
-        }
-        m_FrameCount++;
-        m_FPSCounter.count( m_FrameCount );
-        QImage convertedImage( tmpFrameData.Width(), tmpFrameData.Height(), QImage::Format_RGB32 ); 
-   
-        if(! convertedImage.isNull())
-        {
-
-            if (NULL != tmpFrameData.GetFrameData()) // unlikely
-            {
-                VmbError_t error;
-
-                VmbPixelFormatType outputPixelFormat;
-                if(tmpFrameData.ColorInterpolation())
-                {
-                    outputPixelFormat = tmpFrameData.PixelFormat();
-                }
-                else
-                {
-                    try
-                    {
-                        outputPixelFormat = AVT::GetCompatibleMonoPixelFormatForRaw(tmpFrameData.PixelFormat() ) ;
-
-                    }
-                    catch(...)// lands here if GetCompatibleMonoPixelFromatForRaw throws
-                    {
-                        outputPixelFormat =tmpFrameData.PixelFormat() ;
-                    }
-                }
-                error = AVT::VmbImageTransform( convertedImage, tmpFrameData.GetFrameData().data(), tmpFrameData.Width(),  tmpFrameData.Height(), outputPixelFormat );
-        
-                QString sFormat = Helper::convertFormatToString( outputPixelFormat );
-
-                if( VmbErrorSuccess != error )
-                {
-                    sFormat = "Convert Error: " + QString::number(error,16);
-                    if( VmbErrorBadParameter == error )
-                        if (((tmpFrameData.Width()%4!=0) || (tmpFrameData.Height()%2!=0)))
-                        {
-                            sFormat.append(" (height or width not supported!)");
-                        }
-                        else
-                        {
-                            sFormat.append(" (PixelFormat not supported!)");
-                        }
-                    convertedImage = QImage();
-                }
-
-                {
-                    if( !m_Stopping )
-                    {
-                        emit frameReadyFromThread (convertedImage, sFormat, QString::number (tmpFrameData.Height() ),
-                                           QString::number (tmpFrameData.Width() ));
-                    }
-                }
-            }
-        }
-        // send the full bit depth image if requested
-        if ( true == tmpFrameData.TransformFullBitDepth() )
-        {
-            emit frameReadyFromThreadFullBitDepth ( tmpFrameData.FrameInfo() );
-        }  
-    }
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/FrameObserver.h b/VimbaCPP/Examples/VimbaViewer/Source/FrameObserver.h
deleted file mode 100644
index 7a9e9dd1ccab821267deeec8aa1f0478d2f5fbb5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/FrameObserver.h
+++ /dev/null
@@ -1,354 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameObserver.h
-
-  Description: Frame callback.
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef FRAMEOBSERVER_H
-#define FRAMEOBSERVER_H
-
-#include <QObject>
-#include <QImage>
-#include <QVector>
-#include <QTime>
-#include <QThread>
-#include <QStringList>
-#include <QMutex>
-#include <QMutexLocker>
-#include <QWaitCondition>
-
-#include "Helper.h"
-#include "Histogram/HistogramThread.h"
-#include <VimbaCPP/Include/IFrameObserver.h>
-#include <VimbaCPP/Include/Frame.h>
-#include <VimbaCPP/Include/Camera.h>
-#include "VmbImageTransformHelper.hpp"
-
-/* Number of frames in use to count the first FPS since start*/
-const unsigned int MAX_FRAMES_TO_COUNT = 50;
-
-using AVT::VmbAPI::CameraPtr;
-using AVT::VmbAPI::FramePtr;
-
-#ifdef _WIN32
-/*high resolution timer for windows*/
-class PrecisionTimer
-{
-    const LARGE_INTEGER     m_Frequency;
-    LARGE_INTEGER           m_Time;
-    static LARGE_INTEGER getFrq()
-    {
-        LARGE_INTEGER tmp;
-        QueryPerformanceFrequency( & tmp );
-        return tmp;
-    }
-public:
-    PrecisionTimer()
-        : m_Frequency( getFrq() )
-    {
-    }
-    LARGE_INTEGER Frequency() const { return m_Frequency; }
-    LARGE_INTEGER Ticks() const
-    {
-        LARGE_INTEGER tmp;
-        QueryPerformanceCounter( &tmp );
-        return tmp;
-    }
-    void start()
-    {
-        QueryPerformanceCounter( &m_Time );
-    }
-    double elapsed() const
-    {
-        LARGE_INTEGER tmpTime;
-        QueryPerformanceCounter( &tmpTime );
-        tmpTime.QuadPart -= m_Time.QuadPart;
-        return (tmpTime.QuadPart*1000.0)/ m_Frequency.QuadPart;
-    }
-};
-
-typedef PrecisionTimer timer_type;
-#else
-typedef QTime timer_type;
-#endif
-
-/*class to calculate frames per second*/
-class FPSCounter
-{
-    double          m_CurrentFPS;
-    timer_type      m_Timer;
-    bool            m_IsRunning;
-    VmbInt64_t      m_LastFrameID;
-    bool            m_Valid;
-public:
-    double  CurrentFPS()    const { return m_CurrentFPS; }
-
-    FPSCounter( )
-        : m_IsRunning( false )
-        , m_LastFrameID( 0 )
-        , m_Valid( false )
-    {
-
-    }
-    void count( VmbInt64_t id )
-    {
-        if( ! m_IsRunning )
-        {
-            m_LastFrameID   = id;
-            m_IsRunning     = true;
-            m_Valid         = false;
-            m_Timer.start();
-            return;
-        }
-        double      time_ms     = m_Timer.elapsed();
-        VmbInt64_t  delta_id = id - m_LastFrameID;
-        if( (time_ms > 1000  && delta_id != 0) )
-        {
-            m_CurrentFPS    = (delta_id*1000) / time_ms;
-            m_LastFrameID   = id;
-            m_Valid         = true;
-            m_Timer.start();
-        }
-    }
-    bool isValid() const {return m_Valid;}
-    void stop()
-    {
-        m_CurrentFPS    = 0.0;
-        m_LastFrameID   = 0;
-        m_Valid         = false;
-        m_IsRunning     = false;
-    }
-    bool isRunning() const { return m_IsRunning; }
-
-
-};
-
-template <typename T>
-class ValueWithState
-{
-    T       m_Value;
-    bool    m_isValid;
-public:
-    ValueWithState()
-        : m_Value( T())
-        , m_isValid( false )
-    {
-    }
-    ValueWithState( const ValueWithState<T> & o)
-        : m_Value( o() )
-        , m_isValid( o.isValid() )
-    {}
-    void        Invalidate()
-    {
-        m_isValid = false;
-        m_Value = T();
-    }
-    bool        isValid() const { return m_isValid; }
-    const T&    operator()() const { return m_Value; }
-    T&          operator()() { return m_Value; }
-    void        operator()( const T&o)
-    {
-        m_Value = o;
-        m_isValid = true;
-    }
-
-};
-class ImageProcessingThread : public QThread
-{
-    Q_OBJECT
-    
-    public:
-
-    protected:
-        struct FrameData
-        {
-        private:
-            bool                            m_TransferFullBitDepthImage;
-            tFrameInfo                      m_FrameInfo;
-        public:
-            FrameData()
-            {}
-            FrameData( const tFrameInfo &info, bool FullBitDepthImage)
-                : m_TransferFullBitDepthImage( FullBitDepthImage )
-                , m_FrameInfo( info )
-            {}
-            tFrameInfo                      FrameInfo()                                         const   { return m_FrameInfo; }
-            bool                            TransformFullBitDepth()                             const   { return m_TransferFullBitDepthImage; }
-            bool                            ColorInterpolation()                                const   { return m_FrameInfo.UseColorInterpolation(); }
-            QSharedPointer<unsigned char>   GetFrameData()                                      const   { return m_FrameInfo.DataPtr(); }
-            VmbPixelFormatType              PixelFormat()                                       const   { return m_FrameInfo.PixelFormat(); }
-            VmbUint32_t                     Width()                                             const   { return m_FrameInfo.Width();}
-            VmbUint32_t                     Height()                                            const   { return m_FrameInfo.Height(); }
-            VmbUint32_t                     Size()                                              const   { return m_FrameInfo.Size(); }
-        };
-    private:
-        ConsumerQueue<FrameData>    m_FrameQueue;
-        bool                        m_Stopping;
-        size_t                      m_DroppedFrames;
-
-        VmbUint64_t                 m_FrameCount;
-        FPSCounter                  m_FPSCounter;
-        timer_type                  m_Timer;
-        bool                        m_LimitFrameRate;
-        ValueWithState<double>      m_LastTime;
-    public:
-        ImageProcessingThread( size_t MaxFrames = 3)
-            : m_FrameQueue( MaxFrames )
-            , m_Stopping( false )
-            , m_DroppedFrames( 0 )
-            , m_FrameCount ( 0 )
-            , m_LimitFrameRate( false )
-        {
-            m_Timer.start();
-        }
-        const FPSCounter & getFPSCounter() const { return m_FPSCounter;}
-        ~ImageProcessingThread()
-        {
-            StopProcessing();
-        }
-        void StopProcessing()
-        {
-            if( ! m_Stopping)
-            {
-                m_LastTime.Invalidate();
-                m_Stopping = true;
-                m_FrameQueue.StopProcessing();
-                wait();
-            }
-        }
-        void StartProcessing()
-        {
-            m_Stopping = false;
-            m_FrameQueue.StartProcessing();
-            start();
-        }
-        size_t DroppedFrames() const { return m_DroppedFrames; }
-
-        void setThreadFrame ( const tFrameInfo &FrameInfo, bool FullBitDepthImage  )
-        {
-            FrameData tmpFrameData( FrameInfo,FullBitDepthImage);
-            m_FrameQueue.Enqueue( tmpFrameData );
-        }
-        void LimitFrameRate( bool v ) { m_LimitFrameRate= v; }
-private:
-
-    protected:
-            virtual void run();
-
-    private:
-
-    signals:
-            void frameReadyFromThread             ( QImage image, const QString &sFormat, const QString &sHeight, const QString &sWidth );
-            void frameReadyFromThreadFullBitDepth ( tFrameInfo mFullImageInfo );
-};
-
-
-class FrameObserver : public QObject, public AVT::VmbAPI::IFrameObserver
-{
-    Q_OBJECT
-
-    public:
-
-    protected:
-
-    private:
-        typedef QSharedPointer<unsigned char>   FrameDataPtr;
-
-        FPSCounter                              m_FPSCamera;
-        FPSCounter                              m_FPSReceived;
-        CameraPtr                               m_pCam;                     // camera to wait for frames on
-
-        QSharedPointer<HistogramThread>         m_pHistogramThread;         // histogram calculation thread
-
-        unsigned int                            m_nFrames;
-        unsigned int                            m_nFramesCounter;       // nr frames received
-
-        QSharedPointer<ImageProcessingThread>   m_pImageProcessingThread;   // Image processing thread
-        bool                                    m_bIsReset;
-        bool                                    m_EmitFrame;
-        /* Saving Raw Data */
-        unsigned int                        m_nRawImagesToSave;
-        unsigned int                        m_nRawImagesCounter;
-        QString                             m_sPathDestination;
-        QString                             m_sRawImagesName;
-
-        /* Histogram */
-        bool                                m_bIsHistogramEnabled;
-        bool                                m_bColorInterpolation;
-
-        bool                                m_IsStopping;
-        QMutex                              m_StoppingLock;
-
-        bool                                m_bTransferFullBitDepthImage;
-    public:
-            void Stopping()
-            {
-                m_pImageProcessingThread->StopProcessing();
-                m_FPSCamera.stop();
-                m_FPSReceived.stop();
-                QMutexLocker guard( &m_StoppingLock );
-                m_IsStopping = true;
-            }
-            void Starting()
-            {
-                QMutexLocker guard( &m_StoppingLock );
-                m_IsStopping = false;
-                m_pImageProcessingThread->StartProcessing();
-            }
-            FrameObserver ( CameraPtr pCam );
-           ~FrameObserver ();
-
-            virtual void FrameReceived          ( const FramePtr frame );
-            void resetFrameCounter              ( bool bIsRestart );
-            void setDisplayInterval             ( unsigned int nInterval );
-            void saveRawData                    ( unsigned int nNumberOfRawImagesToSave, const QString &sPath, const QString &sFileName);
-            void enableHistogram                ( bool bIsHistogramEnabled );
-            void setColorInterpolation          ( bool bState);
-            bool getColorInterpolation          ( void );
-            void enableFullBitDepthTransfer     ( bool bIsFullBitDepthEnabled );
-            void setEmitFrame                   ( bool bEmitFrame );
-            
-    protected:
-           
-    private:
-            bool setFrame                       ( const FramePtr &frame );
-            
-    private slots:
-            void getFrameFromThread             ( QImage image, const QString &sFormat, const QString &sHeight, const QString &sWidth );
-            void getFullBitDepthFrameFromThread ( tFrameInfo mFullImageInfo );
-            void getHistogramDataFromThread     ( const QVector<QVector <quint32> > &histData, const QString &sHistogramTitle, 
-                                                  const double &nMaxHeight_YAxis, const double &nMaxWidth_XAxis, const QVector <QStringList> &statistics );
-    signals:
-            void frameReadyFromObserver              ( QImage image, const QString &sFormat, const QString &sHeight, const QString &sWidth );
-            void frameReadyFromObserverFullBitDepth  ( tFrameInfo mFullImageInfo );
-            void setCurrentFPS                       ( const QString &sFPS );
-            void setFrameCounter                     ( const unsigned int &nFrame );
-            void histogramDataFromObserver           ( const QVector<QVector <quint32> > &histData, const QString &sHistogramTitle, 
-                                                       const double &nMaxHeight_YAxis, const double &nMaxWidth_XAxis, const QVector <QStringList> &statistics );
-};
-
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Helper.cpp b/VimbaCPP/Examples/VimbaViewer/Source/Helper.cpp
deleted file mode 100644
index 269ef5f83e540e9d05d80a1baf88a8cecd69faf4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/Helper.cpp
+++ /dev/null
@@ -1,497 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012-2019 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Helper.cpp
-
-  Description: A Common helper class. Mostly used to define any constants and common methods.
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "Helper.h"
-
-#include <QtEndian>
-#include <QStringList>
-
-#include "memcpy_threaded.h"
-
-/**copy construct from Vimba frame*/
-tFrameInfo::tFrameInfo( const FramePtr& frame, bool color_interpolation )
-    : BaseFrame( frame, color_interpolation )
-{
-    VmbError_t Result;
-    VmbUchar_t* pData;
-    Result = frame->GetImage( pData );
-    if ( Result != VmbErrorSuccess )
-    {
-        std::runtime_error( "could not get frame data" );
-    }
-    m_pFrameData = FrameDataPtr( new VmbUchar_t[Size()], DeleteArray<VmbUchar_t> );
-    if ( m_pFrameData == NULL )
-    {
-        throw std::bad_alloc();
-    }
-    memcpy_threaded<2>( m_pFrameData.data(), pData, Size() );
-}
-
-namespace Helper
-{
-const QString m_GIGE_STAT_FRAME_DELIVERED = "Stat Frames Delivered";
-const QString m_GIGE_STAT_FRAME_DROPPED = "Stat Frames Dropped";
-const QString m_GIGE_STAT_FRAME_RATE = "Stat Frame Rate";
-const QString m_GIGE_STAT_FRAME_RESCUED = "Stat Frames Rescued";
-const QString m_GIGE_STAT_FRAME_SHOVED = "Stat Frames Shoved";
-const QString m_GIGE_STAT_FRAME_UNDERRUN = "Stat Frames Underrun";
-const QString m_GIGE_STAT_LOCAL_RATE = "Stat Local Rate";
-const QString m_GIGE_STAT_PACKET_ERRORS = "Stat Packets Errors";
-const QString m_GIGE_STAT_PACKET_MISSED = "Stat Packets Missed";
-const QString m_GIGE_STAT_PACKET_RECEIVED = "Stat Packets Received";
-const QString m_GIGE_STAT_PACKET_REQUESTED = "Stat Packets Requested";
-const QString m_GIGE_STAT_PACKET_RESENT = "Stat Packets Resent";
-const QString m_GIGE_STAT_TIME_ELAPSED = "Stat Time Elapsed";
-
-
-QString IPv4ToString( const VmbInt64_t nIPAddress)
-{
-    QString sIPv4 = QString::number( 0xFF&(nIPAddress>>24) ) + "."
-            +   QString::number( 0xFF&(nIPAddress>>16) ) + "."
-            +   QString::number( 0xFF&(nIPAddress>>8) ) + "."
-            +   QString::number( 0xFF&nIPAddress );
-    return sIPv4; 
-}
-
-//
-// convert Mac address to string value format xx:xx:xx:xx:xx:xx
-//
-QString MACToString( const VmbInt64_t nNetworkOrderMacAddress )
-{
-    QString sIPv4;
-    sIPv4 = QString().sprintf( "%02x:%02x:%02x:%02x:%02x:%02x",
-        static_cast<unsigned int>(0xFF & (nNetworkOrderMacAddress >> 40)),
-        static_cast<unsigned int>(0xFF & (nNetworkOrderMacAddress >> 32)),
-        static_cast<unsigned int>(0xFF & (nNetworkOrderMacAddress >> 24)),
-        static_cast<unsigned int>(0xFF & (nNetworkOrderMacAddress >> 16)),
-        static_cast<unsigned int>(0xFF & (nNetworkOrderMacAddress >> 8)),
-        static_cast<unsigned int>(0xFF & nNetworkOrderMacAddress) );
-    return sIPv4;
-}
-
-QString displayValueToIPv4( const QString & sDecValue )
-{
-    VmbInt64_t    nValue64 = sDecValue.toLongLong();
-    return IPv4ToString( nValue64 );
-}
-
-QString displayValueToMAC( const QString & sMacAddress )
-{
-    VmbInt64_t    nValue64 = sMacAddress.toLongLong();
-    return MACToString( nValue64 );
-}
-
-// maps return codes to explanation strings for output
-QString mapReturnCodeToString( const VmbError_t nReturnCode )
-{
-    QString sResult = "(Return code undefined)";
-
-    switch ( nReturnCode )
-    {
-        case VmbErrorSuccess: sResult = "(No error)"; break;
-        case VmbErrorInternalFault: sResult = "(Unexpected fault in Vimba API or driver)"; break;
-        case VmbErrorApiNotStarted: sResult = "(VmbStartup() was not called before the current command)"; break;
-        case VmbErrorNotFound: sResult = "(The designated instance (camera, feature etc.) cannot be found)"; break;
-        case VmbErrorBadHandle: sResult = "(The given handle is not valid)"; break;
-        case VmbErrorDeviceNotOpen: sResult = "(Device was not opened for usage)"; break;
-        case VmbErrorInvalidAccess: sResult = "(Operation is invalid with the current access mode)"; break;
-        case VmbErrorBadParameter: sResult = "(One of the parameters was invalid (usually an illegal pointer))"; break;
-        case VmbErrorStructSize: sResult = "(The given struct size is not valid for this version of the API)"; break;
-        case VmbErrorMoreData: sResult = "(More data was returned in a string/list than space was provided)"; break;
-        case VmbErrorWrongType: sResult = "(The feature type for this access function was wrong)"; break;
-        case VmbErrorInvalidValue: sResult = "(The value was not valid; either out of bounds or not an increment of the minimum)"; break;
-        case VmbErrorTimeout: sResult = "(Timeout during wait)"; break;
-        case VmbErrorOther: sResult = "(Other error)"; break;
-        case VmbErrorResources: sResult = "(Resources not available (e.g memory))"; break;
-        case VmbErrorInvalidCall: sResult = "(Call is invalid in the current context (e.g callback))"; break;
-        case VmbErrorNoTL: sResult = "(No transport layers were found)"; break;
-        case VmbErrorNotImplemented: sResult = "(API feature is not implemented)"; break;
-        case VmbErrorNotSupported: sResult = "(API feature is not supported)"; break;
-        case VmbErrorIncomplete: sResult = "(A multiple register read or write was partially completed)"; break;
-        case 7000: sResult = "<Viewer Timeout>";
-        default: break;
-    }
-
-    return sResult;
-}
-
-QString convertFormatToString( const VmbPixelFormatType format )
-{
-    QString sFormat;
-
-    switch ( format )
-    {
-        /* Monochrome, 8 bits */
-        case VmbPixelFormatMono8:
-            sFormat = "Mono8";
-            break;
-
-            /* Monochrome, 10 bits in 16 bits */
-        case VmbPixelFormatMono10:
-            sFormat = "Mono10";
-            break;
-
-            /* Monochrome, 10 bits packed */
-        case VmbPixelFormatMono10p:
-            sFormat = "Mono10p";
-            break;
-
-            /* Monochrome, 12 bits in 16 bits */
-        case VmbPixelFormatMono12:
-            sFormat = "Mono12";
-            break;
-
-            /* Monochrome, 12 bits packed */
-        case VmbPixelFormatMono12p:
-            sFormat = "Mono12p";
-            break;
-
-            /* Monochrome, 2x12 bits in 24 bits */
-        case VmbPixelFormatMono12Packed:
-            sFormat = "Mono12Packed";
-            break;
-
-            /* Monochrome, 14 bits in 16 bits */
-        case VmbPixelFormatMono14:
-            sFormat = "Mono14";
-            break;
-
-            /* Monochrome, 16 bits */
-        case VmbPixelFormatMono16:
-            sFormat = "Mono16";
-            break;
-
-            /* Bayer-color, 8 bits */
-        case VmbPixelFormatBayerGR8:
-            sFormat = "BayerGR8";
-            break;
-
-            /* Bayer-color, 8 bits */
-        case VmbPixelFormatBayerRG8:
-            sFormat = "BayerRG8";
-            break;
-
-            /* Bayer-color, 8 bits */
-        case VmbPixelFormatBayerGB8:
-            sFormat = "BayerGB8";
-            break;
-
-            /* Bayer-color, 8 bits */
-        case VmbPixelFormatBayerBG8:
-            sFormat = "BayerBG8";
-            break;
-
-            /* Bayer-color, 10 bits in 16 bits */
-        case VmbPixelFormatBayerGR10:
-            sFormat = "BayerGR10";
-            break;
-
-            /* Bayer-color, 10 bits in 16 bits */
-        case VmbPixelFormatBayerRG10:
-            sFormat = "BayerRG10";
-            break;
-
-            /* Bayer-color, 10 bits in 16 bits */
-        case VmbPixelFormatBayerGB10:
-            sFormat = "BayerGB10";
-            break;
-
-            /* Bayer-color, 10 bits in 16 bits */
-        case VmbPixelFormatBayerBG10:
-            sFormat = "BayerBG10";
-            break;
-
-            /* Bayer-color, 10 bits packed*/
-        case VmbPixelFormatBayerGR10p:
-            sFormat = "BayerGR10p";
-            break;
-
-            /* Bayer-color, 10 bits packed */
-        case VmbPixelFormatBayerRG10p:
-            sFormat = "BayerRG10p";
-            break;
-
-            /* Bayer-color, 10 bits packed */
-        case VmbPixelFormatBayerGB10p:
-            sFormat = "BayerGB10p";
-            break;
-
-            /* Bayer-color, 10 bits packed */
-        case VmbPixelFormatBayerBG10p:
-            sFormat = "BayerBG10p";
-            break;
-
-            /* Bayer-color, 12 bits in 16 bits */
-        case VmbPixelFormatBayerGR12:
-            sFormat = "BayerGR12";
-            break;
-
-            /* Bayer-color, 12 bits in 16 bits */
-        case VmbPixelFormatBayerRG12:
-            sFormat = "BayerRG12";
-            break;
-
-            /* Bayer-color, 12 bits in 16 bits */
-        case VmbPixelFormatBayerGB12:
-            sFormat = "BayerGB12";
-            break;
-
-            /* Bayer-color, 12 bits in 16 bits */
-        case VmbPixelFormatBayerBG12:
-            sFormat = "BayerBG12";
-            break;
-
-            /* Bayer-color, 12 bits packed*/
-        case VmbPixelFormatBayerGR12p:
-            sFormat = "BayerGR12p";
-            break;
-
-            /* Bayer-color, 12 bits packed */
-        case VmbPixelFormatBayerRG12p:
-            sFormat = "BayerRG12p";
-            break;
-
-            /* Bayer-color, 12 bits packed */
-        case VmbPixelFormatBayerGB12p:
-            sFormat = "BayerGB12p";
-            break;
-
-            /* Bayer-color, 12 bits packed */
-        case VmbPixelFormatBayerBG12p:
-            sFormat = "BayerBG12p";
-            break;
-
-            /* RGB, 8 bits x 3 */
-        case VmbPixelFormatRgb8:
-            sFormat = "RGB8";
-            break;
-
-            /* BGR, 8 bits x 3 */
-        case VmbPixelFormatBgr8:
-            sFormat = "BGR8";
-            break;
-
-            /* ARGB, 8 bits x 4 */
-        case VmbPixelFormatArgb8:
-            sFormat = "ARGB8";
-            break;
-
-            /* BGRA, 8 bits x 4 */
-        case VmbPixelFormatBgra8:
-            sFormat = "BGRA8";
-            break;
-
-            /* RGB, 16 bits x 3 */
-        case VmbPixelFormatRgb16:
-            sFormat = "RGB16";
-            break;
-
-            /* YUV 411 with 8 bits */
-        case VmbPixelFormatYuv411:
-            sFormat = "YUV411";
-            break;
-
-            /* YUV 411 with 8 bits */
-        case VmbPixelFormatYCbCr411_8_CbYYCrYY:
-            sFormat = "YCbCr411_8_CbYYCrYY";
-            break;
-
-            /* YUV  422 */
-        case VmbPixelFormatYuv422:
-            sFormat = "YUV422";
-            break;
-            /* YUV  422 */
-        case VmbPixelFormatYCbCr422_8_CbYCrY:
-            sFormat = "YCbCr422_8_CbYCrY";
-            break;
-
-            /* YUV 444 */
-        case VmbPixelFormatYuv444:
-            sFormat = "YUV444";
-            break;
-
-            /* YUV 444 */
-        case VmbPixelFormatYCbCr8_CbYCr:
-            sFormat = "YCbCr8_CbYCr";
-            break;
-
-            /* BAYERGR12PACKED Bayer-color, 2x12 bits in 24 bits, starting with GR line*/
-        case VmbPixelFormatBayerGR12Packed:
-            sFormat = "BayerGR12Packed";
-            break;
-
-            /* BAYERRG12PACKED Bayer-color, 2x12 bits in 24 bits, starting with RG line */
-        case VmbPixelFormatBayerRG12Packed:
-            sFormat = "BayerRG12Packed";
-            break;
-
-            /* BAYERGB12PACKED Bayer-color, 2x12 bits in 24 bits, starting with GB line*/
-        case VmbPixelFormatBayerGB12Packed:
-            sFormat = "BayerGB12Packed";
-            break;
-
-            /* BAYERBG12PACKED Bayer-color, 2x12 bits in 24 bits, starting with BG line*/
-        case VmbPixelFormatBayerBG12Packed:
-            sFormat = "BayerBG12Packed";
-            break;
-
-            /* Bayer-color, 16 bits, starting with GR line*/
-        case VmbPixelFormatBayerGR16:
-            sFormat = "BayerGR16";
-            break;
-
-            /* Bayer-color, 16 bits, starting with RG line */
-        case VmbPixelFormatBayerRG16:
-            sFormat = "BayerRG16";
-            break;
-
-            /* Bayer-color, 16 bits, starting with GB line */
-        case VmbPixelFormatBayerGB16:
-            sFormat = "BayerGB16";
-            break;
-
-            /* Bayer-color, 16 bits, starting with BG line */
-        case VmbPixelFormatBayerBG16:
-            sFormat = "BayerBG16";
-            break;
-
-        default:
-            sFormat = " ";
-            break;
-    }
-
-    return sFormat;
-}
-
-bool needsIPv4Format( const QString & sFeatureName )
-{
-    if ( sFeatureName == "Multicast IP Address" ||
-        sFeatureName == "MulticastIPAddress" ||
-        sFeatureName == "Current Subnet Mask" ||
-        sFeatureName == "GevCurrentSubnetMask" ||
-        sFeatureName == "Current IP Address" ||
-        sFeatureName == "GevCurrentIPAddress" ||
-        sFeatureName == "Current Default Gateway" ||
-        sFeatureName == "GevCurrentDefaultGateway" ||
-        sFeatureName == "Persistent IP Address" ||
-        sFeatureName == "GevPersistentIPAddress" ||
-        sFeatureName == "Persistent Default Gateway" ||
-        sFeatureName == "GevPersistentDefaultGateway" ||
-        sFeatureName == "Persistent Subnet Mask" ||
-        sFeatureName == "GevPersistentSubnetMask" )
-    {
-        return true;
-    }
-    return false;
-}
-
-bool needsIPv4Format( const QString & sFeatureName, const std::string & sRepresentation )
-{
-    if ( sRepresentation == "IPV4Address" || needsIPv4Format( sFeatureName ) )
-    {
-        return true;
-    }
-    return false;
-}
-
-bool isAutoFeature( const QString & sFeatureName )
-{
-    return sFeatureName == "ExposureAuto"
-        || sFeatureName == "Exposure Auto"
-        || sFeatureName == "GainAuto"
-        || sFeatureName == "Gain Auto"
-        || sFeatureName == "Balance White Auto"
-        || sFeatureName == "BalanceWhiteAuto";
-}
-
-VmbInt64_t StringToIPv4( const QString & sIPString)
-{
-    VmbInt64_t ipAddress = 0;
-    VmbInt64_t temp = 0;
-    QStringList ipParts;
-    bool check = false;
-
-    ipParts = sIPString.split( "." );
-
-    if ( 4 == ipParts.size() )
-    {
-        for ( int i = 0; i < ipParts.size(); ++i )
-        {
-            temp = ipParts.at( i ).toUInt( &check, 10 );
-            if ( false == check || temp > 255 )
-            {
-                break;
-            }
-            ipAddress = (ipAddress << 8) + temp;
-        }
-    }
-
-    if ( false == check || temp > 255)
-    {
-        ipAddress = -1;
-    }
-
-    return ipAddress;
-}
-
-VmbInt64_t StringToMAC( const QString& sMACString )
-{
-    VmbInt64_t macAddress = 0;
-    QStringList macParts;
-    VmbUint32_t temp = 0;
-    bool check = false;
-
-    macParts = sMACString.split( ":" );
-    if ( true == macParts.empty() )
-    {
-        macParts = sMACString.split( "-" );
-    }
-
-    if ( 6 == macParts.size() )
-    {
-        for ( int i=0; i<macParts.size(); ++i )
-        {
-            temp = macParts.at(i).toUInt( &check, 16 );
-            if ( false == check )
-            {
-                break;
-            }
-            macAddress = (macAddress << 8) + temp;
-        }
-    }
-
-    if ( false == check )
-    {
-        macAddress = -1;
-    }
-
-    return macAddress;
-}
-
-} // namespace Helper
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Helper.h b/VimbaCPP/Examples/VimbaViewer/Source/Helper.h
deleted file mode 100644
index 7db71c0cb82ab83a7ee3ec26eeacfa32be115921..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/Helper.h
+++ /dev/null
@@ -1,319 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2019 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Helper.h
-
-  Description: A Common helper class. Mostly used to define any constants and common methods.
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef HELPER_H
-#define HELPER_H
-
-#include <QString>
-
-#include "VimbaCPP/Include/VimbaCPPCommon.h"
-#include "VimbaCPP/Include/Frame.h"
-#include "VimbaCPP/Include/Camera.h"
-
-using AVT::VmbAPI::CameraPtr;
-using AVT::VmbAPI::FramePtr;
-
-#include <QSharedPointer>
-#include <QMutex>
-#include <QMutexLocker>
-#include <QWaitCondition>
-#include <QVector>
-#include <QList>
-#include <exception>
-#include <stdexcept>
-
-// QSharedPoinnter custom deleter
-template <class T>
-void DeleteArray(T *pArray)
-{
-    delete [] pArray;
-}
-
-
-/** consumer frame queue with max size limit.
-*/
-template <typename DATA_TYPE>
-class ConsumerQueue
-{
-    QList<DATA_TYPE>    m_Data;             // frame storage
-    mutable QMutex      m_Lock;             // queue synch lock
-    QWaitCondition      m_DataAvailable;    // data available condition
-    bool                m_Stopping;         // state of the queue
-    const size_t        m_MaxSize;          // max number of frames before the oldest will get dropped
-public:
-    /**constructor with max queue size*/
-    explicit ConsumerQueue( size_t maxSize = 0)
-        : m_MaxSize( maxSize )
-        , m_Stopping( false )
-    {}
-    /**start queue processing*/
-    void StartProcessing()
-    {
-        QMutexLocker local_lock( &m_Lock );
-        m_Stopping = false;
-    }
-    /**stop queue processing, signaling Halt to WaitData*/
-    void StopProcessing()
-    {
-        {
-            QMutexLocker local_lock( &m_Lock );
-            m_Data.clear();
-            m_Stopping = true;
-        }
-        m_DataAvailable.wakeOne();
-    }
-    /**test if queue is empty*/
-    bool IsEmpty() const
-    {
-        QMutexLocker local_lock( & m_Lock );
-        return m_Data.empty();
-    }
-    /**enqueue item in queue
-    * might throw bad_alloc
-    */
-    void Enqueue( const DATA_TYPE &v)
-    {
-        {
-            QMutexLocker local_lock( &m_Lock );
-            if( m_Stopping)
-            {
-                m_DataAvailable.wakeOne();
-                return;
-            }
-            if( m_MaxSize != 0 && m_Data.size() == m_MaxSize )
-            {
-                m_Data.pop_front();
-            }
-            m_Data.push_back( v );
-        }
-        m_DataAvailable.wakeOne();
-    }
-    /**wait for data item from queue
-    * if queue is not empty, an item is returned, else function waits for either a data item to be available,
-    * or StopProccessing signal
-    * might return false if queue item canot be copied to v (bad alloc)
-    * returns false if StopProcessing is called
-    */
-    bool WaitData( DATA_TYPE &v)
-    {
-        QMutexLocker local_lock( &m_Lock );
-        while( !m_Stopping && m_Data.empty() )
-        {
-            m_DataAvailable.wait( local_lock.mutex() );
-        }
-        if( m_Stopping)
-        {
-            return false;
-        }
-        try
-        {
-            v = m_Data.front();
-            m_Data.pop_front();
-            return true;
-        }
-        catch(...)
-        {
-            return false;
-        }
-    }
-};
-/**base class for frame data infos*/
-class BaseFrame
-{
-    VmbPixelFormatType      m_PixelFormat;              // Vimba frame pixel format
-    VmbUint32_t             m_Width;                    // frame width
-    VmbUint32_t             m_Height;                   // frame height
-    VmbUint32_t             m_Size;                     // frame size in bytes
-    bool                    m_ColorInterpolation;       // requirement if raw data shall be interpolated or displayed as mono
-
-public:
-    /**get frame pixel format.*/
-    VmbPixelFormatType      PixelFormat()                           const   { return m_PixelFormat; }
-    /**set frame pixel format.*/
-    void                    PixelFormat(VmbPixelFormatType format)          { m_PixelFormat = format; }
-    /**get frame widht.*/
-    VmbUint32_t             Width()                                 const   { return m_Width; }
-    /**set frame width.*/
-    void                    Width(VmbUint32_t w)                            {m_Width = w; }
-    /**get frame height.*/
-    VmbUint32_t             Height()                                const   { return m_Height; }
-    /**set frame height.*/
-    void                    Height(VmbUint32_t h)                           { m_Height = h; }
-    /**get frame size in bytes.*/
-    VmbUint32_t             Size()                                  const   { return m_Size; }
-    /**set frame size in bytes.*/
-    void                    Size(VmbUint32_t s)                             { m_Size = s; }
-    /**get state of color interpolation.*/
-    bool                    UseColorInterpolation()                 const   { return m_ColorInterpolation; }
-    /**set state of color interpolation.*/
-    void                    UseColorInterpolation(bool v)                   { m_ColorInterpolation = v; }
-    /**reset frame information from Vimba frame.*/
-    void Set( const FramePtr &frame, bool color_interpolation)
-    {
-        if( frame== NULL )
-        {
-            throw std::invalid_argument("null pointer received");
-        }
-        UseColorInterpolation( color_interpolation);
-        VmbFrameStatusType statusType = VmbFrameStatusInvalid;
-        if( VmbErrorSuccess != frame->GetReceiveStatus( statusType ) )
-        {
-            throw std::runtime_error( "frame status not readable");
-        }
-        if( statusType != VmbFrameStatusComplete)
-        {
-            throw std::runtime_error("frame status not complete");
-        }
-        if( VmbErrorSuccess != frame->GetPixelFormat( m_PixelFormat ) )
-        {
-            throw std::runtime_error("could not get pixel format from frame");
-        }
-        if( VmbErrorSuccess != frame->GetWidth( m_Width ) )
-        {
-            throw std::runtime_error("could not get width from frame");
-        }
-        if( VmbErrorSuccess != frame->GetHeight( m_Height ) )
-        {
-            throw std::runtime_error("could not get height from frame");
-        }
-        if( VmbErrorSuccess != frame->GetImageSize( m_Size ) )
-        {
-            throw std::runtime_error("could not get image size from frame");
-        }
-    }
-    /**default constructor.*/
-    BaseFrame( )
-    {}
-    /**construct from Vimba frame informations.*/
-    BaseFrame( const FramePtr &frame, bool color_interpolation)
-    {
-        Set( frame, color_interpolation);
-    }
-    /**construct from information values.*/
-    BaseFrame   (   VmbPixelFormatType      pixelFormat,
-                    VmbUint32_t             width,
-                    VmbUint32_t             height,
-                    VmbUint32_t             size,
-                    bool                    colorInterpolation
-                )
-        : m_PixelFormat( pixelFormat )
-        , m_Width( width )
-        , m_Height( height )
-        , m_Size( size )
-        , m_ColorInterpolation( colorInterpolation )
-    {
-    }
-};
-
-typedef QSharedPointer<VmbUchar_t> FrameDataPtr;
-/**class to hold info and a copy of frame data*/
-class tFrameInfo: public BaseFrame
-{
-    FrameDataPtr    m_pFrameData;
-public:
-    /**access to shared data pointer*/
-    FrameDataPtr        DataPtr()   const   { return m_pFrameData; }
-    /**access to shared data pointer*/
-    FrameDataPtr        DataPtr()           { return m_pFrameData; }
-
-    /**access to raw data pointer*/
-    const VmbUchar_t*   Data()      const   { return m_pFrameData.data(); }
-    /**access to raw data pointer*/
-    VmbUchar_t*         Data()              { return m_pFrameData.data(); }
-
-    /**default constructor*/
-    tFrameInfo()
-    {}
-    /**copy construct from Vimba frame*/
-    tFrameInfo( const FramePtr& frame, bool color_interpolation );
-};
-typedef QSharedPointer<tFrameInfo> FrameInfoPtr;    // shared pointer for frame infos
-
-enum VimbaViewerLogCategory
-{
-    VimbaViewerLogCategory_OK      = 0,
-    VimbaViewerLogCategory_WARNING = 1,
-    VimbaViewerLogCategory_ERROR   = 2,
-    VimbaViewerLogCategory_INFO    = 3,
-};
-
-namespace Helper
-{
-        /**format ip4 to string.*/
-        QString         IPv4ToString                ( const VmbInt64_t nIPAddress);
-
-        /**format MAC address to string.*/
-        QString         MACToString                 ( const VmbInt64_t nNetworkOrderMACAddress );
-
-        /**format ip4 string to integer string.*/
-        QString         displayValueToIPv4          ( const QString& sDecValue );
-
-        /**format MAC address string to integer string.*/
-        QString         displayValueToMAC           ( const QString& sMacAddress );
-
-        /**format return code to string.*/
-        QString         mapReturnCodeToString       ( const VmbError_t nReturnCode);
-
-        /**format pixel format to string*/
-        QString         convertFormatToString       ( const VmbPixelFormatType format);
-
-        /**lookup if feature needs IP4 format.*/
-        bool            needsIPv4Format             ( const QString &sFeatureName );
-        /**lookup if feature needs IP4 format.*/
-        bool            needsIPv4Format             ( const QString &sFeatureName, const std::string &sRepresentation);
-
-        /**lookup if feature has auto mode.*/
-        bool            isAutoFeature               ( const QString &sFeatureName);
-
-        /**convert IP4 string to integer*/
-        VmbInt64_t      StringToIPv4                ( const QString &sIPString);
-
-        VmbInt64_t      StringToMAC                 (const QString& sMACString);
-
-        /* constants */
-        extern const QString         m_GIGE_STAT_FRAME_DELIVERED;
-        extern const QString         m_GIGE_STAT_FRAME_DROPPED;
-        extern const QString         m_GIGE_STAT_FRAME_RATE;
-        extern const QString         m_GIGE_STAT_FRAME_RESCUED;
-        extern const QString         m_GIGE_STAT_FRAME_SHOVED;
-        extern const QString         m_GIGE_STAT_FRAME_UNDERRUN;
-        extern const QString         m_GIGE_STAT_LOCAL_RATE;
-        extern const QString         m_GIGE_STAT_PACKET_ERRORS;
-        extern const QString         m_GIGE_STAT_PACKET_MISSED;
-        extern const QString         m_GIGE_STAT_PACKET_RECEIVED;
-        extern const QString         m_GIGE_STAT_PACKET_REQUESTED;
-        extern const QString         m_GIGE_STAT_PACKET_RESENT;
-        extern const QString         m_GIGE_STAT_TIME_ELAPSED;
-        extern const QString         m_EXPOSURE_AUTO;
-        extern const QString         m_GAIN_AUTO;
-        extern const QString         m_BALANCE_WHITE_AUTO;
-
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ILogTarget.h b/VimbaCPP/Examples/VimbaViewer/Source/ILogTarget.h
deleted file mode 100644
index f9f8cfa29a92649befd8f94dfac6b4632b424186..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ILogTarget.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef I_LOG_TARGET_H_
-#define I_LOG_TARGET_H_
-#include <QString>
-class ILogTarget
-{
-public:
-    virtual void Log( const QString &s) = 0;
-    virtual ~ILogTarget() {}
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ImageSaver.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ImageSaver.cpp
deleted file mode 100644
index b0309695a481b160d80d05c0dfb084ba313023d7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ImageSaver.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ImageSaver.h
-
-  Description: Put an image in a signal slot queue.
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "ImageSaver.h"
-
-ImageSaver::ImageSaver (void)
-{
-    
-}
-
-ImageSaver::~ImageSaver (void)
-{
-
-}
-
-void ImageSaver::setPosition ( unsigned int nPos)
-{
-    emit progressBarPosition (nPos);
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ImageSaver.h b/VimbaCPP/Examples/VimbaViewer/Source/ImageSaver.h
deleted file mode 100644
index cbeb44fdb623ca28e88a69bb80b07183e53a43c8..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ImageSaver.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ImageSaver.h
-
-  Description: Put an image in a signal slot queue.
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef IMAGESAVER_H
-#define IMAGESAVER_H
-
-#include <QObject>
-
-class ImageSaver : public QObject
-{
-    Q_OBJECT
-    
-    public:
-
-    protected:
-
-    private:
-            
-    public:
-            ImageSaver ( void );
-            ~ImageSaver( void ); 
-            void setPosition ( unsigned int nPos );
-
-    private:
-    protected:
-    private:
-
-    signals:
-            void progressBarPosition ( unsigned int nPos );
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ImageWriter.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ImageWriter.cpp
deleted file mode 100644
index 8169d883f332e03975d60b4570648d2227e20b6c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ImageWriter.cpp
+++ /dev/null
@@ -1,525 +0,0 @@
-#include "ImageWriter.h"
-
-#include <QLibrary>
-#include <QString>
-#include <QSharedPointer>
-#include <QDebug>
-#include <stdint.h>
-#include "VmbTransform.h"
-#include <QMutex>
-#include <QMutexLocker>
-typedef struct tiff TIFF;
-
-// constants for configuring Tiff tag data
-#define    IMGWRITER_IMAGEWIDTH         256    /* image width in pixels (TIFFTAG_IMAGEWIDTH) */
-#define    IMGWRITER_IMAGELENGTH        257    /* image height in pixels (TIFFTAG_IMAGELENGTH) */
-#define    IMGWRITER_BITSPERSAMPLE      258    /* bits per channel (sample) (TIFFTAG_BITSPERSAMPLE) */
-#define    IMGWRITER_COMPRESSION        259    /* data compression technique (TIFFTAG_COMPRESSION) */
-#define    IMGWRITER_PHOTOMETRIC        262    /* photometric interpretation (TIFFTAG_PHOTOMETRIC) */
-#define    IMGWRITER_XRESOLUTION        282    /* pixels/resolution in x (TIFFTAG_XRESOLUTION) */
-#define    IMGWRITER_YRESOLUTION        283    /* pixels/resolution in y (TIFFTAG_YRESOLUTION) */
-#define    IMGWRITER_RESOLUTIONUNIT     296    /* units of resolutions (TIFFTAG_RESOLUTIONUNIT) */
-#define    IMGWRITER_PLANARCONFIG       284    /* storage organization (TIFFTAG_PLANARCONFIG) */
-#define    IMGWRITER_SAMPLESPERPIXEL    277    /* samples per pixel (TIFFTAG_SAMPLESPERPIXEL) */
-
-
-
-class TiffLibrary
-{
-    bool            m_DidLoad;
-    QLibrary        m_LibTiffLibrary;
-    static QMutex   m_LibraryLock;
-
-    // function pointer typedefs
-    typedef TIFF* (*TIFFOpenPrototype)( const char*, const char* );
-    typedef void (*TIFFClosePrototype)( TIFF* );
-    typedef int (*TIFFSetFieldProtoype)( TIFF*, uint32_t, ... );
-    typedef int (*TIFFWriteScanlinePrototype)( TIFF*, void*, uint32_t, uint16_t );
-
-    TiffLibrary()
-    {
-        m_LibTiffLibrary.setFileNameAndVersion("libtiff", 5);
-        m_DidLoad = m_LibTiffLibrary.load(); 
-
-        if (!m_DidLoad )
-        {
-            m_LibTiffLibrary.setFileNameAndVersion("libtiff", 4); 
-            m_DidLoad = m_LibTiffLibrary.load(); 
-        }
-        if( m_DidLoad )
-        {
-            TiffOpen = (TIFFOpenPrototype) m_LibTiffLibrary.resolve("TIFFOpen");
-            if( TiffOpen == NULL)
-            {
-                m_DidLoad = false;
-                return;
-            }
-            TiffClose = (TIFFClosePrototype) m_LibTiffLibrary.resolve("TIFFClose");
-            if( TiffClose == NULL)
-            {
-                m_DidLoad = false;
-                return;
-            }
-            TiffSetField = (TIFFSetFieldProtoype) m_LibTiffLibrary.resolve("TIFFSetField");    
-            if( TiffSetField == NULL)
-            {
-                m_DidLoad = false;
-                return;
-            }
-            TiffWriteScanLine = (TIFFWriteScanlinePrototype) m_LibTiffLibrary.resolve("TIFFWriteScanline");
-            if( TiffWriteScanLine == NULL)
-            {
-                m_DidLoad = false;
-                return;
-            }
-        }
-    }
-public:
-    static const TiffLibrary& Get()
-    {
-        QMutexLocker local_lock( &m_LibraryLock );
-        static const TiffLibrary staticLibrary;
-        return staticLibrary;
-    }
-    bool Valid() const { return m_DidLoad; }
-    QString GetLastError( void ) const
-    {
-        return m_LibTiffLibrary.errorString();
-    }
-
-    TIFFOpenPrototype           TiffOpen;
-    TIFFClosePrototype          TiffClose;
-    TIFFSetFieldProtoype        TiffSetField;
-    TIFFWriteScanlinePrototype  TiffWriteScanLine;
-};
-// static init
-QMutex TiffLibrary::m_LibraryLock;
-
-VmbError_t GetBitsPerPixelUsed( VmbUint32_t * BitsPerPixelUsed, VmbPixelFormat_t PixelFormat)
-{
-    if( BitsPerPixelUsed == 0 ) return VmbErrorBadParameter;
-    switch(PixelFormat)
-    {
-    case VmbPixelFormatBayerGR8:
-    case VmbPixelFormatBayerRG8:
-    case VmbPixelFormatBayerGB8:
-    case VmbPixelFormatBayerBG8:
-    case VmbPixelFormatMono8:
-        *BitsPerPixelUsed = 8;
-        return VmbErrorSuccess;
-    case VmbPixelFormatBayerGR10:
-    case VmbPixelFormatBayerRG10:
-    case VmbPixelFormatBayerGB10:
-    case VmbPixelFormatBayerBG10:
-    case VmbPixelFormatBayerGR10p:
-    case VmbPixelFormatBayerRG10p:
-    case VmbPixelFormatBayerGB10p:
-    case VmbPixelFormatBayerBG10p:
-    case VmbPixelFormatMono10:
-    case VmbPixelFormatMono10p:
-        *BitsPerPixelUsed = 10;
-        return VmbErrorSuccess;
-    case VmbPixelFormatBayerGR12:
-    case VmbPixelFormatBayerRG12:
-    case VmbPixelFormatBayerGB12:
-    case VmbPixelFormatBayerBG12:
-    case VmbPixelFormatMono12:
-    case VmbPixelFormatMono12Packed:
-    case VmbPixelFormatMono12p:
-    case VmbPixelFormatBayerGR12Packed:
-    case VmbPixelFormatBayerRG12Packed:
-    case VmbPixelFormatBayerGB12Packed:
-    case VmbPixelFormatBayerBG12Packed:
-    case VmbPixelFormatBayerGR12p:
-    case VmbPixelFormatBayerRG12p:
-    case VmbPixelFormatBayerGB12p:
-    case VmbPixelFormatBayerBG12p:
-        *BitsPerPixelUsed = 12;
-        return VmbErrorSuccess;
-    case VmbPixelFormatMono14:
-        *BitsPerPixelUsed = 14;
-        return VmbErrorSuccess;
-    case VmbPixelFormatBayerGR16:
-    case VmbPixelFormatBayerRG16:
-    case VmbPixelFormatBayerGB16:
-    case VmbPixelFormatBayerBG16:
-    case VmbPixelFormatMono16:
-        *BitsPerPixelUsed = 16;
-        return VmbErrorSuccess;
-    case VmbPixelFormatRgb8:
-    case VmbPixelFormatBgr8:
-        *BitsPerPixelUsed = 24;
-        return VmbErrorSuccess;
-    case VmbPixelFormatArgb8:
-    case VmbPixelFormatBgra8:
-        *BitsPerPixelUsed = 32;
-        return VmbErrorSuccess;
-    case VmbPixelFormatRgb10:
-    case VmbPixelFormatBgr10:
-        *BitsPerPixelUsed = 30;
-        return VmbErrorSuccess;
-    case VmbPixelFormatRgb12:
-    case VmbPixelFormatBgr12:
-        *BitsPerPixelUsed = 36;
-        return VmbErrorSuccess;
-    case VmbPixelFormatRgb14:
-    case VmbPixelFormatBgr14:
-        *BitsPerPixelUsed = 42;
-        return VmbErrorSuccess;
-    case VmbPixelFormatRgb16:
-    case VmbPixelFormatBgr16:
-        *BitsPerPixelUsed = 48;
-        return VmbErrorSuccess;
-    case VmbPixelFormatRgba10:
-    case VmbPixelFormatBgra10:
-        *BitsPerPixelUsed = 40;
-        return VmbErrorSuccess;
-    case VmbPixelFormatRgba12:
-    case VmbPixelFormatBgra12:
-        *BitsPerPixelUsed = 48;
-        return VmbErrorSuccess;
-    case VmbPixelFormatRgba14:
-    case VmbPixelFormatBgra14:
-        *BitsPerPixelUsed = 56;
-        return VmbErrorSuccess;
-    case VmbPixelFormatRgba16:
-    case VmbPixelFormatBgra16:
-        *BitsPerPixelUsed = 64;
-        return VmbErrorSuccess;
-    case VmbPixelFormatYuv411:
-    case VmbPixelFormatYCbCr411_8_CbYYCrYY:
-        *BitsPerPixelUsed = 12;
-        return VmbErrorSuccess;
-    case VmbPixelFormatYuv422:
-    case VmbPixelFormatYCbCr422_8_CbYCrY:
-        *BitsPerPixelUsed = 16;
-        return VmbErrorSuccess;
-    case VmbPixelFormatYuv444:
-    case VmbPixelFormatYCbCr8_CbYCr:
-        *BitsPerPixelUsed = 24;
-        return VmbErrorSuccess;
-    default:
-        return VmbErrorBadParameter;
-    }
-}
-
-// helper functions to test if pixel format is of type Mono
-bool IsMonochrome( VmbPixelFormat_t format )
-{
-    bool isMono;
-
-    switch(format)
-    {
-    case VmbPixelFormatMono8:            
-    case VmbPixelFormatMono10:
-    case VmbPixelFormatMono10p:
-    case VmbPixelFormatMono12:
-    case VmbPixelFormatMono12Packed:
-    case VmbPixelFormatMono12p:
-    case VmbPixelFormatMono14:
-    case VmbPixelFormatMono16:
-        isMono = true;
-        break;
-    default:
-        isMono = false;
-    }
-
-    return isMono;
-}
-
-
-// helper functions to test if pixel format is packed
-bool IsPackedFormat( VmbPixelFormat_t format )
-{
-    bool isPacked;
-
-    switch(format)
-    {
-    case VmbPixelFormatMono10p:
-    case VmbPixelFormatMono12Packed:
-    case VmbPixelFormatMono12p:
-    case VmbPixelFormatBayerGR12Packed:
-    case VmbPixelFormatBayerRG12Packed:
-    case VmbPixelFormatBayerGB12Packed:
-    case VmbPixelFormatBayerBG12Packed:
-    case VmbPixelFormatBayerGR10p:
-    case VmbPixelFormatBayerRG10p:
-    case VmbPixelFormatBayerGB10p:
-    case VmbPixelFormatBayerBG10p:
-    case VmbPixelFormatBayerGR12p:
-    case VmbPixelFormatBayerRG12p:
-    case VmbPixelFormatBayerGB12p:
-    case VmbPixelFormatBayerBG12p:
-        isPacked = true;
-        break;
-    default:
-        isPacked = false;
-    }
-
-    return isPacked;
-}
-
-
-// Helper function to fill in the TIFF file parameters 
-bool WriteStandardTags( TIFF* TiffFile, const tFrameInfo &frame_info)
-{
-    int         result = 0;
-    VmbUint32_t BitsPerPixelUsed;
-    // calculate bit depth
-    GetBitsPerPixelUsed(&BitsPerPixelUsed, frame_info.PixelFormat() );
-    VmbUint16_t BitsPerSample = static_cast<VmbUint16_t>( ( BitsPerPixelUsed > 8 ) ? 16 : 8 );
-    
-    // check if function symbol could be resolved (using QLibrary) 
-    result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_IMAGEWIDTH, static_cast<unsigned long>(frame_info.Width() ));
-    if (result == 0)
-        return false;
-    result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_IMAGELENGTH, static_cast<unsigned long>(frame_info.Height() ));
-    if (result == 0)
-        return false;
-    result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_COMPRESSION, static_cast<unsigned short>(1) ); // No compression
-    if (result == 0)
-        return false;
-    result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_XRESOLUTION, static_cast<float>(1.0F));
-    if (result == 0)
-        return false;
-    result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_YRESOLUTION, static_cast<float>(1.0F));
-    if (result == 0)
-        return false;
-    result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_RESOLUTIONUNIT, static_cast<unsigned short>(1)); // No units
-    if (result == 0)
-        return false;
-    result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_PLANARCONFIG, static_cast<unsigned short>(1));
-    if (result == 0)
-        return false;
-
-        // raw image data, bayer or mono
-    if ( IsMonochrome( frame_info.PixelFormat() ) || ! frame_info.UseColorInterpolation() ) 
-    {
-        // Monochrome
-        result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_BITSPERSAMPLE, BitsPerSample );
-        if (result == 0)
-            return false;
-        result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_PHOTOMETRIC, static_cast<unsigned short>(1)); // Monochrome, black=0
-        if (result == 0)
-            return false;
-    }
-    else // bayer format && color interpolation on
-    {
-        // Color
-        result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_BITSPERSAMPLE, BitsPerSample, BitsPerSample, BitsPerSample );
-        if (result == 0)
-            return false;
-        result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_SAMPLESPERPIXEL, static_cast<unsigned short>(3));
-        if (result == 0)
-            return false;
-        result = (*TiffLibrary::Get().TiffSetField)( TiffFile, IMGWRITER_PHOTOMETRIC, static_cast<unsigned short>(2)); // RGB color
-        if (result == 0)
-            return false;
-    }
-    return true;
-}
-
-// Helper function to write the data buffer to the TIFF file
-bool WriteFrameBuffer( TIFF* TiffFile, const tFrameInfo &frame_info )
-{
-    const VmbUint32_t   ImageSizePixels = frame_info.Width() * frame_info.Height();
-    VmbUint32_t         BitsPerPixelUsed;
-    GetBitsPerPixelUsed(&BitsPerPixelUsed, frame_info.PixelFormat() );
-    VmbUint32_t         BytesPerPixel   = ( BitsPerPixelUsed > 8 ) ? 2 : 1;
-    
-    // allocate the temporary buffer used to write to the file
-    try
-    {
-        QSharedPointer<unsigned char> tmpBuffer;
-
-        // copy or manipulate data into temporary buffer
-        if  (       IsMonochrome(frame_info.PixelFormat() )
-                || !frame_info.UseColorInterpolation()
-            ) // raw mono or bayer (no color interpolation)
-        {       
-            if( 8 == BitsPerPixelUsed ) // mono or raw 8 bit transfer
-            {
-                 tmpBuffer = frame_info.DataPtr();
-            }
-            else // 16 bit tranfer formats
-            {   
-                if( IsPackedFormat(frame_info.PixelFormat() ) ) // unpack mono_p raw_p
-                {
-                    tmpBuffer = QSharedPointer<unsigned char> (new unsigned char [ImageSizePixels * 2], DeleteArray<unsigned char> ); // space for mono 16
-                    if( tmpBuffer == NULL)
-                    {
-                        return false;
-                    }
-                    VmbImage            sourceImage;
-                    VmbImage            destinationImage;
-
-                    // set size member for verification inside API
-                    sourceImage.Size = sizeof ( sourceImage );
-                    destinationImage.Size = sizeof ( destinationImage );
-
-                    // attach the data buffers
-                    sourceImage.Data = (void*) frame_info.Data(); // hard cast from const
-                    destinationImage.Data = tmpBuffer.data();
-
-                    // fill image info from pixel format string
-                    VmbSetImageInfoFromPixelFormat ( frame_info.PixelFormat(), frame_info.Width(), frame_info.Height(), &sourceImage );
-
-                    // fill image info from pixel format
-                    VmbSetImageInfoFromInputImage(&sourceImage, VmbPixelLayoutMono, 16, &destinationImage);
-
-                    // perform the transformation
-                    if ( VmbErrorSuccess != VmbImageTransform ( &sourceImage , &destinationImage , 0 , 0 ) )
-                    {
-                        return false;
-                    }
-                }
-                else
-                {
-                    tmpBuffer = frame_info.DataPtr();
-                }
-                // change to msb
-                unsigned short*                 pData       = (unsigned short*)tmpBuffer.data();
-                const unsigned short*           pDataEnd    = pData + ImageSizePixels;
-                const unsigned short            bitshift    = 16 - BitsPerPixelUsed;
-
-                while (pData < pDataEnd)
-                {
-                    *(pData) <<= bitshift;
-                    ++pData;
-                }
-            }
-        }
-        else // bayer && color interpolation on
-        {
-            if( BytesPerPixel == 1 ) // bayer8
-            {
-                tmpBuffer = QSharedPointer<unsigned char>( new unsigned char[ ImageSizePixels * 3], DeleteArray<unsigned  char> ); // storage for RGB pixel
-
-                VmbImage            sourceImage, destinationImage;
-
-                sourceImage.Size = sizeof( destinationImage );
-                sourceImage.Data = (void*)frame_info.Data();
-                VmbSetImageInfoFromPixelFormat( frame_info.PixelFormat(), frame_info.Width(), frame_info.Height(), &sourceImage );
-
-                destinationImage.Size = sizeof( destinationImage );
-                destinationImage.Data = tmpBuffer.data();
-
-                VmbSetImageInfoFromInputImage(&sourceImage, VmbPixelLayoutRGB, 8, &destinationImage);
-
-                if( VmbErrorSuccess != VmbImageTransform( &sourceImage, &destinationImage, NULL, 0) )
-                {
-                    return false;
-                }
-            }
-            else
-            {
-                tmpBuffer = QSharedPointer<unsigned char>( new unsigned char[ ImageSizePixels * 3 * BytesPerPixel ], DeleteArray<unsigned char> ); // storage for RGB 16 bit
-            
-
-                VmbImage sourceImage;
-                sourceImage.Size = sizeof( sourceImage );
-                sourceImage.Data = (void*)frame_info.Data();
-                VmbSetImageInfoFromPixelFormat( frame_info.PixelFormat(), frame_info.Width(), frame_info.Height(), &sourceImage );
-
-                VmbImage destinationImage;
-                destinationImage.Size = sizeof( destinationImage );
-                destinationImage.Data = tmpBuffer.data();
-                VmbSetImageInfoFromInputImage(&sourceImage, VmbPixelLayoutRGB, 16, &destinationImage);
-                        
-                if( VmbErrorSuccess != VmbImageTransform( &sourceImage, &destinationImage, NULL, 0) )
-                {
-                    return false;
-                }
-
-                unsigned short*                 pDest = (unsigned short*)tmpBuffer.data();
-                const unsigned short* const     pDestEnd = pDest + ImageSizePixels * 3;
-                const unsigned short            bitshift = 16 - BitsPerPixelUsed;
-                while (pDest < pDestEnd)
-                {
-                    *(pDest++) <<= bitshift;
-                }
-            }
-        }
-
-        // Write data into TIFF file.
-        const VmbUint32_t   ColorsPerPixel  = ( IsMonochrome( frame_info.PixelFormat() ) || !frame_info.UseColorInterpolation() ) ? 1 : 3;
-        const VmbUint32_t   LineSize        = BytesPerPixel * frame_info.Width() * ColorsPerPixel; // in bytes
-        unsigned char* pScanLine = tmpBuffer.data();
-        for (unsigned long i = 0; i < frame_info.Height(); i++)
-        {
-            int result = (*TiffLibrary::Get().TiffWriteScanLine)( TiffFile, pScanLine, i, 0);
-            if (result == 0)
-                return false;
-
-            pScanLine += LineSize; 
-        }
-    }
-    catch (std::bad_alloc& badAlloc)
-    {
-        qDebug() << "bad_alloc caught: " << badAlloc.what() << '\n';
-        return false;
-    }
-    catch(...)
-    {
-        return false;
-    }
-
-
-    return true;
-}
-
-// Attempts to load the LibTiff library dynamically using Qt QLibrary 
-bool ImageWriter::IsAvailable( void )
-{
-    return TiffLibrary::Get().Valid();
-}
-
-// Get the error message from the last QLibrary call
-QString ImageWriter::GetLastError( void )
-{
-    return TiffLibrary::Get().GetLastError();
-}
-
-// Write the frame to the specified file 
-bool ImageWriter::WriteTiff(  const tFrameInfo & frame_info, const char* filename, ILogTarget *log)
-{
-    bool result = true;
-    // Create a new TIFF file by constructing a Tiff object
-    TIFF *TiffFile = (*TiffLibrary::Get().TiffOpen)(filename, "w");
-
-    if( NULL != TiffFile )
-    {
-        // Set the TIFF tags
-        result = WriteStandardTags(TiffFile, frame_info );
-
-        if( true == result)
-        {
-            // Write the image data 
-            result = WriteFrameBuffer(TiffFile, frame_info);
-            if( !result)
-            {
-                if( NULL != log)
-                {
-                    log->Log("error could not write frame buffer");
-                }
-            }
-        }
-        else
-        {
-            if( NULL != log)
-            {
-                log->Log("error could not write TIFF standard flags");
-            }
-        }
-        (*TiffLibrary::Get().TiffClose)(TiffFile);
-    }
-    else
-    {
-        if( NULL != log)
-        {
-            log->Log("error could not open tiff file for writing");
-        }
-        result = false;
-    }
-    return result;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ImageWriter.h b/VimbaCPP/Examples/VimbaViewer/Source/ImageWriter.h
deleted file mode 100644
index 2527e8a9c8a1efe45b21f675bdcb738c9296e52d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ImageWriter.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef IMAGEWRITER_H
-#define IMAGEWRITER_H
-
-#include "Helper.h"
-#include "ILogTarget.h"
-class ImageWriter
-{
-public:
-    bool        IsAvailable     ( void );
-    QString     GetLastError    ( void );
-    bool        WriteTiff       (  const tFrameInfo &frame, const char* filename, ILogTarget* log = NULL );
-};
-
-#endif // IMAGEWRITER_H
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/1800U.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/1800U.png
deleted file mode 100644
index b36f4d2ef30076a9e7f1ab33c22a310d3ffebd2c..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/1800U.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/ImageSeriesSaveSettings.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/ImageSeriesSaveSettings.png
deleted file mode 100644
index 254e07848c5c5b0e5bbacf753b3f142c4636e4a6..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/ImageSeriesSaveSettings.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/ImageSeriesStart.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/ImageSeriesStart.png
deleted file mode 100644
index de745e1f6a9cf69c28bd9e8d47ab9c9675fde5d7..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/ImageSeriesStart.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/VimbaViewer.icns b/VimbaCPP/Examples/VimbaViewer/Source/Images/VimbaViewer.icns
deleted file mode 100644
index 46d48fb82ea724255e441145a7885d132fb6f80b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/VimbaViewer.icns and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/actionCommand.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/actionCommand.png
deleted file mode 100644
index 7fa3dc4cbe39dc6b4c0657bb65394efe222d562a..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/actionCommand.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/bigeye.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/bigeye.png
deleted file mode 100644
index a64f0a483929fb17ef8cc10e4f40ea7ec367a34f..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/bigeye.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/cascade.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/cascade.png
deleted file mode 100644
index 20edc4207452c52eccb216d4b6b24cb9f951ab2d..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/cascade.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/close.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/close.png
deleted file mode 100644
index 6f011cbc37ac561e9a7c7fdbbf7ec616d7a9a85e..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/close.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/delete.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/delete.png
deleted file mode 100644
index b8f9244574fd9812da40c8dfbc5653356bf9830f..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/delete.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/directaccess.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/directaccess.png
deleted file mode 100644
index 5a65de391c4ccfd7356c4cecfbec139a76edddb4..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/directaccess.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/error.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/error.png
deleted file mode 100644
index db220b4fa1c6eb7f8a679042ffcfa47822ae095f..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/error.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/execute.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/execute.png
deleted file mode 100644
index a2d7a514e56ffa326565de2be6b58b23497a06c9..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/execute.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/filesaveas.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/filesaveas.png
deleted file mode 100644
index 3c22ce835a10ebe83a0bb67a7af5a34ed8cab2e3..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/filesaveas.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/fittowin.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/fittowin.png
deleted file mode 100644
index d02c023942c12429c4c6dc989b488b23fbb0a566..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/fittowin.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/forceIp.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/forceIp.png
deleted file mode 100644
index a8eb8729ccabbd681904a9d5670817628badb02a..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/forceIp.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye-g-cool.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye-g-cool.png
deleted file mode 100644
index ba9949093281388f21b1c9e899010e46b6482622..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye-g-cool.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye-g.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye-g.png
deleted file mode 100644
index 34dacbab44ee21ff4194f8f1eb35e62675796699..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye-g.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye-p.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye-p.png
deleted file mode 100644
index 6dc833a2553d18b189822ad25ab3b04c109c1dce..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye-p.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye.png
deleted file mode 100644
index 6dc833a2553d18b189822ad25ab3b04c109c1dce..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/goldeye.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/guppy-pro.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/guppy-pro.png
deleted file mode 100644
index 759febdd962cd49d42070add52a21d14251a7a3d..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/guppy-pro.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/guppy.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/guppy.png
deleted file mode 100644
index 01645b7c28ae6b0c30ea78f7547ec1dd7f850adf..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/guppy.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/histogram.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/histogram.png
deleted file mode 100644
index c9d7117d5890d3322db211ec26f1b632c42cac76..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/histogram.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/info.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/info.png
deleted file mode 100644
index 0ae1c14c7244133b611e2ba6152b9fd6d5998cd9..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/info.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/leftrotate.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/leftrotate.png
deleted file mode 100644
index 698664ba4ed7a425c39a42de875227f5fba463d1..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/leftrotate.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/loadSettings_32.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/loadSettings_32.png
deleted file mode 100644
index 5ae883a05926f0cc1519b7aee072cddcaa886c9f..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/loadSettings_32.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/loadsettings.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/loadsettings.png
deleted file mode 100644
index 5e21d839f57db253f158515ff4fb275ddd487ffe..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/loadsettings.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/lock.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/lock.png
deleted file mode 100644
index 08d6d74dfc9f677a6f3e43d66a878c45275cb9f3..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/lock.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/logger.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/logger.png
deleted file mode 100644
index b5a4082bf9919e0443a1681c6c202dd0357e3f9f..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/logger.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/logging.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/logging.png
deleted file mode 100644
index 3d09add279522cba261695ede0993696fa60c964..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/logging.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/mako.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/mako.png
deleted file mode 100644
index 3f0fd03c825084072d8af3098df7c0867c19b9eb..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/mako.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/manta-angled.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/manta-angled.png
deleted file mode 100644
index 96675baf7064c6e85542d033c2b0a76134d99773..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/manta-angled.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/manta-bl.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/manta-bl.png
deleted file mode 100644
index 2f31049d0228c47eca78bd2a2a7101a0262832af..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/manta-bl.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/manta.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/manta.png
deleted file mode 100644
index 1c81967a54955d091396288ca44edb482830627d..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/manta.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/marlin.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/marlin.png
deleted file mode 100644
index b0047d9be62cc5a5fa92563f9e6d60ae2a2c1d0c..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/marlin.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/network.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/network.png
deleted file mode 100644
index dbdeec36251fdaf1829fa96d78d3a92fb6b617a9..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/network.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/okay.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/okay.png
deleted file mode 100644
index 8f9f3783350f089846d90d590260bdc762242170..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/okay.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/open_eventviewer.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/open_eventviewer.png
deleted file mode 100644
index 2219d24f098a72e82ff79ada199489be44dbffec..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/open_eventviewer.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/option.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/option.png
deleted file mode 100644
index 79832b4b0c49a0a9a1493e7892ec7fa449197a49..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/option.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/oscar.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/oscar.png
deleted file mode 100644
index e8177a10359d6206d74c9db55c6fdf90353554b2..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/oscar.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/pdf.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/pdf.png
deleted file mode 100644
index 52b58fbfb32d52890647038e042bb1af3a4a253d..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/pdf.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/pike.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/pike.png
deleted file mode 100644
index c3d688ac7e5596bdd2727214c27adeef95aaeb1a..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/pike.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/play.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/play.png
deleted file mode 100644
index ba67dc117764420466b3ca3f60048735e494fa3b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/play.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/print.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/print.png
deleted file mode 100644
index b243c1e30560dc9f6144840d7591ee9d8036be8f..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/print.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagc.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagc.png
deleted file mode 100644
index ec21caec140f4a1e6be357d40834fbaf9a3ad62b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagc.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicage.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicage.png
deleted file mode 100644
index 1cedfb149efc7d3e1cbe5d1832b8d7c42d713fb3..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicage.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagt-large.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagt-large.png
deleted file mode 100644
index c91865b62ed3b55c7f59930d3d012df74256f23b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagt-large.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagt.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagt.png
deleted file mode 100644
index 629089d1e4f372ef8bc23a57a35104bde45cc6e0..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagt.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagx.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagx.png
deleted file mode 100644
index 723cae082023d5a49118199fc3de630a39d635e1..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/prosilicagx.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/refresh.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/refresh.png
deleted file mode 100644
index 198aba1416b6eccb2a4ba0019c841ed7cdb98618..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/refresh.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/resetposition.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/resetposition.png
deleted file mode 100644
index 44bc15b2e978134d9f30b5430a51541d19bca8ae..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/resetposition.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/rightrotate.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/rightrotate.png
deleted file mode 100644
index 65c92f1f81e7fd86beb3472a88d0764efc5557e6..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/rightrotate.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/save.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/save.png
deleted file mode 100644
index 84efd20fa8272df1e0c7ad2816bea38f1206caae..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/save.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/saveSettings_32.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/saveSettings_32.png
deleted file mode 100644
index aa51b4a1257a52b218ff1471f80a7acdaf3794d6..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/saveSettings_32.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/savemultipleimages.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/savemultipleimages.png
deleted file mode 100644
index 32edb28a5797863ee1e69b3c25f60e98656ac3e3..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/savemultipleimages.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/savesettings.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/savesettings.png
deleted file mode 100644
index aebfc055b3c51cb5f1f82737a47856c232756bb8..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/savesettings.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/setting.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/setting.png
deleted file mode 100644
index b026092809233c37b8300f0d2c6ef2a6e85de894..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/setting.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/stingray.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/stingray.png
deleted file mode 100644
index ee7ee00ba481c1608cc5333fc169e930a681a9d4..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/stingray.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/stop.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/stop.png
deleted file mode 100644
index 5aa2a27c90737a19197c9b9ae141689593f3e211..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/stop.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/stripes.ico b/VimbaCPP/Examples/VimbaViewer/Source/Images/stripes.ico
deleted file mode 100644
index f6d7b17ac025be10d2c1193c6688d613f6c12264..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/stripes.ico and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/stripes_256.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/stripes_256.png
deleted file mode 100644
index 61642b4ad7c0f625df459957d802053437705d9b..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/stripes_256.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/tile.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/tile.png
deleted file mode 100644
index 9c1ca2490c8467d6667d6fd9f5cb4ed17aa39991..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/tile.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/warning.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/warning.png
deleted file mode 100644
index c58f0facb4f30e50bafe7f2722f67d4811ee683d..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/warning.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/zoom_default.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/zoom_default.png
deleted file mode 100644
index 674665c35a08c4279340f4388f98729b7b7508f5..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/zoom_default.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/zoom_in.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/zoom_in.png
deleted file mode 100644
index 583b82d00e36950f3b14a7c67440d0102b7017bb..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/zoom_in.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Images/zoom_out.png b/VimbaCPP/Examples/VimbaViewer/Source/Images/zoom_out.png
deleted file mode 100644
index 9f0059f9b72c95a9facc688466dc15a098d9f314..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/Images/zoom_out.png and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Main.cpp b/VimbaCPP/Examples/VimbaViewer/Source/Main.cpp
deleted file mode 100644
index 4b03ec9fcdc83827fcfdc8acfc9ce21b42890a80..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/Main.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Main.cpp
-
-  Description: Main application
- 
-  Qt: http://qt.nokia.com/
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- 
-=============================================================================*/
-
-
-
-#include "MainWindow.h"
-#include <QApplication>
-#include "Version.h"
-
-
-class myApplication : public QApplication
-{
-
-public: 
-
-    myApplication(int &_argc, char *_argv[]): QApplication(_argc, _argv)
-    { 
-
-    }
-
-    bool notify(QObject *receiver_, QEvent *event_)
-    {
-        try
-        {
-            return QApplication::notify(receiver_, event_);
-        }
-        catch ( std::exception const &e )
-        {
-            QMessageBox msgBox;
-            QString sMsg = e.what();
-            msgBox.setText("<Sample Viewer> A std exception occurred: " + sMsg);
-            msgBox.exec();
-        }
-        catch (...)
-        {
-            QMessageBox msgBox;
-            msgBox.setText("An unknown exception occurred.");
-            msgBox.exec();
-        }
-
-        return false;
-    } 
-};
-
-int main(int argc, char *argv[])
-{
-    myApplication a(argc, argv);
-
-    QTranslator translator;
-    QString locale = QLocale::system().name();
-    bool bOK=true;
-    if (!translator.load(QString("VimbaViewer_") + locale))
-        bOK = translator.load(QString("VimbaViewer_") + locale.left(2));
-    if (bOK)
-        a.installTranslator(&translator);
-
-    a.setApplicationName("Vimba Viewer");
-    a.setApplicationVersion(VIMBAVIEWER_VERSION);
-    QIcon icon(":/VimbaViewer/Images/stripes_256.png");
-    a.setWindowIcon(icon);
-    MainWindow Application;
-    Application.setWindowTitle(QString("Vimba Viewer ") + QString(VIMBAVIEWER_VERSION));
-
-    Application.show();
-    return a.exec();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/MainWindow.cpp b/VimbaCPP/Examples/VimbaViewer/Source/MainWindow.cpp
deleted file mode 100644
index b4dce7e9504efafd06024f0d3f855acd16cc533c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/MainWindow.cpp
+++ /dev/null
@@ -1,1344 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        MainWindow.cpp
-
-  Description: The main window framework. This contains of camera tree, a toolbar and logging
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "MainWindow.h"
-#include "CameraObserver.h"
-#include "SplashScreen.h"
-#include <QSplitter>
-#include "Version.h"
-#include <algorithm>
-#include <QRegExp>
-
-using AVT::VmbAPI::ICameraListObserverPtr;
-using AVT::VmbAPI::InterfacePtrVector;
-using AVT::VmbAPI::StringVector;
-
-MainWindow::MainWindow ( QWidget *parent, Qt::WindowFlags flags )
-    : QMainWindow( parent, flags )
-    , m_bIsCurrentModelChecked ( false )
-    , m_Logger( NULL )
-    , m_VimbaSystem( AVT::VmbAPI::VimbaSystem::GetInstance() )
-    , m_bIsRightMouseClicked( false )
-    , m_bIsOpenByRightMouseClick( false )
-    , m_bIsAutoAdjustPacketSize ( false )
-    , m_bIsInitialized (false)
-    , m_ForceIPDialog( NULL )
-    , m_ActionCommandDialog( NULL )
-    , m_ActionCommandFlag( false )
-    , m_Lock( QMutex::Recursive )
-{
-    /* create the main window */
-    m_MainWindow.setupUi(this);
-
-    qRegisterMetaType<CameraPtr>("CameraPtr");
-
-    connect(m_MainWindow.actionAbout, SIGNAL(triggered()), this, SLOT(about()));
-    connect(m_MainWindow.actionAbout_Qt, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
-    connect(m_MainWindow.actionExit, SIGNAL(triggered()), this, SLOT(close()));
-    /* create splitter 
-    *     _______________
-    *    |       |       |
-    *    |       |       |
-    *    |       |       |
-    *    |_______|_______|
-    */
-
-    QSplitter *splitter_H = new QSplitter(Qt::Horizontal, m_MainWindow.centralWidget);    
-    splitter_H->setChildrenCollapsible(false);
-    
-    m_CameraTree = new CameraTreeWindow(splitter_H);
-    connect(m_CameraTree, SIGNAL(cameraClicked(const QString &, const bool &)), this, SLOT(onCameraClicked(const QString &, const bool &)));
-    connect(m_CameraTree, SIGNAL(rightMouseClicked(const bool &)), this, SLOT(onRightMouseClicked(const bool &)));
-
-    m_Logger = new LoggerWindow(splitter_H);
-    m_MainWindow.layout_H->addWidget(splitter_H);
-
-    /* use setting position and geometry from the last session*/
-    QSettings settings("Allied Vision Technologies", "Vimba Viewer");
-    this->restoreGeometry(settings.value("geometrymainwindow").toByteArray());
-    this->restoreState(settings.value("state").toByteArray(), 0);
-
-    /* get VmbAPI version */
-    VmbVersionInfo_t version = { 0, 0, 0 };
-    VmbErrorType error = m_VimbaSystem.QueryVersion( version );
-    m_sAPIVersion = "Vimba API Version: " + QString::number(version.major) + "." + QString::number(version.minor) + "." + QString::number(version.patch);
-    ( VmbErrorSuccess != error )    ? m_Logger->logging(tr("QueryVersion() failed, Error: ") + QString::number(error) + " " + Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR)
-                                    : m_Logger->logging(m_sAPIVersion, VimbaViewerLogCategory_INFO);
-
-    /* OpenByID */
-    m_OpenByIDDialog = new QDialog( this, windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowMaximizeButtonHint); 
-    m_OpenByID.setupUi( m_OpenByIDDialog );
-
-    /*Start Option (auto adjust packet size) */
-    m_StartOptionDialog = new QDialog(this, windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowMaximizeButtonHint);
-    m_StartOption.setupUi(m_StartOptionDialog);
-    m_MainWindow.ActionStartOptions->setEnabled(false);
-    /* read the last saved value */
-    QVariant result = settings.value("autoenable", true);
-    m_bIsAutoAdjustPacketSize = result.toBool();
-    m_StartOption.AutoAdjustPacketSize_CheckBox->setChecked(m_bIsAutoAdjustPacketSize); 
-}
-
-MainWindow::~MainWindow ( void )
-{
-    /* save setting position and geometry */
-    QSettings settings("Allied Vision Technologies", "Vimba Viewer");
-    settings.setValue("geometrymainwindow", saveGeometry());
-    settings.setValue("state", saveState(0));
-    settings.setValue("autoenable", m_bIsAutoAdjustPacketSize);
-
-    /* delete Force IP dialog*/
-    if( NULL != m_ForceIPDialog)
-    {
-        delete m_ForceIPDialog;
-    }
-
-    /* delete Action Command dialog*/
-    if( NULL != m_ActionCommandDialog )
-    {
-        delete m_ActionCommandDialog;
-    }
-
-    /* release API */
-    m_VimbaSystem.Shutdown();
-}
-
-void MainWindow::about ( void )
-{
-    QString sAbout(tr("Vimba Viewer is an example application using the Vimba C++ API.") + QString("\n\n") + tr("Version: ") + QString(VIMBAVIEWER_VERSION) + QString("\n"));
-    sAbout.append(m_sAPIVersion).append("\n\n").append(VIMBAVIEWER_COPYRIGHT_STRING);
-    QMessageBox::about(this, tr("About Vimba Viewer"), sAbout);
-}
-
-/* this will be called on destruction of main window in case at least one viewer window is open */
-void MainWindow::closeEvent ( QCloseEvent *event )
-{
-    QMutexLocker local_lock( &m_Lock );
-    if(!m_Viewer.empty())
-    {
-        QVector<ViewerWindow*>::iterator it = m_Viewer.begin();
-        while(it != m_Viewer.end())
-        {
-            delete *it;
-            *it = NULL;
-            ++it;
-        }
-        m_Viewer.clear();
-    }
-}
-
-void MainWindow::showEvent(QShowEvent *event)
-{
-    QMainWindow::showEvent(event);
-
-    if (!m_bIsInitialized)
-    {
-        QTreeWidgetItem* itemRoot = new QTreeWidgetItem(m_CameraTree);
-        m_CameraTree->setText(itemRoot, "Please wait...");
-        m_CameraTree->setEnabled(false);
-                
-        QTimer::singleShot(50, this, SLOT(onInitializeVimba()));        /* This slot will be called AFTER the main window is shown. This is needed, since the enumeration of CL cameras might take a while and it should not prevent the main window from being initially drawn */
-    }
-}
-
-void MainWindow::onInitializeVimba()
-{
-    VmbErrorType error = m_VimbaSystem.Startup();
-    if(VmbErrorSuccess != error)
-    {
-        m_Logger->logging(tr("Startup failed, Error: ")+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR);
-        return;
-    }
-
-    // get VimbaC feature to check if GigE TL is present
-    AVT::VmbAPI::FeaturePtr gevFeature;
-    error = m_VimbaSystem.GetFeatureByName( "GeVTLIsPresent", gevFeature );
-    if( VmbErrorSuccess == error )
-    {
-        // check if GigE TL is present
-        bool gevTLisPresent = false;
-        error = gevFeature->GetValue( gevTLisPresent );
-        if( (VmbErrorSuccess == error) && (true == gevTLisPresent) )
-        {
-            m_ForceIPDialog = new ForceIPDialog( m_VimbaSystem );
-            m_ActionCommandDialog = new ActionCommandDialog( m_VimbaSystem );
-            m_ActionCommandFlag = true;
-        }
-    }
-
-    /*    register the camera observer to get notification when camera list has been updated, e.g:
-    *     - plug / unplug camera(s)
-    *     - bus reset occurs 
-    */
-
-    try
-    {
-        CameraPtrVector tmpCameras;
-        error = m_VimbaSystem.GetCameras( tmpCameras );
-        if( VmbErrorSuccess == error )
-        {
-            searchCameras( tmpCameras );
-            QtCameraObserverPtr pDeviceObs( new CameraObserver() );
-            error = m_VimbaSystem.RegisterCameraListObserver(pDeviceObs);
-            if(VmbErrorSuccess == error)
-            {
-                connect(pDeviceObs.get(), SIGNAL(updateDeviceList( )), this, SLOT(onUpdateDeviceList()));
-            }
-            else
-            {
-                m_Logger->logging(tr("RegisterCameraListObserver Failed, Error: ")+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR); 
-            }
-        }
-        else
-        {
-            m_Logger->logging(tr("could not get camera list, Error: ")+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR); 
-        }
-       // m_CameraTree->expandAll();
-    }
-    catch(const std::exception &e)
-    {
-        m_Logger->logging("MainWindow <constructor> Exception: "+QString::fromStdString(e.what()), VimbaViewerLogCategory_ERROR); 
-    }
-
-    m_CameraTree->setEnabled(true);
-    m_bIsInitialized = true;
-}
-
-void CheckOpen(QVector<QTreeWidgetItem*> &items, const QString &CameraID)
-{
-    for(int pos = 0; pos < items.size(); pos++)
-    {
-        if( items[pos]->text(0) == CameraID )
-        {
-            items[pos]->setCheckState(0, Qt::Checked);
-            return;
-        }
-    }
-}
-
-void MainWindow::onUpdateDeviceList ( void )
-{
-    /*
-    QPixmap pixmap( ":/VimbaViewer/Images/refresh.png" );
-    SplashScreen splashScreen(pixmap, this, Qt::SplashScreen);
-    int nW = ((this->width()/2) - splashScreen.width()/2);
-    int nH = ((this->height()/2) - splashScreen.height()/2);
-    splashScreen.setGeometry(nW,nH, splashScreen.width(),splashScreen.height());
-    splashScreen.show();
-    splashScreen.showMessage("Please wait..." , Qt::AlignHCenter | Qt::AlignVCenter, Qt::red);
-    */
-    CameraPtrVector     currentListedCameras;
-    
-    QMutexLocker        local_lock( &m_Lock );
-
-    VmbErrorType        error = m_VimbaSystem.GetCameras(currentListedCameras);
-    CameraInfoVector    remainingCameras;
-    if(VmbErrorSuccess == error)
-    {
-        /* disconnect */
-        /* find out what camera is not available */
-        CameraPtrVector DisconnectedCameras;
-        for (unsigned int i = 0; i < m_CameraInfos.size(); i++)
-        {
-            if( currentListedCameras.end() == std::find_if( currentListedCameras.begin(), currentListedCameras.end(), CameraPtrCompare( m_CameraInfos[i].Cam() ) ) )
-            {
-                DisconnectedCameras.push_back( m_CameraInfos[i].Cam() );
-            }
-            else
-            {
-                remainingCameras.push_back( m_CameraInfos[i] );
-            }
-        }
-        for( size_t pos = 0; pos < DisconnectedCameras.size(); ++pos)
-        {
-            closeViewer (  DisconnectedCameras[pos] );
-        }
-        m_CameraInfos = remainingCameras;
-    }
-    else
-    {
-        m_Logger->logging(tr("GetCameras Failed, Error: ")+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR); 
-    }
-
-    searchCameras(currentListedCameras);
-
-    /* update tree */
-    for(int i = 0; i<m_Viewer.size(); i++)
-    {
-        CheckOpen( m_GigE, m_Viewer[i]->getCameraID() );
-        CheckOpen( m_1394, m_Viewer[i]->getCameraID() );
-        CheckOpen( m_USB, m_Viewer[i]->getCameraID() );
-        CheckOpen( m_CL, m_Viewer[i]->getCameraID() );
-        CheckOpen( m_CSI2, m_Viewer[i]->getCameraID() );
-    }
-}
-
-void MainWindow::searchCameras ( const CameraPtrVector &Cameras )
-{
-    /* If update device list callback triggered: Recopy before clearing. If the viewer is already open, use the access list from CopyMap,
-       this will avoid the change of menu access entry  info.
-       Access information the viewer got when camera is opened will be kept.*/
-    rightMouseMenu.close();
-
-    m_CameraTree->clear();
-    
-    QTreeWidgetItem *itemGigERoot   = NULL;
-    QTreeWidgetItem *item1394Root   = NULL;
-    QTreeWidgetItem *itemUSBRoot    = NULL;
-    QTreeWidgetItem *itemCLRoot     = NULL;
-    QTreeWidgetItem *itemCSI2Root   = NULL;
-
-    m_GigE.clear();
-    m_1394.clear();
-    m_USB.clear();
-    m_CL.clear();
-    m_CSI2.clear();
-
-    QMap <QString, QString>     ifTypeMap;
-    InterfacePtrVector          ifPtrVec;
-    std::string                 sInterfaceID;
-    VmbErrorType                error;
-
-    /* list all interfaces found by VmbAPI */
-    error = m_VimbaSystem.GetInterfaces(ifPtrVec);
-    
-    if(VmbErrorSuccess != error)
-    {
-        m_Logger->logging(tr("GetInterfaces Failed, Error: ")+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR); 
-        return;
-    }
-
-    /* check type of Interfaces */
-    for(unsigned int i=0; i<ifPtrVec.size(); i++)
-    {
-        error = ifPtrVec.at(i)->GetID(sInterfaceID);
-        if(VmbErrorSuccess != error)
-        {
-            m_Logger->logging("GetID <Interface "+ QString::number(i)+" Failed, Error: "+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR); 
-            continue;
-        }
-        
-        VmbInterfaceType    ifType          = VmbInterfaceUnknown;
-        VmbErrorType        errorGetType    = ifPtrVec.at(i)->GetType(ifType) ;
-        if(VmbErrorSuccess != errorGetType)
-        {
-            m_Logger->logging("GetType <Interface "+ QString::number(i)+" Failed, Error: "+QString::number(errorGetType)+" "+ Helper::mapReturnCodeToString(errorGetType), VimbaViewerLogCategory_ERROR); 
-            continue;
-        }
-
-        switch(ifType)
-        {
-        case VmbInterfaceEthernet:
-            ifTypeMap[QString::fromStdString(sInterfaceID)] = "GigE";
-            if(NULL == itemGigERoot)
-            {
-                itemGigERoot = new QTreeWidgetItem(m_CameraTree);
-                m_CameraTree->setText(itemGigERoot, "GigE");
-                m_MainWindow.ActionStartOptions->setEnabled(true);
-            }
-            break;
-
-        case VmbInterfaceFirewire:
-            ifTypeMap[QString::fromStdString(sInterfaceID)] = "1394";
-            if(NULL == item1394Root)
-            {
-                item1394Root = new QTreeWidgetItem(m_CameraTree);
-                m_CameraTree->setText(item1394Root, "1394");
-            }
-            break;
-
-        case VmbInterfaceUsb:
-            ifTypeMap[QString::fromStdString(sInterfaceID)] = "USB";
-            if(NULL == itemUSBRoot)
-            {
-                itemUSBRoot = new QTreeWidgetItem(m_CameraTree);
-                m_CameraTree->setText(itemUSBRoot, "USB");
-            }
-            break;
-
-        case VmbInterfaceCL:
-            ifTypeMap[QString::fromStdString(sInterfaceID)] = "CL";
-            if(NULL == itemCLRoot)
-            {
-                itemCLRoot = new QTreeWidgetItem(m_CameraTree);
-                m_CameraTree->setText(itemCLRoot, "CL");
-            }
-            break;
-        case VmbInterfaceCSI2:
-            ifTypeMap[QString::fromStdString(sInterfaceID)] = "CSI-2";
-            if(NULL == itemCSI2Root)
-            {
-                itemCSI2Root = new QTreeWidgetItem(m_CameraTree);
-                m_CameraTree->setText(itemCSI2Root, "CSI-2");
-            }
-            break;
-        default: break;
-        }
-    } /* for */
-
-    /* sort the cameras */
-        
-    if( ! Cameras.empty())
-        m_CameraTree->setCursor(Qt::PointingHandCursor);
-    else
-        m_CameraTree->setCursor(Qt::ArrowCursor);
-
-    for(unsigned int i=0; i<Cameras.size(); i++)
-    {
-        CameraInfoVector::iterator currentCamera = std::find( m_CameraInfos.begin(), m_CameraInfos.end(), Cameras[i] );
-
-        std::string displayName;
-        error = getCameraDisplayName( Cameras[i], displayName );
-        QString displayNameQt = QString::fromStdString(displayName);
-
-        if(VmbErrorSuccess != error)
-        {
-            m_Logger->logging("GetDisplayName error for camera "+ QString::number(i)+"Error: "+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR); 
-            continue;
-        }
-        if( currentCamera == m_CameraInfos.end() )
-        {
-            currentCamera = m_CameraInfos.insert(m_CameraInfos.end(), CameraInfo( Cameras[i], displayNameQt ) );
-        }
-        else if(currentCamera->DisplayName() != displayNameQt)
-        {
-            *currentCamera = CameraInfo( Cameras[i], displayNameQt );
-        }
-
-        QString     sAccess;
-        QStringList sListPermittedAccess;
-        QStringList sListPermittedAccessState;
-
-
-        /* camera is open, so keep the information */
-        if(currentCamera->IsOpen() )
-        {
-            /* keep the last information */
-            sListPermittedAccess      = currentCamera->PermittedAccess();
-            sListPermittedAccessState = currentCamera->PermittedAccessState();
-                        
-            if(sListPermittedAccess.contains(tr("Open FULL ACCESS")) && sListPermittedAccess.contains(tr("Open READ ONLY")))
-            {
-                sAccess = "FULL ACCESS";
-            }
-            else if(sListPermittedAccess.contains(tr("Open READ ONLY")))
-            {
-                sAccess = "READ ONLY";
-            }
-        }
-        else /* camera is not open, so get the current supported access */ 
-        {
-            /* check access */
-            VmbAccessModeType accessType = VmbAccessModeFull;
-            if( VmbErrorSuccess == currentCamera->Cam()->GetPermittedAccess( accessType ))
-            {
-                if( accessType & VmbAccessModeFull)
-                {
-                    sAccess = "FULL ACCESS";
-                    switch( currentCamera->InterfaceType() )
-                    {
-                        case VmbInterfaceEthernet:
-                        {
-                            sListPermittedAccess      << tr("Open FULL ACCESS") << tr("Open READ ONLY") << tr("Open CONFIG");
-                            sListPermittedAccessState << "false"            << "false"          << "false";
-                            break;
-                        }
-                        case VmbInterfaceFirewire:
-                        {
-                            sListPermittedAccess      << tr("Open FULL ACCESS") << tr("Open READ ONLY") ;
-                            sListPermittedAccessState << "false"            << "false"          ;
-                            break;
-                        }
-                        case VmbInterfaceUsb:
-                        {
-                            sListPermittedAccess      << tr("Open FULL ACCESS") << tr("Open READ ONLY") ;
-                            sListPermittedAccessState << "false"            << "false"          ;
-                            break;
-                        }
-                        case VmbInterfaceCL:
-                        case VmbInterfaceCSI2:
-                        {
-                            sListPermittedAccess      << tr("Open FULL ACCESS");
-                            sListPermittedAccessState << "false";
-                            break;
-                        }
-                    }
-                }
-                else if( accessType & VmbAccessModeRead)
-                {
-                    sAccess = "READ ONLY";
-                    switch( currentCamera->InterfaceType() )
-                    {
-                        case VmbInterfaceEthernet:
-                        {
-                            //sListPermittedAccess      << "Open READ ONLY" << "Open CONFIG";
-                            sListPermittedAccess      << tr("Open READ ONLY");
-                            sListPermittedAccessState << "false"          ;//<< "false";
-                            break;
-                        }
-                        case VmbInterfaceFirewire:
-                        {
-                            sListPermittedAccess      << tr("Open READ ONLY") ;
-                            sListPermittedAccessState << "false"          ;
-                            break;
-                        }
-                        case VmbInterfaceUsb:
-                        {
-                            sListPermittedAccess      << tr("Open READ ONLY") ;
-                            sListPermittedAccessState << "false"          ;
-                            break;
-                        }
-                    }
-                }
-                else if( accessType & VmbAccessModeConfig)
-                {
-                    sAccess = "DEVICE CONFIGURATION";
-                    if( currentCamera->InterfaceType() == VmbInterfaceEthernet )
-                    {
-                        sListPermittedAccess << tr("Open CONFIG") ;
-                        sListPermittedAccessState << "false"  ;
-                    }
-                }
-                else if( accessType & VmbAccessModeLite)
-                {
-                    sAccess = "RW WITH NO FEATURE ACCESS";
-                    sListPermittedAccess << tr("Open LITE");
-                    sListPermittedAccessState << "false";
-                }
-                else
-                {
-                    sAccess = "NO ACCESS";
-                }
-            }
-            currentCamera->PermittedAccess( sListPermittedAccess );
-            currentCamera->PermittedAccessState( sListPermittedAccessState );
-        }
-
-        switch( currentCamera->InterfaceType() )
-        {
-            case VmbInterfaceEthernet:
-            {
-                QTreeWidgetItem *itemIF_GigE_ID = m_CameraTree->createItem(itemGigERoot, true);
-                itemIF_GigE_ID->setText(0, currentCamera->DisplayName() );
-                itemIF_GigE_ID->setIcon(0, QIcon(":/VimbaViewer/Images/stripes_256.png"));
-                if( sAccess == "READ ONLY" || sAccess== "NO ACCESS" )
-                {
-                    itemIF_GigE_ID->setBackgroundColor(0, Qt::black);
-                    itemIF_GigE_ID->setForeground(0, Qt::white);
-                    itemIF_GigE_ID->setIcon(0, QIcon(":/VimbaViewer/Images/lock.png"));
-                    if(sAccess =="NO ACCESS")
-                    {
-                        itemIF_GigE_ID->setDisabled(true);
-                    }
-                }
-                if(currentCamera->IsOpen() )
-                {
-                    itemIF_GigE_ID->setCheckState(0, Qt::Checked);
-                }
-
-                m_GigE.append(itemIF_GigE_ID);
-                break;
-            }
-                    
-            case VmbInterfaceFirewire:
-            {
-                QTreeWidgetItem *itemIF_1394_ID = m_CameraTree->createItem(item1394Root, true);
-                itemIF_1394_ID->setText(0, currentCamera->DisplayName() );
-                itemIF_1394_ID->setIcon(0, QIcon(":/VimbaViewer/Images/stripes_256.png"));
-                if( sAccess == "READ ONLY" || sAccess == "NO ACCESS" )
-                {
-                    itemIF_1394_ID->setBackgroundColor(0, Qt::black);
-                    itemIF_1394_ID->setForeground(0, Qt::white);
-                    itemIF_1394_ID->setIcon(0, QIcon(":/VimbaViewer/Images/lock.png"));
-                    if(sAccess == "NO ACCESS")
-                    {
-                        itemIF_1394_ID->setDisabled(true);
-                    }
-                }
-                if(currentCamera->IsOpen())
-                {
-                    itemIF_1394_ID->setCheckState(0, Qt::Checked);
-                }
-                        
-                m_1394.append(itemIF_1394_ID);
-                break;
-            }
-                    
-            case VmbInterfaceUsb:
-            {
-                QTreeWidgetItem *itemIF_USB_ID = m_CameraTree->createItem(itemUSBRoot, true);
-                itemIF_USB_ID->setText(0, currentCamera->DisplayName() );
-                itemIF_USB_ID->setIcon(0, QIcon(":/VimbaViewer/Images/stripes_256.png"));
-                if( sAccess == "READ ONLY" || sAccess == "NO ACCESS")
-                {
-                    itemIF_USB_ID->setBackgroundColor(0, Qt::black);
-                    itemIF_USB_ID->setForeground(0, Qt::white);
-                    itemIF_USB_ID->setIcon(0, QIcon(":/VimbaViewer/Images/lock.png"));
-                    if(sAccess == "NO ACCESS")
-                    {
-                        itemIF_USB_ID->setDisabled(true);
-                    }
-                }
-                if(currentCamera->IsOpen() )
-                {
-                    itemIF_USB_ID->setCheckState(0, Qt::Checked);
-                }
-
-                m_USB.append(itemIF_USB_ID);
-                break;
-            }
-
-            case VmbInterfaceCL:
-            {
-                QTreeWidgetItem *itemIF_CL_ID = m_CameraTree->createItem(itemCLRoot, true);
-                itemIF_CL_ID->setText(0, currentCamera->DisplayName() );
-                itemIF_CL_ID->setIcon(0, QIcon(":/VimbaViewer/Images/stripes_256.png"));
-                if(! currentCamera->IsOpen())
-                {
-                    if( 0 == sAccess.compare("READ ONLY") || 0 == sAccess.compare("NO ACCESS"))
-                    {
-                        itemIF_CL_ID->setBackgroundColor(0, Qt::black);
-                        itemIF_CL_ID->setForeground(0, Qt::white);
-                        itemIF_CL_ID->setIcon(0, QIcon(":/VimbaViewer/Images/lock.png"));
-                        if(0 == sAccess.compare("NO ACCESS"))
-                            itemIF_CL_ID->setDisabled(true);
-                    }
-                }
-
-                m_CL.append(itemIF_CL_ID);
-                break;
-            }
-            case VmbInterfaceCSI2:
-            {
-                QTreeWidgetItem *itemIF_CSI2_ID = m_CameraTree->createItem(itemCSI2Root, true);
-                itemIF_CSI2_ID->setText(0, currentCamera->DisplayName() );
-                itemIF_CSI2_ID->setIcon(0, QIcon(":/VimbaViewer/Images/stripes_256.png"));
-                if(! currentCamera->IsOpen())
-                {
-                    if( 0 == sAccess.compare("READ ONLY") || 0 == sAccess.compare("NO ACCESS"))
-                    {
-                        itemIF_CSI2_ID->setBackgroundColor(0, Qt::black);
-                        itemIF_CSI2_ID->setForeground(0, Qt::white);
-                        itemIF_CSI2_ID->setIcon(0, QIcon(":/VimbaViewer/Images/lock.png"));
-                        if(0 == sAccess.compare("NO ACCESS"))
-                            itemIF_CSI2_ID->setDisabled(true);
-                    }
-                }
-
-                m_CSI2.append(itemIF_CSI2_ID);
-                break;
-            }
-        }
-    }
-
-    m_CameraTree->expandAll();
-}
-
-void MainWindow::onRightMouseClicked ( const bool &bIsClicked )
-{
-    m_bIsRightMouseClicked = bIsClicked;
-}
-
-void MainWindow::rightMouseOpenCamera ( bool bOpenAccesState )
-{
-    QString             sStatus;
-    QObject *           sender          = QObject::sender();
-    QString             sSenderName     = sender->objectName();
-    m_sOpenAccessType = sSenderName;
-
-    QMutexLocker local_lock( &m_Lock );
-
-    CameraInfoVector::iterator selectedCamera = std::find_if( m_CameraInfos.begin(), m_CameraInfos.end(), FindByName( m_SelectedCamera ));
-    if( selectedCamera == m_CameraInfos.end() )
-    {
-        m_Logger->logging("MainWindow <onCameraClicked> could not find camera: " + m_SelectedCamera, VimbaViewerLogCategory_ERROR);
-        return;
-    }
-
-    QStringList         sAccessList     = selectedCamera->PermittedAccessState();
-    unsigned int        nPosition       = getAccessListPosition(sSenderName);
-    QString             sCurrentState   = sAccessList[nPosition];
-    bool                bCurrentState   = false;
-
-    if(sCurrentState == "false" )
-        bCurrentState = false;
-
-    if(sCurrentState == "true" )
-        bCurrentState = true;
-
-    if(bOpenAccesState == bCurrentState)
-    {
-        return;
-    }
-    else
-    {
-        if(bCurrentState)
-        {
-            m_CameraTree->setCheckCurrentItem(false);
-            sStatus = "false";
-        }
-        else
-        {
-            m_CameraTree->setCheckCurrentItem(true);
-            sStatus = "true";
-        }
-    }
-
-    selectedCamera->SetPermittedAccessState(nPosition, sStatus);
-    m_bIsOpenByRightMouseClick = true;
-    onCameraClicked( selectedCamera->DisplayName(), m_bIsCurrentModelChecked);
-}
-
-
-/* get the best access */
-QString  MainWindow::getBestAccess ( const CameraInfo &info )
-{
-    QString sBestAccess;
-    QStringList sBestList = info.PermittedAccess();
-    
-    if(0 != sBestList.size())
-        sBestAccess = sBestList[0];
-
-    return sBestAccess;
-}
-/* get the string position of the access in the list */
-unsigned int  MainWindow::getAccessListPosition ( const QString &sAccessName )
-{
-    CameraInfoVector::iterator selectedCamera = std::find_if( m_CameraInfos.begin(), m_CameraInfos.end(), FindByName( m_SelectedCamera ));
-    if( selectedCamera == m_CameraInfos.end() )
-    {
-        m_Logger->logging("MainWindow <onCameraClicked> could not find camera: " + m_SelectedCamera, VimbaViewerLogCategory_ERROR); 
-        throw std::runtime_error("there should be a valid camera");
-    }
-
-    QStringList sPermittedAccess = selectedCamera->PermittedAccess();
-
-    unsigned int nPosition = 0;
-    for (int i = 0; i < sPermittedAccess.size(); i++)
-    {
-        if( sPermittedAccess[i] == sAccessName )
-        {
-            nPosition = i;
-            break;
-        }
-    }
-    return nPosition;
-}
-
-void MainWindow::onCameraClicked ( const QString &sModel, const bool &bIsChecked )
-{
-    CameraInfo selectedCamera;
-    m_CameraTree->setEnabled(false);
-
-    QMutexLocker local_lock( &m_Lock );
-
-    m_SelectedCamera = sModel;
-    m_bIsCurrentModelChecked = bIsChecked;
-    CameraInfoVector::iterator find_pos = std::find_if( m_CameraInfos.begin(), m_CameraInfos.end(), FindByName( sModel ));
-    if( find_pos == m_CameraInfos.end() )
-    {
-        if(!m_CameraTree->isEnabled())
-            m_CameraTree->setEnabled(true);
-        m_Logger->logging("MainWindow <onCameraClicked> could not find camera: " + sModel, VimbaViewerLogCategory_ERROR);
-        return;
-    }
-    selectedCamera = *find_pos;
-    if( m_bIsRightMouseClicked)
-    {
-        m_bIsRightMouseClicked = false;
-        /* show permitted access */
-        if( !m_RightMouseAction.isEmpty())
-        {
-            for (int nPos = 0; nPos < m_RightMouseAction.size(); nPos++)
-            {
-                delete m_RightMouseAction.at(nPos);
-            }
-
-            m_RightMouseAction.clear();
-        }
-        
-        QStringList sPermittedAccess = selectedCamera.PermittedAccess();
-
-        for (int i = 0; i < sPermittedAccess.size(); i++)
-        {
-            m_RightMouseAction.push_back(new QAction(this));
-            m_RightMouseAction.last()->setObjectName(sPermittedAccess.at(i));
-            m_RightMouseAction.last()->setCheckable(true);
-            m_RightMouseAction.last()->setText(sPermittedAccess.at(i));
-    
-            connect(m_RightMouseAction.last(), SIGNAL(toggled(bool)), this, SLOT(rightMouseOpenCamera(bool)) );
-            rightMouseMenu.addAction(m_RightMouseAction.last());
-        }
-
-        bool bIsOneOfThemChecked = false;
-        QStringList PermittedAccessState = selectedCamera.PermittedAccessState();
-        for(int i = 0; i < PermittedAccessState.size(); i++)
-        {
-            if(PermittedAccessState[i] == "true" )
-            {
-                m_RightMouseAction[i]->setChecked(true);
-                bIsOneOfThemChecked = true;
-            }
-            else if(PermittedAccessState[i] == "false" )
-            {
-                m_RightMouseAction.at(i)->setChecked(false);
-            }
-        }
-
-        /* disabling other menus entries if one of already selected */
-        if(bIsOneOfThemChecked)
-        {
-            for(int i = 0; i < PermittedAccessState.size(); i++)
-            {
-                if(PermittedAccessState[i] == "true" )
-                {
-                    m_RightMouseAction[i]->setEnabled(false);
-                }    
-            }
-        }
-
-
-        rightMouseMenu.exec(QCursor::pos());
-    }
-    else
-    {
-        try
-        {
-            if ( bIsChecked )
-            {
-                openViewer(selectedCamera);
-            }
-            else
-            {
-                closeViewer( selectedCamera.Cam() );
-            }
-        }
-        catch(const std::exception &e)
-        {
-            m_Logger->logging("MainWindow <onCameraClicked> Exception: "+QString::fromStdString(e.what()), VimbaViewerLogCategory_ERROR); 
-        }
-    }
-
-    if(!m_CameraTree->isEnabled())
-        m_CameraTree->setEnabled(true);
-    
-}
-/*locked by on camera clicked*/
-void MainWindow::openViewer ( CameraInfo &info )
-{
-    try
-    {
-        if( ! info.IsOpen() )
-        {  
-            /* if it's not triggered from right mouse click menu, open with best case */
-            if(!m_bIsOpenByRightMouseClick )
-                m_sOpenAccessType = getBestAccess(info);
-                
-            //keep in mind what viewer is open
-
-            m_Viewer.append(new ViewerWindow(this,0, info.DisplayName(), m_sOpenAccessType, m_bIsAutoAdjustPacketSize, info.Cam() ));
-
-            if(!connect(m_Viewer.back(), SIGNAL(closeViewer (CameraPtr) ), this, SLOT(onCloseFromViewer(CameraPtr) )))
-                m_Logger->logging("MainWindow: Failed connecting SIGNAL (<CameraTreeWindow>closeViewer) to SLOT(<MainWindow>onCloseFromViewer)", VimbaViewerLogCategory_ERROR);
-
-            QString sBestAccess = getBestAccess(info);
-
-            if(m_Viewer.back()->getCamOpenStatus())
-            {
-                m_Logger->logging(tr("Opening The Viewer:")+"\t"+ info.DisplayName(), VimbaViewerLogCategory_INFO);
-                info.SetOpen( true );
-                /*Use best case in case open camera directly with no  right mouse click */
-                if(!m_bIsOpenByRightMouseClick )
-                {
-                    info.SetPermittedAccessState(0, "true");
-                }
-
-                QString sAdjustMsg;
-                if(m_Viewer.back()->getAdjustPacketSizeMessage (sAdjustMsg))
-                {
-                    sAdjustMsg.contains("Failed", Qt::CaseInsensitive) ? m_Logger->logging(sAdjustMsg + info.DisplayName(), VimbaViewerLogCategory_INFO) : m_Logger->logging(sAdjustMsg + info.DisplayName(), VimbaViewerLogCategory_OK); 
-                }
-            }
-            else
-            {
-                info.SetOpen( false );
-                if( VmbErrorInvalidAccess == m_Viewer.back()->getOpenError() )
-                {
-                    m_Logger->logging(tr("Opening The Viewer:")+"\t"+ 
-                                        info.DisplayName() + 
-                                        " failed! <Cannot open the camera because it is already under control by another application>", VimbaViewerLogCategory_WARNING);
-                }
-                else
-                {
-                    m_Logger->logging(tr("Opening The Viewer:")+"\t" + 
-                                        info.DisplayName() + 
-                                        " failed! - Error: " +
-                                        QString::number(m_Viewer.back()->getOpenError()) +
-                                        Helper::mapReturnCodeToString(m_Viewer.back()->getOpenError()), VimbaViewerLogCategory_WARNING); 
-                }
-
-                onCloseFromViewer ( info.Cam() );
-                info.ResetPermittedAccessState();
-
-                if (m_sOpenAccessType.isEmpty())
-                {
-                    if(!m_Viewer.empty())
-                    {
-                        ViewerWindow* tmpWin = m_Viewer.last();
-                        m_Viewer.pop_back();
-                        delete tmpWin;
-
-                    }
-                }
-            }
-        }
-        else
-        {
-            m_Logger->logging(  tr( "Opening The Viewer:" ) + "\t"+ 
-                                info.DisplayName() + 
-                                " failed! <Cannot open the same camera twice>", VimbaViewerLogCategory_WARNING);
-        }
-    }
-    catch(const std::exception &e)
-    {
-        m_Logger->logging("MainWindow <openViewer> Exception: " + QString::fromStdString(e.what()), VimbaViewerLogCategory_ERROR); 
-    }
-
-    if(m_bIsOpenByRightMouseClick )
-        m_bIsOpenByRightMouseClick = false;
-}
-
-struct FindWindowByID
-{
-private:
-    const QString& m_ID;
-public:
-    FindWindowByID( const QString& id)
-        : m_ID( id )
-    {}
-    bool operator () ( ViewerWindow *v) const
-    {
-        return m_ID == v->getCameraID();
-    }
-};
-struct FindWindowByCameraPtr
-{
-private:
-    CameraPtr m_Cam;
-public:
-    FindWindowByCameraPtr( CameraPtr cam)
-        : m_Cam( cam )
-    {}
-    bool operator () ( ViewerWindow *v) const
-    {
-        return v->isControlledCamera( m_Cam);
-    }
-};
-
-void MainWindow::closeViewer (CameraPtr cam )
-{
-    /* copy ID for logging because sCamID will be deleted (ref) when m_Viewer destroyed */
-
-    CameraInfoVector::iterator findPos = std::find( m_CameraInfos.begin(), m_CameraInfos.end(), cam );
-    if( m_CameraInfos.end() != findPos )
-    {
-        findPos->SetOpen(false);
-    }
-
-    QVector<ViewerWindow*>::iterator findWindowPos = std::find_if( m_Viewer.begin(),m_Viewer.end(), FindWindowByCameraPtr( cam ));
-    if( m_Viewer.end() != findWindowPos)
-    {
-        delete *findWindowPos;
-        *findWindowPos = NULL;
-        m_Viewer.erase(findWindowPos);
-        m_Logger->logging(tr("Closing The Viewer:") + "\t" + findPos->DisplayName(), VimbaViewerLogCategory_INFO); 
-        findPos->ResetPermittedAccessState(); /* reset all */ 
-    }
-    if(!m_CameraTree->isEnabled())
-    {
-        m_CameraTree->setDisabled(false);
-    }
-}
-
-void MainWindow::onCloseFromViewer ( CameraPtr cam )
-{
-    m_CameraTree->setEnabled(false);
-    QMutexLocker            local_lock( &m_Lock );
-
-    /* iterate the tree and find the position of the string, if found uncheck the checkbox */
-    CameraInfoVector::const_iterator findPos = std::find( m_CameraInfos.begin(), m_CameraInfos.end(), cam );
-    if( findPos == m_CameraInfos.end() )
-    {
-        m_Logger->logging(tr("closing camera that is not in list") , VimbaViewerLogCategory_ERROR); 
-        return;
-    }
-    QTreeWidgetItemIterator it( m_CameraTree );
-    while( *it  )
-    {
-        if( (*it)->text(0) == findPos->DisplayName() )
-        {
-            if( Qt::Checked == (*it)->checkState(false) )
-            {
-                (*it)->setSelected(true);
-                (*it)->setCheckState(0, Qt::Unchecked); 
-                break;
-            }    
-        }
-        ++it;
-    }
-    closeViewer( cam );
-    m_CameraTree->setEnabled(true);
-}
-
-void MainWindow::on_ActionDiscover_triggered ( void )
-{
-    m_CameraTree->setEnabled(false);
-    QMutexLocker local_lock( &m_Lock );
-    QVector<CameraPtr> tmpCameras;
-    {
-        for (int i=0; i < m_Viewer.size(); i++)
-        {
-            if(m_Viewer[i]->getCamOpenStatus())
-            {
-                tmpCameras.push_back( m_Viewer[i]->getCameraPtr() );
-            }
-        }
-    }
-    for( int i = 0; i < tmpCameras.size(); ++i)
-    {
-        closeViewer( tmpCameras[i] );
-    }
-    onUpdateDeviceList();
-    m_CameraTree->setEnabled(true);
-}
-
-void MainWindow::on_ActionClear_triggered ( void )
-{
-    if(0 != m_Logger->count())
-        m_Logger->clear();
-}
-
-class IsEqualCamera
-{
-private:
-    CameraPtr m_pCam;
-public:
-    IsEqualCamera() {}
-    IsEqualCamera( CameraPtr pCam ) : m_pCam( pCam ) {}
-    bool operator() ( const CameraPtr pCam )
-    {
-        return SP_ISEQUAL( m_pCam, pCam );
-    }
-};
-
-void MainWindow::on_ActionOpenByID_triggered ( void )
-{
-    if ( QDialog::Accepted == m_OpenByIDDialog->exec() )
-    {
-        CameraPtr pCam;
-        VmbErrorType error = m_VimbaSystem.GetCameraByID( m_OpenByID.LineEdit_ID->text().toStdString().c_str(), pCam );
-
-        if ( VmbErrorSuccess == error )
-        {
-            QMutexLocker local_lock( &m_Lock );
-            CameraInfoVector::iterator findPos = std::find( m_CameraInfos.begin(), m_CameraInfos.end(), pCam );
-            if ( findPos == m_CameraInfos.end())
-            {
-                std::string sDisplayName;
-                error = getCameraDisplayName( pCam, sDisplayName );
-                if ( VmbErrorSuccess == error )
-                {
-                    m_CameraInfos.push_back( CameraInfo(pCam, QString::fromStdString( sDisplayName) ) );
-                    findPos = m_CameraInfos.end();
-                    --findPos;
-                }
-                else
-                {
-                    m_Logger->logging(tr("Could not build camera display name, Error: ")+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR); 
-                    return ;
-                }
-            }
-
-            m_bIsOpenByRightMouseClick = true;
-            m_sOpenAccessType = m_OpenByID.ComboBox_Access->currentText();
-            VmbAccessModeType modes;
-            error = pCam->GetPermittedAccess( modes );
-            if ( VmbErrorSuccess == error )
-            {
-                QStringList tmpPermittedAccess;
-                if ( VmbAccessModeFull == (VmbAccessModeFull & modes) )
-                {
-                    tmpPermittedAccess << tr("Open FULL ACCESS");
-                }
-                if ( VmbAccessModeRead == (VmbAccessModeRead & modes) )
-                {
-                    tmpPermittedAccess << tr("Open READ ONLY");
-                }
-                if ( VmbAccessModeConfig == (VmbAccessModeConfig & modes) )
-                {
-                    tmpPermittedAccess << tr("Open CONFIG");
-                }
-                findPos->PermittedAccess(tmpPermittedAccess);
-                openViewer( *findPos );
-            }
-        }
-
-        if ( VmbErrorSuccess != error )
-        {
-            QMessageBox MsgBox;
-            MsgBox.setText( "The device could not be found" );
-            MsgBox.exec();
-        }
-    }
-}
-
-void MainWindow::on_ActionForceIP_triggered ( void )
-{
-    bool check = true;
-
-    if( NULL != m_ForceIPDialog )
-    {
-        if( m_ForceIPDialog->GetInitializedFlag() )
-        {
-            m_ForceIPDialog->ResetDialog();
-        }
-        else
-        {
-            check = m_ForceIPDialog->InitializeDialog();
-        }
-
-        if( true == check )
-        {
-            m_ForceIPDialog->RunDialog();
-        }
-    }
-
-}
-
-void MainWindow::on_ActionCommand_triggered ( void )
-{
-    if(true == m_ActionCommandFlag)
-    {
-        m_ActionCommandDialog->RunDialog();
-    }
-    else
-    {
-        m_Logger->logging(tr("Loading Action Command dialog failed. GigE TL could not be found"), VimbaViewerLogCategory_ERROR);
-    }
-}
-
-void MainWindow::on_ActionStartOptions_triggered ( void )
-{
-    if( QDialog::Accepted == m_StartOptionDialog->exec() )
-    {
-        m_bIsAutoAdjustPacketSize = m_StartOption.AutoAdjustPacketSize_CheckBox->isChecked();
-    }
-    else
-    {
-        m_StartOption.AutoAdjustPacketSize_CheckBox->setChecked(m_bIsAutoAdjustPacketSize);
-    }
-}
-
-VmbErrorType MainWindow::getCameraDisplayName( const CameraPtr &camera, std::string &sDisplayName )
-{
-    VmbErrorType  error;
-    std::string sID;
-    std::string sSN;
-    
-    error = camera->GetModel(sDisplayName);
-    if(VmbErrorSuccess != error)
-    {
-        m_Logger->logging(tr("GetModel Failed, Error: ")+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR); 
-        return error;
-    }
-    else
-    {
-        error = camera->GetSerialNumber(sSN);
-        if(VmbErrorSuccess != error)
-        {
-            m_Logger->logging(tr("GetSerialNumber Failed, Error: ")+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR); 
-            return error;
-        }
-        else
-        {
-            error = camera->GetID(sID);
-            if(VmbErrorSuccess != error)
-            {
-                m_Logger->logging(tr("GetID Failed, Error: ")+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR); 
-                return error;
-            }
-            else
-            {  
-                std::string sDisplayNameEnding;
-
-                sDisplayNameEnding.append("-");
-                sDisplayNameEnding.append(sSN);
-
-                if ( 0!=sSN.compare(sID) )
-                {                            
-                    sDisplayNameEnding.append("(");
-                    sDisplayNameEnding.append(sID);
-                    sDisplayNameEnding.append(")");
-                }
-
-                std::string sLegacyDisplayName = sDisplayName + sDisplayNameEnding;
-
-                VmbInterfaceType cameraIFType;
-                error = camera->GetInterfaceType(cameraIFType);  
-
-                if(VmbErrorSuccess != error)
-                {
-                    m_Logger->logging(tr("GetInterfaceType Failed, Error: ")+QString::number(error)+" "+ Helper::mapReturnCodeToString(error), VimbaViewerLogCategory_ERROR); 
-                    return error;
-                }
-                
-                // camera interface type is GigE. update display name with IP address 
-                if ( VmbInterfaceEthernet == cameraIFType )
-                {                     
-                    // lookup the IP address of the camera         
-                    QString sIPAddress;                    
-                    error = getIPAddress(camera, sIPAddress);
-
-                    // replace the model ID with the IP address
-                    if( VmbErrorSuccess == error && !sIPAddress.isEmpty() )
-                    {                    
-                        QString sTempDisplayName = QString::fromStdString(sDisplayName);
-                        QRegExp regExp("\\(([^)]+)\\)");
-
-                        // to account for cameras without model name in parenthesis
-                        if( -1 == regExp.indexIn(sTempDisplayName) )
-                        {
-                            sDisplayName.append(sIPAddress.toStdString());
-                        }
-                        else
-                        {
-                            sTempDisplayName.replace(regExp, sIPAddress);
-                            sDisplayName = sTempDisplayName.toStdString();
-                        }
-
-                        sDisplayName.append(sDisplayNameEnding);
-                    }
-                }
-                // other camera interface types use legacy naming convention
-                else
-                {
-                    sDisplayName = sLegacyDisplayName;
-                }       
-            }
-        }
-    }
-    return error;
-}
-
-VmbErrorType MainWindow::getIPAddress( const AVT::VmbAPI::CameraPtr &camera, QString &sIPAdress)
-{
-    VmbErrorType error;    
-    std::string sCameraID,      sInterfaceID, sDeviceID;
-    AVT::VmbAPI::InterfacePtr   pInterface;    
-    AVT::VmbAPI::FeaturePtr     pSelectorFeature, pSelectedDeviceID, pSelectedIPAddress;
-    VmbInt64_t                  nMinRange, nMaxRange, nIP;
-    VmbInt32_t                  nIP_32;
-
-    // get the camera ID
-    error = camera->GetID( sCameraID );
-    if( VmbErrorSuccess == error )
-    {
-        // get the interface ID
-        error = camera->GetInterfaceID( sInterfaceID );
-        if( VmbErrorSuccess == error )
-        {
-            // get a pointer to the interface
-            error = m_VimbaSystem.GetInterfaceByID( sInterfaceID.c_str(), pInterface );
-            if( VmbErrorSuccess == error )
-            {
-                // open the interface 
-                error = pInterface->Open();
-                if( VmbErrorSuccess == error )
-                {
-                    // get the device selector
-                    error = pInterface->GetFeatureByName( "DeviceSelector", pSelectorFeature );
-                    if( VmbErrorSuccess == error )
-                    {
-                        // get the range of the available devices 
-                        error = pSelectorFeature->GetRange( nMinRange, nMaxRange );
-                        
-                        // check for negative range in case requested feature contains no items
-                        if( VmbErrorSuccess == error && nMaxRange >= 0 )
-                        {
-                            // get the device ID pointer
-                            error = pInterface->GetFeatureByName( "DeviceID", pSelectedDeviceID );
-                            if( VmbErrorSuccess == error )
-                            {
-                                // get IP addresses of all cameras connected to interface
-                                error = pInterface->GetFeatureByName( "GevDeviceIPAddress", pSelectedIPAddress );
-                                if( VmbErrorSuccess == error )
-                                {
-                                    // find the IP address of the desired camera 
-                                    for( VmbInt64_t intNo = nMinRange; intNo <= nMaxRange; ++intNo )
-                                    {
-                                        error = pSelectorFeature->SetValue( intNo );
-                                        if( VmbErrorSuccess == error )
-                                        {
-                                            error = pSelectedDeviceID->GetValue( sDeviceID );
-                                            if( VmbErrorSuccess == error )
-                                            {
-                                                if( 0 == sDeviceID.compare( sCameraID ) )
-                                                {
-                                                    error = pSelectedIPAddress->GetValue(nIP);
-                                                    if( VmbErrorSuccess == error )
-                                                    {
-                                                        nIP_32 = static_cast<VmbInt32_t>(nIP);
-
-                                                        // format IP address string
-                                                        sIPAdress = QString("(%1)").arg( Helper::IPv4ToString( nIP_32 ) );
-
-                                                        // close the interface
-                                                        error = pInterface->Close();
-                                                        break;
-                                                    } 
-                                                }
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                        else
-                        {
-                            sIPAdress.clear();
-                            error = VmbErrorNotFound;
-                        }
-
-                    }
-                }
-            }
-        }
-    }                
-        
-    return error;
-}
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/MainWindow.h b/VimbaCPP/Examples/VimbaViewer/Source/MainWindow.h
deleted file mode 100644
index 84e833c6d437070d9a892d2b2b445ecd0fa85f85..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/MainWindow.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        MainWindow.h
-
-  Description: The main window framework. This contains of camera tree, a toolbar and logging
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef MAINWINDOW_H
-#define MAINWINDOW_H
-
-#include "ui_MainWindow.h"
-#include "ui_StartOption.h"
-#include "ui_OpenByID.h"
-#include <QSettings>
-
-#include "UI/LoggerWindow.h"
-#include "UI/CameraTreeWindow.h"
-#include "ViewerWindow.h"
-#include "ForceIP.h"
-#include "ActionCommand.h"
-#include <QtCore/QSharedPointer>
-#include <QMutex>
-#include <QMutexLocker>
-
-#include <VimbaCPP/Include/VimbaSystem.h>
-
-using AVT::VmbAPI::VimbaSystem;
-using AVT::VmbAPI::CameraPtrVector;
-
-class MainWindow : public QMainWindow
-{
-    Q_OBJECT
-
-    public: 
-                
-    protected:
-                      
-    private:
-                QMutex                          m_Lock;
-                Ui::mainWindow                  m_MainWindow;
-                LoggerWindow*                   m_Logger;
-                CameraTreeWindow*               m_CameraTree;
-                QVector <ViewerWindow*>         m_Viewer;
-                QVector<QTreeWidgetItem*>       m_GigE;
-                QVector<QTreeWidgetItem*>       m_1394;
-                QVector<QTreeWidgetItem*>       m_USB;
-                QVector<QTreeWidgetItem*>       m_CL;
-                QVector<QTreeWidgetItem*>       m_CSI2;
-
-                class CameraInfo
-                {
-                private:
-                    CameraPtr       m_Cam;
-                    QString         m_DisplayName;
-                    bool            m_IsOpen;
-                    QStringList     m_PermittedAccess;
-                    QStringList     m_PermittedAccessState;
-                public:
-                    CameraInfo()
-                        : m_IsOpen( false )
-                    {
-                    }
-                    explicit CameraInfo(CameraPtr cam, const QString & name)
-                        : m_Cam( cam )
-                        , m_DisplayName( name )
-                        , m_IsOpen( false )
-                    {
-                    }
-                    const CameraPtr &   Cam()                                       const   { return m_Cam; }
-                    CameraPtr &         Cam()                                               { return m_Cam; }
-                    const QString&      DisplayName()                               const   { return m_DisplayName; }
-                    bool                IsOpen()                                    const   { return m_IsOpen; }
-                    void                SetOpen(bool s)                                     { m_IsOpen = s; }
-                    const QStringList&  PermittedAccess()                           const   { return m_PermittedAccess; }
-                    void                PermittedAccess( const QStringList &l)              { m_PermittedAccess = l; }
-                    const QStringList&  PermittedAccessState()                      const   { return m_PermittedAccessState; }
-                    void                PermittedAccessState(const QStringList &l)          { m_PermittedAccessState = l; }
-                    void SetPermittedAccessState(unsigned int pos, QString status)
-                    {
-                        m_PermittedAccessState[pos] = status;
-                    }
-                    void ResetPermittedAccessState()
-                    {
-                        for( int pos = 0; pos < m_PermittedAccessState.size(); ++ pos )
-                        {
-                            m_PermittedAccessState[pos] = "false";
-                        }
-                    }
-
-
-                    bool operator==( const CameraPtr &other)                        const   { return SP_ACCESS(other) == SP_ACCESS( m_Cam); }
-                    bool operator<( const CameraPtr &other)                         const   { return SP_ACCESS(other) < SP_ACCESS( m_Cam); }
-                    VmbInterfaceType InterfaceType() const
-                    {
-                        VmbInterfaceType interfaceType;
-                        VmbErrorType result = SP_ACCESS( m_Cam )->GetInterfaceType( interfaceType );
-                        if( result != VmbErrorSuccess )
-                        {
-                            throw std::runtime_error("could not read interface type from camera");
-                        }
-                        return interfaceType;
-                    }
-                    QString InterfaceTypeString() const
-                    {
-                        VmbInterfaceType interfaceType;
-                        VmbErrorType result = SP_ACCESS( m_Cam )->GetInterfaceType( interfaceType );
-                        if( result != VmbErrorSuccess )
-                        {
-                            throw std::runtime_error("could not read interface type from camera");
-                        }
-                        switch( interfaceType )
-                        {
-                            case VmbInterfaceEthernet:
-                                return "GigE";
-                            case VmbInterfaceFirewire:
-                                return "1394";
-                            case VmbInterfaceUsb:
-                                return "USB";
-                            case VmbInterfaceCL:
-                                return "CL";
-                            case VmbInterfaceCSI2:
-                                return "CSI2";
-                        }
-                    }
-                };
-                class FindByName
-                {
-                    const QString m_Name;
-                public:
-                    FindByName( const QString &s)
-                        : m_Name( s )
-                    {}
-                    bool operator()( const CameraInfo &i) const
-                    {
-                        return i.DisplayName() == m_Name;
-                    }
-                };
-                class CameraPtrCompare
-                {
-                    const CameraPtr m_Camera;
-                public:
-                    CameraPtrCompare( const CameraPtr& cam)
-                        : m_Camera( cam )
-                    {}
-                    bool operator() ( const CameraPtr& other) const
-                    {
-                        return m_Camera.get() == other.get();
-                    }
-                };
-                typedef QVector<CameraInfo>     CameraInfoVector;
-                
-                CameraInfoVector                m_CameraInfos;
-
-                QString                         m_sOpenAccessType;
-                QList <QAction *>               m_RightMouseAction;
-
-                VimbaSystem&                    m_VimbaSystem;
-                QString                         m_sAPIVersion;
-                bool                            m_bIsRightMouseClicked;
-                
-                QString                         m_SelectedCamera;
-                bool                            m_bIsCurrentModelChecked;
-                bool                            m_bIsOpenByRightMouseClick;
-                bool                            m_bIsInitialized;
-
-                /*Start Option (auto adjust packet size) */
-                Ui::StartOptionsDialog          m_StartOption;
-                QDialog*                        m_StartOptionDialog;
-                bool                            m_bIsAutoAdjustPacketSize;
-
-                /* Open camera by ID*/
-                Ui::OpenByIDDialog              m_OpenByID;
-                QDialog*                        m_OpenByIDDialog;
-
-                ForceIPDialog*                  m_ForceIPDialog;
-
-                ActionCommandDialog*            m_ActionCommandDialog;
-                bool                            m_ActionCommandFlag;
-
-                QMenu rightMouseMenu;
-
-    public:
-                 MainWindow ( QWidget *parent = 0, Qt::WindowFlags flags = 0 );
-                ~MainWindow ( void );
-
-    protected:
-                                
-    private:
-                void searchCameras                  ( const CameraPtrVector &Cameras );
-                void openViewer                     ( CameraInfo &info );
-                void closeViewer                    ( CameraPtr cam );
-                QString getBestAccess               ( const CameraInfo &info );
-                unsigned int getAccessListPosition  ( const QString &sAccessName );
-                VmbErrorType getCameraDisplayName   ( const CameraPtr &camera, std::string &sDisplayName );
-                VmbErrorType getIPAddress           ( const AVT::VmbAPI::CameraPtr &camera, QString &sIPAdress);
-
-                virtual void closeEvent             ( QCloseEvent *event );
-                virtual void showEvent              ( QShowEvent *event );
-
-    private slots:
-                /* when you use this std convention, you don't need any "connect..." */
-                void on_ActionDiscover_triggered    ( void ); 
-                void on_ActionClear_triggered       ( void );
-                void on_ActionOpenByID_triggered    ( void );
-                void on_ActionForceIP_triggered     ( void );
-                void on_ActionCommand_triggered     ( void );
-                void on_ActionStartOptions_triggered( void );
-                
-                /* Custom */
-                void onCameraClicked                ( const QString &sModel, const bool &bIsChecked);
-                void onRightMouseClicked            ( const bool &bIsClicked );
-                void onCloseFromViewer              ( CameraPtr cam );
-                void onUpdateDeviceList             ( void );
-                void about                          ( void );
-                void rightMouseOpenCamera           ( bool bOpenAccesState );
-                void onInitializeVimba();
-
-};
-
-#endif 
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/MainWindow.ui b/VimbaCPP/Examples/VimbaViewer/Source/MainWindow.ui
deleted file mode 100644
index 84fdb8c77780a11f546cd53b6e3dbdc1da232b16..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/MainWindow.ui
+++ /dev/null
@@ -1,223 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <author>JTE</author>
- <class>mainWindow</class>
- <widget class="QMainWindow" name="mainWindow">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>700</width>
-    <height>416</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>700</width>
-    <height>350</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>16777215</width>
-    <height>16777215</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Vimba Viewer</string>
-  </property>
-  <property name="windowIcon">
-   <iconset resource="VimbaViewer.qrc">
-    <normaloff>:/VimbaViewer/Images/stripes_256.png</normaloff>:/VimbaViewer/Images/stripes_256.png</iconset>
-  </property>
-  <property name="iconSize">
-   <size>
-    <width>24</width>
-    <height>24</height>
-   </size>
-  </property>
-  <widget class="QWidget" name="centralWidget">
-   <layout class="QHBoxLayout" name="horizontalLayout_2">
-    <item>
-     <layout class="QHBoxLayout" name="layout_H">
-      <property name="leftMargin">
-       <number>11</number>
-      </property>
-      <property name="topMargin">
-       <number>11</number>
-      </property>
-      <property name="rightMargin">
-       <number>11</number>
-      </property>
-      <property name="bottomMargin">
-       <number>11</number>
-      </property>
-     </layout>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QMenuBar" name="menuBar">
-   <property name="geometry">
-    <rect>
-     <x>0</x>
-     <y>0</y>
-     <width>700</width>
-     <height>31</height>
-    </rect>
-   </property>
-   <widget class="QMenu" name="menuAction">
-    <property name="title">
-     <string>Action</string>
-    </property>
-    <addaction name="ActionOpenByID"/>
-    <addaction name="ActionForceIP"/>
-    <addaction name="ActionCommand"/>
-    <addaction name="ActionDiscover"/>
-    <addaction name="ActionClear"/>
-    <addaction name="separator"/>
-    <addaction name="actionExit"/>
-   </widget>
-   <widget class="QMenu" name="menuHelp">
-    <property name="title">
-     <string>Help</string>
-    </property>
-    <addaction name="actionAbout"/>
-    <addaction name="actionAbout_Qt"/>
-   </widget>
-   <widget class="QMenu" name="menuSettings">
-    <property name="title">
-     <string>Settings</string>
-    </property>
-    <addaction name="ActionStartOptions"/>
-   </widget>
-   <addaction name="menuAction"/>
-   <addaction name="menuSettings"/>
-   <addaction name="menuHelp"/>
-  </widget>
-  <widget class="QToolBar" name="mainToolBar">
-   <property name="windowTitle">
-    <string>MainWindow ToolBar</string>
-   </property>
-   <property name="styleSheet">
-    <string notr="true"/>
-   </property>
-   <attribute name="toolBarArea">
-    <enum>LeftToolBarArea</enum>
-   </attribute>
-   <attribute name="toolBarBreak">
-    <bool>false</bool>
-   </attribute>
-   <addaction name="ActionOpenByID"/>
-   <addaction name="ActionForceIP"/>
-   <addaction name="ActionCommand"/>
-   <addaction name="ActionDiscover"/>
-   <addaction name="ActionClear"/>
-  </widget>
-  <action name="ActionDiscover">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/refresh.png</normaloff>:/VimbaViewer/Images/refresh.png</iconset>
-   </property>
-   <property name="text">
-    <string>Refresh</string>
-   </property>
-   <property name="toolTip">
-    <string>Refresh camera tree</string>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl+R</string>
-   </property>
-  </action>
-  <action name="ActionClear">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/delete.png</normaloff>:/VimbaViewer/Images/delete.png</iconset>
-   </property>
-   <property name="text">
-    <string>Clear Logger</string>
-   </property>
-   <property name="toolTip">
-    <string>Clear log window</string>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl+C</string>
-   </property>
-  </action>
-  <action name="actionAbout">
-   <property name="text">
-    <string>About</string>
-   </property>
-  </action>
-  <action name="actionAbout_Qt">
-   <property name="text">
-    <string>About Qt</string>
-   </property>
-  </action>
-  <action name="ActionStartOptions">
-   <property name="text">
-    <string>Start Options...</string>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl+S</string>
-   </property>
-  </action>
-  <action name="actionExit">
-   <property name="text">
-    <string>Exit</string>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl+F4</string>
-   </property>
-  </action>
-  <action name="ActionOpenByID">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/goldeye-g.png</normaloff>:/VimbaViewer/Images/goldeye-g.png</iconset>
-   </property>
-   <property name="text">
-    <string>Open Camera by IP</string>
-   </property>
-   <property name="toolTip">
-    <string>Open a camera that was not discovered</string>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl+O</string>
-   </property>
-  </action>
-  <action name="ActionForceIP">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/forceIp.png</normaloff>:/VimbaViewer/Images/forceIp.png</iconset>
-   </property>
-   <property name="text">
-    <string>Force IP</string>
-   </property>
-   <property name="toolTip">
-    <string>Force specific IP address to camera with given MAC address</string>
-   </property>
-  </action>
-  <action name="ActionCommand">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/actionCommand.png</normaloff>:/VimbaViewer/Images/actionCommand.png</iconset>
-   </property>
-   <property name="text">
-    <string>Action Command Broadcast</string>
-   </property>
-   <property name="toolTip">
-    <string>Trigger over Ethernet - Action Commands</string>
-   </property>
-  </action>
- </widget>
- <layoutdefault spacing="6" margin="11"/>
- <resources>
-  <include location="VimbaViewer.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/OpenByID.ui b/VimbaCPP/Examples/VimbaViewer/Source/OpenByID.ui
deleted file mode 100644
index 883c0637fd9be5d927526c3afd67cb15f47687d6..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/OpenByID.ui
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>OpenByIDDialog</class>
- <widget class="QDialog" name="OpenByIDDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>300</width>
-    <height>96</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>296</width>
-    <height>87</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>300</width>
-    <height>96</height>
-   </size>
-  </property>
-  <property name="contextMenuPolicy">
-   <enum>Qt::NoContextMenu</enum>
-  </property>
-  <property name="windowTitle">
-   <string>Open camera by IP</string>
-  </property>
-  <property name="windowIcon">
-   <iconset resource="VimbaViewer.qrc">
-    <normaloff>:/VimbaViewer/Images/stripes_256.png</normaloff>:/VimbaViewer/Images/stripes_256.png</iconset>
-  </property>
-  <property name="modal">
-   <bool>false</bool>
-  </property>
-  <widget class="QWidget" name="layoutWidget">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>10</y>
-     <width>281</width>
-     <height>82</height>
-    </rect>
-   </property>
-   <layout class="QGridLayout" name="gridLayout">
-    <item row="0" column="0">
-     <widget class="QLabel" name="label">
-      <property name="text">
-       <string>IP address:</string>
-      </property>
-     </widget>
-    </item>
-    <item row="0" column="1">
-     <widget class="QLabel" name="label_2">
-      <property name="text">
-       <string>Access:</string>
-      </property>
-     </widget>
-    </item>
-    <item row="1" column="0">
-     <widget class="QLineEdit" name="LineEdit_ID">
-      <property name="toolTip">
-       <string>Enter the ID of the camera as shown by Vimba, the IP or 12 digit MAC address</string>
-      </property>
-     </widget>
-    </item>
-    <item row="1" column="1">
-     <widget class="QComboBox" name="ComboBox_Access">
-      <property name="minimumSize">
-       <size>
-        <width>72</width>
-        <height>0</height>
-       </size>
-      </property>
-      <property name="maximumSize">
-       <size>
-        <width>99999</width>
-        <height>16777215</height>
-       </size>
-      </property>
-      <property name="toolTip">
-       <string>Select the access mode the camera shall be opened in. Only GigE cameras can be opened in Config Mode.</string>
-      </property>
-      <item>
-       <property name="text">
-        <string>Open FULL ACCESS</string>
-       </property>
-      </item>
-      <item>
-       <property name="text">
-        <string>Open READ ONLY</string>
-       </property>
-      </item>
-      <item>
-       <property name="text">
-        <string>Open CONFIG</string>
-       </property>
-      </item>
-     </widget>
-    </item>
-    <item row="2" column="0" colspan="2">
-     <widget class="QDialogButtonBox" name="buttonBox">
-      <property name="orientation">
-       <enum>Qt::Horizontal</enum>
-      </property>
-      <property name="standardButtons">
-       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-      </property>
-     </widget>
-    </item>
-   </layout>
-  </widget>
- </widget>
- <resources>
-  <include location="VimbaViewer.qrc"/>
- </resources>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>OpenByIDDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>OpenByIDDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/SaveImageOption.ui b/VimbaCPP/Examples/VimbaViewer/Source/SaveImageOption.ui
deleted file mode 100644
index d0fbfca4ae756309b398af112e19308657f0caef..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/SaveImageOption.ui
+++ /dev/null
@@ -1,174 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>SavingOptionsDialog</class>
- <widget class="QDialog" name="SavingOptionsDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>600</width>
-    <height>258</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>600</width>
-    <height>258</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>600</width>
-    <height>258</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Saving Options</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0">
-      <widget class="QGroupBox" name="SaveImageFileNameGroup">
-       <property name="title">
-        <string>File options:</string>
-       </property>
-       <layout class="QVBoxLayout" name="verticalLayout_2">
-        <item>
-         <layout class="QGridLayout" name="gridLayout_2">
-          <item row="1" column="0">
-           <widget class="QLabel" name="ImageName">
-            <property name="text">
-             <string>Name:</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="2">
-           <widget class="QLineEdit" name="ImageName_Edit">
-            <property name="text">
-             <string>VimbaImage</string>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="0">
-           <widget class="QPushButton" name="ImageDestinationButton">
-            <property name="text">
-             <string>Destination Path...</string>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="2">
-           <widget class="QLineEdit" name="ImageDestination_Edit">
-            <property name="text">
-             <string/>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="0">
-           <widget class="QLabel" name="ImageFormat">
-            <property name="text">
-             <string>Format:</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="2">
-           <widget class="QComboBox" name="ImageFormat_ComboBox"/>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <widget class="QGroupBox" name="groupBox_2">
-       <property name="title">
-        <string>Processing options:</string>
-       </property>
-       <layout class="QVBoxLayout" name="verticalLayout_3">
-        <item>
-         <layout class="QGridLayout" name="gridLayout_3">
-          <item row="0" column="0">
-           <widget class="QLabel" name="NumberOfImages">
-            <property name="text">
-             <string>Number Of Images   </string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <widget class="QSpinBox" name="NumberOfFrames_SpinBox">
-            <property name="maximum">
-             <number>1000000</number>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="2">
-           <spacer name="horizontalSpacer">
-            <property name="orientation">
-             <enum>Qt::Horizontal</enum>
-            </property>
-            <property name="sizeHint" stdset="0">
-             <size>
-              <width>40</width>
-              <height>20</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="locale">
-      <locale language="C" country="AnyCountry"/>
-     </property>
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>SavingOptionsDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>SavingOptionsDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/SavingProgress.ui b/VimbaCPP/Examples/VimbaViewer/Source/SavingProgress.ui
deleted file mode 100644
index a0e64ba82b8477954c581ce93a2dd740fcf42090..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/SavingProgress.ui
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>SaveImagesProgressDialog</class>
- <widget class="QDialog" name="SaveImagesProgressDialog">
-  <property name="windowModality">
-   <enum>Qt::ApplicationModal</enum>
-  </property>
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>420</width>
-    <height>45</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>420</width>
-    <height>41</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>420</width>
-    <height>48</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Saving Progress</string>
-  </property>
-  <property name="modal">
-   <bool>true</bool>
-  </property>
-  <layout class="QHBoxLayout" name="horizontalLayout_2">
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <item>
-      <widget class="QProgressBar" name="saveImagesProgress">
-       <property name="value">
-        <number>24</number>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/SplashScreen.cpp b/VimbaCPP/Examples/VimbaViewer/Source/SplashScreen.cpp
deleted file mode 100644
index 7ddf99e6552a11fa944e91cc300e0c1f2a811f1f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/SplashScreen.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        SplashScreen.cpp
-
-  Description: Splash window that will be used when camera list has been changed or when camera open
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include <QPainter>
-#include "SplashScreen.h"
-#include <QStyle>
-
-SplashScreen::SplashScreen ( const QPixmap& thePixmap, QWidget *parent, Qt::WindowFlags f )
- : QFrame ( parent, Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint ), m_Pixmap ( thePixmap )
-{
-    setAttribute(Qt::WA_TranslucentBackground);
-    setFixedSize(m_Pixmap.size());
-};
-  
-void SplashScreen::clearMessage ( void )
-{
-    m_sMessage.clear();
-    repaint();
-}
- 
-void SplashScreen::showMessage ( const QString& theMessage, int theAlignment/* = Qt::AlignLeft*/, const QColor& theColor/* = Qt::black*/ )
-{
-    m_sMessage   = theMessage;
-    m_nAlignment = theAlignment;
-    m_Color         = theColor;
-    repaint();
-}
- 
-void SplashScreen::paintEvent ( QPaintEvent* event )
-{
-    QRect aTextRect(rect());
-    aTextRect.setRect(aTextRect.x() + 5, aTextRect.y() + 5, aTextRect.width() - 10, aTextRect.height() - 10);
-
-    QPainter aPainter(this);
-
-    QFont splashFont;
-    splashFont.setFamily( "Verdana" );
-    splashFont.setBold( true );
-    splashFont.setPixelSize( 14 );
-    aPainter.setFont(splashFont);
-
-    aPainter.drawPixmap(rect(), m_Pixmap);
-    
-    aPainter.setPen(m_Color);
-    aPainter.drawText(aTextRect, m_nAlignment, m_sMessage);
-}
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/SplashScreen.h b/VimbaCPP/Examples/VimbaViewer/Source/SplashScreen.h
deleted file mode 100644
index b7134b418970041e8419aa54ffedca9cff340bac..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/SplashScreen.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        SplashScreen.h
-
-  Description: Splash window that will be used when camera list has been changed or when camera open
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef SPLASHSCREEN_H
-#define SPLASHSCREEN_H
- 
-#include <QFrame>
- 
-class SplashScreen : public QFrame
-{
-public:
-        SplashScreen ( const QPixmap& pixmap, QWidget *parent = 0, Qt::WindowFlags f= Qt::SplashScreen );
-        ~SplashScreen ( void ){};
-
-        void clearMessage       ( void );
-        void showMessage        ( const QString& theMessage, int theAlignment = Qt::AlignLeft, const QColor& theColor = Qt::black );
- 
-private:
-        virtual void paintEvent ( QPaintEvent* event );
- 
-        int         m_nAlignment;
-        QPixmap     m_Pixmap;
-        QString     m_sMessage;
-        QColor      m_Color;
-};
- 
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/StartOption.ui b/VimbaCPP/Examples/VimbaViewer/Source/StartOption.ui
deleted file mode 100644
index 020401c07f0b8981fcc91bc75f293e13331f23b0..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/StartOption.ui
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>StartOptionsDialog</class>
- <widget class="QDialog" name="StartOptionsDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>274</width>
-    <height>117</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>250</width>
-    <height>100</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>290</width>
-    <height>128</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Start Options</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
-   <item>
-    <layout class="QVBoxLayout" name="verticalLayout">
-     <item>
-      <widget class="QGroupBox" name="groupBox">
-       <property name="title">
-        <string>GigE: </string>
-       </property>
-       <widget class="QCheckBox" name="AutoAdjustPacketSize_CheckBox">
-        <property name="geometry">
-         <rect>
-          <x>10</x>
-          <y>30</y>
-          <width>231</width>
-          <height>21</height>
-         </rect>
-        </property>
-        <property name="text">
-         <string>Auto Adjust Packet Size</string>
-        </property>
-       </widget>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>StartOptionsDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>StartOptionsDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/CameraTreeWindow.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/CameraTreeWindow.cpp
deleted file mode 100644
index 9e8d4b97e1beee0b0e781c2509b0c3772e0cc674..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/CameraTreeWindow.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraTreeWindow.cpp
-
-  Description:  This is the main window of the Vimba Viewer that lists 
-                all connected cameras. 
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "CameraTreeWindow.h"
-#include <QHeaderView>
-#include <QMenu>
-
-CameraTreeWindow::CameraTreeWindow ( QWidget *parent ): QTreeWidget ( parent ), m_bIsChecked(true), m_bIsCheckboxClicked(false), m_bIsRightMouseClicked(false)
-{
-    this->setHeaderLabel(tr("Detected Cameras"));
-    /* you need these three lines to show a H-scrollbar */
-    header()->setHorizontalScrollMode( QAbstractItemView::ScrollPerPixel );
-    header()->setResizeMode( 0, QHeaderView::ResizeToContents );
-    header()->setStretchLastSection( false );
-    connect(this, SIGNAL( itemClicked(QTreeWidgetItem *, int) ), this, SLOT( clickOnCamera(QTreeWidgetItem *, int)));    
-}
-
-CameraTreeWindow::~CameraTreeWindow ( void )
-{
-
-}
-
-QTreeWidgetItem *CameraTreeWindow::createItem ( void )
-{
-    QTreeWidgetItem *item = new QTreeWidgetItem(this);
-    return item;
-}
-
-QTreeWidgetItem *CameraTreeWindow::createItem ( QTreeWidgetItem *itemRef, const bool &bIsCheckable )
-{
-    QTreeWidgetItem *item = new QTreeWidgetItem(itemRef);
-
-    if(bIsCheckable)
-    {
-        item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
-        item->setCheckState( 0, Qt::Unchecked ); 
-        item->setWhatsThis(0, "camera");
-    }
-
-    return item;
-}
-
-void CameraTreeWindow::setText ( QTreeWidgetItem *itemRef, const QString &text )
-{
-    itemRef->setText(0, text);
-}
-
-void CameraTreeWindow::setCheckCurrentItem ( const bool &bIsChecked )
-{
-    if(bIsChecked)
-        m_CurrentItem->setCheckState(0, Qt::Checked);
-    else
-        m_CurrentItem->setCheckState(0, Qt::Unchecked);
-}
-
-void CameraTreeWindow::clickOnCamera ( QTreeWidgetItem *Item, int Column )
-{
-    if(!this->isEnabled())
-        return;
-
-    m_CurrentItem = Item;
-
-    Qt::CheckState state = Item->checkState(0);
-    if(0 == Item->whatsThis(0).compare("camera"))
-    {
-        if(m_bIsCheckboxClicked)
-        {
-            this->setDisabled(true);
-            (Qt::Checked == state) ? emit cameraClicked(Item->text(0), true) : emit cameraClicked(Item->text(0), false);
-        }
-        else
-        {   
-            if(Qt::Checked == state)
-            {
-                if(!m_bIsRightMouseClicked)
-                    Item->setCheckState(0, Qt::Unchecked);
-                
-                emit cameraClicked(Item->text(0), false);
-            }
-            else
-            {
-                if(!m_bIsRightMouseClicked)
-                    Item->setCheckState(0, Qt::Checked);
-                
-                emit cameraClicked(Item->text(0), true);
-            }    
-        }
-    }
-}    
-
-/* check where the click is going on 
- * By overwriting the mousePressEvent the slot clickOnCamera will be called afterwards 
-*/
-void CameraTreeWindow::mousePressEvent ( QMouseEvent *event )
-{
-    m_bIsCheckboxClicked = false;
-    QModelIndex clickedIndex = indexAt(event->pos());
-    /* make sure the event was on a valid item */
-    if (clickedIndex.isValid() == false)
-        return;
-
-    Qt::MouseButton mouseBtn = event->button();
-    if( Qt::RightButton == mouseBtn )
-    {
-        m_bIsRightMouseClicked = true;
-        emit rightMouseClicked (true);
-    }
-    else
-    {
-        m_bIsRightMouseClicked = false;
-        emit rightMouseClicked (false);
-    }
-
-    /* Get the tree widget's x position */
-    int treeX = header()->sectionViewportPosition(0);
-
-    /* Get the x coordinate of the root item. It is required in order to calculate
-       the identation of the item */
-    int rootX = visualRect(rootIndex()).x();
-
-    /* Get the rectangle of the viewport occupied by the pressed item */
-    QRect vrect = visualRect(clickedIndex);
-
-    /* Now we can easily calculate the x coordinate of the item */
-    int itemX = treeX + vrect.x() - rootX; 
-
-    /* The item is a checkbox, then an icon and finally the text. */
-
-    /* 1. Get the rect surrounding the checkbox */
-    QRect checkboxRect = QRect(itemX, 
-                               vrect.y(), 
-                               style()->pixelMetric(QStyle::PM_IndicatorWidth)+3,
-                               vrect.height()+2); 
-
-    /* 2. Get the rect surrounding the icon */
-    QRect iconRect = QRect(itemX + checkboxRect.width(),
-                           vrect.y(),
-                           iconSize().width(),
-                           vrect.height());
-
-    /* 3. Finally get the rect surrounding the text */
-    QRect textRect = QRect(itemX + checkboxRect.width() + iconRect.width(),
-                           vrect.y(),
-                           vrect.width() - checkboxRect.width() - iconRect.width(),
-                           vrect.height());       
-
-    /* Now check where the press event took place and handle it correspondingly */
-
-    if(checkboxRect.contains(event->pos())) 
-    {
-        m_bIsCheckboxClicked = true;
-    } 
-   
-    QTreeWidget::mousePressEvent(event);
-    return;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/CameraTreeWindow.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/CameraTreeWindow.h
deleted file mode 100644
index 812458ce4feeb69598ee65ce4985f7411b1d3e39..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/CameraTreeWindow.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CameraTreeWindow.h
-
-  Description:  This is the main window of the Vimba Viewer that 
-                lists all connected cameras. 
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef CAMERATREEWINDOW_H
-#define CAMERATREEWINDOW_H
-
-
-#include <QTreeWidget>
-#include <QMouseEvent>
-#include "Helper.h"
-
-
-class CameraTreeWindow : public QTreeWidget
-{
-    Q_OBJECT
-    public: 
-    
-    protected:
-                
-      
-    private:
-                bool   m_bIsChecked;
-                bool   m_bIsCheckboxClicked;
-                bool   m_bIsRightMouseClicked;
-                QTreeWidgetItem *m_CurrentItem;
-                
-    public:
-                CameraTreeWindow ( QWidget *parent);
-               ~CameraTreeWindow ( void );
-
-                QTreeWidgetItem *createItem ( void );
-                QTreeWidgetItem *createItem ( QTreeWidgetItem *itemRef, const bool &bIsCheckable );
-                void setText ( QTreeWidgetItem *itemRef, const QString &text );
-                void setCheckCurrentItem ( const bool &bIsChecked );
-    
-    protected:
-                void mousePressEvent ( QMouseEvent *event );                
-    private:
-             
-    private slots:
-                void clickOnCamera ( QTreeWidgetItem *item, int column );
-                        
-signals:
-                void cameraClicked ( const QString &sModel, const bool &bIsChecked );
-                void rightMouseClicked ( const bool &bIsClicked );
-                
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/ControllerTreeWindow.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/ControllerTreeWindow.cpp
deleted file mode 100644
index 57b7c60d1a1d26fc42a95fba157ed68417d22238..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/ControllerTreeWindow.cpp
+++ /dev/null
@@ -1,2642 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012-2019 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ControllerTreeWindow.cpp
-
-  Description: All about features control tree
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-/* define this to use std::numeric_limits */
-#define NOMINMAX
-
-#include <limits>
-#include <iostream>
-
-#include <QCheckBox>
-#include <QItemDelegate>
-#include <QLabel>
-#include <QLineEdit>
-#include <QPushButton>
-#include <QStandardItemModel>
-#include <QtConcurrentRun>
-
-#include "../ExternLib/qwt/qwt_slider.h"
-#include "../ExternLib/qwt/qwt_scale_engine.h"
-
-#include "ControllerTreeWindow.h"
-#include "ExComboBox.h"
-#include "Helper.h"
-#include "HexEditor/HexMainWindow.h"
-#include "IntSpinBox.h"
-#include "MultiCompleter.h"
-#include "SortFilterProxyModel.h"
-#include "SplashScreen.h"
-
-#include <FeatureObserver.h>
-
-using AVT::VmbAPI::StringVector;
-
-#ifdef WIN32
-    #include <windows.h>
-#else
-    #include <unistd.h>
-    #include <cstring>
-#endif
-
-/* controlling row/height size in tree */
-class ItemDelegate: public QItemDelegate
-{
-public:
-    ItemDelegate() {}
-    QSize sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const
-    {
-        QSize s = QItemDelegate::sizeHint( option, index );
-        s.setHeight( row_height );
-        return s;
-    }
-
-    void setRowHeight( const unsigned char height )
-    {
-        row_height = height;
-    }
-
-protected:
-    unsigned char row_height;
-};
-
-ControllerTreeWindow::ControllerTreeWindow ( QString sID, QWidget *parent, bool bAutoAdjustPacketSize, CameraPtr pCam ): QTreeView ( parent ), m_TreeDelegate ( NULL ),
-    m_HBooleanLayout          ( NULL ), m_HBooleanLayout2          ( NULL ), m_BooleanWidget         ( NULL ), m_CheckBox_Bool   ( NULL ),
-    m_HEditLayout             ( NULL ), m_HEditLayout2             ( NULL ), m_EditWidget            ( NULL ), m_TextEdit_String ( NULL ),
-    m_HButtonLayout           ( NULL ), m_HButtonLayout2           ( NULL ), m_ButtonWidget          ( NULL ), m_CmdButton       ( NULL ),
-    m_HComboLayout            ( NULL ), m_HComboLayout2            ( NULL ), m_ComboWidget           ( NULL ), m_EnumComboBox    ( NULL ),
-    m_HLineEditLayout         ( NULL ), m_HLineEditLayout2         ( NULL ), m_LineEditWidget        ( NULL ), m_LineEdit        ( NULL ), m_HexLabel ( NULL ),
-    m_HSpinSliderLayout_Int   ( NULL ), m_HSpinSliderLayout_Int2   ( NULL ), m_IntSpinSliderWidget   ( NULL ), m_SpinBox_Int     ( NULL ), m_Slider_Int   ( NULL ),
-    m_HSpinSliderLayout_Float ( NULL ), m_HSliderEditLayout_Float2 ( NULL ), m_FloatSliderEditWidget ( NULL ), m_EditBox_Float   ( NULL ), m_Slider_Float ( NULL ),
-    m_HexWindow               ( NULL ), m_LogSliderWidget          ( NULL ), m_FeaturesPollingTimer  ( NULL ),
-    m_nSliderStep ( 0 ), m_dMinimum ( 0 ), m_dMaximum ( 0 ), m_dIncrement ( 0 ), m_nIntSliderOldValue ( 0 ), m_bIsGigE ( false ), m_bIsTimeout ( false ),
-    m_pFeatureObs( new FeatureObserver(pCam)), m_ListTreeError ( VmbErrorOther ), m_bIsTooltipOn ( true ), m_bIsJobDone ( true ), m_bIsMousePressed ( false ), m_bIsBusy ( false )
-{
-    m_pCam = pCam;
-    m_sCameraID = sID;
-    setupTree();
-    connect((FeatureObserver*)(SP_ACCESS(m_pFeatureObs)), SIGNAL(setEventMessage(const QStringList &)), this, SLOT(onSetEventMsg(const QStringList &)));
-    this->setStyleSheet(QString::fromUtf8("QToolTip {""}"));
-
-    m_Level.append(m_Level0Map);
-    m_Level.append(m_Level1Map);
-    m_Level.append(m_Level2Map);
-    m_Level.append(m_Level3Map);
-    m_Level.append(m_Level4Map);
-    m_Level.append(m_Level5Map);
-    m_Level.append(m_Level6Map);
-    m_Level.append(m_Level7Map);
-    m_Level.append(m_Level8Map);
-    m_Level.append(m_Level9Map);
-
-    QStringList CompletionList;
-
-    VmbError_t error = m_pCam->GetFeatures(m_featPtrVec);
-    if(VmbErrorSuccess == error)
-    {
-        for( unsigned int i=0; i < m_featPtrVec.size(); i++ )
-        {
-            VmbFeatureVisibilityType visibilityType;
-            m_featPtrVec.at(i)->GetVisibility(visibilityType);
-
-            std::string sDisplayName;
-            m_featPtrVec.at(i)->GetDisplayName(sDisplayName);
-
-            /* Save DisplayName for filter completer */
-            CompletionList << QString::fromStdString(sDisplayName);
-
-            if((VmbFeatureVisibilityBeginner == visibilityType) || (VmbFeatureVisibilityExpert == visibilityType) || (VmbFeatureVisibilityGuru == visibilityType))
-            {
-                sortCategoryAndAttribute(m_featPtrVec.at(i), m_ModelGuru);
-                mapInformation(QString::fromStdString(sDisplayName), m_featPtrVec.at(i));
-                m_featPtrMap[QString::fromStdString(sDisplayName)] = m_featPtrVec.at(i);
-                std::string sFeatureName;
-                m_featPtrVec.at(i)->GetName(sFeatureName);
-                m_DisplayFeatureNameMap[QString::fromStdString(sDisplayName)] = QString::fromStdString(sFeatureName);
-            }
-        }
-    }
-
-    /* Features string completer for filter */
-    m_StringCompleter = new MultiCompleter(CompletionList, this);
-    m_StringCompleter->setCaseSensitivity(Qt::CaseInsensitive);
-
-    m_ListTreeError = error;
-    m_Model = m_ModelGuru;
-
-    m_ProxyModel = new SortFilterProxyModel(this);
-    m_ProxyModel->setDynamicSortFilter(true);
-    setModel(m_ProxyModel);
-    m_ProxyModel->setSourceModel(m_Model);
-
-    resizeColumnToContents(0);
-    /* used to set the maximum height of the row in tree */
-    m_TreeDelegate = new ItemDelegate();
-    m_TreeDelegate->setRowHeight(20);
-    setItemDelegate(m_TreeDelegate);
-
-    connect( this, SIGNAL( expanded(const QModelIndex &) ), this, SLOT( expand(const QModelIndex &) ) );
-    connect( this, SIGNAL( expanded(const QModelIndex &) ), this, SLOT( updateColWidth()) );
-    connect( this, SIGNAL( collapsed(const QModelIndex &) ), this, SLOT( collapse(const QModelIndex &) ) );
-    connect((FeatureObserver*)(SP_ACCESS(m_pFeatureObs)), SIGNAL(setChangedFeature(const QString &, const QString &, const bool &)),
-            this, SLOT(onSetChangedFeature(const QString &, const QString &, const bool &)));
-    connect( this, SIGNAL( clicked(const QModelIndex &) ), this, SLOT( onClicked(const QModelIndex &) ) );
-
-    sortByColumn(0, Qt::AscendingOrder);
-    setSelectionMode(QAbstractItemView::SingleSelection);
-
-    /* Auto Adjust Packet Size */
-    m_bAutoAdjustPacketSize = bAutoAdjustPacketSize;
-    if(m_bIsGigE && m_bAutoAdjustPacketSize)
-    {
-        FeaturePtr FeatPtr = getFeaturePtr("GVSP Adjust Packet Size");
-        if( NULL == FeatPtr)
-            return;
-
-        error = FeatPtr->RunCommand();
-        if(VmbErrorSuccess == error)
-        {
-            QTimer::singleShot(7000, this, SLOT(setAdjustPacketSizeTimeout()));
-
-            bool bIsDone = false;
-            while((!bIsDone) && (VmbErrorSuccess == error))
-            {
-                QCoreApplication::processEvents();
-                if(m_bIsTimeout)
-                {
-                    m_ListTreeError = 7000; //7000: "Timeout"
-                    return;
-                }
-                error = FeatPtr->IsCommandDone(bIsDone);
-            }
-
-            m_ListTreeError = error;
-        }
-    }
-
-    m_FeaturesPollingTimer = new QTimer ( this );
-    connect (m_FeaturesPollingTimer, SIGNAL(timeout()), this, SLOT(runPollingFeaturesValue()));
-    m_FeaturesPollingTimer->start(500);
-}
-
-ControllerTreeWindow::~ControllerTreeWindow()
-{
-    if (VmbErrorSuccess == getTreeStatus())
-        m_FeaturesPollingTimer->stop();
-    resetControl();
-}
-
-void ControllerTreeWindow::showEvent(QShowEvent *event)
-{
-    updateRegisterFeature();
-    if (m_sCurrentSelectedFeature != "")
-    {
-        FeaturePtr pFeature = getFeaturePtr( m_sCurrentSelectedFeature );
-        /* make sure to update the info */
-        mapInformation(m_sCurrentSelectedFeature, pFeature);
-        showIt(this->currentIndex(), "Description");
-    }
-}
-
-void ControllerTreeWindow::hideEvent(QHideEvent *event)
-{
-    updateUnRegisterFeature();
-    this->setToolTip("");
-    emit setDescription("");
-}
-
-
-void ControllerTreeWindow::saveFeaturesToTextFile ( const QString &sDestPathAndFileName )
-{
-    QFile file(sDestPathAndFileName);
-    file.open(QIODevice::WriteOnly | QIODevice::Text);
-    QTextStream outputstream (&file);
-
-    QMap<QString, FeaturePtr>::iterator i;
-
-    for (i = m_featPtrMap.begin(); i != m_featPtrMap.end(); ++i)
-    {
-        QString sFeatureDisplayName = i.key();
-        outputstream << sFeatureDisplayName << " = " << getFeatureValue ( i.value()) << "\n";
-    }
-
-    file.close();
-}
-
-void ControllerTreeWindow::setAdjustPacketSizeTimeout()
-{
-    m_bIsTimeout = true;
-}
-
-void ControllerTreeWindow::runPollingFeaturesValue()
-{
-    // possible improvement: Check if the method is already running here (instead of in
-    // pollingFeaturesValue via a mutex) to prevent unnecessary spawning of a thread
-    QtConcurrent::run(this, &ControllerTreeWindow::pollingFeaturesValue);
-}
-
-void ControllerTreeWindow::pollingFeaturesValue()
-{
-    // Only run if no other thred is currently polling camera features via this method
-    if (m_FeaturesPollingMutex.tryLock())
-    {
-        for (int i = 0; i < m_FeaturesPollingName.size(); i++)
-        {
-            FeaturePtr FeatPtr = getFeaturePtr(m_FeaturesPollingName.at(i));
-
-            VmbUint32_t nPollValue = 0;
-            if (VmbErrorSuccess == FeatPtr->GetPollingTime( nPollValue ))
-            {
-                if(0 == nPollValue)
-                {
-                    updateExpandedTreeValue(FeatPtr, m_FeaturesPollingName.at(i));
-                }
-            }
-        }
-        m_FeaturesPollingMutex.unlock();
-    }
-}
-
-bool ControllerTreeWindow::isGigE() const
-{
-    return (m_bIsGigE && m_bAutoAdjustPacketSize);
-}
-
-VmbError_t ControllerTreeWindow::getTreeStatus() const
-{
-    return m_ListTreeError;
-}
-
-MultiCompleter *ControllerTreeWindow::getListCompleter() const
-{
-    return m_StringCompleter;
-}
-
-void ControllerTreeWindow::showTooltip ( const bool bIsChecked )
-{
-    m_bIsTooltipOn = bIsChecked;
-    setToolTip( m_bIsTooltipOn ? m_sTooltip : "" );
-}
-
-void ControllerTreeWindow::mapInformation(const QString sName, const FeaturePtr &featPtr)
-{
-    if( NULL == featPtr)
-        return;
-
-    std::string sDescription;
-    featPtr->GetDescription(sDescription);
-
-    QString sQDescription = "<br/>";
-    sQDescription.append(QString::fromUtf8(sDescription.c_str()));
-    sQDescription = sQDescription.replace(".", ".<br/>");
-
-    QString sInfo = getFeatureInformation(featPtr);
-    if(sInfo.isEmpty())
-    {
-        m_DescriptonMap[sName] = sQDescription;
-    }
-    else
-    {
-        if(sDescription.empty())
-            m_DescriptonMap[sName] = "<b>DESCRIPTION:</b> N/A<br/>" + sInfo;
-        else
-            m_DescriptonMap[sName] = "<b>DESCRIPTION:</b>" + sQDescription.append("<br/>").append(sInfo);
-    }
-}
-
-QString ControllerTreeWindow::getFeatureInformation(const FeaturePtr &featPtr)
-{
-    QString sInformation;
-    VmbInt64_t nMin = 0, nMax = 0, nInc = 0;
-    double dMin = 0, dMax = 0, dInc = 0;
-
-    std::string sFeatureName;
-    featPtr->GetName(sFeatureName);
-    sInformation.append("<b>FEATURE NAME:</b> ").append(QString::fromStdString(sFeatureName)).append("<br/>");
-
-    VmbFeatureVisibilityType visibility = VmbFeatureVisibilityUnknown;
-    featPtr->GetVisibility(visibility);
-    sInformation.append("<b>VISIBILITY:</b> ");
-    switch(visibility)
-    {
-    case VmbFeatureVisibilityUnknown:   sInformation.append("UNKNOWN<br/>");   break;
-    case VmbFeatureVisibilityBeginner:  sInformation.append("BEGINNER<br/>");  break;
-    case VmbFeatureVisibilityExpert:    sInformation.append("EXPERT<br/>");    break;
-    case VmbFeatureVisibilityGuru:      sInformation.append("GURU<br/>");      break;
-    case VmbFeatureVisibilityInvisible: sInformation.append("INVISIBLE<br/>"); break;
-    default: sInformation.append("N/A<br/>"); break;
-    }
-
-    /* get feature type and type-specific info */
-    VmbFeatureDataType dataType = VmbFeatureDataUnknown;
-    VmbFeatureFlagsType flags;
-    VmbError_t error = featPtr->GetDataType(dataType);
-    if(VmbErrorSuccess == error)
-    {
-        switch(dataType)
-        {
-        case VmbFeatureDataInt:
-            {
-                /* only show range and increment for integer features that might change */
-                if ((VmbErrorSuccess == featPtr->GetFlags(flags)) && ((((VmbFeatureFlagsVolatile|VmbFeatureFlagsWrite|VmbFeatureFlagsModifyWrite) & flags)!=0)||(VmbFeatureFlagsRead == flags)))
-                {
-                    if( VmbErrorSuccess == featPtr->GetRange(nMin, nMax))
-                        sInformation.append("<b>TYPE:</b> Integer<br/><b>MINIMUM:</b> ").append(QString::number(nMin)).append("<br/><b>MAXIMUM:</b> ").append(QString::number(nMax).append("<br/>"));
-                    if( (VmbErrorSuccess == featPtr->GetIncrement(nInc)) && (1!=nInc))
-                        sInformation.append("<b>INTERVAL:</b> ").append(QString::number(nInc)).append("<br/>");
-                }
-                break;
-            }
-        case VmbFeatureDataFloat:
-            {
-                /* only show range and increment for float features that might change */
-                VmbFeatureFlagsType flags;
-                if ((VmbErrorSuccess == featPtr->GetFlags(flags)) && ((((VmbFeatureFlagsVolatile|VmbFeatureFlagsWrite|VmbFeatureFlagsModifyWrite) & flags)!=0)||(VmbFeatureFlagsRead == flags)))
-                {
-                    if( VmbErrorSuccess == featPtr->GetRange(dMin, dMax))
-                        sInformation.append("<b>TYPE:</b> Float<br/><b>MINIMUM:</b> ").append(QString::number(dMin,'g',9)).append("<br/><b>MAXIMUM:</b> ").append(QString::number(dMax,'g',12)).append("<br/>");
-
-                    if( VmbErrorSuccess == featPtr->GetIncrement(dInc))
-                        sInformation.append("<b>INTERVAL:</b> ").append(QString::number(dInc,'f',10)).append("<br/>");
-                }
-                break;
-            }
-        case VmbFeatureDataEnum:    sInformation.append("<b>TYPE:</b> Enumeration<br/>"); break;
-        case VmbFeatureDataString:  sInformation.append("<b>TYPE:</b> String<br/>");      break;
-        case VmbFeatureDataBool:    sInformation.append("<b>TYPE:</b> Boolean<br/>");     break;
-        case VmbFeatureDataCommand: sInformation.append("<b>TYPE:</b> Command<br/>");     break;
-        case VmbFeatureDataRaw:     sInformation.append("<b>TYPE:</b> Raw<br/>");     break;
-        default: break;
-        }
-    }
-
-    std::string sCategory;
-    featPtr->GetCategory(sCategory);
-    sInformation.append("<b>CATEGORY:</b> ").append(QString::fromStdString(sCategory)).append("<br/>");
-
-    FeaturePtrVector           featPtrVec;
-
-    sInformation.append("<br/><b>AFFECTED FEATURE(S):</b> ");
-    featPtr->GetAffectedFeatures(featPtrVec);
-    for(unsigned int i=0; i < featPtrVec.size(); i++)
-    {
-        std::string sName;
-        featPtrVec.at(i)->GetName(sName);
-
-        if(0 == i)
-            sInformation.append("<br/>");
-
-        sInformation.append(QString::fromStdString(sName));
-        if(i+1 != featPtrVec.size())
-        {
-            sInformation.append(", ");
-            if(0 == ((i+1) % 4) && (i != 0) )
-                sInformation.append("<br/>");
-        }
-    }
-
-    if(0 == featPtrVec.size())
-        sInformation.append("N/A");
-
-    sInformation.append("<br/>");
-    return sInformation;
-}
-
-void ControllerTreeWindow::onClicked ( const QModelIndex & current )
-{
-    setCursor(Qt::ArrowCursor);
-    scrollTo(current, QAbstractItemView::EnsureVisible);
-
-    if( m_bIsBusy )
-        return;
-
-    m_bIsBusy = true;
-
-    if( !current.isValid())
-    {
-        m_bIsBusy = false;
-        return;
-    }
-
-    /* check what feature is that */
-    FeaturePtr FeatPtr;
-    QString sFeature = getFeatureName(current);
-    FeatPtr = getFeaturePtr(sFeature);
-
-    /* make sure to update the info */
-    mapInformation(sFeature, FeatPtr);
-    showIt(current, "Description");
-
-    if (( NULL == FeatPtr) || !isFeatureWritable(sFeature) || 0 == current.column())
-    {
-        m_bIsBusy = false;
-        m_sCurrentSelectedFeature = sFeature;
-        resetControl();
-        return;
-    }
-
-    VmbFeatureDataType dataType = VmbFeatureDataUnknown;
-    if(VmbErrorSuccess == FeatPtr->GetDataType(dataType))
-    {
-        switch(dataType)
-        {
-        case VmbFeatureDataInt:     createIntSliderSpinBox(current);   break;
-        case VmbFeatureDataFloat:   createFloatSliderEditBox(current); break;
-        case VmbFeatureDataEnum:    createEnumComboBox(current);       break;
-        case VmbFeatureDataString:  createStringEditBox(current);      break;
-        case VmbFeatureDataBool:    createBooleanCheckBox(current);    break;
-        case VmbFeatureDataCommand: createCommandButton(current);      break;
-        case VmbFeatureDataRaw:     createHexEditor(current);          break;
-        default: break;
-        }
-    }
-
-    m_bIsBusy = false;
-}
-
-void ControllerTreeWindow::collapse ( const QModelIndex & index )
-{
-    QVariant varData = index.data();
-    int nrow = 0;
-    QVariant varChild = 1;
-
-    while(0 != varChild.type())
-    {
-        QModelIndex child = index.child(nrow++, 0);
-
-        if (0 == child.data().type())
-            break;
-
-        varChild = child.data();
-
-        if ( !isEventFeature(getFeaturePtr( varChild.toString() )))
-        {
-            unregisterFeatureObserver(varChild.toString());
-
-            for (int i = 0; i < m_FeaturesPollingName.size(); i++)
-            {
-                if (m_FeaturesPollingName.at(i) == varChild.toString())
-                {
-                    m_FeaturesPollingName.removeAt(i);
-                }
-            }
-        }
-
-        collapse(child);
-    }
-}
-
-void ControllerTreeWindow::expand( const QModelIndex & index )
-{
-    QVariant varData = index.data();
-    int nrow = 0;
-    QVariant varChild = 1;
-
-    while(0 != varChild.type())
-    {
-        QModelIndex child = index.child(nrow++, 0);
-        if (0 == child.data().type())
-            break;
-        varChild = child.data();
-
-        if(isExpanded(child))
-            expand(child);
-
-        FeaturePtr pFeature = getFeaturePtr( varChild.toString() );
-
-        if( !isEventFeature( pFeature ))
-        {
-            if ( !SP_ISNULL( pFeature ))
-            {
-                VmbFeatureFlagsType flags       = (VmbFeatureFlagsType)0UL;
-                VmbUint32_t         pollingTime = 0;
-                if (    VmbErrorSuccess == pFeature->GetFlags( flags )
-                     && VmbFeatureFlagsVolatile & flags
-                     && VmbErrorSuccess == pFeature->GetPollingTime( pollingTime )
-                     && 0 == pollingTime )
-                     m_FeaturesPollingName.push_back( varChild.toString() );
-                else
-                    registerFeatureObserver( varChild.toString() );
-            }
-        }
-    }
-}
-
-void ControllerTreeWindow::updateColWidth()
-{
-    resizeColumnToContents(0);
-    resizeColumnToContents(1);
-}
-
-void ControllerTreeWindow::updateRegisterFeature()
-{
-    for(int i=0; i < model()->rowCount(); i++)
-    {
-        if (isExpanded(model()->index(i, 0)))
-        {
-            expand(model()->index(i, 0));
-        }
-    }
-
-    updateColWidth();
-}
-
-void ControllerTreeWindow::updateUnRegisterFeature()
-{
-    for(int i=0; i < model()->rowCount(); i++)
-    {
-        collapse(model()->index(i, 0));
-    }
-}
-
-bool ControllerTreeWindow::isEventFeature( const FeaturePtr pFeature ) const
-{
-    std::string sCategory;
-    if (    !SP_ISNULL( pFeature )
-         && VmbErrorSuccess == SP_ACCESS( pFeature )->GetCategory( sCategory )
-         && std::strstr( sCategory.c_str(), "/EventID" ))
-    {
-        return true;
-    }
-    else
-    {
-        return false;
-    }
-}
-
-void ControllerTreeWindow::setupTree()
-{
-    m_ModelGuru = new QStandardItemModel();
-    m_Model = new QStandardItemModel();
-    QStringList sHeader;
-    sHeader << tr("Feature ") << tr("Value ");
-    m_Model->setHorizontalHeaderLabels( sHeader );
-    m_ModelGuru->setHorizontalHeaderLabels( sHeader );
-}
-
-bool  ControllerTreeWindow::findCategory ( const QMap <QString, QString>& map, const QString& sName ) const
-{
-    QMap<QString, QString>::const_iterator itr = map.find(sName);
-    while (itr != map.constEnd())
-    {
-        if(0 == itr.key().compare(sName))
-        {
-            return true;
-        }
-
-        ++itr;
-    }
-
-    return false;
-}
-
-void ControllerTreeWindow::sortCategoryAndAttribute ( const FeaturePtr &featPtr, QStandardItemModel *Model )
-{
-    QFont categoryFont;
-    categoryFont.setBold(true);
-
-    QList<QStandardItem *> items;
-    QList<QStandardItem *> pParent;
-    QString sLastNode;
-    bool bHasLastNode = false;
-    int nLevel = 0;
-
-    std::string sCategory, sFeatureName;
-    QString sFeatureValue;
-    bool bIsWritable = false;
-    VmbFeatureVisibilityType visibilityType;
-    VmbError_t error;
-
-    error = featPtr->GetDisplayName(sFeatureName);
-
-    if( VmbErrorSuccess == featPtr->GetCategory(sCategory) &&
-        VmbErrorSuccess == error )
-    {
-        /* TODO check return value */
-        sFeatureValue = getFeatureValue(featPtr);
-        error = featPtr->IsWritable(bIsWritable);
-        featPtr->GetVisibility(visibilityType);
-
-        /* is it a GigE? : temporarily use to handle floating gain */
-        if(0 == sCategory.compare("/GigE"))
-        {
-            m_bIsGigE = true;
-        }
-
-        /* Feature directly in root category */
-        if ( 0 == sCategory.length() )
-        {
-            sCategory = "/";
-        }
-    }
-    else
-    {
-        return;
-    }
-
-    QString sPath = QString::fromStdString(sCategory);
-
-    int nCount =  sPath.count('/');
-
-    while((nLevel < nCount))
-    {
-        nLevel++;
-        QString sPart = sPath.section('/', nLevel, nLevel);
-        /* Feature directly in root category */
-        if ( 0 == sPart.length() )
-        {
-            sPart = "/";
-        }
-        bool bNodeExists = false;
-        if( 0 < sPart.length())
-        {
-            /* check if category in level already available */
-            if(!findCategory ( m_Level.at(nLevel-1), sPart ))
-            {
-                bNodeExists = false;
-                switch(nLevel-1)
-                {
-                case 0: m_Level0Map[sPart] = "true";  /* TOP LEVEL */
-                    m_Level[0] = m_Level0Map;
-                    break;
-                case 1:m_Level1Map[sPart] = "true";
-                    m_Level[1] = m_Level1Map;
-                    break;
-                case 2:m_Level2Map[sPart] = "true";
-                    m_Level[2] = m_Level2Map;
-                    break;
-                case 3:m_Level3Map[sPart] = "true";
-                    m_Level[3] = m_Level3Map;
-                    break;
-                case 4:m_Level4Map[sPart] = "true";
-                    m_Level[4] = m_Level4Map;
-                    break;
-                case 5:m_Level5Map[sPart] = "true";
-                    m_Level[5] = m_Level5Map;
-                    break;
-                case 6:m_Level6Map[sPart] = "true";
-                    m_Level[6] = m_Level6Map;
-                    break;
-                case 7:m_Level7Map[sPart] = "true";
-                    m_Level[7] = m_Level7Map;
-                    break;
-                case 8:m_Level8Map[sPart] = "true";
-                    m_Level[8] = m_Level8Map;
-                    break;
-                }
-            }
-            else
-            {
-                bNodeExists = true;
-            }
-
-            /* if category/feature not available in tree yet, then fill it */
-            if( !bNodeExists )
-            {
-                QList<QStandardItem *> currentItem;
-
-                currentItem << new QStandardItem(sPart) << new QStandardItem("");
-                currentItem.at(0)->setEditable(false);
-                currentItem.at(1)->setEditable(false);
-
-                if(bHasLastNode)
-                {
-                    /* get the pointer of list items */
-                    items = Model->findItems(sLastNode, Qt::MatchRecursive);
-                    if(0 != items.size())
-                    {
-                        /* find the right parent level, and add the attribute item there*/
-                        QString sGrandParent = sPath.section('/', nLevel-1, nLevel-1);
-                        items.at(getGrandParentLevel(items, sGrandParent))->appendRow(currentItem);
-                        sLastNode = sPart;
-                        continue;
-                    }
-                }
-
-                if(pParent.isEmpty())
-                {
-                    pParent << new QStandardItem(sPart) << new QStandardItem("");
-                    pParent.at(0)->setFont(categoryFont);
-                    pParent.at(0)->setEditable(false);
-                    pParent.at(1)->setEditable(false);
-
-                    Model->appendRow(pParent);
-
-                    sLastNode = sPart;
-                    continue;
-                }
-
-                /* use the last node as parent if available */
-                items = Model->findItems(sLastNode, Qt::MatchRecursive);
-                if(0 != items.size())
-                {
-                    /* find the right parent level, and add the attribute item there*/
-                    QString sGrandParent = sPath.section('/', nLevel-1, nLevel-1);
-                    items.at(getGrandParentLevel(items, sGrandParent))->appendRow(currentItem);
-                }
-                else
-                {
-                    pParent.at(0)->appendRow(currentItem);
-                }
-            }
-            /* if already available use it as parent node */
-            else
-            {
-                bHasLastNode = true;
-            }
-
-            sLastNode = sPart;
-        }
-    }
-
-    /* get the pointer of list items */
-    items = Model->findItems(sLastNode, Qt::MatchWrap|Qt::MatchRecursive);
-
-    if(0 != items.size() && (VmbFeatureVisibilityInvisible != visibilityType))
-    {
-        QList<QStandardItem *> attributeItems;
-
-        std::string sStdName;
-        featPtr->GetName(sStdName);
-        QString sName = QString::fromStdString(sStdName);
-        std::string sRepresentation;
-        featPtr->GetRepresentation(sRepresentation);
-
-        if( Helper::needsIPv4Format(sName, sRepresentation))
-        {
-           sFeatureValue = Helper::displayValueToIPv4(sFeatureValue);
-        }
-
-        attributeItems << new QStandardItem(QString::fromStdString(sFeatureName)) << new QStandardItem(sFeatureValue);
-
-        attributeItems.at(0)->setEditable(false);
-        attributeItems.at(1)->setEditable(false);
-
-        bIsWritable ? attributeItems.at(0)->setForeground(QColor(0,128, 0))/* green */ : attributeItems.at(0)->setForeground(QColor(135,135, 135)) /* grey */;
-
-        /* find the right parent level, and add the attribute item there*/
-        QString sGrandParent = sPath.section('/', nCount-1, nCount-1);
-        items.at(getGrandParentLevel(items, sGrandParent))->appendRow(attributeItems);
-
-        /* register Events */
-        if( isEventFeature( featPtr ))
-        {
-            featPtr->RegisterObserver(m_pFeatureObs);
-        }
-    }
-}
-
-unsigned int ControllerTreeWindow::getGrandParentLevel( const QList<QStandardItem *>& items, const QString &sGrandParent) const
-{
-    unsigned int nLevel = 0;
-    for (int i=0; i<items.size(); i++ )
-    {
-        QStandardItem *parent = items.at(i)->parent();
-
-        if(0 == parent)
-            continue;
-
-        if(0 == sGrandParent.compare(parent->text()) )
-        {
-            nLevel = i;
-            break;
-        }
-    }
-
-    return nLevel;
-}
-
-bool ControllerTreeWindow::registerFeatureObserver ( const QString &sFeatureName )
-{
-    /* register all features to the observer, so you will get notification in case any features value has been changed */
-    QMap<QString, FeaturePtr>::iterator find_pos = m_featPtrMap.find( sFeatureName);
-    if( find_pos != m_featPtrMap.end() )
-    {
-        VmbError_t error = find_pos.value()->RegisterObserver(m_pFeatureObs);
-        if( VmbErrorSuccess != error)
-        {
-            emit logging( "ERROR Register Observer - Feature: " + sFeatureName + " returned "+QString::number(error)+
-                            " "+ Helper::mapReturnCodeToString(error)) ;
-        }
-        updateExpandedTreeValue(find_pos.value(), sFeatureName);
-        return true;
-    }
-    return false;
-}
-
-void ControllerTreeWindow::unregisterFeatureObserver ( const QString &sFeatureName )
-{
-    QMap<QString, FeaturePtr>::iterator find_pos = m_featPtrMap.find( sFeatureName);
-
-    if( find_pos != m_featPtrMap.end() )
-    {
-        VmbError_t error = find_pos.value()->UnregisterObserver(m_pFeatureObs);
-        if( VmbErrorSuccess != error)
-        {
-            if(VmbErrorNotFound != error )
-                emit logging( "ERROR Unregister Observer - Feature: " + find_pos.key() + " returned "+QString::number(error)+" "+
-                                Helper::mapReturnCodeToString(error)) ;
-        }
-    }
-}
-
-void ControllerTreeWindow::updateExpandedTreeValue ( const FeaturePtr &featPtr, const QString &sName )
-{
-    QString sValue = getFeatureValue(featPtr);
-    bool bIsWritable = false;
-    if( VmbErrorSuccess == featPtr->IsWritable(bIsWritable) )
-        onSetChangedFeature(sName, sValue, bIsWritable);
-}
-
-void ControllerTreeWindow::onSetEventMsg ( const QStringList &sMsg )
-{
-    setEventMessage(sMsg);
-}
-
-/* synchronize the event information in tree and event window
-   make sure to collect last information for event window when acquisition stops */
-void ControllerTreeWindow::synchronizeEventFeatures()
-{
-    if(m_bIsGigE)
-    {
-        FeatureObserverPtr p = SP_DYN_CAST(m_pFeatureObs,FeatureObserver);
-        if( NULL != p)
-        {
-            if(SP_ACCESS(p)->isEventRunning())
-            {
-                SP_ACCESS(p)->startObserverTimer();
-            }
-        }
-    }
-}
-
-/* put the value to related features changed
-   keep tree features value up-to-date  */
-void ControllerTreeWindow::onSetChangedFeature ( const QString &sFeature, const QString &sValue, const bool &bIsWritable )
-{
-    QModelIndexList currentItems = m_Model->match( m_Model->index(0,0), Qt::DisplayRole, QVariant::fromValue(sFeature), 1, Qt::MatchWrap|Qt::MatchRecursive);
-
-    if( 0 == currentItems.size() )
-        return;
-
-    QString sFeatureValue = sValue;
-
-    if( Helper::needsIPv4Format(sFeature) )
-    {
-        sFeatureValue = Helper::displayValueToIPv4(sValue);
-    }
-    else if( sFeature == "Device MAC Address")
-    {
-        sFeatureValue = Helper::displayValueToMAC(sValue);
-    }
-
-    QModelIndex newIndex = m_Model->index( currentItems.at(0).row(), 1, currentItems.at(0).parent());
-    m_Model->setData( newIndex, QVariant(sFeatureValue), Qt::EditRole );
-
-    //TLParamsLock?
-    QList<QStandardItem *> itemsCol1 = m_Model->findItems(sFeature, Qt::MatchWrap|Qt::MatchRecursive, 0) ;
-
-    if(!itemsCol1.empty())
-    {
-        bIsWritable ? itemsCol1.at(0)->setForeground(QColor(0,128, 0))/*green*/ : itemsCol1.at(0)->setForeground(QColor(135,135, 135))/*grey*/;
-        if( 0 == m_sCurrentSelectedFeature.compare(sFeature))
-            updateWidget(bIsWritable, QVariant(sFeatureValue));
-    }
-
-    if ( !m_FeaturePtr_EnumComboBox || !m_EnumComboBox )
-        return;
-
-    /* update Exposure-/Gain-/BalanceWhite- Auto when "Once" clicked */
-    if(     Helper::isAutoFeature( m_sCurrentSelectedFeature)
-        &&  Helper::isAutoFeature( sFeature)
-        &&  m_sCurrentSelectedFeature == sFeature
-        &&  sFeatureValue == "Off"
-        && m_EnumComboBox->currentText() == "Once" )
-    {
-        const int nIndex = m_EnumComboBox->findText("Off");
-        if(-1 != nIndex)
-            m_EnumComboBox->setCurrentIndex(nIndex);
-    }
-
-    if( m_sCurrentSelectedFeature == sFeature && sValue.isEmpty() )
-    {
-        m_EnumComboBox->setItemText(m_EnumComboBox->count(), sValue);
-        m_EnumComboBox->setCurrentIndex(m_EnumComboBox->count());
-    }
-}
-
-template <typename COMPOUND_WIDGET>
-void updateEditWidget(COMPOUND_WIDGET *w, const QVariant &value, bool bIsWritable)
-{
-    w->setEnabled(bIsWritable);
-    if(bIsWritable)
-    {
-        QLineEdit * pChild= w-> template findChild<QLineEdit *>(QString("value"));
-        if (    NULL != pChild
-            &&  !pChild->isModified()
-            )
-        {
-            const QString newValue = value.toString();
-            if( pChild->text() != newValue)
-            {
-                pChild->setText(newValue);
-            }
-        }
-    }
-}
-
-void ControllerTreeWindow::updateWidget ( const bool bIsWritable, const QVariant &value )
-{
-    if( NULL != m_IntSpinSliderWidget )
-    {
-        m_IntSpinSliderWidget->setEnabled(bIsWritable);
-        if(bIsWritable)
-        {
-            IntSpinBox * spinBox = m_IntSpinSliderWidget->findChild<IntSpinBox *>(QString("value"));
-            if(     NULL != spinBox )
-            {
-                int newValue = value.toInt();
-                if(     spinBox->value() != newValue
-                    &&  !spinBox->hasFocus())
-                {
-                    spinBox->setValue( newValue );
-                }
-            }
-        }
-    }
-
-    else if( NULL != m_ButtonWidget )
-        m_ButtonWidget->setEnabled(bIsWritable);
-
-    else if( NULL != m_ComboWidget )
-        m_ComboWidget->setEnabled(bIsWritable);
-
-    else if( NULL != m_FloatSliderEditWidget )
-    {
-        updateEditWidget( m_FloatSliderEditWidget, value, bIsWritable );
-    }
-
-    else if( NULL != m_BooleanWidget )
-    {
-        m_BooleanWidget->setEnabled(bIsWritable);
-        if(bIsWritable)
-            m_BooleanWidget->findChild<QCheckBox *>(QString("value"))->setChecked(value.toBool());
-    }
-
-    else if( NULL != m_EditWidget )
-    {
-        updateEditWidget( m_EditWidget, value, bIsWritable );
-    }
-
-    else if( NULL != m_LineEditWidget )
-    {
-        updateEditWidget(m_LineEditWidget, value, bIsWritable );
-    }
-
-    else if( NULL != m_LogSliderWidget )
-    {
-        updateEditWidget( m_LogSliderWidget, value, bIsWritable );
-    }
-}
-
-QString ControllerTreeWindow::getFeatureValue ( const FeaturePtr &featPtr ) const
-{
-    VmbInt64_t  nValue64    = 0;
-    double      dValue      = 0;
-    bool        bValue      = false;
-
-    std::string stdValue;
-    QString     sValue("");
-
-    VmbFeatureDataType dataType = VmbFeatureDataUnknown;
-
-    VmbError_t error = featPtr->GetDataType(dataType);
-
-    if(VmbErrorSuccess == error)
-    {
-        switch(dataType)
-        {
-            case VmbFeatureDataInt:
-                if(VmbErrorSuccess == featPtr->GetValue(nValue64))
-                    sValue = QString::number(nValue64);
-                break;
-
-            case VmbFeatureDataFloat:
-                if(VmbErrorSuccess == featPtr->GetValue(dValue))
-                    sValue = QString::number(dValue);
-                break;
-
-            case VmbFeatureDataEnum:
-                if(VmbErrorSuccess == featPtr->GetValue(stdValue))
-                    sValue = QString::fromStdString(stdValue);
-                break;
-
-            case VmbFeatureDataString:
-                if(VmbErrorSuccess == featPtr->GetValue(stdValue))
-                    sValue = QString::fromStdString (stdValue);
-                break;
-
-            case VmbFeatureDataBool:
-                if(VmbErrorSuccess == featPtr->GetValue(bValue))
-                    bValue ? sValue = "true" : sValue = "false";
-                break;
-
-            case VmbFeatureDataCommand:
-                sValue = "[COMMAND]";
-                break;
-
-            case VmbFeatureDataRaw:
-                sValue = "Click here to open";
-                break;
-            default: break;
-        }
-    }
-    return sValue;
-}
-
-QString ControllerTreeWindow::getFeatureName ( const QModelIndex& item ) const
-{
-    QString sAttrName("");
-    if(item.isValid())
-    {
-        QModelIndex indexFirstCol = item.sibling(item.row(), 0);
-        sAttrName = indexFirstCol.model()->data( indexFirstCol, Qt::DisplayRole ).toString();
-    }
-    return sAttrName;
-}
-
-FeaturePtr ControllerTreeWindow::getFeaturePtr ( const QString &sFeature )
-{
-    QMap<QString, FeaturePtr>::iterator i = m_featPtrMap.find(sFeature);
-
-    if ( m_featPtrMap.end() != i )
-    {
-        return i.value();
-    }
-    else
-    {
-        return FeaturePtr();
-    }
-}
-
-void ControllerTreeWindow::showIt ( const QModelIndex item, const QString &sWhat )
-{
-    QString sAttrName = getFeatureName(item);
-
-    QMap<QString, QString>::const_iterator i;
-
-    if( 0 == sWhat.compare("Description"))
-        i = m_DescriptonMap.find(sAttrName);
-
-    while (i != m_DescriptonMap.constEnd())
-    {
-        if(0 == i.key().compare(sAttrName))
-        {
-            m_sTooltip = i.value();
-            if(m_bIsTooltipOn)
-            {
-                this->setToolTip(i.value());
-            }
-            else
-                this->setToolTip("");
-
-            emit setDescription(i.value());
-            return;
-        }
-        ++i;
-    }
-    /* no feature description has been found */
-    this->setToolTip("");
-    emit setDescription("");
-}
-
-QString ControllerTreeWindow::getFeatureNameFromMap ( const QString &sDisplayName ) const
-{
-    QString sFeature;
-    QMap<QString, QString>::const_iterator itr = m_DisplayFeatureNameMap.find(sDisplayName);
-    if (itr != m_DisplayFeatureNameMap.constEnd())
-    {
-        sFeature = itr.value();
-    }
-
-    return sFeature;
-}
-
-bool ControllerTreeWindow::isFeatureWritable ( const QString & sFeature )
-{
-    bool bIsWritable = false;
-    FeaturePtr FeatPtr;
-
-    FeatPtr = getFeaturePtr(sFeature);
-    if(FeaturePtr() == FeatPtr)
-        return bIsWritable;
-
-    FeatPtr->IsWritable(bIsWritable);
-
-    return bIsWritable;
-}
-
-/* VmbFeatureDataRaw */
-void ControllerTreeWindow::createHexEditor ( const QModelIndex item )
-{
-    FeaturePtr FeatPtr;
-    QString sFeature = getFeatureName(item);
-
-    bool bIsReadOnly = true;
-    if (isFeatureWritable(sFeature))
-    {
-        bIsReadOnly = false;
-    }
-    FeatPtr = getFeaturePtr(sFeature);
-    if( NULL == FeatPtr)
-        return;
-
-    if( VmbErrorSuccess == FeatPtr->GetValue(m_RawData) )
-    {
-        m_HexWindow = new HexMainWindow(this, NULL, "Raw Data Editor", bIsReadOnly, FeatPtr);
-        unsigned char * c = &(m_RawData[0]);
-        QByteArray data = QByteArray::fromRawData((char*)c, m_RawData.size());
-        m_HexWindow->setData(data);
-    }
-}
-
-/* VmbFeatureDataCommand */
-void ControllerTreeWindow::createCommandButton ( const QModelIndex item )
-{
-    QString sFeature_Command = getFeatureName(item);
-
-    if (isFeatureWritable(sFeature_Command))
-    {
-        m_sCurrentSelectedFeature = m_sFeature_Command = sFeature_Command;
-
-        m_FeaturePtr_Command = getFeaturePtr(sFeature_Command);
-        if(NULL == m_FeaturePtr_Command)
-            return;
-
-        resetControl();
-
-        m_ButtonWidget  = new QWidget(this);
-        m_HButtonLayout = new QHBoxLayout(m_ButtonWidget);
-        m_CmdButton = new QPushButton(QIcon(":/VimbaViewer/Images/execute.png"), QString("Execute..."), m_ButtonWidget);
-
-        m_HButtonLayout2 = new QHBoxLayout();
-        m_HButtonLayout2->addWidget(m_CmdButton);
-        m_HButtonLayout->addLayout(m_HButtonLayout2);
-
-        QPoint p = QCursor::pos();
-        m_ButtonWidget->setFixedSize(m_sCurrentSelectedFeature.length()*10, 60);
-        m_ButtonWidget->setWindowFlags( Qt::Tool | Qt::WindowCloseButtonHint );
-        m_ButtonWidget->setWindowTitle(m_sCurrentSelectedFeature);
-        AdjustOffscreenPosition(p, *m_ButtonWidget );
-        m_ButtonWidget->move(p.x(), p.y());
-        m_ButtonWidget->show();
-
-        QObject::connect( m_CmdButton, SIGNAL(clicked()), this, SLOT(onCmdButtonClick()) );
-        setCursor(Qt::PointingHandCursor);
-    }
-}
-
-/* run command when feature button clicked */
-void ControllerTreeWindow::onCmdButtonClick()
-{
-    VmbError_t error;
-
-    if(     (0 == m_sFeature_Command.compare("AcquisitionStop"))
-        ||  (0 == m_sFeature_Command.compare("Acquisition Stop"))
-        ||  (0 == m_sFeature_Command.compare("AcquisitionAbort"))
-        ||  (0 == m_sFeature_Command.compare("Acquisition Abort")))
-    {
-        error = m_FeaturePtr_Command->RunCommand();
-        emit acquisitionStartStop("AcquisitionStopFreerun");
-    }
-    else if(        (0 == m_sFeature_Command.compare("AcquisitionStart"))
-                ||  (0 == m_sFeature_Command.compare("Acquisition Start")))
-    {
-        emit acquisitionStartStop("AcquisitionStartFreerun");
-    }
-
-    if(     (0 != m_sFeature_Command.compare("AcquisitionStop"))
-        &&  (0 != m_sFeature_Command.compare("Acquisition Stop"))
-        &&  (0 != m_sFeature_Command.compare("AcquisitionAbort"))
-        &&  (0 != m_sFeature_Command.compare("Acquisition Abort")))
-    {
-        error = m_FeaturePtr_Command->RunCommand();
-    }
-
-    if( VmbErrorSuccess != error)
-    {
-        emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " returned "+QString::number(error)+
-                        " "+ Helper::mapReturnCodeToString(error)) ;
-    }
-    else if( 0 == m_sFeature_Command.compare("GVSP Adjust Packet Size"))
-    {
-        bool bIsDone = false;
-        this->setEnabled(false);
-        emit enableViewerMenu (false);
-        QPixmap Pixmap( ":/VimbaViewer/Images/refresh.png" );
-        SplashScreen Splash(Pixmap, this, Qt::SplashScreen);
-        int nW = ((this->width()/2) - Splash.width()/2);
-        int nH = ((this->height()/2) - Splash.height()/2);
-        Splash.setGeometry(nW,nH, Splash.width(),Splash.height());
-        Splash.show();
-        Splash.showMessage("Please wait ..." , Qt::AlignHCenter | Qt::AlignVCenter, Qt::red);
-
-        while((!bIsDone) && (VmbErrorSuccess == error))
-        {
-            error = m_FeaturePtr_Command->IsCommandDone(bIsDone);
-        }
-
-        this->setEnabled(true);
-        emit enableViewerMenu (true);
-    }
-}
-
-/* VmbFeatureDataEnum */
-void ControllerTreeWindow::createEnumComboBox ( const QModelIndex item )
-{
-    VmbError_t error;
-    QString sFeature_EnumComboBox = getFeatureName(item);
-
-    // Don't create drop down for read only features
-    if (isFeatureWritable(sFeature_EnumComboBox))
-    {
-        m_sCurrentSelectedFeature = m_sFeature_EnumComboBox = sFeature_EnumComboBox;
-
-        // Set FeaturePtr member to currently selected enum feature
-        m_FeaturePtr_EnumComboBox = getFeaturePtr(m_sFeature_EnumComboBox);
-        if(FeaturePtr() == m_FeaturePtr_EnumComboBox)
-            return;
-
-        resetControl();
-        m_ComboWidget   = new QWidget(this);
-        m_HComboLayout  = new QHBoxLayout(m_ComboWidget);
-        m_EnumComboBox  = new ExComboBox( );
-        m_HComboLayout2 = new QHBoxLayout();
-        m_HComboLayout2->addWidget(m_EnumComboBox);
-        m_HComboLayout->addLayout(m_HComboLayout2);
-
-        // Get all possible enumerations as string
-        StringVector sEnumEntries;
-        error = m_FeaturePtr_EnumComboBox->GetValues(sEnumEntries);
-
-        if(VmbErrorSuccess == error)
-        {
-            std::string sCurrentValue;
-            unsigned int nPos = 0;
-            // Get currently selected enumeration
-            if(VmbErrorSuccess == m_FeaturePtr_EnumComboBox->GetValue(sCurrentValue) || VmbErrorSuccess == error)
-            {
-                for(unsigned int i=0; i < sEnumEntries.size(); i++)
-                {
-                    // Check each enumeration if it is currently applicable
-                    bool bIsAvailable = false;
-                    m_FeaturePtr_EnumComboBox->IsValueAvailable(sEnumEntries.at(i).c_str(), bIsAvailable );
-
-                    if(bIsAvailable)
-                    {
-                        // Add all applicable enumerations to drop down
-                        m_EnumComboBox->addItem(QString::fromStdString(sEnumEntries.at(i)));
-                        // Is this currently selected enumeration?
-                        if(0 == sEnumEntries.at(i).compare(sCurrentValue))
-                            // Set drop down index
-                            m_EnumComboBox->setCurrentIndex(nPos);
-                        nPos++;
-                    }
-                }
-
-                if(sCurrentValue.empty())
-                {
-                    m_EnumComboBox->setItemText(nPos, QString::fromStdString(sCurrentValue));
-                    m_EnumComboBox->setCurrentIndex(nPos);
-                }
-            }
-
-            QPoint p = QCursor::pos();
-            m_ComboWidget->setFixedSize(m_sCurrentSelectedFeature.length()*13, 60);
-            m_ComboWidget->setWindowFlags( Qt::Tool | Qt::WindowCloseButtonHint );
-            m_ComboWidget->setWindowTitle(m_sCurrentSelectedFeature);
-            AdjustOffscreenPosition(p, *m_ComboWidget );
-            m_ComboWidget->move(p.x(), p.y());
-            m_ComboWidget->show();
-
-            QObject::connect( m_EnumComboBox, SIGNAL(activated(const QString &)), this, SLOT(onEnumComboBoxClick(const QString &)) );
-            setCursor(Qt::PointingHandCursor);
-        }
-        else
-        {
-            emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetEnumRange) returned "+QString::number(error)+
-                " "+ Helper::mapReturnCodeToString(error)) ;
-        }
-    }
-}
-
-void ControllerTreeWindow::onEnumComboBoxClick ( const QString &sSelected )
-{
-    std::string sCurrentValue;
-    VmbError_t error;
-    int nIndex = 0;
-    int nIndexOld = 0;
-
-    error = m_FeaturePtr_EnumComboBox->GetValue(sCurrentValue);
-    if( VmbErrorSuccess == error )
-    {
-        nIndexOld = m_EnumComboBox->findText(QString::fromStdString(sCurrentValue));
-    }
-    else
-    {
-        emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetEnumValue) " + sSelected +" returned "+QString::number(error)+
-                      " "+ Helper::mapReturnCodeToString(error)) ;
-    }
-
-    if( (0 == m_sFeature_EnumComboBox.compare("PixelFormat")) || (0 == m_sFeature_EnumComboBox.compare("Pixel Format")) ||
-        (0 == m_sFeature_EnumComboBox.compare("AcquisitionMode")) || (0 == m_sFeature_EnumComboBox.compare("Acquisition Mode")) )
-    {
-        /* stop Acquisition */
-        emit acquisitionStartStop("AcquisitionStop");
-
-        /* give a bit time to make sure that camera is stopped */
-#ifdef WIN32
-        ::Sleep(5);
-#else
-        ::usleep(5000);
-#endif
-
-        error = m_FeaturePtr_EnumComboBox->SetValue(sSelected.toAscii().data());
-        if(VmbErrorSuccess != error)
-        {
-            emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (SetEnumValue) " + sSelected +" returned "+QString::number(error)+
-                          " "+ Helper::mapReturnCodeToString(error)) ;
-        }
-
-        if(VmbErrorSuccess == m_FeaturePtr_EnumComboBox->GetValue(sCurrentValue))
-        {
-            /* make sure to set back the valid value from the camera to combobox */
-            nIndex = m_EnumComboBox->findText(QString::fromStdString(sCurrentValue));
-            m_EnumComboBox->setCurrentIndex(nIndex);
-        }
-        else
-        {
-            m_EnumComboBox->setCurrentIndex(nIndexOld);
-            {
-                emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetEnumValue) " + sSelected +" returned "+QString::number(error)+
-                              " "+ Helper::mapReturnCodeToString(error)) ;
-            }
-        }
-
-#ifdef WIN32
-        ::Sleep(5);
-#else
-        ::usleep(5000);
-#endif
-
-        /*start Acquisition */
-        emit acquisitionStartStop("AcquisitionStart");
-        return;
-    }
-
-    error = m_FeaturePtr_EnumComboBox->SetValue(sSelected.toAscii().data());
-
-    if(VmbErrorSuccess != error)
-    {
-        emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (SetEnumValue) " + sSelected +" returned "+QString::number(error)+
-                      " "+ Helper::mapReturnCodeToString(error)) ;
-    }
-
-    if( VmbErrorSuccess == m_FeaturePtr_EnumComboBox->GetValue(sCurrentValue) )
-    {
-        /* make sure to set back the valid value from the camera to combobox */
-        nIndex = m_EnumComboBox->findText(QString::fromStdString(sCurrentValue));
-        m_EnumComboBox->setCurrentIndex(nIndex);
-    }
-    else
-    {
-        m_EnumComboBox->setCurrentIndex(nIndexOld);
-        emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetEnumValue) " + sSelected +" returned "+QString::number(error)+
-                      " "+ Helper::mapReturnCodeToString(error)) ;
-    }
-}
-
-/* VmbFeatureDataInt */
-void ControllerTreeWindow::createIntSliderSpinBox ( const QModelIndex item )
-{
-    VmbError_t error;
-    QString sFeature_IntSpinBox   = getFeatureName(item);
-
-    if (isFeatureWritable(sFeature_IntSpinBox))
-    {
-        m_sCurrentSelectedFeature = m_sFeature_IntSpinBox = sFeature_IntSpinBox;
-
-        m_FeaturePtr_IntSpinBox = getFeaturePtr(m_sFeature_IntSpinBox);
-
-        std::string sRepresentation;
-        m_FeaturePtr_IntSpinBox->GetRepresentation(sRepresentation);
-
-        VmbInt64_t nMin = 0, nMax = 0, nInc = 1, nValue = 0;
-        error = m_FeaturePtr_IntSpinBox->GetRange(nMin, nMax);
-
-        /* use a line edit to show reg add in Hex */
-        QString sName = getFeatureNameFromMap(m_sCurrentSelectedFeature);
-        if( VmbErrorSuccess == error &&
-                (   sRepresentation == "HexNumber" ||
-                    Helper::needsIPv4Format(sName, sRepresentation) ||
-                    nMax > 9999
-                )
-          )
-        {
-            createLineEdit(item);
-            return;
-        }
-
-        if(NULL == m_FeaturePtr_IntSpinBox)
-            return;
-
-        resetControl();
-
-        m_IntSpinSliderWidget = new QWidget(this);
-        m_HSpinSliderLayout_Int = new QHBoxLayout( m_IntSpinSliderWidget );
-
-        if(VmbErrorSuccess == error)
-        {
-            if( nMin < std::numeric_limits<int>::min() )
-            {
-                nMin = std::numeric_limits<int>::min();
-            }
-
-            if( nMax > std::numeric_limits<int>::max() )
-            {
-                nMax = std::numeric_limits<int>::max();
-                if(VmbErrorSuccess == m_FeaturePtr_IntSpinBox->GetValue(nValue))
-                {
-                    if( nMax < nValue )
-                        m_FeaturePtr_IntSpinBox->SetValue(nMax);
-                }
-            }
-
-            m_SpinBox_Int = new IntSpinBox(0);
-            m_SpinBox_Int->setObjectName("value");      //mark as the element of this dialog that contains the value, used in "updateWidget()"
-            m_Slider_Int = new QSlider(Qt::Horizontal);
-            m_Slider_Int->installEventFilter(this);
-
-            error = m_FeaturePtr_IntSpinBox->GetIncrement(nInc);
-            if(VmbErrorSuccess == error)
-            {
-                m_SpinBox_Int->setSingleStep(nInc);
-                m_Slider_Int->setTickInterval(nInc);
-                m_Slider_Int->setSingleStep(nInc);
-            }
-
-            nMax = nMax - ((nMax-nMin) % nInc);
-            m_SpinBox_Int->setRange(nMin, nMax);
-            m_Slider_Int->setRange( nMin, nMax);
-
-            m_nSliderStep = nInc;
-
-            error = m_FeaturePtr_IntSpinBox->GetValue(nValue);
-            if(VmbErrorSuccess == error)
-            {
-                if( nValue > std::numeric_limits<int>::max() )
-                {
-                    nValue = std::numeric_limits<int>::max();
-                }
-
-                m_SpinBox_Int->setValue(nValue);
-                m_Slider_Int->setValue(nValue);
-                m_nIntSliderOldValue = nValue;
-            }
-
-            m_Slider_Int->setPageStep((nMax-nMin)/5/nInc);
-        }
-        else
-        {
-            emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetRange) returned "+QString::number(error)+
-                          " "+ Helper::mapReturnCodeToString(error)) ;
-        }
-
-        m_HSpinSliderLayout_Int2 = new QHBoxLayout( );
-        m_HSpinSliderLayout_Int2->addWidget(m_Slider_Int);
-        m_HSpinSliderLayout_Int2->addWidget(m_SpinBox_Int);
-        m_HSpinSliderLayout_Int->addLayout(m_HSpinSliderLayout_Int2);
-
-        QPoint p = QCursor::pos();
-        m_IntSpinSliderWidget->setFixedHeight(60);
-        m_IntSpinSliderWidget->setWindowFlags( Qt::Tool | Qt::WindowCloseButtonHint );
-        m_IntSpinSliderWidget->setWindowTitle(m_sCurrentSelectedFeature);
-        AdjustOffscreenPosition(p, *m_IntSpinSliderWidget );
-        m_IntSpinSliderWidget->move(p.x(), p.y());
-        m_IntSpinSliderWidget->show();
-
-        connect( m_Slider_Int,  SIGNAL(valueChanged(int)), this, SLOT(onIntSliderChanged(int)) );
-        connect( m_SpinBox_Int, SIGNAL(editingFinished()), this, SLOT(onIntSpinBoxClick()) );
-        setCursor(Qt::PointingHandCursor);
-    }
-}
-
-void ControllerTreeWindow::onIntSliderReleased()
-{
-    onIntSliderChanged(m_Slider_Int->value());
-}
-
-void ControllerTreeWindow::onIntSliderChanged ( int nValue )
-{
-    /* ignore it while pressing mouse and when slider still busy */
-    if(m_bIsMousePressed || !m_bIsJobDone )
-      return;
-
-    m_bIsJobDone = false;
-    int nCurrentValue = nValue;
-
-    if( (m_nIntSliderOldValue > nValue) && (m_Slider_Int->minimum() != nValue) )
-    {
-        int nMod = nValue%m_nSliderStep;
-        nValue = nValue - nMod;
-    }
-
-    if( (0 != (nValue%m_nSliderStep)) && ( m_Slider_Int->minimum() != nValue) && ( m_Slider_Int->maximum() != nValue) )
-    {
-        nValue = nValue + (m_nSliderStep - (nValue%m_nSliderStep));
-    }
-
-    if(m_Slider_Int->hasFocus())
-    {
-        setIntegerValue (nValue);
-    }
-
-    m_nIntSliderOldValue = nCurrentValue;
-    m_bIsJobDone = true;
-}
-
-void ControllerTreeWindow::onIntSpinBoxClick()
-{
-    int nValue = m_SpinBox_Int->value();
-
-    if( (0 != (nValue%m_nSliderStep)) && ( m_SpinBox_Int->minimum() != nValue) && ( m_SpinBox_Int->maximum() != nValue) )
-    {
-        nValue = (nValue + (m_nSliderStep - (nValue%m_nSliderStep)) );
-    }
-
-    setIntegerValue (nValue);
-}
-
-void ControllerTreeWindow::setIntegerValue ( const int &nValue )
-{
-    VmbError_t error;
-
-    if( 0 == m_sFeature_IntSpinBox.compare("Width") ||0 == m_sFeature_IntSpinBox.compare("Height") )
-    {
-        /* stop Acquisition */
-        emit acquisitionStartStop("AcquisitionStopWidthHeight");
-
-        error = m_FeaturePtr_IntSpinBox->SetValue(nValue);
-        if( VmbErrorSuccess != error )
-        {
-            emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (SetValue) "+ QString::number(nValue)+" returned "+QString::number(error)+
-                          " "+ Helper::mapReturnCodeToString(error)) ;
-        }
-
-        updateCurrentIntValue();
-
-        /*start Acquisition */
-        emit acquisitionStartStop("AcquisitionStart");
-        return;
-    }
-
-    error = m_FeaturePtr_IntSpinBox->SetValue(nValue);
-    if( VmbErrorSuccess != error )
-    {
-        emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (SetValue) "+ QString::number(nValue)+" returned "+QString::number(error)+
-                      " "+ Helper::mapReturnCodeToString(error)) ;
-    }
-
-    updateCurrentIntValue();
-}
-
-void ControllerTreeWindow::updateCurrentIntValue()
-{
-    VmbInt64_t nCurrentValue = 0;
-
-    VmbError_t error = m_FeaturePtr_IntSpinBox->GetValue(nCurrentValue);
-    if(VmbErrorSuccess == error)
-    {
-        /* make sure to set back the valid value from the camera to slider and spinbox */
-        m_SpinBox_Int->setValue(nCurrentValue);
-        m_Slider_Int->setValue(nCurrentValue);
-    }
-    else
-    {
-        emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetValue) "+ QString::number(nCurrentValue)+" returned "+QString::number(error)+
-                      " "+ Helper::mapReturnCodeToString(error)) ;
-    }
-}
-
-/* VmbFeatureDataFloat */
-void ControllerTreeWindow::createFloatSliderEditBox ( const QModelIndex item )
-{
-    VmbError_t error;
-    QString sFeature_FloatSliderEditBox   = getFeatureName(item);
-
-    if (isFeatureWritable(sFeature_FloatSliderEditBox))
-    {
-        m_sCurrentSelectedFeature = m_sFeature_FloatSliderSpinBox = sFeature_FloatSliderEditBox;
-        m_FeaturePtr_FloatSliderSpinBox = getFeaturePtr(sFeature_FloatSliderEditBox);
-        if(NULL == m_FeaturePtr_FloatSliderSpinBox)
-            return;
-
-        resetControl();
-
-        error = m_FeaturePtr_FloatSliderSpinBox->GetRange(m_dMinimum, m_dMaximum);
-
-        if(VmbErrorSuccess == error)
-        {
-            /* if there's an increment, compute the correct maximum (allowing some float uncertainty) */
-            if(VmbErrorSuccess == m_FeaturePtr_FloatSliderSpinBox->GetIncrement(m_dIncrement))
-            {
-                double dSteps = floor((m_dMaximum-m_dMinimum)/m_dIncrement*1.000000000001);
-                double dMaximum = m_dMinimum + dSteps*m_dIncrement*1.000000000001;
-                if (dMaximum < m_dMaximum)
-                    m_dMaximum = dMaximum;
-            }
-            else
-            {
-                m_dIncrement = 0.0;
-            }
-        }
-        else
-        {
-            emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetRange) "+" returned "+QString::number(error)+
-                " "+ Helper::mapReturnCodeToString(error)) ;
-            return;
-        }
-
-        std::string sRepresentation;
-        m_FeaturePtr_FloatSliderSpinBox->GetRepresentation(sRepresentation);
-
-        /* use a logarithmic slider for exposure */
-        if( 0 == sFeature_FloatSliderEditBox.compare("Exposure Time") || 0 == sFeature_FloatSliderEditBox.compare("ExposureTimeAbs")
-            || 0 == sRepresentation.compare("Logarithmic"))
-        {
-            createLogarithmicSlider(item);
-            return;
-        }
-
-        m_FloatSliderEditWidget = new QWidget(this);
-        m_HSpinSliderLayout_Float = new QHBoxLayout( m_FloatSliderEditWidget );
-
-        /* Line Edit */
-        m_EditBox_Float = new QLineEdit(0);
-        m_EditBox_Float->setObjectName("value");    //mark as the element of this dialog that contains the value, used in "updateWidget()"
-
-        /* GigE: Gain, Hue
-        *  1394: Trigger Delay
-        *  They will be treated as Floating in fact they are int
-        */
-        double dValue = 0;
-        error = m_FeaturePtr_FloatSliderSpinBox->GetValue(dValue);
-
-        if(VmbErrorSuccess == error)
-        {
-            m_EditBox_Float->setText( QString::number( dValue ));
-        }
-        else
-        {
-            emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetValue) "+ QString::number(dValue,'g',16)+" returned "+QString::number(error)+
-                            " "+ Helper::mapReturnCodeToString(error)) ;
-        }
-
-        /* Slider */
-        m_Slider_Float = new QwtSlider(Qt::Horizontal, m_FloatSliderEditWidget);
-        m_Slider_Float->setGroove(true);
-        m_Slider_Float->setTrough(false);
-        m_Slider_Float->setScalePosition(static_cast<QwtSlider::ScalePosition>(0) /*::NoScale*/); // Unfortunately older g++ compiler does not support enum as namespace or class
-        m_Slider_Float->setScaleEngine( new QwtLinearScaleEngine );
-        m_Slider_Float->setHandleSize(QSize( 12, 18 ));
-        m_Slider_Float->setFocusPolicy( Qt::StrongFocus);
-        m_Slider_Float->installEventFilter(this);
-
-        if (abs(m_dIncrement) > 0.0000001)
-        {
-            m_Slider_Float->setTotalSteps(ceil((m_dMaximum-m_dMinimum)/m_dIncrement));
-        }
-
-        m_Slider_Float->setScale( m_dMinimum, m_dMaximum );
-        m_Slider_Float->setValue( dValue );
-
-        m_HSliderEditLayout_Float2 = new QHBoxLayout();
-        m_HSliderEditLayout_Float2->addWidget(m_Slider_Float);
-        m_Slider_Float->setMinimumWidth(200);
-        m_EditBox_Float->setMinimumWidth(60);
-        m_EditBox_Float->setMaximumWidth(80);
-        m_HSliderEditLayout_Float2->addWidget(m_EditBox_Float);
-        m_EditBox_Float->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-        m_HSpinSliderLayout_Float->addLayout(m_HSliderEditLayout_Float2);
-
-        QPoint p = QCursor::pos();
-        m_FloatSliderEditWidget->setFixedHeight(60);
-        m_FloatSliderEditWidget->setWindowFlags( Qt::Tool | Qt::WindowCloseButtonHint );
-        m_FloatSliderEditWidget->setWindowTitle(m_sCurrentSelectedFeature);
-        AdjustOffscreenPosition(p, *m_FloatSliderEditWidget );
-        m_FloatSliderEditWidget->move(p.x(), p.y());
-        m_FloatSliderEditWidget->show();
-
-        /* As of Vimba >= 1.4, float features other than ExposureTime don't use spin box anymore */
-        connect( m_Slider_Float, SIGNAL( valueChanged( double ) ), this, SLOT( onFloatSliderChanged( double ) ) );
-        connect( m_EditBox_Float, SIGNAL(editingFinished()), this, SLOT(onFloatEditFinished()) );
-        setCursor(Qt::PointingHandCursor);
-    }
-}
-
-void ControllerTreeWindow::onFloatSliderReleased()
-{
-    onFloatSliderChanged(m_Slider_Float->value());
-}
-
-void ControllerTreeWindow::onFloatSliderChanged( double dValue )
-{
-    /* ignore it while pressing mouse and when slider still busy */
-    if(m_bIsMousePressed || !m_bIsJobDone )
-        return;
-
-    m_bIsJobDone = false;
-
-    if( dValue > (m_dMaximum * 0.995) )
-        dValue = m_dMaximum;
-
-    if(m_Slider_Float->hasFocus())
-    {
-        m_EditBox_Float->setText( QString::number(dValue));
-        /* As of Vimba >= 1.4, float features other than ExposureTime don't use spin box anymore */
-        onFloatEditFinished();
-    }
-
-    m_bIsJobDone = true;
-}
-
-void ControllerTreeWindow::onFloatEditFinished()
-{
-    double dValue = m_EditBox_Float->text().toDouble()*1.0000000000001; // allow some float imprecision
-    setFloatingValue (dValue);
-}
-
-void ControllerTreeWindow::setFloatingValue ( const double &dValue )
-{
-    double dCurrentValue = dValue;
-    VmbError_t error;
-
-    /* restrict to the allowed values */
-    if( m_dMaximum < dValue )
-    {
-        dCurrentValue = m_dMaximum;
-    }
-    else if( m_dMinimum > dValue )
-    {
-        dCurrentValue = m_dMinimum;
-    }
-    // removed handling for increment because of rounding errors
-    // else if ( m_dIncrement != 0.0 )
-    // {
-    //     dCurrentValue = floor((dValue-m_dMinimum)/m_dIncrement)*m_dIncrement + m_dMinimum;
-    // }
-    error = m_FeaturePtr_FloatSliderSpinBox->SetValue(dCurrentValue);
-
-    if(VmbErrorSuccess == error)
-    {
-        error = m_FeaturePtr_FloatSliderSpinBox->GetValue(dCurrentValue);
-
-        if(VmbErrorSuccess == error)
-        {
-            const QString newValue = QString::number(dCurrentValue);
-            if( m_EditBox_Float->text() != newValue )
-            {
-                m_EditBox_Float->setText( newValue );
-            }
-
-            if(!m_Slider_Float->hasFocus() || (!m_bIsGigE) || ( 0 == m_sCurrentSelectedFeature.compare("ColorTransformationValue")) )
-            { /* Not GigE (except ColorTransformationValue), especially to handle Gamma feature. Make sure to set the current feature value back to slider */
-                m_Slider_Float->setValue(dCurrentValue);
-            }
-        }
-
-        /* reset all fps counters whenever shutter value has been changed */
-        if( 0 == m_sFeature_FloatSliderSpinBox.compare("Exposure Time") ||
-            0 == m_sFeature_FloatSliderSpinBox.compare("ExposureTimeAbs"))
-        {
-            emit resetFPS();
-        }
-    }
-    else
-    {
-        emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (SetValue) "+ QString::number(dValue)+" returned "+QString::number(error)+
-                      " "+ Helper::mapReturnCodeToString(error)) ;
-    }
-}
-
-/* Logarithmic slider */
-void ControllerTreeWindow::createLogarithmicSlider ( const QModelIndex &item )
-{
-    QString sFeature_FloatSliderSpinBox = getFeatureName(item);
-
-    if (isFeatureWritable(sFeature_FloatSliderSpinBox))
-    {
-        m_sFeature_FloatSliderSpinBox = sFeature_FloatSliderSpinBox;
-
-        m_LogSliderWidget  = new QWidget(this);
-        m_HLogSliderLayout = new QHBoxLayout( m_LogSliderWidget );
-        m_LogSliderWidget->setFixedHeight(80);
-        m_LogSliderWidget->setMinimumWidth(400);
-
-        /* LogSlider */
-        m_LogSlider = new QwtSlider( Qt::Horizontal, m_LogSliderWidget);
-        m_LogSlider->setGroove(true);
-        m_LogSlider->setTrough(false);
-        m_LogSlider->setScalePosition(static_cast<QwtSlider::ScalePosition>(2) /*::TrailingScale*/); // Unfortunately  oder g++ compiler does not support enum as namespace or class
-        m_LogSlider->setScaleEngine(new QwtLogScaleEngine(10));
-        m_LogSlider->setHandleSize(QSize(12, 18 ));
-        m_LogSlider->setScale( m_dMinimum, m_dMaximum );
-
-        m_LogSlider->setScaleMaxMinor( 10 );
-        m_HLogSliderLayout->addWidget(m_LogSlider);
-        m_LogSlider->setFocusPolicy( Qt::StrongFocus);
-        connect( m_LogSlider, SIGNAL( valueChanged( double ) ), this, SLOT( setLogarithmicSliderValue( double ) ) );
-
-        m_EditBox_Float = new QLineEdit(0);
-        m_EditBox_Float->setObjectName("value");    //mark as the element of this dialog that contains the value, used in "updateWidget()"
-        m_EditBox_Float->setMinimumWidth(60);
-        m_EditBox_Float->setMaximumWidth(90);
-        m_HLogSliderLayout->addWidget(m_EditBox_Float);
-        m_EditBox_Float->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-        m_EditBox_Float->setFocusPolicy( Qt::StrongFocus);
-        connect( m_EditBox_Float, SIGNAL(editingFinished()), this, SLOT(onLogarithmicFloatSpinBoxClick()) );
-
-        double dCurrentValue = 0;
-        m_FeaturePtr_FloatSliderSpinBox->GetValue(dCurrentValue);
-        if (abs(m_dIncrement) > 0.0001)
-        {
-            dCurrentValue = floor((dCurrentValue-m_dMinimum)/m_dIncrement+0.00000001)*m_dIncrement + m_dMinimum;
-            m_LogSlider->setTotalSteps(ceil((m_dMaximum-m_dMinimum)/m_dIncrement));
-        }
-        m_EditBox_Float->setText( QString::number( dCurrentValue ));
-        m_LogSlider->setValue(dCurrentValue);
-        m_LogSlider->installEventFilter(this);
-
-        m_LogSliderWidget->setWindowTitle( sFeature_FloatSliderSpinBox + " (Min: " + QString::number(m_dMinimum,'g',6) + ", Max: " + QString::number(m_dMaximum,'g', 10) + ") "+ m_sCameraID );
-        m_LogSliderWidget->setWindowFlags(Qt::WindowTitleHint);
-        QPoint p = QCursor::pos();
-        m_LogSliderWidget->setWindowFlags( Qt::Tool );
-        AdjustOffscreenPosition(p, *m_LogSliderWidget );
-        m_LogSliderWidget->move(p.x(), p.y());
-        m_LogSliderWidget->show();
-
-    }
-}
-
-void ControllerTreeWindow::onLogarithmicFloatSpinBoxClick()
-{
-    setLogarithmicFloatingValue ( m_EditBox_Float->text().toDouble() );
-}
-
-void ControllerTreeWindow::onLogarithmicSliderReleased()
-{
-    setLogarithmicSliderValue(m_LogSlider->value());
-}
-
-void ControllerTreeWindow::setLogarithmicSliderValue( double v )
-{
-    /* ignore it while pressing mouse and when slider still busy */
-    if(m_bIsMousePressed || !m_bIsJobDone )
-        return;
-
-    m_bIsJobDone = false;
-
-    double dValue = v;
-
-    if( dValue > (m_dMaximum * 0.95) )
-        dValue = m_dMaximum;
-
-    if(m_LogSlider->hasFocus())
-        setLogarithmicFloatingValue ( dValue );
-
-    m_bIsJobDone = true;
-}
-
-void ControllerTreeWindow::setLogarithmicFloatingValue ( const double &dValue )
-{
-    VmbError_t Result;
-    double dValueToWrite = dValue;
-    if(dValue < m_dMinimum)
-    {
-        dValueToWrite = m_dMinimum;
-    }
-    else if(dValue > m_dMaximum)
-    {
-        dValueToWrite = m_dMaximum;
-    }
-    // removed adjustments for increments due to rounding problems
-    // else if ( m_dIncrement != 0.0 )
-    // {
-    //     dValueToWrite = floor((dValueToWrite + 0.00001-m_dMinimum)/m_dIncrement)*m_dIncrement + m_dMinimum;
-    // }
-
-    Result = m_FeaturePtr_FloatSliderSpinBox->SetValue(dValueToWrite);
-    if( Result != VmbErrorSuccess)
-    {
-        emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (SetValue) "+ " returned "+QString::number(Result)+
-            " "+ Helper::mapReturnCodeToString(Result)) ;
-        return;
-    }
-    double dCurrentValue = dValueToWrite;
-    Result = m_FeaturePtr_FloatSliderSpinBox->GetValue(dCurrentValue);
-    if( Result != VmbErrorSuccess)
-    {
-        emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetValue) "+ " returned "+QString::number(Result)+
-            " "+ Helper::mapReturnCodeToString(Result)) ;
-        return;
-    }
-
-    m_LogSlider->setValue(dCurrentValue);
-
-    m_EditBox_Float->setText( QString::number( dCurrentValue ));
-    m_LogSlider->setToolTip(QString::number(dCurrentValue,'g',16));
-
-    emit resetFPS();
-}
-
-/* VmbFeatureDataBool */
-void ControllerTreeWindow::createBooleanCheckBox ( const QModelIndex item )
-{
-    QString sFeature_CheckBox   = getFeatureName(item);
-
-    if (isFeatureWritable(sFeature_CheckBox))
-    {
-        m_sCurrentSelectedFeature = m_sFeature_CheckBox = sFeature_CheckBox;
-
-        m_FeaturePtr_CheckBox = getFeaturePtr(m_sFeature_CheckBox);
-        if(NULL == m_FeaturePtr_CheckBox)
-            return;
-
-        resetControl();
-
-        m_BooleanWidget  = new QWidget(this);
-        m_HBooleanLayout = new QHBoxLayout (m_BooleanWidget);
-        m_CheckBox_Bool = new QCheckBox (QString(""));
-        m_CheckBox_Bool->setMaximumHeight(20);
-        m_CheckBox_Bool->setObjectName("value");    //mark as the element of this dialog that contains the value, used in "updateWidget()"
-        m_HBooleanLayout2 = new QHBoxLayout();
-        m_HBooleanLayout2->addWidget(m_CheckBox_Bool);
-        m_HBooleanLayout->addLayout(m_HBooleanLayout2);
-
-        bool bValue = false;
-        VmbError_t error = m_FeaturePtr_CheckBox->GetValue(bValue);
-        if (VmbErrorSuccess == error)
-        {
-            m_CheckBox_Bool->setChecked(bValue);
-        }
-        else
-        {
-            m_CheckBox_Bool->setChecked(false);
-            emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetValue) "+ " returned "+QString::number(error)+
-                " "+ Helper::mapReturnCodeToString(error)) ;
-        }
-
-        QPoint p = QCursor::pos();
-        m_BooleanWidget->setFixedHeight(60);
-        m_CheckBox_Bool->setText(m_sCurrentSelectedFeature);
-
-        m_BooleanWidget->setWindowFlags( Qt::Tool | Qt::WindowCloseButtonHint );
-        m_BooleanWidget->setWindowTitle(m_sCurrentSelectedFeature);
-        AdjustOffscreenPosition(p, *m_BooleanWidget );
-        m_BooleanWidget->move(p.x(), p.y());
-        m_BooleanWidget->show();
-
-        connect( m_CheckBox_Bool, SIGNAL(clicked(bool)), this, SLOT(onBoolCheckBoxClick(bool)) );
-        setCursor(Qt::PointingHandCursor);
-    }
-}
-
-void ControllerTreeWindow::onBoolCheckBoxClick ( bool bValue )
-{
-    bool bCurrentValue = false;
-
-    VmbError_t error = m_FeaturePtr_CheckBox->SetValue(bValue);
-    if(VmbErrorSuccess == error)
-    {
-        error = m_FeaturePtr_CheckBox->GetValue(bCurrentValue);
-        if(VmbErrorSuccess == error)
-        {
-            QString sValue = "false";
-            (true == bCurrentValue) ? sValue = "true" : sValue = "false";
-            m_CheckBox_Bool->setChecked(bCurrentValue);
-        }
-        else
-        {
-            emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetValue) "+ " returned "+QString::number(error)+
-                          " "+ Helper::mapReturnCodeToString(error)) ;
-        }
-    }
-    else
-    {
-        emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (SetValue) "+ QString::number(bValue) + " returned "+QString::number(error)+
-                      " "+ Helper::mapReturnCodeToString(error)) ;
-    }
-}
-
-/* VmbFeatureDataString */
-void ControllerTreeWindow::createStringEditBox ( const QModelIndex item )
-{
-    QString sFeature_StringEditBox = getFeatureName(item);
-
-    if (isFeatureWritable(sFeature_StringEditBox))
-    {
-        m_sCurrentSelectedFeature = m_sFeature_StringEditBox = sFeature_StringEditBox;
-
-        m_FeaturePtr_StringEditBox = getFeaturePtr(m_sFeature_StringEditBox);
-        if(NULL == m_FeaturePtr_StringEditBox)
-            return;
-
-        resetControl();
-
-        m_EditWidget = new QWidget (this);
-        m_HEditLayout = new QHBoxLayout(m_EditWidget);
-        m_TextEdit_String = new QLineEdit();
-        m_TextEdit_String->setObjectName("value");  //mark as the element of this dialog that contains the value, used in "updateWidget()"
-        m_TextEdit_String->setMaximumHeight(20);
-        m_HEditLayout2 = new QHBoxLayout();
-        m_HEditLayout2->addWidget(m_TextEdit_String);
-        m_HEditLayout->addLayout(m_HEditLayout2);
-
-        std::string sValue;
-        VmbError_t error = m_FeaturePtr_StringEditBox->GetValue(sValue);
-
-        if(VmbErrorSuccess == error)
-            m_TextEdit_String->setText(QString::fromUtf8(sValue.c_str()));
-        else
-            m_TextEdit_String->setText(QString::fromStdString(" "));
-
-        QPoint p = QCursor::pos();
-        m_EditWidget->setFixedHeight(60);
-        m_EditWidget->setWindowFlags( Qt::Tool | Qt::WindowCloseButtonHint );
-        m_EditWidget->setWindowTitle(m_sCurrentSelectedFeature);
-        AdjustOffscreenPosition(p, *m_EditWidget );
-        m_EditWidget->move(p.x(), p.y());
-        m_EditWidget->show();
-
-        connect( m_TextEdit_String, SIGNAL(returnPressed()), this, SLOT(onEditText()) );
-        setCursor(Qt::PointingHandCursor);
-    }
-}
-
-void ControllerTreeWindow::onEditText()
-{
-    QString sText = m_TextEdit_String->text();
-    VmbError_t error = m_FeaturePtr_StringEditBox->SetValue((const char*)sText.toAscii());
-
-    if(VmbErrorSuccess == error)
-    {
-        std::string sCurrentValue;
-        error = m_FeaturePtr_StringEditBox->GetValue(sCurrentValue);
-        if(VmbErrorSuccess == error)
-        {
-            m_TextEdit_String->setText(QString::fromStdString(sCurrentValue));
-        }
-        else
-        {
-            m_TextEdit_String->setText("");
-            emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (GetStringValue) "+ " returned "+QString::number(error)+
-                          " "+ Helper::mapReturnCodeToString(error)) ;
-        }
-    }
-    else
-    {
-        emit logging( "ERROR Feature: " + m_sCurrentSelectedFeature + " (SetStringValue) "+ sText  + " returned "+QString::number(error)+
-            " "+ Helper::mapReturnCodeToString(error)) ;
-    }
-}
-
-void ControllerTreeWindow::createLineEdit ( const QModelIndex &item )
-{
-    QString sFeature = getFeatureName(item);
-
-    if (isFeatureWritable(sFeature))
-    {
-        m_sCurrentSelectedFeature = m_sFeature_StringLineEdit = sFeature;
-        m_FeaturePtr_LineEdit = getFeaturePtr(m_sFeature_StringLineEdit);
-        if(NULL == m_FeaturePtr_LineEdit)
-            return;
-        VmbFeatureDataType dt = VmbFeatureDataUnknown;
-        VmbError_t error = m_FeaturePtr_LineEdit->GetDataType( dt );
-
-        resetControl();
-
-        QString sName = getFeatureNameFromMap(m_sCurrentSelectedFeature);
-        std::string sRepresentation;
-        m_FeaturePtr_LineEdit->GetRepresentation( sRepresentation );
-
-        m_LineEditWidget = new QWidget(this);
-        m_HLineEditLayout = new QHBoxLayout( m_LineEditWidget );
-
-        /* add LineEdit that allows 0-255 */
-        /* add Hex Label */
-        m_LineEdit = new QLineEdit (m_LineEditWidget);
-        m_LineEdit->setObjectName("value");     //mark as the element of this dialog that contains the value, used in "updateWidget()"
-
-        if ( VmbFeatureDataInt == dt )
-        {
-            if( Helper::needsIPv4Format(sName, sRepresentation))
-            {
-                m_HexLabel = new QLabel ("", m_LineEditWidget);
-                QRegExp rxIp("(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])");
-                m_LineEdit->setValidator(new QRegExpValidator(rxIp, m_LineEdit));
-                m_LineEdit->setMinimumWidth(20);
-            }
-            else if ( sRepresentation == "HexNumber" )
-            {
-                m_HexLabel = new QLabel (" 0x", m_LineEditWidget);
-                QString s;
-
-                QRegExp rxIp("([0-9a-fA-F]){1,8}");
-                m_LineEdit->setValidator(new QRegExpValidator(rxIp, m_LineEdit));
-                m_LineEdit->setMaxLength(8);
-            }
-            else // > sint32
-            {
-                m_HexLabel = new QLabel ("", m_LineEditWidget);
-                QRegExp rxIp("-?[0-9]*");
-                m_LineEdit->setValidator(new QRegExpValidator(rxIp, m_LineEdit));
-                m_LineEdit->setMinimumWidth(20);
-            }
-        }
-        else if( VmbFeatureDataFloat == dt )
-        {
-            m_HexLabel = new QLabel ("", m_LineEditWidget);
-            m_LineEdit->setValidator(new QDoubleValidator(NULL));
-            m_LineEdit->setMinimumWidth(20);
-        }
-        else
-        {
-            return;
-        }
-
-        m_HexLabel->setMaximumHeight(20);
-        m_LineEdit->setMaximumHeight(20);
-
-        m_HLineEditLayout2 = new QHBoxLayout( );
-        m_HLineEditLayout2->addWidget(m_HexLabel);
-        m_HLineEditLayout2->addWidget(m_LineEdit);
-        m_HLineEditLayout->addLayout(m_HLineEditLayout2);
-
-        if ( VmbFeatureDataInt == dt )
-        {
-            VmbInt64_t nValue64 = 0;
-            error = m_FeaturePtr_LineEdit->GetValue(nValue64);
-            if(VmbErrorSuccess == error)
-            {
-                if( Helper::needsIPv4Format(sName, sRepresentation))
-                {
-                    m_LineEdit->insert(Helper::IPv4ToString(nValue64));
-                }
-                /* Handling of features like DeviceAccessRegisterValue or DeviceAccessRegisterAddress */
-                else if ( sRepresentation == "HexNumber" )
-                {
-                    std::string sHexValue("");
-                    QString sQHexValue;
-                    error = m_FeaturePtr_LineEdit->GetValue(sHexValue);
-                    if (!sHexValue.empty())
-                    {
-                        sQHexValue.fromStdString(sHexValue);
-                    }
-                    else
-                    {
-                        sQHexValue.sprintf("%x", nValue64);
-                    }
-                    m_LineEdit->insert(sQHexValue);
-                }
-                else
-                {
-                    m_LineEdit->insert(QString::number( nValue64 ));
-                }
-            }
-            else
-            {
-                m_LineEdit->insert("Read Error");
-            }
-        }
-        else if ( VmbFeatureDataFloat == dt )
-        {
-            double dValue = 0;
-            error = m_FeaturePtr_LineEdit->GetValue( dValue );
-            if( VmbErrorSuccess == error )
-            {
-                m_LineEdit->insert(QString::number( dValue ));
-            }
-            else
-            {
-                m_LineEdit->insert("Read Error");
-            }
-        }
-        else
-        {
-            m_LineEdit->insert("Read Error");
-        }
-
-        QPoint p = QCursor::pos();
-        m_LineEditWidget->setFixedHeight(60);
-        m_LineEditWidget->setWindowFlags( Qt::Tool | Qt::WindowCloseButtonHint );
-        m_LineEditWidget->setWindowTitle(m_sCurrentSelectedFeature);
-        AdjustOffscreenPosition(p, *m_LineEditWidget );
-        m_LineEditWidget->move(p.x(), p.y());
-        m_LineEditWidget->show();
-
-        bool success=false;
-        success = connect(m_LineEdit, SIGNAL(returnPressed()), this, SLOT(onConfirmClick()) );
-        setCursor(Qt::PointingHandCursor);
-    }
-}
-
-void ControllerTreeWindow::onConfirmClick()
-{
-    m_HexLabel->clear();
-    VmbError_t error;
-    bool bOk;
-
-    QString sName = getFeatureNameFromMap(m_sCurrentSelectedFeature);
-
-    std::string sRepresentation;
-    FeaturePtr pFeature = getFeaturePtr( m_sCurrentSelectedFeature );
-    error = pFeature->GetRepresentation( sRepresentation );
-    VmbFeatureDataType dt = VmbFeatureDataUnknown;
-    pFeature->GetDataType( dt );
-
-    if( VmbFeatureDataInt == dt )
-    {
-        qlonglong lValue = 0;
-
-        if( Helper::needsIPv4Format(sName, sRepresentation))
-        {
-            m_HexLabel->setText("");
-            lValue = Helper::StringToIPv4(m_LineEdit->displayText());
-        }
-        else if ( sRepresentation == "HexNumber")
-        {
-            m_HexLabel->setText(" 0x");
-            /* convert hex to qlonglong */
-            lValue = m_LineEdit->text().toLongLong(&bOk, 16);
-        }
-        else
-        {
-            m_HexLabel->setText("");
-            lValue = m_LineEdit->text().toLongLong(&bOk);
-            if ( !bOk && !lValue )
-            {
-                lValue = m_LineEdit->text().contains('-') ? std::numeric_limits<long long>::min() : std::numeric_limits<long long>::max();
-            }
-        }
-
-        VmbInt64_t nCurrentValue64 = 0, nMin = 0, nMax = 0;
-        VmbInt64_t nValue64 = (VmbInt64_t)lValue;
-        error = pFeature->GetRange(nMin, nMax);
-        if ( VmbErrorSuccess == error )
-        {
-            if ( nMin > nValue64 )
-            {
-                nValue64 = nMin;
-            }
-            if ( nMax < nValue64 )
-            {
-                nValue64 = nMax;
-            }
-            error = m_FeaturePtr_LineEdit->SetValue(nValue64);
-        }
-
-        if(VmbErrorSuccess == error)
-        {
-            /* if set is ok, read the value again and put it to GUI */
-            error = m_FeaturePtr_LineEdit->GetValue(nCurrentValue64);
-            if(VmbErrorSuccess != error)
-            {
-                if( Helper::needsIPv4Format(sName, sRepresentation))
-                {
-                    m_HexLabel->setText(tr("READ ERROR!!!"));
-                }
-                else if ( sRepresentation == "HexNumber" )
-                {
-                    m_HexLabel->setText(tr("READ ERROR!!!")+" 0x");
-                }
-                else
-                {
-                    m_HexLabel->setText(tr("READ ERROR!!!"));
-                }
-
-                return;
-            }
-
-            m_LineEdit->clear();
-
-            if( Helper::needsIPv4Format(sName, sRepresentation))
-            {
-                m_LineEdit->insert(Helper::IPv4ToString(nCurrentValue64) );
-            }
-            else if ( sRepresentation == "HexNumber" )
-            {
-                m_LineEdit->insert(QString::number(nCurrentValue64, 16));
-            }
-            else
-            {
-                m_LineEdit->insert(QString::number(nCurrentValue64));
-            }
-        }
-        else
-        {
-            if( Helper::needsIPv4Format(sName, sRepresentation))
-            {
-                m_HexLabel->setText(tr("WRITE ERROR!!!"));
-            }
-            else if ( sRepresentation ==  "HexNumber" )
-            {
-                m_HexLabel->setText(tr("WRITE ERROR!!!")+" 0x");
-            }
-            else
-            {
-                m_HexLabel->setText(tr("WRITE ERROR!!!"));
-            }
-        }
-    }
-    else if ( VmbFeatureDataFloat == dt )
-    {
-        double dValue           = m_LineEdit->text().toDouble( &bOk );
-        double dCurrentValue    = 0.0, dMin = 0.0, dMax = 0.0;
-
-        if ( !bOk && !dValue )
-        {
-            m_HexLabel->setText(tr("ERROR!!!"));
-            return;
-        }
-        error = pFeature->GetRange( dMin, dMax );
-        if ( VmbErrorSuccess == error )
-        {
-            if ( dMin > dValue )
-            {
-                dValue = dMin;
-            }
-            if ( dMax < dValue )
-            {
-                dValue = dMax;
-            }
-            error = m_FeaturePtr_LineEdit->SetValue(dValue);
-        }
-
-        if(VmbErrorSuccess == error)
-        {
-            /* if set is ok, read the value again and put it to GUI */
-            error = m_FeaturePtr_LineEdit->GetValue( dCurrentValue );
-            if( VmbErrorSuccess != error )
-            {
-                {
-                    m_HexLabel->setText(tr("READ ERROR!!!"));
-                }
-
-                return;
-            }
-
-            m_LineEdit->clear();
-
-            m_LineEdit->insert( QString::number( dCurrentValue ));
-        }
-        else
-        {
-            m_HexLabel->setText(tr("WRITE ERROR!!!"));
-        }
-    }
-}
-
-bool ControllerTreeWindow::eventFilter(QObject *object, QEvent *event)
-{
-    /* set the slider focus back when loosing on scrolling, e.g scrolling right after changing spinbox */
-    if (event->type() == QEvent::Wheel)
-    {
-        if (object == m_Slider_Int)
-        {
-            if(!m_Slider_Int->hasFocus())
-                m_Slider_Int->setFocus();
-        }
-
-        if (object == m_Slider_Float)
-        {
-            if(!m_Slider_Float->hasFocus())
-                m_Slider_Float->setFocus();
-        }
-
-        if (object == m_LogSlider)
-        {
-            if(!m_LogSlider->hasFocus())
-                m_LogSlider->setFocus();
-        }
-    }
-
-    if (event->type() == QEvent::MouseButtonPress)
-    {
-        m_bIsMousePressed = true;
-    }
-
-    if (event->type() == QEvent::MouseButtonRelease)
-    {
-        m_bIsMousePressed = false;
-
-        if (object == m_Slider_Int)
-            onIntSliderReleased();
-
-        if (object == m_Slider_Float)
-            onFloatSliderReleased();
-
-        if (object == m_LogSlider)
-            onLogarithmicSliderReleased();
-    }
-
-    return false;
-}
-
-void ControllerTreeWindow::resetControl()
-{
-    /* delete button */
-    if( NULL != m_ButtonWidget )
-    {
-        disconnect( m_CmdButton, SIGNAL(clicked()), this, SLOT(onCmdButtonClick()) );
-        delete m_ButtonWidget;
-
-        m_ButtonWidget   = NULL;
-        m_CmdButton      = NULL;
-        m_HButtonLayout  = NULL;
-        m_HButtonLayout2 = NULL;
-    }
-
-    /* delete ComboBox */
-    if( NULL != m_EnumComboBox )
-    {
-        disconnect( m_EnumComboBox, SIGNAL(activated(const QString &)), this, SLOT(onEnumComboBoxClick(const QString &)) );
-        delete m_ComboWidget;
-
-        m_ComboWidget   = NULL;
-        m_EnumComboBox  = NULL;
-        m_HComboLayout  = NULL;
-        m_HComboLayout2 = NULL;
-    }
-
-    /* delete SpinBox+Slider Int */
-    if( ( NULL != m_SpinBox_Int ) && ( NULL != m_Slider_Int ) &&
-        ( NULL != m_HSpinSliderLayout_Int ) && ( NULL != m_IntSpinSliderWidget))
-    {
-        removeEventFilter(m_Slider_Int);
-        disconnect( m_Slider_Int,  SIGNAL(valueChanged(int)), this, SLOT(onIntSliderChanged(int)) );
-        disconnect( m_SpinBox_Int, SIGNAL(editingFinished()), this, SLOT(onIntSpinBoxClick()) );
-        delete m_IntSpinSliderWidget;
-
-        m_IntSpinSliderWidget    = NULL;
-        m_SpinBox_Int            = NULL;
-        m_Slider_Int             = NULL;
-        m_HSpinSliderLayout_Int  = NULL;
-        m_HSpinSliderLayout_Int2 = NULL;
-    }
-
-    /* delete SpinBox+Slider Float */
-    if( ( NULL != m_EditBox_Float ) && ( NULL != m_Slider_Float ) &&
-        ( NULL != m_HSpinSliderLayout_Float ) && ( NULL != m_FloatSliderEditWidget))
-    {
-        removeEventFilter(m_Slider_Float);
-        disconnect( m_Slider_Float,  SIGNAL(valueChanged(double)), this, SLOT(onFloatSliderChanged(double)) );
-        /* As of Vimba >= 1.4, float features other than ExposureTime don't use spin box anymore */
-        disconnect( m_EditBox_Float, SIGNAL(editingFinished()), this, SLOT(onFloatEditFinished()) );
-        delete m_FloatSliderEditWidget;
-
-        m_FloatSliderEditWidget    = NULL;
-        m_EditBox_Float            = NULL;
-        m_Slider_Float             = NULL;
-        m_HSpinSliderLayout_Float  = NULL;
-        m_HSliderEditLayout_Float2 = NULL;
-    }
-
-    /* delete bool CheckBox  */
-    if( NULL != m_CheckBox_Bool )
-    {
-        disconnect( m_CheckBox_Bool, SIGNAL(clicked(bool)), this, SLOT(onBoolCheckBoxClick(bool)) );
-        delete m_BooleanWidget;
-
-        m_BooleanWidget   = NULL;
-        m_CheckBox_Bool   = NULL;
-        m_HBooleanLayout  = NULL;
-        m_HBooleanLayout2 = NULL;
-    }
-
-    /* delete TextEdit */
-    if( NULL != m_TextEdit_String )
-    {
-        disconnect( m_TextEdit_String, SIGNAL(returnPressed()), this, SLOT(onEditText()) );
-        delete m_EditWidget;
-
-        m_EditWidget      = NULL;
-        m_TextEdit_String = NULL;
-        m_HEditLayout     = NULL;
-        m_HEditLayout2    = NULL;
-    }
-
-    /* delete LineEdit for REG ADD or Multicast IP Address*/
-    if( NULL != m_LineEdit )
-    {
-        disconnect( m_LineEdit, SIGNAL(returnPressed()), this, SLOT(onConfirmClick()) );
-        delete m_LineEditWidget;
-
-        m_LineEditWidget   = NULL;
-        m_LineEdit         = NULL;
-        m_HexLabel         = NULL;
-        m_HLineEditLayout  = NULL;
-        m_HLineEditLayout2 = NULL;
-    }
-
-    if ( NULL != m_HexWindow )
-    {
-        /* windows has been closed , just reset it */
-        m_HexWindow = NULL;
-        m_RawData.clear();
-    }
-
-    /* delete Logarithmic Slider */
-    if( NULL != m_LogSliderWidget )
-    {
-        removeEventFilter(m_LogSlider);
-        disconnect( m_LogSlider, SIGNAL( valueChanged( double ) ), this, SLOT( setLogarithmicSliderValue( double ) ) );
-        delete m_LogSliderWidget;
-
-        m_LogSliderWidget   = NULL;
-        m_LogSlider         = NULL;
-        m_HLogSliderLayout  = NULL;
-        m_EditBox_Float     = NULL;
-    }
-}
-
-void ControllerTreeWindow::showControl( const bool bIsShow )
-{
-    if ( m_IntSpinSliderWidget )
-        m_IntSpinSliderWidget->setVisible( bIsShow );
-    else if ( m_ButtonWidget )
-        m_ButtonWidget->setVisible( bIsShow );
-    else if ( m_ComboWidget )
-        m_ComboWidget->setVisible( bIsShow );
-    else if ( m_FloatSliderEditWidget )
-        m_FloatSliderEditWidget->setVisible( bIsShow );
-    else if ( m_BooleanWidget )
-        m_BooleanWidget->setVisible( bIsShow );
-    else if ( m_EditWidget )
-        m_EditWidget->setVisible( bIsShow );
-    else if ( m_LineEditWidget )
-        m_LineEditWidget->setVisible( bIsShow );
-    else if ( m_LogSliderWidget )
-        m_LogSliderWidget->setVisible( bIsShow );
-}
-
-void ControllerTreeWindow::AdjustOffscreenPosition(QPoint &p, QWidget &parentWidget)
-{
-    Q_ASSERT( &parentWidget && "parentWidget is NULL reference" );
-
-    /* out of screen? first identify the current screen */
-    QDesktopWidget desktop;
-    const QRect currentScreenGeometry = desktop.screenGeometry(desktop.screenNumber(p));
-
-    parentWidget.adjustSize();
-
-    /* target position: above and to the right of the targeted position p.x/p.y. */
-    p.setY(p.y() - 10 - parentWidget.frameGeometry().height());
-
-
-    /* if parts of the window would appear offscreen, move to the left */
-    int horizontalCorrection = (p.x() - currentScreenGeometry.right()) + parentWidget.frameGeometry().width();
-    if( horizontalCorrection > 0 )
-        p.setX (p.x() - horizontalCorrection);
-
-    /*  if vertical position would be offscreen, show below the current line */
-    if( currentScreenGeometry.top() - p.y() > 0 )
-        p.setY (p.y() + 24 + parentWidget.frameGeometry().height());
-}
-
-void ControllerTreeWindow::closeControls()
-{
-    resetControl();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/ControllerTreeWindow.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/ControllerTreeWindow.h
deleted file mode 100644
index 2896866373da13b55473e9d75d195832f0a588c4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/ControllerTreeWindow.h
+++ /dev/null
@@ -1,294 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012-2019 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ControllerTreeWindow.h
-
-  Description: All about features control tree
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef CONTROLLERTREEWINDOW_H
-#define CONTROLLERTREEWINDOW_H
-
-#include <QMap>
-#include <QMutex>
-#include <QTreeView>
-
-#include <VimbaCPP/Include/IFeatureObserver.h>
-
-using AVT::VmbAPI::FeaturePtr;
-using AVT::VmbAPI::FeaturePtrVector;
-using AVT::VmbAPI::CameraPtr;
-using AVT::VmbAPI::IFeatureObserverPtr;
-
-class ExComboBox;
-class HexMainWindow;
-class IntSpinBox;
-class ItemDelegate;
-class SortFilterProxyModel;
-class MultiCompleter;
-class QCheckBox;
-class QHBoxLayout;
-class QLabel;
-class QLineEdit;
-class QStandardItem;
-class QStandardItemModel;
-class QPushButton;
-class QwtSlider;
-
-
-class ControllerTreeWindow : public QTreeView
-{
-    Q_OBJECT
-
-    public:
-                /* Filter Search Proxy */
-                SortFilterProxyModel               *m_ProxyModel;
-    protected:
-
-    private:
-                FeaturePtrVector                    m_featPtrVec;
-                CameraPtr                           m_pCam;
-                MultiCompleter                     *m_StringCompleter;
-                ItemDelegate                       *m_TreeDelegate;
-                IFeatureObserverPtr                 m_pFeatureObs;
-                QString                             m_sCameraID;
-                VmbError_t                          m_ListTreeError;
-
-                QMap <QString, QString>             m_DescriptonMap;
-                QMap <QString, QString>             m_DisplayFeatureNameMap;
-                QMap <QString, FeaturePtr>          m_featPtrMap;
-
-                QVector < QMap <QString, QString> > m_Level;
-                QMap <QString, QString>             m_Level0Map;
-                QMap <QString, QString>             m_Level1Map;
-                QMap <QString, QString>             m_Level2Map;
-                QMap <QString, QString>             m_Level3Map;
-                QMap <QString, QString>             m_Level4Map;
-                QMap <QString, QString>             m_Level5Map;
-                QMap <QString, QString>             m_Level6Map;
-                QMap <QString, QString>             m_Level7Map;
-                QMap <QString, QString>             m_Level8Map;
-                QMap <QString, QString>             m_Level9Map;
-
-                FeaturePtr                          m_FeaturePtr_Command;
-                FeaturePtr                          m_FeaturePtr_EnumComboBox;
-                FeaturePtr                          m_FeaturePtr_CheckBox;
-                FeaturePtr                          m_FeaturePtr_IntSpinBox;
-                FeaturePtr                          m_FeaturePtr_FloatSliderSpinBox;
-                FeaturePtr                          m_FeaturePtr_StringEditBox;
-                FeaturePtr                          m_FeaturePtr_LineEdit;
-
-                QString                             m_sFeature_Command;
-                QString                             m_sFeature_EnumComboBox;
-                QString                             m_sFeature_CheckBox;
-                QString                             m_sFeature_IntSpinBox;
-                QString                             m_sFeature_FloatSliderSpinBox;
-                QString                             m_sFeature_StringEditBox;
-                QString                             m_sFeature_StringLineEdit;
-                QString                             m_sCurrentSelectedFeature;
-
-                QStandardItemModel                 *m_Model;
-                QStandardItemModel                 *m_ModelGuru;
-
-                int                                 m_nIntSliderOldValue;
-                unsigned int                        m_nSliderStep;
-                double                              m_dMinimum;
-                double                              m_dMaximum;
-                double                              m_dIncrement;
-
-                HexMainWindow                      *m_HexWindow;
-                std::vector <VmbUchar_t>            m_RawData;
-
-                /* Logarithmic Slider */
-                QWidget                            *m_LogSliderWidget;
-                QwtSlider                          *m_LogSlider;
-                QHBoxLayout                        *m_HLogSliderLayout;
-
-                /* Button */
-                QPushButton                        *m_CmdButton;
-                QWidget                            *m_ButtonWidget;
-                QHBoxLayout                        *m_HButtonLayout;
-                QHBoxLayout                        *m_HButtonLayout2;
-
-                /* ComboBox */
-                ExComboBox                         *m_EnumComboBox;
-                QWidget                            *m_ComboWidget;
-                QHBoxLayout                        *m_HComboLayout;
-                QHBoxLayout                        *m_HComboLayout2;
-
-                /* Integer Feature Slider-SpinBoxes */
-                QWidget                            *m_IntSpinSliderWidget;
-                QHBoxLayout                        *m_HSpinSliderLayout_Int;
-                QHBoxLayout                        *m_HSpinSliderLayout_Int2;
-                IntSpinBox                         *m_SpinBox_Int;
-                QSlider                            *m_Slider_Int;
-
-                /* Float Feature Slider-Edit */
-                QWidget                            *m_FloatSliderEditWidget;
-                QHBoxLayout                        *m_HSpinSliderLayout_Float;
-                QHBoxLayout                        *m_HSliderEditLayout_Float2;
-                QLineEdit                          *m_EditBox_Float;
-                QwtSlider                          *m_Slider_Float;
-
-                /* String Feature EditBox */
-                QLineEdit                          *m_TextEdit_String;
-                QWidget                            *m_EditWidget;
-                QHBoxLayout                        *m_HEditLayout;
-                QHBoxLayout                        *m_HEditLayout2;
-
-                /* Boolean Feature CheckBox */
-                QCheckBox                          *m_CheckBox_Bool;
-                QWidget                            *m_BooleanWidget;
-                QHBoxLayout                        *m_HBooleanLayout;
-                QHBoxLayout                        *m_HBooleanLayout2;
-
-                /* IP Address or Direct Access */
-                QLineEdit                          *m_LineEdit;
-                QLabel                             *m_HexLabel;
-                QWidget                            *m_LineEditWidget;
-                QHBoxLayout                        *m_HLineEditLayout;
-                QHBoxLayout                        *m_HLineEditLayout2;
-
-                bool                                m_bIsTooltipOn;
-                QString                             m_sTooltip;
-
-                bool                                m_bIsJobDone;
-                bool                                m_bIsBusy;
-                bool                                m_bIsMousePressed;
-
-                /* GigE Auto adjust PacketSize */
-                bool                                m_bIsGigE;
-                bool                                m_bAutoAdjustPacketSize;
-                bool                                m_bIsTimeout;
-
-                QTimer                             *m_FeaturesPollingTimer;
-                QList <QString>                     m_FeaturesPollingName;
-                QMutex                              m_FeaturesPollingMutex;
-                
-
-    public:
-                ControllerTreeWindow            ( QString sID = " ", QWidget *parent = 0, bool bAutoAdjustPacketSize = false, CameraPtr pCam = CameraPtr() );
-                ~ControllerTreeWindow           ();
-
-                void setupTree                  ();
-                void synchronizeEventFeatures   ();
-                VmbError_t getTreeStatus        () const;
-                void showTooltip                ( const bool bIsChecked );
-                void showControl                ( const bool bIsShow );
-                void updateRegisterFeature      ();
-                void updateUnRegisterFeature    ();
-                bool isGigE() const;
-                MultiCompleter *getListCompleter() const;
-                void   saveFeaturesToTextFile   ( const QString &sDestPathAndFileName );
-
-    protected:
-                void showEvent(QShowEvent *event);
-                void hideEvent(QHideEvent *event);
-
-    private:
-                void mapInformation             (const QString sName, const FeaturePtr &featPtr);
-                QString getFeatureNameFromMap   ( const QString &sDisplayName ) const;
-                bool    findCategory            ( const QMap <QString, QString>& map, const QString& sName) const;
-                unsigned int getGrandParentLevel( const QList<QStandardItem *>& items, const QString &sGrandParent) const;
-
-                bool    isEventFeature          ( const FeaturePtr pFeature ) const;
-                QString getFeatureValue         ( const FeaturePtr &featPtr ) const;
-                QString getFeatureName          ( const QModelIndex& item ) const;
-
-                void updateExpandedTreeValue    ( const FeaturePtr &featPtr, const QString &sName );
-
-                bool registerFeatureObserver    ( const QString &sFeatureName );
-                void unregisterFeatureObserver  ( const QString &sFeatureName );
-
-                void resetControl               ();
-                void sortCategoryAndAttribute   ( const FeaturePtr &featPtr , QStandardItemModel *Model );
-
-                QString getFeatureInformation   (const FeaturePtr &featPtr);
-                void createCommandButton        ( const QModelIndex item );  /*  maps to VmbFeatureDataCommand */
-                void createEnumComboBox         ( const QModelIndex item );  /*  maps to VmbFeatureDataEnum */
-                void createIntSliderSpinBox     ( const QModelIndex item );  /*  maps to VmbFeatureDataInt */
-                void createFloatSliderEditBox   ( const QModelIndex item );  /*  maps to VmbFeatureDataFloat */
-                void createBooleanCheckBox      ( const QModelIndex item );  /*  maps to VmbFeatureDataBool */
-                void createStringEditBox        ( const QModelIndex item );  /*  maps to VmbFeatureDataString */
-                void createHexEditor            ( const QModelIndex item );  /*  maps to VmbFeatureDataRaw*/
-                void createLineEdit             ( const QModelIndex &item ); /*  maps to register stuffs*/
-                void createLogarithmicSlider    ( const QModelIndex &item ); /*  maps to Exposure*/
-                void showIt                     ( const QModelIndex item, const QString &sWhat );
-
-                bool isFeatureWritable          ( const QString &sFeature );
-                FeaturePtr getFeaturePtr        ( const QString &sFeature );
-
-                void setIntegerValue            ( const int &nValue );
-                void updateCurrentIntValue      ();
-                void setFloatingValue           ( const double &dValue );
-                void setLogarithmicFloatingValue( const double &dValue );
-
-
-                bool eventFilter                (QObject *object, QEvent *event);
-
-                void onFloatSliderReleased      ();
-                void onIntSliderReleased        ();
-                void updateWidget               ( const bool bIsWritable, const QVariant &value );
-                void onLogarithmicSliderReleased();
-
-                void AdjustOffscreenPosition    (QPoint &position, QWidget &parentWidget );
-
-       public slots:
-                void closeControls(void);
-
-    protected slots:
-                void setAdjustPacketSizeTimeout ();
-
-    private Q_SLOTS:
-                void setLogarithmicSliderValue  ( double v );
-
-    private slots:
-                void onClicked                  ( const QModelIndex & index );
-                void onCmdButtonClick           ();
-                void onConfirmClick             ();
-                void onIntSpinBoxClick          ();
-                void onFloatEditFinished        ();
-                void onIntSliderChanged         ( int nValue );
-                void onFloatSliderChanged       ( double dValue );
-                void onBoolCheckBoxClick        ( bool bValue );
-                void onSetChangedFeature        ( const QString &sFeature, const QString &sValue, const bool &bIsWritable );
-                void onSetEventMsg              ( const QStringList &sMsg );
-                void onEnumComboBoxClick        ( const QString &sSelected );
-                void expand                     ( const QModelIndex & index );
-                void collapse                   ( const QModelIndex & index );
-                void onLogarithmicFloatSpinBoxClick  ();
-                void onEditText                 ();
-                void runPollingFeaturesValue    ();
-                void pollingFeaturesValue       ();
-                void updateColWidth             ();
-
-    signals:
-                void setDescription             ( const QString &sDesc );
-                void acquisitionStartStop       ( const QString &sThisFeature );
-                void setEventMessage            ( const QStringList &sMsg );
-                void logging                    ( const QString &sMessage );
-                void updateBufferSize           ();
-                void resetFPS                   ();
-                void enableViewerMenu           ( bool bIsEnabled);
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/DockWidgetWindow.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/DockWidgetWindow.cpp
deleted file mode 100644
index 1928345e0d9683c3cd1c241ecef646d589402f1e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/DockWidgetWindow.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        DockWidgetWindow.cpp
-
-  Description: docking widget
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "DockWidgetWindow.h"
-
-
-DockWidgetWindow::DockWidgetWindow ( const QString &sTitle, QWidget *parent ) : QDockWidget( sTitle, parent )
-{
-    //this->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea|Qt::TopDockWidgetArea|Qt::BottomDockWidgetArea);
-    QFont font;
-    font.setFamily(QString::fromUtf8("Verdana"));
-    this->setFont(font);
-}
-
-DockWidgetWindow::~DockWidgetWindow ( )
-{
-
-}
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/DockWidgetWindow.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/DockWidgetWindow.h
deleted file mode 100644
index 17f25e97207cd999433bc0189c60bc5610729abf..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/DockWidgetWindow.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        DockWidgetWindow.h
-
-  Description: docking widget
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef DOCKWIDGETWINDOW_H
-#define DOCKWIDGETWINDOW_H
-
-#include <QDockWidget>
-#include "Helper.h"
-
-
-class DockWidgetWindow : public QDockWidget
-{
-    Q_OBJECT
-    public: 
-
-    protected:
-
-
-    private:
-
-    public:
-            DockWidgetWindow ( const QString &sTitle, QWidget *parent = 0 );
-           ~DockWidgetWindow ( void );
-
-    protected:
-        
-
-    private:
-
-    private slots:
-        
-
-    signals:
-        
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/ExComboBox.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/ExComboBox.cpp
deleted file mode 100644
index 75263e6f093595d47588a3c6a5befd7a38ebe614..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/ExComboBox.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ExComboBox.cpp
-
-  Description: When you do a fast switch on feature tree while ComboBox has just opened, the LineEdit won�t be deleted (Qt BUG!),
-  and it still shows up  even the combo object has been deleted. To avoid this just make sure to hide popup when destroying combo object. 
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "ExComboBox.h"
-
-ExComboBox::ExComboBox ( QWidget *parent ): QComboBox ( parent )
-{
-    
-}
-
-ExComboBox::~ExComboBox ( void )
-{
-    QComboBox::showPopup();
-    QComboBox::hidePopup();
-}
-
-void ExComboBox::showPopup ()
-{
-    QComboBox::showPopup();
-}
-
-void ExComboBox::hidePopup ()
-{
-    QComboBox::hidePopup();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/ExComboBox.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/ExComboBox.h
deleted file mode 100644
index 85c5a520ac5a2c315660fcc0c942a75d63e0b812..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/ExComboBox.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ComboBox.h
-
-  Description: When you do a fast switch on feature tree while ComboBox has just opened, the LineEdit won�t be deleted (Qt BUG!),
-  and it still shows up  even the combo object has been deleted. To avoid this just make sure to hide popup when destroying combo object. 
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef EXCOMBOBOX_H
-#define EXCOMBOBOX_H
-
-#include <QComboBox>
-
-class ExComboBox : public QComboBox
-{
-    Q_OBJECT
-    public: 
-
-    protected:            
-
-    private:
-             
-             virtual void showPopup ();
-             virtual void hidePopup ();
-    public:
-                ExComboBox ( QWidget *parent = 0);
-               ~ExComboBox ( void );
-               
-
-    protected:
-
-    private:
-               
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/FloatSpinBox.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/FloatSpinBox.cpp
deleted file mode 100644
index ea0a947fecc969e4bfece23194de109a95ea4c1c..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/FloatSpinBox.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FloatSpinBox.cpp
-
-  Description: Spinbox to handle floating feature
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "FloatSpinBox.h"
-
-
-FloatSpinBox::FloatSpinBox ( QWidget *parent ): QDoubleSpinBox ( parent )
-{
-
-}
-
-FloatSpinBox::~FloatSpinBox ( void )
-{
-
-}
-
-void FloatSpinBox::stepBy( int steps )
-{
-    double dInterval =  singleStep();
-    double dValue    = value();
-
-    if( (minimum() > value()) || (maximum() < value()) )
-        return;
-
-    if(0 < steps ) //stepUp
-    {        
-        setValue( dValue+dInterval);
-    }
-    else   //stepDown
-    {
-        setValue( dValue-dInterval);
-    }
-
-    editingFinished();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/FloatSpinBox.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/FloatSpinBox.h
deleted file mode 100644
index 74547d3277a0fe31fe0feb00b2ae2a518b611dce..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/FloatSpinBox.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FloatSpinBox.h
-
-  Description: Spinbox to handle floating feature
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef FLOATSPINBOX_H
-#define FLOATSPINBOX_H
-
-#include <QSpinBox>
-
-class FloatSpinBox : public QDoubleSpinBox
-{
-    Q_OBJECT
-    public: 
-
-    protected:            
-
-    private:
-
-    public:
-            FloatSpinBox ( QWidget *parent );
-           ~FloatSpinBox ( void );
-
-protected:
-
-private:
-    virtual void stepBy ( int steps );
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/Commands.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/Commands.cpp
deleted file mode 100644
index 793a1bfa6344783799b8f66c681abd561bb0576e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/Commands.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
-| ==============================================================================
-| Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-|
-| This code may be used in part, or in whole for your application development.
-|
-|==============================================================================
-|
-| THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-| WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-| NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-| DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-| INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-| OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF
-| LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-| NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-| EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-|
-| http://code.google.com/p/qhexedit2/
-|==============================================================================
-*/
-
-#include "Commands.h"
-
-CharCommand::CharCommand(XByteArray * xData, Cmd cmd, int charPos, char newChar, QUndoCommand *parent)
-    : QUndoCommand(parent)
-{
-    m_xData = xData;
-    m_CharPos = charPos;
-    m_NewChar = newChar;
-    m_Cmd = cmd;
-}
-
-bool CharCommand::mergeWith(const QUndoCommand *command)
-{
-    const CharCommand *nextCommand = static_cast<const CharCommand *>(command);
-    bool result = false;
-
-    if (m_Cmd != remove)
-    {
-        if (nextCommand->m_Cmd == replace)
-            if (nextCommand->m_CharPos == m_CharPos)
-            {
-                m_NewChar = nextCommand->m_NewChar;
-                result = true;
-            }
-    }
-    return result;
-}
-
-void CharCommand::undo()
-{
-    switch (m_Cmd)
-    {
-        case insert:
-            m_xData->remove(m_CharPos, 1);
-            break;
-        case replace:
-            m_xData->replace(m_CharPos, m_OldChar);
-            m_xData->setDataChanged(m_CharPos, m_WasChanged);
-            break;
-        case remove:
-            m_xData->insert(m_CharPos, m_OldChar);
-            m_xData->setDataChanged(m_CharPos, m_WasChanged);
-            break;
-    }
-}
-
-void CharCommand::redo()
-{
-    switch (m_Cmd)
-    {
-        case insert:
-            m_xData->insert(m_CharPos, m_NewChar);
-            break;
-        case replace:
-            m_OldChar = m_xData->data()[m_CharPos];
-            m_WasChanged = m_xData->dataChanged(m_CharPos);
-            m_xData->replace(m_CharPos, m_NewChar);
-            break;
-        case remove:
-            m_OldChar = m_xData->data()[m_CharPos];
-            m_WasChanged = m_xData->dataChanged(m_CharPos);
-            m_xData->remove(m_CharPos, 1);
-            break;
-    }
-}
-
-
-
-ArrayCommand::ArrayCommand(XByteArray * xData, Cmd cmd, int baPos, QByteArray newBa, int len, QUndoCommand *parent)
-    : QUndoCommand(parent)
-{
-    m_Cmd = cmd;
-    m_xData = xData;
-    m_ByteArrayPos = baPos;
-    m_NewByteArray = newBa;
-    m_Length = len;
-}
-
-void ArrayCommand::undo()
-{
-    switch (m_Cmd)
-    {
-        case insert:
-            m_xData->remove(m_ByteArrayPos, m_NewByteArray.length());
-            break;
-        case replace:
-            m_xData->replace(m_ByteArrayPos, m_OldByteArray);
-            m_xData->setDataChanged(m_ByteArrayPos, m_WasChanged);
-            break;
-        case remove:
-            m_xData->insert(m_ByteArrayPos, m_OldByteArray);
-            m_xData->setDataChanged(m_ByteArrayPos, m_WasChanged);
-            break;
-    }
-}
-
-void ArrayCommand::redo()
-{
-    switch (m_Cmd)
-    {
-        case insert:
-            m_xData->insert(m_ByteArrayPos, m_NewByteArray);
-            break;
-        case replace:
-            m_OldByteArray = m_xData->data().mid(m_ByteArrayPos, m_Length);
-            m_WasChanged = m_xData->dataChanged(m_ByteArrayPos, m_Length);
-            m_xData->replace(m_ByteArrayPos, m_NewByteArray);
-            break;
-        case remove:
-            m_OldByteArray = m_xData->data().mid(m_ByteArrayPos, m_Length);
-            m_WasChanged = m_xData->dataChanged(m_ByteArrayPos, m_Length);
-            m_xData->remove(m_ByteArrayPos, m_Length);
-            break;
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/Commands.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/Commands.h
deleted file mode 100644
index bffabbbfa7a9bf031be0fa9b79e714e9fcc9a963..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/Commands.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef COMMANDS_H
-#define COMMANDS_H
-
-/** \cond docNever */
-
-#include <QUndoCommand>
-
-#include "XByteArray.h"
-
-/*! CharCommand is a class to prived undo/redo functionality in QHexEdit.
-A QUndoCommand represents a single editing action on a document. CharCommand
-is responsable for manipulations on single chars. It can insert. replace and
-remove characters. A manipulation stores allways to actions
-1. redo (or do) action
-2. undo action.
-
-CharCommand also supports command compression via mergeWidht(). This allows
-the user to execute a undo command contation e.g. 3 steps in a single command.
-If you for example insert a new byt "34" this means for the editor doing 3
-steps: insert a "00", replace it with "03" and the replace it with "34". These
-3 steps are combined into a single step, insert a "34".
-*/
-class CharCommand : public QUndoCommand
-{
-public:
-    enum { Id = 1234 };
-    enum Cmd {insert, remove, replace};
-
-    CharCommand(XByteArray * xData, Cmd cmd, int charPos, char newChar,
-                       QUndoCommand *parent=0);
-
-    void undo();
-    void redo();
-    bool mergeWith(const QUndoCommand *command);
-    int id() const { return Id; }
-
-private:
-    XByteArray     *m_xData;
-    int             m_CharPos;
-    bool            m_WasChanged;
-    char            m_NewChar;
-    char            m_OldChar;
-    Cmd             m_Cmd;
-};
-
-/*! ArrayCommand provides undo/redo functionality for handling binary strings. It
-can undo/redo insert, replace and remove binary strins (QByteArrays).
-*/
-class ArrayCommand : public QUndoCommand
-{
-public:
-    enum Cmd {insert, remove, replace};
-    ArrayCommand(XByteArray * xData, Cmd cmd, int baPos, QByteArray newBa=QByteArray(), int len=0,
-                 QUndoCommand *parent=0);
-    void undo();
-    void redo();
-
-private:
-    Cmd             m_Cmd;
-    XByteArray     *m_xData;
-    int             m_ByteArrayPos;
-    int             m_Length;
-    QByteArray      m_WasChanged;
-    QByteArray      m_NewByteArray;
-    QByteArray      m_OldByteArray;
-};
-
-/** \endcond docNever */
-
-#endif // COMMANDS_H
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexMainWindow.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexMainWindow.cpp
deleted file mode 100644
index 34d0cd9a54783ed955534a4993e2b05fdd774eb4..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexMainWindow.cpp
+++ /dev/null
@@ -1,224 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        HexMainWindow.cpp
-
-  Description: a hex editor to show raw data
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "HexMainWindow.h"
-
-
-HexMainWindow::HexMainWindow ( QWidget *parent, Qt::WindowFlags flag, QString sID, bool bIsReadOnly, FeaturePtr featPtr ) : QMainWindow( parent, flag )
-{
-    m_RawDataFeatPtr = featPtr;
-    setWindowModality(Qt::WindowModal);
-    
-    std::string sFeatureDisplayName;
-    m_RawDataFeatPtr->GetDisplayName(sFeatureDisplayName);
-    setWindowTitle(sID.append(" <").append(QString::fromStdString(sFeatureDisplayName)).append(">"));
-    init();
-    QPoint p = QCursor::pos();
-    readSettings();
-    move(p.x()-100, p.y()-100);
-    m_HexEdit->setReadOnly(bIsReadOnly);
-    show();
-}
-
-HexMainWindow::~HexMainWindow ( void )
-{
-    
-}
-
-void HexMainWindow::closeEvent(QCloseEvent *)
-{
-    writeSettings();
-}
-
-void HexMainWindow::settingsAccepted()
-{
-    writeSettings();
-    readSettings();
-}
-
-void HexMainWindow::save()
-{
-    saveFile();
-}
-
-void HexMainWindow::setAddress(int address)
-{
-    m_LbAddress->setText(QString("%1").arg(address, 1, 16));
-}
-
-void HexMainWindow::setOverwriteMode(bool mode)
-{
-    if (mode)
-        m_LbOverwriteMode->setText(tr("Overwrite"));
-    else
-        m_LbOverwriteMode->setText(tr("Insert"));
-}
-
-void HexMainWindow::setSize(int size)
-{
-    m_LbSize->setText(QString("%1").arg(size));
-}
-
-void HexMainWindow::showOptionsDialog()
-{
-    m_OptionsDialog->show();
-}
-
-void HexMainWindow::init()
-{
-    setAttribute(Qt::WA_DeleteOnClose);
-    m_OptionsDialog = new HexOptionDialog(this);
-    m_OptionsDialog->setWindowFlags(m_OptionsDialog->windowFlags() & ~Qt::WindowContextHelpButtonHint);
-    connect(m_OptionsDialog, SIGNAL(accepted()), this, SLOT(settingsAccepted()));
-
-    m_HexEdit = new QHexEdit;
-    setCentralWidget(m_HexEdit);
-    connect(m_HexEdit, SIGNAL(overwriteModeChanged(bool)), this, SLOT(setOverwriteMode(bool)));
-    
-    createActions();
-    createMenus();
-    createToolBars();
-    createStatusBar();
-
-    setUnifiedTitleAndToolBarOnMac(true);
-}
-
-void HexMainWindow::createActions()
-{
-    m_SaveAct = new QAction(QIcon(":/VimbaViewer/Images/save.png"), tr("&Save"), this);
-    m_SaveAct->setShortcuts(QKeySequence::Save);
-    m_SaveAct->setStatusTip(tr("Save data to buffer"));
-    connect(m_SaveAct, SIGNAL(triggered()), this, SLOT(save()));
-
-    m_OptionsAct = new QAction(QIcon(":/VimbaViewer/Images/option.png"), tr("Se&ttings"), this);
-    m_OptionsAct->setStatusTip(tr("Show the Dialog to select editor options"));
-    connect(m_OptionsAct, SIGNAL(triggered()), this, SLOT(showOptionsDialog()));
-}
-
-void HexMainWindow::createMenus()
-{
-    m_FileMenu = menuBar()->addMenu(tr("&File"));
-    m_FileMenu->addAction(m_SaveAct);
-
-    m_EditMenu = menuBar()->addMenu(tr("&Edit"));
-    m_EditMenu->addAction(m_OptionsAct);
-}
-
-void HexMainWindow::createStatusBar()
-{
-    // Address Label
-    m_LbAddressName = new QLabel();
-    m_LbAddressName->setText(tr("Address:"));
-    statusBar()->addPermanentWidget(m_LbAddressName);
-    m_LbAddress = new QLabel();
-    m_LbAddress->setFrameShape(QFrame::Panel);
-    m_LbAddress->setFrameShadow(QFrame::Sunken);
-    m_LbAddress->setMinimumWidth(70);
-    statusBar()->addPermanentWidget(m_LbAddress);
-    connect(m_HexEdit, SIGNAL(currentAddressChanged(int)), this, SLOT(setAddress(int)));
-
-    // Size Label
-    m_LbSizeName = new QLabel();
-    m_LbSizeName->setText(tr("Size:"));
-    statusBar()->addPermanentWidget(m_LbSizeName);
-    m_LbSize = new QLabel();
-    m_LbSize->setFrameShape(QFrame::Panel);
-    m_LbSize->setFrameShadow(QFrame::Sunken);
-    m_LbSize->setMinimumWidth(70);
-    statusBar()->addPermanentWidget(m_LbSize);
-    connect(m_HexEdit, SIGNAL(currentSizeChanged(int)), this, SLOT(setSize(int)));
-
-    // Overwrite Mode Label
-    m_LbOverwriteModeName = new QLabel();
-    m_LbOverwriteModeName->setText(tr("Mode:"));
-    statusBar()->addPermanentWidget(m_LbOverwriteModeName);
-    m_LbOverwriteMode = new QLabel();
-    m_LbOverwriteMode->setFrameShape(QFrame::Panel);
-    m_LbOverwriteMode->setFrameShadow(QFrame::Sunken);
-    m_LbOverwriteMode->setMinimumWidth(70);
-    statusBar()->addPermanentWidget(m_LbOverwriteMode);
-    setOverwriteMode(m_HexEdit->overwriteMode());
-
-    statusBar()->showMessage(tr("Ready"));
-}
-
-void HexMainWindow::createToolBars()
-{
-    m_FileToolBar = addToolBar(tr("File"));
-    m_FileToolBar->addAction(m_SaveAct);
-}
-
-void HexMainWindow::setData (const QByteArray &array)
-{
-    m_HexEdit->setData(array);
-    QApplication::restoreOverrideCursor();
-}
-
-void HexMainWindow::readSettings()
-{
-    QSettings settings("Allied Vision", "Vimba Viewer");
-    QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
-    QSize size = settings.value("size", QSize(610, 460)).toSize();
-    move(pos);
-    resize(size);
-
-    m_HexEdit->setAddressArea(settings.value("AddressArea").toBool());
-    m_HexEdit->setAsciiArea(settings.value("AsciiArea").toBool());
-    m_HexEdit->setHighlighting(settings.value("Highlighting").toBool());
-    m_HexEdit->setOverwriteMode(settings.value("OverwriteMode").toBool());
-    m_HexEdit->setReadOnly(settings.value("ReadOnly").toBool());
-
-    m_HexEdit->setHighlightingColor(settings.value("HighlightingColor").value<QColor>());
-    m_HexEdit->setAddressAreaColor(settings.value("AddressAreaColor").value<QColor>());
-    m_HexEdit->setSelectionColor(settings.value("SelectionColor").value<QColor>());
-    m_HexEdit->setFont(settings.value("WidgetFont").value<QFont>());
-
-    m_HexEdit->setAddressWidth(settings.value("AddressAreaWidth").toInt());
-}
-
-void HexMainWindow::saveFile( void )
-{    
-    std::vector <VmbUchar_t> v;
-    for(int i=0; i < m_HexEdit->data().size(); i++)
-    {
-        v.push_back(m_HexEdit->data().at(i));
-    }
-    
-    VmbError_t error = m_RawDataFeatPtr->SetValue(v);
-    if(VmbErrorSuccess != error)
-    {
-        QMessageBox::critical(this, tr("VimbaViewer"), tr("writing data to camera FAILED"));
-    }
-}
-
-void HexMainWindow::writeSettings()
-{
-    QSettings settings("Allied Vision", "Vimba Viewer");
-    settings.setValue("pos", pos());
-    settings.setValue("size", size());
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexMainWindow.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexMainWindow.h
deleted file mode 100644
index b04090d08ef9934656a718a38d5b5e2b5c2b5235..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexMainWindow.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        HexMainWindow.h
-
-  Description: a hex editor to show raw data
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef HEXMAINWINDOW_H
-#define HEXMAINWINDOW_H
-
-#include "QHexEdit.h"
-#include "HexOptionDialog.h"
-#include <QMainWindow>
-
-QT_BEGIN_NAMESPACE
-class QAction;
-class QMenu;
-class QUndoStack;
-QT_END_NAMESPACE
-
-
-#include <VimbaCPP/Include/VimbaSystem.h>
-
-using AVT::VmbAPI::FeaturePtr;
-
-class HexMainWindow : public QMainWindow
-{
-    Q_OBJECT
-    
-    protected:
-
-    private:    
-             FeaturePtr m_RawDataFeatPtr;
-
-    public:
-             HexMainWindow ( QWidget *parent = 0, Qt::WindowFlags flag = 0,  QString sID = " ", bool bIsReadOnly = false, FeaturePtr featPtr = FeaturePtr() );
-            ~HexMainWindow ( void );
-
-             void setData (const QByteArray &array);
-
-    protected:
-             void closeEvent(QCloseEvent *event);
-
-    private:
-             void init();
-             void createActions();
-             void createMenus();
-             void createStatusBar();
-             void createToolBars();
-             void readSettings();
-             void saveFile(void);
-             void writeSettings();
-
-             QMenu           *m_FileMenu;
-             QMenu           *m_EditMenu;
-
-             QToolBar        *m_FileToolBar;
-
-             QAction         *m_SaveAct;
-             QAction         *m_OptionsAct;
-
-             QHexEdit        *m_HexEdit;
-             HexOptionDialog *m_OptionsDialog;
-             QLabel          *m_LbAddress, *m_LbAddressName;
-             QLabel          *m_LbOverwriteMode, *m_LbOverwriteModeName;
-             QLabel          *m_LbSize, *m_LbSizeName;
-
-
-    private slots:
-             void settingsAccepted();
-             void save( void);
-             void setAddress(int address);
-             void setOverwriteMode(bool mode);
-             void setSize(int size);
-             void showOptionsDialog();
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexOptionDialog.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexOptionDialog.cpp
deleted file mode 100644
index dd6c6407516d36fb67c4932c1e528a98fe2fca03..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexOptionDialog.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        HexOptionDialog.cpp
-
-  Description: a setting dialog for hex editor
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "HexOptionDialog.h"
-#include "ui_OptionDialog.h"
-
-
-HexOptionDialog::HexOptionDialog ( QWidget *parent) : QDialog( parent ), ui(new Ui::OptionDialog)
-{
-    ui->setupUi(this);
-    readSettings();
-    writeSettings();
-}
-
-HexOptionDialog::~HexOptionDialog ( void )
-{
-    delete ui;
-}
-
-void HexOptionDialog::accept()
-{
-    writeSettings();
-    emit accepted();
-    QDialog::hide();
-}
-
-void HexOptionDialog::readSettings()
-{
-    QSettings settings("Allied Vision", "Vimba Viewer");
-
-    ui->cbAddressArea->setChecked(settings.value("AddressArea", true).toBool());
-    ui->cbAsciiArea->setChecked(settings.value("AsciiArea", true).toBool());
-    ui->cbHighlighting->setChecked(settings.value("Highlighting", true).toBool());
-    ui->cbOverwriteMode->setChecked(settings.value("OverwriteMode", true).toBool());
-    ui->cbReadOnly->setChecked(settings.value("ReadOnly").toBool());
-
-    setColor(ui->lbHighlightingColor, settings.value("HighlightingColor", QColor(0xff, 0xff, 0x99, 0xff)).value<QColor>());
-    setColor(ui->lbAddressAreaColor, settings.value("AddressAreaColor", QColor(0xd4, 0xd4, 0xd4, 0xff)).value<QColor>());
-    setColor(ui->lbSelectionColor, settings.value("SelectionColor", QColor(0x6d, 0x9e, 0xff, 0xff)).value<QColor>());
-    ui->leWidgetFont->setFont(settings.value("WidgetFont", QFont("Courier", 10)).value<QFont>());
-
-    ui->sbAddressAreaWidth->setValue(settings.value("AddressAreaWidth", 4).toInt());
-}
-
-void HexOptionDialog::writeSettings()
-{
-    QSettings settings("Allied Vision", "Vimba Viewer");
-    settings.setValue("AddressArea", ui->cbAddressArea->isChecked());
-    settings.setValue("AsciiArea", ui->cbAsciiArea->isChecked());
-    settings.setValue("Highlighting", ui->cbHighlighting->isChecked());
-    settings.setValue("OverwriteMode", ui->cbOverwriteMode->isChecked());
-    settings.setValue("ReadOnly", ui->cbReadOnly->isChecked());
-
-    settings.setValue("HighlightingColor", ui->lbHighlightingColor->palette().color(QPalette::Background));
-    settings.setValue("AddressAreaColor", ui->lbAddressAreaColor->palette().color(QPalette::Background));
-    settings.setValue("SelectionColor", ui->lbSelectionColor->palette().color(QPalette::Background));
-    settings.setValue("WidgetFont",ui->leWidgetFont->font());
-
-    settings.setValue("AddressAreaWidth", ui->sbAddressAreaWidth->value());
-}
-
-void HexOptionDialog::setColor(QWidget *widget, QColor color)
-{
-    QPalette palette = widget->palette();
-    palette.setColor(QPalette::Background, color);
-    widget->setPalette(palette);
-    widget->setAutoFillBackground(true);
-}
-
-void HexOptionDialog::on_pbHighlightingColor_clicked()
-{
-    QColor color = QColorDialog::getColor(ui->lbHighlightingColor->palette().color(QPalette::Background), this);
-    if (color.isValid())
-        setColor(ui->lbHighlightingColor, color);
-}
-
-void HexOptionDialog::on_pbAddressAreaColor_clicked()
-{
-    QColor color = QColorDialog::getColor(ui->lbAddressAreaColor->palette().color(QPalette::Background), this);
-    if (color.isValid())
-        setColor(ui->lbAddressAreaColor, color);
-}
-
-void HexOptionDialog::on_pbSelectionColor_clicked()
-{
-    QColor color = QColorDialog::getColor(ui->lbSelectionColor->palette().color(QPalette::Background), this);
-    if (color.isValid())
-        setColor(ui->lbSelectionColor, color);
-}
-
-void HexOptionDialog::on_pbWidgetFont_clicked()
-{
-    bool ok;
-    QFont font = QFontDialog::getFont(&ok, ui->leWidgetFont->font(), this);
-    if (ok)
-        ui->leWidgetFont->setFont(font);
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexOptionDialog.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexOptionDialog.h
deleted file mode 100644
index ed9c0f8e9eb2ec3b5edc9ce189360692230fa384..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/HexOptionDialog.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        HexOptionDialog.cpp
-
-  Description: a setting dialog for hex editor
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef HEXOPTIONDIALOG_H
-#define HEXOPTIONDIALOG_H
-
-#include <QtCore>
-#include <QtGui>
-
-namespace Ui {
-    class OptionDialog;
-}
-
-class HexOptionDialog : public QDialog
-{
-    Q_OBJECT
-
-    public:
-               explicit HexOptionDialog(QWidget *parent = 0);
-                       ~HexOptionDialog();
-
-              Ui::OptionDialog *ui;
-    
-    public slots:
-               virtual void accept();
-
-    private slots:
-               void on_pbHighlightingColor_clicked();
-               void on_pbAddressAreaColor_clicked();
-               void on_pbSelectionColor_clicked();
-               void on_pbWidgetFont_clicked();
-
-    private:
-               void readSettings();
-               void writeSettings();
-               void setColor(QWidget *widget, QColor color);
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/OptionDialog.ui b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/OptionDialog.ui
deleted file mode 100644
index 5636bdef9e1427d29a5f8eb726832c58da83e7a0..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/OptionDialog.ui
+++ /dev/null
@@ -1,286 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>OptionDialog</class>
- <widget class="QDialog" name="OptionDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>395</width>
-    <height>427</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Settings</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QGroupBox" name="gbFlags">
-     <property name="title">
-      <string>Flags</string>
-     </property>
-     <layout class="QGridLayout" name="gridLayout_2">
-      <item row="3" column="0">
-       <widget class="QCheckBox" name="cbReadOnly">
-        <property name="text">
-         <string>ReadOnly</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="0">
-       <widget class="QCheckBox" name="cbHighlighting">
-        <property name="text">
-         <string>Highlighting</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QCheckBox" name="cbOverwriteMode">
-        <property name="text">
-         <string>Overwrite Mode</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="QCheckBox" name="cbAddressArea">
-        <property name="text">
-         <string>Address Area</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1">
-       <widget class="QCheckBox" name="cbAsciiArea">
-        <property name="text">
-         <string>Ascii Area</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="gbColors">
-     <property name="title">
-      <string>Colors and Fonts</string>
-     </property>
-     <layout class="QGridLayout" name="gridLayout">
-      <item row="0" column="0">
-       <widget class="QPushButton" name="pbHighlightingColor">
-        <property name="text">
-         <string>Highlighting Color</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QLabel" name="lbHighlightingColor">
-        <property name="minimumSize">
-         <size>
-          <width>100</width>
-          <height>0</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>16777215</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="frameShape">
-         <enum>QFrame::Panel</enum>
-        </property>
-        <property name="frameShadow">
-         <enum>QFrame::Sunken</enum>
-        </property>
-        <property name="text">
-         <string/>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0" rowspan="2">
-       <widget class="QPushButton" name="pbAddressAreaColor">
-        <property name="text">
-         <string>Address Area Color</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1" rowspan="2">
-       <widget class="QLabel" name="lbAddressAreaColor">
-        <property name="minimumSize">
-         <size>
-          <width>100</width>
-          <height>0</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>16777215</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="frameShape">
-         <enum>QFrame::Panel</enum>
-        </property>
-        <property name="frameShadow">
-         <enum>QFrame::Sunken</enum>
-        </property>
-        <property name="text">
-         <string/>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="1">
-       <widget class="QLabel" name="lbSelectionColor">
-        <property name="minimumSize">
-         <size>
-          <width>100</width>
-          <height>0</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>16777215</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="frameShape">
-         <enum>QFrame::Panel</enum>
-        </property>
-        <property name="frameShadow">
-         <enum>QFrame::Sunken</enum>
-        </property>
-        <property name="text">
-         <string/>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0">
-       <widget class="QPushButton" name="pbSelectionColor">
-        <property name="text">
-         <string>Selection Color</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="0">
-       <widget class="QPushButton" name="pbWidgetFont">
-        <property name="text">
-         <string>Widget Font</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1">
-       <widget class="QLineEdit" name="leWidgetFont">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="font">
-         <font>
-          <family>Courier New</family>
-          <pointsize>10</pointsize>
-         </font>
-        </property>
-        <property name="text">
-         <string>01 23 45 67 89 ab cd ef</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="gbAddressAreaWidth">
-     <property name="title">
-      <string>Address Area</string>
-     </property>
-     <layout class="QGridLayout" name="gridLayout_3">
-      <item row="0" column="0">
-       <widget class="QLabel" name="lbAddressAreaWidth">
-        <property name="text">
-         <string>Address Area Width</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QSpinBox" name="sbAddressAreaWidth">
-        <property name="minimum">
-         <number>1</number>
-        </property>
-        <property name="maximum">
-         <number>4</number>
-        </property>
-        <property name="value">
-         <number>4</number>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>28</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <tabstops>
-  <tabstop>pbHighlightingColor</tabstop>
-  <tabstop>pbAddressAreaColor</tabstop>
-  <tabstop>buttonBox</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>OptionDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>222</x>
-     <y>154</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>168</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>OptionDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>290</x>
-     <y>160</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>168</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit.cpp
deleted file mode 100644
index ef1e1375b2c29b2b0bd95e2ef1c948ad8d5609d3..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
-| ==============================================================================
-| Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-|
-| This code may be used in part, or in whole for your application development.
-|
-|==============================================================================
-|
-| THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-| WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-| NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-| DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-| INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-| OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF
-| LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-| NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-| EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-|
-| http://code.google.com/p/qhexedit2/
-|==============================================================================
-*/
-
-#include <QtGui>
-
-#include "QHexEdit.h"
-
-
-QHexEdit::QHexEdit(QWidget *parent) : QScrollArea(parent)
-{
-    m_qHexEdit_p = new QHexEditPrivate(this);
-    setWidget(m_qHexEdit_p);
-    setWidgetResizable(true);
-
-    connect(m_qHexEdit_p, SIGNAL(currentAddressChanged(int)), this, SIGNAL(currentAddressChanged(int)));
-    connect(m_qHexEdit_p, SIGNAL(currentSizeChanged(int)), this, SIGNAL(currentSizeChanged(int)));
-    connect(m_qHexEdit_p, SIGNAL(dataChanged()), this, SIGNAL(dataChanged()));
-    connect(m_qHexEdit_p, SIGNAL(overwriteModeChanged(bool)), this, SIGNAL(overwriteModeChanged(bool)));
-    setFocusPolicy(Qt::NoFocus);
-}
-
-int QHexEdit::indexOf(const QByteArray & ba, int from) const
-{
-    return m_qHexEdit_p->indexOf(ba, from);
-}
-
-void QHexEdit::insert(int i, const QByteArray & ba)
-{
-    m_qHexEdit_p->insert(i, ba);
-}
-
-void QHexEdit::insert(int i, char ch)
-{
-    m_qHexEdit_p->insert(i, ch);
-}
-
-int QHexEdit::lastIndexOf(const QByteArray & ba, int from) const
-{
-    return m_qHexEdit_p->lastIndexOf(ba, from);
-}
-
-void QHexEdit::remove(int pos, int len)
-{
-    m_qHexEdit_p->remove(pos, len);
-}
-
-void QHexEdit::replace( int pos, int len, const QByteArray & after)
-{
-    m_qHexEdit_p->replace(pos, len, after);
-}
-
-QString QHexEdit::toReadableString()
-{
-    return m_qHexEdit_p->toRedableString();
-}
-
-QString QHexEdit::selectionToReadableString()
-{
-    return m_qHexEdit_p->selectionToReadableString();
-}
-
-void QHexEdit::setAddressArea(bool addressArea)
-{
-    m_qHexEdit_p->setAddressArea(addressArea);
-}
-
-void QHexEdit::redo()
-{
-    m_qHexEdit_p->redo();
-}
-
-void QHexEdit::undo()
-{
-    m_qHexEdit_p->undo();
-}
-
-void QHexEdit::setAddressWidth(int addressWidth)
-{
-    m_qHexEdit_p->setAddressWidth(addressWidth);
-}
-
-void QHexEdit::setAsciiArea(bool asciiArea)
-{
-    m_qHexEdit_p->setAsciiArea(asciiArea);
-}
-
-void QHexEdit::setHighlighting(bool mode)
-{
-    m_qHexEdit_p->setHighlighting(mode);
-}
-
-void QHexEdit::setAddressOffset(int offset)
-{
-    m_qHexEdit_p->setAddressOffset(offset);
-}
-
-int QHexEdit::addressOffset()
-{
-    return m_qHexEdit_p->addressOffset();
-}
-
-void QHexEdit::setCursorPosition(int cursorPos)
-{
-    // cursorPos in QHexEditPrivate is the position of the textcoursor without
-    // blanks, means bytePos*2
-    m_qHexEdit_p->setCursorPos(cursorPos*2);
-}
-
-int QHexEdit::cursorPosition()
-{
-    return m_qHexEdit_p->cursorPos() / 2;
-}
-
-
-void QHexEdit::setData(const QByteArray &data)
-{
-    m_qHexEdit_p->setData(data);
-}
-
-QByteArray QHexEdit::data()
-{
-    return m_qHexEdit_p->data();
-}
-
-void QHexEdit::setAddressAreaColor(const QColor &color)
-{
-    m_qHexEdit_p->setAddressAreaColor(color);
-}
-
-QColor QHexEdit::addressAreaColor()
-{
-    return m_qHexEdit_p->addressAreaColor();
-}
-
-void QHexEdit::setHighlightingColor(const QColor &color)
-{
-    m_qHexEdit_p->setHighlightingColor(color);
-}
-
-QColor QHexEdit::highlightingColor()
-{
-    return m_qHexEdit_p->highlightingColor();
-}
-
-void QHexEdit::setSelectionColor(const QColor &color)
-{
-    m_qHexEdit_p->setSelectionColor(color);
-}
-
-QColor QHexEdit::selectionColor()
-{
-    return m_qHexEdit_p->selectionColor();
-}
-
-void QHexEdit::setOverwriteMode(bool overwriteMode)
-{
-    m_qHexEdit_p->setOverwriteMode(overwriteMode);
-}
-
-bool QHexEdit::overwriteMode()
-{
-    return m_qHexEdit_p->overwriteMode();
-}
-
-void QHexEdit::setReadOnly(bool readOnly)
-{
-    m_qHexEdit_p->setReadOnly(readOnly);
-}
-
-bool QHexEdit::isReadOnly()
-{
-    return m_qHexEdit_p->isReadOnly();
-}
-
-void QHexEdit::setFont(const QFont &font)
-{
-    m_qHexEdit_p->setFont(font);
-}
-
-const QFont & QHexEdit::font() const
-{
-    return m_qHexEdit_p->font();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit.h
deleted file mode 100644
index df385dadc57c278f34c9ac725e10660978eb8308..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit.h
+++ /dev/null
@@ -1,236 +0,0 @@
-#ifndef QHEXEDIT_H
-#define QHEXEDIT_H
-
-#include <QtGui>
-#include "QHexEdit_p.h"
-
-/** \mainpage
-QHexEdit is a binary editor widget for Qt.
-
-\version Version 0.6.3
-\image html hexedit.png
-*/
-
-
-/*! QHexEdit is a hex editor widget written in C++ for the Qt (Qt4) framework.
-It is a simple editor for binary data, just like QPlainTextEdit is for text
-data. There are sip configuration files included, so it is easy to create
-bindings for PyQt and you can use this widget also in python.
-
-QHexEdit takes the data of a QByteArray (setData()) and shows it. You can use
-the mouse or the keyboard to navigate inside the widget. If you hit the keys
-(0..9, a..f) you will change the data. Changed data is highlighted and can be
-accessed via data().
-
-Normaly QHexEdit works in the overwrite Mode. You can set overwriteMode(false)
-and insert data. In this case the size of data() increases. It is also possible
-to delete bytes (del or backspace), here the size of data decreases.
-
-You can select data with keyboard hits or mouse movements. The copy-key will
-copy the selected data into the clipboard. The cut-key copies also but delets
-it afterwards. In overwrite mode, the paste function overwrites the content of
-the (does not change the length) data. In insert mode, clipboard data will be
-inserted. The clipboard content is expected in ASCII Hex notation. Unknown
-characters will be ignored.
-
-QHexEdit comes with undo/redo functionality. All changes can be undone, by
-pressing the undo-key (usually ctr-z). They can also be redone afterwards.
-The undo/redo framework is cleared, when setData() sets up a new
-content for the editor. You can search data inside the content with indexOf()
-and lastIndexOf(). The replace() function is to change located subdata. This
-'replaced' data can also be undone by the undo/redo framework.
-
-This widget can only handle small amounts of data. The size has to be below 10
-megabytes, otherwise the scroll sliders ard not shown and you can't scroll any
-more.
-*/
-class QHexEdit : public QScrollArea
-{
-    Q_OBJECT
-    /*! Property data holds the content of QHexEdit. Call setData() to set the
-    content of QHexEdit, data() returns the actual content.
-    */
-    Q_PROPERTY(QByteArray data READ data WRITE setData)
-
-    /*! Property addressOffset is added to the Numbers of the Address Area.
-    A offset in the address area (left side) is sometimes usefull, whe you show
-    only a segment of a complete memory picture. With setAddressOffset() you set
-    this property - with addressOffset() you get the actual value.
-    */
-    Q_PROPERTY(int addressOffset READ addressOffset WRITE setAddressOffset)
-
-    /*! Property address area color sets (setAddressAreaColor()) the backgorund
-    color of address areas. You can also read the color (addressaAreaColor()).
-    */
-    Q_PROPERTY(QColor addressAreaColor READ addressAreaColor WRITE setAddressAreaColor)
-
-    /*! Porperty cursorPosition sets or gets the position of the editor cursor
-    in QHexEdit.
-    */
-    Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition)
-
-    /*! Property highlighting color sets (setHighlightingColor()) the backgorund
-    color of highlighted text areas. You can also read the color
-    (highlightingColor()).
-    */
-    Q_PROPERTY(QColor highlightingColor READ highlightingColor WRITE setHighlightingColor)
-
-    /*! Property selection color sets (setSelectionColor()) the backgorund
-    color of selected text areas. You can also read the color
-    (selectionColor()).
-    */
-    Q_PROPERTY(QColor selectionColor READ selectionColor WRITE setSelectionColor)
-
-    /*! Porperty overwrite mode sets (setOverwriteMode()) or gets (overwriteMode()) the mode
-    in which the editor works. In overwrite mode the user will overwrite existing data. The
-    size of data will be constant. In insert mode the size will grow, when inserting
-    new data.
-    */
-    Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
-
-    /*! Porperty readOnly sets (setReadOnly()) or gets (isReadOnly) the mode
-    in which the editor works. In readonly mode the the user can only navigate
-    through the data and select data; modifying is not possible. This
-    property's default is false.
-    */
-    Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
-
-    /*! Set the font of the widget. Please use fixed width fonts like Mono or Courier.*/
-    Q_PROPERTY(QFont font READ font WRITE setFont)
-
-
-public:
-    /*! Creates an instance of QHexEdit.
-    \param parent Parent widget of QHexEdit.
-    */
-    QHexEdit(QWidget *parent = 0);
-
-    /*! Returns the index position of the first occurrence
-    of the byte array ba in this byte array, searching forward from index position
-    from. Returns -1 if ba could not be found. In addition to this functionality
-    of QByteArray the cursorposition is set to the end of found bytearray and
-    it will be selected.
-
-    */
-    int indexOf(const QByteArray & ba, int from = 0) const;
-
-    /*! Inserts a byte array.
-    \param i Index position, where to insert
-    \param ba byte array, which is to insert
-    In overwrite mode, the existing data will be overwritten, in insertmode ba will be
-    inserted and size of data grows.
-    */
-    void insert(int i, const QByteArray & ba);
-
-    /*! Inserts a char.
-    \param i Index position, where to insert
-    \param ch Char, which is to insert
-    In overwrite mode, the existing data will be overwritten, in insertmode ba will be
-    inserted and size of data grows.
-    */
-    void insert(int i, char ch);
-
-    /*! Returns the index position of the last occurrence
-    of the byte array ba in this byte array, searching backwards from index position
-    from. Returns -1 if ba could not be found. In addition to this functionality
-    of QByteArray the cursorposition is set to the beginning of found bytearray and
-    it will be selected.
-
-    */
-    int lastIndexOf(const QByteArray & ba, int from = 0) const;
-
-    /*! Removes len bytes from the content.
-    \param pos Index position, where to remove
-    \param len Amount of bytes to remove
-    In overwrite mode, the existing bytes will be overwriten with 0x00.
-    */
-    void remove(int pos, int len=1);
-
-    /*! Replaces len bytes from index position pos with the byte array after.
-    */
-    void replace( int pos, int len, const QByteArray & after);
-
-    /*! Gives back a formatted image of the content of QHexEdit
-    */
-    QString toReadableString();
-
-    /*! Gives back a formatted image of the selected content of QHexEdit
-    */
-    QString selectionToReadableString();
-
-    /*! \cond docNever */
-    void setAddressOffset(int offset);
-    int addressOffset();
-    void setCursorPosition(int cusorPos);
-    int cursorPosition();
-    void setData(QByteArray const &data);
-    QByteArray data();
-    void setAddressAreaColor(QColor const &color);
-    QColor addressAreaColor();
-    void setHighlightingColor(QColor const &color);
-    QColor highlightingColor();
-    void setSelectionColor(QColor const &color);
-    QColor selectionColor();
-    void setOverwriteMode(bool);
-    bool overwriteMode();
-    void setReadOnly(bool);
-    bool isReadOnly();
-    const QFont &font() const;
-    void setFont(const QFont &);
-    /*! \endcond docNever */
-
-public slots:
-    /*! Redoes the last operation. If there is no operation to redo, i.e.
-      there is no redo step in the undo/redo history, nothing happens.
-      */
-    void redo();
-
-    /*! Set the minimum width of the address area.
-      \param addressWidth Width in characters.
-      */
-    void setAddressWidth(int addressWidth);
-
-    /*! Switch the address area on or off.
-      \param addressArea true (show it), false (hide it).
-      */
-    void setAddressArea(bool addressArea);
-
-    /*! Switch the ascii area on or off.
-      \param asciiArea true (show it), false (hide it).
-      */
-    void setAsciiArea(bool asciiArea);
-
-    /*! Switch the highlighting feature on or of.
-      \param mode true (show it), false (hide it).
-      */
-    void setHighlighting(bool mode);
-
-    /*! Undoes the last operation. If there is no operation to undo, i.e.
-      there is no undo step in the undo/redo history, nothing happens.
-      */
-    void undo();
-
-signals:
-
-    /*! Contains the address, where the cursor is located. */
-    void currentAddressChanged(int address);
-
-    /*! Contains the size of the data to edit. */
-    void currentSizeChanged(int size);
-
-    /*! The signal is emited every time, the data is changed. */
-    void dataChanged();
-
-    /*! The signal is emited every time, the overwrite mode is changed. */
-    void overwriteModeChanged(bool state);
-
-private:
-    /*! \cond docNever */
-    QHexEditPrivate    *m_qHexEdit_p;
-    QHBoxLayout        *m_Layout;
-    QScrollArea        *m_ScrollArea;
-    /*! \endcond docNever */
-};
-
-#endif
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit_p.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit_p.cpp
deleted file mode 100644
index 0e1f8b3491494a513add58eab191588b907961a3..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit_p.cpp
+++ /dev/null
@@ -1,882 +0,0 @@
-/*
-| ==============================================================================
-| Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-|
-| This code may be used in part, or in whole for your application development.
-|
-|==============================================================================
-|
-| THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-| WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-| NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-| DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-| INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-| OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF
-| LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-| NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-| EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-|
-| http://code.google.com/p/qhexedit2/
-|==============================================================================
-*/
-
-#include <QtGui>
-
-#include "QHexEdit_p.h"
-#include "Commands.h"
-
-const int HEXCHARS_IN_LINE = 47;
-const int GAP_ADR_HEX = 10;
-const int GAP_HEX_ASCII = 16;
-const int BYTES_PER_LINE = 16;
-
-QHexEditPrivate::QHexEditPrivate(QScrollArea *parent) : QWidget(parent)
-{
-    m_UndoStack = new QUndoStack(this);
-
-    m_ScrollArea = parent;
-    setAddressWidth(4);
-    setAddressOffset(0);
-    setAddressArea(true);
-    setAsciiArea(true);
-    setHighlighting(true);
-    setOverwriteMode(true);
-    setReadOnly(false);
-    setAddressAreaColor(QColor(0xd4, 0xd4, 0xd4, 0xff));
-    setHighlightingColor(QColor(0xff, 0xff, 0x99, 0xff));
-    setSelectionColor(QColor(0x6d, 0x9e, 0xff, 0xff));
-    setFont(QFont("Courier", 10));
-
-    m_Size = 0;
-    resetSelection(0);
-
-    setFocusPolicy(Qt::StrongFocus);
-
-    connect(&m_CursorTimer, SIGNAL(timeout()), this, SLOT(updateCursor()));
-    m_CursorTimer.setInterval(500);
-    m_CursorTimer.start();
-}
-
-void QHexEditPrivate::setAddressOffset(int offset)
-{
-    m_xData.setAddressOffset(offset);
-    adjust();
-}
-
-int QHexEditPrivate::addressOffset()
-{
-    return m_xData.addressOffset();
-}
-
-void QHexEditPrivate::setData(const QByteArray &data)
-{
-    m_xData.setData(data);
-    m_UndoStack->clear();
-    adjust();
-    setCursorPos(0);
-}
-
-QByteArray QHexEditPrivate::data()
-{
-    return m_xData.data();
-}
-
-void QHexEditPrivate::setAddressAreaColor(const QColor &color)
-{
-    m_AddressAreaColor = color;
-    update();
-}
-
-QColor QHexEditPrivate::addressAreaColor()
-{
-    return m_AddressAreaColor;
-}
-
-void QHexEditPrivate::setHighlightingColor(const QColor &color)
-{
-    m_HighlightingColor = color;
-    update();
-}
-
-QColor QHexEditPrivate::highlightingColor()
-{
-    return m_HighlightingColor;
-}
-
-void QHexEditPrivate::setSelectionColor(const QColor &color)
-{
-    m_SelectionColor = color;
-    update();
-}
-
-QColor QHexEditPrivate::selectionColor()
-{
-    return m_SelectionColor;
-}
-
-void QHexEditPrivate::setReadOnly(bool readOnly)
-{
-    m_ReadOnly = readOnly;
-}
-
-bool QHexEditPrivate::isReadOnly()
-{
-    return m_ReadOnly;
-}
-
-XByteArray & QHexEditPrivate::xData()
-{
-    return m_xData;
-}
-
-int QHexEditPrivate::indexOf(const QByteArray & ba, int from)
-{
-    if (from > (m_xData.data().length() - 1))
-        from = m_xData.data().length() - 1;
-    int idx = m_xData.data().indexOf(ba, from);
-    if (idx > -1)
-    {
-        int curPos = idx*2;
-        setCursorPos(curPos + ba.length()*2);
-        resetSelection(curPos);
-        setSelection(curPos + ba.length()*2);
-        ensureVisible();
-    }
-    return idx;
-}
-
-void QHexEditPrivate::insert(int index, const QByteArray & ba)
-{
-    if (ba.length() > 0)
-    {
-        if (m_OverwriteMode)
-        {
-            QUndoCommand *arrayCommand= new ArrayCommand(&m_xData, ArrayCommand::replace, index, ba, ba.length());
-            m_UndoStack->push(arrayCommand);
-            emit dataChanged();
-        }
-        else
-        {
-            QUndoCommand *arrayCommand= new ArrayCommand(&m_xData, ArrayCommand::insert, index, ba, ba.length());
-            m_UndoStack->push(arrayCommand);
-            emit dataChanged();
-        }
-    }
-}
-
-void QHexEditPrivate::insert(int index, char ch)
-{
-    QUndoCommand *charCommand = new CharCommand(&m_xData, CharCommand::insert, index, ch);
-    m_UndoStack->push(charCommand);
-    emit dataChanged();
-}
-
-int QHexEditPrivate::lastIndexOf(const QByteArray & ba, int from)
-{
-    from -= ba.length();
-    if (from < 0)
-        from = 0;
-    int idx = m_xData.data().lastIndexOf(ba, from);
-    if (idx > -1)
-    {
-        int curPos = idx*2;
-        setCursorPos(curPos);
-        resetSelection(curPos);
-        setSelection(curPos + ba.length()*2);
-        ensureVisible();
-    }
-    return idx;
-}
-
-void QHexEditPrivate::remove(int index, int len)
-{
-    if (len > 0)
-    {
-        if (len == 1)
-        {
-            if (m_OverwriteMode)
-            {
-                QUndoCommand *charCommand = new CharCommand(&m_xData, CharCommand::replace, index, char(0));
-                m_UndoStack->push(charCommand);
-                emit dataChanged();
-            }
-            else
-            {
-                QUndoCommand *charCommand = new CharCommand(&m_xData, CharCommand::remove, index, char(0));
-                m_UndoStack->push(charCommand);
-                emit dataChanged();
-            }
-        }
-        else
-        {
-            QByteArray ba = QByteArray(len, char(0));
-            if (m_OverwriteMode)
-            {
-                QUndoCommand *arrayCommand = new ArrayCommand(&m_xData, ArrayCommand::replace, index, ba, ba.length());
-                m_UndoStack->push(arrayCommand);
-                emit dataChanged();
-            }
-            else
-            {
-                QUndoCommand *arrayCommand= new ArrayCommand(&m_xData, ArrayCommand::remove, index, ba, len);
-                m_UndoStack->push(arrayCommand);
-                emit dataChanged();
-            }
-        }
-    }
-}
-
-void QHexEditPrivate::replace(int index, char ch)
-{
-    QUndoCommand *charCommand = new CharCommand(&m_xData, CharCommand::replace, index, ch);
-    m_UndoStack->push(charCommand);
-    resetSelection();
-    emit dataChanged();
-}
-
-void QHexEditPrivate::replace(int index, const QByteArray & ba)
-{
-    QUndoCommand *arrayCommand= new ArrayCommand(&m_xData, ArrayCommand::replace, index, ba, ba.length());
-    m_UndoStack->push(arrayCommand);
-    resetSelection();
-    emit dataChanged();
-}
-
-void QHexEditPrivate::replace(int pos, int len, const QByteArray &after)
-{
-    QUndoCommand *arrayCommand= new ArrayCommand(&m_xData, ArrayCommand::replace, pos, after, len);
-    m_UndoStack->push(arrayCommand);
-    resetSelection();
-    emit dataChanged();
-}
-
-void QHexEditPrivate::setAddressArea(bool addressArea)
-{
-    m_AddressArea = addressArea;
-    adjust();
-
-    setCursorPos(m_CursorPosition);
-}
-
-void QHexEditPrivate::setAddressWidth(int addressWidth)
-{
-    m_xData.setAddressWidth(addressWidth);
-
-    setCursorPos(m_CursorPosition);
-}
-
-void QHexEditPrivate::setAsciiArea(bool asciiArea)
-{
-    m_AsciiArea = asciiArea;
-    adjust();
-}
-
-void QHexEditPrivate::setFont(const QFont &font)
-{
-    QWidget::setFont(font);
-    adjust();
-}
-
-void QHexEditPrivate::setHighlighting(bool mode)
-{
-    m_Highlighting = mode;
-    update();
-}
-
-void QHexEditPrivate::setOverwriteMode(bool overwriteMode)
-{
-    m_OverwriteMode = overwriteMode;
-}
-
-bool QHexEditPrivate::overwriteMode()
-{
-    return m_OverwriteMode;
-}
-
-void QHexEditPrivate::redo()
-{
-    m_UndoStack->redo();
-    emit dataChanged();
-    setCursorPos(m_CursorPosition);
-    update();
-}
-
-void QHexEditPrivate::undo()
-{
-    m_UndoStack->undo();
-    emit dataChanged();
-    setCursorPos(m_CursorPosition);
-    update();
-}
-
-QString QHexEditPrivate::toRedableString()
-{
-    return m_xData.toRedableString();
-}
-
-
-QString QHexEditPrivate::selectionToReadableString()
-{
-    return m_xData.toRedableString(getSelectionBegin(), getSelectionEnd());
-}
-
-void QHexEditPrivate::keyPressEvent(QKeyEvent *event)
-{
-    int charX = (m_CursorX - m_xPosHex) / m_CharWidth;
-    int posX = (charX / 3) * 2 + (charX % 3);
-    int posBa = (m_CursorY / m_CharHeight) * BYTES_PER_LINE + posX / 2;
-
-
-    /*****************************************************************************/
-    /* Cursor movements */
-    /*****************************************************************************/
-
-    if (event->matches(QKeySequence::MoveToNextChar))
-    {
-        setCursorPos(m_CursorPosition + 1);
-        resetSelection(m_CursorPosition);
-    }
-    if (event->matches(QKeySequence::MoveToPreviousChar))
-    {
-        setCursorPos(m_CursorPosition - 1);
-        resetSelection(m_CursorPosition);
-    }
-    if (event->matches(QKeySequence::MoveToEndOfLine))
-    {
-        setCursorPos(m_CursorPosition | (2 * BYTES_PER_LINE -1));
-        resetSelection(m_CursorPosition);
-    }
-    if (event->matches(QKeySequence::MoveToStartOfLine))
-    {
-        setCursorPos(m_CursorPosition - (m_CursorPosition % (2 * BYTES_PER_LINE)));
-        resetSelection(m_CursorPosition);
-    }
-    if (event->matches(QKeySequence::MoveToPreviousLine))
-    {
-        setCursorPos(m_CursorPosition - (2 * BYTES_PER_LINE));
-        resetSelection(m_CursorPosition);
-    }
-    if (event->matches(QKeySequence::MoveToNextLine))
-    {
-        setCursorPos(m_CursorPosition + (2 * BYTES_PER_LINE));
-        resetSelection(m_CursorPosition);
-    }
-
-    if (event->matches(QKeySequence::MoveToNextPage))
-    {
-        setCursorPos(m_CursorPosition + (((m_ScrollArea->viewport()->height() / m_CharHeight) - 1) * 2 * BYTES_PER_LINE));
-        resetSelection(m_CursorPosition);
-    }
-    if (event->matches(QKeySequence::MoveToPreviousPage))
-    {
-        setCursorPos(m_CursorPosition - (((m_ScrollArea->viewport()->height() / m_CharHeight) - 1) * 2 * BYTES_PER_LINE));
-        resetSelection(m_CursorPosition);
-    }
-    if (event->matches(QKeySequence::MoveToEndOfDocument))
-    {
-        setCursorPos(m_xData.size() * 2);
-        resetSelection(m_CursorPosition);
-    }
-    if (event->matches(QKeySequence::MoveToStartOfDocument))
-    {
-        setCursorPos(0);
-        resetSelection(m_CursorPosition);
-    }
-
-    /*****************************************************************************/
-    /* Select commands */
-    /*****************************************************************************/
-    if (event->matches(QKeySequence::SelectAll))
-    {
-        resetSelection(0);
-        setSelection(2*m_xData.size() + 1);
-    }
-    if (event->matches(QKeySequence::SelectNextChar))
-    {
-        int pos = m_CursorPosition + 1;
-        setCursorPos(pos);
-        setSelection(pos);
-    }
-    if (event->matches(QKeySequence::SelectPreviousChar))
-    {
-        int pos = m_CursorPosition - 1;
-        setSelection(pos);
-        setCursorPos(pos);
-    }
-    if (event->matches(QKeySequence::SelectEndOfLine))
-    {
-        int pos = m_CursorPosition - (m_CursorPosition % (2 * BYTES_PER_LINE)) + (2 * BYTES_PER_LINE);
-        setCursorPos(pos);
-        setSelection(pos);
-    }
-    if (event->matches(QKeySequence::SelectStartOfLine))
-    {
-        int pos = m_CursorPosition - (m_CursorPosition % (2 * BYTES_PER_LINE));
-        setCursorPos(pos);
-        setSelection(pos);
-    }
-    if (event->matches(QKeySequence::SelectPreviousLine))
-    {
-        int pos = m_CursorPosition - (2 * BYTES_PER_LINE);
-        setCursorPos(pos);
-        setSelection(pos);
-    }
-    if (event->matches(QKeySequence::SelectNextLine))
-    {
-        int pos = m_CursorPosition + (2 * BYTES_PER_LINE);
-        setCursorPos(pos);
-        setSelection(pos);
-    }
-
-    if (event->matches(QKeySequence::SelectNextPage))
-    {
-        int pos = m_CursorPosition + (((m_ScrollArea->viewport()->height() / m_CharHeight) - 1) * 2 * BYTES_PER_LINE);
-        setCursorPos(pos);
-        setSelection(pos);
-    }
-    if (event->matches(QKeySequence::SelectPreviousPage))
-    {
-        int pos = m_CursorPosition - (((m_ScrollArea->viewport()->height() / m_CharHeight) - 1) * 2 * BYTES_PER_LINE);
-        setCursorPos(pos);
-        setSelection(pos);
-    }
-    if (event->matches(QKeySequence::SelectEndOfDocument))
-    {
-        int pos = m_xData.size() * 2;
-        setCursorPos(pos);
-        setSelection(pos);
-    }
-    if (event->matches(QKeySequence::SelectStartOfDocument))
-    {
-        int pos = 0;
-        setCursorPos(pos);
-        setSelection(pos);
-    }
-
-    /*****************************************************************************/
-    /* Edit Commands */
-    /*****************************************************************************/
-    if (!m_ReadOnly)
-    {
-        /* Hex input */
-        int key = int(event->text()[0].toAscii());
-        if ((key>='0' && key<='9') || (key>='a' && key <= 'f'))
-        {
-            if (getSelectionBegin() != getSelectionEnd())
-            {
-                posBa = getSelectionBegin();
-                remove(posBa, getSelectionEnd() - posBa);
-                setCursorPos(2*posBa);
-                resetSelection(2*posBa);
-            }
-
-            // If insert mode, then insert a byte
-            if (m_OverwriteMode == false)
-                if ((charX % 3) == 0)
-                {
-                    insert(posBa, char(0));
-                }
-
-                // Change content
-                if (m_xData.size() > 0)
-                {
-                    QByteArray hexValue = m_xData.data().mid(posBa, 1).toHex();
-                    if ((charX % 3) == 0)
-                        hexValue[0] = key;
-                    else
-                        hexValue[1] = key;
-
-                    replace(posBa, QByteArray().fromHex(hexValue)[0]);
-
-                    setCursorPos(m_CursorPosition + 1);
-                    resetSelection(m_CursorPosition);
-                }
-        }
-
-        /* Cut & Paste */
-        if (event->matches(QKeySequence::Cut))
-        {
-            QString result = QString();
-            for (int idx = getSelectionBegin(); idx < getSelectionEnd(); idx++)
-            {
-                result += m_xData.data().mid(idx, 1).toHex() + " ";
-                if ((idx % 16) == 15)
-                    result.append("\n");
-            }
-            remove(getSelectionBegin(), getSelectionEnd() - getSelectionBegin());
-            QClipboard *clipboard = QApplication::clipboard();
-            clipboard->setText(result);
-            setCursorPos(getSelectionBegin());
-            resetSelection(getSelectionBegin());
-        }
-
-        if (event->matches(QKeySequence::Paste))
-        {
-            QClipboard *clipboard = QApplication::clipboard();
-            QByteArray ba = QByteArray().fromHex(clipboard->text().toLatin1());
-            insert(m_CursorPosition / 2, ba);
-            setCursorPos(m_CursorPosition + 2 * ba.length());
-            resetSelection(getSelectionBegin());
-        }
-
-
-        /* Delete char */
-        if (event->matches(QKeySequence::Delete))
-        {
-            if (getSelectionBegin() != getSelectionEnd())
-            {
-                posBa = getSelectionBegin();
-                remove(posBa, getSelectionEnd() - posBa);
-                setCursorPos(2*posBa);
-                resetSelection(2*posBa);
-            }
-            else
-            {
-                if (m_OverwriteMode)
-                    replace(posBa, char(0));
-                else
-                    remove(posBa, 1);
-            }
-        }
-
-        /* Backspace */
-        if ((event->key() == Qt::Key_Backspace) && (event->modifiers() == Qt::NoModifier))
-        {
-            if (getSelectionBegin() != getSelectionEnd())
-            {
-                posBa = getSelectionBegin();
-                remove(posBa, getSelectionEnd() - posBa);
-                setCursorPos(2*posBa);
-                resetSelection(2*posBa);
-            }
-            else
-            {
-                if (posBa > 0)
-                {
-                    if (m_OverwriteMode)
-                        replace(posBa - 1, char(0));
-                    else
-                        remove(posBa - 1, 1);
-                    setCursorPos(m_CursorPosition - 2);
-                }
-            }
-        }
-
-        /* undo */
-        if (event->matches(QKeySequence::Undo))
-        {
-            undo();
-        }
-
-        /* redo */
-        if (event->matches(QKeySequence::Redo))
-        {
-            redo();
-        }
-
-    }
-
-    if (event->matches(QKeySequence::Copy))
-    {
-        QString result = QString();
-        for (int idx = getSelectionBegin(); idx < getSelectionEnd(); idx++)
-        {
-            result += m_xData.data().mid(idx, 1).toHex() + " ";
-            if ((idx % 16) == 15)
-                result.append('\n');
-        }
-        QClipboard *clipboard = QApplication::clipboard();
-        clipboard->setText(result);
-    }
-
-    // Switch between insert/overwrite mode
-    if ((event->key() == Qt::Key_Insert) && (event->modifiers() == Qt::NoModifier))
-    {
-        m_OverwriteMode = !m_OverwriteMode;
-        setCursorPos(m_CursorPosition);
-        overwriteModeChanged(m_OverwriteMode);
-    }
-
-    ensureVisible();
-    update();
-}
-
-void QHexEditPrivate::mouseMoveEvent(QMouseEvent * event)
-{
-    m_Blink = false;
-    update();
-    int actPos = cursorPos(event->pos());
-    setCursorPos(actPos);
-    setSelection(actPos);
-}
-
-void QHexEditPrivate::mousePressEvent(QMouseEvent * event)
-{
-    m_Blink = false;
-    update();
-    int cPos = cursorPos(event->pos());
-    resetSelection(cPos);
-    setCursorPos(cPos);
-}
-
-void QHexEditPrivate::paintEvent(QPaintEvent *event)
-{
-    QPainter painter(this);
-
-    // draw some patterns if needed
-    painter.fillRect(event->rect(), this->palette().color(QPalette::Base));
-    if (m_AddressArea)
-        painter.fillRect(QRect(m_xPosAdr, event->rect().top(), m_xPosHex - GAP_ADR_HEX + 2, height()), m_AddressAreaColor);
-    if (m_AsciiArea)
-    {
-        int linePos = m_xPosAscii - (GAP_HEX_ASCII / 2);
-        painter.setPen(Qt::gray);
-        painter.drawLine(linePos, event->rect().top(), linePos, height());
-    }
-
-    painter.setPen(this->palette().color(QPalette::WindowText));
-
-    // calc position
-    int firstLineIdx = ((event->rect().top()/ m_CharHeight) - m_CharHeight) * BYTES_PER_LINE;
-    if (firstLineIdx < 0)
-        firstLineIdx = 0;
-    int lastLineIdx = ((event->rect().bottom() / m_CharHeight) + m_CharHeight) * BYTES_PER_LINE;
-    if (lastLineIdx > m_xData.size())
-        lastLineIdx = m_xData.size();
-    int yPosStart = ((firstLineIdx) / BYTES_PER_LINE) * m_CharHeight + m_CharHeight;
-
-    // paint address area
-    if (m_AddressArea)
-    {
-        for (int lineIdx = firstLineIdx, yPos = yPosStart; lineIdx < lastLineIdx; lineIdx += BYTES_PER_LINE, yPos +=m_CharHeight)
-        {
-            QString address = QString("%1")
-                .arg(lineIdx + m_xData.addressOffset(), m_xData.realAddressNumbers(), 16, QChar('0'));
-            painter.drawText(m_xPosAdr, yPos, address);
-        }
-    }
-
-    // paint hex area
-    QByteArray hexBa(m_xData.data().mid(firstLineIdx, lastLineIdx - firstLineIdx + 1).toHex());
-    QBrush highLighted = QBrush(m_HighlightingColor);
-    QPen colHighlighted = QPen(this->palette().color(QPalette::WindowText));
-    QBrush selected = QBrush(m_SelectionColor);
-    QPen colSelected = QPen(Qt::white);
-    QPen colStandard = QPen(this->palette().color(QPalette::WindowText));
-
-    painter.setBackgroundMode(Qt::TransparentMode);
-
-    for (int lineIdx = firstLineIdx, yPos = yPosStart; lineIdx < lastLineIdx; lineIdx += BYTES_PER_LINE, yPos +=m_CharHeight)
-    {
-        QByteArray hex;
-        int xPos = m_xPosHex;
-        for (int colIdx = 0; ((lineIdx + colIdx) < m_xData.size() && (colIdx < BYTES_PER_LINE)); colIdx++)
-        {
-            int posBa = lineIdx + colIdx;
-            if ((getSelectionBegin() <= posBa) && (getSelectionEnd() > posBa))
-            {
-                painter.setBackground(selected);
-                painter.setBackgroundMode(Qt::OpaqueMode);
-                painter.setPen(colSelected);
-            }
-            else
-            {
-                if (m_Highlighting)
-                {
-                    // hilight diff bytes
-                    painter.setBackground(highLighted);
-                    if (m_xData.dataChanged(posBa))
-                    {
-                        painter.setPen(colHighlighted);
-                        painter.setBackgroundMode(Qt::OpaqueMode);
-                    }
-                    else
-                    {
-                        painter.setPen(colStandard);
-                        painter.setBackgroundMode(Qt::TransparentMode);
-                    }
-                }
-            }
-
-            // render hex value
-            if (colIdx == 0)
-            {
-                hex = hexBa.mid((lineIdx - firstLineIdx) * 2, 2);
-                painter.drawText(xPos, yPos, hex);
-                xPos += 2 * m_CharWidth;
-            } else {
-                hex = hexBa.mid((lineIdx + colIdx - firstLineIdx) * 2, 2).prepend(" ");
-                painter.drawText(xPos, yPos, hex);
-                xPos += 3 * m_CharWidth;
-            }
-
-        }
-    }
-    painter.setBackgroundMode(Qt::TransparentMode);
-    painter.setPen(this->palette().color(QPalette::WindowText));
-
-    // paint ascii area
-    if (m_AsciiArea)
-    {
-        for (int lineIdx = firstLineIdx, yPos = yPosStart; lineIdx < lastLineIdx; lineIdx += BYTES_PER_LINE, yPos +=m_CharHeight)
-        {
-            int xPosAscii = m_xPosAscii;
-            for (int colIdx = 0; ((lineIdx + colIdx) < m_xData.size() && (colIdx < BYTES_PER_LINE)); colIdx++)
-            {
-                painter.drawText(xPosAscii, yPos, m_xData.asciiChar(lineIdx + colIdx));
-                xPosAscii += m_CharWidth;
-            }
-        }
-    }
-
-    // paint cursor
-    if (m_Blink && !m_ReadOnly && hasFocus())
-    {
-        if (m_OverwriteMode)
-            painter.fillRect(m_CursorX, m_CursorY + m_CharHeight - 2, m_CharWidth, 2, this->palette().color(QPalette::WindowText));
-        else
-            painter.fillRect(m_CursorX, m_CursorY, 2, m_CharHeight, this->palette().color(QPalette::WindowText));
-    }
-
-    if (m_Size != m_xData.size())
-    {
-        m_Size = m_xData.size();
-        emit currentSizeChanged(m_Size);
-    }
-}
-
-void QHexEditPrivate::setCursorPos(int position)
-{
-    // delete cursor
-    m_Blink = false;
-    update();
-
-    // cursor in range?
-    if (m_OverwriteMode)
-    {
-        if (position > (m_xData.size() * 2 - 1))
-            position = m_xData.size() * 2 - 1;
-    } else {
-        if (position > (m_xData.size() * 2))
-            position = m_xData.size() * 2;
-    }
-
-    if (position < 0)
-        position = 0;
-
-    // calc position
-    m_CursorPosition = position;
-    m_CursorY = (position / (2 * BYTES_PER_LINE)) * m_CharHeight + 4;
-    int x = (position % (2 * BYTES_PER_LINE));
-    m_CursorX = (((x / 2) * 3) + (x % 2)) * m_CharWidth + m_xPosHex;
-
-    // immiadately draw cursor
-    m_Blink = true;
-    update();
-    emit currentAddressChanged(m_CursorPosition/2);
-}
-
-int QHexEditPrivate::cursorPos(QPoint pos)
-{
-    int result = -1;
-    // find char under cursor
-    if ((pos.x() >= m_xPosHex) && (pos.x() < (m_xPosHex + HEXCHARS_IN_LINE * m_CharWidth)))
-    {
-        int x = (pos.x() - m_xPosHex) / m_CharWidth;
-        if ((x % 3) == 0)
-            x = (x / 3) * 2;
-        else
-            x = ((x / 3) * 2) + 1;
-        int y = ((pos.y() - 3) / m_CharHeight) * 2 * BYTES_PER_LINE;
-        result = x + y;
-    }
-    return result;
-}
-
-int QHexEditPrivate::cursorPos()
-{
-    return m_CursorPosition;
-}
-
-void QHexEditPrivate::resetSelection()
-{
-    m_SelectionBegin = m_SelectionInit;
-    m_SelectionEnd = m_SelectionInit;
-}
-
-void QHexEditPrivate::resetSelection(int pos)
-{
-    if (pos < 0)
-        pos = 0;
-    pos = pos / 2;
-    m_SelectionInit = pos;
-    m_SelectionBegin = pos;
-    m_SelectionEnd = pos;
-}
-
-void QHexEditPrivate::setSelection(int pos)
-{
-    if (pos < 0)
-        pos = 0;
-    pos = pos / 2;
-    if (pos >= m_SelectionInit)
-    {
-        m_SelectionEnd = pos;
-        m_SelectionBegin = m_SelectionInit;
-    }
-    else
-    {
-        m_SelectionBegin = pos;
-        m_SelectionEnd = m_SelectionInit;
-    }
-}
-
-int QHexEditPrivate::getSelectionBegin()
-{
-    return m_SelectionBegin;
-}
-
-int QHexEditPrivate::getSelectionEnd()
-{
-    return m_SelectionEnd;
-}
-
-
-void QHexEditPrivate::updateCursor()
-{
-    if (m_Blink)
-        m_Blink = false;
-    else
-        m_Blink = true;
-    update(m_CursorX, m_CursorY, m_CharWidth, m_CharHeight);
-}
-
-void QHexEditPrivate::adjust()
-{
-    m_CharWidth = fontMetrics().width(QLatin1Char('9'));
-    m_CharHeight = fontMetrics().height();
-
-    m_xPosAdr = 0;
-    if (m_AddressArea)
-        m_xPosHex = m_xData.realAddressNumbers()*m_CharWidth + GAP_ADR_HEX;
-    else
-        m_xPosHex = 0;
-    m_xPosAscii = m_xPosHex + HEXCHARS_IN_LINE * m_CharWidth + GAP_HEX_ASCII;
-
-    // tell QAbstractScollbar, how big we are
-    setMinimumHeight(((m_xData.size()/16 + 1) * m_CharHeight) + 5);
-    if(m_AsciiArea)
-        setMinimumWidth(m_xPosAscii + (BYTES_PER_LINE * m_CharWidth));
-    else
-        setMinimumWidth(m_xPosHex + HEXCHARS_IN_LINE * m_CharWidth);
-
-    update();
-}
-
-void QHexEditPrivate::ensureVisible()
-{
-    // scrolls to cursorx, cusory (which are set by setCursorPos)
-    // x-margin is 3 pixels, y-margin is half of charHeight
-    m_ScrollArea->ensureVisible(m_CursorX, m_CursorY + m_CharHeight/2, 3, m_CharHeight/2 + 2);
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit_p.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit_p.h
deleted file mode 100644
index 78b147dc90e2f641311c9a5de3f8bced652c221f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/QHexEdit_p.h
+++ /dev/null
@@ -1,125 +0,0 @@
-#ifndef QHEXEDIT_P_H
-#define QHEXEDIT_P_H
-
-/** \cond docNever */
-
-
-#include <QtGui>
-#include "XByteArray.h"
-
-class QHexEditPrivate : public QWidget
-{
-    Q_OBJECT
-
-public:
-    QHexEditPrivate(QScrollArea *parent);
-
-    void setAddressAreaColor(QColor const &color);
-    QColor addressAreaColor();
-
-    void setAddressOffset(int offset);
-    int addressOffset();
-
-    void setCursorPos(int position);
-    int cursorPos();
-
-    void setData(QByteArray const &data);
-    QByteArray data();
-
-    void setHighlightingColor(QColor const &color);
-    QColor highlightingColor();
-
-    void setOverwriteMode(bool overwriteMode);
-    bool overwriteMode();
-
-    void setReadOnly(bool readOnly);
-    bool isReadOnly();
-
-    void setSelectionColor(QColor const &color);
-    QColor selectionColor();
-
-    XByteArray & xData();
-
-    int indexOf(const QByteArray & ba, int from = 0);
-    void insert(int index, const QByteArray & ba);
-    void insert(int index, char ch);
-    int lastIndexOf(const QByteArray & ba, int from = 0);
-    void remove(int index, int len=1);
-    void replace(int index, char ch);
-    void replace(int index, const QByteArray & ba);
-    void replace(int pos, int len, const QByteArray & after);
-
-    void setAddressArea(bool addressArea);
-    void setAddressWidth(int addressWidth);
-    void setAsciiArea(bool asciiArea);
-    void setHighlighting(bool mode);
-    virtual void setFont(const QFont &font);
-
-    void undo();
-    void redo();
-
-    QString toRedableString();
-    QString selectionToReadableString();
-
-signals:
-    void currentAddressChanged(int address);
-    void currentSizeChanged(int size);
-    void dataChanged();
-    void overwriteModeChanged(bool state);
-
-protected:
-    void keyPressEvent(QKeyEvent * event);
-    void mouseMoveEvent(QMouseEvent * event);
-    void mousePressEvent(QMouseEvent * event);
-
-    void paintEvent(QPaintEvent *event);
-
-    int cursorPos(QPoint pos);          // calc cursorpos from graphics position. DOES NOT STORE POSITION
-
-    void resetSelection(int pos);       // set selectionStart and selectionEnd to pos
-    void resetSelection();              // set selectionEnd to selectionStart
-    void setSelection(int pos);         // set min (if below init) or max (if greater init)
-    int getSelectionBegin();
-    int getSelectionEnd();
-
-
-    private slots:
-        void updateCursor();
-
-private:
-    void adjust();
-    void ensureVisible();
-
-    QColor          m_AddressAreaColor;
-    QColor          m_HighlightingColor;
-    QColor          m_SelectionColor;
-    QScrollArea    *m_ScrollArea;
-    QTimer          m_CursorTimer;
-    QUndoStack     *m_UndoStack;
-
-    XByteArray      m_xData;                            // has content of Hex Editors
-
-    bool            m_Blink;                            // true: then cursor blinks
-    bool            m_RenderingRequired;                // Flag to store that rendering is necessary
-    bool            m_AddressArea;                      // left area of QHexEdit
-    bool            m_AsciiArea;                        // medium area
-    bool            m_Highlighting;                     // highlighting of changed bytes
-    bool            m_OverwriteMode;
-    bool            m_ReadOnly;                         // true: the user can only look and navigate
-
-    int             m_CharWidth, m_CharHeight;          // char dimensions (dpendend on font)
-    int             m_CursorX, m_CursorY;               // graphics position of the cursor
-    int             m_CursorPosition;                   // character positioin in stream (on byte ends in to steps)
-    int             m_xPosAdr, m_xPosHex, m_xPosAscii;  // graphics x-position of the areas
-
-    int             m_SelectionBegin;                    // First selected char
-    int             m_SelectionEnd;                      // Last selected char
-    int             m_SelectionInit;                     // That's, where we pressed the mouse button
-
-    int             m_Size;
-};
-
-/** \endcond docNever */
-
-#endif
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/XByteArray.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/XByteArray.cpp
deleted file mode 100644
index 2b615149cdbb33ab884bcc1c82ef04e4972c1472..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/XByteArray.cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
-| ==============================================================================
-| Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-|
-| This code may be used in part, or in whole for your application development.
-|
-|==============================================================================
-|
-| THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-| WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-| NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-| DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-| INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-| OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF
-| LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-| NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-| EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-|
-| http://code.google.com/p/qhexedit2/
-|==============================================================================
-*/
-#include "XByteArray.h"
-
-XByteArray::XByteArray()
-{
-    m_OldSize = -99;
-    m_AddressNumbers = 4;
-    m_AddressOffset = 0;
-
-}
-
-int XByteArray::addressOffset()
-{
-    return m_AddressOffset;
-}
-
-void XByteArray::setAddressOffset(int offset)
-{
-    m_AddressOffset = offset;
-}
-
-int XByteArray::addressWidth()
-{
-    return m_AddressNumbers;
-}
-
-void XByteArray::setAddressWidth(int width)
-{
-    if ((width >= 0) && (width<=6))
-    {
-        m_AddressNumbers = width;
-    }
-}
-
-QByteArray & XByteArray::data()
-{
-    return m_Data;
-}
-
-void XByteArray::setData(QByteArray data)
-{
-    m_Data = data;
-    m_ChangedData = QByteArray(data.length(), char(0));
-}
-
-bool XByteArray::dataChanged(int i)
-{
-    return bool(m_ChangedData[i]);
-}
-
-QByteArray XByteArray::dataChanged(int i, int len)
-{
-    return m_ChangedData.mid(i, len);
-}
-
-void XByteArray::setDataChanged(int i, bool state)
-{
-    m_ChangedData[i] = char(state);
-}
-
-void XByteArray::setDataChanged(int i, const QByteArray & state)
-{
-    int length = state.length();
-    int len;
-    if ((i + length) > m_ChangedData.length())
-        len = m_ChangedData.length() - i;
-    else
-        len = length;
-    m_ChangedData.replace(i, len, state);
-}
-
-int XByteArray::realAddressNumbers()
-{
-    if (m_OldSize != m_Data.size())
-    {
-        // is addressNumbers wide enought?
-        QString test = QString("%1")
-            .arg(m_Data.size() + m_AddressOffset, m_AddressNumbers, 16, QChar('0'));
-        m_RealAddressNumbers = test.size();
-    }
-    return m_RealAddressNumbers;
-}
-
-int XByteArray::size()
-{
-    return m_Data.size();
-}
-
-QByteArray & XByteArray::insert(int i, char ch)
-{
-    m_Data.insert(i, ch);
-    m_ChangedData.insert(i, char(1));
-    return m_Data;
-}
-
-QByteArray & XByteArray::insert(int i, const QByteArray & ba)
-{
-    m_Data.insert(i, ba);
-    m_ChangedData.insert(i, QByteArray(ba.length(), char(1)));
-    return m_Data;
-}
-
-QByteArray & XByteArray::remove(int i, int len)
-{
-    m_Data.remove(i, len);
-    m_ChangedData.remove(i, len);
-    return m_Data;
-}
-
-QByteArray & XByteArray::replace(int index, char ch)
-{
-    m_Data[index] = ch;
-    m_ChangedData[index] = char(1);
-    return m_Data;
-}
-
-QByteArray & XByteArray::replace(int index, const QByteArray & ba)
-{
-    int len = ba.length();
-    return replace(index, len, ba);
-}
-
-QByteArray & XByteArray::replace(int index, int length, const QByteArray & ba)
-{
-    int len;
-    if ((index + length) > m_Data.length())
-        len = m_Data.length() - index;
-    else
-        len = length;
-    m_Data.replace(index, len, ba.mid(0, len));
-    m_ChangedData.replace(index, len, QByteArray(len, char(1)));
-    return m_Data;
-}
-
-QChar XByteArray::asciiChar(int index)
-{
-    char ch = m_Data[index];
-    if ((ch < 0x20) || (ch > 0x7e))
-        ch = '.';
-    return QChar(ch);
-}
-
-QString XByteArray::toRedableString(int start, int end)
-{
-    int adrWidth = realAddressNumbers();
-    if (m_AddressNumbers > adrWidth)
-        adrWidth = m_AddressNumbers;
-    if (end < 0)
-        end = m_Data.size();
-
-    QString result;
-    for (int i=start; i < end; i += 16)
-    {
-        QString adrStr = QString("%1").arg(m_AddressOffset + i, adrWidth, 16, QChar('0'));
-        QString hexStr;
-        QString ascStr;
-        for (int j=0; j<16; j++)
-        {
-            if ((i + j) < m_Data.size())
-            {
-                hexStr.append(" ").append(m_Data.mid(i+j, 1).toHex());
-                ascStr.append(asciiChar(i+j));
-            }
-        }
-        result += adrStr + " " + QString("%1").arg(hexStr, -48) + "  " + QString("%1").arg(ascStr, -17) + "\n";
-    }
-    return result;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/XByteArray.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/XByteArray.h
deleted file mode 100644
index 3bb52e1038cd4ecd6b4b3fbca3cd4cf58f604102..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/HexEditor/XByteArray.h
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef XBYTEARRAY_H
-#define XBYTEARRAY_H
-
-/** \cond docNever */
-
-#include <QtCore>
-
-/*! XByteArray represents the content of QHexEcit.
-XByteArray comprehend the data itself and informations to store if it was
-changed. The QHexEdit component uses these informations to perform nice
-rendering of the data
-
-XByteArray also provides some functionality to insert, replace and remove
-single chars and QByteArras. Additionally some functions support rendering
-and converting to readable strings.
-*/
-class XByteArray
-{
-public:
-    explicit XByteArray();
-
-    int addressOffset();
-    void setAddressOffset(int offset);
-
-    int addressWidth();
-    void setAddressWidth(int width);
-
-    QByteArray & data();
-    void setData(QByteArray data);
-
-    bool dataChanged(int i);
-    QByteArray dataChanged(int i, int len);
-    void setDataChanged(int i, bool state);
-    void setDataChanged(int i, const QByteArray & state);
-
-    int realAddressNumbers();
-    int size();
-
-    QByteArray & insert(int i, char ch);
-    QByteArray & insert(int i, const QByteArray & ba);
-
-    QByteArray & remove(int pos, int len);
-
-    QByteArray & replace(int index, char ch);
-    QByteArray & replace(int index, const QByteArray & ba);
-    QByteArray & replace(int index, int length, const QByteArray & ba);
-
-    QChar asciiChar(int index);
-    QString toRedableString(int start=0, int end=-1);
-
-signals:
-
-    public slots:
-
-private:
-    QByteArray  m_Data;
-    QByteArray  m_ChangedData;
-
-    int         m_AddressNumbers;                    // wanted width of address area
-    int         m_AddressOffset;                     // will be added to the real addres inside bytearray
-    int         m_RealAddressNumbers;                // real width of address area (can be greater then wanted width)
-    int         m_OldSize;                           // size of data
-};
-
-/** \endcond docNever */
-#endif // XBYTEARRAY_H
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/Histogram.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/Histogram.cpp
deleted file mode 100644
index c0b2ef6c9ddbff0a1b8f7e85173dcca4bf3e0f2a..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/Histogram.cpp
+++ /dev/null
@@ -1,305 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Histogram.cpp
-
-  Description: populate histogram 
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
- [program/widget] is based in part on the work of
- the Qwt project (http://qwt.sf.net).
-=============================================================================*/
-
-
-#include <QLayout>
-#include "Histogram.h"
-
-#include "../ExternLib/qwt/qwt_scale_engine.h"
-#include "../ExternLib/qwt/qwt_point_data.h"
-#include "../ExternLib/qwt/qwt_plot_canvas.h"
-
-
-
-class HistogramSource : public QwtSyntheticPointData
-{
-public:
-    HistogramSource(const QVector<quint32>& h, int maxValue = 0, int offset = 0)
-        : QwtSyntheticPointData(h.size(), QwtInterval(0, h.size()-1)),
-        mMaxValue(maxValue), mOffset(offset)
-    {
-        mData = h;
-    }
-    
-    virtual QPointF sample( size_t index ) const
-    {
-        return QPointF((qreal)x(index), (qreal)y(x(index)));
-    }
-
-    virtual double y(double x) const
-    {
-        return mData[(int)x];
-    }
-
-    virtual double x( uint index ) const 
-    { 
-        return (index >= 0 && index < size() ? index : 0); 
-    }
-
-protected:
-    QVector<quint32> mData;
-    double mMaxValue;      //if zero do not normalize Y to scale of mMaxValue
-    double mOffset;
-};
-
-
-Histogram::Histogram(const char* name, int maxValueX, QWidget *parent): QwtPlot(parent), 
-                                                                        m_Mono(NULL),
-                                                                        m_Red(NULL),
-                                                                        m_Green(NULL),
-                                                                        m_Blue(NULL),
-                                                                        m_MonoCurve(NULL), 
-                                                                        m_RedCurve(NULL), 
-                                                                        m_GreenCurve(NULL), 
-                                                                        m_BlueCurve(NULL),
-                                                                        m_YCurve(NULL),
-                                                                        m_UCurve(NULL),
-                                                                        m_VCurve(NULL),
-                                                                        m_Y(NULL),
-                                                                        m_U(NULL),
-                                                                        m_V(NULL),
-                                                                        m_MaxValueX(maxValueX),
-                                                                        m_MaxValueY(0),
-                                                                        m_dYAxisMaximum(0)
-{
-    setAutoReplot(false);
-
-    // panning with the left mouse button
-    (void) new QwtPlotPanner( canvas() );
-
-    // zoom in/out with the wheel
-    (void) new QwtPlotMagnifier( canvas() );
-
-    setAutoFillBackground( true );
-
-    setTitle(name);
-    insertLegend(new QwtLegend(), QwtPlot::RightLegend);
-
-    // grid 
-    QwtPlotGrid *grid = new QwtPlotGrid;
-    grid->enableXMin(true);
-    grid->enableYMin(true);
-    grid->setMajorPen(QPen(Qt::black, 0, Qt::DotLine));
-    grid->setMinorPen(QPen(Qt::gray, 0 , Qt::DotLine));
-    grid->attach(this);
-
-    // axes
-    //setAxisScale(xBottom, 0.0, mMaxValueX);
-    //setAxisScale(yLeft, 0.0, 1400000.0);
-    setAxisAutoScale(xBottom, true);
-    setAxisAutoScale(yLeft, true);
-    
-    //// canvas
-    QwtPlotCanvas *plotCanvas = new QwtPlotCanvas();
-    plotCanvas->setBorderRadius( 5 );
-    plotCanvas->setLineWidth(1); 
-    plotCanvas->setFrameStyle(QFrame::Box | QFrame::Plain );
-    setCanvas(plotCanvas); 
-
-    QPalette canvasPalette( Qt::white );
-    canvasPalette.setColor( QPalette::Foreground, QColor( 133, 190, 232 ) );
-    canvas()->setPalette( canvasPalette );
-
-    // Insert new curves
-    QPen penMono(Qt::black);
-    penMono.setWidth(2);
-    m_MonoCurve = new QwtPlotCurve(tr("mono"));
-    m_MonoCurve->setStyle(QwtPlotCurve::Lines);
-    //m_MonoCurve->setBrush(Qt::black);
-    m_MonoCurve->setPen(penMono);
-    m_MonoCurve->setYAxis(QwtPlot::yLeft);
-    m_MonoCurve->attach(this);
-
-    QPen penRed(Qt::red);
-    penRed.setWidth(2);
-    m_RedCurve = new QwtPlotCurve(tr("red"));
-    //m_RedCurve->setBrush(Qt::red);
-    m_RedCurve->setStyle(QwtPlotCurve::Lines);
-    m_RedCurve->setPen(penRed);
-    m_RedCurve->setYAxis(QwtPlot::yLeft);
-    m_RedCurve->attach(this);
-
-    QPen penGreen(Qt::green);
-    penGreen.setWidth(2);
-    m_GreenCurve = new QwtPlotCurve(tr("green"));
-    //m_GreenCurve->setBrush(Qt::green);
-    m_GreenCurve->setStyle(QwtPlotCurve::Lines);
-    m_GreenCurve->setPen(penGreen);
-    m_GreenCurve->setYAxis(QwtPlot::yLeft);
-    m_GreenCurve->attach(this);
-
-    QPen penBlue(Qt::blue);
-    penBlue.setWidth(2);
-    m_BlueCurve = new QwtPlotCurve(tr("blue"));
-    //m_BlueCurve->setBrush(Qt::blue);
-    m_BlueCurve->setStyle(QwtPlotCurve::Lines);    
-    m_BlueCurve->setPen(penBlue);
-    m_BlueCurve->setYAxis(QwtPlot::yLeft);
-    m_BlueCurve->attach(this);
-
-    QPen penYellow(Qt::darkYellow);
-    penYellow.setWidth(2);
-    m_YCurve = new QwtPlotCurve(tr("Y"));
-    //m_YCurve->setBrush(Qt::darkYellow);
-    m_YCurve->setStyle(QwtPlotCurve::Lines);
-    m_YCurve->setPen(penYellow);
-    m_YCurve->setYAxis(QwtPlot::yLeft);
-    m_YCurve->attach(this);
-
-    QPen penCyan(Qt::darkCyan);
-    penCyan.setWidth(2);
-    m_UCurve = new QwtPlotCurve(tr("U"));
-    //m_UCurve->setBrush(Qt::darkCyan);
-    m_UCurve->setStyle(QwtPlotCurve::Lines);
-    m_UCurve->setPen(penCyan);
-    m_UCurve->setYAxis(QwtPlot::yLeft);
-    m_UCurve->attach(this);
-
-    QPen penMagenta(Qt::darkMagenta);
-    penMagenta.setWidth(2);
-    m_VCurve = new QwtPlotCurve(tr("V"));
-    //m_VCurve->setBrush(Qt::darkMagenta);
-    m_VCurve->setStyle(QwtPlotCurve::Lines);
-    m_VCurve->setPen(penMagenta);
-    m_VCurve->setYAxis(QwtPlot::yLeft);
-    m_VCurve->attach(this);
-
-    // picker 
-    m_PlotPicker = new QwtPlotPicker(QwtPlot::xBottom, QwtPlot::yLeft, QwtPlotPicker::CrossRubberBand, QwtPicker::AlwaysOn, canvas());
-    m_PlotPicker->setStateMachine(new QwtPickerDragPointMachine());
-    m_PlotPicker->setRubberBandPen(QColor( 128, 0, 0 ));
-    m_PlotPicker->setRubberBand(QwtPicker::CrossRubberBand);
-    m_PlotPicker->setTrackerPen(QColor( 128, 0, 0 ));
-    
-    setAutoReplot(true);
-}
-
-Histogram::~Histogram()
-{
-}
-
-void Histogram::resizeEvent(QResizeEvent *event)
-{
-    QwtPlot::resizeEvent( event );
-}
-
-void Histogram::populate( const QVector<quint32> &histogramData, const QString &sColorComponent )
-{
-    const bool doReplot = autoReplot();
-    setAutoReplot(false);
-
-    if( 0 == sColorComponent.compare("M") )
-    {
-        m_Mono = new HistogramSource(histogramData, m_dYAxisMaximum, 0);
-        m_MonoCurve->setData(m_Mono);
-    }
-
-    if( 0 == sColorComponent.compare("R") )
-    {
-        m_Red = new HistogramSource(histogramData, m_dYAxisMaximum, 0); 
-        m_RedCurve->setData(m_Red);
-    }
-
-    if( 0 == sColorComponent.compare("G") )
-    {
-        m_Green = new HistogramSource(histogramData, m_dYAxisMaximum, 0); 
-        m_GreenCurve->setData(m_Green);
-    }
-
-    if( 0 == sColorComponent.compare("B") )
-    {
-        m_Blue = new HistogramSource(histogramData, m_dYAxisMaximum, 0); 
-        m_BlueCurve->setData(m_Blue);
-    }
-
-    if( 0 == sColorComponent.compare("Y") )
-    {
-        m_Y = new HistogramSource(histogramData, m_dYAxisMaximum, 0); 
-        m_YCurve->setData(m_Y);
-    }
-
-    if( 0 == sColorComponent.compare("U") )
-    {
-        m_U = new HistogramSource(histogramData, m_dYAxisMaximum, 0); 
-        m_UCurve->setData(m_U);
-    }
-        
-    if( 0 == sColorComponent.compare("V") )
-    {
-        m_V = new HistogramSource(histogramData, m_dYAxisMaximum, 0); 
-        m_VCurve->setData(m_V);
-    }
-
-    setAutoReplot(doReplot);
-    replot();    
-}
-
-void Histogram::setHistogramTitle ( const QString &sTitle )
-{
-    setTitle (sTitle);
-}
-
-void Histogram::setLeftAxisY ( const double &dMaximum )
-{
-    //reset pen
-    QPen penBlack(Qt::black);
-    penBlack.setWidth(1);
-    m_MonoCurve->setPen(penBlack);
-    m_RedCurve->setPen(penBlack);
-    m_GreenCurve->setPen(penBlack);
-    m_BlueCurve->setPen(penBlack);
-    setAxisScale(yLeft, 0.0, dMaximum ); 
-    m_dYAxisMaximum = dMaximum;
-}
-
-void Histogram::setBottomAxisX ( const double &dMaximum )
-{
-    //set pen to default
-    QPen penBlack(Qt::black);
-    penBlack.setWidth(2);
-    m_MonoCurve->setPen(penBlack);
-    
-    QPen penRed(Qt::red);
-    penRed.setWidth(2);
-    m_RedCurve->setPen(penRed);
-
-    QPen penGreen(Qt::green);
-    penGreen.setWidth(2);
-    m_GreenCurve->setPen(penGreen);
-
-    QPen penBlue(Qt::blue);
-    penBlue.setWidth(2);
-    m_BlueCurve->setPen(penBlue);
-
-    setAxisScale(xBottom, 0.0, dMaximum ); 
-}
-
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/Histogram.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/Histogram.h
deleted file mode 100644
index bd306ee2b21bd7dbc0158f51071dccc91c3a34d3..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/Histogram.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Histogram.cpp
-
-  Description: populate histogram 
-               
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
- [program/widget] is based in part on the work of
- the Qwt project (http://qwt.sf.net).
-=============================================================================*/
-#ifndef HISTOGRAM_H
-#define HISTOGRAM_H
-
-#include "../ExternLib/qwt/qwt_plot.h"
-#include "../ExternLib/qwt/qwt_plot_curve.h"
-#include "../ExternLib/qwt/qwt_plot_marker.h"
-#include "../ExternLib/qwt/qwt_plot_picker.h"
-#include "../ExternLib/qwt/qwt_plot_renderer.h"
-#include "../ExternLib/qwt/qwt_plot_grid.h"
-#include "../ExternLib/qwt/qwt_plot_picker.h"
-#include "../ExternLib/qwt/qwt_legend.h"
-#include "../ExternLib/qwt/qwt_plot_panner.h"
-#include "../ExternLib/qwt/qwt_plot_magnifier.h"
-#include "../ExternLib/qwt/qwt_picker_machine.h"
-
-
-#include "../ExternLib/qwt/qwt_slider.h"
-
-class HistogramSource;
-
-class Histogram : public QwtPlot
-{
-    public:
-            explicit Histogram(const char* name, int maxValue, QWidget *parent = 0);
-            ~Histogram();
-
-            void populate            ( const QVector<quint32> &histogramData, const QString &sColorComponent );
-            void setHistogramTitle    ( const QString &sTitle );
-            void setLeftAxisY        ( const double &dMaximum );
-            void setBottomAxisX        ( const double &dMaximum );
-
-    protected:
-            virtual void resizeEvent( QResizeEvent * );
-
-    private:
-            HistogramSource    *m_Mono;
-            HistogramSource    *m_Red;
-            HistogramSource    *m_Green;
-            HistogramSource    *m_Blue;
-            HistogramSource    *m_Y;
-            HistogramSource    *m_U;
-            HistogramSource    *m_V;
-
-            QwtPlotCurve       *m_MonoCurve;
-            QwtPlotCurve       *m_RedCurve;
-            QwtPlotCurve       *m_GreenCurve;
-            QwtPlotCurve       *m_BlueCurve;
-
-            QwtPlotCurve       *m_YCurve;
-            QwtPlotCurve       *m_UCurve;
-            QwtPlotCurve       *m_VCurve;
-
-            QwtPlotPicker      *m_PlotPicker;
-
-            quint32             m_MaxValueX;
-            quint32             m_MaxValueY;
-            double              m_dYAxisMaximum;
-
-            signals:
-
-            public slots:
-};
-
-#endif // HISTOGRAM_H
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramThread.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramThread.cpp
deleted file mode 100644
index 6f73f0a554dacb7d9daef7f1aaf72e431406656e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramThread.cpp
+++ /dev/null
@@ -1,1112 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        HistogramThread.cpp
-
-  Description: a worker thread to  process histogram data
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "stdint.h"
-#include <algorithm>
-#include <limits>
-#include <exception>
-#include "HistogramThread.h"
-#include <QStringList>
-#include "Helper.h"
-#ifdef max
-#undef max
-#endif
-
-#define MIN( a, b ) (((a) < (b)) ? (a) : (b))
-#define MAX( a, b ) (((a) > (b)) ? (a) : (b))
-
-HistogramThread::HistogramThread ( )
-    : m_Stopping ( false )
-    , m_FrameInfo(1)
-{
-
-}
-
-HistogramThread::~HistogramThread ( )
-{
-
-    stopProcessing();
-    wait();
-}
-void HistogramThread::stopProcessing()
-{
-    QMutexLocker local_lock( &m_Lock    );
-    m_Stopping = true;
-    m_FrameInfo.StopProcessing();
-}
-
-void HistogramThread::setThreadFrame ( const tFrameInfo &info )
-{
-    QMutexLocker local_lock( &m_Lock    );
-    if( m_Stopping)
-    {
-        return;
-    }
-    m_FrameInfo.Enqueue( info );
-}
-enum
-{
-    display_interval = 40,
-};
-void HistogramThread::run()
-{
-    QTime       throttle_timer;
-    int         last_time = 0;
-    
-    tFrameInfo  localFrameInfo;
-    throttle_timer.start();
-    while( m_FrameInfo.WaitData( localFrameInfo )  )
-    {
-        if( m_Stopping)
-        {
-            return;
-        };
-        const int time_elapsed = throttle_timer.elapsed();
-        const int delta_time = time_elapsed -last_time;
-        if( delta_time >= display_interval)
-        {
-            last_time = time_elapsed -(delta_time - display_interval);
-            switch(localFrameInfo.PixelFormat() )
-            {
-                /* Monochrome, 8 bits */
-            case VmbPixelFormatMono8: 
-                histogramMono8( localFrameInfo );
-                break;
-
-                // Monochrome, 10 bits in 16 bits
-            case VmbPixelFormatMono10:
-                histogramNotSupportedYet( localFrameInfo );
-                break;
-
-                // Monochrome, 12 bits in 16 bits
-            case VmbPixelFormatMono12:
-                histogramNotSupportedYet( localFrameInfo );
-                break;
-
-                // Monochrome, 2x12 bits in 24 bits
-            case VmbPixelFormatMono12Packed:
-                histogramNotSupportedYet( localFrameInfo );
-                break;
-
-                // Monochrome, 14 bits in 16 bits
-            case VmbPixelFormatMono14:
-                histogramNotSupportedYet( localFrameInfo );
-                break;
-
-                // Monochrome, 16 bits
-            case VmbPixelFormatMono16:
-                histogramNotSupportedYet( localFrameInfo );
-                break;
-
-                // Bayer-color, 8 bits
-            case VmbPixelFormatBayerGR8:
-                histogramNotSupportedYet( localFrameInfo );
-                break;
-
-                // Bayer-color, 8 bits
-            case VmbPixelFormatBayerRG8:
-                histogramBayerRG8(  localFrameInfo );
-                break;
-
-                // Bayer-color, 8 bits
-            case VmbPixelFormatBayerGB8:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // Bayer-color, 8 bits
-            case VmbPixelFormatBayerBG8:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // Bayer-color, 10 bits in 16 bits
-            case VmbPixelFormatBayerGR10:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // Bayer-color, 10 bits in 16 bits
-            case VmbPixelFormatBayerRG10:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // Bayer-color, 10 bits in 16 bits
-            case VmbPixelFormatBayerGB10:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // Bayer-color, 10 bits in 16 bits
-            case VmbPixelFormatBayerBG10:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // Bayer-color, 12 bits in 16 bits
-            case VmbPixelFormatBayerGR12:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // Bayer-color, 12 bits in 16 bits
-            case VmbPixelFormatBayerRG12:
-                histogramBayerRG12( localFrameInfo);
-                break;
-
-                // Bayer-color, 12 bits in 16 bits
-            case VmbPixelFormatBayerGB12:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // Bayer-color, 12 bits in 16 bits
-            case VmbPixelFormatBayerBG12:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // Bayer-color, 12 bits in 16 bits
-            case VmbPixelFormatBayerRG12Packed:
-                histogramBayerRG12Packed( localFrameInfo);
-                break;
-
-            case VmbPixelFormatBayerGR12Packed:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-            case VmbPixelFormatBayerGB12Packed:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-            case VmbPixelFormatBayerBG12Packed:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-        
-            case VmbPixelFormatBayerGR16:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-            case VmbPixelFormatBayerRG16:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-            case VmbPixelFormatBayerGB16:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-            case VmbPixelFormatBayerBG16:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                /* RGB, 8 bits x 3 */
-            case VmbPixelFormatRgb8:
-                histogramRGB8( localFrameInfo);
-                break;
-
-                // BGR, 8 bits x 3
-            case VmbPixelFormatBgr8:
-                histogramBGR8( localFrameInfo);
-                break;
-
-                // ARGB, 8 bits x 4
-            case VmbPixelFormatArgb8:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // RGBA, 8 bits x 4, legacy name
-                /*
-            case VmbPixelFormatRgba8:
-                break;
-                */
-                // BGRA, 8 bits x 4
-            case VmbPixelFormatBgra8:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // RGB, 16 bits x 3
-            case VmbPixelFormatRgb16:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-
-                // YUV 411 with 8 bits
-            case VmbPixelFormatYuv411:
-                histogramYUV411( localFrameInfo);
-                break;
-
-                // YUV  422
-            case VmbPixelFormatYuv422:
-                histogramYUV422( localFrameInfo);
-                break;
-
-                // YUV 444
-            case VmbPixelFormatYuv444:
-                histogramYUV444( localFrameInfo);
-                break;
-
-            default:
-                histogramNotSupportedYet( localFrameInfo);
-                break;
-            }
-        }
-    }
-}
-
-void HistogramThread::histogramMono8 (  const tFrameInfo &info )
-{
-    QVector <QStringList> vStatistics;
-    QStringList sStatistics;
-    
-    QVector<QVector<quint32> >  monoValues( 1, QVector<quint32>( 256,0 ) );
-    QVector<quint32> &          histo = *monoValues.begin();
-    
-    const unsigned char *lSrc = info.Data();
-    const unsigned char *lDest = info.Data() + ( info.Width() * info.Height() );
-
-    while ( lSrc < lDest )
-    {
-        const VmbUint8_t tmp = *lSrc;
-        ++histo[ *lSrc ];
-        ++lSrc;
-    }
-
-
-    statistics<VmbUint8_t> stat = calcWeightedMean<VmbUint8_t>( histo );
-
-    sStatistics << "Y" <<  QString::number(stat.Min) << QString::number(stat.Max) << QString::number(stat.Mean); 
-    vStatistics.push_back(sStatistics);
-    if( !m_Stopping )
-    {
-        emit histogramDataFromThread ( monoValues, 
-                                        QString( "Mono8 (" + QString::number( info.Width() ) + 
-                                        " x " + QString::number( info.Height() ) + ")"  ),
-                                        (double) info.Size(),
-                                        double(255),  vStatistics );
-    }
-}
-
-void HistogramThread::histogramRGB8 ( const tFrameInfo &info )
-{
-    QVector <QStringList> vStatistics;
-    QStringList redStatistics;
-    QStringList blueStatistics;
-    QStringList greenStatistics;
-
-    QVector<QVector<quint32> > RGBValues;
-    QVector<quint32> redValues;
-    QVector<quint32> greenValues;
-    QVector<quint32> blueValues;
-
-    redValues.resize(256);
-    greenValues.resize(256);
-    blueValues.resize(256);
-
-    const unsigned char *lSrc = info.Data();
-    const unsigned char *lDest = info.Data() + ( info.Size());
-
-    while ( lSrc < lDest )
-    {
-        // R
-        ++redValues[ *lSrc ];
-        // G
-        ++lSrc;
-        ++greenValues[ *lSrc ];
-        // B
-        ++lSrc;
-        ++blueValues[ *lSrc ];
-        // Move to Red
-        ++lSrc;
-    }
-
-    RGBValues.push_back(redValues);
-    RGBValues.push_back(greenValues);
-    RGBValues.push_back(blueValues);
-
-    statistics<VmbUint8_t> RedStat      = calcWeightedMean<VmbUint8_t>( redValues );
-    statistics<VmbUint8_t> GreenStat    = calcWeightedMean<VmbUint8_t>( greenValues);
-    statistics<VmbUint8_t> BlueStat     = calcWeightedMean<VmbUint8_t>( blueValues );
-
-    redStatistics   << "Red"   <<  QString::number(RedStat.Min)   << QString::number(RedStat.Max)   << QString::number(RedStat.Mean); 
-    greenStatistics << "Green" <<  QString::number(GreenStat.Min) << QString::number(GreenStat.Max) << QString::number(GreenStat.Mean);
-    blueStatistics  << "Blue"  <<  QString::number(BlueStat.Min)  << QString::number(BlueStat.Max)  << QString::number(BlueStat.Mean);
-
-    vStatistics.push_back(redStatistics);
-    vStatistics.push_back(greenStatistics);
-    vStatistics.push_back(blueStatistics);
-
-    QMutexLocker local_lock( &m_Lock    );
-    if( !m_Stopping )
-    {
-        emit histogramDataFromThread ( RGBValues, 
-                                        QString("RGB8 (" + QString::number( info.Width()) + 
-                                        " x " + QString::number( info.Height()) + ")"  ),
-                                        (double) ( info.Size()/3),
-                                        double(255), vStatistics );
-    }
-}
-
-void HistogramThread::histogramBGR8 ( const tFrameInfo &info )
-{
-    QVector <QStringList> vStatistics;
-    QStringList redStatistics;
-    QStringList blueStatistics;
-    QStringList greenStatistics;
-
-
-    QVector<QVector<quint32> > RGBValues;
-    QVector<quint32> redValues;
-    QVector<quint32> greenValues;
-    QVector<quint32> blueValues;
-
-    redValues.resize(256);
-    greenValues.resize(256);
-    blueValues.resize(256);
-
-    const unsigned char *lSrc   = info.Data();
-    const unsigned char *lDest  = info.Data() + ( info.Size() );
-
-    while ( lSrc < lDest )
-    {
-        // B
-        ++blueValues[ *lSrc ];
-
-        // G
-        ++lSrc;
-        ++greenValues[ *lSrc ];
-
-        // R
-        ++lSrc;
-        ++redValues[ *lSrc ];
-
-        // Move to Blue
-        ++lSrc;
-    }
-
-    RGBValues.push_back(redValues);
-    RGBValues.push_back(greenValues);
-    RGBValues.push_back(blueValues);
-
-    statistics<VmbUint8_t> RedStat      = calcWeightedMean<VmbUint8_t>( redValues );
-    statistics<VmbUint8_t> GreenStat    = calcWeightedMean<VmbUint8_t>( greenValues);
-    statistics<VmbUint8_t> BlueStat     = calcWeightedMean<VmbUint8_t>( blueValues );
-
-    redStatistics   << "Red"   <<  QString::number(RedStat.Min)   << QString::number(RedStat.Max)   << QString::number(RedStat.Mean); 
-    greenStatistics << "Green" <<  QString::number(GreenStat.Min) << QString::number(GreenStat.Max) << QString::number(GreenStat.Mean);
-    blueStatistics  << "Blue"  <<  QString::number(BlueStat.Min)  << QString::number(BlueStat.Max)  << QString::number(BlueStat.Mean);
-
-    vStatistics.push_back(redStatistics);
-    vStatistics.push_back(greenStatistics);
-    vStatistics.push_back(blueStatistics);
-
-    QMutexLocker local_lock( &m_Lock    );
-    if( !m_Stopping )
-    {
-        emit histogramDataFromThread (  RGBValues, 
-                                        QString("BGR8 (" + QString::number( info.Width() ) + 
-                                        " x " + QString::number( info.Height() ) + ")"  ),
-                                        (double) ( info.Size()/3),
-                                        double(255), vStatistics );
-    }
-}
-
-void HistogramThread::histogramBayerRG8( const tFrameInfo &info )
-{
-    QVector <QStringList> vStatistics;
-    QStringList redStatistics;
-    QStringList blueStatistics;
-    QStringList greenStatistics;
-
-
-    QVector<QVector<quint32> > RGBValues;
-    QVector<quint32> redValues;
-    QVector<quint32> greenValues;
-    QVector<quint32> blueValues;
-
-    redValues.resize(256);
-    greenValues.resize(256);
-    blueValues.resize(256);
-
-    const unsigned char *lSrc = info.Data();
-
-    for ( VmbUint32_t y= info.Height()/2; y>0; y-- )// loop counter also works for odd height
-    {
-        // RG Row
-        for ( VmbUint32_t x= info.Width()/2; x>0; x-- ) // loop counter also works for odd width
-        {
-            // Red
-            ++redValues[ *lSrc ];
-
-            // Green 1
-            ++lSrc;
-            ++greenValues [*lSrc ];
-
-            // Move to Red
-            ++lSrc;
-        }
-        if (1 == (info.Width() & 1) ) // handling for odd width
-        {
-            // Red
-            ++redValues[ *lSrc ];
-
-            // Move to next line
-            ++lSrc;
-        }
-
-        // GB Row
-        for ( VmbUint32_t x= info.Width()/2; x>0; x-- ) // loop counter also works for odd width
-        {
-            // Green 2
-            ++greenValues[ *lSrc ];
-
-            // Blue
-            ++lSrc;
-            ++blueValues[ *lSrc ];
-
-            // Move to Green
-            ++lSrc;
-        }
-        if (1 == (info.Width() &1)) // handling for odd width
-        {
-            // Green 2
-            ++greenValues[ *lSrc ];
-
-            // Move to next row
-            ++lSrc;
-        }
-    }
-    if (1 == (info.Height() & 1) ) // handling for last row if height is odd
-    {
-        // RG Row
-        for ( VmbUint32_t x = info.Width()/2; x>0; x-- ) // loop counter also works for odd width
-        {
-            // Red
-            ++redValues[ *lSrc ];
-
-            // Green 1
-            ++lSrc;
-            ++greenValues [*lSrc ];
-
-            // Move to Red
-            ++lSrc;
-        }
-        if (1 == (info.Width() & 1 ) ) // handling for odd width
-        {
-            // Red
-            ++redValues[ *lSrc ];
-
-            // Move to next line
-            ++lSrc;
-        }
-    }
-
-
-    RGBValues.push_back(redValues);
-    RGBValues.push_back(greenValues);
-    RGBValues.push_back(blueValues);
-
-    statistics<VmbUint8_t> RedStat      = calcWeightedMean<VmbUint8_t>( redValues );
-    statistics<VmbUint8_t> GreenStat    = calcWeightedMean<VmbUint8_t>( greenValues);
-    statistics<VmbUint8_t> BlueStat     = calcWeightedMean<VmbUint8_t>( blueValues );
-
-    redStatistics   << "Red"   <<  QString::number(RedStat.Min)   << QString::number(RedStat.Max)   << QString::number(RedStat.Mean); 
-    greenStatistics << "Green" <<  QString::number(GreenStat.Min) << QString::number(GreenStat.Max) << QString::number(GreenStat.Mean);
-    blueStatistics  << "Blue"  <<  QString::number(BlueStat.Min)  << QString::number(BlueStat.Max)  << QString::number(BlueStat.Mean);
-
-    vStatistics.push_back(redStatistics);
-    vStatistics.push_back(greenStatistics);
-    vStatistics.push_back(blueStatistics);
-
-    QMutexLocker local_lock( &m_Lock    );
-    if( !m_Stopping )
-    {
-        emit histogramDataFromThread (  RGBValues, 
-                                        QString("BayerRG8 (" + QString::number( info.Width() ) + 
-                                        " x " + QString::number( info.Height() ) + ")"  ),
-                                        (double) ( info.Size()/3),
-                                        double(255), vStatistics );
-    }
-}
-
-void HistogramThread::histogramBayerRG12( const tFrameInfo &info )
-{
-    QVector <QStringList> vStatistics;
-    QStringList redStatistics;
-    QStringList blueStatistics;
-    QStringList greenStatistics;
-
-    QVector<QVector<quint32> > RGBValues;
-    QVector<quint32> redValues;
-    QVector<quint32> greenValues;
-    QVector<quint32> blueValues;
-
-    redValues.resize(4096);
-    greenValues.resize(4096);
-    blueValues.resize(4096);
-
-    /*
-        12 bit packed in 16 bit. Maximum: 0F FF (For safety we only use the low nibble of the MSB)
-        Little Endian Layout for 16 bit Buffer RGGB macro pixel:    R_LSB | R_MSB | G_LSB | G_MSB
-                                                                    G_LSB | G_MSB | B_LSB | B_MSB
-
-        We work with 8 bit uchar pointers on 16 bit data. For reconstructing 16 bit shorts we 
-        rather use bit wise operations than (short*)((void*)pCharBuffer).
-    */
-
-    uint16_t shortValue;
-    const unsigned char *lSrc = info.Data();
-
-    for ( VmbUint32_t y = info.Height()/2; y>0; y-- ) // loop counter also works for odd height
-    {
-        // RG Row
-        for ( VmbUint32_t x = info.Width()/2; x>0; x-- ) // loop counter also works for odd width
-        {
-            // Red
-            shortValue = ((*(lSrc+1) & 0x0F) << 8) + *lSrc;
-            ++redValues[ shortValue ];
-
-            // Green 1
-            lSrc+=2;
-            shortValue = ((*(lSrc+1) & 0x0F) << 8) + *lSrc;
-            ++greenValues[ shortValue ];
-
-            // Move to Red
-            lSrc+=2;
-        }
-        if (1 == ( info.Width() & 1 )) // handling for odd width
-        {
-            // Red
-            shortValue = ((*(lSrc+1) & 0x0F) << 8) + *lSrc;
-            ++redValues[ shortValue ];
-
-            // Move to next line
-            lSrc+=2;
-        }
-
-        // GB Row
-        for ( VmbUint32_t x = info.Width()/2; x>0; x-- ) // loop counter also works for odd width
-        {
-            // Green 2
-            shortValue = ((*(lSrc+1) & 0x0F) << 8) + *lSrc;
-            ++greenValues[ shortValue ];
-
-            // Blue
-            lSrc+=2;
-            shortValue = ((*(lSrc+1) & 0x0F) << 8) + *lSrc;
-            ++blueValues[ shortValue ];
-
-            // Move to Green
-            lSrc+=2;
-        }
-        if (1 == (info.Width() & 1) ) // handling for odd width
-        {
-            // Green 2
-            shortValue = ((*(lSrc+1) & 0x0F) << 8) + *lSrc;
-            ++greenValues[ shortValue ];
-
-            // Move to next line
-            lSrc+=2;
-        }
-    }
-    if (1 == ( info.Height() & 1) )  // handling for last row if height is odd
-    {
-        // RG Row
-        for ( VmbUint32_t x= info.Width()/2; x>0; x-- ) // loop counter also works for odd width
-        {
-            // Red
-            shortValue = ((*(lSrc+1) & 0x0F) << 8) + *lSrc;
-            ++redValues[ shortValue ];
-
-            // Green 1
-            lSrc+=2;
-            shortValue = ((*(lSrc+1) & 0x0F) << 8) + *lSrc;
-            ++greenValues[ shortValue ];
-
-            // Move to Red
-            lSrc+=2;
-        }
-        if (1 == ( info.Width() & 1) ) // handling for odd width
-        {
-            // Red
-            shortValue = ((*(lSrc+1) & 0x0F) << 8) + *lSrc;
-            ++redValues[ shortValue ];
-            lSrc+=2;
-        }
-    }
-
-    RGBValues.push_back(redValues);
-    RGBValues.push_back(greenValues);
-    RGBValues.push_back(blueValues);
-
-    statistics<VmbUint16_t> RedStat     = calcWeightedMean<VmbUint16_t>( redValues );
-    statistics<VmbUint16_t> GreenStat   = calcWeightedMean<VmbUint16_t>( greenValues);
-    statistics<VmbUint16_t> BlueStat    = calcWeightedMean<VmbUint16_t>( blueValues );
-
-    redStatistics   << "Red"   <<  QString::number(RedStat.Min)   << QString::number(RedStat.Max)   << QString::number(RedStat.Mean); 
-    greenStatistics << "Green" <<  QString::number(GreenStat.Min) << QString::number(GreenStat.Max) << QString::number(GreenStat.Mean);
-    blueStatistics  << "Blue"  <<  QString::number(BlueStat.Min)  << QString::number(BlueStat.Max)  << QString::number(BlueStat.Mean);
-
-    vStatistics.push_back(redStatistics);
-    vStatistics.push_back(greenStatistics);
-    vStatistics.push_back(blueStatistics);
-
-    QMutexLocker local_lock( &m_Lock    );
-    if( !m_Stopping )
-    {
-        emit histogramDataFromThread (  RGBValues, 
-                                        QString("BayerRG12 (" + QString::number( info.Width() ) + 
-                                        " x " + QString::number( info.Height() ) + ")"  ),
-                                        (double) ( info.Size() /4.5),
-                                        double(4095), vStatistics );
-    }
-}
-
-void HistogramThread::histogramBayerRG12Packed( const tFrameInfo &info )
-{
-    QVector <QStringList> vStatistics;
-    QStringList redStatistics;
-    QStringList blueStatistics;
-    QStringList greenStatistics;
-
-
-    QVector<QVector<quint32> > RGBValues;
-    QVector<quint32> redValues;
-    QVector<quint32> greenValues;
-    QVector<quint32> blueValues;
-
-    redValues.resize(4096);
-    greenValues.resize(4096);
-    blueValues.resize(4096);
-
-    /*
-        Buffer Layout in nibbles for RGGB macro pixel:      R_Hi R_Hi | G_Lo R_Lo | G_Hi G_Hi
-                                                            G_Hi G_Hi | B_Lo G_Lo | B_Hi B_Hi
-
-        Bit mask to get first nibble of 'mixed byte':       F0
-        Bit mask to get second nibble of 'mixed byte':      0F
-
-        First mask (if needed) then shift low nibbles to lsb, high nibbles to msb.
-    */
-
-    uint16_t unpackedValue;
-    const unsigned char *lSrc = info.Data();
-
-    for ( VmbUint32_t y = info.Height()/2; y>0; y-- ) // loop counter also works for odd height
-    {
-        // RG Row
-        for ( VmbUint32_t x = info.Width()/2; x>0; x-- ) // loop counter also works for odd width
-        {
-            // Red
-            unpackedValue = (*lSrc << 4) + (*(lSrc+1) & 0x0F);
-            ++redValues[ unpackedValue ];
-
-            // Green 1
-            lSrc += 2;
-            unpackedValue = (*lSrc << 4) + ((*(lSrc-1) & 0xF0) >> 4);
-            ++greenValues[ unpackedValue ];
-            // Move to Red
-            ++lSrc;
-        }
-        if (1 == (info.Height() & 1) ) // handling for odd width
-        {
-            // Red
-            unpackedValue = (*lSrc << 4) + (*(lSrc+1) & 0x0F);
-            ++redValues[ unpackedValue ];
-            ++lSrc;
-        }
-        
-        // GB Row
-        for ( VmbUint32_t x = info.Width()/2; x>0; x-- ) // loop counter also works for odd width
-        {
-            // Green 2
-            unpackedValue = (*lSrc << 4) + (*(lSrc+1) & 0x0F);
-            ++greenValues[ unpackedValue ];
-
-            // Blue
-            lSrc += 2;
-            unpackedValue = (*lSrc << 4) + ((*(lSrc-1) & 0xF0) >> 4);
-            ++blueValues[ unpackedValue ];
-
-            // Move to Green
-            ++lSrc;
-        }
-        if (1 == ( info.Width() & 1 ) ) // handling for odd width
-        {
-            // Green 2
-            unpackedValue = (*lSrc << 4) + (*(lSrc+1) & 0x0F);
-            ++greenValues[ unpackedValue ];
-            ++lSrc;
-        }
-    }
-    if (1 == (info.Height() & 1) ) // handling for odd height
-    {
-        // RG Row
-        for ( VmbUint32_t x = info.Width()/2; x>0; x-- ) // loop counter also works for odd width
-        {
-            // Red
-            unpackedValue = (*lSrc << 4) + (*(lSrc+1) & 0x0F);
-            ++redValues[ unpackedValue ];
-
-            // Green 1
-            lSrc += 2;
-            unpackedValue = (*lSrc << 4) + ((*(lSrc-1) & 0xF0) >> 4);
-            ++greenValues[ unpackedValue ];
-
-            // Move to Red
-            ++lSrc;
-        }
-        if (1 == ( info.Height() & 1 ) ) // handling for odd width
-        {
-            // Red
-            unpackedValue = (*lSrc << 4) + (*(lSrc+1) & 0x0F);
-            ++redValues[ unpackedValue ];
-            ++lSrc;
-        }
-    }
-
-    RGBValues.push_back(redValues);
-    RGBValues.push_back(greenValues);
-    RGBValues.push_back(blueValues);
-
-    statistics<VmbUint16_t> RedStat     = calcWeightedMean<VmbUint16_t>( redValues );
-    statistics<VmbUint16_t> GreenStat   = calcWeightedMean<VmbUint16_t>( greenValues);
-    statistics<VmbUint16_t> BlueStat    = calcWeightedMean<VmbUint16_t>( blueValues );
-
-    redStatistics   << "Red"   <<  QString::number(RedStat.Min)   << QString::number(RedStat.Max)   << QString::number(RedStat.Mean); 
-    greenStatistics << "Green" <<  QString::number(GreenStat.Min) << QString::number(GreenStat.Max) << QString::number(GreenStat.Mean);
-    blueStatistics  << "Blue"  <<  QString::number(BlueStat.Min)  << QString::number(BlueStat.Max)  << QString::number(BlueStat.Mean);
-
-    vStatistics.push_back(redStatistics);
-    vStatistics.push_back(greenStatistics);
-    vStatistics.push_back(blueStatistics);
-
-    QMutexLocker local_lock( &m_Lock    );
-    if( !m_Stopping )
-    {
-        emit histogramDataFromThread (  RGBValues, 
-                                        QString("BayerRG12Packed (" + QString::number( info.Width() ) + 
-                                        " x " + QString::number( info.Height() ) + ")"  ),
-                                        (double) ( info.Size() / 4.5),
-                                        double(4095), vStatistics );
-    }
-}
-
-void HistogramThread::histogramYUV411 ( const tFrameInfo &info )
-{
-    QVector <QStringList> Statistics;
-    QStringList yStatistics;
-    QStringList uStatistics;
-    QStringList vStatistics;
-
-    QVector<QVector<quint32> > YUVValues;
-    QVector<quint32> YValues;
-    QVector<quint32> UValues;
-    QVector<quint32> VValues;
-
-    YValues.resize(256);
-    UValues.resize(256);
-    VValues.resize(256);
-
-    /*
-        6 Bytes per 4 pixel, buffer layout YUV Y Y Y macro pixel:  U | Y | Y | V | Y | Y
-        12 bpp
-    */
-
-    const unsigned char *lSrc   = info.Data();
-    const unsigned char *lDest  = info.Data() + ( info.Size() );
-
-    while (lSrc < lDest)
-    {
-        // U
-        ++UValues[ *lSrc ];
-
-        // Y
-        ++lSrc;
-        ++YValues[ *lSrc ];
-
-        // Y
-        ++lSrc;
-        ++YValues[ *lSrc ];
-
-        // V
-        ++lSrc;
-        ++VValues[ *lSrc ];
-
-        // Y
-        ++lSrc;
-        ++YValues[ *lSrc ];
-
-        // Y
-        ++lSrc;
-        ++YValues[ *lSrc ];
-
-        // Move to U
-        ++lSrc;
-    }
-
-    YUVValues.push_back(YValues);
-    YUVValues.push_back(UValues);
-    YUVValues.push_back(VValues);
-
-    statistics<VmbUint8_t> YStat = calcWeightedMean<VmbUint8_t>( YValues );
-    statistics<VmbUint8_t> UStat = calcWeightedMean<VmbUint8_t>( UValues );
-    statistics<VmbUint8_t> VStat = calcWeightedMean<VmbUint8_t>( VValues );
-
-    yStatistics   << "Y" <<  QString::number(YStat.Min) << QString::number(YStat.Max) << QString::number(YStat.Mean); 
-    uStatistics   << "U" <<  QString::number(UStat.Min) << QString::number(UStat.Max) << QString::number(UStat.Mean);
-    vStatistics   << "V" <<  QString::number(VStat.Min) << QString::number(VStat.Max) << QString::number(VStat.Mean);
-
-    Statistics.push_back(yStatistics);
-    Statistics.push_back(uStatistics);
-    Statistics.push_back(vStatistics);
-
-    QMutexLocker local_lock( &m_Lock    );
-    if( !m_Stopping )
-    {
-        emit histogramDataFromThread (  YUVValues, 
-                                        QString("YUV411 (" + QString::number( info.Width() ) + 
-                                        " x " + QString::number( info.Height() ) + ")"  ),
-                                        (double) ( info.Size()/1.5),
-                                        double(255), Statistics);
-    }
-}
-
-void HistogramThread::histogramYUV422 ( const tFrameInfo &info )
-{
-    QVector <QStringList> Statistics;
-    QStringList yStatistics;
-    QStringList uStatistics;
-    QStringList vStatistics;
-
-    QVector<QVector<quint32> > YUVValues;
-    QVector<quint32> YValues;
-    QVector<quint32> UValues;
-    QVector<quint32> VValues;
-
-    YValues.resize(256);
-    UValues.resize(256);
-    VValues.resize(256);
-
-    /*
-        8 Bytes per 4 pixel, buffer layout YUV Y YUV Y macro pixel:  U | Y | V | Y | U | Y | V | Y
-        16 bpp
-    */
-
-    const unsigned char *lSrc   = info.Data();
-    const unsigned char *lDest  = info.Data() + ( info.Size() );
-
-    while ( lSrc < lDest )
-    {
-        // U
-        ++UValues[ *lSrc ];
-        // Y
-        ++lSrc;
-        ++YValues[*lSrc];
-
-        // V
-        ++lSrc;
-        ++VValues[*lSrc];
-
-        // Y
-        ++lSrc;
-        ++YValues[*lSrc];
-
-        // U
-        ++lSrc;
-        ++UValues[*lSrc];
-
-        // Y
-        ++lSrc;
-        ++YValues[*lSrc];
-
-        // V
-        ++lSrc;
-        ++VValues[*lSrc];
-
-        // Y
-        ++lSrc;
-        ++YValues[*lSrc];
-        // Move to U
-        ++lSrc;
-    }
-
-    YUVValues.push_back(YValues);
-    YUVValues.push_back(UValues);
-    YUVValues.push_back(VValues);
-
-    statistics<VmbUint8_t> YStat = calcWeightedMean<VmbUint8_t>( YValues );
-    statistics<VmbUint8_t> UStat = calcWeightedMean<VmbUint8_t>( UValues );
-    statistics<VmbUint8_t> VStat = calcWeightedMean<VmbUint8_t>( VValues );
-
-    yStatistics   << "Y" <<  QString::number(YStat.Min) << QString::number(YStat.Max) << QString::number(YStat.Mean); 
-    uStatistics   << "U" <<  QString::number(UStat.Min) << QString::number(UStat.Max) << QString::number(UStat.Mean);
-    vStatistics   << "V" <<  QString::number(VStat.Min) << QString::number(VStat.Max) << QString::number(VStat.Mean);
-
-    Statistics.push_back(yStatistics);
-    Statistics.push_back(uStatistics);
-    Statistics.push_back(vStatistics);
-
-    QMutexLocker local_lock( &m_Lock    );
-    if( !m_Stopping )
-    {
-        emit histogramDataFromThread (  YUVValues, 
-                                        QString("YUV422 (" + QString::number( info.Width() ) + 
-                                        " x " + QString::number( info.Height() ) + ")"  ),
-                                        (double) ( info.Size() /2),
-                                        double(255), Statistics);
-    }
-}
-
-void HistogramThread::histogramYUV444 ( const tFrameInfo &info )
-{
-    QVector <QStringList> Statistics;
-    QStringList yStatistics;
-    QStringList uStatistics;
-    QStringList vStatistics;
-
-    uint        nYMin  = 255;
-    uint        nYMax  = 0;
-    VmbUint16_t nYMean = 0;
-
-    uint        nUMin  = 255;
-    uint        nUMax  = 0;
-    VmbUint16_t nUMean = 0;
-
-    uint        nVMin  = 255;
-    uint        nVMax  = 0;
-    VmbUint16_t nVMean = 255;
-
-
-    QVector<QVector<quint32> > YUVValues;
-    QVector<quint32> YValues;
-    QVector<quint32> UValues;
-    QVector<quint32> VValues;
-
-    YValues.resize(256);
-    UValues.resize(256);
-    VValues.resize(256);
-
-    /*
-        3 Bytes per pixel, buffer layout YUV macro pixel:  U | Y | V
-        24 bpp
-    */
-
-    const unsigned char *lSrc   = info.Data();
-    const unsigned char *lDest  = info.Data() + ( info.Size() );
-
-    while ( lSrc < lDest )
-    {
-        // U
-        ++UValues[ *lSrc ];
-
-        // Y
-        ++lSrc;
-        ++YValues[ *lSrc ];
-
-        // V
-        ++lSrc;
-        ++VValues[ *lSrc ];
-
-        // Move to U
-        ++lSrc;
-    }
-
-    YUVValues.push_back(YValues);
-    YUVValues.push_back(UValues);
-    YUVValues.push_back(VValues);
-
-    statistics<VmbUint8_t> YStat    = calcWeightedMean<VmbUint8_t>( YValues );
-    statistics<VmbUint8_t> UStat    = calcWeightedMean<VmbUint8_t>( UValues );
-    statistics<VmbUint8_t> VStat    = calcWeightedMean<VmbUint8_t>( VValues );
-
-    yStatistics   << "Y" <<  QString::number(YStat.Min) << QString::number(YStat.Max) << QString::number(YStat.Mean); 
-    uStatistics   << "U" <<  QString::number(UStat.Min) << QString::number(UStat.Max) << QString::number(UStat.Mean);
-    vStatistics   << "V" <<  QString::number(VStat.Min) << QString::number(VStat.Max) << QString::number(VStat.Mean);
-
-    Statistics.push_back(yStatistics);
-    Statistics.push_back(uStatistics);
-    Statistics.push_back(vStatistics);
-
-    QMutexLocker local_lock( &m_Lock    );
-    if( !m_Stopping )
-    {
-        emit histogramDataFromThread (  YUVValues, 
-                                        QString("YUV444 (" + QString::number( info.Width() ) + 
-                                        " x " + QString::number( info.Height() ) + ")"  ),
-                                        (double) ( info.Size()/3),
-                                        double(255), Statistics);
-    }
-}
-
-void HistogramThread::histogramNotSupportedYet ( const tFrameInfo &info )
-{
-    QVector <QStringList> vStatistics;
-    QVector<QVector<quint32> > noValues;
-    QVector<quint32> values(256, 0);
-    
-    noValues.push_back(values);
-    QMutexLocker local_lock( &m_Lock    );
-    if( !m_Stopping )
-    {
-        emit histogramDataFromThread (    noValues, 
-                                        QString("No Histogram Support For This Format Yet"),
-                                        (double) info.Size(),
-                                        double(255), vStatistics );
-    }
-}
-
-template <typename T>
-HistogramThread::statistics<T> HistogramThread::calcWeightedMean( const QVector<VmbUint32_t>& rValues )
-{
-    if( rValues.empty() )
-    {
-        throw std::exception();
-    }
-    VmbUint64_t     res = 0;
-    VmbUint32_t     nNumPixels = 0;
-    statistics<T>   stat;
-    stat.Max = 0;
-    stat.Min= std::numeric_limits<T>::max();
-    for ( int i=0; i<rValues.size(); ++i )
-    {
-        const VmbUint64_t tmp = rValues[ i ];
-        if( tmp != 0 )
-        {
-            if( i < stat.Min)
-            {
-                stat.Min = static_cast<T>(i);
-            }
-            if( i > stat.Max)
-            {
-                stat.Max= static_cast<T>(i);
-            }
-            res += i * tmp;
-            nNumPixels += tmp;
-        }
-    }
-    if( nNumPixels > 0 )
-    {
-         stat.Mean = (VmbUint16_t)(res / nNumPixels);
-    }
-    else
-    {
-        stat.Mean =  0;
-    }
-    return stat;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramThread.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramThread.h
deleted file mode 100644
index d6238ecd887cb808c69efe2287bf5d3697050dee..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramThread.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        HistogramThread.h
-
-  Description: a worker thread to  process histogram data
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef HISTOGRAMTHREAD_H
-#define HISTOGRAMTHREAD_H
-
-#include <QTime>
-#include <QThread>
-#include <QVector>
-#include <QMutex>
-#include <QMutexLocker>
-#include <qwaitcondition.h>
-#include "Helper.h"
-
-#include <VimbaCPP/Include/IFrameObserver.h>
-#include <VimbaCPP/Include/Frame.h>
-#include <VimbaCPP/Include/Camera.h>
-
-
-class HistogramThread : public QThread
-{
-    Q_OBJECT
-
-        typedef QSharedPointer<unsigned char> data_storage;
-    public:
-
-    private:
-        template<typename T>    
-        struct statistics
-        {
-            typedef T value_type;
-            T Min;
-            T Max;
-            T Mean;
-        };
-        ConsumerQueue<tFrameInfo>     m_FrameInfo;
-        QMutex                        m_Lock;
-        bool                          m_Stopping;
-    public:
-        HistogramThread ( );
-        ~HistogramThread ( void );
-
-        void stopProcessing();
-        void setThreadFrame ( const tFrameInfo &info );
-    
-
-    protected:
-        virtual void run();
-        void histogramMono8           ( const tFrameInfo &info );
-        void histogramRGB8            ( const tFrameInfo &info );
-        void histogramBGR8            ( const tFrameInfo &info );
-        void histogramYUV411          ( const tFrameInfo &info );
-        void histogramYUV422          ( const tFrameInfo &info );
-        void histogramYUV444          ( const tFrameInfo &info );
-        void histogramNotSupportedYet ( const tFrameInfo &info );
-        void histogramBayerRG12Packed ( const tFrameInfo &info );
-        void histogramBayerRG8        ( const tFrameInfo &info );
-        void histogramBayerRG12       ( const tFrameInfo &info );
-
-    private:
-        template<typename T>
-        statistics<T> calcWeightedMean( const QVector<VmbUint32_t>& rValues );
-          
-    signals:
-          void histogramDataFromThread ( const QVector<QVector <quint32> > &histData, 
-                                         const QString &sHistogramTitle, 
-                                         const double &nMaxHeight_YAxis, 
-                                         const double &nMaxWidth_XAxis,
-                                         const QVector <QStringList> &statistics);
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramWindow.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramWindow.cpp
deleted file mode 100644
index 5b010285974fe091f63739c2241082b72dbc1d03..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramWindow.cpp
+++ /dev/null
@@ -1,365 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        HistogramWindow.cpp
-
-  Description: Histogram Window
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-  [program/widget] is based in part on the work of
-  the Qwt project (http://qwt.sf.net).
-=============================================================================*/
-
-
-#include "HistogramWindow.h"
-#include "Histogram.h"
-
-HistogramWindow::HistogramWindow(QWidget *parent) :
-QWidget(parent), m_Histogram ( NULL ), m_StatisticsTable ( NULL ), m_nXAxisMax ( 0 )
-{
-    m_DataLayout = new QGridLayout();
-    QHBoxLayout *layoutHorizontal = new QHBoxLayout();
-    m_DataLayout->addLayout(layoutHorizontal,0,0);
-    setLayout(m_DataLayout);
-
-    QIcon printIcon;
-    printIcon.addFile( QString::fromUtf8(":/VimbaViewer/Images/print.png"), QSize(), QIcon::Normal, QIcon::Off);
-    m_PrintButton = new QToolButton( this );
-    m_PrintButton->setIcon(printIcon);
-    m_PrintButton->setIconSize(QSize(32,32));
-    m_PrintButton->setToolTip(tr("Print the histogram"));
-    m_PrintButton->setCursor(Qt::PointingHandCursor);
-	m_PrintButton->setStyleSheet(QString::fromUtf8("QToolButton{background-color: rgb(128, 0, 0);} QToolTip {}"));
-    layoutHorizontal->addWidget(m_PrintButton);
-    
-    QIcon pdfIcon;
-    pdfIcon.addFile( QString::fromUtf8(":/VimbaViewer/Images/pdf.png"), QSize(), QIcon::Normal, QIcon::Off);
-    m_ExportButton = new QToolButton( this );
-    m_ExportButton->setIcon(pdfIcon);
-    m_ExportButton->setIconSize(QSize(32,32));
-    m_ExportButton->setToolTip(tr("Export the histogram to PDF"));
-    m_ExportButton->setCursor(Qt::PointingHandCursor);
-    m_ExportButton->setStyleSheet(QString::fromUtf8("QToolButton{background-color: rgb(128, 0, 0);} QToolTip {}"));
-    layoutHorizontal->addWidget(m_ExportButton);
-
-    QObject::connect( m_PrintButton, SIGNAL(clicked()), this, SLOT(onPrint()));
-    QObject::connect( m_ExportButton, SIGNAL(clicked()), this, SLOT(onExport()));
-}
-
-HistogramWindow::~HistogramWindow( )
-{
-    if( NULL != m_Histogram)
-    {
-        delete m_Histogram;
-        m_Histogram = NULL;
-    }
-}
-
-void HistogramWindow::initializeStatistic ( void )
-{
-    m_StatisticsTable = new QTableWidget();
-    m_DataLayout->addWidget(m_StatisticsTable);
-    m_StatisticsTable->setColumnCount(4);
-    QStringList sHeader;
-    sHeader << "" << tr("Minimum") << tr("Maximum") << tr("Mean");
-    m_StatisticsTable->setHorizontalHeaderLabels(sHeader);
-    m_StatisticsTable->setFixedHeight(135);
-    m_StatisticsTable->verticalHeader()->setVisible(false);
-}
-
-void HistogramWindow::deinitializeStatistic ( void )
-{
-    if(0 != m_StatisticsTable)
-    {
-        delete m_StatisticsTable;
-        m_StatisticsTable = NULL;
-    }
-}
-
-void HistogramWindow::setStatistic ( const QStringList component, 
-                                     const QStringList minimum, 
-                                     const QStringList maximum, 
-                                     const QStringList average,
-                                     const QString sFormat )
-{
-    m_StatisticsTable->clearContents();
-    m_StatisticsTable->setRowCount(component.size());
-    for(int i=0; i < component.size(); i++) /* component */
-    {
-        QTableWidgetItem *item = new QTableWidgetItem();
-        item->setText(component.at(i));
-        
-        /* Mono 8 */
-        if(1 == component.size())
-        {
-            item->setBackgroundColor(Qt::black);
-            item->setForeground(QBrush(QColor(255,255,255)));
-        }
-
-        /* RGB, YUV */
-        if(3 == component.size())
-        {
-            if (0 == sFormat.compare("RGB")|| sFormat.contains("Bayer"))
-            {
-                switch(i)
-                {
-                case 0:
-                    item->setBackgroundColor(Qt::red);
-                    break;
-                case 1:
-                    item->setBackgroundColor(Qt::green);
-                    break;
-                case 2:
-                    item->setForeground(QBrush(QColor(255,255,255)));
-                    item->setBackgroundColor(Qt::blue);
-                    break;
-                default:
-                    break;
-                }
-            }
-
-            if(0 == sFormat.compare("YUV"))
-            {
-                switch(i)
-                {
-                case 0:
-                    item->setBackgroundColor(Qt::darkYellow);
-                    break;
-                case 1:
-                    item->setBackgroundColor(Qt::darkCyan);
-                    break;
-                case 2:
-                    //item->setForeground(QBrush(QColor(255,255,255)));
-                    item->setBackgroundColor(Qt::darkMagenta);
-                    break;
-                default:
-                    break;
-                }
-            }
-            
-        }
-        m_StatisticsTable->setItem(i, 0, item);
-    }
-
-    for(int j=0; j < minimum.size(); j++) /* minimum */
-    {
-        QTableWidgetItem *item = new QTableWidgetItem();
-        item->setText(minimum.at(j));
-        m_StatisticsTable->setItem(j, 1, item);
-    }
-
-    for(int k=0; k < maximum.size(); k++) /* maximum */
-    {
-        QTableWidgetItem *item = new QTableWidgetItem();
-        item->setText(maximum.at(k));
-        m_StatisticsTable->setItem(k, 2, item);
-    }
-
-    for(int l=0; l < average.size(); l++) /* average */
-    {
-        QTableWidgetItem *item = new QTableWidgetItem();
-        item->setText(average.at(l));
-        m_StatisticsTable->setItem(l, 3, item);
-    }
-}
-
-void HistogramWindow::createGraphWidgets ( void )
-{
-    m_Histogram = new Histogram(" ", 255, this); //255: Default
-    m_DataLayout->addWidget(m_Histogram, 2, 0);
-    m_AutoScaleYAxis = new QCheckBox();
-    m_AutoScaleYAxis->setText(tr("Auto scale Y-AXIS ON"));
-    m_AutoScaleYAxis->setChecked(true);
-    m_DataLayout->addWidget(m_AutoScaleYAxis);
-    connect( m_AutoScaleYAxis, SIGNAL(clicked(bool)), this, SLOT(onAutoScaleYAxisClick(bool)) );
-    m_Histogram->installEventFilter(this);
-}
-
-void HistogramWindow::onAutoScaleYAxisClick ( bool bValue )
-{
-    if(bValue)
-    {
-        m_Histogram->setAxisAutoScale(0, true);
-        m_Histogram->setAxisAutoScale(2, true);
-        m_Histogram->setAxisScale(2, 0.0, m_nXAxisMax ); 
-    }
-    else
-    {
-        m_Histogram->setAxisAutoScale(0, false);
-        m_Histogram->setAxisAutoScale(2, false);
-    }
-}
-
-void HistogramWindow::updateHistogram( const QVector<QVector<quint32> > &histogramData, const QString &sNewHistogramTitle, 
-                                       const double &nMaxHeight_YAxis, const double &nMaxWidth_XAxis )
-{
-    if( 0 != m_sCurrentHistogramTitle.compare(sNewHistogramTitle) )
-    {
-        m_Histogram->setHistogramTitle( sNewHistogramTitle );
-        //m_Histogram->setLeftAxisY(nMaxHeight_YAxis);
-        
-        if(m_sCurrentHistogramTitle.contains("Mono"))
-        {
-            QVector <quint32> resetValues(255, 0);
-            m_Histogram->populate(resetValues, "M");
-        }
-
-        if(m_sCurrentHistogramTitle.contains("8"))
-        {
-            QVector <quint32> resetValues(255, 0);
-            m_Histogram->populate(resetValues, "R"); // Red
-            m_Histogram->populate(resetValues, "G"); // Green
-            m_Histogram->populate(resetValues, "B"); // Blue
-        }
-
-        if( m_sCurrentHistogramTitle.contains("BayerRG12"))
-        {
-            QVector <quint32> resetValues(4095, 0);
-            m_Histogram->populate(resetValues, "R"); // Red
-            m_Histogram->populate(resetValues, "G"); // Green
-            m_Histogram->populate(resetValues, "B"); // Blue
-        }
-
-        if(m_sCurrentHistogramTitle.contains("YUV"))
-        {
-            QVector <quint32> resetValues(255, 0);
-            m_Histogram->populate(resetValues, "Y"); // Y
-            m_Histogram->populate(resetValues, "U"); // U
-            m_Histogram->populate(resetValues, "V"); // V
-        }
-
-        m_Histogram->setBottomAxisX(nMaxWidth_XAxis);
-        m_nXAxisMax = nMaxWidth_XAxis;
-        m_sCurrentHistogramTitle = sNewHistogramTitle;
-    }
-
-    if( 1 == histogramData.size() && (m_sCurrentHistogramTitle.contains("Mono"))) // 1 color component -> Mono
-            m_Histogram->populate(histogramData.at(0), "M");
-    
-    if( 3 == histogramData.size() &&  m_sCurrentHistogramTitle.contains("RGB8") ||  
-        3 == histogramData.size() &&  m_sCurrentHistogramTitle.contains("BGR8") ||  
-        m_sCurrentHistogramTitle.contains("Bayer") ) // 3 color components -> R,G,B
-    {
-        m_Histogram->populate(histogramData.at(0), "R"); // Red
-        m_Histogram->populate(histogramData.at(1), "G"); // Green
-        m_Histogram->populate(histogramData.at(2), "B"); // Blue
-    }
-
-    if( 3 == histogramData.size() && m_sCurrentHistogramTitle.contains("YUV") ) // 3 color components -> Y,U,V
-    {
-        m_Histogram->populate(histogramData.at(0), "Y"); // Y
-        m_Histogram->populate(histogramData.at(1), "U"); // U
-        m_Histogram->populate(histogramData.at(2), "V"); // V
-    }
-
-    /*if( m_sCurrentHistogramTitle.contains("Not Supported Yet") )
-        m_Histogram->populate(histogramData.at(0), "M");*/
-}
-
-void HistogramWindow::onPrint ( void )
-{
-#ifndef QT_NO_PRINTER
-
-    QPrinter printer( QPrinter::HighResolution );
-
-    QString docName = m_Histogram->title().text();
-    if ( !docName.isEmpty() )
-    {
-        docName.replace ( QRegExp ( QString::fromLatin1 ( "\n" ) ), tr ( " -- " ) );
-        printer.setDocName ( docName );
-    }
-
-    printer.setCreator( "Histogram" );
-    printer.setOrientation( QPrinter::Landscape );
-
-    QPrintDialog dialog( &printer );
-    if ( dialog.exec() )
-    {
-        QwtPlotRenderer renderer;
-
-        if ( printer.colorMode() == QPrinter::GrayScale )
-        {
-            renderer.setDiscardFlag( QwtPlotRenderer::DiscardCanvasBackground );
-            renderer.setLayoutFlag( QwtPlotRenderer::FrameWithScales );
-        }
-
-        renderer.renderTo( m_Histogram, printer );
-    }
-
-#endif
-}
-
-void HistogramWindow::onExport ( void )
-{
-#ifndef QT_NO_PRINTER
-    QString fileName = "Histogram.pdf";
-#else
-    QString fileName = "Histogram.png";
-#endif
-
-#ifndef QT_NO_FILEDIALOG
-    const QList<QByteArray> imageFormats = QImageWriter::supportedImageFormats();
-
-    QStringList filter;
-    filter += "PDF Documents (*.pdf)";
-
-#ifndef QWT_NO_SVG
-    filter += "SVG Documents (*.svg)";
-#endif
-    filter += "Postscript Documents (*.ps)";
-
-    if ( imageFormats.size() > 0 )
-    {
-        QString imageFilter( "Images (" );
-        
-        for ( int i = 0; i < imageFormats.size(); i++ )
-        {
-            if ( i > 0 )
-                imageFilter += " ";
-
-            imageFilter += "*.";
-            imageFilter += imageFormats[i];
-        }
-        imageFilter += ")";
-
-        filter += imageFilter;
-    }
-
-    fileName = QFileDialog::getSaveFileName( this, "Export File Name", fileName,
-                                             filter.join( ";;" ), NULL, QFileDialog::DontConfirmOverwrite );
-#endif
-
-    if ( !fileName.isEmpty() )
-    {
-        QwtPlotRenderer renderer;
-        renderer.setDiscardFlag( QwtPlotRenderer::DiscardBackground, false );
-        renderer.renderDocument( m_Histogram, fileName, QSizeF( 300, 200 ), 85 );
-    }
-}
-
-bool HistogramWindow::eventFilter(QObject *object, QEvent *event)
-{
-    if (event->type() == QEvent::Wheel)
-    {
-        m_AutoScaleYAxis->setChecked(false);
-    }
-
-    return false;
-}
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramWindow.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramWindow.h
deleted file mode 100644
index 2316fa421058c6c004259ffb1b3535121924a1c2..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/Histogram/HistogramWindow.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        HistogramWindow.h
-
-  Description: Histogram Window
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-  [program/widget] is based in part on the work of
-  the Qwt project (http://qwt.sf.net).
-=============================================================================*/
-
-
-#ifndef HISTOGRAMWINDOW_H
-#define HISTOGRAMWINDOW_H
-
-#include <QWidget>
-#include <QGridLayout>
-#include <QToolButton>
-#include <QImageWriter>
-#include <QFileDialog>
-#include <QPrinter>
-#include <QPrintDialog>
-#include <QTableWidget>
-#include <QHeaderView>
-#include <QEvent>
-#include <QCheckBox>
-
-class Histogram;
-
-class HistogramWindow : public QWidget
-{
-    Q_OBJECT
-    public:
-            explicit HistogramWindow(QWidget *parent = 0);
-            ~HistogramWindow();
-
-            void createGraphWidgets  ( void );
-            void initializeStatistic ( void );
-            void deinitializeStatistic ( void );
-            void setStatistic ( const QStringList component, const QStringList minimum, const QStringList maximum, const QStringList average, const QString sFormat );
-
-    private:
-            
-            QToolButton        *m_PrintButton;
-            QToolButton        *m_ExportButton;
-            QGridLayout        *m_DataLayout;
-            Histogram          *m_Histogram;
-            QString             m_sCurrentHistogramTitle;
-            QTableWidget       *m_StatisticsTable;
-            QCheckBox          *m_AutoScaleYAxis;
-            unsigned int        m_nXAxisMax;
-            bool   eventFilter              (QObject *object, QEvent *event);
-    signals:
-
-    private slots:
-            void onPrint ( void );
-            void onExport ( void );
-
-    public slots:
-            void updateHistogram( const QVector<QVector<quint32> > &histogramData, const QString &sNewHistogramTitle, 
-            const double &nMaxHeight_YAxis, const double &nMaxWidth_XAxis );
-            void onAutoScaleYAxisClick ( bool bValue );
-
-};
-
-#endif // HISTOGRAMWINDOW_H
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/IntSpinBox.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/IntSpinBox.cpp
deleted file mode 100644
index 3ca8aad105b88e0f7dd765803e51fbc228943985..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/IntSpinBox.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        IntSpinBox.cpp
-
-  Description: Spinbox to handle integer feature
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "IntSpinBox.h"
-
-
-IntSpinBox::IntSpinBox ( QWidget *parent ): QSpinBox ( parent )
-{
-
-}
-
-IntSpinBox::~IntSpinBox ( void )
-{
-
-}
-/*nMax = nMax - (nMax % nInc);
-nMax = nMax - ((nMax-nMin) % nInc);
-*/
-
-void IntSpinBox::stepBy( int steps )
-{
-    int nInterval =  singleStep();
-    int nValue    = value();
-
-    if(0 < steps ) //stepUp
-    {
-        {
-            if( maximum() >= (nValue+nInterval))
-            {
-                setValue( nValue+nInterval);
-            }    
-        }
-        
-    }
-    else   //stepDown
-    {
-        if( 0 != (nValue-nInterval) % nInterval ) 
-        {
-            /* value % ninterval should be 0 */
-            nValue -= ( (nValue-nInterval) + (nInterval - ((nValue-nInterval) % nInterval)) );
-
-            if( minimum() <= nValue)
-            {
-                setValue( nValue);
-            }
-        }
-        else
-        {
-            setValue( nValue-nInterval);
-        }
-    }
-
-    editingFinished();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/IntSpinBox.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/IntSpinBox.h
deleted file mode 100644
index 7a115132bdcf4aa67279d62a028cc450a919b63b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/IntSpinBox.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        IntSpinBox.h
-
-  Description: Spinbox to handle integer feature
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef INTSPINBOX_H
-#define INTSPINBOX_H
-
-#include <QSpinBox>
-
-class IntSpinBox : public QSpinBox
-{
-    Q_OBJECT
-    public: 
-
-    protected:
-
-    private:
-        
-    public:
-                IntSpinBox ( QWidget *parent );
-               ~IntSpinBox ( void );
-             
-    protected:
-
-    private:
-               virtual void stepBy ( int steps );
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/LineEditCompleter.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/LineEditCompleter.cpp
deleted file mode 100644
index 7d9f2ce228e02233ec81c75838df992f729d3ce9..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/LineEditCompleter.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2013 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        LineEditCompleter.cpp
-
-  Description: LineEdit implementation used by Filter
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "LineEditCompleter.h"
-
-
-LineEditCompleter::LineEditCompleter(QWidget *parent) : QLineEdit(parent), c(0)
-{
-}
-
-LineEditCompleter::~LineEditCompleter()
-{
-}
-
-void LineEditCompleter::setCompleter(MultiCompleter *completer)
-{
-    if (c)
-        QObject::disconnect(c, 0, this, 0);
-
-    c = completer;
-
-    if (!c)
-        return;
-
-    c->setWidget(this);
-    connect(completer, SIGNAL(activated(const QString&)), this, SLOT(insertCompletion(const QString&)));
-}
-
-MultiCompleter *LineEditCompleter::completer() const
-{
-    return c;
-}
-
-void LineEditCompleter::insertCompletion(const QString& completion)
-{
-    setText(completion);
-}
-
-void LineEditCompleter::keyPressEvent(QKeyEvent *e)
-{
-    if (c && c->popup()->isVisible())
-    {
-        /* The following keys are forwarded by the completer to the widget */
-        switch (e->key())
-        {
-        case Qt::Key_Enter:
-        case Qt::Key_Return:
-        case Qt::Key_Escape:
-        case Qt::Key_Tab:
-        case Qt::Key_Backtab:
-            e->ignore();
-            return; /* Let the completer do default behavior */
-        }
-    }
-
-    bool isShortcut = (e->modifiers() & Qt::ControlModifier) && e->key() == Qt::Key_E;
-    if (!isShortcut)
-        QLineEdit::keyPressEvent(e); /* Don't send the shortcut (CTRL-E) to the text edit. */
-
-    if (!c)
-        return;
-
-    bool ctrlOrShift = e->modifiers() & (Qt::ControlModifier | Qt::ShiftModifier);
-    if (!isShortcut && !ctrlOrShift && e->modifiers() != Qt::NoModifier)
-    {
-        c->popup()->hide();
-        return;
-    }
-
-    c->update(text());
-    c->popup()->setCurrentIndex(c->completionModel()->index(0, 0));
-
-    if( Qt::Key_Enter == e->key())
-    {
-        c->popup()->hide();
-    }
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/LineEditCompleter.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/LineEditCompleter.h
deleted file mode 100644
index 6e37194c642921248800d110a19c46415b7cc3e8..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/LineEditCompleter.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2013 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        LineEditCompleter.h
-
-  Description: LineEdit used by Filter
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef LINEEDITCOMPLETER_H
-#define LINEEDITCOMPLETER_H
-
-#include <QLineEdit>
-#include "MultiCompleter.h"
-#include <QKeyEvent>
-
-class LineEditCompleter : public QLineEdit
-{
-    Q_OBJECT
-
-    public:
-             LineEditCompleter(QWidget *parent = 0);
-            ~LineEditCompleter();
-
-             void setCompleter(MultiCompleter *c);
-             MultiCompleter *completer() const;
-
-    protected:
-             void keyPressEvent(QKeyEvent *e);
-
-    private slots:
-             void insertCompletion(const QString &completion);
-            
-    private:
-             MultiCompleter *c;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/LoggerWindow.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/LoggerWindow.cpp
deleted file mode 100644
index 7b0428bae9ddbe3e31b2701b312d2ac88984b948..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/LoggerWindow.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        LoggerWindow.cpp
-
-  Description: Logging widget used by the MainWindow only.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "LoggerWindow.h"
-#include <QTime>
-#include <QPainter>
-
-
-LoggerWindow::LoggerWindow ( QWidget *parent ): QListWidget ( parent )
-{
-        
-}
-
-LoggerWindow::~LoggerWindow ( void )
-{
-
-}
-
-void LoggerWindow::logging ( const QString &sInfo, const VimbaViewerLogCategory &logCategory )
-{
-    QIcon icon;
-
-    QListWidgetItem *item = new QListWidgetItem(QTime::currentTime().toString("hh:mm:ss.zzz")+"   "+ sInfo);
-
-    switch(logCategory)
-    {
-        case VimbaViewerLogCategory_OK: 
-            icon.addFile(QString::fromUtf8(":/VimbaViewer/Images/okay.png"), QSize(), QIcon::Normal, QIcon::Off);
-            break;
-
-        case VimbaViewerLogCategory_WARNING:
-            icon.addFile(QString::fromUtf8(":/VimbaViewer/Images/warning.png"), QSize(), QIcon::Normal, QIcon::Off);
-            break;
-
-        case VimbaViewerLogCategory_ERROR:
-            icon.addFile( QString::fromUtf8(":/VimbaViewer/Images/error.png"), QSize(), QIcon::Normal, QIcon::Off);
-            break;
-
-        case VimbaViewerLogCategory_INFO:
-            icon.addFile( QString::fromUtf8(":/VimbaViewer/Images/info.png"), QSize(), QIcon::Normal, QIcon::Off);
-            break;
-
-        default: break;
-    }
-    
-    item->setIcon(icon);
-    this->addItem(item);
-    this->scrollToBottom();
-}
-
-void LoggerWindow::plainLogging ( const QString &sInfo )
-{
-    QListWidgetItem *item = new QListWidgetItem("   "+sInfo);
-    this->addItem(new QListWidgetItem(""));
-    this->addItem(item);
-    this->scrollToBottom();
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/LoggerWindow.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/LoggerWindow.h
deleted file mode 100644
index 441ecf039766a39eec6c3f03f07c856ee98fcc44..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/LoggerWindow.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        LoggerWindow.h
-
-  Description: Logging widget used by the MainWindow only.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef LOGGERWINDOW_H
-#define LOGGERWINDOW_H
-
-#include <QListWidget>
-#include "Helper.h"
-
-class LoggerWindow : public QListWidget
-{
-    Q_OBJECT
-    public: 
-    
-    protected:            
-      
-    private:
-                    
-    public:
-        LoggerWindow ( QWidget *parent );
-        ~LoggerWindow ( void );
-        void logging( const QString &sInfo , const VimbaViewerLogCategory &logCategory );
-        void plainLogging ( const QString &sInfo );
-                 
-    protected:
-                    
-    private:
-                                
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/MainInformationWindow.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/MainInformationWindow.cpp
deleted file mode 100644
index 1f7df142b20fc57a9a87ab28dde334cc1c125c3d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/MainInformationWindow.cpp
+++ /dev/null
@@ -1,296 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        MainInformationWindow.cpp
-
-  Description: Main MDI Window for logging and event viewer
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "MainInformationWindow.h"
-#include <QToolBar>
-
-
-MainInformationWindow::MainInformationWindow ( QWidget *parent , Qt::WindowFlags flags, CameraPtr pCam ) : QMainWindow( parent, flags ),
-m_WindowMenu( NULL ), m_OpenLoggerAct( NULL ), m_OpenEventViewerAct( NULL ), m_CloseAllAct( NULL ), m_TileAct( NULL ),
-m_CascadeAct( NULL ), m_MDIArea( NULL )      , m_nEventViewerPosition (-1) , m_bIsLogging ( false ), m_bIsEventViewerOpen ( false ),
-m_NumberOfLogging ( 0 )    
-{
-    m_pCam = pCam;
-    /* make sure to treat this as a widget :) */
-    this->setWindowFlags(Qt::Widget); 
-    QToolBar* toolBarInformation = new QToolBar(this);
-    toolBarInformation->setObjectName(QString::fromUtf8("toolBarInformation"));
-    toolBarInformation->setWindowTitle("Information ToolBar");
-	toolBarInformation->setStyleSheet(QString::fromUtf8("QToolBar{background-color: transparent;} QToolTip {""}"));
-    this->addToolBar(toolBarInformation);
-
-    /* create MDI area */
-    m_MDIArea = new QMdiArea;
-    setCentralWidget(m_MDIArea);
-
-    createAction();
-    toolBarInformation->addAction(m_OpenLoggerAct);
-    toolBarInformation->addAction(m_OpenEventViewerAct);
-    toolBarInformation->addSeparator();
-    toolBarInformation->addAction(m_CascadeAct);
-    toolBarInformation->addAction(m_TileAct);
-    toolBarInformation->addAction(m_CloseAllAct);
-    m_OpenLoggerAct->setCheckable(true);
-    m_OpenEventViewerAct->setCheckable(true);
-    createMenu();
-    connect(m_MDIArea, SIGNAL(subWindowActivated(QMdiSubWindow*)), this, SLOT(updateMenus()));
-
-    updateMenus();
-}
-
-MainInformationWindow::~MainInformationWindow ( )
-{
-    
-}
-
-void MainInformationWindow::createAction ( void )
-{
-    m_OpenLoggerAct      = new QAction(QIcon(":/VimbaViewer/Images/logger.png"), tr("&Open logging window"), this );
-    m_OpenEventViewerAct = new QAction(QIcon(":/VimbaViewer/Images/open_eventviewer.png"), tr("&Open event viewer"), this );
-    m_CascadeAct         = new QAction(QIcon(":/VimbaViewer/Images/cascade.png"),tr("&Cascade"), this);
-    m_TileAct            = new QAction(QIcon(":/VimbaViewer/Images/tile.png"),tr("&Tile "), this);
-    m_CloseAllAct        = new QAction(QIcon(":/VimbaViewer/Images/close.png"),tr("&Close all"), this);
-    
-    m_OpenLoggerAct->setPriority(QAction::LowPriority);
-    m_OpenEventViewerAct->setPriority(QAction::LowPriority);
-    m_CascadeAct->setPriority(QAction::LowPriority);
-    m_TileAct->setPriority(QAction::LowPriority);
-    m_CloseAllAct->setPriority(QAction::LowPriority);
-
-    connect(m_OpenLoggerAct, SIGNAL(triggered()), this, SLOT(openLogger()));
-    connect(m_OpenEventViewerAct, SIGNAL(triggered()), this, SLOT(openEventViewer()));
-    connect(m_CloseAllAct, SIGNAL(triggered()), m_MDIArea, SLOT(closeAllSubWindows()));
-    connect(m_CascadeAct, SIGNAL(triggered()), m_MDIArea, SLOT(cascadeSubWindows()));
-    connect(m_TileAct, SIGNAL(triggered()), m_MDIArea, SLOT(tileSubWindows()));
-}
-
-void MainInformationWindow::createMenu ( void )
-{
-    m_WindowMenu = menuBar()->addMenu(tr("&Window"));    
-    m_WindowMenu->addAction(m_OpenLoggerAct);
-    m_WindowMenu->addAction(m_OpenEventViewerAct);
-    m_WindowMenu->addSeparator();
-    m_WindowMenu->addAction(m_TileAct);
-    m_WindowMenu->addAction(m_CascadeAct);
-    m_WindowMenu->addSeparator();
-    m_WindowMenu->addAction(m_CloseAllAct);
-}
-
-void MainInformationWindow::feedLogger ( const QString &sWhatWindow, const QString &sInfo, const VimbaViewerLogCategory &logCategory )
-{
-    QStringList sInfoList;
-    sInfoList << sInfo;
-
-    for(int i=0; i< m_MDIChildList.size(); i++)
-    {
-        if( 0 == m_MDIChildList.at(i)->getName().compare(sWhatWindow) ) 
-            m_MDIChildList.at(i)->setLogger(sInfoList, logCategory);
-    }
-}
-
-void MainInformationWindow::openLoggingWindow ( void )
-{
-    m_OpenLoggerAct->setChecked(true);
-    openLogger();
-}
-
-void MainInformationWindow::openLogger ( void )
-{
-    createMdiChild("Logging");
-
-    /* getting info from the camera */
-    std::string sInfo;
-
-    if(VmbErrorSuccess == m_pCam->GetName(sInfo))
-        feedLogger("Logging", QString("Name: "+ QString::fromStdString(sInfo)), VimbaViewerLogCategory_INFO);
-    sInfo.clear();
-
-    if(VmbErrorSuccess == m_pCam->GetModel(sInfo))
-        feedLogger("Logging", QString("Model: "+ QString::fromStdString(sInfo)), VimbaViewerLogCategory_INFO);
-    sInfo.clear();
-
-    if(VmbErrorSuccess == m_pCam->GetSerialNumber(sInfo))
-        feedLogger("Logging", QString("S/N: "+ QString::fromStdString(sInfo)), VimbaViewerLogCategory_INFO);
-    sInfo.clear();
-
-    if(VmbErrorSuccess == m_pCam->GetID(sInfo))
-        feedLogger("Logging", QString("ID: "+ QString::fromStdString(sInfo)), VimbaViewerLogCategory_INFO);
-    sInfo.clear();
-
-    if(VmbErrorSuccess == m_pCam->GetInterfaceID(sInfo))
-        feedLogger("Logging", QString("Interface ID: "+ QString::fromStdString(sInfo)), VimbaViewerLogCategory_INFO);    
-}
-
-void MainInformationWindow::openEventViewer ( void )
-{
-    createMdiChild("Event Viewer");
-}
-
-void MainInformationWindow::onDestroyed ( QObject *obj )
-{
-    QString s = obj->objectName();
-
-    if(0 == s.compare("Logging"))
-    {
-        m_OpenLoggerAct->setChecked(false);
-    }
-
-    if(0 == s.compare("Event Viewer"))
-    {
-        m_bIsLogging = false;
-        m_OpenEventViewerAct->setChecked(false);
-    }
-
-    /* just make sure to clean it up */
-    for(int i=0; i< m_MDIChildList.size(); i++)
-    {
-        if( 0 == m_MDIChildList.at(i)->getName().compare(s) )
-        {
-            if(0 == s.compare("Event Viewer"))
-            {
-                /* make sure to stop logging before delete the object */
-                m_bIsLogging = false;
-                m_MDIChildList.at(i)->stopLogger();
-            }
-
-            m_MDIChildList.removeAt(i);
-            updateEventViewerPosition();
-        }
-    }
-}
-
-void MainInformationWindow::updateEventViewerPosition ( void )
-{
-    for(int i=0; i< m_MDIChildList.size(); i++)
-    {
-        if( 0 == m_MDIChildList.at(i)->getName().compare("Event Viewer"))
-        {
-            m_nEventViewerPosition = i;
-            m_bIsEventViewerOpen = true;
-            return;
-        }
-    }
-
-    m_bIsEventViewerOpen = false;
-}
-
-void MainInformationWindow::updateMenus ( void )
-{
-    bool bHasMdiChild = (0 != activeMdiChild());
-    m_CascadeAct->setEnabled(bHasMdiChild);
-    m_TileAct->setEnabled(bHasMdiChild); 
-    m_CloseAllAct->setEnabled(bHasMdiChild);
-}
-
-MdiChild *MainInformationWindow::activeMdiChild()
-{
-    if (QMdiSubWindow *activeSubWindow = m_MDIArea->activeSubWindow())
-        return qobject_cast<MdiChild *>(activeSubWindow->widget());
-
-    return 0;
-}
-
-void MainInformationWindow::createMdiChild ( const QString &sWhatWindow )
-{
-    if(!m_MDIChildList.isEmpty())
-    {
-        for(int i=0; i< m_MDIChildList.size(); i++)
-        {
-            if(m_bIsLogging)
-                m_bIsLogging = false;
-
-            /* window is already available */
-            if( 0 == m_MDIChildList.at(i)->getName().compare(sWhatWindow)) 
-            {
-                /* close and delete it */
-                QMdiSubWindow *activeSubWindow = NULL;
-                
-                /* make sure that the window to close is active */
-                do 
-                {
-                    m_MDIArea->activateNextSubWindow();
-                    activeSubWindow = m_MDIArea->activeSubWindow();
-
-                } while ( 0 != activeSubWindow->windowTitle().compare(sWhatWindow) );
-
-                if(0 == sWhatWindow.compare("Event Viewer"))
-                {
-                    /* make sure to stop logging before delete the object */
-                    m_bIsLogging = false;
-                    m_MDIChildList.at(i)->stopLogger();
-                }
-
-                m_MDIArea->removeSubWindow(activeSubWindow);    
-                disconnect(m_MDIChildList.at(i), SIGNAL(destroyed(QObject*)), this, SLOT(onDestroyed(QObject*)));
-                m_MDIChildList.removeAt(i);
-                updateEventViewerPosition();
-                m_bIsLogging = true;
-                return ;
-            }
-        }    
-    }
-
-    m_MDIChildList.append(new MdiChild(sWhatWindow));
-    
-    if( 0 == sWhatWindow.compare("Logging") )
-    {
-        m_MDIArea->addSubWindow(m_MDIChildList.back())->setWindowIcon(QIcon(":/VimbaViewer/Images/logger.png"));
-        m_MDIChildList.back()->setObjectName("Logging");
-        m_MDIChildList.back()->showMaximized();
-    }
-    else if( 0 == sWhatWindow.compare("Event Viewer") )
-    {
-        m_MDIArea->addSubWindow(m_MDIChildList.back())->setWindowIcon(QIcon(":/VimbaViewer/Images/open_eventviewer.png"));
-        m_MDIChildList.back()->setObjectName("Event Viewer");
-        m_MDIChildList.back()->showMaximized();
-    }
-
-    updateEventViewerPosition();
-    m_bIsLogging = true;
-
-    connect(m_MDIChildList.back(), SIGNAL(destroyed(QObject*)), this, SLOT(onDestroyed(QObject*)));
-    m_MDIChildList.back()->show();
-}
-
-void MainInformationWindow::setEventMessage ( const QStringList &sMessage )
-{    
-    if( (m_bIsEventViewerOpen) && (m_bIsLogging) )
-    {
-        if ( ! m_MDIChildList.at(m_nEventViewerPosition)->getPauseState() )
-        {
-            /* show the last 100 rows */
-            if ( MAX_LOGGING == ++m_NumberOfLogging ) 
-            {
-                m_NumberOfLogging = 0;
-                m_MDIChildList.at(m_nEventViewerPosition)->clearLogger();
-            }
-
-            m_MDIChildList.at(m_nEventViewerPosition)->setLogger(sMessage, VimbaViewerLogCategory_INFO);
-        }
-    }
-}
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/MainInformationWindow.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/MainInformationWindow.h
deleted file mode 100644
index 21f62b12af37b50e15b4c4a005c673a26979a66b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/MainInformationWindow.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        MainInformationWindow.h
-
-  Description: Main MDI Window for logging and event viewer
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef MAININFORMATIONWINDOW_H
-#define MAININFORMATIONWINDOW_H
-
-#include <QMainWindow>
-#include <QAction>
-#include <QMenuBar>
-#include <QMdiArea>
-#include <QMdiSubWindow>
-#include <VimbaCPP/Include/VimbaSystem.h>
-#include "MdiChild.h"
-
-const unsigned int MAX_LOGGING = 100;
-
-using AVT::VmbAPI::CameraPtr;
-
-class MdiChild;
-
-class MainInformationWindow : public QMainWindow
-{
-    Q_OBJECT
-    public: 
-            
-    protected:
-
-    private:
-            QAction                *m_OpenLoggerAct;
-            QAction                *m_OpenEventViewerAct;
-            QAction                *m_CloseAllAct;
-            QAction                *m_TileAct;
-            QAction                *m_CascadeAct;
-            QMenu                  *m_WindowMenu;
-
-            QMdiArea               *m_MDIArea;
-            QList< MdiChild *>      m_MDIChildList;
-            CameraPtr               m_pCam;
-
-            int                     m_nEventViewerPosition;
-            bool                    m_bIsLogging;
-            bool                    m_bIsEventViewerOpen;
-
-            unsigned int            m_NumberOfLogging;
-    public:
-            MainInformationWindow ( QWidget *parent = 0, Qt::WindowFlags flags = 0, CameraPtr pCam = CameraPtr()  );
-           ~MainInformationWindow ( void );
-            
-            void setEventMessage ( const QStringList &sMessage );
-            void openLoggingWindow ( void );
-            void feedLogger ( const QString &sWhatWindow, const QString &sInfo, const VimbaViewerLogCategory &logCategory );
-
-    protected:
-
-    private:
-            void createAction ( void );
-            void createMenu ( void );
-            MdiChild *activeMdiChild ( void );
-            void createMdiChild ( const QString &sWhatWindow );
-            void updateEventViewerPosition ( void );
-
-    private slots:
-            void openLogger ( void );
-            void openEventViewer ( void );
-            void updateMenus ( void );
-            void onDestroyed ( QObject *obj );
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/MdiChild.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/MdiChild.cpp
deleted file mode 100644
index d2e89b983668f40a1c9913de6e62144ad013a075..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/MdiChild.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        MdiChild.cpp
-
-  Description: MDI Widget for logging and event viewer
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include <QtGui>
-#include "MdiChild.h"
-
-
-MdiChild::MdiChild(QString sTitle) : m_bIsPause (false)
-{
-    m_sName = sTitle;
-    setAttribute(Qt::WA_DeleteOnClose);
-    setWindowTitle(sTitle);
-
-    QVBoxLayout *verticalLayout_Parent = new QVBoxLayout(this);
-    verticalLayout_Parent->setObjectName("verticalLayout_Parent");
-
-    QVBoxLayout *verticalLayout_Child = new QVBoxLayout();
-    verticalLayout_Child->setObjectName("verticalLayout_Child");
-
-    m_Logger = new QTextEdit(this);
-    m_Logger->setObjectName("m_Logger");
-    m_Logger->setReadOnly(true);
-    m_Logger->setLineWrapMode(QTextEdit::NoWrap); 
-    m_Logger->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 0, 0);\n" "color: rgb(255, 255, 255);"));
-    verticalLayout_Child->addWidget(m_Logger);
-    verticalLayout_Parent->addLayout(verticalLayout_Child);
-
-    /* if its an Event Viewer window, then add these two buttons on widget */
-    if(0 == sTitle.compare("Event Viewer"))
-    {
-        QHBoxLayout *horizontalLayout = new QHBoxLayout();
-        horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
-        m_StartStopBtn = new QPushButton(this);
-        m_StartStopBtn->setObjectName(QString::fromUtf8("m_StartStopBtn"));
-        
-        horizontalLayout->addWidget(m_StartStopBtn);
-
-        m_ClearBtn = new QPushButton(this);
-        m_ClearBtn->setObjectName(QString::fromUtf8("m_ClearBtn"));
-        
-        horizontalLayout->addWidget(m_ClearBtn);
-        m_StartStopBtn->setText("Pause");
-        m_ClearBtn->setText("Clear");
-
-        QSpacerItem *horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
-        horizontalLayout->addItem(horizontalSpacer);
-
-        verticalLayout_Parent->addLayout(horizontalLayout);
-
-        connect(m_ClearBtn,     SIGNAL(clicked()), this, SLOT(onClearLogger()));
-        connect(m_StartStopBtn, SIGNAL(clicked()), this, SLOT(onPauseLogger()));    
-    }
-}
-
-MdiChild::~MdiChild()
-{
-
-}
-
-void MdiChild::onClearLogger ( )
-{
-    m_Logger->clear();
-}
-
-void MdiChild::onPauseLogger ( )
-{
-    if(!m_bIsPause)
-    {
-        m_bIsPause = true;
-        m_StartStopBtn->setText("Resume");
-    }
-    else
-    {
-        m_bIsPause = false;
-        m_StartStopBtn->setText("Pause");
-    }
-
-}
-
-bool MdiChild::getPauseState ( void )
-{
-    return m_bIsPause;
-}
-
-void MdiChild::setLogger ( const QStringList &sInfo, const VimbaViewerLogCategory &logCategory )
-{
-    if(!m_bIsPause)
-    {
-        if(VimbaViewerLogCategory_INFO == logCategory)
-        {
-            m_Logger->append(sInfo.join("\n"));
-            QTextCursor c =  m_Logger->textCursor();
-            c.movePosition(QTextCursor::End);
-            m_Logger->setTextCursor(c);
-            return;
-        }
-    }
-    
-    QString sInformation = "<br>" + sInfo.at(0);
-    QString sErrorHtml = "<font color=\"Red\">";
-    QString sOKHtml = "<font color=\"lime\">";
-    QString sWarningHtml = "<font color=\"Yellow\">";
-    QString sInfoHtml = "<font color=\"White\">";
-    QString sEndHtml = "</font>";
-    
-    QTextCursor cursorText = m_Logger->textCursor();
-
-    if(!m_bIsPause)
-    {
-        switch(logCategory)
-        {
-            case VimbaViewerLogCategory_OK: 
-                sInformation = sOKHtml % sInformation;
-                break;
-
-            case VimbaViewerLogCategory_WARNING: 
-                sInformation = sWarningHtml % sInformation;
-                break;
-
-            case VimbaViewerLogCategory_ERROR: 
-                sInformation = sErrorHtml % sInformation;
-                break;
-
-            default: 
-                sInformation = sInfoHtml % sInformation;
-                break;
-        }
-
-        sInformation = sInformation % sEndHtml;
-        m_Logger->insertHtml(sInformation);
-        cursorText.movePosition(QTextCursor::End);
-        m_Logger->setTextCursor(cursorText);        
-    }
-}
-
-void MdiChild::stopLogger( void )
-{
-    m_bIsPause = true;
-}
-
-void MdiChild::clearLogger( void )
-{
-    onClearLogger ();
-}
-
-QString MdiChild::getName( void )
-{
-    return m_sName;
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/MdiChild.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/MdiChild.h
deleted file mode 100644
index edcb07c043fd4c31bb785c42456c0b1e5db82f8e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/MdiChild.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        MdiChild.h
-
-  Description: MDI Widget for logging and event viewer
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef MDICHILD_H
-#define MDICHILD_H
-
-#include <QWidget>
-#include <QTextEdit>
-#include <QPushButton>
-#include "Helper.h"
-
-class MdiChild : public QWidget
-{
-    Q_OBJECT
-    
-    public:
-
-    protected:
-
-    private:
-        QString         m_sName;
-        QTextEdit      *m_Logger;
-        QPushButton    *m_StartStopBtn;
-        QPushButton    *m_ClearBtn;
-
-        bool            m_bIsPause;
-    
-    public:
-        MdiChild(QString sTitle);
-        ~MdiChild();
-
-        QString getName  ( void );
-        void setLogger ( const QStringList &sInfo, const VimbaViewerLogCategory &logCategory );
-        void stopLogger  ( void );
-        void clearLogger ( void );
-        bool getPauseState ( void );
-
-    protected:
-
-    private:
-
-    private slots:
-        void onClearLogger ( void );
-        void onPauseLogger ( void );
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/MultiCompleter.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/MultiCompleter.cpp
deleted file mode 100644
index a4121975c9a60c4b255d7eef99c5e611e1428f36..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/MultiCompleter.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2013 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        MultiCompleter.h
-
-  Description: QCompleter with multi selection
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "MultiCompleter.h"
-
-
-MultiCompleter::MultiCompleter ( const QStringList& items, QObject* parent )
-    : QCompleter( items, parent ), m_list(items), m_model()
-{
-    setModel(&m_model);
-}
-
-MultiCompleter::~MultiCompleter()
-{
-}
-
-QString MultiCompleter::pathFromIndex ( const QModelIndex& index ) const
-{
-    QString path = QCompleter::pathFromIndex( index );
-
-    QString text = static_cast<QLineEdit*>( widget() )->text();
-
-    int pos = text.lastIndexOf( '|' );
-    if ( pos >= 0 )
-        path = text.left( pos ) + "|" + path;
-
-    return path;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/MultiCompleter.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/MultiCompleter.h
deleted file mode 100644
index 0e4cc8f01c01a19187e90432d7ddf7b161f64562..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/MultiCompleter.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2013 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        MultiCompleter.h
-
-  Description: QCompleter with multi selection
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef MULTICOMPLETER_H
-#define MULTICOMPLETER_H
-
-#include <QCompleter>
-#include <QStringList>
-#include <QLineEdit>
-#include <QModelIndex>
-#include <QStringListModel>
-
-class MultiCompleter : public QCompleter
-{
-    Q_OBJECT
-
-    private:
-              QStringList      m_list;
-              QStringListModel m_model;
-              QString          m_word;
-
-    public:
-              MultiCompleter( const QStringList& items, QObject* parent );
-             ~MultiCompleter();
-
-              inline void update(QString word)
-              {
-                  /* Do any filtering you like */
-                  int pos = word.lastIndexOf( '|' ) + 1;
-
-                  while ( pos < word.length() && word.at( pos ) == QLatin1Char( ' ' ) )
-                      pos++;
-
-                  word = word.mid( pos ) ;
-                  /* Include all items that contain word */
-                  QStringList filtered = m_list.filter(word, caseSensitivity());
-                  m_model.setStringList(filtered);
-                  m_word = word;
-                  complete();    
-              }
-
-              inline QString word()
-              {
-                  return m_word;
-              }
-
-    public:
-              QString pathFromIndex( const QModelIndex& index ) const;
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/SortFilterProxyModel.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/SortFilterProxyModel.cpp
deleted file mode 100644
index ff9128ab1cf3323381abc3f6ed3c75e0940e910f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/SortFilterProxyModel.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2013 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        SortFilterProxyModel.cpp
-
-  Description: Filter pattern proxy
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "SortFilterProxyModel.h"
-
-
-SortFilterProxyModel::SortFilterProxyModel(QObject *parent)
-    : QSortFilterProxyModel(parent)
-{
-
-}
-
-bool SortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex & source_parent) const
-{
-    // get source-model index for current row
-    QModelIndex source_index = sourceModel()->index(source_row, this->filterKeyColumn(), source_parent) ;
-    if(source_index.isValid())
-    {
-        // if any of children matches the filter, then current index matches the filter as well
-        int nCount = sourceModel()->rowCount(source_index) ;
-        for(int i=0; i<nCount; ++i)
-        {
-            if(filterAcceptsRow(i, source_index))
-            {
-                return true ;
-            }
-        }
-        // check current index itself :
-        QString key = sourceModel()->data(source_index, filterRole()).toString();
-        return key.contains(filterRegExp()) ;
-    }
-    
-    // parent call for initial behaviour
-    return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent) ;
-}
-
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/SortFilterProxyModel.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/SortFilterProxyModel.h
deleted file mode 100644
index 428db92713a4e0dd7127cc147a7ce4584e809fd9..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/SortFilterProxyModel.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2013 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        SortFilterProxyModel.h
-
-  Description: Filter pattern proxy
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef SORTFILTERPROXYMODEL_H
-#define SORTFILTERPROXYMODEL_H
-
-#include <QSortFilterProxyModel>
-
-class SortFilterProxyModel : public QSortFilterProxyModel
-{
-    public:
-           SortFilterProxyModel(QObject *parent = 0);
-
-    protected:
-           bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
-
-    private:
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/TabExtensionResult.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/TabExtensionResult.h
deleted file mode 100644
index 252e291ad00c439dbf8598d57ebc7c96f08f5adf..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/TabExtensionResult.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef TAB_EXTENSION_RESULT_H_
-#define TAB_EXTENSION_RESULT_H_
-/*Results that will be returned from plugin functions*/
-enum TabExtensionResult
-{
-    TER_OK              = 0,
-    TER_RuntimeError    ,
-    TER_OutOfMemory     ,
-    TER_OutOfRange      ,
-    TER_NotSupported    ,
-    TER_BadParameter    ,
-};
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/Viewer.cpp b/VimbaCPP/Examples/VimbaViewer/Source/UI/Viewer.cpp
deleted file mode 100644
index 810fce497f05ffa398981b914e33d64b3bcbc59b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/Viewer.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Viewer.cpp
-
-  Description: - Displaying data from the camera in RGB32 format.
-               - Scrolling, Rotating, Saving single image
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include <UI/Viewer.h>
-#include <QMenu>
-#include <QMouseEvent>
-#include <QFileDialog>
-#include <QScrollBar>
-
-
-Viewer::Viewer ( QWidget *parent ): QGraphicsView ( parent ), m_ZoomFactor ( 0 ), m_ColorInterpolationAct ( NULL ), 
-                                                              m_bColorInterpolationState ( true ), m_bIsFitToWindow ( false ),
-                                                              m_bIsPressed ( false )
-{
-    setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);    
-    setMouseTracking(true);
-}
-
-Viewer::~Viewer ( void )
-{
-
-}
-
-void Viewer::enableFitToWindow ( const bool &bIsEnable )
-{
-    m_bIsFitToWindow = bIsEnable;
-}
-
-void Viewer::setDefaultSize ( void )
-{
-    resetCachedContent();
-    resetMatrix();
-    resetTransform();
-    m_ZoomFactor = 0;
-}
-
-void Viewer::SetCenter ( const QPointF& centerPoint )
-{     
-    /* Get the rectangle of the visible area in scene coords */
-    QRectF visibleArea = mapToScene(rect()).boundingRect();
-
-    /* Get the scene area */
-    QRectF sceneBounds = sceneRect();
- 
-    double boundX = visibleArea.width() / 2.0;
-    double boundY = visibleArea.height() / 2.0;
-    double boundWidth = sceneBounds.width() - 2.0 * boundX;
-    double boundHeight = sceneBounds.height() - 2.0 * boundY;
- 
-    /* The max boundary that the centerPoint can be to */
-    QRectF bounds(boundX, boundY, boundWidth, boundHeight);
- 
-    if(bounds.contains(centerPoint)) 
-    {   
-        /* We are within the bounds */
-        m_CurrentCenterPoint = centerPoint;
-    } 
-    else 
-    {  
-        /* We need to clamp or use the center of the screen */
-        if(visibleArea.contains(sceneBounds)) 
-        { 
-            /* Use the center of scene ie. we can see the whole scene */
-            m_CurrentCenterPoint = sceneBounds.center();
-        } 
-        else 
-        {
-            m_CurrentCenterPoint = centerPoint;
- 
-            /* We need to clamp the center. The centerPoint is too large */
-            if(centerPoint.x() > bounds.x() + bounds.width()) 
-            {
-                m_CurrentCenterPoint.setX(bounds.x() + bounds.width());
-            } 
-            else if(centerPoint.x() < bounds.x()) 
-            {
-                m_CurrentCenterPoint.setX(bounds.x());
-            }
- 
-            if(centerPoint.y() > bounds.y() + bounds.height()) 
-            {
-                m_CurrentCenterPoint.setY(bounds.y() + bounds.height());
-            } 
-            else if(centerPoint.y() < bounds.y()) 
-            {
-                m_CurrentCenterPoint.setY(bounds.y());
-            }
-        }
-    }
- 
-    /* Update the scrollbars */
-    centerOn(m_CurrentCenterPoint);
-}
- 
-void Viewer::saveImage ( void ) 
-{
-    emit savingImage();
-}
-
-void Viewer::colorInterpolationChecked ( bool bState )
-{
-  m_bColorInterpolationState = bState;    
-  emit setColorInterpolationState (m_bColorInterpolationState);
-}
-
-void Viewer::updateInterpolationState ( const bool &bState )
-{
-    m_bColorInterpolationState = bState;    
-}
-
-/* Handles when the mouse button is pressed */
-void Viewer::mousePressEvent ( QMouseEvent* event ) 
-{ 
-    m_bIsPressed = true; 
-    Qt::MouseButton mouseBtn = event->button();
-    if( Qt::RightButton == mouseBtn )
-    {
-        QMenu menu;
-        menu.addAction(QIcon(":/VimbaViewer/Images/save.png"), tr("Save Image..."), this, SLOT(saveImage()));
-        
-        if(NULL != m_ColorInterpolationAct)
-        {
-            disconnect(m_ColorInterpolationAct, SIGNAL(toggled(bool)), this, SLOT(colorInterpolationChecked(bool)) );
-            delete m_ColorInterpolationAct;
-            m_ColorInterpolationAct = NULL;
-        }
-
-        m_ColorInterpolationAct = new QAction(this);
-        m_ColorInterpolationAct->setObjectName(QString::fromUtf8("ColorInterpolation"));
-        m_ColorInterpolationAct->setCheckable(true);
-        m_ColorInterpolationAct->setText("Color Interpolation");
-        m_ColorInterpolationAct->setChecked(m_bColorInterpolationState);
-        
-        menu.addAction(m_ColorInterpolationAct);
-        connect(m_ColorInterpolationAct, SIGNAL(toggled(bool)), this, SLOT(colorInterpolationChecked(bool)) );
-
-        menu.exec(event->globalPos());
-    }
-    else
-    {
-        /* For panning the view */
-        m_LastPanPoint = event->pos();
-
-        if(horizontalScrollBar()->isVisible() || verticalScrollBar()->isVisible())
-            setCursor(Qt::ClosedHandCursor);
-        else if((!horizontalScrollBar()->isVisible() && !verticalScrollBar()->isVisible()))
-            setCursor(Qt::ArrowCursor);
-    }
-}
- 
-/* Handles when the mouse button is released */
-void Viewer::mouseReleaseEvent ( QMouseEvent* event ) 
-{
-    m_bIsPressed = false;
-    if(horizontalScrollBar()->isVisible() || verticalScrollBar()->isVisible())
-        setCursor(Qt::OpenHandCursor);
-    m_LastPanPoint = QPoint();
-}
- 
-/* Handles the mouse move event */
-void Viewer::mouseMoveEvent ( QMouseEvent* event ) 
-{ 
-    if((horizontalScrollBar()->isVisible() || verticalScrollBar()->isVisible()) && !m_bIsPressed)
-        setCursor(Qt::OpenHandCursor);
-    else if((!horizontalScrollBar()->isVisible() && !verticalScrollBar()->isVisible()))
-        setCursor(Qt::ArrowCursor);
-
-    if(!m_LastPanPoint.isNull()) 
-    {
-        /* Get how much we panned */
-        QPointF delta = mapToScene(m_LastPanPoint) - mapToScene(event->pos());
-        m_LastPanPoint = event->pos();
- 
-        /* Update the center e.g do the pan */
-        QPointF F = GetCenter();
-        SetCenter(GetCenter() + delta);
-    }
-}
- 
-/*  Zoom the view in and out. */
-void Viewer::wheelEvent ( QWheelEvent* event ) 
-{   
-    0 < event->delta() ? zoomIn() : zoomOut();
-}
- 
-/**
-  * Need to update the center so there is no jolt in the
-  * interaction after resizing the widget.
-  */
-void Viewer::resizeEvent ( QResizeEvent* event ) 
-{    
-    /* Call the subclass resize so the scrollbars are updated correctly */
-    if(m_bIsFitToWindow)
-    {
-        fitInView(scene()->itemsBoundingRect(), Qt::IgnoreAspectRatio);            
-    }
-
-    QGraphicsView::resizeEvent(event);
-}
-
-QPointF Viewer::GetCenter ( void )
-{
-    return m_CurrentCenterPoint;
-}
-
-void Viewer::zoomIn ( void ) 
-{   
-    /* Get the position of the mouse before scaling, in scene coords */
-    QPointF pointBeforeScale(mapToScene(pos()));
-    /* Get the original screen center point */
-    QPointF screenCenter = GetCenter();
-    /* How fast we zoom */
-    double scaleFactor = 1.15; 
-    scale(scaleFactor, scaleFactor);
-    m_ZoomFactor++;
-    updateCenter(pointBeforeScale, screenCenter);
-}
-
-void Viewer::zoomOut ( void ) 
-{
-    /* Get the position of the mouse before scaling, in scene coords */
-    QPointF pointBeforeScale(mapToScene(pos()));
-    /* Get the original screen center point */
-    QPointF screenCenter = GetCenter();
-    /* How fast we zoom */
-    double scaleFactor = 1.15; 
-    scale(1.0 / scaleFactor, 1.0 / scaleFactor);
-    m_ZoomFactor--;
-    updateCenter(pointBeforeScale, screenCenter);
-}
-
-void Viewer::updateCenter ( QPointF pointBeforeScale, QPointF screenCenter ) 
-{
-    /* Get the position after scaling, in scene coords */
-    QPointF pointAfterScale(mapToScene(pos()));
-
-    /* Get the offset of how the screen moved */
-    QPointF offset = pointBeforeScale - pointAfterScale;
-
-    /* Adjust to the new center for correct zooming */
-    QPointF newCenter = screenCenter + offset;
-    SetCenter(newCenter);
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/Viewer.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/Viewer.h
deleted file mode 100644
index cc76899f33105443e3bb369014b71980fe1cfb62..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/Viewer.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Viewer.h
-
-  Description: - Displaying data from the camera in RGB32 format.
-               - Scrolling, Rotating, Saving single image
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef VIEWER_H
-#define VIEWER_H
-
-#include <QGraphicsView>
-#include <QGraphicsTextItem>
-#include <QtCore/QTextStream>
-#include "Helper.h"
-
-class Viewer : public QGraphicsView
-{
-    Q_OBJECT
-
-    public: 
-            QAction            *m_ColorInterpolationAct;
-
-    protected:
-
-    private:
-            QGraphicsScene     *m_Scene;
-            QGraphicsView      *m_View;
-
-            double              m_ZoomFactor;
-            bool                m_bColorInterpolationState;
-            bool                m_bIsFitToWindow;
-            bool                m_bIsPressed;
-
-    public:
-            Viewer ( QWidget *parent = NULL);
-           ~Viewer ( void );
-
-            void enableFitToWindow ( const bool &bIsEnable );
-            void setDefaultSize ( void );
-            void updateInterpolationState ( const bool &bState );
-            void zoomIn  ( void ) ;
-            void zoomOut ( void ) ;
-
-    protected:
-            QPointF             m_CurrentCenterPoint;
-
-            /* From panning the view */
-            QPoint              m_LastPanPoint;
-
-            /* Set the current center point in the */
-            void SetCenter ( const QPointF& centerPoint );
-            QPointF GetCenter ( void );
-            void updateCenter ( QPointF pointBeforeScale, QPointF screenCenter );
-
-            /* Take over the interaction */
-            virtual void mousePressEvent      ( QMouseEvent* event );
-            virtual void mouseReleaseEvent    ( QMouseEvent* event );
-            virtual void mouseMoveEvent       ( QMouseEvent* event );
-            virtual void wheelEvent           ( QWheelEvent* event );
-            virtual void resizeEvent          ( QResizeEvent* event);
-
-    private:
-               
-    private slots:
-            void saveImage ( void );
-            void colorInterpolationChecked ( bool bState );
-
-    signals:
-            void savingImage ( void );
-            void setColorInterpolationState ( const bool &bState);    
-};
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/UI/tabextensioninterface.h b/VimbaCPP/Examples/VimbaViewer/Source/UI/tabextensioninterface.h
deleted file mode 100644
index bbf948732f61c18b17ce3864c7e08dfca0d246a3..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/UI/tabextensioninterface.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**   * Redistributions of source code must retain the above copyright
-**     notice, this list of conditions and the following disclaimer.
-**   * Redistributions in binary form must reproduce the above copyright
-**     notice, this list of conditions and the following disclaimer in
-**     the documentation and/or other materials provided with the
-**     distribution.
-**   * Neither the name of The Qt Company Ltd nor the names of its
-**     contributors may be used to endorse or promote products derived
-**     from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef TAB_EXTENSIONINTERFACE_H
-#define TAB_EXTENSIONINTERFACE_H
-#include <QString>
-#include <VimbaCPP/Include/VimbaSystem.h>
-#include "TabExtensionResult.h"
-
-typedef QSharedPointer<QVector<AVT::VmbAPI::FeaturePtr> > QFeatureVectorPtr;
-
-/*Tab Extension Interface*/
-class TabExtensionInterface : public QObject
-{
-public:
-    virtual ~TabExtensionInterface() {}
-    virtual TabExtensionResult  get(const QSharedPointer<QVector<AVT::VmbAPI::FeaturePtr> > &qFeatVec, QWidget &widget, QMap<QString, QVariant> *parameters = NULL) = 0;
-    virtual bool                connectToResetFps(QObject* pReceiver, const char* pszSlot) = 0;
-    virtual bool                connectFromAcquire(QObject* pSender, const char* pszSignal) = 0;
-};
-
-Q_DECLARE_INTERFACE(TabExtensionInterface,
-                    "com.trolltech.Plugin.TabExtensionInterface/1.0");
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/Version.h b/VimbaCPP/Examples/VimbaViewer/Source/Version.h
deleted file mode 100644
index 47b3bd53e394d39e5cf2ac94464ac7e8b24097f5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/Version.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef VERSION_H
-#define VERSION_H
-
-#define TOSTRING_HELPER(x) #x
-//We need this additional preprocessor indirection because otherwise it won't work!
-#define TOSTRING(x) TOSTRING_HELPER(x)
-
-#define VIMBAVIEWER_VERSION_MAJOR    2
-#define VIMBAVIEWER_VERSION_MINOR    5
-#define VIMBAVIEWER_VERSION_PATCH    0
-#define VIMBAVIEWER_VERSION          (TOSTRING(VIMBAVIEWER_VERSION_MAJOR) "." TOSTRING(VIMBAVIEWER_VERSION_MINOR) "." TOSTRING(VIMBAVIEWER_VERSION_PATCH))
-
-#define VIMBAVIEWER_COPYRIGHT_STRING "Copyright (c) Allied Vision Technologies 2012 - 2021"
-
-#endif //VERSION_H
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ViewerOption.ui b/VimbaCPP/Examples/VimbaViewer/Source/ViewerOption.ui
deleted file mode 100644
index 40fbf7e544e152faf65b5cf6adfb5fecb1218056..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ViewerOption.ui
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>DisplayOptionsDialog</class>
- <widget class="QDialog" name="DisplayOptionsDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>580</width>
-    <height>237</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>430</width>
-    <height>145</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>580</width>
-    <height>400</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Viewer Options</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
-   <item>
-    <layout class="QVBoxLayout" name="verticalLayout">
-     <item>
-      <widget class="QGroupBox" name="groupBox_Display">
-       <property name="title">
-        <string>Performance Settings: </string>
-       </property>
-       <widget class="QCheckBox" name="DisplayInterval_CheckBox">
-        <property name="enabled">
-         <bool>true</bool>
-        </property>
-        <property name="geometry">
-         <rect>
-          <x>10</x>
-          <y>30</y>
-          <width>531</width>
-          <height>20</height>
-         </rect>
-        </property>
-        <property name="text">
-         <string>Display every completed frame received by the application</string>
-        </property>
-        <property name="checked">
-         <bool>false</bool>
-        </property>
-       </widget>
-       <widget class="QLabel" name="Note_Label">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-        <property name="geometry">
-         <rect>
-          <x>30</x>
-          <y>60</y>
-          <width>541</width>
-          <height>20</height>
-         </rect>
-        </property>
-        <property name="text">
-         <string>NOTE: Enabling will increase the CPU consumption of your system!</string>
-        </property>
-       </widget>
-       <widget class="QLabel" name="label_FramesCount">
-        <property name="geometry">
-         <rect>
-          <x>10</x>
-          <y>100</y>
-          <width>231</width>
-          <height>20</height>
-         </rect>
-        </property>
-        <property name="text">
-         <string>Number of used frame buffers</string>
-        </property>
-       </widget>
-       <widget class="QLineEdit" name="lineEdit_FramesCount">
-        <property name="geometry">
-         <rect>
-          <x>240</x>
-          <y>100</y>
-          <width>91</width>
-          <height>22</height>
-         </rect>
-        </property>
-       </widget>
-       <widget class="QCheckBox" name="AllocAndAnnounce_CheckBox">
-        <property name="enabled">
-         <bool>true</bool>
-        </property>
-        <property name="geometry">
-         <rect>
-          <x>10</x>
-          <y>130</y>
-          <width>271</width>
-          <height>25</height>
-         </rect>
-        </property>
-        <property name="text">
-         <string>Use AllocAndAnnounce</string>
-        </property>
-        <property name="checked">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>DisplayOptionsDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>DisplayOptionsDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ViewerWindow.cpp b/VimbaCPP/Examples/VimbaViewer/Source/ViewerWindow.cpp
deleted file mode 100644
index d977eeb1a468a9efdfbcb1cdc9b4c69d0e77c5a7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ViewerWindow.cpp
+++ /dev/null
@@ -1,2379 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2019 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ViewerWindow.cpp
-
-  Description: The viewer window framework.
-               This contains of dock widgets like camera feature tree, a histogram, a toolbar and MDI window
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#include "ViewerWindow.h"
-#include <QTimer>
-#include "LineEditCompleter.h"
-#include "SortFilterProxyModel.h"
-#include "SplashScreen.h"
-#include "tabextensioninterface.h"
-#include "UI/ControllerTreeWindow.h"
-#include "UI/DockWidgetWindow.h"
-#include "UI/Histogram/HistogramWindow.h"
-#include "UI/MainInformationWindow.h"
-#include "UI/Viewer.h"
-#include "VmbImageTransformHelper.hpp"
-
-
-using AVT::VmbAPI::Frame;
-using AVT::VmbAPI::FramePtr;
-
-#ifndef _WIN32
-    #include <unistd.h>
-#endif
-
-
-void ViewerWindow::showSplashScreen(const QString& sID,QWidget* parent)
-{
-    bool bIsModelFound = true;
-    QPixmap pixmap;
-    // We expect ID to be of format: Modelname (DevicePartNumber)-DeviceID(DEV_MAC@) while MAC@ has 12 digits
-    if ( sID.startsWith( "1800" ) )
-        pixmap.load( ":/VimbaViewer/Images/1800U.png" );
-    else if ( sID.contains( "Mako" ))
-        pixmap.load( ":/VimbaViewer/Images/mako.png" );
-    else if(sID.contains("Manta"))
-        pixmap.load( ":/VimbaViewer/Images/manta.png" );
-    else if(sID.contains("GT"))
-    {
-        if (   sID.contains( "4100 " )
-            || sID.contains( "4905" )
-            || sID.contains( "4907" )
-            || sID.contains( "6600" ))
-            pixmap.load( ":/VimbaViewer/Images/prosilicagt-large.png" );
-        else
-            pixmap.load( ":/VimbaViewer/Images/prosilicagt.png" );
-    }
-    else if(sID.contains("GC"))
-        pixmap.load( ":/VimbaViewer/Images/prosilicagc.png" );
-    else if(sID.contains("GX"))
-        pixmap.load( ":/VimbaViewer/Images/prosilicagx.png" );
-    else if(sID.contains("GE"))
-        pixmap.load( ":/VimbaViewer/Images/prosilicage.png" );
-    else if(sID.contains("Marlin"))
-        pixmap.load( ":/VimbaViewer/Images/marlin.png" );
-    else if(sID.contains("Guppy"))
-    {
-        if ( sID.contains( "PRO" ))
-            pixmap.load( ":/VimbaViewer/Images/guppy-pro.png" );
-        else
-            pixmap.load( ":/VimbaViewer/Images/guppy.png" );
-    }
-    else if(sID.contains("Oscar"))
-        pixmap.load( ":/VimbaViewer/Images/oscar.png" );
-    else if(sID.contains("Pike"))
-        pixmap.load( ":/VimbaViewer/Images/pike.png" );
-    else if(sID.contains("Stingray"))
-        pixmap.load( ":/VimbaViewer/Images/stingray.png" );
-    else if(sID.contains("Bigeye"))
-        pixmap.load( ":/VimbaViewer/Images/bigeye.png" );
-    else if(sID.contains("Goldeye P"))
-        pixmap.load( ":/VimbaViewer/Images/goldeye-p.png" );
-    else if(sID.contains("Goldeye G") || sID.contains("Goldeye CL"))
-    {
-        if ( sID.contains( "Cool" ))
-            pixmap.load( ":/VimbaViewer/Images/goldeye-g-cool.png" );
-        else
-            pixmap.load( ":/VimbaViewer/Images/goldeye-g.png" );
-    }
-    else
-    {
-        pixmap.load( ":/VimbaViewer/Images/stripes_256.png" );
-        bIsModelFound = false;
-    }
-
-    SplashScreen splashScreen(pixmap, parent, Qt::SplashScreen);
-    const int posX = (parent->width()  - splashScreen.width()) / 2;
-    const int posY = (parent->height() - splashScreen.height()) / 2;
-    splashScreen.setGeometry( posX, posY, splashScreen.width(), splashScreen.height() );
-    splashScreen.show();
-    if(bIsModelFound)
-    {
-        splashScreen.showMessage("" , Qt::AlignHCenter | Qt::AlignVCenter, Qt::white);
-    }
-    else
-    {
-        splashScreen.showMessage("" , Qt::AlignHCenter | Qt::AlignVCenter, Qt::black);
-    }
-}
-ViewerWindow::ViewerWindow ( QWidget *parent, Qt::WindowFlags flag, QString sID, QString sAccess, bool bAutoAdjustPacketSize, CameraPtr pCam )
-    : QMainWindow( NULL, flag )
-    , m_DockController( NULL )
-    , m_DockInformation( NULL )
-    , m_Controller( NULL )
-    , m_ScreenViewer( NULL )
-    , m_InformationWindow( NULL )
-    , m_bHasJustStarted ( false )
-    , m_bIsFirstStart   ( true )
-    , m_bIsCameraRunning ( false )
-    , m_bIsCamOpen ( false )
-    , m_bIsRedHighlighted ( false )
-    , m_bIsViewerWindowClosing ( false )
-    , m_bIsDisplayEveryFrame ( false )
-    , m_bUseAllocAndAnnounce ( false )
-    , m_ImageOptionDialog ( NULL )
-    , m_saveFileDialog ( NULL )
-    , m_getDirDialog ( NULL )
-    , m_bIsTriggeredByMultiSaveBtn (false)
-    , m_nNumberOfFramesToSave (0)
-    , m_FrameBufferCount (BUFFER_COUNT)
-    , m_pCam( pCam )
-{
-    showSplashScreen(sID,parent);
-
-    VmbError_t errorType;
-    QTime openTimer;
-    openTimer.start();
-
-    /* setup information window */
-    m_InformationWindow = new MainInformationWindow(m_DockInformation, 0, m_pCam);
-    m_InformationWindow->openLoggingWindow();
-
-    if( 0 == sAccess.compare(tr("Open FULL ACCESS")))
-    {
-        errorType = m_pCam->Open(VmbAccessModeFull);
-        m_sAccessMode = tr("(FULL ACCESS)");
-    }
-    else if( 0 == sAccess.compare(tr("Open READ ONLY")))
-    {
-        errorType = m_pCam->Open(VmbAccessModeRead);
-        m_sAccessMode = tr("(READ ONLY)");
-        bAutoAdjustPacketSize = false;
-    }
-    else if( 0 == sAccess.compare(tr("Open CONFIG")))
-    {
-        errorType = m_pCam->Open(VmbAccessModeConfig);
-        m_sAccessMode = tr("(CONFIG MODE)");
-        bAutoAdjustPacketSize = false;
-    }
-    else if( 0 == sAccess.compare(tr("Open LITE")))
-    {
-        errorType = m_pCam->Open(VmbAccessModeLite);
-        m_sAccessMode = tr("(LITE)");
-        bAutoAdjustPacketSize = false;
-    }
-    else
-    {
-        errorType = VmbErrorInvalidAccess;
-        bAutoAdjustPacketSize = false;
-    }
-
-    m_OpenError = errorType;
-
-    if( VmbErrorSuccess != errorType )
-    {
-        openTimer.elapsed();
-        return;
-    }
-
-    m_sCameraID = sID;
-
-    /* create ViewerWindow */
-    setupUi(this);
-    if(!m_sAccessMode.isEmpty())
-    {
-        sID.append(" ");
-        sID.append(m_sAccessMode);
-    }
-    this->setWindowTitle(sID);
-
-    ActionFreerun->setEnabled(isStreamingAvailable());
-
-    /* add Viewer Widget to ViewerWindow*/
-    m_pScene        = QSharedPointer<QGraphicsScene>(new QGraphicsScene());
-    m_PixmapItem    = new QGraphicsPixmapItem();
-    m_ScreenViewer  = new Viewer(Ui::ViewerWindow::centralWidget);
-    m_ScreenViewer->setScene(m_pScene.data());
-    m_pScene->addItem(m_PixmapItem);
-    this->setCentralWidget( m_ScreenViewer );
-    QPixmap image( ":/VimbaViewer/Images/stripes_256.png" );
-    m_PixmapItem->setPixmap(image);
-    m_ScreenViewer->show();
-    m_bIsCamOpen = true;
-
-    /* add DockWidgets: Controller and Information */
-    m_DockController   = new DockWidgetWindow(tr("Controller for ")+sID, this);
-    m_DockInformation  = new DockWidgetWindow(tr("Information for ")+sID, this);
-    m_DockHistogram    = new DockWidgetWindow(tr("Histogram for ")+sID, this);
-    m_DockController->setObjectName("Controller");
-    m_DockInformation->setObjectName("Information");
-    m_DockHistogram->setObjectName("Histogram");
-
-    this->addDockWidget(static_cast<Qt::DockWidgetArea>(2), m_DockController);
-    this->addDockWidget(Qt::BottomDockWidgetArea, m_DockInformation);
-    this->addDockWidget(static_cast<Qt::DockWidgetArea>(1), m_DockHistogram);
-    m_DockHistogram->hide();
-
-    /* add Controller Tree */
-
-    QWidget     *dockWidgetContents   = new QWidget();
-    QVBoxLayout *verticalLayout2      = new QVBoxLayout(dockWidgetContents);
-    QSplitter   *splitter             = new QSplitter(dockWidgetContents);
-    QWidget     *verticalLayoutWidget = new QWidget(splitter);
-    QVBoxLayout *verticalLayout       = new QVBoxLayout(verticalLayoutWidget);
-    QTabWidget  *tabWidget            = new QTabWidget(verticalLayoutWidget);
-    QWidget     *widgetTree           = new QWidget();
-    QVBoxLayout *verticalLayout3      = new QVBoxLayout(widgetTree);
-
-    m_Description = new QTextEdit();
-    m_Controller = new ControllerTreeWindow(m_sCameraID, widgetTree, bAutoAdjustPacketSize, m_pCam);
-
-    if (VmbErrorSuccess != m_Controller->getTreeStatus())
-    {
-        onFeedLogger("ERROR: ControllerTree returned: "+QString::number(m_Controller->getTreeStatus()) + " " +  Helper::mapReturnCodeToString(m_Controller->getTreeStatus()));
-    }
-
-    m_Description->setLineWrapMode(QTextEdit::NoWrap);
-    m_Description->setReadOnly(true);
-    m_Description->setStyleSheet("font: 12px;\n" "font-family: Verdana;\n");
-
-    QList<int> listSize;
-    listSize << 5000;
-    splitter->setChildrenCollapsible(false);
-    splitter->setOrientation(Qt::Vertical);
-    splitter->addWidget(verticalLayoutWidget);
-    splitter->addWidget(m_Description);
-    splitter->setSizes(listSize);
-
-    /* Filter Pattern */
-    QHBoxLayout *pattern_HLayout = new QHBoxLayout();
-    m_FilterPatternLineEdit = new LineEditCompleter(this);
-    m_FilterPatternLineEdit->setText(tr("Example: Gain|Width"));
-    m_FilterPatternLineEdit->setToolTip(tr("To filter multiple features, e.g: Width|Gain|xyz|etc"));
-    m_FilterPatternLineEdit->setCompleter(m_Controller->getListCompleter());
-    m_FilterPatternLineEdit->setMinimumWidth(200);
-    QLabel *filterPatternLabel = new QLabel(tr("Filter pattern:"));
-    filterPatternLabel->setStyleSheet("font-weight: bold;");
-    QPushButton *patternButton = new QPushButton(tr("Search"));
-
-    pattern_HLayout->addWidget(filterPatternLabel);
-    pattern_HLayout->addWidget(m_FilterPatternLineEdit);
-    pattern_HLayout->addWidget(patternButton);
-    verticalLayout3->addLayout(pattern_HLayout);
-
-    connect(m_FilterPatternLineEdit, SIGNAL(returnPressed()), this, SLOT(textFilterChanged()));
-    connect(patternButton, SIGNAL(clicked(bool)), this, SLOT(textFilterChanged()));
-
-    verticalLayout->setContentsMargins(0, 0, 0, 0);
-    verticalLayout->addWidget(tabWidget);
-    verticalLayout2->addWidget(splitter);
-    verticalLayout3->addWidget(m_Controller);
-
-
-    tabWidget->setStyleSheet("color: rgb(0, 0, 0);");
-
-    // closed source injected
-
-    if (loadPlugin())
-    {
-        FeaturePtrVector featVec;
-        pCam->GetFeatures(featVec);
-        QVector<FeaturePtr> tmpFeatures = QVector<FeaturePtr>::fromStdVector(featVec);
-        QSharedPointer<QVector<FeaturePtr> > qFeatVec = QFeatureVectorPtr( new QVector<FeaturePtr>(tmpFeatures));
-        for (int i = 0; i < m_TabPluginCount; i++)
-        {
-            QWidget *plugtabWidget = new QWidget();
-            TabExtensionResult result = m_tabExtensionInterface[i]->get(qFeatVec, *plugtabWidget);
-            if ( result == TER_OK)
-            {
-                m_tabExtensionInterface[i]->connectToResetFps(this, SLOT(onResetFPS()));
-                m_tabExtensionInterface[i]->connectFromAcquire(this, SIGNAL(acquisitionRunning(bool)));
-                tabWidget->addTab(plugtabWidget, plugtabWidget->accessibleName());
-            }
-            else
-            {
-                delete plugtabWidget;
-            }
-        }
-    }
-
-    tabWidget->addTab(widgetTree, tr("All"));
-    m_DockController->setWidget(dockWidgetContents);
-    connect(tabWidget, SIGNAL(currentChanged(int)), m_Controller, SLOT(closeControls()));
-
-    /* tooltip checkbox */
-    m_ToolTipCheckBox     = new QCheckBox();
-    m_ToolTipCheckBox->setText(tr("Tooltip ON"));
-    m_ToolTipCheckBox->setChecked(true);
-    verticalLayout3->addWidget(m_ToolTipCheckBox);
-    connect( m_ToolTipCheckBox, SIGNAL(clicked(bool)), this, SLOT(onTooltipCheckBoxClick(bool)) );
-
-
-    connect(m_DockController,  SIGNAL(topLevelChanged  (bool)), this, SLOT(onfloatingDockChanged(bool)));
-    connect(m_DockInformation, SIGNAL(topLevelChanged  (bool)), this, SLOT(onfloatingDockChanged(bool)));
-    connect(m_DockHistogram,   SIGNAL(topLevelChanged  (bool)), this, SLOT(onfloatingDockChanged(bool)));
-
-    connect(m_DockController,  SIGNAL(visibilityChanged(bool)), this, SLOT(onVisibilityChanged(bool)));
-    connect(m_DockInformation, SIGNAL(visibilityChanged(bool)), this, SLOT(onVisibilityChanged(bool)));
-    connect(m_DockHistogram,   SIGNAL(visibilityChanged(bool)), this, SLOT(onVisibilityChanged(bool)));
-
-    connect(m_Controller,      SIGNAL(setDescription(const QString &)),  this, SLOT(onSetDescription(const QString &)));
-    connect(m_Controller,      SIGNAL(setEventMessage(const QStringList &)), this, SLOT(onSetEventMessage(const QStringList &)), Qt::QueuedConnection);
-    connect(m_Controller,      SIGNAL(acquisitionStartStop(const QString &)), this, SLOT(onAcquisitionStartStop(const QString &)));
-    connect(m_Controller,      SIGNAL(updateBufferSize()), this, SLOT(onPrepareCapture()));
-    connect(m_Controller,      SIGNAL(resetFPS()), this, SLOT(onResetFPS()));
-    connect(m_Controller,      SIGNAL(logging(const QString &)), this, SLOT(onFeedLogger( const QString &)));
-    connect(m_ScreenViewer,    SIGNAL(savingImage()), this, SLOT(on_ActionSaveAs_triggered()));
-    connect(m_ScreenViewer,    SIGNAL(setColorInterpolationState(const bool &)), this, SLOT(onSetColorInterpolation(const bool &)));
-
-    /* create FrameObserver to get frames from camera */
-    SP_SET( m_pFrameObs, new FrameObserver(m_pCam) );
-
-    connect(SP_ACCESS( m_pFrameObs ), SIGNAL(frameReadyFromObserver (QImage , const QString&, const QString&, const QString&)),
-        this, SLOT(onimageReady(QImage , const QString&, const QString&, const QString&)));
-
-    connect(SP_ACCESS( m_pFrameObs ), SIGNAL(frameReadyFromObserverFullBitDepth (tFrameInfo)),
-        this, SLOT(onFullBitDepthImageReady(tFrameInfo)));
-
-    connect(SP_ACCESS( m_pFrameObs ), SIGNAL(setCurrentFPS (const QString &)),
-        this, SLOT(onSetCurrentFPS(const QString &)));
-
-    connect(SP_ACCESS( m_pFrameObs ), SIGNAL(setFrameCounter (const unsigned int &)),
-        this, SLOT(onSetFrameCounter(const unsigned int &)));
-
-    /* HISTOGRAM: We need to register QVector<QVector <quint32> > because it is not known to Qt's meta-object system */
-    qRegisterMetaType< QVector<QVector <quint32> > >("QVector<QVector <quint32> >");
-    qRegisterMetaType< QVector <QStringList> >("QVector <QStringList>");
-
-    connect(m_pFrameObs.get(), SIGNAL(histogramDataFromObserver ( const QVector<QVector <quint32> > &, const QString &, const double &, const double &, const QVector <QStringList>& )),
-        this, SLOT(onSetHistogramData( const QVector<QVector <quint32> > &, const QString &, const double &, const double & , const QVector <QStringList>&)));
-
-    m_DockInformation->setWidget(m_InformationWindow);
-    int openElapsedTime = openTimer.elapsed();
-    if( openElapsedTime <= 2500 )
-    {
-#ifdef WIN32
-        Sleep(2500-openElapsedTime);
-#else
-        usleep( (2500-openElapsedTime) * 1000 );
-#endif
-    }
-
-    /* use default setting position and geometry */
-    QSettings settings("Allied Vision", "Vimba Viewer");
-    this->restoreGeometry(settings.value("geometry").toByteArray());
-    this->restoreState( settings.value("state").toByteArray(), 0 );
-    this->show();
-
-    (!m_DockController->isFloating() && !m_DockInformation->isFloating() && m_DockController->isVisible() && m_DockInformation->isVisible()) ? ActionResetPosition->setEnabled(false) : ActionResetPosition->setEnabled(true);
-
-    if( VmbErrorSuccess != m_Controller->getTreeStatus())
-    {
-        onFeedLogger("ERROR: GetFeatures returned: "+QString::number(m_Controller->getTreeStatus()) + " " +  Helper::mapReturnCodeToString(m_Controller->getTreeStatus()));
-    }
-
-    /* Histogram */
-    m_HistogramWindow = new HistogramWindow(this);
-    m_DockHistogram->setWidget(m_HistogramWindow);
-    m_HistogramWindow->createGraphWidgets();
-
-    m_DockHistogram->isVisible() ? ActionHistogram->setChecked(true) : ActionHistogram->setChecked(false);
-
-    /* Statusbar */
-    m_OperatingStatusLabel = new QLabel(" Ready ");
-    m_FormatLabel          = new QLabel;
-    m_ImageSizeLabel       = new QLabel;
-    m_FramesLabel          = new QLabel;
-    m_FramerateLabel       = new QLabel;
-
-    statusbar->addWidget(m_OperatingStatusLabel);
-    statusbar->addWidget(m_ImageSizeLabel);
-    statusbar->addWidget(m_FormatLabel);
-    statusbar->addWidget(m_FramesLabel);
-    statusbar->addWidget(m_FramerateLabel);
-
-    m_OperatingStatusLabel->setStyleSheet("background-color: rgb(0,0, 0); color: rgb(255,255,255)");
-
-    m_TextItem =  new QGraphicsTextItem;
-    QFont serifFont("Arial", 12, QFont::Bold);
-    m_TextItem->setFont(serifFont);
-    m_TextItem->setDefaultTextColor(Qt::red);
-
-    /*Save Images Option */
-    m_ImageOptionDialog = new QDialog(this, windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowMaximizeButtonHint);
-    m_SaveImageOption.setupUi(m_ImageOptionDialog);
-    if(!settings.value(m_sCameraID).toString().isEmpty())
-        m_SaveImageOption.ImageDestination_Edit->setText (settings.value(m_sCameraID).toString());
-    else
-    {
-        m_SaveImageOption.ImageDestination_Edit->setText( QString(
-#ifdef WIN32
-            "C:\\"
-#else
-            "/home/"
-#endif
-            ));
-    }
-
-
-    connect(m_SaveImageOption.ImageDestinationButton, SIGNAL(clicked()),this, SLOT(getSaveDestinationPath()));
-    connect(m_ImageOptionDialog, SIGNAL(accepted()),this, SLOT(acceptSaveImagesDlg()));
-    connect(m_ImageOptionDialog, SIGNAL(rejected()),this, SLOT(rejectSaveImagesDlg()));
-
-    if(!settings.value(m_sCameraID+"SaveImageName").toString().isEmpty())
-        m_SaveImageOption.ImageName_Edit->setText (settings.value(m_sCameraID+"SaveImageName").toString());
-    else
-        m_SaveImageOption.ImageName_Edit->setText("VimbaImage");
-
-    /* Direct Access */
-    m_AccessDialog = new QDialog(this, windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowMaximizeButtonHint);
-    m_DirectAccess.setupUi(m_AccessDialog);
-    m_DirectAccess.RegAdd_Edit->setMaxLength(8);
-    m_DirectAccess.RegData_Edit->setMaxLength(8);
-    m_DirectAccess.RegAdd_Edit->setText("FFFFFFFC");
-    m_DirectAccess.RegData_Edit->setText("00000000");
-    m_DirectAccess.RegDataDec_Edit->setText("0");
-    VmbInterfaceType InterfaceType = VmbInterfaceUnknown;
-    m_DirectAccess.CheckBoxEndianess->setVisible( VmbErrorSuccess == m_pCam->GetInterfaceType(InterfaceType) );
-    m_DirectAccess.CheckBoxEndianess->setChecked( VmbInterfaceUsb == InterfaceType );
-    m_DirectAccess.CheckBoxEndianess->setToolTip( m_DirectAccess.CheckBoxEndianess->toolTip() + " (your device was detected to be " + (VmbInterfaceUsb == InterfaceType ? "little" : "big") + " endian)");
-
-    m_AccessDialog->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint);
-
-    QRegExp rxHex("[0-9A-Fa-f]{1,8}");
-    m_DirectAccess.RegAdd_Edit->setValidator(new QRegExpValidator(rxHex, m_DirectAccess.RegAdd_Edit));
-    m_DirectAccess.RegData_Edit->setValidator(new QRegExpValidator(rxHex, m_DirectAccess.RegData_Edit));
-
-    QRegExp rxDec("[0-9]{1,10}");
-    m_DirectAccess.RegDataDec_Edit->setValidator(new QRegExpValidator(rxDec, m_DirectAccess.RegDataDec_Edit));
-
-    connect(m_DirectAccess.RegWrite_Button  , SIGNAL(clicked())                     , this, SLOT(writeRegisterData()));
-    connect(m_DirectAccess.RegRead_Button   , SIGNAL(clicked())                     , this, SLOT(readRegisterData()));
-    connect(m_DirectAccess.RegData_Edit     , SIGNAL(textChanged(const QString&))   , this, SLOT(directAccessHexTextChanged(const QString&)));
-    connect(m_DirectAccess.RegDataDec_Edit  , SIGNAL(textChanged(const QString&))   , this, SLOT(directAccessDecTextChanged(const QString&)));
-    connect(m_DirectAccess.CheckBoxEndianess, SIGNAL(stateChanged(int))             , this, SLOT(endianessChanged(int)));
-
-    /*Viewer Option */
-    m_ViewerOptionDialog = new QDialog(this, windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowMaximizeButtonHint);
-    m_ViewerOption.setupUi(m_ViewerOptionDialog);
-    m_ViewerOption.lineEdit_FramesCount->setText(QString::number( m_FrameBufferCount ));
-    VmbInterfaceType interfaceType = VmbInterfaceUnknown;
-    m_pCam->GetInterfaceType(interfaceType);
-    m_bUseAllocAndAnnounce = (interfaceType == VmbInterfaceCSI2);
-    m_ViewerOption.AllocAndAnnounce_CheckBox->setChecked(m_bUseAllocAndAnnounce);
-
-    connect( m_ViewerOption.lineEdit_FramesCount, SIGNAL(textChanged(const QString&)),this, SLOT(optionsFrameCountChanged(const QString&)));
-    connect( m_ViewerOption.DisplayInterval_CheckBox, SIGNAL(clicked(bool)), this, SLOT(displayEveryFrameClick(bool)));
-    connect( m_ViewerOption.AllocAndAnnounce_CheckBox, SIGNAL(clicked(bool)), this, SLOT(useAllocAndAnnounceClick(bool)));
-    connect( m_ViewerOption.buttonBox, SIGNAL(accepted()),this, SLOT(optionsAccepted()));
-
-    //connect(parent, SIGNAL(closeViewer()), this, SLOT(close()));
-
-
-    if (ActionHistogram->isChecked())
-    {
-        m_HistogramWindow->initializeStatistic();
-        m_pFrameObs->enableHistogram(true);
-    }
-    else
-        m_pFrameObs->enableHistogram(false);
-
-    m_Timer = new QTimer(this);
-    connect(m_Timer, SIGNAL(timeout()), this, SLOT(updateColorInterpolationState()));
-
-    /* enable/disable menu */
-    connect(m_Controller, SIGNAL(enableViewerMenu(bool)), this, SLOT(enableMenuAndToolbar(bool)));
-
-    /* saving images */
-    m_SaveImageThread = QSharedPointer<SaveImageThread>(new SaveImageThread());
-    connect( m_SaveImageThread.data(), SIGNAL(setPosition(unsigned int)), this, SLOT(onSaving(unsigned int)));
-    connect( m_SaveImageThread.data(), SIGNAL( LogMessage(const QString&)), this, SLOT(onFeedLogger(const QString&)) );
-
-    if (m_TabPluginCount == 0) // All Tab is visible set focus to "search"
-    {
-        m_FilterPatternLineEdit->setFocus();
-    }
-
-    m_FilterPatternLineEdit->selectAll();
-
-#ifdef WIN32
-    m_SelectedExtension = ".bmp";
-#else
-    m_SelectedExtension = ".png";
-#endif
-
-    // test if the LibTiff library is available on this system
-    m_LibTiffAvailable = m_TiffWriter.IsAvailable();
-    ActionAllow16BitTiffSaving->setEnabled(m_LibTiffAvailable);
-}
-
-ViewerWindow::~ViewerWindow()
-{
-    /* save setting position and geometry from last session */
-    QSettings settings("Allied Vision", "Vimba Viewer");
-    settings.setValue("geometry", saveGeometry());
-    settings.setValue("state", saveState(0));
-
-    /* If cam is open */
-    if(!m_sCameraID.isEmpty())
-    {
-        settings.setValue(m_sCameraID,  m_SaveImageOption.ImageDestination_Edit->text());
-        if(!m_SaveName.isEmpty())
-            settings.setValue(m_sCameraID +"SaveImageName", m_SaveName);
-
-        if( NULL != m_saveFileDialog )
-        {
-            delete m_saveFileDialog;
-            m_saveFileDialog = NULL;
-        }
-
-        releaseBuffer();
-
-        m_pCam->Close();
-    }
-}
-
-void ViewerWindow::textFilterChanged()
-{
-    QPixmap pixmap( ":/VimbaViewer/Images/refresh.png" );
-    SplashScreen splashScreen(pixmap, m_Controller, Qt::SplashScreen);
-    int nW = ((m_Controller->width()/2) - splashScreen.width()/2);
-    int nH = ((m_Controller->height()/2) - splashScreen.height()/2);
-    splashScreen.setGeometry(nW,nH, splashScreen.width(),splashScreen.height());
-    splashScreen.show();
-    splashScreen.showMessage("Please wait..." , Qt::AlignHCenter | Qt::AlignVCenter, Qt::red);
-
-    QRegExp::PatternSyntax syntax = QRegExp::PatternSyntax(0);
-    Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive;
-
-    QRegExp regExp(m_FilterPatternLineEdit->text(), caseSensitivity, syntax);
-    m_Controller->m_ProxyModel->setFilterRegExp(regExp);
-    m_Controller->expandAll();
-    m_Controller->updateUnRegisterFeature();
-    m_Controller->updateRegisterFeature();
-    m_FilterPatternLineEdit->setFocus();
-    m_FilterPatternLineEdit->selectAll();
-}
-
-void ViewerWindow::enableMenuAndToolbar ( bool bValue )
-{
-    menuBarMainWindow->setEnabled(bValue);
-    toolBar->setEnabled(bValue);
-}
-
-void ViewerWindow::onTooltipCheckBoxClick ( bool bValue )
-{
-    m_Controller->showTooltip ( bValue );
-}
-
-void ViewerWindow::updateColorInterpolationState()
-{
-    /* update interpolation state after start */
-    m_ScreenViewer->updateInterpolationState(m_pFrameObs->getColorInterpolation());
-    m_Timer->stop();
-}
-
-void ViewerWindow::onSetColorInterpolation ( const bool &bState )
-{
-    m_pFrameObs->setColorInterpolation(bState);
-}
-
-bool ViewerWindow::getCamOpenStatus() const
-{
-    return m_bIsCamOpen;
-}
-CameraPtr ViewerWindow::getCameraPtr()
-{
-    return m_pCam;
-}
-bool ViewerWindow::isControlledCamera( const CameraPtr &cam) const
-{
-    return SP_ACCESS( cam) == SP_ACCESS( m_pCam );
-}
-
-
-bool  ViewerWindow::getAdjustPacketSizeMessage ( QString &sMessage )
-{
-    if(m_Controller->isGigE())
-    {
-        if(VmbErrorSuccess == m_Controller->getTreeStatus())
-        {
-            sMessage = "Packet Size Adjusted:\t";
-        }
-        else
-        {
-            sMessage = "Failed To Adjust Packet Size!";
-            sMessage.append(" Reason: " + Helper::mapReturnCodeToString(m_Controller->getTreeStatus()));
-        }
-
-        return true;
-    }
-
-    return false;
-}
-
-VmbError_t ViewerWindow::getOpenError() const
-{
-    return m_OpenError;
-}
-
-QString ViewerWindow::getCameraID() const
-{
-    return m_sCameraID;
-}
-
-void ViewerWindow::closeEvent ( QCloseEvent *event )
-{
-    if (m_bIsCameraRunning)
-    {
-        m_bIsViewerWindowClosing = true;
-        onAcquisitionStartStop("AcquisitionStopFreerun");
-    }
-    emit closeViewer( m_pCam );
-}
-
-void ViewerWindow::displayEveryFrameClick ( bool bValue )
-{
-    m_ViewerOption.Note_Label->setEnabled(bValue);
-    m_bIsDisplayEveryFrame = bValue;
-}
-
-void ViewerWindow::useAllocAndAnnounceClick ( bool bValue )
-{
-    m_bUseAllocAndAnnounce = bValue;
-}
-
-/* Viewer Option */
-void ViewerWindow::on_ActionDisplayOptions_triggered()
-{
-    m_ViewerOption.lineEdit_FramesCount->setText(QString::number ( m_FrameBufferCount ));
-    m_ViewerOptionDialog->exec();
-}
-
-void ViewerWindow::on_ActionResetPosition_triggered()
-{
-    m_DockController ->setFloating(false);
-    m_DockInformation->setFloating(false);
-    m_DockHistogram  ->setFloating(false);
-    m_DockController ->show();
-    m_DockInformation->show();
-    m_DockHistogram  ->hide();
-    ActionHistogram  ->setChecked(false);
-    ActionResetPosition->setEnabled(false);
-}
-
-/* Direct Register Access */
-void ViewerWindow::on_ActionRegister_triggered()
-{
-    m_DirectAccess.RegAccessError_Label->clear();
-    m_DirectAccess.RegAccessError_Label->setStyleSheet("");
-    m_DirectAccess.RegAdd_Edit->setFocus();
-    m_DirectAccess.RegAdd_Edit->selectAll();
-    m_AccessDialog->show();
-}
-
-void ViewerWindow::optionsFrameCountChanged ( const QString &sText )
-{
-    bool bOk;
-    unsigned int frames = sText.toUInt(&bOk);
-
-    if(!bOk)
-    {
-        m_ViewerOption.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
-        return;
-    }
-    if(  (0 != QString::number(frames).compare(m_ViewerOption.lineEdit_FramesCount->text()))
-       ||(frames < 1))
-    {
-        m_ViewerOption.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
-        return;
-    }
-    m_ViewerOption.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
-}
-
-void ViewerWindow::optionsAccepted()
-{
-    bool bOk;
-
-    unsigned int frames = m_ViewerOption.lineEdit_FramesCount->text().toUInt(&bOk);
-
-    if (!bOk)
-    {
-        return;
-    }
-    m_FrameBufferCount = frames;
-}
-
-
-void ViewerWindow::directAccessHexTextChanged ( const QString &sText )
-{
-    bool bOk;
-    unsigned int sDec = sText.toUInt(&bOk, 16);
-    endianessConvert( sDec );
-    if(0 == QString::number(sDec).compare(m_DirectAccess.RegDataDec_Edit->text()))
-        return;
-    else
-        m_DirectAccess.RegDataDec_Edit->setText(QString::number(sDec));
-}
-
-void ViewerWindow::directAccessDecTextChanged ( const QString &sText )
-{
-    unsigned int lDecValue = sText.toUInt();
-    endianessConvert( lDecValue );
-    QString sHex;
-    sHex.setNum(lDecValue,16);
-
-    if(0 == sHex.compare(m_DirectAccess.RegData_Edit->text()))
-        return;
-    else
-        m_DirectAccess.RegData_Edit->setText(sHex);
-}
-
-void ViewerWindow::writeRegisterData()
-{
-    bool bOk;
-    qlonglong lRegAddress = m_DirectAccess.RegAdd_Edit->text().toLongLong(&bOk, 16);
-    qlonglong lRegData    = m_DirectAccess.RegData_Edit->text().toLongLong(&bOk, 16);
-    m_DirectAccess.RegAccessError_Label->clear();
-    m_DirectAccess.RegAccessError_Label->setStyleSheet("background-color: rgb(240,240,240); color: rgb(0,0,0)");
-
-    m_DirectAccess.RegDataDec_Edit->setFocus();
-    m_DirectAccess.RegDataDec_Edit->selectAll();
-
-    std::vector<VmbUint64_t> address;
-    address.push_back((VmbUint64_t)lRegAddress);
-    std::vector<VmbUint64_t> data;
-    data.push_back((VmbUint64_t)lRegData);
-    VmbError_t errorType = m_pCam->WriteRegisters(address, data);
-    if( VmbErrorSuccess != errorType )
-    {
-        m_DirectAccess.RegAccessError_Label->setStyleSheet("background-color: rgb(0,0,0); color: rgb(255,0,0)");
-        m_DirectAccess.RegAccessError_Label->setText(" "+tr("Write Register Failed!")+" <"+tr("Error")+": " + QString::number(errorType) + ">");
-    }
-}
-
-void ViewerWindow::readRegisterData()
-{
-    bool bOk;
-    qlonglong lRegAddress = m_DirectAccess.RegAdd_Edit->text().toLongLong(&bOk, 16);
-
-    m_DirectAccess.RegAccessError_Label->clear();
-    m_DirectAccess.RegAccessError_Label->setStyleSheet("background-color: rgb(240,240,240); color: rgb(0,0,0)");
-
-    std::vector<VmbUint64_t> address;
-    address.push_back((VmbUint64_t)lRegAddress);
-
-    std::vector<VmbUint64_t> data;
-    data.resize(1);
-    VmbError_t errorType = m_pCam->ReadRegisters(address, data);
-    if( VmbErrorSuccess != errorType )
-    {
-        m_DirectAccess.RegAccessError_Label->setStyleSheet("background-color: rgb(0,0,0); color: rgb(255,0,0)");
-        m_DirectAccess.RegAccessError_Label->setText(" "+tr("Read Register Failed!")+" <"+tr("Error:")+" " + QString::number(errorType) + ">");
-        return;
-    }
-    QString sData = QString("%1").arg(data[0], 8, 16, QLatin1Char('0'));
-    m_DirectAccess.RegData_Edit->setText(sData);
-}
-
-void ViewerWindow::endianessChanged(int index)
-{
-    emit directAccessDecTextChanged( m_DirectAccess.RegDataDec_Edit->text() );
-}
-template <typename T>
-void ViewerWindow::endianessConvert(T &v)
-{
-    if( Qt::Checked == m_DirectAccess.CheckBoxEndianess->checkState() )
-    {
-        v = qFromBigEndian( v );
-    }
-}
-/* Saving an image */
-void ViewerWindow::on_ActionSaveAs_triggered()
-{
-    // make a copy of the images before save-as dialog appears (image can change during time dialog open)
-    QImage      image = m_PixmapItem->pixmap().toImage();
-    tFrameInfo  imageFullBitdepth = m_FullBitDepthImage;
-    QString     fileExtension;
-    bool        isImageAvailable = true;
-
-    if ( image.isNull() )
-    {
-        isImageAvailable = false;
-    }
-    else
-    {
-        /* Get all inputformats */
-        unsigned int nFilterSize = QImageReader::supportedImageFormats().count();
-        for (int i = nFilterSize-1; i >= 0; i--)
-        {
-            fileExtension += "."; /* Insert wildcard */
-            fileExtension += QString(QImageReader::supportedImageFormats().at(i)).toLower(); /* Insert the format */
-            if(0 != i)
-                fileExtension += ";;"; /* Insert a space */
-        }
-
-         if( NULL != m_saveFileDialog )
-         {
-             delete m_saveFileDialog;
-             m_saveFileDialog = NULL;
-         }
-
-        m_saveFileDialog = new QFileDialog ( this, tr("Save Image"), m_SaveFileDir, fileExtension );
-        m_saveFileDialog->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowMaximizeButtonHint);
-        m_saveFileDialog->selectFilter(m_SelectedExtension);
-        m_saveFileDialog->setAcceptMode(QFileDialog::AcceptSave);
-
-        if(m_saveFileDialog->exec())
-        {   //OK
-           m_SelectedExtension = m_saveFileDialog->selectedNameFilter();
-           m_SaveFileDir = m_saveFileDialog->directory().absolutePath();
-           QStringList files = m_saveFileDialog->selectedFiles();
-
-           if(!files.isEmpty())
-           {
-                QString fileName = files.at(0);
-
-                if(!fileName.endsWith(m_SelectedExtension))
-                {
-                    fileName.append(m_SelectedExtension);
-                }
-
-                bool saved = false;
-
-                // save image using LibTiff library for 16 Bit
-                if( m_LibTiffAvailable && ActionAllow16BitTiffSaving->isChecked() && m_SelectedExtension.contains(".tif") && isSupportedPixelFormat())
-                {
-                    saved = m_TiffWriter.WriteTiff(imageFullBitdepth, fileName.toAscii());
-                }
-                // use default QImage save functionality
-                else
-                {
-                    if( true == CanReduceBpp() )
-                    {
-                        saved = ReduceBpp( image ).save( fileName );
-                    }
-                    else
-                    {
-                        saved = image.save( fileName );
-                    }
-                }
-
-                if ( true == saved )
-                {
-                    QMessageBox::information( this, tr( "Vimba Viewer" ), tr( "Image: " ) + fileName + tr( " saved successfully" ));
-                }
-                else
-                {
-                    QMessageBox::warning( this, tr( "Vimba Viewer" ), tr( "Error saving image" ));
-                }
-
-            }
-        }
-    }
-
-    if ( !isImageAvailable )
-    {
-        QMessageBox::warning( this, tr( "Vimba Viewer" ), tr( "No image to save" ));
-    }
-}
-
-/* Saving multiple images */
-void ViewerWindow::on_ActionSaveOptions_triggered()
-{
-    QStringList sListFormat;
-
-    for (int i = 0; i < QImageReader::supportedImageFormats().count(); i++)
-    {
-        QString sTemp;
-        sTemp.append("."); /* Insert wildcard */
-        sTemp.append(QString(QImageReader::supportedImageFormats().at(i)).toLower()); /* Insert the format */
-        sListFormat << sTemp;
-    }
-
-    sListFormat << ".bin";
-
-    m_SaveImageOption.ImageFormat_ComboBox->clear();
-    m_SaveImageOption.ImageFormat_ComboBox->addItems(sListFormat);
-
-    // restore previously selected format (if possible)
-    if ( false == m_SaveFormat.isEmpty() )
-    {
-        int index = m_SaveImageOption.ImageFormat_ComboBox->findText(m_SaveFormat);
-        if( -1 != index )
-        {
-            m_SaveImageOption.ImageFormat_ComboBox->setCurrentIndex(index);
-        }
-    }
-
-    m_ImageOptionDialog->setModal(true);
-    m_ImageOptionDialog->show();
-}
-
-void ViewerWindow::acceptSaveImagesDlg()
-{
-    if( !m_SaveImageOption.ImageDestination_Edit->text().isEmpty() &&
-        !m_SaveImageOption.ImageName_Edit->text().isEmpty() )
-    {
-        m_ImagePath =  m_SaveImageOption.ImageDestination_Edit->text();
-    }
-    else
-    {
-        if(m_SaveImageOption.ImageDestination_Edit->text().isEmpty())
-            QMessageBox::warning( this, tr("Vimba Viewer"), "<Save Image Options> "+tr("Please choose your destination path!") );
-
-        if(m_SaveImageOption.ImageName_Edit->text().isEmpty())
-            QMessageBox::warning( this, tr("Vimba Viewer"), "<Save Image Options> "+tr("Please give a name!") );
-
-        m_ImageOptionDialog->setModal(true);
-        m_ImageOptionDialog->show();
-    }
-
-    /* name check existing files */
-    QDir destDir( m_SaveImageOption.ImageDestination_Edit->text());
-    QStringList filter;
-
-    for (int i = 0; i < QImageReader::supportedImageFormats().count(); i++)
-    {
-        QString sTemp;
-        sTemp.append("*."); /* Insert wildcard */
-        sTemp.append(QString(QImageReader::supportedImageFormats().at(i)).toLower()); /* Insert the format */
-        filter << sTemp;
-    }
-
-    destDir.setNameFilters(filter);
-    QStringList files = destDir.entryList();
-
-    bool bRes = true;
-    while(bRes)
-    {
-        bRes = checkUsedName(files);
-    }
-
-    if(0 < m_SaveImageOption.NumberOfFrames_SpinBox->value())
-        ActionSaveImages->setEnabled(true);
-    else
-        ActionSaveImages->setEnabled(false);
-
-    m_SaveFormat = m_SaveImageOption.ImageFormat_ComboBox->currentText();
-}
-
-void ViewerWindow::rejectSaveImagesDlg()
-{
-    QString sPathBefore = m_SaveImageOption.ImageDestination_Edit->text();
-    m_SaveImageOption.ImageDestination_Edit->setText(sPathBefore);
-}
-
-bool ViewerWindow::checkUsedName ( const QStringList &files )
-{
-    for( int nPos = 0; nPos < files.size(); nPos++ )
-    {
-        if(0 == files.at(nPos).compare(m_SaveImageOption.ImageName_Edit->text()+"_1"+m_SaveImageOption.ImageFormat_ComboBox->currentText()))
-        {
-            m_SaveImageOption.ImageName_Edit->setText(m_SaveImageOption.ImageName_Edit->text()+"_New");
-            return true;
-        }
-    }
-
-    return false;
-}
-
-bool ViewerWindow::isDestPathWritable()
-{
-    /* check permission of destination
-       QFileInfo can not be used, because a windows dir can be write protected, but files inside can be created
-    */
-    QString sTmpPath = m_SaveImageOption.ImageDestination_Edit->text().append("/").append("fileTmp.dat");
-    QFile fileTmp(sTmpPath);
-
-    if(!fileTmp.open( QIODevice::ReadWrite|QIODevice::Text))
-    {
-        QMessageBox::warning( this, tr("Vimba Viewer"), "<Save Image Options> "+tr("No permission to write to destination path. Please select another one! ") );
-        return false;
-    }
-
-    fileTmp.close();
-    QFile::remove(sTmpPath);
-    return true;
-}
-
-/* confirm saving from toolbar */
-void ViewerWindow::on_ActionSaveImages_triggered()
-{
-
-#ifdef _WIN32 // Do the check always on Windows
-    if (!isDestPathWritable())
-    {
-        ActionSaveImages->setEnabled(false);
-        return;
-    }
-#else
-    #ifndef WIN32
-        if (!isDestPathWritable())
-        {
-            ActionSaveImages->setEnabled(false);
-            return;
-        }
-    #endif
-#endif
-
-    //overwrite existing name
-    if(0 != m_SaveImageOption.ImageName_Edit->text().compare(m_SaveImageName))
-    {
-        m_SaveImageName = m_SaveImageOption.ImageName_Edit->text();
-    }
-
-    m_nImageCounter         = 0;
-    m_nNumberOfFramesToSave = m_SaveImageOption.NumberOfFrames_SpinBox->value();
-    m_SaveFormat            = m_SaveImageOption.ImageFormat_ComboBox->currentText();
-    m_SaveName              = m_SaveImageOption.ImageName_Edit->text();
-
-    m_SaveImageThread->SetNumberToSave  ( m_nNumberOfFramesToSave );
-    m_SaveImageThread->SetSaveFormat    ( m_SaveFormat );
-    m_SaveImageThread->SetPath          ( m_ImagePath );
-    m_SaveImageThread->SetBaseName      ( m_SaveName );
-
-    if( 0 < m_nNumberOfFramesToSave )
-    {
-        if( 0 == m_SaveImageOption.ImageFormat_ComboBox->currentText().compare(".bin"))
-            m_pFrameObs->saveRawData(m_nNumberOfFramesToSave, m_ImagePath, m_SaveName);
-
-        // save full bit depth series of images when requested and LibTif is available
-        if( m_LibTiffAvailable && ActionAllow16BitTiffSaving->isChecked() && m_SaveFormat.contains(".tif") && isSupportedPixelFormat())
-        {
-            m_Allow16BitMultiSave = true;
-            m_SaveImageThread->SetSave16Bit ( true );
-            // start transferring full bit depth frames from frame observer
-            m_pFrameObs->enableFullBitDepthTransfer(true);
-        }
-        else
-        {
-            m_Allow16BitMultiSave = false;
-            m_SaveImageThread->SetSave16Bit ( false );
-            m_bIsTriggeredByMultiSaveBtn = true;
-            m_pFrameObs->enableFullBitDepthTransfer(false);
-        }
-
-        ActionFreerun->setChecked(isStreamingAvailable());
-        on_ActionFreerun_triggered();
-        ActionFreerun->setEnabled(false);
-    }
-}
-
-void ViewerWindow::getSaveDestinationPath()
-{
-    if( NULL != m_getDirDialog )
-    {
-        delete m_getDirDialog;
-        m_getDirDialog = NULL;
-    }
-
-    m_getDirDialog = new QFileDialog ( this, tr("Destination"), m_SaveImageOption.ImageDestination_Edit->text());
-    QFileDialog::Options options = QFileDialog::DontResolveSymlinks | QFileDialog::ShowDirsOnly |QFileDialog::DontUseNativeDialog;
-    m_getDirDialog->setOptions(options);
-    m_getDirDialog->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowMaximizeButtonHint);
-    m_getDirDialog->setLabelText(QFileDialog::LookIn, tr("Destination Path"));
-    m_getDirDialog->setLabelText(QFileDialog::FileType, tr("Type"));
-    m_getDirDialog->setFileMode( QFileDialog::Directory);
-
-    QString sDir;
-    if( m_getDirDialog->exec() )
-    {   //OK
-        sDir = m_getDirDialog->directory().absolutePath();
-    }
-
-    if(!sDir.isEmpty())
-        m_SaveImageOption.ImageDestination_Edit->setText(sDir);
-}
-
-void ViewerWindow::on_ActionLeftRotation_triggered()
-{
-    m_ScreenViewer->rotate(-90);
-}
-
-void ViewerWindow::on_ActionRightRotation_triggered()
-{
-    m_ScreenViewer->rotate(90);
-}
-
-void ViewerWindow::on_ActionZoomOut_triggered()
-{
-    m_ScreenViewer->zoomOut();
-}
-
-void ViewerWindow::on_ActionZoomIn_triggered()
-{
-    m_ScreenViewer->zoomIn();
-}
-
-void ViewerWindow::on_ActionOriginalSize_triggered()
-{
-    m_ScreenViewer->setDefaultSize();
-}
-
-void ViewerWindow::on_ActionFitToWindow_triggered()
-{
-    m_ScreenViewer->setDefaultSize();
-
-    if (ActionFitToWindow->isChecked())
-    {
-        m_ScreenViewer->setToolTip(tr(""));
-        m_ScreenViewer->fitInView(m_pScene->itemsBoundingRect(), Qt::IgnoreAspectRatio);
-        m_ScreenViewer->enableFitToWindow(true);
-        ActionLeftRotation->setEnabled(false);
-        ActionRightRotation->setEnabled(false);
-        ActionOriginalSize->setEnabled(false);
-        ActionZoomIn->setEnabled(false);
-        ActionZoomOut->setEnabled(false);
-    }
-    else
-    {
-        m_ScreenViewer->enableFitToWindow(false);
-        ActionLeftRotation->setEnabled(true);
-        ActionRightRotation->setEnabled(true);
-        ActionOriginalSize->setEnabled(true);
-        ActionZoomIn->setEnabled(true);
-        ActionZoomOut->setEnabled(true);
-    }
-}
-
-void ViewerWindow::on_ActionHistogram_triggered()
-{
-    m_HistogramWindow->deinitializeStatistic();
-
-    if (ActionHistogram->isChecked())
-    {
-        m_HistogramWindow->initializeStatistic();
-        m_DockHistogram->show();
-        m_pFrameObs->enableHistogram(true);
-    }
-    else
-    {
-        m_DockHistogram->hide();
-        m_pFrameObs->enableHistogram(false);
-    }
-
-    if(!ActionHistogram->isChecked() && m_DockController->isVisible() && m_DockInformation->isVisible())
-        ActionResetPosition->setEnabled(false);
-}
-
-void ViewerWindow::on_ActionLoadCameraSettings_triggered()
-{
-    bool proceedLoading = true;
-
-//  create window title
-    QString windowTitle = tr( "Load Camera Settings" );
-
-//  setup message boxes
-    QMessageBox msgbox;
-    msgbox.setWindowTitle( windowTitle );
-    QMessageBox msgbox2;
-    msgbox2.setStandardButtons( QMessageBox::Yes );
-    msgbox2.addButton( QMessageBox::No );
-    msgbox2.setDefaultButton( QMessageBox::No );
-
-//  check if camera was opened in 'full access' mode
-    if( 0 != m_sAccessMode.compare( tr("(FULL ACCESS)") ) )
-    {
-        msgbox.setIcon( QMessageBox::Critical );
-        msgbox.setText( tr("Camera must be opened in FULL ACCESS mode to use this feature") );
-        msgbox.exec();
-        return;
-    }
-
-//  check if any file dialog was created already
-    if( NULL != m_saveFileDialog )
-    {
-        delete m_saveFileDialog;
-        m_saveFileDialog = NULL;
-     }
-
-//  create file dialog
-    m_saveFileDialog = new QFileDialog( this, windowTitle, QDir::home().absolutePath(), "*.xml" );
-    m_saveFileDialog->setWindowFlags( windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowMaximizeButtonHint );
-    m_saveFileDialog->selectFilter( "*.xml" );
-    m_saveFileDialog->setAcceptMode( QFileDialog::AcceptOpen );
-    m_saveFileDialog->setFileMode( QFileDialog::ExistingFile );
-
-//  show dialog
-    int rval = m_saveFileDialog->exec();
-    if( 0 == rval )
-    {
-        return;
-    }
-
-//  get selected file
-    m_SaveFileDir = m_saveFileDialog->directory().absolutePath();
-    QStringList selectedFiles = m_saveFileDialog->selectedFiles();
-    if( true == selectedFiles.isEmpty() )
-    {
-        msgbox.setIcon( QMessageBox::Critical );
-        msgbox.setText( tr("No file selected") );
-        msgbox.exec();
-        return;
-    }
-
-//  delete file dialog
-//  (to prevent OCT-1870 bug occured with Qt v4.7.1)
-    delete m_saveFileDialog;
-    m_saveFileDialog = NULL;
-
-//  get selected file
-    QString selectedFile = selectedFiles.at(0);
-
-//  check if xml file is valid
-    if( false == selectedFile.endsWith( ".xml" ) )
-    {
-        msgbox.setIcon( QMessageBox::Critical );
-        msgbox.setText( tr("Invalid xml file selected.\nFile must be of type '*.xml'") );
-        msgbox.exec();
-        return;
-    }
-
-//  create and prepare xml parser
-//  to check if model name differences between xxml file
-//  and connected camera exist
-    QXmlStreamReader xml;
-    QFile xmlFile( selectedFile );
-    QString deviceModel = QString( "" );
-
-//  open xml file stream
-    bool check = xmlFile.open( QIODevice::ReadOnly );
-    if( false == check )
-    {
-        msgbox2.setIcon( QMessageBox::Warning );
-        msgbox2.setText( tr("Could not validate camera model.\nDo you want to proceed loading settings to selected camera ?") );
-        rval = msgbox2.exec();
-        if( QMessageBox::No == rval )
-        {
-            proceedLoading = false;
-        }
-    }
-    else
-    {
-    //  connect opened file with xml stream object
-        xml.setDevice( &xmlFile );
-    }
-
-//  proceed loading camera settings only if flag still true
-    if( true == proceedLoading )
-    {
-    //  read xml structure
-        while( false == xml.atEnd() )
-        {
-        //  get current xml token
-            xml.readNext();
-            QString currentToken = xml.name().toString();
-
-        //  check if token is named 'CameraSettings'
-            if( 0 == currentToken.compare( "CameraSettings" ) )
-            {
-            //  get token attributes and iterate through them
-                QXmlStreamAttributes attributes = xml.attributes();
-                for( int i=0; i<attributes.count(); ++i )
-                {
-                //  get current attribute
-                    QXmlStreamAttribute currentAttribute = attributes.at(i);
-
-                //  check if current attribute is name 'CameraModel'
-                    QString attributeName = currentAttribute.name().toString();
-                    if( 0 == attributeName.compare( "CameraModel" ) )
-                    {
-                        deviceModel = currentAttribute.value().toString();
-                        break;
-                    }
-                }
-                break;
-            }
-        }
-
-    //  close xml file stream
-        xmlFile.close();
-
-    //  check if deviceModel was retrieved from xml file
-        if( true == deviceModel.isEmpty() )
-        {
-            msgbox2.setIcon( QMessageBox::Warning );
-            msgbox2.setText( tr("Could not validate camera model.\nDo you want to proceed loading settings to selected camera ?") );
-            rval = msgbox2.exec();
-            if( QMessageBox::No == rval )
-            {
-                proceedLoading = false;
-            }
-        }
-    }
-
-//  proceed loading camera settings only if flag still true
-    std::string modelName;
-    if( true == proceedLoading )
-    {
-    //  get model name from connected camera
-        const VmbErrorType err = m_pCam->GetModel( modelName );
-        if( VmbErrorSuccess != err )
-        {
-            msgbox2.setIcon( QMessageBox::Warning );
-            msgbox2.setText( tr("Could not validate camera model.\nDo you want to proceed loading settings to selected camera ?") );
-            rval = msgbox2.exec();
-            if( QMessageBox::No == rval )
-            {
-                proceedLoading = false;
-            }
-        }
-    }
-
-//  proceed loading camera settings only if flag still true
-    if( true == proceedLoading )
-    {
-    //  compare mode names from xml file and from
-    //  connected device with each other
-        if( 0 != deviceModel.compare( QString(modelName.c_str()) ) )
-        {
-            QString msgtext = tr( "Selected camera model is different from xml file.\n");
-            msgtext.append( tr("[camera: %1]\n").arg( modelName.c_str() ) );
-            msgtext.append( tr("[xml: %1]\n\n").arg( deviceModel) );
-            msgtext.append( tr("Do you want to proceed loading operation ?" ) );
-            msgbox2.setIcon( QMessageBox::Warning );
-            msgbox2.setText( msgtext );
-            rval = msgbox2.exec();
-            if( QMessageBox::No == rval )
-            {
-                proceedLoading = false;
-            }
-        }
-    }
-
-//  proceed loading camera settings only if flag still true
-    if( true == proceedLoading )
-    {
-    //  setup behaviour for loading and saving camera features
-        m_pCam->LoadSaveSettingsSetup( VmbFeaturePersistNoLUT, 5, 4 );
-
-    //  call load method from VimbaCPP
-        const VmbErrorType err = m_pCam->LoadCameraSettings( selectedFile.toStdString() );
-        if( VmbErrorSuccess != err )
-        {
-            QString msgtext = tr( "There have been errors during loading of feature values.\n" );
-            msgtext.append( tr("[Error code: %1]\n").arg( err ) );
-            msgtext.append( tr("[file: %1]").arg( selectedFile) );
-            onFeedLogger( "ERROR: LoadCameraSettings returned: " + QString::number(err) + ". For details activate VimbaC logging and check out VmbCameraSettingsLoad.log" );
-            msgbox.setIcon( QMessageBox::Warning );
-            msgbox.setText( msgtext );
-            msgbox.exec();
-            return;
-        }
-        else
-        {
-            msgbox.setIcon( QMessageBox::Information );
-            QString msgtext = tr( "Successfully loaded device settings\nfrom '%1'" ).arg( selectedFile );
-            msgbox.setText( msgtext );
-            msgbox.exec();
-        }
-    }
-}
-
-void ViewerWindow::on_ActionSaveCameraSettings_triggered()
-{
-    VmbErrorType err = VmbErrorSuccess;
-
-//  create window title
-    QString windowTitle = tr( "Save Camera Settings" );
-
-//  create message box
-    QMessageBox msgbox;
-    msgbox.setWindowTitle( windowTitle );
-
-//  check if camera was opened in 'full access' mode
-    if( 0 != m_sAccessMode.compare( tr("(FULL ACCESS)") ) )
-    {
-        msgbox.setIcon( QMessageBox::Critical );
-        msgbox.setText( tr("Camera must be opened in FULL ACCESS mode to use this feature") );
-        msgbox.exec();
-        return;
-    }
-
-//  check if any file dialog was created already
-    if( NULL != m_saveFileDialog )
-    {
-        delete m_saveFileDialog;
-        m_saveFileDialog = NULL;
-     }
-
-//  setup file dialog
-    m_saveFileDialog = new QFileDialog( this, windowTitle, QDir::home().absolutePath(), "*.xml" );
-    m_saveFileDialog->setWindowFlags( windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowMinimizeButtonHint & ~Qt::WindowMaximizeButtonHint );
-    m_saveFileDialog->selectFilter( "*.xml" );
-    m_saveFileDialog->setAcceptMode( QFileDialog::AcceptSave );
-
-//  show dialog
-    int rval = m_saveFileDialog->exec();
-    if( 0 == rval )
-    {
-        return;
-    }
-
-//  get selected file
-    m_SaveFileDir = m_saveFileDialog->directory().absolutePath();
-    QStringList selectedFiles = m_saveFileDialog->selectedFiles();
-    if( true == selectedFiles.isEmpty() )
-    {
-        msgbox.setIcon( QMessageBox::Critical );
-        msgbox.setText( tr("No file selected") );
-        msgbox.exec();
-        return;
-    }
-
-//  delete file dialog
-//  (to prevent OCT-1870 bug occured with Qt v4.7.1)
-    delete m_saveFileDialog;
-    m_saveFileDialog = NULL;
-
-//  get selected file
-    QString selectedFile = selectedFiles.at(0);
-    if( false == selectedFile.endsWith( ".xml" ) )
-    {
-        selectedFile.append( ".xml" );
-    }
-
-//  setup behaviour for loading and saving camera features
-    m_pCam->LoadSaveSettingsSetup( VmbFeaturePersistNoLUT, 5, 4 );
-
-//  call VimbaCPP save function
-    QString msgtext;
-    err = m_pCam->SaveCameraSettings( selectedFile.toStdString() );
-    if( VmbErrorSuccess != err )
-    {
-        msgtext = tr( "There have been errors during saving feature values.\n" );
-        msgtext.append( tr("[Error code: %1]\n").arg( err ) );
-        msgtext.append( tr("[file: %1]").arg( selectedFile) );
-        onFeedLogger( "ERROR: SaveCameraSettings returned: " + QString::number(err) + ". For details activate VimbaC logging and check out VmbCameraSettingsSave.log" );
-        msgbox.setIcon( QMessageBox::Warning );
-        msgbox.setText( msgtext );
-        msgbox.exec();
-        return;
-    }
-    else
-    {
-        msgtext = tr( "Successfully saved device settings to\n'" );
-        msgtext.append( selectedFile );
-        msgtext.append( "'" );
-        msgbox.setIcon( QMessageBox::Information );
-        msgbox.setText( msgtext );
-        msgbox.exec();
-    }
-}
-
-void ViewerWindow::on_ActionLoadCameraSettingsMenu_triggered()
-{
-    on_ActionLoadCameraSettings_triggered();
-}
-
-void ViewerWindow::on_ActionSaveCameraSettingsMenu_triggered()
-{
-    on_ActionSaveCameraSettings_triggered();
-}
-
-void ViewerWindow::on_ActionAllow16BitTiffSaving_triggered()
-{
-    if ( ActionAllow16BitTiffSaving->isChecked() && m_LibTiffAvailable && isSupportedPixelFormat())
-    {
-        m_pFrameObs->enableFullBitDepthTransfer(true);
-    }
-    else
-    {
-        m_pFrameObs->enableFullBitDepthTransfer(false);
-    }
-}
-
-
-void ViewerWindow::onfloatingDockChanged ( bool bIsFloating )
-{
-    if( (m_DockController->isFloating()  || (false == m_DockController->isVisible())) ||
-        (m_DockInformation->isFloating() || (false == m_DockInformation->isVisible())) )
-        ActionResetPosition->setEnabled(true);
-    else
-        ActionResetPosition->setEnabled(false);
-
-    if(m_DockHistogram->isVisible())
-        ActionHistogram->setChecked(true);
-}
-
-void ViewerWindow::onVisibilityChanged ( bool bIsVisible )
-{
-    if( m_DockController->isVisible()  && !m_DockController->isFloating() &&
-        m_DockInformation->isVisible() && !m_DockInformation->isFloating() )
-    {
-        ActionResetPosition->setEnabled(false);
-    }
-    else
-    {
-        ActionResetPosition->setEnabled(true);
-    }
-
-    if(!m_DockHistogram->isVisible())
-    {
-        if (ActionHistogram->isChecked() )
-        {
-            ActionHistogram->setChecked(false);
-        }
-    }
-    else
-    {
-        ActionHistogram->setChecked(true);
-    }
-}
-
-void ViewerWindow::onResetFPS()
-{
-    SP_ACCESS( m_pFrameObs )->resetFrameCounter(false);
-}
-
-void ViewerWindow::onSetCurrentFPS( const QString &sFPS )
-{
-    m_FramerateLabel->setText( QString::fromStdString(" Current FPS: ")+ sFPS + " " );
-}
-
-void ViewerWindow::onSetFrameCounter( const unsigned int &nNumberOfFrames )
-{
-    m_FramesLabel->setText( "Frames: " + QString::number(nNumberOfFrames) + " " );
-}
-
-void ViewerWindow::onSetEventMessage ( const QStringList &sMsg )
-{
-    m_InformationWindow->setEventMessage(sMsg);
-}
-
-void ViewerWindow::onSetDescription ( const QString &sDesc )
-{
-    m_Description->setText(sDesc);
-}
-
-void ViewerWindow::onSetHistogramData ( const QVector<QVector <quint32> > &histData, const QString &sHistogramTitle,
-                                        const double &nMaxHeight_YAxis, const double &nMaxWidth_XAxis, const QVector <QStringList> &statistics )
-{
-    if( ActionHistogram->isChecked() )
-    {
-        QStringList ColorComponentList;
-        QStringList MinimumValueList;
-        QStringList MaximumValueList;
-        QStringList AverageValueList;
-        QString sFormat;
-
-        if(sHistogramTitle.contains("Mono8"))
-        {
-            sFormat = "Mono8";
-            ColorComponentList << statistics.at(0).at(0);
-            MinimumValueList << statistics.at(0).at(1);
-            MaximumValueList << statistics.at(0).at(2);
-            AverageValueList << statistics.at(0).at(3);
-            m_HistogramWindow->setStatistic(ColorComponentList, MinimumValueList, MaximumValueList, AverageValueList, sFormat);
-        }
-
-        if(sHistogramTitle.contains("RGB8") || sHistogramTitle.contains("BGR8") || sHistogramTitle.contains("YUV") || sHistogramTitle.contains("Bayer"))
-        {
-            if(sHistogramTitle.contains("RGB8") || sHistogramTitle.contains("BGR8"))
-                sFormat = "RGB";
-            if(sHistogramTitle.contains("Bayer"))
-                sFormat = "Bayer";
-            if(sHistogramTitle.contains("YUV"))
-                sFormat = "YUV";
-
-            ColorComponentList << statistics.at(0).at(0) << statistics.at(1).at(0) << statistics.at(2).at(0);
-            MinimumValueList << statistics.at(0).at(1) << statistics.at(1).at(1) << statistics.at(2).at(1);
-            MaximumValueList << statistics.at(0).at(2) << statistics.at(1).at(2) << statistics.at(2).at(2);
-            AverageValueList << statistics.at(0).at(3) << statistics.at(1).at(3) << statistics.at(2).at(3);
-            m_HistogramWindow->setStatistic(ColorComponentList, MinimumValueList, MaximumValueList, AverageValueList, sFormat);
-        }
-
-        m_HistogramWindow->updateHistogram(histData, sHistogramTitle, nMaxHeight_YAxis, nMaxWidth_XAxis);
-    }
-    else
-         m_pFrameObs->enableHistogram(false);
-}
-
-/* display frames on viewer */
-void ViewerWindow::onimageReady ( QImage image, const QString &sFormat, const QString &sHeight, const QString &sWidth )
-{
-    m_FormatLabel->setText("Pixel Format: " + sFormat + " ");
-    m_ImageSizeLabel->setText("Size H: " + sHeight + " ,W: "+ sWidth + " ");
-
-    if(m_bHasJustStarted)
-    {
-        foreach( QGraphicsItem *item, m_pScene->items() )
-        {
-            if( item->type() == QGraphicsTextItem::Type )
-            {
-                 m_pScene->removeItem(m_TextItem);
-                 m_FormatLabel->setStyleSheet("background-color: rgb(195,195,195); color: rgb(0,0,0)");
-                 m_bIsRedHighlighted = false;
-                 continue;
-            }
-
-            m_pScene->removeItem(m_PixmapItem);
-        }
-
-        m_pScene->addItem(m_PixmapItem);
-        m_bHasJustStarted = false;
-    }
-
-    if( (sFormat.contains("Convert Error")) )
-    {
-        if( false == m_bIsRedHighlighted )
-        {
-            m_bIsRedHighlighted = true;
-            m_FormatLabel->setStyleSheet("background-color: rgb(196,0, 0); color: rgb(255,255,255)");
-
-            if (sFormat.contains("height") || sFormat.contains("width"))
-            {
-                m_TextItem->setPlainText("The Resolution you set is not supported by VimbaImageTransform.\n"
-                                         "Please change height or width !");
-            }
-            else
-            {
-                m_TextItem->setPlainText("PixelFormat transformation not supported.");
-            }
-
-            m_TextItem->setPos(m_pScene->width()/6, m_pScene->height()/2);
-            m_pScene->addItem(m_TextItem);
-        }
-    }
-    else
-    {
-        if( m_bIsRedHighlighted )
-        {
-            m_FormatLabel->setStyleSheet("background-color: rgb(195,195,195); color: rgb(0,0,0)");
-            m_bIsRedHighlighted = false;
-
-            if (!m_pScene->items().isEmpty())
-            {
-                m_pScene->removeItem(m_TextItem);
-            }
-        }
-    }
-
-    /* display it at centre whenever changed */
-    m_pScene->setSceneRect(0, 0, image.width(), image.height() );
-    m_PixmapItem->setPixmap(QPixmap::fromImage(image));
-    m_ScreenViewer->show();
-
-    /* save series of images */
-    if( (0 < m_nNumberOfFramesToSave) && m_bIsTriggeredByMultiSaveBtn )
-    {
-        ++m_nImageCounter;
-
-        if(m_nImageCounter <= m_nNumberOfFramesToSave)
-        {
-            m_SaveImageThread->start();
-            try
-            {
-                static bool bCanReduceBpp;
-                // Test only once for every batch to save
-                if ( 1 == m_nImageCounter )
-                {
-                    bCanReduceBpp = CanReduceBpp();
-                }
-                // Save with 8 bpp
-                if ( true == bCanReduceBpp )
-                {
-                    m_SaveImageThread->Enqueue( ReduceBpp( image ), m_nImageCounter );
-                }
-                // Save as is
-                else
-                {
-                    m_SaveImageThread->Enqueue( image, m_nImageCounter );
-                }
-                // Reset at end of batch
-                if ( m_nImageCounter == m_nNumberOfFramesToSave )
-                {
-                    bCanReduceBpp = false;
-                }
-            }
-            catch( const std::bad_alloc &/*bex*/)
-            {
-                m_bIsRedHighlighted = false;
-
-                ActionFreerun->setChecked(false);
-                on_ActionFreerun_triggered();
-                ActionFreerun->setEnabled(isStreamingAvailable());
-                m_SaveImagesDialog->hide();
-                delete m_SaveImagesDialog;
-                m_SaveImagesDialog = NULL;
-                m_SaveImageThread->StopProcessing();
-                m_SaveImageThread->wait();
-                m_bIsTriggeredByMultiSaveBtn = false;
-                m_Allow16BitMultiSave = false;
-            }
-        }
-    }
-}
-
-void ViewerWindow::onFullBitDepthImageReady(tFrameInfo mFullImageInfo)
-{
-    // store a full bit depth image frame in case user wants to save to file
-    m_FullBitDepthImage = mFullImageInfo;
-
-    // save series of TIFF images using LibTif
-    if( (0 < m_nNumberOfFramesToSave) && m_Allow16BitMultiSave )
-    {
-        m_SaveImageThread->start();
-        ++m_nImageCounter;
-
-        if(m_nImageCounter <= m_nNumberOfFramesToSave)
-        {
-            try
-            {
-                m_SaveImageThread->Enqueue( mFullImageInfo, m_nImageCounter );
-            }
-            catch( const std::bad_alloc &bex)
-            {
-                m_bIsRedHighlighted = false;
-
-                ActionFreerun->setChecked(false);
-                on_ActionFreerun_triggered();
-                ActionFreerun->setEnabled(isStreamingAvailable());
-                m_SaveImagesDialog->hide();
-                delete m_SaveImagesDialog;
-                m_SaveImagesDialog = NULL;
-                m_SaveImageThread->StopProcessing();
-                m_SaveImageThread->wait();
-                m_bIsTriggeredByMultiSaveBtn = false;
-                m_Allow16BitMultiSave = false;
-            }
-        }
-    }
-}
-
-void ViewerWindow::onSaving ( unsigned int nPos )
-{
-    if( 1 == nPos )
-    {
-        //Start Progressbar
-        m_SaveImagesDialog = new QDialog(0, Qt::CustomizeWindowHint|Qt::WindowTitleHint);
-        m_SaveImagesUIDialog.setupUi(m_SaveImagesDialog);
-        m_SaveImagesUIDialog.saveImagesProgress->setMaximum(m_nNumberOfFramesToSave);
-        m_SaveImagesUIDialog.saveImagesProgress->setMinimum(1);
-        m_SaveImagesDialog->show();
-    }
-
-    m_SaveImagesUIDialog.saveImagesProgress->setValue(nPos);
-
-    if (m_nNumberOfFramesToSave == nPos)
-    {
-        m_FormatLabel->setStyleSheet("background-color: rgb(195,195,195); color: rgb(0,0,0)");
-        m_bIsRedHighlighted = false;
-
-        ActionFreerun->setChecked(false);
-        on_ActionFreerun_triggered();
-        ActionFreerun->setEnabled(isStreamingAvailable());
-
-        foreach( QGraphicsItem *item, m_pScene->items() )
-        {
-            if( item->type() == QGraphicsTextItem::Type )
-            {
-                m_pScene->removeItem(m_TextItem);
-                break;
-            }
-        }
-
-        m_SaveImagesDialog->hide();
-        delete m_SaveImagesDialog;
-        m_SaveImagesDialog = NULL;
-        m_SaveImageThread->StopProcessing();
-        m_SaveImageThread->wait();
-        m_nImageCounter = 0;
-        m_bIsTriggeredByMultiSaveBtn = false;
-        m_Allow16BitMultiSave = false;
-
-        // restore state of full bit depth image transfer flag
-        on_ActionAllow16BitTiffSaving_triggered();
-    }
-}
-
-void ViewerWindow::onAcquisitionStartStop ( const QString &sThisFeature )
-{
-    QIcon icon;
-
-    /* this is intended to stop and start the camera again since PixelFormat, Height and Width have been changed while camera running
-    *  ignore this when the changing has been made while camera not running
-    */
-    if( ((0 == sThisFeature.compare("AcquisitionStart")) && (m_bIsCameraRunning)) )
-    {
-        ActionFreerun->setChecked(true);
-        on_ActionFreerun_triggered();
-    }
-    else if( sThisFeature.contains("AcquisitionStartFreerun") )
-    {
-        SP_ACCESS( m_pFrameObs )->resetFrameCounter(true);
-        if(!m_bIsCameraRunning)
-        {
-            icon.addFile(QString::fromUtf8(":/VimbaViewer/Images/stop.png"), QSize(), QIcon::Normal, QIcon::On);
-            ActionFreerun->setIcon(icon);
-            checkDisplayInterval();
-            releaseBuffer();
-            onPrepareCapture();
-
-            ActionFreerun->setChecked(true);
-            m_bIsCameraRunning = true;
-            m_bHasJustStarted = true;
-            emit acquisitionRunning(true);
-
-            if(ActionDisplayOptions->isEnabled())
-                ActionDisplayOptions->setEnabled(false);
-
-            if(ActionSaveOptions->isEnabled())
-                ActionSaveOptions->setEnabled(false);
-
-            /* if save images settings set, and acquisition starts */
-            if( (0 < m_SaveImageOption.NumberOfFrames_SpinBox->value()) && ActionSaveImages->isEnabled() )
-            {
-                ActionSaveImages->setEnabled(false);
-                m_nImageCounter = 0;
-                m_nNumberOfFramesToSave = 0;
-            }
-
-            m_OperatingStatusLabel->setText( " Running... " );
-            m_OperatingStatusLabel->setStyleSheet("background-color: rgb(0,128, 0); color: rgb(255,255,255)");
-        }
-    }
-    else if( sThisFeature.contains("AcquisitionStopFreerun") )
-    {
-        if(m_bIsCameraRunning)
-        {
-            icon.addFile(QString::fromUtf8(":/VimbaViewer/Images/play.png"), QSize(), QIcon::Normal, QIcon::Off);
-            ActionFreerun->setIcon(icon);
-            releaseBuffer();
-            ActionFreerun->setChecked(false);
-            if (m_bIsViewerWindowClosing)
-                on_ActionFreerun_triggered();
-
-            m_bIsCameraRunning = false;
-            emit acquisitionRunning(false);
-
-            if(!ActionSaveOptions->isEnabled())
-                ActionSaveOptions->setEnabled(true);
-
-            if(!ActionFreerun->isEnabled())
-                ActionFreerun->setEnabled(isStreamingAvailable());
-
-            if(!ActionDisplayOptions->isEnabled())
-                ActionDisplayOptions->setEnabled(true);
-
-            /* if save images running, and acquisition stops */
-            if( (0 < m_SaveImageOption.NumberOfFrames_SpinBox->value()) && !ActionSaveImages->isEnabled() )
-            {
-                ActionSaveImages->setEnabled(true);
-            }
-
-            m_Controller->synchronizeEventFeatures();
-        }
-
-        m_OperatingStatusLabel->setText( " Ready " );
-        m_OperatingStatusLabel->setStyleSheet("background-color: rgb(0,0, 0); color: rgb(255,255,255)");
-    }
-    else if( ((0 == sThisFeature.compare("AcquisitionStop")) && (m_bIsCameraRunning)) ||
-              (sThisFeature.contains("AcquisitionStopWidthHeight")))
-    {
-        if(m_bIsCameraRunning)
-        {
-            ActionFreerun->setChecked(false);
-            on_ActionFreerun_triggered();
-
-            /* use this for GigE, so you can change the W/H "on the fly" */
-            if(0 == sThisFeature.compare("AcquisitionStopWidthHeight"))
-            {
-                m_bIsCameraRunning = true;
-                emit acquisitionRunning(true);
-            }
-        }
-
-    // update state of full bit depth image transfer flag in case pixel format has changed
-    on_ActionAllow16BitTiffSaving_triggered();
-    }
-
-    // update state of full bit depth image transfer flag in case pixel format has changed
-    on_ActionAllow16BitTiffSaving_triggered();
-}
-
-void ViewerWindow::checkDisplayInterval()
-{
-    FeaturePtr pFeatMode;
-
-    if(VmbErrorSuccess == m_pCam->GetFeatureByName( "AcquisitionMode", pFeatMode ))
-    {
-        std::string sValue("");
-        if( VmbErrorSuccess == pFeatMode->GetValue(sValue) )
-        {
-            /* display all received frames for SingleFrame and MultiFrame mode or if the user wants to have it */
-            if( 0 == sValue.compare("SingleFrame") || 0 == sValue.compare("MultiFrame") || m_bIsDisplayEveryFrame )
-                SP_ACCESS( m_pFrameObs )->setDisplayInterval( 0 );
-            /* display frame in a certain interval to save CPU consumption for continuous mode */
-            else
-                SP_ACCESS( m_pFrameObs )->setDisplayInterval( 1 );
-        }
-    }
-}
-
-void ViewerWindow::on_ActionFreerun_triggered()
-{
-    VmbError_t error;
-    FeaturePtr pFeat;
-
-    checkDisplayInterval();
-
-     /* update interpolation state after start */
-    if( !m_Timer->isActive())
-    {
-        m_Timer->start(200);
-    }
-
-    QIcon icon;
-    /* ON */
-    if( ActionFreerun->isChecked() )
-    {
-        icon.addFile(QString::fromUtf8(":/VimbaViewer/Images/stop.png"), QSize(), QIcon::Normal, QIcon::On);
-        ActionFreerun->setIcon(icon);
-
-        error = onPrepareCapture();
-        if( VmbErrorSuccess != error )
-        {
-            m_bIsCameraRunning = false;
-            emit acquisitionRunning(false);
-            m_OperatingStatusLabel->setText( " Failed to start! Error: " + QString::number(error)+" "+Helper::mapReturnCodeToString(error) );
-            m_OperatingStatusLabel->setStyleSheet("background-color: rgb(196,0, 0); color: rgb(255,255,255)");
-            icon.addFile(QString::fromUtf8(":/VimbaViewer/Images/play.png"), QSize(), QIcon::Normal, QIcon::Off);
-            ActionFreerun->setIcon(icon);
-            ActionFreerun->setChecked(false);
-            return;
-        }
-
-        error = m_pCam->GetFeatureByName( "AcquisitionStart", pFeat );
-        int nResult = m_sAccessMode.compare(tr("(READ ONLY)")) ;
-        if ( (VmbErrorSuccess == error) && ( 0 != nResult ) )
-        {
-            SP_ACCESS( m_pFrameObs )->resetFrameCounter(true);
-
-            // Do some GUI-related preparations before really starting (to avoid timing problems)
-            m_OperatingStatusLabel->setText( " Running... " );
-            m_OperatingStatusLabel->setStyleSheet("background-color: rgb(0,128, 0); color: rgb(255,255,255)");
-
-            if(ActionDisplayOptions->isEnabled())
-                ActionDisplayOptions->setEnabled(false);
-
-            if(ActionSaveOptions->isEnabled())
-                ActionSaveOptions->setEnabled(false);
-
-            if( ActionSaveImages->isEnabled() && (0 < m_SaveImageOption.NumberOfFrames_SpinBox->value()) )
-                ActionSaveImages->setEnabled(false);
-
-            error = pFeat->RunCommand();
-
-            if(VmbErrorSuccess == error)
-            {
-                if(m_bIsFirstStart)
-                {
-                    m_bIsFirstStart = false;
-                }
-
-                m_bHasJustStarted = true;
-                m_bIsCameraRunning = true;
-                emit acquisitionRunning(true);
-            }
-            else
-            {
-                m_bIsCameraRunning = false;
-                emit acquisitionRunning(false);
-                m_OperatingStatusLabel->setText( " Failed to execute AcquisitionStart! Error: " + QString::number(error)+" "+Helper::mapReturnCodeToString(error) );
-                m_OperatingStatusLabel->setStyleSheet("background-color: rgb(196,0, 0); color: rgb(255,255,255)");
-
-                m_InformationWindow->feedLogger("Logging", QString(QTime::currentTime().toString("hh:mm:ss:zzz")+"\t" +
-                                                " RunCommand [AcquisitionStart] Failed! Error: " + QString::number(error)+" "+
-                                                Helper::mapReturnCodeToString(error)), VimbaViewerLogCategory_ERROR);
-
-                if(ActionDisplayOptions->isEnabled())
-                    ActionDisplayOptions->setEnabled(true);
-
-                if(ActionSaveOptions->isEnabled())
-                    ActionSaveOptions->setEnabled(true);
-
-                if( ActionSaveImages->isEnabled() && (0 < m_SaveImageOption.NumberOfFrames_SpinBox->value()) )
-                    ActionSaveImages->setEnabled(true);
-
-            }
-        }
-    }
-    /* OFF */
-    else
-    {
-        error = m_pCam->GetFeatureByName("AcquisitionStop", pFeat);
-        if ( (VmbErrorSuccess == error) )
-        {
-            if(0 != m_sAccessMode.compare(tr("(READ ONLY)")))
-                error = pFeat->RunCommand();
-
-            icon.addFile(QString::fromUtf8(":/VimbaViewer/Images/play.png"), QSize(), QIcon::Normal, QIcon::Off);
-            ActionFreerun->setIcon(icon);
-
-            if(VmbErrorSuccess == error)
-            {
-                m_bIsCameraRunning = false;
-                emit acquisitionRunning(false);
-                m_OperatingStatusLabel->setText( " Ready " );
-                m_OperatingStatusLabel->setStyleSheet("background-color: rgb(0,0, 0); color: rgb(255,255,255)");
-
-                releaseBuffer();
-            }
-            else
-            {
-                m_InformationWindow->feedLogger("Logging", QString(QTime::currentTime().toString("hh:mm:ss:zzz")+"\t" +
-                                                " RunCommand [AcquisitionStop] Failed! Error: " + QString::number(error) + " " +
-                                                Helper::mapReturnCodeToString(error) ), VimbaViewerLogCategory_ERROR);
-            }
-        }
-
-
-        if(!ActionDisplayOptions->isEnabled())
-            ActionDisplayOptions->setEnabled(true);
-
-        if(!ActionSaveOptions->isEnabled())
-            ActionSaveOptions->setEnabled(true);
-
-        if( !ActionSaveImages->isEnabled() && (0 < m_SaveImageOption.NumberOfFrames_SpinBox->value()))
-            ActionSaveImages->setEnabled(true);
-
-        m_Controller->synchronizeEventFeatures();
-    }
-}
-
-VmbError_t ViewerWindow::releaseBuffer()
-{
-    m_pFrameObs->Stopping();
-    VmbError_t error = m_pCam->EndCapture();
-    if( VmbErrorSuccess == error )
-        error = m_pCam->FlushQueue();
-    if( VmbErrorSuccess == error )
-        error = m_pCam->RevokeAllFrames();
-
-    return error;
-}
-
-VmbError_t ViewerWindow::onPrepareCapture()
-{
-    FeaturePtr pFeature;
-    VmbInt64_t nPayload = 0;
-    QVector <FramePtr> frames;
-    VmbError_t error = m_pCam->GetFeatureByName("PayloadSize", pFeature);
-    VmbUint32_t nCounter = 0;
-    if( VmbErrorSuccess == error )
-    {
-        error = pFeature->GetValue(nPayload);
-        if(VmbErrorSuccess == error)
-        {
-            frames.resize(m_FrameBufferCount);
-
-            bool bIsStreamingAvailable = isStreamingAvailable();
-
-            if (bIsStreamingAvailable)
-            {
-                for (int i=0; i<frames.size(); i++)
-                {
-                    try
-                    {
-                        frames[i] = FramePtr(new Frame(nPayload, (m_bUseAllocAndAnnounce) ? AVT::VmbAPI::FrameAllocation_AllocAndAnnounceFrame : AVT::VmbAPI::FrameAllocation_AnnounceFrame ));
-                        nCounter++;
-                    }
-                    catch(std::bad_alloc& )
-                    {
-                         frames.resize((VmbInt64_t) (nCounter * 0.7));
-                         break;
-                    }
-                    m_pFrameObs->Starting();
-                    error = frames[i]->RegisterObserver(m_pFrameObs);
-                    if( VmbErrorSuccess != error )
-                    {
-                        m_InformationWindow->feedLogger("Logging",
-                                                        QString(QTime::currentTime().toString("hh:mm:ss:zzz")+"\t" + " RegisterObserver frame["+ QString::number(i)+ "] Failed! Error: " + QString::number(error)+" "+ Helper::mapReturnCodeToString(error)),
-                                                        VimbaViewerLogCategory_ERROR);
-                        return error;
-                    }
-                }
-
-                for (int i=0; i<frames.size(); i++)
-                {
-                    error = m_pCam->AnnounceFrame( frames[i] );
-					
-					VmbUchar_t* pBuffer;
-					frames[i]->GetBuffer(pBuffer);
-                    if( VmbErrorSuccess != error )
-                    {
-                        m_InformationWindow->feedLogger("Logging",
-                                                        QString(QTime::currentTime().toString("hh:mm:ss:zzz")+"\t" + " AnnounceFrame ["+ QString::number(i)+ "] Failed! Error: " + QString::number(error)+" "+ Helper::mapReturnCodeToString(error)),
-                                                        VimbaViewerLogCategory_ERROR);
-                        return error;
-                    }
-                }
-            }
-
-            if(VmbErrorSuccess == error)
-            {
-                error = m_pCam->StartCapture();
-                if( VmbErrorSuccess != error )
-                {
-                    QString sMessage = " StartCapture Failed! Error: ";
-
-                    if(0 != m_sAccessMode.compare(tr("(READ ONLY)")))
-                        m_InformationWindow->feedLogger("Logging",
-                                                         QString(QTime::currentTime().toString("hh:mm:ss:zzz")+"\t" + sMessage + QString::number(error)+" "+ Helper::mapReturnCodeToString(error)),
-                                                         VimbaViewerLogCategory_ERROR);
-                    return error;
-                }
-            }
-
-            if (bIsStreamingAvailable)
-            {
-                for (int i=0; i<frames.size(); i++)
-                {
-                    error = m_pCam->QueueFrame( frames[i] );
-                    if( VmbErrorSuccess != error )
-                    {
-                        m_InformationWindow->feedLogger("Logging",
-                                                        QString(QTime::currentTime().toString("hh:mm:ss:zzz")+"\t" + " QueueFrame ["+ QString::number(i)+ "] Failed! Error: " + QString::number(error)+" "+ Helper::mapReturnCodeToString(error)),
-                                                        VimbaViewerLogCategory_ERROR);
-                        return error;
-                    }
-                }
-            }
-        }
-        else
-        {
-            m_InformationWindow->feedLogger("Logging",
-                                            QString(QTime::currentTime().toString("hh:mm:ss:zzz")+"\t" + " GetValue [PayloadSize] Failed! Error: " + QString::number(error)+" "+ Helper::mapReturnCodeToString(error)),
-                                            VimbaViewerLogCategory_ERROR);
-            return error;
-        }
-    }
-    else
-    {
-        m_InformationWindow->feedLogger("Logging",
-                                        QString(QTime::currentTime().toString("hh:mm:ss:zzz")+"\t" + " GetFeatureByName [PayloadSize] Failed! Error: " + QString::number(error)+" "+ Helper::mapReturnCodeToString(error)),
-                                        VimbaViewerLogCategory_ERROR);
-        return error;
-    }
-
-    return error;
-}
-
-void ViewerWindow::onFeedLogger    ( const QString &sMessage )
-{
-    m_InformationWindow->feedLogger("Logging", QString(QTime::currentTime().toString("hh:mm:ss:zzz")+"\t" + sMessage), VimbaViewerLogCategory_ERROR);
-}
-
-void ViewerWindow::changeEvent ( QEvent * event )
-{
-    if( event->type() == QEvent::WindowStateChange )
-    {
-        if( isMinimized() )
-            m_Controller->showControl(false);
-        else if( isMaximized() )
-            m_Controller->showControl(true);
-    }
-}
-
-bool ViewerWindow::loadPlugin()
-{
-    const QDir pluginsDir(qApp->applicationDirPath() + "/plugins");
-
-    m_TabPluginCount = 0;
-
-    foreach ( const QString fileName, pluginsDir.entryList(QDir::Files))
-    {
-        QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
-        QObject* const plugin = pluginLoader.instance();
-        if (plugin)
-        {
-            TabExtensionInterface* const tabInterface = qobject_cast<TabExtensionInterface *>(plugin);
-            m_tabExtensionInterface.push_back(tabInterface);
-            if (m_tabExtensionInterface[m_TabPluginCount])
-            {
-                m_TabPluginCount++;
-            }
-        }
-    }
-
-    return m_TabPluginCount > 0;
-}
-
-bool ViewerWindow::CanReduceBpp()
-{
-    bool res = false;
-
-    FeaturePtr pFeature;
-    // TODO: Persist pixel format in viewer. Pixel format might be altered in between capture and save. Then color would be transformed to mono.
-    // Bug or feature?
-    VmbError_t error = m_pCam->GetFeatureByName( "PixelFormat", pFeature );
-    if( VmbErrorSuccess == error )
-    {
-        VmbInt64_t nFormat;
-        error = pFeature->GetValue( nFormat );
-        if( VmbErrorSuccess == error )
-        {
-            res = Helper::convertFormatToString(static_cast<VmbPixelFormatType>(nFormat)).contains("Mono");
-        }
-    }
-
-    return res;
-}
-
-// Reduces bpp to 8
-QImage ViewerWindow::ReduceBpp( QImage image )
-{
-    // Create 8 bit grey scale color table
-    if ( 0 == m_ColorTable.size() )
-    {
-        for ( int i = 0; i < 256; ++i )
-        {
-            m_ColorTable.push_back( QColor( i, i, i ).rgb() );
-        }
-    }
-    // Convert to 8 bit grey scale
-    return image.convertToFormat( QImage::Format_Indexed8, m_ColorTable );
-}
-
-// Check if the TL supports streaming
-bool ViewerWindow::isStreamingAvailable()
-{
-    AVT::VmbAPI::FeaturePtr pStreamIDFeature;
-    m_pCam->GetFeatureByName("StreamID", pStreamIDFeature);
-    return (NULL == pStreamIDFeature) ? false : true;
-}
-
-
-// test if the current pixel format is supported and should use LibTiff to save image
-bool ViewerWindow::isSupportedPixelFormat()
-{
-    bool result = false;
-    FeaturePtr pFeature;
-
-    VmbError_t error = m_pCam->GetFeatureByName( "PixelFormat", pFeature );
-    if( VmbErrorSuccess == error )
-    {
-        VmbInt64_t nFormat;
-
-        error = pFeature->GetValue( nFormat );
-        if( VmbErrorSuccess == error )
-        {
-            switch(nFormat)
-            {
-            // supported images formats:
-            case VmbPixelFormatMono10:
-            case VmbPixelFormatMono10p:
-            case VmbPixelFormatMono12:
-            case VmbPixelFormatMono12p:
-            case VmbPixelFormatMono12Packed:
-            case VmbPixelFormatMono14:
-            case VmbPixelFormatMono16:
-            case VmbPixelFormatBayerGR10:
-            case VmbPixelFormatBayerRG10:
-            case VmbPixelFormatBayerGB10:
-            case VmbPixelFormatBayerBG10:
-            case VmbPixelFormatBayerGR10p:
-            case VmbPixelFormatBayerRG10p:
-            case VmbPixelFormatBayerGB10p:
-            case VmbPixelFormatBayerBG10p:
-            case VmbPixelFormatBayerGR12:
-            case VmbPixelFormatBayerRG12:
-            case VmbPixelFormatBayerGB12:
-            case VmbPixelFormatBayerBG12:
-            case VmbPixelFormatBayerGR12Packed:
-            case VmbPixelFormatBayerRG12Packed:
-            case VmbPixelFormatBayerGB12Packed:
-            case VmbPixelFormatBayerBG12Packed:
-            case VmbPixelFormatBayerGR12p:
-            case VmbPixelFormatBayerRG12p:
-            case VmbPixelFormatBayerGB12p:
-            case VmbPixelFormatBayerBG12p:
-            case VmbPixelFormatBayerGR16:
-            case VmbPixelFormatBayerRG16:
-            case VmbPixelFormatBayerGB16:
-            case VmbPixelFormatBayerBG16:
-                result = true;
-                break;
-            default:
-                result = false;
-            }
-        }
-    }
-    return result;
-}
-
-void SaveImageThread::run()
-{
-    m_Images.StartProcessing();
-    m_16BitImages.StartProcessing();
-    // save 16 bit depth images if requested
-    if(m_bSave16BitImages)
-    {
-        ImageWriter tiffWriter;
-        if( !tiffWriter.IsAvailable() )
-        {
-            return;
-        }
-
-        FramePair tmpInfo;
-        while( m_16BitImages.WaitData(tmpInfo) )
-        {
-            QString sFullPath = m_sImagePath;
-            sFullPath.append("//").append(m_sSaveName);
-            sFullPath.append("_"+QString::number(tmpInfo.first)).append(m_sSaveFormat);
-
-            // save image using LibTif
-
-            if( ! tiffWriter.WriteTiff( tmpInfo.second, sFullPath.toAscii(),this) )
-            {
-                emit LogMessage(QString("error could not write TIFF image ") +sFullPath );
-            }
-            emit setPosition ( tmpInfo.first );
-            if( tmpInfo.first >= m_nTNumber2Save )
-            {
-                break;
-            }
-        }
-    }
-    // save standard QImage format
-    else
-    {
-        ImagePair tmpImage;
-        while( m_Images.WaitData( tmpImage ) )
-        {
-            QString sFullPath = m_sImagePath;
-            sFullPath.append("//").append(m_sSaveName);
-            sFullPath.append("_"+QString::number(tmpImage.first)).append(m_sSaveFormat);
-
-            // save image
-            if( ! tmpImage.second.save(sFullPath) )
-            {
-                emit LogMessage(QString("error could not write image ") +sFullPath );
-            }
-            emit setPosition ( tmpImage.first);
-            if( tmpImage.first >= m_nTNumber2Save )
-            {
-                break;
-            }
-        }
-    }
-}
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ViewerWindow.h b/VimbaCPP/Examples/VimbaViewer/Source/ViewerWindow.h
deleted file mode 100644
index 2dfd3450f12dd9acc9127ce473b6bca00f997a53..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ViewerWindow.h
+++ /dev/null
@@ -1,315 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2019 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ViewerWindow.h
-
-  Description: The viewer window framework.
-               This contains of dock widgets like camera feature tree, a histogram, a toolbar and MDI window
-
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-
-#ifndef VIEWERWINDOW_H
-#define VIEWERWINDOW_H
-
-#include <QtGui>
-#include <QString>
-#include <VimbaCPP/Include/VimbaSystem.h>
-#include "ui_ViewerWindow.h"
-#include "ui_SaveImageOption.h"
-#include "ui_DirectAccess.h"
-#include "ui_ViewerOption.h"
-#include "ui_SavingProgress.h"
-#include "FrameObserver.h"
-#include "ImageWriter.h"
-#include "ILogTarget.h"
-
-class DockWidgetWindow;
-class ControllerTreeWindow;
-class LineEditCompleter;
-class Viewer;
-class MainInformationWindow;
-class HistogramWindow;
-class TabExtensionInterface;
-class QTimer;
-
-class SaveImageThread : public QThread, public ILogTarget
-{
-    Q_OBJECT
-        typedef std::pair<unsigned int,QImage>      ImagePair;
-        typedef std::pair<unsigned int,tFrameInfo>  FramePair;
-
-        ConsumerQueue<ImagePair>        m_Images;
-        ConsumerQueue<FramePair>        m_16BitImages;
-    private:
-        unsigned int                    m_nTNumber2Save;
-
-        QString                         m_sImagePath;
-        QString                         m_sSaveFormat;
-        QString                         m_sSaveName;
-        bool                            m_bSave16BitImages;
-
-    public:
-        void SetNumberToSave( unsigned int NumberToSave)
-        {
-            m_nTNumber2Save = NumberToSave;
-        }
-        void SetPath( const QString & ImagePath)
-        {
-            m_sImagePath = ImagePath;
-        }
-        void SetBaseName( const QString & BaseName)
-        {
-            m_sSaveName = BaseName;
-        }
-        void SetSaveFormat( const QString & SaveFormat)
-        {
-            m_sSaveFormat = SaveFormat;
-        }
-        void SetSave16Bit( bool Save16Bit )
-        {
-            m_bSave16BitImages = Save16Bit;
-        }
-    public:
-        SaveImageThread ( ){};
-        ~SaveImageThread ()
-        {
-            StopProcessing();
-            wait();
-        };
-        void Log( const QString&s)
-        {
-            emit LogMessage( s );
-        }
-        void StopProcessing()
-        {
-            m_Images.StopProcessing();
-            m_16BitImages.StopProcessing();
-        }
-        bool ImageEmpty()       const   { return m_Images.IsEmpty(); }
-        bool FrameInfoEmpty()   const   { return m_16BitImages.IsEmpty(); }
-        void Enqueue( const QImage &image, unsigned int ImageCounter )
-        {
-            m_Images.Enqueue( std::make_pair(ImageCounter, image) );
-        }
-        void Enqueue( const tFrameInfo &info, unsigned int ImageCounter)
-        {
-            m_16BitImages.Enqueue( std::make_pair( ImageCounter,info ) );
-        }
-    private:
-
-    protected:
-              virtual void run();
-
-    private slots:
-
-    signals:
-              void setPosition ( unsigned int nPos );
-              void LogMessage( const QString &msg);
-};
-
-class ViewerWindow : public QMainWindow, private Ui::ViewerWindow
-{
-    Q_OBJECT
-    public:
-
-    protected:
-
-    private:
-                static const unsigned int           BUFFER_COUNT    =   7;
-                static const unsigned int           IMAGES_COUNT    =   50;
-                QTimer                             *m_Timer;
-                QString                             m_sCameraID;
-                VmbError_t                          m_OpenError;
-                bool                                m_bIsCameraRunning;
-                bool                                m_bHasJustStarted;
-                bool                                m_bIsCamOpen;
-                bool                                m_bIsFirstStart;
-                bool                                m_bIsRedHighlighted;
-                bool                                m_bIsViewerWindowClosing;
-
-                QString                             m_sAccessMode;
-                QAction                            *m_ResetPosition;
-                QCheckBox                          *m_ToolTipCheckBox;
-
-                DockWidgetWindow                   *m_DockController;
-                DockWidgetWindow                   *m_DockInformation;
-                DockWidgetWindow                   *m_DockHistogram;
-
-                Viewer                             *m_ScreenViewer;
-                MainInformationWindow              *m_InformationWindow;
-                ControllerTreeWindow               *m_Controller;
-                HistogramWindow                    *m_HistogramWindow;
-
-                CameraPtr                           m_pCam;
-                QTextEdit                          *m_Description;
-
-                QLabel                             *m_OperatingStatusLabel;
-                QLabel                             *m_FormatLabel;
-                QLabel                             *m_ImageSizeLabel;
-                QLabel                             *m_FramerateLabel;
-                QLabel                             *m_FramesLabel;
-
-                QSharedPointer<QGraphicsScene>      m_pScene;
-                QGraphicsPixmapItem                *m_PixmapItem;
-                QGraphicsTextItem                  *m_TextItem;
-
-                SP_DECL( FrameObserver )            m_pFrameObs;
-
-                QString                             m_SaveFileDir;
-                QString                             m_SelectedExtension;
-                QString                             m_SaveImageName;
-                /* Save Image Option */
-                Ui::SavingOptionsDialog             m_SaveImageOption;
-                QDialog                            *m_ImageOptionDialog;
-                QFileDialog                        *m_getDirDialog; // multiple images
-                QFileDialog                        *m_saveFileDialog; // save an image
-
-                /* Direct Access */
-                Ui::DirectAccessDialog              m_DirectAccess;
-                QDialog                            *m_AccessDialog;
-
-                /*Viewer Option */
-                Ui::DisplayOptionsDialog            m_ViewerOption;
-                QDialog                            *m_ViewerOptionDialog;
-                bool                                m_bIsDisplayEveryFrame;
-                bool                                m_bUseAllocAndAnnounce;
-
-                /* Filter Pattern */
-                LineEditCompleter                  *m_FilterPatternLineEdit;
-
-                /*  Saving images progress */
-                QSharedPointer<SaveImageThread>     m_SaveImageThread;
-                Ui::SaveImagesProgressDialog        m_SaveImagesUIDialog;
-                QDialog                            *m_SaveImagesDialog;
-                unsigned int                        m_nNumberOfFramesToSave;
-                unsigned int                        m_nImageCounter;
-                QString                             m_SaveName;
-                QString                             m_SaveFormat;
-                bool                                m_Allow16BitMultiSave;
-                QString                             m_ImagePath;
-                QVector<QRgb>                       m_ColorTable;
-                bool                                m_bIsTriggeredByMultiSaveBtn;
-
-                /*  Used to save full bit depth images */
-                ImageWriter                         m_TiffWriter;
-                tFrameInfo                          m_FullBitDepthImage;
-                bool                                m_LibTiffAvailable;
-
-                unsigned int                        m_FrameBufferCount;
-
-                QVector<TabExtensionInterface*>     m_tabExtensionInterface; // Closed source injected
-                int                                 m_TabPluginCount;
-
-    public:
-                ViewerWindow ( QWidget *parent = 0, Qt::WindowFlags flag = 0,  QString sID = " ", QString sAccess = " ", bool bAutoAdjustPacketSize = false, CameraPtr pCam = CameraPtr() );
-               ~ViewerWindow ();
-
-                bool        getCamOpenStatus            () const;
-                bool        isControlledCamera          ( const CameraPtr &cam) const;
-                CameraPtr   getCameraPtr                ();
-                VmbError_t  getOpenError                () const;
-                QString     getCameraID                 () const;
-                bool        getAdjustPacketSizeMessage  ( QString &sMessage );
-
-    protected:
-                virtual void closeEvent                 ( QCloseEvent *event );
-
-    private:
-                void        showSplashScreen            ( const QString &,QWidget*parent);
-                VmbError_t  releaseBuffer               ();
-                void        checkDisplayInterval        ();
-                void        changeEvent                 ( QEvent * event );
-                bool        isDestPathWritable          ();
-                bool        checkUsedName               ( const QStringList &files );
-                template <typename T>
-                void        endianessConvert            ( T &v );
-                bool        CanReduceBpp                ();
-                QImage      ReduceBpp                   ( QImage image );
-                bool        isStreamingAvailable        ();
-                bool        isSupportedPixelFormat      ();
-
-    private slots:
-
-                /* when you use this std convention, you don't need any "connect..." */
-                void on_ActionFreerun_triggered         ();
-                void on_ActionResetPosition_triggered   ();
-                void on_ActionHistogram_triggered       ();
-                void on_ActionOriginalSize_triggered    ();
-                void on_ActionSaveAs_triggered          ();
-                void on_ActionSaveOptions_triggered     ();
-                void on_ActionSaveImages_triggered      ();
-                void on_ActionRegister_triggered        ();
-                void on_ActionDisplayOptions_triggered  ();
-                void on_ActionFitToWindow_triggered     ();
-                void on_ActionLeftRotation_triggered    ();
-                void on_ActionRightRotation_triggered   ();
-                void on_ActionZoomOut_triggered         ();
-                void on_ActionZoomIn_triggered          ();
-                void on_ActionLoadCameraSettings_triggered ();
-                void on_ActionSaveCameraSettings_triggered ();
-                void on_ActionLoadCameraSettingsMenu_triggered ();
-                void on_ActionSaveCameraSettingsMenu_triggered ();
-                void on_ActionAllow16BitTiffSaving_triggered ();
-
-                /* custom */
-                void onAcquisitionStartStop             ( const QString &sThisFeature );
-                void onfloatingDockChanged              ( bool bIsFloating );
-                void onVisibilityChanged                ( bool bIsVisible );
-                void displayEveryFrameClick             ( bool bValue );
-				void useAllocAndAnnounceClick			( bool bValue );
-                void onSetDescription                   ( const QString &sDesc );
-                void onimageReady                       ( QImage image, const QString &sFormat, const QString &sHeight, const QString &sWidth );
-                void onFullBitDepthImageReady           ( tFrameInfo mFullImageInfo );
-                void onSaving                           ( unsigned int nPos );
-                void onSetEventMessage                  ( const QStringList &sMsg );
-                void onSetCurrentFPS                    ( const QString &sFPS );
-                void onSetFrameCounter                  ( const unsigned int &nNumberOfFrames );
-                void onFeedLogger                       ( const QString &sMessage );
-                void onResetFPS                         ();
-                void getSaveDestinationPath             ();
-                void acceptSaveImagesDlg                ();
-                void rejectSaveImagesDlg                ();
-                void writeRegisterData                  ();
-                void readRegisterData                   ();
-                void endianessChanged                   ( int );
-                VmbError_t onPrepareCapture             ();
-                void onSetColorInterpolation            ( const bool &bState );
-                void onSetHistogramData                 ( const QVector<QVector <quint32> > &histData, const QString &sHistogramTitle,
-                                                          const double &nMaxHeight_YAxis, const double &nMaxWidth_XAxis, const QVector <QStringList> &statistics );
-                void updateColorInterpolationState      ();
-                void onTooltipCheckBoxClick             ( bool bValue );
-                void enableMenuAndToolbar               ( bool bValue );
-                void directAccessHexTextChanged         ( const QString &sText );
-                void directAccessDecTextChanged         ( const QString &sText );
-                void optionsFrameCountChanged           ( const QString &sText );
-                void optionsAccepted                    ();
-                void textFilterChanged                  ();
-                bool loadPlugin                         ();  // Closed source injected
-
-
-    signals:
-                void closeViewer                        ( CameraPtr cam );
-                void acquisitionRunning                 ( bool bValue );
-};
-
-#endif
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/ViewerWindow.ui b/VimbaCPP/Examples/VimbaViewer/Source/ViewerWindow.ui
deleted file mode 100644
index 51a066c2886687e84cd37208dd0613a9a0000d35..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/ViewerWindow.ui
+++ /dev/null
@@ -1,373 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ViewerWindow</class>
- <widget class="QMainWindow" name="ViewerWindow">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>823</width>
-    <height>569</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>MainWindow</string>
-  </property>
-  <widget class="QWidget" name="centralWidget">
-   <layout class="QGridLayout" name="gridLayout"/>
-  </widget>
-  <widget class="QMenuBar" name="menuBarMainWindow">
-   <property name="geometry">
-    <rect>
-     <x>0</x>
-     <y>0</y>
-     <width>823</width>
-     <height>22</height>
-    </rect>
-   </property>
-   <property name="styleSheet">
-    <string notr="true">font: 10pt &quot;Verdana&quot;;</string>
-   </property>
-   <widget class="QMenu" name="fileMenu">
-    <property name="title">
-     <string>File</string>
-    </property>
-    <addaction name="ActionSaveAs"/>
-    <addaction name="ActionSaveImages"/>
-    <addaction name="ActionSaveOptions"/>
-    <addaction name="ActionAllow16BitTiffSaving"/>
-   </widget>
-   <widget class="QMenu" name="viewMenu">
-    <property name="title">
-     <string>View</string>
-    </property>
-    <addaction name="ActionFitToWindow"/>
-    <addaction name="ActionLeftRotation"/>
-    <addaction name="ActionRightRotation"/>
-    <addaction name="separator"/>
-    <addaction name="ActionHistogram"/>
-    <addaction name="separator"/>
-    <addaction name="ActionZoomIn"/>
-    <addaction name="ActionZoomOut"/>
-    <addaction name="ActionOriginalSize"/>
-    <addaction name="ActionResetPosition"/>
-    <addaction name="separator"/>
-    <addaction name="ActionDisplayOptions"/>
-   </widget>
-   <widget class="QMenu" name="menuCamera">
-    <property name="title">
-     <string>Camera</string>
-    </property>
-    <widget class="QMenu" name="menuDirect_Access">
-     <property name="title">
-      <string>Direct Access</string>
-     </property>
-     <addaction name="ActionRegister"/>
-    </widget>
-    <addaction name="ActionFreerun"/>
-    <addaction name="separator"/>
-    <addaction name="menuDirect_Access"/>
-    <addaction name="separator"/>
-    <addaction name="ActionLoadCameraSettingsMenu"/>
-    <addaction name="ActionSaveCameraSettingsMenu"/>
-   </widget>
-   <addaction name="fileMenu"/>
-   <addaction name="viewMenu"/>
-   <addaction name="menuCamera"/>
-  </widget>
-  <widget class="QStatusBar" name="statusbar">
-   <property name="styleSheet">
-    <string notr="true">background-color: rgb(195, 195, 195);
-font: 10pt &quot;Verdana&quot;;</string>
-   </property>
-  </widget>
-  <widget class="QToolBar" name="toolBar">
-   <property name="minimumSize">
-    <size>
-     <width>0</width>
-     <height>0</height>
-    </size>
-   </property>
-   <property name="palette">
-    <palette>
-     <active/>
-     <inactive/>
-     <disabled/>
-    </palette>
-   </property>
-   <property name="windowTitle">
-    <string>Viewer ToolBar </string>
-   </property>
-   <property name="styleSheet">
-    <string notr="true"/>
-   </property>
-   <property name="toolButtonStyle">
-    <enum>Qt::ToolButtonIconOnly</enum>
-   </property>
-   <attribute name="toolBarArea">
-    <enum>TopToolBarArea</enum>
-   </attribute>
-   <attribute name="toolBarBreak">
-    <bool>false</bool>
-   </attribute>
-   <addaction name="ActionFreerun"/>
-   <addaction name="separator"/>
-   <addaction name="ActionSaveImages"/>
-   <addaction name="ActionLoadCameraSettings"/>
-   <addaction name="ActionSaveCameraSettings"/>
-   <addaction name="separator"/>
-   <addaction name="ActionHistogram"/>
-   <addaction name="separator"/>
-   <addaction name="ActionFitToWindow"/>
-   <addaction name="ActionLeftRotation"/>
-   <addaction name="ActionRightRotation"/>
-   <addaction name="ActionZoomIn"/>
-   <addaction name="ActionOriginalSize"/>
-   <addaction name="ActionZoomOut"/>
-   <addaction name="separator"/>
-   <addaction name="ActionResetPosition"/>
-  </widget>
-  <action name="ActionFreerun">
-   <property name="checkable">
-    <bool>true</bool>
-   </property>
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/play.png</normaloff>:/VimbaViewer/Images/play.png</iconset>
-   </property>
-   <property name="text">
-    <string>Freerun</string>
-   </property>
-   <property name="iconText">
-    <string>Freerun</string>
-   </property>
-   <property name="toolTip">
-    <string>Freerun</string>
-   </property>
-   <property name="font">
-    <font/>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl+F</string>
-   </property>
-  </action>
-  <action name="ActionResetPosition">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/resetposition.png</normaloff>:/VimbaViewer/Images/resetposition.png</iconset>
-   </property>
-   <property name="text">
-    <string>Reset Docking Position</string>
-   </property>
-   <property name="toolTip">
-    <string>Reset docking windows position</string>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl+R</string>
-   </property>
-  </action>
-  <action name="ActionSaveAs">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/save.png</normaloff>:/VimbaViewer/Images/save.png</iconset>
-   </property>
-   <property name="text">
-    <string>Save Image As...</string>
-   </property>
-  </action>
-  <action name="ActionOriginalSize">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/zoom_default.png</normaloff>:/VimbaViewer/Images/zoom_default.png</iconset>
-   </property>
-   <property name="text">
-    <string>Set Zoom To Default</string>
-   </property>
-   <property name="iconText">
-    <string>Original Size</string>
-   </property>
-   <property name="toolTip">
-    <string>Set zoom to default (original size)</string>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl+D</string>
-   </property>
-  </action>
-  <action name="ActionSaveOptions">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/ImageSeriesSaveSettings.png</normaloff>:/VimbaViewer/Images/ImageSeriesSaveSettings.png</iconset>
-   </property>
-   <property name="text">
-    <string>Image Series Options...</string>
-   </property>
-  </action>
-  <action name="ActionRegister">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/directaccess.png</normaloff>:/VimbaViewer/Images/directaccess.png</iconset>
-   </property>
-   <property name="text">
-    <string>Register</string>
-   </property>
-   <property name="toolTip">
-    <string>Direct Access Register</string>
-   </property>
-  </action>
-  <action name="ActionSaveImages">
-   <property name="enabled">
-    <bool>false</bool>
-   </property>
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/ImageSeriesStart.png</normaloff>:/VimbaViewer/Images/ImageSeriesStart.png</iconset>
-   </property>
-   <property name="text">
-    <string>Save Image Series</string>
-   </property>
-   <property name="toolTip">
-    <string>Save images</string>
-   </property>
-  </action>
-  <action name="ActionDisplayOptions">
-   <property name="text">
-    <string>Options...</string>
-   </property>
-   <property name="toolTip">
-    <string>Display options</string>
-   </property>
-  </action>
-  <action name="ActionHistogram">
-   <property name="checkable">
-    <bool>true</bool>
-   </property>
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/histogram.png</normaloff>:/VimbaViewer/Images/histogram.png</iconset>
-   </property>
-   <property name="text">
-    <string>Histogram</string>
-   </property>
-   <property name="toolTip">
-    <string>Open the histogram window</string>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl+H</string>
-   </property>
-  </action>
-  <action name="ActionFitToWindow">
-   <property name="checkable">
-    <bool>true</bool>
-   </property>
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/fittowin.png</normaloff>:/VimbaViewer/Images/fittowin.png</iconset>
-   </property>
-   <property name="text">
-    <string>Fit to window</string>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl+W</string>
-   </property>
-  </action>
-  <action name="ActionLeftRotation">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/leftrotate.png</normaloff>:/VimbaViewer/Images/leftrotate.png</iconset>
-   </property>
-   <property name="text">
-    <string>Left Rotation 90°</string>
-   </property>
-  </action>
-  <action name="ActionRightRotation">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/rightrotate.png</normaloff>:/VimbaViewer/Images/rightrotate.png</iconset>
-   </property>
-   <property name="text">
-    <string>Right Rotation 90°</string>
-   </property>
-  </action>
-  <action name="ActionZoomIn">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/zoom_in.png</normaloff>:/VimbaViewer/Images/zoom_in.png</iconset>
-   </property>
-   <property name="text">
-    <string>Zoom In</string>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl++</string>
-   </property>
-  </action>
-  <action name="ActionZoomOut">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/zoom_out.png</normaloff>:/VimbaViewer/Images/zoom_out.png</iconset>
-   </property>
-   <property name="text">
-    <string>Zoom Out</string>
-   </property>
-   <property name="shortcut">
-    <string>Ctrl+-</string>
-   </property>
-  </action>
-  <action name="ActionSaveCameraSettings">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/saveSettings_32.png</normaloff>:/VimbaViewer/Images/saveSettings_32.png</iconset>
-   </property>
-   <property name="text">
-    <string>Save camera settings</string>
-   </property>
-   <property name="toolTip">
-    <string>Save Camera Settings to File.</string>
-   </property>
-  </action>
-  <action name="ActionLoadCameraSettings">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/loadSettings_32.png</normaloff>:/VimbaViewer/Images/loadSettings_32.png</iconset>
-   </property>
-   <property name="text">
-    <string>Load camera settings</string>
-   </property>
-   <property name="toolTip">
-    <string>Load Camera Settings from File.</string>
-   </property>
-  </action>
-  <action name="ActionLoadCameraSettingsMenu">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/loadSettings_32.png</normaloff>:/VimbaViewer/Images/loadSettings_32.png</iconset>
-   </property>
-   <property name="text">
-    <string>Load Camera Settings</string>
-   </property>
-  </action>
-  <action name="ActionSaveCameraSettingsMenu">
-   <property name="icon">
-    <iconset resource="VimbaViewer.qrc">
-     <normaloff>:/VimbaViewer/Images/saveSettings_32.png</normaloff>:/VimbaViewer/Images/saveSettings_32.png</iconset>
-   </property>
-   <property name="text">
-    <string>Save Camera Settings</string>
-   </property>
-  </action>
-  <action name="ActionAllow16BitTiffSaving">
-   <property name="checkable">
-    <bool>true</bool>
-   </property>
-   <property name="text">
-    <string>Allow 16-Bit Tiff Saving</string>
-   </property>
-   <property name="toolTip">
-    <string>Allow saving of 16 Bit Tiff images</string>
-   </property>
-  </action>
- </widget>
- <resources>
-  <include location="VimbaViewer.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer.qrc b/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer.qrc
deleted file mode 100644
index 9ee29359515132f873ac8d5c8021293d7030e2fc..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer.qrc
+++ /dev/null
@@ -1,62 +0,0 @@
-<RCC>
-    <qresource prefix="/VimbaViewer">
-		<file>Images/1800U.png</file>
-        <file>Images/ImageSeriesSaveSettings.png</file>
-        <file>Images/ImageSeriesStart.png</file>
-        <file>Images/actionCommand.png</file>
-        <file>Images/bigeye.png</file>
-        <file>Images/cascade.png</file>
-        <file>Images/close.png</file>
-        <file>Images/delete.png</file>
-        <file>Images/directaccess.png</file>
-        <file>Images/error.png</file>
-        <file>Images/execute.png</file>
-        <file>Images/fittowin.png</file>
-        <file>Images/goldeye-g-cool.png</file>
-        <file>Images/goldeye-g.png</file>
-        <file>Images/goldeye-p.png</file>
-        <file>Images/guppy-pro.png</file>
-        <file>Images/guppy.png</file>
-        <file>Images/histogram.png</file>
-        <file>Images/info.png</file>
-        <file>Images/leftrotate.png</file>
-        <file>Images/loadSettings_32.png</file>
-        <file>Images/lock.png</file>
-        <file>Images/logger.png</file>
-        <file>Images/logging.png</file>
-        <file>Images/mako.png</file>
-        <file>Images/manta-angled.png</file>
-        <file>Images/manta-bl.png</file>
-        <file>Images/manta.png</file>
-        <file>Images/marlin.png</file>
-        <file>Images/network.png</file>
-        <file>Images/okay.png</file>
-        <file>Images/open_eventviewer.png</file>
-        <file>Images/option.png</file>
-        <file>Images/oscar.png</file>
-        <file>Images/pdf.png</file>
-        <file>Images/pike.png</file>
-        <file>Images/play.png</file>
-        <file>Images/print.png</file>
-        <file>Images/prosilicagc.png</file>
-        <file>Images/prosilicage.png</file>
-        <file>Images/prosilicagt-large.png</file>
-        <file>Images/prosilicagt.png</file>
-        <file>Images/prosilicagx.png</file>
-        <file>Images/refresh.png</file>
-        <file>Images/resetposition.png</file>
-        <file>Images/rightrotate.png</file>
-        <file>Images/save.png</file>
-        <file>Images/saveSettings_32.png</file>
-        <file>Images/savemultipleimages.png</file>
-        <file>Images/stingray.png</file>
-        <file>Images/stop.png</file>
-        <file>Images/stripes_256.png</file>
-        <file>Images/tile.png</file>
-        <file>Images/warning.png</file>
-        <file>Images/zoom_default.png</file>
-        <file>Images/zoom_in.png</file>
-        <file>Images/zoom_out.png</file>
-		<file>Images/forceIp.png</file>
-    </qresource>
-</RCC>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer_de.ts b/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer_de.ts
deleted file mode 100644
index 9f3cd786e6587f389b6035f6f46edfae70066fef..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer_de.ts
+++ /dev/null
@@ -1,772 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="de_DE">
-<context>
-    <name>CameraTreeWindow</name>
-    <message>
-        <source>Detected Cameras</source>
-        <translation>Entdeckte Kameras</translation>
-    </message>
-</context>
-<context>
-    <name>ControllerTreeWindow</name>
-    <message>
-        <source>Feature </source>
-        <translation>Feature </translation>
-    </message>
-    <message>
-        <source>Value </source>
-        <translation>Wert </translation>
-    </message>
-    <message>
-        <source>READ ERROR!!!</source>
-        <translation>Fehler beim Lesen!</translation>
-    </message>
-    <message>
-        <source>WRITE ERROR!!!</source>
-        <translation>Fehler beim Schreiben!</translation>
-    </message>
-    <message>
-        <source>ERROR!!!</source>
-        <translation>Fehler!</translation>
-    </message>
-</context>
-<context>
-    <name>DirectAccessDialog</name>
-    <message>
-        <source>Direct Access</source>
-        <translation>Kameraregister</translation>
-    </message>
-    <message>
-        <source>READ</source>
-        <translation>Lesen</translation>
-    </message>
-    <message>
-        <source>WRITE</source>
-        <translation>Schreiben</translation>
-    </message>
-    <message>
-        <source>Register Address:</source>
-        <translation>Registeradresse:</translation>
-    </message>
-    <message>
-        <source>Data:</source>
-        <translation>Wert:</translation>
-    </message>
-    <message>
-        <source>0x</source>
-        <translation>0x</translation>
-    </message>
-    <message>
-        <source>Dec</source>
-        <translation>Dez</translation>
-    </message>
-</context>
-<context>
-    <name>DisplayOptionsDialog</name>
-    <message>
-        <source>Viewer Options</source>
-        <translation>Anzeigeoptionen</translation>
-    </message>
-    <message>
-        <source>Performance Settings: </source>
-        <translation>Performance-Optionen: </translation>
-    </message>
-    <message>
-        <source>Display every completed frame received by the application</source>
-        <translation>Jedes empfangene Bild darstellen</translation>
-    </message>
-    <message>
-        <source>NOTE: Enabling will increase the CPU consumption of your system!</source>
-        <translation>HINWEIS: Das Einschalten erhöht die CPU-Auslastung!</translation>
-    </message>
-    <message>
-        <source>Number of used frames</source>
-        <translation>Anzahl der benutzten Bildpuffer</translation>
-    </message>
-</context>
-<context>
-    <name>HexMainWindow</name>
-    <message>
-        <source>Overwrite</source>
-        <translation>Überschreiben</translation>
-    </message>
-    <message>
-        <source>Insert</source>
-        <translation>Einfügen</translation>
-    </message>
-    <message>
-        <source>&amp;Save</source>
-        <translation>&amp;Speichern</translation>
-    </message>
-    <message>
-        <source>Save data to buffer</source>
-        <translation>In Puffer speichern</translation>
-    </message>
-    <message>
-        <source>Show the Dialog to select editor options</source>
-        <translation>Einstellungsdialog anzeigen</translation>
-    </message>
-    <message>
-        <source>&amp;File</source>
-        <translation>&amp;Datei</translation>
-    </message>
-    <message>
-        <source>&amp;Edit</source>
-        <translation>&amp;Editieren</translation>
-    </message>
-    <message>
-        <source>Address:</source>
-        <translation>Adresse:</translation>
-    </message>
-    <message>
-        <source>Size:</source>
-        <translation>Größe:</translation>
-    </message>
-    <message>
-        <source>Mode:</source>
-        <translation>Mode:</translation>
-    </message>
-    <message>
-        <source>Ready</source>
-        <translation>Fertig</translation>
-    </message>
-    <message>
-        <source>File</source>
-        <translation>Datei</translation>
-    </message>
-    <message>
-        <source>VimbaViewer</source>
-        <translation>VimbaViewer</translation>
-    </message>
-    <message>
-        <source>writing data to camera FAILED</source>
-        <translation>FEHLER beim Schreiben in die Kamera</translation>
-    </message>
-    <message>
-        <source>Se&amp;ttings</source>
-        <translation>E&amp;instellungen</translation>
-    </message>
-</context>
-<context>
-    <name>Histogram</name>
-    <message>
-        <source>mono</source>
-        <translation>Mono</translation>
-    </message>
-    <message>
-        <source>red</source>
-        <translation>Rot</translation>
-    </message>
-    <message>
-        <source>green</source>
-        <translation>Grün</translation>
-    </message>
-    <message>
-        <source>blue</source>
-        <translation>Blau</translation>
-    </message>
-    <message>
-        <source>Y</source>
-        <translation>Y</translation>
-    </message>
-    <message>
-        <source>U</source>
-        <translation>U</translation>
-    </message>
-    <message>
-        <source>V</source>
-        <translation>V</translation>
-    </message>
-</context>
-<context>
-    <name>HistogramWindow</name>
-    <message>
-        <source>Print the histogram</source>
-        <translation>Histogramm darstellen</translation>
-    </message>
-    <message>
-        <source>Export the histogram to PDF</source>
-        <translation>Histogramm nach PDF exportieren</translation>
-    </message>
-    <message>
-        <source> -- </source>
-        <translation> -- </translation>
-    </message>
-    <message>
-        <source>Minimum</source>
-        <translation>Minimum</translation>
-    </message>
-    <message>
-        <source>Maximum</source>
-        <translation>Maximum</translation>
-    </message>
-    <message>
-        <source>Mean</source>
-        <translation>Mittelwert</translation>
-    </message>
-    <message>
-        <source>Auto scale Y-AXIS ON</source>
-        <translation>Auto-Skalierung Y-Achse AN</translation>
-    </message>
-</context>
-<context>
-    <name>MainInformationWindow</name>
-    <message>
-        <source>&amp;Open logging window</source>
-        <translation>&amp;Loggingfenster öffnen</translation>
-    </message>
-    <message>
-        <source>&amp;Open event viewer</source>
-        <translation>&amp;Eventanzeige öffnen</translation>
-    </message>
-    <message>
-        <source>&amp;Cascade</source>
-        <translation>&amp;Kaskadieren</translation>
-    </message>
-    <message>
-        <source>&amp;Tile </source>
-        <translation>S&amp;tapeln</translation>
-    </message>
-    <message>
-        <source>&amp;Close all</source>
-        <translation>&amp;Alle schließen</translation>
-    </message>
-    <message>
-        <source>&amp;Window</source>
-        <translation>&amp;Fenster</translation>
-    </message>
-</context>
-<context>
-    <name>MainWindow</name>
-    <message>
-        <source>About Vimba Viewer</source>
-        <translation>Über Vimba Viewer</translation>
-    </message>
-    <message>
-        <source>Vimba Viewer is an example application using the Vimba C++ API.</source>
-        <translation>Der VimbaViewer ist eine Beispielanwendung  und baut auf der Vimba C++ API auf.</translation>
-    </message>
-    <message>
-        <source>Version: </source>
-        <translation>Version: </translation>
-    </message>
-    <message>
-        <source>Open FULL ACCESS</source>
-        <translation>Öffnen mit vollem Zugriff</translation>
-    </message>
-    <message>
-        <source>Open READ ONLY</source>
-        <translation>Öffnen mit Nur-Lese-Zugriff</translation>
-    </message>
-    <message>
-        <source>Open CONFIG</source>
-        <translation>Öffnen im Konfigurationsmodus</translation>
-    </message>
-    <message>
-        <source>Open LITE</source>
-        <translation>Öffnen ohne Featurezugriff</translation>
-    </message>
-    <message>
-        <source>Opening The Viewer:</source>
-        <translation>Öffne die Anzeige für:</translation>
-    </message>
-    <message>
-        <source>QueryVersion() failed, Error: </source>
-        <translation>QueryVersion() fehlgeschlagen, Error: </translation>
-    </message>
-    <message>
-        <source>Startup failed, Error: </source>
-        <translation>StartUp() fehlgeschlagen, Error: </translation>
-    </message>
-    <message>
-        <source>Closing The Viewer:</source>
-        <translation>Schließe die Anzeige für:</translation>
-    </message>
-    <message>
-        <source>GetModel Failed, Error: </source>
-        <translation>GetModel fehlgeschlagen, Error: </translation>
-    </message>
-    <message>
-        <source>GetSerialNumber Failed, Error: </source>
-        <translation>GetSerialNumber fehlgeschlagen, Error: </translation>
-    </message>
-    <message>
-        <source>GetID Failed, Error: </source>
-        <translation>GetID fehlgeschlagen, Error: </translation>
-    </message>
-    <message>
-        <source>RegisterCameraListObserver Failed, Error:</source>
-        <translation>RegisterCameraListObserver Fehlgeschlagen, Error:</translation>
-    </message>
-    <message>
-        <source>GetCameras Failed, Error: </source>
-        <translation>GetCameras fehlgeschlagen, Error: </translation>
-    </message>
-    <message>
-        <source>GetInterfaces Failed, Error:</source>
-        <translation>GetInterfaces fehlgeschlagen, Error:</translation>
-    </message>
-</context>
-<context>
-    <name>OptionDialog</name>
-    <message>
-        <source>Settings</source>
-        <translation>Einstellungen</translation>
-    </message>
-    <message>
-        <source>Flags</source>
-        <translation>Flags</translation>
-    </message>
-    <message>
-        <source>ReadOnly</source>
-        <translation>Nur lesen</translation>
-    </message>
-    <message>
-        <source>Overwrite Mode</source>
-        <translation>Überschreibmodus</translation>
-    </message>
-    <message>
-        <source>Address Area</source>
-        <translation>Adressbereich</translation>
-    </message>
-    <message>
-        <source>Ascii Area</source>
-        <translation>Klartextbereich</translation>
-    </message>
-    <message>
-        <source>Colors and Fonts</source>
-        <translation>Farben und Schriften</translation>
-    </message>
-    <message>
-        <source>Highlighting Color</source>
-        <translation>Hervorhebungsfarbe</translation>
-    </message>
-    <message>
-        <source>Address Area Color</source>
-        <translation>Adressbereichfarbe</translation>
-    </message>
-    <message>
-        <source>Selection Color</source>
-        <translation>Auswahlfarbe</translation>
-    </message>
-    <message>
-        <source>Widget Font</source>
-        <translation>Widgetfarbe</translation>
-    </message>
-    <message>
-        <source>01 23 45 67 89 ab cd ef</source>
-        <translation>01 23 45 67 89 ab cd ef</translation>
-    </message>
-    <message>
-        <source>Address Area Width</source>
-        <translation>Breite des Adressbereichs</translation>
-    </message>
-    <message>
-        <source>Highlighting</source>
-        <translation>Hervorheben</translation>
-    </message>
-</context>
-<context>
-    <name>SaveImagesProgressDialog</name>
-    <message>
-        <source>Saving Progress</source>
-        <translation>Speicherfortschritt</translation>
-    </message>
-</context>
-<context>
-    <name>SavingOptionsDialog</name>
-    <message>
-        <source>Saving Options</source>
-        <translation>Speicheroptionen</translation>
-    </message>
-    <message>
-        <source>File options:</source>
-        <translation>Dateioptionen:</translation>
-    </message>
-    <message>
-        <source>Name:</source>
-        <translation>Name:</translation>
-    </message>
-    <message>
-        <source>VimbaImage</source>
-        <translation>VimbaImage</translation>
-    </message>
-    <message>
-        <source>Destination Path...</source>
-        <translation>Zielpfad...</translation>
-    </message>
-    <message>
-        <source>Format:</source>
-        <translation>Format:</translation>
-    </message>
-    <message>
-        <source>Processing options:</source>
-        <translation>Verarbeitungsoptionen:</translation>
-    </message>
-    <message>
-        <source>Number Of Images   </source>
-        <translation>Anzahl der Bilder   </translation>
-    </message>
-</context>
-<context>
-    <name>StartOptionsDialog</name>
-    <message>
-        <source>Start Options</source>
-        <translation>Startoptionen</translation>
-    </message>
-    <message>
-        <source>GigE: </source>
-        <translation>GigE: </translation>
-    </message>
-    <message>
-        <source>Auto Adjust Packet Size</source>
-        <translation>Automatische Packetgröße</translation>
-    </message>
-</context>
-<context>
-    <name>Viewer</name>
-    <message>
-        <source>Save Image...</source>
-        <translation>Bild speichern</translation>
-    </message>
-</context>
-<context>
-    <name>ViewerWindow</name>
-    <message>
-        <source>MainWindow</source>
-        <translation>Hauptfenster</translation>
-    </message>
-    <message>
-        <source>File</source>
-        <translation>Datei</translation>
-    </message>
-    <message>
-        <source>View</source>
-        <translation>Anzeige</translation>
-    </message>
-    <message>
-        <source>Camera</source>
-        <translation>Kamera</translation>
-    </message>
-    <message>
-        <source>Direct Access</source>
-        <translation>Registerzugriff</translation>
-    </message>
-    <message>
-        <source>Viewer ToolBar </source>
-        <translation>Viewer-Toolbar</translation>
-    </message>
-    <message>
-        <source>Freerun</source>
-        <translation>Freerun</translation>
-    </message>
-    <message>
-        <source>Ctrl+F</source>
-        <translation type="unfinished">Strg+F</translation>
-    </message>
-    <message>
-        <source>Reset Docking Position</source>
-        <translation>Dockingposition zurücksetzen</translation>
-    </message>
-    <message>
-        <source>Reset docking windows position</source>
-        <translation>Fenster-Dockingposition zurücksetzen</translation>
-    </message>
-    <message>
-        <source>Ctrl+R</source>
-        <translation type="unfinished">Strg+R</translation>
-    </message>
-    <message>
-        <source>Save As...</source>
-        <translation>Speichern unter...</translation>
-    </message>
-    <message>
-        <source>Set Zoom To Default</source>
-        <translation>Standardzoom</translation>
-    </message>
-    <message>
-        <source>Original Size</source>
-        <translation>Originalgröße</translation>
-    </message>
-    <message>
-        <source>Set zoom to default (original size)</source>
-        <translation>Auf Standardzoom setzen (Originalgröße)</translation>
-    </message>
-    <message>
-        <source>Ctrl+D</source>
-        <translation type="unfinished">Strg+D</translation>
-    </message>
-    <message>
-        <source>Save Options...</source>
-        <translation>Optionen speichern...</translation>
-    </message>
-    <message>
-        <source>Register</source>
-        <translation>Register</translation>
-    </message>
-    <message>
-        <source>Direct Access Register</source>
-        <translation>Direkter Speicherzugriff</translation>
-    </message>
-    <message>
-        <source>Save Images</source>
-        <translation>Bilder speichern</translation>
-    </message>
-    <message>
-        <source>Save images</source>
-        <translation>Bilder speichern</translation>
-    </message>
-    <message>
-        <source>Options...</source>
-        <translation>Optionen...</translation>
-    </message>
-    <message>
-        <source>Display options</source>
-        <translation>Anzeigeoptionen</translation>
-    </message>
-    <message>
-        <source>Histogram</source>
-        <translation>Histogramm</translation>
-    </message>
-    <message>
-        <source>Open the histogram window</source>
-        <translation>Histogrammfenster darstellen</translation>
-    </message>
-    <message>
-        <source>Ctrl+H</source>
-        <translation type="unfinished">Strg+H</translation>
-    </message>
-    <message>
-        <source>Fit to window</source>
-        <translation>In Fenster einpassen</translation>
-    </message>
-    <message>
-        <source>Ctrl+W</source>
-        <translation type="unfinished">Strg+W</translation>
-    </message>
-    <message utf8="true">
-        <source>Left Rotation 90°</source>
-        <translation>Linksrotation 90°</translation>
-    </message>
-    <message utf8="true">
-        <source>Right Rotation 90°</source>
-        <translation>Rechtsrotation 90°</translation>
-    </message>
-    <message>
-        <source>Zoom In</source>
-        <translation>Hereinzoomen</translation>
-    </message>
-    <message>
-        <source>Ctrl++</source>
-        <translation type="unfinished">Strg+ +</translation>
-    </message>
-    <message>
-        <source>Zoom Out</source>
-        <translation>Herauszoomen</translation>
-    </message>
-    <message>
-        <source>Ctrl+-</source>
-        <translation type="unfinished">Strg+ -</translation>
-    </message>
-    <message>
-        <source>Filter pattern:</source>
-        <translation>Filtermuster:</translation>
-    </message>
-    <message>
-        <source>Search</source>
-        <translation>Suchen</translation>
-    </message>
-    <message>
-        <source>Save Image</source>
-        <translation>Bild speichern</translation>
-    </message>
-    <message>
-        <source>Destination</source>
-        <translation>Ziel</translation>
-    </message>
-    <message>
-        <source>Vimba Viewer</source>
-        <translation>Vimba Viewer</translation>
-    </message>
-    <message>
-        <source>Open FULL ACCESS</source>
-        <translation>Öffnen mit vollem Zugriff</translation>
-    </message>
-    <message>
-        <source>(FULL ACCESS)</source>
-        <translation>(voller Zugriff)</translation>
-    </message>
-    <message>
-        <source>Open READ ONLY</source>
-        <translation>Öffnen mit Nur-Lese-Zugriff</translation>
-    </message>
-    <message>
-        <source>(READ ONLY)</source>
-        <translation>(Nur-Lese-Zugriff)</translation>
-    </message>
-    <message>
-        <source>Open CONFIG</source>
-        <translation>Öffnen im Konfigurationsmodus</translation>
-    </message>
-    <message>
-        <source>(CONFIG MODE)</source>
-        <translation>(Konfigurationsmodus)</translation>
-    </message>
-    <message>
-        <source>Open LITE</source>
-        <translation>Öffnen ohne Featurezugriff</translation>
-    </message>
-    <message>
-        <source>(LITE)</source>
-        <translation>(ohne Featurezugriff)</translation>
-    </message>
-    <message>
-        <source>Example: Gain|Width</source>
-        <translation>Beispiel: Gain|Width</translation>
-    </message>
-    <message>
-        <source>To filter multiple features, e.g: Width|Gain|xyz|etc</source>
-        <translation>Um nach mehreren Features zu filtern, Width|Gain|xyz verwenden</translation>
-    </message>
-    <message>
-        <source>Properties</source>
-        <translation>Eigenschaften</translation>
-    </message>
-    <message>
-        <source>Controller for </source>
-        <translation>Controller für </translation>
-    </message>
-    <message>
-        <source>Information for </source>
-        <translation>Information für </translation>
-    </message>
-    <message>
-        <source>Histogram for </source>
-        <translation>Histogramm für </translation>
-    </message>
-    <message>
-        <source>Destination Path</source>
-        <translation>Zielpfad</translation>
-    </message>
-    <message>
-        <source>Type</source>
-        <translation>Typ</translation>
-    </message>
-    <message>
-        <source>Tooltip ON</source>
-        <translation>Tooltip AN</translation>
-    </message>
-    <message>
-        <source>Write Register Failed!</source>
-        <translation>Register schreiben fehlgeschlagen!</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation>Fehler</translation>
-    </message>
-    <message>
-        <source>Read Register Failed!</source>
-        <translation>Register lesen fehlgeschlagen!</translation>
-    </message>
-    <message>
-        <source>Error:</source>
-        <translation>Fehler:</translation>
-    </message>
-    <message>
-        <source>Saving image: </source>
-        <translation>Speichere Bild: </translation>
-    </message>
-    <message>
-        <source> is DONE!</source>
-        <translation> fertig!</translation>
-    </message>
-    <message>
-        <source>FAILED TO SAVE IMAGE!</source>
-        <translation>Bild speichern ist fehlgeschlagen!</translation>
-    </message>
-    <message>
-        <source>Please choose your destination path!</source>
-        <translation>Bitte den Zielpfad auswählen!</translation>
-    </message>
-    <message>
-        <source>Please give a name!</source>
-        <translation>Bitte einen Namen vergeben!</translation>
-    </message>
-    <message>
-        <source>No permission to write to destination path. Please select another one! </source>
-        <translation>Unzureichende Berechtigung zum Schreiben auf Zielpfad! Bitte einen anderen wählen!</translation>
-    </message>
-</context>
-<context>
-    <name>mainWindow</name>
-    <message>
-        <source>Vimba Viewer</source>
-        <translation>Vimba Viewer</translation>
-    </message>
-    <message>
-        <source>Action</source>
-        <translation>Aktion</translation>
-    </message>
-    <message>
-        <source>Help</source>
-        <translation>Hilfe</translation>
-    </message>
-    <message>
-        <source>Settings</source>
-        <translation>Einstellungen</translation>
-    </message>
-    <message>
-        <source>MainWindow ToolBar</source>
-        <translation>Hauptfenster-Toolbar</translation>
-    </message>
-    <message>
-        <source>Refresh</source>
-        <translation>Aktualisieren</translation>
-    </message>
-    <message>
-        <source>Refresh camera tree</source>
-        <translation>Kameraliste aktualisieren</translation>
-    </message>
-    <message>
-        <source>Ctrl+C</source>
-        <translation>Strg+C</translation>
-    </message>
-    <message>
-        <source>Clear Logger</source>
-        <translation>Logger zurücksetzen</translation>
-    </message>
-    <message>
-        <source>Clear log window</source>
-        <translation>Loggingfenster leeren</translation>
-    </message>
-    <message>
-        <source>Ctrl+E</source>
-        <translation>Strg+E</translation>
-    </message>
-    <message>
-        <source>About</source>
-        <translation>Über</translation>
-    </message>
-    <message>
-        <source>About Qt</source>
-        <translation>Über Qt</translation>
-    </message>
-    <message>
-        <source>Start Options...</source>
-        <translation>Startoptionen...</translation>
-    </message>
-    <message>
-        <source>Ctrl+O</source>
-        <translation>Strg+O</translation>
-    </message>
-    <message>
-        <source>Exit</source>
-        <translation>Verlassen</translation>
-    </message>
-    <message>
-        <source>Ctrl+F4</source>
-        <translation>Strg+F4</translation>
-    </message>
-</context>
-</TS>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer_zh.qm b/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer_zh.qm
deleted file mode 100644
index 907283181d0cb65f75b61bceea48343d77a8121c..0000000000000000000000000000000000000000
Binary files a/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer_zh.qm and /dev/null differ
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer_zh.ts b/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer_zh.ts
deleted file mode 100644
index d4a8dbcd8260837c9a94d806225a6d0274dd5801..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/VimbaViewer_zh.ts
+++ /dev/null
@@ -1,1438 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="zh" sourcelanguage="en">
-<context>
-    <name>ActionCommandDialog</name>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="20"/>
-        <source>Trigger over Ethernet - Action Commands</source>
-        <translation type="unfinished">网络触发-Action 命令</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="36"/>
-        <source>Network Interface</source>
-        <translation>网卡</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="71"/>
-        <source>Select Interface</source>
-        <translation>选择接口</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="112"/>
-        <source>All Interfaces</source>
-        <translation>所有接口</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="175"/>
-        <source>Action Command</source>
-        <translation>Action命令</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="210"/>
-        <source>Device Key</source>
-        <translation>设备编码</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="235"/>
-        <source>Group Key</source>
-        <translation>组编码</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="260"/>
-        <source>Group Mask</source>
-        <translation>组屏蔽码</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="403"/>
-        <source>Send</source>
-        <translation>发送</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="428"/>
-        <source>Cancel</source>
-        <translation>取消</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="447"/>
-        <source>Single Device</source>
-        <translation>单一设备</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="480"/>
-        <source>Destination IP Address</source>
-        <translation>目标IP地址</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="509"/>
-        <source>Enable Unicast</source>
-        <translation>允许单一传输</translation>
-    </message>
-    <message>
-        <location filename="Source/ActionCommand.ui" line="526"/>
-        <source>Command Log</source>
-        <translation>命令日志</translation>
-    </message>
-</context>
-<context>
-    <name>CameraTreeWindow</name>
-    <message>
-        <location filename="Source/UI/CameraTreeWindow.cpp" line="36"/>
-        <source>Detected Cameras</source>
-        <translation>找到的相机</translation>
-    </message>
-</context>
-<context>
-    <name>ControllerTreeWindow</name>
-    <message>
-        <location filename="Source/UI/ControllerTreeWindow.cpp" line="595"/>
-        <source>Feature </source>
-        <translation>功能</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/ControllerTreeWindow.cpp" line="595"/>
-        <source>Value </source>
-        <translation>值</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/ControllerTreeWindow.cpp" line="2377"/>
-        <location filename="Source/UI/ControllerTreeWindow.cpp" line="2381"/>
-        <location filename="Source/UI/ControllerTreeWindow.cpp" line="2385"/>
-        <location filename="Source/UI/ControllerTreeWindow.cpp" line="2453"/>
-        <source>READ ERROR!!!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/ControllerTreeWindow.cpp" line="2410"/>
-        <location filename="Source/UI/ControllerTreeWindow.cpp" line="2414"/>
-        <location filename="Source/UI/ControllerTreeWindow.cpp" line="2418"/>
-        <location filename="Source/UI/ControllerTreeWindow.cpp" line="2465"/>
-        <source>WRITE ERROR!!!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/ControllerTreeWindow.cpp" line="2429"/>
-        <source>ERROR!!!</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>DirectAccessDialog</name>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="26"/>
-        <source>Direct Access</source>
-        <translation>直接操作</translation>
-    </message>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="53"/>
-        <source>Register Address:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="60"/>
-        <location filename="Source/DirectAccess.ui" line="80"/>
-        <source>0x</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="70"/>
-        <location filename="Source/DirectAccess.ui" line="97"/>
-        <source>Data:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="90"/>
-        <source>The register content shown in endianess of the device</source>
-        <translation>按设备的字节序显示的内容</translation>
-    </message>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="104"/>
-        <source>Dec</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="114"/>
-        <source>The decimal representation of the register content</source>
-        <translation>寄存器的十进制值</translation>
-    </message>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="121"/>
-        <source>Convert the decimal value to little endian</source>
-        <translation>十进制值转小端值</translation>
-    </message>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="124"/>
-        <source>Little endian device</source>
-        <translation>小端序设备</translation>
-    </message>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="131"/>
-        <source>The register address</source>
-        <translation>寄存器地址</translation>
-    </message>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="142"/>
-        <source>READ</source>
-        <translation>读</translation>
-    </message>
-    <message>
-        <location filename="Source/DirectAccess.ui" line="149"/>
-        <source>WRITE</source>
-        <translation>写</translation>
-    </message>
-</context>
-<context>
-    <name>DisplayOptionsDialog</name>
-    <message>
-        <location filename="Source/ViewerOption.ui" line="26"/>
-        <source>Viewer Options</source>
-        <translation>Viewer选项</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerOption.ui" line="34"/>
-        <source>Performance Settings: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerOption.ui" line="46"/>
-        <source>Display every completed frame received by the application</source>
-        <translation>显示所有收到的完整的帧</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerOption.ui" line="62"/>
-        <source>NOTE: Enabling will increase the CPU consumption of your system!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerOption.ui" line="75"/>
-        <source>Number of used frame buffers</source>
-        <translation>使用缓存的数量</translation>
-    </message>
-</context>
-<context>
-    <name>ForceIPDialog</name>
-    <message>
-        <location filename="Source/ForceIP.ui" line="32"/>
-        <source>Send Force IP Command</source>
-        <translation>发送强制设置IP命令</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="48"/>
-        <source>Network Interface</source>
-        <translation>网卡</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="81"/>
-        <source>Select Interface</source>
-        <translation>选择接口</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="159"/>
-        <source>All Interfaces</source>
-        <translation>所有接口</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="189"/>
-        <source>Force IP Command</source>
-        <translation>强制设置IP命令</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="227"/>
-        <location filename="Source/ForceIP.ui" line="714"/>
-        <source>MAC Address</source>
-        <translation>MAC地址</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="252"/>
-        <location filename="Source/ForceIP.ui" line="823"/>
-        <source>IP Address</source>
-        <translation>IP地址</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="277"/>
-        <location filename="Source/ForceIP.ui" line="926"/>
-        <source>Subnet Mask</source>
-        <translation>子网掩码</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="302"/>
-        <location filename="Source/ForceIP.ui" line="979"/>
-        <source>Gateway</source>
-        <translation>网关</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="436"/>
-        <source>Cancel</source>
-        <translation>取消</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="474"/>
-        <source>Send</source>
-        <translation>发送</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="528"/>
-        <source>Device Selector</source>
-        <translation>设备选择器</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="592"/>
-        <source>Select Device</source>
-        <translation>选择设备</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="631"/>
-        <source>Device Information</source>
-        <translation>设备信息</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="664"/>
-        <source>Device ID</source>
-        <translation>设备ID</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="767"/>
-        <source>Model Name</source>
-        <translation>型号名</translation>
-    </message>
-    <message>
-        <location filename="Source/ForceIP.ui" line="876"/>
-        <source>Access Status</source>
-        <translation>操作状态</translation>
-    </message>
-</context>
-<context>
-    <name>HexMainWindow</name>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="76"/>
-        <source>Overwrite</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="78"/>
-        <source>Insert</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="112"/>
-        <source>&amp;Save</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="114"/>
-        <source>Save data to buffer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="117"/>
-        <source>Se&amp;ttings</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="118"/>
-        <source>Show the Dialog to select editor options</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="124"/>
-        <source>&amp;File</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="127"/>
-        <source>&amp;Edit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="135"/>
-        <source>Address:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="146"/>
-        <source>Size:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="157"/>
-        <source>Mode:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="166"/>
-        <source>Ready</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="171"/>
-        <source>File</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="214"/>
-        <source>VimbaViewer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/HexMainWindow.cpp" line="214"/>
-        <source>writing data to camera FAILED</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>Histogram</name>
-    <message>
-        <location filename="Source/UI/Histogram/Histogram.cpp" line="134"/>
-        <source>mono</source>
-        <translation>单色</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/Histogram.cpp" line="143"/>
-        <source>red</source>
-        <translation>红</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/Histogram.cpp" line="152"/>
-        <source>green</source>
-        <translation>绿</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/Histogram.cpp" line="161"/>
-        <source>blue</source>
-        <translation>蓝</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/Histogram.cpp" line="170"/>
-        <source>Y</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/Histogram.cpp" line="179"/>
-        <source>U</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/Histogram.cpp" line="188"/>
-        <source>V</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>HistogramWindow</name>
-    <message>
-        <location filename="Source/UI/Histogram/HistogramWindow.cpp" line="47"/>
-        <source>Print the histogram</source>
-        <translation>打印直方图</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/HistogramWindow.cpp" line="57"/>
-        <source>Export the histogram to PDF</source>
-        <translation>转存直方图为PDF</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/HistogramWindow.cpp" line="81"/>
-        <source>Minimum</source>
-        <translation>最小</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/HistogramWindow.cpp" line="81"/>
-        <source>Maximum</source>
-        <translation>最大</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/HistogramWindow.cpp" line="81"/>
-        <source>Mean</source>
-        <translation>均值</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/HistogramWindow.cpp" line="188"/>
-        <source>Auto scale Y-AXIS ON</source>
-        <translation>已选自动缩放Y</translation>
-    </message>
-    <message>
-        <location filename="Source/UI/Histogram/HistogramWindow.cpp" line="285"/>
-        <source> -- </source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>MainInformationWindow</name>
-    <message>
-        <location filename="Source/UI/MainInformationWindow.cpp" line="73"/>
-        <source>&amp;Open logging window</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/MainInformationWindow.cpp" line="74"/>
-        <source>&amp;Open event viewer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/MainInformationWindow.cpp" line="75"/>
-        <source>&amp;Cascade</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/MainInformationWindow.cpp" line="76"/>
-        <source>&amp;Tile </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/MainInformationWindow.cpp" line="77"/>
-        <source>&amp;Close all</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/MainInformationWindow.cpp" line="94"/>
-        <source>&amp;Window</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>MainWindow</name>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="90"/>
-        <source>QueryVersion() failed, Error: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="133"/>
-        <source>Vimba Viewer is an example application using the Vimba C++ API.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="133"/>
-        <source>Version: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="135"/>
-        <source>About Vimba Viewer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="174"/>
-        <source>Startup failed, Error: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="214"/>
-        <source>RegisterCameraListObserver Failed, Error: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="219"/>
-        <source>could not get camera list, Error: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="285"/>
-        <source>GetCameras Failed, Error: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="332"/>
-        <source>GetInterfaces Failed, Error: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="440"/>
-        <location filename="Source/MainWindow.cpp" line="462"/>
-        <location filename="Source/MainWindow.cpp" line="468"/>
-        <location filename="Source/MainWindow.cpp" line="474"/>
-        <location filename="Source/MainWindow.cpp" line="481"/>
-        <location filename="Source/MainWindow.cpp" line="1091"/>
-        <source>Open FULL ACCESS</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="440"/>
-        <location filename="Source/MainWindow.cpp" line="444"/>
-        <location filename="Source/MainWindow.cpp" line="462"/>
-        <location filename="Source/MainWindow.cpp" line="468"/>
-        <location filename="Source/MainWindow.cpp" line="474"/>
-        <location filename="Source/MainWindow.cpp" line="495"/>
-        <location filename="Source/MainWindow.cpp" line="501"/>
-        <location filename="Source/MainWindow.cpp" line="507"/>
-        <location filename="Source/MainWindow.cpp" line="1095"/>
-        <source>Open READ ONLY</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="462"/>
-        <location filename="Source/MainWindow.cpp" line="518"/>
-        <location filename="Source/MainWindow.cpp" line="1099"/>
-        <source>Open CONFIG</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="525"/>
-        <source>Open LITE</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="868"/>
-        <location filename="Source/MainWindow.cpp" line="887"/>
-        <location filename="Source/MainWindow.cpp" line="893"/>
-        <location filename="Source/MainWindow.cpp" line="917"/>
-        <source>Opening The Viewer:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="974"/>
-        <source>Closing The Viewer:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="992"/>
-        <source>closing camera that is not in list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="1077"/>
-        <source>Could not build camera display name, Error: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="1146"/>
-        <source>Loading Action Command dialog failed. GigE TL could not be found</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="1171"/>
-        <source>GetModel Failed, Error: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="1179"/>
-        <source>GetSerialNumber Failed, Error: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="1187"/>
-        <source>GetID Failed, Error: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.cpp" line="1211"/>
-        <source>GetInterfaceType Failed, Error: </source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>OpenByIDDialog</name>
-    <message>
-        <location filename="Source/OpenByID.ui" line="35"/>
-        <source>Open camera by IP</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/OpenByID.ui" line="57"/>
-        <source>IP address:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/OpenByID.ui" line="64"/>
-        <source>Access:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/OpenByID.ui" line="71"/>
-        <source>Enter the ID of the camera as shown by Vimba, the IP or 12 digit MAC address</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/OpenByID.ui" line="90"/>
-        <source>Select the access mode the camera shall be opened in. Only GigE cameras can be opened in Config Mode.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/OpenByID.ui" line="94"/>
-        <source>Open FULL ACCESS</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/OpenByID.ui" line="99"/>
-        <source>Open READ ONLY</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/OpenByID.ui" line="104"/>
-        <source>Open CONFIG</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>OptionDialog</name>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="14"/>
-        <source>Settings</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="20"/>
-        <source>Flags</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="26"/>
-        <source>ReadOnly</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="33"/>
-        <source>Highlighting</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="40"/>
-        <source>Overwrite Mode</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="47"/>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="195"/>
-        <source>Address Area</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="54"/>
-        <source>Ascii Area</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="64"/>
-        <source>Colors and Fonts</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="70"/>
-        <source>Highlighting Color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="102"/>
-        <source>Address Area Color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="159"/>
-        <source>Selection Color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="166"/>
-        <source>Widget Font</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="185"/>
-        <source>01 23 45 67 89 ab cd ef</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/UI/HexEditor/OptionDialog.ui" line="201"/>
-        <source>Address Area Width</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QwtPlotRenderer</name>
-    <message>
-        <location filename="Source/ExternLib/qwt/qwt_plot_renderer.cpp" line="979"/>
-        <location filename="Source/ExternLib/qwt/qwt_plot_renderer.cpp" line="982"/>
-        <location filename="Source/ExternLib/qwt/qwt_plot_renderer.cpp" line="985"/>
-        <source>Documents</source>
-        <translation>文档</translation>
-    </message>
-    <message>
-        <location filename="Source/ExternLib/qwt/qwt_plot_renderer.cpp" line="990"/>
-        <source>Images</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ExternLib/qwt/qwt_plot_renderer.cpp" line="1005"/>
-        <source>Export File Name</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>SaveImagesProgressDialog</name>
-    <message>
-        <location filename="Source/SavingProgress.ui" line="35"/>
-        <source>Saving Progress</source>
-        <translation>存图中</translation>
-    </message>
-</context>
-<context>
-    <name>SavingOptionsDialog</name>
-    <message>
-        <location filename="Source/SaveImageOption.ui" line="26"/>
-        <source>Saving Options</source>
-        <translation>存图选项</translation>
-    </message>
-    <message>
-        <location filename="Source/SaveImageOption.ui" line="34"/>
-        <source>File options:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/SaveImageOption.ui" line="42"/>
-        <source>Name:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/SaveImageOption.ui" line="49"/>
-        <source>VimbaImage</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/SaveImageOption.ui" line="56"/>
-        <source>Destination Path...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/SaveImageOption.ui" line="70"/>
-        <source>Format:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/SaveImageOption.ui" line="85"/>
-        <source>Processing options:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/SaveImageOption.ui" line="93"/>
-        <source>Number Of Images   </source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>StartOptionsDialog</name>
-    <message>
-        <location filename="Source/StartOption.ui" line="26"/>
-        <source>Start Options</source>
-        <translation>启动选项</translation>
-    </message>
-    <message>
-        <location filename="Source/StartOption.ui" line="34"/>
-        <source>GigE: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/StartOption.ui" line="46"/>
-        <source>Auto Adjust Packet Size</source>
-        <translation>自动调整网络数据包大小</translation>
-    </message>
-</context>
-<context>
-    <name>Viewer</name>
-    <message>
-        <location filename="Source/UI/Viewer.cpp" line="145"/>
-        <source>Save Image...</source>
-        <translation>存图...</translation>
-    </message>
-</context>
-<context>
-    <name>ViewerWindow</name>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="14"/>
-        <source>MainWindow</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="33"/>
-        <source>File</source>
-        <translation>文件</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="42"/>
-        <source>View</source>
-        <translation>显示</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="59"/>
-        <source>Camera</source>
-        <translation>相机</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="63"/>
-        <source>Direct Access</source>
-        <translation>直接操作</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="99"/>
-        <source>Viewer ToolBar </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="139"/>
-        <location filename="Source/ViewerWindow.ui" line="142"/>
-        <location filename="Source/ViewerWindow.ui" line="145"/>
-        <source>Freerun</source>
-        <translation>自由采集</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="151"/>
-        <source>Ctrl+F</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="160"/>
-        <source>Reset Docking Position</source>
-        <translation>恢复窗口位置</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="163"/>
-        <source>Reset docking windows position</source>
-        <translation>恢复窗口位置</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="166"/>
-        <source>Ctrl+R</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="175"/>
-        <source>Save Image As...</source>
-        <translation>存图为...</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="184"/>
-        <source>Set Zoom To Default</source>
-        <translation>设置缩放到缺省值</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="187"/>
-        <source>Original Size</source>
-        <translation>原图尺寸</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="190"/>
-        <source>Set zoom to default (original size)</source>
-        <translation>设置缩放到缺省值 (原图尺寸)</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="193"/>
-        <source>Ctrl+D</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="202"/>
-        <source>Image Series Options...</source>
-        <translation>连续存图选项...</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="211"/>
-        <source>Register</source>
-        <translation>寄存器</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="214"/>
-        <source>Direct Access Register</source>
-        <translation>直接操作寄存器</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="226"/>
-        <source>Save Image Series</source>
-        <translation>连续存图</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="229"/>
-        <source>Save images</source>
-        <translation>连续存图</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="234"/>
-        <source>Options...</source>
-        <translation>选项...</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="237"/>
-        <source>Display options</source>
-        <translation>显示选项</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="249"/>
-        <source>Histogram</source>
-        <translation>直方图</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="252"/>
-        <source>Open the histogram window</source>
-        <translation>打开直方图窗口</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="255"/>
-        <source>Ctrl+H</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="267"/>
-        <source>Fit to window</source>
-        <translation>缩放至窗口</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="270"/>
-        <source>Ctrl+W</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message utf8="true">
-        <location filename="Source/ViewerWindow.ui" line="279"/>
-        <source>Left Rotation 90°</source>
-        <translation>左转 90°</translation>
-    </message>
-    <message utf8="true">
-        <location filename="Source/ViewerWindow.ui" line="288"/>
-        <source>Right Rotation 90°</source>
-        <translation>右转 90°</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="297"/>
-        <source>Zoom In</source>
-        <translation>放大</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="300"/>
-        <source>Ctrl++</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="309"/>
-        <source>Zoom Out</source>
-        <translation>缩小</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="312"/>
-        <source>Ctrl+-</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="321"/>
-        <source>Save camera settings</source>
-        <translation>保存相机设置</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="324"/>
-        <source>Save Camera Settings to File.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="333"/>
-        <source>Load camera settings</source>
-        <translation>装入相机设置</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="336"/>
-        <source>Load Camera Settings from File.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="345"/>
-        <location filename="Source/ViewerWindow.cpp" line="1170"/>
-        <source>Load Camera Settings</source>
-        <translation>装入相机设置</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="354"/>
-        <location filename="Source/ViewerWindow.cpp" line="1384"/>
-        <source>Save Camera Settings</source>
-        <translation>保存相机设置</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="362"/>
-        <source>Allow 16-Bit Tiff Saving</source>
-        <translation>允许存16位Tiff</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.ui" line="365"/>
-        <source>Allow saving of 16 Bit Tiff images</source>
-        <translation>允许存16位Tiff</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="158"/>
-        <source>Open FULL ACCESS</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="161"/>
-        <location filename="Source/ViewerWindow.cpp" line="1181"/>
-        <location filename="Source/ViewerWindow.cpp" line="1391"/>
-        <source>(FULL ACCESS)</source>
-        <translation>(全权)</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="163"/>
-        <source>Open READ ONLY</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="166"/>
-        <location filename="Source/ViewerWindow.cpp" line="1954"/>
-        <location filename="Source/ViewerWindow.cpp" line="2014"/>
-        <location filename="Source/ViewerWindow.cpp" line="2124"/>
-        <source>(READ ONLY)</source>
-        <translation>(只读)</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="169"/>
-        <source>Open CONFIG</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="172"/>
-        <source>(CONFIG MODE)</source>
-        <translation>(配置)</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="175"/>
-        <source>Open LITE</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="178"/>
-        <source>(LITE)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="221"/>
-        <source>Controller for </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="222"/>
-        <source>Information for </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="223"/>
-        <source>Histogram for </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="267"/>
-        <source>Example: Gain|Width</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="268"/>
-        <source>To filter multiple features, e.g: Width|Gain|xyz|etc</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="271"/>
-        <source>Filter pattern:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="273"/>
-        <source>Search</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="316"/>
-        <source>All</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="322"/>
-        <source>Tooltip ON</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="756"/>
-        <source>Write Register Failed!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="756"/>
-        <source>Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="777"/>
-        <source>Read Register Failed!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="777"/>
-        <source>Error:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="827"/>
-        <source>Save Image</source>
-        <translation>存图</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="869"/>
-        <location filename="Source/ViewerWindow.cpp" line="873"/>
-        <location filename="Source/ViewerWindow.cpp" line="882"/>
-        <location filename="Source/ViewerWindow.cpp" line="928"/>
-        <location filename="Source/ViewerWindow.cpp" line="931"/>
-        <location filename="Source/ViewerWindow.cpp" line="996"/>
-        <source>Vimba Viewer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="869"/>
-        <source>Image: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="869"/>
-        <source> saved successfully</source>
-        <translation>保存成功</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="873"/>
-        <source>Error saving image</source>
-        <translation>存图失败</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="882"/>
-        <source>No image to save</source>
-        <translation>无图可存</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="928"/>
-        <source>Please choose your destination path!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="931"/>
-        <source>Please give a name!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="996"/>
-        <source>No permission to write to destination path. Please select another one! </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1076"/>
-        <source>Destination</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1080"/>
-        <source>Destination Path</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1081"/>
-        <source>Type</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1184"/>
-        <location filename="Source/ViewerWindow.cpp" line="1394"/>
-        <source>Camera must be opened in FULL ACCESS mode to use this feature</source>
-        <translation>相机必须以全权方式打开</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1216"/>
-        <location filename="Source/ViewerWindow.cpp" line="1425"/>
-        <source>No file selected</source>
-        <translation>未选择文件</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1233"/>
-        <source>Invalid xml file selected.
-File must be of type &apos;*.xml&apos;</source>
-        <translation>无效从xml文件,文件必须是&apos;*.xml&apos;</translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1250"/>
-        <location filename="Source/ViewerWindow.cpp" line="1302"/>
-        <location filename="Source/ViewerWindow.cpp" line="1320"/>
-        <source>Could not validate camera model.
-Do you want to proceed loading settings to selected camera ?</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1336"/>
-        <source>Selected camera model is different from xml file.
-</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1337"/>
-        <source>[camera: %1]
-</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1338"/>
-        <source>[xml: %1]
-
-</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1339"/>
-        <source>Do you want to proceed loading operation ?</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1360"/>
-        <source>There have been errors during loading of feature values.
-</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1361"/>
-        <location filename="Source/ViewerWindow.cpp" line="1451"/>
-        <source>[Error code: %1]
-</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1362"/>
-        <location filename="Source/ViewerWindow.cpp" line="1452"/>
-        <source>[file: %1]</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1372"/>
-        <source>Successfully loaded device settings
-from &apos;%1&apos;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1450"/>
-        <source>There have been errors during saving feature values.
-</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/ViewerWindow.cpp" line="1461"/>
-        <source>Successfully saved device settings to
-&apos;</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>mainWindow</name>
-    <message>
-        <location filename="Source/MainWindow.ui" line="33"/>
-        <source>Vimba Viewer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="76"/>
-        <source>Action</source>
-        <translation>相机操作</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="88"/>
-        <source>Help</source>
-        <translation>帮助</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="95"/>
-        <source>Settings</source>
-        <translation>设置</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="105"/>
-        <source>MainWindow ToolBar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="128"/>
-        <source>Refresh</source>
-        <translation>刷新</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="131"/>
-        <source>Refresh camera tree</source>
-        <translation>更新相机列表</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="134"/>
-        <source>Ctrl+R</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="143"/>
-        <source>Clear Logger</source>
-        <translation>清除日志</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="146"/>
-        <source>Clear log window</source>
-        <translation>清除日志窗口</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="149"/>
-        <source>Ctrl+C</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="154"/>
-        <source>About</source>
-        <translation>关于</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="159"/>
-        <source>About Qt</source>
-        <translation>关于 Qt</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="164"/>
-        <source>Start Options...</source>
-        <translation>启动选项</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="167"/>
-        <source>Ctrl+S</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="172"/>
-        <source>Exit</source>
-        <translation>退出</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="175"/>
-        <source>Ctrl+F4</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="184"/>
-        <source>Open Camera by IP</source>
-        <translation>按IP打开相机</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="187"/>
-        <source>Open a camera that was not discovered</source>
-        <translation>打开未被发现的相机</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="190"/>
-        <source>Ctrl+O</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="199"/>
-        <source>Force IP</source>
-        <translation>修改IP</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="202"/>
-        <source>Force specific IP address to camera with given MAC address</source>
-        <translation>按MAC强制修改IP</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="211"/>
-        <source>Action Command Broadcast</source>
-        <translation>Action命令</translation>
-    </message>
-    <message>
-        <location filename="Source/MainWindow.ui" line="214"/>
-        <source>Trigger over Ethernet - Action Commands</source>
-        <translation>通过以太网触发 - Action 命令</translation>
-    </message>
-</context>
-</TS>
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/VmbImageTransformHelper.hpp b/VimbaCPP/Examples/VimbaViewer/Source/VmbImageTransformHelper.hpp
deleted file mode 100644
index 49695e8e8e27ffc6e494f5a31cb7f56e50b86aea..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/VmbImageTransformHelper.hpp
+++ /dev/null
@@ -1,320 +0,0 @@
-#ifndef VMB_IMAGE_TRANSFORM_HELPER_H_
-#define VMB_IMAGE_TRANSFORM_HELPER_H_
-#include <VmbTransform.h>
-#include <exception>
-#include <string>
-
-namespace AVT
-{
-    class vimba_transform_exception : public std::exception
-    {
-    private:
-        std::string     m_Function;
-        std::string     m_Message;
-        VmbError_t      m_Result;
-    public:
-        vimba_transform_exception( const char* const&fun, const char* const & msg, VmbError_t result)
-            : m_Result( result)
-        {
-            try
-            {   if( NULL != fun )
-                    m_Function = std::string( fun);
-            }
-            catch (...) {}
-            try
-            {   if( NULL != msg )
-                    m_Message = std::string( msg);
-            }
-            catch (...) {}
-        }
-        ~vimba_transform_exception() throw() {}
-        const std::string&  Function()  const   { return m_Function; }
-        const std::string&  Message()   const   { return m_Message; }
-        VmbError_t          Result()    const   { return m_Result; }
-    };
-    inline VmbUint32_t GetUsedBits( VmbPixelFormatType pf)
-    {
-        switch( pf )
-        {
-        default:
-            throw vimba_transform_exception( __FUNCTION__,"unknown pixel format", VmbErrorBadParameter);
-        case VmbPixelFormatMono8:
-        case VmbPixelFormatBayerGR8:
-        case VmbPixelFormatBayerRG8:
-        case VmbPixelFormatBayerGB8:
-        case VmbPixelFormatBayerBG8:
-        case VmbPixelFormatRgb8:
-        case VmbPixelFormatBgr8:
-        case VmbPixelFormatArgb8:
-        case VmbPixelFormatBgra8:
-        case VmbPixelFormatYuv411:
-        case VmbPixelFormatYuv422:
-        case VmbPixelFormatYuv444:
-            return 8;
-        case VmbPixelFormatMono10:
-        case VmbPixelFormatMono10p:
-        case VmbPixelFormatBayerGR10:
-        case VmbPixelFormatBayerRG10:
-        case VmbPixelFormatBayerGB10:
-        case VmbPixelFormatBayerBG10:
-        case VmbPixelFormatBayerGR10p:
-        case VmbPixelFormatBayerRG10p:
-        case VmbPixelFormatBayerGB10p:
-        case VmbPixelFormatBayerBG10p:
-            return 10;
-        case VmbPixelFormatMono12:
-        case VmbPixelFormatMono12Packed:
-        case VmbPixelFormatMono12p:
-        case VmbPixelFormatBayerGR12:
-        case VmbPixelFormatBayerRG12:
-        case VmbPixelFormatBayerGB12:
-        case VmbPixelFormatBayerBG12:
-        case VmbPixelFormatBayerGR12Packed:
-        case VmbPixelFormatBayerRG12Packed:
-        case VmbPixelFormatBayerGB12Packed:
-        case VmbPixelFormatBayerBG12Packed:
-        case VmbPixelFormatBayerGR12p:
-        case VmbPixelFormatBayerRG12p:
-        case VmbPixelFormatBayerGB12p:
-        case VmbPixelFormatBayerBG12p:
-        case VmbPixelFormatRgb12:
-            return 12;
-        case VmbPixelFormatMono14:
-            return 14;
-        case VmbPixelFormatMono16:
-        case VmbPixelFormatBayerGR16:
-        case VmbPixelFormatBayerRG16:
-        case VmbPixelFormatBayerGB16:
-        case VmbPixelFormatBayerBG16:
-        case VmbPixelFormatRgb16:
-            return 16;
-        }
-    }
-    inline bool IsRawPixelFormat(VmbPixelFormatType pf)
-    {
-        switch( pf)
-        {
-        default:
-            return false;
-        case VmbPixelFormatBayerGR8:
-        case VmbPixelFormatBayerRG8:
-        case VmbPixelFormatBayerGB8:
-        case VmbPixelFormatBayerBG8:
-        case VmbPixelFormatBayerGR10:
-        case VmbPixelFormatBayerRG10:
-        case VmbPixelFormatBayerGB10:
-        case VmbPixelFormatBayerBG10:
-        case VmbPixelFormatBayerGR10p:
-        case VmbPixelFormatBayerRG10p:
-        case VmbPixelFormatBayerGB10p:
-        case VmbPixelFormatBayerBG10p:
-        case VmbPixelFormatBayerGR12:
-        case VmbPixelFormatBayerRG12:
-        case VmbPixelFormatBayerGB12:
-        case VmbPixelFormatBayerBG12:
-        case VmbPixelFormatBayerGR12Packed:
-        case VmbPixelFormatBayerRG12Packed:
-        case VmbPixelFormatBayerGB12Packed:
-        case VmbPixelFormatBayerBG12Packed:
-        case VmbPixelFormatBayerGR12p:
-        case VmbPixelFormatBayerRG12p:
-        case VmbPixelFormatBayerGB12p:
-        case VmbPixelFormatBayerBG12p:
-        case VmbPixelFormatBayerGR16:
-        case VmbPixelFormatBayerRG16:
-        case VmbPixelFormatBayerGB16:
-        case VmbPixelFormatBayerBG16:
-            return true;
-        }
-    }
-    inline VmbPixelFormatType GetCompatibleMonoPixelFormatForRaw( VmbPixelFormatType pf)
-    {
-        if(! IsRawPixelFormat( pf) )
-            throw vimba_transform_exception(__FUNCTION__,"call for non raw format", VmbErrorBadParameter);
-        switch( 0xff&(pf>>16) )
-        {
-        default:
-            throw vimba_transform_exception( __FUNCTION__," not supported mono type", VmbErrorBadParameter);
-        case 8:
-            return VmbPixelFormatMono8;
-        case 10:
-            return VmbPixelFormatMono10p;
-        case 12:
-            return VmbPixelFormatMono12Packed;
-        case 16:
-            switch( GetUsedBits( pf) )
-            {
-            default:
-                return VmbPixelFormatMono16;
-            case 10:
-                return VmbPixelFormatMono10;
-            case 12:
-                return VmbPixelFormatMono12;
-            case 14: 
-                return VmbPixelFormatMono14;
-            }
-        }
-    }
-    //
-    // default empty image traits
-    //
-    template<typename IMAGE_TYPE>  struct image_traits{};
-    //
-    // CImage traits only available if ATL Image is available
-    //
-#ifdef _ATL_VER
-    template<> struct image_traits<CImage>
-    {
-        static bool IsNull(const CImage &img)
-        {
-            return img.IsNull();
-        }
-        static int Width(const CImage &img)
-        {
-            return img.GetWidth();
-        }
-        static int Hight(const CImage &img)
-        {
-            return img.GetHeight();
-        }
-        static int BitsPerPixel( const CImage &img)
-        {
-            return img.GetBPP();
-        }
-        static void* DataBegin( CImage &img)
-        {
-            return img.GetBits();
-        }
-        static int Pitch(const CImage &img)
-        {
-            return img.GetPitch();
-        }
-        static size_t ByteCount( const CImage &img)
-        {
-            int pitch,h;
-            pitch   = img.GetPitch();
-            if( pitch < 0)
-            {
-                pitch =-pitch;
-            }
-            h       = img.GetHeight();
-            return  pitch*h;
-        }
-    };
-#endif
-    // 
-    // QImage traits only available if QT is available
-    //
-#ifdef QT_VERSION
-    template<> struct image_traits<QImage>
-    {
-        static bool IsNull(const QImage &img)
-        {
-            return img.isNull();
-        }
-        static int Width(const QImage &img)
-        {
-            return img.width();
-        }
-        static int Hight(const QImage &img)
-        {
-            return img.height();
-        }
-        static int BitsPerPixel( const QImage &img)
-        {
-            switch( img.format() )
-            {
-            case QImage::Format_Indexed8:   return 8;
-            case QImage::Format_RGB888:     return 24;
-            case QImage::Format_ARGB32:     return 32;
-            case QImage::Format_RGB32:      return 32;
-            default: return 0;
-            }
-        }
-        static void* DataBegin( QImage &img)
-        {
-            return img.bits();
-        }
-        static int Pitch(const QImage &img)
-        {
-            return img.bytesPerLine();
-        }
-        static size_t ByteCount( const QImage &img)
-        {
-            return  img.byteCount();
-        }
-    };
-#endif
-
-    template <typename IMAGE_TYPE>
-    VmbError_t VmbImageTransform( IMAGE_TYPE & Dst, VmbVoidPtr_t Src, VmbUint32_t w, VmbUint32_t h,VmbPixelFormat_t pf)
-    {
-        VmbError_t Result;
-        typedef image_traits<IMAGE_TYPE> image_traits_;
-        if( image_traits_::IsNull( Dst) )
-        {
-            return VmbErrorBadParameter;
-        }
-        VmbImage                    source_image;
-        VmbImage                    destination_image;
-        source_image.Size       =   sizeof(source_image);
-        destination_image.Size  =   sizeof(destination_image);
-        Result = VmbSetImageInfoFromPixelFormat( pf,w ,h , &source_image );
-        if( VmbErrorSuccess != Result)
-        {
-            return Result;
-        }
-        
-        VmbUint32_t     dst_bits_per_pixel = image_traits_::BitsPerPixel( Dst);
-        std::string name;
-        switch( dst_bits_per_pixel )
-        {
-        default:
-            return VmbErrorBadParameter;
-        case 8:
-            name = "Mono8_REC601";
-            break;
-        case 24:
-            name = "BGR24";
-            break;
-        case 32:
-            name = "BGRA32";
-            break;
-        }
-        Result = VmbSetImageInfoFromString(     name.c_str(), 
-                                                static_cast<VmbUint32_t>( name.size() ), 
-                                                static_cast<VmbUint32_t> ( image_traits_::Width(Dst) ),
-                                                static_cast<VmbUint32_t> ( image_traits_::Hight(Dst) ),
-                                                &destination_image);
-        source_image.Data       = Src;
-        destination_image.Data  = image_traits_::DataBegin(Dst);
-        return VmbImageTransform( &source_image,&destination_image,NULL,0 );
-    }
-
-    //
-    // Method:    VmbImageTransform()
-    //
-    // Purpose:   convert FRAME_TYPE to IMAGE_TYPE
-    //
-    // Parameters:
-    //  [in,out]    Dst    destination image with matching dimensions and set pixel format type with concept image_traits
-    //  [in]        Src    source frame that exposes width,height,buffer,pixelFormat members
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorBadParameter:  if any parameter is invalid or not supported
-    //
-    // Details:   On successful return, the API is initialized; this is a necessary call.
-    //
-    //
-    template <typename IMAGE_TYPE,typename FRAME_TYPE>
-    VmbError_t VmbImageTransform( IMAGE_TYPE & Dst,const FRAME_TYPE * frame)
-    {
-        if( NULL == frame)
-        {
-            return VmbErrorBadParameter;
-        }
-        return VmbImageTransform( Dst, frame->buffer,frame->width, frame->height,frame->pixelFormat);
-    }
-}
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Examples/VimbaViewer/Source/memcpy_threaded.h b/VimbaCPP/Examples/VimbaViewer/Source/memcpy_threaded.h
deleted file mode 100644
index df4802032169b9caff0ca160a2b73199ef7ec796..0000000000000000000000000000000000000000
--- a/VimbaCPP/Examples/VimbaViewer/Source/memcpy_threaded.h
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef MEMCPY_THREADED_H_
-#define MEMCPY_THREADED_H_
-
-#include <cstring>
-
-#include <QFuture>
-#include <QFutureSynchronizer>
-#include <QtConcurrentRun>
-/** runable for memcopy/memmove 
-*/
-struct copy_runable
-{
-    void*       m_Src;      // source data pointer
-    void*       m_Dst;      // destination data pointer
-    size_t      m_Size;     // size to copy
-    /** run will execute the memcopy.
-    */
-    void run( ) const
-    {
-        std::memmove( m_Dst, m_Src, m_Size );
-    }
-};
-/** thread function for a copy
-*/
-inline void copy_fun(copy_runable* prm)
-{
-    prm->run();
-}
-/** multi threaded mem copy
-*/
-template <size_t THREAD_COUNT>
-inline void memcpy_threaded( void *dst,void*src, size_t len)
-{
-    if( len <= 0x200000) // if within L3 cache size use memcopy
-    {
-        std::memmove( dst, src, len);
-        return;
-    }
-    size_t                      copy_len = len/THREAD_COUNT;
-    copy_runable                prm[THREAD_COUNT];
-    QFutureSynchronizer<void>   RoadBlock;
-    for( size_t i = 0; i < THREAD_COUNT; ++ i)
-    {
-        prm[i].m_Src    = src;
-        prm[i].m_Dst    = dst;
-        prm[i].m_Size   = copy_len;
-
-        RoadBlock.addFuture( QtConcurrent::run( copy_fun, &prm[i]) );
-
-        src             = (char*)src + copy_len;
-        dst             = (char*)dst + copy_len;
-        len            -= copy_len;
-        if( len < copy_len)
-        {
-            copy_len = len;
-        }
-    }
-    RoadBlock.waitForFinished();
-}
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Include/AncillaryData.h b/VimbaCPP/Include/AncillaryData.h
deleted file mode 100644
index 142b17c90d5ad7345c07c9681767b13c3b951a20..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/AncillaryData.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        AncillaryData.h
-
-  Description: Definition of class AVT::VmbAPI::AncillaryData.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_ANCILLARYDATA_H
-#define AVT_VMBAPI_ANCILLARYDATA_H
-
-#include <VimbaC/Include/VmbCommonTypes.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/FeatureContainer.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class AncillaryData : public FeatureContainer 
-{
-  public:
-    AncillaryData( VmbFrame_t *pFrame );
-    ~AncillaryData();
-
-    //
-    // Method:      Open()
-    //
-    // Purpose:     Opens the ancillary data to allow access to the elements of the ancillary data via feature access.
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //
-    // Details:     This function can only succeed if the given frame has been filled by the API.
-    //    
-    IMEXPORT VmbErrorType Open();
-
-    //
-    // Method:      Close()
-    //
-    // Purpose:     Closes the ancillary data inside a frame.
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:     The given handle is not valid
-    //
-    // Details:     After reading the ancillary data and before re-queuing the frame, ancillary data
-    //              must be closed.
-    //
-    IMEXPORT VmbError_t Close();
-
-    //
-    // Method:      GetBuffer()
-    //
-    // Purpose:     Returns the underlying buffer
-    //
-    // Parameters:  [out]       VmbUchar_t*&        pBuffer     A pointer to the buffer
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetBuffer( VmbUchar_t* &pBuffer );
-
-    //
-    // Method:      GetBuffer()
-    //
-    // Purpose:     Returns the underlying buffer
-    //
-    // Parameters:  [out]       const VmbUchar_t*&  pBuffer     A pointer to the buffer
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetBuffer( const VmbUchar_t* &pBuffer ) const;
-
-    //
-    // Method:      GetSize()
-    //
-    // Purpose:     Returns the size of the underlying buffer
-    //
-    // Parameters:  [out]       VmbUint32_t&        size    The size of the buffer
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetSize( VmbUint32_t &size ) const;
-
-  private:
-    struct Impl;
-    Impl *m_pImpl;
-
-    // No default ctor
-    AncillaryData();
-    // No copy ctor
-    AncillaryData( const AncillaryData& );
-    // No assignment operator
-    AncillaryData& operator=( const AncillaryData& );
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/BasicLockable.h b/VimbaCPP/Include/BasicLockable.h
deleted file mode 100644
index 37f8a093112b13f5c6c366901c46177736818e9e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/BasicLockable.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        BasicLockable.h
-
-  Description: Definition of class AVT::VmbAPI::BasicLockable.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_BASICLOCKABLE
-#define AVT_VMBAPI_BASICLOCKABLE
-
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Include/Mutex.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class BasicLockable
-{
-  public:
-    IMEXPORT BasicLockable();
-    IMEXPORT BasicLockable( MutexPtr pMutex );
-
-    IMEXPORT virtual ~BasicLockable();
-
-    MutexPtr& GetMutex();
-    const MutexPtr& GetMutex() const;
-
-    void Lock()
-    {
-        SP_ACCESS(m_pMutex)->Lock();
-    }
-    void Unlock()
-    {
-        SP_ACCESS(m_pMutex)->Unlock();
-    }
-  private:
-    MutexPtr m_pMutex;
-};
-
-}} //namespace AVT::VmbAPI
-
-#endif 
\ No newline at end of file
diff --git a/VimbaCPP/Include/Camera.h b/VimbaCPP/Include/Camera.h
deleted file mode 100644
index 24d878442b87a5a3d95f712c2246a50244e36ab3..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/Camera.h
+++ /dev/null
@@ -1,636 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Camera.h
-
-  Description: Definition of class AVT::VmbAPI::Camera.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_CAMERA_H
-#define AVT_VMBAPI_CAMERA_H
-
-#include <vector>
-#include <string>
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/IRegisterDevice.h>
-#include <VimbaCPP/Include/FeatureContainer.h>
-#include <VimbaCPP/Include/Frame.h>
-#include <VimbaCPP/Include/IFrameObserver.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-typedef std::vector<CameraPtr> CameraPtrVector;
-
-class Camera : public FeatureContainer, public IRegisterDevice 
-{
-  public:
-    //
-    // Method:      Camera constructor
-    //
-    // Purpose:     Creates an instance of class Camera
-    //
-    // Parameters:
-    //
-    // [in ]    const char*      pID            The ID of the camera    
-    // [in ]    const char*      pName          The name of the camera
-    // [in ]    const char*      pModel         The model name of the camera
-    // [in ]    const char*      pSerialNumber  The serial number of the camera
-    // [in ]    const char*      pInterfaceID   The ID of the interface the camera is connected to
-    // [in ]    VmbInterfaceType interfaceType  The type of the interface the camera is connected to
-    //
-    // Details:   The ID of the camera may be, among others, one of the following: "169.254.12.13",
-    //            "000f31000001", a plain serial number: "1234567890", or the device ID 
-    //            of the underlying transport layer.
-    //
-    IMEXPORT Camera(    const char *pID,
-                        const char *pName,
-                        const char *pModel,
-                        const char *pSerialNumber,
-                        const char *pInterfaceID,
-                        VmbInterfaceType interfaceType );
-
-    //
-    // Method:      Camera destructor
-    //
-    // Purpose:     Destroys an instance of class Camera
-    //
-    // Details:     Destroying a camera implicitly closes it beforehand.
-    //
-    IMEXPORT virtual ~Camera();
-
-    //
-    // Method:      Open()
-    //
-    // Purpose:     Opens the specified camera.
-    //
-    // Parameters:
-    //
-    //  [in ]  VmbAccessMode_t  accessMode      Access mode determines the level of control you have on the camera
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorNotFound:      The designated camera cannot be found
-    //  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-    //
-    // Details:   A camera may be opened in a specific access mode. This mode determines
-    //            the level of control you have on a camera.
-    //  
-    IMEXPORT virtual VmbErrorType Open( VmbAccessModeType accessMode );
-
-    //
-    // Method:      Close()
-    //
-    // Purpose:     Closes the specified camera.
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //
-    // Details:     Depending on the access mode this camera was opened in, events are killed,
-    //              callbacks are unregistered, the frame queue is cleared, and camera control is released.
-    //
-    IMEXPORT virtual VmbErrorType Close();
-
-    //
-    // Method:      GetID()
-    //
-    // Purpose:     Gets the ID of a camera.
-    //
-    // Parameters:  [out]   std::string&     cameraID         The ID of the camera
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    //              This information remains static throughout the object's lifetime
-    //
-    VmbErrorType GetID( std::string &cameraID ) const;
-
-    //
-    // Method:      GetName()
-    //
-    // Purpose:     Gets the name of a camera.
-    //
-    // Parameters:  [out]   std::string&     name         The name of the camera
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    //              This information remains static throughout the object's lifetime
-    //
-    VmbErrorType GetName( std::string &name ) const;
-    
-    //
-    // Method:      GetModel()
-    //
-    // Purpose:     Gets the model name of a camera.
-    //
-    // Parameters:  [out]   std::string&     model         The model name of the camera
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    //              This information remains static throughout the object's lifetime
-    //
-    VmbErrorType GetModel( std::string &model ) const;
-
-    //
-    // Method:      GetSerialNumber()
-    //
-    // Purpose:     Gets the serial number of a camera.
-    //
-    // Parameters:  [out]   std::string&     serialNumber         The serial number of the camera
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    //              This information remains static throughout the object's lifetime
-    //
-    VmbErrorType GetSerialNumber( std::string &serialNumber ) const;
-
-    //
-    // Method:      GetInterfaceID()
-    //
-    // Purpose:     Gets the interface ID of a camera.
-    //
-    // Parameters:  [out]   std::string&     interfaceID         The interface ID of the camera
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    //              This information remains static throughout the object's lifetime
-    //
-    VmbErrorType GetInterfaceID( std::string &interfaceID ) const;
-
-    //
-    // Method:      GetInterfaceType()
-    //
-    // Purpose:     Gets the type of the interface the camera is connected to. And therefore the type of the camera itself.
-    //
-    // Parameters:  [out]   VmbInterfaceType&    interfaceType The interface type of the camera
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    IMEXPORT VmbErrorType GetInterfaceType( VmbInterfaceType &interfaceType ) const;
-
-    //
-    // Method:      GetPermittedAccess()
-    //
-    // Purpose:     Gets the access modes of a camera.
-    //
-    // Parameters:  [out]   VmbAccessModeType&   permittedAccess The possible access modes of the camera
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    IMEXPORT VmbErrorType GetPermittedAccess( VmbAccessModeType &permittedAccess ) const;
-
-    //
-    // Method:      ReadRegisters()
-    //
-    // Purpose:     Reads one or more registers consecutively. The number of registers to read is determined by the number of provided addresses.
-    //
-    // Parameters:  [in ]   const Uint64Vector&   addresses  A list of register addresses
-    //              [out]   Uint64Vector&         buffer     The returned data as vector
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested registers have been read
-    //  - VmbErrorBadParameter: Vectors "addresses" and/or "buffer" are empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all registers have been read. See overload ReadRegisters( const Uint64Vector&, Uint64Vector&, VmbUint32_t& ).
-    //
-    virtual VmbErrorType ReadRegisters( const Uint64Vector &addresses, Uint64Vector &buffer ) const;
-    
-    //
-    // Method:      ReadRegisters()
-    //
-    // Purpose:     Same as ReadRegisters( const Uint64Vector&, Uint64Vector& ), but returns the number of successful read operations in case of an error.
-    //
-    // Parameters:  [in ]   const Uint64Vector&   addresses       A list of register addresses
-    //              [out]   Uint64Vector&         buffer          The returned data as vector
-    //              [out]   VmbUint32_t&          completedReads  The number of successfully read registers
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested registers have been read
-    //  - VmbErrorBadParameter: Vectors "addresses" and/or "buffer" are empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all registers have been read.
-    //
-    virtual VmbErrorType ReadRegisters( const Uint64Vector &addresses, Uint64Vector &buffer, VmbUint32_t &completedReads ) const;
-    
-    //
-    // Method:      WriteRegisters()
-    //
-    // Purpose:     Writes one or more registers consecutively. The number of registers to write is determined by the number of provided addresses.
-    //
-    // Parameters:  [in]    const Uint64Vector&     addresses  A list of register addresses
-    //              [in]    const Uint64Vector&     buffer     The data to write as vector
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested registers have been written
-    //  - VmbErrorBadParameter: Vectors "addresses" and/or "buffer" are empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all registers have been written. See overload WriteRegisters( const Uint64Vector&, const Uint64Vector&, VmbUint32_t& ).
-    //
-    virtual VmbErrorType WriteRegisters( const Uint64Vector &addresses, const Uint64Vector &buffer );
-
-    //
-    // Method:      WriteRegisters()
-    //
-    // Purpose:     Same as WriteRegisters( const Uint64Vector&, const Uint64Vector& ), but returns the number of successful write operations in case of an error.
-    //
-    // Parameters:  [in ]   const Uint64Vector&   addresses        A list of register addresses
-    //              [in ]   const Uint64Vector&   buffer           The data to write as vector
-    //              [out]   VmbUint32_t&          completedWrites  The number of successfully read registers
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested registers have been written
-    //  - VmbErrorBadParameter: Vectors "addresses" and/or "buffer" are empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all registers have been written.
-    //
-    virtual VmbErrorType WriteRegisters( const Uint64Vector &addresses, const Uint64Vector &buffer, VmbUint32_t &completedWrites );
-
-    //
-    // Method:      ReadMemory()
-    //
-    // Purpose:     Reads a block of memory. The number of bytes to read is determined by the size of the provided buffer.
-    //
-    // Parameters:  [in ]   const VmbUint64_t&   address    The address to read from
-    //              [out]   UcharVector&         buffer     The returned data as vector
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested bytes have been read
-    //  - VmbErrorBadParameter: Vector "buffer" is empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all bytes have been read. See overload ReadMemory( const VmbUint64_t&, UcharVector&, VmbUint32_t& ).
-    //
-    virtual VmbErrorType ReadMemory( const VmbUint64_t &address, UcharVector &buffer ) const;
-
-    //
-    // Method:      ReadMemory()
-    //
-    // Purpose:     Same as ReadMemory( const Uint64Vector&, UcharVector& ), but returns the number of bytes successfully read in case of an error VmbErrorIncomplete.
-    //
-    // Parameters:  [in]    const VmbUint64_t&   address        The address to read from
-    //              [out]   UcharVector&         buffer         The returned data as vector
-    //              [out]   VmbUint32_t&         completeReads  The number of successfully read bytes
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested bytes have been read
-    //  - VmbErrorBadParameter: Vector "buffer" is empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all bytes have been read.
-    //
-    virtual VmbErrorType ReadMemory( const VmbUint64_t &address, UcharVector &buffer, VmbUint32_t &completeReads ) const;
-
-    //
-    // Method:      WriteMemory()
-    //
-    // Purpose:     Writes a block of memory. The number of bytes to write is determined by the size of the provided buffer.
-    //
-    // Parameters:  [in]    const VmbUint64_t&   address    The address to write to
-    //              [in]    const UcharVector&   buffer     The data to write as vector
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested bytes have been written
-    //  - VmbErrorBadParameter: Vector "buffer" is empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all bytes have been written. See overload WriteMemory( const VmbUint64_t&, const UcharVector&, VmbUint32_t& ).
-    //
-    virtual VmbErrorType WriteMemory( const VmbUint64_t &address, const UcharVector &buffer );
-
-    //
-    // Method:      WriteMemory()
-    //
-    // Purpose:     Same as WriteMemory( const Uint64Vector&, const UcharVector& ), but returns the number of bytes successfully written in case of an error VmbErrorIncomplete.
-    //
-    // Parameters:  [in]    const VmbUint64_t&   address        The address to write to
-    //              [in]    const UcharVector&   buffer         The data to write as vector
-    //              [out]   VmbUint32_t&         sizeComplete   The number of successfully written bytes
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested bytes have been written
-    //  - VmbErrorBadParameter: Vector "buffer" is empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all bytes have been written.
-    //
-    virtual VmbErrorType WriteMemory( const VmbUint64_t &address, const UcharVector &buffer, VmbUint32_t &sizeComplete );
-
-    //
-    // Method:      AcquireSingleImage()
-    //
-    // Purpose:     Gets one image synchronously.
-    //
-    // Parameters:  [out]   FramePtr&              pFrame          The frame that gets filled
-    //              [in ]   VmbUint32_t            timeout         The time to wait until the frame got filled
-    //              [in ]   FrameAllocationMode    allocationMode  The frame allocation mode
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If no error
-    //  - VmbErrorBadParameter: "pFrame" is NULL.
-    //  - VmbErrorTimeout:      Call timed out
-    //
-    IMEXPORT VmbErrorType AcquireSingleImage( FramePtr &pFrame, VmbUint32_t timeout, FrameAllocationMode allocationMode = FrameAllocation_AnnounceFrame );
-
-    //
-    // Method:      AcquireMultipleImages()
-    //
-    // Purpose:     Gets a certain number of images synchronously.
-    //
-    // Parameters:  [out]   FramePtrVector&        frames          The frames that get filled
-    //              [in ]   VmbUint32_t            timeout         The time to wait until one frame got filled
-    //              [in ]   FrameAllocationMode    allocationMode  The frame allocation mode
-    //
-    // Details:     The size of the frame vector determines the number of frames to use.
-    //
-    // Returns:
-    //  - VmbErrorSuccess:          If no error
-    //  - VmbErrorInternalFault:    Filling all the frames was not successful.
-    //  - VmbErrorBadParameter:     Vector "frames" is empty.
-    //
-    VmbErrorType AcquireMultipleImages( FramePtrVector &frames, VmbUint32_t timeout, FrameAllocationMode allocationMode = FrameAllocation_AnnounceFrame );
-
-    //
-    // Method:      AcquireMultipleImages()
-    //
-    // Purpose:     Same as AcquireMultipleImages(FramePtrVector&, VmbUint32_t), but returns the number of frames that were filled completely.
-    //
-    // Parameters:  [out]   FramePtrVector&        frames              The frames that get filled
-    //              [in ]   VmbUint32_t            timeout             The time to wait until one frame got filled
-    //              [out]   VmbUint32_t&           numFramesCompleted  The number of frames that were filled completely
-    //              [in ]   FrameAllocationMode    allocationMode      The frame allocation mode
-    //
-    // Details:     The size of the frame vector determines the number of frames to use.
-    //              On return, "numFramesCompleted" holds the number of frames actually filled.
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If no error
-    //  - VmbErrorBadParameter: Vector "frames" is empty.
-    //
-    VmbErrorType AcquireMultipleImages( FramePtrVector &frames, VmbUint32_t timeout, VmbUint32_t &numFramesCompleted, FrameAllocationMode allocationMode = FrameAllocation_AnnounceFrame );
-
-    //
-    // Method:      StartContinuousImageAcquisition()
-    //
-    // Purpose:     Starts streaming and allocates the needed frames
-    //
-    // Parameters:  [in ]   int                         bufferCount    The number of frames to use
-    //              [out]   const IFrameObserverPtr&    pObserver      The observer to use on arrival of new frames
-    //              [in]    FrameAllocationMode         allocationMode The frame allocation mode
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:        If no error
-    //  - VmbErrorDeviceNotOpen:  The camera has not been opened before
-    //  - VmbErrorApiNotStarted:  VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:      The given handle is not valid
-    //  - VmbErrorInvalidAccess:  Operation is invalid with the current access mode
-    //
-    IMEXPORT VmbErrorType StartContinuousImageAcquisition( int bufferCount, const IFrameObserverPtr &pObserver, FrameAllocationMode allocationMode = FrameAllocation_AnnounceFrame );
-
-    //
-    // Method:      StopContinuousImageAcquisition()
-    //
-    // Purpose:     Stops streaming and deallocates the needed frames
-    //
-    IMEXPORT VmbErrorType StopContinuousImageAcquisition();
-
-    //
-    // Method:      AnnounceFrame()
-    //
-    // Purpose:     Announces a frame to the API that may be queued for frame capturing later.
-    //
-    // Parameters:
-    //
-    //  [in ]  const FramePtr&    pFrame         Shared pointer to a frame to announce
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:     The given handle is not valid
-    //  - VmbErrorBadParameter:  "pFrame" is NULL.
-    //  - VmbErrorStructSize:    The given struct size is not valid for this version of the API
-    //
-    // Details:     Allows some preparation for frames like DMA preparation depending on the transport layer.
-    //              The order in which the frames are announced is not taken in consideration by the API.
-    //
-    IMEXPORT VmbErrorType AnnounceFrame( const FramePtr &pFrame );
-    
-    //
-    // Method:      RevokeFrame()
-    //
-    // Purpose:     Revoke a frame from the API.
-    //
-    // Parameters:
-    //
-    //  [in ]  const FramePtr&    pFrame         Shared pointer to a frame that is to be removed from the list of announced frames
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:     The given frame pointer is not valid
-    //  - VmbErrorBadParameter:  "pFrame" is NULL.
-    //  - VmbErrorStructSize:    The given struct size is not valid for this version of the API
-    //
-    // Details:    The referenced frame is removed from the pool of frames for capturing images.
-    //
-    IMEXPORT VmbErrorType RevokeFrame( const FramePtr &pFrame );
-
-    //
-    // Method:      RevokeAllFrames()
-    //
-    // Purpose:     Revoke all frames assigned to this certain camera.
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:     The given handle is not valid
-    //
-    IMEXPORT VmbErrorType RevokeAllFrames();
-    
-    //
-    // Method:      QueueFrame()
-    //
-    // Purpose:     Queues a frame that may be filled during frame capturing.
-    //
-    // Parameters:
-    //
-    //  [in ]  const FramePtr&    pFrame    A shared pointer to a frame
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:     The given frame is not valid
-    //  - VmbErrorBadParameter:  "pFrame" is NULL.
-    //  - VmbErrorStructSize:    The given struct size is not valid for this version of the API
-    //  - VmbErrorInvalidCall:   StopContinuousImageAcquisition is currently running in another thread
-    //
-    // Details:     The given frame is put into a queue that will be filled sequentially.
-    //              The order in which the frames are filled is determined by the order in which they are queued.
-    //              If the frame was announced with AnnounceFrame() before, the application
-    //              has to ensure that the frame is also revoked by calling RevokeFrame() or RevokeAll()
-    //              when cleaning up.
-    //
-    IMEXPORT VmbErrorType QueueFrame( const FramePtr &pFrame );
-
-    //
-    // Method:      FlushQueue()
-    //
-    // Purpose:     Flushes the capture queue.
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:     The given handle is not valid
-    //
-    // Details:     All the currently queued frames will be returned to the user, leaving no frames in the input queue.
-    //              After this call, no frame notification will occur until frames are queued again.
-    //
-    IMEXPORT VmbErrorType FlushQueue();
-    
-    //
-    // Method:      StartCapture()
-    //
-    // Purpose:     Prepare the API for incoming frames from this camera.
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:     The given handle is not valid
-    //  - VmbErrorDeviceNotOpen: Camera was not opened for usage
-    //  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-    //
-    IMEXPORT VmbErrorType StartCapture();
-
-    //
-    // Method:      EndCapture()
-    //
-    // Purpose:     Stop the API from being able to receive frames from this camera.
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:     The given handle is not valid
-    //
-    // Details:     Consequences of VmbCaptureEnd():
-    //                  - The frame queue is flushed
-    //                  - The frame callback will not be called any more
-    //
-    IMEXPORT VmbErrorType EndCapture();
-
-    //
-    // Method:      SaveCameraSettings()
-    //
-    // Purpose:     Saves the current camera setup to an XML file
-    //
-    // Parameters:
-    //
-    //  [in ]   std::string                     pStrFileName    xml file name
-    //  [in ]   VmbFeaturePersistSettings_t*    pSettings       pointer to settings struct
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:          If no error
-    //  - VmbErrorApiNotStarted:    VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:        The given handle is not valid
-    //  - VmbErrorInternalFault:    When something unexpected happens in VimbaC function
-    //  - VmbErrorOther:            Every other failure in load/save settings implementation class
-    //
-    VmbErrorType SaveCameraSettings( std::string fileName, VmbFeaturePersistSettings_t *pSettings = 0 ) const;
-
-    //
-    // Method:      LoadCameraSettings()
-    //
-    // Purpose:     Loads the current camera setup from an XML file into the camera
-    //
-    // Parameters:
-    //
-    //  [in] std::string                    pStrFileName    xml file name
-    //  [in] VmbFeaturePersistSettings_t*   pSettings       pointer to settings struct
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:          If no error
-    //  - VmbErrorApiNotStarted:    VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:        The given handle is not valid
-    //  - VmbErrorInternalFault:    When something unexpected happens in VimbaC function
-    //  - VmbErrorOther:            Every other failure in load/save settings implementation class
-    //
-    VmbErrorType LoadCameraSettings( std::string fileName, VmbFeaturePersistSettings_t *pSettings = 0 ) const;
-
-    //
-    // Method:      LoadSaveSettingsSetup()
-    //
-    // Purpose:     Sets Load/Save settings behaviour (alternative to settings struct)
-    //
-    // Parameters:
-    //
-    //  [in] VmbFeaturePersist_t  persistType    determines which feature shall be considered during load/save settings
-    //  [in] VmbUint32_t          maxIterations  determines how many 'tries' during loading feature values shall be performed
-    //  [in] VmbUint32_t          loggingLevel   determines level of detail for load/save settings logging
-    //
-    IMEXPORT void LoadSaveSettingsSetup( VmbFeaturePersist_t persistType, VmbUint32_t maxIterations, VmbUint32_t loggingLevel );
-
-  private:
-    // Default ctor
-    Camera();
-
-    // Copy ctor
-    Camera ( const Camera& );
-
-    // Assignment operator
-    Camera& operator=( const Camera& );
-
-    struct Impl;
-    Impl *m_pImpl;
-
-    // Array functions to pass data across DLL boundaries
-    IMEXPORT VmbErrorType GetID( char * const pID, VmbUint32_t &length ) const;
-    IMEXPORT VmbErrorType GetName( char * const pName, VmbUint32_t &length ) const;
-    IMEXPORT VmbErrorType GetModel( char * const pModelName, VmbUint32_t &length ) const;
-    IMEXPORT VmbErrorType GetSerialNumber( char * const pSerial, VmbUint32_t &length ) const;
-    IMEXPORT VmbErrorType GetInterfaceID( char * const pInterfaceID, VmbUint32_t &length ) const;
-    IMEXPORT VmbErrorType AcquireMultipleImages( FramePtr *pFrames, VmbUint32_t size, VmbUint32_t nTimeout, VmbUint32_t *pNumFramesCompleted, FrameAllocationMode allocationMode );
-    IMEXPORT virtual VmbErrorType ReadRegisters( const VmbUint64_t *pAddressArray, VmbUint32_t addressSize, VmbUint64_t *pDataArray, VmbUint32_t *pCompletedReads ) const;
-    IMEXPORT virtual VmbErrorType WriteRegisters( const VmbUint64_t *pAddressArray, VmbUint32_t addressSize, const VmbUint64_t *pDataArray, VmbUint32_t *pCompletedWrites );
-    IMEXPORT virtual VmbErrorType ReadMemory( VmbUint64_t address, VmbUchar_t *pBuffer, VmbUint32_t bufferSize, VmbUint32_t *pSizeComplete ) const;
-    IMEXPORT virtual VmbErrorType WriteMemory( VmbUint64_t address, const VmbUchar_t *pBuffer, VmbUint32_t bufferSize, VmbUint32_t *pSizeComplete );
-    IMEXPORT VmbErrorType SaveCameraSettings( const char * const pStrFileName, VmbFeaturePersistSettings_t *pSettings ) const;
-    IMEXPORT VmbErrorType LoadCameraSettings( const char * const pStrFileName, VmbFeaturePersistSettings_t *pSettings ) const;
-
-    VmbFeaturePersist_t m_persistType;
-    VmbUint32_t m_maxIterations;
-    VmbUint32_t m_loggingLevel;
-};
-
-#include <VimbaCPP/Include/Camera.hpp>
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/Camera.hpp b/VimbaCPP/Include/Camera.hpp
deleted file mode 100644
index 713d6fb1338d9fd1f9031999a18be51d6f881146..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/Camera.hpp
+++ /dev/null
@@ -1,317 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Camera.hpp
-
-  Description: Inline wrapper functions for class AVT::VmbAPI::Camera.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_CAMERA_HPP
-#define AVT_VMBAPI_CAMERA_HPP
-
-//
-// Inline wrapper functions that allocate memory for STL objects in the application's context
-// and to pass data across DLL boundaries using arrays
-//
-
-// HINT: This information remains static throughout the object's lifetime
-inline VmbErrorType Camera::GetID( std::string &rStrID ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetID( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type>tmpID( nLength + 1,'\0');
-                res = GetID( &tmpID[0], nLength );
-                if( VmbErrorSuccess == res)
-                {
-                    rStrID  = &*tmpID.begin();
-                }
-            }
-            catch(...)
-            {
-                res = VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrID.clear();
-        }
-    }
-
-    return res;
-}
-
-// HINT: This information remains static throughout the object's lifetime
-inline VmbErrorType Camera::GetName( std::string &rStrName ) const
-{
-    VmbErrorType res;
-    VmbUint32_t nLength;
-
-    res = GetName( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if( 0 != nLength)
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpName( nLength + 1,'\0' );
-                res  = GetName( &tmpName[0], nLength );
-                if( VmbErrorSuccess == res)
-                {
-                    rStrName    = &*tmpName.begin();
-                }
-            }
-            catch(...)
-            {
-                res = VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrName.clear();
-        }
-    }
-
-    return res;
-}
-
-// HINT: This information remains static throughout the object's lifetime
-inline VmbErrorType Camera::GetModel( std::string &rStrModel ) const
-{
-    VmbErrorType res;
-    VmbUint32_t nLength;
-
-    res = GetModel( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if( 0 != nLength)
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpModel( nLength + 1,'\0');
-                res = GetModel( &tmpModel[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrModel   = &*tmpModel.begin();
-                }
-            }
-            catch(...)
-            {
-                res = VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrModel.clear();
-        }
-    }
-
-    return res;
-}
-
-// HINT: This information remains static throughout the object's lifetime
-inline VmbErrorType Camera::GetSerialNumber( std::string &rStrSerial ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetSerialNumber( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpSerial( nLength + 1,'\0');
-                res = GetSerialNumber( &tmpSerial[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrSerial  = &*tmpSerial.begin();
-                }
-            }
-            catch(...)
-            {
-                res = VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrSerial.clear();
-        }
-    }
-
-    return res;
-}
-
-// HINT: This information remains static throughout the object's lifetime
-inline VmbErrorType Camera::GetInterfaceID( std::string &rStrInterfaceID ) const
-{
-    VmbErrorType res;
-    VmbUint32_t nLength;
-
-    res = GetInterfaceID( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpID( nLength + 1,'\0');
-                res = GetInterfaceID( &tmpID[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrInterfaceID = &*tmpID.begin();
-                }
-            }
-            catch(...)
-            {
-                res = VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrInterfaceID.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Camera::AcquireMultipleImages( FramePtrVector &rFrames, VmbUint32_t nTimeout, FrameAllocationMode allocationMode )
-{
-    VmbErrorType res;
-    VmbUint32_t i;
-    res = AcquireMultipleImages( rFrames, nTimeout, i, allocationMode );
-    if ( rFrames.size() != i )
-    {
-        res = VmbErrorInternalFault;
-    }
-    
-    return res;
-}
-inline VmbErrorType Camera::AcquireMultipleImages( FramePtrVector &rFrames, VmbUint32_t nTimeout, VmbUint32_t &rNumFramesCompleted, FrameAllocationMode allocationMode )
-{
-    if ( true == rFrames.empty() )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    return AcquireMultipleImages( &rFrames[0], (VmbUint32_t)rFrames.size(), nTimeout, &rNumFramesCompleted, allocationMode );
-}
-
-// HINT: Size of address determines how many registers to read. Size of data has to be large enough to hold the requested information
-inline VmbErrorType Camera::ReadRegisters( const Uint64Vector &rAddresses, Uint64Vector &rBuffer ) const
-{
-    VmbUint32_t i;
-    return ReadRegisters( rAddresses, rBuffer, i );
-}
-inline VmbErrorType Camera::ReadRegisters( const Uint64Vector &rAddresses, Uint64Vector &rBuffer, VmbUint32_t &rCompletedReads ) const
-{
-    if (    true == rAddresses.empty()
-         || true == rBuffer.empty()
-         || rAddresses.size() > rBuffer.size() )
-    {
-        return VmbErrorBadParameter;
-    }
-    return ReadRegisters( &rAddresses[0], (VmbUint32_t)rAddresses.size(), &rBuffer[0], &rCompletedReads );
-}        
-
-// HINT: Size of address determines how many registers to write.
-inline VmbErrorType Camera::WriteRegisters( const Uint64Vector &rAddresses, const Uint64Vector &rBuffer )
-{
-    VmbUint32_t i;
-    return WriteRegisters( rAddresses, rBuffer, i );
-}
-inline VmbErrorType Camera::WriteRegisters( const Uint64Vector &rAddresses, const Uint64Vector &rBuffer, VmbUint32_t &rCompletedWrites )
-{
-    if (    true == rAddresses.empty()
-         || true == rBuffer.empty()
-         || rAddresses.size() != rBuffer.size() )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    return WriteRegisters( &rAddresses[0], (VmbUint32_t)rAddresses.size(), &rBuffer[0], &rCompletedWrites );
-}
-
-// HINT: Size of buffer determines how many bytes to read.
-inline VmbErrorType Camera::ReadMemory( const VmbUint64_t &rAddress, UcharVector &rBuffer ) const
-{
-    VmbUint32_t i;
-    return ReadMemory( rAddress, rBuffer, i );
-}
-inline VmbErrorType Camera::ReadMemory( const VmbUint64_t &rAddress, UcharVector &rBuffer, VmbUint32_t &rCompletedReads ) const
-{
-    if ( true == rBuffer.empty() )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    return ReadMemory( rAddress, &rBuffer[0], (VmbUint32_t)rBuffer.size(), &rCompletedReads );
-}
-
-// HINT: Size of buffer determines how many bytes to write.
-inline VmbErrorType Camera::WriteMemory( const VmbUint64_t &rAddress, const UcharVector &rBuffer )
-{
-    VmbUint32_t i;
-    return WriteMemory( rAddress, rBuffer, i );
-}
-inline VmbErrorType Camera::WriteMemory( const VmbUint64_t &rAddress, const UcharVector &rBuffer, VmbUint32_t &rCompletedWrites )
-{
-    if ( true == rBuffer.empty() )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    return WriteMemory( rAddress, &rBuffer[0], (VmbUint32_t)rBuffer.size(), &rCompletedWrites );
-}
-
-inline VmbErrorType Camera::SaveCameraSettings( std::string strFileName, VmbFeaturePersistSettings_t *pSettings ) const
-{
-//  parameter check
-    if( true == strFileName.empty() )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    return SaveCameraSettings( strFileName.c_str(), pSettings );
-}
-
-inline VmbErrorType Camera::LoadCameraSettings( std::string strFileName, VmbFeaturePersistSettings_t *pSettings ) const
-{
-//  parameter check
-    if( true == strFileName.empty() )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    return LoadCameraSettings( strFileName.c_str(), pSettings );
-}
-
-#endif
diff --git a/VimbaCPP/Include/EnumEntry.h b/VimbaCPP/Include/EnumEntry.h
deleted file mode 100644
index 305699c587757214910e37480812149dc2f9491f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/EnumEntry.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        EnumEntry.h
-
-  Description:  Definition of class AVT::VmbAPI::EnumEntry.
-                An EnumEntry consists of
-                Name
-                DisplayName
-                Value
-                of one particular enumeration
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_ENUMENTRY_H
-#define AVT_VMBAPI_ENUMENTRY_H
-
-#include <string>
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class EnumEntry
-{
-  public:
-    //
-    // Method:      EnumEntry constructor
-    //
-    // Purpose:     Creates an instance of class EnumEntry
-    //
-    // Parameters:
-    //
-    // [in ]    const char*             pName           The name of the enum
-    // [in ]    const char*             pDisplayName    The declarative name of the enum
-    // [in ]    const char*             pDescription    The description of the enum
-    // [in ]    const char*             pTooltip        A tooltip that can be used by a GUI
-    // [in ]    const char*             pSNFCNamespace  The SFNC namespace of the enum
-    // [in ]    VmbFeatureVisibility_t  visibility      The visibility of the enum
-    // [in ]    VmbInt64_t              value           The integer value of the enum
-    //
-    EnumEntry(  const char              *pName,
-                const char              *pDisplayName,
-                const char              *pDescription,
-                const char              *pTooltip,
-                const char              *pSNFCNamespace,
-                VmbFeatureVisibility_t  visibility,
-                VmbInt64_t              value);
-
-    //
-    // Method:      EnumEntry constructor
-    //
-    // Purpose:     Creates an instance of class EnumEntry
-    //
-    IMEXPORT EnumEntry();
-    //
-    // Method:      EnumEntry copy constructor
-    //
-    // Purpose:     Creates a copy of class EnumEntry
-    //
-    IMEXPORT EnumEntry( const EnumEntry &other);
-    
-    //
-    // Method:      EnumEntry assignment operator
-    //
-    // Purpose:     assigns EnumEntry to existing instance
-    //
-    IMEXPORT EnumEntry& operator=( const EnumEntry&o);
-
-    //
-    // Method:      EnumEntry destructor
-    //
-    // Purpose:     Destroys an instance of class EnumEntry
-    //
-    IMEXPORT virtual ~EnumEntry();
-
-    //
-    // Method:      GetName()
-    //
-    // Purpose:     Gets the name of an enumeration
-    //
-    // Parameters:
-    //
-    // [out]        std::string& name   The name of the enumeration
-    //
-    VmbErrorType GetName( std::string &name ) const;
-
-    //
-    // Method:      GetDisplayName()
-    //
-    // Purpose:     Gets a more declarative name of an enumeration
-    //
-    // Parameters:
-    //
-    // [out]        std::string& displayName    The display name of the enumeration
-    //
-    VmbErrorType GetDisplayName( std::string &displayName ) const;
-
-    //
-    // Method:      GetDescription()
-    //
-    // Purpose:     Gets the description of an enumeration
-    //
-    // Parameters:
-    //
-    // [out]        std::string& description    The description of the enumeration
-    //
-    VmbErrorType GetDescription( std::string &description ) const;
-
-    //
-    // Method:      GetTooltip()
-    //
-    // Purpose:     Gets a tooltip that can be used as pop up help in a GUI
-    //
-    // Parameters:
-    //
-    // [out]        std::string& tooltip    The tooltip as string
-    //
-    VmbErrorType GetTooltip( std::string &tooltip ) const;
-
-    //
-    // Method:      GetValue()
-    //
-    // Purpose:     Gets the integer value of an enumeration
-    //
-    // Parameters:
-    //
-    // [out]        VmbInt64_t& value   The integer value of the enumeration
-    //
-    IMEXPORT    VmbErrorType GetValue( VmbInt64_t &value ) const;
-
-    //
-    // Method:      GetVisibility()
-    //
-    // Purpose:     Gets the visibility of an enumeration
-    //
-    // Parameters:
-    //
-    // [out]        VmbFeatureVisibilityType&   value   The visibility of the enumeration
-    //
-    IMEXPORT    VmbErrorType GetVisibility( VmbFeatureVisibilityType &value ) const;
-
-    //
-    // Method:      GetSNFCNamespace()
-    //
-    // Purpose:     Gets the standard feature naming convention namespace of the enumeration
-    //
-    // Parameters:
-    //
-    // [out]        std::string& sFNCNamespace    The feature's SFNC namespace
-    //
-    VmbErrorType GetSFNCNamespace( std::string &sFNCNamespace ) const;
-
-  private:
-    struct PrivateImpl;
-    PrivateImpl           *m_pImpl;
-    // Array functions to pass data across DLL boundaries
-    IMEXPORT VmbErrorType GetName( char * const pName, VmbUint32_t &size ) const;
-    IMEXPORT VmbErrorType GetDisplayName( char * const pDisplayName, VmbUint32_t &size ) const;
-    IMEXPORT VmbErrorType GetTooltip( char * const pStrTooltip, VmbUint32_t &size ) const;
-    IMEXPORT VmbErrorType GetDescription( char * const pStrDescription, VmbUint32_t &size ) const;
-    IMEXPORT VmbErrorType GetSFNCNamespace( char * const pStrNamespace, VmbUint32_t &size ) const;
-
-};
-
-#include <VimbaCPP/Include/EnumEntry.hpp>
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/EnumEntry.hpp b/VimbaCPP/Include/EnumEntry.hpp
deleted file mode 100644
index 6f88a8bc34f4d1f9b4cbb4ac8fa299bf4b381711..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/EnumEntry.hpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        EnumEntry.hpp
-
-  Description: Inline wrapper functions for class AVT::VmbAPI::EnumEntry.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_ENUMENTRY_HPP
-#define AVT_VMBAPI_ENUMENTRY_HPP
-
-//
-// Inline wrapper functions that allocate memory for STL objects in the application's context
-// and to pass data across DLL boundaries using arrays
-//
-inline VmbErrorType EnumEntry::GetName( std::string &rStrName ) const
-{
-    VmbErrorType res;
-    VmbUint32_t nLength;
-
-    res = GetName( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpName( nLength + 1, '\0' );
-                res = GetName( &tmpName[0], nLength );
-                if ( VmbErrorSuccess == res )
-                {
-                    rStrName = &*tmpName.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrName.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType EnumEntry::GetDisplayName( std::string &rStrDisplayName ) const
-{
-    VmbErrorType res;
-    VmbUint32_t nLength;
-
-    res = GetDisplayName( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpName( nLength + 1, '\0' );
-                res = GetDisplayName( &tmpName[0], nLength );
-                if ( VmbErrorSuccess == res )
-                {
-                    rStrDisplayName = &*tmpName.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrDisplayName.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType EnumEntry::GetDescription( std::string &rStrDescription ) const
-{
-    VmbErrorType res;
-    VmbUint32_t nLength;
-
-    res = GetDescription( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpDescription( nLength + 1, '\0' );
-                res = GetDescription( &tmpDescription[0], nLength );
-                if ( VmbErrorSuccess == res )
-                {
-                    rStrDescription = &*tmpDescription.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrDescription.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType EnumEntry::GetTooltip( std::string &rStrTooltip ) const
-{
-    VmbErrorType res;
-    VmbUint32_t nLength;
-
-    res = GetTooltip( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpTooltip( nLength + 1, '\0' );
-                res = GetTooltip( &tmpTooltip[0], nLength );
-                if ( VmbErrorSuccess == res )
-                {
-                    rStrTooltip = &*tmpTooltip.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrTooltip.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType EnumEntry::GetSFNCNamespace( std::string &rStrNamespace ) const
-{
-    VmbErrorType res;
-    VmbUint32_t nLength;
-
-    res = GetSFNCNamespace( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpNamespace( nLength + 1, '\0' );
-                res = GetSFNCNamespace( &tmpNamespace[0], nLength );
-                if ( VmbErrorSuccess == res )
-                {
-                    rStrNamespace =&*tmpNamespace.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrNamespace.clear();
-        }
-    }
-
-    return res;
-}
-
-#endif
diff --git a/VimbaCPP/Include/Feature.h b/VimbaCPP/Include/Feature.h
deleted file mode 100644
index 2e076dda6af43063d12eef62863a42b139279bb7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/Feature.h
+++ /dev/null
@@ -1,612 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Feature.h
-
-  Description:  Definition of base class AVT::VmbAPI::Feature.
-                This class wraps every call to BaseFeature resp. its concrete
-                subclass. That way  polymorphism is hidden away from the user.
-                
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_FEATURE_H
-#define AVT_VMBAPI_FEATURE_H
-
-#include <vector>
-#include <map>
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Include/IFeatureObserver.h>
-#include <VimbaCPP/Include/EnumEntry.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class BaseFeature;
-
-typedef std::vector<FeaturePtr> FeaturePtrVector;
-typedef std::map<std::string, FeaturePtr> FeaturePtrMap;
-
-class Feature
-{
-  public:
-    Feature( const VmbFeatureInfo_t *pFeatureInfo, FeatureContainer *pFeatureContainer );
-    virtual ~Feature();
-
-    //
-    // Method:      GetValue()
-    //
-    // Purpose:     Queries the value of a feature of type VmbInt64
-    //
-    // Parameters:
-    //
-    // [out]    VmbInt64_t&     value       The feature's value
-    //
-    IMEXPORT    VmbErrorType GetValue( VmbInt64_t &value ) const;
-    
-    //
-    // Method:      GetValue()
-    //
-    // Purpose:     Queries the value of a feature of type double
-    //
-    // Parameters:
-    //
-    // [out]    double&     value       The feature's value
-    //
-    IMEXPORT    VmbErrorType GetValue( double &value ) const;
-
-    //
-    // Method:      GetValue()
-    //
-    // Purpose:     Queries the value of a feature of type string
-    //
-    // Parameters:
-    //
-    // [out]    std::string&    value       The feature's value
-    //
-    // Details:     When an empty string is returned, its size
-    //              indicates the maximum length
-    VmbErrorType GetValue( std::string &value ) const;
-
-    //
-    // Method:      GetValue()
-    //
-    // Purpose:     Queries the value of a feature of type bool
-    //
-    // Parameters:
-    //
-    // [out]    bool&       value       The feature's value
-    //
-    IMEXPORT    VmbErrorType GetValue( bool &value ) const;
-
-    //
-    // Method:      GetValue()
-    //
-    // Purpose:     Queries the value of a feature of type UcharVector
-    //
-    // Parameters:
-    //
-    // [out]    UcharVector&    value       The feature's value
-    //
-    VmbErrorType GetValue( UcharVector &value ) const;
-
-    //
-    // Method:      GetValue()
-    //
-    // Purpose:     Queries the value of a feature of type const UcharVector
-    //
-    // Parameters:
-    //
-    // [out]    UcharVector&      value       The feature's value
-    // [out]    VmbUint32_t&            sizeFilled  The number of actually received values
-    //
-    VmbErrorType GetValue( UcharVector &value, VmbUint32_t &sizeFilled ) const;
-
-    //
-    // Method:      GetValues()
-    //
-    // Purpose:     Queries the values of a feature of type Int64Vector
-    //
-    // Parameters:
-    //
-    // [out]    Int64Vector&    values       The feature's values
-    //
-    VmbErrorType GetValues( Int64Vector &values );
-
-    //
-    // Method:      GetValues()
-    //
-    // Purpose:     Queries the values of a feature of type StringVector
-    //
-    // Parameters:
-    //
-    // [out]    StringVector&    values       The feature's values
-    //
-    VmbErrorType GetValues( StringVector &values );
-
-    //
-    // Method:      GetEntry()
-    //
-    // Purpose:     Queries a single enum entry of a feature of type Enumeration
-    //
-    // Parameters:
-    //
-    // [out]    EnumEntry&    entry       An enum feature's enum entry
-    // [in ]    const char*   pEntryName  The name of the enum entry
-    //
-    IMEXPORT    VmbErrorType GetEntry( EnumEntry &entry, const char *pEntryName ) const;
-
-    //
-    // Method:      GetEntries()
-    //
-    // Purpose:     Queries all enum entries of a feature of type Enumeration
-    //
-    // Parameters:
-    //
-    // [out]    EnumEntryVector&   entries       An enum feature's enum entries
-    //
-    VmbErrorType GetEntries( EnumEntryVector &entries );
-
-    //
-    // Method:      GetRange()
-    //
-    // Purpose:     Queries the range of a feature of type double
-    //
-    // Parameters:
-    //
-    // [out]    double&    minimum   The feature's min value
-    // [out]    double&    maximum   The feature's max value
-    //
-    IMEXPORT    VmbErrorType GetRange( double &minimum, double &maximum ) const;
-
-    //
-    // Method:      GetRange()
-    //
-    // Purpose:     Queries the range of a feature of type VmbInt64
-    //
-    // Parameters:
-    //
-    // [out]    VmbInt64_t&    minimum   The feature's min value
-    // [out]    VmbInt64_t&    maximum   The feature's max value
-    //
-    IMEXPORT    VmbErrorType GetRange( VmbInt64_t &minimum, VmbInt64_t &maximum ) const;
-
-    //
-    // Method:      SetValue()
-    //
-    // Purpose:     Sets the value of a feature of type VmbInt32
-    //
-    // Parameters:
-    //
-    // [in ]    const VmbInt32_t&    value       The feature's value
-    //
-    IMEXPORT    VmbErrorType SetValue( const VmbInt32_t &value );
-
-    //
-    // Method:      SetValue()
-    //
-    // Purpose:     Sets the value of a feature of type VmbInt64
-    //
-    // Parameters:
-    //
-    // [in ]    const VmbInt64_t&   value       The feature's value
-    //
-    IMEXPORT    VmbErrorType SetValue( const VmbInt64_t &value );
-
-    //
-    // Method:      SetValue()
-    //
-    // Purpose:     Sets the value of a feature of type double
-    //
-    // Parameters:
-    //
-    // [in ]    const double&    value       The feature's value
-    //
-    IMEXPORT    VmbErrorType SetValue( const double &value );
-
-    //
-    // Method:      SetValue()
-    //
-    // Purpose:     Sets the value of a feature of type char*
-    //
-    // Parameters:
-    //
-    // [in ]    const char*    pValue       The feature's value
-    //
-    IMEXPORT    VmbErrorType SetValue( const char *pValue );
-
-    //
-    // Method:      SetValue()
-    //
-    // Purpose:     Sets the value of a feature of type bool
-    //
-    // Parameters:
-    //
-    // [in ]    bool    value       The feature's value
-    //
-    IMEXPORT    VmbErrorType SetValue( bool value );
-
-    //
-    // Method:      SetValue()
-    //
-    // Purpose:     Sets the value of a feature of type UcharVector
-    //
-    // Parameters:
-    //
-    // [in ]    const UcharVector&    value       The feature's value
-    //
-    VmbErrorType SetValue( const UcharVector &value );
-
-    // Method:      HasIncrement()
-    //
-    // Purpose:     Gets the support state increment of a feature
-    //
-    // Parameters:
-    //
-    // [out]    VmbBool_t&    incrementsupported       The feature's increment support state
-    //
-    IMEXPORT    VmbErrorType HasIncrement( VmbBool_t &incrementSupported ) const;
-
-
-    //
-    // Method:      GetIncrement()
-    //
-    // Purpose:     Gets the increment of a feature of type VmbInt64
-    //
-    // Parameters:
-    //
-    // [out]    VmbInt64_t&    increment       The feature's increment
-    //
-    IMEXPORT    VmbErrorType GetIncrement( VmbInt64_t &increment ) const;
-
-    // Method:      GetIncrement()
-    //
-    // Purpose:     Gets the increment of a feature of type double
-    //
-    // Parameters:
-    //
-    // [out]    double&    increment       The feature's increment
-    //
-    IMEXPORT    VmbErrorType GetIncrement( double &increment ) const;
-
-    //
-    // Method:      IsValueAvailable()
-    //
-    // Purpose:     Indicates whether an existing enumeration value is currently available.
-    //              An enumeration value might not be selectable due to the camera's
-    //              current configuration.
-    //
-    // Parameters:
-    //
-    // [in ]        const char*     pValue      The enumeration value as string
-    // [out]        bool&           available   True when the given value is available
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorInvalidValue:  If the given value is not a valid enumeration value for this enum
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-    //  - VmbErrorWrongType:     The feature is not an enumeration
-    //
-    IMEXPORT    VmbErrorType IsValueAvailable( const char *pValue, bool &available ) const;
-
-    //
-    // Method:      IsValueAvailable()
-    //
-    // Purpose:     Indicates whether an existing enumeration value is currently available.
-    //              An enumeration value might not be selectable due to the camera's
-    //              current configuration.
-    //
-    // Parameters:
-    //
-    // [in ]        const VmbInt64_t    value       The enumeration value as int
-    // [out]        bool&               available   True when the given value is available
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorInvalidValue:  If the given value is not a valid enumeration value for this enum
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorInvalidAccess: Operation is invalid with the current access mode
-    //  - VmbErrorWrongType:     The feature is not an enumeration
-    //
-    IMEXPORT    VmbErrorType IsValueAvailable( const VmbInt64_t value, bool &available ) const;
-
-    //
-    // Method:      RunCommand()
-    //
-    // Purpose:     Executes a feature of type Command
-    //
-    IMEXPORT    VmbErrorType RunCommand();
-
-    //
-    // Method:      IsCommandDone()
-    //
-    // Purpose:     Indicates whether the execution of a feature of type Command has finished
-    //
-    // Parameters:
-    //
-    // [out]    bool&    isDone     True when execution has finished
-    //
-    IMEXPORT    VmbErrorType IsCommandDone( bool &isDone ) const;
-
-    //
-    // Method:      GetName()
-    //
-    // Purpose:     Queries a feature's name
-    //
-    // Parameters:
-    //
-    // [out]    std::string&    name    The feature's name
-    //
-    VmbErrorType GetName( std::string &name ) const;
-
-    //
-    // Method:      GetDisplayName()
-    //
-    // Purpose:     Queries a feature's display name
-    //
-    // Parameters:
-    //
-    // [out]    std::string&    displayName    The feature's display name
-    //
-    VmbErrorType GetDisplayName( std::string &displayName ) const;
-
-    //
-    // Method:      GetDataType()
-    //
-    // Purpose:     Queries a feature's type
-    //
-    // Parameters:
-    //
-    // [out]    VmbFeatureDataType&    dataType    The feature's type
-    //
-    IMEXPORT    VmbErrorType GetDataType( VmbFeatureDataType &dataType ) const;
-
-    //
-    // Method:      GetFlags()
-    //
-    // Purpose:     Queries a feature's access status
-    //
-    // Parameters:
-    //
-    // [out]    VmbFeatureFlagsType&    flags    The feature's access status
-    //    
-    IMEXPORT    VmbErrorType GetFlags( VmbFeatureFlagsType &flags ) const;
-
-    //
-    // Method:      GetCategory()
-    //
-    // Purpose:     Queries a feature's category in the feature tress
-    //
-    // Parameters:
-    //
-    // [out]    std::string&    category    The feature's position in the feature tree
-    //    
-    VmbErrorType GetCategory( std::string &category ) const;
-
-    //
-    // Method:      GetPollingTime()
-    //
-    // Purpose:     Queries a feature's polling time
-    //
-    // Parameters:
-    //
-    // [out]    VmbUint32_t&    pollingTime    The interval to poll the feature
-    //    
-    IMEXPORT    VmbErrorType GetPollingTime( VmbUint32_t &pollingTime ) const;
-
-    //
-    // Method:      GetUnit()
-    //
-    // Purpose:     Queries a feature's unit
-    //
-    // Parameters:
-    //
-    // [out]    std::string&    unit    The feature's unit
-    //
-    VmbErrorType GetUnit( std::string &unit ) const;
-
-    //
-    // Method:      GetRepresentation()
-    //
-    // Purpose:     Queries a feature's representation
-    //
-    // Parameters:
-    //
-    // [out]    std::string&    representation    The feature's representation
-    //
-    VmbErrorType GetRepresentation( std::string &representation ) const;
-
-    //
-    // Method:      GetVisibility()
-    //
-    // Purpose:     Queries a feature's visibility
-    //
-    // Parameters:
-    //
-    // [out]    VmbFeatureVisibilityType&    visibility    The feature's visibility
-    //
-    IMEXPORT    VmbErrorType GetVisibility( VmbFeatureVisibilityType &visibility ) const;
-
-    //
-    // Method:      GetToolTip()
-    //
-    // Purpose:     Queries a feature's tool tip to display in the GUI
-    //
-    // Parameters:
-    //
-    // [out]    std::string&    toolTip    The feature's tool tip
-    //
-    VmbErrorType GetToolTip( std::string &toolTip ) const;
-
-    //
-    // Method:      GetDescription()
-    //
-    // Purpose:     Queries a feature's description
-    //
-    // Parameters:
-    //
-    // [out]    std::string&    description    The feature'sdescription
-    //
-    VmbErrorType GetDescription( std::string &description ) const;
-
-    //
-    // Method:      GetSFNCNamespace()
-    //
-    // Purpose:     Queries a feature's Standard Feature Naming Convention namespace
-    //
-    // Parameters:
-    //
-    // [out]    std::string&    sFNCNamespace    The feature's SFNC namespace
-    //
-    VmbErrorType GetSFNCNamespace( std::string &sFNCNamespace ) const;
-
-    //
-    // Method:      GetAffectedFeatures()
-    //
-    // Purpose:     Queries the feature's that are dependent from the current feature
-    //
-    // Parameters:
-    //
-    // [out]    FeaturePtrVector&    affectedFeatures    The features that get invalidated through the current feature
-    //
-    VmbErrorType GetAffectedFeatures( FeaturePtrVector &affectedFeatures );
-
-    //
-    // Method:      GetSelectedFeatures()
-    //
-    // Purpose:     Gets the features that get selected by the current feature
-    //
-    // Parameters:
-    //
-    // [out]    FeaturePtrVector&    selectedFeatures    The selected features
-    //
-    VmbErrorType GetSelectedFeatures( FeaturePtrVector &selectedFeatures );
-
-    //
-    // Method:      IsReadable()
-    //
-    // Purpose:     Queries the read access status of a feature
-    //
-    // Parameters:
-    //
-    // [out]    bool&    isReadable    True when feature can be read
-    //
-    IMEXPORT    VmbErrorType IsReadable( bool &isReadable );
-
-    //
-    // Method:      IsWritable()
-    //
-    // Purpose:     Queries the write access status of a feature
-    //
-    // Parameters:
-    //
-    // [out]    bool&    isWritable    True when feature can be written
-    //
-    IMEXPORT    VmbErrorType IsWritable( bool &isWritable );
-
-    //
-    // Method:      IsStreamable()
-    //
-    // Purpose:     Queries whether a feature's value can be transferred as a stream
-    //
-    // Parameters:
-    //
-    // [out]    bool&    isStreamable    True when streamable
-    //
-    IMEXPORT    VmbErrorType IsStreamable( bool &isStreamable ) const;
-
-    //
-    // Method:      RegisterObserver()
-    //
-    // Purpose:     Registers an observer that notifies the application whenever a features value changes
-    //
-    // Parameters:
-    //
-    // [out]    const IFeatureObserverPtr&    pObserver    The observer to be registered
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorBadParameter:  "pObserver" is NULL.
-    //
-    IMEXPORT    VmbErrorType RegisterObserver( const IFeatureObserverPtr &pObserver );
-
-    //
-    // Method:      UnregisterObserver()
-    //
-    // Purpose:     Unregisters an observer
-    //
-    // Parameters:
-    //
-    // [out]    const IFeatureObserverPtr&    pObserver    The observer to be unregistered
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorBadParameter:  "pObserver" is NULL.
-    //
-    IMEXPORT    VmbErrorType UnregisterObserver( const IFeatureObserverPtr &pObserver );
-
-    void ResetFeatureContainer();
-
-  private:
-    BaseFeature *m_pImpl;
-
-    // No default ctor
-    Feature();
-    // No copy ctor
-    Feature( const Feature& );
-    // No assignment operator
-    Feature& operator=( const Feature& );
-
-    // Array functions to pass data across DLL boundaries
-    IMEXPORT    VmbErrorType GetValue( char * const pValue, VmbUint32_t &length ) const;
-    IMEXPORT    VmbErrorType GetValue( VmbUchar_t *pValue, VmbUint32_t &size, VmbUint32_t &sizeFilled ) const;
-    IMEXPORT    VmbErrorType GetValues( const char **pValues, VmbUint32_t &size );
-    IMEXPORT    VmbErrorType GetValues( VmbInt64_t *pValues, VmbUint32_t &Size );
-
-    IMEXPORT    VmbErrorType GetEntries( EnumEntry *pEnumEntries, VmbUint32_t &size );
-
-    IMEXPORT    VmbErrorType SetValue( const VmbUchar_t *pValue, VmbUint32_t size );
-
-    IMEXPORT    VmbErrorType GetName( char * const pName, VmbUint32_t &length ) const;
-    IMEXPORT    VmbErrorType GetDisplayName( char * const pDisplayName, VmbUint32_t &length ) const;
-    IMEXPORT    VmbErrorType GetCategory( char * const pCategory, VmbUint32_t &length ) const;
-    IMEXPORT    VmbErrorType GetUnit( char * const pUnit, VmbUint32_t &length ) const;
-    IMEXPORT    VmbErrorType GetRepresentation( char * const pRepresentation, VmbUint32_t &length ) const;
-    IMEXPORT    VmbErrorType GetToolTip( char * const pToolTip, VmbUint32_t &length ) const;
-    IMEXPORT    VmbErrorType GetDescription( char * const pDescription, VmbUint32_t &length ) const;
-    IMEXPORT    VmbErrorType GetSFNCNamespace( char * const pSFNCNamespace, VmbUint32_t &length ) const;
-    IMEXPORT    VmbErrorType GetAffectedFeatures( FeaturePtr *pAffectedFeatures, VmbUint32_t &nSize );
-    IMEXPORT    VmbErrorType GetSelectedFeatures( FeaturePtr *pSelectedFeatures, VmbUint32_t &nSize );
-};
-
-#include <VimbaCPP/Include/Feature.hpp>
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/Feature.hpp b/VimbaCPP/Include/Feature.hpp
deleted file mode 100644
index e782c18be07b6a8154a2f52e9bd23c25b5169f78..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/Feature.hpp
+++ /dev/null
@@ -1,546 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Feature.hpp
-
-  Description: Inline wrapper functions for class AVT::VmbAPI::Feature.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_FEATURE_HPP
-#define AVT_VMBAPI_FEATURE_HPP
-//
-// Inline wrapper functions that allocate memory for STL objects in the application's context
-// and to pass data across DLL boundaries using arrays
-//
-inline VmbErrorType Feature::GetValues( StringVector &rValues )
-{
-    VmbErrorType    res;
-    VmbUint32_t     nSize;
-
-    res = GetValues( (const char **)NULL, nSize );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nSize)
-        {
-            try
-            {
-                std::vector<const char*> data( nSize );
-                res = GetValues( &data[0], nSize );
-                if ( VmbErrorSuccess == res )
-                {
-                    StringVector tmpValues( data.size() );
-                    std::copy( data.begin(), data.end(), tmpValues.begin() );
-                    rValues.swap( tmpValues);
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rValues.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetEntries( EnumEntryVector &rEntries )
-{
-    VmbErrorType    res;
-    VmbUint32_t     nSize;
-
-    res = GetEntries( (EnumEntry*)NULL, nSize );
-    if ( VmbErrorSuccess == res )
-    {
-        if( 0 != nSize )
-        {
-            try
-            {
-                EnumEntryVector tmpEntries( nSize );
-                res = GetEntries( &tmpEntries[0], nSize );
-                if( VmbErrorSuccess == res)
-                {
-                    rEntries.swap( tmpEntries );
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rEntries.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetValues( Int64Vector &rValues )
-{
-    VmbErrorType res;
-    VmbUint32_t nSize;
-
-    res = GetValues( (VmbInt64_t*)NULL, nSize );
-    if ( VmbErrorSuccess == res )
-    {
-        if( 0 != nSize)
-        {
-            try
-            {
-                Int64Vector tmpValues( nSize );
-                res = GetValues( &tmpValues[0], nSize );
-                if( VmbErrorSuccess == res)
-                {
-                    rValues.swap( tmpValues );
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rValues.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetValue( std::string &rStrValue ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    // res = GetValue( (char * const)NULL, nLength ); //threw warning of ignored type qualifiers...
-    res = GetValue( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpValue( nLength + 1, '\0' );
-                res = GetValue( &tmpValue[0], nLength );
-                if ( VmbErrorSuccess == res )
-                {
-                    rStrValue = &*tmpValue.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrValue.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetValue( UcharVector &rValue ) const
-{
-    VmbUint32_t i;
-    return GetValue( rValue, i );
-}
-inline VmbErrorType Feature::GetValue( UcharVector &rValue, VmbUint32_t &rnSizeFilled ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nSize;
-
-    res = GetValue( NULL, nSize, rnSizeFilled );
-    if ( VmbErrorSuccess == res )
-    {
-        if( 0 != nSize)
-        {
-            try
-            {
-                UcharVector tmpValue( nSize );
-                res = GetValue( &tmpValue[0], nSize, rnSizeFilled );
-                if( VmbErrorSuccess == res )
-                {
-                    rValue.swap( tmpValue);
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rValue.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::SetValue( const UcharVector &rValue )
-{
-    if ( rValue.empty() )
-    {
-        return VmbErrorBadParameter;
-    }
-    return SetValue( &rValue[0], (VmbUint32_t)rValue.size() );
-}
-
-inline VmbErrorType Feature::GetName( std::string &rStrName ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetName( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpName( nLength + 1, '\0' );
-                res = GetName( &tmpName[0], nLength );
-                if( VmbErrorSuccess == res)
-                {
-                    rStrName = &*tmpName.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrName.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetDisplayName( std::string &rStrDisplayName ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetDisplayName( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpDisplayName( nLength + 1, '\0' );
-                res = GetDisplayName( &tmpDisplayName[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrDisplayName = &*tmpDisplayName.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrDisplayName.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetCategory( std::string &rStrCategory ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetCategory( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpCategory( nLength + 1, '\0' );
-                res = GetCategory( &tmpCategory[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrCategory = &*tmpCategory.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrCategory.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetUnit( std::string &rStrUnit ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetUnit( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpUnit( nLength + 1, '\0' );
-                res = GetUnit( &tmpUnit[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrUnit = &*tmpUnit.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrUnit.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetRepresentation( std::string &rStrRepresentation ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetRepresentation( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpRepresentation( nLength + 1, '\0' );
-                res = GetRepresentation( &tmpRepresentation[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrRepresentation = &*tmpRepresentation.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrRepresentation.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetToolTip( std::string &rStrToolTip ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetToolTip( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpToolTip( nLength + 1, '\0');
-                res = GetToolTip( &tmpToolTip[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrToolTip = &*tmpToolTip.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrToolTip.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetDescription( std::string &rStrDescription ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetDescription( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpDescription( nLength + 1, '\0');
-                res = GetDescription( &tmpDescription[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrDescription = &*tmpDescription.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrDescription.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetSFNCNamespace( std::string &rStrSFNCNamespace ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetSFNCNamespace( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if ( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpSFNCNamespace( nLength + 1, '\0' );
-                res = GetSFNCNamespace( &tmpSFNCNamespace[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrSFNCNamespace = &*tmpSFNCNamespace.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrSFNCNamespace.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetAffectedFeatures( FeaturePtrVector &rAffectedFeatures )
-{
-    VmbErrorType    res;
-    VmbUint32_t     nSize;
-
-    res = GetAffectedFeatures( NULL, nSize );
-    if ( VmbErrorSuccess == res )
-    {
-        if( 0 != nSize)
-        {
-            try
-            {
-                FeaturePtrVector tmpAffectedFeatures( nSize );
-                res = GetAffectedFeatures( &tmpAffectedFeatures[0], nSize );
-                if( VmbErrorSuccess == res )
-                {
-                    rAffectedFeatures.swap( tmpAffectedFeatures );
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rAffectedFeatures.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType Feature::GetSelectedFeatures( FeaturePtrVector &rSelectedFeatures )
-{
-    VmbErrorType    res;
-    VmbUint32_t     nSize;
-
-    res = GetSelectedFeatures( NULL, nSize );
-    if ( VmbErrorSuccess == res )
-    {
-        if( 0 != nSize )
-        {
-            try
-            {
-                FeaturePtrVector tmpSelectedFeatures( nSize );
-                res = GetSelectedFeatures( &tmpSelectedFeatures[0], nSize );
-                if( VmbErrorSuccess == res )
-                {
-                    rSelectedFeatures.swap ( tmpSelectedFeatures );
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rSelectedFeatures.clear();
-        }
-    }
-
-    return res;
-}
-
-#endif
diff --git a/VimbaCPP/Include/FeatureContainer.h b/VimbaCPP/Include/FeatureContainer.h
deleted file mode 100644
index 6612f7cb684dc2af4062dabf466c1f800077e0a7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/FeatureContainer.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FeatureContainer.h
-
-  Description: Definition of class AVT::VmbAPI::FeatureContainer.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_FEATURECONTAINER_H
-#define AVT_VMBAPI_FEATURECONTAINER_H
-
-#include <VimbaC/Include/VmbCommonTypes.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/BasicLockable.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Include/Feature.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class FeatureContainer : public virtual BasicLockable
-{
-  public:
-
-    //
-    // Method:      FeatureContainer constructor
-    //
-    // Purpose:     Creates an instance of class FeatureContainer
-    //
-    IMEXPORT FeatureContainer();
-
-    //
-    // Method:      FeatureContainer destructor
-    //
-    // Purpose:     Destroys an instance of class FeatureContainer
-    //
-    IMEXPORT ~FeatureContainer();
-
-    //
-    // Method:      GetFeatureByName()
-    //
-    // Purpose:     Gets one particular feature of a feature container (e.g. a camera)
-    //
-    // Parameters:
-    //
-    // [in ]    const char*         name                The name of the feature to get
-    // [out]    FeaturePtr&         pFeature            The queried feature
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:          If no error
-    //  - VmbErrorDeviceNotOpen:    Base feature class (e.g. Camera) was not opened.
-    //  - VmbErrorBadParameter:     "name" is NULL.
-    //
-    IMEXPORT VmbErrorType GetFeatureByName( const char *pName, FeaturePtr &pFeature );
-    
-    //
-    // Method:      GetFeatures()
-    //
-    // Purpose:     Gets all features of a feature container (e.g. a camera)
-    //
-    // Parameters:
-    //
-    // [out]    FeaturePtrVector&   features        The container for all queried features
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorBadParameter:  "features" is empty.
-    //
-    // Details:   Once queried, this information remains static throughout the object's lifetime
-    //
-    VmbErrorType GetFeatures( FeaturePtrVector &features );
-
-    VmbHandle_t GetHandle() const;
-
-  protected:
-    // Sets the C handle of a feature container
-    void SetHandle( const VmbHandle_t handle );
-    
-    // Sets the C handle of a feature container to NULL
-    void RevokeHandle();
-    
-    // Sets the back reference to feature container that each feature holds to NULL
-    // and resets all known features
-    void Reset();
-
-  private:
-    struct Impl;
-    Impl *m_pImpl;
-
-    IMEXPORT VmbErrorType GetFeatures( FeaturePtr *pFeatures, VmbUint32_t &size );
-
-    // No copy ctor
-    FeatureContainer( const FeatureContainer& );
-    // No assignment operator
-    FeatureContainer& operator=( const FeatureContainer& );
-};
-
-#include <VimbaCPP/Include/FeatureContainer.hpp>
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/FeatureContainer.hpp b/VimbaCPP/Include/FeatureContainer.hpp
deleted file mode 100644
index 1f5c5c4cd293209c11aa5817a05bc73c00a240eb..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/FeatureContainer.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FeatureContainer.hpp
-
-  Description: Inline wrapper functions for class 
-               AVT::VmbAPI::FeatureContainer.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_FEATURECONTAINER_HPP
-#define AVT_VMBAPI_FEATURECONTAINER_HPP
-
-//
-// Inline wrapper functions that allocate memory for STL objects in the application's context
-// and to pass data across DLL boundaries using arrays
-//
-
-// HINT: Once queried this information remains static throughout the object's lifetime
-inline VmbErrorType FeatureContainer::GetFeatures( FeaturePtrVector &features )
-{
-    VmbErrorType    res;
-    VmbUint32_t     nSize;
-
-    res = GetFeatures( NULL, nSize );
-    if (    VmbErrorSuccess == res )
-    {
-        if( 0 != nSize)
-        {
-            try
-            {
-                FeaturePtrVector tmpFeatures( nSize );
-                res = GetFeatures( &tmpFeatures[0], nSize );
-                if( VmbErrorSuccess == res)
-                {
-                    features.swap( tmpFeatures );
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            features.clear();
-        }
-    }
-
-    return res;
-}
-
-#endif
diff --git a/VimbaCPP/Include/FileLogger.h b/VimbaCPP/Include/FileLogger.h
deleted file mode 100644
index bdcba06e52e353c62f86d922e7b2c03e4ad4b7c6..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/FileLogger.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FileLogger.h
-
-  Description: Definition of class AVT::VmbAPI::FileLogger.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_FILELOGGER_H
-#define AVT_VMBAPI_FILELOGGER_H
-
-#include <string>
-#include <stdio.h>
-#include <fstream>
-
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Include/Mutex.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class FileLogger
-{
-  public:
-    FileLogger( const char *pFileName, bool append = true );
-    virtual ~FileLogger();
-
-    void Log( const std::string &StrMessage );
-
-private:
-    std::ofstream   m_File;
-    MutexPtr        m_pMutex;
-
-    std::string GetTempPath();
-    FileLogger( const FileLogger& );
-    FileLogger& operator=( const FileLogger& );
-};
-
-}} //namespace AVT:VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/Frame.h b/VimbaCPP/Include/Frame.h
deleted file mode 100644
index 67ee8f73f07ac5e3ebc4d661058af2ab15b3a7e2..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/Frame.h
+++ /dev/null
@@ -1,342 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Frame.h
-
-  Description: Definition of class AVT::VmbAPI::Frame.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_FRAME_H
-#define AVT_VMBAPI_FRAME_H
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Include/IFrameObserver.h>
-#include <VimbaCPP/Include/AncillaryData.h>
-#include <vector>
-
-namespace AVT {
-namespace VmbAPI {
-
-class Camera; // forward declaration of camera class for befriending
-
-class Frame 
-{
-  friend class Camera;
-
-  public:
-    //
-    // Method:      Frame constructor
-    //
-    // Purpose:     Creates an instance of class Frame of a certain size
-    //
-    // Parameters:  [in ]   VmbInt64_t              bufferSize      The size of the underlying buffer
-	// Parameters:  [in ]   FrameAllocationMode     allocationMode  Indicates if announce frame or alloc and announce frame is used
-    //
-    IMEXPORT explicit Frame( VmbInt64_t bufferSize, FrameAllocationMode allocationMode = FrameAllocation_AnnounceFrame );
-
-    //
-    // Method:      Frame constructor
-    //
-    // Purpose:     Creates an instance of class Frame with the given user buffer of the given size
-    //
-    // Parameters:  [in ]   VmbUchar_t*     pBuffer     A pointer to an allocated buffer
-    // Parameters:  [in ]   VmbInt64_t      bufferSize  The size of the underlying buffer
-    //
-    IMEXPORT Frame( VmbUchar_t *pBuffer, VmbInt64_t bufferSize );
-
-    //
-    // Method:      Frame destructor
-    //
-    // Purpose:     Destroys an instance of class Frame
-    //
-    IMEXPORT ~Frame();
-
-    //
-    // Method:      RegisterObserver()
-    //
-    // Purpose:     Registers an observer that will be called whenever a new frame arrives
-    //
-    // Parameters:  [in ]   const IFrameObserverPtr&   pObserver   An object that implements the IObserver interface
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //  - VmbErrorBadParameter: "pObserver" is NULL.
-    //  - VmbErrorResources:    The observer was in use
-    //
-    // Details:     As new frames arrive, the observer's FrameReceived method will be called.
-    //              Only one observer can be registered.
-    //
-    IMEXPORT VmbErrorType RegisterObserver( const IFrameObserverPtr &pObserver );
-
-    //
-    // Method:      UnregisterObserver()
-    //
-    // Purpose:     Unregisters the observer that was called whenever a new frame arrived
-    //
-    IMEXPORT VmbErrorType UnregisterObserver();
-
-    //
-    // Method:      GetAncillaryData()
-    //
-    // Purpose:     Returns the part of a frame that describes the chunk data as an object
-    //
-    // Parameters:  [out]   AncillaryDataPtr&        pAncillaryData      The wrapped chunk data
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //  - VmbErrorNotFound:     No chunk data present
-    //
-    IMEXPORT VmbErrorType GetAncillaryData( AncillaryDataPtr &pAncillaryData );
-
-    //
-    // Method:      GetAncillaryData()
-    //
-    // Purpose:     Returns the part of a frame that describes the chunk data as an object
-    //
-    // Parameters:  [out]   ConstAncillaryDataPtr&    pAncillaryData     The wrapped chunk data
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //  - VmbErrorNotFound:     No chunk data present
-    //
-    IMEXPORT VmbErrorType GetAncillaryData( ConstAncillaryDataPtr &pAncillaryData ) const;
-
-    //
-    // Method:      GetBuffer()
-    //
-    // Purpose:     Returns the complete buffer including image and chunk data
-    //
-    // Parameters:  [out]   VmbUchar_t*      pBuffer        A pointer to the buffer
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetBuffer( VmbUchar_t* &pBuffer );
-
-    //
-    // Method:      GetBuffer()
-    //
-    // Purpose:     Returns the complete buffer including image and chunk data
-    //
-    // Parameters:  [out]   const VmbUchar_t*      pBuffer  A pointer to the buffer
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetBuffer( const VmbUchar_t* &pBuffer ) const;
-
-    //
-    // Method:      GetImage()
-    //
-    // Purpose:     Returns only the image data
-    //
-    // Parameters:  [out]   VmbUchar_t*         pBuffer     A pointer to the buffer
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetImage( VmbUchar_t* &pBuffer );
-
-    //
-    // Method:      GetImage()
-    //
-    // Purpose:     Returns only the image data
-    //
-    // Parameters:  [out]   const VmbUchar_t*    pBuffer    A pointer to the buffer
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetImage( const VmbUchar_t* &pBuffer ) const;
-
-    //
-    // Method:      GetReceiveStatus()
-    //
-    // Purpose:     Returns the receive status of a frame
-    //
-    // Parameters:  [out]   VmbFrameStatusType&   status    The receive status
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetReceiveStatus( VmbFrameStatusType &status ) const;
-    
-    //
-    // Method:      GetImageSize()
-    //
-    // Purpose:     Returns the memory size of the image
-    //
-    // Parameters:  [out]   VmbUint32_t&    imageSize       The size in bytes
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetImageSize( VmbUint32_t &imageSize ) const;
-    
-    //
-    // Method:      GetAncillarySize()
-    //
-    // Purpose:     Returns memory size of the chunk data
-    //
-    // Parameters:  [out]   VmbUint32_t&    ancillarySize   The size in bytes
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetAncillarySize( VmbUint32_t &ancillarySize ) const;
-    
-    //
-    // Method:      GetBufferSize()
-    //
-    // Purpose:     Returns the memory size of the frame buffer holding 
-    //              both the image data and the ancillary data
-    //
-    // Parameters:  [out]   VmbUint32_t&    bufferSize      The size in bytes
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetBufferSize( VmbUint32_t &bufferSize ) const;
-
-    //
-    // Method:      GetPixelFormat()
-    //
-    // Purpose:     Returns the GenICam pixel format
-    //
-    // Parameters:  [out]   VmbPixelFormatType&      pixelFormat    The GenICam pixel format
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetPixelFormat( VmbPixelFormatType &pixelFormat ) const;
-
-    //
-    // Method:      GetWidth()
-    //
-    // Purpose:     Returns the width of the image
-    //
-    // Parameters:  [out]   VmbUint32_t&    width       The width in pixels
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetWidth( VmbUint32_t &width ) const;
-
-    //
-    // Method:      GetHeight()
-    //
-    // Purpose:     Returns the height of the image
-    //
-    // Parameters:  [out]   VmbUint32_t&    height       The height in pixels
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetHeight( VmbUint32_t &height ) const;
-
-    //
-    // Method:      GetOffsetX()
-    //
-    // Purpose:     Returns the x offset of the image
-    //
-    // Parameters:  [out]   VmbUint32_t&    offsetX     The x offset in pixels
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetOffsetX( VmbUint32_t &offsetX ) const;
-
-    //
-    // Method:      GetOffsetY()
-    //
-    // Purpose:     Returns the y offset of the image
-    //
-    // Parameters:  [out]   VmbUint32_t&    offsetY     The y offset in pixels
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetOffsetY( VmbUint32_t &offsetY ) const;
-
-    //
-    // Method:      GetFrameID()
-    //
-    // Purpose:     Returns the frame ID
-    //
-    // Parameters:  [out]   VmbUint64_t&     frameID    The frame ID
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetFrameID( VmbUint64_t &frameID ) const;
-
-    //
-    // Method:      GetTimeStamp()
-    //
-    // Purpose:     Returns the time stamp
-    //
-    // Parameters:  [out]   VmbUint64_t&     timestamp  The time stamp
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType GetTimestamp( VmbUint64_t &timestamp ) const;
-
-    bool GetObserver( IFrameObserverPtr &observer ) const;
-
-  private:
-    struct Impl;
-    Impl *m_pImpl;
-
-    // No default ctor
-    Frame();
-    // No copy ctor
-    Frame( Frame& );
-    // No assignment operator
-    Frame& operator=( const Frame& );
-};
-
-typedef std::vector<FramePtr> FramePtrVector;
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/ICameraFactory.h b/VimbaCPP/Include/ICameraFactory.h
deleted file mode 100644
index a02ada6ce88744ba59ffb167d59475825fbc5e00..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/ICameraFactory.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ICameraFactory.h
-
-  Description: Definition of interface AVT::VmbAPI::ICameraFactory.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_ICAMERAFACTORY_H
-#define AVT_VMBAPI_ICAMERAFACTORY_H
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Include/Camera.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class ICameraFactory 
-{
-  public:
-    //
-    // Method:      CreateCamera()
-    //
-    // Purpose:     Factory method to create a camera that extends the Camera class
-    //
-    // Parameters:
-    //
-    // [in ]    const char*         pCameraID                   The ID of the camera
-    // [in ]    const char*         pCameraName                 The name of the camera
-    // [in ]    const char*         pCameraModel                The model name of the camera
-    // [in ]    const char*         pCameraSerialNumber         The serial number of the camera
-    // [in ]    const char*         pInterfaceID                The ID of the interface the camera is connected to
-    // [in ]    VmbInterfaceType    interfaceType               The type of the interface the camera is connected to
-    // [in ]    const char*         pInterfaceName              The name of the interface
-    // [in ]    const char*         pInterfaceSerialNumber      The serial number of the interface
-    // [in ]    VmbAccessModeType   interfacePermittedAccess    The access privileges for the interface
-    //
-    // Details:   The ID of the camera may be, among others, one of the following: "169.254.12.13",
-    //            "000f31000001", a plain serial number: "1234567890", or the device ID 
-    //            of the underlying transport layer.
-    //
-    IMEXPORT virtual CameraPtr CreateCamera(    const char *pCameraID,
-                                                const char *pCameraName,
-                                                const char *pCameraModel,
-                                                const char *pCameraSerialNumber,
-                                                const char *pInterfaceID,
-                                                VmbInterfaceType interfaceType,
-                                                const char *pInterfaceName,
-                                                const char *pInterfaceSerialNumber,
-                                                VmbAccessModeType interfacePermittedAccess) = 0;
-
-    //
-    // Method:      ICameraFactory destructor
-    //
-    // Purpose:     Destroys an instance of class Camera
-    //
-    IMEXPORT virtual ~ICameraFactory() {}
-
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/ICameraListObserver.h b/VimbaCPP/Include/ICameraListObserver.h
deleted file mode 100644
index 814202fc8841140b94a380bbe2326db5806539a2..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/ICameraListObserver.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ICameraListObserver.h
-
-  Description: Definition of interface AVT::VmbAPI::ICameraListObserver.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_ICAMERALISTOBSERVER_H
-#define AVT_VMBAPI_ICAMERALISTOBSERVER_H
-
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Include/Camera.h>
-#include <vector>
-
-
-namespace AVT {
-namespace VmbAPI {
-
-class ICameraListObserver 
-{
-  public:
-    //
-    // Method:      CameraListChanged()
-    //
-    // Purpose:     The event handler function that gets called whenever
-    //              an ICameraListObserver is triggered. This occurs most
-    //              likely when a camera was plugged in or out.
-    //
-    // Parameters:
-    //
-    // [out]    CameraPtr           pCam                    The camera that triggered the event
-    // [out]    UpdateTriggerType   reason                  The reason why the callback routine was triggered
-    //                                                      (e.g., a new camera was plugged in)
-    //
-    IMEXPORT virtual void CameraListChanged( CameraPtr pCam, UpdateTriggerType reason ) = 0;
-
-    //
-    // Method:      ICameraListObserver destructor
-    //
-    // Purpose:     Destroys an instance of class ICameraListObserver
-    //
-    IMEXPORT virtual ~ICameraListObserver() {}
-
-  protected:
-    IMEXPORT ICameraListObserver() { /*No default ctor*/ }
-    IMEXPORT ICameraListObserver( const ICameraListObserver& ) { /* No copy ctor */ }
-};
-typedef std::vector<ICameraListObserverPtr> ICameraListObserverPtrVector;
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/IFeatureObserver.h b/VimbaCPP/Include/IFeatureObserver.h
deleted file mode 100644
index ed105b80e631278bab234f78110b9c1505f07551..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/IFeatureObserver.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        IFeatureObserver.h
-
-  Description: Definition of interface AVT::VmbAPI::IFeatureObserver.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_IFEATUREOBSERVER_H
-#define AVT_VMBAPI_IFEATUREOBSERVER_H
-
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Include/Feature.h>
-#include <vector>
-
-namespace AVT {
-namespace VmbAPI {
-
-class IFeatureObserver 
-{
-  public:
-    //
-    // Method:      FeatureChanged()
-    //
-    // Purpose:     The event handler function that gets called whenever
-    //              a feature has changed
-    //
-    // Parameters:
-    //
-    // [in]     const FeaturePtr&      pFeature          The frame that has changed
-    //
-    IMEXPORT virtual void FeatureChanged( const FeaturePtr &pFeature ) = 0;
-
-    //
-    // Method:      IFeatureObserver destructor
-    //
-    // Purpose:     Destroys an instance of class IFeatureObserver
-    //
-    IMEXPORT virtual ~IFeatureObserver() {}
-
-  protected:
-    IMEXPORT IFeatureObserver() {}
-    IMEXPORT IFeatureObserver( const IFeatureObserver& ) { /* No copy ctor */ }
-};
-typedef std::vector<IFeatureObserverPtr> IFeatureObserverPtrVector;
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/IFrameObserver.h b/VimbaCPP/Include/IFrameObserver.h
deleted file mode 100644
index d071858b390f9c9971d15990a4e47a31908240c1..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/IFrameObserver.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        IFrameObserver.h
-
-  Description: Definition of interface AVT::VmbAPI::IFrameObserver.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_IFRAMEOBSERVER_H
-#define AVT_VMBAPI_IFRAMEOBSERVER_H
-
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Include/Frame.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class IFrameObserver 
-{
-  public:
-    //
-    // Method:      FrameReceived()
-    //
-    // Purpose:     The event handler function that gets called whenever
-    //              a new frame is received
-    //
-    // Parameters:
-    //
-    // [in]     const FramePtr      pFrame                  The frame that was received
-    //
-    IMEXPORT virtual void FrameReceived( const FramePtr pFrame ) = 0;
-
-    //
-    // Method:      IFrameObserver destructor
-    //
-    // Purpose:     Destroys an instance of class IFrameObserver
-    //
-    IMEXPORT virtual ~IFrameObserver() {}
-
-  protected:
-    CameraPtr m_pCamera;
-    IMEXPORT IFrameObserver( CameraPtr pCamera ) : m_pCamera( pCamera ) {}
-
-    IMEXPORT IFrameObserver( IFrameObserver& ) { /* No copy ctor */ }
-
-  private:
-    IFrameObserver() { /* No default ctor */ }
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/IInterfaceListObserver.h b/VimbaCPP/Include/IInterfaceListObserver.h
deleted file mode 100644
index b00969869ed40defd8b35fa6a17e8c2a4580ca3f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/IInterfaceListObserver.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        IInterfaceListObserver.h
-
-  Description: Definition of interface AVT::VmbAPI::IInterfaceListObserver.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_IINTERFACELISTOBSERVER_H
-#define AVT_VMBAPI_IINTERFACELISTOBSERVER_H
-
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Include/Interface.h>
-#include <vector>
-
-namespace AVT {
-namespace VmbAPI {
-
-class IInterfaceListObserver 
-{
-  public:
-    //
-    // Method:      InterfaceListChanged()
-    //
-    // Purpose:     The event handler function that gets called whenever
-    //              an IInterfaceListObserver is triggered.
-    //
-    // Parameters:
-    //
-    // [out]    InterfacePtr        pInterface              The interface that triggered the event
-    // [out]    UpdateTriggerType   reason                  The reason why the callback routine was triggered
-    //
-    IMEXPORT virtual void InterfaceListChanged( InterfacePtr pInterface, UpdateTriggerType reason ) = 0;
-
-    //
-    // Method:      IInterfaceListObserver destructor
-    //
-    // Purpose:     Destroys an instance of class IInterfaceListObserver
-    //
-    IMEXPORT virtual ~IInterfaceListObserver() {}
-
-  protected:
-    IMEXPORT IInterfaceListObserver() {};
-    IMEXPORT IInterfaceListObserver( const IInterfaceListObserver& ) { /* No copy ctor */ }
-    IMEXPORT IInterfaceListObserver& operator=( const IInterfaceListObserver& ) { /* No assignment operator */ return *this; }
-    
-};
-typedef std::vector<IInterfaceListObserverPtr> IInterfaceListObserverPtrVector;
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/IRegisterDevice.h b/VimbaCPP/Include/IRegisterDevice.h
deleted file mode 100644
index e536917c056ee0bb34e09e37894a7e8bd8202678..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/IRegisterDevice.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        IRegisterDevice.h
-
-  Description: Definition of interface AVT::VmbAPI::IRegisterDevice.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_IREGISTERDEVICE_H
-#define AVT_VMBAPI_IREGISTERDEVICE_H
-
-#include <VimbaC/Include/VmbCommonTypes.h>
-#include <vector>
-
-namespace AVT {
-namespace VmbAPI {
-
-class IRegisterDevice 
-{
-  public:
-
-    virtual ~IRegisterDevice() {};
-
-    //
-    // Method:      ReadRegisters()
-    //
-    // Purpose:     Reads one or more registers consecutively. The number of registers to be read is determined by the number of provided addresses.
-    //
-    // Parameters:  [in ]   const Uint64Vector&   addresses     A list of register addresses
-    //              [out]   Uint64Vector&         buffer        The returned data as vector
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested registers have been read
-    //  - VmbErrorBadParameter: Vectors "addresses" and/or "buffer" are empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all registers have been read. See overload ReadRegisters( const Uint64Vector&, Uint64Vector&, VmbUint32_t& ).
-    //
-    virtual VmbErrorType ReadRegisters( const Uint64Vector &addresses, Uint64Vector &buffer ) const = 0;
-
-    //
-    // Method:      ReadRegisters()
-    //
-    // Purpose:     Same as ReadRegisters( const Uint64Vector&, Uint64Vector& ), but returns the number of successful read operations in case of an error.
-    //
-    // Parameters:  [in ]   const Uint64Vector&   addresses         A list of register addresses
-    //              [out]   Uint64Vector&         buffer            The returned data as vector
-    //              [out]   VmbUint32_t&          completedReads    The number of successfully read registers
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested registers have been read
-    //  - VmbErrorBadParameter: Vectors "addresses" and/or "buffer" are empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all registers have been read.
-    //
-    virtual VmbErrorType ReadRegisters( const Uint64Vector &addresses, Uint64Vector &buffer, VmbUint32_t &completedReads ) const = 0;
-    
-    //
-    // Method:      WriteRegisters()
-    //
-    // Purpose:     Writes one or more registers consecutively. The number of registers to be written is determined by the number of provided addresses.
-    //
-    // Parameters:  [in ]    const Uint64Vector&   addresses    A list of register addresses
-    //              [in ]    const Uint64Vector&   buffer       The data to write as vector
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested registers have been written
-    //  - VmbErrorBadParameter: Vectors "addresses" and/or "buffer" are empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all registers have been written. See overload WriteRegisters( const Uint64Vector&, const Uint64Vector&, VmbUint32_t& ).
-    //
-    virtual VmbErrorType WriteRegisters( const Uint64Vector &addresses, const Uint64Vector &buffer ) = 0;
-
-    //
-    // Method:      WriteRegisters()
-    //
-    // Purpose:     Same as WriteRegisters( const Uint64Vector&, const Uint64Vector& ), but returns the number of successful write operations in case of an error VmbErrorIncomplete.
-    //
-    // Parameters:  [in ]   const Uint64Vector&   addresses         A list of register addresses
-    //              [in ]   const Uint64Vector&   buffer            The data to write as vector
-    //              [out]   VmbUint32_t&          completedWrites   The number of successfully written registers
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested registers have been written
-    //  - VmbErrorBadParameter: Vectors "addresses" and/or "buffer" are empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all registers have been written.
-    //
-    virtual VmbErrorType WriteRegisters( const Uint64Vector &addresses, const Uint64Vector &buffer, VmbUint32_t &completedWrites ) = 0;
-    
-    //
-    // Method:      ReadMemory()
-    //
-    // Purpose:     Reads a block of memory. The number of bytes to read is determined by the size of the provided buffer.
-    //
-    // Parameters:  [in ]   const VmbUint64_t&   address    The address to read from
-    //              [out]   UcharVector&         buffer     The returned data as vector
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested bytes have been read
-    //  - VmbErrorBadParameter: Vector "buffer" is empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all bytes have been read. See overload ReadMemory( const VmbUint64_t&, UcharVector&, VmbUint32_t& ).
-    //
-    virtual VmbErrorType ReadMemory( const VmbUint64_t &address, UcharVector &buffer ) const = 0;
-
-    //
-    // Method:      ReadMemory()
-    //
-    // Purpose:     Same as ReadMemory( const Uint64Vector&, UcharVector& ), but returns the number of bytes successfully read in case of an error VmbErrorIncomplete.
-    //
-    // Parameters:  [in ]   const VmbUint64_t&   address        The address to read from
-    //              [out]   UcharVector&         buffer         The returned data as vector
-    //              [out]   VmbUint32_t&         sizeComplete   The number of successfully read bytes
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested bytes have been read
-    //  - VmbErrorBadParameter: Vector "buffer" is empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all bytes have been read.
-    //
-    virtual VmbErrorType ReadMemory( const VmbUint64_t &address, UcharVector &buffer, VmbUint32_t &sizeComplete ) const = 0;
-    
-    //
-    // Method:      WriteMemory()
-    //
-    // Purpose:     Writes a block of memory. The number of bytes to write is determined by the size of the provided buffer.
-    //
-    // Parameters:  [in]    const VmbUint64_t&   address    The address to write to
-    //              [in]    const UcharVector&   buffer     The data to write as vector
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested bytes have been written
-    //  - VmbErrorBadParameter: Vector "buffer" is empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all bytes have been written. See overload WriteMemory( const VmbUint64_t&, const UcharVector&, VmbUint32_t& ).
-    //
-    virtual VmbErrorType WriteMemory( const VmbUint64_t &address, const UcharVector &buffer ) = 0;
-
-    //
-    // Method:      WriteMemory()
-    //
-    // Purpose:     Same as WriteMemory( const Uint64Vector&, const UcharVector& ), but returns the number of bytes successfully written in case of an error VmbErrorIncomplete.
-    //
-    // Parameters:  [in]    const VmbUint64_t&   address        The address to write to
-    //              [in]    const UcharVector&   buffer         The data to write as vector
-    //              [out]   VmbUint32_t&         sizeComplete   The number of successfully written bytes
-    //
-    // Returns:
-    //  - VmbErrorSuccess:      If all requested bytes have been written
-    //  - VmbErrorBadParameter: Vector "buffer" is empty.
-    //  - VmbErrorIncomplete:   If at least one, but not all bytes have been written.
-    //
-    virtual VmbErrorType WriteMemory( const VmbUint64_t &address, const UcharVector &buffer, VmbUint32_t &sizeComplete ) = 0;
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/Interface.h b/VimbaCPP/Include/Interface.h
deleted file mode 100644
index 57f56fda8a4afd8af3c89c6d7e07ebf2032d86ac..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/Interface.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Interface.h
-
-  Description: Definition of class AVT::VmbAPI::Interface.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_INTERFACE_H
-#define AVT_VMBAPI_INTERFACE_H
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/FeatureContainer.h>
-#include <vector>
-
-namespace AVT {
-namespace VmbAPI {
-
-class Interface : public FeatureContainer
-{
-  public:
-
-    Interface( const VmbInterfaceInfo_t *pInterfaceInfo );
-
-    virtual ~Interface();
-
-    //
-    // Method:      Open()
-    //
-    // Purpose:     Open an interface handle for feature access.
-    //
-    // Parameters:  none
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorNotFound:      The designated interface cannot be found   
-    //
-    // Details:   An interface can be opened if interface-specific control is required, such as I/O pins
-    //            on a frame grabber card. Control is then possible via feature access methods.
-    //
-    IMEXPORT virtual VmbErrorType Open();
-
-    //
-    // Method:      Close()
-    //
-    // Purpose:     Close an interface.
-    //
-    // Parameters:  none    
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorBadHandle:     The handle is not valid
-    //
-    IMEXPORT virtual VmbErrorType Close();
-
-    //
-    // Method:      GetID()
-    //
-    // Purpose:     Gets the ID of an interface.
-    //
-    // Parameters:  [out]   std::string&        interfaceID          The ID of the interface
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    // Details:    This information remains static throughout the object's lifetime
-    //
-    VmbErrorType GetID( std::string &interfaceID ) const;
-
-    //
-    // Method:      GetType()
-    //
-    // Purpose:     Gets the type, e.g. FireWire, GigE or USB of an interface.
-    //
-    // Parameters:  [out]   VmbInterfaceType&   type        The type of the interface
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    //  Details:    This information remains static throughout the object's lifetime
-    //
-    IMEXPORT VmbErrorType GetType( VmbInterfaceType &type ) const;
-
-    //
-    // Method:      GetName()
-    //
-    // Purpose:     Gets the name of an interface.
-    //
-    // Parameters:  [out]   std::string&        name        The name of the interface
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    //              This information remains static throughout the object's lifetime
-    //
-    VmbErrorType GetName( std::string &name ) const;
-
-    //
-    // Method:      GetSerialNumber()
-    //
-    // Purpose:     Gets the serial number of an interface.
-    //
-    // Parameters:  [out]   std::string&    serialNumber    The serial number of the interface
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    //              This information remains static throughout the object's lifetime
-    //
-    VmbErrorType GetSerialNumber( std::string &serialNumber ) const;
-
-    //
-    // Method:      GetPermittedAccess()
-    //
-    // Purpose:     Gets the access mode of an interface.
-    //
-    // Parameters:  [out]   VmbAccessModeType&  accessMode  The possible access mode of the interface
-    //
-    // Returns:
-    //  - VmbErrorSuccess:       If no error
-    //
-    IMEXPORT VmbErrorType GetPermittedAccess( VmbAccessModeType &accessMode ) const;
-
-  private:
-    // Default ctor
-    Interface();
-    // Copy ctor
-    Interface( const Interface& );
-    // Assignment operator
-    Interface& operator=( const Interface& );
-
-    struct Impl;
-    Impl *m_pImpl;
-
-    // Array functions to pass data across DLL boundaries
-    IMEXPORT VmbErrorType GetID( char * const pID, VmbUint32_t &length ) const;
-    IMEXPORT VmbErrorType GetName( char * const pName, VmbUint32_t &length ) const;
-    IMEXPORT VmbErrorType GetSerialNumber( char * const pSerial, VmbUint32_t &length ) const;
-};
-
-#include <VimbaCPP/Include/Interface.hpp>
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/Interface.hpp b/VimbaCPP/Include/Interface.hpp
deleted file mode 100644
index f970df84e3ecb9f2cdd57cf93366a69e2ebb7579..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/Interface.hpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Interface.hpp
-
-  Description: Inline wrapper functions for class AVT::VmbAPI::Interface.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_INTERFACE_HPP
-#define AVT_VMBAPI_INTERFACE_HPP
-
-//
-// Inline wrapper functions that allocate memory for STL objects in the application's context
-// and to pass data across DLL boundaries using arrays
-//
-
-// HINT: This information remains static throughout the object's lifetime
-inline VmbErrorType Interface::GetID( std::string &rStrID ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetID( NULL, nLength );
-    if ( VmbErrorSuccess == res)
-    {
-        if( 0 != nLength)
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpID( nLength + 1, '\0' );
-                res     = GetID( &tmpID[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrID  = &*tmpID.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrID.clear();
-        }
-    }
-
-    return res;
-}
-
-// HINT: This information remains static throughout the object's lifetime
-inline VmbErrorType Interface::GetName( std::string &rStrName ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetName( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if( 0 != nLength )
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpName( nLength + 1, '\0' );
-                res         = GetName( &tmpName[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrName    = &*tmpName.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrName.clear();
-        }
-    }
-
-    return res;
-}
-
-// HINT: This information remains static throughout the object's lifetime
-inline VmbErrorType Interface::GetSerialNumber( std::string &rStrSerial ) const
-{
-    VmbErrorType    res;
-    VmbUint32_t     nLength;
-
-    res = GetSerialNumber( NULL, nLength );
-    if ( VmbErrorSuccess == res )
-    {
-        if( 0 != nLength)
-        {
-            try
-            {
-                std::vector<std::string::value_type> tmpSerial( nLength + 1, '\0');
-                res         = GetSerialNumber( &tmpSerial[0], nLength );
-                if( VmbErrorSuccess == res )
-                {
-                    rStrSerial  = &*tmpSerial.begin();
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rStrSerial.clear();
-        }
-    }
-
-    return res;
-}
-
-#endif
diff --git a/VimbaCPP/Include/LoggerDefines.h b/VimbaCPP/Include/LoggerDefines.h
deleted file mode 100644
index 29e63127f64e997c4ced0a7fd04fa38dcbe0f4f6..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/LoggerDefines.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        LoggerDefines.h
-
-  Description: Definition of macros for logging.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_LOGGERDEFINES_H
-#define AVT_VMBAPI_LOGGERDEFINES_H
-
-#include <VimbaCPP/Include/UserLoggerDefines.h>
-
-#ifndef USER_LOGGER
-
-    #include <VimbaCPP/Include/FileLogger.h>
-
-    namespace AVT {
-    namespace VmbAPI {
-
-    #define LOGGER_DECL                         FileLogger
-    #define LOGGER_DEF                          FileLogger( "VimbaCPP.log", true )
-    #define LOGGER_LOG( logger, loggingInfo )   if ( NULL != (logger) ) (logger)->Log( loggingInfo );
-
-
-    // These are all uses of LOGGER_DECL logger declarations
-    typedef LOGGER_DECL* Logger;
-
-    }}    
-
-#else
-    #include <VimbaCPP/Include/UserLoggerDefines.h>
-#endif
-
-#include <VimbaCPP/Include/VimbaSystem.h>
-
-#define LOG_FREE_TEXT( txt )            std::string strExc( txt );\
-                                        strExc.append( " in function: " );\
-                                        strExc.append( __FUNCTION__ );\
-                                        LOGGER_LOG( VimbaSystem::GetInstance().GetLogger(), strExc );
-
-#endif
diff --git a/VimbaCPP/Include/Mutex.h b/VimbaCPP/Include/Mutex.h
deleted file mode 100644
index 88d03313cedfedc818b805c42a8dd8c944db26fc..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/Mutex.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Mutex.h
-
-  Description: Definition of class AVT::VmbAPI::Mutex.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_MUTEX
-#define AVT_VMBAPI_MUTEX
-
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-
-#ifdef _WIN32
-    #include <windows.h>
-#else
-    #include <pthread.h>
-#endif
-
-namespace AVT {
-namespace VmbAPI {
-
-class Mutex
-{
-  public:
-    IMEXPORT explicit Mutex( bool bInitLock = false );
-    IMEXPORT ~Mutex();
-
-    IMEXPORT void Lock();
-    IMEXPORT void Unlock();
-
-  protected:
-#ifdef _WIN32
-    HANDLE          m_hMutex;
-#else
-    pthread_mutex_t m_Mutex;
-#endif
-
-  private:
-    Mutex& operator=( const Mutex& );
-    Mutex( const Mutex& );
-};
-
-}} //namespace AVT::VmbAPI
-
-#endif //AVT_VMBAPI_MUTEX
diff --git a/VimbaCPP/Include/SharedPointer.h b/VimbaCPP/Include/SharedPointer.h
deleted file mode 100644
index cc12fe69ca9fcd7d2996d8dace43bfa42f238606..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/SharedPointer.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        SharedPointer.h
-
-  Description: Definition of an example shared pointer class that can be 
-               used with the Vimba CPP API.
-               (This include file contains example code only.)
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_SHAREDPOINTER_H
-#define AVT_VMBAPI_SHAREDPOINTER_H
-
-#include <VimbaCPP/Include/Mutex.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-    //Coding style of this file is different to mimic the shared_ptr classes of std and boost.
-
-    struct dynamic_cast_tag
-    {
-    };
-
-    class ref_count_base
-    {
-    public:
-        virtual ~ref_count_base() {;}
-
-        virtual void inc() = 0;
-        virtual void dec() = 0;
-        virtual long use_count() const = 0;
-    };
-
-    template <class T>
-    class ref_count : public virtual AVT::VmbAPI::ref_count_base
-    {
-    private:
-        T               *m_pObject;
-        long            m_nCount;
-        Mutex           m_Mutex;
-
-        ref_count(const ref_count &rRefCount);
-        ref_count& operator = (const ref_count &rRefCount);
-
-    public:
-        explicit ref_count(T *pObject);
-        virtual ~ref_count();
-
-        virtual void inc();
-        virtual void dec();
-        virtual long use_count() const;
-    };
-
-    template <class T>
-    class shared_ptr
-    {
-    private:
-        typedef shared_ptr<T> this_type;
-        
-        template<class T2>
-        friend class shared_ptr;
-
-        AVT::VmbAPI::ref_count_base *m_pRefCount;
-        T                           *m_pObject;
-
-        template <class T2>
-        static void swap(T2 &rValue1, T2 &rValue2);
-
-    public:
-        shared_ptr();
-        template <class T2>
-        explicit shared_ptr(T2 *pObject);
-        shared_ptr(const shared_ptr &rSharedPointer);
-        template <class T2>
-        shared_ptr(const shared_ptr<T2> &rSharedPointer);
-        template <class T2>
-        shared_ptr(const shared_ptr<T2> &rSharedPointer, dynamic_cast_tag);
-
-        virtual ~shared_ptr();
-
-        shared_ptr& operator = (const shared_ptr &rSharedPointer);
-        template <class T2>
-        shared_ptr& operator = (const shared_ptr<T2> &rSharedPointer);
-        
-        void reset();
-        template <class T2>
-        void reset(T2 *pObject);
-
-        T* get() const;
-        T& operator * () const;
-        T* operator -> () const;
-        long use_count() const;
-        bool unique() const;
-        
-        typedef T* this_type::*unspecified_bool_type;
-
-        operator unspecified_bool_type () const
-        {
-            if(m_pObject == 0)
-            {
-                return 0;
-            }
-            
-            return &this_type::m_pObject;
-        }
-
-        void swap(shared_ptr &rSharedPointer);
-    };
-
-    template<class T, class T2>
-    shared_ptr<T> dynamic_pointer_cast(const shared_ptr<T2> &rSharedPointer);
-
-    template<class T1, class T2>
-    bool operator==(const shared_ptr<T1>& sp1, const shared_ptr<T2>& sp2);
-    template<class T1, class T2>
-    bool operator!=(const shared_ptr<T1>& sp1, const shared_ptr<T2>& sp2);
-
-}} //namespace AVT::VmbAPI
-
-#include <VimbaCPP/Include/SharedPointer_impl.h>
-
-#endif //AVT_VMBAPI_SHAREDPOINTER_H
diff --git a/VimbaCPP/Include/SharedPointerDefines.h b/VimbaCPP/Include/SharedPointerDefines.h
deleted file mode 100644
index d4184fd2095319bb1204169492ec9a2039dfa0ba..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/SharedPointerDefines.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        SharedPointerDefines.h
-
-  Description: Definition of macros for using the standard shared pointer 
-               (std::tr1) for Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_SHAREDPOINTERDEFINES_H
-#define AVT_VMBAPI_SHAREDPOINTERDEFINES_H
-
-//
-// If your version of STL does not provide a shared pointer implementation please see UserSharedPointerDefines.h for information on 
-// how to use another shared pointer than std::shared_ptr.
-//
-
-#ifndef USER_SHARED_POINTER
-
-    #include <VimbaCPP/Include/SharedPointer.h>
-
-    namespace AVT {
-    namespace VmbAPI {
-
-    #define SP_DECL( T )            AVT::VmbAPI::shared_ptr<T>
-    #define SP_SET( sp, rawPtr )    (sp).reset( (rawPtr) )
-    #define SP_RESET( sp )          (sp).reset()
-    #define SP_ISEQUAL( sp1, sp2 )  ( (sp1) == (sp2) )
-    #define SP_ISNULL( sp )         ( NULL == (sp) )
-    #define SP_ACCESS( sp )         (sp).get()
-    #define SP_DYN_CAST( sp, T )    AVT::VmbAPI::dynamic_pointer_cast<T>(sp)
-
-    // These are all uses of a SP_DECL shared_ptr declaration
-    class Interface;
-    typedef SP_DECL( Interface ) InterfacePtr;
-
-    class Camera;
-    typedef SP_DECL( Camera ) CameraPtr;
-
-    class Feature;
-    typedef SP_DECL( Feature ) FeaturePtr;
-
-    class FeatureContainer;
-    typedef SP_DECL( FeatureContainer ) FeatureContainerPtr;
-
-    class IFeatureObserver;
-    typedef SP_DECL( IFeatureObserver ) IFeatureObserverPtr;
-
-    class Frame;
-    typedef SP_DECL( Frame ) FramePtr;
-
-    class FrameHandler;
-    typedef SP_DECL( FrameHandler ) FrameHandlerPtr;
-
-    class IFrameObserver;
-    typedef SP_DECL( IFrameObserver ) IFrameObserverPtr;
-
-    class AncillaryData;
-    typedef SP_DECL( AncillaryData )            AncillaryDataPtr;
-    typedef SP_DECL( const AncillaryData )      ConstAncillaryDataPtr;
-
-    // class IFactory;
-    class ICameraFactory;
-    typedef SP_DECL( ICameraFactory ) ICameraFactoryPtr;
-
-    class ICameraListObserver;
-    typedef SP_DECL( ICameraListObserver ) ICameraListObserverPtr;
-
-    class IInterfaceListObserver;
-    typedef SP_DECL( IInterfaceListObserver ) IInterfaceListObserverPtr;
-
-    class Mutex;
-    typedef SP_DECL( Mutex ) MutexPtr;
-
-    class BasicLockable;
-    typedef SP_DECL( BasicLockable ) BasicLockablePtr;
-
-    }}
-
-#else
-    #include <VimbaCPP/Include/UserSharedPointerDefines.h>
-#endif
-
-
-#endif // AVT_VMBAPI_SHAREDPOINTERDEFINES_H
diff --git a/VimbaCPP/Include/SharedPointer_impl.h b/VimbaCPP/Include/SharedPointer_impl.h
deleted file mode 100644
index d862bbea2fac80dc4d9815e16a49f8f632dd14dd..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/SharedPointer_impl.h
+++ /dev/null
@@ -1,289 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        SharedPointer_impl.h
-
-  Description: Implementation of an example shared pointer class for the Vimba 
-               CPP API.
-               (This include file contains example code only.)
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_SHAREDPOINTER_IMPL_H
-#define AVT_VMBAPI_SHAREDPOINTER_IMPL_H
-
-#include <VimbaCPP/Include/SharedPointer.h>
-#include <stdexcept>
-namespace AVT {
-namespace VmbAPI {
-
-    template <class T>
-    ref_count<T>::ref_count(const ref_count &rRefCount)
-    {
-    }
-
-    template <class T>
-    ref_count<T>& ref_count<T>::operator = (const ref_count &rRefCount)
-    {
-        //This is a dummy method to satisfy the compiler
-        return *this;
-    }
-
-    template <class T>
-    ref_count<T>::ref_count(T *pObject)
-        :   m_pObject(pObject)
-        ,   m_nCount(1)
-    {
-    }
-
-    template <class T>
-    ref_count<T>::~ref_count()
-    {
-        if(NULL != m_pObject)
-        {
-            delete m_pObject;
-        }
-        
-        m_Mutex.Unlock();
-    }
-
-    template <class T>
-    void ref_count<T>::inc()
-    {
-        m_Mutex.Lock();
-        
-        m_nCount++;
-
-        m_Mutex.Unlock();
-    }
-
-    template <class T>
-    void ref_count<T>::dec()
-    {
-        m_Mutex.Lock();
-        if( m_nCount == 0 )
-        {
-            throw std::logic_error("shared pointer, used incorectly");
-        }
-        if(m_nCount > 1)
-        {
-            m_nCount--;
-
-            m_Mutex.Unlock();
-        }
-        else
-        {
-            // m_Mutex will be unlocked in d'tor
-            delete this;
-        }
-    }
-
-    template <class T>
-    long ref_count<T>::use_count() const
-    {
-        return m_nCount;
-    }
-
-    template <class T>
-    template <class T2>
-    void shared_ptr<T>::swap(T2 &rValue1, T2 &rValue2)
-    {
-        T2 buffer = rValue1;
-        rValue1 = rValue2;
-        rValue2 = buffer;
-    }
-
-    template <class T>
-    shared_ptr<T>::shared_ptr()
-        :   m_pRefCount(NULL)
-        ,   m_pObject(NULL)
-    {
-    }
-    
-    template <class T>
-    template <class T2>
-    shared_ptr<T>::shared_ptr(T2 *pObject)
-        :   m_pRefCount(NULL)
-        ,   m_pObject(NULL)
-    {
-        m_pRefCount = new ref_count<T2>(pObject);
-        if(NULL == m_pRefCount)
-        {
-            delete pObject;
-
-            throw std::bad_alloc();
-        }
-
-        m_pObject = pObject;
-    }
-    
-    template <class T>
-    template <class T2>
-    shared_ptr<T>::shared_ptr(const shared_ptr<T2> &rSharedPointer)
-        :   m_pRefCount(NULL)
-        ,   m_pObject(NULL)
-    {
-        if(NULL != rSharedPointer.m_pRefCount)
-        {
-            rSharedPointer.m_pRefCount->inc();
-
-            m_pRefCount = rSharedPointer.m_pRefCount;
-            m_pObject = rSharedPointer.m_pObject;
-        }
-    }
-
-    template <class T>
-    template <class T2>
-    shared_ptr<T>::shared_ptr(const shared_ptr<T2> &rSharedPointer, dynamic_cast_tag)
-        :   m_pRefCount(NULL)
-        ,   m_pObject(NULL)
-    {
-        if(NULL != rSharedPointer.m_pRefCount)
-        {
-            T *pObject = dynamic_cast<T*>(rSharedPointer.m_pObject);
-            if(NULL != pObject)
-            {
-                rSharedPointer.m_pRefCount->inc();
-
-                m_pRefCount = rSharedPointer.m_pRefCount;
-                m_pObject = pObject;
-            }
-        }
-    }
-
-    template <class T>
-    shared_ptr<T>::shared_ptr(const shared_ptr &rSharedPointer)
-        :   m_pRefCount(NULL)
-        ,   m_pObject(NULL)
-    {
-        if(NULL != rSharedPointer.m_pRefCount)
-        {
-            rSharedPointer.m_pRefCount->inc();
-
-            m_pRefCount = rSharedPointer.m_pRefCount;
-            m_pObject = rSharedPointer.m_pObject;
-        }
-    }
-
-    template <class T>
-    shared_ptr<T>::~shared_ptr()
-    {
-        if(NULL != m_pRefCount)
-        {
-            m_pRefCount->dec();
-            m_pRefCount = NULL;
-            m_pObject = NULL;
-        }
-    }
-
-    template <class T>
-    template <class T2>
-    shared_ptr<T>& shared_ptr<T>::operator = (const shared_ptr<T2> &rSharedPointer)
-    {
-        shared_ptr(rSharedPointer).swap(*this);
-
-        return *this;
-    }
-
-    template <class T>
-    shared_ptr<T>& shared_ptr<T>::operator = (const shared_ptr &rSharedPointer)
-    {
-        shared_ptr(rSharedPointer).swap(*this);
-
-        return *this;
-    }
-
-    template <class T>
-    void shared_ptr<T>::reset()
-    {
-        shared_ptr().swap(*this);
-    }
-    
-    template <class T>
-    template <class T2>
-    void shared_ptr<T>::reset(T2 *pObject)
-    {
-        shared_ptr(pObject).swap(*this);
-    }
-
-    template <class T>
-    T* shared_ptr<T>::get() const
-    {
-        return m_pObject;
-    }
-    
-    template <class T>
-    T& shared_ptr<T>::operator * () const
-    {
-        return *m_pObject;
-    }
-    
-    template <class T>
-    T* shared_ptr<T>::operator -> () const
-    {
-        return m_pObject;
-    }
-    
-    template <class T>
-    long shared_ptr<T>::use_count() const
-    {
-        if(NULL == m_pRefCount)
-        {
-            return 0;
-        }
-
-        return m_pRefCount->use_count();
-    }
-    
-    template <class T>
-    bool shared_ptr<T>::unique() const
-    {
-        return (use_count() == 1);
-    }
-
-    template <class T>
-    void shared_ptr<T>::swap(shared_ptr &rSharedPointer)
-    {
-        swap(m_pObject, rSharedPointer.m_pObject);
-        swap(m_pRefCount, rSharedPointer.m_pRefCount);
-    }
-
-    template<class T, class T2>
-    shared_ptr<T> dynamic_pointer_cast(const shared_ptr<T2> &rSharedPointer)
-    {
-        return shared_ptr<T>(rSharedPointer, dynamic_cast_tag());
-    }
-
-    template <class T1, class T2>
-    bool operator==(const shared_ptr<T1>& sp1, const shared_ptr<T2>& sp2)
-    {
-        return sp1.get() == sp2.get();
-    }
-
-    template <class T1, class T2>
-    bool operator!=(const shared_ptr<T1>& sp1, const shared_ptr<T2>& sp2)
-    {
-        return sp1.get() != sp2.get();
-    }
-
-}} //namespace AVT::VmbAPI
-
-#endif //AVT_VMBAPI_SHAREDPOINTER_IMPL_H
diff --git a/VimbaCPP/Include/UserLoggerDefines.h b/VimbaCPP/Include/UserLoggerDefines.h
deleted file mode 100644
index c0c795703438b1fbd58f0aa8c30686c75f1193d2..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/UserLoggerDefines.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        UserLoggerDefines.h
-
-  Description: Definition of macros used for different logging methods.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_USERLOGGERDEFINES_H
-#define AVT_VMBAPI_USERLOGGERDEFINES_H
-
-//
-// To use your own logger implementation add the define USER_LOGGER to your project / compiler settings and complete this header file.
-//
-
-// Add all your required logger implementation headers here.
-// HINT: #include <VimbaCPP/Include/FileLogger.h> is an example and can be safely removed.
-#include <VimbaCPP/Include/FileLogger.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-#define LOGGER_DECL                         FileLogger
-#define LOGGER_DEF                          FileLogger( "VimbaCPP.log", true )
-#define LOGGER_LOG( logger, loggingInfo )   if ( NULL != (logger) ) (logger)->Log( loggingInfo );
-
-
-// These are all uses of LOGGER_DECL logger declarations
-typedef LOGGER_DECL* Logger;
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Include/UserSharedPointerDefines.h b/VimbaCPP/Include/UserSharedPointerDefines.h
deleted file mode 100644
index 25ce43153f2010d0da1f08e07558ddc1e4e27992..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/UserSharedPointerDefines.h
+++ /dev/null
@@ -1,93 +0,0 @@
-#ifndef AVT_VMBAPI_USERSHAREDPOINTER_H
-#define AVT_VMBAPI_USERSHAREDPOINTER_H
-
-#include "..\..\..\..\VimbaNET\Include\NetPointer.h"
-    
-namespace AVT {
-namespace VmbAPINET {
-
-ref class Camera;
-ref class Interface;
-ref class Frame;
-ref class Feature;
-ref class AncillaryData;
-
-};
-};
-
-namespace AVT {
-namespace VmbAPI {
-
-// Set the calls for your implementation of the shared pointer functions
-// a) Declaration
-// b) Reset with argument
-// c) Reset without argument
-// d) == operator
-// e) NULL test
-// f) Access to underlying raw pointer
-
-// a) This is the define for a declaration.
-#define SP_DECL( T )			NetPointer<T>
-// b) This is the define for setting an existing shared pointer.
-#define SP_SET( sp, rawPtr )	sp.Reset( rawPtr )
-// c) This is the define for resetting without an argument to decrease the ref count.
-#define SP_RESET( sp )			sp.Reset()
-// d) This is the define for the equal operator. Shared pointers are usually considered equal when the raw pointers point to the same address.
-#define SP_ISEQUAL( sp1, sp2 )  sp1.IsEqualTo(sp2)
-// e) This is the define for the NULL check.
-#define SP_ISNULL( sp )         sp.IsNull()
-// f) This is the define for the raw pointer access. This is usually accomplished through the dereferencing operator (->).
-#define SP_ACCESS( sp )         sp.AccessNative()
-
-class Camera;
-typedef NetPointer<Camera, AVT::VmbAPINET::Camera> CameraPtr;
-
-class Interface;
-typedef NetPointer<Interface, AVT::VmbAPINET::Interface> InterfacePtr;
-
-class Feature;
-typedef NetPointer<Feature, AVT::VmbAPINET::Feature> FeaturePtr;
-	
-class FeatureContainer;
-typedef SP_DECL( FeatureContainer ) FeatureContainerPtr;
-
-class IFeatureObserver;
-typedef SP_DECL( IFeatureObserver ) IFeatureObserverPtr;
-
-class Frame;
-typedef NetPointer<Frame, AVT::VmbAPINET::Frame> FramePtr;
-
-class FrameHandler;
-typedef SP_DECL( FrameHandler ) FrameHandlerPtr;
-
-class IFrameObserver;
-typedef SP_DECL( IFrameObserver ) IFrameObserverPtr;
-
-class AncillaryData;
-typedef NetPointer<AncillaryData, AVT::VmbAPINET::AncillaryData> AncillaryDataPtr;
-typedef NetPointer<AncillaryData, AVT::VmbAPINET::AncillaryData> ConstAncillaryDataPtr;
-
-class ICameraFactory;
-typedef SP_DECL( ICameraFactory) ICameraFactoryPtr;
-
-class IInterfaceListObserver;
-typedef SP_DECL( IInterfaceListObserver ) IInterfaceListObserverPtr;
-
-class ICameraListObserver;
-typedef SP_DECL( ICameraListObserver ) ICameraListObserverPtr;
-
-class Mutex;
-typedef SP_DECL( Mutex ) MutexPtr;
-
-class BasicLockable;
-typedef SP_DECL( BasicLockable ) BasicLockablePtr;
-
-}}
-
-#include "..\..\..\..\VimbaNET\Include\NetCamera.h"
-#include "..\..\..\..\VimbaNET\Include\NetInterface.h"
-#include "..\..\..\..\VimbaNET\Include\NetFrame.h"
-#include "..\..\..\..\VimbaNET\Include\NetFeature.h"
-#include "..\..\..\..\VimbaNET\Include\NetAncillaryData.h"
-
-#endif /* AVT_VMBAPI_USERSHAREDPOINTER_H */
diff --git a/VimbaCPP/Include/VimbaCPP.h b/VimbaCPP/Include/VimbaCPP.h
deleted file mode 100644
index a38d7e19e5d954ecef0aa2c3b6c35763da78882f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/VimbaCPP.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        VimbaCPP.h
-
-  Description: Main include file for Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-
-#include <VimbaCPP/Include/Camera.h>
-#include <VimbaCPP/Include/Interface.h>
-#include <VimbaCPP/Include/VimbaSystem.h>
-#include <VimbaCPP/Include/FeatureContainer.h>
-#include <VimbaCPP/Include/ICameraFactory.h>
-#include <VimbaCPP/Include/ICameraListObserver.h>
-#include <VimbaCPP/Include/IInterfaceListObserver.h>
-#include <VimbaCPP/Include/IFeatureObserver.h>
-#include <VimbaCPP/Include/IFrameObserver.h>
-#include <VimbaCPP/Include/Frame.h>
diff --git a/VimbaCPP/Include/VimbaCPPCommon.h b/VimbaCPP/Include/VimbaCPPCommon.h
deleted file mode 100644
index 5a78fa88db9cc62a7d7bd7b9452fbff53311d8cb..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/VimbaCPPCommon.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2017 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        VimbaCPPCommon.h
-
-  Description: Common type definitions used in Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_CPPCOMMON_H
-#define AVT_VMBAPI_CPPCOMMON_H
-
-#if defined (_WIN32)
-    #if defined AVT_VMBAPI_CPP_EXPORTS          // DLL exports
-        #define IMEXPORT __declspec(dllexport)
-    #elif defined AVT_VMBAPI_CPP_LIB            // static LIB
-        #define IMEXPORT
-    #else                                       // import
-        #define IMEXPORT __declspec(dllimport)
-    #endif
-#elif defined (__GNUC__) && (__GNUC__ >= 4) && defined (__ELF__)
-    #define IMEXPORT
-#elif defined (__APPLE__)
-    #define IMEXPORT
-#else
-    #error Unknown platform, file needs adaption
-#endif
-
-#include <vector>
-#include <string>
-#include "VimbaC/Include/VmbCommonTypes.h"
-
-namespace AVT {
-namespace VmbAPI {
-
-enum UpdateTriggerType
-{
-    UpdateTriggerPluggedIn           = 0,           // A new camera was discovered by Vimba
-    UpdateTriggerPluggedOut          = 1,           // A camera has disappeared from the bus
-    UpdateTriggerOpenStateChanged    = 3            // The possible opening mode of a camera has changed (e.g., because it was opened by another application)
-};
-
-//
-// Indicate the frame allocation mode.
-//
-enum FrameAllocationMode
-{
-    FrameAllocation_AnnounceFrame                 = 0,   // Use announce frame mode
-    FrameAllocation_AllocAndAnnounceFrame         = 1    // Use alloc and announce mode
-};
-
-typedef std::vector<VmbUint64_t>    Uint64Vector;
-typedef std::vector<VmbInt64_t>     Int64Vector;
-typedef std::vector<VmbUchar_t>     UcharVector;
-typedef std::vector<std::string>    StringVector;
-class EnumEntry;
-typedef std::vector<EnumEntry>      EnumEntryVector;
-
-}} // AVT::VmbAPI
-
-#endif
\ No newline at end of file
diff --git a/VimbaCPP/Include/VimbaSystem.h b/VimbaCPP/Include/VimbaSystem.h
deleted file mode 100644
index cb785c077f0f8cf385a308296e63d89730617e29..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/VimbaSystem.h
+++ /dev/null
@@ -1,379 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        VimbaSystem.h
-
-  Description: Definition of class AVT::VmbAPI::VimbaSystem.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_SYSTEM_H
-#define AVT_VMBAPI_SYSTEM_H
-
-#include <vector>
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/LoggerDefines.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Include/Interface.h>
-#include <VimbaCPP/Include/Camera.h>
-#include <VimbaCPP/Include/ICameraFactory.h>
-#include <VimbaCPP/Include/ICameraListObserver.h>
-#include <VimbaCPP/Include/IInterfaceListObserver.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-typedef std::vector<InterfacePtr> InterfacePtrVector;
-
-class VimbaSystem : public FeatureContainer
-{
-  public:
-    //
-    // Method:      GetInstance()
-    //
-    // Purpose:     Returns a reference to the System singleton.
-    //
-    // Parameters:  none
-    //
-    // Returns:
-    //
-    //  - VimbaSystem&
-    //
-    IMEXPORT static VimbaSystem& GetInstance();
-
-    //
-    // Method:    QueryVersion()
-    //
-    // Purpose:   Retrieve the version number of VmbAPI.
-    //
-    // Parameters:
-    //
-    //  [out]  VmbVersionInfo_t&   version      Reference to the struct where version information
-    //                                          is copied
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       always returned
-    //
-    // Details:    This function can be called at any time, even before the API is
-    //             initialized. All other version numbers may be queried via feature access
-    //
-    IMEXPORT VmbErrorType QueryVersion( VmbVersionInfo_t &version );
-    
-    //
-    // Method:      Startup()
-    //
-    // Purpose:     Initialize the VmbAPI module.
-    //
-    // Parameters:  none
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorInternalFault: An internal fault occurred
-    //
-    // Details:   On successful return, the API is initialized; this is a necessary call.
-    //            This method must be called before any other VmbAPI function is run.
-    //
-    IMEXPORT VmbErrorType Startup();
-
-    //
-    // Method:    Shutdown()
-    //
-    // Purpose:   Perform a shutdown on the API module.
-    //
-    // Parameters: none
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       always returned
-    //
-    // Details:   This will free some resources and deallocate all physical resources if applicable.
-    //
-    IMEXPORT VmbErrorType Shutdown();
-
-    //
-    // Method:    GetInterfaces()
-    //
-    // Purpose:   List all the interfaces currently visible to VmbAPI.
-    //
-    // Parameters:
-    //
-    //  [out]  InterfacePtrVector& interfaces            Vector of shared pointer to Interface object
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorStructSize:    The given struct size is not valid for this API version
-    //  - VmbErrorMoreData:      More data were returned than space was provided
-    //  - VmbErrorInternalFault: An internal fault occurred
-    //
-    // Details:     All the interfaces known via a GenTL are listed by this command and filled into the vector provided.
-    //              If the vector is not empty, new elements will be appended.
-    //              Interfaces can be adapter cards or frame grabber cards, for instance.
-    //
-    VmbErrorType GetInterfaces( InterfacePtrVector &interfaces );
-
-    //
-    // Method:    GetInterfaceByID()
-    //
-    // Purpose:   Gets a specific interface identified by an ID.
-    //
-    // Parameters:
-    //
-    //  [in ]  const char*          pID                 The ID of the interface to get (returned by GetInterfaces())
-    //  [out]  InterfacePtr&        pInterface          Shared pointer to Interface object
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:          If no error
-    //  - VmbErrorApiNotStarted:    VmbStartup() was not called before the current command
-    //  - VmbErrorBadParameter:     "pID" is NULL.
-    //  - VmbErrorStructSize:       The given struct size is not valid for this API version
-    //  - VmbErrorMoreData:         More data were returned than space was provided
-    //
-    // Details:     An interface known via a GenTL is listed by this command and filled into the pointer provided.
-    //              Interface can be an adapter card or a frame grabber card, for instance.
-    //
-    IMEXPORT VmbErrorType GetInterfaceByID( const char *pID, InterfacePtr &pInterface );
-
-    //
-    // Method:      OpenInterfaceByID()
-    //
-    // Purpose:     Open an interface for feature access.
-    //
-    // Parameters:
-    //
-    //  [in ]  const char*      pID                 The ID of the interface to open (returned by GetInterfaces())
-    //  [out]  InterfacePtr&    pInterface          A shared pointer to the interface
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorNotFound:      The designated interface cannot be found
-    //  - VmbErrorBadParameter:  "pID" is NULL.
-    //
-    //
-    // Details:     An interface can be opened if interface-specific control is required, such as I/O pins
-    //              on a frame grabber card. Control is then possible via feature access methods.
-    //
-    IMEXPORT VmbErrorType OpenInterfaceByID( const char *pID, InterfacePtr &pInterface );
-
-    //
-    // Method:    GetCameras()
-    //
-    // Purpose:   Retrieve a list of all cameras.
-    //
-    // Parameters:
-    //
-    //  [out]  CameraPtrVector& cameras            Vector of shared pointer to Camera object
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:       If no error
-    //  - VmbErrorApiNotStarted: VmbStartup() was not called before the current command
-    //  - VmbErrorStructSize:    The given struct size is not valid for this API version
-    //  - VmbErrorMoreData:      More data were returned than space was provided
-    //
-    // Details:     A camera known via a GenTL is listed by this command and filled into the pointer provided.
-    //
-    VmbErrorType GetCameras( CameraPtrVector &cameras );
-
-    //
-    // Method:    GetCameraByID()
-    //
-    // Purpose:   Gets a specific camera identified by an ID. The returned camera is still closed.
-    //
-    // Parameters:
-    //
-    //  [in ]  const char*          pID                 The ID of the camera to get
-    //  [out]  CameraPtr&           pCamera             Shared pointer to camera object
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:          If no error
-    //  - VmbErrorApiNotStarted:    VmbStartup() was not called before the current command
-    //  - VmbErrorBadParameter:     "pID" is NULL.
-    //  - VmbErrorStructSize:       The given struct size is not valid for this API version
-    //  - VmbErrorMoreData:         More data were returned than space was provided
-    //
-    // Details:     A camera known via a GenTL is listed by this command and filled into the pointer provided.
-    //              Only static properties of the camera can be fetched until the camera has been opened.
-    //              "pID" might be one of the following: 
-    //              "169.254.12.13" for an IP address,
-    //              "000F314C4BE5" for a MAC address or 
-    //              "DEV_1234567890" for an ID as reported by Vimba
-    //
-    IMEXPORT VmbErrorType GetCameraByID( const char *pID, CameraPtr &pCamera );
-    
-    //
-    // Method:      OpenCameraByID()
-    //
-    // Purpose:     Gets a specific camera identified by an ID. The returned camera is already open.
-    //
-    // Parameters:
-    //
-    //  [in ]   const char*         pID                 The unique ID of the camera to get
-    //  [in ]   VmbAccessModeType   eAccessMode         The requested access mode
-    //  [out]   CameraPtr&          pCamera             A shared pointer to the camera
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:          If no error
-    //  - VmbErrorApiNotStarted:    VmbStartup() was not called before the current command
-    //  - VmbErrorNotFound:         The designated interface cannot be found
-    //  - VmbErrorBadParameter:     "pID" is NULL.
-    //
-    // Details:     A camera can be opened if camera-specific control is required, such as I/O pins
-    //              on a frame grabber card. Control is then possible via feature access methods.
-    //              "pID" might be one of the following: 
-    //              "169.254.12.13" for an IP address,
-    //              "000F314C4BE5" for a MAC address or 
-    //              "DEV_1234567890" for an ID as reported by Vimba
-    //
-    IMEXPORT VmbErrorType OpenCameraByID( const char *pID, VmbAccessModeType eAccessMode, CameraPtr &pCamera );
-
-    //
-    // Method:      RegisterCameraListObserver()
-    //
-    // Purpose:     Registers an instance of camera observer whose CameraListChanged() method gets called
-    //              as soon as a camera is plugged in, plugged out, or changes its access status
-    //
-    // Parameters:
-    //
-    //  [in ]       const ICameraListObserverPtr&   pObserver   A shared pointer to an object derived from ICameraListObserver
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //  - VmbErrorBadParameter: "pObserver" is NULL.
-    //  - VmbErrorInvalidCall:  If the very same observer is already registered
-    //
-    IMEXPORT VmbErrorType RegisterCameraListObserver( const ICameraListObserverPtr &pObserver );
-
-    //
-    // Method:      UnregisterCameraListObserver()
-    //
-    // Purpose:     Unregisters a camera observer
-    //
-    // Parameters:
-    //
-    //  [in ]       const ICameraListObserverPtr&   pObserver   A shared pointer to an object derived from ICameraListObserver
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //  - VmbErrorNotFound:     If the observer is not registered
-    //  - VmbErrorBadParameter: "pObserver" is NULL.
-    //
-    IMEXPORT VmbErrorType UnregisterCameraListObserver( const ICameraListObserverPtr &pObserver );
-
-    //
-    // Method:      RegisterInterfaceListObserver()
-    //
-    // Purpose:     Registers an instance of interface observer whose InterfaceListChanged() method gets called
-    //              as soon as an interface is plugged in, plugged out, or changes its access status
-    //
-    // Parameters:
-    //
-    //  [in ]       const IInterfaceListObserverPtr&    pObserver   A shared pointer to an object derived from IInterfaceListObserver
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //  - VmbErrorBadParameter: "pObserver" is NULL.
-    //  - VmbErrorInvalidCall:  If the very same observer is already registered
-    //
-    IMEXPORT VmbErrorType RegisterInterfaceListObserver( const IInterfaceListObserverPtr &pObserver );
-
-    //
-    // Method:      UnregisterInterfaceListObserver()
-    //
-    // Purpose:     Unregisters an interface observer
-    //
-    // Parameters:
-    //
-    //  [in ]       const IInterfaceListObserverPtr&    pObserver   A shared pointer to an object derived from IInterfaceListObserver
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //  - VmbErrorNotFound:     If the observer is not registered
-    //  - VmbErrorBadParameter: "pObserver" is NULL.
-    //
-    IMEXPORT VmbErrorType UnregisterInterfaceListObserver( const IInterfaceListObserverPtr &pObserver );
-
-    //
-    // Method:      RegisterCameraFactory()
-    //
-    // Purpose:     Registers an instance of camera factory. When a custom camera factory is registered, all instances of type camera
-    //              will be set up accordingly.
-    //
-    // Parameters:
-    //
-    //  [in ]       const ICameraFactoryPtr&        pCameraFactory  A shared pointer to an object derived from ICameraFactory
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //  - VmbErrorBadParameter: "pCameraFactory" is NULL.
-    //
-    IMEXPORT VmbErrorType RegisterCameraFactory( const ICameraFactoryPtr &pCameraFactory );
-
-    //
-    // Method:      UnregisterCameraFactory()
-    //
-    // Purpose:     Unregisters the camera factory. After unregistering the default camera class is used.
-    //
-    // Returns:
-    //
-    //  - VmbErrorSuccess:      If no error
-    //
-    IMEXPORT VmbErrorType UnregisterCameraFactory();
-
-    // Mapping of handle to CameraPtr
-    CameraPtr GetCameraPtrByHandle( const VmbHandle_t handle ) const;
-
-    Logger GetLogger() const;
-
-  private:
-    // Singleton.
-    static VimbaSystem _instance;
-    VimbaSystem();
-    VimbaSystem( const VimbaSystem& );
-    ~VimbaSystem();
-    VimbaSystem& operator=( const VimbaSystem& system );
-    
-    struct Impl;
-    Impl *m_pImpl;
-
-    IMEXPORT VmbErrorType GetCameras( CameraPtr *pCameras, VmbUint32_t &size );
-    IMEXPORT VmbErrorType GetInterfaces( InterfacePtr *pInterfaces, VmbUint32_t &size );
-};
-
-#include <VimbaCPP/Include/VimbaSystem.hpp>
-
-}} // namespace AVT::VmbAPI
-#endif
diff --git a/VimbaCPP/Include/VimbaSystem.hpp b/VimbaCPP/Include/VimbaSystem.hpp
deleted file mode 100644
index 176c9b8a9a8e98d88e505571af4c3b078e65fe57..0000000000000000000000000000000000000000
--- a/VimbaCPP/Include/VimbaSystem.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
-  -----------------------------------------------------------------------------
-
-  File:        VimbaSystem.hpp
-
-  Description: Inline wrapper functions for class AVT::VmbAPI::VimbaSystem.
-
-  -----------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_VIMBASYSTEM_HPP
-#define AVT_VMBAPI_VIMBASYSTEM_HPP
-
-//
-// Inline wrapper functions that allocate memory for STL objects in the application's context
-// and to pass data across DLL boundaries using arrays
-//
-inline VmbErrorType VimbaSystem::GetInterfaces( InterfacePtrVector &rInterfaces )
-{
-    VmbErrorType    res;
-    VmbUint32_t     nSize;
-
-    res = GetInterfaces( NULL, nSize );
-    if ( VmbErrorSuccess == res )
-    {
-        if( 0 != nSize)
-        {
-            try
-            {
-                InterfacePtrVector tmpInterfaces( nSize );
-                res = GetInterfaces( &tmpInterfaces[0], nSize );
-                if( VmbErrorSuccess == res )
-                {
-                    rInterfaces.swap( tmpInterfaces);
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rInterfaces.clear();
-        }
-    }
-
-    return res;
-}
-
-inline VmbErrorType VimbaSystem::GetCameras( CameraPtrVector &rCameras )
-{
-    VmbErrorType    res;
-    VmbUint32_t     nSize;
-
-    res = GetCameras( NULL, nSize );
-    if (    VmbErrorSuccess == res)
-    {
-        if( 0 != nSize)
-        {
-            try
-            {
-                CameraPtrVector tmpCameras( nSize );
-                res = GetCameras( &tmpCameras[0], nSize );
-                if( VmbErrorSuccess == res )
-                {
-                    if( nSize < tmpCameras.size() )
-                    {
-                        tmpCameras.resize( nSize);
-                    }
-                    rCameras.swap( tmpCameras );
-                }
-            }
-            catch(...)
-            {
-                return VmbErrorResources;
-            }
-        }
-        else
-        {
-            rCameras.clear();
-        }
-    }
-
-    return res;
-}
-
-#endif
diff --git a/VimbaCPP/Source/AncillaryData.cpp b/VimbaCPP/Source/AncillaryData.cpp
deleted file mode 100644
index 06da1c0d34af44923709705614fb0bf91cc8da8d..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/AncillaryData.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        AncillaryData.cpp
-
-  Description: Implementation of class AVT::VmbAPI::AncillaryData.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Include/AncillaryData.h>
-
-#define IMAGE_CHUNK_TRAILER_LENGTH      8
-
-
-namespace AVT {
-namespace VmbAPI {
-
-struct AncillaryData::Impl
-{
-    VmbFrame_t  *m_pFrame;
-};
-
-AncillaryData::AncillaryData()
-{
-    // No default ctor
-}
-
-AncillaryData::AncillaryData( const AncillaryData& )
-{
-    // No copy ctor
-}
-
-AncillaryData& AncillaryData::operator=( const AncillaryData& )
-{
-    // No assignment operator
-    return *this;
-}
-
-AncillaryData::AncillaryData( VmbFrame_t *pFrame )
-    :   m_pImpl( new Impl() )
-{
-    m_pImpl->m_pFrame = pFrame;
-}
-
-AncillaryData::~AncillaryData()
-{
-    delete m_pImpl;
-}
-
-VmbErrorType AncillaryData::GetBuffer( VmbUchar_t* &rpValue )
-{
-    VmbErrorType result = VmbErrorNotSupported;
-
-    if (m_pImpl->m_pFrame->ancillarySize > 0)
-    {
-        rpValue = (VmbUchar_t*)m_pImpl->m_pFrame->buffer + m_pImpl->m_pFrame->imageSize + IMAGE_CHUNK_TRAILER_LENGTH;
-        result = VmbErrorSuccess;
-    }
-    
-    return result;
-}
-
-VmbErrorType AncillaryData::GetBuffer( const VmbUchar_t* &rpValue ) const
-{
-    VmbErrorType result = VmbErrorNotSupported;
-
-    if (m_pImpl->m_pFrame->ancillarySize > 0)
-    {
-        rpValue = (VmbUchar_t*)m_pImpl->m_pFrame->buffer + m_pImpl->m_pFrame->imageSize + IMAGE_CHUNK_TRAILER_LENGTH;
-        result = VmbErrorSuccess;
-    }
-    
-    return result;
-}
-
-VmbErrorType AncillaryData::GetSize( VmbUint32_t &nSize ) const
-{
-    nSize = m_pImpl->m_pFrame->ancillarySize;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType AncillaryData::Open()
-{
-    VmbError_t res;
-    VmbHandle_t hHandle;
-
-    res = VmbAncillaryDataOpen( m_pImpl->m_pFrame, &hHandle );
-
-    if ( VmbErrorSuccess == res )
-    {
-        SetHandle( hHandle );
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbError_t AncillaryData::Close()
-{
-    VmbError_t res = VmbErrorSuccess;
-
-    res = VmbAncillaryDataClose( GetHandle() );
-
-    Reset();
-
-    RevokeHandle();
-    
-    return (VmbErrorType)res;
-}
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/BaseFeature.cpp b/VimbaCPP/Source/BaseFeature.cpp
deleted file mode 100644
index 97059ce5ecb5918077de4c652905e9504cfc4c6b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/BaseFeature.cpp
+++ /dev/null
@@ -1,877 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        BaseFeature.cpp
-
-  Description: Implementation of base class AVT::VmbAPI::BaseFeature.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#pragma warning(disable:4996)
-#include <VimbaCPP/Source/BaseFeature.h>
-#pragma warning(default:4996)
-
-#include <VimbaCPP/Include/FeatureContainer.h>
-#include <VimbaCPP/Include/VimbaSystem.h>
-#include <VimbaCPP/Source/ConditionHelper.h>
-#include <VimbaCPP/Source/Helper.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-struct BaseFeature::Impl
-{
-    LockableVector<IFeatureObserverPtr> m_observers;
-
-    FeaturePtrVector m_affectedFeatures;
-    FeaturePtrVector m_selectedFeatures;
-    bool m_bAffectedFeaturesFetched;
-    bool m_bSelectedFeaturesFetched;
-
-    ConditionHelper m_observersConditionHelper;
-    ConditionHelper m_conditionHelper;
-
-    static void VMB_CALL InvalidationCallback( const VmbHandle_t handle, const char *name, void *context );
-};
-
-BaseFeature::BaseFeature( const VmbFeatureInfo_t *pFeatureInfo, FeatureContainer *pFeatureContainer )
-    :   m_pImpl( new Impl() )
-    ,   m_pFeatureContainer( pFeatureContainer )
-{
-    m_pImpl->m_bAffectedFeaturesFetched = false;
-    m_pImpl->m_bSelectedFeaturesFetched = false;
-
-    if ( NULL != pFeatureInfo )
-    {
-        m_featureInfo.category.assign( pFeatureInfo->category ? pFeatureInfo->category : "" );
-        m_featureInfo.description.assign( pFeatureInfo->description ? pFeatureInfo->description : "" );
-        m_featureInfo.displayName.assign( pFeatureInfo->displayName ? pFeatureInfo->displayName : "" );
-        m_featureInfo.featureDataType = pFeatureInfo->featureDataType;
-        m_featureInfo.featureFlags = pFeatureInfo->featureFlags;
-        m_featureInfo.hasAffectedFeatures = pFeatureInfo->hasAffectedFeatures;
-        m_featureInfo.hasSelectedFeatures = pFeatureInfo->hasSelectedFeatures;
-        m_featureInfo.name.assign( pFeatureInfo->name ? pFeatureInfo->name : "" );
-        m_featureInfo.pollingTime = pFeatureInfo->pollingTime;
-        m_featureInfo.representation.assign( pFeatureInfo->representation ? pFeatureInfo->representation : "" );
-        m_featureInfo.sfncNamespace.assign( pFeatureInfo->sfncNamespace ? pFeatureInfo->sfncNamespace : "" );
-        m_featureInfo.tooltip.assign( pFeatureInfo->tooltip ? pFeatureInfo->tooltip : "" );
-        m_featureInfo.unit.assign( pFeatureInfo->unit ? pFeatureInfo->unit : "" );
-        m_featureInfo.visibility = pFeatureInfo->visibility;
-        m_featureInfo.isStreamable = pFeatureInfo->isStreamable;
-
-        if ( NULL == m_pFeatureContainer ) // m_pFeatureContainer == NULL (Just for safety)
-        {
-            // Do some logging
-            LOG_FREE_TEXT( "No valid feature container pointer passed" );
-        }
-    }
-    else // m_featureInfo == NULL (Just for safety)
-    {
-        // Do some logging
-        LOG_FREE_TEXT( "No valid feature info pointer passed" );
-    }
-}
-
-BaseFeature::BaseFeature()
-{
-    // No default ctor
-}
-
-BaseFeature::BaseFeature( const BaseFeature& )
-{
-    // No copy ctor
-}
-
-BaseFeature::~BaseFeature()
-{
-    // Before destruction we unregister all observers and all callbacks
-    ResetFeatureContainer();
-
-    delete m_pImpl;
-}
-
-// Unregisters all observers before it resets the feature container pointer.
-void BaseFeature::ResetFeatureContainer()
-{
-    if ( NULL != m_pFeatureContainer )
-    {
-        // Camera still open
-        if ( NULL != m_pFeatureContainer->GetHandle() )
-        {
-            VmbFeatureInvalidationUnregister( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), m_pImpl->InvalidationCallback );
-        }
-
-        // Begin exclusive write lock this feature
-        if ( true == m_pImpl->m_conditionHelper.EnterWriteLock( GetMutex(), true ))
-        {
-            m_pFeatureContainer = NULL;
-
-            // End write lock this feature
-            m_pImpl->m_conditionHelper.ExitWriteLock( GetMutex() );
-        }
-        else
-        {
-            LOG_FREE_TEXT( "Could not reset a feature's feature container reference. ");
-        }
-        
-    }
-    
-    // Begin exclusive write lock observer list
-    if ( true == m_pImpl->m_observersConditionHelper.EnterWriteLock( m_pImpl->m_observers, true ))
-    {
-        m_pImpl->m_observers.Vector.clear();
-        
-        // End write lock observer list
-        m_pImpl->m_observersConditionHelper.ExitWriteLock( m_pImpl->m_observers );
-    }
-}
-
-void VMB_CALL BaseFeature::Impl::InvalidationCallback( const VmbHandle_t handle, const char * /*name*/, void *context )
-{
-    BaseFeature *pFeature = (BaseFeature*)context;
-    if ( NULL != pFeature )
-    {
-        if ( NULL != handle )
-        {
-            // Begin read lock this feature
-            if ( true == pFeature->m_pImpl->m_conditionHelper.EnterReadLock( pFeature->GetMutex() ))
-            {
-                if ( NULL != pFeature->m_pFeatureContainer )
-                {
-                    FeaturePtr pFeaturePtrFromMap;
-                    if ( VmbErrorSuccess == pFeature->m_pFeatureContainer->GetFeatureByName( pFeature->m_featureInfo.name.c_str(), pFeaturePtrFromMap ) )
-                    {
-                        // Begin read lock observer list
-                        if ( true == pFeature->m_pImpl->m_observersConditionHelper.EnterReadLock( pFeature->m_pImpl->m_observers ))
-                        {
-                            for (   IFeatureObserverPtrVector::iterator iter = pFeature->m_pImpl->m_observers.Vector.begin();
-                                    pFeature->m_pImpl->m_observers.Vector.end() != iter;
-                                    ++iter)
-                            {
-                                SP_ACCESS(( *iter ))->FeatureChanged( pFeaturePtrFromMap );
-                            }
-
-                            // End read lock observer list
-                            pFeature->m_pImpl->m_observersConditionHelper.ExitReadLock( pFeature->m_pImpl->m_observers );
-                        }
-                        else
-                        {
-                            LOG_FREE_TEXT( "Could not lock feature observer list.")
-                        }
-                    }
-                    else // GetFeatureByName() failed
-                    {
-                        // Do some logging
-                        LOG_FREE_TEXT( "GetFeatureByName failed" )
-                    }
-                }
-                else // m_pFeatureContainer == NULL (Feature destroyed or device closed / destroyed)
-                {
-                    // Do some logging
-                    LOG_FREE_TEXT( "Feature destroyed or device closed / destroyed" );
-                }
-
-                // End read lock this feature
-                pFeature->m_pImpl->m_conditionHelper.ExitReadLock( pFeature->GetMutex() );
-            }
-            else
-            {
-                LOG_FREE_TEXT( "Could not lock feature.")
-            }
-        }
-        else // m_handle == NULL (device closed / destroyed)
-        {
-            // Do some logging
-            LOG_FREE_TEXT( "Device closed / destroyed" )
-        }
-    }
-    else // pFeature == NULL (Just for safety)
-    {
-        // Do some logging
-        LOG_FREE_TEXT( "Feature pointer is null" )
-    }
-}
-
-VmbErrorType BaseFeature::RegisterObserver( const IFeatureObserverPtr &rObserver )
-{
-    if ( SP_ISNULL( rObserver ))
-    {
-        return VmbErrorBadParameter;
-    }    
-
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    VmbError_t res = VmbErrorSuccess;
-
-    // Begin write lock observer list
-    if ( true == m_pImpl->m_observersConditionHelper.EnterWriteLock( m_pImpl->m_observers ))
-    {
-        // The very same observer cannot be registered twice
-        for ( size_t i=0; i<m_pImpl->m_observers.Vector.size(); ++i )
-        {
-            if ( SP_ISEQUAL( rObserver, m_pImpl->m_observers.Vector[i] ))
-            {
-                res = VmbErrorInvalidCall;
-                break;
-            }
-        }
-
-        if ( VmbErrorSuccess == res )
-        {
-            if ( 0 == m_pImpl->m_observers.Vector.size() )
-            {
-                res = VmbFeatureInvalidationRegister( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), m_pImpl->InvalidationCallback, this );
-            }
-
-            if ( VmbErrorSuccess == res )
-            {
-                m_pImpl->m_observers.Vector.push_back( rObserver );
-            }
-        }
-        
-        // End write lock observer list
-        m_pImpl->m_observersConditionHelper.ExitWriteLock( m_pImpl->m_observers );
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType BaseFeature::UnregisterObserver( const IFeatureObserverPtr &rObserver )
-{
-    if ( SP_ISNULL( rObserver ))
-    {
-        return VmbErrorBadParameter;
-    }    
-
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    VmbError_t res = VmbErrorNotFound;
-
-    // Begin exclusive write lock observer list
-    if ( true == m_pImpl->m_observersConditionHelper.EnterWriteLock( m_pImpl->m_observers, true ))
-    {
-        for (   IFeatureObserverPtrVector::iterator iter = m_pImpl->m_observers.Vector.begin();
-                m_pImpl->m_observers.Vector.end() != iter;)
-        {
-            if ( SP_ISEQUAL( rObserver, *iter ))
-            {
-                // If we are about to unregister the last observer we cancel all invalidation notifications
-                if ( 1 == m_pImpl->m_observers.Vector.size() )
-                {
-                    res = VmbFeatureInvalidationUnregister( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), m_pImpl->InvalidationCallback );
-                }
-                if (    VmbErrorSuccess == res
-                     || 1 < m_pImpl->m_observers.Vector.size() )
-                {
-                    iter = m_pImpl->m_observers.Vector.erase( iter );
-                    res = VmbErrorSuccess;
-                }
-                break;
-            }
-            else
-            {
-                ++iter;
-            }
-        }
-
-        // End write lock observer list
-        m_pImpl->m_observersConditionHelper.ExitWriteLock( m_pImpl->m_observers );
-    }
-    else
-    {
-        LOG_FREE_TEXT( "Could not lock feature observer list.")
-        res = VmbErrorInternalFault;
-    }
-    
-    return (VmbErrorType)res;
-}
-
-// Gets the value of a feature of type VmbFeatureDataInt
-VmbErrorType BaseFeature::GetValue( VmbInt64_t & /*rnValue*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-// Sets the value of a feature of type VmbFeatureDataInt
-VmbErrorType BaseFeature::SetValue( const VmbInt64_t & /*rnValue*/ )
-{
-    return VmbErrorWrongType;
-}
-
-// Sets the value of a feature of type VmbFeatureDataInt
-VmbErrorType BaseFeature::SetValue( const VmbInt32_t & /*rnValue*/ )
-{
-    return VmbErrorWrongType;
-}
-
-// Gets the range of a feature of type VmbFeatureDataInt
-VmbErrorType BaseFeature::GetRange( VmbInt64_t & /*rnMinimum*/, VmbInt64_t & /*rnMaximum*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-VmbErrorType BaseFeature::HasIncrement( VmbBool_t & /*incrementSupported*/) const
-{
-    return VmbErrorWrongType;
-}
-// Gets the increment of a feature of type VmbFeatureDataInt
-VmbErrorType BaseFeature::GetIncrement( VmbInt64_t & /*rnIncrement*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-// Gets the increment of a feature of type VmbFeatureDataFloat
-VmbErrorType BaseFeature::GetIncrement( double & /*rnIncrement*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-// Gets the value of a feature of type VmbFeatureDataFloat
-VmbErrorType BaseFeature::GetValue( double & /*rfValue*/) const
-{
-    return VmbErrorWrongType;
-}
-
-// Sets the value of a feature of type VmbFeatureDataFloat
-VmbErrorType BaseFeature::SetValue( const double & /*rfValue*/ )
-{
-    return VmbErrorWrongType;
-}
-
-// Gets the range of a feature of type VmbFeatureDataFloat
-VmbErrorType BaseFeature::GetRange( double & /*rfMinimum*/, double & /*rfMaximum*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-// Sets the value of a feature of type VmbFeatureDataEnum
-// Sets the value of a feature of type VmbFeatureDataString
-VmbErrorType BaseFeature::SetValue( const char * /*pStrValue*/ )
-{
-    return VmbErrorWrongType;
-}
-
-// Gets the enum entry of a feature of type VmbFeatureDataEnum
-VmbErrorType BaseFeature::GetEntry( EnumEntry & /*entry*/, const char * /*pStrEntryName*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-// Gets all possible enum entries of a feature of type VmbFeatureDataEnum
-VmbErrorType BaseFeature::GetEntries( EnumEntry * /*pEnumEntries*/, VmbUint32_t & /*size*/ )
-{
-    return VmbErrorWrongType;
-}
-
-// Gets all possible values as string of a feature of type VmbFeatureDataEnum
-VmbErrorType BaseFeature::GetValues( const char ** /*pStrValues*/, VmbUint32_t & /*rnSize*/ )
-{
-    return VmbErrorWrongType;
-}
-
-// Gets all possible values as integer of a feature of type VmbFeatureDataEnum
-VmbErrorType BaseFeature::GetValues( VmbInt64_t * /*pnValues*/, VmbUint32_t & /*rnSize*/ )
-{
-    return VmbErrorWrongType;
-}
-
-// Indicates whether a particular enum value as string of a feature of type VmbFeatureDataEnum is available
-VmbErrorType BaseFeature::IsValueAvailable( const char * /*pStrValue*/, bool & /*bAvailable*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-// Indicates whether a particular enum value as integer of a feature of type VmbFeatureDataEnum is available
-VmbErrorType BaseFeature::IsValueAvailable( const VmbInt64_t /*nValue*/, bool & /*bAvailable*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-// Gets the value of a feature of type VmbFeatureDataString
-// Gets the value of a feature of type VmbFeatureDataEnum
-VmbErrorType BaseFeature::GetValue( char * const /*pStrValue*/, VmbUint32_t & /*length*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-// Gets the value of a feature of type VmbFeatureDataBool
-VmbErrorType BaseFeature::GetValue( bool & /*rbValue*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-// Sets the value of a feature of type VmbFeatureDataBool
-VmbErrorType BaseFeature::SetValue( bool /*bValue*/ )
-{
-    return VmbErrorWrongType;
-}
-
-// Executes a feature of type VmbFeatureDataCommand
-VmbErrorType BaseFeature::RunCommand() 
-{
-    return VmbErrorWrongType;
-}
-
-// Indicates whether a feature of type VmbFeatureDataCommand finished execution
-VmbErrorType BaseFeature::IsCommandDone( bool & /*bIsDone*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-// Gets the value of a feature of type VmbFeatureDataRaw
-VmbErrorType BaseFeature::GetValue( VmbUchar_t * /*pValue*/, VmbUint32_t & /*rnSize*/, VmbUint32_t & /*rnSizeFilled*/ ) const
-{
-    return VmbErrorWrongType;
-}
-
-// Sets the value of a feature of type VmbFeatureDataRaw
-VmbErrorType BaseFeature::SetValue( const VmbUchar_t * /*pValue*/, VmbUint32_t /*nSize*/ )
-{
-    return VmbErrorWrongType;
-}
-
-VmbErrorType BaseFeature::GetName( char * const pStrName, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrName )
-    {
-        rnLength = (VmbUint32_t)m_featureInfo.name.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_featureInfo.name.length() <= rnLength )
-    {
-        std::copy( m_featureInfo.name.begin(), m_featureInfo.name.end(), pStrName );
-        rnLength = (VmbUint32_t)m_featureInfo.name.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType BaseFeature::GetDisplayName( char * const pStrDisplayName, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrDisplayName )
-    {
-        rnLength = (VmbUint32_t)m_featureInfo.displayName.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_featureInfo.displayName.length() <= rnLength )
-    {
-        std::copy( m_featureInfo.displayName.begin(), m_featureInfo.displayName.end(), pStrDisplayName );
-        rnLength = (VmbUint32_t)m_featureInfo.displayName.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType BaseFeature::GetDataType( VmbFeatureDataType &reDataType ) const
-{
-    reDataType = (VmbFeatureDataType)m_featureInfo.featureDataType;
-    
-    return VmbErrorSuccess;
-}
-
-VmbErrorType BaseFeature::GetFlags( VmbFeatureFlagsType &reFlags ) const
-{
-    reFlags = (VmbFeatureFlagsType)m_featureInfo.featureFlags;
-        
-    return VmbErrorSuccess;
-}
-
-VmbErrorType BaseFeature::GetCategory( char * const pStrCategory, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrCategory )
-    {
-        rnLength = (VmbUint32_t)m_featureInfo.category.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_featureInfo.category.length() <= rnLength )
-    {
-        std::copy( m_featureInfo.category.begin(), m_featureInfo.category.end(), pStrCategory );
-        rnLength = (VmbUint32_t)m_featureInfo.category.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType BaseFeature::GetPollingTime( VmbUint32_t &rnPollingTime ) const
-{
-    rnPollingTime = m_featureInfo.pollingTime;
-    
-    return VmbErrorSuccess;
-}
-
-VmbErrorType BaseFeature::GetUnit( char * const pStrUnit, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrUnit )
-    {
-        rnLength = (VmbUint32_t)m_featureInfo.unit.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_featureInfo.unit.length() <= rnLength )
-    {
-        std::copy( m_featureInfo.unit.begin(), m_featureInfo.unit.end(), pStrUnit );
-        rnLength = (VmbUint32_t)m_featureInfo.unit.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType BaseFeature::GetRepresentation( char * const pStrRepresentation, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrRepresentation )
-    {
-        rnLength = (VmbUint32_t)m_featureInfo.representation.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_featureInfo.representation.length() <= rnLength )
-    {
-        std::copy( m_featureInfo.representation.begin(), m_featureInfo.representation.end(), pStrRepresentation );
-        rnLength = (VmbUint32_t)m_featureInfo.representation.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType BaseFeature::GetVisibility( VmbFeatureVisibilityType &reVisibility ) const
-{
-    reVisibility = (VmbFeatureVisibilityType)m_featureInfo.visibility;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType BaseFeature::GetToolTip( char * const pStrToolTip, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrToolTip )
-    {
-        rnLength = (VmbUint32_t)m_featureInfo.tooltip.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_featureInfo.tooltip.length() <= rnLength )
-    {
-        std::copy( m_featureInfo.tooltip.begin(), m_featureInfo.tooltip.end(), pStrToolTip );
-        rnLength = (VmbUint32_t)m_featureInfo.tooltip.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType BaseFeature::GetDescription( char * const pStrDescription, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrDescription )
-    {
-        rnLength = (VmbUint32_t)m_featureInfo.description.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_featureInfo.description.length() <= rnLength )
-    {
-        std::copy( m_featureInfo.description.begin(), m_featureInfo.description.end(), pStrDescription );
-        rnLength = (VmbUint32_t)m_featureInfo.description.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType BaseFeature::GetSFNCNamespace( char * const pStrSFNCNamespace, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrSFNCNamespace )
-    {
-        rnLength = (VmbUint32_t)m_featureInfo.sfncNamespace.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_featureInfo.sfncNamespace.length() <= rnLength )
-    {
-        std::copy( m_featureInfo.sfncNamespace.begin(), m_featureInfo.sfncNamespace.end(), pStrSFNCNamespace );
-        rnLength = (VmbUint32_t)m_featureInfo.sfncNamespace.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType BaseFeature::GetAffectedFeatures( FeaturePtr *pAffectedFeatures, VmbUint32_t &rnSize )
-{
-    VmbError_t res;
-
-    if ( NULL == pAffectedFeatures )
-    {
-        // Affected features were fetched before
-        if ( true == m_pImpl->m_bAffectedFeaturesFetched )
-        {
-            rnSize = (VmbUint32_t)m_pImpl->m_affectedFeatures.size();
-
-            res = VmbErrorSuccess;
-        }
-        // Affected features have not been fetched before
-        else
-        {
-            return (VmbErrorType)VmbFeatureListAffected( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), NULL, 0, &rnSize, sizeof(VmbFeatureInfo_t) );
-        }
-    }
-    else
-    {
-        // Affected features were fetched before
-        if ( true == m_pImpl->m_bAffectedFeaturesFetched )
-        {
-            if ( rnSize < m_pImpl->m_affectedFeatures.size() )
-            {
-                return VmbErrorMoreData;
-            }
-
-            rnSize = (VmbUint32_t)m_pImpl->m_affectedFeatures.size();
-
-            std::copy( m_pImpl->m_affectedFeatures.begin(), m_pImpl->m_affectedFeatures.end(), pAffectedFeatures );
-
-            res = VmbErrorSuccess;
-        }
-        // Affected features have not been fetched before
-        else
-        {
-            // Check whether the given array size fits
-            VmbUint32_t nSize = 0;
-            res = VmbFeatureListAffected( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), NULL, 0, &nSize, sizeof(VmbFeatureInfo_t) );
-
-            m_pImpl->m_bAffectedFeaturesFetched = true;
-
-            if ( rnSize < nSize )
-            {
-                return VmbErrorMoreData;
-            }
-
-            rnSize = (VmbUint32_t)nSize;
-
-            if (    VmbErrorSuccess != res
-                 || 0 == rnSize )
-            {
-                return (VmbErrorType)res;
-            }
-
-            // Fetch affected features and store them as well as hand them out
-            std::vector<VmbFeatureInfo_t> affectedFeatureInfos;
-            affectedFeatureInfos.resize( rnSize );
-
-            res = VmbFeatureListAffected( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &affectedFeatureInfos[0], (VmbUint32_t)affectedFeatureInfos.size(), &nSize, sizeof(VmbFeatureInfo_t) );
-            
-            if ( rnSize < nSize )
-            {
-                return VmbErrorMoreData;
-            }
-
-            rnSize = (VmbUint32_t)nSize;
-
-            for ( VmbUint32_t i=0; i<rnSize; ++i )
-            {
-                FeaturePtr pFeature;
-                res = m_pFeatureContainer->GetFeatureByName( affectedFeatureInfos[i].name, pFeature );
-                if ( VmbErrorSuccess != res )
-                {
-                    m_pImpl->m_affectedFeatures.clear();
-                    return (VmbErrorType)res;
-                }
-                m_pImpl->m_affectedFeatures.push_back( pFeature );
-                pAffectedFeatures[i] = m_pImpl->m_affectedFeatures[i];
-            }
-        }
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType BaseFeature::GetSelectedFeatures( FeaturePtr *pSelectedFeatures, VmbUint32_t &rnSize )
-{
-    VmbError_t res;
-
-    if ( NULL == pSelectedFeatures )
-    {
-        // Selected features were fetched before
-        if ( true == m_pImpl->m_bSelectedFeaturesFetched )
-        {
-            rnSize = (VmbUint32_t)m_pImpl->m_selectedFeatures.size();
-
-            res = VmbErrorSuccess;
-        }
-        // Selected features have not been fetched before
-        else
-        {
-            return (VmbErrorType)VmbFeatureListSelected( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), NULL, 0, &rnSize, sizeof(VmbFeatureInfo_t) );
-        }
-    }
-    else
-    {
-        // Selected features were fetched before
-        if ( true == m_pImpl->m_bSelectedFeaturesFetched )
-        {
-            if ( rnSize < m_pImpl->m_selectedFeatures.size() )
-            {
-                return VmbErrorMoreData;
-            }
-
-            rnSize = (VmbUint32_t)m_pImpl->m_selectedFeatures.size();
-
-            std::copy( m_pImpl->m_selectedFeatures.begin(), m_pImpl->m_selectedFeatures.end(), pSelectedFeatures );
-
-            res = VmbErrorSuccess;
-        }
-        // Selected features have not been fetched before
-        else
-        {
-            // Check whether the given array size fits
-            VmbUint32_t nSize = 0;
-            res = VmbFeatureListSelected( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), NULL, 0, &nSize, sizeof(VmbFeatureInfo_t) );
-
-            m_pImpl->m_bSelectedFeaturesFetched = true;
-
-            if ( rnSize < nSize )
-            {
-                return VmbErrorMoreData;
-            }
-
-            rnSize = (VmbUint32_t)nSize;
-
-            if (    VmbErrorSuccess != res
-                 || 0 == rnSize )
-            {
-                return (VmbErrorType)res;
-            }
-
-            // Fetch selected features and store them as well as hand them out
-            std::vector<VmbFeatureInfo_t> selectedFeatureInfos;
-            selectedFeatureInfos.resize( rnSize );
-
-            res = VmbFeatureListSelected( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &selectedFeatureInfos[0], (VmbUint32_t)selectedFeatureInfos.size(), &nSize, sizeof(VmbFeatureInfo_t) );
-
-            if ( rnSize < nSize )
-            {
-                return VmbErrorMoreData;
-            }
-
-            rnSize = (VmbUint32_t)nSize;
-
-            for ( VmbUint32_t i=0; i<rnSize; ++i )
-            {
-                FeaturePtr pFeature;
-                res = m_pFeatureContainer->GetFeatureByName( selectedFeatureInfos[i].name, pFeature );
-                if ( VmbErrorSuccess != res )
-                {
-                    m_pImpl->m_selectedFeatures.clear();
-                    return (VmbErrorType)res;
-                }
-                m_pImpl->m_selectedFeatures.push_back( pFeature );
-                pSelectedFeatures[i] = m_pImpl->m_selectedFeatures[i];
-            }
-        }
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType BaseFeature::IsReadable( bool &rbIsReadable )
-{
-    bool bIsWritable = false;
-
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-    
-    return (VmbErrorType)VmbFeatureAccessQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rbIsReadable, &bIsWritable );
-}
-
-VmbErrorType BaseFeature::IsWritable( bool &rbIsWritable )
-{
-    bool bIsReadable = false;
-
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureAccessQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &bIsReadable, &rbIsWritable );
-}
-
-VmbErrorType BaseFeature::IsStreamable( bool &rbIsStreamable ) const
-{
-    rbIsStreamable = m_featureInfo.isStreamable;
-
-    return VmbErrorSuccess;
-}
-
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/BaseFeature.h b/VimbaCPP/Source/BaseFeature.h
deleted file mode 100644
index af2509001a085cde059266885a43a7ed3976f470..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/BaseFeature.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        BaseFeature.h
-
-  Description: Definition of base class AVT::VmbAPI::BaseFeature.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_BASEFEATURE_H
-#define AVT_VMBAPI_BASEFEATURE_H
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Include/BasicLockable.h>
-#include <VimbaCPP/Include/Feature.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class BaseFeature : public virtual BasicLockable
-{
-  friend class Feature;
-
-  public:
-    BaseFeature( const VmbFeatureInfo_t *pFeatureInfo, FeatureContainer *pFeatureContainer );
-    virtual ~BaseFeature();
-
-    IMEXPORT virtual    VmbErrorType GetValue( VmbInt64_t &value ) const;
-    IMEXPORT virtual    VmbErrorType GetValue( double &value ) const;
-    IMEXPORT virtual    VmbErrorType GetValue( bool &value ) const;
-
-    IMEXPORT virtual    VmbErrorType SetValue( const VmbInt32_t &value );
-    IMEXPORT virtual    VmbErrorType SetValue( const VmbInt64_t &value );
-    IMEXPORT virtual    VmbErrorType SetValue( const double &value );
-    IMEXPORT virtual    VmbErrorType SetValue( const char *pValue );
-    IMEXPORT virtual    VmbErrorType SetValue( bool value );
-
-    IMEXPORT virtual    VmbErrorType GetEntry( EnumEntry &entry, const char * pStrEntryName ) const;
-
-    IMEXPORT virtual    VmbErrorType GetRange( VmbInt64_t &minimum, VmbInt64_t &maximum ) const;
-    IMEXPORT virtual    VmbErrorType GetRange( double &minimum, double &maximum ) const;
-
-    IMEXPORT virtual    VmbErrorType HasIncrement( VmbBool_t &incrementSupported) const;
-    IMEXPORT virtual    VmbErrorType GetIncrement( VmbInt64_t &increment ) const;
-    IMEXPORT virtual    VmbErrorType GetIncrement( double &increment ) const;
-
-    IMEXPORT virtual    VmbErrorType IsValueAvailable( const char *pValue, bool &available ) const;
-    IMEXPORT virtual    VmbErrorType IsValueAvailable( const VmbInt64_t value, bool &available ) const;
-
-    IMEXPORT virtual    VmbErrorType RunCommand();
-    IMEXPORT virtual    VmbErrorType IsCommandDone( bool &isDone ) const;
-
-    IMEXPORT            VmbErrorType GetDataType( VmbFeatureDataType &dataType ) const;
-    IMEXPORT            VmbErrorType GetFlags( VmbFeatureFlagsType &flags ) const;
-    IMEXPORT            VmbErrorType GetPollingTime( VmbUint32_t &pollingTime ) const;
-    IMEXPORT            VmbErrorType GetVisibility( VmbFeatureVisibilityType &visibility ) const;
-    IMEXPORT            VmbErrorType IsReadable( bool &isReadable );
-    IMEXPORT            VmbErrorType IsWritable( bool &isWritable );
-    IMEXPORT            VmbErrorType IsStreamable( bool &isStreamable ) const;
-
-    IMEXPORT            VmbErrorType RegisterObserver( const IFeatureObserverPtr &observer );
-    IMEXPORT            VmbErrorType UnregisterObserver( const IFeatureObserverPtr &observer );
-
-    void ResetFeatureContainer();
-
-  protected:
-    // Copy of feature infos
-    struct FeatureInfo
-    {
-        std::string                     name;                   // Verbose name
-        VmbFeatureData_t                featureDataType;        // Data type of this feature
-        VmbFeatureFlags_t               featureFlags;           // Access flags for this feature
-        bool                            hasAffectedFeatures;    // true if the feature selects or invalidates other features
-        bool                            hasSelectedFeatures;    // true if the feature selects other features
-        std::string                     category;               // Category this feature can be found in
-        std::string                     displayName;            // Feature name to be used in GUIs
-        VmbUint32_t                     pollingTime;            // Predefined polling time for volatile features
-        std::string                     unit;                   // Measuring unit as given in the XML file
-        std::string                     representation;         // Representation of a numeric feature
-        VmbFeatureVisibility_t          visibility;             // GUI visibility
-        std::string                     tooltip;                // Short description
-        std::string                     description;            // Longer description
-        std::string                     sfncNamespace;          // Namespace this feature resides in
-        bool                            isStreamable;           // Feature can be stored or loaded from/into a file
-    };
-
-    FeatureInfo m_featureInfo;
-
-    FeatureContainer *m_pFeatureContainer;
-
-  private:
-    // Default ctor
-    BaseFeature();
-
-    // Copy ctor
-    BaseFeature( const BaseFeature& );
-
-    struct Impl;
-    Impl *m_pImpl;
-
-    // Array functions to pass data across DLL boundaries
-    IMEXPORT virtual    VmbErrorType GetValue( char * const pValue, VmbUint32_t &length ) const;
-    IMEXPORT virtual    VmbErrorType GetValue( VmbUchar_t *pValue, VmbUint32_t &size, VmbUint32_t &sizeFilled ) const;
-    IMEXPORT virtual    VmbErrorType GetValues( const char **pValues, VmbUint32_t &size );
-    IMEXPORT virtual    VmbErrorType GetValues( VmbInt64_t *pValues, VmbUint32_t &Size );
-
-    IMEXPORT virtual    VmbErrorType SetValue( const VmbUchar_t *pValue, VmbUint32_t size );
-
-    IMEXPORT virtual    VmbErrorType GetEntries( EnumEntry *pEntries, VmbUint32_t &size );
-
-    IMEXPORT virtual    VmbErrorType GetName( char * const pName, VmbUint32_t &length ) const;
-    IMEXPORT            VmbErrorType GetDisplayName( char * const pDisplayName, VmbUint32_t &length ) const;
-    IMEXPORT            VmbErrorType GetCategory( char * const pCategory, VmbUint32_t &length ) const;
-    IMEXPORT            VmbErrorType GetUnit( char * const pUnit, VmbUint32_t &length ) const;
-    IMEXPORT            VmbErrorType GetRepresentation( char * const pRepresentation, VmbUint32_t &length ) const;
-    IMEXPORT            VmbErrorType GetToolTip( char * const pToolTip, VmbUint32_t &length ) const;
-    IMEXPORT            VmbErrorType GetDescription( char * const pDescription, VmbUint32_t &length ) const;
-    IMEXPORT            VmbErrorType GetSFNCNamespace( char * const pSFNCNamespace, VmbUint32_t &length ) const;
-    IMEXPORT            VmbErrorType GetAffectedFeatures( FeaturePtr *pAffectedFeatures, VmbUint32_t &nSize );
-    IMEXPORT            VmbErrorType GetSelectedFeatures( FeaturePtr *pSelectedFeatures, VmbUint32_t &nSize );
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Source/BasicLockable.cpp b/VimbaCPP/Source/BasicLockable.cpp
deleted file mode 100644
index bcd9f6a9d718c03d08b442f387cff45b126fed14..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/BasicLockable.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        BasicLockable.cpp
-
-  Description: Implementation of class AVT::VmbAPI::BasicLockable.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Include/BasicLockable.h>
-#include <VimbaCPP/Include/LoggerDefines.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-BasicLockable::BasicLockable()
-    :   m_pMutex( MutexPtr( new Mutex() ))
-{
-}
-
-BasicLockable::~BasicLockable()
-{
-}
-
-BasicLockable::BasicLockable( MutexPtr pMutex )
-    :   m_pMutex( pMutex )
-{
-}
-
-MutexPtr& BasicLockable::GetMutex()
-{
-    return m_pMutex;
-}
-const MutexPtr& BasicLockable::GetMutex() const
-{
-    return m_pMutex;
-}
-
-}} //namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/BoolFeature.cpp b/VimbaCPP/Source/BoolFeature.cpp
deleted file mode 100644
index 35fe0bad075c8bc7db1c9ea1ed2f627b8a979cfc..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/BoolFeature.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        BoolFeature.cpp
-
-  Description: Implementation of class AVT::VmbAPI::BoolFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Source/BoolFeature.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-BoolFeature::BoolFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer* const pFeatureContainer )
-    :   BaseFeature( featureInfo, pFeatureContainer )
-{}
-
-VmbErrorType BoolFeature::GetValue( bool &rbValue ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureBoolGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rbValue );
-}
-
-VmbErrorType BoolFeature::SetValue( bool bValue )
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureBoolSet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), bValue );
-}
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/BoolFeature.h b/VimbaCPP/Source/BoolFeature.h
deleted file mode 100644
index 90ce0b668a603f93386e6939ff0551594783bea8..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/BoolFeature.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        BoolFeature.h
-
-  Description: Definition of class AVT::VmbAPI::BoolFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_BOOLFEATURE_H
-#define AVT_VMBAPI_BOOLFEATURE_H
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Source/BaseFeature.h>
-#include <VimbaCPP/Include/FeatureContainer.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class BoolFeature : public BaseFeature
-{
-  public:
-    BoolFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer* const pFeatureContainer );
-
-    //
-    // Method:                  GetValue()
-    // Purpose:                 Get the value of a boolean feature
-    // Parameters:
-    //  [out]  bool& value      bool value
-    // Returns:
-    //  - VmbErrorSuccess:      If no error
-    //  - VmbErrorWrongType:    Feature is not a bool feature
-    //  - VmbInternalError:     Value could not get queried
-    //
-    IMEXPORT virtual VmbErrorType GetValue( bool &value ) const;
-
-    //
-    // Method:  SetValue()
-    // Purpose: Set the value of a boolean feature
-    //
-    IMEXPORT virtual VmbErrorType SetValue( bool value );
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Source/Camera.cpp b/VimbaCPP/Source/Camera.cpp
deleted file mode 100644
index 4e398ae1107c77c1d197a84438d7734e36f46884..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Camera.cpp
+++ /dev/null
@@ -1,1413 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 - 2016 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        Camera.cpp
-
-  Description: Implementation of class AVT::VmbAPI::Camera.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-#pragma warning(disable:4996)
-#include <sstream>
-#pragma warning(default:4996)
-#include <cstring>
-
-#include <VimbaCPP/Include/Camera.h>
-
-#include <VimbaCPP/Include/LoggerDefines.h>
-#include <VimbaCPP/Source/ConditionHelper.h>
-#include <VimbaCPP/Source/FrameImpl.h>
-#include <VimbaCPP/Source/FrameHandler.h>
-#include <VimbaCPP/Source/Helper.h>
-#include <VimbaCPP/Source/MutexGuard.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-// Method: GetFeatureValueInt
-//
-//Purpose: helper function to read integer value from camera.
-//
-// Parameters:
-//
-// [in] cam        camera to get integer value from
-// [in] name       name of the feature
-// [out] val       returns integer value of feature on VmbErrorSuccess
-//
-VmbErrorType GetFeatureValueInt( Camera&cam,const char* name, VmbInt64_t &val)
-{
-    if( NULL == name)
-    {
-        LOG_FREE_TEXT("feature name is NULL");
-        return VmbErrorBadParameter;
-    }
-    FeaturePtr      pFeature;
-    VmbErrorType    res         = cam.GetFeatureByName( name, pFeature );
-    if ( VmbErrorSuccess != res )
-    {
-        LOG_FREE_TEXT( std::string("Could not get feature by name for ") + name);
-        return res;
-    }
-    res = SP_ACCESS(pFeature)->GetValue( val );
-    if( VmbErrorSuccess != res)
-    {
-        LOG_FREE_TEXT( std::string("Could not get value of feature ") + name);
-    }
-    return res;
-}
-//
-// Method: RunFeatureCommand
-//
-// Purpose: helper to run a command feature for camera.
-//
-// Parameters:
-//
-// [in] cam        camera to run command on
-// [in] name       command name to run
-//
-VmbErrorType RunFeatureCommand( Camera&cam,const char* name)
-{
-    if( NULL == name)
-    {
-        LOG_FREE_TEXT("feature name is NULL");
-        return VmbErrorBadParameter;
-    }
-    FeaturePtr      pFeature;
-    VmbErrorType    res         = cam.GetFeatureByName( name, pFeature );
-    if ( VmbErrorSuccess != res )
-    {
-        LOG_FREE_TEXT( std::string("Could not get feature by name for ") + name);
-        return res;
-    }
-    res = SP_ACCESS(pFeature)->RunCommand();
-    if( VmbErrorSuccess != res)
-    {
-        LOG_FREE_TEXT( std::string("Could not run feature command ") + name);
-    }
-    return res;
-}
-
-// small helper class that keeps track of resources needed for image acquisition
-struct AcquireImageHelper
-{
-private:
-    //clean up tasks
-    enum tear_down_tasks
-    {
-        RevokeFrame,
-        FlushQueue,
-        EndCapture,
-        AcquisitionStop,
-    };
-    typedef std::vector<tear_down_tasks>    task_storage;
-    task_storage                            m_Tasks;        // storage for cleanup tasks
-    Camera&                                 m_Camera;
-    ///get the top most taks and pop it from stack
-    tear_down_tasks GetTask()
-    {
-        tear_down_tasks current_task = m_Tasks.back();
-        m_Tasks.pop_back();
-        return current_task;
-    }
-    const AcquireImageHelper& operator=( const AcquireImageHelper &o);
-    // Method: SetupFrame
-    //
-    // Purpose: prepare a frame with given payload size.
-    //
-    // Parameters:
-    // [in,out] pFrame         a frame pointer that can point to Null
-    // [in]     payload_size   payload size for frame
-    //
-    static VmbErrorType SetupFrame(FramePtr &pFrame, VmbInt64_t PayloadSize, FrameAllocationMode allocationMode)
-    {
-        if( PayloadSize <= 0)
-        {
-            LOG_FREE_TEXT("payload size has to be larger than 0");
-            return VmbErrorBadParameter;
-        }
-        VmbUint32_t     buffer_size(0);
-        VmbErrorType    Result;
-        if( ! SP_ISNULL( pFrame) )  // if frame already exists, check its buffer size
-        {
-            Result = SP_ACCESS( pFrame) ->GetBufferSize(buffer_size);
-            if( VmbErrorSuccess != Result)
-            {
-                LOG_FREE_TEXT("Could not get frame buffer size");
-                return Result;
-            }
-            if( buffer_size >= PayloadSize) // buffer is large enough, no need to create new frame
-            {
-                return VmbErrorSuccess;
-            }
-        }
-        try
-        {
-            SP_SET( pFrame, new Frame( PayloadSize, allocationMode ));
-            if( SP_ISNULL( pFrame) ) // in case we find a not throwing new
-            {
-                LOG_FREE_TEXT("error allocating frame");
-                return VmbErrorResources;
-            }
-        }
-        catch(...)
-        {
-            LOG_FREE_TEXT("error allocating frame");
-            return VmbErrorResources;
-        }
-        return VmbErrorSuccess;
-    }
-public:
-    // construct helper from camera
-    AcquireImageHelper(Camera &Cam)
-        : m_Camera( Cam)
-    {}
-    // destroy will tear all down
-    ~AcquireImageHelper()
-    {
-        TearDown();
-    }
-    //
-    // Method:: AnnounceFrames
-    //
-    // Purpose: helper to announce a list of frames to the camera.
-    //
-    // Parameters:
-    //
-    // [in]        Camera              Camera to announce the frames too
-    // [in,out]    pFrames             storage for frame pointer, if they are NULL or have no sufficient space the frames will be created
-    // [in]        nFrameCount         number of frame pointers in pFrames
-    // [in]        nPayloadSize        payload size for one frame
-    // [out]       nFramesAnnounced    returns number of successful announced frames
-    // [in]        allocationMode      frame allocation mode
-    // Returns:
-    //
-    // the first error that occurred or VmbErrorSuccess if non occurred 
-    // Details: note the function will try to construct and announce nFrameCount frames t o the camera, even if some of them can not be created or announced, only if nFramesAnnounced == 0 the function was unsuccessful
-    //
-    static VmbErrorType AnnounceFrames(Camera &Camera, FramePtr *pFrames, VmbUint32_t nFrameCount, VmbInt64_t nPayloadSize, VmbUint32_t &nFramesAnnounced, FrameAllocationMode allocationMode)
-    {
-        VmbErrorType    Result  = VmbErrorSuccess;
-        nFramesAnnounced        = 0;
-        for( VmbUint32_t FrameNumber= 0; FrameNumber < nFrameCount; ++FrameNumber)
-        {
-            VmbErrorType LocalResult = SetupFrame( pFrames[ FrameNumber ], nPayloadSize, allocationMode );         //< try to init frame
-            if( VmbErrorSuccess == LocalResult)
-            {
-                LocalResult = Camera.AnnounceFrame( pFrames[ FrameNumber] );       //< announce frame if successful initialized
-                if ( VmbErrorSuccess == LocalResult )
-                {
-                    ++nFramesAnnounced;
-                }
-                else
-                {
-                    std::stringstream strMsg("Could only successfully announce ");
-                    strMsg << nFramesAnnounced << " of " <<  nFrameCount  << " frames. Will continue with queuing those.";
-                    LOG_FREE_TEXT( strMsg.str() );
-                }
-            }
-            if( VmbErrorSuccess == Result )
-            {
-                Result = LocalResult;
-            }
-        }
-        return Result;
-    }
-    //
-    // Method: AnnounceFrames
-    //
-    // Purpose: announce a FramePtrVector to the camera.
-    //
-    // Parameters:
-    // [in]        Camera          camera to announce the frames to
-    // [in,out]    Frames          vector of frame pointers that will contain the announced frames on return, can be empty on input
-    // [in]        nBufferCount    number of frames to announce, if nBufferCount > Frames.size() on return, some frames could not be announced
-    // [in]        nPayloadSize    frame payload size
-    // [in]        Observer        observer to attach to frames
-    // [in]        allocationMode  frame allocation mode
-    //
-    static VmbErrorType AnnounceFrames(Camera &Camera, FramePtrVector &Frames, VmbUint32_t nBufferCount, VmbInt64_t nPayloadSize, const IFrameObserverPtr& Observer, FrameAllocationMode allocationMode)
-    {
-        try
-        {
-            Frames.reserve( nBufferCount);
-        }
-        catch(...)
-        {
-            LOG_FREE_TEXT("could not allocate frames");
-            return VmbErrorResources;
-        }
-        VmbErrorType Result = VmbErrorSuccess;
-        for( VmbUint32_t i=0; i < nBufferCount; ++i)
-        {
-            FramePtr tmpFrame;
-            VmbErrorType LocalResult = SetupFrame( tmpFrame, nPayloadSize, allocationMode );
-            if( ! SP_ISNULL( tmpFrame) )
-            {
-                LocalResult = SP_ACCESS( tmpFrame)->RegisterObserver( Observer );
-                if( VmbErrorSuccess == LocalResult )
-                {
-                    LocalResult = Camera.AnnounceFrame( tmpFrame );
-                    if( VmbErrorSuccess == LocalResult )
-                    {
-                        Frames.push_back( tmpFrame );
-                    }
-                    else
-                    {
-                        LOG_FREE_TEXT("could not announce frame");
-                    }
-                }
-                else
-                {
-                    LOG_FREE_TEXT("could not register frame observer");
-                }
-            }
-            else
-            {
-                LOG_FREE_TEXT("could not allocate frame");
-            }
-            if( VmbErrorSuccess == Result)
-            {
-                Result = LocalResult;
-            }
-        }
-        return Result;
-    }
-    //
-    // Method: Prepare
-    //
-    // Purpose: prepare image grab for single image.
-    //
-    // Parameters:
-    //
-    // [in,out]    pFrame          frame to hold the image
-    // [in]        PayloadSize     frame payload size
-    // [in]        allocationMode  frame allocation mode
-    //
-    VmbErrorType Prepare(FramePtr &pFrame, VmbInt64_t PayloadSize, FrameAllocationMode allocationMode)
-    {
-        VmbErrorType res;
-        res = SetupFrame( pFrame, PayloadSize, allocationMode );     // init frame if necessary
-        if ( VmbErrorSuccess != res )
-        {
-            LOG_FREE_TEXT("Could not create frame");
-            return res;
-        }
-        res = m_Camera.AnnounceFrame( pFrame );                     // announce frame to camera
-        if ( VmbErrorSuccess != res )
-        {
-            LOG_FREE_TEXT("Could not Announce frame");
-            return res;
-        }
-        m_Tasks.push_back( RevokeFrame);                            // if successful announced we need to revoke frames
-        res = m_Camera.StartCapture();                              // start capture logic
-        if ( VmbErrorSuccess != res )
-        {
-            LOG_FREE_TEXT( "Could not Start Capture" );
-            return res;
-        }
-        m_Tasks.push_back( EndCapture);                             // if capture logic is started we need end capture task
-        res = m_Camera.QueueFrame( pFrame );                        // queue frame in processing logic
-        if ( VmbErrorSuccess != res )
-        {
-            LOG_FREE_TEXT( "Could not queue frame");
-            return res;
-        }
-        m_Tasks.pop_back();
-        m_Tasks.push_back( FlushQueue);                             // if frame queued we need flush queue task
-        m_Tasks.push_back( EndCapture);
-        FeaturePtr pFeature;
-        res = RunFeatureCommand( m_Camera, "AcquisitionStart" );    // start acquisition
-        if ( VmbErrorSuccess != res )
-        {
-            LOG_FREE_TEXT("Could not run command AcquisitionStart");
-            return res;
-        }
-        m_Tasks.push_back( AcquisitionStop);
-        return res;
-    }
-    // Method: Prepare
-    //
-    // Purpose: prepare image acquisition for multiple frames.
-    //
-    // Parameters:
-    //
-    // [in,out]     pFrames         non NULL pointer to field of frame pointers (can point to NULL) that hold the captured images
-    // [in]         nFrameCount     number of frames in vector
-    // [in]         nPayLoadSize    payload size
-    // [out]        nFramesQueued   returns number of successful queued images
-    // [in]         allocationMode  frame allocation mode
-    //
-    VmbErrorType Prepare(FramePtr *pFrames, VmbUint32_t nFrameCount, VmbInt64_t nPayloadSize, VmbUint32_t &nFramesQueued, FrameAllocationMode allocationMode )
-    {
-        if( NULL == pFrames || 0 == nFrameCount)                            // sanity check
-        {
-            return VmbErrorBadParameter;
-        }
-        nFramesQueued = 0;
-        VmbErrorType    Result          = VmbErrorSuccess;
-        VmbUint32_t     FramesAnnounced = 0;
-        Result = AnnounceFrames( m_Camera, pFrames, nFrameCount, nPayloadSize, FramesAnnounced, allocationMode );
-        if( 0 == FramesAnnounced)
-        {
-            return Result;
-        }
-        m_Tasks.push_back( RevokeFrame);                                    // add cleanup task for announced frames
-        Result = m_Camera.StartCapture();                                   // start capture logic
-        if ( VmbErrorSuccess != Result)
-        {
-            LOG_FREE_TEXT( "Could not Start Capture" );
-            return Result;
-        }
-        m_Tasks.push_back( EndCapture);                                     // add cleanup task to end capture
-        for( VmbUint32_t FrameNumber = 0; FrameNumber < FramesAnnounced; ++FrameNumber)
-        {
-            Result = m_Camera.QueueFrame( pFrames[ FrameNumber ] );         // try queuing frame
-            if ( VmbErrorSuccess != Result )
-            {
-                std::stringstream strMsg("Could only successfully queue ");
-                strMsg << nFramesQueued << " of " << nFrameCount << " frames. Will continue with filling those.";
-                LOG_FREE_TEXT( strMsg.str() );
-                break;
-            }
-            else
-            {
-                ++nFramesQueued;
-            }
-        }
-        if( 0 == nFramesQueued) // we cannot capture anything, there are no frames queued
-        {
-            return Result;
-        }
-        m_Tasks.pop_back();
-        m_Tasks.push_back( FlushQueue);                         // if any frame was queued we need a cleanup task
-        m_Tasks.push_back( EndCapture);
-        FeaturePtr pFeature;
-        Result = RunFeatureCommand( m_Camera, "AcquisitionStart" ); // start acquisition logic
-        if ( VmbErrorSuccess != Result )
-        {
-            LOG_FREE_TEXT("Could not run command AcquisitionStart");
-            return Result;
-        }
-        m_Tasks.push_back( AcquisitionStop);
-        return Result;
-    }
-    //
-    // Method: TearDown
-    //
-    // Purpose: free all acquired resources.
-    //
-    VmbErrorType TearDown()
-    {
-        VmbErrorType res = VmbErrorSuccess;
-        while( ! m_Tasks.empty() )
-        {
-            VmbErrorType local_result = VmbErrorSuccess;
-            switch( GetTask() )
-            {
-            case AcquisitionStop:
-                    local_result = RunFeatureCommand(m_Camera, "AcquisitionStop");
-                    if( VmbErrorSuccess != local_result)
-                    {
-                        LOG_FREE_TEXT("Could not run command AquireStop");
-                    }
-                    break;
-            case EndCapture:
-                    local_result = m_Camera.EndCapture();
-                    if( VmbErrorSuccess != local_result)
-                    {
-                        LOG_FREE_TEXT("Could Not run EndCapture");
-                    }
-                    break;
-            case FlushQueue:
-                    local_result = m_Camera.FlushQueue();
-                    if( VmbErrorSuccess != local_result)
-                    {
-                        LOG_FREE_TEXT("Could not run Flush Queue command");
-                    }
-                    break;
-            case RevokeFrame:
-                    local_result = m_Camera.RevokeAllFrames();
-                    if( VmbErrorSuccess != local_result)
-                    {
-                        LOG_FREE_TEXT("Could Not Run Revoke Frames command");
-                    }
-                    break;
-            }
-            if( VmbErrorSuccess == res)
-                res = local_result;
-        }
-        return res;
-    }
-};
-
-
-struct Camera::Impl
-{
-    // Copy of camera infos
-    struct CameraInfo
-    {
-        std::string     cameraIdString;             // Unique identifier for each camera
-        std::string     cameraIdStringGigE;         // GigE cameras can also be opened by IP or MAC address
-        std::string     cameraName;                 // Name of the camera
-        std::string     modelName;                  // Model name
-        std::string     serialString;               // Serial number
-        std::string     interfaceIdString;          // Unique value for each interface or bus
-    } m_cameraInfo;
-
-    VmbInterfaceType m_eInterfaceType;              // The type of the interface the camera is connected to
-
-    LockableVector<FrameHandlerPtr> m_frameHandlers;
-    ConditionHelper                 m_conditionHelper;
-
-    MutexPtr                        m_pQueueFrameMutex;
-    bool                            m_bAllowQueueFrame;
-
-    VmbFeaturePersist_t             m_persistType;
-    VmbInt32_t                      m_maxIterations;
-    VmbInt32_t                      m_loggingLevel;
-
-    VmbErrorType AppendFrameToVector( const FramePtr &frame );
-};
-
-Camera::Camera()
-{
-    // No default ctor
-}
-
-Camera::Camera( const Camera& )
-{
-    // No copy ctor
-}
-
-Camera& Camera::operator=( const Camera& )
-{
-    // No assignment operator
-    return *this;
-}
-
-Camera::Camera( const char *pID,
-                const char *pName,
-                const char *pModel,
-                const char *pSerialNumber,
-                const char *pInterfaceID,
-                VmbInterfaceType eInterfaceType )
-    :   m_pImpl( new Impl() )
-{
-    m_pImpl->m_cameraInfo.cameraIdString.assign( pID ? pID : "" );
-    // TODO: Remove this with interface change
-    const char* pIDGigE = strstr( pID, AVT_IP_OR_MAC_ADDRESS);
-    if ( pIDGigE )
-    {
-        m_pImpl->m_cameraInfo.cameraIdStringGigE.assign( pIDGigE );
-        m_pImpl->m_cameraInfo.cameraIdStringGigE.erase( 0, strlen( AVT_IP_OR_MAC_ADDRESS ));
-        m_pImpl->m_cameraInfo.cameraIdString.erase( m_pImpl->m_cameraInfo.cameraIdString.find( AVT_IP_OR_MAC_ADDRESS ), std::string::npos );
-    }
-    m_pImpl->m_cameraInfo.cameraName.assign( pName ? pName : "" );
-    m_pImpl->m_cameraInfo.interfaceIdString.assign( pInterfaceID ? pInterfaceID : "" );
-    m_pImpl->m_cameraInfo.modelName.assign( pModel ? pModel : "" );
-    m_pImpl->m_cameraInfo.serialString.assign( pSerialNumber ? pSerialNumber : "" );
-    m_pImpl->m_eInterfaceType = eInterfaceType;
-    m_pImpl->m_bAllowQueueFrame = true;
-    SP_SET( m_pImpl->m_pQueueFrameMutex, new Mutex );
-    m_pImpl->m_persistType = -1;
-    m_pImpl->m_maxIterations = -1;
-    m_pImpl->m_loggingLevel = -1;
-}
-
-Camera::~Camera()
-{
-    Close();
-
-    delete m_pImpl;
-}
-
-VmbErrorType Camera::Open( VmbAccessModeType eAccessMode )
-{
-    VmbError_t res;
-    VmbHandle_t hHandle;
-
-    if ( false == m_pImpl->m_cameraInfo.cameraIdStringGigE.empty() )
-    {
-        res = VmbCameraOpen( m_pImpl->m_cameraInfo.cameraIdStringGigE.c_str(), (VmbAccessMode_t)eAccessMode, &hHandle );        
-    }
-    else
-    {
-        res = VmbCameraOpen( m_pImpl->m_cameraInfo.cameraIdString.c_str(), (VmbAccessMode_t)eAccessMode, &hHandle );
-    }
-
-    if ( VmbErrorSuccess == res )
-    {
-        SetHandle( hHandle );
-    }
-    
-    return (VmbErrorType)res;
-}
-
-VmbErrorType Camera::Close()
-{
-    VmbError_t res = VmbErrorSuccess;
-
-    if ( NULL != GetHandle() )
-    {
-        if (    0 < m_pImpl->m_frameHandlers.Vector.size()
-             && (   VmbErrorSuccess != EndCapture()
-                 || VmbErrorSuccess != FlushQueue()
-                 || VmbErrorSuccess != RevokeAllFrames()) )
-        {
-            // Do some logging
-            LOG_FREE_TEXT( "Could not successfully revoke all frames")
-        }
-
-        Reset();
-
-        res = VmbCameraClose( GetHandle() );
-
-        RevokeHandle();
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType Camera::GetID( char * const pStrID, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrID )
-    {
-        rnLength = (VmbUint32_t)m_pImpl->m_cameraInfo.cameraIdString.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_pImpl->m_cameraInfo.cameraIdString.length() <= rnLength )
-    {
-        std::copy( m_pImpl->m_cameraInfo.cameraIdString.begin(), m_pImpl->m_cameraInfo.cameraIdString.end(), pStrID );
-        pStrID[m_pImpl->m_cameraInfo.cameraIdString.length()] = '\0';
-        rnLength = (VmbUint32_t)m_pImpl->m_cameraInfo.cameraIdString.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType Camera::GetName( char * const pStrName, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrName )
-    {
-        rnLength = (VmbUint32_t)m_pImpl->m_cameraInfo.cameraName.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_pImpl->m_cameraInfo.cameraName.length() <= rnLength )
-    {
-        std::copy( m_pImpl->m_cameraInfo.cameraName.begin(), m_pImpl->m_cameraInfo.cameraName.end(), pStrName );
-        pStrName[m_pImpl->m_cameraInfo.cameraName.length()] = '\0';
-        rnLength = (VmbUint32_t)m_pImpl->m_cameraInfo.cameraName.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType Camera::GetModel( char * const pStrModel, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrModel )
-    {
-        rnLength = (VmbUint32_t)m_pImpl->m_cameraInfo.modelName.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_pImpl->m_cameraInfo.modelName.length() <= rnLength )
-    {
-        std::copy( m_pImpl->m_cameraInfo.modelName.begin(), m_pImpl->m_cameraInfo.modelName.end(), pStrModel );
-        pStrModel[m_pImpl->m_cameraInfo.modelName.length()] = '\0';
-        rnLength = (VmbUint32_t)m_pImpl->m_cameraInfo.modelName.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType Camera::GetSerialNumber( char * const pStrSerial, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrSerial )
-    {
-        rnLength = (VmbUint32_t)m_pImpl->m_cameraInfo.serialString.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_pImpl->m_cameraInfo.serialString.length() <= rnLength )
-    {
-        std::copy( m_pImpl->m_cameraInfo.serialString.begin(), m_pImpl->m_cameraInfo.serialString.end(), pStrSerial );
-        pStrSerial[m_pImpl->m_cameraInfo.serialString.length()] = '\0';
-        rnLength = (VmbUint32_t)m_pImpl->m_cameraInfo.serialString.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType Camera::GetInterfaceID( char * const pStrInterfaceID, VmbUint32_t &rnLength ) const
-{    
-    VmbErrorType res;
-
-    if ( NULL == pStrInterfaceID )
-    {
-        rnLength = (VmbUint32_t)m_pImpl->m_cameraInfo.interfaceIdString.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_pImpl->m_cameraInfo.interfaceIdString.length() <= rnLength )
-    {
-        std::copy( m_pImpl->m_cameraInfo.interfaceIdString.begin(), m_pImpl->m_cameraInfo.interfaceIdString.end(), pStrInterfaceID );
-        pStrInterfaceID[m_pImpl->m_cameraInfo.interfaceIdString.length()] = '\0';
-        rnLength = (VmbUint32_t)m_pImpl->m_cameraInfo.interfaceIdString.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType Camera::GetInterfaceType( VmbInterfaceType &reInterfaceType ) const
-{
-    reInterfaceType = m_pImpl->m_eInterfaceType;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Camera::GetPermittedAccess( VmbAccessModeType &rePermittedAccess ) const
-{
-    VmbError_t res;
-    VmbCameraInfo_t info;
-
-    if ( false == m_pImpl->m_cameraInfo.cameraIdStringGigE.empty() )
-    {
-        res = VmbCameraInfoQuery( m_pImpl->m_cameraInfo.cameraIdStringGigE.c_str(), &info, sizeof( VmbCameraInfo_t ));
-    }
-    else
-    {
-        res = VmbCameraInfoQuery( m_pImpl->m_cameraInfo.cameraIdString.c_str(), &info, sizeof( VmbCameraInfo_t ));
-    }
-
-    if ( VmbErrorSuccess == res )
-    {
-        rePermittedAccess = (VmbAccessModeType)info.permittedAccess;
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType Camera::ReadRegisters( const VmbUint64_t *pAddressArray, VmbUint32_t nAddressSize, VmbUint64_t *pDataArray, VmbUint32_t *pCompletedReads ) const
-{
-    return static_cast<VmbErrorType>( VmbRegistersRead( GetHandle(), nAddressSize, pAddressArray, pDataArray, pCompletedReads ) );
-}
-
-VmbErrorType Camera::WriteRegisters( const VmbUint64_t *pAddressArray, VmbUint32_t nAddressSize, const VmbUint64_t *pDataArray, VmbUint32_t *pCompletedWrites )
-{
-    return static_cast<VmbErrorType>( VmbRegistersWrite( GetHandle(), nAddressSize, pAddressArray, pDataArray, pCompletedWrites ) );
-}
-
-VmbErrorType Camera::ReadMemory( const VmbUint64_t address, VmbUchar_t *pBuffer, VmbUint32_t nBufferSize, VmbUint32_t *pSizeComplete ) const
-{
-    return static_cast<VmbErrorType>( VmbMemoryRead( GetHandle(), address, nBufferSize, (char*)pBuffer, pSizeComplete ) );
-}
-
-VmbErrorType Camera::WriteMemory( const VmbUint64_t address, const VmbUchar_t *pBuffer, VmbUint32_t nBufferSize, VmbUint32_t *pSizeComplete )
-{
-    return static_cast<VmbErrorType>( VmbMemoryWrite( GetHandle(), address, nBufferSize, (char *)pBuffer, pSizeComplete ) );
-}
-
-//Get one image synchronously.
-VmbErrorType Camera::AcquireSingleImage( FramePtr &rFrame, VmbUint32_t nTimeout , FrameAllocationMode allocationMode)
-{
-    VmbErrorType    res;
-    VmbInt64_t      PayloadSize;
-    FeaturePtr      pFeature;
-
-    res = GetFeatureValueInt( *this, "PayloadSize", PayloadSize );
-    if ( VmbErrorSuccess == res )
-    {
-        AcquireImageHelper AcquireHelper( *this );
-        res = AcquireHelper.Prepare( rFrame, PayloadSize, allocationMode );
-        if ( VmbErrorSuccess == res )
-        {
-            res = (VmbErrorType)VmbCaptureFrameWait( GetHandle(), &(SP_ACCESS( rFrame )->m_pImpl->m_frame), nTimeout );
-            if ( VmbErrorSuccess != res )
-            {
-                LOG_FREE_TEXT( "Could not acquire single image." )
-            }
-        }
-        else
-        {
-            LOG_FREE_TEXT( "Preparing image acquisition failed." );
-        }
-        VmbErrorType local_result = AcquireHelper.TearDown();
-        if( VmbErrorSuccess != local_result )
-        {
-            LOG_FREE_TEXT( "Tear down capture logic failed." )
-            if( VmbErrorSuccess == res)
-            {
-                res = local_result;
-            }
-        }
-    }
-    else
-    {
-        LOG_FREE_TEXT( "Could not get payload size" );
-    }
-
-    return res;
-}
-
-VmbErrorType Camera::AcquireMultipleImages( FramePtr *pFrames, VmbUint32_t nSize, VmbUint32_t nTimeout, VmbUint32_t *pNumFramesCompleted, FrameAllocationMode allocationMode )
-{
-    VmbErrorType res = VmbErrorBadParameter;
-
-    if (    NULL == pFrames
-         || 0 == nSize )
-    {
-        return res;
-    }
-
-    if ( NULL != pNumFramesCompleted )
-    {
-        *pNumFramesCompleted = 0;
-    }
-
-    VmbInt64_t nPayloadSize;
-    FeaturePtr pFeature;
-
-    res = GetFeatureValueInt( *this, "PayloadSize", nPayloadSize );
-    if ( VmbErrorSuccess == res )
-    {
-        AcquireImageHelper AquireHelper( *this );
-        VmbUint32_t nFramesQueued = 0;
-        res = AquireHelper.Prepare( pFrames, nSize, nPayloadSize, nFramesQueued, allocationMode);
-
-        if ( VmbErrorSuccess == res )
-        {
-            for ( VmbUint32_t nFrameCount = 0; nFrameCount <nFramesQueued; ++ nFrameCount )
-            {
-                res = (VmbErrorType)VmbCaptureFrameWait( GetHandle(), &(SP_ACCESS( pFrames[nFrameCount] )->m_pImpl->m_frame), nTimeout );
-                if ( VmbErrorSuccess != res )
-                {
-                    std::stringstream strMsg("Could only successfully fill ");
-                    strMsg << nFrameCount-1 << " of " << nSize << " frames. Will stop acquisition now.";
-                    LOG_FREE_TEXT( strMsg.str() );
-                    break;
-                }
-                else if ( NULL !=  pNumFramesCompleted )
-                {
-                    ++(*pNumFramesCompleted);
-                }
-            }
-            VmbErrorType local_res = AquireHelper.TearDown();
-            if( VmbErrorSuccess == res)
-            {
-                res = local_res;
-            }
-        }
-        else
-        {
-            LOG_FREE_TEXT( "Could not start capture" )
-        }
-    }
-    else
-    {
-        LOG_FREE_TEXT( "Could not get feature PayloadSize");
-    }
-
-    return res;
-}
-
-VmbErrorType Camera::StartContinuousImageAcquisition( int nBufferCount, const IFrameObserverPtr &rObserver, FrameAllocationMode allocationMode /*=FrameAllocation_AnnounceFrame*/)
-{
-    VmbErrorType        res;
-    FramePtrVector      Frames;
-    VmbInt64_t          nPayloadSize;
-
-    res = GetFeatureValueInt(*this,"PayloadSize", nPayloadSize );
-    if ( VmbErrorSuccess == res )
-    {
-        res = AcquireImageHelper::AnnounceFrames( *this, Frames, nBufferCount, nPayloadSize, rObserver, allocationMode );
-        if( Frames.empty() )
-        {
-            return res;
-        }
-        res = StartCapture();
-        if ( VmbErrorSuccess == res )
-        {
-            VmbUint32_t FramesQueued = 0;
-            for (   size_t FrameNumber = 0; FrameNumber < Frames.size(); ++ FrameNumber )
-            {
-                VmbErrorType LocalResult =  QueueFrame( Frames[ FrameNumber ] );
-                if ( VmbErrorSuccess == LocalResult)
-                {
-                    ++FramesQueued;
-                }
-                else
-                {
-                    LOG_FREE_TEXT( "Could not queue frame" )
-                }
-                if( VmbErrorSuccess == res)
-                {
-                    res = LocalResult;
-                }
-            }
-            if( 0 != FramesQueued)
-            {
-                res = RunFeatureCommand(*this, "AcquisitionStart" );
-                if ( VmbErrorSuccess != res )
-                {
-                    EndCapture();
-                    FlushQueue();
-                    RevokeAllFrames();
-                    LOG_FREE_TEXT( "Could not start acquisition" )
-                    return res;
-                }
-
-            }
-            else
-            {
-                EndCapture();
-                RevokeAllFrames();
-                LOG_FREE_TEXT( "Could not queue frames" )
-                return res;
-            }
-
-        }
-        else
-        {
-            RevokeAllFrames();
-            LOG_FREE_TEXT( "Could not start capturing" )
-        }
-    }
-    else
-    {
-        LOG_FREE_TEXT( "Could not get feature PayloadSize" )
-    }
-
-    return res;
-}
-
-VmbErrorType Camera::StopContinuousImageAcquisition()
-{
-    VmbErrorType    res;
-    FeaturePtr      pFeature;
-
-    // Prevent queuing of new frames while stopping
-    {
-        MutexGuard guard( m_pImpl->m_pQueueFrameMutex );
-        m_pImpl->m_bAllowQueueFrame = false;
-    }
-
-    res = RunFeatureCommand( *this, "AcquisitionStop" );
-    if ( VmbErrorSuccess != res )
-    {
-        LOG_FREE_TEXT( "Could not run feature AcquisitionStop" )
-    }
-
-    res = EndCapture();
-    if ( VmbErrorSuccess == res )
-    {
-        res = FlushQueue();
-        if( VmbErrorSuccess != res)
-        {
-            LOG_FREE_TEXT( "Could not flush queue" )
-        }
-        res = RevokeAllFrames();
-        if ( VmbErrorSuccess != res )
-        {
-            LOG_FREE_TEXT( "Could not revoke frames" )
-        }
-    }
-    else
-    {
-        LOG_FREE_TEXT("Could not stop capture, unable to revoke frames")
-    }
-
-    {
-        MutexGuard guard( m_pImpl->m_pQueueFrameMutex );
-        m_pImpl->m_bAllowQueueFrame = true;
-    }
-
-    return res;
-}
-
-VmbErrorType Camera::AnnounceFrame( const FramePtr &frame ) 
-{
-    if ( SP_ISNULL( frame ))
-    {
-        return VmbErrorBadParameter;
-    }
-
-    if (    true == SP_ACCESS( frame )->m_pImpl->m_bAlreadyAnnounced
-         || true == SP_ACCESS( frame )->m_pImpl->m_bAlreadyQueued )
-    {
-        return VmbErrorInvalidCall;
-    }
-
-    VmbError_t res = VmbFrameAnnounce( GetHandle(), &(SP_ACCESS( frame )->m_pImpl->m_frame), sizeof SP_ACCESS( frame )->m_pImpl->m_frame );
-
-	if ( VmbErrorSuccess == res )
-    {
-		// Begin write lock frame handler list
-        if ( true == m_pImpl->m_conditionHelper.EnterWriteLock( m_pImpl->m_frameHandlers ))
-        {
-            // If we are using AllocAndAnnounce the incoming buffer ptr is NULL. VmbFrameAnnounce can only set frame->m_pImpl->m_frame.buffer but not m_pImpl->m_pBuffer.
-            // Therefore we need to set m_pBuffer here.
-            if (SP_ACCESS( frame )->m_pImpl->m_pBuffer == NULL)
-            {
-                SP_ACCESS( frame )->m_pImpl->m_pBuffer = (VmbUchar_t *)SP_ACCESS( frame )->m_pImpl->m_frame.buffer;
-            }
-
-            res = m_pImpl->AppendFrameToVector( frame ) ;
-
-            if( VmbErrorSuccess == res )
-            {
-                SP_ACCESS( frame )->m_pImpl->m_bAlreadyAnnounced = true;
-            }
-            else
-            {
-                LOG_FREE_TEXT("could not append frame to internal vector");
-            }
-            // End write lock frame handler list
-            m_pImpl->m_conditionHelper.ExitWriteLock( m_pImpl->m_frameHandlers );
-        }
-        else
-        {
-            LOG_FREE_TEXT( "Could not lock announced frame queue for appending frame." );
-            res = VmbErrorResources;
-        }
-    }
-
-    return static_cast<VmbErrorType>( res );
-}
-
-VmbErrorType Camera::RevokeFrame( const FramePtr &frame )
-{
-    if ( SP_ISNULL( frame ))
-    {
-        return VmbErrorBadParameter;
-    }
-
-    VmbError_t res = VmbFrameRevoke( GetHandle(), &(SP_ACCESS( frame )->m_pImpl->m_frame) );
-
-    if ( VmbErrorSuccess == res )
-    {
-        // Begin (exclusive) write lock frame handler list
-        if ( true == m_pImpl->m_conditionHelper.EnterWriteLock( m_pImpl->m_frameHandlers, true ))
-        {
-            // Dequeue, revoke and delete frame
-            for(    FrameHandlerPtrVector::iterator iter = m_pImpl->m_frameHandlers.Vector.begin();
-                    m_pImpl->m_frameHandlers.Vector.end() != iter;)
-            {
-                // Begin exclusive write lock frame handler
-                MutexGuard lockal_lock ( SP_ACCESS((*iter))->Mutex() );
-                if ( SP_ISEQUAL( frame, SP_ACCESS(( *iter ))->GetFrame() ))
-                {
-                    SP_ACCESS( frame )->m_pImpl->m_frame.context[FRAME_HDL] = NULL;
-                    SP_ACCESS( frame )->m_pImpl->m_bAlreadyQueued = false;
-                    SP_ACCESS( frame )->m_pImpl->m_bAlreadyAnnounced = false;
-                    // End exclusive write lock frame handler
-                    iter = m_pImpl->m_frameHandlers.Vector.erase( iter );
-                    return VmbErrorSuccess;
-                }
-                else
-                {
-                    ++iter;
-                }
-            }
-
-            // End (exclusive) write lock frame handler list
-            m_pImpl->m_conditionHelper.ExitWriteLock( m_pImpl->m_frameHandlers );
-        }
-        else
-        {
-            LOG_FREE_TEXT( "Could not lock announced frame queue for removing frame." );
-            res = VmbErrorResources;
-        }
-    }
-    else
-    {
-        LOG_FREE_TEXT( "Could not revoke frames" )
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType Camera::RevokeAllFrames() 
-{
-    VmbError_t res;
-
-    res = VmbFrameRevokeAll( GetHandle() );
-
-    if ( VmbErrorSuccess == res )
-    {
-        // Begin (exclusive) write lock frame handler list
-        if ( true == m_pImpl->m_conditionHelper.EnterWriteLock( m_pImpl->m_frameHandlers, true ))
-        {
-            // Dequeue, revoke and delete frames
-            for (   FrameHandlerPtrVector::iterator iter = m_pImpl->m_frameHandlers.Vector.begin();
-                    m_pImpl->m_frameHandlers.Vector.end() != iter;
-                    ++iter )
-            {
-                // Begin exclusive write lock frame handler
-                MutexGuard  local_lock( SP_ACCESS((*iter))->Mutex() );
-                SP_ACCESS( SP_ACCESS(( *iter ))->GetFrame() )->m_pImpl->m_frame.context[FRAME_HDL] = NULL;
-                SP_ACCESS( SP_ACCESS(( *iter ))->GetFrame() )->m_pImpl->m_bAlreadyQueued = false;
-                SP_ACCESS (SP_ACCESS(( *iter ))->GetFrame() )->m_pImpl->m_bAlreadyAnnounced = false;
-                // End exclusive write lock frame handler
-            }
-
-            m_pImpl->m_frameHandlers.Vector.clear();
-            
-            // End exclusive write lock frame handler list
-            m_pImpl->m_conditionHelper.ExitWriteLock( m_pImpl->m_frameHandlers );
-        }
-        else
-        {
-            LOG_FREE_TEXT( "Could not lock frame handler list.")
-        }
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType Camera::QueueFrame( const FramePtr &frame )
-{
-    if ( SP_ISNULL( frame ))
-    {
-        return VmbErrorBadParameter;
-    }
-
-    MutexGuard guard( m_pImpl->m_pQueueFrameMutex );
-    if ( false == m_pImpl->m_bAllowQueueFrame )
-    {
-        LOG_FREE_TEXT( "Queuing of new frames is not possible while flushing and revoking the currently queued frames." );
-        return VmbErrorInvalidCall;
-    }
-
-    // HINT: The same frame cannot be queued twice (VmbErrorOther)
-    VmbError_t res = VmbCaptureFrameQueue( GetHandle(), &(SP_ACCESS( frame )->m_pImpl->m_frame), FrameHandler::FrameDoneCallback );
-
-    if (    VmbErrorSuccess == res
-         && false == SP_ACCESS( frame )->m_pImpl->m_bAlreadyQueued )
-    {
-        if ( false == SP_ACCESS( frame )->m_pImpl->m_bAlreadyAnnounced )
-        {
-            // Begin write lock frame handler list
-            if ( true == m_pImpl->m_conditionHelper.EnterWriteLock( m_pImpl->m_frameHandlers ))
-            {
-                m_pImpl->AppendFrameToVector( frame );
-                SP_ACCESS( frame )->m_pImpl->m_bAlreadyQueued = true;
-                
-                // End write lock frame handler list
-                m_pImpl->m_conditionHelper.ExitWriteLock( m_pImpl->m_frameHandlers );
-            }
-            else
-            {
-                LOG_FREE_TEXT( "Could not lock frame queue for appending frame." );
-                res = VmbErrorResources;
-            }
-        }
-    }
-
-    return static_cast<VmbErrorType>( res );
-}
-
-VmbErrorType Camera::FlushQueue()
-{
-    VmbError_t res = VmbCaptureQueueFlush( GetHandle() );
-
-    if ( VmbErrorSuccess == res )
-    {
-        // Begin exclusive write lock frame handler list
-        if ( true == m_pImpl->m_conditionHelper.EnterWriteLock( m_pImpl->m_frameHandlers, true ))
-        {
-            for (   FrameHandlerPtrVector::iterator iter = m_pImpl->m_frameHandlers.Vector.begin();
-                    m_pImpl->m_frameHandlers.Vector.end() != iter;)
-            {
-                // Begin exclusive write lock of every single frame handler
-                MutexPtr tmpMutex = SP_ACCESS((*iter))->Mutex();
-                SP_ACCESS( tmpMutex )->Lock();
-                //SP_ACCESS(( *iter)) ->Mutex()->Lock();
-                // Dequeue frame
-                SP_ACCESS( SP_ACCESS(( *iter ))->GetFrame() )->m_pImpl->m_bAlreadyQueued = false;
-                if ( false == SP_ACCESS( SP_ACCESS(( *iter ))->GetFrame() )->m_pImpl->m_bAlreadyAnnounced )
-                {
-                    // Delete frame if it was not announced / was revoked before
-                    SP_ACCESS( SP_ACCESS(( *iter ))->GetFrame() )->m_pImpl->m_frame.context[FRAME_HDL] = NULL;
-                    // End write lock frame handler
-                    SP_ACCESS( tmpMutex )->Unlock();
-                    iter = m_pImpl->m_frameHandlers.Vector.erase( iter );
-                }
-                else
-                {
-                    // End write lock frame handler
-                    SP_ACCESS( tmpMutex )->Unlock();
-                    ++iter;
-                }
-            }
-            // End write lock frame handler list
-            m_pImpl->m_conditionHelper.ExitWriteLock( m_pImpl->m_frameHandlers );
-        }
-        else
-        {
-            LOG_FREE_TEXT( "Could not lock frame handler list." )
-        }
-    }
-    else
-    {
-        LOG_FREE_TEXT( "Could not flush frame queue" )
-    }
-    
-    return static_cast<VmbErrorType>( res );
-}
-
-VmbErrorType Camera::StartCapture() 
-{
-    return static_cast<VmbErrorType>( VmbCaptureStart( GetHandle() ) );
-}
-
-VmbErrorType Camera::EndCapture() 
-{
-    VmbError_t res = VmbCaptureEnd( GetHandle() );
-
-    return static_cast<VmbErrorType>( res );
-}
-
-VmbErrorType Camera::Impl::AppendFrameToVector( const FramePtr &rFrame )
-{
-    try
-    {
-        FrameHandlerPtr pFH( new FrameHandler( rFrame, SP_ACCESS( rFrame )->m_pImpl->m_pObserver ));
-        if( SP_ISNULL( pFH ) )
-        {
-            return VmbErrorResources;
-        }
-        SP_ACCESS( rFrame )->m_pImpl->m_frame.context[FRAME_HDL] = SP_ACCESS(pFH);    
-        m_frameHandlers.Vector.push_back( pFH );
-        return VmbErrorSuccess;
-    }
-    catch(...)
-    {
-        return VmbErrorResources;
-    }
-}
-
-//
-// Method:      SaveCameraSettings()
-//
-// Purpose:     Saves the current camera setup to an XML file
-//
-// Parameters:
-//
-//  [in]    pStrFileName    xml file name
-//  [in]    pSettings       pointer to settings struct
-//
-// Returns:
-//
-//  - VmbErrorSuccess:          If no error
-//  - VmbErrorApiNotStarted:    VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:        The given handle is not valid
-//  - VmbErrorInternalFault:    When something unexpected happens in VimbaC function
-//  - VmbErrorOther:            Every other failure in load/save settings implementation class
-//
-VmbErrorType Camera::SaveCameraSettings( const char * const pStrFileName, VmbFeaturePersistSettings_t *pSettings ) const
-{
-    VmbErrorType err = VmbErrorSuccess;
-
-//  parameter check
-    if( NULL == pStrFileName )
-    {
-        return VmbErrorBadParameter;
-    }
-
-//  check internal settings struct variables
-    VmbBool_t useInternalStruct = true;
-    if( false == ((VmbFeaturePersistAll <= m_pImpl->m_persistType) && (VmbFeaturePersistNoLUT >= m_pImpl->m_persistType)) )
-    {
-        useInternalStruct = false;
-    }
-    if( false == ((0 < m_pImpl->m_maxIterations) && (10 > m_pImpl->m_maxIterations)) )
-    {
-        useInternalStruct = false;
-    }
-    if( false == ((0 < m_pImpl->m_loggingLevel) && (5 > m_pImpl->m_loggingLevel)) )
-    {
-        useInternalStruct = false;
-    }
-
-//  check if internal struct shall be used
-    if( VmbBoolTrue == useInternalStruct )
-    {
-        VmbFeaturePersistSettings_t newSettings;
-        newSettings.persistType = m_pImpl->m_persistType;
-        newSettings.maxIterations = m_pImpl->m_maxIterations;
-        newSettings.loggingLevel = m_pImpl->m_loggingLevel;
-        err = (VmbErrorType)VmbCameraSettingsSave( GetHandle(), pStrFileName, &newSettings, sizeof(newSettings) );
-    }
-    else
-    {
-        if( NULL == pSettings )
-        {
-            err = (VmbErrorType)VmbCameraSettingsSave( GetHandle(), pStrFileName, NULL, 0 );
-        }
-        else
-        {
-            err = (VmbErrorType)VmbCameraSettingsSave( GetHandle(), pStrFileName, pSettings, sizeof(*pSettings) );
-        }
-    }
-
-
-
-    return err;
-}
-
-//
-// Method:      LoadCameraSettings()
-//
-// Purpose:     Loads the current camera setup from an XML file into the camera
-//
-// Parameters:
-//
-//  [in]    pStrFileName    xml file name
-//  [in]    pSettings       pointer to settings struct
-//
-// Returns:
-//
-//  - VmbErrorSuccess:          If no error
-//  - VmbErrorApiNotStarted:    VmbStartup() was not called before the current command
-//  - VmbErrorBadHandle:        The given handle is not valid
-//  - VmbErrorInternalFault:    When something unexpected happens in VimbaC function
-//  - VmbErrorOther:            Every other failure in load/save settings implementation class
-//
-VmbErrorType Camera::LoadCameraSettings( const char * const pStrFileName, VmbFeaturePersistSettings_t *pSettings ) const
-{
-    VmbErrorType err = VmbErrorSuccess;
-
-//  parameter check
-    if( NULL == pStrFileName )
-    {
-        return VmbErrorBadParameter;
-    }
-
-//  check internal settings struct variables
-    VmbBool_t useInternalStruct = true;
-    if( false == ((VmbFeaturePersistAll <= m_pImpl->m_persistType) && (VmbFeaturePersistNoLUT >= m_pImpl->m_persistType)) )
-    {
-        useInternalStruct = false;
-    }
-    if( false == ((0 < m_pImpl->m_maxIterations) && (10 > m_pImpl->m_maxIterations)) )
-    {
-        useInternalStruct = false;
-    }
-    if( false == ((0 < m_pImpl->m_loggingLevel) && (5 > m_pImpl->m_loggingLevel)) )
-    {
-        useInternalStruct = false;
-    }
-
-//  check if internal struct shall be used
-    if( VmbBoolTrue == useInternalStruct )
-    {
-        VmbFeaturePersistSettings_t newSettings;
-        newSettings.persistType = m_pImpl->m_persistType;
-        newSettings.maxIterations = m_pImpl->m_maxIterations;
-        newSettings.loggingLevel = m_pImpl->m_loggingLevel;
-        err = (VmbErrorType)VmbCameraSettingsLoad( GetHandle(), pStrFileName, &newSettings, sizeof(newSettings) );
-    }
-    else
-    {
-        if( NULL == pSettings )
-        {
-            err = (VmbErrorType)VmbCameraSettingsLoad( GetHandle(), pStrFileName, NULL, 0 );
-        }
-        else
-        {
-            err = (VmbErrorType)VmbCameraSettingsLoad( GetHandle(), pStrFileName, pSettings, sizeof(*pSettings) );
-        }
-    }
-
-    return err;
-}
-
-//
-// Method:      LoadSaveSettingsSetup()
-//
-// Purpose:     Sets Load/Save settings behaviour (alternative to settings struct)
-//
-// Parameters:
-//
-//  [in]    persistType      determines which feature shall be considered during load/save settings
-//  [in]    maxIterations    determines how many 'tries' during loading feature values shall be performed
-//  [in]    loggingLevel     determines level of detail for load/save settings logging
-//
-void Camera::LoadSaveSettingsSetup( VmbFeaturePersist_t persistType, VmbUint32_t maxIterations, VmbUint32_t loggingLevel )
-{
-    if( true == ((VmbFeaturePersistAll != persistType) && (VmbFeaturePersistStreamable != persistType) && (VmbFeaturePersistNoLUT != persistType)) )
-    {
-        m_pImpl->m_persistType = VmbFeaturePersistNoLUT;
-    }
-    else
-    {
-        m_pImpl->m_persistType = persistType;
-    }
-
-    if( false == ((0 < maxIterations) && (6 > maxIterations)) )
-    {
-        m_pImpl->m_maxIterations = 5;
-    }
-    else
-    {
-        m_pImpl->m_maxIterations = maxIterations;
-    }
-
-    if( false == ((0 < loggingLevel) && (5 > loggingLevel)) )
-    {
-        m_pImpl->m_loggingLevel = 4;
-    }
-    else
-    {
-        m_pImpl->m_loggingLevel = loggingLevel;
-    }
-}
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/Clock.cpp b/VimbaCPP/Source/Clock.cpp
deleted file mode 100644
index 60cb6ebae6e995c4a69ad37f2c664a08f08cf8f1..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Clock.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Clock.cpp
-
-  Description: Implementation of a platform independent Sleep.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifdef WIN32
-    #include <sys/timeb.h>
-    #include <windows.h>
-#else
-    #include <sys/time.h>
-    #include <unistd.h>
-#endif
-
-#include <VimbaCPP/Source/Clock.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-Clock::Clock()
-    :   m_dStartTime(0.0)
-{
-}
-
-Clock::~Clock()
-{
-}
-
-void Clock::Reset()
-{
-    m_dStartTime = 0.0;
-}
-
-void Clock::SetStartTime()
-{
-    m_dStartTime = GetAbsTime();
-}
-
-void Clock::SetStartTime( double dStartTime )
-{
-    m_dStartTime = dStartTime;
-}
-
-double Clock::GetTime() const
-{
-    double dTime = 0.0;
-
-#ifdef WIN32
-    _timeb currSysTime;
-
-    _ftime_s(&currSysTime);
-
-    dTime = (currSysTime.time + ((double)currSysTime.millitm) / 1000.0);
-#else
-    timeval now;
-
-    if(gettimeofday(&now, (struct timezone *)0)) return 0.0;
-
-    dTime = ((double)now.tv_sec) + ((double)(now.tv_usec) / 1000000.0);
-#endif
-
-    return dTime - m_dStartTime;
-}
-
-double Clock::GetAbsTime()
-{
-    double dAbsTime = 0.0;
-
-#ifdef WIN32
-    _timeb currSysTime;
-
-    _ftime_s(&currSysTime);
-
-    dAbsTime = (currSysTime.time + ((double)currSysTime.millitm) / 1000.0);
-#else
-    timeval now;
-
-    if(gettimeofday(&now, (struct timezone *)0)) return 0.0;
-
-    dAbsTime = ((double)now.tv_sec) + ((double)(now.tv_usec) / 1000000.0);
-#endif
-
-    return dAbsTime;
-}
-
-void Clock::Sleep(double dTime)
-{
-#ifdef WIN32
-    ::Sleep((unsigned long)(dTime * 1000.0));
-#else
-    ::usleep((unsigned long)(dTime * 1000000.0));
-#endif
-}
-
-void Clock::SleepMS(unsigned long nTimeMS)
-{
-#ifdef WIN32
-    ::Sleep(nTimeMS);
-#else
-    ::usleep(nTimeMS * 1000);
-#endif
-}
-
-void Clock::SleepAbs(double dAbsTime)
-{
-    Clock clock;
-    double dTimeDiff = dAbsTime - clock.GetTime();
-        
-#ifdef WIN32
-    if(dTimeDiff > 4000000.0) dTimeDiff = 4000000.0;
-#else
-    if(dTimeDiff >= 4000.0) dTimeDiff = 4000.0;
-#endif
-    while(dTimeDiff > 0.0)
-    {
-        Sleep(dTimeDiff);
-        dTimeDiff = dAbsTime - clock.GetTime();
-#ifdef WIN32
-        if(dTimeDiff > 4000000.0) dTimeDiff = 4000000.0;
-#else
-        if(dTimeDiff >= 4000.0) dTimeDiff = 4000.0;
-#endif
-    }
-}
-
-}} //namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/Clock.h b/VimbaCPP/Source/Clock.h
deleted file mode 100644
index ae2cc16326ff8cceac62ad70af26fb227677cf57..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Clock.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Clock.h
-
-  Description: Definition of a platform independent Sleep.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_CLOCK
-#define AVT_VMBAPI_CLOCK
-
-namespace AVT {
-namespace VmbAPI {
-
-class Clock
-{
-  public:
-    Clock();
-    virtual ~Clock();
-
-    virtual void Reset();
-    virtual void SetStartTime();
-    virtual void SetStartTime( double dStartTime );
-    virtual double GetTime() const;
-
-    static double GetAbsTime();
-
-    static void Sleep( double dTime );
-    static void SleepMS( unsigned long nTimeMS );
-    static void SleepAbs( double dAbsTime );
-
-  protected:
-    double m_dStartTime;
-};
-
-}} //namespace AVT::VmbAPI
-
-#endif //AVT_VMBAPI_CLOCK
diff --git a/VimbaCPP/Source/CommandFeature.cpp b/VimbaCPP/Source/CommandFeature.cpp
deleted file mode 100644
index 4d281483a660d8fca870f205e5195b58923bf7b7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/CommandFeature.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CommandFeature.cpp
-
-  Description: Implementation of class AVT::VmbAPI::CommandFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Source/CommandFeature.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-CommandFeature::CommandFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer *pFeatureContainer )
-    :BaseFeature( featureInfo, pFeatureContainer )
-{
-}
-
-VmbErrorType CommandFeature::RunCommand() 
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureCommandRun( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str() );
-}
-
-VmbErrorType CommandFeature::IsCommandDone( bool &rbIsDone ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureCommandIsDone( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rbIsDone );
-}
-
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/CommandFeature.h b/VimbaCPP/Source/CommandFeature.h
deleted file mode 100644
index 2c3221bfea4f0ecc9de5fb1b9a050cd53d08ee08..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/CommandFeature.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        CommandFeature.h
-
-  Description: Definition of class AVT::VmbAPI::CommandFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_COMMANDFEATURE_H
-#define AVT_VMBAPI_COMMANDFEATURE_H
-
-#include <VimbaC/Include/VmbCommonTypes.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Source/BaseFeature.h>
-#include <VimbaCPP/Include/FeatureContainer.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class CommandFeature : public BaseFeature 
-{
-  public:
-    CommandFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer *pFeatureContainer );
-
-    IMEXPORT virtual VmbErrorType RunCommand();
-
-    IMEXPORT virtual VmbErrorType IsCommandDone( bool & isDone ) const;
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Source/Condition.cpp b/VimbaCPP/Source/Condition.cpp
deleted file mode 100644
index 42ed571b44d4ab4ab2e0dcb7a8b6979ddd61a58f..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Condition.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Condition.cpp
-
-  Description: Implementation of a condition class.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Source/Condition.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-Condition::Condition()
-    :   m_nWaiterNumber( 0 )
-    ,   m_nReleaseNumber( 0 )
-    ,   m_bLocked( true )
-{
-    SP_SET( m_Semaphore, new Semaphore() );
-}
-
-void Condition::Wait( const BasicLockable &rLockable )
-{
-    Wait( rLockable.GetMutex() );
-}
-
-void Condition::Wait( const MutexPtr &rMutex )
-{
-    m_nWaiterNumber++;
-
-    SP_ACCESS( rMutex )->Unlock();
-
-    SP_ACCESS( m_Semaphore )->Acquire();
-
-    SP_ACCESS( rMutex) ->Lock();
-
-    if ( m_nWaiterNumber > 0 )
-    {
-        m_nWaiterNumber--;
-    }
-
-    if ( m_nReleaseNumber > 0 )
-    {
-        m_nReleaseNumber--;
-    }
-
-    if(     m_nWaiterNumber > 0
-        &&  m_nReleaseNumber > 0 )
-    {
-        SP_ACCESS( m_Semaphore )->Release();
-        m_bLocked = false;
-    }
-    else
-    {
-        m_bLocked = true;
-    }
-    
-    if( m_nReleaseNumber > m_nWaiterNumber )
-    {
-        m_nReleaseNumber = m_nWaiterNumber;
-    }
-}
-
-void Condition::Signal( bool bSingle )
-{
-    if( m_nWaiterNumber > m_nReleaseNumber )
-    {
-        if( true == bSingle )
-        {
-            m_nReleaseNumber++;
-        }
-        else
-        {
-            m_nReleaseNumber = m_nWaiterNumber;
-        }
-
-        if( true == m_bLocked )
-        {
-            SP_ACCESS( m_Semaphore )->Release();
-            m_bLocked = false;
-        }
-    }
-}
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/Condition.h b/VimbaCPP/Source/Condition.h
deleted file mode 100644
index a1b6cd1ddcade80236fe66e4809e912bcf3c77f9..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Condition.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Condition.h
-
-  Description: Definition of a condition class.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_CONDITION_H
-#define AVT_VMBAPI_CONDITION_H
-
-#include <VimbaCPP/Include/Mutex.h>
-#include <VimbaCPP/Source/Semaphore.h>
-#include <VimbaCPP/Include/BasicLockable.h>
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class Condition
-{
-  private:
-    unsigned long           m_nReleaseNumber;
-    unsigned long           m_nWaiterNumber;
-    bool                    m_bLocked;
-    SP_DECL( Semaphore )    m_Semaphore;        // A binary semaphore (non recursive mutex)
-
-  public:
-    Condition();
-
-    void Wait( const BasicLockable &rLockable );
-    void Wait( const MutexPtr &rMutex );
-
-    void Signal( bool bSingle = false );
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif //CONDITION_H
\ No newline at end of file
diff --git a/VimbaCPP/Source/ConditionHelper.cpp b/VimbaCPP/Source/ConditionHelper.cpp
deleted file mode 100644
index a3269f673eb7ddfb506043e761a7a3263ef3574b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/ConditionHelper.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ConditionHelper.cpp
-
-  Description: Implementation of helper class for conditions.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Source/ConditionHelper.h>
-
-#include <VimbaCPP/Source/MutexGuard.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-ConditionHelper::ConditionHelper()
-    :   m_nNumListReads( 0 )
-    ,   m_bIsWritingList( false )
-    ,   m_bExclusive( false )
-{    
-}
-
-bool ConditionHelper::EnterReadLock( BasicLockable &rLockable )
-{
-    return EnterReadLock( rLockable.GetMutex() );
-}
-bool ConditionHelper::EnterReadLock( MutexPtr &pMutex )
-{
-    MutexGuard guard( pMutex );
-    if ( true == m_bExclusive )
-    {
-        guard.Release();
-        return false;
-    }
-    while ( true == m_bIsWritingList )
-    {
-        m_WriteCondition.Wait( pMutex );
-    }
-    ++m_nNumListReads;
-    guard.Release();
-
-    return true;
-}
-
-void ConditionHelper::ExitReadLock( BasicLockable &rLockable )
-{
-    ExitReadLock( rLockable.GetMutex() );
-}
-void ConditionHelper::ExitReadLock( MutexPtr &pMutex )
-{
-    MutexGuard guard( pMutex );    
-    if ( 0 == --m_nNumListReads )
-    {
-        m_ReadCondition.Signal();
-    }
-    guard.Release();
-}
-
-bool ConditionHelper::EnterWriteLock( BasicLockable &rLockable, bool bExclusive )
-{
-    return EnterWriteLock( rLockable.GetMutex(), bExclusive );
-}
-bool ConditionHelper::EnterWriteLock( MutexPtr &pMutex, bool bExclusive )
-{
-    MutexGuard guard( pMutex );
-    if ( true == m_bExclusive )
-    {
-        guard.Release();
-        return false;
-    }
-    while ( true == m_bIsWritingList )
-    {
-        m_WriteCondition.Wait( pMutex );
-    }
-    m_bIsWritingList = true;
-    m_bExclusive = bExclusive;
-    while ( 0 < m_nNumListReads )
-    {
-        m_ReadCondition.Wait( pMutex );
-    }
-    guard.Release();
-
-    return true;
-}
-
-void ConditionHelper::ExitWriteLock( BasicLockable &rLockable )
-{
-    ExitWriteLock( rLockable.GetMutex() );
-}
-void ConditionHelper::ExitWriteLock( MutexPtr &pMutex )
-{
-    MutexGuard guard( pMutex );
-    m_bIsWritingList = false;
-    m_bExclusive = false;
-    m_WriteCondition.Signal();
-    guard.Release();
-}
-
-}} // namespace AV::VimbaAPI
diff --git a/VimbaCPP/Source/ConditionHelper.h b/VimbaCPP/Source/ConditionHelper.h
deleted file mode 100644
index 1b69beae5211320a01260241952977f73abba19b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/ConditionHelper.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        ConditionHelper.h
-
-  Description: Definition of helper class for conditions.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_CONDITIONHELPER_H
-#define AVT_VMBAPI_CONDITIONHELPER_H
-
-#include <VimbaCPP/Source/Condition.h>
-
-#include <map>
-
-namespace AVT {
-namespace VmbAPI {
-
-class ConditionHelper
-{
-  public:
-    ConditionHelper();
-
-    // Waits until writing access has finished and returns true.
-    // If exclusive writing access was granted the function exits immediately without locking and returns false
-    bool EnterReadLock( BasicLockable &rLockable );
-    bool EnterReadLock( MutexPtr &pMutex );
-    void ExitReadLock( BasicLockable &rLockable );
-    void ExitReadLock( MutexPtr &pMutex );
-
-    // Waits until writing and reading access have finished and returns true.
-    // If exclusive writing access was granted the function exits immediately without locking and returns false
-    bool EnterWriteLock( BasicLockable &rLockable, bool bExclusive = false );
-    bool EnterWriteLock( MutexPtr &pMutex, bool bExclusive = false );
-    void ExitWriteLock( BasicLockable &rLockable );
-    void ExitWriteLock( MutexPtr &pMutex );
-
-  private:
-    Condition                           m_ReadCondition;
-    Condition                           m_WriteCondition;
-    bool                                m_bIsWritingList;
-    bool                                m_bExclusive;
-    int                                 m_nNumListReads;
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif // CONDITIONHELPER_H
\ No newline at end of file
diff --git a/VimbaCPP/Source/DefaultCameraFactory.cpp b/VimbaCPP/Source/DefaultCameraFactory.cpp
deleted file mode 100644
index d000087dc3f765647a20d63b2fc317d1904f6921..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/DefaultCameraFactory.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        DefaultCameraFactory.cpp
-
-  Description: Implementation of class AVT::VmbAPI::DefaultCameraFactory used to
-               create new Camera objects if no user defined camera factory
-               class was provided.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Source/DefaultCameraFactory.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-CameraPtr DefaultCameraFactory::CreateCamera(   const char *pCameraID,
-                                                const char *pCameraName,
-                                                const char *pCameraModel,
-                                                const char *pCameraSerialNumber,
-                                                const char *pInterfaceID,
-                                                VmbInterfaceType eInterfaceType,
-                                                const char * /*pInterfaceName*/,
-                                                const char * /*pInterfaceSerialNumber*/,
-                                                VmbAccessModeType /*interfacePermittedAccess*/ )
-{
-    return CameraPtr( new Camera( pCameraID, pCameraName, pCameraModel, pCameraSerialNumber, pInterfaceID, eInterfaceType ));
-}
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/DefaultCameraFactory.h b/VimbaCPP/Source/DefaultCameraFactory.h
deleted file mode 100644
index 078f23ba928c685ec94a63cd5ee0bbeb9f46a0a7..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/DefaultCameraFactory.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        DefaultCameraFactory.h
-
-  Description: Definition of class AVT::VmbAPI::DefaultCameraFactory used to
-               create new Camera objects if no user defined camera factory
-               class was provided.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_DEFAULTCAMERAFACTORY_H
-#define AVT_VMBAPI_DEFAULTCAMERAFACTORY_H
-
-#include <VimbaCPP/Include/ICameraFactory.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class DefaultCameraFactory : public virtual ICameraFactory
-{
-  public:
-    virtual CameraPtr CreateCamera( const char         *pCameraID,
-                                    const char         *pCameraName,
-                                    const char         *pCameraModel,
-                                    const char         *pCameraSerialNumber,
-                                    const char         *pInterfaceID,
-                                    VmbInterfaceType    interfaceType,
-                                    const char         *pInterfaceName,
-                                    const char         *pInterfaceSerialNumber,
-                                    VmbAccessModeType   interfacePermittedAccess );
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Source/EnumEntry.cpp b/VimbaCPP/Source/EnumEntry.cpp
deleted file mode 100644
index 9ad376e69e1873fa2b1675b6e9ca4b7de2db0c3e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/EnumEntry.cpp
+++ /dev/null
@@ -1,299 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        EnumEntry.cpp
-
-  Description: Implementation of class AVT::VmbAPI::EnumEntry.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Include/EnumEntry.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-struct EnumEntry::PrivateImpl
-{
-    std::string                 m_strName;
-    std::string                 m_strDisplayName;
-    std::string                 m_strDescription;
-    std::string                 m_strTooltip;
-    std::string                 m_strNamespace;
-    VmbFeatureVisibilityType    m_Visibility;
-    VmbInt64_t                  m_nValue;
-    PrivateImpl(    const char              *pStrName,
-                    const char              *pStrDisplayName,
-                    const char              *pStrDescription,
-                    const char              *pStrTooltip,
-                    const char              *pStrSNFCNamespace,
-                    VmbFeatureVisibility_t  visibility,
-                    VmbInt64_t              nValue)
-        : m_nValue( nValue )
-        , m_Visibility ( (VmbFeatureVisibilityType)visibility )
-    {
-        m_strName           = pStrName          != NULL ? std::string( pStrName ) : "";
-        m_strDisplayName    = pStrDisplayName   != NULL ? std::string( pStrDisplayName ) : "";
-        m_strDescription    = pStrDescription   != NULL ? std::string( pStrDescription ) : "";
-        m_strTooltip        = pStrTooltip       != NULL ? std::string( pStrTooltip ) : "";
-        m_strNamespace      = pStrSNFCNamespace != NULL ? std::string( pStrSNFCNamespace ) : "";
-    }
-    VmbErrorType GetName( char * const pStrName, VmbUint32_t &rnSize ) const
-    {
-        VmbErrorType res;
-
-        if ( NULL == pStrName )
-        {
-            rnSize = static_cast<VmbUint32_t>( m_strName.size() );
-            res = VmbErrorSuccess;
-        }
-        else if ( m_strName.size() <= rnSize )
-        {
-            std::copy( m_strName.begin(), m_strName.end(), pStrName );
-            rnSize = static_cast<VmbUint32_t>( m_strName.size() );
-            res = VmbErrorSuccess;
-        }
-        else
-        {
-            res = VmbErrorMoreData;
-        }
-
-        return res;
-    }
-
-    VmbErrorType GetDisplayName( char * const pStrDisplayName, VmbUint32_t &rnSize ) const
-    {
-        VmbErrorType res;
-
-        if ( NULL == pStrDisplayName )
-        {
-            rnSize = static_cast<VmbUint32_t>( m_strDisplayName.size() );
-            res = VmbErrorSuccess;
-        }
-        else if ( m_strDisplayName.size() <= rnSize )
-        {
-            std::copy( m_strDisplayName.begin(), m_strDisplayName.end(), pStrDisplayName );
-            rnSize = static_cast<VmbUint32_t>( m_strDisplayName.size() );
-            res = VmbErrorSuccess;
-        }
-        else
-        {
-            res = VmbErrorMoreData;
-        }
-
-        return res;
-    }
-
-    VmbErrorType GetDescription( char * const pStrDescription, VmbUint32_t &rnSize ) const
-    {
-        VmbErrorType res;
-
-        if ( NULL == pStrDescription )
-        {
-            rnSize = static_cast<VmbUint32_t>( m_strDescription.size() );
-            res = VmbErrorSuccess;
-        }
-        else if ( m_strDescription.size() <= rnSize )
-        {
-            std::copy( m_strDescription.begin(), m_strDescription.end(), pStrDescription );
-            rnSize = static_cast<VmbUint32_t>( m_strDescription.size() );
-            res = VmbErrorSuccess;
-        }
-        else
-        {
-            res = VmbErrorMoreData;
-        }
-
-        return res;
-    }
-
-    VmbErrorType GetTooltip( char * const pStrTooltip, VmbUint32_t &rnSize ) const
-    {
-        VmbErrorType res;
-
-        if ( NULL == pStrTooltip )
-        {
-            rnSize = static_cast<VmbUint32_t>( m_strTooltip.size() );
-            res = VmbErrorSuccess;
-        }
-        else if ( m_strTooltip.size() <= rnSize )
-        {
-            std::copy( m_strTooltip.begin(), m_strTooltip.end(), pStrTooltip );
-            rnSize = static_cast<VmbUint32_t>( m_strTooltip.size() );
-            res = VmbErrorSuccess;
-        }
-        else
-        {
-            res = VmbErrorMoreData;
-        }
-
-        return res;
-    }
-
-    VmbErrorType GetSFNCNamespace( char * const pStrNamespace, VmbUint32_t &rnSize ) const
-    {
-        VmbErrorType res;
-
-        if ( NULL == pStrNamespace )
-        {
-            rnSize = static_cast<VmbUint32_t>( m_strNamespace.size() );
-            res = VmbErrorSuccess;
-        }
-        else if ( m_strNamespace.size() <= rnSize )
-        {
-            std::copy( m_strNamespace.begin(), m_strNamespace.end(), pStrNamespace );
-            rnSize = static_cast<VmbUint32_t>( m_strNamespace.size() );
-            res = VmbErrorSuccess;
-        }
-        else
-        {
-            res = VmbErrorMoreData;
-        }
-
-        return res;
-    }
-
-    VmbErrorType GetValue( VmbInt64_t &rnValue ) const
-    {
-        rnValue = m_nValue;
-
-        return VmbErrorSuccess;
-    }
-
-    VmbErrorType GetVisibility( VmbFeatureVisibilityType &rVisibility ) const
-    {
-        rVisibility = m_Visibility;
-
-        return VmbErrorSuccess;
-    }
-
-
-};
-EnumEntry::EnumEntry(   const char              *pStrName,
-                        const char              *pStrDisplayName,
-                        const char              *pStrDescription,
-                        const char              *pStrTooltip,
-                        const char              *pStrSNFCNamespace,
-                        VmbFeatureVisibility_t  visibility,
-                        VmbInt64_t              nValue)
-    : m_pImpl( new PrivateImpl(pStrName, pStrDisplayName, pStrDescription, pStrTooltip, pStrSNFCNamespace, visibility, nValue) )
-{
-}
-EnumEntry::EnumEntry( const EnumEntry &other)
-    : m_pImpl( NULL == other.m_pImpl ? NULL : new PrivateImpl( *other.m_pImpl) )
-{
-}
-EnumEntry& EnumEntry::operator=( const EnumEntry&other)
-{
-    if( this != &other)
-    {
-        PrivateImpl *tmp = NULL == other.m_pImpl ? NULL : new PrivateImpl(*other.m_pImpl);
-        if( NULL != tmp)
-        {
-            delete m_pImpl;
-            m_pImpl = tmp;
-        }
-    }
-    return *this;
-}
-EnumEntry::EnumEntry()
-    : m_pImpl()
-{
-    // No default ctor
-}
-
-EnumEntry::~EnumEntry()
-{
-    if( NULL != m_pImpl)
-    {
-        delete m_pImpl;
-        m_pImpl = NULL;
-    }
-}
-
-VmbErrorType EnumEntry::GetName( char * const pStrName, VmbUint32_t &rnSize ) const
-{
-    if( NULL == m_pImpl )
-    {
-        return VmbErrorInternalFault;
-    }
-    return m_pImpl->GetName( pStrName, rnSize );
-}
-
-VmbErrorType EnumEntry::GetDisplayName( char * const pStrDisplayName, VmbUint32_t &rnSize ) const
-{
-    if( NULL == m_pImpl )
-    {
-        return VmbErrorInternalFault;
-    }
-    return m_pImpl->GetDisplayName( pStrDisplayName, rnSize);
-}
-
-VmbErrorType EnumEntry::GetDescription( char * const pStrDescription, VmbUint32_t &rnSize ) const
-{
-    if( NULL == m_pImpl )
-    {
-        return VmbErrorInternalFault;
-    }
-    return m_pImpl->GetDescription( pStrDescription, rnSize);
-}
-
-VmbErrorType EnumEntry::GetTooltip( char * const pStrTooltip, VmbUint32_t &rnSize ) const
-{
-    if( NULL == m_pImpl )
-    {
-        return VmbErrorInternalFault;
-    }
-    return  m_pImpl->GetTooltip( pStrTooltip, rnSize );
-}
-
-VmbErrorType EnumEntry::GetSFNCNamespace( char * const pStrNamespace, VmbUint32_t &rnSize ) const
-{
-    if( NULL == m_pImpl )
-    {
-        return VmbErrorInternalFault;
-    }
-    return m_pImpl->GetSFNCNamespace( pStrNamespace, rnSize);
-}
-
-VmbErrorType EnumEntry::GetValue( VmbInt64_t &rnValue ) const
-{
-    if( NULL == m_pImpl )
-    {
-        return VmbErrorInternalFault;
-    }
-    rnValue = m_pImpl->m_nValue;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType EnumEntry::GetVisibility( VmbFeatureVisibilityType &rVisibility ) const
-{
-    if( NULL ==  m_pImpl )
-    {
-        return VmbErrorInternalFault;
-    }
-    rVisibility = m_pImpl->m_Visibility;
-
-    return VmbErrorSuccess;
-}
-
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/EnumFeature.cpp b/VimbaCPP/Source/EnumFeature.cpp
deleted file mode 100644
index ed86027bd8b1e73a8fc41f69c01544f04cc9cb5a..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/EnumFeature.cpp
+++ /dev/null
@@ -1,341 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        EnumFeature.cpp
-
-  Description: Implementation of class AVT::VmbAPI::EnumFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Source/EnumFeature.h>
-#include <memory.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-EnumFeature::EnumFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer* const pFeatureContainer )
-    :BaseFeature( featureInfo, pFeatureContainer )
-{
-}
-
-VmbErrorType EnumFeature::GetValue( char * const pStrValue, VmbUint32_t &rnSize ) const
-{
-    VmbErrorType res;
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    const char* pStrTempValue;
-    res = (VmbErrorType)VmbFeatureEnumGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &pStrTempValue );
-
-    if ( VmbErrorSuccess == res )
-    {
-        VmbUint32_t nLength=0;
-        while ( pStrTempValue[nLength] != '\0' )
-        {
-            ++nLength;
-        }
-
-        if ( NULL == pStrValue )
-        {
-            rnSize = nLength;
-        }
-        else if ( nLength <= rnSize )
-        {
-            ::memcpy( pStrValue, pStrTempValue, (size_t)nLength );
-            rnSize = nLength;
-        }
-        else
-        {
-            res = VmbErrorMoreData;
-        }
-    }
-
-    return res;
-}
-
-VmbErrorType EnumFeature::GetValue( VmbInt64_t &rnValue ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    const char *pName = NULL;
-    VmbError_t res = VmbFeatureEnumGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &pName );
-    if ( VmbErrorSuccess == res )
-    {
-        res = VmbFeatureEnumAsInt( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pName, &rnValue );
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType EnumFeature::GetEntry( EnumEntry &rEntry, const char * pStrEntryName ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    VmbFeatureEnumEntry_t entry;
-    VmbError_t res = VmbFeatureEnumEntryGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pStrEntryName, &entry, sizeof( VmbFeatureEnumEntry_t ));
-    if ( VmbErrorSuccess == res )
-    {
-        rEntry = EnumEntry( entry.name, entry.displayName, entry.description, entry.tooltip, entry.sfncNamespace, entry.visibility, entry.intValue );
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType EnumFeature::SetValue( const char *pStrValue )
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureEnumSet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pStrValue );
-}
-
-VmbErrorType EnumFeature::SetValue( const VmbInt64_t &rnValue )
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    const char *pName = NULL;
-    VmbError_t res = VmbFeatureEnumAsString( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), rnValue, &pName );
-    if ( VmbErrorSuccess == res )
-    {
-        res = VmbFeatureEnumSet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pName );
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType EnumFeature::GetValues( const char **pRange, VmbUint32_t &rnSize )
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    VmbUint32_t nCount = 0;
-    VmbError_t res = VmbFeatureEnumRangeQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), NULL, 0, &nCount );
-
-    if (    VmbErrorSuccess == res
-         && 0 < nCount )
-    {
-        std::vector<const char*> data( nCount );
-
-        res = VmbFeatureEnumRangeQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &data[0], nCount, &nCount );
-
-        if ( VmbErrorSuccess == res )
-        {
-            m_EnumStringValues.clear();
-
-            for (   std::vector<const char*>::iterator iter = data.begin();
-                    data.end() != iter;
-                    ++iter )
-            {
-                m_EnumStringValues.push_back( std::string( *iter ));
-            }
-
-            if ( NULL == pRange )
-            {
-                rnSize = (VmbUint32_t)m_EnumStringValues.size();
-                res = VmbErrorSuccess;
-            }
-            else if ( m_EnumStringValues.size() <= rnSize )
-            {
-                VmbUint32_t i = 0;
-                for (   StringVector::iterator iter = m_EnumStringValues.begin();
-                        m_EnumStringValues.end() != iter;
-                        ++iter, ++i )
-                {
-                    pRange[i] = iter->c_str();
-                }
-                rnSize = (VmbUint32_t)m_EnumStringValues.size();
-                res = VmbErrorSuccess;
-            }
-            else
-            {
-                res = VmbErrorMoreData;
-            }
-        }
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType EnumFeature::GetValues( VmbInt64_t *pValues, VmbUint32_t &rnSize )
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    VmbUint32_t nCount = 0;
-    VmbError_t res = GetValues( (const char**)NULL, nCount );
-
-    if (    VmbErrorSuccess == res
-         && 0 < nCount )
-    {
-        std::vector<const char*> data( nCount );
-
-        res = GetValues( &data[0], nCount );
-
-        if ( VmbErrorSuccess == res )
-        {
-            m_EnumIntValues.clear();
-
-            VmbInt64_t nValue;
-            for (   std::vector<const char*>::iterator iter = data.begin();
-                    data.end() != iter;
-                    ++iter )
-            {
-                res = VmbFeatureEnumAsInt( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), (*iter), &nValue );
-
-                if ( VmbErrorSuccess == res )
-                {
-                    m_EnumIntValues.push_back( nValue );
-                }
-                else
-                {
-                    m_EnumIntValues.clear();
-                    break;
-                }
-            }
-
-            if ( VmbErrorSuccess == res )
-            {
-                if ( NULL == pValues )
-                {
-                    rnSize = (VmbUint32_t)m_EnumIntValues.size();
-                }
-                else if ( m_EnumIntValues.size() <= rnSize )
-                {
-                    VmbUint32_t i = 0;
-                    for (   Int64Vector::iterator iter = m_EnumIntValues.begin();
-                        m_EnumIntValues.end() != iter;
-                        ++iter, ++i )
-                    {
-                        pValues[i] = (*iter);
-                    }
-                    rnSize = (VmbUint32_t)m_EnumIntValues.size();
-                }
-                else
-                {
-                    res = VmbErrorMoreData;
-                }
-            }
-        }
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType EnumFeature::GetEntries( EnumEntry *pEntries, VmbUint32_t &rnSize )
-{
-    VmbErrorType res = GetValues( (const char**)NULL, rnSize );
-
-    if (    0 < m_EnumStringValues.size()
-         && VmbErrorSuccess == res )
-    {
-        m_EnumEntries.clear();
-
-        for (   StringVector::iterator iter = m_EnumStringValues.begin();
-                m_EnumStringValues.end() != iter;
-                ++iter )
-        {
-            EnumEntry entry;
-            res = GetEntry( entry, (*iter).c_str() );
-            if ( VmbErrorSuccess == res )
-            {
-                m_EnumEntries.push_back( entry );
-            }
-            else
-            {
-                m_EnumEntries.clear();
-                break;
-            }
-        }
-
-        if ( VmbErrorSuccess == res )
-        {
-            if ( NULL == pEntries )
-            {
-                rnSize = (VmbUint32_t)m_EnumEntries.size();
-            }
-            else if ( m_EnumEntries.size() <= rnSize )
-            {
-                VmbUint32_t i = 0;
-                for (   EnumEntryVector::iterator iter = m_EnumEntries.begin();
-                        m_EnumEntries.end() != iter;
-                        ++iter, ++i )
-                {
-                    pEntries[i] = (*iter);
-                }
-                rnSize = (VmbUint32_t)m_EnumIntValues.size();
-            }
-            else
-            {
-                res = VmbErrorMoreData;
-            }
-        }
-    }
-
-    return res;
-}
-
-VmbErrorType EnumFeature::IsValueAvailable( const char *pStrValue, bool &bAvailable ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureEnumIsAvailable( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pStrValue, &bAvailable );
-}
-
-VmbErrorType EnumFeature::IsValueAvailable( const VmbInt64_t nValue, bool &rbAvailable ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    const char* pName = NULL;
-    VmbError_t res = VmbFeatureEnumAsString( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), nValue, &pName );
-    if ( VmbErrorSuccess == res )
-    {
-        res = IsValueAvailable( pName, rbAvailable );
-    }
-
-    return (VmbErrorType)res;
-}
-
-}} // namespace AVT::VmbAPI
-
diff --git a/VimbaCPP/Source/EnumFeature.h b/VimbaCPP/Source/EnumFeature.h
deleted file mode 100644
index 80b082ffddca93856e25e44d53646c2c7e5af5c5..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/EnumFeature.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        EnumFeature.h
-
-  Description: Definition of class AVT::VmbAPI::EnumFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_ENUMFEATURE_H
-#define AVT_VMBAPI_ENUMFEATURE_H
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Source/BaseFeature.h>
-#include <VimbaCPP/Include/FeatureContainer.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class EnumFeature : public BaseFeature 
-{
-  public:
-    EnumFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer* const pFeatureContainer );
-
-    IMEXPORT virtual VmbErrorType SetValue( const char *pValue );
-    
-    IMEXPORT virtual VmbErrorType GetEntry( EnumEntry &entry, const char *pEntryName ) const;
-
-    IMEXPORT virtual VmbErrorType GetValue( VmbInt64_t &value ) const;
-    IMEXPORT virtual VmbErrorType SetValue( const VmbInt64_t &value );
-
-    IMEXPORT virtual VmbErrorType IsValueAvailable( const char *pStrValue, bool &available ) const;
-    IMEXPORT virtual VmbErrorType IsValueAvailable( const VmbInt64_t value, bool &available ) const;
-
-  private:
-    // Copy of enum elements
-    StringVector    m_EnumStringValues;
-    Int64Vector     m_EnumIntValues;
-    EnumEntryVector m_EnumEntries;
-
-    // Array functions to pass data across DLL boundaries
-    IMEXPORT virtual VmbErrorType GetValue( char * const pValue, VmbUint32_t &size ) const;
-    IMEXPORT virtual VmbErrorType GetValues( const char **pValues, VmbUint32_t &size );
-    IMEXPORT virtual VmbErrorType GetValues( VmbInt64_t *pValue, VmbUint32_t &size );
-    IMEXPORT virtual VmbErrorType GetEntries( EnumEntry *pEntries, VmbUint32_t &size );
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Source/Feature.cpp b/VimbaCPP/Source/Feature.cpp
deleted file mode 100644
index 8d4c72480c31ba45f36cca5ee090423a4c04a333..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Feature.cpp
+++ /dev/null
@@ -1,329 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Feature.cpp
-
-  Description: Implementation of wrapper class AVT::VmbAPI::Feature.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Include/Feature.h>
-#pragma warning(disable:4996)
-#include <VimbaCPP/Source/BaseFeature.h>
-#pragma warning(default:4996)
-#include <VimbaCPP/Source/BoolFeature.h>
-#include <VimbaCPP/Source/CommandFeature.h>
-#include <VimbaCPP/Source/EnumFeature.h>
-#include <VimbaCPP/Source/FloatFeature.h>
-#include <VimbaCPP/Source/IntFeature.h>
-#include <VimbaCPP/Source/StringFeature.h>
-#include <VimbaCPP/Source/RawFeature.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-Feature::Feature( const VmbFeatureInfo_t *pFeatureInfo, FeatureContainer *pFeatureContainer )
-    :   m_pImpl( new BaseFeature( pFeatureInfo, pFeatureContainer ))
-{
-    if ( NULL != pFeatureInfo )
-    {
-        delete m_pImpl;
-        switch ( pFeatureInfo->featureDataType )
-        {
-            case VmbFeatureDataBool:        m_pImpl = new BoolFeature( pFeatureInfo, pFeatureContainer );
-                break;
-            case VmbFeatureDataEnum:        m_pImpl = new EnumFeature( pFeatureInfo, pFeatureContainer );
-                break;
-            case VmbFeatureDataFloat:       m_pImpl = new FloatFeature( pFeatureInfo, pFeatureContainer );
-                break;
-            case VmbFeatureDataInt:         m_pImpl = new IntFeature( pFeatureInfo, pFeatureContainer );
-                break;
-            case VmbFeatureDataString:      m_pImpl = new StringFeature( pFeatureInfo, pFeatureContainer );
-                break;
-            case VmbFeatureDataCommand:     m_pImpl = new CommandFeature( pFeatureInfo, pFeatureContainer );
-                break;
-            case VmbFeatureDataRaw:         m_pImpl = new RawFeature( pFeatureInfo, pFeatureContainer );
-                break;
-            default:                        m_pImpl = new BaseFeature( pFeatureInfo, pFeatureContainer );
-        }
-    }
-}
-
-Feature::Feature()
-{
-    // No default ctor
-}
-
-Feature::Feature( const Feature& )
-{
-    // No copy ctor
-}
-
-Feature::~Feature()
-{
-    delete m_pImpl;
-}
-
-void Feature::ResetFeatureContainer()
-{
-    m_pImpl->ResetFeatureContainer();
-}
-
-VmbErrorType Feature::RegisterObserver( const IFeatureObserverPtr &rObserver )
-{
-    return m_pImpl->RegisterObserver( rObserver );
-}
-
-VmbErrorType Feature::UnregisterObserver( const IFeatureObserverPtr &rObserver )
-{
-    return m_pImpl->UnregisterObserver( rObserver );
-}
-
-// Gets the value of a feature of type VmbFeatureDataInt
-VmbErrorType Feature::GetValue( VmbInt64_t &rnValue ) const
-{
-    return m_pImpl->GetValue( rnValue );
-}
-
-// Sets the value of a feature of type VmbFeatureDataInt
-VmbErrorType Feature::SetValue( const VmbInt64_t &rnValue )
-{
-    return m_pImpl->SetValue( rnValue );
-}
-
-// Sets the value of a feature of type VmbFeatureDataInt
-VmbErrorType Feature::SetValue( const VmbInt32_t &rnValue )
-{
-    return m_pImpl->SetValue( (const VmbInt64_t)rnValue );
-}
-
-// Gets the range of a feature of type VmbFeatureDataInt
-VmbErrorType Feature::GetRange( VmbInt64_t &rnMinimum, VmbInt64_t &rnMaximum ) const
-{
-    return m_pImpl->GetRange( rnMinimum, rnMaximum );
-}
-
-VmbErrorType Feature::HasIncrement( VmbBool_t &incrementSupported) const
-{
-    return m_pImpl->HasIncrement( incrementSupported);
-}
-// Gets the increment of a feature of type VmbFeatureDataInt
-VmbErrorType Feature::GetIncrement( VmbInt64_t &rnIncrement ) const
-{
-    return m_pImpl->GetIncrement( rnIncrement );
-}
-
-// Gets the increment of a feature of type VmbFeatureDataFloat
-VmbErrorType Feature::GetIncrement( double &rnIncrement ) const
-{
-    return m_pImpl->GetIncrement( rnIncrement );
-}
-
-// Gets the value of a feature of type VmbFeatureDataFloat
-VmbErrorType Feature::GetValue( double &rfValue) const
-{
-    return m_pImpl->GetValue( rfValue );
-}
-
-// Sets the value of a feature of type VmbFeatureDataFloat
-VmbErrorType Feature::SetValue( const double &rfValue )
-{
-    return m_pImpl->SetValue( rfValue );
-}
-
-// Gets the range of a feature of type VmbFeatureDataFloat
-VmbErrorType Feature::GetRange( double &rfMinimum, double &rfMaximum ) const
-{
-    return m_pImpl->GetRange( rfMinimum, rfMaximum );
-}
-
-// Sets the value of a feature of type VmbFeatureDataEnum
-// Sets the value of a feature of type VmbFeatureDataString
-VmbErrorType Feature::SetValue( const char *pStrValue )
-{
-    return m_pImpl->SetValue( pStrValue );
-}
-
-// Gets all possible values as string of a feature of type VmbFeatureDataEnum
-VmbErrorType Feature::GetValues( const char **pStrValues, VmbUint32_t &rnSize )
-{
-    return m_pImpl->GetValues( pStrValues, rnSize );
-}
-
-// Gets all possible values as integer of a feature of type VmbFeatureDataEnum
-VmbErrorType Feature::GetValues( VmbInt64_t *pnValues, VmbUint32_t &rnSize )
-{
-    return m_pImpl->GetValues( pnValues, rnSize );
-}
-
-// Gets the currently selected enum entry of a feature of type VmbFeatureDataEnum
-VmbErrorType Feature::GetEntry( EnumEntry &entry, const char *pStrEntryName ) const
-{
-    return m_pImpl->GetEntry( entry, pStrEntryName );
-}
-
-// Gets all possible enum entries of a feature of type VmbFeatureDataEnum
-VmbErrorType Feature::GetEntries( EnumEntry *pEnumEntries, VmbUint32_t &rnSize )
-{
-    return m_pImpl->GetEntries( pEnumEntries, rnSize );
-}
-
-// Indicates whether a particular enum value as string of a feature of type VmbFeatureDataEnum is available
-VmbErrorType Feature::IsValueAvailable( const char *pStrValue, bool &rbAvailable ) const
-{
-    return m_pImpl->IsValueAvailable( pStrValue, rbAvailable );
-}
-
-// Indicates whether a particular enum value as integer of a feature of type VmbFeatureDataEnum is available
-VmbErrorType Feature::IsValueAvailable( const VmbInt64_t nValue, bool &rbAvailable ) const
-{
-    return m_pImpl->IsValueAvailable( nValue, rbAvailable );
-}
-
-// Gets the value of a feature of type VmbFeatureDataString
-VmbErrorType Feature::GetValue( char * const pStrValue, VmbUint32_t &rnLength ) const
-{
-    return m_pImpl->GetValue( pStrValue, rnLength );
-}
-
-// Gets the value of a feature of type VmbFeatureDataBool
-VmbErrorType Feature::GetValue( bool &rbValue ) const
-{
-    return m_pImpl->GetValue( rbValue );
-}
-
-// Sets the value of a feature of type VmbFeatureDataBool
-VmbErrorType Feature::SetValue( bool bValue )
-{
-    return m_pImpl->SetValue( bValue );
-}
-
-// Executes a feature of type VmbFeatureDataCommand
-VmbErrorType Feature::RunCommand() 
-{
-    return m_pImpl->RunCommand();
-}
-
-// Indicates whether a feature of type VmbFeatureDataCommand finished execution
-VmbErrorType Feature::IsCommandDone( bool &bIsDone ) const
-{
-    return m_pImpl->IsCommandDone( bIsDone );
-}
-
-// Gets the value of a feature of type VmbFeatureDataRaw
-VmbErrorType Feature::GetValue( VmbUchar_t *pValue, VmbUint32_t &rnSize, VmbUint32_t &rnSizeFilled ) const
-{
-    return m_pImpl->GetValue( pValue, rnSize, rnSizeFilled );
-}
-
-// Sets the value of a feature of type VmbFeatureDataRaw
-VmbErrorType Feature::SetValue( const VmbUchar_t *pValue, VmbUint32_t nSize )
-{
-    return m_pImpl->SetValue( pValue, nSize );
-}
-
-VmbErrorType Feature::GetName( char * const pStrName, VmbUint32_t &rnLength ) const
-{
-    return m_pImpl->GetName( pStrName, rnLength );
-}
-
-VmbErrorType Feature::GetDisplayName( char * const pStrDisplayName, VmbUint32_t &rnLength ) const
-{
-    return m_pImpl->GetDisplayName( pStrDisplayName, rnLength );
-}
-
-VmbErrorType Feature::GetDataType( VmbFeatureDataType &reDataType ) const
-{
-    return m_pImpl->GetDataType( reDataType );
-}
-
-VmbErrorType Feature::GetFlags( VmbFeatureFlagsType &reFlags ) const
-{
-    return m_pImpl->GetFlags( reFlags );
-}
-
-VmbErrorType Feature::GetCategory( char * const pStrCategory, VmbUint32_t &rnLength ) const
-{
-    return m_pImpl->GetCategory( pStrCategory, rnLength );
-}
-
-VmbErrorType Feature::GetPollingTime( VmbUint32_t &rnPollingTime ) const
-{
-    return m_pImpl->GetPollingTime( rnPollingTime );
-}
-
-VmbErrorType Feature::GetUnit( char * const pStrUnit, VmbUint32_t &rnLength ) const
-{
-    return m_pImpl->GetUnit( pStrUnit, rnLength );
-}
-
-VmbErrorType Feature::GetRepresentation( char * const pStrRepresentation, VmbUint32_t &rnLength ) const
-{
-    return m_pImpl->GetRepresentation( pStrRepresentation, rnLength );
-}
-
-VmbErrorType Feature::GetVisibility( VmbFeatureVisibilityType &reVisibility ) const
-{
-    return m_pImpl->GetVisibility( reVisibility );
-}
-
-VmbErrorType Feature::GetToolTip( char * const pStrToolTip, VmbUint32_t &rnLength ) const
-{
-    return m_pImpl->GetToolTip( pStrToolTip, rnLength );
-}
-
-VmbErrorType Feature::GetDescription( char * const pStrDescription, VmbUint32_t &rnLength ) const
-{
-    return m_pImpl->GetDescription( pStrDescription, rnLength );
-}
-
-VmbErrorType Feature::GetSFNCNamespace( char * const pStrSFNCNamespace, VmbUint32_t &rnLength ) const
-{
-    return m_pImpl->GetSFNCNamespace( pStrSFNCNamespace, rnLength );
-}
-
-VmbErrorType Feature::GetAffectedFeatures( FeaturePtr *pAffectedFeatures, VmbUint32_t &rnSize )
-{
-    return m_pImpl->GetAffectedFeatures( pAffectedFeatures, rnSize );
-}
-
-VmbErrorType Feature::GetSelectedFeatures( FeaturePtr *pSelectedFeatures, VmbUint32_t &rnSize )
-{
-    return m_pImpl->GetSelectedFeatures( pSelectedFeatures, rnSize );
-}
-
-VmbErrorType Feature::IsReadable( bool &rbIsReadable )
-{
-    return m_pImpl->IsReadable( rbIsReadable );
-}
-
-VmbErrorType Feature::IsWritable( bool &rbIsWritable )
-{
-    return m_pImpl->IsWritable( rbIsWritable );
-}
-
-VmbErrorType Feature::IsStreamable( bool &rbIsStreamable ) const
-{
-    return m_pImpl->IsStreamable( rbIsStreamable );
-}
-
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/FeatureContainer.cpp b/VimbaCPP/Source/FeatureContainer.cpp
deleted file mode 100644
index 796b45e9e786f9794a38c55cb1abeceae4c1b592..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/FeatureContainer.cpp
+++ /dev/null
@@ -1,227 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        FeatureContainer.cpp
-
-  Description: Implementation of class AVT::VmbAPI::FeatureContainer.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <string>
-
-#include <VimbaCPP/Include/FeatureContainer.h>
-
-#include <VimbaCPP/Include/VimbaSystem.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-struct FeatureContainer::Impl
-{
-    VmbHandle_t         m_handle;
-
-    bool                m_bAllFeaturesFetched;
-
-    FeaturePtrMap       m_features;
-};
-
-FeatureContainer::FeatureContainer()
-    :   m_pImpl ( new Impl() )
-{
-    m_pImpl->m_bAllFeaturesFetched = false;
-    m_pImpl->m_handle = NULL;
-}
-
-FeatureContainer::FeatureContainer( const FeatureContainer& )
-{
-    // No copy ctor
-}
-
-FeatureContainer& FeatureContainer::operator=( const FeatureContainer& )
-{
-    // No assignment operator
-    return *this;
-}
-
-FeatureContainer::~FeatureContainer()
-{
-    Reset();
-    RevokeHandle();
-
-    delete m_pImpl;
-}
-
-VmbErrorType FeatureContainer::GetFeatureByName( const char *name, FeaturePtr &rFeature )
-{
-    VmbError_t res;
-
-    if ( NULL == name )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    if ( NULL == m_pImpl->m_handle )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    FeaturePtrMap::iterator iter = m_pImpl->m_features.find( name );
-    if ( iter != m_pImpl->m_features.end() )
-    {
-        rFeature = iter->second;
-        return VmbErrorSuccess;
-    }
-
-    VmbFeatureInfo_t featureInfo;
-        
-    res = VmbFeatureInfoQuery( m_pImpl->m_handle, name, &featureInfo, sizeof( VmbFeatureInfo_t ));
-
-    if ( VmbErrorSuccess == res )
-    {
-        rFeature = FeaturePtr( new Feature( &featureInfo, this ));
-        // Only add visible features to the feature list
-        if ( VmbFeatureVisibilityInvisible != featureInfo.visibility )
-        {
-            m_pImpl->m_features[name] = rFeature;
-        }
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType FeatureContainer::GetFeatures( FeaturePtr *pFeatures, VmbUint32_t &rnSize )
-{
-    VmbError_t res;
-
-    if ( NULL == m_pImpl->m_handle )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    // Feature list is static and therefore needs to be fetched only once per lifetime
-    if ( false == m_pImpl->m_bAllFeaturesFetched )
-    {
-        std::vector<VmbFeatureInfo_t> featureInfoList;
-
-        res = VmbFeaturesList( m_pImpl->m_handle, NULL, 0, &rnSize, sizeof(VmbFeatureInfo_t) );
-        if ( 0 == rnSize || VmbErrorSuccess != res )
-        {
-            return (VmbErrorType)res;
-        }
-
-        featureInfoList.resize( rnSize );
-        res = VmbFeaturesList( m_pImpl->m_handle, &featureInfoList[0], rnSize, &rnSize, sizeof(VmbFeatureInfo_t) );
-        if ( VmbErrorSuccess != res )
-        {
-            return (VmbErrorType)res;
-        }
-
-        for (   std::vector<VmbFeatureInfo_t>::iterator iter = featureInfoList.begin();
-                featureInfoList.end() != iter;
-                ++iter )
-        {
-            std::string strName = iter->name;
-            if ( 0 != strName.length() )
-            {
-                if ( SP_ISNULL( m_pImpl->m_features[strName] ))
-                {
-                    m_pImpl->m_features[strName] = FeaturePtr( new Feature( &(*iter), this ));
-                }
-            }
-        }
-
-        m_pImpl->m_bAllFeaturesFetched = true;
-    }
-    else // Features have been fetched before
-    {
-        res = VmbErrorSuccess;
-    }
-
-    if ( VmbErrorSuccess == res )
-    {
-        if ( NULL == pFeatures )
-        {
-            rnSize = (VmbUint32_t)m_pImpl->m_features.size();
-            return VmbErrorSuccess;
-        }
-        else if ( m_pImpl->m_features.size() <= rnSize )
-        {
-            VmbUint32_t i = 0;
-            for (   FeaturePtrMap::iterator iter = m_pImpl->m_features.begin();
-                    m_pImpl->m_features.end() != iter;
-                    ++iter, ++i )
-            {
-                pFeatures[i] = iter->second;
-            }
-            rnSize = (VmbUint32_t)m_pImpl->m_features.size();
-            return VmbErrorSuccess;
-        }
-        else
-        {
-            return VmbErrorMoreData;
-        }
-    }
-    else
-    {
-        return (VmbErrorType)res;
-    }
-}
-
-VmbHandle_t FeatureContainer::GetHandle() const
-{
-    return m_pImpl->m_handle;
-}
-
-void FeatureContainer::SetHandle( const VmbHandle_t handle )
-{
-    if ( NULL == handle )
-    {
-        Reset();
-        RevokeHandle();
-    }
-    else
-    {
-        m_pImpl->m_handle = handle;
-    }
-}
-
-// Sets the C handle to NULL
-void FeatureContainer::RevokeHandle()
-{
-    m_pImpl->m_handle = NULL;
-}
-
-// Sets the back reference to feature container that each feature holds to NULL
-// and resets all known features
-void FeatureContainer::Reset()
-{
-    for (   FeaturePtrMap::iterator iter = m_pImpl->m_features.begin();
-            m_pImpl->m_features.end() != iter;
-            ++iter)
-    {
-        SP_ACCESS( iter->second )->ResetFeatureContainer();
-    }
-
-    m_pImpl->m_features.clear();
-    m_pImpl->m_bAllFeaturesFetched = false;
-}
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/FileLogger.cpp b/VimbaCPP/Source/FileLogger.cpp
deleted file mode 100644
index 61acda6f89069b3fe0b13d50121ee3ee28bb9896..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/FileLogger.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FileLogger.cpp
-
-  Description: Implementation of class AVT::VmbAPI::FileLogger.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <ctime>
-#include <cstdlib>
-
-#include <VimbaCPP/Include/FileLogger.h>
-#include <VimbaCPP/Source/MutexGuard.h>
-
-#ifdef _WIN32
-#pragma warning(disable: 4996)
-#else //_WIN32
-#include <sys/stat.h>
-#endif //_WIN32
-
-namespace AVT {
-namespace VmbAPI {
-
-FileLogger::FileLogger( const char *pFileName, bool bAppend )
-    :   m_pMutex( MutexPtr( new Mutex() ))
-{
-    std::string strTempPath = GetTempPath();
-    std::string strFileName( pFileName );
-
-    if ( 0 < strTempPath.length() )
-    {
-        strFileName = strTempPath.append( strFileName );
-        if( true == bAppend )
-        {
-            m_File.open( strFileName.c_str(), std::fstream::app );
-        }
-        else
-        {
-            m_File.open( strFileName.c_str() );
-        }
-    }
-    else
-    {
-        throw;
-    }
-}
-
-FileLogger::FileLogger( const FileLogger& )
-{
-    // No copy ctor
-}
-
-FileLogger& FileLogger::operator=( const FileLogger& )
-{
-    // No assignment operator
-    return *this;
-}
-
-FileLogger::~FileLogger()
-{
-    if( true == m_File.is_open() )
-    {
-        m_File.close();
-    }
-}
-
-void FileLogger::Log( const std::string &rStrMessage )
-{
-    MutexGuard guard( m_pMutex );
-
-    if( true == m_File.is_open() )
-    {
-        #ifdef _WIN32
-            time_t nTime = time( &nTime );
-            tm timeInfo;
-            localtime_s( &timeInfo, &nTime );
-            char strTime[100];
-            asctime_s( strTime, 100, &timeInfo );
-        #else
-            time_t nTime = time( NULL );
-            std::string strTime = asctime( localtime( &nTime ) );
-        #endif
-
-        m_File << strTime << ": " << rStrMessage << std::endl;
-        m_File.flush();
-    }
-}
-
-std::string FileLogger::GetTempPath()
-{
-#ifndef _WIN32
-    std::string tmpDir;
-    
-    if(tmpDir.size() == 0)
-    {
-        char *pPath = std::getenv("TMPDIR");
-        if(NULL != pPath)
-        {
-            struct stat lStats;
-            if(stat(pPath, &lStats) == 0)
-            {
-                tmpDir = pPath;
-            }
-        }
-    }
-    if(tmpDir.size() == 0)
-    {
-        char *pPath = std::getenv("TEMP");
-        if(NULL != pPath)
-        {
-            struct stat lStats;
-            if(stat(pPath, &lStats) == 0)
-            {
-                tmpDir = pPath;
-            }
-        }
-    }
-    if(tmpDir.size() == 0)
-    {
-        char *pPath = std::getenv("TMP");
-        if(NULL != pPath)
-        {
-            struct stat lStats;
-            if(stat(pPath, &lStats) == 0)
-            {
-                tmpDir = pPath;
-            }
-        }
-    }
-    if(tmpDir.size() == 0)
-    {
-        std::string path = "/tmp";
-        struct stat lStats;
-        if(stat(path.c_str(), &lStats) == 0)
-        {
-            tmpDir = path;
-        }
-    }
-    if(tmpDir.size() == 0)
-    {
-        std::string path = "/var/tmp";
-        struct stat lStats;
-        if(stat(path.c_str(), &lStats) == 0)
-        {
-            tmpDir = path;
-        }
-    }
-    if(tmpDir.size() == 0)
-    {
-        std::string path = "/usr/tmp";
-        struct stat lStats;
-        if(stat(path.c_str(), &lStats) == 0)
-        {
-            tmpDir = path;
-        }
-    }
-    if(tmpDir.size() == 0)
-    {
-        return "";
-    }
-    // everyone expects delimiter on the outside
-    if( (*tmpDir.rbegin()) != '/' )
-    {
-        tmpDir +='/';
-    }
-    return tmpDir;
-#else
-    DWORD length = ::GetTempPathA( 0, NULL );
-    if( length == 0 )
-    {
-        return "";
-    }
-    
-    std::vector<TCHAR> tempPath( length );
-
-    length = ::GetTempPath( static_cast<DWORD>( tempPath.size() ), &tempPath[0] );
-    if( length == 0 || length > tempPath.size() )
-    {
-        return "";
-    }
-
-    return std::string( tempPath.begin(), tempPath.begin() + static_cast<std::size_t>(length) );
-#endif
-}
-
-}} //namespace AV::VmbAPI
diff --git a/VimbaCPP/Source/FloatFeature.cpp b/VimbaCPP/Source/FloatFeature.cpp
deleted file mode 100644
index 52b80d45899881f70fece757989b8edc216dc32b..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/FloatFeature.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FloatFeature.cpp
-
-  Description: Implementation of class AVT::VmbAPI::FloatFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Source/FloatFeature.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-FloatFeature::FloatFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer* const pFeatureContainer )
-    :   BaseFeature( featureInfo, pFeatureContainer )
-{
-}
-
-VmbErrorType FloatFeature::GetValue( double &rfValue ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureFloatGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rfValue );
-}
-
-VmbErrorType FloatFeature::SetValue( const double &rfValue ) 
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureFloatSet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), rfValue );
-}
-
-VmbErrorType FloatFeature::GetRange( double &rfMinimum, double &rfMaximum ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureFloatRangeQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rfMinimum, &rfMaximum );
-}
-
-VmbErrorType FloatFeature::HasIncrement( VmbBool_t &incrementSupported ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-    VmbBool_t hasIncrement;
-    VmbError_t Result =VmbFeatureFloatIncrementQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(),&hasIncrement, NULL );
-    if( VmbErrorSuccess == Result)
-    {
-        incrementSupported = hasIncrement;
-        return VmbErrorSuccess;
-    }
-    return static_cast<VmbErrorType>( Result);
-}
-
-VmbErrorType FloatFeature::GetIncrement( double &rnIncrement ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-    VmbBool_t hasIncrement;
-    VmbError_t Result =VmbFeatureFloatIncrementQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(),&hasIncrement, &rnIncrement );
-    if( VmbErrorSuccess == Result && !hasIncrement)
-    {
-        return VmbErrorNotImplemented;
-    }
-    return static_cast<VmbErrorType>( Result);
-}
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/FloatFeature.h b/VimbaCPP/Source/FloatFeature.h
deleted file mode 100644
index e0a26fe4a61467a68a595625e9f311a925b441f2..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/FloatFeature.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FloatFeature.h
-
-  Description: Definition of class AVT::VmbAPI::FloatFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_FLOATFEATURE_H
-#define AVT_VMBAPI_FLOATFEATURE_H
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Source/BaseFeature.h>
-#include <VimbaCPP/Include/FeatureContainer.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class FloatFeature : public BaseFeature 
-{
-  public:
-    FloatFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer* const pFeatureContainer );
-
-    IMEXPORT virtual VmbErrorType GetValue( double &value ) const;
-
-    IMEXPORT virtual VmbErrorType SetValue( const double &rfValue );
-
-    IMEXPORT virtual VmbErrorType GetRange( double &minimum, double &maximum ) const;
-    
-    IMEXPORT virtual VmbErrorType HasIncrement( VmbBool_t &incrementSupported) const;
-
-    IMEXPORT virtual VmbErrorType GetIncrement( double &increment ) const;
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Source/Frame.cpp b/VimbaCPP/Source/Frame.cpp
deleted file mode 100644
index 25dee29ec4d07f9bbe39b50339a80b3ceeb2927a..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Frame.cpp
+++ /dev/null
@@ -1,295 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Frame.cpp
-
-  Description: Implementation of class AVT::VmbAPI::Frame.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "VimbaCPP/Include/Frame.h"
-
-#include "VimbaCPP/Include/LoggerDefines.h"
-#include "VimbaCPP/Include/VimbaSystem.h"
-#include "VimbaCPP/Source/ConditionHelper.h"
-#include "VimbaCPP/Include/SharedPointerDefines.h"
-#include "VimbaCPP/Source/FrameImpl.h"
-#include "VimbaCPP/Source/MutexGuard.h"
-namespace AVT {
-namespace VmbAPI {
-
-Frame::Frame()    
-{
-    // No default ctor
-}
-
-Frame::Frame( Frame& )
-{
-    // No copy ctor
-}
-
-Frame& Frame::operator=( const Frame& )
-{
-    // No assignment operator
-    return *this;
-}
-
-Frame::Frame( VmbInt64_t nBufferSize, FrameAllocationMode allocationMode /*=FrameAllocation_AnnounceFrame*/ )
-    :   m_pImpl( new Impl() )
-{
-    m_pImpl->m_bAlreadyAnnounced = false;
-    m_pImpl->m_bAlreadyQueued = false;
-    m_pImpl->m_bIsSelfAllocatedBuffer = (allocationMode == FrameAllocation_AnnounceFrame) ? true : false;
-    SP_SET( m_pImpl->m_pObserverMutex, new Mutex() );
-    m_pImpl->Init();
-    m_pImpl->m_pBuffer = (allocationMode == FrameAllocation_AnnounceFrame) ? new VmbUchar_t[ (VmbUint32_t)nBufferSize ] : NULL;
-    m_pImpl->m_frame.bufferSize = (VmbUint32_t)nBufferSize;
-    m_pImpl->m_frame.buffer = m_pImpl->m_pBuffer;
-}
-
-Frame::Frame( VmbUchar_t *pBuffer, VmbInt64_t nBufferSize )
-    :   m_pImpl( new Impl() )
-{
-    m_pImpl->m_bAlreadyAnnounced = false;
-    m_pImpl->m_bAlreadyQueued = false;
-    m_pImpl->m_bIsSelfAllocatedBuffer = false;
-    m_pImpl->m_pBuffer = NULL;
-    SP_SET( m_pImpl->m_pObserverMutex, new Mutex());
-    m_pImpl->Init();
-    if ( NULL != pBuffer )
-    {
-        m_pImpl->m_pBuffer = pBuffer;
-        m_pImpl->m_frame.bufferSize = (VmbUint32_t)nBufferSize;
-        m_pImpl->m_frame.buffer = m_pImpl->m_pBuffer;
-    }
-    else
-    {
-        // Do some logging
-        LOG_FREE_TEXT( "No valid buffer passed when constructing frame." )
-    }
-}
-
-void Frame::Impl::Init()
-{
-    m_frame.ancillarySize = 0;
-    m_frame.buffer = NULL;
-    m_frame.bufferSize = 0;
-    for ( int i=0; i<4; ++i)
-    {
-        m_frame.context[i] = NULL;
-    }
-    m_frame.frameID = 0;
-    m_frame.height = 0;
-    m_frame.imageSize = 0;
-    m_frame.offsetX = 0;
-    m_frame.offsetY = 0;
-    m_frame.pixelFormat = 0;
-    m_frame.receiveFlags = VmbFrameFlagsNone;
-    m_frame.receiveStatus = VmbFrameStatusInvalid;
-    m_frame.timestamp = 0;
-    m_frame.width = 0;
-}
-
-Frame::~Frame()
-{
-    UnregisterObserver();
-    if (    true == m_pImpl->m_bIsSelfAllocatedBuffer
-         && NULL != m_pImpl->m_pBuffer )
-    {
-        delete [] m_pImpl->m_pBuffer;
-    }
-
-    delete m_pImpl;
-}
-
-VmbErrorType Frame::RegisterObserver( const IFrameObserverPtr &rObserver )
-{
-    if ( SP_ISNULL( rObserver ))
-    {
-        return VmbErrorBadParameter;
-    }
-
-    // Begin exclusive write lock observer
-    MutexGuard local_lock( m_pImpl->m_pObserverMutex );
-    m_pImpl->m_pObserver = rObserver;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::UnregisterObserver()
-{
-    VmbErrorType res = VmbErrorSuccess;
-
-    // Begin exclusive write lock observer
-    MutexGuard local_lock( m_pImpl->m_pObserverMutex );
-    if ( SP_ISNULL( m_pImpl->m_pObserver ))
-    {
-        res = VmbErrorNotFound;
-    }
-    else
-    {
-        SP_RESET( m_pImpl->m_pObserver );
-    }
-    return res;
-}
-
-bool Frame::GetObserver( IFrameObserverPtr &rObserver ) const
-{
-    MutexGuard local_lock( m_pImpl->m_pObserverMutex );
-    if ( SP_ISNULL( m_pImpl->m_pObserver ))
-    {
-        return false;
-    }
-    rObserver = m_pImpl->m_pObserver;
-    return true;
-}
-
-VmbErrorType Frame::GetAncillaryData( AncillaryDataPtr &rAncillaryData )
-{
-    if ( m_pImpl->m_frame.ancillarySize == 0 )
-    {
-        return VmbErrorNotFound;
-    }
-
-    SP_SET( rAncillaryData, new AncillaryData( &m_pImpl->m_frame ));
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetAncillaryData( ConstAncillaryDataPtr &rAncillaryData ) const
-{
-    if ( m_pImpl->m_frame.ancillarySize == 0 )
-    {
-        return VmbErrorNotFound;
-    }
-
-    SP_SET( rAncillaryData, new AncillaryData( &m_pImpl->m_frame ));
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetBuffer( VmbUchar_t* &rpBuffer )
-{
-    rpBuffer = m_pImpl->m_pBuffer;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetBuffer( const VmbUchar_t* &rpBuffer ) const
-{
-    rpBuffer = m_pImpl->m_pBuffer;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetImage( VmbUchar_t* &rpBuffer )
-{
-    // HINT: On Allied Vision cameras image data always is at the beginning of the buffer
-    rpBuffer = m_pImpl->m_pBuffer;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetImage( const VmbUchar_t* &rpBuffer ) const
-{
-    // HINT: On Allied Vision cameras image data always is at the beginning of the buffer
-    rpBuffer = m_pImpl->m_pBuffer;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetReceiveStatus( VmbFrameStatusType &rStatus ) const
-{
-    rStatus = (VmbFrameStatusType)m_pImpl->m_frame.receiveStatus;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetImageSize( VmbUint32_t &rnImageSize ) const
-{
-    rnImageSize = m_pImpl->m_frame.imageSize;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetAncillarySize( VmbUint32_t &rnAncillarySize ) const
-{
-    rnAncillarySize = m_pImpl->m_frame.ancillarySize;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetBufferSize( VmbUint32_t &rnBufferSize ) const
-{
-    rnBufferSize =m_pImpl-> m_frame.bufferSize;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetPixelFormat( VmbPixelFormatType &rPixelFormat ) const
-{
-    rPixelFormat = (VmbPixelFormatType)m_pImpl->m_frame.pixelFormat;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetWidth( VmbUint32_t &rnWidth ) const
-{
-    rnWidth = m_pImpl->m_frame.width;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetHeight( VmbUint32_t &rnHeight ) const
-{
-    rnHeight = m_pImpl->m_frame.height;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetOffsetX( VmbUint32_t &rnOffsetX ) const
-{
-    rnOffsetX = m_pImpl->m_frame.offsetX;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetOffsetY( VmbUint32_t &rnOffsetY ) const
-{
-    rnOffsetY = m_pImpl->m_frame.offsetY;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetFrameID( VmbUint64_t &rnFrameID ) const
-{
-    rnFrameID = m_pImpl->m_frame.frameID;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Frame::GetTimestamp( VmbUint64_t &rnTimestamp ) const
-{
-    rnTimestamp = m_pImpl->m_frame.timestamp;
-
-    return VmbErrorSuccess;
-}
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/FrameHandler.cpp b/VimbaCPP/Source/FrameHandler.cpp
deleted file mode 100644
index 2dff7708cfdb9f0845418bba5b03c093f2d4c963..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/FrameHandler.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameHandler.cpp
-
-  Description: Implementation of class AVT::VmbAPI::FrameHandler.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include "VimbaCPP/Source/FrameHandler.h"
-
-#include "VimbaCPP/Include/LoggerDefines.h"
-#include "VimbaCPP/Source/MutexGuard.h"
-
-namespace AVT {
-namespace VmbAPI {
-
-FrameHandler::FrameHandler( FramePtr pFrame, IFrameObserverPtr pFrameObserver )
-    :   m_pFrame( pFrame )
-    ,   m_pObserver( pFrameObserver )
-    ,   m_pMutex( new AVT::VmbAPI::Mutex() )
-{
-}
-
-FramePtr FrameHandler::GetFrame() const
-{
-    return m_pFrame;
-}
-
-void VMB_CALL FrameHandler::FrameDoneCallback( const VmbHandle_t /*handle*/, VmbFrame_t *pVmbFrame )
-{
-    if ( NULL != pVmbFrame )
-    {
-        FrameHandler* pFrameHandler = reinterpret_cast<FrameHandler*>( pVmbFrame->context[FRAME_HDL] );
-        if ( NULL != pFrameHandler)
-        {            
-            // Begin read lock frame handler
-            MutexGuard local_lock( pFrameHandler->Mutex() );
-            {
-                IFrameObserverPtr pObs;
-                if ( true == SP_ACCESS( pFrameHandler->m_pFrame )->GetObserver( pObs ))
-                {
-                    SP_ACCESS( pObs )->FrameReceived( pFrameHandler->m_pFrame );
-                }
-            }// scope to destroy observer pointer before releasing the lock
-        }
-        else // No FrameHandler
-        {
-            LOG_FREE_TEXT( "No frame handler passed. Frame has been removed from the frame queue." )
-        }
-    }
-    else // pVmbFrame == NULL (Just for safety)
-    {
-        LOG_FREE_TEXT( "Received callback for already freed frame." )
-    }
-}
-
-}}
diff --git a/VimbaCPP/Source/FrameHandler.h b/VimbaCPP/Source/FrameHandler.h
deleted file mode 100644
index de50e337877661c3bf15b183978a451209803661..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/FrameHandler.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameHandler.h
-
-  Description: Definition of class AVT::VmbAPI::FrameHandler.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_FRAMEHANDLER_H
-#define AVT_VMBAPI_FRAMEHANDLER_H
-
-#include <vector>
-
-#include "VimbaC/Include/VmbCommonTypes.h"
-#include "VimbaCPP/Include/BasicLockable.h"
-#include "VimbaCPP/Include/SharedPointerDefines.h"
-#include "VimbaCPP/Include/Frame.h"
-#include "VimbaCPP/Include/IFrameObserver.h"
-#include "VimbaCPP/Include/Mutex.h"
-
-namespace AVT {
-namespace VmbAPI {
-
-enum { FRAME_HDL=0, };
-
-class FrameHandler
-{
-  public:
-    static void VMB_CALL FrameDoneCallback( const VmbHandle_t handle, VmbFrame_t *pFrame );
-
-    FrameHandler( FramePtr pFrame, IFrameObserverPtr pFrameObserver );
-
-    FramePtr GetFrame() const;
-    MutexPtr&               Mutex() { return m_pMutex; }
-  private:
-    IFrameObserverPtr       m_pObserver;
-    FramePtr                m_pFrame;
-    MutexPtr                m_pMutex;
-};
-
-typedef std::vector<FrameHandlerPtr> FrameHandlerPtrVector;
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Source/FrameImpl.h b/VimbaCPP/Source/FrameImpl.h
deleted file mode 100644
index 2fdc9ab4a6bd01286aeb80e18c9f5ef9c6369bcb..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/FrameImpl.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        FrameImpl.h
-
-  Description: Definition of pointer to implementation structure used by
-               AVT::VmbAPI::Frame.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_FRAMEIMPL_H
-#define AVT_VMBAPI_FRAMEIMPL_H
-
-namespace AVT {
-namespace VmbAPI {
-
-struct Frame::Impl
-{
-    VmbUchar_t          *m_pBuffer;
-    bool                m_bIsSelfAllocatedBuffer;
-
-    VmbFrame_t          m_frame;
-
-    IFrameObserverPtr   m_pObserver;
-    MutexPtr            m_pObserverMutex;
-
-    bool                m_bAlreadyAnnounced;
-    bool                m_bAlreadyQueued;
-
-    void Init();
-};
-
-}}
-
-#endif
diff --git a/VimbaCPP/Source/Helper.h b/VimbaCPP/Source/Helper.h
deleted file mode 100644
index 63b09f39f9869908e6b1f666794f0305838e2dfe..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Helper.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Helper.h
-
-  Description: Definition of helper classes (types)
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_HELPER_H
-#define AVT_VMBAPI_HELPER_H
-
-#include <VimbaCPP/Include/BasicLockable.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-template <class T>
-class LockableVector : public virtual BasicLockable
-{
-  public:
-    std::vector<T> Vector;
-};
-
-template <class T1, class T2>
-class LockableMap : public virtual BasicLockable
-{
-  public:
-    std::map<T1, T2> Map;
-};
-
-char const * const AVT_IP_OR_MAC_ADDRESS = "IP_OR_MAC@";
-
-}} // AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Source/IntFeature.cpp b/VimbaCPP/Source/IntFeature.cpp
deleted file mode 100644
index 217cb71f15ae2e3d6ec6586ce6693aacadc8c032..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/IntFeature.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        IntFeature.cpp
-
-  Description: Implementation of class AVT::VmbAPI::IntFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Source/IntFeature.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-IntFeature::IntFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer* const pFeatureContainer )
-    :   BaseFeature( featureInfo, pFeatureContainer )
-{
-}
-
-VmbErrorType IntFeature::GetValue( VmbInt64_t &rnValue ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureIntGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rnValue );
-}
-
-VmbErrorType IntFeature::SetValue( const VmbInt64_t &rnValue )
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureIntSet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), rnValue );
-}
-
-VmbErrorType IntFeature::GetRange( VmbInt64_t &rnMinimum, VmbInt64_t &rnMaximum ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureIntRangeQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rnMinimum, &rnMaximum );
-}
-
-VmbErrorType IntFeature::HasIncrement( VmbBool_t & incrementSupported) const
-{
-    incrementSupported = VmbBoolTrue;
-    return VmbErrorSuccess;
-}
-VmbErrorType IntFeature::GetIncrement( VmbInt64_t &rnIncrement ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureIntIncrementQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rnIncrement );
-}
-
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/IntFeature.h b/VimbaCPP/Source/IntFeature.h
deleted file mode 100644
index 421f28c8f24e62df69099fe4e128475fc54af3fc..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/IntFeature.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        IntFeature.h
-
-  Description: Definition of class AVT::VmbAPI::IntFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_INTFEATURE_H
-#define AVT_VMBAPI_INTFEATURE_H
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Source/BaseFeature.h>
-#include <VimbaCPP/Include/FeatureContainer.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class IntFeature : public BaseFeature 
-{
-  public:
-    IntFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer* const pFeatureContainer );
-
-    IMEXPORT virtual VmbErrorType GetValue( VmbInt64_t &value ) const;
-
-    IMEXPORT virtual VmbErrorType SetValue( const VmbInt64_t &value );
-
-    IMEXPORT virtual VmbErrorType GetRange( VmbInt64_t &minimum, VmbInt64_t &maximum ) const;
-
-    IMEXPORT virtual VmbErrorType HasIncrement( VmbBool_t &incrementSupported) const;
-
-    IMEXPORT virtual VmbErrorType GetIncrement( VmbInt64_t &increment ) const;
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Source/Interface.cpp b/VimbaCPP/Source/Interface.cpp
deleted file mode 100644
index 46d4626b0ac13f9be93a6c04cd65d8141d03940e..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Interface.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        Interface.cpp
-
-  Description: Implementation of class AVT::VmbAPI::Interface.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-#pragma warning(disable:4996)
-#include <map>
-#pragma warning(default:4996)
-
-#include <VimbaCPP/Include/Interface.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-struct Interface::Impl
-{
-    // Copy of interface infos
-    struct InterfaceInfo
-    {
-        std::string         interfaceIdString;     // Unique identifier for each interface
-        VmbInterface_t      interfaceType;         // Interface type
-        std::string         interfaceName;         // Interface name, given by the transport layer
-        std::string         serialString;          // Serial number
-        VmbAccessMode_t     permittedAccess;       // Used access mode, see VmbAccessMode_t
-    } m_interfaceInfo;
-};    
-
-Interface::Interface()
-{
-    // No default ctor
-}
-
-Interface::Interface( const Interface& )
-{
-    // No copy ctor
-}
-
-Interface& Interface::operator=( const Interface& )
-{
-    // No assignment operator
-    return *this;
-}
-
-Interface::Interface(const VmbInterfaceInfo_t *pInterfaceInfo)
-    :   m_pImpl( new Impl() )
-{
-    m_pImpl->m_interfaceInfo.interfaceIdString.assign( pInterfaceInfo->interfaceIdString ? pInterfaceInfo->interfaceIdString : "" );
-    m_pImpl->m_interfaceInfo.interfaceName.assign( pInterfaceInfo->interfaceName ? pInterfaceInfo->interfaceName : "" );
-    m_pImpl->m_interfaceInfo.interfaceType = pInterfaceInfo->interfaceType;
-    m_pImpl->m_interfaceInfo.permittedAccess = pInterfaceInfo->permittedAccess;
-    m_pImpl->m_interfaceInfo.serialString.assign( pInterfaceInfo->serialString ? pInterfaceInfo->serialString : "" );
-}
-
-VmbErrorType Interface::Open()
-{
-    VmbError_t res;
-    VmbHandle_t hHandle;
-    
-    res = VmbInterfaceOpen( m_pImpl->m_interfaceInfo.interfaceIdString.c_str(), &hHandle );
-
-
-    if ( VmbErrorSuccess == res )
-    {
-        SetHandle( hHandle );
-    }
-
-    return (VmbErrorType)res;
-}
-
-Interface::~Interface()
-{
-    Close();
-
-    delete m_pImpl;
-}
-
-VmbErrorType Interface::Close() 
-{
-    VmbError_t res = VmbErrorSuccess;
-
-    if ( NULL != GetHandle() )
-    {
-        Reset();
-
-        res = VmbInterfaceClose( GetHandle() );
-
-        RevokeHandle();
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType Interface::GetID( char * const pStrID, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrID )
-    {
-        rnLength = (VmbUint32_t)m_pImpl->m_interfaceInfo.interfaceIdString.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_pImpl->m_interfaceInfo.interfaceIdString.length() <= rnLength )
-    {
-        std::copy( m_pImpl->m_interfaceInfo.interfaceIdString.begin(), m_pImpl->m_interfaceInfo.interfaceIdString.end(), pStrID );
-        pStrID[m_pImpl->m_interfaceInfo.interfaceIdString.length()] = '\0';
-        rnLength = (VmbUint32_t)m_pImpl->m_interfaceInfo.interfaceIdString.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType Interface::GetType( VmbInterfaceType &reType ) const
-{
-    reType = (VmbInterfaceType)m_pImpl->m_interfaceInfo.interfaceType;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType Interface::GetName( char * const pStrName, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrName )
-    {
-        rnLength = (VmbUint32_t)m_pImpl->m_interfaceInfo.interfaceName.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_pImpl->m_interfaceInfo.interfaceName.length() <= rnLength )
-    {
-        std::copy( m_pImpl->m_interfaceInfo.interfaceName.begin(), m_pImpl->m_interfaceInfo.interfaceName.end(), pStrName );
-        pStrName[m_pImpl->m_interfaceInfo.interfaceName.length()] = '\0';
-        rnLength = (VmbUint32_t)m_pImpl->m_interfaceInfo.interfaceName.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType Interface::GetSerialNumber( char * const pStrSerial, VmbUint32_t &rnLength ) const
-{
-    VmbErrorType res;
-
-    if ( NULL == pStrSerial )
-    {
-        rnLength = (VmbUint32_t)m_pImpl->m_interfaceInfo.serialString.length();
-        res = VmbErrorSuccess;
-    }
-    else if ( m_pImpl->m_interfaceInfo.serialString.length() <= rnLength )
-    {
-        std::copy( m_pImpl->m_interfaceInfo.serialString.begin(), m_pImpl->m_interfaceInfo.serialString.end(), pStrSerial );
-        pStrSerial[m_pImpl->m_interfaceInfo.serialString.length()] = '\0';
-        rnLength = (VmbUint32_t)m_pImpl->m_interfaceInfo.serialString.length();
-        res = VmbErrorSuccess;
-    }
-    else
-    {
-        res = VmbErrorMoreData;
-    }
-
-    return res;
-}
-
-VmbErrorType Interface::GetPermittedAccess( VmbAccessModeType &reAccessMode ) const
-{
-    reAccessMode = (VmbAccessModeType)m_pImpl->m_interfaceInfo.permittedAccess;
-
-    return VmbErrorSuccess;
-}
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/Mutex.cpp b/VimbaCPP/Source/Mutex.cpp
deleted file mode 100644
index b07bf68100d69b809d54e41c7320145d16c00501..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Mutex.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Mutex.cpp
-
-  Description: Implementation of class AVT::VmbAPI::Mutex.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <math.h>
-
-#include <VimbaCPP/Include/Mutex.h>
-#include <VimbaCPP/Include/LoggerDefines.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-Mutex::Mutex( bool bInitLock )
-#ifdef WIN32
-    :   m_hMutex( NULL )
-#endif
-{
-#ifdef WIN32
-    m_hMutex = CreateMutex( NULL, FALSE, NULL );
-    if( NULL == m_hMutex )
-    {
-        LOG_FREE_TEXT( "Could not create mutex." );
-        throw std::bad_alloc();
-    }
-#else
-    pthread_mutex_init(&m_Mutex, NULL);
-#endif
-
-    if( true == bInitLock )
-    {
-        Lock();
-    }
-}
-
-Mutex::~Mutex()
-{  
-#ifdef WIN32
-    CloseHandle( m_hMutex );
-#else
-    pthread_mutex_destroy(&m_Mutex);
-#endif
-}
-
-Mutex::Mutex( const Mutex& )
-{
-    // No copy ctor
-}
-
-Mutex& Mutex::operator=( const Mutex& )
-{
-    // No assignment operator
-    return *this;
-}
-
-void Mutex::Lock()
-{
-#ifdef WIN32
-    WaitForSingleObject( m_hMutex, INFINITE );
-#else
-    pthread_mutex_lock( &m_Mutex );
-#endif
-}
-
-void Mutex::Unlock()
-{  
-#ifdef WIN32
-    ReleaseMutex( m_hMutex );
-#else
-    pthread_mutex_unlock( &m_Mutex );
-#endif
-}
-
-}} //namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/MutexGuard.cpp b/VimbaCPP/Source/MutexGuard.cpp
deleted file mode 100644
index 78c5ad4215e1570df2a27dd59749eb712e0e4379..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/MutexGuard.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        MutexGuard.cpp
-
-  Description: Implementation of a mutex helper class for locking and unlocking.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Source/MutexGuard.h>
-
-#include <VimbaCPP/Include/VimbaSystem.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-MutexGuard::MutexGuard()
-    : m_pMutex( NULL )
-{
-}
-
-MutexGuard::MutexGuard( MutexPtr &pMutex )
-{
-    if ( SP_ISNULL( pMutex ))
-    {
-        LOG_FREE_TEXT( "No mutex passed." );
-    }
-    else
-    {
-        m_pMutex = SP_ACCESS(pMutex );
-        Protect( );
-    }
-}
-
-MutexGuard::MutexGuard( BasicLockablePtr pLockable )
-{
-    if ( SP_ISNULL( pLockable ))
-    {
-        LOG_FREE_TEXT( "No mutex passed." );
-    }
-    else
-    {
-        m_pMutex = SP_ACCESS(SP_ACCESS(pLockable)->GetMutex());
-        Protect( );
-    }
-}
-
-MutexGuard::MutexGuard( const BasicLockable &rLockable )
-{
-    m_pMutex = SP_ACCESS(rLockable.GetMutex() );
-    Protect( );
-}
-
-MutexGuard::~MutexGuard()
-{
-    Release();
-}
-
-void MutexGuard::Protect(  )
-{
-    if( m_pMutex == NULL )
-    {
-        LOG_FREE_TEXT( "No mutex passed." );
-        return;
-    }
-    m_pMutex->Lock();
-}
-
-
-bool MutexGuard::Release()
-{
-    if( m_pMutex == NULL)
-    {
-        return false;
-    }
-
-    m_pMutex ->Unlock();
-    m_pMutex = NULL;
-
-    return true;
-}
-
-}} //namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/MutexGuard.h b/VimbaCPP/Source/MutexGuard.h
deleted file mode 100644
index d5a4df11f0470781b3c2d840b15e3cbe7cfa5747..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/MutexGuard.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        MutexGuard.h
-
-  Description: Definition of a mutex helper class for locking and unlocking.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_MUTEXGUARD
-#define AVT_VMBAPI_MUTEXGUARD
-
-#include <VimbaCPP/Include/Mutex.h>
-#include <VimbaCPP/Include/BasicLockable.h>
-
-namespace AVT
-{
-namespace VmbAPI
-{
-
-class MutexGuard
-{
-  public:
-    MutexGuard();
-    MutexGuard( MutexPtr &pMutex );
-    MutexGuard( BasicLockablePtr pLockable );
-    MutexGuard( const BasicLockable &rLockable );
-    ~MutexGuard();
-
-    void Protect();
-    bool Release();
-
-  protected:
-    Mutex  *m_pMutex;
-};
-
-} //namespace VmbAPI
-} //namespace AVT
-
-#endif //AVT_VMBAPI_MUTEXGUARD
diff --git a/VimbaCPP/Source/RawFeature.cpp b/VimbaCPP/Source/RawFeature.cpp
deleted file mode 100644
index b1594d70e3b69a465c39786e97551ef92d081ddf..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/RawFeature.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        RawFeature.cpp
-
-  Description: Implementation of class AVT::VmbAPI::RawFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Source/RawFeature.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-RawFeature::RawFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer *pFeatureContainer )
-    :   BaseFeature( featureInfo, pFeatureContainer )
-{
-}
-
-VmbErrorType RawFeature::GetValue( VmbUchar_t *pValue, VmbUint32_t &rnSize, VmbUint32_t &rnSizeFilled ) const
-{
-    VmbError_t res;
-    VmbUint32_t nSize;
-
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-    
-    res = VmbFeatureRawLengthQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &nSize );
-
-    if ( NULL != pValue )
-    {
-        if ( rnSize < nSize )
-        {
-            return VmbErrorMoreData;
-        }
-
-        if ( VmbErrorSuccess == res )
-        {
-            res = VmbFeatureRawGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), (char*)pValue, rnSize, &rnSizeFilled );
-        }
-    }
-    else
-    {
-        rnSize = nSize;
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType RawFeature::SetValue( const VmbUchar_t *pValue, VmbUint32_t nSize )
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    if ( NULL == pValue )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    return (VmbErrorType)VmbFeatureRawSet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), (const char*)pValue, nSize );
-}
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/RawFeature.h b/VimbaCPP/Source/RawFeature.h
deleted file mode 100644
index d469e74a6255f1ce5e51dfde1ab2535d3dc285ce..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/RawFeature.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        RawFeature.h
-
-  Description: Definition of class AVT::VmbAPI::RawFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_RAWFEATURE_H
-#define AVT_VMBAPI_RAWFEATURE_H
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Source/BaseFeature.h>
-#include <VimbaCPP/Include/FeatureContainer.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class RawFeature : public BaseFeature 
-{
-  public:
-    RawFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer *pFeatureContainer );
-
-  private:
-    // Array functions to pass data across DLL boundaries
-    IMEXPORT virtual VmbErrorType GetValue( VmbUchar_t *pValue, VmbUint32_t &size, VmbUint32_t &sizeFilled ) const;
-    IMEXPORT virtual VmbErrorType SetValue( const VmbUchar_t *pValue, VmbUint32_t size );
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Source/Semaphore.cpp b/VimbaCPP/Source/Semaphore.cpp
deleted file mode 100644
index 50b1c406275dee42043cf11fe078dd454496bfce..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Semaphore.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Semaphore.cpp
-
-  Description: Implementation of an semaphore class.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <math.h>
-
-#include <VimbaCPP/Source/Semaphore.h>
-#include <VimbaCPP/Include/LoggerDefines.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-Semaphore::Semaphore( int nInit, int nMax )
-#ifdef WIN32
-    :   m_hSemaphore( NULL )
-#endif
-{
-#ifdef WIN32
-    m_hSemaphore = CreateSemaphore( NULL, nInit, nMax, NULL );
-    if( NULL == m_hSemaphore )
-    {
-        LOG_FREE_TEXT( "Could not create semaphore." );
-        throw std::bad_alloc();
-    }
-#else
-    sem_init( &m_Semaphore, false, (unsigned int)nInit );
-#endif
-}
-
-Semaphore::Semaphore( const Semaphore& )
-{
-    // No compiler generated copy ctor
-}
-
-Semaphore& Semaphore::operator=( const Semaphore& )
-{
-    // No assignment operator
-    return *this;
-}
-
-Semaphore::~Semaphore()
-{  
-#ifdef WIN32
-    CloseHandle( m_hSemaphore );
-#else
-    sem_destroy( &m_Semaphore );
-#endif
-}
-
-void Semaphore::Acquire()
-{
-#ifdef WIN32
-    WaitForSingleObject( m_hSemaphore, INFINITE );
-#else
-    sem_wait( &m_Semaphore );
-#endif
-}
-
-void Semaphore::Release()
-{
-#ifdef WIN32
-    ReleaseSemaphore( m_hSemaphore, 1, NULL );
-#else
-    sem_post( &m_Semaphore );
-#endif
-}
-
-} //namespace VmbAPI
-} //namespace AVT
\ No newline at end of file
diff --git a/VimbaCPP/Source/Semaphore.h b/VimbaCPP/Source/Semaphore.h
deleted file mode 100644
index a89245335c4ca5e96596dcba93db5a7188727df3..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Semaphore.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        Semaphore.h
-
-  Description: Definition of an semaphore class.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_SEMAPHORE
-#define AVT_VMBAPI_SEMAPHORE
-
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-
-#ifdef WIN32
-    #include <windows.h>
-#else
-    #include <semaphore.h>
-#endif
-
-namespace AVT {
-namespace VmbAPI {
-
-class Semaphore
-{
-  public:
-    Semaphore( int nInit = 0, int nMax = 1 );
-    ~Semaphore();
-
-    void Acquire();
-    void Release();
-
-  private:
-    // No copy ctor
-    Semaphore( const Semaphore &rSemaphore );
-    // No assignment
-    Semaphore& operator=( const Semaphore& );
-
-#ifdef WIN32
-    HANDLE          m_hSemaphore;
-#else
-    sem_t           m_Semaphore;
-#endif
-};
-
-}} //namespace AVT::VmbAPI
-
-#endif //AVT_VMBAPI_MUTEX
diff --git a/VimbaCPP/Source/StringFeature.cpp b/VimbaCPP/Source/StringFeature.cpp
deleted file mode 100644
index b93369ef748b5b286961644ab04be1945218fcba..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/StringFeature.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        StringFeature.cpp
-
-  Description: Implementation of class AVT::VmbAPI::StringFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <VimbaCPP/Source/StringFeature.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-StringFeature::StringFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer* const pFeatureContainer )
-    :   BaseFeature( featureInfo, pFeatureContainer )
-{
-}
-
-VmbErrorType StringFeature::GetValue( char * const pStrValue, VmbUint32_t &rnLength ) const
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    if ( NULL == pStrValue )
-    {
-        return (VmbErrorType)VmbFeatureStringMaxlengthQuery( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), &rnLength );
-    }
-    else
-    {
-        return (VmbErrorType)VmbFeatureStringGet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pStrValue, rnLength, &rnLength );
-    }
-}
-
-VmbErrorType StringFeature::SetValue( const char *pStrValue ) 
-{
-    if ( NULL == m_pFeatureContainer )
-    {
-        return VmbErrorDeviceNotOpen;
-    }
-
-    return (VmbErrorType)VmbFeatureStringSet( m_pFeatureContainer->GetHandle(), m_featureInfo.name.c_str(), pStrValue );
-}
-
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/Source/StringFeature.h b/VimbaCPP/Source/StringFeature.h
deleted file mode 100644
index c96026eae55034d19a825ddf548832cfbb4a97db..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/StringFeature.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
-
-  File:        StringFeature.h
-
-  Description: Definition of class AVT::VmbAPI::StringFeature.
-               Intended for use in the implementation of Vimba CPP API.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef AVT_VMBAPI_STRINGFEATURE_H
-#define AVT_VMBAPI_STRINGFEATURE_H
-
-#include <VimbaC/Include/VimbaC.h>
-#include <VimbaCPP/Include/VimbaCPPCommon.h>
-#include <VimbaCPP/Source/BaseFeature.h>
-#include <VimbaCPP/Include/FeatureContainer.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-class StringFeature : public BaseFeature 
-{
-  public:
-    StringFeature( const VmbFeatureInfo_t *featureInfo, FeatureContainer* const pFeatureContainer );
-
-    IMEXPORT virtual VmbErrorType SetValue( const char *pValue );
-
-  private:
-    // Array functions to pass data across DLL boundaries
-    IMEXPORT virtual VmbErrorType GetValue( char * const pValue, VmbUint32_t &length ) const;
-};
-
-}} // namespace AVT::VmbAPI
-
-#endif
diff --git a/VimbaCPP/Source/Version.h b/VimbaCPP/Source/Version.h
deleted file mode 100644
index 922b5c31fb9270038925717d34a9856918a21536..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/Version.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef AVT_VMBAPI_VERSION_H
-#define AVT_VMBAPI_VERSION_H
-
-#define VIMBACPP_VERSION_MAJOR  1
-#define VIMBACPP_VERSION_MINOR  9
-#define VIMBACPP_VERSION_PATCH  0
-
-#endif //AVT_VMBAPI_VERSION_H
diff --git a/VimbaCPP/Source/VimbaSystem.cpp b/VimbaCPP/Source/VimbaSystem.cpp
deleted file mode 100644
index 0fdb9d2fbc13472f8483ce133c1a1a2121fc0ff0..0000000000000000000000000000000000000000
--- a/VimbaCPP/Source/VimbaSystem.cpp
+++ /dev/null
@@ -1,1293 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        VimbaSystem.cpp
-
-  Description: Implementation of class AVT::VmbAPI::VimbaSystem.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#include <cstring>
-#include <algorithm>
-
-#include <VimbaCPP/Include/VimbaSystem.h>
-
-#include <VimbaCPP/Include/SharedPointerDefines.h>
-#include <VimbaCPP/Source/ConditionHelper.h>
-#include <VimbaCPP/Source/Clock.h>
-#include <VimbaCPP/Source/DefaultCameraFactory.h>
-#include <VimbaCPP/Source/Helper.h>
-#include <VimbaCPP/Source/Version.h>
-
-namespace AVT {
-namespace VmbAPI {
-
-typedef std::map<std::string, CameraPtr> CameraPtrMap;
-typedef std::map<std::string, InterfacePtr> InterfacePtrMap;
-
-struct VimbaSystem::Impl
-{
-    // Found cameras and interfaces
-    LockableMap<std::string, CameraPtr>             m_cameras;
-    ConditionHelper                                 m_camerasConditionHelper;
-    LockableMap<std::string, InterfacePtr>          m_interfaces;
-    ConditionHelper                                 m_interfacesConditionHelper;
-    // Registered observers
-    LockableVector<ICameraListObserverPtr>          m_cameraObservers;
-    ConditionHelper                                 m_cameraObserversConditionHelper;
-    LockableVector<IInterfaceListObserverPtr>       m_interfaceObservers;
-    ConditionHelper                                 m_interfaceObserversConditionHelper;
-    
-    // GigE specifics
-    bool                                            m_bGeVDiscoveryAutoOn;
-    bool                                            m_bGeVTLPresent;
-    // CameraFactory
-    ICameraFactoryPtr                               m_pCameraFactory;
-
-    // Logger
-    Logger                                          m_pLogger;
-
-    VmbErrorType UpdateCameraList();
-    VmbErrorType UpdateInterfaceList();
-    void AppendCamToMap( VmbCameraInfo_t camInfo );
-    bool IsIPAddress( const char *pStrID );
-
-    VmbErrorType GetInterfaceList( std::vector<VmbInterfaceInfo_t> &interfaceInfos );
-
-    static void VMB_CALL CameraDiscoveryCallback( const VmbHandle_t handle, const char *name, void *context );
-    static void VMB_CALL InterfaceDiscoveryCallback( const VmbHandle_t handle, const char *name, void *context );
-};
-
-VimbaSystem &VimbaSystem::GetInstance()
-{
-    return _instance;
-}
-
-VmbErrorType VimbaSystem::QueryVersion( VmbVersionInfo_t &rVersion )
-{
-    rVersion.major = VIMBACPP_VERSION_MAJOR;
-    rVersion.minor = VIMBACPP_VERSION_MINOR;
-    rVersion.patch = VIMBACPP_VERSION_PATCH;
-
-    return VmbErrorSuccess;
-}
-
-VmbErrorType VimbaSystem::Startup()
-{
-    VmbError_t res = VmbErrorSuccess;
-    VmbBool_t gevTL = false;
-
-    res = VmbStartup();
-    if ( VmbErrorSuccess == res )
-    {
-        res = VmbFeatureBoolGet( gVimbaHandle, "GeVTLIsPresent", &gevTL );
-        if ( VmbErrorSuccess == res )
-        {
-            m_pImpl->m_bGeVTLPresent = gevTL;
-        }
-
-        SetHandle( gVimbaHandle );
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType VimbaSystem::Shutdown()
-{
-    m_pImpl->m_bGeVDiscoveryAutoOn = m_pImpl->m_bGeVTLPresent = false;
-    
-    // Begin exclusive write lock camera observer list
-    if ( true == m_pImpl->m_cameraObserversConditionHelper.EnterWriteLock( m_pImpl->m_cameraObservers, true ))
-    {
-        m_pImpl->m_cameraObservers.Vector.clear();
-
-        // End write lock camera observer list
-        m_pImpl->m_cameraObserversConditionHelper.ExitWriteLock( m_pImpl->m_cameraObservers );
-    }
-        
-    // Begin exclusive write lock interface observer list
-    if ( true == m_pImpl->m_interfaceObserversConditionHelper.EnterWriteLock( m_pImpl->m_interfaceObservers, true ))
-    {
-        m_pImpl->m_interfaceObservers.Vector.clear();
-
-        // End write lock interface observer list
-        m_pImpl->m_interfaceObserversConditionHelper.ExitWriteLock( m_pImpl->m_interfaceObservers );
-    }    
-
-    // Begin exclusive write lock camera list
-    if ( true == m_pImpl->m_camerasConditionHelper.EnterWriteLock( m_pImpl->m_cameras, true ))
-    {
-        for (   CameraPtrMap::iterator iter = m_pImpl->m_cameras.Map.begin();
-                m_pImpl->m_cameras.Map.end() != iter;
-                ++iter)
-        {
-            SP_ACCESS( iter->second )->Close();
-        }
-        m_pImpl->m_cameras.Map.clear();
-
-        // End write lock camera list
-        m_pImpl->m_camerasConditionHelper.ExitWriteLock( m_pImpl->m_cameras );
-    }    
-
-    // Begin exclusive write lock interface list
-    if ( true == m_pImpl->m_interfacesConditionHelper.EnterWriteLock( m_pImpl->m_interfaces, true ))
-    {
-        for (   InterfacePtrMap::iterator iter = m_pImpl->m_interfaces.Map.begin();
-                m_pImpl->m_interfaces.Map.end() != iter;
-                ++iter)
-        {
-            SP_ACCESS( iter->second )->Close();
-        }
-        m_pImpl->m_interfaces.Map.clear();
-
-        // End write lock interface list
-        m_pImpl->m_interfacesConditionHelper.ExitWriteLock( m_pImpl->m_interfaces );
-    }    
-
-    VmbShutdown();
-    
-    return VmbErrorSuccess;
-}
-
-VmbErrorType VimbaSystem::GetInterfaces( InterfacePtr *pInterfaces, VmbUint32_t &rnSize )
-{
-    VmbErrorType res = VmbErrorInternalFault;
-
-    // Begin write lock interface list
-    if ( true == m_pImpl->m_interfacesConditionHelper.EnterWriteLock( m_pImpl->m_interfaces ))
-    {
-        res = m_pImpl->UpdateInterfaceList();
-
-        if ( VmbErrorSuccess == res)
-        {
-            if ( NULL == pInterfaces )
-            {
-                rnSize = (VmbUint32_t)m_pImpl->m_interfaces.Map.size();
-                res = VmbErrorSuccess;
-            }
-            else if ( m_pImpl->m_interfaces.Map.size() <= rnSize )
-            {
-                VmbUint32_t i = 0;
-                for (   InterfacePtrMap::iterator iter = m_pImpl->m_interfaces.Map.begin();
-                        m_pImpl->m_interfaces.Map.end() != iter;
-                        ++iter, ++i )
-                {
-                    pInterfaces[i] = iter->second;
-                }
-                rnSize = (VmbUint32_t)m_pImpl->m_interfaces.Map.size();
-                res = VmbErrorSuccess;
-            }
-            else
-            {
-                res = VmbErrorMoreData;
-            }
-        }
-
-        // End write lock interface list
-        m_pImpl->m_interfacesConditionHelper.ExitWriteLock( m_pImpl->m_interfaces );
-    }
-    
-    return res;
-}
-
-VmbErrorType VimbaSystem::GetInterfaceByID( const char *pStrID, InterfacePtr &rInterface )
-{
-    if ( NULL == pStrID )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    VmbErrorType res = VmbErrorNotFound;
-    
-    // Begin write lock interface list
-    if ( true == m_pImpl->m_interfacesConditionHelper.EnterWriteLock( m_pImpl->m_interfaces ))
-    {
-        InterfacePtrMap::iterator iter = m_pImpl->m_interfaces.Map.find( pStrID );
-        if ( m_pImpl->m_interfaces.Map.end() != iter )
-        {
-            rInterface = iter->second;
-            res = VmbErrorSuccess;
-        }
-        else
-        {
-            std::vector<VmbInterfaceInfo_t> interfaceInfos;
-            res = m_pImpl->GetInterfaceList( interfaceInfos );
-
-            if ( VmbErrorSuccess == res )
-            {
-                for (   std::vector<VmbInterfaceInfo_t>::iterator iterInfo = interfaceInfos.begin();
-                        interfaceInfos.end() != iterInfo;
-                        ++iterInfo )
-                {
-                    if ( 0 ==  strcmp( iterInfo->interfaceIdString, pStrID ))
-                    {
-                        SP_SET( m_pImpl->m_interfaces.Map[pStrID], new Interface( &(*iterInfo) ));
-                        break;
-                    }
-                }
-
-                iter = m_pImpl->m_interfaces.Map.find( pStrID );
-                if ( m_pImpl->m_interfaces.Map.end() != iter )
-                {
-                    rInterface = iter->second;
-                }
-                else
-                {
-                    res = VmbErrorNotFound;
-                }
-            }
-        }
-
-        // End write lock interface list
-        m_pImpl->m_interfacesConditionHelper.ExitWriteLock( m_pImpl->m_interfaces );
-    }
-
-    return res;
-}
-
-VmbErrorType VimbaSystem::OpenInterfaceByID( const char *pStrID, InterfacePtr &rInterface )
-{
-    if ( NULL == pStrID )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    VmbErrorType res = GetInterfaceByID( pStrID, rInterface );
-    if ( VmbErrorSuccess == res )
-    {
-        return SP_ACCESS( rInterface )->Open();
-    }
-
-    return res;
-}
-
-VmbErrorType VimbaSystem::GetCameras( CameraPtr *pCameras, VmbUint32_t &rnSize )
-{
-    VmbErrorType res = VmbErrorInternalFault;
-
-    // Begin write lock camera list
-    if ( true == m_pImpl->m_camerasConditionHelper.EnterWriteLock( m_pImpl->m_cameras ))
-    {
-        res = m_pImpl->UpdateCameraList();
-
-        if ( VmbErrorSuccess == res )
-        {
-            if ( NULL == pCameras )
-            {
-                rnSize = (VmbUint32_t)m_pImpl->m_cameras.Map.size();
-                res = VmbErrorSuccess;
-            }
-            else if ( m_pImpl->m_cameras.Map.size() <= rnSize )
-            {
-                VmbUint32_t i = 0;
-                for (   CameraPtrMap::iterator iter = m_pImpl->m_cameras.Map.begin();
-                        m_pImpl->m_cameras.Map.end() != iter;
-                        ++iter, ++i )
-                {
-                    pCameras[i] = iter->second;
-                }
-                rnSize = (VmbUint32_t)m_pImpl->m_cameras.Map.size();
-                res = VmbErrorSuccess;
-            }
-            else
-            {
-                res = VmbErrorMoreData;
-            }
-        }
-
-        // End write lock camera list
-        m_pImpl->m_camerasConditionHelper.ExitWriteLock( m_pImpl->m_cameras );
-    }    
-
-    return res;
-}
-
-VmbErrorType VimbaSystem::GetCameraByID( const char *pStrID, CameraPtr &rCamera )
-{
-    if ( NULL == pStrID )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    VmbError_t res = VmbErrorNotFound;
-
-    // Begin write lock camera list
-    if ( true == m_pImpl->m_camerasConditionHelper.EnterWriteLock( m_pImpl->m_cameras ))
-    {
-        // Try to identify the desired camera by its ID (in the list of known cameras)
-        CameraPtrMap::iterator iter = m_pImpl->m_cameras.Map.find( pStrID );
-        if ( m_pImpl->m_cameras.Map.end() != iter )
-        {
-            rCamera = iter->second;
-            res = VmbErrorSuccess;
-        }
-        else
-        {
-            // Try to identify the desired camera by IP or MAC address (in the list of known cameras)
-            if (    true == m_pImpl->m_bGeVTLPresent
-                 && false == m_pImpl->IsIPAddress(pStrID) )
-            {
-                // check if GeV discovery is enabled
-                const char *pDiscoveryStatus = NULL;
-                res = VmbFeatureEnumGet( gVimbaHandle, "GeVDiscoveryStatus", &pDiscoveryStatus );
-                if ( VmbErrorSuccess == res )
-                {
-                    VmbInt64_t discoveryValue = 0;
-                    res = VmbFeatureEnumAsInt( gVimbaHandle, "GeVDiscoveryStatus", pDiscoveryStatus, &discoveryValue );
-                    if ( 1 != discoveryValue )
-                    {
-                        // HINT: We have to send one discovery packet in case we want to open a GigE cam (unless we open it by IP address)
-                        res = VmbFeatureCommandRun( gVimbaHandle, "GeVDiscoveryAllOnce" );
-                        if ( VmbErrorSuccess != res )
-                        {
-                            LOG_FREE_TEXT( "Could not ping camera over ethernet" )
-                        }
-                    }
-                }
-            }
-
-            VmbCameraInfo_t camInfo;
-            res = VmbCameraInfoQuery( pStrID, &camInfo, sizeof camInfo );
-            if ( VmbErrorSuccess == res )
-            {
-                iter = m_pImpl->m_cameras.Map.find( camInfo.cameraIdString );
-                if ( m_pImpl->m_cameras.Map.end() != iter )
-                {
-                    rCamera = iter->second;
-                }
-                else
-                {
-                    // We don't know the camera because it is new or we have to
-                    // try to identify it by IP or MAC address directly
-                    std::string cameraIdString;
-                    if ( std::strcmp( camInfo.cameraIdString, pStrID ))
-                    {
-                        // TODO: Remove this with interface change                        
-                        cameraIdString.assign( camInfo.cameraIdString ).append( AVT_IP_OR_MAC_ADDRESS ).append( pStrID );
-                        camInfo.cameraIdString = cameraIdString.c_str();
-                    }
-                    m_pImpl->AppendCamToMap( camInfo );
-
-                    iter = m_pImpl->m_cameras.Map.find( camInfo.cameraIdString );
-                    if ( m_pImpl->m_cameras.Map.end() != iter )
-                    {
-                        rCamera = iter->second;
-                    }
-                    else
-                    {
-                        res = VmbErrorNotFound;
-                    }
-                }
-            }
-        }
-
-        // End write lock camera list
-        m_pImpl->m_camerasConditionHelper.ExitWriteLock( m_pImpl->m_cameras );
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType VimbaSystem::OpenCameraByID( const char *pStrID, VmbAccessModeType eAccessMode, CameraPtr &rCamera )
-{
-    if ( NULL == pStrID )
-    {
-        return VmbErrorBadParameter;
-    }
-
-    VmbErrorType res = GetCameraByID( pStrID, rCamera );
-    if ( VmbErrorSuccess == res )
-    {
-        return SP_ACCESS( rCamera )->Open( eAccessMode );
-    }
-
-    return res;
-}
-
-CameraPtr VimbaSystem::GetCameraPtrByHandle( const VmbHandle_t handle ) const
-{
-    CameraPtr res;
-
-    // Begin read lock camera list
-    if ( true == m_pImpl->m_camerasConditionHelper.EnterReadLock( m_pImpl->m_cameras ) )
-    {
-        for (   CameraPtrMap::const_iterator iter = m_pImpl->m_cameras.Map.begin();
-                m_pImpl->m_cameras.Map.end() != iter;
-                ++iter)
-        {
-            if ( SP_ACCESS( iter->second )->GetHandle() == handle )
-            {
-                res = iter->second;
-                break;
-            }
-        }
-
-        // End read lock camera list
-        m_pImpl->m_camerasConditionHelper.ExitReadLock( m_pImpl->m_cameras );
-    }
-    else
-    {
-        LOG_FREE_TEXT( "Could not lock camera list")
-    }
-
-    return res;
-}
-
-void VMB_CALL VimbaSystem::Impl::CameraDiscoveryCallback( const VmbHandle_t /*handle*/, const char* /*name*/, void* /*context*/ )
-{
-    VmbError_t err;
-    std::vector<char> strID;
-    VmbUint32_t nCount = 0;
-
-    // Get the ID of the camera that has triggered the callback
-    err = VmbFeatureStringMaxlengthQuery( gVimbaHandle, "DiscoveryCameraIdent", &nCount );
-    if (    0 < nCount
-        &&  VmbErrorSuccess == err )
-    {                    
-        strID.resize( nCount );
-        err = VmbFeatureStringGet( gVimbaHandle, "DiscoveryCameraIdent", &strID[0], nCount, &nCount );
-        if ( VmbErrorSuccess == err )
-        {
-            UpdateTriggerType reason = (UpdateTriggerType)0;
-            const char* pReason = NULL;
-            VmbInt64_t nReason = 0;
-
-            // Get the reason that has triggered the callback
-            err = VmbFeatureEnumGet( gVimbaHandle, "DiscoveryCameraEvent", &pReason );
-            if ( VmbErrorSuccess == err )
-            {
-                err = VmbFeatureEnumAsInt( gVimbaHandle, "DiscoveryCameraEvent", pReason, &nReason );
-                if ( VmbErrorSuccess == err )
-                {
-                    switch ( nReason )
-                    {
-                    case 0: reason = UpdateTriggerPluggedOut;
-                        break;
-                    case 1: reason = UpdateTriggerPluggedIn;
-                        break;
-                    default: reason = UpdateTriggerOpenStateChanged;
-                    }
-                    
-                    // Begin read lock camera list
-                    if ( true == _instance.m_pImpl->m_camerasConditionHelper.EnterReadLock( _instance.m_pImpl->m_cameras ))
-                    {
-                        CameraPtrMap::iterator iter = _instance.m_pImpl->m_cameras.Map.find( &strID[0] );
-                        CameraPtr pCam;
-
-                        bool bFound;
-
-                        // Was the camera known before?
-                        if ( _instance.m_pImpl->m_cameras.Map.end() != iter )
-                        {
-                            bFound = true;
-                            pCam = iter->second;
-                        }
-                        else
-                        {
-                            bFound = false;
-                        }
-
-                        // End read lock camera list
-                        _instance.m_pImpl->m_camerasConditionHelper.ExitReadLock( _instance.m_pImpl->m_cameras );
-
-                        // If the camera was not known before we query for it
-                        if ( false == bFound )
-                        {
-                            err = _instance.GetCameraByID( &strID[0], pCam );
-                            if ( VmbErrorSuccess != err )
-                            {
-                                err = VmbErrorInternalFault;
-                                LOG_FREE_TEXT( "Could not find a known camera in camera list")
-                            }
-                        }
-
-                        // Now that we know about the reason for the callback and the camera we can call all registered observers
-                        if ( VmbErrorSuccess == err )
-                        {
-                            // Begin read lock camera observer list
-                            if ( true == _instance.m_pImpl->m_cameraObserversConditionHelper.EnterReadLock( _instance.m_pImpl->m_cameraObservers ))
-                            {
-                                for (   ICameraListObserverPtrVector::iterator iter = _instance.m_pImpl->m_cameraObservers.Vector.begin();
-                                        _instance.m_pImpl->m_cameraObservers.Vector.end() != iter;
-                                        ++iter )
-                                {
-                                    SP_ACCESS(( *iter ))->CameraListChanged( pCam, reason );
-                                }
-
-                                // End read lock camera observer list
-                                _instance.m_pImpl->m_cameraObserversConditionHelper.ExitReadLock( _instance.m_pImpl->m_cameraObservers );
-                            }
-                            else
-                            {
-                                LOG_FREE_TEXT( "Could not lock camera observer list")
-                            }
-                        }
-                    }
-                    else
-                    {
-                        LOG_FREE_TEXT( "Could not lock camera list")
-                    }
-                }
-                else
-                {
-                    LOG_FREE_TEXT( "Could not get integer representation of enum string" )
-                }
-            }
-            else
-            {
-                LOG_FREE_TEXT( "Could not get callback trigger" )
-            }
-        }
-        else
-        {
-            LOG_FREE_TEXT( "Could not get camera ID" )
-        }
-    }
-    else
-    {
-        LOG_FREE_TEXT( "Could not get length of camera ID or length is 0" )
-    }
-}
-
-void VMB_CALL VimbaSystem::Impl::InterfaceDiscoveryCallback( const VmbHandle_t /*handle*/, const char * /*name*/, void * /*context*/ )
-{
-    VmbError_t err;
-    std::vector<char> strID;
-    VmbUint32_t nCount = 0;
-
-    // Get the ID of the interface that has triggered the callback
-    err = VmbFeatureStringMaxlengthQuery( gVimbaHandle, "DiscoveryInterfaceIdent", &nCount );
-    if (    0 < nCount
-        &&  VmbErrorSuccess == err )
-    {                    
-        strID.resize( nCount );
-        err = VmbFeatureStringGet( gVimbaHandle, "DiscoveryInterfaceIdent", &strID[0], nCount, &nCount );
-    }
-
-    if ( VmbErrorSuccess == err )
-    {
-        // Begin read lock interface list
-        if ( true == _instance.m_pImpl->m_interfacesConditionHelper.EnterReadLock( _instance.m_pImpl->m_interfaces ))
-        {
-            InterfacePtrMap::iterator iter = _instance.m_pImpl->m_interfaces.Map.find( &strID[0] );
-            InterfacePtr pInterface;
-            UpdateTriggerType reason = (UpdateTriggerType)0;
-            bool bFound;
-
-            if ( _instance.m_pImpl->m_interfaces.Map.end() != iter )
-            {
-                bFound = true;
-                pInterface = iter->second;
-            }
-            else
-            {
-                bFound = false;
-            }
-
-            // End read lock interface list
-            _instance.m_pImpl->m_interfacesConditionHelper.ExitReadLock( _instance.m_pImpl->m_interfaces );
-
-            // Begin write lock interface list
-            if ( true == _instance.m_pImpl->m_interfacesConditionHelper.EnterWriteLock( _instance.m_pImpl->m_interfaces ))
-            {
-                err = _instance.m_pImpl->UpdateInterfaceList();
-
-                // End write lock interface list
-                _instance.m_pImpl->m_interfacesConditionHelper.ExitWriteLock( _instance.m_pImpl->m_interfaces );
-                
-                if ( VmbErrorSuccess == err )
-                {
-                    // Begin read lock interface list
-                    if ( true == _instance.m_pImpl->m_interfacesConditionHelper.EnterReadLock( _instance.m_pImpl->m_interfaces ))
-                    {
-                        iter = _instance.m_pImpl->m_interfaces.Map.find( &strID[0] );
-
-                        // The interface was known before
-                        if ( true == bFound )
-                        {
-                            // The interface now has been removed
-                            if ( _instance.m_pImpl->m_interfaces.Map.end() == iter )
-                            {
-                                reason = UpdateTriggerPluggedOut;
-                            }
-                            else
-                            {
-                                reason = UpdateTriggerOpenStateChanged;
-                            }
-                        }
-                        // The interface is new
-                        else
-                        {
-                            if ( _instance.m_pImpl->m_interfaces.Map.end() != iter )
-                            {
-                                pInterface = iter->second;
-                                reason = UpdateTriggerPluggedIn;
-                            }
-                            else
-                            {
-                                err = VmbErrorInternalFault;
-                                // Do some logging
-                                LOG_FREE_TEXT( "Could not find interface in interface list." )
-                            }
-                        }
-
-                        // End read lock interface list
-                        _instance.m_pImpl->m_interfacesConditionHelper.ExitReadLock( _instance.m_pImpl->m_interfaces );
-
-                        if ( VmbErrorSuccess == err )
-                        {
-                            // Begin read lock interface observer list
-                            if ( true == _instance.m_pImpl->m_interfaceObserversConditionHelper.EnterReadLock( _instance.m_pImpl->m_interfaceObservers ))
-                            {
-                                for (   IInterfaceListObserverPtrVector::iterator iter = _instance.m_pImpl->m_interfaceObservers.Vector.begin();
-                                    _instance.m_pImpl->m_interfaceObservers.Vector.end() != iter;
-                                    ++iter)
-                                {
-                                    SP_ACCESS(( *iter ))->InterfaceListChanged( pInterface, reason );
-                                }
-
-                                // End read lock interface observer list
-                                _instance.m_pImpl->m_interfaceObserversConditionHelper.ExitReadLock( _instance.m_pImpl->m_interfaceObservers );
-                            }
-                            else
-                            {
-                                LOG_FREE_TEXT( "Could not lock interface observer list")
-                            }
-                        }                        
-                    }
-                    else
-                    {
-                        LOG_FREE_TEXT( "Could not lock interface list")
-                    }
-                }                
-            }            
-        }
-        else
-        {
-            LOG_FREE_TEXT( "Could not lock interface list")
-        }
-    }
-}
-
-VmbErrorType VimbaSystem::RegisterCameraListObserver( const ICameraListObserverPtr &rObserver )
-{
-    if ( SP_ISNULL( rObserver ))
-    {
-        return VmbErrorBadParameter;
-    }
-
-    VmbError_t res = VmbErrorSuccess;
-
-    // Begin write lock camera observer list
-    if ( true == _instance.m_pImpl->m_cameraObserversConditionHelper.EnterWriteLock( m_pImpl->m_cameraObservers ))
-    {
-        // The very same observer cannot be registered twice
-        for ( size_t i=0; i<m_pImpl->m_cameraObservers.Vector.size(); ++i )
-        {
-            if ( SP_ISEQUAL( rObserver, m_pImpl->m_cameraObservers.Vector[i] ))
-            {
-                res = VmbErrorInvalidCall;
-                break;
-            }
-        }
-
-        if ( VmbErrorSuccess == res )
-        {
-            m_pImpl->m_cameraObservers.Vector.push_back( rObserver );
-
-            if ( 1 == m_pImpl->m_cameraObservers.Vector.size() )
-            {
-                res = VmbFeatureInvalidationRegister( gVimbaHandle, "DiscoveryCameraEvent", m_pImpl->CameraDiscoveryCallback, this );
-                if (    VmbErrorSuccess == res
-                     && true == m_pImpl->m_bGeVTLPresent )
-                {
-                    // check if GeV discovery was already enabled
-                    const char *pDiscoveryStatus = NULL;
-                    res = VmbFeatureEnumGet( gVimbaHandle, "GeVDiscoveryStatus", &pDiscoveryStatus );
-                    if ( VmbErrorSuccess == res )
-                    {
-                        VmbInt64_t discoveryValue = 0;
-                        res = VmbFeatureEnumAsInt( gVimbaHandle, "GeVDiscoveryStatus", pDiscoveryStatus, &discoveryValue );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            if ( 1 != discoveryValue )
-                            {
-                                // HINT: Without enabling GEVDiscovery registering a device observer is pointless
-                                res = VmbFeatureCommandRun( gVimbaHandle, "GeVDiscoveryAllAuto" );
-                                if ( VmbErrorSuccess == res )
-                                {
-                                    m_pImpl->m_bGeVDiscoveryAutoOn = true;
-                                }
-                            }
-                        }
-                    }
-                }
-
-                if ( VmbErrorSuccess != res )
-                {
-                    // Rollback
-                    m_pImpl->m_cameraObservers.Vector.pop_back();
-                    // Do some logging
-                    LOG_FREE_TEXT( "Could not register camera list observer" )
-                }
-            }
-        }
-
-        // End write lock camera observer list
-        _instance.m_pImpl->m_cameraObserversConditionHelper.ExitWriteLock( m_pImpl->m_cameraObservers );
-    }    
-    
-    return (VmbErrorType)res;
-}
-
-VmbErrorType VimbaSystem::UnregisterCameraListObserver( const ICameraListObserverPtr &rObserver )
-{
-    if ( SP_ISNULL( rObserver ))
-    {
-        return VmbErrorBadParameter;
-    }
-
-    VmbError_t res = VmbErrorNotFound;
-
-    // Begin exclusive write lock camera observer list
-    if ( true == m_pImpl->m_cameraObserversConditionHelper.EnterWriteLock( m_pImpl->m_cameraObservers, true ))
-    {
-        for (   ICameraListObserverPtrVector::iterator iter = m_pImpl->m_cameraObservers.Vector.begin();
-                m_pImpl->m_cameraObservers.Vector.end() != iter;)    
-        {
-            if ( SP_ISEQUAL( rObserver, *iter ))
-            {
-                // If we are about to unregister the last observer we cancel all camera discovery notifications
-                if ( 1 == m_pImpl->m_cameraObservers.Vector.size() )
-                {
-                    res = VmbFeatureInvalidationUnregister( gVimbaHandle, "DiscoveryCameraEvent", m_pImpl->CameraDiscoveryCallback );
-                    if (    VmbErrorSuccess == res
-                         && true == m_pImpl->m_bGeVTLPresent )
-                    {
-                        // check if GeV discovery was already enabled
-                        const char *pDiscoveryStatus = NULL;
-                        res = VmbFeatureEnumGet( gVimbaHandle, "GeVDiscoveryStatus", &pDiscoveryStatus );
-                        if ( VmbErrorSuccess == res )
-                        {
-                            VmbInt64_t discoveryValue = 0;
-                            res = VmbFeatureEnumAsInt( gVimbaHandle, "GeVDiscoveryStatus", pDiscoveryStatus, &discoveryValue );
-                            if ( VmbErrorSuccess == res )
-                            {
-                                if ( 0 != discoveryValue )
-                                {
-                                    // HINT: After unregistering the last device observer we do not need to send discovery pings anymore
-                                    res = VmbFeatureCommandRun( gVimbaHandle, "GeVDiscoveryAllOff" );
-                                    if ( VmbErrorSuccess == res )
-                                    {
-                                        m_pImpl->m_bGeVDiscoveryAutoOn = false;
-                                    }
-                                    else
-                                    {
-                                        // Rollback
-                                        VmbFeatureInvalidationRegister( gVimbaHandle, "DiscoveryCameraEvent", m_pImpl->CameraDiscoveryCallback, this );
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                
-                if (    VmbErrorSuccess == res
-                     || 1 < m_pImpl->m_cameraObservers.Vector.size() )
-                {
-                    iter = m_pImpl->m_cameraObservers.Vector.erase( iter );
-                    res = VmbErrorSuccess;
-                }
-                break;
-            }
-            else
-            {
-                ++iter;
-            }
-        }
-
-        // End write lock camera observer list
-        m_pImpl->m_cameraObserversConditionHelper.ExitWriteLock( m_pImpl->m_cameraObservers );
-    }
-    else
-    {
-        LOG_FREE_TEXT( "Could not lock camera observer list.")
-        res = VmbErrorInternalFault;
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType VimbaSystem::RegisterInterfaceListObserver( const IInterfaceListObserverPtr &rObserver )
-{
-    if ( SP_ISNULL( rObserver ))
-    {
-        return VmbErrorBadParameter;
-    }
-
-    VmbError_t res = VmbErrorSuccess;
-
-    // Begin write lock interface observer list
-    if ( true == _instance.m_pImpl->m_interfaceObserversConditionHelper.EnterWriteLock( m_pImpl->m_interfaceObservers ))
-    {
-        // The very same observer cannot be registered twice
-        for ( size_t i=0; i<m_pImpl->m_interfaceObservers.Vector.size(); ++i )
-        {
-            if ( SP_ISEQUAL( rObserver, m_pImpl->m_interfaceObservers.Vector[i] ))
-            {
-                res = VmbErrorInvalidCall;
-                break;
-            }
-        }
-
-        if ( VmbErrorSuccess == res )
-        {
-            m_pImpl->m_interfaceObservers.Vector.push_back( rObserver );
-
-            if ( 1 == m_pImpl->m_interfaceObservers.Vector.size() )
-            {
-                res = VmbFeatureInvalidationRegister( gVimbaHandle, "DiscoveryInterfaceEvent", m_pImpl->InterfaceDiscoveryCallback, this );
-
-                if ( VmbErrorSuccess != res )
-                {
-                    // Rollback
-                    m_pImpl->m_interfaceObservers.Vector.pop_back();
-
-                    // Do some logging
-                    LOG_FREE_TEXT( "Could not register interface list observer" )
-                }
-            }
-        }
-
-        // End write lock interface observer list
-        _instance.m_pImpl->m_interfaceObserversConditionHelper.ExitWriteLock( m_pImpl->m_interfaceObservers );
-    }    
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType VimbaSystem::UnregisterInterfaceListObserver( const IInterfaceListObserverPtr &rObserver )
-{
-    if ( SP_ISNULL( rObserver ))
-    {
-        return VmbErrorBadParameter;
-    }
-
-    VmbError_t res = VmbErrorNotFound;
-
-    // Begin exclusive write lock interface observer list
-    if ( true == _instance.m_pImpl->m_interfaceObserversConditionHelper.EnterWriteLock( m_pImpl->m_interfaceObservers, true ))
-    {
-        for (   IInterfaceListObserverPtrVector::iterator iter = m_pImpl->m_interfaceObservers.Vector.begin();
-                m_pImpl->m_interfaceObservers.Vector.end() != iter;)
-        {
-            if ( SP_ISEQUAL( rObserver, *iter ))
-            {
-                // If we are about to unregister the last observer we cancel all interface discovery notifications
-                if ( 1 == m_pImpl->m_interfaceObservers.Vector.size() )
-                {
-                    res = VmbFeatureInvalidationUnregister( gVimbaHandle, "DiscoveryInterfaceEvent", m_pImpl->InterfaceDiscoveryCallback );
-                }
-                if (    VmbErrorSuccess == res
-                     || 1 < m_pImpl->m_interfaceObservers.Vector.size() )
-                {
-                    iter = m_pImpl->m_interfaceObservers.Vector.erase( iter );
-                    res = VmbErrorSuccess;
-                }
-                break;
-            }
-            else
-            {
-                ++iter;
-            }
-        }
-
-        // End write lock interface observer list
-        _instance.m_pImpl->m_interfaceObserversConditionHelper.ExitWriteLock( m_pImpl->m_interfaceObservers );
-    }
-    else
-    {
-        LOG_FREE_TEXT( "Could not lock interface observer list.")
-        res = VmbErrorInternalFault;
-    }
-
-    return (VmbErrorType)res;
-}
-
-VmbErrorType VimbaSystem::RegisterCameraFactory( const ICameraFactoryPtr &cameraFactory )
-{
-    if ( SP_ISNULL( cameraFactory ))
-    {
-        return VmbErrorBadParameter;
-    }
-
-    m_pImpl->m_pCameraFactory = cameraFactory;
-    
-    return VmbErrorSuccess;
-}
-
-VmbErrorType VimbaSystem::UnregisterCameraFactory()
-{
-    m_pImpl->m_pCameraFactory = ICameraFactoryPtr( new DefaultCameraFactory() );
-
-    if ( SP_ISNULL( m_pImpl->m_pCameraFactory ))
-    {
-        return VmbErrorInternalFault;
-    }
-
-    return VmbErrorSuccess;
-}
-
-// Singleton
-VimbaSystem::VimbaSystem()
-    :   m_pImpl( new Impl() )
-{
-    m_pImpl->m_bGeVDiscoveryAutoOn = false;
-    m_pImpl->m_bGeVTLPresent = false;
-    m_pImpl->m_pLogger = new LOGGER_DEF;
-    m_pImpl->m_pCameraFactory = ICameraFactoryPtr( new DefaultCameraFactory() );
-}
-
-// Singleton
-VimbaSystem::VimbaSystem( const VimbaSystem& )
-{
-    // No generated copy ctor
-}
-
-VimbaSystem& VimbaSystem::operator=( const VimbaSystem& )
-{
-    // No assignment operator
-    return *this;
-}
-
-VimbaSystem::~VimbaSystem()
-{
-    delete m_pImpl->m_pLogger;
-    m_pImpl->m_pLogger = NULL;
-    delete m_pImpl;
-    m_pImpl = NULL;
-}
-
-// Instance
-VimbaSystem VimbaSystem::_instance;
-
-// Gets a list of all connected interfaces and updates the internal interfaces map accordingly.
-// Reference counting for removed interfaces is decreased,
-// new interfaces are added.
-VmbErrorType VimbaSystem::Impl::UpdateInterfaceList()
-{
-    std::vector<VmbInterfaceInfo_t> interfaceInfos;
-    VmbErrorType res = GetInterfaceList( interfaceInfos );
-    VmbUint32_t nCount = (VmbUint32_t)interfaceInfos.size();
-
-    if ( VmbErrorSuccess == res )
-    {
-        InterfacePtrMap::iterator iter = m_interfaces.Map.begin();
-        std::vector<VmbInterfaceInfo_t>::iterator iterInfo = interfaceInfos.begin();
-        bool bFound = false;
-
-        // Delete removed Interfaces from m_interfaces
-        while ( m_interfaces.Map.end() != iter )
-        {
-            for ( VmbUint32_t i=0; i<nCount; ++i, ++iterInfo )
-            {
-                if ( iterInfo->interfaceIdString == iter->first )
-                {
-                    bFound = true;
-                    break;
-                }
-            }
-
-            if ( false == bFound )
-            {
-                m_interfaces.Map.erase( iter++ );
-            }
-            else
-            {
-                ++iter;
-            }
-
-            bFound = false;
-            iterInfo = interfaceInfos.begin();
-        }
-
-        // Add new Interfaces to m_Interfaces
-        while ( 0 < nCount-- )
-        {
-            iter = m_interfaces.Map.find( iterInfo->interfaceIdString );
-
-            if ( m_interfaces.Map.end() == iter )
-            {
-                SP_SET( m_interfaces.Map[iterInfo->interfaceIdString], new Interface( &(*iterInfo) ));
-            }
-
-            ++iterInfo;
-        }
-    }
-
-    return res;
-}
-
-// Gets a list of all connected cameras and updates the internal cameras map accordingly.
-// Reference counting for removed cameras is decreased,
-// new cameras are added.
-VmbErrorType VimbaSystem::Impl::UpdateCameraList()
-{
-    VmbError_t res = VmbErrorSuccess;
-    VmbUint32_t nCount = 0;
-    std::vector<VmbCameraInfo_t> cameraInfos( 10 );
-
-    // HINT: We explicitly have to enable GeVDiscovery to be able to use UpdateCameraList.
-    if ( true == m_bGeVTLPresent )
-    {
-        // check GeV discovery status
-        const char *pDiscoveryStatus = NULL;
-        res = VmbFeatureEnumGet( gVimbaHandle, "GeVDiscoveryStatus", &pDiscoveryStatus );
-        if ( VmbErrorSuccess == res )
-        {
-            VmbInt64_t discoveryValue = 0;
-            res = VmbFeatureEnumAsInt( gVimbaHandle, "GeVDiscoveryStatus", pDiscoveryStatus, &discoveryValue );
-            if ( VmbErrorSuccess == res )
-            {
-                if ( 1 != discoveryValue )
-                {
-                    res = VmbFeatureCommandRun( gVimbaHandle, "GeVDiscoveryAllOnce" );
-                    if ( VmbErrorSuccess == res )
-                    {
-                        m_bGeVDiscoveryAutoOn = true;
-                    }
-                }
-            }
-        }
-    }
-    try
-    {
-        if ( VmbErrorSuccess == res )
-        {
-            // First get 10 cameras at most
-            res = VmbCamerasList( &cameraInfos[0], (VmbUint32_t)cameraInfos.size(), &nCount, sizeof(VmbCameraInfo_t) );
-            // If there are more get them eventually
-            // If even more new cameras were discovered in between the function calls we increase the allocated memory consecutively
-            while ( VmbErrorMoreData == res )
-            {
-                cameraInfos.resize( nCount );
-                res = VmbCamerasList( &cameraInfos[0], (VmbUint32_t)cameraInfos.size(), &nCount, sizeof(VmbCameraInfo_t) );
-            }
-        }
-
-        if ( VmbErrorSuccess == res )
-        {
-            if( 0 != nCount )
-            {
-                if( nCount < cameraInfos.size() )
-                {
-                    cameraInfos.resize( nCount );
-                }
-                CameraPtrMap::iterator  mapPos  = m_cameras.Map.begin();
-                typedef std::vector<VmbCameraInfo_t>::const_iterator const_info_iterator;
-
-                // Delete removed cameras from m_cameras
-                while ( m_cameras.Map.end() != mapPos )
-                {
-                    bool bFound = false;
-                    for( const_info_iterator infoPos = cameraInfos.begin(); cameraInfos.end() != infoPos; ++infoPos )
-                    {
-                        if ( infoPos->cameraIdString == mapPos->first )
-                        {
-                            bFound = true;
-                            break;
-                        }
-                    }
-
-                    if ( false == bFound )
-                    {
-                        m_cameras.Map.erase( mapPos++ );
-                    }
-                    else
-                    {
-                        ++mapPos;
-                    }
-                }
-
-                // Add new cameras to m_cameras
-                for (const_info_iterator infoPos= cameraInfos.begin(); infoPos != cameraInfos.end(); ++infoPos )
-                {
-                    CameraPtrMap::const_iterator findPos = m_cameras.Map.find( infoPos->cameraIdString );
-            
-                    if ( m_cameras.Map.end() == findPos )
-                    {
-                        AppendCamToMap( *infoPos );
-                    }
-                }
-            }
-            else
-            {
-                m_cameras.Map.clear();
-            }
-        }
-    }
-    catch( const std::bad_alloc& /*badAlloc*/ )
-    {
-        return VmbErrorResources;
-    }
-    
-
-    return (VmbErrorType)res;
-}
-
-Logger VimbaSystem::GetLogger() const
-{
-    if(m_pImpl == NULL)
-        return NULL;
-    return m_pImpl->m_pLogger;
-}
-
-bool VimbaSystem::Impl::IsIPAddress( const char *pStrID )
-{
-    if( NULL == pStrID )
-    {
-        return false;
-    }
-
-    size_t nCount = 0;
-    size_t nSize = 0;
-    size_t nIndex = 0;
-    while( pStrID[nIndex] != '\0' )
-    {
-        if( isdigit( pStrID[nIndex] ) != 0 )
-        {
-            if( nSize >= 3 )
-            {
-                return false;
-            }
-            nSize++;
-        }
-        else if( '.' == pStrID[nIndex] )
-        {
-            if(     (nSize <= 0)
-                ||  (nSize > 3)
-                ||  (nCount >= 3) )
-            {
-                return false;
-            }
-            nCount++;
-            nSize = 0;
-        }
-        else
-        {
-            return false;
-        }
-
-        nIndex++;
-    }
-    if(     (nSize <= 0)
-        ||  (nSize > 3)
-        ||  (nCount != 3) )
-    {
-        return false;
-    }
-
-    return true;
-}
-
-void VimbaSystem::Impl::AppendCamToMap( VmbCameraInfo_t camInfo )
-{
-    InterfacePtr        pInterface;
-    std::string         strInterfaceName,
-                        strInterfaceSerial;
-    VmbAccessModeType   interfaceAccess;
-    VmbInterfaceType    interfaceType;
-
-    // HINT: Before inserting (and potentially overwriting) a camera, we check whether it is present already
-    if ( m_cameras.Map.end() == m_cameras.Map.find( camInfo.cameraIdString ))
-    {
-        if ( VmbErrorSuccess == _instance.GetInterfaceByID( camInfo.interfaceIdString, pInterface ))
-        {
-            if (    VmbErrorSuccess == SP_ACCESS( pInterface )->GetName( strInterfaceName )
-                 && VmbErrorSuccess == SP_ACCESS( pInterface )->GetSerialNumber( strInterfaceSerial )
-                 && VmbErrorSuccess == SP_ACCESS( pInterface )->GetPermittedAccess( interfaceAccess )
-                 && VmbErrorSuccess == SP_ACCESS( pInterface )->GetType( interfaceType ))
-            {
-                try
-                {
-                    // TODO: Remove pCam with Interface change
-                    CameraPtr pCam = SP_ACCESS( m_pCameraFactory )->CreateCamera(   camInfo.cameraIdString,
-                                                                                    camInfo.cameraName,
-                                                                                    camInfo.modelName,
-                                                                                    camInfo.serialString,
-                                                                                    camInfo.interfaceIdString,
-                                                                                    interfaceType,
-                                                                                    strInterfaceName.c_str(),
-                                                                                    strInterfaceSerial.c_str(),
-                                                                                    interfaceAccess );
-                    // TODO: Remove with interface change
-                    char* strTemp = (char*)strstr( camInfo.cameraIdString, AVT_IP_OR_MAC_ADDRESS );
-                    if ( strTemp )
-                    {
-                        *strTemp = '\0';
-                    }
-                    m_cameras.Map[camInfo.cameraIdString] = pCam;
-                }
-                catch( ... )
-                {
-                    // Do some logging
-                    LOG_FREE_TEXT( "Could not create camera" )
-                }
-
-                CameraPtrMap::iterator iter = m_cameras.Map.find( camInfo.cameraIdString );
-                if (    m_cameras.Map.end() != iter
-                     && SP_ISNULL( iter->second ))
-                {
-                    m_cameras.Map.erase( iter );
-                    // Do some logging
-                    LOG_FREE_TEXT( "NULL camera created" )
-                }
-            }
-            else // Could not get interface infos 
-            {
-                // Do some logging
-                LOG_FREE_TEXT( "Could not get interface infos" )
-            }
-        }
-        else // Could not get interface
-        {
-            // Do some logging
-            LOG_FREE_TEXT( "Could not get interface" )
-        }
-    }
-}
-
-VmbErrorType VimbaSystem::Impl::GetInterfaceList( std::vector<VmbInterfaceInfo_t> &rInterfaceInfos )
-{
-    VmbError_t res;
-    VmbUint32_t nCount;
-
-    res = VmbInterfacesList( NULL, 0, &nCount, sizeof(VmbInterfaceInfo_t));
-    if ( VmbErrorSuccess == res )
-    {
-        rInterfaceInfos.resize( nCount );
-        res = VmbInterfacesList( &rInterfaceInfos[0], nCount, &nCount, sizeof(VmbInterfaceInfo_t));
-    }
-
-    return (VmbErrorType)res;
-}
-
-}} // namespace AVT::VmbAPI
diff --git a/VimbaCPP/tmp/GT1920CCamera.cpp b/VimbaCPP/tmp/GT1920CCamera.cpp
deleted file mode 100644
index ff99f0e9fbbdc9d3b8ea09274dc0f8cde78dff5a..0000000000000000000000000000000000000000
--- a/VimbaCPP/tmp/GT1920CCamera.cpp
+++ /dev/null
@@ -1,7485 +0,0 @@
-/*=============================================================================
-This file was generated by the VimbaClassGenerator
-=============================================================================*/
-
-#include "GT1920CCamera.h"
-
-GT1920CCamera::GT1920CCamera (
-    const char         *pCameraID,
-    const char         *pCameraName,
-    const char         *pCameraModel,
-    const char         *pCameraSerialNumber,
-    const char         *pInterfaceID,
-    VmbInterfaceType    interfaceType,
-    const char         *pInterfaceName,
-    const char         *pInterfaceSerialNumber,
-    VmbAccessModeType   interfacePermittedAccess 
-    )
-    : Camera (
-        pCameraID, 
-        pCameraName, 
-        pCameraModel, 
-        pCameraSerialNumber, 
-        pInterfaceID, 
-        interfaceType)
-{
-}
-
-
-// Category /Acquisition
-VmbErrorType GT1920CCamera::AcquisitionAbort ()
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetAcquisitionAbortFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->RunCommand ();
-    return result;
-}
-VmbErrorType GT1920CCamera::GetAcquisitionAbortFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_AcquisitionAbortFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("AcquisitionAbort", m_AcquisitionAbortFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_AcquisitionAbortFeature.reset();
-            return result;
-        }
-    }
-    feature = m_AcquisitionAbortFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetAcquisitionFrameCount (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetAcquisitionFrameCountFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetAcquisitionFrameCount (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetAcquisitionFrameCountFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetAcquisitionFrameCountFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_AcquisitionFrameCountFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("AcquisitionFrameCount", m_AcquisitionFrameCountFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_AcquisitionFrameCountFeature.reset();
-            return result;
-        }
-    }
-    feature = m_AcquisitionFrameCountFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetAcquisitionFrameRateAbs (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetAcquisitionFrameRateAbsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetAcquisitionFrameRateAbs (double value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetAcquisitionFrameRateAbsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetAcquisitionFrameRateAbsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_AcquisitionFrameRateAbsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("AcquisitionFrameRateAbs", m_AcquisitionFrameRateAbsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_AcquisitionFrameRateAbsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_AcquisitionFrameRateAbsFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetAcquisitionFrameRateLimit (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetAcquisitionFrameRateLimitFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetAcquisitionFrameRateLimitFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_AcquisitionFrameRateLimitFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("AcquisitionFrameRateLimit", m_AcquisitionFrameRateLimitFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_AcquisitionFrameRateLimitFeature.reset();
-            return result;
-        }
-    }
-    feature = m_AcquisitionFrameRateLimitFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetAcquisitionMode (AcquisitionModeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetAcquisitionModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (AcquisitionModeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetAcquisitionMode (AcquisitionModeEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetAcquisitionModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetAcquisitionModeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_AcquisitionModeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("AcquisitionMode", m_AcquisitionModeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_AcquisitionModeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_AcquisitionModeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::AcquisitionStart ()
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetAcquisitionStartFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->RunCommand ();
-    return result;
-}
-VmbErrorType GT1920CCamera::GetAcquisitionStartFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_AcquisitionStartFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("AcquisitionStart", m_AcquisitionStartFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_AcquisitionStartFeature.reset();
-            return result;
-        }
-    }
-    feature = m_AcquisitionStartFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::AcquisitionStop ()
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetAcquisitionStopFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->RunCommand ();
-    return result;
-}
-VmbErrorType GT1920CCamera::GetAcquisitionStopFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_AcquisitionStopFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("AcquisitionStop", m_AcquisitionStopFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_AcquisitionStopFeature.reset();
-            return result;
-        }
-    }
-    feature = m_AcquisitionStopFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetRecorderPreEventCount (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetRecorderPreEventCountFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetRecorderPreEventCount (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetRecorderPreEventCountFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetRecorderPreEventCountFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_RecorderPreEventCountFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("RecorderPreEventCount", m_RecorderPreEventCountFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_RecorderPreEventCountFeature.reset();
-            return result;
-        }
-    }
-    feature = m_RecorderPreEventCountFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Acquisition/Trigger
-VmbErrorType GT1920CCamera::GetTriggerActivation (TriggerActivationEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerActivationFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (TriggerActivationEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetTriggerActivation (TriggerActivationEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerActivationFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetTriggerActivationFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_TriggerActivationFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("TriggerActivation", m_TriggerActivationFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_TriggerActivationFeature.reset();
-            return result;
-        }
-    }
-    feature = m_TriggerActivationFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetTriggerDelayAbs (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerDelayAbsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetTriggerDelayAbs (double value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerDelayAbsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetTriggerDelayAbsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_TriggerDelayAbsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("TriggerDelayAbs", m_TriggerDelayAbsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_TriggerDelayAbsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_TriggerDelayAbsFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetTriggerMode (TriggerModeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (TriggerModeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetTriggerMode (TriggerModeEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetTriggerModeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_TriggerModeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("TriggerMode", m_TriggerModeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_TriggerModeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_TriggerModeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetTriggerOverlap (TriggerOverlapEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerOverlapFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (TriggerOverlapEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetTriggerOverlap (TriggerOverlapEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerOverlapFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetTriggerOverlapFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_TriggerOverlapFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("TriggerOverlap", m_TriggerOverlapFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_TriggerOverlapFeature.reset();
-            return result;
-        }
-    }
-    feature = m_TriggerOverlapFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetTriggerSelector (TriggerSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (TriggerSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetTriggerSelector (TriggerSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetTriggerSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_TriggerSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("TriggerSelector", m_TriggerSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_TriggerSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_TriggerSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::TriggerSoftware ()
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerSoftwareFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->RunCommand ();
-    return result;
-}
-VmbErrorType GT1920CCamera::GetTriggerSoftwareFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_TriggerSoftwareFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("TriggerSoftware", m_TriggerSoftwareFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_TriggerSoftwareFeature.reset();
-            return result;
-        }
-    }
-    feature = m_TriggerSoftwareFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetTriggerSource (TriggerSourceEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerSourceFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (TriggerSourceEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetTriggerSource (TriggerSourceEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetTriggerSourceFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetTriggerSourceFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_TriggerSourceFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("TriggerSource", m_TriggerSourceFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_TriggerSourceFeature.reset();
-            return result;
-        }
-    }
-    feature = m_TriggerSourceFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /ActionControl
-VmbErrorType GT1920CCamera::GetActionDeviceKey (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetActionDeviceKeyFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetActionDeviceKey (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetActionDeviceKeyFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetActionDeviceKeyFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ActionDeviceKeyFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ActionDeviceKey", m_ActionDeviceKeyFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ActionDeviceKeyFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ActionDeviceKeyFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetActionGroupKey (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetActionGroupKeyFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetActionGroupKey (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetActionGroupKeyFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetActionGroupKeyFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ActionGroupKeyFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ActionGroupKey", m_ActionGroupKeyFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ActionGroupKeyFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ActionGroupKeyFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetActionGroupMask (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetActionGroupMaskFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetActionGroupMask (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetActionGroupMaskFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetActionGroupMaskFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ActionGroupMaskFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ActionGroupMask", m_ActionGroupMaskFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ActionGroupMaskFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ActionGroupMaskFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetActionSelector (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetActionSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetActionSelector (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetActionSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetActionSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ActionSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ActionSelector", m_ActionSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ActionSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ActionSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /BufferHandlingControl
-VmbErrorType GT1920CCamera::GetStreamAnnounceBufferMinimum (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamAnnounceBufferMinimumFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStreamAnnounceBufferMinimumFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StreamAnnounceBufferMinimumFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StreamAnnounceBufferMinimum", m_StreamAnnounceBufferMinimumFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StreamAnnounceBufferMinimumFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StreamAnnounceBufferMinimumFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStreamAnnouncedBufferCount (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamAnnouncedBufferCountFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStreamAnnouncedBufferCountFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StreamAnnouncedBufferCountFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StreamAnnouncedBufferCount", m_StreamAnnouncedBufferCountFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StreamAnnouncedBufferCountFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StreamAnnouncedBufferCountFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStreamBufferHandlingMode (StreamBufferHandlingModeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamBufferHandlingModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (StreamBufferHandlingModeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetStreamBufferHandlingMode (StreamBufferHandlingModeEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamBufferHandlingModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStreamBufferHandlingModeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StreamBufferHandlingModeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StreamBufferHandlingMode", m_StreamBufferHandlingModeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StreamBufferHandlingModeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StreamBufferHandlingModeFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls
-VmbErrorType GT1920CCamera::GetDefectMaskEnable (bool & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDefectMaskEnableFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetDefectMaskEnable (bool value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDefectMaskEnableFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDefectMaskEnableFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DefectMaskEnableFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DefectMaskEnable", m_DefectMaskEnableFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DefectMaskEnableFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DefectMaskEnableFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGamma (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGammaFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGamma (double value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGammaFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGammaFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GammaFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("Gamma", m_GammaFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GammaFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GammaFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetHue (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetHueFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetHue (double value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetHueFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetHueFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_HueFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("Hue", m_HueFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_HueFeature.reset();
-            return result;
-        }
-    }
-    feature = m_HueFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSaturation (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSaturationFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetSaturation (double value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSaturationFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSaturationFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SaturationFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("Saturation", m_SaturationFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SaturationFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SaturationFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/ColorTransformationControl
-VmbErrorType GT1920CCamera::GetColorTransformationMode (ColorTransformationModeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetColorTransformationModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (ColorTransformationModeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetColorTransformationMode (ColorTransformationModeEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetColorTransformationModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetColorTransformationModeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ColorTransformationModeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ColorTransformationMode", m_ColorTransformationModeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ColorTransformationModeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ColorTransformationModeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetColorTransformationSelector (ColorTransformationSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetColorTransformationSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (ColorTransformationSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetColorTransformationSelector (ColorTransformationSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetColorTransformationSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetColorTransformationSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ColorTransformationSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ColorTransformationSelector", m_ColorTransformationSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ColorTransformationSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ColorTransformationSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetColorTransformationValue (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetColorTransformationValueFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetColorTransformationValue (double value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetColorTransformationValueFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetColorTransformationValueFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ColorTransformationValueFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ColorTransformationValue", m_ColorTransformationValueFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ColorTransformationValueFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ColorTransformationValueFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetColorTransformationValueSelector (ColorTransformationValueSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetColorTransformationValueSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (ColorTransformationValueSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetColorTransformationValueSelector (ColorTransformationValueSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetColorTransformationValueSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetColorTransformationValueSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ColorTransformationValueSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ColorTransformationValueSelector", m_ColorTransformationValueSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ColorTransformationValueSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ColorTransformationValueSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/DSPSubregion
-VmbErrorType GT1920CCamera::GetDSPSubregionBottom (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDSPSubregionBottomFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetDSPSubregionBottom (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDSPSubregionBottomFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDSPSubregionBottomFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DSPSubregionBottomFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DSPSubregionBottom", m_DSPSubregionBottomFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DSPSubregionBottomFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DSPSubregionBottomFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDSPSubregionLeft (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDSPSubregionLeftFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetDSPSubregionLeft (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDSPSubregionLeftFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDSPSubregionLeftFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DSPSubregionLeftFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DSPSubregionLeft", m_DSPSubregionLeftFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DSPSubregionLeftFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DSPSubregionLeftFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDSPSubregionRight (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDSPSubregionRightFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetDSPSubregionRight (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDSPSubregionRightFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDSPSubregionRightFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DSPSubregionRightFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DSPSubregionRight", m_DSPSubregionRightFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DSPSubregionRightFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DSPSubregionRightFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDSPSubregionTop (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDSPSubregionTopFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetDSPSubregionTop (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDSPSubregionTopFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDSPSubregionTopFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DSPSubregionTopFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DSPSubregionTop", m_DSPSubregionTopFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DSPSubregionTopFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DSPSubregionTopFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/Exposure
-VmbErrorType GT1920CCamera::GetExposureAuto (ExposureAutoEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (ExposureAutoEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetExposureAuto (ExposureAutoEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetExposureAutoFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ExposureAutoFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ExposureAuto", m_ExposureAutoFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ExposureAutoFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ExposureAutoFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetExposureMode (ExposureModeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (ExposureModeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetExposureMode (ExposureModeEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetExposureModeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ExposureModeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ExposureMode", m_ExposureModeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ExposureModeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ExposureModeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetExposureTimeAbs (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureTimeAbsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetExposureTimeAbs (double value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureTimeAbsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetExposureTimeAbsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ExposureTimeAbsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ExposureTimeAbs", m_ExposureTimeAbsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ExposureTimeAbsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ExposureTimeAbsFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/Exposure/ExposureAutoControl
-VmbErrorType GT1920CCamera::GetExposureAutoAdjustTol (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoAdjustTolFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetExposureAutoAdjustTol (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoAdjustTolFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetExposureAutoAdjustTolFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ExposureAutoAdjustTolFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ExposureAutoAdjustTol", m_ExposureAutoAdjustTolFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ExposureAutoAdjustTolFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ExposureAutoAdjustTolFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetExposureAutoAlg (ExposureAutoAlgEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoAlgFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (ExposureAutoAlgEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetExposureAutoAlg (ExposureAutoAlgEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoAlgFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetExposureAutoAlgFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ExposureAutoAlgFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ExposureAutoAlg", m_ExposureAutoAlgFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ExposureAutoAlgFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ExposureAutoAlgFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetExposureAutoMax (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoMaxFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetExposureAutoMax (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoMaxFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetExposureAutoMaxFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ExposureAutoMaxFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ExposureAutoMax", m_ExposureAutoMaxFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ExposureAutoMaxFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ExposureAutoMaxFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetExposureAutoMin (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoMinFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetExposureAutoMin (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoMinFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetExposureAutoMinFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ExposureAutoMinFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ExposureAutoMin", m_ExposureAutoMinFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ExposureAutoMinFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ExposureAutoMinFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetExposureAutoOutliers (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoOutliersFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetExposureAutoOutliers (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoOutliersFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetExposureAutoOutliersFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ExposureAutoOutliersFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ExposureAutoOutliers", m_ExposureAutoOutliersFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ExposureAutoOutliersFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ExposureAutoOutliersFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetExposureAutoRate (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoRateFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetExposureAutoRate (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoRateFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetExposureAutoRateFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ExposureAutoRateFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ExposureAutoRate", m_ExposureAutoRateFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ExposureAutoRateFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ExposureAutoRateFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetExposureAutoTarget (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoTargetFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetExposureAutoTarget (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetExposureAutoTargetFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetExposureAutoTargetFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ExposureAutoTargetFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ExposureAutoTarget", m_ExposureAutoTargetFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ExposureAutoTargetFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ExposureAutoTargetFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/GainControl
-VmbErrorType GT1920CCamera::GetGain (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGain (double value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGainFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GainFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("Gain", m_GainFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GainFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GainFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGainAuto (GainAutoEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (GainAutoEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGainAuto (GainAutoEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGainAutoFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GainAutoFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GainAuto", m_GainAutoFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GainAutoFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GainAutoFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGainSelector (GainSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (GainSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGainSelector (GainSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGainSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GainSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GainSelector", m_GainSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GainSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GainSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/GainControl/GainAutoControl
-VmbErrorType GT1920CCamera::GetGainAutoAdjustTol (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoAdjustTolFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGainAutoAdjustTol (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoAdjustTolFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGainAutoAdjustTolFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GainAutoAdjustTolFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GainAutoAdjustTol", m_GainAutoAdjustTolFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GainAutoAdjustTolFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GainAutoAdjustTolFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGainAutoMax (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoMaxFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGainAutoMax (double value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoMaxFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGainAutoMaxFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GainAutoMaxFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GainAutoMax", m_GainAutoMaxFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GainAutoMaxFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GainAutoMaxFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGainAutoMin (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoMinFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGainAutoMin (double value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoMinFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGainAutoMinFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GainAutoMinFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GainAutoMin", m_GainAutoMinFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GainAutoMinFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GainAutoMinFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGainAutoOutliers (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoOutliersFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGainAutoOutliers (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoOutliersFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGainAutoOutliersFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GainAutoOutliersFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GainAutoOutliers", m_GainAutoOutliersFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GainAutoOutliersFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GainAutoOutliersFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGainAutoRate (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoRateFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGainAutoRate (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoRateFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGainAutoRateFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GainAutoRateFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GainAutoRate", m_GainAutoRateFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GainAutoRateFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GainAutoRateFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGainAutoTarget (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoTargetFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGainAutoTarget (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGainAutoTargetFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGainAutoTargetFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GainAutoTargetFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GainAutoTarget", m_GainAutoTargetFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GainAutoTargetFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GainAutoTargetFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/Iris
-VmbErrorType GT1920CCamera::GetIrisAutoTarget (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetIrisAutoTargetFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetIrisAutoTarget (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetIrisAutoTargetFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetIrisAutoTargetFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_IrisAutoTargetFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("IrisAutoTarget", m_IrisAutoTargetFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_IrisAutoTargetFeature.reset();
-            return result;
-        }
-    }
-    feature = m_IrisAutoTargetFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetIrisMode (IrisModeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetIrisModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (IrisModeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetIrisMode (IrisModeEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetIrisModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetIrisModeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_IrisModeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("IrisMode", m_IrisModeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_IrisModeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_IrisModeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetIrisVideoLevel (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetIrisVideoLevelFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetIrisVideoLevelFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_IrisVideoLevelFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("IrisVideoLevel", m_IrisVideoLevelFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_IrisVideoLevelFeature.reset();
-            return result;
-        }
-    }
-    feature = m_IrisVideoLevelFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/Iris/LensDCIris
-VmbErrorType GT1920CCamera::GetLensDCDriveStrength (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLensDCDriveStrengthFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetLensDCDriveStrength (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLensDCDriveStrengthFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLensDCDriveStrengthFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LensDCDriveStrengthFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LensDCDriveStrength", m_LensDCDriveStrengthFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LensDCDriveStrengthFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LensDCDriveStrengthFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/Iris/LensPIris
-VmbErrorType GT1920CCamera::GetLensPIrisFrequency (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLensPIrisFrequencyFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetLensPIrisFrequency (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLensPIrisFrequencyFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLensPIrisFrequencyFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LensPIrisFrequencyFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LensPIrisFrequency", m_LensPIrisFrequencyFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LensPIrisFrequencyFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LensPIrisFrequencyFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetLensPIrisNumSteps (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLensPIrisNumStepsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetLensPIrisNumSteps (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLensPIrisNumStepsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLensPIrisNumStepsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LensPIrisNumStepsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LensPIrisNumSteps", m_LensPIrisNumStepsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LensPIrisNumStepsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LensPIrisNumStepsFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetLensPIrisPosition (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLensPIrisPositionFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetLensPIrisPosition (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLensPIrisPositionFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLensPIrisPositionFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LensPIrisPositionFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LensPIrisPosition", m_LensPIrisPositionFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LensPIrisPositionFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LensPIrisPositionFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/LUTControl
-VmbErrorType GT1920CCamera::GetLUTEnable (bool & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTEnableFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetLUTEnable (bool value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTEnableFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLUTEnableFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LUTEnableFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LUTEnable", m_LUTEnableFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LUTEnableFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LUTEnableFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetLUTIndex (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTIndexFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetLUTIndex (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTIndexFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLUTIndexFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LUTIndexFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LUTIndex", m_LUTIndexFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LUTIndexFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LUTIndexFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::LUTLoadAll ()
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTLoadAllFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->RunCommand ();
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLUTLoadAllFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LUTLoadAllFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LUTLoadAll", m_LUTLoadAllFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LUTLoadAllFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LUTLoadAllFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetLUTMode (LUTModeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (LUTModeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetLUTMode (LUTModeEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLUTModeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LUTModeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LUTMode", m_LUTModeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LUTModeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LUTModeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::LUTSaveAll ()
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTSaveAllFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->RunCommand ();
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLUTSaveAllFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LUTSaveAllFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LUTSaveAll", m_LUTSaveAllFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LUTSaveAllFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LUTSaveAllFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetLUTSelector (LUTSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (LUTSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetLUTSelector (LUTSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLUTSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LUTSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LUTSelector", m_LUTSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LUTSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LUTSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetLUTValue (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTValueFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetLUTValue (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTValueFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLUTValueFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LUTValueFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LUTValue", m_LUTValueFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LUTValueFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LUTValueFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/LUTControl/LUTInfo
-VmbErrorType GT1920CCamera::GetLUTAddress (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTAddressFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLUTAddressFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LUTAddressFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LUTAddress", m_LUTAddressFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LUTAddressFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LUTAddressFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetLUTBitDepthIn (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTBitDepthInFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLUTBitDepthInFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LUTBitDepthInFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LUTBitDepthIn", m_LUTBitDepthInFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LUTBitDepthInFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LUTBitDepthInFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetLUTBitDepthOut (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTBitDepthOutFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLUTBitDepthOutFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LUTBitDepthOutFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LUTBitDepthOut", m_LUTBitDepthOutFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LUTBitDepthOutFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LUTBitDepthOutFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetLUTSizeBytes (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetLUTSizeBytesFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetLUTSizeBytesFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_LUTSizeBytesFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("LUTSizeBytes", m_LUTSizeBytesFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_LUTSizeBytesFeature.reset();
-            return result;
-        }
-    }
-    feature = m_LUTSizeBytesFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/SubstrateVoltage
-VmbErrorType GT1920CCamera::GetVsubValue (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetVsubValueFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetVsubValueFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_VsubValueFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("VsubValue", m_VsubValueFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_VsubValueFeature.reset();
-            return result;
-        }
-    }
-    feature = m_VsubValueFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/Whitebalance
-VmbErrorType GT1920CCamera::GetBalanceRatioAbs (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBalanceRatioAbsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetBalanceRatioAbs (double value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBalanceRatioAbsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetBalanceRatioAbsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_BalanceRatioAbsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("BalanceRatioAbs", m_BalanceRatioAbsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_BalanceRatioAbsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_BalanceRatioAbsFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetBalanceRatioSelector (BalanceRatioSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBalanceRatioSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (BalanceRatioSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetBalanceRatioSelector (BalanceRatioSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBalanceRatioSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetBalanceRatioSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_BalanceRatioSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("BalanceRatioSelector", m_BalanceRatioSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_BalanceRatioSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_BalanceRatioSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetBalanceWhiteAuto (BalanceWhiteAutoEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBalanceWhiteAutoFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (BalanceWhiteAutoEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetBalanceWhiteAuto (BalanceWhiteAutoEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBalanceWhiteAutoFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetBalanceWhiteAutoFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_BalanceWhiteAutoFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("BalanceWhiteAuto", m_BalanceWhiteAutoFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_BalanceWhiteAutoFeature.reset();
-            return result;
-        }
-    }
-    feature = m_BalanceWhiteAutoFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Controls/Whitebalance/BalanceWhiteAutoControl
-VmbErrorType GT1920CCamera::GetBalanceWhiteAutoAdjustTol (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBalanceWhiteAutoAdjustTolFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetBalanceWhiteAutoAdjustTol (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBalanceWhiteAutoAdjustTolFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetBalanceWhiteAutoAdjustTolFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_BalanceWhiteAutoAdjustTolFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("BalanceWhiteAutoAdjustTol", m_BalanceWhiteAutoAdjustTolFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_BalanceWhiteAutoAdjustTolFeature.reset();
-            return result;
-        }
-    }
-    feature = m_BalanceWhiteAutoAdjustTolFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetBalanceWhiteAutoRate (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBalanceWhiteAutoRateFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetBalanceWhiteAutoRate (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBalanceWhiteAutoRateFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetBalanceWhiteAutoRateFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_BalanceWhiteAutoRateFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("BalanceWhiteAutoRate", m_BalanceWhiteAutoRateFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_BalanceWhiteAutoRateFeature.reset();
-            return result;
-        }
-    }
-    feature = m_BalanceWhiteAutoRateFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /DeviceStatus
-VmbErrorType GT1920CCamera::GetDeviceTemperature (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDeviceTemperatureFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDeviceTemperatureFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DeviceTemperatureFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DeviceTemperature", m_DeviceTemperatureFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DeviceTemperatureFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DeviceTemperatureFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDeviceTemperatureSelector (DeviceTemperatureSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDeviceTemperatureSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (DeviceTemperatureSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetDeviceTemperatureSelector (DeviceTemperatureSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDeviceTemperatureSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDeviceTemperatureSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DeviceTemperatureSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DeviceTemperatureSelector", m_DeviceTemperatureSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DeviceTemperatureSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DeviceTemperatureSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /EventControl
-VmbErrorType GT1920CCamera::GetEventNotification (EventNotificationEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventNotificationFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (EventNotificationEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetEventNotification (EventNotificationEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventNotificationFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventNotificationFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventNotificationFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventNotification", m_EventNotificationFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventNotificationFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventNotificationFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventSelector (EventSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (EventSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetEventSelector (EventSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventSelector", m_EventSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventsEnable1 (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventsEnable1Feature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetEventsEnable1 (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventsEnable1Feature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventsEnable1Feature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventsEnable1Feature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventsEnable1", m_EventsEnable1Feature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventsEnable1Feature.reset();
-            return result;
-        }
-    }
-    feature = m_EventsEnable1Feature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /EventControl/EventData
-VmbErrorType GT1920CCamera::GetEventFrameTriggerReadyFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventFrameTriggerReadyFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventFrameTriggerReadyFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventFrameTriggerReadyFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventFrameTriggerReadyFrameID", m_EventFrameTriggerReadyFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventFrameTriggerReadyFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventFrameTriggerReadyFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventFrameTriggerReadyTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventFrameTriggerReadyTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventFrameTriggerReadyTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventFrameTriggerReadyTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventFrameTriggerReadyTimestamp", m_EventFrameTriggerReadyTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventFrameTriggerReadyTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventFrameTriggerReadyTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventFrameTriggerTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventFrameTriggerTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventFrameTriggerTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventFrameTriggerTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventFrameTriggerTimestamp", m_EventFrameTriggerTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventFrameTriggerTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventFrameTriggerTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine1FallingEdgeFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine1FallingEdgeFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine1FallingEdgeFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine1FallingEdgeFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine1FallingEdgeFrameID", m_EventLine1FallingEdgeFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine1FallingEdgeFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine1FallingEdgeFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine1FallingEdgeTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine1FallingEdgeTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine1FallingEdgeTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine1FallingEdgeTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine1FallingEdgeTimestamp", m_EventLine1FallingEdgeTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine1FallingEdgeTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine1FallingEdgeTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine1RisingEdgeFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine1RisingEdgeFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine1RisingEdgeFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine1RisingEdgeFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine1RisingEdgeFrameID", m_EventLine1RisingEdgeFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine1RisingEdgeFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine1RisingEdgeFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine1RisingEdgeTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine1RisingEdgeTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine1RisingEdgeTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine1RisingEdgeTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine1RisingEdgeTimestamp", m_EventLine1RisingEdgeTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine1RisingEdgeTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine1RisingEdgeTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine2FallingEdgeFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine2FallingEdgeFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine2FallingEdgeFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine2FallingEdgeFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine2FallingEdgeFrameID", m_EventLine2FallingEdgeFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine2FallingEdgeFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine2FallingEdgeFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine2FallingEdgeTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine2FallingEdgeTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine2FallingEdgeTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine2FallingEdgeTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine2FallingEdgeTimestamp", m_EventLine2FallingEdgeTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine2FallingEdgeTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine2FallingEdgeTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine2RisingEdgeFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine2RisingEdgeFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine2RisingEdgeFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine2RisingEdgeFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine2RisingEdgeFrameID", m_EventLine2RisingEdgeFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine2RisingEdgeFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine2RisingEdgeFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine2RisingEdgeTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine2RisingEdgeTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine2RisingEdgeTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine2RisingEdgeTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine2RisingEdgeTimestamp", m_EventLine2RisingEdgeTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine2RisingEdgeTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine2RisingEdgeTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventOverflowFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventOverflowFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventOverflowFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventOverflowFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventOverflowFrameID", m_EventOverflowFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventOverflowFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventOverflowFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventOverflowTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventOverflowTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventOverflowTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventOverflowTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventOverflowTimestamp", m_EventOverflowTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventOverflowTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventOverflowTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventPtpSyncLockedFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventPtpSyncLockedFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventPtpSyncLockedFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventPtpSyncLockedFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventPtpSyncLockedFrameID", m_EventPtpSyncLockedFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventPtpSyncLockedFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventPtpSyncLockedFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventPtpSyncLockedTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventPtpSyncLockedTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventPtpSyncLockedTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventPtpSyncLockedTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventPtpSyncLockedTimestamp", m_EventPtpSyncLockedTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventPtpSyncLockedTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventPtpSyncLockedTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventPtpSyncLostFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventPtpSyncLostFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventPtpSyncLostFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventPtpSyncLostFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventPtpSyncLostFrameID", m_EventPtpSyncLostFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventPtpSyncLostFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventPtpSyncLostFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventPtpSyncLostTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventPtpSyncLostTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventPtpSyncLostTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventPtpSyncLostTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventPtpSyncLostTimestamp", m_EventPtpSyncLostTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventPtpSyncLostTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventPtpSyncLostTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAcquisitionEndFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAcquisitionEndFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAcquisitionEndFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAcquisitionEndFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAcquisitionEndFrameID", m_EventAcquisitionEndFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAcquisitionEndFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAcquisitionEndFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAcquisitionEndTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAcquisitionEndTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAcquisitionEndTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAcquisitionEndTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAcquisitionEndTimestamp", m_EventAcquisitionEndTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAcquisitionEndTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAcquisitionEndTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAcquisitionRecordTriggerFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAcquisitionRecordTriggerFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAcquisitionRecordTriggerFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAcquisitionRecordTriggerFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAcquisitionRecordTriggerFrameID", m_EventAcquisitionRecordTriggerFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAcquisitionRecordTriggerFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAcquisitionRecordTriggerFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAcquisitionRecordTriggerTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAcquisitionRecordTriggerTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAcquisitionRecordTriggerTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAcquisitionRecordTriggerTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAcquisitionRecordTriggerTimestamp", m_EventAcquisitionRecordTriggerTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAcquisitionRecordTriggerTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAcquisitionRecordTriggerTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAcquisitionStartFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAcquisitionStartFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAcquisitionStartFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAcquisitionStartFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAcquisitionStartFrameID", m_EventAcquisitionStartFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAcquisitionStartFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAcquisitionStartFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAcquisitionStartTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAcquisitionStartTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAcquisitionStartTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAcquisitionStartTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAcquisitionStartTimestamp", m_EventAcquisitionStartTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAcquisitionStartTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAcquisitionStartTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAction0FrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAction0FrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAction0FrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAction0FrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAction0FrameID", m_EventAction0FrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAction0FrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAction0FrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAction0Timestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAction0TimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAction0TimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAction0TimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAction0Timestamp", m_EventAction0TimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAction0TimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAction0TimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAction1FrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAction1FrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAction1FrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAction1FrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAction1FrameID", m_EventAction1FrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAction1FrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAction1FrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAction1Timestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAction1TimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAction1TimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAction1TimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAction1Timestamp", m_EventAction1TimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAction1TimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAction1TimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventErrorFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventErrorFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventErrorFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventErrorFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventErrorFrameID", m_EventErrorFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventErrorFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventErrorFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventErrorTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventErrorTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventErrorTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventErrorTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventErrorTimestamp", m_EventErrorTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventErrorTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventErrorTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventExposureEndFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventExposureEndFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventExposureEndFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventExposureEndFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventExposureEndFrameID", m_EventExposureEndFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventExposureEndFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventExposureEndFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventExposureEndTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventExposureEndTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventExposureEndTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventExposureEndTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventExposureEndTimestamp", m_EventExposureEndTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventExposureEndTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventExposureEndTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventExposureStartFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventExposureStartFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventExposureStartFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventExposureStartFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventExposureStartFrameID", m_EventExposureStartFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventExposureStartFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventExposureStartFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventExposureStartTimestamp (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventExposureStartTimestampFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventExposureStartTimestampFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventExposureStartTimestampFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventExposureStartTimestamp", m_EventExposureStartTimestampFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventExposureStartTimestampFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventExposureStartTimestampFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventFrameTriggerFrameID (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventFrameTriggerFrameIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventFrameTriggerFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventFrameTriggerFrameIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventFrameTriggerFrameID", m_EventFrameTriggerFrameIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventFrameTriggerFrameIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventFrameTriggerFrameIDFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /EventControl/EventID
-VmbErrorType GT1920CCamera::GetEventPtpSyncLost (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventPtpSyncLostFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventPtpSyncLostFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventPtpSyncLostFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventPtpSyncLost", m_EventPtpSyncLostFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventPtpSyncLostFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventPtpSyncLostFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventPtpSyncLocked (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventPtpSyncLockedFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventPtpSyncLockedFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventPtpSyncLockedFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventPtpSyncLocked", m_EventPtpSyncLockedFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventPtpSyncLockedFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventPtpSyncLockedFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventOverflow (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventOverflowFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventOverflowFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventOverflowFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventOverflow", m_EventOverflowFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventOverflowFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventOverflowFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine2RisingEdge (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine2RisingEdgeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine2RisingEdgeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine2RisingEdgeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine2RisingEdge", m_EventLine2RisingEdgeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine2RisingEdgeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine2RisingEdgeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine2FallingEdge (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine2FallingEdgeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine2FallingEdgeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine2FallingEdgeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine2FallingEdge", m_EventLine2FallingEdgeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine2FallingEdgeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine2FallingEdgeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine1RisingEdge (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine1RisingEdgeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine1RisingEdgeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine1RisingEdgeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine1RisingEdge", m_EventLine1RisingEdgeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine1RisingEdgeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine1RisingEdgeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventLine1FallingEdge (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventLine1FallingEdgeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventLine1FallingEdgeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventLine1FallingEdgeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventLine1FallingEdge", m_EventLine1FallingEdgeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventLine1FallingEdgeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventLine1FallingEdgeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventFrameTriggerReady (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventFrameTriggerReadyFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventFrameTriggerReadyFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventFrameTriggerReadyFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventFrameTriggerReady", m_EventFrameTriggerReadyFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventFrameTriggerReadyFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventFrameTriggerReadyFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventFrameTrigger (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventFrameTriggerFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventFrameTriggerFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventFrameTriggerFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventFrameTrigger", m_EventFrameTriggerFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventFrameTriggerFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventFrameTriggerFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventExposureStart (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventExposureStartFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventExposureStartFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventExposureStartFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventExposureStart", m_EventExposureStartFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventExposureStartFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventExposureStartFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventExposureEnd (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventExposureEndFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventExposureEndFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventExposureEndFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventExposureEnd", m_EventExposureEndFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventExposureEndFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventExposureEndFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventError (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventErrorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventErrorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventErrorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventError", m_EventErrorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventErrorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventErrorFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAction1 (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAction1Feature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAction1Feature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAction1Feature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAction1", m_EventAction1Feature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAction1Feature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAction1Feature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAction0 (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAction0Feature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAction0Feature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAction0Feature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAction0", m_EventAction0Feature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAction0Feature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAction0Feature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAcquisitionStart (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAcquisitionStartFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAcquisitionStartFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAcquisitionStartFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAcquisitionStart", m_EventAcquisitionStartFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAcquisitionStartFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAcquisitionStartFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAcquisitionRecordTrigger (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAcquisitionRecordTriggerFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAcquisitionRecordTriggerFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAcquisitionRecordTriggerFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAcquisitionRecordTrigger", m_EventAcquisitionRecordTriggerFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAcquisitionRecordTriggerFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAcquisitionRecordTriggerFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetEventAcquisitionEnd (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetEventAcquisitionEndFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetEventAcquisitionEndFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_EventAcquisitionEndFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("EventAcquisitionEnd", m_EventAcquisitionEndFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_EventAcquisitionEndFeature.reset();
-            return result;
-        }
-    }
-    feature = m_EventAcquisitionEndFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /GigE
-VmbErrorType GT1920CCamera::GetBandwidthControlMode (BandwidthControlModeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBandwidthControlModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (BandwidthControlModeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetBandwidthControlMode (BandwidthControlModeEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBandwidthControlModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetBandwidthControlModeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_BandwidthControlModeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("BandwidthControlMode", m_BandwidthControlModeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_BandwidthControlModeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_BandwidthControlModeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetChunkModeActive (bool & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetChunkModeActiveFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetChunkModeActive (bool value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetChunkModeActiveFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetChunkModeActiveFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ChunkModeActiveFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ChunkModeActive", m_ChunkModeActiveFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ChunkModeActiveFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ChunkModeActiveFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGevSCPSPacketSize (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevSCPSPacketSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGevSCPSPacketSize (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevSCPSPacketSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevSCPSPacketSizeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevSCPSPacketSizeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevSCPSPacketSize", m_GevSCPSPacketSizeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevSCPSPacketSizeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevSCPSPacketSizeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetNonImagePayloadSize (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetNonImagePayloadSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetNonImagePayloadSizeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_NonImagePayloadSizeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("NonImagePayloadSize", m_NonImagePayloadSizeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_NonImagePayloadSizeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_NonImagePayloadSizeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetPayloadSize (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetPayloadSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetPayloadSizeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_PayloadSizeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("PayloadSize", m_PayloadSizeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_PayloadSizeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_PayloadSizeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStreamBytesPerSecond (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamBytesPerSecondFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetStreamBytesPerSecond (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamBytesPerSecondFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStreamBytesPerSecondFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StreamBytesPerSecondFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StreamBytesPerSecond", m_StreamBytesPerSecondFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StreamBytesPerSecondFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StreamBytesPerSecondFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStreamFrameRateConstrain (bool & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamFrameRateConstrainFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetStreamFrameRateConstrain (bool value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamFrameRateConstrainFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStreamFrameRateConstrainFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StreamFrameRateConstrainFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StreamFrameRateConstrain", m_StreamFrameRateConstrainFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StreamFrameRateConstrainFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StreamFrameRateConstrainFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /GigE/Configuration
-VmbErrorType GT1920CCamera::GetGevIPConfigurationMode (GevIPConfigurationModeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevIPConfigurationModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (GevIPConfigurationModeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevIPConfigurationModeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevIPConfigurationModeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevIPConfigurationMode", m_GevIPConfigurationModeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevIPConfigurationModeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevIPConfigurationModeFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /GigE/Current
-VmbErrorType GT1920CCamera::GetGevCurrentDefaultGateway (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevCurrentDefaultGatewayFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevCurrentDefaultGatewayFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevCurrentDefaultGatewayFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevCurrentDefaultGateway", m_GevCurrentDefaultGatewayFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevCurrentDefaultGatewayFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevCurrentDefaultGatewayFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGevCurrentIPAddress (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevCurrentIPAddressFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevCurrentIPAddressFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevCurrentIPAddressFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevCurrentIPAddress", m_GevCurrentIPAddressFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevCurrentIPAddressFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevCurrentIPAddressFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGevCurrentSubnetMask (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevCurrentSubnetMaskFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevCurrentSubnetMaskFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevCurrentSubnetMaskFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevCurrentSubnetMask", m_GevCurrentSubnetMaskFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevCurrentSubnetMaskFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevCurrentSubnetMaskFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /GigE/GVCP
-VmbErrorType GT1920CCamera::GetGVCPCmdRetries (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVCPCmdRetriesFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVCPCmdRetries (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVCPCmdRetriesFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVCPCmdRetriesFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVCPCmdRetriesFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVCPCmdRetries", m_GVCPCmdRetriesFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVCPCmdRetriesFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVCPCmdRetriesFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGVCPCmdTimeout (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVCPCmdTimeoutFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVCPCmdTimeout (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVCPCmdTimeoutFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVCPCmdTimeoutFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVCPCmdTimeoutFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVCPCmdTimeout", m_GVCPCmdTimeoutFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVCPCmdTimeoutFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVCPCmdTimeoutFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGevHeartbeatInterval (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevHeartbeatIntervalFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGevHeartbeatInterval (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevHeartbeatIntervalFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevHeartbeatIntervalFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevHeartbeatIntervalFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevHeartbeatInterval", m_GevHeartbeatIntervalFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevHeartbeatIntervalFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevHeartbeatIntervalFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGevHeartbeatTimeout (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevHeartbeatTimeoutFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGevHeartbeatTimeout (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevHeartbeatTimeoutFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevHeartbeatTimeoutFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevHeartbeatTimeoutFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevHeartbeatTimeout", m_GevHeartbeatTimeoutFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevHeartbeatTimeoutFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevHeartbeatTimeoutFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /GigE/PTP
-VmbErrorType GT1920CCamera::GetPtpAcquisitionGateTime (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetPtpAcquisitionGateTimeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetPtpAcquisitionGateTime (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetPtpAcquisitionGateTimeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetPtpAcquisitionGateTimeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_PtpAcquisitionGateTimeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("PtpAcquisitionGateTime", m_PtpAcquisitionGateTimeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_PtpAcquisitionGateTimeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_PtpAcquisitionGateTimeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetPtpMode (PtpModeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetPtpModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (PtpModeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetPtpMode (PtpModeEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetPtpModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetPtpModeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_PtpModeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("PtpMode", m_PtpModeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_PtpModeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_PtpModeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetPtpStatus (PtpStatusEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetPtpStatusFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (PtpStatusEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::GetPtpStatusFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_PtpStatusFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("PtpStatus", m_PtpStatusFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_PtpStatusFeature.reset();
-            return result;
-        }
-    }
-    feature = m_PtpStatusFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /GigE/Persistent
-VmbErrorType GT1920CCamera::GetGevPersistentDefaultGateway (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevPersistentDefaultGatewayFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevPersistentDefaultGatewayFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevPersistentDefaultGatewayFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevPersistentDefaultGateway", m_GevPersistentDefaultGatewayFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevPersistentDefaultGatewayFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevPersistentDefaultGatewayFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGevPersistentIPAddress (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevPersistentIPAddressFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevPersistentIPAddressFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevPersistentIPAddressFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevPersistentIPAddress", m_GevPersistentIPAddressFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevPersistentIPAddressFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevPersistentIPAddressFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGevPersistentSubnetMask (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevPersistentSubnetMaskFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevPersistentSubnetMaskFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevPersistentSubnetMaskFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevPersistentSubnetMask", m_GevPersistentSubnetMaskFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevPersistentSubnetMaskFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevPersistentSubnetMaskFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /GigE/StreamHold
-VmbErrorType GT1920CCamera::GetStreamHoldCapacity (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamHoldCapacityFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStreamHoldCapacityFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StreamHoldCapacityFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StreamHoldCapacity", m_StreamHoldCapacityFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StreamHoldCapacityFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StreamHoldCapacityFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStreamHoldEnable (StreamHoldEnableEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamHoldEnableFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (StreamHoldEnableEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetStreamHoldEnable (StreamHoldEnableEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamHoldEnableFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStreamHoldEnableFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StreamHoldEnableFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StreamHoldEnable", m_StreamHoldEnableFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StreamHoldEnableFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StreamHoldEnableFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /GigE/Timestamp
-VmbErrorType GT1920CCamera::GevTimestampControlLatch ()
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevTimestampControlLatchFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->RunCommand ();
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevTimestampControlLatchFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevTimestampControlLatchFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevTimestampControlLatch", m_GevTimestampControlLatchFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevTimestampControlLatchFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevTimestampControlLatchFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GevTimestampControlReset ()
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevTimestampControlResetFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->RunCommand ();
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevTimestampControlResetFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevTimestampControlResetFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevTimestampControlReset", m_GevTimestampControlResetFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevTimestampControlResetFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevTimestampControlResetFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGevTimestampTickFrequency (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevTimestampTickFrequencyFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevTimestampTickFrequencyFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevTimestampTickFrequencyFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevTimestampTickFrequency", m_GevTimestampTickFrequencyFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevTimestampTickFrequencyFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevTimestampTickFrequencyFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGevTimestampValue (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevTimestampValueFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevTimestampValueFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevTimestampValueFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevTimestampValue", m_GevTimestampValueFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevTimestampValueFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevTimestampValueFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /IO/Strobe
-VmbErrorType GT1920CCamera::GetStrobeDelay (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStrobeDelayFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetStrobeDelay (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStrobeDelayFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStrobeDelayFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StrobeDelayFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StrobeDelay", m_StrobeDelayFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StrobeDelayFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StrobeDelayFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStrobeDuration (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStrobeDurationFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetStrobeDuration (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStrobeDurationFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStrobeDurationFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StrobeDurationFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StrobeDuration", m_StrobeDurationFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StrobeDurationFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StrobeDurationFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStrobeDurationMode (StrobeDurationModeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStrobeDurationModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (StrobeDurationModeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetStrobeDurationMode (StrobeDurationModeEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStrobeDurationModeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStrobeDurationModeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StrobeDurationModeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StrobeDurationMode", m_StrobeDurationModeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StrobeDurationModeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StrobeDurationModeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStrobeSource (StrobeSourceEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStrobeSourceFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (StrobeSourceEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetStrobeSource (StrobeSourceEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStrobeSourceFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStrobeSourceFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StrobeSourceFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StrobeSource", m_StrobeSourceFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StrobeSourceFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StrobeSourceFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /IO/SyncIn
-VmbErrorType GT1920CCamera::GetSyncInGlitchFilter (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncInGlitchFilterFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetSyncInGlitchFilter (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncInGlitchFilterFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSyncInGlitchFilterFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SyncInGlitchFilterFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SyncInGlitchFilter", m_SyncInGlitchFilterFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SyncInGlitchFilterFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SyncInGlitchFilterFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSyncInLevels (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncInLevelsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSyncInLevelsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SyncInLevelsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SyncInLevels", m_SyncInLevelsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SyncInLevelsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SyncInLevelsFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSyncInSelector (SyncInSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncInSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (SyncInSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetSyncInSelector (SyncInSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncInSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSyncInSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SyncInSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SyncInSelector", m_SyncInSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SyncInSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SyncInSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /IO/SyncOut
-VmbErrorType GT1920CCamera::GetSyncOutLevels (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncOutLevelsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetSyncOutLevels (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncOutLevelsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSyncOutLevelsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SyncOutLevelsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SyncOutLevels", m_SyncOutLevelsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SyncOutLevelsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SyncOutLevelsFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSyncOutPolarity (SyncOutPolarityEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncOutPolarityFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (SyncOutPolarityEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetSyncOutPolarity (SyncOutPolarityEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncOutPolarityFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSyncOutPolarityFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SyncOutPolarityFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SyncOutPolarity", m_SyncOutPolarityFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SyncOutPolarityFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SyncOutPolarityFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSyncOutSelector (SyncOutSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncOutSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (SyncOutSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetSyncOutSelector (SyncOutSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncOutSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSyncOutSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SyncOutSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SyncOutSelector", m_SyncOutSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SyncOutSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SyncOutSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSyncOutSource (SyncOutSourceEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncOutSourceFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (SyncOutSourceEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetSyncOutSource (SyncOutSourceEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSyncOutSourceFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSyncOutSourceFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SyncOutSourceFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SyncOutSource", m_SyncOutSourceFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SyncOutSourceFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SyncOutSourceFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /ImageFormat
-VmbErrorType GT1920CCamera::GetHeight (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetHeightFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetHeight (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetHeightFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetHeightFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_HeightFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("Height", m_HeightFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_HeightFeature.reset();
-            return result;
-        }
-    }
-    feature = m_HeightFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetHeightMax (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetHeightMaxFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetHeightMaxFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_HeightMaxFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("HeightMax", m_HeightMaxFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_HeightMaxFeature.reset();
-            return result;
-        }
-    }
-    feature = m_HeightMaxFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetImageSize (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetImageSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetImageSizeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ImageSizeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ImageSize", m_ImageSizeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ImageSizeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ImageSizeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetOffsetX (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetOffsetXFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetOffsetX (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetOffsetXFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetOffsetXFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_OffsetXFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("OffsetX", m_OffsetXFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_OffsetXFeature.reset();
-            return result;
-        }
-    }
-    feature = m_OffsetXFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetOffsetY (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetOffsetYFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetOffsetY (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetOffsetYFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetOffsetYFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_OffsetYFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("OffsetY", m_OffsetYFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_OffsetYFeature.reset();
-            return result;
-        }
-    }
-    feature = m_OffsetYFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetPixelFormat (PixelFormatEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetPixelFormatFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (PixelFormatEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetPixelFormat (PixelFormatEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetPixelFormatFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetPixelFormatFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_PixelFormatFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("PixelFormat", m_PixelFormatFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_PixelFormatFeature.reset();
-            return result;
-        }
-    }
-    feature = m_PixelFormatFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetWidth (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetWidthFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetWidth (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetWidthFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetWidthFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_WidthFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("Width", m_WidthFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_WidthFeature.reset();
-            return result;
-        }
-    }
-    feature = m_WidthFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetWidthMax (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetWidthMaxFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetWidthMaxFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_WidthMaxFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("WidthMax", m_WidthMaxFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_WidthMaxFeature.reset();
-            return result;
-        }
-    }
-    feature = m_WidthMaxFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /ImageMode
-VmbErrorType GT1920CCamera::GetBinningHorizontal (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBinningHorizontalFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetBinningHorizontal (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBinningHorizontalFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetBinningHorizontalFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_BinningHorizontalFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("BinningHorizontal", m_BinningHorizontalFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_BinningHorizontalFeature.reset();
-            return result;
-        }
-    }
-    feature = m_BinningHorizontalFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetBinningVertical (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBinningVerticalFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetBinningVertical (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetBinningVerticalFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetBinningVerticalFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_BinningVerticalFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("BinningVertical", m_BinningVerticalFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_BinningVerticalFeature.reset();
-            return result;
-        }
-    }
-    feature = m_BinningVerticalFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDecimationHorizontal (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDecimationHorizontalFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetDecimationHorizontal (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDecimationHorizontalFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDecimationHorizontalFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DecimationHorizontalFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DecimationHorizontal", m_DecimationHorizontalFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DecimationHorizontalFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DecimationHorizontalFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDecimationVertical (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDecimationVerticalFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetDecimationVertical (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDecimationVerticalFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDecimationVerticalFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DecimationVerticalFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DecimationVertical", m_DecimationVerticalFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DecimationVerticalFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DecimationVerticalFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetReverseX (bool & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetReverseXFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetReverseX (bool value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetReverseXFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetReverseXFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ReverseXFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ReverseX", m_ReverseXFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ReverseXFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ReverseXFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetReverseY (bool & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetReverseYFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetReverseY (bool value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetReverseYFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetReverseYFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_ReverseYFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("ReverseY", m_ReverseYFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_ReverseYFeature.reset();
-            return result;
-        }
-    }
-    feature = m_ReverseYFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSensorDigitizationTaps (SensorDigitizationTapsEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSensorDigitizationTapsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (SensorDigitizationTapsEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetSensorDigitizationTaps (SensorDigitizationTapsEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSensorDigitizationTapsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSensorDigitizationTapsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SensorDigitizationTapsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SensorDigitizationTaps", m_SensorDigitizationTapsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SensorDigitizationTapsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SensorDigitizationTapsFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSensorHeight (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSensorHeightFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSensorHeightFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SensorHeightFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SensorHeight", m_SensorHeightFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SensorHeightFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SensorHeightFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSensorTaps (SensorTapsEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSensorTapsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (SensorTapsEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSensorTapsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SensorTapsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SensorTaps", m_SensorTapsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SensorTapsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SensorTapsFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSensorWidth (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSensorWidthFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSensorWidthFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SensorWidthFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SensorWidth", m_SensorWidthFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SensorWidthFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SensorWidthFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Info
-VmbErrorType GT1920CCamera::GetDeviceFirmwareVersion (std::string & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDeviceFirmwareVersionFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDeviceFirmwareVersionFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DeviceFirmwareVersionFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DeviceFirmwareVersion", m_DeviceFirmwareVersionFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DeviceFirmwareVersionFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DeviceFirmwareVersionFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDeviceID (std::string & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDeviceIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDeviceIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DeviceIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DeviceID", m_DeviceIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DeviceIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DeviceIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDeviceModelName (std::string & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDeviceModelNameFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDeviceModelNameFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DeviceModelNameFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DeviceModelName", m_DeviceModelNameFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DeviceModelNameFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DeviceModelNameFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDevicePartNumber (std::string & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDevicePartNumberFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDevicePartNumberFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DevicePartNumberFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DevicePartNumber", m_DevicePartNumberFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DevicePartNumberFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DevicePartNumberFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDeviceScanType (DeviceScanTypeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDeviceScanTypeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (DeviceScanTypeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDeviceScanTypeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DeviceScanTypeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DeviceScanType", m_DeviceScanTypeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DeviceScanTypeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DeviceScanTypeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDeviceUserID (std::string & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDeviceUserIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetDeviceUserID (const char * value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDeviceUserIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDeviceUserIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DeviceUserIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DeviceUserID", m_DeviceUserIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DeviceUserIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DeviceUserIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetDeviceVendorName (std::string & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetDeviceVendorNameFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetDeviceVendorNameFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_DeviceVendorNameFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("DeviceVendorName", m_DeviceVendorNameFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_DeviceVendorNameFeature.reset();
-            return result;
-        }
-    }
-    feature = m_DeviceVendorNameFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetFirmwareVerBuild (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetFirmwareVerBuildFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetFirmwareVerBuildFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_FirmwareVerBuildFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("FirmwareVerBuild", m_FirmwareVerBuildFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_FirmwareVerBuildFeature.reset();
-            return result;
-        }
-    }
-    feature = m_FirmwareVerBuildFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetFirmwareVerMajor (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetFirmwareVerMajorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetFirmwareVerMajorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_FirmwareVerMajorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("FirmwareVerMajor", m_FirmwareVerMajorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_FirmwareVerMajorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_FirmwareVerMajorFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetFirmwareVerMinor (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetFirmwareVerMinorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetFirmwareVerMinorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_FirmwareVerMinorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("FirmwareVerMinor", m_FirmwareVerMinorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_FirmwareVerMinorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_FirmwareVerMinorFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGevDeviceMACAddress (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGevDeviceMACAddressFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGevDeviceMACAddressFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GevDeviceMACAddressFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GevDeviceMACAddress", m_GevDeviceMACAddressFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GevDeviceMACAddressFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GevDeviceMACAddressFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSensorBits (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSensorBitsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSensorBitsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SensorBitsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SensorBits", m_SensorBitsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SensorBitsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SensorBitsFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetSensorType (SensorTypeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetSensorTypeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (SensorTypeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::GetSensorTypeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_SensorTypeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("SensorType", m_SensorTypeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_SensorTypeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_SensorTypeFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /SavedUserSets
-VmbErrorType GT1920CCamera::GetUserSetDefaultSelector (UserSetDefaultSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetUserSetDefaultSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (UserSetDefaultSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetUserSetDefaultSelector (UserSetDefaultSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetUserSetDefaultSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetUserSetDefaultSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_UserSetDefaultSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("UserSetDefaultSelector", m_UserSetDefaultSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_UserSetDefaultSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_UserSetDefaultSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::UserSetLoad ()
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetUserSetLoadFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->RunCommand ();
-    return result;
-}
-VmbErrorType GT1920CCamera::GetUserSetLoadFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_UserSetLoadFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("UserSetLoad", m_UserSetLoadFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_UserSetLoadFeature.reset();
-            return result;
-        }
-    }
-    feature = m_UserSetLoadFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::UserSetSave ()
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetUserSetSaveFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->RunCommand ();
-    return result;
-}
-VmbErrorType GT1920CCamera::GetUserSetSaveFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_UserSetSaveFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("UserSetSave", m_UserSetSaveFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_UserSetSaveFeature.reset();
-            return result;
-        }
-    }
-    feature = m_UserSetSaveFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetUserSetSelector (UserSetSelectorEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetUserSetSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (UserSetSelectorEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetUserSetSelector (UserSetSelectorEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetUserSetSelectorFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetUserSetSelectorFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_UserSetSelectorFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("UserSetSelector", m_UserSetSelectorFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_UserSetSelectorFeature.reset();
-            return result;
-        }
-    }
-    feature = m_UserSetSelectorFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Stream/Info
-VmbErrorType GT1920CCamera::GetGVSPFilterVersion (std::string & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPFilterVersionFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPFilterVersionFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPFilterVersionFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPFilterVersion", m_GVSPFilterVersionFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPFilterVersionFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPFilterVersionFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Stream/Multicast
-VmbErrorType GT1920CCamera::GetMulticastEnable (bool & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetMulticastEnableFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetMulticastEnable (bool value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetMulticastEnableFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetMulticastEnableFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_MulticastEnableFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("MulticastEnable", m_MulticastEnableFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_MulticastEnableFeature.reset();
-            return result;
-        }
-    }
-    feature = m_MulticastEnableFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetMulticastIPAddress (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetMulticastIPAddressFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetMulticastIPAddress (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetMulticastIPAddressFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetMulticastIPAddressFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_MulticastIPAddressFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("MulticastIPAddress", m_MulticastIPAddressFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_MulticastIPAddressFeature.reset();
-            return result;
-        }
-    }
-    feature = m_MulticastIPAddressFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Stream/Settings
-VmbErrorType GT1920CCamera::GVSPAdjustPacketSize ()
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPAdjustPacketSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->RunCommand ();
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPAdjustPacketSizeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPAdjustPacketSizeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPAdjustPacketSize", m_GVSPAdjustPacketSizeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPAdjustPacketSizeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPAdjustPacketSizeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGVSPBurstSize (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPBurstSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVSPBurstSize (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPBurstSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPBurstSizeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPBurstSizeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPBurstSize", m_GVSPBurstSizeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPBurstSizeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPBurstSizeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGVSPDriver (GVSPDriverEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPDriverFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (GVSPDriverEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVSPDriver (GVSPDriverEnum value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPDriverFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPDriverFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPDriverFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPDriver", m_GVSPDriverFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPDriverFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPDriverFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGVSPHostReceiveBufferSize (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPHostReceiveBufferSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVSPHostReceiveBufferSize (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPHostReceiveBufferSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPHostReceiveBufferSizeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPHostReceiveBufferSizeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPHostReceiveBufferSize", m_GVSPHostReceiveBufferSizeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPHostReceiveBufferSizeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPHostReceiveBufferSizeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGVSPMaxLookBack (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPMaxLookBackFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVSPMaxLookBack (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPMaxLookBackFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPMaxLookBackFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPMaxLookBackFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPMaxLookBack", m_GVSPMaxLookBackFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPMaxLookBackFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPMaxLookBackFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGVSPMaxRequests (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPMaxRequestsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVSPMaxRequests (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPMaxRequestsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPMaxRequestsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPMaxRequestsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPMaxRequests", m_GVSPMaxRequestsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPMaxRequestsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPMaxRequestsFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGVSPMaxWaitSize (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPMaxWaitSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVSPMaxWaitSize (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPMaxWaitSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPMaxWaitSizeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPMaxWaitSizeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPMaxWaitSize", m_GVSPMaxWaitSizeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPMaxWaitSizeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPMaxWaitSizeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGVSPMissingSize (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPMissingSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVSPMissingSize (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPMissingSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPMissingSizeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPMissingSizeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPMissingSize", m_GVSPMissingSizeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPMissingSizeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPMissingSizeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGVSPPacketSize (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPPacketSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVSPPacketSize (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPPacketSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPPacketSizeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPPacketSizeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPPacketSize", m_GVSPPacketSizeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPPacketSizeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPPacketSizeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGVSPTiltingSize (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPTiltingSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVSPTiltingSize (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPTiltingSizeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPTiltingSizeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPTiltingSizeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPTiltingSize", m_GVSPTiltingSizeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPTiltingSizeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPTiltingSizeFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetGVSPTimeout (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPTimeoutFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::SetGVSPTimeout (VmbInt64_t value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetGVSPTimeoutFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->SetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetGVSPTimeoutFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_GVSPTimeoutFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("GVSPTimeout", m_GVSPTimeoutFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_GVSPTimeoutFeature.reset();
-            return result;
-        }
-    }
-    feature = m_GVSPTimeoutFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /Stream/Statistics
-VmbErrorType GT1920CCamera::GetStatFrameDelivered (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatFrameDeliveredFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatFrameDeliveredFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatFrameDeliveredFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatFrameDelivered", m_StatFrameDeliveredFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatFrameDeliveredFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatFrameDeliveredFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatFrameDropped (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatFrameDroppedFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatFrameDroppedFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatFrameDroppedFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatFrameDropped", m_StatFrameDroppedFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatFrameDroppedFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatFrameDroppedFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatFrameRate (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatFrameRateFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatFrameRateFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatFrameRateFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatFrameRate", m_StatFrameRateFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatFrameRateFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatFrameRateFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatFrameRescued (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatFrameRescuedFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatFrameRescuedFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatFrameRescuedFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatFrameRescued", m_StatFrameRescuedFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatFrameRescuedFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatFrameRescuedFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatFrameShoved (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatFrameShovedFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatFrameShovedFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatFrameShovedFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatFrameShoved", m_StatFrameShovedFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatFrameShovedFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatFrameShovedFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatFrameUnderrun (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatFrameUnderrunFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatFrameUnderrunFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatFrameUnderrunFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatFrameUnderrun", m_StatFrameUnderrunFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatFrameUnderrunFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatFrameUnderrunFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatLocalRate (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatLocalRateFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatLocalRateFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatLocalRateFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatLocalRate", m_StatLocalRateFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatLocalRateFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatLocalRateFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatPacketErrors (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatPacketErrorsFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatPacketErrorsFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatPacketErrorsFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatPacketErrors", m_StatPacketErrorsFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatPacketErrorsFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatPacketErrorsFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatPacketMissed (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatPacketMissedFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatPacketMissedFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatPacketMissedFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatPacketMissed", m_StatPacketMissedFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatPacketMissedFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatPacketMissedFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatPacketReceived (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatPacketReceivedFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatPacketReceivedFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatPacketReceivedFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatPacketReceived", m_StatPacketReceivedFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatPacketReceivedFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatPacketReceivedFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatPacketRequested (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatPacketRequestedFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatPacketRequestedFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatPacketRequestedFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatPacketRequested", m_StatPacketRequestedFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatPacketRequestedFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatPacketRequestedFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatPacketResent (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatPacketResentFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatPacketResentFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatPacketResentFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatPacketResent", m_StatPacketResentFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatPacketResentFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatPacketResentFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatPacketUnavailable (VmbInt64_t & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatPacketUnavailableFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatPacketUnavailableFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatPacketUnavailableFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatPacketUnavailable", m_StatPacketUnavailableFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatPacketUnavailableFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatPacketUnavailableFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStatTimeElapsed (double & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStatTimeElapsedFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStatTimeElapsedFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StatTimeElapsedFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StatTimeElapsed", m_StatTimeElapsedFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StatTimeElapsedFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StatTimeElapsedFeature;
-    return VmbErrorSuccess;
-}
-
-
-// Category /StreamInformation
-VmbErrorType GT1920CCamera::GetStreamID (std::string & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamIDFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    result = pFeature->GetValue (value);
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStreamIDFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StreamIDFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StreamID", m_StreamIDFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StreamIDFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StreamIDFeature;
-    return VmbErrorSuccess;
-}
-
-VmbErrorType GT1920CCamera::GetStreamType (StreamTypeEnum & value)
-{
-    VmbErrorType result;
-    AVT::VmbAPI::FeaturePtr pFeature;
-    result = GetStreamTypeFeature (pFeature);
-    if (result != VmbErrorSuccess)
-        return result;
-    VmbInt64_t nValue;
-    result = pFeature->GetValue (nValue);
-    value = (StreamTypeEnum) nValue;
-    return result;
-}
-VmbErrorType GT1920CCamera::GetStreamTypeFeature (AVT::VmbAPI::FeaturePtr & feature)
-{
-    if (m_StreamTypeFeature.get() == NULL)
-    {
-        VmbErrorType result;
-        result = GetFeatureByName ("StreamType", m_StreamTypeFeature);
-        if (result != VmbErrorSuccess)
-        {
-            m_StreamTypeFeature.reset();
-            return result;
-        }
-    }
-    feature = m_StreamTypeFeature;
-    return VmbErrorSuccess;
-}
-
diff --git a/VimbaCPP/tmp/GT1920CCamera.h b/VimbaCPP/tmp/GT1920CCamera.h
deleted file mode 100644
index 00d0a161c961180ea9b0db71207765bdd7b6d839..0000000000000000000000000000000000000000
--- a/VimbaCPP/tmp/GT1920CCamera.h
+++ /dev/null
@@ -1,1545 +0,0 @@
-/*=============================================================================
-This file was generated by the VimbaClassGenerator
-=============================================================================*/
-
-#ifndef GT1920CCAMERA_H
-#define GT1920CCAMERA_H
-
-#include "VimbaCPP/Include/VimbaCPP.h"
-
-class GT1920CCamera : public AVT::VmbAPI::Camera
-{
-    public:
-        typedef SP_DECL( GT1920CCamera ) Ptr;
-
-        typedef enum _AcquisitionModeEnum
-        {
-            AcquisitionMode_Continuous = 1,
-            AcquisitionMode_SingleFrame = 2,
-            AcquisitionMode_MultiFrame = 3,
-            AcquisitionMode_Recorder = 4
-        } AcquisitionModeEnum;
-
-        typedef enum _BalanceRatioSelectorEnum
-        {
-            BalanceRatioSelector_Red = 0,
-            BalanceRatioSelector_Blue = 1
-        } BalanceRatioSelectorEnum;
-
-        typedef enum _BalanceWhiteAutoEnum
-        {
-            BalanceWhiteAuto_Off = 1,
-            BalanceWhiteAuto_Continuous = 2,
-            BalanceWhiteAuto_Once = 3
-        } BalanceWhiteAutoEnum;
-
-        typedef enum _BandwidthControlModeEnum
-        {
-            BandwidthControlMode_StreamBytesPerSecond = 0,
-            BandwidthControlMode_SCPD = 1,
-            BandwidthControlMode_Both = 2
-        } BandwidthControlModeEnum;
-
-        typedef enum _ColorTransformationModeEnum
-        {
-            ColorTransformationMode_Off = 0,
-            ColorTransformationMode_Manual = 1,
-            ColorTransformationMode_Temp6500K = 2
-        } ColorTransformationModeEnum;
-
-        typedef enum _ColorTransformationSelectorEnum
-        {
-            ColorTransformationSelector_RGBtoRGB = 0
-        } ColorTransformationSelectorEnum;
-
-        typedef enum _ColorTransformationValueSelectorEnum
-        {
-            ColorTransformationValueSelector_Gain00 = 0,
-            ColorTransformationValueSelector_Gain01 = 1,
-            ColorTransformationValueSelector_Gain02 = 2,
-            ColorTransformationValueSelector_Gain10 = 3,
-            ColorTransformationValueSelector_Gain11 = 4,
-            ColorTransformationValueSelector_Gain12 = 5,
-            ColorTransformationValueSelector_Gain20 = 6,
-            ColorTransformationValueSelector_Gain21 = 7,
-            ColorTransformationValueSelector_Gain22 = 8
-        } ColorTransformationValueSelectorEnum;
-
-        typedef enum _DeviceScanTypeEnum
-        {
-            DeviceScanType_Areascan = 0
-        } DeviceScanTypeEnum;
-
-        typedef enum _DeviceTemperatureSelectorEnum
-        {
-            DeviceTemperatureSelector_Sensor = 0,
-            DeviceTemperatureSelector_Main = 1,
-            DeviceTemperatureSelector_Power = 2
-        } DeviceTemperatureSelectorEnum;
-
-        typedef enum _EventNotificationEnum
-        {
-            EventNotification_Off = 0,
-            EventNotification_On = 1
-        } EventNotificationEnum;
-
-        typedef enum _EventSelectorEnum
-        {
-            EventSelector_AcquisitionStart = 40000,
-            EventSelector_AcquisitionEnd = 40001,
-            EventSelector_FrameTrigger = 40002,
-            EventSelector_ExposureEnd = 40003,
-            EventSelector_AcquisitionRecordTrigger = 40004,
-            EventSelector_PtpSyncLost = 40005,
-            EventSelector_PtpSyncLocked = 40006,
-            EventSelector_Line1RisingEdge = 40010,
-            EventSelector_Line1FallingEdge = 40011,
-            EventSelector_Line2RisingEdge = 40012,
-            EventSelector_Line2FallingEdge = 40013,
-            EventSelector_Line3RisingEdge = 40014,
-            EventSelector_Line3FallingEdge = 40015,
-            EventSelector_Line4RisingEdge = 40016,
-            EventSelector_Line4FallingEdge = 40017,
-            EventSelector_FrameTriggerReady = 40018,
-            EventSelector_ExposureStart = 40019,
-            EventSelector_Action0 = 40020,
-            EventSelector_Action1 = 40021
-        } EventSelectorEnum;
-
-        typedef enum _ExposureAutoEnum
-        {
-            ExposureAuto_Off = 1,
-            ExposureAuto_Continuous = 2,
-            ExposureAuto_Once = 3
-        } ExposureAutoEnum;
-
-        typedef enum _ExposureAutoAlgEnum
-        {
-            ExposureAutoAlg_Mean = 0,
-            ExposureAutoAlg_FitRange = 1
-        } ExposureAutoAlgEnum;
-
-        typedef enum _ExposureModeEnum
-        {
-            ExposureMode_Timed = 0,
-            ExposureMode_TriggerWidth = 1
-        } ExposureModeEnum;
-
-        typedef enum _GVSPDriverEnum
-        {
-            GVSPDriver_Socket = 0,
-            GVSPDriver_Filter = 1
-        } GVSPDriverEnum;
-
-        typedef enum _GainAutoEnum
-        {
-            GainAuto_Off = 1,
-            GainAuto_Continuous = 2,
-            GainAuto_Once = 3
-        } GainAutoEnum;
-
-        typedef enum _GainSelectorEnum
-        {
-            GainSelector_All = 0
-        } GainSelectorEnum;
-
-        typedef enum _GevIPConfigurationModeEnum
-        {
-            GevIPConfigurationMode_LLA = 4,
-            GevIPConfigurationMode_Persistent = 5,
-            GevIPConfigurationMode_DHCP = 6
-        } GevIPConfigurationModeEnum;
-
-        typedef enum _IrisModeEnum
-        {
-            IrisMode_Disabled = 0,
-            IrisMode_Video = 1,
-            IrisMode_VideoOpen = 2,
-            IrisMode_VideoClose = 3,
-            IrisMode_PIrisAuto = 4,
-            IrisMode_PIrisManual = 5,
-            IrisMode_DCIris = 6
-        } IrisModeEnum;
-
-        typedef enum _LUTModeEnum
-        {
-            LUTMode_Luminance = 0,
-            LUTMode_Red = 1,
-            LUTMode_Green = 2,
-            LUTMode_Blue = 3
-        } LUTModeEnum;
-
-        typedef enum _LUTSelectorEnum
-        {
-            LUTSelector_LUT1 = 0,
-            LUTSelector_LUT2 = 1,
-            LUTSelector_LUT3 = 2,
-            LUTSelector_LUT4 = 3,
-            LUTSelector_LUT5 = 4
-        } LUTSelectorEnum;
-
-        typedef enum _PixelFormatEnum
-        {
-            PixelFormat_Mono8 = 17301505,
-            PixelFormat_BayerGR8 = 17301512,
-            PixelFormat_BayerRG8 = 17301513,
-            PixelFormat_BayerGB8 = 17301514,
-            PixelFormat_BayerBG8 = 17301515,
-            PixelFormat_Mono12Packed = 17563654,
-            PixelFormat_BayerGR12Packed = 17563690,
-            PixelFormat_BayerRG12Packed = 17563691,
-            PixelFormat_BayerGB12Packed = 17563692,
-            PixelFormat_Mono10 = 17825795,
-            PixelFormat_Mono12 = 17825797,
-            PixelFormat_BayerBG10 = 17825807,
-            PixelFormat_BayerGR12 = 17825808,
-            PixelFormat_BayerRG12 = 17825809,
-            PixelFormat_BayerGB12 = 17825810,
-            PixelFormat_Mono14 = 17825829,
-            PixelFormat_YUV411Packed = 34340894,
-            PixelFormat_YUV422Packed = 34603039,
-            PixelFormat_RGB8Packed = 35127316,
-            PixelFormat_BGR8Packed = 35127317,
-            PixelFormat_YUV444Packed = 35127328,
-            PixelFormat_RGBA8Packed = 35651606,
-            PixelFormat_BGRA8Packed = 35651607,
-            PixelFormat_RGB10Packed = 36700184,
-            PixelFormat_RGB12Packed = 36700186
-        } PixelFormatEnum;
-
-        typedef enum _PtpModeEnum
-        {
-            PtpMode_Off = 0,
-            PtpMode_Slave = 1,
-            PtpMode_Master = 2,
-            PtpMode_Auto = 3
-        } PtpModeEnum;
-
-        typedef enum _PtpStatusEnum
-        {
-            PtpStatus_Initializing = 0,
-            PtpStatus_Faulty = 1,
-            PtpStatus_Disabled = 2,
-            PtpStatus_Listening = 3,
-            PtpStatus_PreMaster = 4,
-            PtpStatus_Master = 5,
-            PtpStatus_Passive = 6,
-            PtpStatus_Uncalibrated = 7,
-            PtpStatus_Slave = 8
-        } PtpStatusEnum;
-
-        typedef enum _SensorDigitizationTapsEnum
-        {
-            SensorDigitizationTaps_One = 0,
-            SensorDigitizationTaps_Two = 1,
-            SensorDigitizationTaps_Four = 3
-        } SensorDigitizationTapsEnum;
-
-        typedef enum _SensorTapsEnum
-        {
-            SensorTaps_One = 0,
-            SensorTaps_Two = 1,
-            SensorTaps_Four = 3
-        } SensorTapsEnum;
-
-        typedef enum _SensorTypeEnum
-        {
-            SensorType_Mono = 0,
-            SensorType_Bayer = 1
-        } SensorTypeEnum;
-
-        typedef enum _StreamBufferHandlingModeEnum
-        {
-            StreamBufferHandlingMode_Default = 0
-        } StreamBufferHandlingModeEnum;
-
-        typedef enum _StreamHoldEnableEnum
-        {
-            StreamHoldEnable_Off = 0,
-            StreamHoldEnable_On = 1
-        } StreamHoldEnableEnum;
-
-        typedef enum _StreamTypeEnum
-        {
-            StreamType_GEV = 2
-        } StreamTypeEnum;
-
-        typedef enum _StrobeDurationModeEnum
-        {
-            StrobeDurationMode_Source = 0,
-            StrobeDurationMode_Controlled = 1
-        } StrobeDurationModeEnum;
-
-        typedef enum _StrobeSourceEnum
-        {
-            StrobeSource_AcquisitionTriggerReady = 1,
-            StrobeSource_FrameTriggerReady = 2,
-            StrobeSource_FrameTrigger = 3,
-            StrobeSource_Exposing = 4,
-            StrobeSource_FrameReadout = 5,
-            StrobeSource_Acquiring = 7,
-            StrobeSource_LineIn1 = 8,
-            StrobeSource_LineIn2 = 9
-        } StrobeSourceEnum;
-
-        typedef enum _SyncInSelectorEnum
-        {
-            SyncInSelector_SyncIn1 = 0,
-            SyncInSelector_SyncIn2 = 1,
-            SyncInSelector_SyncIn3 = 2,
-            SyncInSelector_SyncIn4 = 3
-        } SyncInSelectorEnum;
-
-        typedef enum _SyncOutPolarityEnum
-        {
-            SyncOutPolarity_Normal = 0,
-            SyncOutPolarity_Invert = 1
-        } SyncOutPolarityEnum;
-
-        typedef enum _SyncOutSelectorEnum
-        {
-            SyncOutSelector_SyncOut1 = 0,
-            SyncOutSelector_SyncOut2 = 1,
-            SyncOutSelector_SyncOut3 = 2,
-            SyncOutSelector_SyncOut4 = 3
-        } SyncOutSelectorEnum;
-
-        typedef enum _SyncOutSourceEnum
-        {
-            SyncOutSource_GPO = 0,
-            SyncOutSource_AcquisitionTriggerReady = 1,
-            SyncOutSource_FrameTriggerReady = 2,
-            SyncOutSource_Exposing = 4,
-            SyncOutSource_FrameReadout = 5,
-            SyncOutSource_Imaging = 6,
-            SyncOutSource_Acquiring = 7,
-            SyncOutSource_LineIn1 = 8,
-            SyncOutSource_LineIn2 = 9,
-            SyncOutSource_Strobe1 = 12
-        } SyncOutSourceEnum;
-
-        typedef enum _TriggerActivationEnum
-        {
-            TriggerActivation_RisingEdge = 0,
-            TriggerActivation_FallingEdge = 1,
-            TriggerActivation_AnyEdge = 2,
-            TriggerActivation_LevelHigh = 3,
-            TriggerActivation_LevelLow = 4
-        } TriggerActivationEnum;
-
-        typedef enum _TriggerModeEnum
-        {
-            TriggerMode_Off = 0,
-            TriggerMode_On = 1
-        } TriggerModeEnum;
-
-        typedef enum _TriggerOverlapEnum
-        {
-            TriggerOverlap_Off = 0,
-            TriggerOverlap_ReadOut = 1,
-            TriggerOverlap_PreviousFrame = 2
-        } TriggerOverlapEnum;
-
-        typedef enum _TriggerSelectorEnum
-        {
-            TriggerSelector_FrameStart = 0,
-            TriggerSelector_AcquisitionStart = 3,
-            TriggerSelector_AcquisitionEnd = 4,
-            TriggerSelector_AcquisitionRecord = 6
-        } TriggerSelectorEnum;
-
-        typedef enum _TriggerSourceEnum
-        {
-            TriggerSource_Freerun = 0,
-            TriggerSource_Line1 = 1,
-            TriggerSource_Line2 = 2,
-            TriggerSource_Line3 = 3,
-            TriggerSource_Line4 = 4,
-            TriggerSource_FixedRate = 5,
-            TriggerSource_Software = 6,
-            TriggerSource_Action0 = 7,
-            TriggerSource_Action1 = 8
-        } TriggerSourceEnum;
-
-        typedef enum _UserSetDefaultSelectorEnum
-        {
-            UserSetDefaultSelector_Default = 0,
-            UserSetDefaultSelector_UserSet1 = 1,
-            UserSetDefaultSelector_UserSet2 = 2,
-            UserSetDefaultSelector_UserSet3 = 3,
-            UserSetDefaultSelector_UserSet4 = 4,
-            UserSetDefaultSelector_UserSet5 = 5
-        } UserSetDefaultSelectorEnum;
-
-        typedef enum _UserSetSelectorEnum
-        {
-            UserSetSelector_Default = 0,
-            UserSetSelector_UserSet1 = 1,
-            UserSetSelector_UserSet2 = 2,
-            UserSetSelector_UserSet3 = 3,
-            UserSetSelector_UserSet4 = 4,
-            UserSetSelector_UserSet5 = 5
-        } UserSetSelectorEnum;
-
-        
-        GT1920CCamera (
-            const char         *pCameraID,
-            const char         *pCameraName,
-            const char         *pCameraModel,
-            const char         *pCameraSerialNumber,
-            const char         *pInterfaceID,
-            VmbInterfaceType    interfaceType,
-            const char         *pInterfaceName,
-            const char         *pInterfaceSerialNumber,
-            VmbAccessModeType   interfacePermittedAccess );
-
-
-        // Category /Acquisition
-        VmbErrorType AcquisitionAbort ();
-        VmbErrorType GetAcquisitionAbortFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetAcquisitionFrameCount (VmbInt64_t & value);
-        VmbErrorType SetAcquisitionFrameCount (VmbInt64_t value);
-        VmbErrorType GetAcquisitionFrameCountFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetAcquisitionFrameRateAbs (double & value);
-        VmbErrorType SetAcquisitionFrameRateAbs (double value);
-        VmbErrorType GetAcquisitionFrameRateAbsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetAcquisitionFrameRateLimit (double & value);
-        VmbErrorType GetAcquisitionFrameRateLimitFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetAcquisitionMode (AcquisitionModeEnum & value);
-        VmbErrorType SetAcquisitionMode (AcquisitionModeEnum value);
-        VmbErrorType GetAcquisitionModeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType AcquisitionStart ();
-        VmbErrorType GetAcquisitionStartFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType AcquisitionStop ();
-        VmbErrorType GetAcquisitionStopFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetRecorderPreEventCount (VmbInt64_t & value);
-        VmbErrorType SetRecorderPreEventCount (VmbInt64_t value);
-        VmbErrorType GetRecorderPreEventCountFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Acquisition/Trigger
-        VmbErrorType GetTriggerActivation (TriggerActivationEnum & value);
-        VmbErrorType SetTriggerActivation (TriggerActivationEnum value);
-        VmbErrorType GetTriggerActivationFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetTriggerDelayAbs (double & value);
-        VmbErrorType SetTriggerDelayAbs (double value);
-        VmbErrorType GetTriggerDelayAbsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetTriggerMode (TriggerModeEnum & value);
-        VmbErrorType SetTriggerMode (TriggerModeEnum value);
-        VmbErrorType GetTriggerModeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetTriggerOverlap (TriggerOverlapEnum & value);
-        VmbErrorType SetTriggerOverlap (TriggerOverlapEnum value);
-        VmbErrorType GetTriggerOverlapFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetTriggerSelector (TriggerSelectorEnum & value);
-        VmbErrorType SetTriggerSelector (TriggerSelectorEnum value);
-        VmbErrorType GetTriggerSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType TriggerSoftware ();
-        VmbErrorType GetTriggerSoftwareFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetTriggerSource (TriggerSourceEnum & value);
-        VmbErrorType SetTriggerSource (TriggerSourceEnum value);
-        VmbErrorType GetTriggerSourceFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /ActionControl
-        VmbErrorType GetActionDeviceKey (VmbInt64_t & value);
-        VmbErrorType SetActionDeviceKey (VmbInt64_t value);
-        VmbErrorType GetActionDeviceKeyFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetActionGroupKey (VmbInt64_t & value);
-        VmbErrorType SetActionGroupKey (VmbInt64_t value);
-        VmbErrorType GetActionGroupKeyFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetActionGroupMask (VmbInt64_t & value);
-        VmbErrorType SetActionGroupMask (VmbInt64_t value);
-        VmbErrorType GetActionGroupMaskFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetActionSelector (VmbInt64_t & value);
-        VmbErrorType SetActionSelector (VmbInt64_t value);
-        VmbErrorType GetActionSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /BufferHandlingControl
-        VmbErrorType GetStreamAnnounceBufferMinimum (VmbInt64_t & value);
-        VmbErrorType GetStreamAnnounceBufferMinimumFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStreamAnnouncedBufferCount (VmbInt64_t & value);
-        VmbErrorType GetStreamAnnouncedBufferCountFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStreamBufferHandlingMode (StreamBufferHandlingModeEnum & value);
-        VmbErrorType SetStreamBufferHandlingMode (StreamBufferHandlingModeEnum value);
-        VmbErrorType GetStreamBufferHandlingModeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls
-        VmbErrorType GetDefectMaskEnable (bool & value);
-        VmbErrorType SetDefectMaskEnable (bool value);
-        VmbErrorType GetDefectMaskEnableFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGamma (double & value);
-        VmbErrorType SetGamma (double value);
-        VmbErrorType GetGammaFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetHue (double & value);
-        VmbErrorType SetHue (double value);
-        VmbErrorType GetHueFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSaturation (double & value);
-        VmbErrorType SetSaturation (double value);
-        VmbErrorType GetSaturationFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/ColorTransformationControl
-        VmbErrorType GetColorTransformationMode (ColorTransformationModeEnum & value);
-        VmbErrorType SetColorTransformationMode (ColorTransformationModeEnum value);
-        VmbErrorType GetColorTransformationModeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetColorTransformationSelector (ColorTransformationSelectorEnum & value);
-        VmbErrorType SetColorTransformationSelector (ColorTransformationSelectorEnum value);
-        VmbErrorType GetColorTransformationSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetColorTransformationValue (double & value);
-        VmbErrorType SetColorTransformationValue (double value);
-        VmbErrorType GetColorTransformationValueFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetColorTransformationValueSelector (ColorTransformationValueSelectorEnum & value);
-        VmbErrorType SetColorTransformationValueSelector (ColorTransformationValueSelectorEnum value);
-        VmbErrorType GetColorTransformationValueSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/DSPSubregion
-        VmbErrorType GetDSPSubregionBottom (VmbInt64_t & value);
-        VmbErrorType SetDSPSubregionBottom (VmbInt64_t value);
-        VmbErrorType GetDSPSubregionBottomFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDSPSubregionLeft (VmbInt64_t & value);
-        VmbErrorType SetDSPSubregionLeft (VmbInt64_t value);
-        VmbErrorType GetDSPSubregionLeftFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDSPSubregionRight (VmbInt64_t & value);
-        VmbErrorType SetDSPSubregionRight (VmbInt64_t value);
-        VmbErrorType GetDSPSubregionRightFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDSPSubregionTop (VmbInt64_t & value);
-        VmbErrorType SetDSPSubregionTop (VmbInt64_t value);
-        VmbErrorType GetDSPSubregionTopFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/Exposure
-        VmbErrorType GetExposureAuto (ExposureAutoEnum & value);
-        VmbErrorType SetExposureAuto (ExposureAutoEnum value);
-        VmbErrorType GetExposureAutoFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetExposureMode (ExposureModeEnum & value);
-        VmbErrorType SetExposureMode (ExposureModeEnum value);
-        VmbErrorType GetExposureModeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetExposureTimeAbs (double & value);
-        VmbErrorType SetExposureTimeAbs (double value);
-        VmbErrorType GetExposureTimeAbsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/Exposure/ExposureAutoControl
-        VmbErrorType GetExposureAutoAdjustTol (VmbInt64_t & value);
-        VmbErrorType SetExposureAutoAdjustTol (VmbInt64_t value);
-        VmbErrorType GetExposureAutoAdjustTolFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetExposureAutoAlg (ExposureAutoAlgEnum & value);
-        VmbErrorType SetExposureAutoAlg (ExposureAutoAlgEnum value);
-        VmbErrorType GetExposureAutoAlgFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetExposureAutoMax (VmbInt64_t & value);
-        VmbErrorType SetExposureAutoMax (VmbInt64_t value);
-        VmbErrorType GetExposureAutoMaxFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetExposureAutoMin (VmbInt64_t & value);
-        VmbErrorType SetExposureAutoMin (VmbInt64_t value);
-        VmbErrorType GetExposureAutoMinFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetExposureAutoOutliers (VmbInt64_t & value);
-        VmbErrorType SetExposureAutoOutliers (VmbInt64_t value);
-        VmbErrorType GetExposureAutoOutliersFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetExposureAutoRate (VmbInt64_t & value);
-        VmbErrorType SetExposureAutoRate (VmbInt64_t value);
-        VmbErrorType GetExposureAutoRateFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetExposureAutoTarget (VmbInt64_t & value);
-        VmbErrorType SetExposureAutoTarget (VmbInt64_t value);
-        VmbErrorType GetExposureAutoTargetFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/GainControl
-        VmbErrorType GetGain (double & value);
-        VmbErrorType SetGain (double value);
-        VmbErrorType GetGainFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGainAuto (GainAutoEnum & value);
-        VmbErrorType SetGainAuto (GainAutoEnum value);
-        VmbErrorType GetGainAutoFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGainSelector (GainSelectorEnum & value);
-        VmbErrorType SetGainSelector (GainSelectorEnum value);
-        VmbErrorType GetGainSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/GainControl/GainAutoControl
-        VmbErrorType GetGainAutoAdjustTol (VmbInt64_t & value);
-        VmbErrorType SetGainAutoAdjustTol (VmbInt64_t value);
-        VmbErrorType GetGainAutoAdjustTolFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGainAutoMax (double & value);
-        VmbErrorType SetGainAutoMax (double value);
-        VmbErrorType GetGainAutoMaxFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGainAutoMin (double & value);
-        VmbErrorType SetGainAutoMin (double value);
-        VmbErrorType GetGainAutoMinFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGainAutoOutliers (VmbInt64_t & value);
-        VmbErrorType SetGainAutoOutliers (VmbInt64_t value);
-        VmbErrorType GetGainAutoOutliersFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGainAutoRate (VmbInt64_t & value);
-        VmbErrorType SetGainAutoRate (VmbInt64_t value);
-        VmbErrorType GetGainAutoRateFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGainAutoTarget (VmbInt64_t & value);
-        VmbErrorType SetGainAutoTarget (VmbInt64_t value);
-        VmbErrorType GetGainAutoTargetFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/Iris
-        VmbErrorType GetIrisAutoTarget (VmbInt64_t & value);
-        VmbErrorType SetIrisAutoTarget (VmbInt64_t value);
-        VmbErrorType GetIrisAutoTargetFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetIrisMode (IrisModeEnum & value);
-        VmbErrorType SetIrisMode (IrisModeEnum value);
-        VmbErrorType GetIrisModeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetIrisVideoLevel (VmbInt64_t & value);
-        VmbErrorType GetIrisVideoLevelFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/Iris/LensDCIris
-        VmbErrorType GetLensDCDriveStrength (VmbInt64_t & value);
-        VmbErrorType SetLensDCDriveStrength (VmbInt64_t value);
-        VmbErrorType GetLensDCDriveStrengthFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/Iris/LensPIris
-        VmbErrorType GetLensPIrisFrequency (VmbInt64_t & value);
-        VmbErrorType SetLensPIrisFrequency (VmbInt64_t value);
-        VmbErrorType GetLensPIrisFrequencyFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetLensPIrisNumSteps (VmbInt64_t & value);
-        VmbErrorType SetLensPIrisNumSteps (VmbInt64_t value);
-        VmbErrorType GetLensPIrisNumStepsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetLensPIrisPosition (VmbInt64_t & value);
-        VmbErrorType SetLensPIrisPosition (VmbInt64_t value);
-        VmbErrorType GetLensPIrisPositionFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/LUTControl
-        VmbErrorType GetLUTEnable (bool & value);
-        VmbErrorType SetLUTEnable (bool value);
-        VmbErrorType GetLUTEnableFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetLUTIndex (VmbInt64_t & value);
-        VmbErrorType SetLUTIndex (VmbInt64_t value);
-        VmbErrorType GetLUTIndexFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType LUTLoadAll ();
-        VmbErrorType GetLUTLoadAllFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetLUTMode (LUTModeEnum & value);
-        VmbErrorType SetLUTMode (LUTModeEnum value);
-        VmbErrorType GetLUTModeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType LUTSaveAll ();
-        VmbErrorType GetLUTSaveAllFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetLUTSelector (LUTSelectorEnum & value);
-        VmbErrorType SetLUTSelector (LUTSelectorEnum value);
-        VmbErrorType GetLUTSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetLUTValue (VmbInt64_t & value);
-        VmbErrorType SetLUTValue (VmbInt64_t value);
-        VmbErrorType GetLUTValueFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/LUTControl/LUTInfo
-        VmbErrorType GetLUTAddress (VmbInt64_t & value);
-        VmbErrorType GetLUTAddressFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetLUTBitDepthIn (VmbInt64_t & value);
-        VmbErrorType GetLUTBitDepthInFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetLUTBitDepthOut (VmbInt64_t & value);
-        VmbErrorType GetLUTBitDepthOutFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetLUTSizeBytes (VmbInt64_t & value);
-        VmbErrorType GetLUTSizeBytesFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/SubstrateVoltage
-        VmbErrorType GetVsubValue (VmbInt64_t & value);
-        VmbErrorType GetVsubValueFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/Whitebalance
-        VmbErrorType GetBalanceRatioAbs (double & value);
-        VmbErrorType SetBalanceRatioAbs (double value);
-        VmbErrorType GetBalanceRatioAbsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetBalanceRatioSelector (BalanceRatioSelectorEnum & value);
-        VmbErrorType SetBalanceRatioSelector (BalanceRatioSelectorEnum value);
-        VmbErrorType GetBalanceRatioSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetBalanceWhiteAuto (BalanceWhiteAutoEnum & value);
-        VmbErrorType SetBalanceWhiteAuto (BalanceWhiteAutoEnum value);
-        VmbErrorType GetBalanceWhiteAutoFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Controls/Whitebalance/BalanceWhiteAutoControl
-        VmbErrorType GetBalanceWhiteAutoAdjustTol (VmbInt64_t & value);
-        VmbErrorType SetBalanceWhiteAutoAdjustTol (VmbInt64_t value);
-        VmbErrorType GetBalanceWhiteAutoAdjustTolFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetBalanceWhiteAutoRate (VmbInt64_t & value);
-        VmbErrorType SetBalanceWhiteAutoRate (VmbInt64_t value);
-        VmbErrorType GetBalanceWhiteAutoRateFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /DeviceStatus
-        VmbErrorType GetDeviceTemperature (double & value);
-        VmbErrorType GetDeviceTemperatureFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDeviceTemperatureSelector (DeviceTemperatureSelectorEnum & value);
-        VmbErrorType SetDeviceTemperatureSelector (DeviceTemperatureSelectorEnum value);
-        VmbErrorType GetDeviceTemperatureSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /EventControl
-        VmbErrorType GetEventNotification (EventNotificationEnum & value);
-        VmbErrorType SetEventNotification (EventNotificationEnum value);
-        VmbErrorType GetEventNotificationFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventSelector (EventSelectorEnum & value);
-        VmbErrorType SetEventSelector (EventSelectorEnum value);
-        VmbErrorType GetEventSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventsEnable1 (VmbInt64_t & value);
-        VmbErrorType SetEventsEnable1 (VmbInt64_t value);
-        VmbErrorType GetEventsEnable1Feature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /EventControl/EventData
-        VmbErrorType GetEventFrameTriggerReadyFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventFrameTriggerReadyFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventFrameTriggerReadyTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventFrameTriggerReadyTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventFrameTriggerTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventFrameTriggerTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine1FallingEdgeFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventLine1FallingEdgeFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine1FallingEdgeTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventLine1FallingEdgeTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine1RisingEdgeFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventLine1RisingEdgeFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine1RisingEdgeTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventLine1RisingEdgeTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine2FallingEdgeFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventLine2FallingEdgeFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine2FallingEdgeTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventLine2FallingEdgeTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine2RisingEdgeFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventLine2RisingEdgeFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine2RisingEdgeTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventLine2RisingEdgeTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventOverflowFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventOverflowFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventOverflowTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventOverflowTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventPtpSyncLockedFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventPtpSyncLockedFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventPtpSyncLockedTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventPtpSyncLockedTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventPtpSyncLostFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventPtpSyncLostFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventPtpSyncLostTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventPtpSyncLostTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAcquisitionEndFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventAcquisitionEndFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAcquisitionEndTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventAcquisitionEndTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAcquisitionRecordTriggerFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventAcquisitionRecordTriggerFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAcquisitionRecordTriggerTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventAcquisitionRecordTriggerTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAcquisitionStartFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventAcquisitionStartFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAcquisitionStartTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventAcquisitionStartTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAction0FrameID (VmbInt64_t & value);
-        VmbErrorType GetEventAction0FrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAction0Timestamp (VmbInt64_t & value);
-        VmbErrorType GetEventAction0TimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAction1FrameID (VmbInt64_t & value);
-        VmbErrorType GetEventAction1FrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAction1Timestamp (VmbInt64_t & value);
-        VmbErrorType GetEventAction1TimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventErrorFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventErrorFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventErrorTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventErrorTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventExposureEndFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventExposureEndFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventExposureEndTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventExposureEndTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventExposureStartFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventExposureStartFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventExposureStartTimestamp (VmbInt64_t & value);
-        VmbErrorType GetEventExposureStartTimestampFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventFrameTriggerFrameID (VmbInt64_t & value);
-        VmbErrorType GetEventFrameTriggerFrameIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /EventControl/EventID
-        VmbErrorType GetEventPtpSyncLost (VmbInt64_t & value);
-        VmbErrorType GetEventPtpSyncLostFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventPtpSyncLocked (VmbInt64_t & value);
-        VmbErrorType GetEventPtpSyncLockedFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventOverflow (VmbInt64_t & value);
-        VmbErrorType GetEventOverflowFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine2RisingEdge (VmbInt64_t & value);
-        VmbErrorType GetEventLine2RisingEdgeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine2FallingEdge (VmbInt64_t & value);
-        VmbErrorType GetEventLine2FallingEdgeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine1RisingEdge (VmbInt64_t & value);
-        VmbErrorType GetEventLine1RisingEdgeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventLine1FallingEdge (VmbInt64_t & value);
-        VmbErrorType GetEventLine1FallingEdgeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventFrameTriggerReady (VmbInt64_t & value);
-        VmbErrorType GetEventFrameTriggerReadyFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventFrameTrigger (VmbInt64_t & value);
-        VmbErrorType GetEventFrameTriggerFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventExposureStart (VmbInt64_t & value);
-        VmbErrorType GetEventExposureStartFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventExposureEnd (VmbInt64_t & value);
-        VmbErrorType GetEventExposureEndFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventError (VmbInt64_t & value);
-        VmbErrorType GetEventErrorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAction1 (VmbInt64_t & value);
-        VmbErrorType GetEventAction1Feature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAction0 (VmbInt64_t & value);
-        VmbErrorType GetEventAction0Feature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAcquisitionStart (VmbInt64_t & value);
-        VmbErrorType GetEventAcquisitionStartFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAcquisitionRecordTrigger (VmbInt64_t & value);
-        VmbErrorType GetEventAcquisitionRecordTriggerFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetEventAcquisitionEnd (VmbInt64_t & value);
-        VmbErrorType GetEventAcquisitionEndFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /GigE
-        VmbErrorType GetBandwidthControlMode (BandwidthControlModeEnum & value);
-        VmbErrorType SetBandwidthControlMode (BandwidthControlModeEnum value);
-        VmbErrorType GetBandwidthControlModeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetChunkModeActive (bool & value);
-        VmbErrorType SetChunkModeActive (bool value);
-        VmbErrorType GetChunkModeActiveFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGevSCPSPacketSize (VmbInt64_t & value);
-        VmbErrorType SetGevSCPSPacketSize (VmbInt64_t value);
-        VmbErrorType GetGevSCPSPacketSizeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetNonImagePayloadSize (VmbInt64_t & value);
-        VmbErrorType GetNonImagePayloadSizeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetPayloadSize (VmbInt64_t & value);
-        VmbErrorType GetPayloadSizeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStreamBytesPerSecond (VmbInt64_t & value);
-        VmbErrorType SetStreamBytesPerSecond (VmbInt64_t value);
-        VmbErrorType GetStreamBytesPerSecondFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStreamFrameRateConstrain (bool & value);
-        VmbErrorType SetStreamFrameRateConstrain (bool value);
-        VmbErrorType GetStreamFrameRateConstrainFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /GigE/Configuration
-        VmbErrorType GetGevIPConfigurationMode (GevIPConfigurationModeEnum & value);
-        VmbErrorType GetGevIPConfigurationModeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /GigE/Current
-        VmbErrorType GetGevCurrentDefaultGateway (VmbInt64_t & value);
-        VmbErrorType GetGevCurrentDefaultGatewayFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGevCurrentIPAddress (VmbInt64_t & value);
-        VmbErrorType GetGevCurrentIPAddressFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGevCurrentSubnetMask (VmbInt64_t & value);
-        VmbErrorType GetGevCurrentSubnetMaskFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /GigE/GVCP
-        VmbErrorType GetGVCPCmdRetries (VmbInt64_t & value);
-        VmbErrorType SetGVCPCmdRetries (VmbInt64_t value);
-        VmbErrorType GetGVCPCmdRetriesFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGVCPCmdTimeout (VmbInt64_t & value);
-        VmbErrorType SetGVCPCmdTimeout (VmbInt64_t value);
-        VmbErrorType GetGVCPCmdTimeoutFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGevHeartbeatInterval (VmbInt64_t & value);
-        VmbErrorType SetGevHeartbeatInterval (VmbInt64_t value);
-        VmbErrorType GetGevHeartbeatIntervalFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGevHeartbeatTimeout (VmbInt64_t & value);
-        VmbErrorType SetGevHeartbeatTimeout (VmbInt64_t value);
-        VmbErrorType GetGevHeartbeatTimeoutFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /GigE/PTP
-        VmbErrorType GetPtpAcquisitionGateTime (VmbInt64_t & value);
-        VmbErrorType SetPtpAcquisitionGateTime (VmbInt64_t value);
-        VmbErrorType GetPtpAcquisitionGateTimeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetPtpMode (PtpModeEnum & value);
-        VmbErrorType SetPtpMode (PtpModeEnum value);
-        VmbErrorType GetPtpModeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetPtpStatus (PtpStatusEnum & value);
-        VmbErrorType GetPtpStatusFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /GigE/Persistent
-        VmbErrorType GetGevPersistentDefaultGateway (VmbInt64_t & value);
-        VmbErrorType GetGevPersistentDefaultGatewayFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGevPersistentIPAddress (VmbInt64_t & value);
-        VmbErrorType GetGevPersistentIPAddressFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGevPersistentSubnetMask (VmbInt64_t & value);
-        VmbErrorType GetGevPersistentSubnetMaskFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /GigE/StreamHold
-        VmbErrorType GetStreamHoldCapacity (VmbInt64_t & value);
-        VmbErrorType GetStreamHoldCapacityFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStreamHoldEnable (StreamHoldEnableEnum & value);
-        VmbErrorType SetStreamHoldEnable (StreamHoldEnableEnum value);
-        VmbErrorType GetStreamHoldEnableFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /GigE/Timestamp
-        VmbErrorType GevTimestampControlLatch ();
-        VmbErrorType GetGevTimestampControlLatchFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GevTimestampControlReset ();
-        VmbErrorType GetGevTimestampControlResetFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGevTimestampTickFrequency (VmbInt64_t & value);
-        VmbErrorType GetGevTimestampTickFrequencyFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGevTimestampValue (VmbInt64_t & value);
-        VmbErrorType GetGevTimestampValueFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /IO/Strobe
-        VmbErrorType GetStrobeDelay (VmbInt64_t & value);
-        VmbErrorType SetStrobeDelay (VmbInt64_t value);
-        VmbErrorType GetStrobeDelayFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStrobeDuration (VmbInt64_t & value);
-        VmbErrorType SetStrobeDuration (VmbInt64_t value);
-        VmbErrorType GetStrobeDurationFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStrobeDurationMode (StrobeDurationModeEnum & value);
-        VmbErrorType SetStrobeDurationMode (StrobeDurationModeEnum value);
-        VmbErrorType GetStrobeDurationModeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStrobeSource (StrobeSourceEnum & value);
-        VmbErrorType SetStrobeSource (StrobeSourceEnum value);
-        VmbErrorType GetStrobeSourceFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /IO/SyncIn
-        VmbErrorType GetSyncInGlitchFilter (VmbInt64_t & value);
-        VmbErrorType SetSyncInGlitchFilter (VmbInt64_t value);
-        VmbErrorType GetSyncInGlitchFilterFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSyncInLevels (VmbInt64_t & value);
-        VmbErrorType GetSyncInLevelsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSyncInSelector (SyncInSelectorEnum & value);
-        VmbErrorType SetSyncInSelector (SyncInSelectorEnum value);
-        VmbErrorType GetSyncInSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /IO/SyncOut
-        VmbErrorType GetSyncOutLevels (VmbInt64_t & value);
-        VmbErrorType SetSyncOutLevels (VmbInt64_t value);
-        VmbErrorType GetSyncOutLevelsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSyncOutPolarity (SyncOutPolarityEnum & value);
-        VmbErrorType SetSyncOutPolarity (SyncOutPolarityEnum value);
-        VmbErrorType GetSyncOutPolarityFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSyncOutSelector (SyncOutSelectorEnum & value);
-        VmbErrorType SetSyncOutSelector (SyncOutSelectorEnum value);
-        VmbErrorType GetSyncOutSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSyncOutSource (SyncOutSourceEnum & value);
-        VmbErrorType SetSyncOutSource (SyncOutSourceEnum value);
-        VmbErrorType GetSyncOutSourceFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /ImageFormat
-        VmbErrorType GetHeight (VmbInt64_t & value);
-        VmbErrorType SetHeight (VmbInt64_t value);
-        VmbErrorType GetHeightFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetHeightMax (VmbInt64_t & value);
-        VmbErrorType GetHeightMaxFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetImageSize (VmbInt64_t & value);
-        VmbErrorType GetImageSizeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetOffsetX (VmbInt64_t & value);
-        VmbErrorType SetOffsetX (VmbInt64_t value);
-        VmbErrorType GetOffsetXFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetOffsetY (VmbInt64_t & value);
-        VmbErrorType SetOffsetY (VmbInt64_t value);
-        VmbErrorType GetOffsetYFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetPixelFormat (PixelFormatEnum & value);
-        VmbErrorType SetPixelFormat (PixelFormatEnum value);
-        VmbErrorType GetPixelFormatFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetWidth (VmbInt64_t & value);
-        VmbErrorType SetWidth (VmbInt64_t value);
-        VmbErrorType GetWidthFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetWidthMax (VmbInt64_t & value);
-        VmbErrorType GetWidthMaxFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /ImageMode
-        VmbErrorType GetBinningHorizontal (VmbInt64_t & value);
-        VmbErrorType SetBinningHorizontal (VmbInt64_t value);
-        VmbErrorType GetBinningHorizontalFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetBinningVertical (VmbInt64_t & value);
-        VmbErrorType SetBinningVertical (VmbInt64_t value);
-        VmbErrorType GetBinningVerticalFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDecimationHorizontal (VmbInt64_t & value);
-        VmbErrorType SetDecimationHorizontal (VmbInt64_t value);
-        VmbErrorType GetDecimationHorizontalFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDecimationVertical (VmbInt64_t & value);
-        VmbErrorType SetDecimationVertical (VmbInt64_t value);
-        VmbErrorType GetDecimationVerticalFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetReverseX (bool & value);
-        VmbErrorType SetReverseX (bool value);
-        VmbErrorType GetReverseXFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetReverseY (bool & value);
-        VmbErrorType SetReverseY (bool value);
-        VmbErrorType GetReverseYFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSensorDigitizationTaps (SensorDigitizationTapsEnum & value);
-        VmbErrorType SetSensorDigitizationTaps (SensorDigitizationTapsEnum value);
-        VmbErrorType GetSensorDigitizationTapsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSensorHeight (VmbInt64_t & value);
-        VmbErrorType GetSensorHeightFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSensorTaps (SensorTapsEnum & value);
-        VmbErrorType GetSensorTapsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSensorWidth (VmbInt64_t & value);
-        VmbErrorType GetSensorWidthFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Info
-        VmbErrorType GetDeviceFirmwareVersion (std::string & value);
-        VmbErrorType GetDeviceFirmwareVersionFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDeviceID (std::string & value);
-        VmbErrorType GetDeviceIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDeviceModelName (std::string & value);
-        VmbErrorType GetDeviceModelNameFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDevicePartNumber (std::string & value);
-        VmbErrorType GetDevicePartNumberFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDeviceScanType (DeviceScanTypeEnum & value);
-        VmbErrorType GetDeviceScanTypeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDeviceUserID (std::string & value);
-        VmbErrorType SetDeviceUserID (const char * value);
-        VmbErrorType GetDeviceUserIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetDeviceVendorName (std::string & value);
-        VmbErrorType GetDeviceVendorNameFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetFirmwareVerBuild (VmbInt64_t & value);
-        VmbErrorType GetFirmwareVerBuildFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetFirmwareVerMajor (VmbInt64_t & value);
-        VmbErrorType GetFirmwareVerMajorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetFirmwareVerMinor (VmbInt64_t & value);
-        VmbErrorType GetFirmwareVerMinorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGevDeviceMACAddress (VmbInt64_t & value);
-        VmbErrorType GetGevDeviceMACAddressFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSensorBits (VmbInt64_t & value);
-        VmbErrorType GetSensorBitsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetSensorType (SensorTypeEnum & value);
-        VmbErrorType GetSensorTypeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /SavedUserSets
-        VmbErrorType GetUserSetDefaultSelector (UserSetDefaultSelectorEnum & value);
-        VmbErrorType SetUserSetDefaultSelector (UserSetDefaultSelectorEnum value);
-        VmbErrorType GetUserSetDefaultSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType UserSetLoad ();
-        VmbErrorType GetUserSetLoadFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType UserSetSave ();
-        VmbErrorType GetUserSetSaveFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetUserSetSelector (UserSetSelectorEnum & value);
-        VmbErrorType SetUserSetSelector (UserSetSelectorEnum value);
-        VmbErrorType GetUserSetSelectorFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Stream/Info
-        VmbErrorType GetGVSPFilterVersion (std::string & value);
-        VmbErrorType GetGVSPFilterVersionFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Stream/Multicast
-        VmbErrorType GetMulticastEnable (bool & value);
-        VmbErrorType SetMulticastEnable (bool value);
-        VmbErrorType GetMulticastEnableFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetMulticastIPAddress (VmbInt64_t & value);
-        VmbErrorType SetMulticastIPAddress (VmbInt64_t value);
-        VmbErrorType GetMulticastIPAddressFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Stream/Settings
-        VmbErrorType GVSPAdjustPacketSize ();
-        VmbErrorType GetGVSPAdjustPacketSizeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGVSPBurstSize (VmbInt64_t & value);
-        VmbErrorType SetGVSPBurstSize (VmbInt64_t value);
-        VmbErrorType GetGVSPBurstSizeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGVSPDriver (GVSPDriverEnum & value);
-        VmbErrorType SetGVSPDriver (GVSPDriverEnum value);
-        VmbErrorType GetGVSPDriverFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGVSPHostReceiveBufferSize (VmbInt64_t & value);
-        VmbErrorType SetGVSPHostReceiveBufferSize (VmbInt64_t value);
-        VmbErrorType GetGVSPHostReceiveBufferSizeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGVSPMaxLookBack (VmbInt64_t & value);
-        VmbErrorType SetGVSPMaxLookBack (VmbInt64_t value);
-        VmbErrorType GetGVSPMaxLookBackFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGVSPMaxRequests (VmbInt64_t & value);
-        VmbErrorType SetGVSPMaxRequests (VmbInt64_t value);
-        VmbErrorType GetGVSPMaxRequestsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGVSPMaxWaitSize (VmbInt64_t & value);
-        VmbErrorType SetGVSPMaxWaitSize (VmbInt64_t value);
-        VmbErrorType GetGVSPMaxWaitSizeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGVSPMissingSize (VmbInt64_t & value);
-        VmbErrorType SetGVSPMissingSize (VmbInt64_t value);
-        VmbErrorType GetGVSPMissingSizeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGVSPPacketSize (VmbInt64_t & value);
-        VmbErrorType SetGVSPPacketSize (VmbInt64_t value);
-        VmbErrorType GetGVSPPacketSizeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGVSPTiltingSize (VmbInt64_t & value);
-        VmbErrorType SetGVSPTiltingSize (VmbInt64_t value);
-        VmbErrorType GetGVSPTiltingSizeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetGVSPTimeout (VmbInt64_t & value);
-        VmbErrorType SetGVSPTimeout (VmbInt64_t value);
-        VmbErrorType GetGVSPTimeoutFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /Stream/Statistics
-        VmbErrorType GetStatFrameDelivered (VmbInt64_t & value);
-        VmbErrorType GetStatFrameDeliveredFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatFrameDropped (VmbInt64_t & value);
-        VmbErrorType GetStatFrameDroppedFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatFrameRate (double & value);
-        VmbErrorType GetStatFrameRateFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatFrameRescued (VmbInt64_t & value);
-        VmbErrorType GetStatFrameRescuedFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatFrameShoved (VmbInt64_t & value);
-        VmbErrorType GetStatFrameShovedFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatFrameUnderrun (VmbInt64_t & value);
-        VmbErrorType GetStatFrameUnderrunFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatLocalRate (double & value);
-        VmbErrorType GetStatLocalRateFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatPacketErrors (VmbInt64_t & value);
-        VmbErrorType GetStatPacketErrorsFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatPacketMissed (VmbInt64_t & value);
-        VmbErrorType GetStatPacketMissedFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatPacketReceived (VmbInt64_t & value);
-        VmbErrorType GetStatPacketReceivedFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatPacketRequested (VmbInt64_t & value);
-        VmbErrorType GetStatPacketRequestedFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatPacketResent (VmbInt64_t & value);
-        VmbErrorType GetStatPacketResentFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatPacketUnavailable (VmbInt64_t & value);
-        VmbErrorType GetStatPacketUnavailableFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStatTimeElapsed (double & value);
-        VmbErrorType GetStatTimeElapsedFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-        // Category /StreamInformation
-        VmbErrorType GetStreamID (std::string & value);
-        VmbErrorType GetStreamIDFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-        VmbErrorType GetStreamType (StreamTypeEnum & value);
-        VmbErrorType GetStreamTypeFeature (AVT::VmbAPI::FeaturePtr & feature);
-
-
-    private:
-        AVT::VmbAPI::FeaturePtr m_AcquisitionAbortFeature;
-        AVT::VmbAPI::FeaturePtr m_AcquisitionFrameCountFeature;
-        AVT::VmbAPI::FeaturePtr m_AcquisitionFrameRateAbsFeature;
-        AVT::VmbAPI::FeaturePtr m_AcquisitionFrameRateLimitFeature;
-        AVT::VmbAPI::FeaturePtr m_AcquisitionModeFeature;
-        AVT::VmbAPI::FeaturePtr m_AcquisitionStartFeature;
-        AVT::VmbAPI::FeaturePtr m_AcquisitionStopFeature;
-        AVT::VmbAPI::FeaturePtr m_RecorderPreEventCountFeature;
-        AVT::VmbAPI::FeaturePtr m_TriggerActivationFeature;
-        AVT::VmbAPI::FeaturePtr m_TriggerDelayAbsFeature;
-        AVT::VmbAPI::FeaturePtr m_TriggerModeFeature;
-        AVT::VmbAPI::FeaturePtr m_TriggerOverlapFeature;
-        AVT::VmbAPI::FeaturePtr m_TriggerSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_TriggerSoftwareFeature;
-        AVT::VmbAPI::FeaturePtr m_TriggerSourceFeature;
-        AVT::VmbAPI::FeaturePtr m_ActionDeviceKeyFeature;
-        AVT::VmbAPI::FeaturePtr m_ActionGroupKeyFeature;
-        AVT::VmbAPI::FeaturePtr m_ActionGroupMaskFeature;
-        AVT::VmbAPI::FeaturePtr m_ActionSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_StreamAnnounceBufferMinimumFeature;
-        AVT::VmbAPI::FeaturePtr m_StreamAnnouncedBufferCountFeature;
-        AVT::VmbAPI::FeaturePtr m_StreamBufferHandlingModeFeature;
-        AVT::VmbAPI::FeaturePtr m_DefectMaskEnableFeature;
-        AVT::VmbAPI::FeaturePtr m_GammaFeature;
-        AVT::VmbAPI::FeaturePtr m_HueFeature;
-        AVT::VmbAPI::FeaturePtr m_SaturationFeature;
-        AVT::VmbAPI::FeaturePtr m_ColorTransformationModeFeature;
-        AVT::VmbAPI::FeaturePtr m_ColorTransformationSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_ColorTransformationValueFeature;
-        AVT::VmbAPI::FeaturePtr m_ColorTransformationValueSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_DSPSubregionBottomFeature;
-        AVT::VmbAPI::FeaturePtr m_DSPSubregionLeftFeature;
-        AVT::VmbAPI::FeaturePtr m_DSPSubregionRightFeature;
-        AVT::VmbAPI::FeaturePtr m_DSPSubregionTopFeature;
-        AVT::VmbAPI::FeaturePtr m_ExposureAutoFeature;
-        AVT::VmbAPI::FeaturePtr m_ExposureModeFeature;
-        AVT::VmbAPI::FeaturePtr m_ExposureTimeAbsFeature;
-        AVT::VmbAPI::FeaturePtr m_ExposureAutoAdjustTolFeature;
-        AVT::VmbAPI::FeaturePtr m_ExposureAutoAlgFeature;
-        AVT::VmbAPI::FeaturePtr m_ExposureAutoMaxFeature;
-        AVT::VmbAPI::FeaturePtr m_ExposureAutoMinFeature;
-        AVT::VmbAPI::FeaturePtr m_ExposureAutoOutliersFeature;
-        AVT::VmbAPI::FeaturePtr m_ExposureAutoRateFeature;
-        AVT::VmbAPI::FeaturePtr m_ExposureAutoTargetFeature;
-        AVT::VmbAPI::FeaturePtr m_GainFeature;
-        AVT::VmbAPI::FeaturePtr m_GainAutoFeature;
-        AVT::VmbAPI::FeaturePtr m_GainSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_GainAutoAdjustTolFeature;
-        AVT::VmbAPI::FeaturePtr m_GainAutoMaxFeature;
-        AVT::VmbAPI::FeaturePtr m_GainAutoMinFeature;
-        AVT::VmbAPI::FeaturePtr m_GainAutoOutliersFeature;
-        AVT::VmbAPI::FeaturePtr m_GainAutoRateFeature;
-        AVT::VmbAPI::FeaturePtr m_GainAutoTargetFeature;
-        AVT::VmbAPI::FeaturePtr m_IrisAutoTargetFeature;
-        AVT::VmbAPI::FeaturePtr m_IrisModeFeature;
-        AVT::VmbAPI::FeaturePtr m_IrisVideoLevelFeature;
-        AVT::VmbAPI::FeaturePtr m_LensDCDriveStrengthFeature;
-        AVT::VmbAPI::FeaturePtr m_LensPIrisFrequencyFeature;
-        AVT::VmbAPI::FeaturePtr m_LensPIrisNumStepsFeature;
-        AVT::VmbAPI::FeaturePtr m_LensPIrisPositionFeature;
-        AVT::VmbAPI::FeaturePtr m_LUTEnableFeature;
-        AVT::VmbAPI::FeaturePtr m_LUTIndexFeature;
-        AVT::VmbAPI::FeaturePtr m_LUTLoadAllFeature;
-        AVT::VmbAPI::FeaturePtr m_LUTModeFeature;
-        AVT::VmbAPI::FeaturePtr m_LUTSaveAllFeature;
-        AVT::VmbAPI::FeaturePtr m_LUTSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_LUTValueFeature;
-        AVT::VmbAPI::FeaturePtr m_LUTAddressFeature;
-        AVT::VmbAPI::FeaturePtr m_LUTBitDepthInFeature;
-        AVT::VmbAPI::FeaturePtr m_LUTBitDepthOutFeature;
-        AVT::VmbAPI::FeaturePtr m_LUTSizeBytesFeature;
-        AVT::VmbAPI::FeaturePtr m_VsubValueFeature;
-        AVT::VmbAPI::FeaturePtr m_BalanceRatioAbsFeature;
-        AVT::VmbAPI::FeaturePtr m_BalanceRatioSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_BalanceWhiteAutoFeature;
-        AVT::VmbAPI::FeaturePtr m_BalanceWhiteAutoAdjustTolFeature;
-        AVT::VmbAPI::FeaturePtr m_BalanceWhiteAutoRateFeature;
-        AVT::VmbAPI::FeaturePtr m_DeviceTemperatureFeature;
-        AVT::VmbAPI::FeaturePtr m_DeviceTemperatureSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_EventNotificationFeature;
-        AVT::VmbAPI::FeaturePtr m_EventSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_EventsEnable1Feature;
-        AVT::VmbAPI::FeaturePtr m_EventFrameTriggerReadyFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventFrameTriggerReadyTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventFrameTriggerTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine1FallingEdgeFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine1FallingEdgeTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine1RisingEdgeFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine1RisingEdgeTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine2FallingEdgeFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine2FallingEdgeTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine2RisingEdgeFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine2RisingEdgeTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventOverflowFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventOverflowTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventPtpSyncLockedFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventPtpSyncLockedTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventPtpSyncLostFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventPtpSyncLostTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAcquisitionEndFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAcquisitionEndTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAcquisitionRecordTriggerFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAcquisitionRecordTriggerTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAcquisitionStartFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAcquisitionStartTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAction0FrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAction0TimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAction1FrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAction1TimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventErrorFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventErrorTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventExposureEndFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventExposureEndTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventExposureStartFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventExposureStartTimestampFeature;
-        AVT::VmbAPI::FeaturePtr m_EventFrameTriggerFrameIDFeature;
-        AVT::VmbAPI::FeaturePtr m_EventPtpSyncLostFeature;
-        AVT::VmbAPI::FeaturePtr m_EventPtpSyncLockedFeature;
-        AVT::VmbAPI::FeaturePtr m_EventOverflowFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine2RisingEdgeFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine2FallingEdgeFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine1RisingEdgeFeature;
-        AVT::VmbAPI::FeaturePtr m_EventLine1FallingEdgeFeature;
-        AVT::VmbAPI::FeaturePtr m_EventFrameTriggerReadyFeature;
-        AVT::VmbAPI::FeaturePtr m_EventFrameTriggerFeature;
-        AVT::VmbAPI::FeaturePtr m_EventExposureStartFeature;
-        AVT::VmbAPI::FeaturePtr m_EventExposureEndFeature;
-        AVT::VmbAPI::FeaturePtr m_EventErrorFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAction1Feature;
-        AVT::VmbAPI::FeaturePtr m_EventAction0Feature;
-        AVT::VmbAPI::FeaturePtr m_EventAcquisitionStartFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAcquisitionRecordTriggerFeature;
-        AVT::VmbAPI::FeaturePtr m_EventAcquisitionEndFeature;
-        AVT::VmbAPI::FeaturePtr m_BandwidthControlModeFeature;
-        AVT::VmbAPI::FeaturePtr m_ChunkModeActiveFeature;
-        AVT::VmbAPI::FeaturePtr m_GevSCPSPacketSizeFeature;
-        AVT::VmbAPI::FeaturePtr m_NonImagePayloadSizeFeature;
-        AVT::VmbAPI::FeaturePtr m_PayloadSizeFeature;
-        AVT::VmbAPI::FeaturePtr m_StreamBytesPerSecondFeature;
-        AVT::VmbAPI::FeaturePtr m_StreamFrameRateConstrainFeature;
-        AVT::VmbAPI::FeaturePtr m_GevIPConfigurationModeFeature;
-        AVT::VmbAPI::FeaturePtr m_GevCurrentDefaultGatewayFeature;
-        AVT::VmbAPI::FeaturePtr m_GevCurrentIPAddressFeature;
-        AVT::VmbAPI::FeaturePtr m_GevCurrentSubnetMaskFeature;
-        AVT::VmbAPI::FeaturePtr m_GVCPCmdRetriesFeature;
-        AVT::VmbAPI::FeaturePtr m_GVCPCmdTimeoutFeature;
-        AVT::VmbAPI::FeaturePtr m_GevHeartbeatIntervalFeature;
-        AVT::VmbAPI::FeaturePtr m_GevHeartbeatTimeoutFeature;
-        AVT::VmbAPI::FeaturePtr m_PtpAcquisitionGateTimeFeature;
-        AVT::VmbAPI::FeaturePtr m_PtpModeFeature;
-        AVT::VmbAPI::FeaturePtr m_PtpStatusFeature;
-        AVT::VmbAPI::FeaturePtr m_GevPersistentDefaultGatewayFeature;
-        AVT::VmbAPI::FeaturePtr m_GevPersistentIPAddressFeature;
-        AVT::VmbAPI::FeaturePtr m_GevPersistentSubnetMaskFeature;
-        AVT::VmbAPI::FeaturePtr m_StreamHoldCapacityFeature;
-        AVT::VmbAPI::FeaturePtr m_StreamHoldEnableFeature;
-        AVT::VmbAPI::FeaturePtr m_GevTimestampControlLatchFeature;
-        AVT::VmbAPI::FeaturePtr m_GevTimestampControlResetFeature;
-        AVT::VmbAPI::FeaturePtr m_GevTimestampTickFrequencyFeature;
-        AVT::VmbAPI::FeaturePtr m_GevTimestampValueFeature;
-        AVT::VmbAPI::FeaturePtr m_StrobeDelayFeature;
-        AVT::VmbAPI::FeaturePtr m_StrobeDurationFeature;
-        AVT::VmbAPI::FeaturePtr m_StrobeDurationModeFeature;
-        AVT::VmbAPI::FeaturePtr m_StrobeSourceFeature;
-        AVT::VmbAPI::FeaturePtr m_SyncInGlitchFilterFeature;
-        AVT::VmbAPI::FeaturePtr m_SyncInLevelsFeature;
-        AVT::VmbAPI::FeaturePtr m_SyncInSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_SyncOutLevelsFeature;
-        AVT::VmbAPI::FeaturePtr m_SyncOutPolarityFeature;
-        AVT::VmbAPI::FeaturePtr m_SyncOutSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_SyncOutSourceFeature;
-        AVT::VmbAPI::FeaturePtr m_HeightFeature;
-        AVT::VmbAPI::FeaturePtr m_HeightMaxFeature;
-        AVT::VmbAPI::FeaturePtr m_ImageSizeFeature;
-        AVT::VmbAPI::FeaturePtr m_OffsetXFeature;
-        AVT::VmbAPI::FeaturePtr m_OffsetYFeature;
-        AVT::VmbAPI::FeaturePtr m_PixelFormatFeature;
-        AVT::VmbAPI::FeaturePtr m_WidthFeature;
-        AVT::VmbAPI::FeaturePtr m_WidthMaxFeature;
-        AVT::VmbAPI::FeaturePtr m_BinningHorizontalFeature;
-        AVT::VmbAPI::FeaturePtr m_BinningVerticalFeature;
-        AVT::VmbAPI::FeaturePtr m_DecimationHorizontalFeature;
-        AVT::VmbAPI::FeaturePtr m_DecimationVerticalFeature;
-        AVT::VmbAPI::FeaturePtr m_ReverseXFeature;
-        AVT::VmbAPI::FeaturePtr m_ReverseYFeature;
-        AVT::VmbAPI::FeaturePtr m_SensorDigitizationTapsFeature;
-        AVT::VmbAPI::FeaturePtr m_SensorHeightFeature;
-        AVT::VmbAPI::FeaturePtr m_SensorTapsFeature;
-        AVT::VmbAPI::FeaturePtr m_SensorWidthFeature;
-        AVT::VmbAPI::FeaturePtr m_DeviceFirmwareVersionFeature;
-        AVT::VmbAPI::FeaturePtr m_DeviceIDFeature;
-        AVT::VmbAPI::FeaturePtr m_DeviceModelNameFeature;
-        AVT::VmbAPI::FeaturePtr m_DevicePartNumberFeature;
-        AVT::VmbAPI::FeaturePtr m_DeviceScanTypeFeature;
-        AVT::VmbAPI::FeaturePtr m_DeviceUserIDFeature;
-        AVT::VmbAPI::FeaturePtr m_DeviceVendorNameFeature;
-        AVT::VmbAPI::FeaturePtr m_FirmwareVerBuildFeature;
-        AVT::VmbAPI::FeaturePtr m_FirmwareVerMajorFeature;
-        AVT::VmbAPI::FeaturePtr m_FirmwareVerMinorFeature;
-        AVT::VmbAPI::FeaturePtr m_GevDeviceMACAddressFeature;
-        AVT::VmbAPI::FeaturePtr m_SensorBitsFeature;
-        AVT::VmbAPI::FeaturePtr m_SensorTypeFeature;
-        AVT::VmbAPI::FeaturePtr m_UserSetDefaultSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_UserSetLoadFeature;
-        AVT::VmbAPI::FeaturePtr m_UserSetSaveFeature;
-        AVT::VmbAPI::FeaturePtr m_UserSetSelectorFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPFilterVersionFeature;
-        AVT::VmbAPI::FeaturePtr m_MulticastEnableFeature;
-        AVT::VmbAPI::FeaturePtr m_MulticastIPAddressFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPAdjustPacketSizeFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPBurstSizeFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPDriverFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPHostReceiveBufferSizeFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPMaxLookBackFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPMaxRequestsFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPMaxWaitSizeFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPMissingSizeFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPPacketSizeFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPTiltingSizeFeature;
-        AVT::VmbAPI::FeaturePtr m_GVSPTimeoutFeature;
-        AVT::VmbAPI::FeaturePtr m_StatFrameDeliveredFeature;
-        AVT::VmbAPI::FeaturePtr m_StatFrameDroppedFeature;
-        AVT::VmbAPI::FeaturePtr m_StatFrameRateFeature;
-        AVT::VmbAPI::FeaturePtr m_StatFrameRescuedFeature;
-        AVT::VmbAPI::FeaturePtr m_StatFrameShovedFeature;
-        AVT::VmbAPI::FeaturePtr m_StatFrameUnderrunFeature;
-        AVT::VmbAPI::FeaturePtr m_StatLocalRateFeature;
-        AVT::VmbAPI::FeaturePtr m_StatPacketErrorsFeature;
-        AVT::VmbAPI::FeaturePtr m_StatPacketMissedFeature;
-        AVT::VmbAPI::FeaturePtr m_StatPacketReceivedFeature;
-        AVT::VmbAPI::FeaturePtr m_StatPacketRequestedFeature;
-        AVT::VmbAPI::FeaturePtr m_StatPacketResentFeature;
-        AVT::VmbAPI::FeaturePtr m_StatPacketUnavailableFeature;
-        AVT::VmbAPI::FeaturePtr m_StatTimeElapsedFeature;
-        AVT::VmbAPI::FeaturePtr m_StreamIDFeature;
-        AVT::VmbAPI::FeaturePtr m_StreamTypeFeature;
-};
-
-#endif
diff --git a/VimbaGigETL/CTI/x86_64bit/VimbaGigETL.cti b/VimbaGigETL/CTI/x86_64bit/VimbaGigETL.cti
deleted file mode 100644
index 83b1033e2fe210bc8ece75da15ec334de977c000..0000000000000000000000000000000000000000
Binary files a/VimbaGigETL/CTI/x86_64bit/VimbaGigETL.cti and /dev/null differ
diff --git a/VimbaGigETL/CTI/x86_64bit/VimbaGigETL.xml b/VimbaGigETL/CTI/x86_64bit/VimbaGigETL.xml
deleted file mode 100644
index c12cd594411c5e84d3cc2f3a107ab3867f0e2771..0000000000000000000000000000000000000000
--- a/VimbaGigETL/CTI/x86_64bit/VimbaGigETL.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" standalone="no" ?>
-<Settings>
-
-    <!--
-        Use this to activate logging and set filename for logging (path can be absolute or relative to TL)
-        Default behavior if omitted:    Logging is deactivated
-    -->
-    <!-- <LogFileName>VimbaGigETL.log</LogFileName> -->
-
-
-    <!--
-        Append messages to log file or reset log file at each transport layer restart (if logging is enabled)
-        True:                           Always append log messages
-        False:                          Reset log file at each transport layer restart
-        Default behavior if omitted:    Reset log file at each transport layer restart
-    -->	
-    <!-- <AppendLog>False</AppendLog> -->
-
-
-    <!--
-        Set the payload size of one Ethernet frame in Bytes. This is equivalent to the MTU. Increasing this value
-        reduces the CPU load. Only set it to a higher value than 1500 Bytes if the network infrastructure supports Jumbo Frames.
-
-        [numeric value]:              	Set GVSPPacketSize to [numeric value]
-        Minimum:						500
-        Maximum:						16384
-        Default behavior if omitted:    8228 (Jumbo Frames required) or volatile value stored in the cam
-    -->	
-    <!-- <DefaultPacketSize>8228</DefaultPacketSize> -->
-
-
-    <!--
-        Set the initial device discovery mode of each interface.
-        Off:                            No GigE camera detection.
-        Once:                           Detect GigE cameras once during VmbStartup (Vimba user) or TLOpenInterface (GenTL user)
-        Auto:                           Detect GigE cameras permanently.
-        Default behavior if omitted:    Off if used with Vimba, otherwise Auto.
-    -->
-    <!-- <DefaultDeviceDiscovery>Auto</DefaultDeviceDiscovery> -->
-
-</Settings>
diff --git a/VimbaGigETL/Documentation/ReleaseNotes.txt b/VimbaGigETL/Documentation/ReleaseNotes.txt
deleted file mode 100644
index 7fee4fa28ce075692c16465380b0a5a33a70416d..0000000000000000000000000000000000000000
--- a/VimbaGigETL/Documentation/ReleaseNotes.txt
+++ /dev/null
@@ -1,205 +0,0 @@
-===========================================================================
-
-  Vimba GigE Transport Layer - Release Notes 
-  
-  Version: 1.9.0
-  Date:    October 2021
-===========================================================================
-
---------------------------------
-Components and Version Reference  
---------------------------------
-
-Vimba GenICam Transport Layer modules
------------------------------------
-  GigE Transport Layer (VimbaGigETL.cti)              1.9.0*
-
-Tools
------
-  Vimba Driver Installer (VimbaDriverInstaller.exe)   1.1.9
-  
-Windows Filter Driver
-------
-  Vimba GigE Filter Driver (psligvfilter.sys)         1.24.17  (except Windows 10)
-  Vimba GigE Filter Driver (VimbaGigEFilter.sys)      2.5.7*   (Windows 10 only)
- 
----------------------
-Hardware Requirements
----------------------
-PC or laptop with 1 GHz 32-bit or 64-bit x86 processor or better.
-
-ARM board with ARMv7-compatible 32-bit processor (500 MHz or better).
-VFP3 support and Thumb extension are required. 
-
-ARMv8-compatible 64-bit embedded system, for example, Jetson Xavier.
-
-When using Allied Vision GigE cameras, a built-in Gigabit Ethernet network interface or 
-Gigabit Ethernet network card (one or more) is required.
-
-------------
-Installation
-------------            
-The Vimba GigE Transport Layer is part of the Vimba SDK. For instructions on how 
-to install this module, please refer to the Vimba User Manual.
-
-------------
-Known Issues
-------------
-- When experiencing trouble with image acquisition on Linux, try to increase the
-  priority of your application with "sudo -E nice -n -20 <command>".
-
-- A change of the available camera access modes cannot be reported for cameras
-  in different subnets or with misconfigured IP addresses. These cameras can
-  be accessed in configuration mode from different hosts simultaneously.
-
-- MSI Uninstallation by new Windows 10 dialog "Apps&Features" is not supported by now.
-  Please use the old "Programs and Features" dialog.
-
-GigE Filter Driver:
-  - Disabling the Vimba GigE Filter Driver while it is in use might lead to
-    unexpected behavior up to blue screen.
-  - Using other filter drivers additionally to Vimba's GigE Filter Driver may cause issues.
-
----------------------------
-Changes and release history
----------------------------
-
-Changes in version 1.9.0:
--------------------------
-
-GigETL
-  - Changed behaviour of endianess handling (values must match host endianness in little-endian), 
-    for better compatibility with third-party software. 
-    Affected features that now have a changed byte order:
-      - Config Mode
-      - IP-related features including MulticastIPAddress
-      - Action Commands
-  - New feature DeviceUpdateTimeout (only applicable of GigE discovery is switched to Broadcast)
-  - New GVSPMaxLookBack default value (0 instead of 1) for improved packet resend handling
-  - Fixed: High memory usage during performance bottleneck (Nonpaged pool growing with multiple GigE cameras)
-  - Fixed: Action commands caused an error message in the console log
-  - Fixed: MulticastIPAdress range, better compatibility with third-party software
-
-GigE Filter Driver
-  - Reduced memory allocations
-  - Hidden statistics
-   
-
-
-Changes in version 1.8.2:
--------------------------
-GigETL and GigE Filter Driver
-  - Fixed: Vimba Viewer did not show single frame acquisitions (5 GigE)
-  - Improved timeout handling (5 GigE)
-  - Fixed limitations of certain GVSPPacketSize values
-  - New GigETL feature: GVSPHostReceiveBufferSize (SO_RCVBUF,  usable with 
-    the socket driver only) replaces GVSPHostReceiveBuffers (which is still 
-    usable in existing applications).
-
-
-Changes in version 1.8.1:
--------------------------
-  - Prepared for use with 5 GigE Vision cameras
-
-
-Changes in version 1.8.0:
--------------------------
-  - Standard-compliant ForceIP features instead of Allied Vision custom features
-  - Prepared for use with extended IDs
-
-
-Changes in version 1.7.1:
--------------------------
-  - Improved resend handling 
-  - By default, packet resends are enabled
-  - Other bug fixes
-
-Vimba Driver Installer
-  - Internal changes
-
-
-Changes in version 1.7.0:
--------------------------
-- GenTL 1.5 support
-
-
-Changes in version 1.6.0:
--------------------------
-- Fixed: GVSPPacketSize now updates as expected (Linux)
-- Other minor bug fixes
-
-Vimba GigE Filter Driver 
-  - Windows 10: Improved compatibility and performance with third-party filter drivers.
-
-Installer and driver
-   - New certificates for installer and driver (Windows 7, Windows 8, and Windows 8.1)
-
-
-Changes in version 1.5.0:
--------------------------
-- Added functionality for Action Commands
-- Fixed sending packet request after invalid timeout on Linux
-- The parameter BUFFER_INFO_DELIVERED_IMAGEHEIGHT is filled correctly
-
-- VimbaGigEFilter (Windows 10 x64/x86 only):
-	- Fixed incompatibility with Intel 10 Gbit Ethernet cards (520/540/710)
-  - Changed buffer list handling, driver removes streaming packets from buffer list:
-     - Decreases system load formerly caused by stream packet duplication
-     - Prevents additional system load when firewall is enabled
-     - Does not allow Wireshark to see stream packets
-  - Packet resend system load minimized
-  - Fixed missing filterclass in driver inf
-  - Fixed double counting of received packets
-  - Fixed incompatibility with wireless network cards (removed binding to WAN)
-  - Fixed incompatibilities with VPN connections (filter now optional)
-
-
-Changes in version 1.4.4:
--------------------------
--Bug fixes
-
-Changes in version 1.4.2:
--------------------------
-- Bug fixes
-
-Changes in version 1.4.1:
--------------------------
-- Solved cases where network problems led to a lost camera
-- Fixed range of GevHeartbeatInterval and GevHeartbeatTimeout
-- Bug fixes for multi-camera usage and missing cleanup
-
-Changes in version 1.3.1:
--------------------------
-- Support of GenICam GenTL standard 1.3
-- New GenTL SFNC feature categories BufferHandlingMode and StreamInformation
-- Separate features for heartbeat timeout and heartbeat interval
-- Adjustable device discovery waiting time
-- Fixed issues with alike serial numbers
-- Fixed issues with many network interfaces on Linux
-- Small bug-fixes to the Driver Installer
-
-Changes in version 1.2.0:
--------------------------
-- Improved performance in case of many events
-- Restriction to eight cameras removed
-- Corrected Heartbeat feature
-- Fixed support for small packets
-
-Changes in version 1.1.0:
--------------------------
-- Added feature DiscoveryBroadcastMode to the Interface module
-- Changed the documentation format to PDF
-- Slight changes for Linux compatibility
-
-
--------------------------------------------------------
-Correlations with other Allied Vision Software Packages
--------------------------------------------------------
-Please refer to the Vimba SDK Release Notes.
-
-
-----------------------------------------
-Allied Vision Technical Support
-----------------------------------------
-Contact us:
-https://www.alliedvision.com/contact
diff --git a/VimbaGigETL/Documentation/VimbaGigETLFeaturesManual.pdf b/VimbaGigETL/Documentation/VimbaGigETLFeaturesManual.pdf
deleted file mode 100644
index eaf87196d987a9e4f9dff9a8d7e34f8f0b099045..0000000000000000000000000000000000000000
Binary files a/VimbaGigETL/Documentation/VimbaGigETLFeaturesManual.pdf and /dev/null differ
diff --git a/VimbaGigETL/Install.sh b/VimbaGigETL/Install.sh
deleted file mode 100755
index 4dfdc8869877bb605980c8e1a2cce966dfad7df7..0000000000000000000000000000000000000000
--- a/VimbaGigETL/Install.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-#==============================================================================
-# Copyright (C) 2013 - 2014 Allied Vision Technologies.  All Rights Reserved.
-#
-# Redistribution of this file, in original or modified form, without
-# prior written consent of Allied Vision Technologies is prohibited.
-#
-#------------------------------------------------------------------------------
-#
-# File:        Install.sh
-#
-# Description: Setup script for creating a startup script that exports the
-#	       GENICAM_GENTL32_PATH and GENICAM_GENTL64_PATH variable
-#
-#------------------------------------------------------------------------------
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-# NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-#==============================================================================
-CWD=$(dirname $(readlink -f $0))
-UNAME=$(uname -m)
-
-if [ ${UNAME} = amd64 ] || [ ${UNAME} = x86_64 ]
-then
-ARCH=x86
-elif [ ${UNAME} = aarch64 ]
-then
-ARCH=arm
-else
-   echo "Error: Incompatible system architecture found." 1>&2
-   exit 1
-fi
-
-# Make sure our script is only being run with root privileges
-if [ "$(id -u)" != "0" ];
-then
-   echo "Error: This script must be run with root privileges." 1>&2
-   exit 1
-fi
-
-TL_NAME=VimbaGigETL
-PROFILE_FOLDER=/etc/profile.d
-
-TL_SCRIPT_64BIT=${PROFILE_FOLDER}/${TL_NAME}_64bit.sh
-TL_PATH_64BIT=$CWD/CTI/${ARCH}_64bit
-echo "Registering GENICAM_GENTL64_PATH"
-printf "#!/bin/sh\n\n#Do not edit this file manually because it may be overwritten automatically.\nexport GENICAM_GENTL64_PATH=\$GENICAM_GENTL64_PATH:\"%s\"" $TL_PATH_64BIT > $TL_SCRIPT_64BIT
-chmod +x $TL_SCRIPT_64BIT
-
-echo "Done"
-echo "Please log off once before using the GigE transport layer"
diff --git a/VimbaGigETL/SetGenTLPath.sh b/VimbaGigETL/SetGenTLPath.sh
deleted file mode 100755
index 6a5f8d40ca234b3052b99671ab507eaeacd5b821..0000000000000000000000000000000000000000
--- a/VimbaGigETL/SetGenTLPath.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/sh
-#==============================================================================
-# Copyright (C) 2017 Allied Vision Technologies.  All Rights Reserved.
-#
-# Redistribution of this file, in original or modified form, without
-# prior written consent of Allied Vision Technologies is prohibited.
-#
-#------------------------------------------------------------------------------
-#
-# File:			SetGenTLPath.sh
-#
-# Description:	This script sets the GENICAM_GENTL32_PATH and
-#	       		GENICAM_GENTL64_PATH environment variable for the current shell
-#	       		only.
-#	       		This can become necessary when running a Vimba application under
-#				a not logged-in user like a service.
-#
-# Note:			This script needs to be executed sourced. That is, using the
-#				same shell the application will be launched in. This is done
-#				by calling the script with the built-in shell command source
-#				or . (period), e.g. . SetGenTLPath.sh
-#
-#------------------------------------------------------------------------------
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-# NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-#==============================================================================
-CWD=$(dirname $(readlink -f $_))
-UNAME=$(uname -m)
-
-if [ ${UNAME} = aarch64 ]
-then
-ARCH=arm
-elif [ ${UNAME} = amd64 ] || [ ${UNAME} = x86_64 ]
-then
-ARCH=x86
-else
-   echo "
-   Error: Incompatible system architecture found." 1>&2
-   exit 1
-fi
-
-if [ "$_" = "$0" ]
-then
-  echo "
-  Please asure to run this script using the 'source' shell command.
-  This is done through: '. SetGenTLPath.sh'
-  Please note the whitespace.
-  Further help can be found by typing 'help source' or 'help .' in your shell.
-  "
-  exit 1
-fi
-
-TL_PATH_64BIT=$CWD/CTI/${ARCH}_64bit
-echo "
-Setting the GENICAM_GENTL64_PATH to $TL_PATH_64BIT for this shell only."
-export GENICAM_GENTL64_PATH=:$TL_PATH_64BIT	
-
-echo "  Done
-"
diff --git a/VimbaGigETL/Uninstall.sh b/VimbaGigETL/Uninstall.sh
deleted file mode 100755
index 6b6ce3373e7341b439145c6fd7d28fd8c0418dc2..0000000000000000000000000000000000000000
--- a/VimbaGigETL/Uninstall.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/sh
-#==============================================================================
-# Copyright (C) 2013 - 2014 Allied Vision Technologies.  All Rights Reserved.
-#
-# Redistribution of this file, in original or modified form, without
-# prior written consent of Allied Vision Technologies is prohibited.
-#
-#------------------------------------------------------------------------------
-#
-# File:        Uninstall.sh
-#
-# Description: Setup script for deleting a startup script that exports the
-#	       GENICAM_GENTL32_PATH and GENICAM_GENTL64_PATH variable
-#
-#------------------------------------------------------------------------------
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-# NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-#==============================================================================
-
-CWD=$(dirname $(readlink -f $0))
-UNAME=$(uname -m)
-
-if [ ${UNAME} = amd64 ] || [ ${UNAME} = x86_64 ]
-then
-ARCH=x86
-elif [ ${UNAME} = aarch64 ]
-then
-ARCH=arm
-else
-   echo "Error: Incompatible system architecture found." 1>&2
-   exit 1
-fi
-
-# Make sure our script is only being run with root privileges
-if [ "$(id -u)" != "0" ];
-then
-   echo "Error: This script must be run with root privileges." 1>&2
-   exit 1
-fi
-
-TL_NAME=VimbaGigETL
-PROFILE_FOLDER=/etc/profile.d
-
-TL_SCRIPT_64BIT=${PROFILE_FOLDER}/${TL_NAME}_64bit.sh
-if [ -f $TL_SCRIPT_64BIT ]; then
-	echo "Unregistering GENICAM_GENTL64_PATH"
-	rm $TL_SCRIPT_64BIT
-else
-	echo "Could not unregister $TL_NAME 64bit because it was not registered" 
-fi
-
-echo "Done"
diff --git a/VimbaImageTransform/Documentation/Vimba ImageTransform Manual.pdf b/VimbaImageTransform/Documentation/Vimba ImageTransform Manual.pdf
deleted file mode 100644
index bf7f5a283a5f8f82881022d7c5d16f704a5ebf11..0000000000000000000000000000000000000000
Binary files a/VimbaImageTransform/Documentation/Vimba ImageTransform Manual.pdf and /dev/null differ
diff --git a/VimbaImageTransform/DynamicLib/x86_64bit/OpenMP/libVimbaImageTransform.so b/VimbaImageTransform/DynamicLib/x86_64bit/OpenMP/libVimbaImageTransform.so
deleted file mode 100644
index 2a7a5ae27da46c1adb1a1c867b732d24c67ce276..0000000000000000000000000000000000000000
Binary files a/VimbaImageTransform/DynamicLib/x86_64bit/OpenMP/libVimbaImageTransform.so and /dev/null differ
diff --git a/VimbaImageTransform/DynamicLib/x86_64bit/libVimbaImageTransform.so b/VimbaImageTransform/DynamicLib/x86_64bit/libVimbaImageTransform.so
deleted file mode 100644
index b01c3977a73d785668f7a031b61125ab956e2ed1..0000000000000000000000000000000000000000
Binary files a/VimbaImageTransform/DynamicLib/x86_64bit/libVimbaImageTransform.so and /dev/null differ
diff --git a/VimbaImageTransform/Include/VmbCommonTypes.h b/VimbaImageTransform/Include/VmbCommonTypes.h
deleted file mode 100644
index da64d048d09e2ef6181abe2f9a4046af199f742f..0000000000000000000000000000000000000000
--- a/VimbaImageTransform/Include/VmbCommonTypes.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this header file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        VmbCommonTypes.h
-
-  Description: Main header file for the common types of the Vimba APIs.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef VMBCOMMONTYPES_H_INCLUDE_
-#define VMBCOMMONTYPES_H_INCLUDE_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// This file describes all necessary definitions for types used within 
-// Allied Vision's Vimba APIs. These type definitions are designed to be
-// portable from other languages and other operating systems.
-
-#if defined (_MSC_VER)
-
-    // 8 bit signed integer on Microsoft systems
-    typedef __int8              VmbInt8_t;
-    // 8 bit unsigned integer on Microsoft systems
-    typedef unsigned __int8     VmbUint8_t;
-    // 16 bit signed integer on Microsoft systems
-    typedef __int16             VmbInt16_t;
-    // 16 bit unsigned integer on Microsoft systems
-    typedef unsigned __int16    VmbUint16_t;
-    // 32 bit signed integer on Microsoft systems
-    typedef __int32             VmbInt32_t;
-    // 32 bit unsigned integer on Microsoft systems
-    typedef unsigned __int32    VmbUint32_t;
-    // 64 bit signed integer on Microsoft systems
-    typedef __int64             VmbInt64_t;
-    // 64 bit unsigned integer on Microsoft systems
-    typedef unsigned __int64    VmbUint64_t;
-
-#else // for non MS or GNU compilers without any warranty for the size
-
-    //#pragma message("Compatibility warning: typedefs in " __FILE__ " may not have the correct number of bits")
-
-    // 8 bit signed integer on non-Microsoft systems
-    typedef signed char         VmbInt8_t;
-    // 8 bit unsigned integer on non-Microsoft systems
-    typedef unsigned char       VmbUint8_t;
-    // 16 bit signed integer on non-Microsoft systems
-    typedef short               VmbInt16_t;
-    // 16 bit unsigned integer on non-Microsoft systems
-    typedef unsigned short      VmbUint16_t;
-    // 32 bit signed integer on non-Microsoft systems
-    typedef int                 VmbInt32_t;
-    // 32 bit signed integer on non-Microsoft systems
-    typedef unsigned int        VmbUint32_t;
-    // 64 bit signed integer on non-Microsoft systems
-    typedef long long           VmbInt64_t;
-    // 64 bit unsigned integer on non-Microsoft systems
-    typedef unsigned long long  VmbUint64_t;
-
-#endif
-
-    // Handle; e.g. for a camera
-    typedef void*               VmbHandle_t;
-
-// Standard type for boolean values
-#if defined(__cplusplus) || defined(__bool_true_false_are_defined)
-    typedef bool                VmbBool_t;
-#else
-    // Boolean type (equivalent to char)
-    typedef char                VmbBool_t;      // 1 means true and 0 means false
-#endif
-    //
-    // enum for bool values
-    //
-    typedef enum VmbBoolVal
-    {
-        VmbBoolTrue = 1,
-        VmbBoolFalse = 0,
-    } VmbBoolVal;
-
-    // char type
-    typedef unsigned char       VmbUchar_t;
-
-    //
-    // Error codes, returned by most functions: (not yet complete)
-    //
-    typedef enum VmbErrorType
-    {
-        VmbErrorSuccess         =  0,           // No error
-        VmbErrorInternalFault   = -1,           // Unexpected fault in VimbaC or driver
-        VmbErrorApiNotStarted   = -2,           // VmbStartup() was not called before the current command
-        VmbErrorNotFound        = -3,           // The designated instance (camera, feature etc.) cannot be found
-        VmbErrorBadHandle       = -4,           // The given handle is not valid
-        VmbErrorDeviceNotOpen   = -5,           // Device was not opened for usage
-        VmbErrorInvalidAccess   = -6,           // Operation is invalid with the current access mode
-        VmbErrorBadParameter    = -7,           // One of the parameters is invalid (usually an illegal pointer)
-        VmbErrorStructSize      = -8,           // The given struct size is not valid for this version of the API
-        VmbErrorMoreData        = -9,           // More data available in a string/list than space is provided
-        VmbErrorWrongType       = -10,          // Wrong feature type for this access function 
-        VmbErrorInvalidValue    = -11,          // The value is not valid; either out of bounds or not an increment of the minimum
-        VmbErrorTimeout         = -12,          // Timeout during wait
-        VmbErrorOther           = -13,          // Other error
-        VmbErrorResources       = -14,          // Resources not available (e.g. memory)
-        VmbErrorInvalidCall     = -15,          // Call is invalid in the current context (e.g. callback)
-        VmbErrorNoTL            = -16,          // No transport layers are found 
-        VmbErrorNotImplemented  = -17,          // API feature is not implemented
-        VmbErrorNotSupported    = -18,          // API feature is not supported
-        VmbErrorIncomplete      = -19,          // A multiple registers read or write is partially completed
-    } VmbErrorType;
-    typedef VmbInt32_t VmbError_t;              // Type for an error returned by API methods; for values see VmbErrorType
-
-    //
-    // Version information
-    //
-    typedef struct
-    {
-        VmbUint32_t             major;          // Major version number
-        VmbUint32_t             minor;          // Minor version number
-        VmbUint32_t             patch;          // Patch version number
-
-    } VmbVersionInfo_t;
-
-    //
-    // Indicate if pixel is monochrome or RGB.
-    //
-    typedef enum VmbPixelType
-    {
-        VmbPixelMono  =         0x01000000,     // Monochrome pixel
-        VmbPixelColor =         0x02000000      // Pixel bearing color information
-    } VmbPixelType;
-
-    //
-    // Indicate number of bits for a pixel. Needed for building values of VmbPixelFormatType
-    //
-    typedef enum VmbPixelOccupyType
-    {
-        VmbPixelOccupy8Bit  =   0x00080000,     // Pixel effectively occupies 8 bits
-        VmbPixelOccupy10Bit =   0x000A0000,     // Pixel effectively occupies 10 bits
-        VmbPixelOccupy12Bit =   0x000C0000,     // Pixel effectively occupies 12 bits
-        VmbPixelOccupy14Bit =   0x000E0000,     // Pixel effectively occupies 14 bits
-        VmbPixelOccupy16Bit =   0x00100000,     // Pixel effectively occupies 16 bits
-        VmbPixelOccupy24Bit =   0x00180000,     // Pixel effectively occupies 24 bits
-        VmbPixelOccupy32Bit =   0x00200000,     // Pixel effectively occupies 32 bits
-        VmbPixelOccupy48Bit =   0x00300000,     // Pixel effectively occupies 48 bits
-        VmbPixelOccupy64Bit =   0x00400000,     // Pixel effectively occupies 48 bits
-    } VmbPixelOccupyType;
-
-    //
-    // Pixel format types.
-    // As far as possible, the Pixel Format Naming Convention (PFNC) has been followed, allowing a few deviations.
-    // If data spans more than one byte, it is always LSB aligned, except if stated differently.
-    //
-    typedef enum VmbPixelFormatType
-    {
-        // mono formats
-        VmbPixelFormatMono8               = VmbPixelMono  | VmbPixelOccupy8Bit  | 0x0001,  // Monochrome, 8 bits (PFNC:Mono8)
-        VmbPixelFormatMono10              = VmbPixelMono  | VmbPixelOccupy16Bit | 0x0003,  // Monochrome, 10 bits in 16 bits (PFNC:Mono10)
-        VmbPixelFormatMono10p             = VmbPixelMono  | VmbPixelOccupy10Bit | 0x0046,  // Monochrome, 10 bits in 16 bits (PFNC:Mono10p)
-        VmbPixelFormatMono12              = VmbPixelMono  | VmbPixelOccupy16Bit | 0x0005,  // Monochrome, 12 bits in 16 bits (PFNC:Mono12)
-        VmbPixelFormatMono12Packed        = VmbPixelMono  | VmbPixelOccupy12Bit | 0x0006,  // Monochrome, 2x12 bits in 24 bits (GEV:Mono12Packed)
-        VmbPixelFormatMono12p             = VmbPixelMono  | VmbPixelOccupy12Bit | 0x0047,  // Monochrome, 2x12 bits in 24 bits (PFNC:MonoPacked)
-        VmbPixelFormatMono14              = VmbPixelMono  | VmbPixelOccupy16Bit | 0x0025,  // Monochrome, 14 bits in 16 bits (PFNC:Mono14)
-        VmbPixelFormatMono16              = VmbPixelMono  | VmbPixelOccupy16Bit | 0x0007,  // Monochrome, 16 bits (PFNC:Mono16)
-        // bayer formats
-        VmbPixelFormatBayerGR8            = VmbPixelMono  | VmbPixelOccupy8Bit  | 0x0008,  // Bayer-color, 8 bits, starting with GR line (PFNC:BayerGR8)
-        VmbPixelFormatBayerRG8            = VmbPixelMono  | VmbPixelOccupy8Bit  | 0x0009,  // Bayer-color, 8 bits, starting with RG line (PFNC:BayerRG8)
-        VmbPixelFormatBayerGB8            = VmbPixelMono  | VmbPixelOccupy8Bit  | 0x000A,  // Bayer-color, 8 bits, starting with GB line (PFNC:BayerGB8)
-        VmbPixelFormatBayerBG8            = VmbPixelMono  | VmbPixelOccupy8Bit  | 0x000B,  // Bayer-color, 8 bits, starting with BG line (PFNC:BayerBG8)
-        VmbPixelFormatBayerGR10           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x000C,  // Bayer-color, 10 bits in 16 bits, starting with GR line (PFNC:BayerGR10)
-        VmbPixelFormatBayerRG10           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x000D,  // Bayer-color, 10 bits in 16 bits, starting with RG line (PFNC:BayerRG10)
-        VmbPixelFormatBayerGB10           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x000E,  // Bayer-color, 10 bits in 16 bits, starting with GB line (PFNC:BayerGB10)
-        VmbPixelFormatBayerBG10           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x000F,  // Bayer-color, 10 bits in 16 bits, starting with BG line (PFNC:BayerBG10)
-        VmbPixelFormatBayerGR12           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x0010,  // Bayer-color, 12 bits in 16 bits, starting with GR line (PFNC:BayerGR12)
-        VmbPixelFormatBayerRG12           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x0011,  // Bayer-color, 12 bits in 16 bits, starting with RG line (PFNC:BayerRG12)
-        VmbPixelFormatBayerGB12           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x0012,  // Bayer-color, 12 bits in 16 bits, starting with GB line (PFNC:BayerGB12)
-        VmbPixelFormatBayerBG12           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x0013,  // Bayer-color, 12 bits in 16 bits, starting with BG line (PFNC:BayerBG12)
-        VmbPixelFormatBayerGR12Packed     = VmbPixelMono  | VmbPixelOccupy12Bit | 0x002A,  // Bayer-color, 2x12 bits in 24 bits, starting with GR line (GEV:BayerGR12Packed)
-        VmbPixelFormatBayerRG12Packed     = VmbPixelMono  | VmbPixelOccupy12Bit | 0x002B,  // Bayer-color, 2x12 bits in 24 bits, starting with RG line (GEV:BayerRG12Packed)
-        VmbPixelFormatBayerGB12Packed     = VmbPixelMono  | VmbPixelOccupy12Bit | 0x002C,  // Bayer-color, 2x12 bits in 24 bits, starting with GB line (GEV:BayerGB12Packed)
-        VmbPixelFormatBayerBG12Packed     = VmbPixelMono  | VmbPixelOccupy12Bit | 0x002D,  // Bayer-color, 2x12 bits in 24 bits, starting with BG line (GEV:BayerBG12Packed)
-        VmbPixelFormatBayerGR10p          = VmbPixelMono  | VmbPixelOccupy10Bit | 0x0056,  // Bayer-color, 12 bits continuous packed, starting with GR line (PFNC:BayerGR10p)
-        VmbPixelFormatBayerRG10p          = VmbPixelMono  | VmbPixelOccupy10Bit | 0x0058,  // Bayer-color, 12 bits continuous packed, starting with RG line (PFNC:BayerRG10p)
-        VmbPixelFormatBayerGB10p          = VmbPixelMono  | VmbPixelOccupy10Bit | 0x0054,  // Bayer-color, 12 bits continuous packed, starting with GB line (PFNC:BayerGB10p)
-        VmbPixelFormatBayerBG10p          = VmbPixelMono  | VmbPixelOccupy10Bit | 0x0052,  // Bayer-color, 12 bits continuous packed, starting with BG line (PFNC:BayerBG10p)
-        VmbPixelFormatBayerGR12p          = VmbPixelMono  | VmbPixelOccupy12Bit | 0x0057,  // Bayer-color, 12 bits continuous packed, starting with GR line (PFNC:BayerGR12p)
-        VmbPixelFormatBayerRG12p          = VmbPixelMono  | VmbPixelOccupy12Bit | 0x0059,  // Bayer-color, 12 bits continuous packed, starting with RG line (PFNC:BayerRG12p)
-        VmbPixelFormatBayerGB12p          = VmbPixelMono  | VmbPixelOccupy12Bit | 0x0055,  // Bayer-color, 12 bits continuous packed, starting with GB line (PFNC:BayerGB12p)
-        VmbPixelFormatBayerBG12p          = VmbPixelMono  | VmbPixelOccupy12Bit | 0x0053,  // Bayer-color, 12 bits continuous packed, starting with BG line (PFNC:BayerBG12p)
-        VmbPixelFormatBayerGR16           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x002E,  // Bayer-color, 16 bits, starting with GR line (PFNC:BayerGR16)
-        VmbPixelFormatBayerRG16           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x002F,  // Bayer-color, 16 bits, starting with RG line (PFNC:BayerRG16)
-        VmbPixelFormatBayerGB16           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x0030,  // Bayer-color, 16 bits, starting with GB line (PFNC:BayerGB16)
-        VmbPixelFormatBayerBG16           = VmbPixelMono  | VmbPixelOccupy16Bit | 0x0031,  // Bayer-color, 16 bits, starting with BG line (PFNC:BayerBG16)
-        // rgb formats
-        VmbPixelFormatRgb8                = VmbPixelColor | VmbPixelOccupy24Bit | 0x0014,  // RGB, 8 bits x 3 (PFNC:RGB8)
-        VmbPixelFormatBgr8                = VmbPixelColor | VmbPixelOccupy24Bit | 0x0015,  // BGR, 8 bits x 3 (PFNC:BGR8)
-        VmbPixelFormatRgb10               = VmbPixelColor | VmbPixelOccupy48Bit | 0x0018,  // RGB, 12 bits in 16 bits x 3 (PFNC:RGB12)
-        VmbPixelFormatBgr10               = VmbPixelColor | VmbPixelOccupy48Bit | 0x0019,  // RGB, 12 bits in 16 bits x 3 (PFNC:RGB12)
-        VmbPixelFormatRgb12               = VmbPixelColor | VmbPixelOccupy48Bit | 0x001A,  // RGB, 12 bits in 16 bits x 3 (PFNC:RGB12)
-        VmbPixelFormatBgr12               = VmbPixelColor | VmbPixelOccupy48Bit | 0x001B,  // RGB, 12 bits in 16 bits x 3 (PFNC:RGB12)
-
-        VmbPixelFormatRgb14               = VmbPixelColor | VmbPixelOccupy48Bit | 0x005E,  // RGB, 14 bits in 16 bits x 3 (PFNC:RGB12)
-        VmbPixelFormatBgr14               = VmbPixelColor | VmbPixelOccupy48Bit | 0x004A,  // RGB, 14 bits in 16 bits x 3 (PFNC:RGB12)
-
-        VmbPixelFormatRgb16               = VmbPixelColor | VmbPixelOccupy48Bit | 0x0033,  // RGB, 16 bits x 3 (PFNC:RGB16)
-        VmbPixelFormatBgr16               = VmbPixelColor | VmbPixelOccupy48Bit | 0x004B,  // RGB, 16 bits x 3 (PFNC:RGB16)
-        // rgba formats
-        VmbPixelFormatArgb8               = VmbPixelColor | VmbPixelOccupy32Bit | 0x0016,  // ARGB, 8 bits x 4 (PFNC:RGBa8)
-        VmbPixelFormatRgba8               = VmbPixelFormatArgb8,                           // RGBA, 8 bits x 4, legacy name
-        VmbPixelFormatBgra8               = VmbPixelColor | VmbPixelOccupy32Bit | 0x0017,  // BGRA, 8 bits x 4 (PFNC:BGRa8)
-        VmbPixelFormatRgba10              = VmbPixelColor | VmbPixelOccupy64Bit | 0x005F,                           // RGBA, 8 bits x 4, legacy name
-        VmbPixelFormatBgra10              = VmbPixelColor | VmbPixelOccupy64Bit | 0x004C,                           // RGBA, 8 bits x 4, legacy name
-        VmbPixelFormatRgba12              = VmbPixelColor | VmbPixelOccupy64Bit | 0x0061,                           // RGBA, 8 bits x 4, legacy name
-        VmbPixelFormatBgra12              = VmbPixelColor | VmbPixelOccupy64Bit | 0x004E,                           // RGBA, 8 bits x 4, legacy name
-
-        VmbPixelFormatRgba14              = VmbPixelColor | VmbPixelOccupy64Bit | 0x0063,                           // RGBA, 8 bits x 4, legacy name
-        VmbPixelFormatBgra14              = VmbPixelColor | VmbPixelOccupy64Bit | 0x0050,                           // RGBA, 8 bits x 4, legacy name
-
-        VmbPixelFormatRgba16              = VmbPixelColor | VmbPixelOccupy64Bit | 0x0064,                           // RGBA, 8 bits x 4, legacy name
-        VmbPixelFormatBgra16              = VmbPixelColor | VmbPixelOccupy64Bit | 0x0051,                           // RGBA, 8 bits x 4, legacy name
-        // yuv/ycbcr formats
-        VmbPixelFormatYuv411              = VmbPixelColor | VmbPixelOccupy12Bit | 0x001E,  // YUV 411 with 8 bits (GEV:YUV411Packed)
-        VmbPixelFormatYuv422              = VmbPixelColor | VmbPixelOccupy16Bit | 0x001F,  // YUV 422 with 8 bits (GEV:YUV422Packed)
-        VmbPixelFormatYuv444              = VmbPixelColor | VmbPixelOccupy24Bit | 0x0020,  // YUV 444 with 8 bits (GEV:YUV444Packed)
-        VmbPixelFormatYCbCr411_8_CbYYCrYY = VmbPixelColor | VmbPixelOccupy12Bit | 0x003C,  // Y�CbCr 411 with 8 bits (PFNC:YCbCr411_8_CbYYCrYY) - identical to VmbPixelFormatYuv411
-        VmbPixelFormatYCbCr422_8_CbYCrY   = VmbPixelColor | VmbPixelOccupy16Bit | 0x0043,  // Y�CbCr 422 with 8 bits (PFNC:YCbCr422_8_CbYCrY) - identical to VmbPixelFormatYuv422
-        VmbPixelFormatYCbCr8_CbYCr        = VmbPixelColor | VmbPixelOccupy24Bit | 0x003A,  // Y�CbCr 444 with 8 bits (PFNC:YCbCr8_CbYCr) - identical to VmbPixelFormatYuv444
-        VmbPixelFormatLast,
-    } VmbPixelFormatType;
-    typedef VmbUint32_t VmbPixelFormat_t;       // Type for the pixel format; for values see VmbPixelFormatType
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // VMBCOMMONTYPES_H_INCLUDE_
diff --git a/VimbaImageTransform/Include/VmbTransform.h b/VimbaImageTransform/Include/VmbTransform.h
deleted file mode 100644
index 7a53849d61c34b84a5f6d02bdc69467fdf6ead32..0000000000000000000000000000000000000000
--- a/VimbaImageTransform/Include/VmbTransform.h
+++ /dev/null
@@ -1,343 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this header file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        VmbTransform.h
-
-  Description: Definition of image transform functions for the Vimba APIs.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef VMB_TRANSFORM_H_
-#define VMB_TRANSFORM_H_
-#ifndef VMB_TRANSFORM
-#define VMB_TRANSFORM
-#endif
-#pragma once
-
-#include "VmbTransformTypes.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef VMB_WIN32DLL_API
-#ifndef VMB_NO_EXPORT
-#   ifdef VMB_EXPORTS
-#       if defined(__ELF__) && (defined(__clang__) || defined(__GNUC__))
-#           define VMB_WIN32DLL_API __attribute__((visibility("default")))
-#       elif defined( __APPLE__ ) || defined(__MACH__)
-#           define VMB_WIN32DLL_API __attribute__((visibility("default")))
-#       else
-#           ifndef _WIN64
-#               define VMB_WIN32DLL_API __declspec(dllexport) __stdcall
-#           else
-#               define VMB_WIN32DLL_API __stdcall
-#           endif
-#       endif
-#   else
-#       if defined (__ELF__) && (defined(__clang__) || defined(__GNUC__))
-#           define VMB_WIN32DLL_API
-#       elif defined( __APPLE__ ) || defined(__MACH__)
-#           define VMB_WIN32DLL_API
-#       else
-#           define VMB_WIN32DLL_API __declspec(dllimport) __stdcall
-#       endif
-#   endif
-#else
-#       define VMB_WIN32DLL_API 
-#endif
-#endif
-
-//
-// Method:      VmbGetVersion()
-//
-// Purpose:     Inquire the library version.
-//
-// Parameters:
-//
-//  [out]    VmbUint32_t *   pValue      Contains the library version (Major,Minor,Sub,Build)
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorBadParameter:  if the given pointer is NULL
-//
-// Details:     This function can be called at anytime, even before the library is
-//              initialized.
-//
-VmbError_t VMB_WIN32DLL_API VmbGetVersion ( VmbUint32_t*  pValue );
-
-//
-// Method:      VmbGetTechnoInfo()
-//
-// Purpose:     Get information about processor supported features.
-//
-// Parameters:
-//
-//  [out]       VmbTechInfo_t*    pTechnoInfo    Returns the supported SIMD technologies
-//
-// Returns:
-//
-//  - VmbErrorSuccess:        if no error
-//  - VmbErrorBadParameter:   if the given pointer is NULL
-//
-// Details:     This should be called before using any SIMD (MMX,SSE) optimized functions
-//
-VmbError_t VMB_WIN32DLL_API VmbGetTechnoInfo( VmbTechInfo_t*  pTechnoInfo );
-
-//
-// Method:      VmbGetErrorInfo()
-//
-// Purpose:     Translate Vimba error codes into a human-readable string.
-//
-// Parameters:
-//
-//  [in ]       VmbError_t      errorCode       The error code to get a readable string for
-//  [out]       VmbANSIChar_t*  pInfo           Pointer to a zero terminated string that will 
-//                                              contain the error information on return
-//  [in ]       VmbUint32_t     maxInfoLength   The length of the pInfo buffer
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       if no error
-//  - VmbErrorBadParameter:  if the given pointer is NULL, or if maxInfoLength is 0
-//  - VmbErrorMoreData:      if maxInfoLength is too small to hold the complete information
-//
-VmbError_t VMB_WIN32DLL_API VmbGetErrorInfo( VmbError_t      errorCode,
-                                             VmbANSIChar_t*  pInfo,
-                                             VmbUint32_t     maxInfoLength );
-                                                
-//
-// Method:      VmbGetApiInfoString()
-//
-// Purpose:     Get information about the currently loaded Vimba ImageTransform API.
-//
-// Parameters:
-//
-//  [in ]       VmbAPIInfo_t    infoType        Type of information to return
-//  [out]       VmbANSIChar_t*  pInfo           Pointer to a zero terminated string that 
-//                                              will contain the information on return
-//  [in ]       VmbUint32_t     maxInfoLength   The length of the pInfo buffer
-//
-// Returns:
-//
-//  - VmbErrorSuccess:      if no error
-//  - VmbErrorBadParameter: if the given pointer is NULL
-//  - VmbErrorMoreData:     if maxInfoLength is too small to hold the complete information
-//
-// Details: infoType may be one of the following values:
-//          - VmbAPIInfoAll:         Returns all information about the API
-//          - VmbAPIInfoPlatform:    Returns information about the platform the API was built for (x86 or x64)
-//          - VmbAPIInfoBuild:       Returns info about the API built (debug or release)
-//          - VmbApiInfoTechnology:  Returns info about the supported technologies the API was built for (OpenMP or OpenCL)
-//
-VmbError_t VMB_WIN32DLL_API VmbGetApiInfoString( VmbAPIInfo_t    infoType,
-                                                 VmbANSIChar_t*  pInfo,
-                                                 VmbUint32_t     maxInfoLength );
-
-//
-// Method:      VmbSetDebayerMode()
-//
-// Purpose:     Set transformation options to a predefined debayering mode.
-//
-// Parameters:
-//
-//  [in ]       VmbDebayerMode_t    debayerMode     The mode used for debayering the source raw image, default mode is
-//                                                  2x2 debayering. Debayering modes only work for image widths and
-//                                                  heights divisible by two
-//  [in,out]    VmbTransformInfo*   pTransformInfo  Parameter that contains information about special
-//                                                  transform functionality
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       if no error
-//  - VmbErrorBadParameter:  if the given pointer is NULL
-//
-// Details:     Debayering is only applicable to image formats with both an even width and an even height.
-//
-VmbError_t VMB_WIN32DLL_API VmbSetDebayerMode( VmbDebayerMode_t   debayerMode,
-                                               VmbTransformInfo*  pTransformInfo );
-
-//
-// Method:      VmbSetColorCorrectionMatrix3x3()
-//
-// Purpose:     Set transformation options to a 3x3 color matrix transformation.
-//
-// Parameters:
-//
-//  [in ]       const VmbFloat_t*   pMatrix          Color correction matrix
-//  [in,out]    VmbTransformInfo*   pTransformInfo   Parameter that is filled with information 
-//                                                   about special transform functionality
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorBadParameter:  if one of the given pointers is NULL
-//
-VmbError_t VMB_WIN32DLL_API VmbSetColorCorrectionMatrix3x3( const VmbFloat_t*  pMatrix,
-                                                            VmbTransformInfo*  pTransformInfo );
-
-//
-// Method:      VmbSetGammaCorrection()
-//
-// Purpose:     Retrieve the version number of VimbaC.
-//
-// Parameters:
-//
-//  [in ]       VmbFloat_t          gamma           Float gamma correction to set
-//  [in,out]    VmbTransformInfo*   pTransformInfo  Transform info to set gamma correction to
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       If no error
-//  - VmbErrorBadParameter:  if the given pointer is NULL
-//
-VmbError_t VMB_WIN32DLL_API VmbSetGammaCorrection( VmbFloat_t         gamma,
-                                                   VmbTransformInfo*  pTransformInfo );
-
-//
-// Method:      VmbSetImageInfoFromPixelFormat()
-//
-// Purpose:     Set image info member values in VmbImage from pixel format.
-//
-// Parameters:
-//
-//  [in ]       VmbPixelFormat_t    pixelFormat     PixelFormat describes the pixel format used by
-//                                                  the image data member
-//  [in ]       VmbUint32_t         width           Width of the image in pixels
-//  [in ]       VmbUint32_t         height          Height of the image in pixels
-//  [in,out]    VmbImage*           pImage          Pointer to Vimba image to set the info to
-//
-// Returns:
-//
-//  - VmbErrorSuccess:       if no error
-//  - VmbErrorBadParameter:  if the given pointer is NULL or one of the "image" members is invalid
-//  - VmbErrorStructSize:    if the image struct size doesn't match its "Size" member
-//
-// Details:     A VmbPixelFormat_t can be obtained from Vimba C/C++ APIs frame
-//              or from the PixelFormat feature. For displaying images, it is suggested to use
-//              VmbSetImageInfoFromString() or to look up a matching VmbPixelFormat_t
-//
-VmbError_t VMB_WIN32DLL_API VmbSetImageInfoFromPixelFormat( VmbPixelFormat_t  pixelFormat, 
-                                                            VmbUint32_t       width,
-                                                            VmbUint32_t       height,
-                                                            VmbImage*         pImage );
-
-//
-// Method:      VmbSetImageInfoFromString()
-//
-// Purpose:     Set image info member values in VmbImage from string.
-//
-// Parameters:
-//
-//  [in ]       const VmbANSIChar_t*    pImageFormat    Image format as a (const) case insensitive string
-//  [in ]       VmbUint32_t             stringLength    The length of the pixel format string 
-//  [in ]       VmbUint32_t             width           Width of the image in pixels
-//  [in ]       VmbUint32_t             height          Height of the image in pixels
-//  [in,out]    VmbImage *              pImage          Pointer to Vimba image to set the info to
-//
-// Returns:
-//
-//  - VmbErrorSuccess:        if no error
-//  - VmbErrorBadParameter:   if one of the given pointers or the "Data" member in "image" is NULL, or
-//                            if width or hight don't match between source and destination, or
-//                            if one of the parameters for the conversion does not fit
-//  - VmbErrorStructSize:     if the "image" struct size does not match its "Size" member
-//  - VmbErrorResources:      if the there was a memory fault during processing
-//
-// Details:     function does not read or write to VmbImage::Data member.
-//
-VmbError_t VMB_WIN32DLL_API VmbSetImageInfoFromString( const VmbANSIChar_t*  pImageFormat,
-                                                       VmbUint32_t           stringLength,
-                                                       VmbUint32_t           width,
-                                                       VmbUint32_t           height,
-                                                       VmbImage*             pImage );
-
-/* Method: VmbSetImageInfoFromInputParameters.
-*
-* Purpose::  set output image dependent on the input image, user specifies pixel layout and bit depth of out format.
-*
-* Parameters:
-* [in]    VmbPixelFormat_t    InputPixelFormat    input vimba pixel format
-* [in]    VmbUint32_t         width               width of the output image
-* [in]    VmbUint32_t         height              height of the output image
-* [in]    VmbPixelLayout_t    OutputPixelLayout   pixel component layout for output image
-* [in]    VmbUint32_t         BitsPerPixel        bit depth of output 8 and 16 supported
-* [out]    VmbImage *          pOutputImage        pointer to output simple vimba image
-*/
-VmbError_t VMB_WIN32DLL_API VmbSetImageInfoFromInputParameters( VmbPixelFormat_t    InputPixelFormat,
-                                                                VmbUint32_t         Width,
-                                                                VmbUint32_t         Height,
-                                                                VmbPixelLayout_t    OutputPixelLayout,
-                                                                VmbUint32_t         BitsPerPixel,
-                                                                VmbImage*           pOutputImage);
-
-/* Method: VmbSetImageInfoFromInputImage.
-*
-* Purpose:  set output image compatible to input image with given layout and bit depth
-*           the output image will have same dimensions as the input image
-*
-* [in]      const VmbImage *        pInputImage         input image with fully initialized inmage info elemets
-* [in]      VmbPixelLayout_t        OutputPixelLayout   layout for the output image
-* [in]      VmbUint32_t             BitsPerPixel        bit depth for output image 8bit and 16bit supported
-* [out]     VmbImage *              pOutputImage        output image to set the compatible format to
-*/
-VmbError_t VMB_WIN32DLL_API VmbSetImageInfoFromInputImage(  const VmbImage *    pInputImage,
-                                                            VmbPixelLayout_t    OutputPixelLayout,
-                                                            VmbUint32_t         BitsPerPixel,
-                                                            VmbImage*           pOutputImage);
-
-//
-// Method:      VmbImageTransform()
-//
-// Purpose:     Transform images from one pixel format to another with possible transformation options.
-//              The transformation is defined by the provided images and the desired transformation.
-//
-// Parameters:
-//
-//  [in ]       const VmbImage*             pSource         Pointer to source image
-//  [in,out]    VmbImage*                   pDestination    Pointer to destination image
-//  [in ]       const VmbTransformInfo*     pParameter      Optional transform parameters
-//  [in ]       VmbUint32_t                 parameterCount  Number of transform parameters
-//
-// Returns:
-//
-//  - VmbErrorSuccess:          if no error
-//  - VmbErrorBadParameter:     if any image pointer or their "Data" members is NULL, or
-//                              if "Width" or "Height" don't match between source and destination, or
-//                              if one of the parameters for the conversion does not fit
-//  - VmbErrorStructSize:       if the image structs size don't match their "Size" member
-//  - VmbErrorNotImplemented:   if there is no transformation between source and destination format
-//
-// Details:     Create the source and destination image info structure with VmbSetImageInfoFromPixelFormat
-//               or VmbSetimageInfoFromString and keep those structures as template.
-//              For calls to transform, simply attach the image to the Data member.
-//              The optional parameters, when set, are constraints on the transform.
-//
-VmbError_t VMB_WIN32DLL_API VmbImageTransform( const VmbImage*          pSource,
-                                               VmbImage*                pDestination,
-                                               const VmbTransformInfo*  pParameter,
-                                               VmbUint32_t              parameterCount );
-
-#ifdef __cplusplus
-}
-#endif // #ifdef __cplusplus
-#endif //#ifndef UNI_TRANSFORM_H_
diff --git a/VimbaImageTransform/Include/VmbTransformTypes.h b/VimbaImageTransform/Include/VmbTransformTypes.h
deleted file mode 100644
index 98a24ff98e6023de59eae7d59cde1cf0ca242684..0000000000000000000000000000000000000000
--- a/VimbaImageTransform/Include/VmbTransformTypes.h
+++ /dev/null
@@ -1,617 +0,0 @@
-/*=============================================================================
-  Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
-
-  Redistribution of this header file, in original or modified form, without
-  prior written consent of Allied Vision Technologies is prohibited.
-
--------------------------------------------------------------------------------
- 
-  File:        VmbTransformTypes.h
-
-  Description: Definition of types used in the Vimba Image Transform library.
-
--------------------------------------------------------------------------------
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-=============================================================================*/
-
-#ifndef VMB_TRANSFORM_TYPES_H_
-#define VMB_TRANSFORM_TYPES_H_
-#include "VmbCommonTypes.h"
-
-
-    typedef VmbInt8_t*              VmbInt8Ptr_t;
-    typedef VmbInt16_t*             VmbInt16Ptr_t;
-    typedef VmbInt32_t*             VmbInt32Ptr_t;
-    typedef VmbInt64_t*             VmbInt64Ptr_t;
-
-    typedef VmbUint8_t*             VmbUint8Ptr_t;
-    typedef VmbUint16_t*            VmbUint16Ptr_t;
-    typedef VmbUint32_t*            VmbUint32Ptr_t;
-    typedef VmbUint64_t*            VmbUint64Ptr_t;
-
-    typedef const VmbInt8_t*        VmbConstInt8Ptr_t;
-    typedef const VmbInt16_t*       VmbConstInt16Ptr_t;
-    typedef const VmbInt32_t*       VmbConstInt32Ptr_t;
-    typedef const VmbInt64_t*       VmbConstInt64Ptr_t;
-
-    typedef const VmbUint8_t*       VmbConstUint8Ptr_t;
-    typedef const VmbUint16_t*      VmbConstUint16Ptr_t;
-    typedef const VmbUint32_t*      VmbConstUint32Ptr_t;
-    typedef const VmbUint64_t*      VmbConstUint64Ptr_t;
-
-    typedef char                    VmbANSIChar_t;
-    
-    typedef float                   VmbFloat_t;
-    typedef VmbFloat_t*             VmbFloatPtr_t;
-    typedef const VmbFloat_t*       VmbConstFloatPtr_t;
-
-    typedef void*                   VmbVoidPtr_t;
-    typedef const void *            VmbConstVoidPtr_t;
-    typedef VmbVoidPtr_t            VmbColorCorrectionHandle_t;
-
-//! Enumeration for the Bayer pattern
-typedef enum VmbBayerPattern
-{
-    VmbBayerPatternRGGB=0,     //!< RGGB pattern, red pixel comes first
-    VmbBayerPatternGBRG,       //!< RGGB pattern, green pixel of blue row comes first
-    VmbBayerPatternGRBG,       //!< RGGB pattern, green pixel of red row comes first
-    VmbBayerPatternBGGR,       //!< RGGB pattern, blue pixel comes first
-    VmbBayerPatternCYGM=128,   //!< CYGM pattern, cyan pixel comes first in the first row, green in the second row (of the sensor)
-    VmbBayerPatternGMCY,       //!< CYGM pattern, green pixel comes first in the first row, cyan in the second row (of the sensor)
-    VmbBayerPatternCYMG,       //!< CYGM pattern, cyan pixel comes first in the first row, magenta in the second row (of the sensor)
-    VmbBayerPatternMGCY,       //!< CYGM pattern, magenta pixel comes first in the first row, cyan in the second row (of the sensor)
-    VmbBayerPatternLAST=255
-} VmbBayerPattern;
-typedef VmbUint32_t  VmbBayerPattern_t;
-
-//! Enumeration for the endianness
-typedef enum VmbEndianness
-{
-    VmbEndiannessLittle=0, //!< Little endian data format
-    VmbEndiannessBig,      //!< Big endian data format
-    VmbEndiannessLast=255
-} VmbEndianness;
-typedef VmbUint32_t VmbEndianness_t;
-//! Enumeration for the image alignment
-typedef enum VmbAlignment
-{
-    VmbAlignmentMSB=0,    //!< Data is MSB aligned (pppp pppp pppp ....)
-    VmbAlignmentLSB,      //!< Data is LSB aligned (.... pppp pppp pppp)
-    VmbAlignmentLAST=255
-} VmbAlignment;
-typedef VmbUint32_t VmbAlignment_t;
-
-
-//! Structure for accessing data in 12-bit transfer mode, two pixel are coded into 3 bytes
-typedef struct Vmb12BitPackedPair_t
-{
-    VmbUint8_t   m_nVal8_1       ;   //!< High byte of the first Pixel
-    VmbUint8_t   m_nVal8_1Low : 4;   //!< Low nibble of the first pixel
-    VmbUint8_t   m_nVal8_2Low : 4;   //!< Low nibble of the second pixel
-    VmbUint8_t   m_nVal8_2       ;   //!< High byte of the second pixel
-}Vmb12BitPackedPair_t;
-
-/** states of the multi media technology support for operating system and processor.
-*/
-typedef struct VmbSupportState_t
-{
-    VmbBool_t Processor;         //!< technology supported by the processor
-    VmbBool_t OperatingSystem;   //!< technology supported by the OS
-}VmbSupportState_t;
-
-/** states of the support for different multimedia technologies*/
-typedef struct VmbTechInfo_t
-{
-    VmbSupportState_t IntelMMX;       //!< INTEL first gen MultiMedia eXtension
-    VmbSupportState_t IntelSSE;       //!< INTEL Streaming SIMD Extension
-    VmbSupportState_t IntelSSE2;      //!< INTEL Streaming SIMD Extension 2
-    VmbSupportState_t IntelSSE3;      //!< INTEL Streaming SIMD Extension 3
-    VmbSupportState_t IntelSSSE3;     //!< INTEL Supplemental Streaming SIMD Extension 3
-    VmbSupportState_t AMD3DNow;       //!< AMD 3DNow
-} VmbTechInfo_t;
-
-/**api info types*/
-typedef enum VmbAPIInfo
-{
-    VmbAPIInfoAll,
-    VmbAPIInfoPlatform,     //!< Platform the api was build for
-    VmbAPIInfoBuild,        //!< build type (debug or release)
-    VmbAPIInfoTechnology,   //!< info about special technoklogies uses in building the api
-    VmbAPIInfoLast
-} VmbAPIInfo;
-typedef VmbUint32_t VmbAPIInfo_t;
-
-typedef struct VmbMono8_t
-{
-#ifdef __cplusplus
-    typedef VmbUint8_t value_type;
-#endif
-    VmbUint8_t Y;   //!< gray part
-}  VmbMono8_t;
-
-typedef struct VmbMono8s_t
-{
-#ifdef __cplusplus
-    typedef VmbInt8_t value_type;
-#endif
-    VmbInt8_t Y;   //!< gray part
-}  VmbMono8s_t;
-
-typedef struct VmbMono10_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t Y;   //!< gray part
-}  VmbMono10_t;
-
-typedef struct VmbMono12_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t Y;   //!< gray part
-}  VmbMono12_t;
-
-
-typedef struct VmbMono14_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t Y;   //!< gray part
-}  VmbMono14_t;
-
-typedef struct VmbMono16_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t Y;   //!< gray part
-}  VmbMono16_t;
-
-typedef struct VmbMono16s_t
-{
-#ifdef __cplusplus
-    typedef VmbInt16_t value_type;
-#endif
-    VmbInt16_t Y;   //!< gray part
-}  VmbMono16s_t;
-
-
-/** Structure for accessing Windows RGB data */
-typedef struct VmbRGB8_t
-{
-#ifdef __cplusplus
-    typedef VmbUint8_t value_type;
-#endif
-    VmbUint8_t R;   //!< red part
-    VmbUint8_t G;   //!< green part
-    VmbUint8_t B;   //!< blue part
-}  VmbRGB8_t;
-
-typedef struct VmbRGB10_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t B;   //!< blue part
-}  VmbRGB10_t;
-
-typedef struct VmbRGB12_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t B;   //!< blue part
-}  VmbRGB12_t;
-
-typedef struct VmbRGB14_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t B;   //!< blue part
-}  VmbRGB14_t;
-
-typedef struct VmbRGB16_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t B;   //!< blue part
-}  VmbRGB16_t;
-
-
-/** Structure for accessing Windows RGB data */
-typedef struct VmbBGR8_t
-{
-#ifdef __cplusplus
-    typedef VmbUint8_t value_type;
-#endif
-    VmbUint8_t B;   //!< blue part
-    VmbUint8_t G;   //!< green part
-    VmbUint8_t R;   //!< red part
-} VmbBGR8_t;
-
-/** Structure for accessing Windows RGB data */
-typedef struct VmbBGR10_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t B;   //!< blue part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t R;   //!< red part
-} VmbBGR10_t;
-
-/** Structure for accessing Windows RGB data */
-typedef struct VmbBGR12_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t B;   //!< blue part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t R;   //!< red part
-} VmbBGR12_t;
-/** struct for 14 bit bgr*/
-typedef struct VmbBGR14_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t B;   //!< blue part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t R;   //!< red part
-} VmbBGR14_t;
-
-//! Structure for accessing 16-bit Windows-type RGB data
-typedef struct VmbBGR16_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t B;  //!< blue part
-    VmbUint16_t G;  //!< green part
-    VmbUint16_t R;  //!< red part
-} VmbBGR16_t;
-
-
-/** Structure for accessing non-Windows RGB data */
-typedef struct VmbRGBA8_t
-{
-#ifdef __cplusplus
-    typedef VmbUint8_t value_type;
-#endif
-    VmbUint8_t R;   //!< red part
-    VmbUint8_t G;   //!< green part
-    VmbUint8_t B;   //!< blue part
-    VmbUint8_t A;   //!< unused
-} VmbRGBA8_t, VmbRGBA32_t;
-
-/** Structure for accessing Windows RGBA data.*/
-typedef struct VmbBGRA8_t
-{
-#ifdef __cplusplus
-    typedef VmbUint8_t value_type;
-#endif
-    VmbUint8_t B;   //!< blue part
-    VmbUint8_t G;   //!< green part
-    VmbUint8_t R;   //!< red part
-    VmbUint8_t A;   //!< unused
-} VmbBGRA8_t, VmbBGRA32_t;
-
-typedef struct VmbARGB8_t
-{
-#ifdef __cplusplus
-    typedef VmbUint8_t value_type;
-#endif
-    VmbUint8_t A;   //!< unused
-    VmbUint8_t R;   //!< red part
-    VmbUint8_t G;   //!< green part
-    VmbUint8_t B;   //!< blue part
-} VmbARGB8_t, VmbARGB32_t;
-
-/** Structure for accessing Windows RGBA data.*/
-typedef struct VmbABGR8_t
-{
-#ifdef __cplusplus
-    typedef VmbUint8_t value_type;
-#endif
-    VmbUint8_t A;   //!< unused
-    VmbUint8_t B;   //!< blue part
-    VmbUint8_t G;   //!< green part
-    VmbUint8_t R;   //!< red part
-} VmbABGR8_t, VmbABGR32_t;
-
-
-/** Structure for accessing non-Windows RGB data */
-typedef struct VmbRGBA10_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t B;   //!< blue part
-    VmbUint16_t A;   //!< unused
-} VmbRGBA10_t;
-
-/** Structure for accessing Windows RGBA data.*/
-typedef struct VmbBGRA10_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t B;   //!< blue part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t A;   //!< unused
-} VmbBGRA10_t;
-
-/** Structure for accessing non-Windows RGB data */
-typedef struct VmbRGBA12_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t B;   //!< blue part
-    VmbUint16_t A;   //!< unused
-} VmbRGBA12_t;
-
-/** Structure for accessing non-Windows RGB data */
-typedef struct VmbRGBA14_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t B;   //!< blue part
-    VmbUint16_t A;   //!< unused
-} VmbRGBA14_t;
-
-/** Structure for accessing Windows RGBA data.*/
-typedef struct VmbBGRA12_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t B;   //!< blue part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t A;   //!< unused
-} VmbBGRA12_t;
-
-/** Structure for accessing Windows RGBA data.*/
-typedef struct VmbBGRA14_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t B;   //!< blue part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t A;   //!< unused
-} VmbBGRA14_t;
-/** Structure for accessing non-Windows RGB data */
-typedef struct VmbRGBA16_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t B;   //!< blue part
-    VmbUint16_t A;   //!< unused
-} VmbRGBA16_t, VmbRGBA64_t;
-
-/** Structure for accessing Windows RGBA data.*/
-typedef struct VmbBGRA16_t
-{
-#ifdef __cplusplus
-    typedef VmbUint16_t value_type;
-#endif
-    VmbUint16_t B;   //!< blue part
-    VmbUint16_t G;   //!< green part
-    VmbUint16_t R;   //!< red part
-    VmbUint16_t A;   //!< unused
-} VmbBGRA16_t, VmbBGRA64_t;
-
-
-/**Structure for accessing data in the YUV 4:4:4 format (YUV)
-    prosilica component order
-*/
-typedef struct VmbYUV444_t
-{
-#ifdef __cplusplus
-    typedef VmbUint8_t value_type;
-#endif
-    VmbUint8_t U;   //!< U
-    VmbUint8_t Y;   //!< Luma
-    VmbUint8_t V;   //!< V
-} VmbYUV444_t;
-
-//! Structure for accessing data in the YUV 4:2:2 format (UYVY)
-typedef struct VmbYUV422_t
-{
-#ifdef __cplusplus
-    typedef VmbUint8_t value_type;
-#endif
-    VmbUint8_t U;   //!< the U part for both pixels
-    VmbUint8_t Y0;  //!< the intensity of the first pixel
-    VmbUint8_t V;   //!< the V part for both pixels
-    VmbUint8_t Y1;  //!< the intensity of the second pixel
-}  VmbYUV422_t;
-
-//! Structure for accessing data in the YUV 4:1:1 format (UYYVYY)
-typedef struct VmbYUV411_t
-{
-#ifdef __cplusplus
-    typedef VmbUint8_t value_type;
-#endif
-    VmbUint8_t U;   //!< the U part for all four pixels
-    VmbUint8_t Y0;  //!< the intensity of the first pixel
-    VmbUint8_t Y1;  //!< the intensity of the second pixel
-    VmbUint8_t V;   //!< the V part for all four pixels
-    VmbUint8_t Y2;  //!< the intensity of the third pixel
-    VmbUint8_t Y3;  //!< the intensity of the fourth pixel
-}  VmbYUV411_t;
-
-//! \endcond
-
-
-
-/** image pixel layout information*/
-typedef enum VmbPixelLayout
-{
-    VmbPixelLayoutMono,
-    VmbPixelLayoutMonoPacked,
-    VmbPixelLayoutRaw,
-    VmbPixelLayoutRawPacked,
-    VmbPixelLayoutRGB,
-    VmbPixelLayoutBGR,
-    VmbPixelLayoutRGBA,
-    VmbPixelLayoutBGRA,
-    VmbPixelLayoutYUV411,
-    VmbPixelLayoutYUV422,
-    VmbPixelLayoutYUV444,
-    VmbPixelLayoutMonoP,
-    VmbPixelLayoutMonoPl,
-    VmbPixelLayoutRawP,
-    VmbPixelLayoutRawPl,
-    VmbPixelLayoutYYCbYYCr411,
-    VmbPixelLayoutCbYYCrYY411 = VmbPixelLayoutYUV411,
-    VmbPixelLayoutYCbYCr422,
-    VmbPixelLayoutCbYCrY422 = VmbPixelLayoutYUV422,
-    VmbPixelLayoutYCbCr444,
-    VmbPixelLayoutCbYCr444 = VmbPixelLayoutYUV444,
-
-    VmbPixelLayoutLAST,
-}VmbPixelLayout;
-typedef VmbUint32_t VmbPixelLayout_t;
-/**image color space information*/
-typedef enum VmbColorSpace
-{
-    VmbColorSpaceUndefined,
-    VmbColorSpaceITU_BT709,
-    VmbColorSpaceITU_BT601,
-
-}VmbColorSpace;
-typedef VmbUint32_t VmbColorSpace_t;
-/**image pixel information*/
-typedef struct VmbPixelInfo
-{
-    VmbUint32_t         BitsPerPixel;
-    VmbUint32_t         BitsUsed;
-    VmbAlignment_t      Alignment;
-    VmbEndianness_t     Endianness;
-    VmbPixelLayout_t    PixelLayout;
-    VmbBayerPattern_t   BayerPattern;
-    VmbColorSpace_t     Reserved;
-} VmbPixelInfo;
-/**image information*/
-typedef struct VmbImageInfo
-{
-    VmbUint32_t     Width;
-    VmbUint32_t     Height;
-    VmbInt32_t      Stride;
-    VmbPixelInfo    PixelInfo;
-}VmbImageInfo;
-/** wimba image type*/
-typedef struct VmbImage
-{
-    VmbUint32_t     Size; // struct size
-    void *          Data;
-    VmbImageInfo    ImageInfo;
-
-}VmbImage;
-
-/**transform info for special debayering modes*/
-typedef enum VmbDebayerMode
-{
-    VmbDebayerMode2x2,
-    VmbDebayerMode3x3,
-    VmbDebayerModeLCAA,
-    VmbDebayerModeLCAAV,
-    VmbDebayerModeYUV422,
-}VmbDebayerMode;
-typedef VmbUint32_t  VmbDebayerMode_t;
-
-/**transform info types*/
-typedef enum VmbTransformType
-{
-    VmbTransformTypeNone,
-    VmbTransformTypeDebayerMode,
-    VmbTransformTypeColorCorrectionMatrix,
-    VmbTransformTypeGammaCorrection,
-    VmbTransformTypeOffset,
-    VmbTransformTypeGain,
-}VmbTransformType;
-typedef VmbUint32_t VmbTransformType_t;
-
-/**transform info for color correction using a 3x3 matrix multiplication*/
-typedef struct VmbTransformParameterMatrix3x3
-{
-    VmbFloat_t          Matrix[9];
-}VmbTransformParameterMatrix3x3;
-/**transform info for gama correcting the immage, currently unsuported*/
-typedef struct VmbTransformParameterGamma
-{
-    VmbFloat_t          Gamma;
-}VmbTransformParameterGamma;
-/**transform info for special debayering modes*/
-typedef struct VmbTransformParameteDebayer
-{
-    VmbDebayerMode_t  Method;
-}VmbTransformParameterDebayer;
-
-typedef struct VmbTransformParameterOffset
-{
-    VmbInt32_t Offset;
-} VmbTransformParameterOffset;
-
-typedef struct VmbTransformParameterGain
-{
-    VmbUint32_t Gain;
-} VmbTransformParameterGain;
-
-/**transform info variant*/
-typedef union VmbTransformParameter
-{
-    VmbTransformParameterMatrix3x3  Matrix3x3;
-    VmbTransformParameterDebayer    Debayer;
-    VmbTransformParameterGamma      Gamma;
-    VmbTransformParameterOffset     Offset;
-    VmbTransformParameterGain       Gain;
-}VmbTransformParameter;
-/**transform info interface structure*/
-typedef struct VmbTransformInfo
-{
-    VmbTransformType_t      TransformType;
-    VmbTransformParameter   Parameter;
-}VmbTransformInfo;
-
-#endif
\ No newline at end of file
diff --git a/VimbaPython/Documentation/Vimba Python Manual.pdf b/VimbaPython/Documentation/Vimba Python Manual.pdf
deleted file mode 100644
index c06a2ec631b0ea214d976afe31d249ad426830e1..0000000000000000000000000000000000000000
Binary files a/VimbaPython/Documentation/Vimba Python Manual.pdf and /dev/null differ
diff --git a/VimbaPython/Examples/action_commands.py b/VimbaPython/Examples/action_commands.py
deleted file mode 100644
index 0818d30e121c1e8057d34ad7146f12072bce8762..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/action_commands.py
+++ /dev/null
@@ -1,163 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import sys
-from typing import Tuple
-from vimba import *
-
-
-def print_preamble():
-    print('/////////////////////////////////////////')
-    print('/// Vimba API Action Commands Example ///')
-    print('/////////////////////////////////////////\n')
-
-
-def print_usage():
-    print('Usage:')
-    print('    python action_commands.py <camera_id> <interface_id>')
-    print('    python action_commands.py [/h] [-h]')
-    print()
-    print('Parameters:')
-    print('    camera_id      ID of the camera to be used')
-    print('    interface_id   ID of network interface to send out Action Command')
-    print('                   \'ALL\' enables broadcast on all interfaces')
-    print()
-
-
-def abort(reason: str, return_code: int = 1, usage: bool = False):
-    print(reason + '\n')
-
-    if usage:
-        print_usage()
-
-    sys.exit(return_code)
-
-
-def parse_args() -> Tuple[str, str]:
-    args = sys.argv[1:]
-
-    for arg in args:
-        if arg in ('/h', '-h'):
-            print_usage()
-            sys.exit(0)
-
-    if len(args) != 2:
-        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
-
-    return (args[0], args[1])
-
-
-def get_input() -> str:
-    prompt = 'Press \'a\' to send action command. Press \'q\' to stop example. Enter:'
-    print(prompt, flush=True)
-    return input()
-
-
-def get_camera(camera_id: str) -> Camera:
-    with Vimba.get_instance() as vimba:
-        try:
-            return vimba.get_camera_by_id(camera_id)
-
-        except VimbaCameraError:
-            abort('Failed to access Camera {}. Abort.'.format(camera_id))
-
-
-def get_command_sender(interface_id):
-    # If given interface_id is ALL, ActionCommand shall be sent from all Ethernet Interfaces.
-    # This is achieved by run ActionCommand on the Vimba instance.
-    if interface_id == 'ALL':
-        return Vimba.get_instance()
-
-    with Vimba.get_instance() as vimba:
-        # A specific Interface was given. Lookup via given Interface id and verify that
-        # it is an Ethernet Interface. Running ActionCommand will be only send from this Interface.
-        try:
-            inter = vimba.get_interface_by_id(interface_id)
-
-        except VimbaInterfaceError:
-            abort('Failed to access Interface {}. Abort.'.format(interface_id))
-
-        if inter.get_type() != InterfaceType.Ethernet:
-            abort('Given Interface {} is no Ethernet Interface. Abort.'.format(interface_id))
-
-    return inter
-
-
-def frame_handler(cam: Camera, frame: Frame):
-    if frame.get_status() == FrameStatus.Complete:
-        print('Frame(ID: {}) has been received.'.format(frame.get_id()), flush=True)
-
-    cam.queue_frame(frame)
-
-
-def main():
-    print_preamble()
-    camera_id, interface_id = parse_args()
-
-    with Vimba.get_instance():
-        cam = get_camera(camera_id)
-        sender = get_command_sender(interface_id)
-
-        with cam, sender:
-            # Prepare Camera for ActionCommand - Trigger
-            device_key = 1
-            group_key = 1
-            group_mask = 1
-
-            cam.GVSPAdjustPacketSize.run()
-            while not cam.GVSPAdjustPacketSize.is_done():
-                pass
-
-            cam.TriggerSelector.set('FrameStart')
-            cam.TriggerSource.set('Action0')
-            cam.TriggerMode.set('On')
-            cam.ActionDeviceKey.set(device_key)
-            cam.ActionGroupKey.set(group_key)
-            cam.ActionGroupMask.set(group_mask)
-
-            # Enter Streaming mode and wait for user input.
-            try:
-                cam.start_streaming(frame_handler)
-
-                while True:
-                    ch = get_input()
-
-                    if ch == 'q':
-                        break
-
-                    elif ch == 'a':
-                        sender.ActionDeviceKey.set(device_key)
-                        sender.ActionGroupKey.set(group_key)
-                        sender.ActionGroupMask.set(group_mask)
-                        sender.ActionCommand.run()
-
-            finally:
-                cam.stop_streaming()
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Examples/asynchronous_grab.py b/VimbaPython/Examples/asynchronous_grab.py
deleted file mode 100644
index 415f5b6aae4d6c5e3e2a49101fe14ba3a27996a2..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/asynchronous_grab.py
+++ /dev/null
@@ -1,136 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import sys
-from typing import Optional, Tuple
-from vimba import *
-
-
-def print_preamble():
-    print('///////////////////////////////////////////')
-    print('/// Vimba API Asynchronous Grab Example ///')
-    print('///////////////////////////////////////////\n')
-
-
-def print_usage():
-    print('Usage:')
-    print('    python asynchronous_grab.py [/x] [-x] [camera_id]')
-    print('    python asynchronous_grab.py [/h] [-h]')
-    print()
-    print('Parameters:')
-    print('    /x, -x      If set, use AllocAndAnnounce mode of buffer allocation')
-    print('    camera_id   ID of the camera to use (using first camera if not specified)')
-    print()
-
-
-def abort(reason: str, return_code: int = 1, usage: bool = False):
-    print(reason + '\n')
-
-    if usage:
-        print_usage()
-
-    sys.exit(return_code)
-
-
-def parse_args() -> Tuple[Optional[str], AllocationMode]:
-    args = sys.argv[1:]
-    argc = len(args)
-
-    allocation_mode = AllocationMode.AnnounceFrame
-    cam_id = ""
-    for arg in args:
-        if arg in ('/h', '-h'):
-            print_usage()
-            sys.exit(0)
-        elif arg in ('/x', '-x'):
-            allocation_mode = AllocationMode.AllocAndAnnounceFrame
-        elif not cam_id:
-            cam_id = arg
-
-    if argc > 2:
-        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
-
-    return (cam_id if cam_id else None, allocation_mode)
-
-
-def get_camera(camera_id: Optional[str]) -> Camera:
-    with Vimba.get_instance() as vimba:
-        if camera_id:
-            try:
-                return vimba.get_camera_by_id(camera_id)
-
-            except VimbaCameraError:
-                abort('Failed to access Camera \'{}\'. Abort.'.format(camera_id))
-
-        else:
-            cams = vimba.get_all_cameras()
-            if not cams:
-                abort('No Cameras accessible. Abort.')
-
-            return cams[0]
-
-
-def setup_camera(cam: Camera):
-    with cam:
-        # Try to adjust GeV packet size. This Feature is only available for GigE - Cameras.
-        try:
-            cam.GVSPAdjustPacketSize.run()
-
-            while not cam.GVSPAdjustPacketSize.is_done():
-                pass
-
-        except (AttributeError, VimbaFeatureError):
-            pass
-
-
-def frame_handler(cam: Camera, frame: Frame):
-    print('{} acquired {}'.format(cam, frame), flush=True)
-
-    cam.queue_frame(frame)
-
-
-def main():
-    print_preamble()
-    cam_id, allocation_mode = parse_args()
-
-    with Vimba.get_instance():
-        with get_camera(cam_id) as cam:
-
-            setup_camera(cam)
-            print('Press <enter> to stop Frame acquisition.')
-
-            try:
-                # Start Streaming with a custom a buffer of 10 Frames (defaults to 5)
-                cam.start_streaming(handler=frame_handler, buffer_count=10, allocation_mode=allocation_mode)
-                input()
-
-            finally:
-                cam.stop_streaming()
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Examples/asynchronous_grab_opencv.py b/VimbaPython/Examples/asynchronous_grab_opencv.py
deleted file mode 100644
index 74cb7da96b8ca989565ce2f08a2d8022358aa79a..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/asynchronous_grab_opencv.py
+++ /dev/null
@@ -1,177 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-import threading
-import sys
-import cv2
-from typing import Optional
-from vimba import *
-
-
-def print_preamble():
-    print('///////////////////////////////////////////////////////')
-    print('/// Vimba API Asynchronous Grab with OpenCV Example ///')
-    print('///////////////////////////////////////////////////////\n')
-
-
-def print_usage():
-    print('Usage:')
-    print('    python asynchronous_grab_opencv.py [camera_id]')
-    print('    python asynchronous_grab_opencv.py [/h] [-h]')
-    print()
-    print('Parameters:')
-    print('    camera_id   ID of the camera to use (using first camera if not specified)')
-    print()
-
-
-def abort(reason: str, return_code: int = 1, usage: bool = False):
-    print(reason + '\n')
-
-    if usage:
-        print_usage()
-
-    sys.exit(return_code)
-
-
-def parse_args() -> Optional[str]:
-    args = sys.argv[1:]
-    argc = len(args)
-
-    for arg in args:
-        if arg in ('/h', '-h'):
-            print_usage()
-            sys.exit(0)
-
-    if argc > 1:
-        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
-
-    return None if argc == 0 else args[0]
-
-
-def get_camera(camera_id: Optional[str]) -> Camera:
-    with Vimba.get_instance() as vimba:
-        if camera_id:
-            try:
-                return vimba.get_camera_by_id(camera_id)
-
-            except VimbaCameraError:
-                abort('Failed to access Camera \'{}\'. Abort.'.format(camera_id))
-
-        else:
-            cams = vimba.get_all_cameras()
-            if not cams:
-                abort('No Cameras accessible. Abort.')
-
-            return cams[0]
-
-
-def setup_camera(cam: Camera):
-    with cam:
-        # Enable auto exposure time setting if camera supports it
-        try:
-            cam.ExposureAuto.set('Continuous')
-
-        except (AttributeError, VimbaFeatureError):
-            pass
-
-        # Enable white balancing if camera supports it
-        try:
-            cam.BalanceWhiteAuto.set('Continuous')
-
-        except (AttributeError, VimbaFeatureError):
-            pass
-
-        # Try to adjust GeV packet size. This Feature is only available for GigE - Cameras.
-        try:
-            cam.GVSPAdjustPacketSize.run()
-
-            while not cam.GVSPAdjustPacketSize.is_done():
-                pass
-
-        except (AttributeError, VimbaFeatureError):
-            pass
-
-        # Query available, open_cv compatible pixel formats
-        # prefer color formats over monochrome formats
-        cv_fmts = intersect_pixel_formats(cam.get_pixel_formats(), OPENCV_PIXEL_FORMATS)
-        color_fmts = intersect_pixel_formats(cv_fmts, COLOR_PIXEL_FORMATS)
-
-        if color_fmts:
-            cam.set_pixel_format(color_fmts[0])
-
-        else:
-            mono_fmts = intersect_pixel_formats(cv_fmts, MONO_PIXEL_FORMATS)
-
-            if mono_fmts:
-                cam.set_pixel_format(mono_fmts[0])
-
-            else:
-                abort('Camera does not support a OpenCV compatible format natively. Abort.')
-
-
-class Handler:
-    def __init__(self):
-        self.shutdown_event = threading.Event()
-
-    def __call__(self, cam: Camera, frame: Frame):
-        ENTER_KEY_CODE = 13
-
-        key = cv2.waitKey(1)
-        if key == ENTER_KEY_CODE:
-            self.shutdown_event.set()
-            return
-
-        elif frame.get_status() == FrameStatus.Complete:
-            print('{} acquired {}'.format(cam, frame), flush=True)
-
-            msg = 'Stream from \'{}\'. Press <Enter> to stop stream.'
-            cv2.imshow(msg.format(cam.get_name()), frame.as_opencv_image())
-
-        cam.queue_frame(frame)
-
-
-def main():
-    print_preamble()
-    cam_id = parse_args()
-
-    with Vimba.get_instance():
-        with get_camera(cam_id) as cam:
-
-            # Start Streaming, wait for five seconds, stop streaming
-            setup_camera(cam)
-            handler = Handler()
-
-            try:
-                # Start Streaming with a custom a buffer of 10 Frames (defaults to 5)
-                cam.start_streaming(handler=handler, buffer_count=10)
-                handler.shutdown_event.wait()
-
-            finally:
-                cam.stop_streaming()
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Examples/create_trace_log.py b/VimbaPython/Examples/create_trace_log.py
deleted file mode 100644
index f9a658bd9f93c20163cbf77198c3fa068c7c076e..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/create_trace_log.py
+++ /dev/null
@@ -1,51 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-
-from vimba import *
-
-
-def main():
-    print('////////////////////////////////////////////')
-    print('/// VimbaPython Create Trace Log Example ///')
-    print('////////////////////////////////////////////\n')
-
-    # Enable logging mechanism, creating a trace log. The log file is
-    # stored at the location this script was executed from.
-    vimba = Vimba.get_instance()
-    vimba.enable_log(LOG_CONFIG_TRACE_FILE_ONLY)
-
-    # While entering this scope, feature, camera and interface discovery occurs.
-    # All function calls to VimbaC are captured in the log file.
-    with vimba:
-        pass
-
-    vimba.disable_log()
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Examples/event_handling.py b/VimbaPython/Examples/event_handling.py
deleted file mode 100644
index 23b69cbe17ed07ee11bdf29f95b3d987b7ed8128..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/event_handling.py
+++ /dev/null
@@ -1,147 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import sys
-from typing import Optional
-from vimba import *
-
-
-def print_preamble():
-    print('////////////////////////////////////////')
-    print('/// Vimba API Event Handling Example ///')
-    print('////////////////////////////////////////\n')
-
-
-def print_usage():
-    print('Usage:')
-    print('    python event_handling.py [camera_id]')
-    print('    python event_handling.py [/h] [-h]')
-    print()
-    print('Parameters:')
-    print('    camera_id   ID of the camera to use (using first camera if not specified)')
-    print()
-
-
-def abort(reason: str, return_code: int = 1, usage: bool = False):
-    print(reason + '\n')
-
-    if usage:
-        print_usage()
-
-    sys.exit(return_code)
-
-
-def parse_args() -> Optional[str]:
-    args = sys.argv[1:]
-    argc = len(args)
-
-    for arg in args:
-        if arg in ('/h', '-h'):
-            print_usage()
-            sys.exit(0)
-
-    if argc > 1:
-        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
-
-    return args[0] if argc == 1 else None
-
-
-def get_camera(cam_id: Optional[str]):
-    with Vimba.get_instance() as vimba:
-        # Lookup Camera if it was specified.
-        if cam_id:
-            try:
-                cam = vimba.get_camera_by_id(cam_id)
-
-            except VimbaCameraError:
-                abort('Failed to access Camera {}. Abort.'.format(cam_id))
-
-        # If no camera was specified, use first detected camera.
-        else:
-            cams = vimba.get_all_cameras()
-            if not cams:
-                abort('No Camera detected. Abort.')
-
-            cam = cams[0]
-
-        # This example works only with GigE Cameras. Verify that Camera is connected to an
-        # Ethernet Interface.
-        inter = vimba.get_interface_by_id(cam.get_interface_id())
-
-        if inter.get_type() != InterfaceType.Ethernet:
-            abort('Example supports only GigE Cameras. Abort.')
-
-        return cam
-
-
-def setup_camera(cam: Camera):
-    with cam:
-        # Try to adjust GeV packet size. This Feature is only available for GigE - Cameras.
-        try:
-            cam.GVSPAdjustPacketSize.run()
-
-            while not cam.GVSPAdjustPacketSize.is_done():
-                pass
-
-        except (AttributeError, VimbaFeatureError):
-            pass
-
-
-def feature_changed_handler(feature):
-    msg = 'Feature \'{}\' changed value to \'{}\''
-    print(msg.format(str(feature.get_name()), str(feature.get())), flush=True)
-
-
-def main():
-    print_preamble()
-    cam_id = parse_args()
-
-    with Vimba.get_instance():
-        with get_camera(cam_id) as cam:
-            setup_camera(cam)
-
-            # Disable all events notifications
-            for event in cam.EventSelector.get_available_entries():
-                cam.EventSelector.set(event)
-                cam.EventNotification.set('Off')
-
-            # Enable event notifications on 'AcquisitionStart'
-            cam.EventSelector.set('AcquisitionStart')
-            cam.EventNotification.set('On')
-
-            # Register callable on all Features in the '/EventControl/EventData' - Category
-            feats = cam.get_features_by_category('/EventControl/EventData')
-
-            for feat in feats:
-                feat.register_change_handler(feature_changed_handler)
-
-            # Acquire a single Frame to trigger events.
-            cam.get_frame()
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Examples/list_ancillary_data.py b/VimbaPython/Examples/list_ancillary_data.py
deleted file mode 100644
index 27f547956908db0569231c8252c5fe8807294895..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/list_ancillary_data.py
+++ /dev/null
@@ -1,139 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import sys
-from typing import Optional
-from vimba import *
-
-
-def print_preamble():
-    print('//////////////////////////////////////////////////////')
-    print('/// Vimba API List Ancillary Data Features Example ///')
-    print('//////////////////////////////////////////////////////\n')
-
-
-def print_usage():
-    print('Usage:')
-    print('    python list_ancillary_data.py [camera_id]')
-    print('    python list_ancillary_data.py [/h] [-h]')
-    print()
-    print('Parameters:')
-    print('    camera_id   ID of the camera to use (using first camera if not specified)')
-    print()
-
-
-def abort(reason: str, return_code: int = 1, usage: bool = False):
-    print(reason + '\n')
-
-    if usage:
-        print_usage()
-
-    sys.exit(return_code)
-
-
-def parse_args() -> Optional[str]:
-    args = sys.argv[1:]
-    argc = len(args)
-
-    for arg in args:
-        if arg in ('/h', '-h'):
-            print_usage()
-            sys.exit(0)
-
-    if len(args) > 1:
-        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
-
-    return args[0] if argc == 1 else None
-
-
-def get_camera(camera_id: Optional[str]) -> Camera:
-    with Vimba.get_instance() as vimba:
-        if camera_id:
-            try:
-                return vimba.get_camera_by_id(camera_id)
-
-            except VimbaCameraError:
-                abort('Failed to access Camera \'{}\'. Abort.'.format(camera_id))
-
-        else:
-            cams = vimba.get_all_cameras()
-            if not cams:
-                abort('No Cameras accessible. Abort.')
-
-            return cams[0]
-
-
-def setup_camera(cam: Camera):
-    with cam:
-        # Try to adjust GeV packet size. This Feature is only available for GigE - Cameras.
-        try:
-            cam.GVSPAdjustPacketSize.run()
-
-            while not cam.GVSPAdjustPacketSize.is_done():
-                pass
-
-        except (AttributeError, VimbaFeatureError):
-            pass
-
-        # Try to enable ChunkMode
-        try:
-            cam.ChunkModeActive.set(True)
-
-        except (AttributeError, VimbaFeatureError):
-            abort('Failed to enable ChunkMode on Camera \'{}\'. Abort.'.format(cam.get_id()))
-
-
-def main():
-    print_preamble()
-    cam_id = parse_args()
-
-    with Vimba.get_instance():
-        with get_camera(cam_id) as cam:
-            setup_camera(cam)
-
-            # Capture single Frame and print all contained ancillary data
-            frame = cam.get_frame()
-            anc_data = frame.get_ancillary_data()
-            if anc_data:
-                with anc_data:
-                    print('Print ancillary data contained in Frame:')
-
-                    for feat in anc_data.get_all_features():
-                        print('Feature Name   : {}'.format(feat.get_name()))
-                        print('Display Name   : {}'.format(feat.get_display_name()))
-                        print('Tooltip        : {}'.format(feat.get_tooltip()))
-                        print('Description    : {}'.format(feat.get_description()))
-                        print('SFNC Namespace : {}'.format(feat.get_sfnc_namespace()))
-                        print('Value          : {}'.format(feat.get()))
-                        print()
-
-            else:
-                abort('Frame {} does not contain AncillaryData. Abort'.format(frame.get_id()))
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Examples/list_cameras.py b/VimbaPython/Examples/list_cameras.py
deleted file mode 100644
index 1168001905664937dbf86135f4a303565732e94c..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/list_cameras.py
+++ /dev/null
@@ -1,57 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-from vimba import *
-
-
-def print_preamble():
-    print('//////////////////////////////////////')
-    print('/// Vimba API List Cameras Example ///')
-    print('//////////////////////////////////////\n')
-
-
-def print_camera(cam: Camera):
-    print('/// Camera Name   : {}'.format(cam.get_name()))
-    print('/// Model Name    : {}'.format(cam.get_model()))
-    print('/// Camera ID     : {}'.format(cam.get_id()))
-    print('/// Serial Number : {}'.format(cam.get_serial()))
-    print('/// Interface ID  : {}\n'.format(cam.get_interface_id()))
-
-
-def main():
-    print_preamble()
-    with Vimba.get_instance() as vimba:
-        cams = vimba.get_all_cameras()
-
-        print('Cameras found: {}'.format(len(cams)))
-
-        for cam in cams:
-            print_camera(cam)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Examples/list_features.py b/VimbaPython/Examples/list_features.py
deleted file mode 100644
index f1bdd6573ec2bc13e39f425959a0b67b5613bf7c..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/list_features.py
+++ /dev/null
@@ -1,119 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import sys
-from typing import Optional
-from vimba import *
-
-
-def print_preamble():
-    print('///////////////////////////////////////')
-    print('/// Vimba API List Features Example ///')
-    print('///////////////////////////////////////\n')
-
-
-def print_usage():
-    print('Usage:')
-    print('    python list_features.py [camera_id]')
-    print('    python list_features.py [/h] [-h]')
-    print()
-    print('Parameters:')
-    print('    camera_id   ID of the camera to use (using first camera if not specified)')
-    print()
-
-
-def abort(reason: str, return_code: int = 1, usage: bool = False):
-    print(reason + '\n')
-
-    if usage:
-        print_usage()
-
-    sys.exit(return_code)
-
-
-def parse_args() -> Optional[str]:
-    args = sys.argv[1:]
-    argc = len(args)
-
-    for arg in args:
-        if arg in ('/h', '-h'):
-            print_usage()
-            sys.exit(0)
-
-    if argc > 1:
-        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
-
-    return None if argc == 0 else args[0]
-
-
-def print_feature(feature):
-    try:
-        value = feature.get()
-
-    except (AttributeError, VimbaFeatureError):
-        value = None
-
-    print('/// Feature name   : {}'.format(feature.get_name()))
-    print('/// Display name   : {}'.format(feature.get_display_name()))
-    print('/// Tooltip        : {}'.format(feature.get_tooltip()))
-    print('/// Description    : {}'.format(feature.get_description()))
-    print('/// SFNC Namespace : {}'.format(feature.get_sfnc_namespace()))
-    print('/// Unit           : {}'.format(feature.get_unit()))
-    print('/// Value          : {}\n'.format(str(value)))
-
-
-def get_camera(camera_id: Optional[str]) -> Camera:
-    with Vimba.get_instance() as vimba:
-        if camera_id:
-            try:
-                return vimba.get_camera_by_id(camera_id)
-
-            except VimbaCameraError:
-                abort('Failed to access Camera \'{}\'. Abort.'.format(camera_id))
-
-        else:
-            cams = vimba.get_all_cameras()
-            if not cams:
-                abort('No Cameras accessible. Abort.')
-
-            return cams[0]
-
-
-def main():
-    print_preamble()
-    cam_id = parse_args()
-
-    with Vimba.get_instance():
-        with get_camera(cam_id) as cam:
-
-            print('Print all features of camera \'{}\':'.format(cam.get_id()))
-            for feature in cam.get_all_features():
-                print_feature(feature)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Examples/load_save_settings.py b/VimbaPython/Examples/load_save_settings.py
deleted file mode 100644
index b647ceab51171ee82e845b103496feeffea8470c..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/load_save_settings.py
+++ /dev/null
@@ -1,125 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import sys
-from typing import Optional
-from vimba import *
-
-
-def print_preamble():
-    print('////////////////////////////////////////////')
-    print('/// Vimba API Load Save Settings Example ///')
-    print('////////////////////////////////////////////\n')
-
-
-def print_usage():
-    print('Usage:')
-    print('    python load_save_settings.py [camera_id]')
-    print('    python load_save_settings.py [/h] [-h]')
-    print()
-    print('Parameters:')
-    print('    camera_id   ID of the camera to use (using first camera if not specified)')
-    print()
-
-
-def abort(reason: str, return_code: int = 1, usage: bool = False):
-    print(reason + '\n')
-
-    if usage:
-        print_usage()
-
-    sys.exit(return_code)
-
-
-def parse_args() -> Optional[str]:
-    args = sys.argv[1:]
-    argc = len(args)
-
-    for arg in args:
-        if arg in ('/h', '-h'):
-            print_usage()
-            sys.exit(0)
-
-    if argc > 1:
-        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
-
-    return None if argc == 0 else args[0]
-
-
-def get_camera(camera_id: Optional[str]) -> Camera:
-    with Vimba.get_instance() as vimba:
-        if camera_id:
-            try:
-                return vimba.get_camera_by_id(camera_id)
-
-            except VimbaCameraError:
-                abort('Failed to access Camera \'{}\'. Abort.'.format(camera_id))
-
-        else:
-            cams = vimba.get_all_cameras()
-            if not cams:
-                abort('No Cameras accessible. Abort.')
-
-            return cams[0]
-
-
-def main():
-    print_preamble()
-    cam_id = parse_args()
-
-    with Vimba.get_instance():
-        print("--> Vimba has been started")
-
-        with get_camera(cam_id) as cam:
-            print("--> Camera has been opened (%s)" % cam.get_id())
-
-            # Save camera settings to file.
-            settings_file = '{}_settings.xml'.format(cam.get_id())
-            cam.save_settings(settings_file, PersistType.All)
-            print("--> Feature values have been saved to '%s'" % settings_file)
-
-            # Restore settings to initial value.
-            try:
-                cam.UserSetSelector.set('Default')
-
-            except (AttributeError, VimbaFeatureError):
-                abort('Failed to set Feature \'UserSetSelector\'')
-
-            try:
-                cam.UserSetLoad.run()
-                print("--> All feature values have been restored to default")
-
-            except (AttributeError, VimbaFeatureError):
-                abort('Failed to run Feature \'UserSetLoad\'')
-
-            # Load camera settings from file.
-            cam.load_settings(settings_file, PersistType.All)
-            print("--> Feature values have been loaded from given file '%s'" % settings_file)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Examples/multithreading_opencv.py b/VimbaPython/Examples/multithreading_opencv.py
deleted file mode 100644
index db2d1caed61faab9cc75059c468b48e012ee386f..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/multithreading_opencv.py
+++ /dev/null
@@ -1,299 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import copy
-import cv2
-import threading
-import queue
-import numpy
-
-from typing import Optional
-from vimba import *
-
-
-FRAME_QUEUE_SIZE = 10
-FRAME_HEIGHT = 480
-FRAME_WIDTH = 480
-
-
-def print_preamble():
-    print('////////////////////////////////////////////')
-    print('/// Vimba API Multithreading Example ///////')
-    print('////////////////////////////////////////////\n')
-    print(flush=True)
-
-
-def add_camera_id(frame: Frame, cam_id: str) -> Frame:
-    # Helper function inserting 'cam_id' into given frame. This function
-    # manipulates the original image buffer inside frame object.
-    cv2.putText(frame.as_opencv_image(), 'Cam: {}'.format(cam_id), org=(0, 30), fontScale=1,
-                color=255, thickness=1, fontFace=cv2.FONT_HERSHEY_COMPLEX_SMALL)
-    return frame
-
-
-def resize_if_required(frame: Frame) -> numpy.ndarray:
-    # Helper function resizing the given frame, if it has not the required dimensions.
-    # On resizing, the image data is copied and resized, the image inside the frame object
-    # is untouched.
-    cv_frame = frame.as_opencv_image()
-
-    if (frame.get_height() != FRAME_HEIGHT) or (frame.get_width() != FRAME_WIDTH):
-        cv_frame = cv2.resize(cv_frame, (FRAME_WIDTH, FRAME_HEIGHT), interpolation=cv2.INTER_AREA)
-        cv_frame = cv_frame[..., numpy.newaxis]
-
-    return cv_frame
-
-
-def create_dummy_frame() -> numpy.ndarray:
-    cv_frame = numpy.zeros((50, 640, 1), numpy.uint8)
-    cv_frame[:] = 0
-
-    cv2.putText(cv_frame, 'No Stream available. Please connect a Camera.', org=(30, 30),
-                fontScale=1, color=255, thickness=1, fontFace=cv2.FONT_HERSHEY_COMPLEX_SMALL)
-
-    return cv_frame
-
-
-def try_put_frame(q: queue.Queue, cam: Camera, frame: Optional[Frame]):
-    try:
-        q.put_nowait((cam.get_id(), frame))
-
-    except queue.Full:
-        pass
-
-
-def set_nearest_value(cam: Camera, feat_name: str, feat_value: int):
-    # Helper function that tries to set a given value. If setting of the initial value failed
-    # it calculates the nearest valid value and sets the result. This function is intended to
-    # be used with Height and Width Features because not all Cameras allow the same values
-    # for height and width.
-    feat = cam.get_feature_by_name(feat_name)
-
-    try:
-        feat.set(feat_value)
-
-    except VimbaFeatureError:
-        min_, max_ = feat.get_range()
-        inc = feat.get_increment()
-
-        if feat_value <= min_:
-            val = min_
-
-        elif feat_value >= max_:
-            val = max_
-
-        else:
-            val = (((feat_value - min_) // inc) * inc) + min_
-
-        feat.set(val)
-
-        msg = ('Camera {}: Failed to set value of Feature \'{}\' to \'{}\': '
-               'Using nearest valid value \'{}\'. Note that, this causes resizing '
-               'during processing, reducing the frame rate.')
-        Log.get_instance().info(msg.format(cam.get_id(), feat_name, feat_value, val))
-
-
-# Thread Objects
-class FrameProducer(threading.Thread):
-    def __init__(self, cam: Camera, frame_queue: queue.Queue):
-        threading.Thread.__init__(self)
-
-        self.log = Log.get_instance()
-        self.cam = cam
-        self.frame_queue = frame_queue
-        self.killswitch = threading.Event()
-
-    def __call__(self, cam: Camera, frame: Frame):
-        # This method is executed within VimbaC context. All incoming frames
-        # are reused for later frame acquisition. If a frame shall be queued, the
-        # frame must be copied and the copy must be sent, otherwise the acquired
-        # frame will be overridden as soon as the frame is reused.
-        if frame.get_status() == FrameStatus.Complete:
-
-            if not self.frame_queue.full():
-                frame_cpy = copy.deepcopy(frame)
-                try_put_frame(self.frame_queue, cam, frame_cpy)
-
-        cam.queue_frame(frame)
-
-    def stop(self):
-        self.killswitch.set()
-
-    def setup_camera(self):
-        set_nearest_value(self.cam, 'Height', FRAME_HEIGHT)
-        set_nearest_value(self.cam, 'Width', FRAME_WIDTH)
-
-        # Try to enable automatic exposure time setting
-        try:
-            self.cam.ExposureAuto.set('Once')
-
-        except (AttributeError, VimbaFeatureError):
-            self.log.info('Camera {}: Failed to set Feature \'ExposureAuto\'.'.format(
-                          self.cam.get_id()))
-
-        self.cam.set_pixel_format(PixelFormat.Mono8)
-
-    def run(self):
-        self.log.info('Thread \'FrameProducer({})\' started.'.format(self.cam.get_id()))
-
-        try:
-            with self.cam:
-                self.setup_camera()
-
-                try:
-                    self.cam.start_streaming(self)
-                    self.killswitch.wait()
-
-                finally:
-                    self.cam.stop_streaming()
-
-        except VimbaCameraError:
-            pass
-
-        finally:
-            try_put_frame(self.frame_queue, self.cam, None)
-
-        self.log.info('Thread \'FrameProducer({})\' terminated.'.format(self.cam.get_id()))
-
-
-class FrameConsumer(threading.Thread):
-    def __init__(self, frame_queue: queue.Queue):
-        threading.Thread.__init__(self)
-
-        self.log = Log.get_instance()
-        self.frame_queue = frame_queue
-
-    def run(self):
-        IMAGE_CAPTION = 'Multithreading Example: Press <Enter> to exit'
-        KEY_CODE_ENTER = 13
-
-        frames = {}
-        alive = True
-
-        self.log.info('Thread \'FrameConsumer\' started.')
-
-        while alive:
-            # Update current state by dequeuing all currently available frames.
-            frames_left = self.frame_queue.qsize()
-            while frames_left:
-                try:
-                    cam_id, frame = self.frame_queue.get_nowait()
-
-                except queue.Empty:
-                    break
-
-                # Add/Remove frame from current state.
-                if frame:
-                    frames[cam_id] = frame
-
-                else:
-                    frames.pop(cam_id, None)
-
-                frames_left -= 1
-
-            # Construct image by stitching frames together.
-            if frames:
-                cv_images = [resize_if_required(frames[cam_id]) for cam_id in sorted(frames.keys())]
-                cv2.imshow(IMAGE_CAPTION, numpy.concatenate(cv_images, axis=1))
-
-            # If there are no frames available, show dummy image instead
-            else:
-                cv2.imshow(IMAGE_CAPTION, create_dummy_frame())
-
-            # Check for shutdown condition
-            if KEY_CODE_ENTER == cv2.waitKey(10):
-                cv2.destroyAllWindows()
-                alive = False
-
-        self.log.info('Thread \'FrameConsumer\' terminated.')
-
-
-class MainThread(threading.Thread):
-    def __init__(self):
-        threading.Thread.__init__(self)
-
-        self.frame_queue = queue.Queue(maxsize=FRAME_QUEUE_SIZE)
-        self.producers = {}
-        self.producers_lock = threading.Lock()
-
-    def __call__(self, cam: Camera, event: CameraEvent):
-        # New camera was detected. Create FrameProducer, add it to active FrameProducers
-        if event == CameraEvent.Detected:
-            with self.producers_lock:
-                self.producers[cam.get_id()] = FrameProducer(cam, self.frame_queue)
-                self.producers[cam.get_id()].start()
-
-        # An existing camera was disconnected, stop associated FrameProducer.
-        elif event == CameraEvent.Missing:
-            with self.producers_lock:
-                producer = self.producers.pop(cam.get_id())
-                producer.stop()
-                producer.join()
-
-    def run(self):
-        log = Log.get_instance()
-        consumer = FrameConsumer(self.frame_queue)
-
-        vimba = Vimba.get_instance()
-        vimba.enable_log(LOG_CONFIG_INFO_CONSOLE_ONLY)
-
-        log.info('Thread \'MainThread\' started.')
-
-        with vimba:
-            # Construct FrameProducer threads for all detected cameras
-            for cam in vimba.get_all_cameras():
-                self.producers[cam.get_id()] = FrameProducer(cam, self.frame_queue)
-
-            # Start FrameProducer threads
-            with self.producers_lock:
-                for producer in self.producers.values():
-                    producer.start()
-
-            # Start and wait for consumer to terminate
-            vimba.register_camera_change_handler(self)
-            consumer.start()
-            consumer.join()
-            vimba.unregister_camera_change_handler(self)
-
-            # Stop all FrameProducer threads
-            with self.producers_lock:
-                # Initiate concurrent shutdown
-                for producer in self.producers.values():
-                    producer.stop()
-
-                # Wait for shutdown to complete
-                for producer in self.producers.values():
-                    producer.join()
-
-        log.info('Thread \'MainThread\' terminated.')
-
-
-if __name__ == '__main__':
-    print_preamble()
-    main = MainThread()
-    main.start()
-    main.join()
diff --git a/VimbaPython/Examples/synchronous_grab.py b/VimbaPython/Examples/synchronous_grab.py
deleted file mode 100644
index 30a9e863b0bf1009c7a3a8bddbe0d6c6001fea4f..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/synchronous_grab.py
+++ /dev/null
@@ -1,117 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import sys
-from typing import Optional
-from vimba import *
-
-
-def print_preamble():
-    print('//////////////////////////////////////////')
-    print('/// Vimba API Synchronous Grab Example ///')
-    print('//////////////////////////////////////////\n')
-
-
-def print_usage():
-    print('Usage:')
-    print('    python synchronous_grab.py [camera_id]')
-    print('    python synchronous_grab.py [/h] [-h]')
-    print()
-    print('Parameters:')
-    print('    camera_id   ID of the camera to use (using first camera if not specified)')
-    print()
-
-
-def abort(reason: str, return_code: int = 1, usage: bool = False):
-    print(reason + '\n')
-
-    if usage:
-        print_usage()
-
-    sys.exit(return_code)
-
-
-def parse_args() -> Optional[str]:
-    args = sys.argv[1:]
-    argc = len(args)
-
-    for arg in args:
-        if arg in ('/h', '-h'):
-            print_usage()
-            sys.exit(0)
-
-    if argc > 1:
-        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
-
-    return None if argc == 0 else args[0]
-
-
-def get_camera(camera_id: Optional[str]) -> Camera:
-    with Vimba.get_instance() as vimba:
-        if camera_id:
-            try:
-                return vimba.get_camera_by_id(camera_id)
-
-            except VimbaCameraError:
-                abort('Failed to access Camera \'{}\'. Abort.'.format(camera_id))
-
-        else:
-            cams = vimba.get_all_cameras()
-            if not cams:
-                abort('No Cameras accessible. Abort.')
-
-            return cams[0]
-
-
-def setup_camera(cam: Camera):
-    with cam:
-        # Try to adjust GeV packet size. This Feature is only available for GigE - Cameras.
-        try:
-            cam.GVSPAdjustPacketSize.run()
-
-            while not cam.GVSPAdjustPacketSize.is_done():
-                pass
-
-        except (AttributeError, VimbaFeatureError):
-            pass
-
-
-def main():
-    print_preamble()
-    cam_id = parse_args()
-
-    with Vimba.get_instance():
-        with get_camera(cam_id) as cam:
-            setup_camera(cam)
-
-            # Acquire 10 frame with a custom timeout (default is 2000ms) per frame acquisition.
-            for frame in cam.get_frame_generator(limit=10, timeout_ms=3000):
-                print('Got {}'.format(frame), flush=True)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Examples/user_set.py b/VimbaPython/Examples/user_set.py
deleted file mode 100644
index d82da6aecf22ce5203e87206b3e6f2090b652577..0000000000000000000000000000000000000000
--- a/VimbaPython/Examples/user_set.py
+++ /dev/null
@@ -1,328 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import sys
-from typing import Optional, Dict, Any
-from vimba import *
-
-
-def print_preamble():
-    print('//////////////////////////////////')
-    print('/// Vimba API User Set Example ///')
-    print('//////////////////////////////////\n')
-
-
-def print_usage():
-    print('Usage:')
-    print('    python user_set.py [camera_id] [/i:Index] [/{h|s|l|i|m|d|or|os|n}]')
-    print()
-    print('Parameters:')
-    print('    camera_id   ID of the camera to use (using first camera if not specified)')
-    print('    /i:index    User set index')
-    print('    /h          Print help')
-    print('    /s          Save user set to flash')
-    print('    /l          Load user set from flash (default if not specified)')
-    print('    /i          Get selected user set index')
-    print('    /m          Make user set default')
-    print('    /d          Is user set default')
-    print('    /or         Get user set operation default.')
-    print('    /os         Get user set operation status.')
-    print('    /n          Get user set count')
-    print()
-    print('Examples:')
-    print('     To load user set 0 (factory set) from flash in order to activate it call:')
-    print('     UserSet /i:0 /l')
-    print()
-    print('     To save the current settings to user set 1 call:')
-    print('     UserSet /i:1 /s')
-    print()
-
-
-def abort(reason: str, return_code: int = 1, usage: bool = False):
-    print(reason + '\n')
-
-    if usage:
-        print_usage()
-
-    sys.exit(return_code)
-
-
-def parse_args() -> Dict[str, Any]:
-    args = sys.argv[1:]
-    argc = len(args)
-
-    result: Dict[str, Any] = {}
-
-    if (argc <= 0) or (4 <= argc):
-        abort(reason="Invalid number of arguments. Abort.", return_code=2, usage=True)
-
-    for arg in args:
-        if arg in ('/h'):
-            print_usage()
-            sys.exit(0)
-
-        # Examine command parameters
-        if arg in ('/s', '/l', '/i', '/m', '/d', '/or', '/os', '/n'):
-            if result.get('mode') is None:
-                result['mode'] = arg
-
-            else:
-                abort(reason="Multiple Commands specified. Abort.", return_code=2, usage=True)
-
-        # Examine specified index
-        elif arg.startswith('/i:'):
-            _, set_id = arg.split(':')
-
-            if not set_id:
-                abort(reason="No index specified after /i:. Abort.", return_code=2, usage=True)
-
-            try:
-                set_id_int = int(set_id)
-
-            except ValueError:
-                abort(reason="Number in /i:<no> is no Integer. Abort.", return_code=2, usage=True)
-
-            if set_id_int < 0:
-                abort(reason="Number in /i:<no> is negative. Abort.", return_code=2, usage=True)
-
-            if result.get('set_id') is not None:
-                abort(reason="Multiple /i:<no> specified. Abort.", return_code=2, usage=True)
-
-            result['set_id'] = set_id_int
-
-        # Examine camera id
-        elif result.get('camera_id') is None:
-            result['camera_id'] = arg
-
-        else:
-            abort(reason="Invalid arguments. Abort.", return_code=2, usage=True)
-
-    # Apply defaults
-    if not result.get('mode'):
-        result['mode'] = '/l'
-
-    return result
-
-
-def get_camera(cam_id: Optional[str]):
-    with Vimba.get_instance() as vimba:
-        # Lookup Camera if it was specified.
-        if cam_id:
-            try:
-                return vimba.get_camera_by_id(cam_id)
-
-            except VimbaCameraError:
-                abort('Failed to access Camera {}. Abort.'.format(cam_id))
-
-        # If no camera was specified, use first detected camera.
-        else:
-            cams = vimba.get_all_cameras()
-            if not cams:
-                abort('No Camera detected. Abort.')
-
-            return cams[0]
-
-
-def select_user_set(camera: Camera, set_id: int):
-    try:
-        camera.get_feature_by_name('UserSetSelector').set(set_id)
-
-    except VimbaFeatureError:
-        abort('Failed to select user set with \'{}\'. Abort.'.format(set_id))
-
-
-def load_from_flash(cam: Camera, set_id: int):
-    with cam:
-        print('Loading user set \'{}\' from flash.'.format(set_id))
-
-        select_user_set(cam, set_id)
-
-        try:
-            cmd = cam.get_feature_by_name('UserSetLoad')
-            cmd.run()
-
-            while not cmd.is_done():
-                pass
-
-        except VimbaFeatureError:
-            abort('Failed to load user set \'{}\' from flash. Abort.'.format(set_id))
-
-        print('Loaded user set \'{}\' loaded from flash successfully.'.format(set_id))
-
-
-def save_to_flash(cam: Camera, set_id: int):
-    with cam:
-        print('Saving user set \'{}\' to flash.'.format(set_id))
-
-        select_user_set(cam, set_id)
-
-        try:
-            cmd = cam.get_feature_by_name('UserSetSave')
-            cmd.run()
-
-            while not cmd.is_done():
-                pass
-
-        except VimbaFeatureError:
-            abort('Failed to save user set \'{}\' to flash. Abort.'.format(set_id))
-
-        print('Saved user set \'{}\' to flash.'.format(set_id))
-
-
-def get_active_user_set(cam: Camera, _: int):
-    with cam:
-        print('Get selected user set id.')
-
-        try:
-            value = cam.get_feature_by_name('UserSetSelector').get()
-
-        except VimbaFeatureError:
-            abort('Failed to get user set id. Abort.')
-
-        print('The selected user set id is \'{}\'.'.format(int(value)))
-
-
-def get_number_of_user_sets(cam: Camera, _: int):
-    with cam:
-        print('Get total number of user sets.')
-
-        try:
-            feat = cam.get_feature_by_name('UserSetSelector')
-            value = len(feat.get_available_entries())
-
-        except VimbaFeatureError:
-            abort('Failed to get total number of user sets. Abort.')
-
-        print('The total number of user sets is \'{}\''.format(value))
-
-
-def set_default_user_set(cam: Camera, set_id: int):
-    with cam:
-        print('Set user set \'{}\' as default.'.format(set_id))
-
-        # Try to set mode via UserSetDefaultSelector feature
-        try:
-            feat = cam.get_feature_by_name('UserSetDefaultSelector')
-
-            try:
-                feat.set(set_id)
-
-            except VimbaFeatureError:
-                abort('Failed to set user set id \'{}\' as default user set'.format(set_id))
-
-        except VimbaFeatureError:
-            # Try to set mode via UserSetMakeDefault command
-            select_user_set(cam, set_id)
-
-            try:
-                cmd = cam.get_feature_by_name('UserSetMakeDefault')
-                cmd.run()
-
-                while not cmd.is_done():
-                    pass
-
-            except VimbaFeatureError:
-                abort('Failed to set user set id \'{}\' as default user set'.format(set_id))
-
-        print('User set \'{}\' is the new default user set.'.format(set_id))
-
-
-def is_default_user_set(cam: Camera, set_id: int):
-    with cam:
-        print('Is user set \'{}\' the default user set?'.format(set_id))
-
-        try:
-            default_id = int(cam.get_feature_by_name('UserSetDefaultSelector').get())
-
-        except VimbaFeatureError:
-            abort('Failed to get default user set id. Abort.')
-
-        msg = 'User set \'{}\' {} the default user set.'
-        print(msg.format(set_id, 'is' if set_id == default_id else 'is not'))
-
-
-def get_operation_result(cam: Camera, set_id: int):
-    with cam:
-        print('Get user set operation result.')
-
-        try:
-            result = cam.get_feature_by_name('UserSetOperationResult').get()
-
-        except VimbaFeatureError:
-            abort('Failed to get user set operation result. Abort.')
-
-        print('Operation result was {}.'.format(result))
-
-
-def get_operation_status(cam: Camera, set_id: int):
-    with cam:
-        print('Get user set operation status.')
-
-        try:
-            result = cam.get_feature_by_name('UserSetOperationStatus').get()
-
-        except VimbaFeatureError:
-            abort('Failed to get user set operation status. Abort.')
-
-        print('Operation status was {}.'.format(result))
-
-
-def main():
-    print_preamble()
-    args = parse_args()
-
-    with Vimba.get_instance():
-        cam = get_camera(args.get('camera_id'))
-        print('Using Camera with ID \'{}\''.format(cam.get_id()))
-
-        with cam:
-            mode = args['mode']
-
-            try:
-                set_id = args.get('set_id', int(cam.get_feature_by_name('UserSetSelector').get()))
-
-            except VimbaFeatureError:
-                abort('Failed to get id of current user set. Abort.')
-
-            # Mode -> Function Object mapping
-            mode_to_fn = {
-                '/l': load_from_flash,
-                '/s': save_to_flash,
-                '/i': get_active_user_set,
-                '/n': get_number_of_user_sets,
-                '/m': set_default_user_set,
-                '/d': is_default_user_set,
-                '/or': get_operation_result,
-                '/os': get_operation_status
-            }
-
-            fn = mode_to_fn[mode]
-            fn(cam, set_id)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Install.sh b/VimbaPython/Install.sh
deleted file mode 100755
index e1d6111e1a3a66da842111b27135c484ccb72f3d..0000000000000000000000000000000000000000
--- a/VimbaPython/Install.sh
+++ /dev/null
@@ -1,299 +0,0 @@
-#!/usr/bin/env bash
-
-# BSD 2-Clause License
-#
-# Copyright (c) 2019, Allied Vision Technologies GmbH
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# 1. Redistributions of source code must retain the above copyright notice, this
-#    list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright notice,
-#    this list of conditions and the following disclaimer in the documentation
-#    and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# global parameters parsed from command line flags 
-DEBUG=false
-
-while getopts "d" flag; do
-  case "${flag}" in
-    d) DEBUG=true ;;
-    *) ;;
-  esac
-done
-
-function get_bool_input()
-{
-    QUESTION=$1
-    TRUTHY=$2
-    FALSY=$3
-    DEFAULT=$4
-    ANSWER=""
-
-    while [[ "$ANSWER" != "$TRUTHY" ]] && [[ "$ANSWER" != "$FALSY" ]]
-    do
-        echo -n "$QUESTION"
-        read ANSWER
-
-        # Use Default value if it was supplied and the input was empty.
-        if [[ -z "$ANSWER" ]] && [[ ! -z "$DEFAULT" ]]
-        then
-            ANSWER=$DEFAULT
-        fi
-
-        # Print message if given input is invalid.
-        if [[ "$ANSWER" != "$TRUTHY" ]] && [[ "$ANSWER" != "$FALSY" ]]
-        then
-            echo "  Error: Given Input must be either \"$TRUTHY\" or \"$FALSY\". Try again."
-        fi
-    done
-
-    # Run test command to set return value for later evaluation.
-    [[ "$ANSWER" == "$TRUTHY" ]]
-}
-
-function inside_virtual_env
-{
-    if [ -z "$VIRTUAL_ENV" ]; then
-        echo "false"
-    else
-        echo "true"
-    fi
-}
-
-function get_python_versions
-{
-    DETECTED_PYTHONS=()
-
-    # Check if the script was run from a virtual environment and set search path for binary accordingly
-    if [ "$(inside_virtual_env)" = true ]; then
-        if [ "$DEBUG" = true ] ; then
-            echo "Detected active virtual environment" >&2
-        fi
-        SEARCH_PATH="$VIRTUAL_ENV"/bin
-    else
-        if [ "$DEBUG" = true ] ; then
-            echo "No virtual environment detected" >&2
-        fi
-        SEARCH_PATH=$(echo "$PATH" | tr ":" " ")
-    fi
-
-    if [ "$DEBUG" = true ] ; then
-        echo "Searching for python in $SEARCH_PATH" >&2
-    fi
-
-    # iterate over all detected python binaries and check if they are viable installations
-    for P in $(whereis -b -B $SEARCH_PATH -f python | tr " " "\n" | grep "python[[:digit:]]\.[[:digit:]]\.\?[[:digit:]]\?$" | sort -V)
-    do
-        # 1) Remove results that are links (venv executables are often links so we allow those)
-        if [ -L "$P" ] && [ "$(inside_virtual_env)" = false ]
-        then
-            if [ "$DEBUG" = true ] ; then
-                echo "$P was a link" >&2
-            fi
-            continue
-        fi
-
-        # 2) Remove results that are directories
-        if [ -d "$P" ]
-        then
-            if [ "$DEBUG" = true ] ; then
-                echo "$P was a directory" >&2
-            fi
-            continue
-        fi
-
-        # 3) Remove incompatible versions (<3.7)
-        # patch is ignored but has to be parsed in case the binary name contains it
-        FILENAME=$(basename -- "$P")
-        read -r MAJOR MINOR PATCH < <(echo $FILENAME | tr -dc "0-9." | tr "." " ")
-        if [ $MAJOR -gt 3 ] || { [ $MAJOR -eq 3 ] && [ $MINOR -ge 7 ]; }; then
-            : # the interperter is compatible
-        else
-            if [ "$DEBUG" = true ] ; then
-                echo "$P is not compatible. VimbaPython requires python >=3.7" >&2
-            fi
-            continue
-        fi
-
-        # 4) Remove results that offer no pip support.
-        $P -m pip > /dev/null 2>&1
-        if [ $? -ne 0 ]
-        then
-            if [ "$DEBUG" = true ] ; then
-                echo "$P did not have pip support" >&2
-            fi
-            continue 
-        fi
-        DETECTED_PYTHONS+=("$P")
-    done
-    echo "${DETECTED_PYTHONS[@]}"
-}
-
-echo "###############################"
-echo "# VimbaPython install script. #"
-echo "###############################"
-
-#########################
-# Perform sanity checks #
-#########################
-
-# root is only required if we are not installing in a virtual environment
-if [ $UID -ne 0 ] && [ "$(inside_virtual_env)" = false ]
-then
-    echo "Error: Installation requires root priviliges. Abort."
-    exit 1
-fi
-
-PWD=$(pwd)
-PWD=${PWD##*/}
-
-if [[ "$PWD" != "VimbaPython" ]]
-then
-    echo "Error: Please execute Install.sh within VimbaPython directory."
-    exit 1
-fi
-
-# get path to setup.py file
-SOURCEDIR="$(find . -name setup.py -type f -printf '%h' -quit)"
-if [ -z "$SOURCEDIR" ]
-then
-    echo "Error: setup.py not found. Abort"
-    exit 1
-fi
-
-PYTHONS=$(get_python_versions)
-
-if [ -z "$PYTHONS" ]
-then
-    echo "Error: No compatible Python version with pip support found. Abort."
-    exit 1
-fi
-
-
-#################################################
-# Determine python installation for VimbaPython #
-#################################################
-
-# List all given interpreters and create an Index
-echo "The following Python versions with pip support were detected:"
-
-ITER=0
-
-for ITEM in ${PYTHONS[@]}
-do  
-    echo "  $ITER: $ITEM"
-    LAST=$ITER
-    ITER=$(expr $ITER + 1)
-done
-
-# Read and verfiy user input
-while true
-do
-    echo -n "Enter python version to install VimbaPython (0 - $LAST, default: 0): "
-    read TMP
-
-    if [ -z "$TMP" ]
-    then
-        TMP=0
-    fi
-
-    # Check if Input was a number. If so: assign it.
-    if [ $TMP -eq $TMP ] 2>/dev/null
-    then
-        ITER=$TMP
-    else
-        echo "  Error: Given input was not a number. Try again."
-        continue
-    fi
-
-    # Verify Input range
-    if [ 0 -le $ITER ] && [ $ITER -le $LAST ]
-    then
-        break
-
-    else
-        echo "  Error: Given input is not between 0 and $LAST. Try again."
-    fi
-done
-
-# Search for selected python interpreter
-IDX=0
-PYTHON=""
-
-for ITEM in ${PYTHONS[@]}
-do  
-    if [ $IDX -eq $ITER ]
-    then
-        PYTHON=$ITEM
-        break
-    else
-        IDX=$(expr $IDX + 1)
-    fi
-done
-
-echo "Installing VimbaPython for $PYTHON"
-echo ""
-
-##################################################
-# Determine installation targets from user input #
-##################################################
-TARGET=""
-
-# Ask for numpy support
-get_bool_input "Install VimbaPython with numpy support (yes/no, default: yes):" "yes" "no" "yes"
-if [ $? -eq 0 ]
-then
-    TARGET="numpy-export"
-    echo "Installing VimbaPython with numpy support."
-else
-    echo "Installing VimbaPython without numpy support."
-fi
-echo ""
-
-# Ask for OpenCV support
-get_bool_input "Install VimbaPython with OpenCV support (yes/no, default: yes):" "yes" "no" "yes"
-if [ $? -eq 0 ]
-then
-    if [ -z $TARGET ]
-    then
-        TARGET="opencv-export"
-    else
-        TARGET="$TARGET,opencv-export"
-    fi
-    echo "Installing VimbaPython with OpenCV support."
-else
-    echo "Installing VimbaPython without OpenCV support."
-fi
-echo ""
-
-# Execute installation via pip
-if [ -z $TARGET ]
-then
-    TARGET="$SOURCEDIR"
-else
-    TARGET="$SOURCEDIR[$TARGET]"
-fi
-
-$PYTHON -m pip install "$TARGET"
-
-if [ $? -eq 0 ]
-then
-    echo "VimbaPython installation successful."
-else
-    echo "Error: VimbaPython installation failed. Please check pip output for details."
-fi
diff --git a/VimbaPython/Source/LICENSE.txt b/VimbaPython/Source/LICENSE.txt
deleted file mode 100644
index b6372fb7d339f7653ca571869b8776f4a58451cc..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/LICENSE.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/VimbaPython/Source/README.txt b/VimbaPython/Source/README.txt
deleted file mode 100644
index 0fa7c4f20f65461a0267247dd3384c3891dd9530..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/README.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-Vimba Python API
-===============
-
-Prerequisites
-===============
-To use Vimba Python API, you need Python version 3.7 or higher.
-
-
-Installing Python - Windows
----------------
-If your system requires multiple, coexisting Python versions, consider 
-using pyenv-win to install and maintain multiple Python installations:
-https://github.com/pyenv-win/pyenv-win
-
-We recommend installing Python with admin rights. 
-
-1. Install Python: https://www.python.org/downloads/windows/
-2. If pip >21.2 is used, read the instructions for all operating systems below.
-3. To verify the installation, open the command prompt and enter:
-
-      python --version
-      python -m pip --version
-
-Please ensure that the Python version is 3.7 or higher and pip uses this Python version.
-
-
-Installing Python - Linux
----------------
-On Linux systems, the Python installation process depends heavily on the distribution. 
-If python3.7 (or higher) is not available for your distribution or your system requires 
-multiple python versions to coexist, use pyenv:
-https://realpython.com/intro-to-pyenv/ 
-
-1. Install or update python3.7 with the packet manager of your distribution.
-2. Install or update pip with the packet manager of your distribution.
-3. To verify the installation, open a console and enter:
-
-      python --version
-      python -m pip --version
-
-
-Installing the Vimba Python API
-===============
-All operating systems:
-
-Open a terminal and navigate to the VimbaPython installation directory that
-you have admin privileges/write permission for, 
-for example, C:\Users\Public\Documents\Allied Vision\Vimba_5.x\VimbaPython_Source
-
-Users who want to change the API's sources can find them in the Vimba examples 
-directory, for example:
-C:\Users\Public\Documents\Allied Vision\Vimba_5.x\VimbaPython_Source
-
-Please note that Allied Vision can offer only limited support if an application 
-uses a modified version of the API. 
-
-Troubleshooting: If you don't have write permisson for the above-mentioned directories:
-
-Download VimbaPython (in the correct version needed for your Vimba installation) from 
-https://github.com/alliedvision/VimbaPython and install it from that directory.
-
-Or you can downgrade pip to a version <2.3 with, for example:
-
-python -m pip install --upgrade pip==21.1.2
-
-After the VimbaPython installation is complete, you can upgrade pip again to the latest version.
-
-
-Basic Installation
----------------
-Execute the following command:
-
-      python -m pip install .
-
-
-Installation with optional NumPy and OpenCV export
----------------
-Execute the following command:
-
-      python -m pip install .[numpy-export,opencv-export]
-
-
-Helper scripts for Linux
----------------
-For Linux systems helper scripts named `Install.sh` and `Uninstall.sh` to install and uninstall
-VimbaPython are provided. They will automatically detect if there is a currently active virtual
-environment. To install or uninstall VimbaPython for one of the system wide Python installations,
-admin rights are required (use `sudo`). To get further details on why the scripts do not offer your
-desired Python installation or to troubleshoot problems, a debug flag is provided (for example
-`./Install.sh -d`).
-
-ARM users only: 
-If installation of "opencv-export" fails, pip is not able to install
-"opencv-python" for your ARM board. This is a known issue on ARM boards.
-If you are affected by this, install VimbaPython without optional dependencies 
-and try to install OpenCV in a different way (for example, with your operating system's packet manager). 
-The OpenCV installation can be verified by running the example "Examples/asychronous_grab_opencv.py".
diff --git a/VimbaPython/Source/Tests/basic_tests/c_binding_test.py b/VimbaPython/Source/Tests/basic_tests/c_binding_test.py
deleted file mode 100644
index 62f3463bbb57e74c544f4d23c7af89c5542db1f5..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/basic_tests/c_binding_test.py
+++ /dev/null
@@ -1,345 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-import ctypes
-
-from vimba.c_binding import *
-
-
-class VimbaCommonTest(unittest.TestCase):
-    def setUp(self):
-        pass
-
-    def tearDown(self):
-        pass
-
-    def test_decode_cstr_behavior(self):
-        # Expected Behavior:
-        #    c_char_p() == ''
-        #    c_char_p(b'foo') == 'foo'
-
-        expected = ''
-        actual = decode_cstr(ctypes.c_char_p())
-        self.assertEqual(expected, actual)
-
-        expected = 'test'
-        actual = decode_cstr(ctypes.c_char_p(b'test').value)
-        self.assertEqual(expected, actual)
-
-    def test_decode_flags_zero(self):
-        # Expected Behavior: In case no bytes are set the
-        #    zero value of the Flag Enum must be returned
-
-        expected = (VmbFeatureFlags.None_,)
-        actual = decode_flags(VmbFeatureFlags, 0)
-        self.assertEqual(expected, actual)
-
-    def test_decode_flags_some(self):
-        # Expected Behavior: Given Integer must be decided correctly.
-        # the order of the fields does not matter for this test.
-
-        expected = (
-            VmbFeatureFlags.Write,
-            VmbFeatureFlags.Read,
-            VmbFeatureFlags.ModifyWrite
-        )
-
-        input_data = 0
-
-        for val in expected:
-            input_data |= int(val)
-
-        actual = decode_flags(VmbFeatureFlags, input_data)
-
-        # Convert both collections into a list and sort it.
-        # That way order doesn't matter. It is only important that values are
-        # decoded correctly.
-        self.assertEqual(list(expected).sort(), list(actual).sort())
-
-
-class CBindingVimbaCTypesTest(unittest.TestCase):
-    def setUp(self):
-        pass
-
-    def tearDown(self):
-        pass
-
-    def test_enum_vmb_error(self):
-        self.assertEqual(VmbError.Success, 0)
-        self.assertEqual(VmbError.InternalFault, -1)
-        self.assertEqual(VmbError.ApiNotStarted, -2)
-        self.assertEqual(VmbError.NotFound, -3)
-        self.assertEqual(VmbError.BadHandle, -4)
-        self.assertEqual(VmbError.DeviceNotOpen, -5)
-        self.assertEqual(VmbError.InvalidAccess, -6)
-        self.assertEqual(VmbError.BadParameter, -7)
-        self.assertEqual(VmbError.StructSize, -8)
-        self.assertEqual(VmbError.MoreData, -9)
-        self.assertEqual(VmbError.WrongType, -10)
-        self.assertEqual(VmbError.InvalidValue, -11)
-        self.assertEqual(VmbError.Timeout, -12)
-        self.assertEqual(VmbError.Other, -13)
-        self.assertEqual(VmbError.Resources, -14)
-        self.assertEqual(VmbError.InvalidCall, -15)
-        self.assertEqual(VmbError.NoTL, -16)
-        self.assertEqual(VmbError.NotImplemented_, -17)
-        self.assertEqual(VmbError.NotSupported, -18)
-        self.assertEqual(VmbError.Incomplete, -19)
-        self.assertEqual(VmbError.IO, -20)
-
-    def test_enum_vmb_pixel_format(self):
-        self.assertEqual(VmbPixelFormat.Mono8, 0x01080001)
-        self.assertEqual(VmbPixelFormat.Mono10, 0x01100003)
-        self.assertEqual(VmbPixelFormat.Mono10p, 0x010A0046)
-        self.assertEqual(VmbPixelFormat.Mono12, 0x01100005)
-        self.assertEqual(VmbPixelFormat.Mono12Packed, 0x010C0006)
-        self.assertEqual(VmbPixelFormat.Mono12p, 0x010C0047)
-        self.assertEqual(VmbPixelFormat.Mono14, 0x01100025)
-        self.assertEqual(VmbPixelFormat.Mono16, 0x01100007)
-        self.assertEqual(VmbPixelFormat.BayerGR8, 0x01080008)
-        self.assertEqual(VmbPixelFormat.BayerRG8, 0x01080009)
-        self.assertEqual(VmbPixelFormat.BayerGB8, 0x0108000A)
-        self.assertEqual(VmbPixelFormat.BayerBG8, 0x0108000B)
-        self.assertEqual(VmbPixelFormat.BayerGR10, 0x0110000C)
-        self.assertEqual(VmbPixelFormat.BayerRG10, 0x0110000D)
-        self.assertEqual(VmbPixelFormat.BayerGB10, 0x0110000E)
-        self.assertEqual(VmbPixelFormat.BayerBG10, 0x0110000F)
-        self.assertEqual(VmbPixelFormat.BayerGR12, 0x01100010)
-        self.assertEqual(VmbPixelFormat.BayerRG12, 0x01100011)
-        self.assertEqual(VmbPixelFormat.BayerGB12, 0x01100012)
-        self.assertEqual(VmbPixelFormat.BayerBG12, 0x01100013)
-        self.assertEqual(VmbPixelFormat.BayerGR12Packed, 0x010C002A)
-        self.assertEqual(VmbPixelFormat.BayerRG12Packed, 0x010C002B)
-        self.assertEqual(VmbPixelFormat.BayerGB12Packed, 0x010C002C)
-        self.assertEqual(VmbPixelFormat.BayerBG12Packed, 0x010C002D)
-        self.assertEqual(VmbPixelFormat.BayerGR10p, 0x010A0056)
-        self.assertEqual(VmbPixelFormat.BayerRG10p, 0x010A0058)
-        self.assertEqual(VmbPixelFormat.BayerGB10p, 0x010A0054)
-        self.assertEqual(VmbPixelFormat.BayerBG10p, 0x010A0052)
-        self.assertEqual(VmbPixelFormat.BayerGR12p, 0x010C0057)
-        self.assertEqual(VmbPixelFormat.BayerRG12p, 0x010C0059)
-        self.assertEqual(VmbPixelFormat.BayerGB12p, 0x010C0055)
-        self.assertEqual(VmbPixelFormat.BayerBG12p, 0x010C0053)
-        self.assertEqual(VmbPixelFormat.BayerGR16, 0x0110002E)
-        self.assertEqual(VmbPixelFormat.BayerRG16, 0x0110002F)
-        self.assertEqual(VmbPixelFormat.BayerGB16, 0x01100030)
-        self.assertEqual(VmbPixelFormat.BayerBG16, 0x01100031)
-        self.assertEqual(VmbPixelFormat.Rgb8, 0x02180014)
-        self.assertEqual(VmbPixelFormat.Bgr8, 0x02180015)
-        self.assertEqual(VmbPixelFormat.Rgb10, 0x02300018)
-        self.assertEqual(VmbPixelFormat.Bgr10, 0x02300019)
-        self.assertEqual(VmbPixelFormat.Rgb12, 0x0230001A)
-        self.assertEqual(VmbPixelFormat.Bgr12, 0x0230001B)
-        self.assertEqual(VmbPixelFormat.Rgb14, 0x0230005E)
-        self.assertEqual(VmbPixelFormat.Bgr14, 0x0230004A)
-        self.assertEqual(VmbPixelFormat.Rgb16, 0x02300033)
-        self.assertEqual(VmbPixelFormat.Bgr16, 0x0230004B)
-        self.assertEqual(VmbPixelFormat.Argb8, 0x02200016)
-        self.assertEqual(VmbPixelFormat.Rgba8, 0x02200016)
-        self.assertEqual(VmbPixelFormat.Bgra8, 0x02200017)
-        self.assertEqual(VmbPixelFormat.Rgba10, 0x0240005F)
-        self.assertEqual(VmbPixelFormat.Bgra10, 0x0240004C)
-        self.assertEqual(VmbPixelFormat.Rgba12, 0x02400061)
-        self.assertEqual(VmbPixelFormat.Bgra12, 0x0240004E)
-        self.assertEqual(VmbPixelFormat.Rgba14, 0x02400063)
-        self.assertEqual(VmbPixelFormat.Bgra14, 0x02400050)
-        self.assertEqual(VmbPixelFormat.Rgba16, 0x02400064)
-        self.assertEqual(VmbPixelFormat.Bgra16, 0x02400051)
-        self.assertEqual(VmbPixelFormat.Yuv411, 0x020C001E)
-        self.assertEqual(VmbPixelFormat.Yuv422, 0x0210001F)
-        self.assertEqual(VmbPixelFormat.Yuv444, 0x02180020)
-        self.assertEqual(VmbPixelFormat.YCbCr411_8_CbYYCrYY, 0x020C003C)
-        self.assertEqual(VmbPixelFormat.YCbCr422_8_CbYCrY, 0x02100043)
-        self.assertEqual(VmbPixelFormat.YCbCr8_CbYCr, 0x0218003A)
-
-    def test_enum_vmb_interface(self):
-        self.assertEqual(VmbInterface.Unknown, 0)
-        self.assertEqual(VmbInterface.Firewire, 1)
-        self.assertEqual(VmbInterface.Ethernet, 2)
-        self.assertEqual(VmbInterface.Usb, 3)
-        self.assertEqual(VmbInterface.CL, 4)
-        self.assertEqual(VmbInterface.CSI2, 5)
-
-    def test_enum_vmb_access_mode(self):
-        self.assertEqual(VmbAccessMode.None_, 0)
-        self.assertEqual(VmbAccessMode.Full, 1)
-        self.assertEqual(VmbAccessMode.Read, 2)
-        self.assertEqual(VmbAccessMode.Config, 4)
-        self.assertEqual(VmbAccessMode.Lite, 8)
-
-    def test_enum_vmb_feature_data(self):
-        self.assertEqual(VmbFeatureData.Unknown, 0)
-        self.assertEqual(VmbFeatureData.Int, 1)
-        self.assertEqual(VmbFeatureData.Float, 2)
-        self.assertEqual(VmbFeatureData.Enum, 3)
-        self.assertEqual(VmbFeatureData.String, 4)
-        self.assertEqual(VmbFeatureData.Bool, 5)
-        self.assertEqual(VmbFeatureData.Command, 6)
-        self.assertEqual(VmbFeatureData.Raw, 7)
-        self.assertEqual(VmbFeatureData.None_, 8)
-
-    def test_enum_vmb_feature_persist(self):
-        self.assertEqual(VmbFeaturePersist.All, 0)
-        self.assertEqual(VmbFeaturePersist.Streamable, 1)
-        self.assertEqual(VmbFeaturePersist.NoLUT, 2)
-
-    def test_enum_vmb_feature_visibility(self):
-        self.assertEqual(VmbFeatureVisibility.Unknown, 0)
-        self.assertEqual(VmbFeatureVisibility.Beginner, 1)
-        self.assertEqual(VmbFeatureVisibility.Expert, 2)
-        self.assertEqual(VmbFeatureVisibility.Guru, 3)
-        self.assertEqual(VmbFeatureVisibility.Invisible, 4)
-
-    def test_enum_vmb_feature_flags(self):
-        self.assertEqual(VmbFeatureFlags.None_, 0)
-        self.assertEqual(VmbFeatureFlags.Read, 1)
-        self.assertEqual(VmbFeatureFlags.Write, 2)
-        self.assertEqual(VmbFeatureFlags.Volatile, 8)
-        self.assertEqual(VmbFeatureFlags.ModifyWrite, 16)
-
-    def test_enum_vmb_frame_status(self):
-        self.assertEqual(VmbFrameStatus.Complete, 0)
-        self.assertEqual(VmbFrameStatus.Incomplete, -1)
-        self.assertEqual(VmbFrameStatus.TooSmall, -2)
-        self.assertEqual(VmbFrameStatus.Invalid, -3)
-
-    def test_enum_vmd_frame_flags(self):
-        self.assertEqual(VmbFrameFlags.None_, 0)
-        self.assertEqual(VmbFrameFlags.Dimension, 1)
-        self.assertEqual(VmbFrameFlags.Offset, 2)
-        self.assertEqual(VmbFrameFlags.FrameID, 4)
-        self.assertEqual(VmbFrameFlags.Timestamp, 8)
-
-
-class VimbaCTest(unittest.TestCase):
-    def setUp(self):
-        pass
-
-    def tearDown(self):
-        pass
-
-    def test_call_vimba_c_valid(self):
-        # Expectation for valid call: No exceptions, no errors
-        expected_ver_info = (1, 9, 0)
-        ver_info = VmbVersionInfo()
-
-        call_vimba_c('VmbVersionQuery', byref(ver_info), sizeof(ver_info))
-
-        ver_info = (ver_info.major, ver_info.minor, ver_info.patch)
-
-        self.assertEqual(ver_info, expected_ver_info)
-
-    def test_call_vimba_c_invalid_func_name(self):
-        # Expectation: An invalid function name must throw an AttributeError
-
-        ver_info = VmbVersionInfo()
-        self.assertRaises(AttributeError, call_vimba_c, 'VmbVersionQuer', byref(ver_info),
-                          sizeof(ver_info))
-
-    def test_call_vimba_c_invalid_arg_number(self):
-        # Expectation: Invalid number of arguments with sane types.
-        # must lead to TypeErrors
-
-        ver_info = VmbVersionInfo()
-        self.assertRaises(TypeError, call_vimba_c, 'VmbVersionQuery', byref(ver_info))
-
-    def test_call_vimba_c_invalid_arg_type(self):
-        # Expectation: Arguments with invalid types must lead to TypeErrors
-
-        # Call with unexpected base types
-        self.assertRaises(ctypes.ArgumentError, call_vimba_c, 'VmbVersionQuery', 0, 'hi')
-
-        # Call with valid ctypes used wrongly
-        ver_info = VmbVersionInfo()
-        self.assertRaises(ctypes.ArgumentError, call_vimba_c, 'VmbVersionQuery', byref(ver_info),
-                          ver_info)
-
-    def test_call_vimba_c_exception(self):
-        # Expectation: Errors returned from the C-Layer must be mapped
-        # to a special Exception Type call VimbaCError. This error must
-        # contain the returned Error Code from the failed C-Call.
-
-        # VmbVersionQuery has two possible Errors (taken from VimbaC.h):
-        # - VmbErrorStructSize:    The given struct size is not valid for this version of the API
-        # - VmbErrorBadParameter:  If "pVersionInfo" is NULL.
-
-        ver_info = VmbVersionInfo()
-
-        try:
-            call_vimba_c('VmbVersionQuery', byref(ver_info), sizeof(ver_info) - 1)
-            self.fail("Previous call must raise Exception.")
-
-        except VimbaCError as e:
-            self.assertEqual(e.get_error_code(), VmbError.StructSize)
-
-        try:
-            call_vimba_c('VmbVersionQuery', None, sizeof(ver_info))
-            self.fail("Previous call must raise Exception.")
-
-        except VimbaCError as e:
-            self.assertEqual(e.get_error_code(), VmbError.BadParameter)
-
-
-class ImageTransformTest(unittest.TestCase):
-    def setUp(self):
-        pass
-
-    def tearDown(self):
-        pass
-
-    def test_call_vimba_image_transform_valid(self):
-        # Expectation for valid call: No exceptions, no errors
-        expected_ver_info = EXPECTED_VIMBA_IMAGE_TRANSFORM_VERSION
-        v = VmbUint32()
-
-        call_vimba_image_transform('VmbGetVersion', byref(v))
-
-        ver_info = str(v.value >> 24 & 0xff) + '.' + str(v.value >> 16 & 0xff)
-
-        self.assertEqual(expected_ver_info, ver_info)
-
-    def test_call_vimba_c_invalid_func_name(self):
-        # Expectation: An invalid function name must throw an AttributeError
-        v = VmbUint32()
-        self.assertRaises(AttributeError, call_vimba_image_transform, 'VmbGetVersio', byref(v))
-
-    def test_call_vimba_c_invalid_arg_number(self):
-        # Expectation: Invalid number of arguments with sane types must lead to TypeErrors
-        self.assertRaises(TypeError, call_vimba_image_transform, 'VmbGetVersion')
-
-    def test_call_vimba_c_invalid_arg_type(self):
-        # Expectation: Arguments with invalid types must lead to TypeErrors
-        self.assertRaises(ctypes.ArgumentError, call_vimba_image_transform, 'VmbGetVersion',
-                          VmbDouble())
-        self.assertRaises(ctypes.ArgumentError, call_vimba_image_transform, 'VmbGetVersion', 0)
-        self.assertRaises(ctypes.ArgumentError, call_vimba_image_transform, 'VmbGetVersion',
-                          'invalid')
-
-    def test_call_vimba_c_exception(self):
-        # Expectation: Failed operations must raise a VimbaCError
-        self.assertRaises(VimbaCError, call_vimba_image_transform, 'VmbGetVersion', None)
diff --git a/VimbaPython/Source/Tests/basic_tests/interface_test.py b/VimbaPython/Source/Tests/basic_tests/interface_test.py
deleted file mode 100644
index 2892ef709e1e3ff38a39df477d56e8274cf32132..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/basic_tests/interface_test.py
+++ /dev/null
@@ -1,176 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-from vimba import *
-
-
-class InterfaceTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-        self.vimba._startup()
-
-        inters = self.vimba.get_all_interfaces()
-
-        if not inters:
-            self.vimba._shutdown()
-            self.skipTest('No Interface available to test against. Abort.')
-
-    def tearDown(self):
-        self.vimba._shutdown()
-
-    def test_interface_decode_id(self):
-        # Expectation all interface ids can be decoded in something not ''
-        for i in self.vimba.get_all_interfaces():
-            self.assertNotEqual(i.get_id(), '')
-
-    def test_interface_decode_type(self):
-        # Expectation all interface types be in interface types
-        excpected = (
-            InterfaceType.Firewire,
-            InterfaceType.Ethernet,
-            InterfaceType.Usb,
-            InterfaceType.CL,
-            InterfaceType.CSI2,
-        )
-
-        for i in self.vimba.get_all_interfaces():
-            self.assertIn(i.get_type(), excpected)
-
-    def test_interface_decode_name(self):
-        # Expectation all interface names  can be decoded in something not ''
-        for i in self.vimba.get_all_interfaces():
-            self.assertNotEqual(i.get_name(), '')
-
-    def test_interface_decode_serial(self):
-        # Expectation: Serials can be '' on some interfaces. This test success
-        # if get serial does not raise
-        for i in self.vimba.get_all_interfaces():
-            self.assertNoRaise(i.get_serial)
-
-    def test_interface_get_all_features(self):
-        # Expectation: Call get_all_features raises RuntimeError outside of with
-        # Inside of with return a non empty set
-        with self.vimba.get_all_interfaces()[0] as inter:
-            self.assertNotEqual(inter.get_all_features(), ())
-
-    def test_interface_get_features_affected_by(self):
-        # Expectation: Call get_features_affected_by raises RuntimeError outside of with.
-        # Inside with it must either return and empty set if the given feature has no affected
-        # Feature or a set off affected features
-        with self.vimba.get_all_interfaces()[0] as inter:
-            try:
-                affects_feats = inter.get_feature_by_name('DeviceUpdateList')
-
-            except VimbaFeatureError:
-                self.skipTest('Test requires Feature \'DeviceUpdateList\'.')
-
-            try:
-                not_affects_feats = inter.get_feature_by_name('DeviceCount')
-
-            except VimbaFeatureError:
-                self.skipTest('Test requires Feature \'DeviceCount\'.')
-
-            self.assertTrue(affects_feats.has_affected_features())
-            self.assertNotEquals(inter.get_features_affected_by(affects_feats), ())
-
-            self.assertFalse(not_affects_feats.has_affected_features())
-            self.assertEquals(inter.get_features_affected_by(not_affects_feats), ())
-
-    def test_interface_get_features_selected_by(self):
-        # Expectation: Call get_features_selected_by raises RuntimeError outside of with.
-        # Inside with it must either return and empty set if the given feature has no selected
-        # Feature or a set off affected features
-        with self.vimba.get_all_interfaces()[0] as inter:
-            try:
-                selects_feats = inter.get_feature_by_name('DeviceSelector')
-
-            except VimbaFeatureError:
-                self.skipTest('Test requires Feature \'DeviceSelector\'.')
-
-            try:
-                not_selects_feats = inter.get_feature_by_name('DeviceCount')
-
-            except VimbaFeatureError:
-                self.skipTest('Test requires Feature \'DeviceCount\'.')
-
-            self.assertTrue(selects_feats.has_selected_features())
-            self.assertNotEquals(inter.get_features_selected_by(selects_feats), ())
-
-            self.assertFalse(not_selects_feats.has_selected_features())
-            self.assertEquals(inter.get_features_selected_by(not_selects_feats), ())
-
-    def test_interface_get_features_by_type(self):
-        # Expectation: Call get_features_by_type raises RuntimeError outside of with
-        # Inside of with return a non empty set for IntFeature (DeviceCount is IntFeature)
-        with self.vimba.get_all_interfaces()[0] as inter:
-            self.assertNotEqual(inter.get_features_by_type(IntFeature), ())
-
-    def test_interface_get_features_by_category(self):
-        # Expectation: Call get_features_by_category raises RuntimeError outside of with
-        # Inside of with return a non empty set for /DeviceEnumeration)
-        with self.vimba.get_all_interfaces()[0] as inter:
-            self.assertNotEqual(inter.get_features_by_category('/DeviceEnumeration'), ())
-
-    def test_interface_get_feature_by_name(self):
-        # Expectation: Call get_feature_by_name raises RuntimeError outside of with
-        # Inside of with return dont raise VimbaFeatureError for 'DeviceCount'
-        # A invalid name must raise VimbaFeatureError
-        with self.vimba.get_all_interfaces()[0] as inter:
-            self.assertNoRaise(inter.get_feature_by_name, 'DeviceCount')
-            self.assertRaises(VimbaFeatureError, inter.get_feature_by_name, 'Invalid Name')
-
-    def test_interface_context_manager_reentrancy(self):
-        # Expectation: Implemented Context Manager must be reentrant, not causing
-        # multiple interface openings (would cause C-Errors)
-        with self.vimba.get_all_interfaces()[0] as inter:
-            with inter:
-                with inter:
-                    pass
-
-    def test_interface_api_context_sensitivity_inside_context(self):
-        # Expectation: Interface has functions that shall only be callable inside the Context,
-        # calling outside must cause a runtime error. This test check only if the RuntimeErrors
-        # are triggered then called Outside of the with block.
-        inter = self.vimba.get_all_interfaces()[0]
-
-        self.assertRaises(RuntimeError, inter.read_memory, 0, 0)
-        self.assertRaises(RuntimeError, inter.write_memory, 0, b'foo')
-        self.assertRaises(RuntimeError, inter.read_registers, ())
-        self.assertRaises(RuntimeError, inter.write_registers, {0: 0})
-        self.assertRaises(RuntimeError, inter.get_all_features)
-
-        # Enter scope to get handle on Features as valid parameters for the test:
-        # Don't to this in production code because the features will be invalid if used.
-        with inter:
-            feat = inter.get_all_features()[0]
-
-        self.assertRaises(RuntimeError, inter.get_features_affected_by, feat)
-        self.assertRaises(RuntimeError, inter.get_features_selected_by, feat)
-        self.assertRaises(RuntimeError, inter.get_features_by_type, IntFeature)
-        self.assertRaises(RuntimeError, inter.get_features_by_category, 'foo')
-        self.assertRaises(RuntimeError, inter.get_feature_by_name, 'foo')
diff --git a/VimbaPython/Source/Tests/basic_tests/util_context_decorator_test.py b/VimbaPython/Source/Tests/basic_tests/util_context_decorator_test.py
deleted file mode 100644
index f26d631eb99ef7e3ad527eaf697c1af1e5f6803e..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/basic_tests/util_context_decorator_test.py
+++ /dev/null
@@ -1,84 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-
-from vimba.util import *
-
-
-class TestObj:
-    @LeaveContextOnCall()
-    def __init__(self):
-        pass
-
-    @EnterContextOnCall()
-    def __enter__(self):
-        pass
-
-    @LeaveContextOnCall()
-    def __exit__(self, _1, _2, _3):
-        pass
-
-    @RaiseIfOutsideContext()
-    def works_inside_context(self):
-        pass
-
-    @RaiseIfInsideContext()
-    def works_outside_context(self):
-        pass
-
-
-class ContextDecoratorTest(unittest.TestCase):
-    def setUp(self):
-        self.test_obj = TestObj()
-
-    def tearDown(self):
-        pass
-
-    def test_raise_if_inside_context(self):
-        # Expectation: a decorated method must raise a RuntimeError if a
-        # Decorated function is called within a with - statement and
-        # run properly outside of the context.
-
-        self.assertNoRaise(self.test_obj.works_outside_context)
-
-        with self.test_obj:
-            self.assertRaises(RuntimeError, self.test_obj.works_outside_context)
-
-        self.assertNoRaise(self.test_obj.works_outside_context)
-
-    def test_raise_if_outside_context(self):
-        # Expectation: a decorated method must raise a RuntimeError if a
-        # Decorated function is called outside a with - statement and
-        # run properly inside of the context.
-
-        self.assertRaises(RuntimeError, self.test_obj.works_inside_context)
-
-        with self.test_obj:
-            self.assertNoRaise(self.test_obj.works_inside_context)
-
-        self.assertRaises(RuntimeError, self.test_obj.works_inside_context)
diff --git a/VimbaPython/Source/Tests/basic_tests/util_runtime_type_check_test.py b/VimbaPython/Source/Tests/basic_tests/util_runtime_type_check_test.py
deleted file mode 100644
index 217bb1b773ff431c3bf690229b22ccd82e0b9835..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/basic_tests/util_runtime_type_check_test.py
+++ /dev/null
@@ -1,256 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-from typing import Union, Optional, Tuple, Callable, Dict, Type
-from vimba.util import *
-
-
-class RuntimeTypeCheckTest(unittest.TestCase):
-    def setUp(self):
-        pass
-
-    def tearDown(self):
-        pass
-
-    def test_func_mixed_args_kwargs_and_defaults(self):
-        # Expectation: The typecheck must be able to deal with a valid mixture of args, kwargs
-        # and default values.
-
-        @RuntimeTypeCheckEnable()
-        def test_func(a: int, b: str, c: float = 11.0 / 7.0):
-            pass
-
-        self.assertNoRaise(test_func, 1, '2', 0.0)
-        self.assertNoRaise(test_func, c=0.0, b='str', a=1)
-        self.assertNoRaise(test_func, 1, c=0.0, b='str')
-        self.assertNoRaise(test_func, 1, b='str')
-        self.assertNoRaise(test_func, 1, 'str')
-
-        self.assertRaises(TypeError, test_func, c=0.0, b='str', a=0.0)
-        self.assertRaises(TypeError, test_func, c='invalid type', b='str', a=0.0)
-
-    def test_func_no_hints(self):
-        # Expectation: Functions without type hints
-        # should not throw any type errors
-
-        @RuntimeTypeCheckEnable()
-        def test_func(arg1, arg2):
-            return str()
-
-        self.assertNoRaise(test_func, 'str', 0)
-
-    def test_func_some_hints(self):
-        # Expectation: Type checks are only enforced on Arguments with hint.
-        # Argument without hints should be accepted
-
-        @RuntimeTypeCheckEnable()
-        def test_func(arg1, arg2: int):
-            return str()
-
-        self.assertNoRaise(test_func, 'str', 0)
-        self.assertNoRaise(test_func, 0.5, 0)
-        self.assertRaises(TypeError, test_func, 'str', 0.0)
-
-    def test_object(self):
-        # Expectation: The runtime checker must work on Objects just as on
-        #    functions.
-
-        class TestObject:
-            @RuntimeTypeCheckEnable()
-            def __init__(self, arg1: str, arg2: int):
-                pass
-
-            @RuntimeTypeCheckEnable()
-            def __call__(self, arg: str) -> str:
-                return arg
-
-        # Invalid construction
-        self.assertRaises(TypeError, TestObject, 0.0, 0)
-
-        obj = TestObject('str', 0)
-        self.assertNoRaise(obj, 'arg')
-
-        self.assertRaises(TypeError, obj, 0.0)
-
-    def test_type(self):
-        # Expectation: types as parameters must be detected like any other values.
-        @RuntimeTypeCheckEnable()
-        def func(arg: Type[int]):
-            pass
-
-        self.assertNoRaise(func, int)
-        self.assertRaises(TypeError, func, str)
-        self.assertRaises(TypeError, func, 0)
-
-    def test_union(self):
-        # Expectation: int and string are valid parameters. Everything else must throw
-        @RuntimeTypeCheckEnable()
-        def func(arg: Union[int, str]) -> Union[int, str]:
-            return arg
-
-        self.assertNoRaise(func, 0)
-        self.assertNoRaise(func, 'str')
-        self.assertRaises(TypeError, func, 0.0)
-
-    def test_optional(self):
-        # Expectation: For optionals the check must accept the given type or None.
-        # Anything else must lead to an TypeError
-
-        @RuntimeTypeCheckEnable()
-        def func(arg: Optional[int]) -> Optional[str]:
-            return str(arg)
-
-        self.assertNoRaise(func, 0)
-        self.assertNoRaise(func, None)
-        self.assertRaises(TypeError, func, 'str')
-
-    def test_tuple(self):
-        # Expectation: Fixed size tuples checking must verify that size and type order is
-        # enforced.
-
-        @RuntimeTypeCheckEnable()
-        def func(arg: Tuple[int, str, float]) -> Tuple[float, int, str]:
-            i, s, f = arg
-            return (f, i, s)
-
-        self.assertNoRaise(func, (1, 'str', 0.1))
-
-        self.assertRaises(TypeError, func, (1, 'str'))
-        self.assertRaises(TypeError, func, (1, 'str', 0.0, 'extra'))
-        self.assertRaises(TypeError, func, ('str1', 'str', 0.0))
-
-    def test_tuple_var_length(self):
-        # Expectation: Var length tuples checking must verify that contained type is enforced.
-
-        @RuntimeTypeCheckEnable()
-        def func(arg: Tuple[int, ...]) -> Tuple[str, ...]:
-            return tuple([str(i) for i in arg])
-
-        self.assertNoRaise(func, ())
-        self.assertNoRaise(func, (1,))
-        self.assertNoRaise(func, (1, 2, 3, 4, 5, 6))
-        self.assertRaises(TypeError, func, ('str', ))
-        self.assertRaises(TypeError, func, (1, 'str'))
-
-    def test_tuple_empty(self):
-        # Empty Tuples must satisfy the requirements to Tuple types as argument and results
-        @RuntimeTypeCheckEnable()
-        def func(arg: Tuple[int, ...]) -> Tuple[int, ...]:
-            return ()
-
-        self.assertNoRaise(func, ())
-        self.assertEqual(func(()), ())
-
-    def test_tuple_union(self):
-        # Tuples of union types must be detected correctly
-        @RuntimeTypeCheckEnable()
-        def func(arg: Tuple[Union[int, str], ...]):
-            return arg
-
-        self.assertNoRaise(func, (0,))
-        self.assertNoRaise(func, ('1',))
-        self.assertNoRaise(func, (2, 3))
-        self.assertNoRaise(func, ('4', '5'))
-        self.assertNoRaise(func, (6, '7'))
-        self.assertNoRaise(func, ('8', 9))
-        self.assertRaises(TypeError, func, (2, 0.0))
-
-    def test_dict(self):
-        # Expectation: Dictionaries must be detected correctly.
-        @RuntimeTypeCheckEnable()
-        def func(arg: Dict[int, str]):
-            pass
-
-        self.assertNoRaise(func, {0: 'ok'})
-        self.assertRaises(TypeError, func, None)
-        self.assertRaises(TypeError, func, 0)
-        self.assertRaises(TypeError, func, 'No Dict')
-        self.assertRaises(TypeError, func, {0.0: 'Err'})
-        self.assertRaises(TypeError, func, {0: b'bytes'})
-
-    def test_callable_no_func(self):
-        # Expectation: The Callable verification shall fail if given Parameter is no callable.
-        @RuntimeTypeCheckEnable()
-        def func(fn: Callable[[], None]):
-            fn()
-
-        self.assertRaises(TypeError, func, 'no_callable')
-
-    def test_callable_func(self):
-        # Expectation: A Callable without any hints must comply as long as the number of parameters
-        # matches to given hints. The Return Type doesn't matter if not given.
-
-        @RuntimeTypeCheckEnable()
-        def func(fn: Callable[[str, float], int], arg1: str, arg2: float) -> int:
-            return fn(arg1, arg2)
-
-        def ok(arg1, arg2):
-            return 0.0
-
-        def err1(arg1):
-            return 'str'
-
-        def err2(arg1, arg2, arg3):
-            return 23
-
-        self.assertNoRaise(func, ok, 'str', 0.0)
-        self.assertRaises(TypeError, func, err1, 'str', 0.0)
-        self.assertRaises(TypeError, func, err2, 'str', 0.0)
-
-    def test_callable_obj(self):
-        # Expectation: A Object that is callable must pass the runtime check
-        @RuntimeTypeCheckEnable()
-        def func(fn: Callable[[str], None], arg: str) -> str:
-            return fn(arg)
-
-        class Ok:
-            def __call__(self, arg: str) -> str:
-                return str
-
-        class Err1:
-            def __call__(self) -> str:
-                return 'Err1'
-
-        class Err2:
-            def __call__(self, arg1: str, arg2: str) -> str:
-                return arg1 + arg2
-
-        self.assertNoRaise(func, Ok(), 'str')
-        self.assertRaises(TypeError, func, Err1(), 'str')
-        self.assertRaises(TypeError, func, Err2(), 'str')
-
-    def test_callable_lambda(self):
-        # Expectation: RuntimeTypeCheck must behave with lambas as with functions
-
-        @RuntimeTypeCheckEnable()
-        def func(fn: Callable[[str, float], int], arg1: str, arg2: float) -> int:
-            return fn(arg1, arg2)
-
-        self.assertNoRaise(func, lambda a1, a2: 0.0, 'str', 0.0)
-        self.assertRaises(TypeError, func, lambda a1: 'foo', 'str', 0.0)
-        self.assertRaises(TypeError, func, lambda a1, a2, a3: 23, 'str', 0.0)
diff --git a/VimbaPython/Source/Tests/basic_tests/util_tracer_test.py b/VimbaPython/Source/Tests/basic_tests/util_tracer_test.py
deleted file mode 100644
index 2c23e430280918653e0180e368022fd0cf02f4d8..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/basic_tests/util_tracer_test.py
+++ /dev/null
@@ -1,157 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-
-from vimba.util import *
-
-
-class TracerTest(unittest.TestCase):
-    def setUp(self):
-        # Enable logging and setup hidden buffer
-        self.log = Log.get_instance()
-        self.log._test_buffer = []
-
-        self.log.enable(LOG_CONFIG_CRITICAL_CONSOLE_ONLY)
-
-    def tearDown(self):
-        # Disable logging and clear hidden buffer
-        self.log.disable()
-
-        self.log._test_buffer = None
-
-    def test_trace_inactive(self):
-        # Expectation: A disabled log must not contain any trace entries.
-
-        @TraceEnable()
-        def test_func(arg):
-            return str(arg)
-
-        self.log.disable()
-
-        self.assertEqual(test_func(1), '1')
-        self.assertFalse(self.log._test_buffer)
-
-        self.assertEqual(test_func('test'), 'test')
-        self.assertFalse(self.log._test_buffer)
-
-        self.assertEqual(test_func(2.0), '2.0')
-        self.assertFalse(self.log._test_buffer)
-
-    def test_trace_normal_exit(self):
-        # Expectation: Must not throw on call normal func.
-        # Each call traced call must add two Log entries:
-
-        @TraceEnable()
-        def test_func(arg):
-            return str(arg)
-
-        self.assertEqual(test_func(1), '1')
-        self.assertEqual(len(self.log._test_buffer), 2)
-
-        self.assertEqual(test_func('test'), 'test')
-        self.assertEqual(len(self.log._test_buffer), 4)
-
-        self.assertEqual(test_func(2.0), '2.0')
-        self.assertEqual(len(self.log._test_buffer), 6)
-
-    def test_trace_raised_exit(self):
-        # Expectation: Throws internally thrown exception and adds two log entries
-        # Each call traced call must add two Log entries:
-
-        @TraceEnable()
-        def test_func(arg):
-            raise TypeError('my error')
-
-        self.assertRaises(TypeError, test_func, 1)
-        self.assertEqual(len(self.log._test_buffer), 2)
-
-        self.assertRaises(TypeError, test_func, 'test')
-        self.assertEqual(len(self.log._test_buffer), 4)
-
-        self.assertRaises(TypeError, test_func, 2.0)
-        self.assertEqual(len(self.log._test_buffer), 6)
-
-    def test_trace_function(self):
-        # Expectation: Normal functions must be traceable
-        @TraceEnable()
-        def test_func():
-            pass
-
-        test_func()
-        self.assertEqual(len(self.log._test_buffer), 2)
-
-        test_func()
-        self.assertEqual(len(self.log._test_buffer), 4)
-
-        test_func()
-        self.assertEqual(len(self.log._test_buffer), 6)
-
-    def test_trace_lambda(self):
-        # Expectation: Lambdas must be traceable
-
-        test_lambda = TraceEnable()(lambda: 0)
-
-        test_lambda()
-        self.assertEqual(len(self.log._test_buffer), 2)
-
-        test_lambda()
-        self.assertEqual(len(self.log._test_buffer), 4)
-
-        test_lambda()
-        self.assertEqual(len(self.log._test_buffer), 6)
-
-    def test_trace_object(self):
-        # Expectation: Objects must be traceable including constructors.
-        class TestObj:
-            @TraceEnable()
-            def __init__(self, arg):
-                self.arg = arg
-
-            @TraceEnable()
-            def __str__(self):
-                return 'TestObj({})'.format(str(self.arg))
-
-            @TraceEnable()
-            def __repr__(self):
-                return 'TestObj({})'.format(repr(self.arg))
-
-            @TraceEnable()
-            def __call__(self):
-                pass
-
-        test_obj = TestObj('test')
-        self.assertEqual(len(self.log._test_buffer), 2)
-
-        str(test_obj)
-        self.assertEqual(len(self.log._test_buffer), 4)
-
-        repr(test_obj)
-        self.assertEqual(len(self.log._test_buffer), 6)
-
-        test_obj()
-        self.assertEqual(len(self.log._test_buffer), 8)
diff --git a/VimbaPython/Source/Tests/basic_tests/vimba_common_test.py b/VimbaPython/Source/Tests/basic_tests/vimba_common_test.py
deleted file mode 100644
index f82a7c05e6f153e8a927407be564aa3616908c59..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/basic_tests/vimba_common_test.py
+++ /dev/null
@@ -1,89 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-
-from vimba.c_binding import _select_vimba_home
-from vimba.error import VimbaSystemError
-
-
-class RankVimbaHomeCandidatesTest(unittest.TestCase):
-    def setUp(self):
-        pass
-
-    def tearDown(self):
-        pass
-
-    def test_empty_gentl_path(self):
-        candidates = []
-        with self.assertRaises(VimbaSystemError):
-            _select_vimba_home(candidates)
-
-    def test_empty_string(self):
-        candidates = ['']
-        with self.assertRaises(VimbaSystemError):
-            _select_vimba_home(candidates)
-
-    def test_single_bad_vimba_home_candidate(self):
-        candidates = ['/some/path']
-        with self.assertRaises(VimbaSystemError):
-            _select_vimba_home(candidates)
-
-    def test_single_good_vimba_home_candidate(self):
-        candidates = ['/opt/Vimba_3_1']
-        expected = '/opt/Vimba_3_1'
-        self.assertEquals(expected, _select_vimba_home(candidates))
-
-    def test_presorted_vimba_home_candidates(self):
-        candidates = ['/home/username/Vimba_4_0', '/opt/some/other/gentl/provider']
-        expected = '/home/username/Vimba_4_0'
-        self.assertEqual(expected, _select_vimba_home(candidates))
-
-    def test_unsorted_vimba_home_candidates(self):
-        candidates = ['/opt/some/other/gentl/provider', '/home/username/Vimba_4_0']
-        expected = '/home/username/Vimba_4_0'
-        self.assertEqual(expected, _select_vimba_home(candidates))
-
-    def test_many_vimba_home_candidates(self):
-        candidates = ['/some/random/path',
-                      '/opt/some/gentl/provider',
-                      '/opt/Vimba_4_0',  # This should be selected
-                      '/opt/another/gentl/provider',
-                      '/another/incorrect/path']
-        expected = '/opt/Vimba_4_0'
-        self.assertEqual(expected, _select_vimba_home(candidates))
-
-    def test_multiple_vimba_home_directories(self):
-        # If multiple VIMBA_HOME directories are found an error should be raised
-        candidates = ['/some/random/path',
-                      '/opt/some/gentl/provider',
-                      '/opt/Vimba_4_0',  # first installation
-                      '/home/username/Vimba_4_0',  # second installation
-                      '/opt/another/gentl/provider',
-                      '/another/incorrect/path']
-        with self.assertRaises(VimbaSystemError):
-            _select_vimba_home(candidates)
diff --git a/VimbaPython/Source/Tests/basic_tests/vimba_test.py b/VimbaPython/Source/Tests/basic_tests/vimba_test.py
deleted file mode 100644
index fcecb1004d7041dd51581c3a74ff8878b8b64380..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/basic_tests/vimba_test.py
+++ /dev/null
@@ -1,126 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-from vimba import *
-
-
-class VimbaTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-
-    def tearDown(self):
-        pass
-
-    def test_singleton(self):
-        # Expected behavior: Multiple calls to Vimba.get_instance() return the same object.
-        self.assertEqual(self.vimba, Vimba.get_instance())
-
-    def test_get_version(self):
-        # Expectation: Returned Version is not empty and does not raise any exceptions.
-        self.assertNotEqual(self.vimba.get_version(), "")
-
-    def test_get_camera_by_id_failure(self):
-        # Expected behavior: Lookup of a currently unavailable camera must throw an
-        # VimbaCameraError
-        with self.vimba:
-            self.assertRaises(VimbaCameraError, self.vimba.get_camera_by_id, 'Invalid ID')
-
-    def test_get_interface_by_id_failure(self):
-        # Expected behavior: Lookup of a currently unavailable interface must throw an
-        # VimbaInterfaceError
-        with self.vimba:
-            self.assertRaises(VimbaInterfaceError, self.vimba.get_interface_by_id, 'Invalid ID')
-
-    def test_get_feature_by_name_failure(self):
-        # Expected behavior: Lookup of a currently unavailable feature must throw an
-        # VimbaFeatureError
-        with self.vimba:
-            self.assertRaises(VimbaFeatureError, self.vimba.get_feature_by_name, 'Invalid ID')
-
-    def test_runtime_check_failure(self):
-        self.assertRaises(TypeError, self.vimba.set_network_discovery, 0.0)
-
-        with self.vimba:
-            # All functions with RuntimeTypeCheckEnable must return a TypeError on Failure
-            self.assertRaises(TypeError, self.vimba.get_camera_by_id, 0)
-            self.assertRaises(TypeError, self.vimba.get_interface_by_id, 1)
-            self.assertRaises(TypeError, self.vimba.get_feature_by_name, 0)
-            self.assertRaises(TypeError, self.vimba.enable_log, '-1')
-
-            self.assertRaises(TypeError, self.vimba.get_features_affected_by, '-1')
-            self.assertRaises(TypeError, self.vimba.get_features_selected_by, '-1')
-            self.assertRaises(TypeError, self.vimba.get_features_by_type, [])
-            self.assertRaises(TypeError, self.vimba.register_camera_change_handler, 0)
-            self.assertRaises(TypeError, self.vimba.unregister_camera_change_handler, 0)
-            self.assertRaises(TypeError, self.vimba.register_interface_change_handler, 0)
-            self.assertRaises(TypeError, self.vimba.unregister_interface_change_handler, 0)
-
-    def test_vimba_context_manager_reentrancy(self):
-        # Expectation: Implemented Context Manager must be reentrant, not causing
-        # multiple starts of the Vimba API (would cause C-Errors)
-
-        with self.vimba:
-            with self.vimba:
-                with self.vimba:
-                    pass
-
-    def test_vimba_api_context_sensitity_outside_context(self):
-        # Expectation: Vimba has functions that shall only be callable outside the Context and
-        # calling within the context must cause a runtime error.
-
-        self.assertNoRaise(self.vimba.set_network_discovery, True)
-
-        with self.vimba:
-            self.assertRaises(RuntimeError, self.vimba.set_network_discovery, True)
-
-        self.assertNoRaise(self.vimba.set_network_discovery, True)
-
-    def test_vimba_api_context_sensitity_inside_context(self):
-        # Expectation: Vimba has functions that shall only be callable inside the Context and
-        # calling outside must cause a runtime error. This test check only if the RuntimeErrors
-        # are triggered then called Outside of the with block.
-        self.assertRaises(RuntimeError, self.vimba.read_memory, 0, 0)
-        self.assertRaises(RuntimeError, self.vimba.write_memory, 0, b'foo')
-        self.assertRaises(RuntimeError, self.vimba.read_registers, ())
-        self.assertRaises(RuntimeError, self.vimba.write_registers, {0: 0})
-        self.assertRaises(RuntimeError, self.vimba.get_all_interfaces)
-        self.assertRaises(RuntimeError, self.vimba.get_interface_by_id, 'id')
-        self.assertRaises(RuntimeError, self.vimba.get_all_cameras)
-        self.assertRaises(RuntimeError, self.vimba.get_camera_by_id, 'id')
-        self.assertRaises(RuntimeError, self.vimba.get_all_features)
-
-        # Enter scope to get handle on Features as valid parameters for the test:
-        # Don't to this in production code because the feature will be invalid if use.
-        with self.vimba:
-            feat = self.vimba.get_all_features()[0]
-
-        self.assertRaises(RuntimeError, self.vimba.get_features_affected_by, feat)
-        self.assertRaises(RuntimeError, self.vimba.get_features_selected_by, feat)
-        self.assertRaises(RuntimeError, self.vimba.get_features_by_type, IntFeature)
-        self.assertRaises(RuntimeError, self.vimba.get_features_by_category, 'foo')
-        self.assertRaises(RuntimeError, self.vimba.get_feature_by_name, 'foo')
diff --git a/VimbaPython/Source/Tests/real_cam_tests/ancillary_data_test.py b/VimbaPython/Source/Tests/real_cam_tests/ancillary_data_test.py
deleted file mode 100644
index c77788938ed21d0259e1ada1d7b1e721cf1913d3..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/real_cam_tests/ancillary_data_test.py
+++ /dev/null
@@ -1,155 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-
-from vimba import *
-
-
-class CamAncillaryDataTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-        self.vimba._startup()
-
-        try:
-            self.cam = self.vimba.get_camera_by_id(self.get_test_camera_id())
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to lookup Camera.') from e
-
-        try:
-            self.cam._open()
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to open Camera.') from e
-
-        try:
-            self.chunk_mode = self.cam.get_feature_by_name('ChunkModeActive')
-
-        except VimbaFeatureError:
-            self.cam._close()
-            self.vimba._shutdown()
-            self.skipTest('Required Feature \'ChunkModeActive\' not available.')
-
-    def tearDown(self):
-        self.cam._close()
-        self.vimba._shutdown()
-
-    def test_ancillary_data_access(self):
-        # Expectation: Ancillary Data is None if ChunkMode is disable.
-        # If ChunkMode is enabled Ancillary Data shall not be None.
-
-        old_state = self.chunk_mode.get()
-
-        try:
-            # Disable ChunkMode, acquire frame: Ancillary Data must be None
-            self.chunk_mode.set(False)
-            self.assertIsNone(self.cam.get_frame().get_ancillary_data())
-
-            # Enable ChunkMode, acquire frame: Ancillary Data must not be None
-            self.chunk_mode.set(True)
-            self.assertIsNotNone(self.cam.get_frame().get_ancillary_data())
-
-        finally:
-            self.chunk_mode.set(old_state)
-
-    def test_ancillary_data_context_manager_reentrancy(self):
-        # Expectation: Ancillary Data Context Manager must be reentrant.
-        old_state = self.chunk_mode.get()
-
-        try:
-            self.chunk_mode.set(True)
-            frame = self.cam.get_frame()
-            anc_data = frame.get_ancillary_data()
-
-            with anc_data:
-                with anc_data:
-                    with anc_data:
-                        pass
-
-        finally:
-            self.chunk_mode.set(old_state)
-
-    def test_ancillary_data_api_context_sensitity(self):
-        # Expectation: Ancillary Data implements a Context Manager, outside of with-scope
-        # a runtime error should be raised on all feature related methods accessed outside of the
-        # context.
-
-        old_state = self.chunk_mode.get()
-
-        try:
-            self.chunk_mode.set(True)
-            frame = self.cam.get_frame()
-            anc_data = frame.get_ancillary_data()
-
-            # Check Access Outside Context
-            self.assertRaises(RuntimeError, anc_data.get_all_features)
-            self.assertRaises(RuntimeError, anc_data.get_features_by_type, IntFeature)
-            self.assertRaises(RuntimeError, anc_data.get_features_by_category, '/ChunkData')
-            self.assertRaises(RuntimeError, anc_data.get_feature_by_name, 'ChunkExposureTime')
-
-            with anc_data:
-                # Check Access after Context entry
-                self.assertNoRaise(anc_data.get_all_features)
-                self.assertNoRaise(anc_data.get_features_by_type, IntFeature)
-                self.assertNoRaise(anc_data.get_features_by_category, '/ChunkData')
-                self.assertNoRaise(anc_data.get_feature_by_name, 'ChunkExposureTime')
-
-            # Check Access after Context leaving
-            self.assertRaises(RuntimeError, anc_data.get_all_features)
-            self.assertRaises(RuntimeError, anc_data.get_features_by_type, IntFeature)
-            self.assertRaises(RuntimeError, anc_data.get_features_by_category, '/ChunkData')
-            self.assertRaises(RuntimeError, anc_data.get_feature_by_name, 'ChunkExposureTime')
-
-        finally:
-            self.chunk_mode.set(old_state)
-
-    def test_ancillary_data_removed_attrs(self):
-        # Expectation: Ancillary Data are lightweight features. Calling most Feature-Methods that
-        # call VimbaC Features would cause an internal error. Those error prone methods
-        # shall raise a RuntimeError on call.
-
-        old_state = self.chunk_mode.get()
-
-        try:
-            self.chunk_mode.set(True)
-            frame = self.cam.get_frame()
-            anc_data = frame.get_ancillary_data()
-
-            with anc_data:
-                for feat in anc_data.get_all_features():
-                    self.assertRaises(RuntimeError, feat.get_access_mode)
-                    self.assertRaises(RuntimeError, feat.is_readable)
-                    self.assertRaises(RuntimeError, feat.is_writeable)
-                    self.assertRaises(RuntimeError, feat.register_change_handler)
-                    self.assertRaises(RuntimeError, feat.get_range)
-                    self.assertRaises(RuntimeError, feat.get_increment)
-                    self.assertRaises(RuntimeError, feat.set)
-        finally:
-            self.chunk_mode.set(old_state)
diff --git a/VimbaPython/Source/Tests/real_cam_tests/camera_test.py b/VimbaPython/Source/Tests/real_cam_tests/camera_test.py
deleted file mode 100644
index f2a66b0729cf31ab0c1ca286697bbb7f2b149138..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/real_cam_tests/camera_test.py
+++ /dev/null
@@ -1,422 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-import threading
-import os
-
-from vimba import *
-from vimba.frame import *
-
-
-def dummy_frame_handler(cam: Camera, frame: Frame):
-    pass
-
-
-class CamCameraTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-        self.vimba._startup()
-
-        try:
-            self.cam = self.vimba.get_camera_by_id(self.get_test_camera_id())
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to lookup Camera.') from e
-
-        self.cam.set_access_mode(AccessMode.Full)
-
-    def tearDown(self):
-        self.cam.set_access_mode(AccessMode.Full)
-        self.vimba._shutdown()
-
-    def test_camera_context_manager_access_mode(self):
-        # Expectation: Entering Context must not throw in cases where the current access mode is
-        # within get_permitted_access_modes()
-
-        permitted_modes = self.cam.get_permitted_access_modes()
-
-        for mode in permitted_modes:
-            self.cam.set_access_mode(mode)
-
-            try:
-                with self.cam:
-                    pass
-
-            except BaseException:
-                self.fail()
-
-    def test_camera_context_manager_feature_discovery(self):
-        # Expectation: Outside of context, all features must be cleared,
-        # inside of context all features must be detected.
-        with self.cam:
-            self.assertNotEqual(self.cam.get_all_features(), ())
-
-    def test_camera_access_mode(self):
-        # Expectation: set/get access mode
-        self.cam.set_access_mode(AccessMode.None_)
-        self.assertEqual(self.cam.get_access_mode(), AccessMode.None_)
-        self.cam.set_access_mode(AccessMode.Full)
-        self.assertEqual(self.cam.get_access_mode(), AccessMode.Full)
-        self.cam.set_access_mode(AccessMode.Read)
-        self.assertEqual(self.cam.get_access_mode(), AccessMode.Read)
-
-    def test_camera_get_id(self):
-        # Expectation: get decoded camera id
-        self.assertTrue(self.cam.get_id())
-
-    def test_camera_get_name(self):
-        # Expectation: get decoded camera name
-        self.assertTrue(self.cam.get_name())
-
-    def test_camera_get_model(self):
-        # Expectation: get decoded camera model
-        self.assertTrue(self.cam.get_model())
-
-    def test_camera_get_serial(self):
-        # Expectation: get decoded camera serial
-        self.assertTrue(self.cam.get_serial())
-
-    def test_camera_get_permitted_access_modes(self):
-        # Expectation: get currently permitted access modes
-        expected = (AccessMode.None_, AccessMode.Full, AccessMode.Read, AccessMode.Config)
-
-        for mode in self.cam.get_permitted_access_modes():
-            self.assertIn(mode, expected)
-
-    def test_camera_get_interface_id(self):
-        # Expectation: get interface Id this camera is connected to
-        self.assertTrue(self.cam.get_interface_id())
-
-    def test_camera_get_features_affected(self):
-        # Expectation: Features that affect other features shall return a set of affected feature
-        # Features that don't affect other features shall return (). If a Feature is supplied that
-        # is not associated with that camera, a TypeError must be raised.
-
-        with self.cam:
-            try:
-                affect = self.cam.get_feature_by_name('Height')
-
-            except VimbaFeatureError as e:
-                raise unittest.SkipTest('Failed to lookup Feature Height') from e
-
-            try:
-                not_affect = self.cam.get_feature_by_name('AcquisitionFrameCount')
-
-            except VimbaFeatureError as e:
-                raise unittest.SkipTest('Failed to lookup Feature AcquisitionFrameCount') from e
-
-            self.assertEqual(self.cam.get_features_affected_by(not_affect), ())
-
-            try:
-                payload_size = self.cam.get_feature_by_name('PayloadSize')
-
-            except VimbaFeatureError as e:
-                raise unittest.SkipTest('Failed to lookup Feature PayloadSize') from e
-
-            self.assertIn(payload_size, self.cam.get_features_affected_by(affect))
-
-    def test_camera_frame_generator_limit_set(self):
-        # Expectation: The Frame generator fetches the given number of images.
-        with self.cam:
-            self.assertEqual(len([i for i in self.cam.get_frame_generator(0)]), 0)
-            self.assertEqual(len([i for i in self.cam.get_frame_generator(1)]), 1)
-            self.assertEqual(len([i for i in self.cam.get_frame_generator(7)]), 7)
-            self.assertEqual(len([i for i in self.cam.get_frame_generator(11)]), 11)
-
-    def test_camera_frame_generator_error(self):
-        # Expectation: The Frame generator raises a ValueError on a
-        # negative limit and the camera raises an ValueError
-        # if the camera is not opened.
-
-        # generator execution must throw if streaming is enabled
-        with self.cam:
-            # Check limits
-            self.assertRaises(ValueError, self.cam.get_frame_generator, -1)
-            self.assertRaises(ValueError, self.cam.get_frame_generator, 1, 0)
-            self.assertRaises(ValueError, self.cam.get_frame_generator, 1, -1)
-
-            self.cam.start_streaming(dummy_frame_handler, 5)
-
-            self.assertRaises(VimbaCameraError, self.cam.get_frame)
-            self.assertRaises(VimbaCameraError, next, self.cam.get_frame_generator(1))
-
-            # Stop Streaming: Everything should be fine.
-            self.cam.stop_streaming()
-            self.assertNoRaise(self.cam.get_frame)
-            self.assertNoRaise(next, self.cam.get_frame_generator(1))
-
-    def test_camera_get_frame(self):
-        # Expectation: Gets single Frame without any exception. Image data must be set.
-        # If a zero or negative timeouts must lead to a ValueError.
-        with self.cam:
-            self.assertRaises(ValueError, self.cam.get_frame, 0)
-            self.assertRaises(ValueError, self.cam.get_frame, -1)
-
-            self.assertNoRaise(self.cam.get_frame)
-            self.assertEqual(type(self.cam.get_frame()), Frame)
-
-    def test_camera_capture_error_outside_vimba_scope(self):
-        # Expectation: Camera access outside of Vimba scope must lead to a RuntimeError
-        gener = None
-
-        with self.cam:
-            gener = self.cam.get_frame_generator(1)
-
-        # Shutdown API
-        self.vimba._shutdown()
-
-        # Access invalid Iterator
-        self.assertRaises(RuntimeError, next, gener)
-
-    def test_camera_capture_error_outside_camera_scope(self):
-        # Expectation: Camera access outside of Camera scope must lead to a RuntimeError
-        gener = None
-
-        with self.cam:
-            gener = self.cam.get_frame_generator(1)
-
-        self.assertRaises(RuntimeError, next, gener)
-
-    def test_camera_capture_timeout(self):
-        # Expectation: Camera access outside of Camera scope must lead to a VimbaTimeout
-        with self.cam:
-            self.assertRaises(VimbaTimeout, self.cam.get_frame, 1)
-
-    def test_camera_is_streaming(self):
-        # Expectation: After start_streaming() is_streaming() must return true. After stop it must
-        # return false. If the camera context is left without stop_streaming(), leaving
-        # the context must stop streaming.
-
-        # Normal Operation
-        self.assertEqual(self.cam.is_streaming(), False)
-        with self.cam:
-            self.cam.start_streaming(dummy_frame_handler)
-            self.assertEqual(self.cam.is_streaming(), True)
-
-            self.cam.stop_streaming()
-            self.assertEqual(self.cam.is_streaming(), False)
-
-        # Missing the stream stop. Close must stop streaming
-        with self.cam:
-            self.cam.start_streaming(dummy_frame_handler, 5)
-            self.assertEqual(self.cam.is_streaming(), True)
-
-        self.assertEqual(self.cam.is_streaming(), False)
-
-    def test_camera_streaming_error_frame_count(self):
-        # Expectation: A negative or zero frame_count must lead to an value error
-        with self.cam:
-            self.assertRaises(ValueError, self.cam.start_streaming, dummy_frame_handler, 0)
-            self.assertRaises(ValueError, self.cam.start_streaming, dummy_frame_handler, -1)
-
-    def test_camera_streaming(self):
-        # Expectation: A given frame_handler must be executed for each buffered frame.
-
-        class FrameHandler:
-            def __init__(self, frame_count):
-                self.cnt = 0
-                self.frame_count = frame_count
-                self.event = threading.Event()
-
-            def __call__(self, cam: Camera, frame: Frame):
-                self.cnt += 1
-
-                if self.cnt == self.frame_count:
-                    self.event.set()
-
-        timeout = 5.0
-        frame_count = 10
-        handler = FrameHandler(frame_count)
-
-        with self.cam:
-            try:
-                self.cam.start_streaming(handler, frame_count)
-
-                # Wait until the FrameHandler has been executed for each queued frame
-                self.assertTrue(handler.event.wait(timeout))
-
-            finally:
-                self.cam.stop_streaming()
-
-    def test_camera_streaming_queue(self):
-        # Expectation: A given frame must be reused if it is enqueued again.
-
-        class FrameHandler:
-            def __init__(self, frame_count):
-                self.cnt = 0
-                self.frame_count = frame_count
-                self.event = threading.Event()
-
-            def __call__(self, cam: Camera, frame: Frame):
-                self.cnt += 1
-
-                if self.cnt == self.frame_count:
-                    self.event.set()
-
-                cam.queue_frame(frame)
-
-        timeout = 5.0
-        frame_count = 5
-        frame_reuse = 2
-        handler = FrameHandler(frame_count * frame_reuse)
-
-        with self.cam:
-            try:
-                self.cam.start_streaming(handler, frame_count)
-
-                # Wait until the FrameHandler has been executed for each queued frame
-                self.assertTrue(handler.event.wait(timeout))
-
-            finally:
-                self.cam.stop_streaming()
-
-    def test_camera_runtime_type_check(self):
-        def valid_handler(cam, frame):
-            pass
-
-        def invalid_handler_1(cam):
-            pass
-
-        def invalid_handler_2(cam, frame, extra):
-            pass
-
-        self.assertRaises(TypeError, self.cam.set_access_mode, -1)
-
-        with self.cam:
-            # Expectation: raise TypeError on passing invalid parameters
-            self.assertRaises(TypeError, self.cam.get_frame, 'hi')
-            self.assertRaises(TypeError, self.cam.get_features_affected_by, 'No Feature')
-            self.assertRaises(TypeError, self.cam.get_features_selected_by, 'No Feature')
-            self.assertRaises(TypeError, self.cam.get_features_by_type, 0.0)
-            self.assertRaises(TypeError, self.cam.get_feature_by_name, 0)
-            self.assertRaises(TypeError, self.cam.get_frame_generator, '3')
-            self.assertRaises(TypeError, self.cam.get_frame_generator, 0, 'foo')
-            self.assertRaises(TypeError, self.cam.start_streaming, valid_handler, 'no int')
-            self.assertRaises(TypeError, self.cam.start_streaming, invalid_handler_1)
-            self.assertRaises(TypeError, self.cam.start_streaming, invalid_handler_2)
-            self.assertRaises(TypeError, self.cam.save_settings, 0, PersistType.All)
-            self.assertRaises(TypeError, self.cam.save_settings, 'foo.xml', 'false type')
-
-    def test_camera_save_load_settings(self):
-        # Expectation: After settings export a settings change must be reverted by loading a
-        # Previously saved configuration.
-
-        file_name = 'test_save_load_settings.xml'
-
-        with self.cam:
-            feat_height = self.cam.get_feature_by_name('Height')
-            old_val = feat_height.get()
-
-            self.cam.save_settings(file_name, PersistType.All)
-
-            min_, max_ = feat_height.get_range()
-            inc = feat_height.get_increment()
-
-            feat_height.set(max_ - min_ - inc)
-
-            self.cam.load_settings(file_name, PersistType.All)
-            os.remove(file_name)
-
-            self.assertEqual(old_val, feat_height.get())
-
-    def test_camera_save_settings_verify_path(self):
-        # Expectation: Valid files end with .xml and can be either a absolute path or relative
-        # path to the given File. Everything else is a ValueError.
-
-        valid_paths = (
-            'valid1.xml',
-            os.path.join('.', 'valid2.xml'),
-            os.path.join('Tests', 'valid3.xml'),
-            os.path.join(os.path.dirname(os.path.abspath(__file__)), 'valid4.xml'),
-        )
-
-        with self.cam:
-            self.assertRaises(ValueError, self.cam.save_settings, 'inval.xm', PersistType.All)
-
-            for path in valid_paths:
-                self.assertNoRaise(self.cam.save_settings, path, PersistType.All)
-                os.remove(path)
-
-    def test_camera_load_settings_verify_path(self):
-        # Expectation: Valid files end with .xml and must exist before before any execution.
-        valid_paths = (
-            'valid1.xml',
-            os.path.join('.', 'valid2.xml'),
-            os.path.join('Tests', 'valid3.xml'),
-            os.path.join(os.path.dirname(os.path.abspath(__file__)), 'valid4.xml'),
-        )
-
-        with self.cam:
-            self.assertRaises(ValueError, self.cam.load_settings, 'inval.xm', PersistType.All)
-
-            for path in valid_paths:
-                self.assertRaises(ValueError, self.cam.load_settings, path, PersistType.All)
-
-            for path in valid_paths:
-                self.cam.save_settings(path, PersistType.All)
-
-                self.assertNoRaise(self.cam.load_settings, path, PersistType.All)
-                os.remove(path)
-
-    def test_camera_context_manager_reentrancy(self):
-        # Expectation: Camera Context Manager must be reentrant. Multiple calls to _open
-        # must be prevented (would cause VimbaC - Error)
-        with self.cam:
-            with self.cam:
-                with self.cam:
-                    pass
-
-    def test_camera_api_context_sensitity_outside_context(self):
-        # Expectation: Call set_access_mode withing with scope must raise a RuntimeError
-        with self.cam:
-            self.assertRaises(RuntimeError, self.cam.set_access_mode)
-
-    def test_camera_api_context_sensitity_inside_context(self):
-        # Expectation: Most Camera related functions are only valid then called within the given
-        # Context. If called from Outside a runtime error must be raised.
-        self.assertRaises(RuntimeError, self.cam.read_memory)
-        self.assertRaises(RuntimeError, self.cam.write_memory)
-        self.assertRaises(RuntimeError, self.cam.read_registers)
-        self.assertRaises(RuntimeError, self.cam.write_registers)
-        self.assertRaises(RuntimeError, self.cam.get_all_features)
-        self.assertRaises(RuntimeError, self.cam.get_features_affected_by)
-        self.assertRaises(RuntimeError, self.cam.get_features_selected_by)
-        self.assertRaises(RuntimeError, self.cam.get_features_by_type)
-        self.assertRaises(RuntimeError, self.cam.get_features_by_category)
-        self.assertRaises(RuntimeError, self.cam.get_feature_by_name)
-        self.assertRaises(RuntimeError, self.cam.get_frame_generator)
-        self.assertRaises(RuntimeError, self.cam.get_frame)
-        self.assertRaises(RuntimeError, self.cam.start_streaming)
-        self.assertRaises(RuntimeError, self.cam.stop_streaming)
-        self.assertRaises(RuntimeError, self.cam.queue_frame)
-        self.assertRaises(RuntimeError, self.cam.get_pixel_formats)
-        self.assertRaises(RuntimeError, self.cam.get_pixel_format)
-        self.assertRaises(RuntimeError, self.cam.set_pixel_format)
-        self.assertRaises(RuntimeError, self.cam.save_settings)
-        self.assertRaises(RuntimeError, self.cam.load_settings)
diff --git a/VimbaPython/Source/Tests/real_cam_tests/feature_test.py b/VimbaPython/Source/Tests/real_cam_tests/feature_test.py
deleted file mode 100644
index c34c168a8ee490ca60147bb1fdad56febc7ad781..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/real_cam_tests/feature_test.py
+++ /dev/null
@@ -1,831 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-import threading
-
-from vimba import *
-from vimba.feature import *
-
-
-class CamBaseFeatureTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-        self.vimba._startup()
-
-        try:
-            self.cam = self.vimba.get_camera_by_id(self.get_test_camera_id())
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to lookup Camera.') from e
-
-        try:
-            self.cam._open()
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to open Camera.') from e
-
-        try:
-            self.height = self.cam.get_feature_by_name('Height')
-
-        except VimbaCameraError:
-            self.cam._close()
-            self.vimba._shutdown()
-            self.skipTest('Required Feature \'Height\' not available.')
-
-    def tearDown(self):
-        self.cam._close()
-        self.vimba._shutdown()
-
-    def test_get_name(self):
-        # Expectation: Return decoded FeatureName
-        self.assertEqual(self.height.get_name(), 'Height')
-
-    def test_get_flags(self):
-        # Expectation: Return decoded FeatureFlags
-        self.assertEqual(self.height.get_flags(), (FeatureFlags.Read, FeatureFlags.Write))
-
-    def test_get_category(self):
-        # Expectation: Return decoded category
-        self.assertNotEqual(self.height.get_category(), '')
-
-    def test_get_display_name(self):
-        # Expectation: Return decoded category
-        self.assertEqual(self.height.get_display_name(), 'Height')
-
-    def test_get_polling_time(self):
-        # Expectation: Return polling time. Only volatile features return
-        # anything other than zero.
-        self.assertEqual(self.height.get_polling_time(), 0)
-
-    def test_get_unit(self):
-        # Expectation: If Unit exists, return unit else return ''
-        self.assertEqual(self.height.get_unit(), '')
-
-    def test_get_representation(self):
-        # Expectation: Get numeric representation if existing else ''
-        self.assertEqual(self.height.get_representation(), '')
-
-    def test_get_visibility(self):
-        # Expectation: Get UI Visibility
-        self.assertEqual(self.height.get_visibility(), FeatureVisibility.Beginner)
-
-    def test_get_tooltip(self):
-        # Expectation: Shall not raise anything
-        self.assertNoRaise(self.height.get_tooltip)
-
-    def test_get_description(self):
-        # Expectation: Get decoded description
-        self.assertNotEqual(self.height.get_description(), '')
-
-    def test_get_sfnc_namespace(self):
-        # Expectation: Get decoded sfnc namespace
-        self.assertNotEqual(self.height.get_sfnc_namespace(), '')
-
-    def test_is_streamable(self):
-        # Expectation: Streamable features shall return True, others False
-        self.assertNoRaise(self.height.is_streamable)
-
-    def test_has_affected_features(self):
-        # Expectation:Features that affect features shall return True, others False
-        self.assertTrue(self.height.has_affected_features())
-
-    def test_has_selected_features(self):
-        # Expectation:Features that select features shall return True, others False
-        self.assertFalse(self.height.has_selected_features())
-
-    def test_get_access_mode(self):
-        # Expectation: Read/Write Features return (True, True), ReadOnly return (True, False)
-        self.assertEqual(self.height.get_access_mode(), (True, True))
-
-    def test_is_readable(self):
-        # Expectation: True if feature grant read access else False
-        self.assertTrue(self.height.is_readable())
-
-    def test_is_writeable(self):
-        # Expectation: True if feature grant write access else False
-        self.assertTrue(self.height.is_writeable())
-
-    def test_change_handler(self):
-        # Expectation: A given change handler is executed on value change.
-        # Adding the same handler multiple times shall not lead to multiple executions.
-        # The same goes for double unregister.
-
-        class Handler:
-            def __init__(self):
-                self.event = threading.Event()
-                self.call_cnt = 0
-
-            def __call__(self, feat):
-                self.call_cnt += 1
-                self.event.set()
-
-        handler = Handler()
-
-        self.height.register_change_handler(handler)
-        self.height.register_change_handler(handler)
-
-        tmp = self.height.get()
-
-        min_, _ = self.height.get_range()
-        inc = self.height.get_increment()
-
-        if min_ <= tmp - inc:
-            self.height.set(tmp - inc)
-
-        else:
-            self.height.set(tmp + inc)
-
-        handler.event.wait()
-
-        self.height.unregister_change_handler(handler)
-        self.height.unregister_change_handler(handler)
-
-        self.height.set(tmp)
-
-        self.assertEqual(handler.call_cnt, 1)
-
-    def test_stringify_features(self):
-        # Expectation: Each Feature must have a __str__ method. Depending on the Feature
-        # current Values are queried, this can fail. In those cases, all exceptions are
-        # fetched -> all features must be strinify able without raising any exception
-        for feat in self.vimba.get_all_features():
-            self.assertNoRaise(str, feat)
-
-        for feat in self.cam.get_all_features():
-            self.assertNoRaise(str, feat)
-
-
-class CamBoolFeatureTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-        self.vimba._startup()
-
-        try:
-            self.feat = self.vimba.get_feature_by_name('UsbTLIsPresent')
-
-        except VimbaFeatureError:
-            self.vimba._shutdown()
-            self.skipTest('Required Feature \'UsbTLIsPresent\' not available.')
-
-    def tearDown(self):
-        self.vimba._shutdown()
-
-    def test_get_type(self):
-        # Expectation: BoolFeature must return BoolFeature on get_type
-        self.assertEqual(self.feat.get_type(), BoolFeature)
-
-    def test_get(self):
-        # Expectation: returns current boolean value.
-        self.assertNoRaise(self.feat.get)
-
-    def test_set(self):
-        # Expectation: Raises invalid Access on non-writeable features.
-        self.assertRaises(VimbaFeatureError, self.feat.set, True)
-
-
-class CamCommandFeatureTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-        self.vimba._startup()
-
-        try:
-            self.feat = self.vimba.get_feature_by_name('ActionCommand')
-
-        except VimbaFeatureError:
-            self.vimba._shutdown()
-            self.skipTest('Required Feature \'ActionCommand\' not available.')
-
-    def tearDown(self):
-        self.vimba._shutdown()
-
-    def test_get_type(self):
-        # Expectation: CommandFeature must return CommandFeature on get_type
-        self.assertEqual(self.feat.get_type(), CommandFeature)
-
-
-class CamEnumFeatureTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-        self.vimba._startup()
-
-        try:
-            self.cam = self.vimba.get_camera_by_id(self.get_test_camera_id())
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to lookup Camera.') from e
-
-        try:
-            self.cam._open()
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to open Camera.') from e
-
-        try:
-            self.feat_r = self.cam.get_feature_by_name('DeviceScanType')
-
-        except VimbaFeatureError:
-            self.cam._close()
-            self.vimba._shutdown()
-            self.skipTest('Required Feature \'DeviceScanType\' not available.')
-
-        try:
-            self.feat_rw = self.cam.get_feature_by_name('AcquisitionMode')
-
-        except VimbaFeatureError:
-            self.cam._close()
-            self.vimba._shutdown()
-            self.skipTest('Required Feature \'AcquisitionMode\' not available.')
-
-    def tearDown(self):
-        self.cam._close()
-        self.vimba._shutdown()
-
-    def test_get_type(self):
-        # Expectation: EnumFeature must return EnumFeature on get_type
-        self.assertEqual(self.feat_r.get_type(), EnumFeature)
-        self.assertEqual(self.feat_rw.get_type(), EnumFeature)
-
-    def test_entry_as_bytes(self):
-        # Expectation: Get EnumEntry as encoded byte sequence
-        expected = b'MultiFrame'
-        entry = self.feat_rw.get_entry('MultiFrame')
-
-        self.assertEqual(bytes(entry), expected)
-
-    def test_entry_as_tuple(self):
-        # Expectation: Get EnumEntry as (str, int)
-        entry = self.feat_rw.get_entry('MultiFrame')
-        self.assertEqual(entry.as_tuple(), self.feat_rw.get_entry(int(entry)).as_tuple())
-
-    def test_get_all_entries(self):
-        # Expectation: Get all possible enum entries regardless of the availability
-        expected = (self.feat_r.get_entry('Areascan'),)
-
-        for e in expected:
-            self.assertIn(e, self.feat_r.get_all_entries())
-
-        expected = (
-            self.feat_rw.get_entry('SingleFrame'),
-            self.feat_rw.get_entry('MultiFrame'),
-            self.feat_rw.get_entry('Continuous')
-        )
-
-        for e in expected:
-            self.assertIn(e, self.feat_rw.get_all_entries())
-
-    def test_get_avail_entries(self):
-        # Expectation: All returned enum entries must be available
-        for e in self.feat_r.get_available_entries():
-            self.assertTrue(e.is_available())
-
-        for e in self.feat_rw.get_available_entries():
-            self.assertTrue(e.is_available())
-
-    def test_get_entry_int(self):
-        # Expectation: Lookup a given entry by using an int as key.
-        # Invalid keys must return VimbaFeatureError.
-
-        expected = self.feat_r.get_all_entries()[0]
-        self.assertEqual(self.feat_r.get_entry(int(expected)), expected)
-
-        expected = self.feat_rw.get_all_entries()[1]
-        self.assertEqual(self.feat_rw.get_entry(int(expected)), expected)
-
-        self.assertRaises(VimbaFeatureError, self.feat_r.get_entry, -1)
-        self.assertRaises(VimbaFeatureError, self.feat_rw.get_entry, -1)
-
-    def test_get_entry_str(self):
-        # Expectation: Lookup a given entry by using a str as key.
-        # Invalid keys must return VimbaFeatureError.
-
-        expected = self.feat_r.get_all_entries()[0]
-        self.assertEqual(self.feat_r.get_entry(str(expected)), expected)
-
-        expected = self.feat_rw.get_all_entries()[1]
-        self.assertEqual(self.feat_rw.get_entry(str(expected)), expected)
-
-        self.assertRaises(VimbaFeatureError, self.feat_r.get_entry, 'Should be invalid')
-        self.assertRaises(VimbaFeatureError, self.feat_rw.get_entry, 'Should be invalid')
-
-    def test_get(self):
-        # Expectation: Get must return the current value.
-        self.assertNoRaise(self.feat_r.get)
-        self.assertNoRaise(self.feat_rw.get)
-
-    def test_set_entry(self):
-        # Expectation: Set given enum entry if feature is writable.
-        # Raises:
-        # - VimbaFeatureError if enum entry is from other enum feature.
-        # - VimbaFeatureError if feature is read only
-
-        # Read Only Feature
-        entry = self.feat_r.get_all_entries()[0]
-        self.assertRaises(VimbaFeatureError, self.feat_r.set, entry)
-
-        # Read/Write Feature
-        old_entry = self.feat_rw.get()
-
-        try:
-            # Normal operation
-            self.assertNoRaise(self.feat_rw.set, self.feat_rw.get_entry(2))
-            self.assertEqual(self.feat_rw.get(), self.feat_rw.get_entry(2))
-
-            # Provoke FeatureError by setting the feature from the ReadOnly entry.
-            self.assertRaises(VimbaFeatureError, self.feat_rw.set, entry)
-
-        finally:
-            self.feat_rw.set(old_entry)
-
-    def test_set_str(self):
-        # Expectation: Set given enum entry string value if feature is writable.
-        # Raises:
-        # - VimbaFeatureError if given string is not associated with this feature.
-        # - VimbaFeatureError if feature is read only
-
-        # Read Only Feature
-        self.assertRaises(VimbaFeatureError, self.feat_r.set, str(self.feat_r.get_entry(0)))
-
-        # Read/Write Feature
-        old_entry = self.feat_rw.get()
-
-        try:
-            # Normal operation
-            self.assertNoRaise(self.feat_rw.set, str(self.feat_rw.get_entry(2)))
-            self.assertEqual(self.feat_rw.get(), self.feat_rw.get_entry(2))
-
-            # Provoke FeatureError by an invalid enum value
-            self.assertRaises(VimbaFeatureError, self.feat_rw.set, 'Hopefully invalid')
-
-        finally:
-            self.feat_rw.set(old_entry)
-
-    def test_set_int(self):
-        # Expectation: Set given enum entry int value if feature is writable.
-        # Raises:
-        # - VimbaFeatureError if given int is not associated with this feature.
-        # - VimbaFeatureError if feature is read only
-
-        # Read Only Feature
-        self.assertRaises(VimbaFeatureError, self.feat_r.set, int(self.feat_r.get_entry(0)))
-
-        # Read/Write Feature
-        old_entry = self.feat_rw.get()
-
-        try:
-            # Normal operation
-            self.assertNoRaise(self.feat_rw.set, int(self.feat_rw.get_entry(2)))
-            self.assertEqual(self.feat_rw.get(), self.feat_rw.get_entry(2))
-
-            # Provoke FeatureError by an invalid enum value
-            self.assertRaises(VimbaFeatureError, self.feat_rw.set, -23)
-
-        finally:
-            self.feat_rw.set(old_entry)
-
-    def test_set_in_callback(self):
-        # Expected behavior: A set operation within a change handler must
-        # Raise a VimbaFeatureError to prevent an endless handler execution.
-
-        class Handler:
-            def __init__(self):
-                self.raised = False
-                self.event = threading.Event()
-
-            def __call__(self, feat):
-                try:
-                    feat.set(feat.get())
-
-                except VimbaFeatureError:
-                    self.raised = True
-
-                self.event.set()
-
-        old_entry = self.feat_rw.get()
-
-        try:
-            handler = Handler()
-            self.feat_rw.register_change_handler(handler)
-
-            # Trigger change handler and wait for callback execution.
-            self.feat_rw.set(self.feat_rw.get())
-            handler.event.wait()
-
-            self.assertTrue(handler.raised)
-
-        finally:
-            self.feat_rw.unregister_change_handler(handler)
-            self.feat_rw.set(old_entry)
-
-
-class CamFloatFeatureTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-        self.vimba._startup()
-
-        try:
-            self.cam = self.vimba.get_camera_by_id(self.get_test_camera_id())
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to lookup Camera.') from e
-
-        try:
-            self.cam._open()
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to open Camera.') from e
-
-        try:
-            self.feat_r = self.vimba.get_feature_by_name('Elapsed')
-
-        except VimbaFeatureError:
-            self.cam._close()
-            self.vimba._shutdown()
-            self.skipTest('Required Feature \'Elapsed\' not available.')
-
-        try:
-            self.feat_rw = self.cam.get_feature_by_name('ExposureTime')
-
-        except VimbaFeatureError:
-            # Some Cameras name ExposureTime as ExposureTimeAbs
-            try:
-                self.feat_rw = self.cam.get_feature_by_name('ExposureTimeAbs')
-
-            except VimbaFeatureError:
-                self.cam._close()
-                self.vimba._shutdown()
-                self.skipTest('Required Feature \'ExposureTime\' not available.')
-
-    def tearDown(self):
-        self.cam._close()
-        self.vimba._shutdown()
-
-    def test_get_type(self):
-        # Expectation: FloatFeature returns FloatFeature on get_type.
-        self.assertEqual(self.feat_r.get_type(), FloatFeature)
-        self.assertEqual(self.feat_rw.get_type(), FloatFeature)
-
-    def test_get(self):
-        # Expectation: Get current value.
-
-        self.assertNoRaise(self.feat_r.get)
-        self.assertNoRaise(self.feat_rw.get)
-
-    def test_get_range(self):
-        # Expectation: Get value range. Raise VimbaFeatureError on non-read access.
-        self.assertNoRaise(self.feat_r.get_range)
-        self.assertNoRaise(self.feat_rw.get_range)
-
-    def test_get_increment(self):
-        # Expectation: Get value increment if existing. If this Feature has no
-        # increment, None is returned.
-
-        self.assertNoRaise(self.feat_r.get_increment)
-        self.assertNoRaise(self.feat_rw.get_increment)
-
-    def test_set(self):
-        # Expectation: Set value. Errors:
-        # VimbaFeatureError if access right are not writable
-        # VimbaFeatureError if value is out of bounds
-
-        # Read only feature
-        self.assertRaises(VimbaFeatureError, self.feat_r.set, 0.0)
-
-        # Read/Write Feature
-        old_value = self.feat_rw.get()
-
-        try:
-            delta = 0.1
-
-            # Range test
-            min_, max_ = self.feat_rw.get_range()
-
-            # Within bounds (no error)
-            self.assertNoRaise(self.feat_rw.set, min_)
-            self.assertAlmostEqual(self.feat_rw.get(), min_)
-            self.assertNoRaise(self.feat_rw.set, max_)
-            self.assertAlmostEqual(self.feat_rw.get(), max_)
-
-            # Out of bounds (must raise)
-            self.assertRaises(VimbaFeatureError, self.feat_rw.set, min_ - delta)
-            self.assertRaises(VimbaFeatureError, self.feat_rw.set, max_ + delta)
-
-        finally:
-            self.feat_rw.set(old_value)
-
-    def test_set_in_callback(self):
-        # Expectation: Calling set within change_handler must raise an VimbaFeatureError
-
-        class Handler:
-            def __init__(self):
-                self.raised = False
-                self.event = threading.Event()
-
-            def __call__(self, feat):
-                try:
-                    feat.set(feat.get())
-
-                except VimbaFeatureError:
-                    self.raised = True
-
-                self.event.set()
-
-        old_entry = self.feat_rw.get()
-
-        try:
-            handler = Handler()
-            self.feat_rw.register_change_handler(handler)
-
-            # Trigger change handler and wait for callback execution.
-            self.feat_rw.set(self.feat_rw.get())
-            handler.event.wait()
-
-            self.assertTrue(handler.raised)
-
-        finally:
-            self.feat_rw.unregister_change_handler(handler)
-            self.feat_rw.set(old_entry)
-
-
-class CamIntFeatureTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-        self.vimba._startup()
-
-        try:
-            self.cam = self.vimba.get_camera_by_id(self.get_test_camera_id())
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to lookup Camera.') from e
-
-        try:
-            self.cam._open()
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to open Camera.') from e
-
-        try:
-            self.feat_r = self.cam.get_feature_by_name('HeightMax')
-
-        except VimbaFeatureError:
-            self.cam._close()
-            self.vimba._shutdown()
-            self.skipTest('Required Feature \'HeightMax\' not available.')
-
-        try:
-            self.feat_rw = self.cam.get_feature_by_name('Height')
-
-        except VimbaFeatureError:
-            self.cam._close()
-            self.vimba._shutdown()
-            self.skipTest('Required Feature \'Height\' not available.')
-
-    def tearDown(self):
-        self.cam._close()
-        self.vimba._shutdown()
-
-    def test_get_type(self):
-        # Expectation: IntFeature must return IntFeature on get_type
-        self.assertEqual(self.feat_r.get_type(), IntFeature)
-        self.assertEqual(self.feat_rw.get_type(), IntFeature)
-
-    def test_get(self):
-        # Expectation: Get current value
-
-        self.assertNoRaise(self.feat_r.get)
-        self.assertNoRaise(self.feat_rw.get)
-
-    def test_get_range(self):
-        # Expectation: Get range of accepted values
-        self.assertNoRaise(self.feat_r.get_range)
-        self.assertNoRaise(self.feat_rw.get_range)
-
-    def test_get_increment(self):
-        # Expectation: Get step between valid values
-        self.assertNoRaise(self.feat_r.get_increment)
-        self.assertNoRaise(self.feat_rw.get_increment)
-
-    def test_set(self):
-        # Expectation: Set value or raise VimbaFeatureError under the following conditions.
-        # 1) Invalid Access Rights
-        # 2) Misaligned value.
-        # 3) Out-of-bounds Access
-
-        # Read only feature
-        self.assertRaises(VimbaFeatureError, self.feat_r.set, 0)
-
-        # Writable feature
-        old_value = self.feat_rw.get()
-
-        try:
-            inc = self.feat_rw.get_increment()
-            min_, max_ = self.feat_rw.get_range()
-
-            # Normal usage
-            self.assertNoRaise(self.feat_rw.set, min_)
-            self.assertEqual(self.feat_rw.get(), min_)
-            self.assertNoRaise(self.feat_rw.set, max_)
-            self.assertEqual(self.feat_rw.get(), max_)
-
-            # Out of bounds access.
-            self.assertRaises(VimbaFeatureError, self.feat_rw.set, min_ - inc)
-            self.assertRaises(VimbaFeatureError, self.feat_rw.set, max_ + inc)
-
-        finally:
-            self.feat_rw.set(old_value)
-
-    def test_set_in_callback(self):
-        # Expectation: Setting a value within a Callback must raise a VimbaFeatureError
-
-        class Handler:
-            def __init__(self):
-                self.raised = False
-                self.event = threading.Event()
-
-            def __call__(self, feat):
-                try:
-                    feat.set(feat.get())
-
-                except VimbaFeatureError:
-                    self.raised = True
-
-                self.event.set()
-
-        old_entry = self.feat_rw.get()
-
-        try:
-            handler = Handler()
-            self.feat_rw.register_change_handler(handler)
-
-            # Trigger change handler and wait for callback execution.
-            min_, _ = self.feat_rw.get_range()
-            inc = self.feat_rw.get_increment()
-
-            if min_ <= (old_entry - inc):
-                self.feat_rw.set(old_entry - inc)
-
-            else:
-                self.feat_rw.set(old_entry + inc)
-
-            handler.event.wait()
-
-            self.assertTrue(handler.raised)
-
-        finally:
-            self.feat_rw.unregister_change_handler(handler)
-            self.feat_rw.set(old_entry)
-
-
-class CamStringFeatureTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-        self.vimba._startup()
-
-        try:
-            self.cam = self.vimba.get_camera_by_id(self.get_test_camera_id())
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to lookup Camera.') from e
-
-        try:
-            self.cam._open()
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to open Camera.') from e
-
-        self.feat_r = None
-        feats = self.cam.get_features_by_type(StringFeature)
-
-        for feat in feats:
-            if feat.get_access_mode() == (True, False):
-                self.feat_r = feat
-
-        if self.feat_r is None:
-            self.cam._close()
-            self.vimba._shutdown()
-            self.skipTest('Test requires read only StringFeature.')
-
-        self.feat_rw = None
-        feats = self.cam.get_features_by_type(StringFeature)
-
-        for feat in feats:
-            if feat.get_access_mode() == (True, True):
-                self.feat_rw = feat
-
-        if self.feat_rw is None:
-            self.cam._close()
-            self.vimba._shutdown()
-            self.skipTest('Test requires read/write StringFeature.')
-
-    def tearDown(self):
-        self.cam._close()
-        self.vimba._shutdown()
-
-    def test_get_type(self):
-        # Expectation: StringFeature must return StringFeature on get_type
-        self.assertEqual(self.feat_r.get_type(), StringFeature)
-        self.assertEqual(self.feat_rw.get_type(), StringFeature)
-
-    def test_get(self):
-        # Expectation: Get current value without raising an exception
-        self.assertNoRaise(self.feat_r.get)
-        self.assertNoRaise(self.feat_rw.get)
-
-    def test_get_max_length(self):
-        # Expectation: Get maximum string length
-        self.assertNoRaise(self.feat_r.get_max_length)
-        self.assertNoRaise(self.feat_rw.get_max_length)
-
-    def test_set(self):
-        # Expectation:
-        # 1) Setting a read only feature must raise a VimbaFeatureError
-        # 2) Setting a read/wrtie must raise VimbaFeatureError if the string is
-        #    longer than max length
-        # 3) Setting a read/write feature must work if string is long enough
-
-        # Ensure Expectation 1
-        self.assertRaises(VimbaFeatureError, self.feat_r.set, self.feat_r.get())
-        self.assertNoRaise(self.feat_rw.set, self.feat_rw.get())
-
-        # Ensure Expectation 2
-        old_val = self.feat_rw.get()
-
-        try:
-            invalid = 'a' * self.feat_rw.get_max_length()
-            self.assertRaises(VimbaFeatureError, self.feat_rw.set, invalid)
-
-        finally:
-            self.feat_rw.set(old_val)
-
-        # Ensure Expectation 3
-        try:
-            valid = 'a' * (self.feat_rw.get_max_length() - 1)
-            self.assertNoRaise(self.feat_rw.set, valid)
-            self.assertEqual(valid, self.feat_rw.get())
-
-        finally:
-            self.feat_rw.set(old_val)
-
-    def test_set_in_callback(self):
-        # Expectation: Setting a value within a Callback must raise a VimbaFeatureError
-
-        class Handler:
-            def __init__(self):
-                self.raised = False
-                self.event = threading.Event()
-
-            def __call__(self, feat):
-                try:
-                    feat.set(feat.get())
-
-                except VimbaFeatureError:
-                    self.raised = True
-
-                self.event.set()
-
-        try:
-            handler = Handler()
-            self.feat_rw.register_change_handler(handler)
-
-            self.feat_rw.set(self.feat_rw.get())
-
-            handler.event.wait()
-
-            self.assertTrue(handler.raised)
-
-        finally:
-            self.feat_rw.unregister_change_handler(handler)
diff --git a/VimbaPython/Source/Tests/real_cam_tests/frame_test.py b/VimbaPython/Source/Tests/real_cam_tests/frame_test.py
deleted file mode 100644
index fc3eaccfa74bc63256ecbd85576efb804641f170..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/real_cam_tests/frame_test.py
+++ /dev/null
@@ -1,206 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-import copy
-import ctypes
-
-from vimba import *
-from vimba.frame import *
-
-
-class CamFrameTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-        self.vimba._startup()
-
-        try:
-            self.cam = self.vimba.get_camera_by_id(self.get_test_camera_id())
-
-        except VimbaCameraError as e:
-            self.vimba._shutdown()
-            raise Exception('Failed to lookup Camera.') from e
-
-    def tearDown(self):
-        self.vimba._shutdown()
-
-    def test_verify_buffer(self):
-        # Expectation: A Frame buffer shall have exactly the specified size on construction.
-        # Allocation is performed by VimbaPython
-        self.assertEqual(Frame(0, AllocationMode.AnnounceFrame).get_buffer_size(), 0)
-        self.assertEqual(Frame(1024, AllocationMode.AnnounceFrame).get_buffer_size(), 1024)
-        self.assertEqual(Frame(1024 * 1024, AllocationMode.AnnounceFrame).get_buffer_size(),
-                         1024 * 1024)
-
-    def test_verify_no_copy_empty_buffer_access(self):
-        # Expectation: Accessing the internal buffer must not create a copy
-        # frame._buffer is only set on construction if buffer is allocated by VimbaPython
-        frame = Frame(10, AllocationMode.AnnounceFrame)
-        self.assertEqual(id(frame._buffer), id(frame.get_buffer()))
-
-    def test_verify_no_copy_filled_buffer_access(self):
-        # Expectation: Accessing the internal buffer must not create a copy
-        for allocation_mode in AllocationMode:
-            with self.subTest(f'allocation_mode={str(allocation_mode)}'):
-                with self.cam:
-                    frame = self.cam.get_frame(allocation_mode=allocation_mode)
-                self.assertEqual(id(frame._buffer), id(frame.get_buffer()))
-
-    def test_get_id(self):
-        # Expectation: get_id() must return None if Its locally constructed
-        # else it must return the frame id.
-        for allocation_mode in AllocationMode:
-            with self.subTest(f'allocation_mode={str(allocation_mode)}'):
-                self.assertIsNone(Frame(0, allocation_mode).get_id())
-
-                with self.cam:
-                    self.assertIsNotNone(
-                        self.cam.get_frame(allocation_mode=allocation_mode).get_id())
-
-    def test_get_timestamp(self):
-        # Expectation: get_timestamp() must return None if Its locally constructed
-        # else it must return the timestamp.
-        for allocation_mode in AllocationMode:
-            with self.subTest(f'allocation_mode={str(allocation_mode)}'):
-                self.assertIsNone(Frame(0, allocation_mode).get_timestamp())
-
-                with self.cam:
-                    self.assertIsNotNone(
-                        self.cam.get_frame(allocation_mode=allocation_mode).get_timestamp())
-
-    def test_get_offset(self):
-        # Expectation: get_offset_x() must return None if Its locally constructed
-        # else it must return the offset as int. Same goes for get_offset_y()
-        for allocation_mode in AllocationMode:
-            with self.subTest(f'allocation_mode={str(allocation_mode)}'):
-                self.assertIsNone(Frame(0, allocation_mode).get_offset_x())
-                self.assertIsNone(Frame(0, allocation_mode).get_offset_y())
-
-                with self.cam:
-                    frame = self.cam.get_frame(allocation_mode=allocation_mode)
-                    self.assertIsNotNone(frame.get_offset_x())
-                    self.assertIsNotNone(frame.get_offset_y())
-
-    def test_get_dimension(self):
-        # Expectation: get_width() must return None if Its locally constructed
-        # else it must return the offset as int. Same goes for get_height()
-        for allocation_mode in AllocationMode:
-            with self.subTest(f'allocation_mode={str(allocation_mode)}'):
-                self.assertIsNone(Frame(0, allocation_mode).get_width())
-                self.assertIsNone(Frame(0, allocation_mode).get_height())
-
-                with self.cam:
-                    frame = self.cam.get_frame(allocation_mode=allocation_mode)
-                    self.assertIsNotNone(frame.get_width())
-                    self.assertIsNotNone(frame.get_height())
-
-    def test_get_image_size(self):
-        # Expectation: get_image_size() must return 0 if locally constructed
-        # else it must return the image_size as int.
-        for allocation_mode in AllocationMode:
-            with self.subTest(f'allocation_mode={str(allocation_mode)}'):
-                self.assertEquals(Frame(0, allocation_mode).get_image_size(), 0)
-
-                with self.cam:
-                    self.assertNotEquals(
-                        self.cam.get_frame(allocation_mode=allocation_mode).get_image_size(), 0)
-
-    def test_deepcopy(self):
-        # Expectation: a deepcopy must clone the frame buffer with its contents an
-        # update the internally store pointer in VmbFrame struct.
-        for allocation_mode in AllocationMode:
-            with self.subTest(f'allocation_mode={str(allocation_mode)}'):
-                with self.cam:
-                    frame = self.cam.get_frame(allocation_mode=allocation_mode)
-
-                frame_cpy = copy.deepcopy(frame)
-
-                # Ensure frames and their members are not the same object
-                self.assertNotEquals(id(frame), id(frame_cpy))
-                self.assertNotEquals(id(frame._buffer), id(frame_cpy._buffer))
-                self.assertNotEquals(id(frame._frame), id(frame_cpy._frame))
-
-                # Ensure that both buffers have the same size and contain the same data.
-                self.assertEquals(frame.get_buffer_size(), frame_cpy.get_buffer_size())
-                self.assertTrue(all(a == b for a, b in zip(frame.get_buffer(),
-                                                           frame_cpy.get_buffer())))
-
-                # Ensure that internal Frame Pointer points to correct buffer.
-                self.assertEquals(frame._frame.buffer,
-                                  ctypes.cast(frame._buffer, ctypes.c_void_p).value)
-
-                self.assertEquals(frame_cpy._frame.buffer,
-                                  ctypes.cast(frame_cpy._buffer, ctypes.c_void_p).value)
-
-                self.assertEquals(frame._frame.bufferSize, frame_cpy._frame.bufferSize)
-
-    def test_get_pixel_format(self):
-        # Expectation: Frames have an image format set after acquisition
-        for allocation_mode in AllocationMode:
-            with self.subTest(f'allocation_mode={str(allocation_mode)}'):
-                with self.cam:
-                    self.assertNotEquals(
-                        self.cam.get_frame(allocation_mode=allocation_mode).get_pixel_format(), 0)
-
-    def test_incompatible_formats_value_error(self):
-        # Expectation: Conversion into incompatible formats must lead to an value error
-        for allocation_mode in AllocationMode:
-            with self.subTest(f'allocation_mode={str(allocation_mode)}'):
-                with self.cam:
-                    frame = self.cam.get_frame(allocation_mode=allocation_mode)
-
-                current_fmt = frame.get_pixel_format()
-                convertable_fmt = current_fmt.get_convertible_formats()
-
-                for fmt in PixelFormat.__members__.values():
-                    if (fmt != current_fmt) and (fmt not in convertable_fmt):
-                        self.assertRaises(ValueError, frame.convert_pixel_format, fmt)
-
-    def test_convert_to_all_given_formats(self):
-        # Expectation: A Series of Frame, each acquired with a different Pixel format
-        # Must be convertible to all formats the given format claims its convertible to without any
-        # errors.
-
-        test_frames = []
-
-        with self.cam:
-            for fmt in self.cam.get_pixel_formats():
-                self.cam.set_pixel_format(fmt)
-
-                frame = self.cam.get_frame()
-
-                self.assertEqual(fmt, frame.get_pixel_format())
-                test_frames.append(frame)
-
-        for frame in test_frames:
-
-            # The test shall work on a copy to keep the original Frame untouched
-            for expected_fmt in frame.get_pixel_format().get_convertible_formats():
-                cpy_frame = copy.deepcopy(frame)
-                cpy_frame.convert_pixel_format(expected_fmt)
-
-                self.assertEquals(expected_fmt, cpy_frame.get_pixel_format())
diff --git a/VimbaPython/Source/Tests/real_cam_tests/vimba_test.py b/VimbaPython/Source/Tests/real_cam_tests/vimba_test.py
deleted file mode 100644
index a3fd470a02d866b3d596edd7387c22d0361858f0..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/real_cam_tests/vimba_test.py
+++ /dev/null
@@ -1,149 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-import ipaddress
-import struct
-
-from vimba import *
-
-
-class CamVimbaTest(unittest.TestCase):
-    def setUp(self):
-        self.vimba = Vimba.get_instance()
-
-    def tearDown(self):
-        pass
-
-    def test_context_entry_exit(self):
-        # Expected Behavior:
-        # On entering the context features, cameras and interfaces shall
-        # be detected and after leaving the context, everything should be reverted.
-
-        self.assertRaises(RuntimeError, self.vimba.get_all_features)
-        self.assertRaises(RuntimeError, self.vimba.get_all_interfaces)
-        self.assertRaises(RuntimeError, self.vimba.get_all_cameras)
-
-        with self.vimba:
-            self.assertNotEqual(self.vimba.get_all_features(), ())
-            self.assertNotEqual(self.vimba.get_all_interfaces(), ())
-            self.assertNotEqual(self.vimba.get_all_cameras(), ())
-
-        self.assertRaises(RuntimeError, self.vimba.get_all_features)
-        self.assertRaises(RuntimeError, self.vimba.get_all_interfaces)
-        self.assertRaises(RuntimeError, self.vimba.get_all_cameras)
-
-    def test_get_all_interfaces(self):
-        # Expected Behavior: get_all_interfaces() must raise an RuntimeError in closed state and
-        # be non-empty then opened.
-        self.assertRaises(RuntimeError, self.vimba.get_all_interfaces)
-
-        with self.vimba:
-            self.assertTrue(self.vimba.get_all_interfaces())
-
-    def test_get_interface_by_id(self):
-        # Expected Behavior: All detected Interfaces must be lookup able by their Id.
-        # If outside of given scope, an error must be returned
-        with self.vimba:
-            ids = [inter.get_id() for inter in self.vimba.get_all_interfaces()]
-
-            for id_ in ids:
-                self.assertNoRaise(self.vimba.get_interface_by_id, id_)
-
-        for id_ in ids:
-            self.assertRaises(RuntimeError, self.vimba.get_interface_by_id, id_)
-
-    def test_get_all_cameras(self):
-        # Expected Behavior: get_all_cameras() must only return camera handles on a open camera.
-        self.assertRaises(RuntimeError, self.vimba.get_all_cameras)
-
-        with self.vimba:
-            self.assertTrue(self.vimba.get_all_cameras())
-
-    def test_get_camera_by_id(self):
-        # Expected Behavior: Lookup of test camera must not fail after system opening
-        camera_id = self.get_test_camera_id()
-
-        with self.vimba:
-            self.assertNoRaise(self.vimba.get_camera_by_id, camera_id)
-
-    def test_get_camera_by_ip(self):
-        # Expected Behavior: get_camera_by_id() must work with a valid ipv4 address.
-        # A with lookup of an invalid ipv4 address (no Camera attached)
-        # must raise a VimbaCameraError, a lookup with an ipv6 address must raise a
-        # VimbaCameraError in general (VimbaC doesn't support ipv6)
-        with self.vimba:
-            # Verify that the Test Camera is a GigE - Camera
-            cam = self.vimba.get_camera_by_id(self.get_test_camera_id())
-            inter = self.vimba.get_interface_by_id(cam.get_interface_id())
-
-            if inter.get_type() != InterfaceType.Ethernet:
-                raise self.skipTest('Test requires GigE - Camera.')
-
-            # Lookup test cameras IP address.
-            with cam:
-                ip_as_number = cam.get_feature_by_name('GevCurrentIPAddress').get()
-
-            # Swap byte order, the raw value does not seem to follow network byte order.
-            ip_as_number = struct.pack('<L', ip_as_number)
-
-            # Verify that lookup with IPv4 Address returns the same Camera Object
-            ip_addr = str(ipaddress.IPv4Address(ip_as_number))
-            self.assertEqual(self.vimba.get_camera_by_id(ip_addr), cam)
-
-            # Verify that a lookup with an invalid IPv4 Address raises a VimbaCameraError
-            ip_addr = str(ipaddress.IPv4Address('127.0.0.1'))
-            self.assertRaises(VimbaCameraError, self.vimba.get_camera_by_id, ip_addr)
-
-            # Verify that a lookup with an IPv6 Address raises a VimbaCameraError
-            ip_addr = str(ipaddress.IPv6Address('FD00::DEAD:BEEF'))
-            self.assertRaises(VimbaCameraError, self.vimba.get_camera_by_id, ip_addr)
-
-    def test_get_camera_by_mac(self):
-        # Expected Behavior: get_feature_by_id must be usable with a given MAC Address.
-        with self.vimba:
-            # Verify that the Test Camera is a GigE - Camera
-            cam = self.vimba.get_camera_by_id(self.get_test_camera_id())
-            inter = self.vimba.get_interface_by_id(cam.get_interface_id())
-
-            if inter.get_type() != InterfaceType.Ethernet:
-                raise self.skipTest('Test requires GigE - Camera.')
-
-            # Lookup test cameras MAC Address.
-            with cam:
-                # Construct MAC Address from raw value.
-                mac_as_number = cam.get_feature_by_name('GevDeviceMACAddress').get()
-
-            mac_as_bytes = mac_as_number.to_bytes(6, byteorder='big')
-            mac_as_str = ''.join(format(s, '02x') for s in mac_as_bytes).upper()
-
-            # Verify that lookup with MAC Address returns the same Camera Object
-            self.assertEqual(self.vimba.get_camera_by_id(mac_as_str), cam)
-
-            # Verify that a lookup with an invalid MAC Address raises a VimbaCameraError
-            invalid_mac = 'ffffffff'
-            self.assertRaises(VimbaCameraError, self.vimba.get_camera_by_id, invalid_mac)
diff --git a/VimbaPython/Source/Tests/runner.py b/VimbaPython/Source/Tests/runner.py
deleted file mode 100644
index 70e3d79e4fd086025e6335226994561c37da94a8..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/Tests/runner.py
+++ /dev/null
@@ -1,177 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import unittest
-import docopt
-import sys
-import os
-
-# Add local directory to search path for test module import in this script.
-sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
-
-
-# Add vimba module at the start of the search path. The tests should run against the
-# local VimbaPython sources regardless of any existing installations.
-sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-
-# Inject 'assertNotRaise' to default test module. Tests are derived from this class.
-def _assertNoRaise(self, func, *args, **kwargs):
-    try:
-        func(*args, **kwargs)
-
-    except BaseException as e:
-        self.fail('Function raised: {}'.format(e))
-
-
-# Inject shared test camera id into the base TestCase
-def _get_test_camera_id(self) -> str:
-    return unittest.TestCase.test_cam_id
-
-
-def _set_test_camera_id(test_cam_id) -> str:
-    unittest.TestCase.test_cam_id = test_cam_id
-
-
-unittest.TestCase.assertNoRaise = _assertNoRaise
-unittest.TestCase.set_test_camera_id = _set_test_camera_id
-unittest.TestCase.get_test_camera_id = _get_test_camera_id
-
-
-def _blacklist_tests(test_suite, blacklist):
-    for test in test_suite:
-        # Process TestSuites recursively
-        if type(test) == unittest.TestSuite:
-            _blacklist_tests(test, blacklist)
-
-        # Test is actually a TestCase. Add skip decorator to test
-        # function if the test is blacklisted.
-        else:
-            name = test._testMethodName
-            if name in blacklist:
-                setattr(test, name, unittest.skip('Blacklisted')(getattr(test, name)))
-
-    return test_suite
-
-
-def main():
-    CLI = """VimbaPython test runner.
-    Usage:
-        runner.py -h
-        runner.py -s basic -o console [BLACKLIST...]
-        runner.py -s basic -o junit_xml REPORT_DIR [BLACKLIST...]
-        runner.py -s (real_cam | all) -c CAMERA_ID -o console [BLACKLIST...]
-        runner.py -s (real_cam | all) -c CAMERA_ID -o junit_xml REPORT_DIR [BLACKLIST...]
-
-    Arguments:
-        CAMERA_ID    Camera Id from Camera that shall be used during testing
-        REPORT_DIR   Directory used for junit_export.
-        BLACKLIST    Optional sequence of unittest functions to skip.
-
-    Options:
-        -h   Show this screen.
-        -s   Testsuite to execute. real_cam and all require a camera to
-             run tests against, therefore -c is mandatory.
-        -c   Camera Id used while testing.
-        -o   Test output: Either console or junit_xml.
-    """
-
-    args = docopt.docopt(CLI)
-    loader = unittest.TestLoader()
-
-    if args['CAMERA_ID']:
-        unittest.TestCase.set_test_camera_id(args['CAMERA_ID'])
-
-    else:
-        unittest.TestCase.set_test_camera_id(None)
-
-    # Select TestRunner
-    if args['console']:
-        runner = unittest.TextTestRunner(verbosity=2)
-
-    elif args['junit_xml']:
-        import xmlrunner
-        runner = xmlrunner.XMLTestRunner(output=args['REPORT_DIR'])
-
-    # Import tests cases
-    import basic_tests.c_binding_test
-    import basic_tests.util_runtime_type_check_test
-    import basic_tests.util_tracer_test
-    import basic_tests.util_context_decorator_test
-    import basic_tests.vimba_common_test
-    import basic_tests.vimba_test
-    import basic_tests.interface_test
-
-    import real_cam_tests.vimba_test
-    import real_cam_tests.feature_test
-    import real_cam_tests.camera_test
-    import real_cam_tests.frame_test
-    import real_cam_tests.ancillary_data_test
-
-    # Assign test cases to test suites
-    BASIC_TEST_MODS = [
-        basic_tests.c_binding_test,
-        basic_tests.util_runtime_type_check_test,
-        basic_tests.util_tracer_test,
-        basic_tests.util_context_decorator_test,
-        basic_tests.vimba_common_test,
-        basic_tests.vimba_test,
-        basic_tests.interface_test
-    ]
-
-    REAL_CAM_TEST_MODS = [
-        real_cam_tests.vimba_test,
-        real_cam_tests.feature_test,
-        real_cam_tests.camera_test,
-        real_cam_tests.frame_test,
-        real_cam_tests.ancillary_data_test
-    ]
-
-    # Prepare TestSuites
-    suite_basic = unittest.TestSuite()
-    suite_cam = unittest.TestSuite()
-
-    for mod in BASIC_TEST_MODS:
-        suite_basic.addTests(_blacklist_tests(loader.loadTestsFromModule(mod), args['BLACKLIST']))
-
-    for mod in REAL_CAM_TEST_MODS:
-        suite_cam.addTests(_blacklist_tests(loader.loadTestsFromModule(mod), args['BLACKLIST']))
-
-    # Execute TestSuites
-    if args['basic']:
-        runner.run(suite_basic)
-
-    elif args['real_cam']:
-        runner.run(suite_cam)
-
-    elif args['all']:
-        runner.run(suite_basic)
-        runner.run(suite_cam)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Source/run_tests.py b/VimbaPython/Source/run_tests.py
deleted file mode 100644
index 8c505f24dddbfb6e7b423f69be672d85d0c780b2..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/run_tests.py
+++ /dev/null
@@ -1,172 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import os
-import shutil
-import subprocess
-import docopt
-
-
-def fprint(line):
-    print(line, flush=True)
-
-
-def stringify_list(l):
-    list_str = ''
-    for e in l:
-        list_str += e + ' '
-
-    return list_str
-
-
-def static_test():
-    fprint('Execute Static Test: flake8')
-    subprocess.run('flake8 vimba', shell=True)
-    subprocess.run('flake8 Examples --ignore=F405,F403', shell=True)
-    subprocess.run('flake8 Tests --ignore=F405,F403', shell=True)
-    fprint('')
-
-    fprint('Execute Static Test: mypy')
-    subprocess.run('mypy vimba', shell=True, check=True)
-    fprint('')
-
-
-def unit_test(testsuite, testcamera, blacklist):
-    blacklist = " ".join(blacklist)
-
-    fprint('Execute Unit tests and measure coverage:')
-    if testsuite == 'basic':
-        cmd = 'coverage run Tests/runner.py -s basic -o console {}'.format(blacklist)
-
-    else:
-        cmd = 'coverage run Tests/runner.py -s {} -c {} -o console {}'
-        cmd = cmd.format(testsuite, testcamera, blacklist)
-
-    subprocess.run(cmd, shell=True, check=True)
-    fprint('')
-
-    fprint('Coverage during test execution:')
-    subprocess.run('coverage report -m', shell=True, check=True)
-    fprint('')
-
-    coverage_file = '.coverage'
-    if os.path.exists(coverage_file):
-        os.remove(coverage_file)
-
-
-def setup_junit(report_dir):
-    if os.path.exists(report_dir):
-        shutil.rmtree(report_dir, ignore_errors=True)
-
-    os.mkdir(report_dir)
-
-
-def static_test_junit(report_dir):
-    fprint('Execute Static Test: flake8')
-    cmd = 'flake8 vimba --output-file=' + report_dir + '/flake8.txt'
-    subprocess.run(cmd, shell=True, check=True)
-
-    cmd = 'flake8_junit ' + report_dir + '/flake8.txt ' + report_dir + '/flake8_junit.xml'
-    subprocess.run(cmd, shell=True, check=True)
-    fprint('')
-
-    fprint('Execute Static Test: mypy')
-    cmd = 'mypy vimba --junit-xml ' + report_dir + '/mypy_junit.xml'
-    subprocess.run(cmd, shell=True, check=True)
-    fprint('')
-
-
-def unit_test_junit(report_dir, testsuite, testcamera, blacklist):
-    fprint('Execute Unit tests and measure coverage:')
-
-    blacklist = " ".join(blacklist)
-    if testsuite == 'basic':
-        cmd = 'coverage run --branch Tests/runner.py -s basic -o junit_xml {} {}'
-        cmd = cmd.format(report_dir, blacklist)
-
-    else:
-        cmd = 'coverage run --branch Tests/runner.py -s {} -c {} -o junit_xml {} {}'
-        cmd = cmd.format(testsuite, testcamera, report_dir, blacklist)
-
-    subprocess.run(cmd, shell=True, check=True)
-    fprint('')
-
-    fprint('Generate Coverage reports:')
-    subprocess.run('coverage report -m', shell=True, check=True)
-    subprocess.run('coverage xml -o ' + report_dir + '/coverage.xml', shell=True, check=True)
-    fprint('')
-
-    coverage_file = '.coverage'
-    if os.path.exists(coverage_file):
-        os.remove(coverage_file)
-
-
-def test(testsuite, testcamera, blacklist):
-    static_test()
-    unit_test(testsuite, testcamera, blacklist)
-
-
-def test_junit(report_dir, testsuite, testcamera, blacklist):
-    setup_junit(report_dir)
-    static_test_junit(report_dir)
-    unit_test_junit(report_dir, testsuite, testcamera, blacklist)
-
-
-def main():
-    CLI = """VimbaPython tests script.
-    Usage:
-        run_tests.py -h
-        run_tests.py test -s basic [BLACKLIST...]
-        run_tests.py test -s (real_cam | all) -c CAMERA_ID [BLACKLIST...]
-        run_tests.py test_junit -s basic [BLACKLIST...]
-        run_tests.py test_junit -s (real_cam | all) -c CAMERA_ID [BLACKLIST...]
-
-    Arguments:
-        CAMERA_ID    Camera Id from Camera that shall be used during testing
-        BLACKLIST    Optional sequence of unittest functions to skip.
-
-    Options:
-        -h   Show this screen.
-        -s   Unittestsuite. Can be 'basic', 'real_cam' or 'all'. The last two require a
-             Camera Id to test against.
-        -c   Camera Id used in testing.
-    """
-
-    args = docopt.docopt(CLI)
-
-    suite = 'basic' if args['basic'] else 'real_cam' if args['real_cam'] else 'all'
-
-    if args['test']:
-        test(suite, args['CAMERA_ID'], args['BLACKLIST'])
-
-    elif args['test_junit']:
-        report_dir = 'Test_Reports'
-        test_junit(report_dir, suite, args['CAMERA_ID'], args['BLACKLIST'])
-
-
-if __name__ == '__main__':
-    main()
diff --git a/VimbaPython/Source/setup.cfg b/VimbaPython/Source/setup.cfg
deleted file mode 100644
index 57db9960ba6ea075e0aaa3c1a67a334ebf69f9a9..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/setup.cfg
+++ /dev/null
@@ -1,11 +0,0 @@
-[flake8]
-max-line-length = 100
-
-[coverage:run]
-source = vimba
-
-[coverage:report]
-exclude_lines =
-    coverage: skip
-    def __repr__
-    def __str__
diff --git a/VimbaPython/Source/setup.py b/VimbaPython/Source/setup.py
deleted file mode 100644
index b76ae58fcb8e2d0056a3dcb3e66e3fcb7aa2545b..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/setup.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import setuptools
-import os
-import re
-
-
-def read_file(name):
-    with open(file=name, mode='r', encoding='utf-8') as file:
-        return file.read()
-
-
-def get_version(file_content):
-    result = re.search(r'{}\s*=\s*[\'"]([^\'"]*)[\'"]'.format('__version__'),
-                       file_content)
-    return result.group(1)
-
-
-name = 'VimbaPython'
-version = get_version(read_file(os.path.join('.', 'vimba', '__init__.py')))
-author = 'Allied Vision Technologies GmbH'
-description = 'Python Bindings for Allied Visions VimbaSDK'
-long_description = read_file('README.txt')
-long_description_type = 'text/markdown'
-license = 'BSD-2-Clause'
-packages = [
-    'vimba',
-    'vimba.c_binding',
-    'vimba.util'
-]
-python_requires = '>=3.7'
-tests_require = [
-    'xmlrunner',
-    'flake8',
-    'flake8-junit-report',
-    'mypy',
-    'coverage',
-    'docopt'
-]
-extras_require = {
-    'numpy-export': ['numpy'],
-    'opencv-export': ['opencv-python'],
-    'test': tests_require
-}
-
-setuptools.setup(
-    name=name,
-    version=version,
-    author=author,
-    description=description,
-    long_description=long_description,
-    long_description_content_type=long_description_type,
-    license=license,
-    packages=packages,
-    python_requires=python_requires,
-    extras_require=extras_require
-)
diff --git a/VimbaPython/Source/vimba/__init__.py b/VimbaPython/Source/vimba/__init__.py
deleted file mode 100644
index fd34e61517ba7e660cfa61a58b2d925bf6631117..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/__init__.py
+++ /dev/null
@@ -1,128 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-# Suppress 'imported but unused' - Error from static style checker.
-# flake8: noqa: F401
-
-__version__ = '1.2.0'
-
-__all__ = [
-    'Vimba',
-    'Camera',
-    'CameraChangeHandler',
-    'CameraEvent',
-    'AccessMode',
-    'PersistType',
-    'Interface',
-    'InterfaceType',
-    'InterfaceChangeHandler',
-    'InterfaceEvent',
-    'PixelFormat',
-    'Frame',
-    'FeatureTypes',
-    'FrameHandler',
-    'FrameStatus',
-    'AllocationMode',
-    'Debayer',
-    'intersect_pixel_formats',
-    'MONO_PIXEL_FORMATS',
-    'BAYER_PIXEL_FORMATS',
-    'RGB_PIXEL_FORMATS',
-    'RGBA_PIXEL_FORMATS',
-    'BGR_PIXEL_FORMATS',
-    'BGRA_PIXEL_FORMATS',
-    'YUV_PIXEL_FORMATS',
-    'YCBCR_PIXEL_FORMATS',
-    'COLOR_PIXEL_FORMATS',
-    'OPENCV_PIXEL_FORMATS',
-
-    'VimbaSystemError',
-    'VimbaCameraError',
-    'VimbaInterfaceError',
-    'VimbaFeatureError',
-    'VimbaFrameError',
-    'VimbaTimeout',
-
-    'IntFeature',
-    'FloatFeature',
-    'StringFeature',
-    'BoolFeature',
-    'EnumEntry',
-    'EnumFeature',
-    'CommandFeature',
-    'RawFeature',
-
-    'LogLevel',
-    'LogConfig',
-    'Log',
-    'LOG_CONFIG_TRACE_CONSOLE_ONLY',
-    'LOG_CONFIG_TRACE_FILE_ONLY',
-    'LOG_CONFIG_TRACE',
-    'LOG_CONFIG_INFO_CONSOLE_ONLY',
-    'LOG_CONFIG_INFO_FILE_ONLY',
-    'LOG_CONFIG_INFO',
-    'LOG_CONFIG_WARNING_CONSOLE_ONLY',
-    'LOG_CONFIG_WARNING_FILE_ONLY',
-    'LOG_CONFIG_WARNING',
-    'LOG_CONFIG_ERROR_CONSOLE_ONLY',
-    'LOG_CONFIG_ERROR_FILE_ONLY',
-    'LOG_CONFIG_ERROR',
-    'LOG_CONFIG_CRITICAL_CONSOLE_ONLY',
-    'LOG_CONFIG_CRITICAL_FILE_ONLY',
-    'LOG_CONFIG_CRITICAL',
-
-    'TraceEnable',
-    'ScopedLogEnable',
-    'RuntimeTypeCheckEnable'
-]
-
-# Import everything exported from the top level module
-from .vimba import Vimba
-
-from .camera import AccessMode, PersistType, Camera, CameraChangeHandler, CameraEvent, FrameHandler
-
-from .interface import Interface, InterfaceType, InterfaceChangeHandler, InterfaceEvent
-
-from .frame import PixelFormat, Frame, Debayer, intersect_pixel_formats, MONO_PIXEL_FORMATS, \
-                   BAYER_PIXEL_FORMATS, RGB_PIXEL_FORMATS, RGBA_PIXEL_FORMATS, BGR_PIXEL_FORMATS, \
-                   BGRA_PIXEL_FORMATS, YUV_PIXEL_FORMATS, YCBCR_PIXEL_FORMATS, \
-                   COLOR_PIXEL_FORMATS, OPENCV_PIXEL_FORMATS, FrameStatus, FeatureTypes, \
-                   AllocationMode
-
-from .error import VimbaSystemError, VimbaCameraError, VimbaInterfaceError, VimbaFeatureError, \
-                   VimbaFrameError, VimbaTimeout
-
-from .feature import IntFeature, FloatFeature, StringFeature, BoolFeature, EnumEntry, EnumFeature, \
-                     CommandFeature, RawFeature
-
-from .util import Log, LogLevel, LogConfig, LOG_CONFIG_TRACE_CONSOLE_ONLY, \
-                  LOG_CONFIG_TRACE_FILE_ONLY, LOG_CONFIG_TRACE, LOG_CONFIG_INFO_CONSOLE_ONLY, \
-                  LOG_CONFIG_INFO_FILE_ONLY, LOG_CONFIG_INFO, LOG_CONFIG_WARNING_CONSOLE_ONLY, \
-                  LOG_CONFIG_WARNING_FILE_ONLY, LOG_CONFIG_WARNING, LOG_CONFIG_ERROR_CONSOLE_ONLY, \
-                  LOG_CONFIG_ERROR_FILE_ONLY, LOG_CONFIG_ERROR, LOG_CONFIG_CRITICAL_CONSOLE_ONLY, \
-                  LOG_CONFIG_CRITICAL_FILE_ONLY, LOG_CONFIG_CRITICAL, ScopedLogEnable, \
-                  TraceEnable, RuntimeTypeCheckEnable
diff --git a/VimbaPython/Source/vimba/c_binding/__init__.py b/VimbaPython/Source/vimba/c_binding/__init__.py
deleted file mode 100644
index 56bdde6f559daac93c50fed8d19a837039f3c6a9..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/c_binding/__init__.py
+++ /dev/null
@@ -1,120 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--------------------------------------------------------------------------
-
-NOTE: Vimba/Vmb naming convention.
-VimbaPython is based heavily on VimbaC, this submodule contains all wrapped types and functions
-of VimbaC. All VimbaC Types and Functions are prefixed with 'Vmb', this convention is kept for
-all python types interfacing with the C - Layer. VimbaC developers should be able to understand
-the interface to VimbaC and keeping the name convention helps a lot in that regard.
-
-However prefixing everything with 'Vmb' is not required in VimbaPython, therefore most Types
-of the public API have no prefix.
-"""
-
-# Suppress 'imported but unused' - Error from static style checker.
-# flake8: noqa: F401
-
-__all__ = [
-    # Exports from vimba_common
-    'VmbInt8',
-    'VmbUint8',
-    'VmbInt16',
-    'VmbUint16',
-    'VmbInt32',
-    'VmbUint32',
-    'VmbInt64',
-    'VmbUint64',
-    'VmbHandle',
-    'VmbBool',
-    'VmbUchar',
-    'VmbDouble',
-    'VmbError',
-    'VimbaCError',
-    'VmbPixelFormat',
-    'decode_cstr',
-    'decode_flags',
-
-    # Exports from vimba_c
-    'VmbInterface',
-    'VmbAccessMode',
-    'VmbFeatureData',
-    'VmbFeaturePersist',
-    'VmbFeatureVisibility',
-    'VmbFeatureFlags',
-    'VmbFrameStatus',
-    'VmbFrameFlags',
-    'VmbVersionInfo',
-    'VmbInterfaceInfo',
-    'VmbCameraInfo',
-    'VmbFeatureInfo',
-    'VmbFeatureEnumEntry',
-    'VmbFrame',
-    'VmbFeaturePersistSettings',
-    'G_VIMBA_C_HANDLE',
-    'VIMBA_C_VERSION',
-    'EXPECTED_VIMBA_C_VERSION',
-    'call_vimba_c',
-    'build_callback_type',
-
-    # Exports from vimba_image_transform
-    'VmbImage',
-    'VmbImageInfo',
-    'VmbDebayerMode',
-    'VmbTransformInfo',
-    'VIMBA_IMAGE_TRANSFORM_VERSION',
-    'EXPECTED_VIMBA_IMAGE_TRANSFORM_VERSION',
-    'call_vimba_image_transform',
-    'PIXEL_FORMAT_TO_LAYOUT',
-    'LAYOUT_TO_PIXEL_FORMAT',
-    'PIXEL_FORMAT_CONVERTIBILITY_MAP',
-
-    # Exports from ctypes
-    'byref',
-    'sizeof',
-    'create_string_buffer'
-]
-
-from .vimba_common import VmbInt8, VmbUint8, VmbInt16, VmbUint16, VmbInt32, VmbUint32, \
-                          VmbInt64, VmbUint64, VmbHandle, VmbBool, VmbUchar, VmbDouble, VmbError, \
-                          VimbaCError, VmbPixelFormat, decode_cstr, decode_flags, \
-                          _select_vimba_home
-
-from .vimba_c import VmbInterface, VmbAccessMode, VmbFeatureData, \
-                   VmbFeaturePersist, VmbFeatureVisibility, VmbFeatureFlags, VmbFrameStatus, \
-                   VmbFrameFlags, VmbVersionInfo, VmbInterfaceInfo, VmbCameraInfo, VmbFeatureInfo, \
-                   VmbFeatureEnumEntry, VmbFrame, VmbFeaturePersistSettings, \
-                   G_VIMBA_C_HANDLE, EXPECTED_VIMBA_C_VERSION, VIMBA_C_VERSION, call_vimba_c, \
-                   build_callback_type
-
-from .vimba_image_transform import VmbImage, VmbImageInfo, VmbDebayerMode, \
-                                   VIMBA_IMAGE_TRANSFORM_VERSION, \
-                                   EXPECTED_VIMBA_IMAGE_TRANSFORM_VERSION, VmbTransformInfo, \
-                                   call_vimba_image_transform, PIXEL_FORMAT_TO_LAYOUT, \
-                                   LAYOUT_TO_PIXEL_FORMAT, PIXEL_FORMAT_CONVERTIBILITY_MAP
-
-from ctypes import byref, sizeof, create_string_buffer
diff --git a/VimbaPython/Source/vimba/c_binding/vimba_c.py b/VimbaPython/Source/vimba/c_binding/vimba_c.py
deleted file mode 100644
index a672a4aa8c6886cfa65f1e3529a5c2c42eeeea44..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/c_binding/vimba_c.py
+++ /dev/null
@@ -1,768 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import copy
-import ctypes
-from typing import Callable, Any, Tuple
-from ctypes import c_void_p, c_char_p, byref, sizeof, POINTER as c_ptr, c_char_p as c_str
-from ..util import TraceEnable
-from ..error import VimbaSystemError
-from .vimba_common import Uint32Enum, Int32Enum, VmbInt32, VmbUint32, VmbInt64, VmbUint64, \
-                          VmbHandle, VmbBool, VmbDouble, VmbError, VimbaCError, VmbPixelFormat, \
-                          fmt_enum_repr, fmt_repr, fmt_flags_repr, load_vimba_lib
-
-__version__ = None
-
-__all__ = [
-    'VmbPixelFormat',
-    'VmbInterface',
-    'VmbAccessMode',
-    'VmbFeatureData',
-    'VmbFeaturePersist',
-    'VmbFeatureVisibility',
-    'VmbFeatureFlags',
-    'VmbFrameStatus',
-    'VmbFrameFlags',
-    'VmbVersionInfo',
-    'VmbInterfaceInfo',
-    'VmbCameraInfo',
-    'VmbFeatureInfo',
-    'VmbFeatureEnumEntry',
-    'VmbFrame',
-    'VmbFeaturePersistSettings',
-    'G_VIMBA_C_HANDLE',
-    'VIMBA_C_VERSION',
-    'EXPECTED_VIMBA_C_VERSION',
-    'call_vimba_c',
-    'build_callback_type'
-]
-
-
-# Types
-class VmbInterface(Uint32Enum):
-    """
-    Camera Interface Types:
-        Unknown  - Interface is not known to this version of the API
-        Firewire - 1394
-        Ethernet - GigE
-        Usb      - USB 3.0
-        CL       - Camera Link
-        CSI2     - CSI-2
-    """
-    Unknown = 0
-    Firewire = 1
-    Ethernet = 2
-    Usb = 3
-    CL = 4
-    CSI2 = 5
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbAccessMode(Uint32Enum):
-    """
-    Camera Access Mode:
-        None_  - No access
-        Full   - Read and write access
-        Read   - Read-only access
-        Config - Configuration access (GeV)
-        Lite   - Read and write access without feature access (only addresses)
-    """
-    None_ = 0
-    Full = 1
-    Read = 2
-    Config = 4
-    Lite = 8
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbFeatureData(Uint32Enum):
-    """
-    Feature Data Types
-        Unknown - Unknown feature type
-        Int     - 64 bit integer feature
-        Float   - 64 bit floating point feature
-        Enum    - Enumeration feature
-        String  - String feature
-        Bool    - Boolean feature
-        Command - Command feature
-        Raw     - Raw (direct register access) feature
-        None_   - Feature with no data
-    """
-    Unknown = 0
-    Int = 1
-    Float = 2
-    Enum = 3
-    String = 4
-    Bool = 5
-    Command = 6
-    Raw = 7
-    None_ = 8
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbFeaturePersist(Uint32Enum):
-    """
-    Type of features that are to be saved (persisted) to the XML file
-    when using VmbCameraSettingsSave
-
-        All        - Save all features to XML, including look-up tables
-        Streamable - Save only features marked as streamable, excluding
-                     look-up tables
-        NoLUT      - Save all features except look-up tables (default)
-    """
-    All = 0
-    Streamable = 1
-    NoLUT = 2
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbFeatureVisibility(Uint32Enum):
-    """
-    Feature Visibility
-        Unknown   - Feature visibility is not known
-        Beginner  - Feature is visible in feature list (beginner level)
-        Expert    - Feature is visible in feature list (expert level)
-        Guru      - Feature is visible in feature list (guru level)
-        Invisible - Feature is not visible in feature list
-    """
-    Unknown = 0
-    Beginner = 1
-    Expert = 2
-    Guru = 3
-    Invisible = 4
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbFeatureFlags(Uint32Enum):
-    """
-    Feature Flags
-        None_       - No additional information is provided
-        Read        - Static info about read access.
-                      Current status depends on access mode, check with
-                      VmbFeatureAccessQuery()
-        Write       - Static info about write access.
-                      Current status depends on access mode, check with
-                      VmbFeatureAccessQuery()
-        Volatile    - Value may change at any time
-        ModifyWrite - Value may change after a write
-    """
-    None_ = 0
-    Read = 1
-    Write = 2
-    Undocumented = 4
-    Volatile = 8
-    ModifyWrite = 16
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbFrameStatus(Int32Enum):
-    """
-    Frame transfer status
-        Complete   - Frame has been completed without errors
-        Incomplete - Frame could not be filled to the end
-        TooSmall   - Frame buffer was too small
-        Invalid    - Frame buffer was invalid
-    """
-    Complete = 0
-    Incomplete = -1
-    TooSmall = -2
-    Invalid = -3
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbFrameFlags(Uint32Enum):
-    """
-    Frame Flags
-        None_     - No additional information is provided
-        Dimension - Frame's dimension is provided
-        Offset    - Frame's offset is provided (ROI)
-        FrameID   - Frame's ID is provided
-        Timestamp - Frame's timestamp is provided
-    """
-    None_ = 0
-    Dimension = 1
-    Offset = 2
-    FrameID = 4
-    Timestamp = 8
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbVersionInfo(ctypes.Structure):
-    """
-    Version Information
-        Fields:
-            major - Type: VmbUint32, Info: Major version number
-            minor - Type: VmbUint32, Info: Minor version number
-            patch - Type: VmbUint32, Info: Patch version number
-    """
-    _fields_ = [
-        ("major", VmbUint32),
-        ("minor", VmbUint32),
-        ("patch", VmbUint32)
-    ]
-
-    def __str__(self):
-        return '{}.{}.{}'.format(self.major, self.minor, self.patch)
-
-    def __repr__(self):
-        rep = 'VmbVersionInfo'
-        rep += '(major=' + repr(self.major)
-        rep += ',minor=' + repr(self.minor)
-        rep += ',patch=' + repr(self.patch)
-        rep += ')'
-        return rep
-
-
-class VmbInterfaceInfo(ctypes.Structure):
-    """
-    Interface information. Holds read-only information about an interface.
-        Fields:
-            interfaceIdString - Type: c_char_p
-                                Info: Unique identifier for each interface
-            interfaceType     - Type: VmbInterface (VmbUint32)
-                                Info: Interface type, see VmbInterface
-            interfaceName     - Type: c_char_p
-                                Info: Interface name, given by transport layer
-            serialString      - Type: c_char_p
-                                Info: Serial number
-            permittedAccess   - Type: VmbAccessMode (VmbUint32)
-                                Info: Used access mode, see VmbAccessMode
-    """
-    _fields_ = [
-        ("interfaceIdString", c_char_p),
-        ("interfaceType", VmbUint32),
-        ("interfaceName", c_char_p),
-        ("serialString", c_char_p),
-        ("permittedAccess", VmbUint32)
-    ]
-
-    def __repr__(self):
-        rep = 'VmbInterfaceInfo'
-        rep += fmt_repr('(interfaceIdString={}', self.interfaceIdString)
-        rep += fmt_enum_repr(',interfaceType={}', VmbInterface, self.interfaceType)
-        rep += fmt_repr(',interfaceName={}', self.interfaceName)
-        rep += fmt_repr(',serialString={}', self.serialString)
-        rep += fmt_flags_repr(',permittedAccess={}', VmbAccessMode, self.permittedAccess)
-        rep += ')'
-        return rep
-
-
-class VmbCameraInfo(ctypes.Structure):
-    """
-    Camera information. Holds read-only information about a camera.
-        Fields:
-            cameraIdString    - Type: c_char_p
-                                Info: Unique identifier for each camera
-            cameraName        - Type: c_char_p
-                                Info: Name of the camera
-            modelName         - Type: c_char_p
-                                Info: Model name
-            serialString      - Type: c_char_p
-                                Info: Serial number
-            permittedAccess   - Type: VmbAccessMode (VmbUint32)
-                                Info: Used access mode, see VmbAccessMode
-            interfaceIdString - Type: c_char_p
-                                Info: Unique value for each interface or bus
-    """
-    _fields_ = [
-        ("cameraIdString", c_char_p),
-        ("cameraName", c_char_p),
-        ("modelName", c_char_p),
-        ("serialString", c_char_p),
-        ("permittedAccess", VmbUint32),
-        ("interfaceIdString", c_char_p)
-    ]
-
-    def __repr__(self):
-        rep = 'VmbCameraInfo'
-        rep += fmt_repr('(cameraIdString={}', self.cameraIdString)
-        rep += fmt_repr(',cameraName={}', self.cameraName)
-        rep += fmt_repr(',modelName={}', self.modelName)
-        rep += fmt_repr(',serialString={}', self.serialString)
-        rep += fmt_flags_repr(',permittedAccess={}', VmbAccessMode, self.permittedAccess)
-        rep += fmt_repr(',interfaceIdString={}', self.interfaceIdString)
-        rep += ')'
-        return rep
-
-
-class VmbFeatureInfo(ctypes.Structure):
-    """
-    Feature information. Holds read-only information about a feature.
-        Fields:
-            name                - Type: c_char_p
-                                  Info: Name used in the API
-            featureDataType     - Type: VmbFeatureData (VmbUint32)
-                                  Info: Data type of this feature
-            featureFlags        - Type: VmbFeatureFlags (VmbUint32)
-                                  Info: Access flags for this feature
-            category            - Type: c_char_p
-                                  Info: Category this feature can be found in
-            displayName         - Type: c_char_p
-                                  Info: Feature name to be used in GUIs
-            pollingTime         - Type: VmbUint32
-                                  Info: Predefined polling time for volatile
-                                        features
-            unit                - Type: c_char_p
-                                  Info: Measuring unit as given in the XML file
-            representation      - Type: c_char_p
-                                  Info: Representation of a numeric feature
-            visibility          - Type: VmbFeatureVisibility (VmbUint32)
-                                  Info: GUI visibility
-            tooltip             - Type: c_char_p
-                                  Info: Short description, e.g. for a tooltip
-            description         - Type: c_char_p
-                                  Info: Longer description
-            sfncNamespace       - Type: c_char_p
-                                  Info: Namespace this feature resides in
-            isStreamable        - Type: VmbBool
-                                  Info: Indicates if a feature can be stored
-                                        to / loaded from a file
-            hasAffectedFeatures - Type: VmbBool
-                                  Info: Indicates if the feature potentially
-                                        affects other features
-            hasSelectedFeatures - Type: VmbBool
-                                  Info: Indicates if the feature selects other
-                                        features
-    """
-    _fields_ = [
-        ("name", c_char_p),
-        ("featureDataType", VmbUint32),
-        ("featureFlags", VmbUint32),
-        ("category", c_char_p),
-        ("displayName", c_char_p),
-        ("pollingTime", VmbUint32),
-        ("unit", c_char_p),
-        ("representation", c_char_p),
-        ("visibility", VmbUint32),
-        ("tooltip", c_char_p),
-        ("description", c_char_p),
-        ("sfncNamespace", c_char_p),
-        ("isStreamable", VmbBool),
-        ("hasAffectedFeatures", VmbBool),
-        ("hasSelectedFeatures", VmbBool)
-    ]
-
-    def __repr__(self):
-        rep = 'VmbFeatureInfo'
-        rep += fmt_repr('(name={}', self.name)
-        rep += fmt_enum_repr(',featureDataType={}', VmbFeatureData, self.featureDataType)
-        rep += fmt_flags_repr(',featureFlags={}', VmbFeatureFlags, self.featureFlags)
-        rep += fmt_repr(',category={}', self.category)
-        rep += fmt_repr(',displayName={}', self.displayName)
-        rep += fmt_repr(',pollingTime={}', self.pollingTime)
-        rep += fmt_repr(',unit={}', self.unit)
-        rep += fmt_repr(',representation={}', self.representation)
-        rep += fmt_enum_repr(',visibility={}', VmbFeatureVisibility, self.visibility)
-        rep += fmt_repr(',tooltip={}', self.tooltip)
-        rep += fmt_repr(',description={}', self.description)
-        rep += fmt_repr(',sfncNamespace={}', self.sfncNamespace)
-        rep += fmt_repr(',isStreamable={}', self.isStreamable)
-        rep += fmt_repr(',hasAffectedFeatures={}', self.hasAffectedFeatures)
-        rep += fmt_repr(',hasSelectedFeatures={}', self.hasSelectedFeatures)
-        rep += ')'
-        return rep
-
-
-class VmbFeatureEnumEntry(ctypes.Structure):
-    """
-    Info about possible entries of an enumeration feature:
-        Fields:
-            name          - Type: c_char_p
-                            Info: Name used in the API
-            displayName   - Type: c_char_p
-                            Info: Enumeration entry name to be used in GUIs
-            visibility    - Type: VmbFeatureVisibility (VmbUint32)
-                            Info: GUI visibility
-            tooltip       - Type: c_char_p
-                            Info: Short description, e.g. for a tooltip
-            description   - Type: c_char_p
-                            Info: Longer description
-            sfncNamespace - Type: c_char_p
-                            Info: Namespace this feature resides in
-            intValue      - Type: VmbInt64
-                            Info: Integer value of this enumeration entry
-    """
-    _fields_ = [
-        ("name", c_char_p),
-        ("displayName", c_char_p),
-        ("visibility", VmbUint32),
-        ("tooltip", c_char_p),
-        ("description", c_char_p),
-        ("sfncNamespace", c_char_p),
-        ("intValue", VmbInt64)
-    ]
-
-    def __repr__(self):
-        rep = 'VmbFeatureEnumEntry'
-        rep += fmt_repr('(name={}', self.name)
-        rep += fmt_repr(',displayName={}', self.displayName)
-        rep += fmt_enum_repr(',visibility={}', VmbFeatureVisibility, self.visibility)
-        rep += fmt_repr(',tooltip={}', self.tooltip)
-        rep += fmt_repr(',description={}', self.description)
-        rep += fmt_repr(',sfncNamespace={}', self.sfncNamespace)
-        rep += fmt_repr(',intValue={},', self.intValue)
-        rep += ')'
-        return rep
-
-
-class VmbFrame(ctypes.Structure):
-    """
-    Frame delivered by Camera
-        Fields (in):
-            buffer     - Type: c_void_p
-                         Info: Comprises image and ancillary data
-            bufferSize - Type: VmbUint32_t
-                         Info: Size of the data buffer
-            context    - Type: c_void_p[4]
-                         Info: 4 void pointers that can be employed by the user
-                               (e.g. for storing handles)
-
-        Fields (out):
-            receiveStatus - Type: VmbFrameStatus (VmbInt32)
-                            Info: Resulting status of the receive operation
-            receiveFlags  - Type: VmbFrameFlags (VmbUint32)
-                            Info: Flags indicating which additional frame
-                                  information is available
-            imageSize     - Type: VmbUint32
-                            Info: Size of the image data inside the data buffer
-            ancillarySize - Type: VmbUint32
-                            Info: Size of the ancillary data inside the
-                                  data buffer
-            pixelFormat   - Type: VmbPixelFormat (VmbUint32)
-                            Info: Pixel format of the image
-            width         - Type: VmbUint32
-                            Info: Width of an image
-            height        - Type: VmbUint32
-                            Info: Height of an image
-            offsetX       - Type: VmbUint32
-                            Info: Horizontal offset of an image
-            offsetY       - Type: VmbUint32
-                            Info: Vertical offset of an image
-            frameID       - Type: VmbUint64
-                            Info: Unique ID of this frame in this stream
-            timestamp     - Type: VmbUint64
-                            Info: Timestamp set by the camera
-    """
-    _fields_ = [
-        ("buffer", c_void_p),
-        ("bufferSize", VmbUint32),
-        ("context", c_void_p * 4),
-        ("receiveStatus", VmbInt32),
-        ("receiveFlags", VmbUint32),
-        ("imageSize", VmbUint32),
-        ("ancillarySize", VmbUint32),
-        ("pixelFormat", VmbUint32),
-        ("width", VmbUint32),
-        ("height", VmbUint32),
-        ("offsetX", VmbUint32),
-        ("offsetY", VmbUint32),
-        ("frameID", VmbUint64),
-        ("timestamp", VmbUint64)
-    ]
-
-    def __repr__(self):
-        rep = 'VmbFrame'
-        rep += fmt_repr('(buffer={}', self.buffer)
-        rep += fmt_repr(',bufferSize={}', self.bufferSize)
-        rep += fmt_repr(',context={}', self.context)
-        rep += fmt_enum_repr('receiveStatus: {}', VmbFrameStatus, self.receiveStatus)
-        rep += fmt_flags_repr(',receiveFlags={}', VmbFrameFlags, self.receiveFlags)
-        rep += fmt_repr(',imageSize={}', self.imageSize)
-        rep += fmt_repr(',ancillarySize={}', self.ancillarySize)
-        rep += fmt_enum_repr(',pixelFormat={}', VmbPixelFormat, self.pixelFormat)
-        rep += fmt_repr(',width={}', self.width)
-        rep += fmt_repr(',height={}', self.height)
-        rep += fmt_repr(',offsetX={}', self.offsetX)
-        rep += fmt_repr(',offsetY={}', self.offsetY)
-        rep += fmt_repr(',frameID={}', self.frameID)
-        rep += fmt_repr(',timestamp={}', self.timestamp)
-        rep += ')'
-        return rep
-
-    def deepcopy_skip_ptr(self, memo):
-        result = VmbFrame()
-        memo[id(self)] = result
-
-        result.buffer = None
-        result.bufferSize = 0
-        result.context = (None, None, None, None)
-
-        setattr(result, 'receiveStatus', copy.deepcopy(self.receiveStatus, memo))
-        setattr(result, 'receiveFlags', copy.deepcopy(self.receiveFlags, memo))
-        setattr(result, 'imageSize', copy.deepcopy(self.imageSize, memo))
-        setattr(result, 'ancillarySize', copy.deepcopy(self.ancillarySize, memo))
-        setattr(result, 'pixelFormat', copy.deepcopy(self.pixelFormat, memo))
-        setattr(result, 'width', copy.deepcopy(self.width, memo))
-        setattr(result, 'height', copy.deepcopy(self.height, memo))
-        setattr(result, 'offsetX', copy.deepcopy(self.offsetX, memo))
-        setattr(result, 'offsetY', copy.deepcopy(self.offsetY, memo))
-        setattr(result, 'frameID', copy.deepcopy(self.frameID, memo))
-        setattr(result, 'timestamp', copy.deepcopy(self.timestamp, memo))
-        return result
-
-
-class VmbFeaturePersistSettings(ctypes.Structure):
-    """
-    Parameters determining the operation mode of VmbCameraSettingsSave
-    and VmbCameraSettingsLoad
-        Fields:
-            persistType   - Type: VmbFeaturePersist (VmbUint32)
-                            Info: Type of features that are to be saved
-            maxIterations - Type: VmbUint32
-                            Info: Number of iterations when loading settings
-            loggingLevel  - Type: VmbUint32
-                            Info: Determines level of detail for load/save
-                                  settings logging
-    """
-    _fields_ = [
-        ("persistType", VmbUint32),
-        ("maxIterations", VmbUint32),
-        ("loggingLevel", VmbUint32)
-    ]
-
-    def __repr__(self):
-        rep = 'VmbFrame'
-        rep += fmt_enum_repr('(persistType={}', VmbFeaturePersist, self.persistType)
-        rep += fmt_repr(',maxIterations={}', self.maxIterations)
-        rep += fmt_repr(',loggingLevel={}', self.loggingLevel)
-        rep += ')'
-        return rep
-
-
-G_VIMBA_C_HANDLE = VmbHandle(1)
-
-VIMBA_C_VERSION = None
-EXPECTED_VIMBA_C_VERSION = '1.9.0'
-
-# For detailed information on the signatures see "VimbaC.h"
-# To improve readability, suppress 'E501 line too long (> 100 characters)'
-# check of flake8
-_SIGNATURES = {
-    'VmbVersionQuery': (VmbError, [c_ptr(VmbVersionInfo), VmbUint32]),
-    'VmbStartup': (VmbError, None),
-    'VmbShutdown': (None, None),
-    'VmbCamerasList': (VmbError, [c_ptr(VmbCameraInfo), VmbUint32, c_ptr(VmbUint32), VmbUint32]),
-    'VmbCameraInfoQuery': (VmbError, [c_str, c_ptr(VmbCameraInfo), VmbUint32]),
-    'VmbCameraOpen': (VmbError, [c_str, VmbAccessMode, c_ptr(VmbHandle)]),
-    'VmbCameraClose': (VmbError, [VmbHandle]),
-    'VmbFeaturesList': (VmbError, [VmbHandle, c_ptr(VmbFeatureInfo), VmbUint32, c_ptr(VmbUint32), VmbUint32]),                # noqa: E501
-    'VmbFeatureInfoQuery': (VmbError, [VmbHandle, c_str, c_ptr(VmbFeatureInfo), VmbUint32]),
-    'VmbFeatureListAffected': (VmbError, [VmbHandle, c_str, c_ptr(VmbFeatureInfo), VmbUint32, c_ptr(VmbUint32), VmbUint32]),  # noqa: E501
-    'VmbFeatureListSelected': (VmbError, [VmbHandle, c_str, c_ptr(VmbFeatureInfo), VmbUint32, c_ptr(VmbUint32), VmbUint32]),  # noqa: E501
-    'VmbFeatureAccessQuery': (VmbError, [VmbHandle, c_str, c_ptr(VmbBool), c_ptr(VmbBool)]),
-    'VmbFeatureIntGet': (VmbError, [VmbHandle, c_str, c_ptr(VmbInt64)]),
-    'VmbFeatureIntSet': (VmbError, [VmbHandle, c_str, VmbInt64]),
-    'VmbFeatureIntRangeQuery': (VmbError, [VmbHandle, c_str, c_ptr(VmbInt64), c_ptr(VmbInt64)]),                              # noqa: E501
-    'VmbFeatureIntIncrementQuery': (VmbError, [VmbHandle, c_str, c_ptr(VmbInt64)]),
-    'VmbFeatureFloatGet': (VmbError, [VmbHandle, c_str, c_ptr(VmbDouble)]),
-    'VmbFeatureFloatSet': (VmbError, [VmbHandle, c_str, VmbDouble]),
-    'VmbFeatureFloatRangeQuery': (VmbError, [VmbHandle, c_str, c_ptr(VmbDouble), c_ptr(VmbDouble)]),
-    'VmbFeatureFloatIncrementQuery': (VmbError, [VmbHandle, c_str, c_ptr(VmbBool), c_ptr(VmbDouble)]),                        # noqa: E501
-    'VmbFeatureEnumGet': (VmbError, [VmbHandle, c_str, c_ptr(c_str)]),
-    'VmbFeatureEnumSet': (VmbError, [VmbHandle, c_str, c_str]),
-    'VmbFeatureEnumRangeQuery': (VmbError, [VmbHandle, c_str, c_ptr(c_str), VmbUint32, c_ptr(VmbUint32)]),                    # noqa: E501
-    'VmbFeatureEnumIsAvailable': (VmbError, [VmbHandle, c_str, c_str, c_ptr(VmbBool)]),
-    'VmbFeatureEnumAsInt': (VmbError, [VmbHandle, c_str, c_str, c_ptr(VmbInt64)]),
-    'VmbFeatureEnumAsString': (VmbError, [VmbHandle, c_str, VmbInt64, c_ptr(c_str)]),
-    'VmbFeatureEnumEntryGet': (VmbError, [VmbHandle, c_str, c_str, c_ptr(VmbFeatureEnumEntry), VmbUint32]),                   # noqa: E501
-    'VmbFeatureStringGet': (VmbError, [VmbHandle, c_str, c_str, VmbUint32, c_ptr(VmbUint32)]),                                # noqa: E501
-    'VmbFeatureStringSet': (VmbError, [VmbHandle, c_str, c_str]),
-    'VmbFeatureStringMaxlengthQuery': (VmbError, [VmbHandle, c_str, c_ptr(VmbUint32)]),
-    'VmbFeatureBoolGet': (VmbError, [VmbHandle, c_str, c_ptr(VmbBool)]),
-    'VmbFeatureBoolSet': (VmbError, [VmbHandle, c_str, VmbBool]),
-    'VmbFeatureCommandRun': (VmbError, [VmbHandle, c_str]),
-    'VmbFeatureCommandIsDone': (VmbError, [VmbHandle, c_str, c_ptr(VmbBool)]),
-    'VmbFeatureRawGet': (VmbError, [VmbHandle, c_str, c_str, VmbUint32, c_ptr(VmbUint32)]),
-    'VmbFeatureRawSet': (VmbError, [VmbHandle, c_str, c_str, VmbUint32]),
-    'VmbFeatureRawLengthQuery': (VmbError, [VmbHandle, c_str, c_ptr(VmbUint32)]),
-    'VmbFeatureInvalidationRegister': (VmbError, [VmbHandle, c_str, c_void_p, c_void_p]),                      # noqa: E501
-    'VmbFeatureInvalidationUnregister': (VmbError, [VmbHandle, c_str, c_void_p]),
-    'VmbFrameAnnounce': (VmbError, [VmbHandle, c_ptr(VmbFrame), VmbUint32]),
-    'VmbFrameRevoke': (VmbError, [VmbHandle, c_ptr(VmbFrame)]),
-    'VmbFrameRevokeAll': (VmbError, [VmbHandle]),
-    'VmbCaptureStart': (VmbError, [VmbHandle]),
-    'VmbCaptureEnd': (VmbError, [VmbHandle]),
-    'VmbCaptureFrameQueue': (VmbError, [VmbHandle, c_ptr(VmbFrame), c_void_p]),
-    'VmbCaptureFrameWait': (VmbError, [VmbHandle, c_ptr(VmbFrame), VmbUint32]),
-    'VmbCaptureQueueFlush': (VmbError, [VmbHandle]),
-    'VmbInterfacesList': (VmbError, [c_ptr(VmbInterfaceInfo), VmbUint32, c_ptr(VmbUint32), VmbUint32]),                       # noqa: E501
-    'VmbInterfaceOpen': (VmbError, [c_str, c_ptr(VmbHandle)]),
-    'VmbInterfaceClose': (VmbError, [VmbHandle]),
-    'VmbAncillaryDataOpen': (VmbError, [c_ptr(VmbFrame), c_ptr(VmbHandle)]),
-    'VmbAncillaryDataClose': (VmbError, [VmbHandle]),
-    'VmbMemoryRead': (VmbError, [VmbHandle, VmbUint64, VmbUint32, c_str, c_ptr(VmbUint32)]),
-    'VmbMemoryWrite': (VmbError, [VmbHandle, VmbUint64, VmbUint32, c_str, c_ptr(VmbUint32)]),
-    'VmbRegistersRead': (VmbError, [VmbHandle, VmbUint32, c_ptr(VmbUint64), c_ptr(VmbUint64), c_ptr(VmbUint32)]),             # noqa: E501
-    'VmbRegistersWrite': (VmbError, [VmbHandle, VmbUint32, c_ptr(VmbUint64), c_ptr(VmbUint64), c_ptr(VmbUint32)]),            # noqa: E501
-    'VmbCameraSettingsSave': (VmbError, [VmbHandle, c_str, c_ptr(VmbFeaturePersistSettings), VmbUint32]),                     # noqa: E501
-    'VmbCameraSettingsLoad': (VmbError, [VmbHandle, c_str, c_ptr(VmbFeaturePersistSettings), VmbUint32])                      # noqa: E501
-}
-
-
-def _attach_signatures(lib_handle):
-    global _SIGNATURES
-
-    for function_name, signature in _SIGNATURES.items():
-        fn = getattr(lib_handle, function_name)
-        fn.restype, fn.argtypes = signature
-        fn.errcheck = _eval_vmberror
-
-    return lib_handle
-
-
-def _check_version(lib_handle):
-    global EXPECTED_VIMBA_C_VERSION
-    global VIMBA_C_VERSION
-
-    v = VmbVersionInfo()
-    lib_handle.VmbVersionQuery(byref(v), sizeof(v))
-
-    VIMBA_C_VERSION = str(v)
-
-    if VIMBA_C_VERSION != EXPECTED_VIMBA_C_VERSION:
-        msg = 'Invalid VimbaC Version: Expected: {}, Found:{}'
-        raise VimbaSystemError(msg.format(EXPECTED_VIMBA_C_VERSION, VIMBA_C_VERSION))
-
-    return lib_handle
-
-
-def _eval_vmberror(result: VmbError, func: Callable[..., Any], *args: Tuple[Any, ...]):
-    if result not in (VmbError.Success, None):
-        raise VimbaCError(result)
-
-
-_lib_instance = _check_version(_attach_signatures(load_vimba_lib('VimbaC')))
-
-
-@TraceEnable()
-def call_vimba_c(func_name: str, *args):
-    """This function encapsulates the entire VimbaC access.
-
-    For Details on valid function signatures see the 'VimbaC.h'.
-
-    Arguments:
-        func_name: The function name from VimbaC to be called.
-        args: Varargs passed directly to the underlaying C-Function.
-
-    Raises:
-        TypeError if given are do not match the signature of the function.
-        AttributeError if func with name 'func_name' does not exist.
-        VimbaCError if the function call is valid but neither None or VmbError.Success was returned.
-
-    The following functions of VimbaC can be executed:
-        VmbVersionQuery
-        VmbStartup
-        VmbShutdown
-        VmbCamerasList
-        VmbCameraInfoQuery
-        VmbCameraOpen
-        VmbCameraClose
-        VmbFeaturesList
-        VmbFeatureInfoQuery
-        VmbFeatureListAffected
-        VmbFeatureListSelected
-        VmbFeatureAccessQuery
-        VmbFeatureIntGet
-        VmbFeatureIntSet
-        VmbFeatureIntRangeQuery
-        VmbFeatureIntIncrementQuery
-        VmbFeatureFloatGet
-        VmbFeatureFloatSet
-        VmbFeatureFloatRangeQuery
-        VmbFeatureFloatIncrementQuery
-        VmbFeatureEnumGet
-        VmbFeatureEnumSet
-        VmbFeatureEnumRangeQuery
-        VmbFeatureEnumIsAvailable
-        VmbFeatureEnumAsInt
-        VmbFeatureEnumAsString
-        VmbFeatureEnumEntryGet
-        VmbFeatureStringGet
-        VmbFeatureStringSet
-        VmbFeatureStringMaxlengthQuery
-        VmbFeatureBoolGet
-        VmbFeatureBoolSet
-        VmbFeatureCommandRun
-        VmbFeatureCommandIsDone
-        VmbFeatureRawGet
-        VmbFeatureRawSet
-        VmbFeatureRawLengthQuery
-        VmbFeatureInvalidationRegister
-        VmbFeatureInvalidationUnregister
-        VmbFrameAnnounce
-        VmbFrameRevoke
-        VmbFrameRevokeAll
-        VmbCaptureStart
-        VmbCaptureEnd
-        VmbCaptureFrameQueue
-        VmbCaptureFrameWait
-        VmbCaptureQueueFlush
-        VmbInterfacesList
-        VmbInterfaceOpen
-        VmbInterfaceClose
-        VmbAncillaryDataOpen
-        VmbAncillaryDataClose
-        VmbMemoryRead
-        VmbMemoryWrite
-        VmbRegistersRead
-        VmbRegistersWrite
-        VmbCameraSettingsSave
-        VmbCameraSettingsLoad
-    """
-    global _lib_instance
-    getattr(_lib_instance, func_name)(*args)
-
-
-def build_callback_type(*args):
-    global _lib_instance
-
-    lib_type = type(_lib_instance)
-
-    if lib_type == ctypes.CDLL:
-        return ctypes.CFUNCTYPE(*args)
-
-    elif lib_type == ctypes.WinDLL:
-        return ctypes.WINFUNCTYPE(*args)
-
-    else:
-        raise VimbaSystemError('Unknown Library Type. Abort.')
diff --git a/VimbaPython/Source/vimba/c_binding/vimba_common.py b/VimbaPython/Source/vimba/c_binding/vimba_common.py
deleted file mode 100644
index 4fb3a1a9f3509d702f770ebed9ead36497ae1ad5..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/c_binding/vimba_common.py
+++ /dev/null
@@ -1,611 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import ctypes
-import enum
-import os
-import sys
-import platform
-import functools
-from typing import Tuple, List
-from ..error import VimbaSystemError
-
-
-__all__ = [
-    'Int32Enum',
-    'Uint32Enum',
-    'VmbInt8',
-    'VmbUint8',
-    'VmbInt16',
-    'VmbUint16',
-    'VmbInt32',
-    'VmbUint32',
-    'VmbInt64',
-    'VmbUint64',
-    'VmbHandle',
-    'VmbBool',
-    'VmbUchar',
-    'VmbFloat',
-    'VmbDouble',
-    'VmbError',
-    'VimbaCError',
-    'VmbPixelFormat',
-    'decode_cstr',
-    'decode_flags',
-    'fmt_repr',
-    'fmt_enum_repr',
-    'fmt_flags_repr',
-    'load_vimba_lib'
-]
-
-
-# Types
-class Int32Enum(enum.IntEnum):
-    @classmethod
-    def from_param(cls, obj):
-        return ctypes.c_int(obj)
-
-
-class Uint32Enum(enum.IntEnum):
-    @classmethod
-    def from_param(cls, obj):
-        return ctypes.c_uint(obj)
-
-
-# Aliases for vmb base types
-VmbInt8 = ctypes.c_byte
-VmbUint8 = ctypes.c_ubyte
-VmbInt16 = ctypes.c_short
-VmbUint16 = ctypes.c_ushort
-VmbInt32 = ctypes.c_int
-VmbUint32 = ctypes.c_uint
-VmbInt64 = ctypes.c_longlong
-VmbUint64 = ctypes.c_ulonglong
-VmbHandle = ctypes.c_void_p
-VmbBool = ctypes.c_bool
-VmbUchar = ctypes.c_char
-VmbFloat = ctypes.c_float
-VmbDouble = ctypes.c_double
-
-
-class VmbError(Int32Enum):
-    """
-    Enum containing error types returned
-        Success         - No error
-        InternalFault   - Unexpected fault in VimbaC or driver
-        ApiNotStarted   - VmbStartup() was not called before the current
-                          command
-        NotFound        - The designated instance (camera, feature etc.)
-                          cannot be found
-        BadHandle       - The given handle is not valid
-        DeviceNotOpen   - Device was not opened for usage
-        InvalidAccess   - Operation is invalid with the current access mode
-        BadParameter    - One of the parameters is invalid (usually an illegal
-                          pointer)
-        StructSize      - The given struct size is not valid for this version
-                          of the API
-        MoreData        - More data available in a string/list than space is
-                          provided
-        WrongType       - Wrong feature type for this access function
-        InvalidValue    - The value is not valid; Either out of bounds or not
-                          an increment of the minimum
-        Timeout         - Timeout during wait
-        Other           - Other error
-        Resources       - Resources not available (e.g. memory)
-        InvalidCall     - Call is invalid in the current context (callback)
-        NoTL            - No transport layers are found
-        NotImplemented_ - API feature is not implemented
-        NotSupported    - API feature is not supported
-        Incomplete      - A multiple registers read or write is partially
-                          completed
-        IO              - low level IO error in transport layer
-    """
-    Success = 0
-    InternalFault = -1
-    ApiNotStarted = -2
-    NotFound = -3
-    BadHandle = -4
-    DeviceNotOpen = -5
-    InvalidAccess = -6
-    BadParameter = -7
-    StructSize = -8
-    MoreData = -9
-    WrongType = -10
-    InvalidValue = -11
-    Timeout = -12
-    Other = -13
-    Resources = -14
-    InvalidCall = -15
-    NoTL = -16
-    NotImplemented_ = -17
-    NotSupported = -18
-    Incomplete = -19
-    IO = -20
-
-    def __str__(self):
-        return self._name_
-
-
-class _VmbPixel(Uint32Enum):
-    Mono = 0x01000000
-    Color = 0x02000000
-
-
-class _VmbPixelOccupy(Uint32Enum):
-    Bit8 = 0x00080000
-    Bit10 = 0x000A0000
-    Bit12 = 0x000C0000
-    Bit14 = 0x000E0000
-    Bit16 = 0x00100000
-    Bit24 = 0x00180000
-    Bit32 = 0x00200000
-    Bit48 = 0x00300000
-    Bit64 = 0x00400000
-
-
-class VmbPixelFormat(Uint32Enum):
-    """
-    Enum containing Pixelformats
-    Mono formats:
-        Mono8        - Monochrome, 8 bits (PFNC:Mono8)
-        Mono10       - Monochrome, 10 bits in 16 bits (PFNC:Mono10)
-        Mono10p      - Monochrome, 4x10 bits continuously packed in 40 bits
-                       (PFNC:Mono10p)
-        Mono12       - Monochrome, 12 bits in 16 bits (PFNC:Mono12)
-        Mono12Packed - Monochrome, 2x12 bits in 24 bits (GEV:Mono12Packed)
-        Mono12p      - Monochrome, 2x12 bits continuously packed in 24 bits
-                       (PFNC:Mono12p)
-        Mono14       - Monochrome, 14 bits in 16 bits (PFNC:Mono14)
-        Mono16       - Monochrome, 16 bits (PFNC:Mono16)
-
-    Bayer formats:
-        BayerGR8        - Bayer-color, 8 bits, starting with GR line
-                          (PFNC:BayerGR8)
-        BayerRG8        - Bayer-color, 8 bits, starting with RG line
-                          (PFNC:BayerRG8)
-        BayerGB8        - Bayer-color, 8 bits, starting with GB line
-                          (PFNC:BayerGB8)
-        BayerBG8        - Bayer-color, 8 bits, starting with BG line
-                          (PFNC:BayerBG8)
-        BayerGR10       - Bayer-color, 10 bits in 16 bits, starting with GR
-                          line (PFNC:BayerGR10)
-        BayerRG10       - Bayer-color, 10 bits in 16 bits, starting with RG
-                          line (PFNC:BayerRG10)
-        BayerGB10       - Bayer-color, 10 bits in 16 bits, starting with GB
-                          line (PFNC:BayerGB10)
-        BayerBG10       - Bayer-color, 10 bits in 16 bits, starting with BG
-                          line (PFNC:BayerBG10)
-        BayerGR12       - Bayer-color, 12 bits in 16 bits, starting with GR
-                          line (PFNC:BayerGR12)
-        BayerRG12       - Bayer-color, 12 bits in 16 bits, starting with RG
-                          line (PFNC:BayerRG12)
-        BayerGB12       - Bayer-color, 12 bits in 16 bits, starting with GB
-                          line (PFNC:BayerGB12)
-        BayerBG12       - Bayer-color, 12 bits in 16 bits, starting with BG
-                          line (PFNC:BayerBG12)
-        BayerGR12Packed - Bayer-color, 2x12 bits in 24 bits, starting with GR
-                          line (GEV:BayerGR12Packed)
-        BayerRG12Packed - Bayer-color, 2x12 bits in 24 bits, starting with RG
-                          line (GEV:BayerRG12Packed)
-        BayerGB12Packed - Bayer-color, 2x12 bits in 24 bits, starting with GB
-                          line (GEV:BayerGB12Packed)
-        BayerBG12Packed - Bayer-color, 2x12 bits in 24 bits, starting with BG
-                          line (GEV:BayerBG12Packed)
-        BayerGR10p      - Bayer-color, 4x10 bits continuously packed in 40
-                          bits, starting with GR line (PFNC:BayerGR10p)
-        BayerRG10p      - Bayer-color, 4x10 bits continuously packed in 40
-                          bits, starting with RG line (PFNC:BayerRG10p)
-        BayerGB10p      - Bayer-color, 4x10 bits continuously packed in 40
-                          bits, starting with GB line (PFNC:BayerGB10p)
-        BayerBG10p      - Bayer-color, 4x10 bits continuously packed in 40
-                          bits, starting with BG line (PFNC:BayerBG10p)
-        BayerGR12p      - Bayer-color, 2x12 bits continuously packed in 24
-                          bits, starting with GR line (PFNC:BayerGR12p)
-        BayerRG12p      - Bayer-color, 2x12 bits continuously packed in 24
-                          bits, starting with RG line (PFNC:BayerRG12p)
-        BayerGB12p      - Bayer-color, 2x12 bits continuously packed in 24
-                          bits, starting with GB line (PFNC:BayerGB12p)
-        BayerBG12p      - Bayer-color, 2x12 bits continuously packed in 24
-                          bits, starting with BG line (PFNC:BayerBG12p)
-        BayerGR16       - Bayer-color, 16 bits, starting with GR line
-                          (PFNC:BayerGR16)
-        BayerRG16       - Bayer-color, 16 bits, starting with RG line
-                          (PFNC:BayerRG16)
-        BayerGB16       - Bayer-color, 16 bits, starting with GB line
-                          (PFNC:BayerGB16)
-        BayerBG16       - Bayer-color, 16 bits, starting with BG line
-                          (PFNC:BayerBG16)
-
-    RGB formats:
-        Rgb8  - RGB, 8 bits x 3 (PFNC:RGB8)
-        Bgr8  - BGR, 8 bits x 3 (PFNC:Bgr8)
-        Rgb10 - RGB, 10 bits in 16 bits x 3 (PFNC:RGB10)
-        Bgr10 - BGR, 10 bits in 16 bits x 3 (PFNC:BGR10)
-        Rgb12 - RGB, 12 bits in 16 bits x 3 (PFNC:RGB12)
-        Bgr12 - BGR, 12 bits in 16 bits x 3 (PFNC:BGR12)
-        Rgb14 - RGB, 14 bits in 16 bits x 3 (PFNC:RGB14)
-        Bgr14 - BGR, 14 bits in 16 bits x 3 (PFNC:BGR14)
-        Rgb16 - RGB, 16 bits x 3 (PFNC:RGB16)
-        Bgr16 - BGR, 16 bits x 3 (PFNC:BGR16)
-
-    RGBA formats:
-        Argb8  - ARGB, 8 bits x 4 (PFNC:RGBa8)
-        Rgba8  - RGBA, 8 bits x 4, legacy name
-        Bgra8  - BGRA, 8 bits x 4 (PFNC:BGRa8)
-        Rgba10 - RGBA, 10 bits in 16 bits x 4
-        Bgra10 - BGRA, 10 bits in 16 bits x 4
-        Rgba12 - RGBA, 12 bits in 16 bits x 4
-        Bgra12 - BGRA, 12 bits in 16 bits x 4
-        Rgba14 - RGBA, 14 bits in 16 bits x 4
-        Bgra14 - BGRA, 14 bits in 16 bits x 4
-        Rgba16 - RGBA, 16 bits x 4
-        Bgra16 - BGRA, 16 bits x 4
-
-    YUV/YCbCr formats:
-        Yuv411              -  YUV 411 with 8 bits (GEV:YUV411Packed)
-        Yuv422              -  YUV 422 with 8 bits (GEV:YUV422Packed)
-        Yuv444              -  YUV 444 with 8 bits (GEV:YUV444Packed)
-        YCbCr411_8_CbYYCrYY -  Y´CbCr 411 with 8 bits
-                               (PFNC:YCbCr411_8_CbYYCrYY) - identical to Yuv411
-        YCbCr422_8_CbYCrY   -  Y´CbCr 422 with 8 bits
-                               (PFNC:YCbCr422_8_CbYCrY) - identical to Yuv422
-        YCbCr8_CbYCr        -  Y´CbCr 444 with 8 bits
-                               (PFNC:YCbCr8_CbYCr) - identical to Yuv444
-    """
-    None_ = 0
-    Mono8 = _VmbPixel.Mono | _VmbPixelOccupy.Bit8 | 0x0001
-    Mono10 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x0003
-    Mono10p = _VmbPixel.Mono | _VmbPixelOccupy.Bit10 | 0x0046
-    Mono12 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x0005
-    Mono12Packed = _VmbPixel.Mono | _VmbPixelOccupy.Bit12 | 0x0006
-    Mono12p = _VmbPixel.Mono | _VmbPixelOccupy.Bit12 | 0x0047
-    Mono14 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x0025
-    Mono16 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x0007
-    BayerGR8 = _VmbPixel.Mono | _VmbPixelOccupy.Bit8 | 0x0008
-    BayerRG8 = _VmbPixel.Mono | _VmbPixelOccupy.Bit8 | 0x0009
-    BayerGB8 = _VmbPixel.Mono | _VmbPixelOccupy.Bit8 | 0x000A
-    BayerBG8 = _VmbPixel.Mono | _VmbPixelOccupy.Bit8 | 0x000B
-    BayerGR10 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x000C
-    BayerRG10 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x000D
-    BayerGB10 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x000E
-    BayerBG10 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x000F
-    BayerGR12 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x0010
-    BayerRG12 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x0011
-    BayerGB12 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x0012
-    BayerBG12 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x0013
-    BayerGR12Packed = _VmbPixel.Mono | _VmbPixelOccupy.Bit12 | 0x002A
-    BayerRG12Packed = _VmbPixel.Mono | _VmbPixelOccupy.Bit12 | 0x002B
-    BayerGB12Packed = _VmbPixel.Mono | _VmbPixelOccupy.Bit12 | 0x002C
-    BayerBG12Packed = _VmbPixel.Mono | _VmbPixelOccupy.Bit12 | 0x002D
-    BayerGR10p = _VmbPixel.Mono | _VmbPixelOccupy.Bit10 | 0x0056
-    BayerRG10p = _VmbPixel.Mono | _VmbPixelOccupy.Bit10 | 0x0058
-    BayerGB10p = _VmbPixel.Mono | _VmbPixelOccupy.Bit10 | 0x0054
-    BayerBG10p = _VmbPixel.Mono | _VmbPixelOccupy.Bit10 | 0x0052
-    BayerGR12p = _VmbPixel.Mono | _VmbPixelOccupy.Bit12 | 0x0057
-    BayerRG12p = _VmbPixel.Mono | _VmbPixelOccupy.Bit12 | 0x0059
-    BayerGB12p = _VmbPixel.Mono | _VmbPixelOccupy.Bit12 | 0x0055
-    BayerBG12p = _VmbPixel.Mono | _VmbPixelOccupy.Bit12 | 0x0053
-    BayerGR16 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x002E
-    BayerRG16 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x002F
-    BayerGB16 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x0030
-    BayerBG16 = _VmbPixel.Mono | _VmbPixelOccupy.Bit16 | 0x0031
-    Rgb8 = _VmbPixel.Color | _VmbPixelOccupy.Bit24 | 0x0014
-    Bgr8 = _VmbPixel.Color | _VmbPixelOccupy.Bit24 | 0x0015
-    Rgb10 = _VmbPixel.Color | _VmbPixelOccupy.Bit48 | 0x0018
-    Bgr10 = _VmbPixel.Color | _VmbPixelOccupy.Bit48 | 0x0019
-    Rgb12 = _VmbPixel.Color | _VmbPixelOccupy.Bit48 | 0x001A
-    Bgr12 = _VmbPixel.Color | _VmbPixelOccupy.Bit48 | 0x001B
-    Rgb14 = _VmbPixel.Color | _VmbPixelOccupy.Bit48 | 0x005E
-    Bgr14 = _VmbPixel.Color | _VmbPixelOccupy.Bit48 | 0x004A
-    Rgb16 = _VmbPixel.Color | _VmbPixelOccupy.Bit48 | 0x0033
-    Bgr16 = _VmbPixel.Color | _VmbPixelOccupy.Bit48 | 0x004B
-    Argb8 = _VmbPixel.Color | _VmbPixelOccupy.Bit32 | 0x0016
-    Rgba8 = Argb8
-    Bgra8 = _VmbPixel.Color | _VmbPixelOccupy.Bit32 | 0x0017
-    Rgba10 = _VmbPixel.Color | _VmbPixelOccupy.Bit64 | 0x005F
-    Bgra10 = _VmbPixel.Color | _VmbPixelOccupy.Bit64 | 0x004C
-    Rgba12 = _VmbPixel.Color | _VmbPixelOccupy.Bit64 | 0x0061
-    Bgra12 = _VmbPixel.Color | _VmbPixelOccupy.Bit64 | 0x004E
-    Rgba14 = _VmbPixel.Color | _VmbPixelOccupy.Bit64 | 0x0063
-    Bgra14 = _VmbPixel.Color | _VmbPixelOccupy.Bit64 | 0x0050
-    Rgba16 = _VmbPixel.Color | _VmbPixelOccupy.Bit64 | 0x0064
-    Bgra16 = _VmbPixel.Color | _VmbPixelOccupy.Bit64 | 0x0051
-    Yuv411 = _VmbPixel.Color | _VmbPixelOccupy.Bit12 | 0x001E
-    Yuv422 = _VmbPixel.Color | _VmbPixelOccupy.Bit16 | 0x001F
-    Yuv444 = _VmbPixel.Color | _VmbPixelOccupy.Bit24 | 0x0020
-    YCbCr411_8_CbYYCrYY = _VmbPixel.Color | _VmbPixelOccupy.Bit12 | 0x003C
-    YCbCr422_8_CbYCrY = _VmbPixel.Color | _VmbPixelOccupy.Bit16 | 0x0043
-    YCbCr8_CbYCr = _VmbPixel.Color | _VmbPixelOccupy.Bit24 | 0x003A
-
-    def __str__(self):
-        return self._name_
-
-
-class VimbaCError(Exception):
-    """Error Type containing an error code from the C-Layer. This error code is highly context
-       sensitive. All wrapped C-Functions that do not return VmbError.Success or None must
-       raise a VimbaCError and the surrounding code must deal if the Error is possible.
-    """
-
-    def __init__(self, c_error: VmbError):
-        super().__init__(repr(c_error))
-        self.__c_error = c_error
-
-    def __str__(self):
-        return repr(self)
-
-    def __repr__(self):
-        return 'VimbaCError({})'.format(repr(self.__c_error))
-
-    def get_error_code(self) -> VmbError:
-        """ Get contained Error Code """
-        return self.__c_error
-
-
-# Utility Functions
-def _split_into_powers_of_two(num: int) -> Tuple[int, ...]:
-    result = []
-    for mask in [1 << i for i in range(32)]:
-        if mask & num:
-            result.append(mask)
-
-    if not result:
-        result.append(0)
-
-    return tuple(result)
-
-
-def _split_flags_into_enum(num: int, enum_type):
-    return [enum_type(val) for val in _split_into_powers_of_two(num)]
-
-
-def _repr_flags_list(enum_type, flag_val: int):
-    values = _split_flags_into_enum(flag_val, enum_type)
-
-    if values:
-        def fold_func(acc, arg):
-            return '{} {}'.format(acc, repr(arg))
-
-        return functools.reduce(fold_func, values, '')
-
-    else:
-        return '{}'.format(repr(enum_type(0)))
-
-
-def decode_cstr(val: bytes) -> str:
-    """Converts c_char_p stored in interface structures to a str.
-
-    Arguments:
-        val - Byte sequence to convert into str.
-
-    Returns:
-        str represented by 'val'
-    """
-    return val.decode() if val else ''
-
-
-def decode_flags(enum_type, enum_val: int):
-    """Splits C-styled bit mask into a set of flags from a given Enumeration.
-
-    Arguments:
-        enum_val - Bit mask to decode.
-        enum_type - Enum Type represented within 'enum_val'
-
-    Returns:
-        A set of all values of enum_type occurring in enum_val.
-
-    Raises:
-        Attribute error a set value is not within the given 'enum_type'.
-    """
-
-    return tuple(_split_flags_into_enum(enum_val, enum_type))
-
-
-def fmt_repr(fmt: str, val):
-    """Append repr to a format string."""
-    return fmt.format(repr(val))
-
-
-def fmt_enum_repr(fmt: str, enum_type, enum_val):
-    """Append repr of a given enum type to a format string.
-
-    Arguments:
-        fmt - Format string
-        enum_type - Enum Type to construct.
-        enum_val - Enum value.
-
-    Returns:
-        formatted string
-    """
-    return fmt.format(repr(enum_type(enum_val)))
-
-
-def fmt_flags_repr(fmt: str, enum_type, enum_val):
-    """Append repr of a c-style flag value in the form of a set containing
-       all bits set from a given enum_type.
-
-    Arguments:
-        fmt - Format string
-        enum_type - Enum Type to construct.
-        enum_val - Enum value.
-
-    Returns:
-        formatted string
-    """
-    return fmt.format(_repr_flags_list(enum_type, enum_val))
-
-
-def load_vimba_lib(vimba_project: str):
-    """ Load shared library shipped with the Vimba installation
-
-    Arguments:
-        vimba_project - Library name without prefix or extension
-
-    Return:
-        CDLL or WinDLL Handle on loaded library
-
-    Raises:
-        VimbaSystemError if given library could not be loaded.
-    """
-
-    platform_handlers = {
-        'linux': _load_under_linux,
-        'win32': _load_under_windows
-    }
-
-    if sys.platform not in platform_handlers:
-        msg = 'Abort. Unsupported Platform ({}) detected.'
-        raise VimbaSystemError(msg.format(sys.platform))
-
-    return platform_handlers[sys.platform](vimba_project)
-
-
-def _load_under_linux(vimba_project: str):
-    # Construct VimbaHome based on TL installation paths
-    path_list: List[str] = []
-    tl32_path = os.environ.get('GENICAM_GENTL32_PATH', "")
-    if tl32_path:
-        path_list += tl32_path.split(':')
-    tl64_path = os.environ.get('GENICAM_GENTL64_PATH', "")
-    if tl64_path:
-        path_list += tl64_path.split(':')
-
-    # Remove empty strings from path_list if there are any.
-    # Necessary because the GENICAM_GENTLXX_PATH variable might start with a :
-    path_list = [path for path in path_list if path]
-
-    # Early return if required variables are not set.
-    if not path_list:
-        raise VimbaSystemError('No TL detected. Please verify Vimba installation.')
-
-    vimba_home_candidates: List[str] = []
-    for path in path_list:
-        vimba_home = os.path.dirname(os.path.dirname(os.path.dirname(path)))
-
-        if vimba_home not in vimba_home_candidates:
-            vimba_home_candidates.append(vimba_home)
-
-    # Select the most likely directory from the candidates
-    vimba_home = _select_vimba_home(vimba_home_candidates)
-
-    arch = platform.machine()
-
-    # Linux x86 64 Bit (Requires additional interpreter version check)
-    if arch == 'x86_64':
-        dir_ = 'x86_64bit' if _is_python_64_bit() else 'x86_32bit'
-
-    # Linux x86 32 Bit
-    elif arch in ('i386', 'i686'):
-        dir_ = 'x86_32bit'
-
-    # Linux arm 64 Bit (Requires additional interpreter version check)
-    elif arch == 'aarch64':
-        dir_ = 'arm_64bit' if _is_python_64_bit() else 'arm_32bit'
-
-    # Linux arm 32 Bit:
-    elif arch == 'armv7l':
-        dir_ = 'arm_32bit'
-
-    else:
-        raise VimbaSystemError('Unknown Architecture \'{}\'. Abort'.format(arch))
-
-    lib_name = 'lib{}.so'.format(vimba_project)
-    lib_path = os.path.join(vimba_home, vimba_project, 'DynamicLib', dir_, lib_name)
-
-    try:
-        lib = ctypes.cdll.LoadLibrary(lib_path)
-
-    except OSError as e:
-        msg = 'Failed to load library \'{}\'. Please verify Vimba installation.'
-        raise VimbaSystemError(msg.format(lib_path)) from e
-
-    return lib
-
-
-def _load_under_windows(vimba_project: str):
-    vimba_home = os.environ.get('VIMBA_HOME')
-
-    if vimba_home is None:
-        raise VimbaSystemError('Variable VIMBA_HOME not set. Please verify Vimba installation.')
-
-    load_64bit = True if (platform.machine() == 'AMD64') and _is_python_64_bit() else False
-    lib_name = '{}.dll'.format(vimba_project)
-    lib_path = os.path.join(vimba_home, vimba_project, 'Bin', 'Win64' if load_64bit else 'Win32',
-                            lib_name)
-
-    try:
-        # Load Library with 64 Bit and use cdecl call convention
-        if load_64bit:
-            lib = ctypes.cdll.LoadLibrary(lib_path)
-
-        # Load Library with 32 Bit and use stdcall call convention
-        else:
-            # Tell mypy to ignore this line to allow type checking on both windows and linux as
-            # windll is not available on linux and would therefore produce an error there
-            lib = ctypes.windll.LoadLibrary(lib_path)  # type: ignore
-
-    except OSError as e:
-        msg = 'Failed to load library \'{}\'. Please verify Vimba installation.'
-        raise VimbaSystemError(msg.format(lib_path)) from e
-
-    return lib
-
-
-def _select_vimba_home(candidates: List[str]) -> str:
-    """
-    Select the most likely candidate for VIMBA_HOME from the given list of
-    candidates
-
-    Arguments:
-        candidates - List of strings pointing to possible vimba home directories
-
-    Return:
-        Path that represents the most likely VIMBA_HOME directory
-
-    Raises:
-        VimbaSystemError if multiple VIMBA_HOME directories were found in candidates
-    """
-    most_likely_candidates = []
-    for candidate in candidates:
-        if 'vimba' in candidate.lower():
-            most_likely_candidates.append(candidate)
-
-    if len(most_likely_candidates) == 0:
-        raise VimbaSystemError('No suitable Vimba installation found. The following paths '
-                               'were considered: {}'.format(candidates))
-    elif len(most_likely_candidates) > 1:
-        raise VimbaSystemError('Multiple Vimba installations found. Can\'t decide which to select: '
-                               '{}'.format(most_likely_candidates))
-
-    return most_likely_candidates[0]
-
-
-def _is_python_64_bit() -> bool:
-    # Query if the currently running python interpreter is build as 64 bit binary.
-    # The default method of getting this information seems to be rather hacky
-    # (check if maxint > 2^32) but it seems to be the way to do this....
-    return True if sys.maxsize > 2**32 else False
diff --git a/VimbaPython/Source/vimba/c_binding/vimba_image_transform.py b/VimbaPython/Source/vimba/c_binding/vimba_image_transform.py
deleted file mode 100644
index f42f81d6badd85894808f4770a25605d64b9f641..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/c_binding/vimba_image_transform.py
+++ /dev/null
@@ -1,565 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import ctypes
-import sys
-from ctypes import byref, sizeof, c_char_p, POINTER as c_ptr
-from typing import Callable, Any, Tuple, Dict, List
-
-from ..error import VimbaSystemError
-from ..util import TraceEnable
-from .vimba_common import Uint32Enum, VmbUint32, VmbInt32, VmbError, VmbFloat, VimbaCError, \
-                          VmbPixelFormat, load_vimba_lib, fmt_repr, fmt_enum_repr
-
-
-__all__ = [
-    'VmbBayerPattern',
-    'VmbEndianness',
-    'VmbAligment',
-    'VmbAPIInfo',
-    'VmbPixelLayout',
-    'VmbDebayerMode',
-    'VmbImage',
-    'VmbImageInfo',
-    'VmbTransformInfo',
-    'VIMBA_IMAGE_TRANSFORM_VERSION',
-    'EXPECTED_VIMBA_IMAGE_TRANSFORM_VERSION',
-    'call_vimba_image_transform',
-    'PIXEL_FORMAT_TO_LAYOUT',
-    'LAYOUT_TO_PIXEL_FORMAT',
-    'PIXEL_FORMAT_CONVERTIBILITY_MAP'
-]
-
-
-class VmbBayerPattern(Uint32Enum):
-    """Enum defining BayerPatterns
-    Values:
-        RGGB - RGGB pattern, red pixel comes first
-        GBRG - RGGB pattern, green pixel of blue row comes first
-        GRBG - RGGB pattern, green pixel of red row comes first
-        BGGR - RGGB pattern, blue pixel comes first
-        CYGM - CYGM pattern, cyan pixel comes first in the first row, green in the second row
-        GMCY - CYGM pattern, green pixel comes first in the first row, cyan in the second row
-        CYMG - CYGM pattern, cyan pixel comes first in the first row, magenta in the second row
-        MGCY - CYGM pattern, magenta pixel comes first in the first row, cyan in the second row
-        LAST - Indicator for end of defined range
-    """
-    RGGB = 0
-    GBRG = 1
-    GRBG = 2
-    BGGR = 3
-    CYGM = 128
-    GMCY = 129
-    CYMG = 130
-    MGCY = 131
-    LAST = 255
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbEndianness(Uint32Enum):
-    """Enum defining Endian Formats
-    Values:
-        LITTLE - Little Endian
-        BIG - Big Endian
-        LAST - Indicator for end of defined range
-    """
-    LITTLE = 0
-    BIG = 1
-    LAST = 255
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbAligment(Uint32Enum):
-    """Enum defining image alignment
-    Values:
-        MSB - Alignment (pppp pppp pppp ....)
-        LSB - Alignment (.... pppp pppp pppp)
-        LAST - Indicator for end of defined range
-    """
-    MSB = 0
-    LSB = 1
-    LAST = 255
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbAPIInfo(Uint32Enum):
-    """API Info Types
-    Values:
-        ALL        - All Infos
-        PLATFORM   - Platform the API was built for
-        BUILD      - Build Types (debug or release)
-        TECHNOLOGY - Special technology info
-        LAST       - Indicator for end of defined range
-    """
-    ALL = 0
-    PLATFORM = 1
-    BUILD = 2
-    TECHNOLOGY = 3
-    LAST = 4
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbPixelLayout(Uint32Enum):
-    """Image Pixel Layout Information. C Header offers no further documentation."""
-    Mono = 0
-    MonoPacked = 1
-    Raw = 2
-    RawPacked = 3
-    RGB = 4
-    BGR = 5
-    RGBA = 6
-    BGRA = 7
-    YUV411 = 8
-    YUV422 = 9
-    YUV444 = 10
-    MonoP = 11
-    MonoPl = 12
-    RawP = 13
-    RawPl = 14
-    YYCbYYCr411 = 15
-    CbYYCrYY411 = YUV411,
-    YCbYCr422 = 16
-    CbYCrY422 = YUV422
-    YCbCr444 = 17
-    CbYCr444 = YUV444
-    LAST = 19
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbColorSpace(Uint32Enum):
-    """Image Color space. C Header offers no further documentation."""
-    Undefined = 0
-    ITU_BT709 = 1
-    ITU_BT601 = 2
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbDebayerMode(Uint32Enum):
-    """Debayer Mode. C Header offers no further documentation."""
-    Mode_2x2 = 0
-    Mode_3x3 = 1
-    Mode_LCAA = 2
-    Mode_LCAAV = 3
-    Mode_YUV422 = 4
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbTransformType(Uint32Enum):
-    """TransformType Mode. C Header offers no further documentation."""
-    None_ = 0
-    DebayerMode = 1
-    ColorCorrectionMatrix = 2
-    GammaCorrection = 3
-    Offset = 4
-    Gain = 5
-
-    def __str__(self):
-        return self._name_
-
-
-class VmbPixelInfo(ctypes.Structure):
-    """Structure containing pixel information. Sadly c_header contains no more documentation"""
-    _fields_ = [
-        ('BitsPerPixel', VmbUint32),
-        ('BitsUsed', VmbUint32),
-        ('Alignment', VmbUint32),
-        ('Endianness', VmbUint32),
-        ('PixelLayout', VmbUint32),
-        ('BayerPattern', VmbUint32),
-        ('Reserved', VmbUint32)
-    ]
-
-    def __repr__(self):
-        rep = 'VmbPixelInfo'
-        rep += fmt_repr('(BitsPerPixel={}', self.BitsPerPixel)
-        rep += fmt_repr(',BitsUsed={}', self.BitsUsed)
-        rep += fmt_enum_repr(',Alignment={}', VmbAligment, self.Alignment)
-        rep += fmt_enum_repr(',Endianness={}', VmbEndianness, self.Endianness)
-        rep += fmt_enum_repr(',PixelLayout={}', VmbPixelLayout, self.PixelLayout)
-        rep += fmt_enum_repr(',BayerPattern={}', VmbBayerPattern, self.BayerPattern)
-        rep += fmt_enum_repr(',Reserved={}', VmbColorSpace, self.Reserved)
-        rep += ')'
-        return rep
-
-
-class VmbImageInfo(ctypes.Structure):
-    """Structure containing image information. Sadly c_header contains no more documentation"""
-    _fields_ = [
-        ('Width', VmbUint32),
-        ('Height', VmbUint32),
-        ('Stride', VmbInt32),
-        ('PixelInfo', VmbPixelInfo)
-    ]
-
-    def __repr__(self):
-        rep = 'VmbImageInfo'
-        rep += fmt_repr('(Width={}', self.Width)
-        rep += fmt_repr(',Height={}', self.Height)
-        rep += fmt_repr(',Stride={}', self.Stride)
-        rep += fmt_repr(',PixelInfo={}', self.PixelInfo)
-        rep += ')'
-        return rep
-
-
-class VmbImage(ctypes.Structure):
-    """Structure containing image. Sadly c_header contains no more documentation"""
-    _fields_ = [
-        ('Size', VmbUint32),
-        ('Data', ctypes.c_void_p),
-        ('ImageInfo', VmbImageInfo)
-    ]
-
-    def __repr__(self):
-        rep = 'VmbImage'
-        rep += fmt_repr('(Size={}', self.Size)
-        rep += fmt_repr(',Data={}', self.Data)
-        rep += fmt_repr(',ImageInfo={}', self.ImageInfo)
-        rep += ')'
-        return rep
-
-
-class VmbTransformParameterMatrix3x3(ctypes.Structure):
-    """Sadly c_header contains no more documentation"""
-    _fields_ = [
-        ('Matrix', VmbFloat * 9)
-    ]
-
-
-class VmbTransformParameterGamma(ctypes.Structure):
-    """Sadly c_header contains no more documentation"""
-    _fields_ = [
-        ('Gamma', VmbFloat)
-    ]
-
-
-class VmbTransformParameterDebayer(ctypes.Structure):
-    """Sadly c_header contains no more documentation"""
-    _fields_ = [
-        ('Method', VmbUint32)
-    ]
-
-
-class VmbTransformParameterOffset(ctypes.Structure):
-    """Sadly c_header contains no more documentation"""
-    _fields_ = [
-        ('Offset', VmbInt32)
-    ]
-
-
-class VmbTransformParameterGain(ctypes.Structure):
-    """Sadly c_header contains no more documentation"""
-    _fields_ = [
-        ('Gain', VmbUint32)
-    ]
-
-
-class VmbTransformParameter(ctypes.Union):
-    """Sadly c_header contains no more documentation"""
-    _fields_ = [
-        ('Matrix3x3', VmbTransformParameterMatrix3x3),
-        ('Debayer', VmbTransformParameterDebayer),
-        ('Gamma', VmbTransformParameterGamma),
-        ('Offset', VmbTransformParameterOffset),
-        ('Gain', VmbTransformParameterGain)
-    ]
-
-
-class VmbTransformInfo(ctypes.Structure):
-    """Struct holding transformation information"""
-    _fields_ = [
-        ('TransformType', VmbUint32),
-        ('Parameter', VmbTransformParameter)
-    ]
-
-
-# API
-VIMBA_IMAGE_TRANSFORM_VERSION = None
-if sys.platform == 'linux':
-    EXPECTED_VIMBA_IMAGE_TRANSFORM_VERSION = '1.0'
-
-else:
-    EXPECTED_VIMBA_IMAGE_TRANSFORM_VERSION = '1.6'
-
-# For detailed information on the signatures see "VimbaImageTransform.h"
-# To improve readability, suppress 'E501 line too long (> 100 characters)'
-# check of flake8
-_SIGNATURES = {
-    'VmbGetVersion': (VmbError, [c_ptr(VmbUint32)]),
-    'VmbGetErrorInfo': (VmbError, [VmbError, c_char_p, VmbUint32]),
-    'VmbGetApiInfoString': (VmbError, [VmbAPIInfo, c_char_p, VmbUint32]),
-    'VmbSetDebayerMode': (VmbError, [VmbDebayerMode, c_ptr(VmbTransformInfo)]),
-    'VmbSetColorCorrectionMatrix3x3': (VmbError, [c_ptr(VmbFloat), c_ptr(VmbTransformInfo)]),
-    'VmbSetGammaCorrection': (VmbError, [VmbFloat, c_ptr(VmbTransformInfo)]),
-    'VmbSetImageInfoFromPixelFormat': (VmbError, [VmbPixelFormat, VmbUint32, VmbUint32, c_ptr(VmbImage)]),                                 # noqa: E501
-    'VmbSetImageInfoFromString': (VmbError, [c_char_p, VmbUint32, VmbUint32, VmbUint32, c_ptr(VmbImage)]),                                 # noqa: E501
-    'VmbSetImageInfoFromInputParameters': (VmbError, [VmbPixelFormat, VmbUint32, VmbUint32, VmbPixelLayout, VmbUint32, c_ptr(VmbImage)]),  # noqa: E501
-    'VmbSetImageInfoFromInputImage': (VmbError, [c_ptr(VmbImage), VmbPixelLayout, VmbUint32, c_ptr(VmbImage)]),                            # noqa: E501
-    'VmbImageTransform': (VmbError, [c_ptr(VmbImage), c_ptr(VmbImage), c_ptr(VmbTransformInfo), VmbUint32])                                # noqa: E501
-}
-
-
-def _attach_signatures(lib_handle):
-    global _SIGNATURES
-
-    for function_name, signature in _SIGNATURES.items():
-        fn = getattr(lib_handle, function_name)
-        fn.restype, fn.argtypes = signature
-        fn.errcheck = _eval_vmberror
-
-    return lib_handle
-
-
-def _check_version(lib_handle):
-    global EXPECTED_VIMBA_IMAGE_TRANSFORM_VERSION
-    global VIMBA_IMAGE_TRANSFORM_VERSION
-
-    v = VmbUint32()
-    lib_handle.VmbGetVersion(byref(v))
-
-    VIMBA_IMAGE_TRANSFORM_VERSION = '{}.{}'.format((v.value >> 24) & 0xff, (v.value >> 16) & 0xff)
-
-    if (VIMBA_IMAGE_TRANSFORM_VERSION != EXPECTED_VIMBA_IMAGE_TRANSFORM_VERSION):
-        msg = 'Invalid VimbaImageTransform Version: Expected: {}, Found:{}'
-        raise VimbaSystemError(msg.format(EXPECTED_VIMBA_IMAGE_TRANSFORM_VERSION,
-                                          VIMBA_IMAGE_TRANSFORM_VERSION))
-
-    return lib_handle
-
-
-def _eval_vmberror(result: VmbError, func: Callable[..., Any], *args: Tuple[Any, ...]):
-    if result not in (VmbError.Success, None):
-        raise VimbaCError(result)
-
-
-_lib_instance = _check_version(_attach_signatures(load_vimba_lib('VimbaImageTransform')))
-
-
-@TraceEnable()
-def call_vimba_image_transform(func_name: str, *args):
-    """This function encapsulates the entire VimbaImageTransform access.
-
-    For Details on valid function signatures see the 'VimbaImageTransform.h'.
-
-    Arguments:
-        func_name: The function name from VimbaImageTransform to be called.
-        args: Varargs passed directly to the underlaying C-Function.
-
-    Raises:
-        TypeError if given are do not match the signature of the function.
-        AttributeError if func with name 'func_name' does not exist.
-        VimbaCError if the function call is valid but neither None or VmbError.Success was returned.
-
-    The following functions of VimbaImageTransform can be executed:
-        VmbGetVersion
-        VmbGetTechnoInfo
-        VmbGetErrorInfo
-        VmbGetApiInfoString
-        VmbSetDebayerMode
-        VmbSetColorCorrectionMatrix3x3
-        VmbSetGammaCorrection
-        VmbSetImageInfoFromPixelFormat
-        VmbSetImageInfoFromString
-        VmbSetImageInfoFromInputParameters
-        VmbSetImageInfoFromInputImage
-        VmbImageTransform
-    """
-
-    global _lib_instance
-    getattr(_lib_instance, func_name)(*args)
-
-
-PIXEL_FORMAT_TO_LAYOUT: Dict[VmbPixelFormat, Tuple[VmbPixelLayout, int]] = {
-    VmbPixelFormat.Mono8: (VmbPixelLayout.Mono, 8),
-    VmbPixelFormat.Mono10: (VmbPixelLayout.Mono, 16),
-    VmbPixelFormat.Mono12: (VmbPixelLayout.Mono, 16),
-    VmbPixelFormat.Mono14: (VmbPixelLayout.Mono, 16),
-    VmbPixelFormat.Mono16: (VmbPixelLayout.Mono, 16),
-    VmbPixelFormat.BayerGR8: (VmbPixelLayout.Raw, 8),
-    VmbPixelFormat.BayerRG8: (VmbPixelLayout.Raw, 8),
-    VmbPixelFormat.BayerGB8: (VmbPixelLayout.Raw, 8),
-    VmbPixelFormat.BayerBG8: (VmbPixelLayout.Raw, 8),
-    VmbPixelFormat.BayerGR10: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.BayerRG10: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.BayerGB10: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.BayerBG10: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.BayerGR12: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.BayerRG12: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.BayerGB12: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.BayerBG12: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.BayerGR16: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.BayerRG16: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.BayerGB16: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.BayerBG16: (VmbPixelLayout.Raw, 16),
-    VmbPixelFormat.Rgb8: (VmbPixelLayout.RGB, 8),
-    VmbPixelFormat.Rgb10: (VmbPixelLayout.RGB, 16),
-    VmbPixelFormat.Rgb12: (VmbPixelLayout.RGB, 16),
-    VmbPixelFormat.Rgb14: (VmbPixelLayout.RGB, 16),
-    VmbPixelFormat.Rgb16: (VmbPixelLayout.RGB, 16),
-    VmbPixelFormat.Bgr8: (VmbPixelLayout.BGR, 8),
-    VmbPixelFormat.Bgr10: (VmbPixelLayout.BGR, 16),
-    VmbPixelFormat.Bgr12: (VmbPixelLayout.BGR, 16),
-    VmbPixelFormat.Bgr14: (VmbPixelLayout.BGR, 16),
-    VmbPixelFormat.Bgr16: (VmbPixelLayout.BGR, 16),
-    VmbPixelFormat.Rgba8: (VmbPixelLayout.RGBA, 8),
-    VmbPixelFormat.Rgba10: (VmbPixelLayout.RGBA, 16),
-    VmbPixelFormat.Rgba12: (VmbPixelLayout.RGBA, 16),
-    VmbPixelFormat.Rgba14: (VmbPixelLayout.RGBA, 16),
-    VmbPixelFormat.Rgba16: (VmbPixelLayout.RGBA, 16),
-    VmbPixelFormat.Bgra8: (VmbPixelLayout.BGRA, 8),
-    VmbPixelFormat.Bgra10: (VmbPixelLayout.BGRA, 16),
-    VmbPixelFormat.Bgra12: (VmbPixelLayout.BGRA, 16),
-    VmbPixelFormat.Bgra14: (VmbPixelLayout.BGRA, 16),
-    VmbPixelFormat.Bgra16: (VmbPixelLayout.BGRA, 16)
-}
-
-LAYOUT_TO_PIXEL_FORMAT = dict([(v, k) for k, v in PIXEL_FORMAT_TO_LAYOUT.items()])
-
-
-def _query_compatibility(pixel_format: VmbPixelFormat) -> Tuple[VmbPixelFormat, ...]:
-    global LAYOUT_TO_PIXEL_FORMAT
-
-    # Query compatible formats from ImageTransform
-    output_pixel_layouts = (VmbPixelLayout.Mono, VmbPixelLayout.MonoPacked, VmbPixelLayout.Raw,
-                            VmbPixelLayout.RawPacked, VmbPixelLayout.RGB, VmbPixelLayout.BGR,
-                            VmbPixelLayout.RGBA, VmbPixelLayout.BGRA)
-
-    output_bits_per_pixel = (8, 16)
-    output_layouts = tuple([(layouts, bits)
-                            for layouts in output_pixel_layouts
-                            for bits in output_bits_per_pixel])
-
-    result: List[VmbPixelFormat] = []
-
-    src_image = VmbImage()
-    src_image.Size = sizeof(src_image)
-
-    call_vimba_image_transform('VmbSetImageInfoFromPixelFormat', pixel_format, 0, 0,
-                               byref(src_image))
-
-    dst_image = VmbImage()
-    dst_image.Size = sizeof(dst_image)
-
-    for layout, bits in output_layouts:
-
-        try:
-            call_vimba_image_transform('VmbSetImageInfoFromInputImage', byref(src_image), layout,
-                                       bits, byref(dst_image))
-
-            fmt = LAYOUT_TO_PIXEL_FORMAT[(layout, bits)]
-
-            if fmt not in result:
-                result.append(fmt)
-
-        except VimbaCError as e:
-            if e.get_error_code() not in (VmbError.NotImplemented_, VmbError.BadParameter):
-                raise e
-
-    return tuple(result)
-
-
-PIXEL_FORMAT_CONVERTIBILITY_MAP: Dict[VmbPixelFormat, Tuple[VmbPixelFormat, ...]] = {
-    VmbPixelFormat.Mono8: _query_compatibility(VmbPixelFormat.Mono8),
-    VmbPixelFormat.Mono10: _query_compatibility(VmbPixelFormat.Mono10),
-    VmbPixelFormat.Mono10p: _query_compatibility(VmbPixelFormat.Mono10p),
-    VmbPixelFormat.Mono12: _query_compatibility(VmbPixelFormat.Mono12),
-    VmbPixelFormat.Mono12Packed: _query_compatibility(VmbPixelFormat.Mono12Packed),
-    VmbPixelFormat.Mono12p: _query_compatibility(VmbPixelFormat.Mono12p),
-    VmbPixelFormat.Mono14: _query_compatibility(VmbPixelFormat.Mono14),
-    VmbPixelFormat.Mono16: _query_compatibility(VmbPixelFormat.Mono16),
-
-    VmbPixelFormat.BayerGR8: _query_compatibility(VmbPixelFormat.BayerGR8),
-    VmbPixelFormat.BayerRG8: _query_compatibility(VmbPixelFormat.BayerRG8),
-    VmbPixelFormat.BayerGB8: _query_compatibility(VmbPixelFormat.BayerGB8),
-    VmbPixelFormat.BayerBG8: _query_compatibility(VmbPixelFormat.BayerBG8),
-    VmbPixelFormat.BayerGR10: _query_compatibility(VmbPixelFormat.BayerGR10),
-    VmbPixelFormat.BayerRG10: _query_compatibility(VmbPixelFormat.BayerRG10),
-    VmbPixelFormat.BayerGB10: _query_compatibility(VmbPixelFormat.BayerGB10),
-    VmbPixelFormat.BayerBG10: _query_compatibility(VmbPixelFormat.BayerBG10),
-    VmbPixelFormat.BayerGR12: _query_compatibility(VmbPixelFormat.BayerGR12),
-    VmbPixelFormat.BayerRG12: _query_compatibility(VmbPixelFormat.BayerRG12),
-    VmbPixelFormat.BayerGB12: _query_compatibility(VmbPixelFormat.BayerGB12),
-    VmbPixelFormat.BayerBG12: _query_compatibility(VmbPixelFormat.BayerBG12),
-    VmbPixelFormat.BayerGR12Packed: _query_compatibility(VmbPixelFormat.BayerGR12Packed),
-    VmbPixelFormat.BayerRG12Packed: _query_compatibility(VmbPixelFormat.BayerRG12Packed),
-    VmbPixelFormat.BayerGB12Packed: _query_compatibility(VmbPixelFormat.BayerGB12Packed),
-    VmbPixelFormat.BayerBG12Packed: _query_compatibility(VmbPixelFormat.BayerBG12Packed),
-    VmbPixelFormat.BayerGR10p: _query_compatibility(VmbPixelFormat.BayerGR10p),
-    VmbPixelFormat.BayerRG10p: _query_compatibility(VmbPixelFormat.BayerRG10p),
-    VmbPixelFormat.BayerGB10p: _query_compatibility(VmbPixelFormat.BayerGB10p),
-    VmbPixelFormat.BayerBG10p: _query_compatibility(VmbPixelFormat.BayerBG10p),
-    VmbPixelFormat.BayerGR12p: _query_compatibility(VmbPixelFormat.BayerGR12p),
-    VmbPixelFormat.BayerRG12p: _query_compatibility(VmbPixelFormat.BayerRG12p),
-    VmbPixelFormat.BayerGB12p: _query_compatibility(VmbPixelFormat.BayerGB12p),
-    VmbPixelFormat.BayerBG12p: _query_compatibility(VmbPixelFormat.BayerBG12p),
-    VmbPixelFormat.BayerGR16: _query_compatibility(VmbPixelFormat.BayerGR16),
-    VmbPixelFormat.BayerRG16: _query_compatibility(VmbPixelFormat.BayerRG16),
-    VmbPixelFormat.BayerGB16: _query_compatibility(VmbPixelFormat.BayerGB16),
-    VmbPixelFormat.BayerBG16: _query_compatibility(VmbPixelFormat.BayerBG16),
-
-    VmbPixelFormat.Rgb8: _query_compatibility(VmbPixelFormat.Rgb8),
-    VmbPixelFormat.Bgr8: _query_compatibility(VmbPixelFormat.Bgr8),
-    VmbPixelFormat.Rgb10: _query_compatibility(VmbPixelFormat.Rgb10),
-    VmbPixelFormat.Bgr10: _query_compatibility(VmbPixelFormat.Bgr10),
-    VmbPixelFormat.Rgb12: _query_compatibility(VmbPixelFormat.Rgb12),
-    VmbPixelFormat.Bgr12: _query_compatibility(VmbPixelFormat.Bgr12),
-    VmbPixelFormat.Rgb14: _query_compatibility(VmbPixelFormat.Rgb14),
-    VmbPixelFormat.Bgr14: _query_compatibility(VmbPixelFormat.Bgr14),
-    VmbPixelFormat.Rgb16: _query_compatibility(VmbPixelFormat.Rgb16),
-    VmbPixelFormat.Bgr16: _query_compatibility(VmbPixelFormat.Bgr16),
-    VmbPixelFormat.Argb8: _query_compatibility(VmbPixelFormat.Argb8),
-    VmbPixelFormat.Rgba8: _query_compatibility(VmbPixelFormat.Rgba8),
-    VmbPixelFormat.Bgra8: _query_compatibility(VmbPixelFormat.Bgra8),
-    VmbPixelFormat.Rgba10: _query_compatibility(VmbPixelFormat.Rgba10),
-    VmbPixelFormat.Bgra10: _query_compatibility(VmbPixelFormat.Bgra10),
-    VmbPixelFormat.Rgba12: _query_compatibility(VmbPixelFormat.Rgba12),
-    VmbPixelFormat.Bgra12: _query_compatibility(VmbPixelFormat.Bgra12),
-    VmbPixelFormat.Rgba14: _query_compatibility(VmbPixelFormat.Rgba14),
-    VmbPixelFormat.Bgra14: _query_compatibility(VmbPixelFormat.Bgra14),
-    VmbPixelFormat.Rgba16: _query_compatibility(VmbPixelFormat.Rgba16),
-    VmbPixelFormat.Bgra16: _query_compatibility(VmbPixelFormat.Bgra16),
-
-    VmbPixelFormat.Yuv411: _query_compatibility(VmbPixelFormat.Yuv411),
-    VmbPixelFormat.Yuv422: _query_compatibility(VmbPixelFormat.Yuv422),
-    VmbPixelFormat.Yuv444: _query_compatibility(VmbPixelFormat.Yuv444),
-    VmbPixelFormat.YCbCr411_8_CbYYCrYY: _query_compatibility(VmbPixelFormat.YCbCr411_8_CbYYCrYY),
-    VmbPixelFormat.YCbCr422_8_CbYCrY: _query_compatibility(VmbPixelFormat.YCbCr422_8_CbYCrY),
-    VmbPixelFormat.YCbCr8_CbYCr: _query_compatibility(VmbPixelFormat.YCbCr8_CbYCr)
-}
diff --git a/VimbaPython/Source/vimba/camera.py b/VimbaPython/Source/vimba/camera.py
deleted file mode 100644
index 3acab27225a80520436f91bfcde5a7c09f5d9fcb..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/camera.py
+++ /dev/null
@@ -1,1078 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import enum
-import os
-import copy
-import threading
-
-from ctypes import POINTER
-from typing import Tuple, List, Callable, cast, Optional, Union, Dict
-from .c_binding import call_vimba_c, build_callback_type, byref, sizeof, decode_cstr, decode_flags
-from .c_binding import VmbCameraInfo, VmbHandle, VmbUint32, G_VIMBA_C_HANDLE, VmbAccessMode, \
-                       VimbaCError, VmbError, VmbFrame, VmbFeaturePersist, VmbFeaturePersistSettings
-from .feature import discover_features, discover_feature, FeatureTypes, FeaturesTuple, \
-                     FeatureTypeTypes
-from .shared import filter_features_by_name, filter_features_by_type, filter_affected_features, \
-                    filter_selected_features, filter_features_by_category, \
-                    attach_feature_accessors, remove_feature_accessors, read_memory, \
-                    write_memory, read_registers, write_registers
-from .frame import Frame, FormatTuple, PixelFormat, AllocationMode
-from .util import Log, TraceEnable, RuntimeTypeCheckEnable, EnterContextOnCall, \
-                  LeaveContextOnCall, RaiseIfInsideContext, RaiseIfOutsideContext
-from .error import VimbaSystemError, VimbaCameraError, VimbaTimeout, VimbaFeatureError
-
-
-__all__ = [
-    'AccessMode',
-    'PersistType',
-    'FrameHandler',
-    'Camera',
-    'CameraEvent',
-    'CamerasTuple',
-    'CamerasList',
-    'CameraChangeHandler',
-    'discover_cameras',
-    'discover_camera'
-]
-
-
-# Type Forward declarations
-CameraChangeHandler = Callable[['Camera', 'CameraEvent'], None]
-CamerasTuple = Tuple['Camera', ...]
-CamerasList = List['Camera']
-FrameHandler = Callable[['Camera', Frame], None]
-
-
-class AccessMode(enum.IntEnum):
-    """Enum specifying all available camera access modes.
-
-    Enum values:
-        None_  - No access.
-        Full   - Read and write access. Use this mode to configure the camera features and
-                 to acquire images (Camera Link cameras: configuration only).
-        Read   - Read-only access. Setting features is not possible.
-        Config - Configuration access to configure the IP address of your GigE camera.
-    """
-    None_ = VmbAccessMode.None_
-    Full = VmbAccessMode.Full
-    Read = VmbAccessMode.Read
-    Config = VmbAccessMode.Config
-
-
-class CameraEvent(enum.IntEnum):
-    """Enum specifying a Camera Event
-
-    Enum values:
-        Missing     - A known camera disappeared from the bus
-        Detected    - A new camera was discovered
-        Reachable   - A known camera can be accessed
-        Unreachable - A known camera cannot be accessed anymore
-    """
-    Missing = 0
-    Detected = 1
-    Reachable = 2
-    Unreachable = 3
-
-
-class PersistType(enum.IntEnum):
-    """Persistence Type for camera configuration storing and loading.
-    Enum values:
-        All        - Save all features including lookup tables
-        Streamable - Save only features tagged with Streamable
-        NoLUT      - Save all features except lookup tables.
-    """
-    All = VmbFeaturePersist.All
-    Streamable = VmbFeaturePersist.Streamable
-    NoLUT = VmbFeaturePersist.NoLUT
-
-
-class _Context:
-    def __init__(self, cam, frames, handler, callback):
-        self.cam = cam
-        self.cam_handle = _cam_handle_accessor(cam)
-        self.frames = frames
-        self.frames_lock = threading.Lock()
-        self.frames_handler = handler
-        self.frames_callback = callback
-
-
-class _State:
-    def __init__(self, context: _Context):
-        self.context = context
-
-
-class _StateInit(_State):
-    @TraceEnable()
-    def forward(self) -> Union[_State, VimbaCameraError]:
-        for frame in self.context.frames:
-            frame_handle = _frame_handle_accessor(frame)
-
-            try:
-                call_vimba_c('VmbFrameAnnounce', self.context.cam_handle, byref(frame_handle),
-                             sizeof(frame_handle))
-                if frame._allocation_mode == AllocationMode.AllocAndAnnounceFrame:
-                    assert frame_handle.buffer is not None
-                    frame._set_buffer(frame_handle.buffer)
-
-            except VimbaCError as e:
-                return _build_camera_error(self.context.cam, e)
-
-        return _StateAnnounced(self.context)
-
-
-class _StateAnnounced(_State):
-    @TraceEnable()
-    def forward(self) -> Union[_State, VimbaCameraError]:
-        try:
-            call_vimba_c('VmbCaptureStart', self.context.cam_handle)
-
-        except VimbaCError as e:
-            return _build_camera_error(self.context.cam, e)
-
-        return _StateCapturing(self.context)
-
-    @TraceEnable()
-    def backward(self) -> Union[_State, VimbaCameraError]:
-        for frame in self.context.frames:
-            frame_handle = _frame_handle_accessor(frame)
-
-            try:
-                call_vimba_c('VmbFrameRevoke', self.context.cam_handle, byref(frame_handle))
-
-            except VimbaCError as e:
-                return _build_camera_error(self.context.cam, e)
-
-        return _StateInit(self.context)
-
-
-class _StateCapturing(_State):
-    @TraceEnable()
-    def forward(self) -> Union[_State, VimbaCameraError]:
-        try:
-            # Skip Command execution on AccessMode.Read (required for Multicast Streaming)
-            if self.context.cam.get_access_mode() != AccessMode.Read:
-                self.context.cam.get_feature_by_name('AcquisitionStart').run()
-
-        except BaseException as e:
-            return VimbaCameraError(str(e))
-
-        return _StateAcquiring(self.context)
-
-    @TraceEnable()
-    def backward(self) -> Union[_State, VimbaCameraError]:
-        try:
-            call_vimba_c('VmbCaptureQueueFlush', self.context.cam_handle)
-
-        except VimbaCError as e:
-            return _build_camera_error(self.context.cam, e)
-
-        return _StateAnnounced(self.context)
-
-
-class _StateNotAcquiring(_State):
-    @TraceEnable()
-    def backward(self) -> Union[_State, VimbaCameraError]:
-        try:
-            call_vimba_c('VmbCaptureEnd', self.context.cam_handle)
-
-        except VimbaCError as e:
-            return _build_camera_error(self.context.cam, e)
-
-        return _StateCapturing(self.context)
-
-
-class _StateAcquiring(_State):
-    @TraceEnable()
-    def backward(self) -> Union[_State, VimbaCameraError]:
-        try:
-            # Skip Command execution on AccessMode.Read (required for Multicast Streaming)
-            cam = self.context.cam
-            if cam.get_access_mode() != AccessMode.Read:
-                cam.get_feature_by_name('AcquisitionStop').run()
-
-        except BaseException as e:
-            return VimbaCameraError(str(e))
-
-        return _StateNotAcquiring(self.context)
-
-    @TraceEnable()
-    def wait_for_frames(self, timeout_ms: int):
-        for frame in self.context.frames:
-            self.queue_frame(frame)
-
-        for frame in self.context.frames:
-            frame_handle = _frame_handle_accessor(frame)
-
-            try:
-                call_vimba_c('VmbCaptureFrameWait', self.context.cam_handle, byref(frame_handle),
-                             timeout_ms)
-
-            except VimbaCError as e:
-                raise _build_camera_error(self.context.cam, e) from e
-
-    @TraceEnable()
-    def queue_frame(self, frame):
-        frame_handle = _frame_handle_accessor(frame)
-
-        try:
-            call_vimba_c('VmbCaptureFrameQueue', self.context.cam_handle, byref(frame_handle),
-                         self.context.frames_callback)
-
-        except VimbaCError as e:
-            raise _build_camera_error(self.context.cam, e) from e
-
-
-class _CaptureFsm:
-    def __init__(self, context: _Context):
-        self.__context = context
-        self.__state = _StateInit(self.__context)
-
-    def get_context(self) -> _Context:
-        return self.__context
-
-    def enter_capturing_mode(self):
-        # Forward state machine until the end or an error occurs
-        exc = None
-
-        while not exc:
-            try:
-                state_or_exc = self.__state.forward()
-
-            except AttributeError:
-                break
-
-            if isinstance(state_or_exc, _State):
-                self.__state = state_or_exc
-
-            else:
-                exc = state_or_exc
-
-        return exc
-
-    def leave_capturing_mode(self):
-        # Revert state machine until the initial state is reached or an error occurs
-        exc = None
-
-        while not exc:
-            try:
-                state_or_exc = self.__state.backward()
-
-            except AttributeError:
-                break
-
-            if isinstance(state_or_exc, _State):
-                self.__state = state_or_exc
-
-            else:
-                exc = state_or_exc
-
-        return exc
-
-    def wait_for_frames(self, timeout_ms: int):
-        # Wait for Frames only in AcquiringMode
-        if isinstance(self.__state, _StateAcquiring):
-            self.__state.wait_for_frames(timeout_ms)
-
-    def queue_frame(self, frame):
-        # Queue Frame only in AcquiringMode
-        if isinstance(self.__state, _StateAcquiring):
-            self.__state.queue_frame(frame)
-
-
-@TraceEnable()
-def _frame_generator(cam, limit: Optional[int], timeout_ms: int, allocation_mode: AllocationMode):
-    if cam.is_streaming():
-        raise VimbaCameraError('Operation not supported while streaming.')
-
-    frame_data_size = cam.get_feature_by_name('PayloadSize').get()
-    frames = (Frame(frame_data_size, allocation_mode), )
-    fsm = _CaptureFsm(_Context(cam, frames, None, None))
-    cnt = 0
-
-    try:
-        while True if limit is None else cnt < limit:
-            # Enter Capturing mode
-            exc = fsm.enter_capturing_mode()
-            if exc:
-                raise exc
-
-            fsm.wait_for_frames(timeout_ms)
-
-            # Return copy of internally used frame to keep them independent.
-            frame_copy = copy.deepcopy(frames[0])
-            fsm.leave_capturing_mode()
-            frame_copy._frame.frameID = cnt
-            cnt += 1
-
-            yield frame_copy
-
-    finally:
-        # Leave Capturing mode
-        exc = fsm.leave_capturing_mode()
-        if exc:
-            raise exc
-
-
-class Camera:
-    """This class allows access to a Camera detected by Vimba.
-    Camera is meant be used in conjunction with the "with" - statement.
-    On entering a context, all Camera features are detected and can be accessed within the context.
-    Static Camera properties like Name and Model can be accessed outside the context.
-    """
-    @TraceEnable()
-    @LeaveContextOnCall()
-    def __init__(self, info: VmbCameraInfo):
-        """Do not call directly. Access Cameras via vimba.Vimba instead."""
-        self.__handle: VmbHandle = VmbHandle(0)
-        self.__info: VmbCameraInfo = info
-        self.__access_mode: AccessMode = AccessMode.Full
-        self.__feats: FeaturesTuple = ()
-        self.__context_cnt: int = 0
-        self.__capture_fsm: Optional[_CaptureFsm] = None
-        self._disconnected = False
-
-    @TraceEnable()
-    def __enter__(self):
-        if not self.__context_cnt:
-            self._open()
-
-        self.__context_cnt += 1
-        return self
-
-    @TraceEnable()
-    def __exit__(self, exc_type, exc_value, exc_traceback):
-        self.__context_cnt -= 1
-
-        if not self.__context_cnt:
-            self._close()
-
-    def __str__(self):
-        return 'Camera(id={})'.format(self.get_id())
-
-    @RaiseIfInsideContext()
-    @RuntimeTypeCheckEnable()
-    def set_access_mode(self, access_mode: AccessMode):
-        """Set camera access mode.
-
-        Arguments:
-            access_mode - AccessMode for accessing a Camera.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called inside "with" - statement scope.
-        """
-        self.__access_mode = access_mode
-
-    def get_access_mode(self) -> AccessMode:
-        """Get current camera access mode"""
-        return self.__access_mode
-
-    def get_id(self) -> str:
-        """Get Camera Id, for example, DEV_1AB22C00041B"""
-        return decode_cstr(self.__info.cameraIdString)
-
-    def get_name(self) -> str:
-        """Get Camera Name, for example, Allied Vision 1800 U-500m"""
-        return decode_cstr(self.__info.cameraName)
-
-    def get_model(self) -> str:
-        """Get Camera Model, for example, 1800 U-500m"""
-        return decode_cstr(self.__info.modelName)
-
-    def get_serial(self) -> str:
-        """Get Camera serial number, for example, 50-0503328442"""
-        return decode_cstr(self.__info.serialString)
-
-    def get_permitted_access_modes(self) -> Tuple[AccessMode, ...]:
-        """Get a set of all access modes the camera can be accessed with."""
-        val = self.__info.permittedAccess
-
-        # Clear VmbAccessMode.Lite Flag. It is offered by VimbaC, but it is not documented.
-        val &= ~int(VmbAccessMode.Lite)
-
-        return decode_flags(AccessMode, val)
-
-    def get_interface_id(self) -> str:
-        """Get ID of the Interface this camera is connected to, for example, VimbaUSBInterface_0x0
-        """
-        return decode_cstr(self.__info.interfaceIdString)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def read_memory(self, addr: int, max_bytes: int) -> bytes:  # coverage: skip
-        """Read a byte sequence from a given memory address.
-
-        Arguments:
-            addr: Starting address to read from.
-            max_bytes: Maximum number of bytes to read from addr.
-
-        Returns:
-            Read memory contents as bytes.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-            ValueError if addr is negative.
-            ValueError if max_bytes is negative.
-            ValueError if the memory access was invalid.
-        """
-        # Note: Coverage is skipped. Function is untestable in a generic way.
-        return read_memory(self.__handle, addr, max_bytes)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def write_memory(self, addr: int, data: bytes):  # coverage: skip
-        """Write a byte sequence to a given memory address.
-
-        Arguments:
-            addr: Address to write the content of 'data' too.
-            data: Byte sequence to write at address 'addr'.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-            ValueError if addr is negative.
-        """
-        # Note: Coverage is skipped. Function is untestable in a generic way.
-        return write_memory(self.__handle, addr, data)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def read_registers(self, addrs: Tuple[int, ...]) -> Dict[int, int]:  # coverage: skip
-        """Read contents of multiple registers.
-
-        Arguments:
-            addrs: Sequence of addresses to be read iteratively.
-
-        Returns:
-            Dictionary containing a mapping from given address to the read register values.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-            ValueError if any address in addrs is negative.
-            ValueError if the register access was invalid.
-        """
-        # Note: Coverage is skipped. Function is untestable in a generic way.
-        return read_registers(self.__handle, addrs)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def write_registers(self, addrs_values: Dict[int, int]):  # coverage: skip
-        """Write data to multiple registers.
-
-        Arguments:
-            addrs_values: Mapping between register addresses and the data to write.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-            ValueError if any address in addrs_values is negative.
-            ValueError if the register access was invalid.
-        """
-        # Note: Coverage is skipped. Function is untestable in a generic way.
-        return write_registers(self.__handle, addrs_values)
-
-    @RaiseIfOutsideContext()
-    def get_all_features(self) -> FeaturesTuple:
-        """Get access to all discovered features of this camera.
-
-        Returns:
-            A set of all currently detected features.
-
-        Raises:
-            RuntimeError if called outside "with" - statement scope.
-        """
-        return self.__feats
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_features_affected_by(self, feat: FeatureTypes) -> FeaturesTuple:
-        """Get all features affected by a specific camera feature.
-
-        Arguments:
-            feat - Feature used, find features that are affected by 'feat'.
-
-        Returns:
-            A set of features affected by changes on 'feat'.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-            VimbaFeatureError if 'feat' is not a feature of this camera.
-        """
-        return filter_affected_features(self.__feats, feat)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_features_selected_by(self, feat: FeatureTypes) -> FeaturesTuple:
-        """Get all features selected by a specific camera feature.
-
-        Arguments:
-            feat - Feature to find features that are selected by 'feat'.
-
-        Returns:
-            A feature set selected by changes on 'feat'.
-
-        Raises:
-            TypeError if 'feat' is not of any feature type.
-            RuntimeError if called outside "with" - statement scope.
-            VimbaFeatureError if 'feat' is not a feature of this camera.
-        """
-        return filter_selected_features(self.__feats, feat)
-
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_features_by_type(self, feat_type: FeatureTypeTypes) -> FeaturesTuple:
-        """Get all camera features of a specific feature type.
-
-        Valid FeatureTypes are: IntFeature, FloatFeature, StringFeature, BoolFeature,
-        EnumFeature, CommandFeature, RawFeature
-
-        Arguments:
-            feat_type - FeatureType to find features of that type.
-
-        Returns:
-            A feature set of type 'feat_type'.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-        """
-        return filter_features_by_type(self.__feats, feat_type)
-
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_features_by_category(self, category: str) -> FeaturesTuple:
-        """Get all camera features of a specific category.
-
-        Arguments:
-            category - Category for filtering features.
-
-        Returns:
-            A feature set of category 'category'. Can be an empty set if there is
-            no camera feature of that category.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-        """
-        return filter_features_by_category(self.__feats, category)
-
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_feature_by_name(self, feat_name: str) -> FeatureTypes:
-        """Get a camera feature by its name.
-
-        Arguments:
-            feat_name - Name to find a feature.
-
-        Returns:
-            Feature with the associated name.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-            VimbaFeatureError if no feature is associated with 'feat_name'.
-        """
-        feat = filter_features_by_name(self.__feats, feat_name)
-
-        if not feat:
-            raise VimbaFeatureError('Feature \'{}\' not found.'.format(feat_name))
-
-        return feat
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_frame_generator(self,
-                            limit: Optional[int] = None,
-                            timeout_ms: int = 2000,
-                            allocation_mode: AllocationMode = AllocationMode.AnnounceFrame):
-        """Construct frame generator, providing synchronous image acquisition.
-
-        The Frame generator acquires a new frame with each execution.
-
-        Arguments:
-            limit - The number of images the generator shall acquire. If limit is None,
-                    the generator will produce an unlimited amount of images and must be
-                    stopped by the user supplied code.
-            timeout_ms - Timeout in milliseconds of frame acquisition.
-            allocation_mode - Allocation mode deciding if buffer allocation should be done by
-                              VimbaPython or the Transport Layer
-
-        Returns:
-            Frame generator expression
-
-        Raises:
-            RuntimeError if called outside "with" - statement scope.
-            ValueError if a limit is supplied and negative.
-            ValueError if a timeout_ms is negative.
-            VimbaTimeout if Frame acquisition timed out.
-            VimbaCameraError if Camera is streaming while executing the generator.
-        """
-        if limit and (limit < 0):
-            raise ValueError('Given Limit {} is not >= 0'.format(limit))
-
-        if timeout_ms <= 0:
-            raise ValueError('Given Timeout {} is not > 0'.format(timeout_ms))
-
-        return _frame_generator(self, limit, timeout_ms, allocation_mode)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_frame(self,
-                  timeout_ms: int = 2000,
-                  allocation_mode: AllocationMode = AllocationMode.AnnounceFrame) -> Frame:
-        """Get single frame from camera. Synchronous frame acquisition.
-
-        Arguments:
-            timeout_ms - Timeout in milliseconds of frame acquisition.
-            allocation_mode - Allocation mode deciding if buffer allocation should be done by
-                              VimbaPython or the Transport Layer
-
-        Returns:
-            Frame from camera
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-            ValueError if a timeout_ms is negative.
-            VimbaTimeout if Frame acquisition timed out.
-        """
-        return next(self.get_frame_generator(1, timeout_ms, allocation_mode))
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def start_streaming(self,
-                        handler: FrameHandler,
-                        buffer_count: int = 5,
-                        allocation_mode: AllocationMode = AllocationMode.AnnounceFrame):
-        """Enter streaming mode
-
-        Enter streaming mode is also known as asynchronous frame acquisition.
-        While active, the camera acquires and buffers frames continuously.
-        With each acquired frame, a given FrameHandler is called with a new Frame.
-
-        Arguments:
-            handler - Callable that is executed on each acquired frame.
-            buffer_count - Number of frames supplied as internal buffer.
-            allocation_mode - Allocation mode deciding if buffer allocation should be done by
-                              VimbaPython or the Transport Layer
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-            ValueError if buffer is less or equal to zero.
-            VimbaCameraError if the camera is already streaming.
-            VimbaCameraError if anything went wrong on entering streaming mode.
-        """
-        if buffer_count <= 0:
-            raise ValueError('Given buffer_count {} must be positive'.format(buffer_count))
-
-        if self.is_streaming():
-            raise VimbaCameraError('Camera \'{}\' already streaming.'.format(self.get_id()))
-
-        # Setup capturing fsm
-        payload_size = self.get_feature_by_name('PayloadSize').get()
-        frames = tuple([Frame(payload_size, allocation_mode) for _ in range(buffer_count)])
-        callback = build_callback_type(None, VmbHandle, POINTER(VmbFrame))(self.__frame_cb_wrapper)
-
-        self.__capture_fsm = _CaptureFsm(_Context(self, frames, handler, callback))
-
-        # Try to enter streaming mode. If this fails perform cleanup and raise error
-        exc = self.__capture_fsm.enter_capturing_mode()
-        if exc:
-            self.__capture_fsm.leave_capturing_mode()
-            self.__capture_fsm = None
-            raise exc
-
-        else:
-            for frame in frames:
-                self.__capture_fsm.queue_frame(frame)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    def stop_streaming(self):
-        """Leave streaming mode.
-
-        Leave asynchronous frame acquisition. If streaming mode was not activated before,
-        it just returns silently.
-
-        Raises:
-            RuntimeError if called outside "with" - statement scope.
-            VimbaCameraError if anything went wrong on leaving streaming mode.
-        """
-        if not self.is_streaming():
-            return
-
-        # Leave Capturing mode. If any error occurs, report it and cleanup
-        try:
-            exc = self.__capture_fsm.leave_capturing_mode()
-            if exc:
-                raise exc
-
-        finally:
-            self.__capture_fsm = None
-
-    @TraceEnable()
-    def is_streaming(self) -> bool:
-        """Returns True if the camera is currently in streaming mode. If not, returns False."""
-        return self.__capture_fsm is not None and not self._disconnected
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def queue_frame(self, frame: Frame):
-        """Reuse acquired frame in streaming mode.
-
-        Add given frame back into the frame queue used in streaming mode. This
-        should be the last operation on a registered FrameHandler. If streaming mode is not
-        active, it returns silently.
-
-        Arguments:
-            frame - The frame to reuse.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            ValueError if the given frame is not from the internal buffer queue.
-            RuntimeError if called outside "with" - statement scope.
-            VimbaCameraError if reusing the frame was unsuccessful.
-        """
-        if self.__capture_fsm is None:
-            return
-
-        if frame not in self.__capture_fsm.get_context().frames:
-            raise ValueError('Given Frame is not from Queue')
-
-        self.__capture_fsm.queue_frame(frame)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    def get_pixel_formats(self) -> FormatTuple:
-        """Get supported pixel formats from Camera.
-
-        Returns:
-            All pixel formats the camera supports
-
-        Raises:
-            RuntimeError if called outside "with" - statement scope.
-        """
-        result = []
-        feat = self.get_feature_by_name('PixelFormat')
-
-        # Build intersection between PixelFormat Enum Values and PixelFormat
-        # Note: The Mapping is a bit complicated due to different writing styles within
-        #       Feature EnumEntries and PixelFormats
-        all_fmts = set([k.upper() for k in PixelFormat.__members__])
-        all_enum_fmts = set([str(k).upper() for k in feat.get_available_entries()])
-        fmts = all_fmts.intersection(all_enum_fmts)
-
-        for k in PixelFormat.__members__:
-            if k.upper() in fmts:
-                result.append(PixelFormat[k])
-
-        return tuple(result)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    def get_pixel_format(self):
-        """Get current pixel format.
-
-        Raises:
-            RuntimeError if called outside "with" - statement scope.
-        """
-        enum_value = str(self.get_feature_by_name('PixelFormat').get()).upper()
-
-        for k in PixelFormat.__members__:
-            if k.upper() == enum_value:
-                return PixelFormat[k]
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def set_pixel_format(self, fmt: PixelFormat):
-        """Set current pixel format.
-
-        Arguments:
-            fmt - Default pixel format to set.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-            ValueError if the given pixel format is not supported by the cameras.
-        """
-        if fmt not in self.get_pixel_formats():
-            raise ValueError('Camera does not support PixelFormat \'{}\''.format(str(fmt)))
-
-        feat = self.get_feature_by_name('PixelFormat')
-        fmt_str = str(fmt).upper()
-
-        for entry in feat.get_available_entries():
-            if str(entry).upper() == fmt_str:
-                feat.set(entry)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def save_settings(self, file: str, persist_type: PersistType):
-        """Save camera settings to XML - File
-
-        Arguments:
-            file - The location for storing the current settings. The given
-                   file must be a file ending with ".xml".
-            persist_type - Parameter specifying which setting types to store.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-            ValueError if argument path is no ".xml"- File.
-         """
-
-        if not file.endswith('.xml'):
-            raise ValueError('Given file \'{}\' must end with \'.xml\''.format(file))
-
-        settings = VmbFeaturePersistSettings()
-        settings.persistType = VmbFeaturePersist(persist_type)
-
-        call_vimba_c('VmbCameraSettingsSave', self.__handle, file.encode('utf-8'), byref(settings),
-                     sizeof(settings))
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def load_settings(self, file: str, persist_type: PersistType):
-        """Load camera settings from XML file
-
-        Arguments:
-            file - The location for loading current settings. The given
-                   file must be a file ending with ".xml".
-            persist_type - Parameter specifying which setting types to load.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement scope.
-            ValueError if argument path is no ".xml" file.
-         """
-
-        if not file.endswith('.xml'):
-            raise ValueError('Given file \'{}\' must end with \'.xml\''.format(file))
-
-        if not os.path.exists(file):
-            raise ValueError('Given file \'{}\' does not exist.'.format(file))
-
-        settings = VmbFeaturePersistSettings()
-        settings.persistType = VmbFeaturePersist(persist_type)
-
-        call_vimba_c('VmbCameraSettingsLoad', self.__handle, file.encode('utf-8'), byref(settings),
-                     sizeof(settings))
-
-    @TraceEnable()
-    @EnterContextOnCall()
-    def _open(self):
-        try:
-            call_vimba_c('VmbCameraOpen', self.__info.cameraIdString, self.__access_mode,
-                         byref(self.__handle))
-
-        except VimbaCError as e:
-            err = e.get_error_code()
-
-            # In theory InvalidAccess should be thrown on using a non permitted access mode.
-            # In reality VmbError.NotImplemented_ is sometimes returned.
-            if (err == VmbError.InvalidAccess) or (err == VmbError.NotImplemented_):
-                msg = 'Accessed Camera \'{}\' with invalid Mode \'{}\'. Valid modes are: {}'
-                msg = msg.format(self.get_id(), str(self.__access_mode),
-                                 self.get_permitted_access_modes())
-                exc = VimbaCameraError(msg)
-
-            else:
-                exc = VimbaCameraError(repr(err))
-
-            raise exc from e
-
-        self.__feats = discover_features(self.__handle)
-        attach_feature_accessors(self, self.__feats)
-
-        # Determine current PacketSize (GigE - only) is somewhere between 1500 bytes
-        feat = filter_features_by_name(self.__feats, 'GVSPPacketSize')
-        if feat:
-            try:
-                min_ = 1400
-                max_ = 1600
-                size = feat.get()
-
-                if (min_ < size) and (size < max_):
-                    msg = ('Camera {}: GVSPPacketSize not optimized for streaming GigE Vision. '
-                           'Enable jumbo packets for improved performance.')
-                    Log.get_instance().info(msg.format(self.get_id()))
-
-            except VimbaFeatureError:
-                pass
-
-    @TraceEnable()
-    @LeaveContextOnCall()
-    def _close(self):
-        if self.is_streaming():
-            self.stop_streaming()
-
-        for feat in self.__feats:
-            feat.unregister_all_change_handlers()
-
-        remove_feature_accessors(self, self.__feats)
-        self.__feats = ()
-
-        call_vimba_c('VmbCameraClose', self.__handle)
-        self.__handle = VmbHandle(0)
-
-    def __frame_cb_wrapper(self, _: VmbHandle, raw_frame_ptr: VmbFrame):   # coverage: skip
-        # Skip coverage because it can't be measured. This is called from C-Context.
-
-        # ignore callback if camera has been disconnected
-        if self.__capture_fsm is None:
-            return
-
-        context = self.__capture_fsm.get_context()
-
-        with context.frames_lock:
-            raw_frame = raw_frame_ptr.contents
-            frame = None
-
-            for f in context.frames:
-                # Access Frame internals to compare if both point to the same buffer
-                if raw_frame.buffer == _frame_handle_accessor(f).buffer:
-                    frame = f
-                    break
-
-            # Execute registered handler
-            assert frame is not None
-
-            try:
-                context.frames_handler(self, frame)
-
-            except Exception as e:
-                msg = 'Caught Exception in handler: '
-                msg += 'Type: {}, '.format(type(e))
-                msg += 'Value: {}, '.format(e)
-                msg += 'raised by: {}'.format(context.frames_handler)
-                Log.get_instance().error(msg)
-                raise e
-
-
-def _setup_network_discovery():
-    if discover_feature(G_VIMBA_C_HANDLE, 'GeVTLIsPresent').get():
-        discover_feature(G_VIMBA_C_HANDLE, 'GeVDiscoveryAllDuration').set(250)
-        discover_feature(G_VIMBA_C_HANDLE, 'GeVDiscoveryAllOnce').run()
-
-
-@TraceEnable()
-def discover_cameras(network_discovery: bool) -> CamerasList:
-    """Do not call directly. Access Cameras via vimba.Vimba instead."""
-
-    if network_discovery:
-        _setup_network_discovery()
-
-    result = []
-    cams_count = VmbUint32(0)
-
-    call_vimba_c('VmbCamerasList', None, 0, byref(cams_count), 0)
-
-    if cams_count:
-        cams_found = VmbUint32(0)
-        cams_infos = (VmbCameraInfo * cams_count.value)()
-
-        call_vimba_c('VmbCamerasList', cams_infos, cams_count, byref(cams_found),
-                     sizeof(VmbCameraInfo))
-
-        for info in cams_infos[:cams_found.value]:
-            result.append(Camera(info))
-
-    return result
-
-
-@TraceEnable()
-def discover_camera(id_: str) -> Camera:
-    """Do not call directly. Access Cameras via vimba.Vimba instead."""
-
-    info = VmbCameraInfo()
-
-    # Try to lookup Camera with given ID. If this function
-    try:
-        call_vimba_c('VmbCameraInfoQuery', id_.encode('utf-8'), byref(info), sizeof(info))
-
-    except VimbaCError as e:
-        raise VimbaCameraError(str(e.get_error_code())) from e
-
-    return Camera(info)
-
-
-def _cam_handle_accessor(cam: Camera) -> VmbHandle:
-    # Supress mypi warning. This access is valid although mypi warns about it.
-    # In this case it is okay to unmangle the name because the raw handle should not be
-    # exposed.
-    return cam._Camera__handle  # type: ignore
-
-
-def _frame_handle_accessor(frame: Frame) -> VmbFrame:
-    return frame._frame
-
-
-def _build_camera_error(cam: Camera, orig_exc: VimbaCError) -> VimbaCameraError:
-    err = orig_exc.get_error_code()
-
-    if err == VmbError.ApiNotStarted:
-        msg = 'System not ready. \'{}\' accessed outside of system context. Abort.'
-        exc = cast(VimbaCameraError, VimbaSystemError(msg.format(cam.get_id())))
-
-    elif err == VmbError.DeviceNotOpen:
-        msg = 'Camera \'{}\' accessed outside of context. Abort.'
-        exc = VimbaCameraError(msg.format(cam.get_id()))
-
-    elif err == VmbError.BadHandle:
-        msg = 'Invalid Camera. \'{}\' might be disconnected. Abort.'
-        exc = VimbaCameraError(msg.format(cam.get_id()))
-
-    elif err == VmbError.InvalidAccess:
-        msg = 'Invalid Access Mode on camera \'{}\'. Abort.'
-        exc = VimbaCameraError(msg.format(cam.get_id()))
-
-    elif err == VmbError.Timeout:
-        msg = 'Frame capturing on Camera \'{}\' timed out.'
-        exc = cast(VimbaCameraError, VimbaTimeout(msg.format(cam.get_id())))
-
-    else:
-        exc = VimbaCameraError(repr(err))
-
-    return exc
diff --git a/VimbaPython/Source/vimba/error.py b/VimbaPython/Source/vimba/error.py
deleted file mode 100644
index 4c0e93062adf4668a560fd5fbb3888d119dd03ba..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/error.py
+++ /dev/null
@@ -1,95 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-from .util import Log
-
-__all__ = [
-    'VimbaSystemError',
-    'VimbaCameraError',
-    'VimbaInterfaceError',
-    'VimbaFeatureError',
-    'VimbaFrameError',
-    'VimbaTimeout'
-]
-
-
-class _LoggedError(Exception):
-    def __init__(self, msg: str):
-        super().__init__(msg)
-        Log.get_instance().error(msg)
-
-
-class VimbaSystemError(_LoggedError):
-    """Errors related to the underlying Vimba System
-
-    Error type to indicate system-wide errors like:
-    - Incomplete Vimba installation
-    - Incompatible version of the underlying C-Layer
-    - An unsupported OS
-    """
-    pass
-
-
-class VimbaCameraError(_LoggedError):
-    """Errors related to cameras
-
-    Error Type to indicated camera-related errors like:
-    - Access of a disconnected Camera object
-    - Lookup of non-existing cameras
-    """
-    pass
-
-
-class VimbaInterfaceError(_LoggedError):
-    """Errors related to Interfaces
-
-    Error Type to indicated interface-related errors like:
-    - Access on a disconnected Interface object
-    - Lookup of a non-existing Interface
-    """
-    pass
-
-
-class VimbaFeatureError(_LoggedError):
-    """Error related to Feature access.
-
-    Error type to indicate invalid Feature access like:
-    - Invalid access mode on Feature access.
-    - Out of range values upon setting a value.
-    - Failed lookup of features.
-    """
-    pass
-
-
-class VimbaFrameError(_LoggedError):
-    """Error related to Frame data"""
-    pass
-
-
-class VimbaTimeout(_LoggedError):
-    """Indicates that an operation timed out."""
-    pass
diff --git a/VimbaPython/Source/vimba/feature.py b/VimbaPython/Source/vimba/feature.py
deleted file mode 100644
index 38229c0f07ba66eadb666d18b930feb2e251254d..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/feature.py
+++ /dev/null
@@ -1,1273 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import inspect
-import enum
-import ctypes
-import threading
-
-from typing import Tuple, Union, List, Callable, Optional, cast, Type
-from .c_binding import call_vimba_c, byref, sizeof, create_string_buffer, decode_cstr, \
-                       decode_flags, build_callback_type
-from .c_binding import VmbFeatureInfo, VmbFeatureFlags, VmbUint32, VmbInt64, VmbHandle, \
-                       VmbFeatureVisibility, VmbBool, VmbFeatureEnumEntry, VmbFeatureData, \
-                       VmbError, VimbaCError, VmbDouble
-
-from .util import Log, TraceEnable, RuntimeTypeCheckEnable
-from .error import VimbaFeatureError
-
-__all__ = [
-    'ChangeHandler',
-    'FeatureFlags',
-    'FeatureVisibility',
-
-    'IntFeature',
-    'FloatFeature',
-    'StringFeature',
-    'BoolFeature',
-    'EnumEntry',
-    'EnumFeature',
-    'CommandFeature',
-    'RawFeature',
-
-    'FeatureTypes',
-    'FeatureTypeTypes',
-    'FeaturesTuple',
-    'discover_features',
-    'discover_feature',
-]
-
-
-ChangeHandler = Callable[['FeatureTypes'], None]
-
-
-class FeatureFlags(enum.IntEnum):
-    """Enumeration specifying additional information on the feature.
-
-    Enumeration values:
-        None_       - No additional information is provided
-        Read        - Static info about read access.
-        Write       - Static info about write access.
-        Volatile    - Value may change at any time
-        ModifyWrite - Value may change after a write
-    """
-
-    None_ = VmbFeatureFlags.None_
-    Read = VmbFeatureFlags.Read
-    Write = VmbFeatureFlags.Write
-    Volatile = VmbFeatureFlags.Volatile
-    ModifyWrite = VmbFeatureFlags.ModifyWrite
-
-
-class FeatureVisibility(enum.IntEnum):
-    """Enumeration specifying UI feature visibility.
-
-    Enumeration values:
-        Unknown   - Feature visibility is not known
-        Beginner  - Feature is visible in feature list (beginner level)
-        Expert    - Feature is visible in feature list (expert level)
-        Guru      - Feature is visible in feature list (guru level)
-        Invisible - Feature is not visible in feature listSu
-    """
-
-    Unknown = VmbFeatureVisibility.Unknown
-    Beginner = VmbFeatureVisibility.Beginner
-    Expert = VmbFeatureVisibility.Expert
-    Guru = VmbFeatureVisibility.Guru
-    Invisible = VmbFeatureVisibility.Invisible
-
-
-class _BaseFeature:
-    """This class provides most basic feature access functionality.
-    All FeatureType implementations must derive from BaseFeature.
-    """
-
-    def __init__(self,  handle: VmbHandle, info: VmbFeatureInfo):
-        """Do not call directly. Access Features via System, Camera or Interface Types instead."""
-        self._handle: VmbHandle = handle
-        self._info: VmbFeatureInfo = info
-
-        self.__handlers: List[ChangeHandler] = []
-        self.__handlers_lock = threading.Lock()
-
-        CallbackType = build_callback_type(None, VmbHandle, ctypes.c_char_p, ctypes.c_void_p)
-        self.__feature_callback = CallbackType(self.__feature_cb_wrapper)
-
-    def __repr__(self):
-        rep = 'Feature'
-        rep += '(_handle=' + repr(self._handle)
-        rep += ',_info=' + repr(self._info)
-        rep += ')'
-        return rep
-
-    def get_name(self) -> str:
-        """Get Feature Name, e.g. DiscoveryInterfaceEvent"""
-        return decode_cstr(self._info.name)
-
-    def get_type(self) -> Type['_BaseFeature']:
-        """Get Feature Type, e.g. IntFeature"""
-        return type(self)
-
-    def get_flags(self) -> Tuple[FeatureFlags, ...]:
-        """Get a set of FeatureFlags, e.g. (FeatureFlags.Read, FeatureFlags.Write))"""
-        val = self._info.featureFlags
-
-        # The feature flag could contain undocumented values at third bit.
-        # To prevent any issues, clear the third bit before decoding.
-        val &= ~4
-
-        return decode_flags(FeatureFlags, val)
-
-    def get_category(self) -> str:
-        """Get Feature category, e.g. '/Discovery'"""
-        return decode_cstr(self._info.category)
-
-    def get_display_name(self) -> str:
-        """Get lengthy Feature name e.g. 'Discovery Interface Event'"""
-        return decode_cstr(self._info.displayName)
-
-    def get_polling_time(self) -> int:
-        """Predefined Polling Time for volatile features."""
-        return self._info.pollingTime
-
-    def get_unit(self) -> str:
-        """Get Unit of this Feature, e.g. 'dB' on Feature 'GainAutoMax'"""
-        return decode_cstr(self._info.unit)
-
-    def get_representation(self) -> str:
-        """Representation of a numeric feature."""
-        return decode_cstr(self._info.representation)
-
-    def get_visibility(self) -> FeatureVisibility:
-        """UI visibility of this feature"""
-        return FeatureVisibility(self._info.visibility)
-
-    def get_tooltip(self) -> str:
-        """Short Feature description."""
-        return decode_cstr(self._info.tooltip)
-
-    def get_description(self) -> str:
-        """Long feature description."""
-        return decode_cstr(self._info.description)
-
-    def get_sfnc_namespace(self) -> str:
-        """This features namespace"""
-        return decode_cstr(self._info.sfncNamespace)
-
-    def is_streamable(self) -> bool:
-        """Indicates if a feature can be stored in /loaded from a file."""
-        return self._info.isStreamable
-
-    def has_affected_features(self) -> bool:
-        """Indicates if this feature can affect other features."""
-        return self._info.hasAffectedFeatures
-
-    def has_selected_features(self) -> bool:
-        """Indicates if this feature selects other features."""
-        return self._info.hasSelectedFeatures
-
-    @TraceEnable()
-    def get_access_mode(self) -> Tuple[bool, bool]:
-        """Get features current access mode.
-
-        Returns:
-            A pair of bool. In the first bool is True, read access on this Feature is granted.
-            If the second bool is True write access on this Feature is granted.
-        """
-        c_read = VmbBool(False)
-        c_write = VmbBool(False)
-
-        call_vimba_c('VmbFeatureAccessQuery', self._handle, self._info.name, byref(c_read),
-                     byref(c_write))
-
-        return (c_read.value, c_write.value)
-
-    @TraceEnable()
-    def is_readable(self) -> bool:
-        """Is read access on this Features granted?
-
-        Returns:
-            True if read access is allowed on this feature. False is returned if read access
-            is not allowed.
-        """
-        r, _ = self.get_access_mode()
-        return r
-
-    @TraceEnable()
-    def is_writeable(self) -> bool:
-        """Is write access on this Features granted?
-
-        Returns:
-            True if write access is allowed on this feature. False is returned if write access
-            is not allowed.
-        """
-        _, w = self.get_access_mode()
-        return w
-
-    @RuntimeTypeCheckEnable()
-    def register_change_handler(self, handler: ChangeHandler):
-        """Register Callable on the Feature.
-
-        The Callable will be executed as soon as the Features value changes. The first parameter
-        on a registered handler will be called with the changed feature itself. The methods
-        returns early if a given handler is already registered.
-
-        Arguments:
-            handler - The Callable that should be executed on change.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-        """
-
-        with self.__handlers_lock:
-            if handler in self.__handlers:
-                return
-
-            self.__handlers.append(handler)
-
-            if len(self.__handlers) == 1:
-                self.__register_callback()
-
-    def unregister_all_change_handlers(self):
-        """Remove all registered change handlers."""
-        with self.__handlers_lock:
-            if self.__handlers:
-                self.__unregister_callback()
-                self.__handlers.clear()
-
-    @RuntimeTypeCheckEnable()
-    def unregister_change_handler(self, handler: ChangeHandler):
-        """Remove registered Callable from the Feature.
-
-        Removes a previously registered handler from this Feature. In case the
-        handler that should be removed was never added in the first place, the method
-        returns silently.
-
-        Arguments:
-            handler - The Callable that should be removed.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-        """
-
-        with self.__handlers_lock:
-            if handler not in self.__handlers:
-                return
-
-            if len(self.__handlers) == 1:
-                self.__unregister_callback()
-
-            self.__handlers.remove(handler)
-
-    @TraceEnable()
-    def __register_callback(self):
-        call_vimba_c('VmbFeatureInvalidationRegister', self._handle, self._info.name,
-                     self.__feature_callback, None)
-
-    @TraceEnable()
-    def __unregister_callback(self):
-        call_vimba_c('VmbFeatureInvalidationUnregister', self._handle, self._info.name,
-                     self.__feature_callback)
-
-    def __feature_cb_wrapper(self, *_):   # coverage: skip
-        # Skip coverage because it can't be measured. This is called from C-Context.
-        with self.__handlers_lock:
-            for handler in self.__handlers:
-
-                try:
-                    handler(self)
-
-                except Exception as e:
-                    msg = 'Caught Exception in handler: '
-                    msg += 'Type: {}, '.format(type(e))
-                    msg += 'Value: {}, '.format(e)
-                    msg += 'raised by: {}'.format(handler)
-                    Log.get_instance().error(msg)
-                    raise e
-
-    def _build_access_error(self) -> VimbaFeatureError:
-        caller_name = inspect.stack()[1][3]
-        read, write = self.get_access_mode()
-
-        msg = 'Invalid access while calling \'{}()\' of Feature \'{}\'. '
-
-        msg += 'Read access: {}. '.format('allowed' if read else 'not allowed')
-        msg += 'Write access: {}. '.format('allowed' if write else 'not allowed')
-
-        return VimbaFeatureError(msg.format(caller_name, self.get_name()))
-
-    def _build_within_callback_error(self) -> VimbaFeatureError:
-        caller_name = inspect.stack()[1][3]
-        msg = 'Invalid access. Calling \'{}()\' of Feature \'{}\' in change_handler is invalid.'
-
-        return VimbaFeatureError(msg.format(caller_name, self.get_name()))
-
-    def _build_unhandled_error(self, c_exc: VimbaCError) -> VimbaFeatureError:
-        return VimbaFeatureError(repr(c_exc.get_error_code()))
-
-
-class BoolFeature(_BaseFeature):
-    """The BoolFeature is a feature represented by a boolean value."""
-
-    @TraceEnable()
-    def __init__(self, handle: VmbHandle, info: VmbFeatureInfo):
-        """Do not call directly. Instead, access Features via System, Camera, or Interface Types."""
-        super().__init__(handle, info)
-
-    def __str__(self):
-        try:
-            return 'BoolFeature(name={}, value={})'.format(self.get_name(), self.get())
-
-        except Exception:
-            return 'BoolFeature(name={})'.format(self.get_name())
-
-    @TraceEnable()
-    def get(self) -> bool:
-        """Get current feature value of type bool.
-
-        Returns:
-            Feature value of type bool.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        c_val = VmbBool(False)
-
-        try:
-            call_vimba_c('VmbFeatureBoolGet', self._handle, self._info.name, byref(c_val))
-
-        except VimbaCError as e:
-            err = e.get_error_code()
-            if err == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return c_val.value
-
-    @TraceEnable()
-    def set(self, val):
-        """Set current feature value of type bool.
-
-        Arguments:
-            val - The boolean value to set.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-            VimbaFeatureError if called with an invalid value.
-            VimbaFeatureError if executed within a registered change_handler.
-        """
-        as_bool = bool(val)
-
-        try:
-            call_vimba_c('VmbFeatureBoolSet', self._handle, self._info.name, as_bool)
-
-        except VimbaCError as e:
-            err = e.get_error_code()
-
-            if err == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            elif err == VmbError.InvalidValue:
-                exc = self._build_value_error(as_bool)
-
-            elif err == VmbError.InvalidCall:
-                exc = self._build_within_callback_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-    def _build_value_error(self, val: bool) -> VimbaFeatureError:
-        caller_name = inspect.stack()[1][3]
-        msg = 'Called \'{}()\' of Feature \'{}\' with invalid value({}).'
-
-        return VimbaFeatureError(msg.format(caller_name, self.get_name(), val))
-
-
-class CommandFeature(_BaseFeature):
-    """The CommandFeature is a feature that can perform some kind of operation such as
-    saving a user set.
-    """
-
-    @TraceEnable()
-    def __init__(self, handle: VmbHandle, info: VmbFeatureInfo):
-        """Do not call directly. Instead, access Features via System, Camera, or Interface types."""
-        super().__init__(handle, info)
-
-    def __str__(self):
-        return 'CommandFeature(name={})'.format(self.get_name())
-
-    @TraceEnable()
-    def run(self):
-        """Execute command feature.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        try:
-            call_vimba_c('VmbFeatureCommandRun', self._handle, self._info.name)
-
-        except VimbaCError as e:
-            exc = cast(VimbaFeatureError, e)
-
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-    @TraceEnable()
-    def is_done(self) -> bool:
-        """Test if a feature execution is done.
-
-        Returns:
-            True if feature was fully executed. False if the feature is still being executed.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        c_val = VmbBool(False)
-
-        try:
-            call_vimba_c('VmbFeatureCommandIsDone', self._handle, self._info.name, byref(c_val))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return c_val.value
-
-
-class EnumEntry:
-    """An EnumEntry represents a single value of an EnumFeature. A EnumEntry
-    is a one-to-one association between a str and an int.
-    """
-    @TraceEnable()
-    def __init__(self, handle: VmbHandle, feat_name: str, info: VmbFeatureEnumEntry):
-        """Do not call directly. Instead, access EnumEntries via EnumFeatures."""
-        self.__handle: VmbHandle = handle
-        self.__feat_name: str = feat_name
-        self.__info: VmbFeatureEnumEntry = info
-
-    def __str__(self):
-        """Get EnumEntry as str"""
-        return bytes(self).decode()
-
-    def __int__(self):
-        """Get EnumEntry as int"""
-        return self.__info.intValue
-
-    def __bytes__(self):
-        """Get EnumEntry as bytes"""
-        return self.__info.name
-
-    def as_tuple(self) -> Tuple[str, int]:
-        """Get EnumEntry in str and int representation"""
-        return (str(self), int(self))
-
-    @TraceEnable()
-    def is_available(self) -> bool:
-        """Query if the EnumEntry can currently be used as a value.
-
-        Returns:
-            True if the EnumEntry can be used as a value, otherwise False.
-        """
-
-        c_val = VmbBool(False)
-
-        call_vimba_c('VmbFeatureEnumIsAvailable', self.__handle, self.__feat_name, self.__info.name,
-                     byref(c_val))
-
-        return c_val.value
-
-
-EnumEntryTuple = Tuple[EnumEntry, ...]
-
-
-class EnumFeature(_BaseFeature):
-    """The EnumFeature is a feature where only EnumEntry values are allowed.
-    All possible values of an EnumFeature can be queried through the Feature itself.
-    """
-
-    @TraceEnable()
-    def __init__(self, handle: VmbHandle, info: VmbFeatureInfo):
-        """Do not call directly. Instead, access Features via System, Camera, or Interface Types."""
-        super().__init__(handle, info)
-
-        self.__entries: EnumEntryTuple = _discover_enum_entries(self._handle, self._info.name)
-
-    def __str__(self):
-        try:
-            return 'EnumFeature(name={}, value={})'.format(self.get_name(), str(self.get()))
-
-        except Exception:
-            return 'EnumFeature(name={})'.format(self.get_name())
-
-    def get_all_entries(self) -> EnumEntryTuple:
-        """Get a set of all possible EnumEntries of this feature."""
-        return self.__entries
-
-    @TraceEnable()
-    def get_available_entries(self) -> EnumEntryTuple:
-        """Get a set of all currently available EnumEntries of this feature."""
-        return tuple([e for e in self.get_all_entries() if e.is_available()])
-
-    def get_entry(self, val_or_name: Union[int, str]) -> EnumEntry:
-        """Get a specific EnumEntry.
-
-        Arguments:
-            val_or_name: Look up EnumEntry either by its name or its associated value.
-
-        Returns:
-            EnumEntry associated with Argument 'val_or_name'.
-
-        Raises:
-            TypeError if int_or_name it not of type int or type str.
-            VimbaFeatureError if no EnumEntry is associated with 'val_or_name'
-        """
-        for entry in self.__entries:
-            if type(val_or_name)(entry) == val_or_name:
-                return entry
-
-        msg = 'EnumEntry lookup failed: No Entry associated with \'{}\'.'.format(val_or_name)
-        raise VimbaFeatureError(msg)
-
-    @TraceEnable()
-    def get(self) -> EnumEntry:
-        """Get current feature value of type EnumEntry.
-
-        Returns:
-            Feature value of type 'EnumEntry'.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        c_val = ctypes.c_char_p(None)
-
-        try:
-            call_vimba_c('VmbFeatureEnumGet', self._handle, self._info.name, byref(c_val))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return self.get_entry(c_val.value.decode() if c_val.value else '')
-
-    @TraceEnable()
-    def set(self, val: Union[int, str, EnumEntry]):
-        """Set current feature value of type EnumFeature.
-
-        Arguments:
-            val - The value to set. Can be int, or str, or EnumEntry.
-
-        Raises:
-            VimbaFeatureError if val is of type int or str and does not match an EnumEntry.
-            VimbaFeatureError if access rights are not sufficient.
-            VimbaFeatureError if executed within a registered change_handler.
-        """
-        if type(val) in (EnumEntry, str):
-            as_entry = self.get_entry(str(val))
-
-        else:
-            as_entry = self.get_entry(int(val))
-
-        try:
-            call_vimba_c('VmbFeatureEnumSet', self._handle, self._info.name, bytes(as_entry))
-
-        except VimbaCError as e:
-            err = e.get_error_code()
-
-            if err == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            elif err == VmbError.InvalidCall:
-                exc = self._build_within_callback_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-
-@TraceEnable()
-def _discover_enum_entries(handle: VmbHandle, feat_name: str) -> EnumEntryTuple:
-    result = []
-    enums_count = VmbUint32(0)
-
-    call_vimba_c('VmbFeatureEnumRangeQuery', handle, feat_name, None, 0, byref(enums_count))
-
-    if enums_count.value:
-        enums_found = VmbUint32(0)
-        enums_names = (ctypes.c_char_p * enums_count.value)()
-
-        call_vimba_c('VmbFeatureEnumRangeQuery', handle, feat_name, enums_names, enums_count,
-                     byref(enums_found))
-
-        for enum_name in enums_names[:enums_found.value]:
-            enum_info = VmbFeatureEnumEntry()
-
-            call_vimba_c('VmbFeatureEnumEntryGet', handle, feat_name, enum_name, byref(enum_info),
-                         sizeof(VmbFeatureEnumEntry))
-
-            result.append(EnumEntry(handle, feat_name, enum_info))
-
-    return tuple(result)
-
-
-class FloatFeature(_BaseFeature):
-    """The FloatFeature is a feature represented by a floating number."""
-
-    @TraceEnable()
-    def __init__(self, handle: VmbHandle, info: VmbFeatureInfo):
-        """Do not call directly. Instead, access Features via System, Camera, or Interface Types."""
-        super().__init__(handle, info)
-
-    def __str__(self):
-        try:
-            msg = 'FloatFeature(name={}, value={}, range={}, increment={})'
-            return msg.format(self.get_name(), self.get(), self.get_range(), self.get_increment())
-
-        except Exception:
-            return 'FloatFeature(name={})'.format(self.get_name())
-
-    @TraceEnable()
-    def get(self) -> float:
-        """Get current value (float).
-
-        Returns:
-            Current float value.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        c_val = VmbDouble(0.0)
-
-        try:
-            call_vimba_c('VmbFeatureFloatGet', self._handle, self._info.name, byref(c_val))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return c_val.value
-
-    @TraceEnable()
-    def get_range(self) -> Tuple[float, float]:
-        """Get range of accepted values
-
-        Returns:
-            A pair of range boundaries. First value is the minimum, second value is the maximum.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        c_min = VmbDouble(0.0)
-        c_max = VmbDouble(0.0)
-
-        try:
-            call_vimba_c('VmbFeatureFloatRangeQuery', self._handle, self._info.name, byref(c_min),
-                         byref(c_max))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return (c_min.value, c_max.value)
-
-    @TraceEnable()
-    def get_increment(self) -> Optional[float]:
-        """Get increment (steps between valid values, starting from minimum value).
-
-        Returns:
-            The increment or None if the feature currently has no increment.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        c_has_val = VmbBool(False)
-        c_val = VmbDouble(False)
-
-        try:
-            call_vimba_c('VmbFeatureFloatIncrementQuery', self._handle, self._info.name,
-                         byref(c_has_val), byref(c_val))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return c_val.value if c_has_val else None
-
-    @TraceEnable()
-    def set(self, val: float):
-        """Set current value of type float.
-
-        Arguments:
-            val - The float value to set.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-            VimbaFeatureError if value is out of bounds.
-            VimbaFeatureError if executed within a registered change_handler.
-        """
-        as_float = float(val)
-
-        try:
-            call_vimba_c('VmbFeatureFloatSet', self._handle, self._info.name, as_float)
-
-        except VimbaCError as e:
-            err = e.get_error_code()
-
-            if err == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            elif err == VmbError.InvalidValue:
-                exc = self._build_value_error(as_float)
-
-            elif err == VmbError.InvalidCall:
-                exc = self._build_within_callback_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-    def _build_value_error(self, val: float) -> VimbaFeatureError:
-        caller_name = inspect.stack()[1][3]
-        min_, max_ = self.get_range()
-
-        # Value Errors for float mean always out-of-bounds
-        msg = 'Called \'{}()\' of Feature \'{}\' with invalid value. {} is not within [{}, {}].'
-        msg = msg.format(caller_name, self.get_name(), val, min_, max_)
-
-        return VimbaFeatureError(msg)
-
-
-class IntFeature(_BaseFeature):
-    """The IntFeature is a feature represented by an integer."""
-
-    @TraceEnable()
-    def __init__(self, handle: VmbHandle, info: VmbFeatureInfo):
-        """Do not call directly. Instead, access Features via System, Camera, or Interface Types."""
-        super().__init__(handle, info)
-
-    def __str__(self):
-        try:
-            msg = 'IntFeature(name={}, value={}, range={}, increment={})'
-            return msg.format(self.get_name(), self.get(), self.get_range(), self.get_increment())
-
-        except Exception:
-            return 'IntFeature(name={})'.format(self.get_name())
-
-    @TraceEnable()
-    def get(self) -> int:
-        """Get current value (int).
-
-        Returns:
-            Current int value.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        c_val = VmbInt64()
-
-        try:
-            call_vimba_c('VmbFeatureIntGet', self._handle, self._info.name, byref(c_val))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return c_val.value
-
-    @TraceEnable()
-    def get_range(self) -> Tuple[int, int]:
-        """Get range of accepted values.
-
-        Returns:
-            A pair of range boundaries. First value is the minimum, second value is the maximum.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        c_min = VmbInt64()
-        c_max = VmbInt64()
-
-        try:
-            call_vimba_c('VmbFeatureIntRangeQuery', self._handle, self._info.name, byref(c_min),
-                         byref(c_max))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return (c_min.value, c_max.value)
-
-    @TraceEnable()
-    def get_increment(self) -> int:
-        """Get increment (steps between valid values, starting from minimal values).
-
-        Returns:
-            The increment of this feature.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        c_val = VmbInt64()
-
-        try:
-            call_vimba_c('VmbFeatureIntIncrementQuery', self._handle, self._info.name, byref(c_val))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return c_val.value
-
-    @TraceEnable()
-    def set(self, val: int):
-        """Set current value of type int.
-
-        Arguments:
-            val - The int value to set.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-            VimbaFeatureError if value is out of bounds or misaligned to the increment.
-            VimbaFeatureError if executed within a registered change_handler.
-        """
-        as_int = int(val)
-
-        try:
-            call_vimba_c('VmbFeatureIntSet', self._handle, self._info.name, as_int)
-
-        except VimbaCError as e:
-            err = e.get_error_code()
-
-            if err == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            elif err == VmbError.InvalidValue:
-                exc = self._build_value_error(as_int)
-
-            elif err == VmbError.InvalidCall:
-                exc = self._build_within_callback_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-    def _build_value_error(self, val) -> VimbaFeatureError:
-        caller_name = inspect.stack()[1][3]
-        min_, max_ = self.get_range()
-
-        msg = 'Called \'{}()\' of Feature \'{}\' with invalid value. '
-
-        # Value out of bounds
-        if (val < min_) or (max_ < val):
-            msg += '{} is not within [{}, {}].'.format(val, min_, max_)
-
-        # Misaligned value
-        else:
-            inc = self.get_increment()
-            msg += '{} is not a multiple of {}, starting at {}'.format(val, inc, min_)
-
-        return VimbaFeatureError(msg.format(caller_name, self.get_name()))
-
-
-class RawFeature(_BaseFeature):
-    """The RawFeature is a feature represented by sequence of bytes."""
-
-    @TraceEnable()
-    def __init__(self, handle: VmbHandle, info: VmbFeatureInfo):
-        """Do not call directly. Instead, access Features via System, Camera, or Interface Types."""
-        super().__init__(handle, info)
-
-    def __str__(self):
-        try:
-            msg = 'RawFeature(name={}, value={}, length={})'
-            return msg.format(self.get_name(), self.get(), self.length())
-
-        except Exception:
-            return 'RawFeature(name={})'.format(self.get_name())
-
-    @TraceEnable()
-    def get(self) -> bytes:  # coverage: skip
-        """Get current value as a sequence of bytes
-
-        Returns:
-            Current value.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        # Note: Coverage is skipped. RawFeature is not testable in a generic way
-        c_buf_avail = VmbUint32()
-        c_buf_len = self.length()
-        c_buf = create_string_buffer(c_buf_len)
-
-        try:
-            call_vimba_c('VmbFeatureRawGet', self._handle, self._info.name, c_buf, c_buf_len,
-                         byref(c_buf_avail))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return c_buf.raw[:c_buf_avail.value]
-
-    @TraceEnable()
-    def set(self, buf: bytes):  # coverage: skip
-        """Set current value as a sequence of bytes.
-
-        Arguments:
-            val - The value to set.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-            VimbaFeatureError if executed within a registered change_handler.
-        """
-        # Note: Coverage is skipped. RawFeature is not testable in a generic way
-        as_bytes = bytes(buf)
-
-        try:
-            call_vimba_c('VmbFeatureRawSet', self._handle, self._info.name, as_bytes, len(as_bytes))
-
-        except VimbaCError as e:
-            err = e.get_error_code()
-
-            if err == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            elif err == VmbError.InvalidCall:
-                exc = self._build_within_callback_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-    @TraceEnable()
-    def length(self) -> int:  # coverage: skip
-        """Get length of byte sequence representing the value.
-
-        Returns:
-            Length of current value.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        # Note: Coverage is skipped. RawFeature is not testable in a generic way
-        c_val = VmbUint32()
-
-        try:
-            call_vimba_c('VmbFeatureRawLengthQuery', self._handle, self._info.name,
-                         byref(c_val))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return c_val.value
-
-
-class StringFeature(_BaseFeature):
-    """The StringFeature is a feature represented by a string."""
-
-    @TraceEnable()
-    def __init__(self, handle: VmbHandle, info: VmbFeatureInfo):
-        """Do not call directly. Instead, access Features via System, Camera or Interface Types."""
-        super().__init__(handle, info)
-
-    def __str__(self):
-        try:
-            msg = 'StringFeature(name={}, value={}, max_length={})'
-            return msg.format(self.get_name(), self.get(), self.get_max_length())
-
-        except Exception:
-            return 'StringFeature(name={})'.format(self.get_name())
-
-    @TraceEnable()
-    def get(self) -> str:
-        """Get current value (str)
-
-        Returns:
-            Current str value.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        c_buf_len = VmbUint32(0)
-
-        # Query buffer length
-        try:
-            call_vimba_c('VmbFeatureStringGet', self._handle, self._info.name, None, 0,
-                         byref(c_buf_len))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        c_buf = create_string_buffer(c_buf_len.value)
-
-        # Copy string from C-Layer
-        try:
-            call_vimba_c('VmbFeatureStringGet', self._handle, self._info.name, c_buf, c_buf_len,
-                         None)
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return c_buf.value.decode()
-
-    @TraceEnable()
-    def set(self, val: str):
-        """Set current value of type str.
-
-        Arguments:
-            val - The str value to set.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-            VimbaFeatureError if val exceeds the maximum string length.
-            VimbaFeatureError if executed within a registered change_handler.
-        """
-        as_str = str(val)
-
-        try:
-            call_vimba_c('VmbFeatureStringSet', self._handle, self._info.name,
-                         as_str.encode('utf8'))
-
-        except VimbaCError as e:
-            err = e.get_error_code()
-
-            if err == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            elif err == VmbError.InvalidValue:
-                exc = self.__build_value_error(as_str)
-
-            elif err == VmbError.InvalidCall:
-                exc = self._build_within_callback_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-    @TraceEnable()
-    def get_max_length(self) -> int:
-        """Get maximum string length the Feature can store.
-
-        In this context, string length does not mean the number of characters, it means
-        the number of bytes after encoding. A string encoded in UTF-8 could exceed
-        the maximum length.
-
-        Returns:
-            The number of ASCII characters the Feature can store.
-
-        Raises:
-            VimbaFeatureError if access rights are not sufficient.
-        """
-        c_max_len = VmbUint32(0)
-
-        try:
-            call_vimba_c('VmbFeatureStringMaxlengthQuery', self._handle, self._info.name,
-                         byref(c_max_len))
-
-        except VimbaCError as e:
-            if e.get_error_code() == VmbError.InvalidAccess:
-                exc = self._build_access_error()
-
-            else:
-                exc = self._build_unhandled_error(e)
-
-            raise exc from e
-
-        return c_max_len.value
-
-    def __build_value_error(self, val: str) -> VimbaFeatureError:
-        caller_name = inspect.stack()[1][3]
-        val_as_bytes = val.encode('utf8')
-        max_len = self.get_max_length()
-
-        msg = 'Called \'{}()\' of Feature \'{}\' with invalid value. \'{}\' > max length \'{}\'.'
-
-        return VimbaFeatureError(msg.format(caller_name, self.get_name(), val_as_bytes, max_len))
-
-
-FeatureTypes = Union[IntFeature, FloatFeature, StringFeature, BoolFeature, EnumFeature,
-                     CommandFeature, RawFeature]
-
-FeatureTypeTypes = Union[Type[IntFeature], Type[FloatFeature], Type[StringFeature],
-                         Type[BoolFeature], Type[EnumFeature], Type[CommandFeature],
-                         Type[RawFeature]]
-
-FeaturesTuple = Tuple[FeatureTypes, ...]
-
-
-def _build_feature(handle: VmbHandle, info: VmbFeatureInfo) -> FeatureTypes:
-    feat_value = VmbFeatureData(info.featureDataType)
-
-    if VmbFeatureData.Int == feat_value:
-        feat = IntFeature(handle, info)
-
-    elif VmbFeatureData.Float == feat_value:
-        feat = FloatFeature(handle, info)
-
-    elif VmbFeatureData.String == feat_value:
-        feat = StringFeature(handle, info)
-
-    elif VmbFeatureData.Bool == feat_value:
-        feat = BoolFeature(handle, info)
-
-    elif VmbFeatureData.Enum == feat_value:
-        feat = EnumFeature(handle, info)
-
-    elif VmbFeatureData.Command == feat_value:
-        feat = CommandFeature(handle, info)
-
-    else:
-        feat = RawFeature(handle, info)
-
-    return feat
-
-
-@TraceEnable()
-def discover_features(handle: VmbHandle) -> FeaturesTuple:
-    """Discover all features associated with the given handle.
-
-    Arguments:
-        handle - Vimba entity used to find the associated features.
-
-    Returns:
-        A set of all discovered Features associated with handle.
-    """
-    result = []
-
-    feats_count = VmbUint32(0)
-
-    call_vimba_c('VmbFeaturesList', handle, None, 0, byref(feats_count), sizeof(VmbFeatureInfo))
-
-    if feats_count:
-        feats_found = VmbUint32(0)
-        feats_infos = (VmbFeatureInfo * feats_count.value)()
-
-        call_vimba_c('VmbFeaturesList', handle, feats_infos, feats_count, byref(feats_found),
-                     sizeof(VmbFeatureInfo))
-
-        for info in feats_infos[:feats_found.value]:
-            result.append(_build_feature(handle, info))
-
-    return tuple(result)
-
-
-@TraceEnable()
-def discover_feature(handle: VmbHandle, feat_name: str) -> FeatureTypes:
-    """Discover a singe feature associated with the given handle.
-
-    Arguments:
-        handle     - Vimba entity used to find the associated feature.
-        feat_name: - Name of the Feature that should be searched.
-
-    Returns:
-        The Feature associated with 'handle' by the name of 'feat_name'
-    """
-    info = VmbFeatureInfo()
-
-    call_vimba_c('VmbFeatureInfoQuery', handle, feat_name.encode('utf-8'), byref(info),
-                 sizeof(VmbFeatureInfo))
-
-    return _build_feature(handle, info)
diff --git a/VimbaPython/Source/vimba/frame.py b/VimbaPython/Source/vimba/frame.py
deleted file mode 100644
index 0a267cb7fb8a5ef3c986f30bf51859226d3ee2f5..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/frame.py
+++ /dev/null
@@ -1,923 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import enum
-import ctypes
-import copy
-import functools
-
-from typing import Optional, Tuple
-from .c_binding import byref, sizeof, decode_flags
-from .c_binding import call_vimba_c, call_vimba_image_transform, VmbFrameStatus, VmbFrameFlags, \
-                       VmbFrame, VmbHandle, VmbPixelFormat, VmbImage, VmbDebayerMode, \
-                       VmbTransformInfo, PIXEL_FORMAT_CONVERTIBILITY_MAP, PIXEL_FORMAT_TO_LAYOUT
-from .feature import FeaturesTuple, FeatureTypes, FeatureTypeTypes, discover_features
-from .shared import filter_features_by_name, filter_features_by_type, filter_features_by_category, \
-                    attach_feature_accessors, remove_feature_accessors
-from .util import TraceEnable, RuntimeTypeCheckEnable, EnterContextOnCall, LeaveContextOnCall, \
-                  RaiseIfOutsideContext
-from .error import VimbaFrameError, VimbaFeatureError
-
-try:
-    import numpy  # type: ignore
-
-except ModuleNotFoundError:
-    numpy = None  # type: ignore
-
-
-__all__ = [
-    'PixelFormat',
-    'MONO_PIXEL_FORMATS',
-    'BAYER_PIXEL_FORMATS',
-    'RGB_PIXEL_FORMATS',
-    'RGBA_PIXEL_FORMATS',
-    'BGR_PIXEL_FORMATS',
-    'BGRA_PIXEL_FORMATS',
-    'YUV_PIXEL_FORMATS',
-    'YCBCR_PIXEL_FORMATS',
-    'COLOR_PIXEL_FORMATS',
-    'OPENCV_PIXEL_FORMATS',
-    'FrameStatus',
-    'Debayer',
-    'Frame',
-    'FrameTuple',
-    'FormatTuple',
-    'intersect_pixel_formats'
-]
-
-
-# Forward declarations
-FrameTuple = Tuple['Frame', ...]
-FormatTuple = Tuple['PixelFormat', ...]
-
-
-class PixelFormat(enum.IntEnum):
-    """Enum specifying all PixelFormats. Note: Not all Cameras support all Pixelformats.
-
-    Mono formats:
-        Mono8        - Monochrome, 8 bits (PFNC:Mono8)
-        Mono10       - Monochrome, 10 bits in 16 bits (PFNC:Mono10)
-        Mono10p      - Monochrome, 4x10 bits continuously packed in 40 bits
-                       (PFNC:Mono10p)
-        Mono12       - Monochrome, 12 bits in 16 bits (PFNC:Mono12)
-        Mono12Packed - Monochrome, 2x12 bits in 24 bits (GEV:Mono12Packed)
-        Mono12p      - Monochrome, 2x12 bits continuously packed in 24 bits
-                       (PFNC:Mono12p)
-        Mono14       - Monochrome, 14 bits in 16 bits (PFNC:Mono14)
-        Mono16       - Monochrome, 16 bits (PFNC:Mono16)
-
-    Bayer formats:
-        BayerGR8        - Bayer-color, 8 bits, starting with GR line
-                          (PFNC:BayerGR8)
-        BayerRG8        - Bayer-color, 8 bits, starting with RG line
-                          (PFNC:BayerRG8)
-        BayerGB8        - Bayer-color, 8 bits, starting with GB line
-                          (PFNC:BayerGB8)
-        BayerBG8        - Bayer-color, 8 bits, starting with BG line
-                          (PFNC:BayerBG8)
-        BayerGR10       - Bayer-color, 10 bits in 16 bits, starting with GR
-                          line (PFNC:BayerGR10)
-        BayerRG10       - Bayer-color, 10 bits in 16 bits, starting with RG
-                          line (PFNC:BayerRG10)
-        BayerGB10       - Bayer-color, 10 bits in 16 bits, starting with GB
-                          line (PFNC:BayerGB10)
-        BayerBG10       - Bayer-color, 10 bits in 16 bits, starting with BG
-                          line (PFNC:BayerBG10)
-        BayerGR12       - Bayer-color, 12 bits in 16 bits, starting with GR
-                          line (PFNC:BayerGR12)
-        BayerRG12       - Bayer-color, 12 bits in 16 bits, starting with RG
-                          line (PFNC:BayerRG12)
-        BayerGB12       - Bayer-color, 12 bits in 16 bits, starting with GB
-                          line (PFNC:BayerGB12)
-        BayerBG12       - Bayer-color, 12 bits in 16 bits, starting with BG
-                          line (PFNC:BayerBG12)
-        BayerGR12Packed - Bayer-color, 2x12 bits in 24 bits, starting with GR
-                          line (GEV:BayerGR12Packed)
-        BayerRG12Packed - Bayer-color, 2x12 bits in 24 bits, starting with RG
-                          line (GEV:BayerRG12Packed)
-        BayerGB12Packed - Bayer-color, 2x12 bits in 24 bits, starting with GB
-                          line (GEV:BayerGB12Packed)
-        BayerBG12Packed - Bayer-color, 2x12 bits in 24 bits, starting with BG
-                          line (GEV:BayerBG12Packed)
-        BayerGR10p      - Bayer-color, 4x10 bits continuously packed in 40
-                          bits, starting with GR line (PFNC:BayerGR10p)
-        BayerRG10p      - Bayer-color, 4x10 bits continuously packed in 40
-                          bits, starting with RG line (PFNC:BayerRG10p)
-        BayerGB10p      - Bayer-color, 4x10 bits continuously packed in 40
-                          bits, starting with GB line (PFNC:BayerGB10p)
-        BayerBG10p      - Bayer-color, 4x10 bits continuously packed in 40
-                          bits, starting with BG line (PFNC:BayerBG10p)
-        BayerGR12p      - Bayer-color, 2x12 bits continuously packed in 24
-                          bits, starting with GR line (PFNC:BayerGR12p)
-        BayerRG12p      - Bayer-color, 2x12 bits continuously packed in 24
-                          bits, starting with RG line (PFNC:BayerRG12p)
-        BayerGB12p      - Bayer-color, 2x12 bits continuously packed in 24
-                          bits, starting with GB line (PFNC:BayerGB12p)
-        BayerBG12p      - Bayer-color, 2x12 bits continuously packed in 24
-                          bits, starting with BG line (PFNC:BayerBG12p)
-        BayerGR16       - Bayer-color, 16 bits, starting with GR line
-                          (PFNC:BayerGR16)
-        BayerRG16       - Bayer-color, 16 bits, starting with RG line
-                          (PFNC:BayerRG16)
-        BayerGB16       - Bayer-color, 16 bits, starting with GB line
-                          (PFNC:BayerGB16)
-        BayerBG16       - Bayer-color, 16 bits, starting with BG line
-                          (PFNC:BayerBG16)
-
-    RGB formats:
-        Rgb8  - RGB, 8 bits x 3 (PFNC:RGB8)
-        Bgr8  - BGR, 8 bits x 3 (PFNC:Bgr8)
-        Rgb10 - RGB, 10 bits in 16 bits x 3 (PFNC:RGB10)
-        Bgr10 - BGR, 10 bits in 16 bits x 3 (PFNC:BGR10)
-        Rgb12 - RGB, 12 bits in 16 bits x 3 (PFNC:RGB12)
-        Bgr12 - BGR, 12 bits in 16 bits x 3 (PFNC:BGR12)
-        Rgb14 - RGB, 14 bits in 16 bits x 3 (PFNC:RGB14)
-        Bgr14 - BGR, 14 bits in 16 bits x 3 (PFNC:BGR14)
-        Rgb16 - RGB, 16 bits x 3 (PFNC:RGB16)
-        Bgr16 - BGR, 16 bits x 3 (PFNC:BGR16)
-
-    RGBA formats:
-        Argb8  - ARGB, 8 bits x 4 (PFNC:RGBa8)
-        Rgba8  - RGBA, 8 bits x 4, legacy name
-        Bgra8  - BGRA, 8 bits x 4 (PFNC:BGRa8)
-        Rgba10 - RGBA, 10 bits in 16 bits x 4
-        Bgra10 - BGRA, 10 bits in 16 bits x 4
-        Rgba12 - RGBA, 12 bits in 16 bits x 4
-        Bgra12 - BGRA, 12 bits in 16 bits x 4
-        Rgba14 - RGBA, 14 bits in 16 bits x 4
-        Bgra14 - BGRA, 14 bits in 16 bits x 4
-        Rgba16 - RGBA, 16 bits x 4
-        Bgra16 - BGRA, 16 bits x 4
-
-    YUV/YCbCr formats:
-        Yuv411              -  YUV 411 with 8 bits (GEV:YUV411Packed)
-        Yuv422              -  YUV 422 with 8 bits (GEV:YUV422Packed)
-        Yuv444              -  YUV 444 with 8 bits (GEV:YUV444Packed)
-        YCbCr411_8_CbYYCrYY -  Y´CbCr 411 with 8 bits
-                               (PFNC:YCbCr411_8_CbYYCrYY) - identical to Yuv411
-        YCbCr422_8_CbYCrY   -  Y´CbCr 422 with 8 bits
-                               (PFNC:YCbCr422_8_CbYCrY) - identical to Yuv422
-        YCbCr8_CbYCr        -  Y´CbCr 444 with 8 bits
-                               (PFNC:YCbCr8_CbYCr) - identical to Yuv444
-    """
-    # Mono Formats
-    Mono8 = VmbPixelFormat.Mono8
-    Mono10 = VmbPixelFormat.Mono10
-    Mono10p = VmbPixelFormat.Mono10p
-    Mono12 = VmbPixelFormat.Mono12
-    Mono12Packed = VmbPixelFormat.Mono12Packed
-    Mono12p = VmbPixelFormat.Mono12p
-    Mono14 = VmbPixelFormat.Mono14
-    Mono16 = VmbPixelFormat.Mono16
-
-    # Bayer Formats
-    BayerGR8 = VmbPixelFormat.BayerGR8
-    BayerRG8 = VmbPixelFormat.BayerRG8
-    BayerGB8 = VmbPixelFormat.BayerGB8
-    BayerBG8 = VmbPixelFormat.BayerBG8
-    BayerGR10 = VmbPixelFormat.BayerGR10
-    BayerRG10 = VmbPixelFormat.BayerRG10
-    BayerGB10 = VmbPixelFormat.BayerGB10
-    BayerBG10 = VmbPixelFormat.BayerBG10
-    BayerGR12 = VmbPixelFormat.BayerGR12
-    BayerRG12 = VmbPixelFormat.BayerRG12
-    BayerGB12 = VmbPixelFormat.BayerGB12
-    BayerBG12 = VmbPixelFormat.BayerBG12
-    BayerGR12Packed = VmbPixelFormat.BayerGR12Packed
-    BayerRG12Packed = VmbPixelFormat.BayerRG12Packed
-    BayerGB12Packed = VmbPixelFormat.BayerGB12Packed
-    BayerBG12Packed = VmbPixelFormat.BayerBG12Packed
-    BayerGR10p = VmbPixelFormat.BayerGR10p
-    BayerRG10p = VmbPixelFormat.BayerRG10p
-    BayerGB10p = VmbPixelFormat.BayerGB10p
-    BayerBG10p = VmbPixelFormat.BayerBG10p
-    BayerGR12p = VmbPixelFormat.BayerGR12p
-    BayerRG12p = VmbPixelFormat.BayerRG12p
-    BayerGB12p = VmbPixelFormat.BayerGB12p
-    BayerBG12p = VmbPixelFormat.BayerBG12p
-    BayerGR16 = VmbPixelFormat.BayerGR16
-    BayerRG16 = VmbPixelFormat.BayerRG16
-    BayerGB16 = VmbPixelFormat.BayerGB16
-    BayerBG16 = VmbPixelFormat.BayerBG16
-
-    # RGB Formats
-    Rgb8 = VmbPixelFormat.Rgb8
-    Bgr8 = VmbPixelFormat.Bgr8
-    Rgb10 = VmbPixelFormat.Rgb10
-    Bgr10 = VmbPixelFormat.Bgr10
-    Rgb12 = VmbPixelFormat.Rgb12
-    Bgr12 = VmbPixelFormat.Bgr12
-    Rgb14 = VmbPixelFormat.Rgb14
-    Bgr14 = VmbPixelFormat.Bgr14
-    Rgb16 = VmbPixelFormat.Rgb16
-    Bgr16 = VmbPixelFormat.Bgr16
-
-    # RGBA Formats
-    Rgba8 = VmbPixelFormat.Rgba8
-    Bgra8 = VmbPixelFormat.Bgra8
-    Argb8 = VmbPixelFormat.Argb8
-    Rgba10 = VmbPixelFormat.Rgba10
-    Bgra10 = VmbPixelFormat.Bgra10
-    Rgba12 = VmbPixelFormat.Rgba12
-    Bgra12 = VmbPixelFormat.Bgra12
-    Rgba14 = VmbPixelFormat.Rgba14
-    Bgra14 = VmbPixelFormat.Bgra14
-    Rgba16 = VmbPixelFormat.Rgba16
-    Bgra16 = VmbPixelFormat.Bgra16
-    Yuv411 = VmbPixelFormat.Yuv411
-    Yuv422 = VmbPixelFormat.Yuv422
-    Yuv444 = VmbPixelFormat.Yuv444
-
-    # YCbCr Formats
-    YCbCr411_8_CbYYCrYY = VmbPixelFormat.YCbCr411_8_CbYYCrYY
-    YCbCr422_8_CbYCrY = VmbPixelFormat.YCbCr422_8_CbYCrY
-    YCbCr8_CbYCr = VmbPixelFormat.YCbCr8_CbYCr
-
-    def __str__(self):
-        return self._name_
-
-    def __repr__(self):
-        return 'PixelFormat.{}'.format(str(self))
-
-    def get_convertible_formats(self) -> Tuple['PixelFormat', ...]:
-        formats = PIXEL_FORMAT_CONVERTIBILITY_MAP[VmbPixelFormat(self)]
-        return tuple([PixelFormat(fmt) for fmt in formats])
-
-
-MONO_PIXEL_FORMATS = (
-    PixelFormat.Mono8,
-    PixelFormat.Mono10,
-    PixelFormat.Mono10p,
-    PixelFormat.Mono12,
-    PixelFormat.Mono12Packed,
-    PixelFormat.Mono12p,
-    PixelFormat.Mono14,
-    PixelFormat.Mono16
-)
-
-
-BAYER_PIXEL_FORMATS = (
-    PixelFormat.BayerGR8,
-    PixelFormat.BayerRG8,
-    PixelFormat.BayerGB8,
-    PixelFormat.BayerBG8,
-    PixelFormat.BayerGR10,
-    PixelFormat.BayerRG10,
-    PixelFormat.BayerGB10,
-    PixelFormat.BayerBG10,
-    PixelFormat.BayerGR12,
-    PixelFormat.BayerRG12,
-    PixelFormat.BayerGB12,
-    PixelFormat.BayerBG12,
-    PixelFormat.BayerGR12Packed,
-    PixelFormat.BayerRG12Packed,
-    PixelFormat.BayerGB12Packed,
-    PixelFormat.BayerBG12Packed,
-    PixelFormat.BayerGR10p,
-    PixelFormat.BayerRG10p,
-    PixelFormat.BayerGB10p,
-    PixelFormat.BayerBG10p,
-    PixelFormat.BayerGR12p,
-    PixelFormat.BayerRG12p,
-    PixelFormat.BayerGB12p,
-    PixelFormat.BayerBG12p,
-    PixelFormat.BayerGR16,
-    PixelFormat.BayerRG16,
-    PixelFormat.BayerGB16,
-    PixelFormat.BayerBG16
-)
-
-
-RGB_PIXEL_FORMATS = (
-    PixelFormat.Rgb8,
-    PixelFormat.Rgb10,
-    PixelFormat.Rgb12,
-    PixelFormat.Rgb14,
-    PixelFormat.Rgb16
-)
-
-
-RGBA_PIXEL_FORMATS = (
-    PixelFormat.Rgba8,
-    PixelFormat.Argb8,
-    PixelFormat.Rgba10,
-    PixelFormat.Rgba12,
-    PixelFormat.Rgba14,
-    PixelFormat.Rgba16
-)
-
-
-BGR_PIXEL_FORMATS = (
-    PixelFormat.Bgr8,
-    PixelFormat.Bgr10,
-    PixelFormat.Bgr12,
-    PixelFormat.Bgr14,
-    PixelFormat.Bgr16
-)
-
-
-BGRA_PIXEL_FORMATS = (
-    PixelFormat.Bgra8,
-    PixelFormat.Bgra10,
-    PixelFormat.Bgra12,
-    PixelFormat.Bgra14,
-    PixelFormat.Bgra16
-)
-
-
-YUV_PIXEL_FORMATS = (
-    PixelFormat.Yuv411,
-    PixelFormat.Yuv422,
-    PixelFormat.Yuv444
-)
-
-
-YCBCR_PIXEL_FORMATS = (
-    PixelFormat.YCbCr411_8_CbYYCrYY,
-    PixelFormat.YCbCr422_8_CbYCrY,
-    PixelFormat.YCbCr8_CbYCr
-)
-
-
-COLOR_PIXEL_FORMATS = BAYER_PIXEL_FORMATS + RGB_PIXEL_FORMATS + RGBA_PIXEL_FORMATS + \
-                      BGR_PIXEL_FORMATS + BGRA_PIXEL_FORMATS + YUV_PIXEL_FORMATS + \
-                      YCBCR_PIXEL_FORMATS
-
-
-OPENCV_PIXEL_FORMATS = (
-    PixelFormat.Mono8,
-    PixelFormat.Bgr8,
-    PixelFormat.Bgra8,
-    PixelFormat.Mono16,
-    PixelFormat.Bgr16,
-    PixelFormat.Bgra16
-)
-
-
-class Debayer(enum.IntEnum):
-    """Enum specifying debayer modes.
-
-    Enum values:
-        Mode2x2    - 2x2 with green averaging (this is the default if no debayering algorithm
-                     is added as transformation option).
-        Mode3x3    - 3x3 with equal green weighting per line (8-bit images only).
-        ModeLCAA   - Debayering with horizontal local color anti-aliasing (8-bit images only).
-        ModeLCAAV  - Debayering with horizontal and vertical local color anti-aliasing
-        (            8-bit images only).
-        ModeYuv422 - Debayering with YUV422-alike sub-sampling (8-bit images only).
-    """
-    Mode2x2 = VmbDebayerMode.Mode_2x2
-    Mode3x3 = VmbDebayerMode.Mode_3x3
-    ModeLCAA = VmbDebayerMode.Mode_LCAA
-    ModeLCAAV = VmbDebayerMode.Mode_LCAAV
-    ModeYuv422 = VmbDebayerMode.Mode_YUV422
-
-    def __str__(self):
-        return 'DebayerMode.{}'.format(self._name_)
-
-    def __repr__(self):
-        return str(self)
-
-
-class FrameStatus(enum.IntEnum):
-    """Enum specifying the current status of internal Frame data.
-
-    Enum values:
-        Complete   - Frame data is complete without errors.
-        Incomplete - Frame could not be filled to the end.
-        TooSmall   - Frame buffer was too small.
-        Invalid    - Frame buffer was invalid.
-    """
-
-    Complete = VmbFrameStatus.Complete
-    Incomplete = VmbFrameStatus.Incomplete
-    TooSmall = VmbFrameStatus.TooSmall
-    Invalid = VmbFrameStatus.Invalid
-
-
-class AllocationMode(enum.IntEnum):
-    """Enum specifying the supported frame allocation modes.
-
-    Enum values:
-        AnnounceFrame         - The buffer is allocated by VimbaPython
-        AllocAndAnnounceFrame - The buffer is allocated by the Transport Layer
-    """
-    AnnounceFrame = 0
-    AllocAndAnnounceFrame = 1
-
-
-class AncillaryData:
-    """Ancillary Data are created after enabling a Cameras 'ChunkModeActive' Feature.
-    Ancillary Data are Features stored within a Frame.
-    """
-    @TraceEnable()
-    @LeaveContextOnCall()
-    def __init__(self, handle: VmbFrame):
-        """Do not call directly. Get Object via Frame access method"""
-        self.__handle: VmbFrame = handle
-        self.__data_handle: VmbHandle = VmbHandle()
-        self.__feats: FeaturesTuple = ()
-        self.__context_cnt: int = 0
-
-    @TraceEnable()
-    def __enter__(self):
-        if not self.__context_cnt:
-            self._open()
-
-        self.__context_cnt += 1
-        return self
-
-    @TraceEnable()
-    def __exit__(self, exc_type, exc_value, exc_traceback):
-        self.__context_cnt -= 1
-
-        if not self.__context_cnt:
-            self._close()
-
-    @RaiseIfOutsideContext()
-    def get_all_features(self) -> FeaturesTuple:
-        """Get all features in ancillary data.
-
-        Returns:
-            A set of all currently features stored in Ancillary Data.
-
-        Raises:
-            RuntimeError then called outside of "with" - statement.
-        """
-        return self.__feats
-
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_features_by_type(self, feat_type: FeatureTypeTypes) -> FeaturesTuple:
-        """Get all features in ancillary data of a specific type.
-
-        Valid FeatureTypes are: IntFeature, FloatFeature, StringFeature, BoolFeature,
-        EnumFeature, CommandFeature, RawFeature
-
-        Arguments:
-            feat_type - FeatureType used find features of that type.
-
-        Returns:
-            A all features of type 'feat_type'.
-
-        Raises:
-            RuntimeError then called outside of "with" - statement.
-            TypeError if parameters do not match their type hint.
-        """
-        return filter_features_by_type(self.__feats, feat_type)
-
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_features_by_category(self, category: str) -> FeaturesTuple:
-        """Get all features in ancillary data of a specific category.
-
-        Arguments:
-            category - Category that should be used for filtering.
-
-        Returns:
-            A all features of category 'category'.
-
-        Raises:
-            RuntimeError then called outside of "with" - statement.
-            TypeError if parameters do not match their type hint.
-        """
-        return filter_features_by_category(self.__feats, category)
-
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_feature_by_name(self, feat_name: str) -> FeatureTypes:
-        """Get a features in ancillary data by its name.
-
-        Arguments:
-            feat_name - Name used to find a feature.
-
-        Returns:
-            Feature with the associated name.
-
-        Raises:
-            RuntimeError then called outside of "with" - statement.
-            TypeError if parameters do not match their type hint.
-            VimbaFeatureError if no feature is associated with 'feat_name'.
-        """
-        feat = filter_features_by_name(self.__feats, feat_name)
-
-        if not feat:
-            raise VimbaFeatureError('Feature \'{}\' not found.'.format(feat_name))
-
-        return feat
-
-    @TraceEnable()
-    @EnterContextOnCall()
-    def _open(self):
-        call_vimba_c('VmbAncillaryDataOpen', byref(self.__handle), byref(self.__data_handle))
-
-        self.__feats = _replace_invalid_feature_calls(discover_features(self.__data_handle))
-        attach_feature_accessors(self, self.__feats)
-
-    @TraceEnable()
-    @LeaveContextOnCall()
-    def _close(self):
-        remove_feature_accessors(self, self.__feats)
-        self.__feats = ()
-
-        call_vimba_c('VmbAncillaryDataClose', self.__data_handle)
-        self.__data_handle = VmbHandle()
-
-
-def _replace_invalid_feature_calls(feats: FeaturesTuple) -> FeaturesTuple:
-    # AncillaryData are basically "lightweight" features. Calling most feature related
-    # Functions with a AncillaryData - Handle leads to VimbaC Errors. This method decorates
-    # all Methods that are unsafe to call with a decorator raising a RuntimeError.
-    to_wrap = [
-        'get_access_mode',
-        'is_readable',
-        'is_writeable',
-        'register_change_handler',
-        'get_increment',
-        'get_range',
-        'set'
-    ]
-
-    # Decorator raising a RuntimeError instead of delegating call to inner function.
-    def invalid_call(func):
-        @functools.wraps(func)
-        def wrapper(*args, **kwargs):
-            msg = 'Calling \'{}\' is invalid for AncillaryData Features.'
-            raise RuntimeError(msg.format(func.__name__))
-
-        return wrapper
-
-    # Replace original implementation by injecting a surrounding decorator and
-    # binding the resulting function as a method to the Feature instance.
-    for f, a in [(f, a) for f in feats for a in to_wrap]:
-        try:
-            fn = invalid_call(getattr(f, a))
-            setattr(f, a, fn.__get__(f))
-
-        except AttributeError:
-            pass
-
-    return feats
-
-
-class Frame:
-    """This class allows access to Frames acquired by a camera. The Frame is basically
-    a buffer that wraps image data and some metadata.
-    """
-    def __init__(self, buffer_size: int, allocation_mode: AllocationMode):
-        """Do not call directly. Create Frames via Camera methods instead."""
-        self._allocation_mode = allocation_mode
-
-        # Allocation is not necessary for the AllocAndAnnounce case. In that case the Transport
-        # Layer will take care of buffer allocation. The self._buffer variable will be updated after
-        # the frame is announced and memory has been allocated.
-        if self._allocation_mode == AllocationMode.AnnounceFrame:
-            self._buffer = (ctypes.c_ubyte * buffer_size)()
-        self._frame: VmbFrame = VmbFrame()
-
-        # Setup underlaying Frame
-        if self._allocation_mode == AllocationMode.AnnounceFrame:
-            self._frame.buffer = ctypes.cast(self._buffer, ctypes.c_void_p)
-            self._frame.bufferSize = sizeof(self._buffer)
-        elif self._allocation_mode == AllocationMode.AllocAndAnnounceFrame:
-            # Set buffer pointer to NULL and inform Transport Layer of size it should allocate
-            self._frame.buffer = None
-            self._frame.bufferSize = buffer_size
-
-    def __str__(self):
-        msg = 'Frame(id={}, status={}, buffer={})'
-        return msg.format(self._frame.frameID, str(FrameStatus(self._frame.receiveStatus)),
-                          hex(self._frame.buffer))
-
-    def __deepcopy__(self, memo):
-        cls = self.__class__
-        result = cls.__new__(cls)
-        memo[id(self)] = result
-
-        # VmbFrame contains Pointers and ctypes.Structure with Pointers can't be copied.
-        # As a workaround VmbFrame contains a deepcopy-like Method performing deep copy of all
-        # Attributes except PointerTypes. Those must be set manually after the copy operation.
-        setattr(result, '_buffer', copy.deepcopy(self._buffer, memo))
-        setattr(result, '_frame', self._frame.deepcopy_skip_ptr(memo))
-
-        result._frame.buffer = ctypes.cast(result._buffer, ctypes.c_void_p)
-        result._frame.bufferSize = sizeof(result._buffer)
-
-        return result
-
-    def _set_buffer(self, buffer: ctypes.c_void_p):
-        """Set self._buffer to memory pointed to by passed buffer pointer
-
-        Useful if frames were allocated with AllocationMode.AllocAndAnnounce
-        """
-        self._buffer = ctypes.cast(buffer,
-                                   ctypes.POINTER(ctypes.c_ubyte * self._frame.bufferSize)).contents
-
-    def get_buffer(self) -> ctypes.Array:
-        """Get internal buffer object containing image data."""
-        return self._buffer
-
-    def get_buffer_size(self) -> int:
-        """Get byte size of internal buffer."""
-        return self._frame.bufferSize
-
-    def get_image_size(self) -> int:
-        """Get byte size of image data stored in buffer."""
-        return self._frame.imageSize
-
-    def get_ancillary_data(self) -> Optional[AncillaryData]:
-        """Get AncillaryData.
-
-        Frames acquired with cameras where Feature ChunkModeActive is enabled can contain
-        ancillary data within the image data.
-
-        Returns:
-            None if Frame contains no ancillary data.
-            AncillaryData if Frame contains ancillary data.
-        """
-        if not self._frame.ancillarySize:
-            return None
-
-        return AncillaryData(self._frame)
-
-    def get_status(self) -> FrameStatus:
-        """Returns current frame status."""
-        return FrameStatus(self._frame.receiveStatus)
-
-    def get_pixel_format(self) -> PixelFormat:
-        """Get format of the acquired image data"""
-        return PixelFormat(self._frame.pixelFormat)
-
-    def get_height(self) -> Optional[int]:
-        """Get image height in pixels.
-
-        Returns:
-            Image height in pixels if dimension data is provided by the camera.
-            None if dimension data is not provided by the camera.
-        """
-        flags = decode_flags(VmbFrameFlags, self._frame.receiveFlags)
-
-        if VmbFrameFlags.Dimension not in flags:
-            return None
-
-        return self._frame.height
-
-    def get_width(self) -> Optional[int]:
-        """Get image width in pixels.
-
-        Returns:
-            Image width in pixels if dimension data is provided by the camera.
-            None if dimension data is not provided by the camera.
-        """
-        flags = decode_flags(VmbFrameFlags, self._frame.receiveFlags)
-
-        if VmbFrameFlags.Dimension not in flags:
-            return None
-
-        return self._frame.width
-
-    def get_offset_x(self) -> Optional[int]:
-        """Get horizontal offset in pixels.
-
-        Returns:
-            Horizontal offset in pixel if offset data is provided by the camera.
-            None if offset data is not provided by the camera.
-        """
-        flags = decode_flags(VmbFrameFlags, self._frame.receiveFlags)
-
-        if VmbFrameFlags.Offset not in flags:
-            return None
-
-        return self._frame.offsetX
-
-    def get_offset_y(self) -> Optional[int]:
-        """Get vertical offset in pixels.
-
-        Returns:
-            Vertical offset in pixels if offset data is provided by the camera.
-            None if offset data is not provided by the camera.
-        """
-        flags = decode_flags(VmbFrameFlags, self._frame.receiveFlags)
-
-        if VmbFrameFlags.Offset not in flags:
-            return None
-
-        return self._frame.offsetY
-
-    def get_id(self) -> Optional[int]:
-        """Get Frame ID.
-
-        Returns:
-            Frame ID if the id is provided by the camera.
-            None if frame id is not provided by the camera.
-        """
-        flags = decode_flags(VmbFrameFlags, self._frame.receiveFlags)
-
-        if VmbFrameFlags.FrameID not in flags:
-            return None
-
-        return self._frame.frameID
-
-    def get_timestamp(self) -> Optional[int]:
-        """Get Frame timestamp.
-
-        Returns:
-            Timestamp if provided by the camera.
-            None if timestamp is not provided by the camera.
-        """
-        flags = decode_flags(VmbFrameFlags, self._frame.receiveFlags)
-
-        if VmbFrameFlags.Timestamp not in flags:
-            return None
-
-        return self._frame.timestamp
-
-    @RuntimeTypeCheckEnable()
-    def convert_pixel_format(self, target_fmt: PixelFormat,
-                             debayer_mode: Optional[Debayer] = None):
-        """Convert internal pixel format to given format.
-
-        Note: This method allocates a new buffer for internal image data leading to some
-        runtime overhead. For performance reasons, it might be better to set the value
-        of the camera's 'PixelFormat' feature instead. In addition, a non-default debayer mode
-        can be specified.
-
-        Arguments:
-            target_fmt - PixelFormat to convert to.
-            debayer_mode - Non-default algorithm used to debayer images in Bayer Formats. If
-                           no mode is specified, default debayering mode 'Mode2x2' is applied. If
-                           the current format is no Bayer format, this parameter is silently
-                           ignored.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            ValueError if the current format can't be converted into 'target_fmt'. Convertible
-                Formats can be queried via get_convertible_formats() of PixelFormat.
-            AssertionError if image width or height can't be determined.
-        """
-
-        global BAYER_PIXEL_FORMATS
-
-        # 1) Perform sanity checking
-        fmt = self.get_pixel_format()
-
-        if fmt == target_fmt:
-            return
-
-        if target_fmt not in fmt.get_convertible_formats():
-            raise ValueError('Current PixelFormat can\'t be converted into given format.')
-
-        # 2) Specify Transformation Input Image
-        height = self._frame.height
-        width = self._frame.width
-
-        c_src_image = VmbImage()
-        c_src_image.Size = sizeof(c_src_image)
-        c_src_image.Data = ctypes.cast(self._buffer, ctypes.c_void_p)
-
-        call_vimba_image_transform('VmbSetImageInfoFromPixelFormat', fmt, width, height,
-                                   byref(c_src_image))
-
-        # 3) Specify Transformation Output Image
-        c_dst_image = VmbImage()
-        c_dst_image.Size = sizeof(c_dst_image)
-
-        layout, bits = PIXEL_FORMAT_TO_LAYOUT[VmbPixelFormat(target_fmt)]
-
-        call_vimba_image_transform('VmbSetImageInfoFromInputImage', byref(c_src_image), layout,
-                                   bits, byref(c_dst_image))
-
-        # 4) Allocate Buffer and perform transformation
-        img_size = int(height * width * c_dst_image.ImageInfo.PixelInfo.BitsPerPixel / 8)
-        anc_size = self._frame.ancillarySize
-
-        buf = (ctypes.c_ubyte * (img_size + anc_size))()
-        c_dst_image.Data = ctypes.cast(buf, ctypes.c_void_p)
-
-        # 5) Setup Debayering mode if given.
-        transform_info = VmbTransformInfo()
-        if debayer_mode and (fmt in BAYER_PIXEL_FORMATS):
-            call_vimba_image_transform('VmbSetDebayerMode', VmbDebayerMode(debayer_mode),
-                                       byref(transform_info))
-
-        # 6) Perform Transformation
-        call_vimba_image_transform('VmbImageTransform', byref(c_src_image), byref(c_dst_image),
-                                   byref(transform_info), 1)
-
-        # 7) Copy ancillary data if existing
-        if anc_size:
-            src = ctypes.addressof(self._buffer) + self._frame.imageSize
-            dst = ctypes.addressof(buf) + img_size
-
-            ctypes.memmove(dst, src, anc_size)
-
-        # 8) Update frame metadata
-        self._buffer = buf
-        self._frame.buffer = ctypes.cast(self._buffer, ctypes.c_void_p)
-        self._frame.bufferSize = sizeof(self._buffer)
-        self._frame.imageSize = img_size
-        self._frame.pixelFormat = target_fmt
-
-    def as_numpy_ndarray(self) -> 'numpy.ndarray':
-        """Construct numpy.ndarray view on VimbaFrame.
-
-        Returns:
-            numpy.ndarray on internal image buffer.
-
-        Raises:
-            ImportError if numpy is not installed.
-            VimbaFrameError if current PixelFormat can't be converted to a numpy.ndarray.
-        """
-        if numpy is None:
-            raise ImportError('\'Frame.as_opencv_image()\' requires module \'numpy\'.')
-
-        # Construct numpy overlay on underlaying image buffer
-        height = self._frame.height
-        width = self._frame.width
-        fmt = self._frame.pixelFormat
-
-        c_image = VmbImage()
-        c_image.Size = sizeof(c_image)
-
-        call_vimba_image_transform('VmbSetImageInfoFromPixelFormat', fmt, width, height,
-                                   byref(c_image))
-
-        layout = PIXEL_FORMAT_TO_LAYOUT.get(fmt)
-
-        if not layout:
-            msg = 'Can\'t construct numpy.ndarray for Pixelformat {}. ' \
-                  'Use \'frame.convert_pixel_format()\' to convert to a different Pixelformat.'
-            raise VimbaFrameError(msg.format(str(self.get_pixel_format())))
-
-        bits_per_channel = layout[1]
-        channels_per_pixel = c_image.ImageInfo.PixelInfo.BitsPerPixel // bits_per_channel
-
-        return numpy.ndarray(shape=(height, width, channels_per_pixel),
-                             buffer=self._buffer,  # type: ignore
-                             dtype=numpy.uint8 if bits_per_channel == 8 else numpy.uint16)
-
-    def as_opencv_image(self) -> 'numpy.ndarray':
-        """Construct OpenCV compatible view on VimbaFrame.
-
-        Returns:
-            OpenCV compatible numpy.ndarray
-
-        Raises:
-            ImportError if numpy is not installed.
-            ValueError if current pixel format is not compatible with opencv. Compatible
-                       formats are in OPENCV_PIXEL_FORMATS.
-        """
-        global OPENCV_PIXEL_FORMATS
-
-        if numpy is None:
-            raise ImportError('\'Frame.as_opencv_image()\' requires module \'numpy\'.')
-
-        fmt = self._frame.pixelFormat
-
-        if fmt not in OPENCV_PIXEL_FORMATS:
-            raise ValueError('Current Format \'{}\' is not in OPENCV_PIXEL_FORMATS'.format(
-                             str(PixelFormat(self._frame.pixelFormat))))
-
-        return self.as_numpy_ndarray()
-
-
-@TraceEnable()
-@RuntimeTypeCheckEnable()
-def intersect_pixel_formats(fmts1: FormatTuple, fmts2: FormatTuple) -> FormatTuple:
-    """Build intersection of two sets containing PixelFormat.
-
-    Arguments:
-        fmts1 - PixelFormats to intersect with fmts2
-        fmts2 - PixelFormats to intersect with fmts1
-
-    Returns:
-        Set of PixelFormats that occur in fmts1 and fmts2
-
-    Raises:
-            TypeError if parameters do not match their type hint.
-    """
-    return tuple(set(fmts1).intersection(set(fmts2)))
diff --git a/VimbaPython/Source/vimba/interface.py b/VimbaPython/Source/vimba/interface.py
deleted file mode 100644
index 840115d7d810fb78603d194fb13a4d4b6e2ba5f5..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/interface.py
+++ /dev/null
@@ -1,391 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import enum
-from typing import Tuple, List, Callable, Dict
-from .c_binding import call_vimba_c, byref, sizeof, decode_cstr
-from .c_binding import VmbInterface, VmbInterfaceInfo, VmbHandle, VmbUint32
-from .feature import discover_features, FeatureTypes, FeaturesTuple, FeatureTypeTypes
-from .shared import filter_features_by_name, filter_features_by_type, filter_affected_features, \
-                    filter_selected_features, filter_features_by_category, \
-                    attach_feature_accessors, remove_feature_accessors, read_memory, \
-                    write_memory, read_registers, write_registers
-from .util import TraceEnable, RuntimeTypeCheckEnable, EnterContextOnCall, LeaveContextOnCall, \
-                  RaiseIfOutsideContext
-from .error import VimbaFeatureError
-
-
-__all__ = [
-    'InterfaceType',
-    'Interface',
-    'InterfaceEvent',
-    'InterfaceChangeHandler',
-    'InterfacesTuple',
-    'InterfacesList',
-    'discover_interfaces',
-    'discover_interface'
-]
-
-
-# Forward declarations
-InterfaceChangeHandler = Callable[['Interface', 'InterfaceEvent'], None]
-InterfacesTuple = Tuple['Interface', ...]
-InterfacesList = List['Interface']
-
-
-class InterfaceType(enum.IntEnum):
-    """Enum specifying all interface types.
-
-    Enum values:
-        Unknown  - Interface is not known to this VimbaPython version.
-        Firewire - 1394
-        Ethernet - Gigabit Ethernet
-        Usb      - USB 3.0
-        CL       - Camera Link
-        CSI2     - CSI-2
-    """
-    Unknown = VmbInterface.Unknown
-    Firewire = VmbInterface.Firewire
-    Ethernet = VmbInterface.Ethernet
-    Usb = VmbInterface.Usb
-    CL = VmbInterface.CL
-    CSI2 = VmbInterface.CSI2
-
-
-class InterfaceEvent(enum.IntEnum):
-    """Enum specifying an Interface Event
-
-    Enum values:
-        Missing     - A known interface disappeared from the bus
-        Detected    - A new interface was discovered
-        Reachable   - A known interface can be accessed
-        Unreachable - A known interface cannot be accessed anymore
-    """
-    Missing = 0
-    Detected = 1
-    Reachable = 2
-    Unreachable = 3
-
-
-class Interface:
-    """This class allows access to an interface such as USB detected by Vimba.
-    Interface is meant to be used in conjunction with the "with" - statement. On entering a context,
-    all Interface features are detected and can be accessed within the context. Static Interface
-    properties like Name can be accessed outside the context.
-    """
-
-    @TraceEnable()
-    @LeaveContextOnCall()
-    def __init__(self, info: VmbInterfaceInfo):
-        """Do not call directly. Access Interfaces via vimba.Vimba instead."""
-        self.__handle: VmbHandle = VmbHandle(0)
-        self.__info: VmbInterfaceInfo = info
-        self.__feats: FeaturesTuple = ()
-        self.__context_cnt: int = 0
-
-    @TraceEnable()
-    def __enter__(self):
-        if not self.__context_cnt:
-            self._open()
-
-        self.__context_cnt += 1
-        return self
-
-    @TraceEnable()
-    def __exit__(self, exc_type, exc_value, exc_traceback):
-        self.__context_cnt -= 1
-
-        if not self.__context_cnt:
-            self._close()
-
-    def __str__(self):
-        return 'Interface(id={})'.format(self.get_id())
-
-    def __repr__(self):
-        rep = 'Interface'
-        rep += '(__handle=' + repr(self.__handle)
-        rep += ',__info=' + repr(self.__info)
-        rep += ')'
-        return rep
-
-    def get_id(self) -> str:
-        """Get Interface Id such as VimbaUSBInterface_0x0."""
-        return decode_cstr(self.__info.interfaceIdString)
-
-    def get_type(self) -> InterfaceType:
-        """Get Interface Type such as InterfaceType.Usb."""
-        return InterfaceType(self.__info.interfaceType)
-
-    def get_name(self) -> str:
-        """Get Interface Name such as Vimba USB Interface."""
-        return decode_cstr(self.__info.interfaceName)
-
-    def get_serial(self) -> str:
-        """Get Interface Serial or '' if not set."""
-        return decode_cstr(self.__info.serialString)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def read_memory(self, addr: int, max_bytes: int) -> bytes:  # coverage: skip
-        """Read a byte sequence from a given memory address.
-
-        Arguments:
-            addr: Starting address to read from.
-            max_bytes: Maximum number of bytes to read from addr.
-
-        Returns:
-            Read memory contents as bytes.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement.
-            ValueError if addr is negative.
-            ValueError if max_bytes is negative.
-            ValueError if the memory access was invalid.
-        """
-        # Note: Coverage is skipped. Function is untestable in a generic way.
-        return read_memory(self.__handle, addr, max_bytes)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def write_memory(self, addr: int, data: bytes):  # coverage: skip
-        """Write a byte sequence to a given memory address.
-
-        Arguments:
-            addr: Address to write the content of 'data' to.
-            data: Byte sequence to write at address 'addr'.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement.
-            ValueError if addr is negative.
-        """
-        # Note: Coverage is skipped. Function is untestable in a generic way.
-        return write_memory(self.__handle, addr, data)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def read_registers(self, addrs: Tuple[int, ...]) -> Dict[int, int]:  # coverage: skip
-        """Read contents of multiple registers.
-
-        Arguments:
-            addrs: Sequence of addresses that should be read iteratively.
-
-        Returns:
-            Dictionary containing a mapping from given address to the read register values.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement.
-            ValueError if any address in addrs is negative.
-            ValueError if the register access was invalid.
-        """
-        # Note: Coverage is skipped. Function is untestable in a generic way.
-        return read_registers(self.__handle, addrs)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def write_registers(self, addrs_values: Dict[int, int]):  # coverage: skip
-        """Write data to multiple registers.
-
-        Arguments:
-            addrs_values: Mapping between register addresses and the data to write.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            ValueError if any address in addrs_values is negative.
-            ValueError if the register access was invalid.
-        """
-        # Note: Coverage is skipped. Function is untestable in a generic way.
-        return write_registers(self.__handle, addrs_values)
-
-    @RaiseIfOutsideContext()
-    def get_all_features(self) -> FeaturesTuple:
-        """Get access to all discovered features of this Interface.
-
-        Returns:
-            A set of all currently detected features.
-
-        Raises:
-            RuntimeError if called outside "with" - statement.
-        """
-        return self.__feats
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_features_affected_by(self, feat: FeatureTypes) -> FeaturesTuple:
-        """Get all features affected by a specific interface feature.
-
-        Arguments:
-            feat - Feature to find features that are affected by 'feat'.
-
-        Returns:
-            A set of features affected by changes on 'feat'.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement.
-            VimbaFeatureError if 'feat' is not a feature of this interface.
-        """
-        return filter_affected_features(self.__feats, feat)
-
-    @TraceEnable()
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_features_selected_by(self, feat: FeatureTypes) -> FeaturesTuple:
-        """Get all features selected by a specific interface feature.
-
-        Arguments:
-            feat - Feature to find features that are selected by 'feat'.
-
-        Returns:
-            A set of features selected by changes on 'feat'.
-
-        Raises:
-            TypeError if 'feat' is not of any feature type.
-            RuntimeError if called outside "with" - statement.
-            VimbaFeatureError if 'feat' is not a feature of this interface.
-        """
-        return filter_selected_features(self.__feats, feat)
-
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_features_by_type(self, feat_type: FeatureTypeTypes) -> FeaturesTuple:
-        """Get all interface features of a specific feature type.
-
-        Valid FeatureTypes are: IntFeature, FloatFeature, StringFeature, BoolFeature,
-        EnumFeature, CommandFeature, RawFeature
-
-        Arguments:
-            feat_type - FeatureType used find features of that type.
-
-        Returns:
-            A set of features of type 'feat_type'.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement.
-        """
-        return filter_features_by_type(self.__feats, feat_type)
-
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_features_by_category(self, category: str) -> FeaturesTuple:
-        """Get all interface features of a specific category.
-
-        Arguments:
-            category - category for filtering.
-
-        Returns:
-            A set of features of category 'category'.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement.
-        """
-        return filter_features_by_category(self.__feats, category)
-
-    @RaiseIfOutsideContext()
-    @RuntimeTypeCheckEnable()
-    def get_feature_by_name(self, feat_name: str) -> FeatureTypes:
-        """Get an interface feature by its name.
-
-        Arguments:
-            feat_name - Name to find a feature.
-
-        Returns:
-            Feature with the associated name.
-
-        Raises:
-            TypeError if parameters do not match their type hint.
-            RuntimeError if called outside "with" - statement.
-            VimbaFeatureError if no feature is associated with 'feat_name'.
-        """
-        feat = filter_features_by_name(self.__feats, feat_name)
-
-        if not feat:
-            raise VimbaFeatureError('Feature \'{}\' not found.'.format(feat_name))
-
-        return feat
-
-    @TraceEnable()
-    @EnterContextOnCall()
-    def _open(self):
-        call_vimba_c('VmbInterfaceOpen', self.__info.interfaceIdString, byref(self.__handle))
-
-        self.__feats = discover_features(self.__handle)
-        attach_feature_accessors(self, self.__feats)
-
-    @TraceEnable()
-    @LeaveContextOnCall()
-    def _close(self):
-        for feat in self.__feats:
-            feat.unregister_all_change_handlers()
-
-        remove_feature_accessors(self, self.__feats)
-        self.__feats = ()
-
-        call_vimba_c('VmbInterfaceClose', self.__handle)
-
-        self.__handle = VmbHandle(0)
-
-
-@TraceEnable()
-def discover_interfaces() -> InterfacesList:
-    """Do not call directly. Access Interfaces via vimba.System instead."""
-
-    result = []
-    inters_count = VmbUint32(0)
-
-    call_vimba_c('VmbInterfacesList', None, 0, byref(inters_count), sizeof(VmbInterfaceInfo))
-
-    if inters_count:
-        inters_found = VmbUint32(0)
-        inters_infos = (VmbInterfaceInfo * inters_count.value)()
-
-        call_vimba_c('VmbInterfacesList', inters_infos, inters_count, byref(inters_found),
-                     sizeof(VmbInterfaceInfo))
-
-        for info in inters_infos[:inters_found.value]:
-            result.append(Interface(info))
-
-    return result
-
-
-@TraceEnable()
-def discover_interface(id_: str) -> Interface:
-    """Do not call directly. Access Interfaces via vimba.System instead."""
-
-    # Since there is no function to query a single interface, discover all interfaces and
-    # extract the Interface with the matching ID.
-    inters = discover_interfaces()
-    return [i for i in inters if id_ == i.get_id()].pop()
diff --git a/VimbaPython/Source/vimba/shared.py b/VimbaPython/Source/vimba/shared.py
deleted file mode 100644
index fe0fa1f5c6733f233cb68eb6f91cfc0b805fc4cb..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/shared.py
+++ /dev/null
@@ -1,357 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import itertools
-
-from typing import Dict, Tuple
-from .c_binding import VmbUint32, VmbUint64, VmbHandle, VmbFeatureInfo
-from .c_binding import call_vimba_c, byref, sizeof, create_string_buffer, VimbaCError
-from .feature import FeaturesTuple, FeatureTypes, FeatureTypeTypes
-from .error import VimbaFeatureError
-from .util import TraceEnable
-
-__all__ = [
-    'filter_affected_features',
-    'filter_selected_features',
-    'filter_features_by_name',
-    'filter_features_by_type',
-    'filter_features_by_category',
-    'attach_feature_accessors',
-    'remove_feature_accessors',
-    'read_memory',
-    'write_memory',
-    'read_registers',
-    'write_registers'
-]
-
-
-@TraceEnable()
-def filter_affected_features(feats: FeaturesTuple, feat: FeatureTypes) -> FeaturesTuple:
-    """Search for all Features affected by a given feature within a feature set.
-
-    Arguments:
-        feats: Feature set to search in.
-        feat: Feature that might affect Features within 'feats'.
-
-    Returns:
-        A set of all features that are affected by 'feat'.
-
-    Raises:
-        VimbaFeatureError if 'feat' is not stored within 'feats'.
-    """
-
-    if feat not in feats:
-        raise VimbaFeatureError('Feature \'{}\' not in given Features'.format(feat.get_name()))
-
-    result = []
-
-    if feat.has_affected_features():
-        feats_count = VmbUint32()
-        feats_handle = feat._handle
-        feats_name = feat._info.name
-
-        # Query affected features from given Feature
-        call_vimba_c('VmbFeatureListAffected', feats_handle, feats_name, None, 0,
-                     byref(feats_count), sizeof(VmbFeatureInfo))
-
-        feats_found = VmbUint32(0)
-        feats_infos = (VmbFeatureInfo * feats_count.value)()
-
-        call_vimba_c('VmbFeatureListAffected', feats_handle, feats_name, feats_infos, feats_count,
-                     byref(feats_found), sizeof(VmbFeatureInfo))
-
-        # Search affected features in given feature set
-        for info, feature in itertools.product(feats_infos[:feats_found.value], feats):
-            if info.name == feature._info.name:
-                result.append(feature)
-
-    return tuple(result)
-
-
-@TraceEnable()
-def filter_selected_features(feats: FeaturesTuple, feat: FeatureTypes) -> FeaturesTuple:
-    """Search for all Features selected by a given feature within a feature set.
-
-    Arguments:
-        feats: Feature set to search in.
-        feat: Feature that might select Features within 'feats'.
-
-    Returns:
-        A set of all features that are selected by 'feat'.
-
-    Raises:
-        VimbaFeatureError if 'feat' is not stored within 'feats'.
-    """
-    if feat not in feats:
-        raise VimbaFeatureError('Feature \'{}\' not in given Features'.format(feat.get_name()))
-
-    result = []
-
-    if feat.has_selected_features():
-        feats_count = VmbUint32()
-        feats_handle = feat._handle
-        feats_name = feat._info.name
-
-        # Query selected features from given feature
-        call_vimba_c('VmbFeatureListSelected', feats_handle, feats_name, None, 0,
-                     byref(feats_count), sizeof(VmbFeatureInfo))
-
-        feats_found = VmbUint32(0)
-        feats_infos = (VmbFeatureInfo * feats_count.value)()
-
-        call_vimba_c('VmbFeatureListSelected', feats_handle, feats_name, feats_infos, feats_count,
-                     byref(feats_found), sizeof(VmbFeatureInfo))
-
-        # Search selected features in given feature set
-        for info, feature in itertools.product(feats_infos[:feats_found.value], feats):
-            if info.name == feature._info.name:
-                result.append(feature)
-
-    return tuple(result)
-
-
-@TraceEnable()
-def filter_features_by_name(feats: FeaturesTuple, feat_name: str):
-    """Search for a feature with a specific name within a feature set.
-
-    Arguments:
-        feats: Feature set to search in.
-        feat_name: Feature name to look for.
-
-    Returns:
-        The Feature with the name 'feat_name' or None if lookup failed
-    """
-    filtered = [feat for feat in feats if feat_name == feat.get_name()]
-    return filtered.pop() if filtered else None
-
-
-@TraceEnable()
-def filter_features_by_type(feats: FeaturesTuple, feat_type: FeatureTypeTypes) -> FeaturesTuple:
-    """Search for all features with a specific type within a given feature set.
-
-    Arguments:
-        feats: Feature set to search in.
-        feat_type: Feature Type to search for
-
-    Returns:
-        A set of all features of type 'feat_type' in 'feats'. If no matching type is found an
-        empty set is returned.
-    """
-    return tuple([feat for feat in feats if type(feat) == feat_type])
-
-
-@TraceEnable()
-def filter_features_by_category(feats: FeaturesTuple, category: str) -> FeaturesTuple:
-    """Search for all features of a given category.
-
-    Arguments:
-        feats: Feature set to search in.
-        category: Category to filter for
-
-    Returns:
-        A set of all features of category 'category' in 'feats'. If no matching type is found an
-        empty set is returned.
-    """
-    return tuple([feat for feat in feats if feat.get_category() == category])
-
-
-@TraceEnable()
-def attach_feature_accessors(obj, feats: FeaturesTuple):
-    """Attach all Features in feats to obj under the feature name.
-
-    Arguments:
-        obj: Object feats should be attached on.
-        feats: Features to attach.
-    """
-    BLACKLIST = (
-        'PixelFormat',   # PixelFormats have special access methods.
-    )
-
-    for feat in feats:
-        feat_name = feat.get_name()
-        if feat_name not in BLACKLIST:
-            setattr(obj, feat_name, feat)
-
-
-@TraceEnable()
-def remove_feature_accessors(obj, feats: FeaturesTuple):
-    """Remove all Features in feats from obj.
-
-    Arguments:
-        obj: Object, feats should be removed from.
-        feats: Features to remove.
-    """
-    for feat in feats:
-        try:
-            delattr(obj, feat.get_name())
-
-        except AttributeError:
-            pass
-
-
-@TraceEnable()
-def read_memory(handle: VmbHandle, addr: int, max_bytes: int) -> bytes:  # coverage: skip
-    """Read a byte sequence from a given memory address.
-
-    Arguments:
-        handle: Handle on entity that allows raw memory access.
-        addr: Starting address to read from.
-        max_bytes: Maximum number of bytes to read from addr.
-
-    Returns:
-        Read memory contents as bytes.
-
-    Raises:
-        ValueError if addr is negative
-        ValueError if max_bytes is negative.
-        ValueError if the memory access was invalid.
-    """
-    # Note: Coverage is skipped. Function is untestable in a generic way.
-    _verify_addr(addr)
-    _verify_size(max_bytes)
-
-    buf = create_string_buffer(max_bytes)
-    bytesRead = VmbUint32()
-
-    try:
-        call_vimba_c('VmbMemoryRead', handle, addr, max_bytes, buf, byref(bytesRead))
-
-    except VimbaCError as e:
-        msg = 'Memory read access at {} failed with C-Error: {}.'
-        raise ValueError(msg.format(hex(addr), repr(e.get_error_code()))) from e
-
-    return buf.raw[:bytesRead.value]
-
-
-@TraceEnable()
-def write_memory(handle: VmbHandle, addr: int, data: bytes):  # coverage: skip
-    """ Write a byte sequence to a given memory address.
-
-    Arguments:
-        handle: Handle on entity that allows raw memory access.
-        addr: Address to write the content of 'data' too.
-        data: Byte sequence to write at address 'addr'.
-
-    Raises:
-        ValueError if addr is negative.
-        ValueError if the memory access was invalid.
-    """
-    # Note: Coverage is skipped. Function is untestable in a generic way.
-    _verify_addr(addr)
-
-    bytesWrite = VmbUint32()
-
-    try:
-        call_vimba_c('VmbMemoryWrite', handle, addr, len(data), data, byref(bytesWrite))
-
-    except VimbaCError as e:
-        msg = 'Memory write access at {} failed with C-Error: {}.'
-        raise ValueError(msg.format(hex(addr), repr(e.get_error_code()))) from e
-
-
-@TraceEnable()
-def read_registers(handle: VmbHandle, addrs: Tuple[int, ...]) -> Dict[int, int]:  # coverage: skip
-    """Read contents of multiple registers.
-
-    Arguments:
-        handle: Handle on entity providing registers to access.
-        addrs: Sequence of addresses that should be read iteratively.
-
-    Return:
-        Dictionary containing a mapping from given address to the read register values.
-
-    Raises:
-        ValueError if any address in addrs is negative.
-        ValueError if the register access was invalid.
-    """
-    # Note: Coverage is skipped. Function is untestable in a generic way.
-    for addr in addrs:
-        _verify_addr(addr)
-
-    size = len(addrs)
-    valid_reads = VmbUint32()
-
-    c_addrs = (VmbUint64 * size)()
-    c_values = (VmbUint64 * size)()
-
-    for i, addr in enumerate(addrs):
-        c_addrs[i] = addr
-
-    try:
-        call_vimba_c('VmbRegistersRead', handle, size, c_addrs, c_values, byref(valid_reads))
-
-    except VimbaCError as e:
-        msg = 'Register read access failed with C-Error: {}.'
-        raise ValueError(msg.format(repr(e.get_error_code()))) from e
-
-    return dict(zip(c_addrs, c_values))
-
-
-@TraceEnable()
-def write_registers(handle: VmbHandle, addrs_values: Dict[int, int]):  # coverage: skip
-    """Write data to multiple Registers.
-
-    Arguments:
-        handle: Handle on entity providing registers to access.
-        addrs_values: Mapping between Register addresses and the data to write.
-
-    Raises:
-        ValueError if any address in addrs_values is negative.
-        ValueError if the register access was invalid.
-    """
-    # Note: Coverage is skipped. Function is untestable in a generic way.
-    for addr in addrs_values:
-        _verify_addr(addr)
-
-    size = len(addrs_values)
-    valid_writes = VmbUint32()
-
-    addrs = (VmbUint64 * size)()
-    values = (VmbUint64 * size)()
-
-    for i, addr in enumerate(addrs_values):
-        addrs[i] = addr
-        values[i] = addrs_values[addr]
-
-    try:
-        call_vimba_c('VmbRegistersWrite', handle, size, addrs, values, byref(valid_writes))
-
-    except VimbaCError as e:
-        msg = 'Register write access failed with C-Error: {}.'
-        raise ValueError(msg.format(repr(e.get_error_code()))) from e
-
-
-def _verify_addr(addr: int):  # coverage: skip
-    # Note: Coverage is skipped. Function is untestable in a generic way.
-    if addr < 0:
-        raise ValueError('Given Address {} is negative'.format(addr))
-
-
-def _verify_size(size: int):  # coverage: skip
-    # Note: Coverage is skipped. Function is untestable in a generic way.
-    if size < 0:
-        raise ValueError('Given size {} is negative'.format(size))
diff --git a/VimbaPython/Source/vimba/util/__init__.py b/VimbaPython/Source/vimba/util/__init__.py
deleted file mode 100644
index 035a279eeb9addd879f0344693a48c80004d9e98..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/util/__init__.py
+++ /dev/null
@@ -1,72 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-# Suppress 'imported but unused' - Error from static style checker.
-# flake8: noqa: F401
-
-__all__ = [
-    'LogLevel',
-    'LogConfig',
-    'Log',
-    'LOG_CONFIG_TRACE_CONSOLE_ONLY',
-    'LOG_CONFIG_TRACE_FILE_ONLY',
-    'LOG_CONFIG_TRACE',
-    'LOG_CONFIG_INFO_CONSOLE_ONLY',
-    'LOG_CONFIG_INFO_FILE_ONLY',
-    'LOG_CONFIG_INFO',
-    'LOG_CONFIG_WARNING_CONSOLE_ONLY',
-    'LOG_CONFIG_WARNING_FILE_ONLY',
-    'LOG_CONFIG_WARNING',
-    'LOG_CONFIG_ERROR_CONSOLE_ONLY',
-    'LOG_CONFIG_ERROR_FILE_ONLY',
-    'LOG_CONFIG_ERROR',
-    'LOG_CONFIG_CRITICAL_CONSOLE_ONLY',
-    'LOG_CONFIG_CRITICAL_FILE_ONLY',
-    'LOG_CONFIG_CRITICAL',
-
-    # Decorators
-    'TraceEnable',
-    'ScopedLogEnable',
-    'RuntimeTypeCheckEnable',
-    'EnterContextOnCall',
-    'LeaveContextOnCall',
-    'RaiseIfInsideContext',
-    'RaiseIfOutsideContext'
-]
-
-from .log import Log, LogLevel, LogConfig, LOG_CONFIG_TRACE_CONSOLE_ONLY, \
-                 LOG_CONFIG_TRACE_FILE_ONLY, LOG_CONFIG_TRACE, LOG_CONFIG_INFO_CONSOLE_ONLY, \
-                 LOG_CONFIG_INFO_FILE_ONLY, LOG_CONFIG_INFO, LOG_CONFIG_WARNING_CONSOLE_ONLY, \
-                 LOG_CONFIG_WARNING_FILE_ONLY, LOG_CONFIG_WARNING, LOG_CONFIG_ERROR_CONSOLE_ONLY, \
-                 LOG_CONFIG_ERROR_FILE_ONLY, LOG_CONFIG_ERROR, LOG_CONFIG_CRITICAL_CONSOLE_ONLY, \
-                 LOG_CONFIG_CRITICAL_FILE_ONLY, LOG_CONFIG_CRITICAL
-
-from .tracer import TraceEnable
-from .scoped_log import ScopedLogEnable
-from .runtime_type_check import RuntimeTypeCheckEnable
-from .context_decorator import EnterContextOnCall, LeaveContextOnCall, RaiseIfInsideContext, \
-                               RaiseIfOutsideContext
diff --git a/VimbaPython/Source/vimba/util/context_decorator.py b/VimbaPython/Source/vimba/util/context_decorator.py
deleted file mode 100644
index 698553d9ae052a2d4f4cfefe126a82eecd570cd4..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/util/context_decorator.py
+++ /dev/null
@@ -1,96 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import functools
-
-__all__ = [
-    'EnterContextOnCall',
-    'LeaveContextOnCall',
-    'RaiseIfInsideContext',
-    'RaiseIfOutsideContext'
-]
-
-
-class EnterContextOnCall:
-    """Decorator setting/injecting flag used for checking the context."""
-    def __call__(self, func):
-        @functools.wraps(func)
-        def wrapper(*args, **kwargs):
-            args[0]._context_entered = True
-            return func(*args, **kwargs)
-
-        return wrapper
-
-
-class LeaveContextOnCall:
-    """Decorator clearing/injecting flag used for checking the context."""
-    def __call__(self, func):
-        @functools.wraps(func)
-        def wrapper(*args, **kwargs):
-            result = func(*args, **kwargs)
-            args[0]._context_entered = False
-            return result
-
-        return wrapper
-
-
-class RaiseIfInsideContext:
-    """Raising RuntimeError is decorated Method is called inside with-statement.
-
-    Note This Decorator shall work only on Object implementing a Context Manger.
-    For this to work object must offer a boolean attribute called _context_entered
-    """
-    def __call__(self, func):
-        @functools.wraps(func)
-        def wrapper(*args, **kwargs):
-            if args[0]._context_entered:
-                msg = 'Called \'{}()\' inside of \'with\' - statement scope.'
-                msg = msg.format('{}'.format(func.__qualname__))
-                raise RuntimeError(msg)
-
-            return func(*args, **kwargs)
-
-        return wrapper
-
-
-class RaiseIfOutsideContext:
-    """Raising RuntimeError is decorated Method is called outside with-statement.
-
-    Note This Decorator shall work only on Object implementing a Context Manger.
-    For this to work object must offer a boolean attribute called __context_entered
-    """
-    def __call__(self, func):
-        @functools.wraps(func)
-        def wrapper(*args, **kwargs):
-            if not args[0]._context_entered:
-                msg = 'Called \'{}()\' outside of \'with\' - statement scope.'
-                msg = msg.format('{}'.format(func.__qualname__))
-                raise RuntimeError(msg)
-
-            return func(*args, **kwargs)
-
-        return wrapper
diff --git a/VimbaPython/Source/vimba/util/log.py b/VimbaPython/Source/vimba/util/log.py
deleted file mode 100644
index 21d3500ab97a44c08bf90d74d97c35c4b3570270..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/util/log.py
+++ /dev/null
@@ -1,295 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import os
-import enum
-import datetime
-import logging
-
-from typing import List, Optional
-
-
-__all__ = [
-    'LogLevel',
-    'LogConfig',
-    'Log',
-    'LOG_CONFIG_TRACE_CONSOLE_ONLY',
-    'LOG_CONFIG_TRACE_FILE_ONLY',
-    'LOG_CONFIG_TRACE',
-    'LOG_CONFIG_INFO_CONSOLE_ONLY',
-    'LOG_CONFIG_INFO_FILE_ONLY',
-    'LOG_CONFIG_INFO',
-    'LOG_CONFIG_WARNING_CONSOLE_ONLY',
-    'LOG_CONFIG_WARNING_FILE_ONLY',
-    'LOG_CONFIG_WARNING',
-    'LOG_CONFIG_ERROR_CONSOLE_ONLY',
-    'LOG_CONFIG_ERROR_FILE_ONLY',
-    'LOG_CONFIG_ERROR',
-    'LOG_CONFIG_CRITICAL_CONSOLE_ONLY',
-    'LOG_CONFIG_CRITICAL_FILE_ONLY',
-    'LOG_CONFIG_CRITICAL'
-]
-
-
-class LogLevel(enum.IntEnum):
-    """Enum containing all LogLevels.
-
-    Enum values are:
-        Trace    - Show Tracing information. Show all messages.
-        Info     - Show Informational, Warning, Error, and Critical Events.
-        Warning  - Show Warning, Error, and Critical Events.
-        Error    - Show Errors and Critical Events.
-        Critical - Show Critical Events only.
-    """
-    Trace = logging.DEBUG
-    Info = logging.INFO
-    Warning = logging.WARNING
-    Error = logging.ERROR
-    Critical = logging.CRITICAL
-
-    def __str__(self):
-        return self._name_
-
-    def as_equal_len_str(self) -> str:
-        return _LEVEL_TO_EQUAL_LEN_STR[self]
-
-
-_LEVEL_TO_EQUAL_LEN_STR = {
-    LogLevel.Trace: 'Trace   ',
-    LogLevel.Info: 'Info    ',
-    LogLevel.Warning: 'Warning ',
-    LogLevel.Error: 'Error   ',
-    LogLevel.Critical: 'Critical'
-}
-
-
-class LogConfig:
-    """The LogConfig is a builder to configure various specialized logging configurations.
-    The constructed LogConfig must set via vimba.Vimba or the ScopedLogEnable Decorator
-    to start logging.
-    """
-
-    __ENTRY_FORMAT = logging.Formatter('%(asctime)s | %(message)s')
-
-    def __init__(self):
-        self.__handlers: List[logging.Handler] = []
-        self.__max_msg_length: Optional[int] = None
-
-    def add_file_log(self, level: LogLevel) -> 'LogConfig':
-        """Add a new Log file to the Config Builder.
-
-        Arguments:
-            level: LogLevel of the added log file.
-
-        Returns:
-            Reference to the LogConfig instance (builder pattern).
-        """
-        log_ts = datetime.datetime.today().strftime('%Y-%m-%d_%H-%M-%S')
-        log_file = 'VimbaPython_{}_{}.log'.format(log_ts, str(level))
-        log_file = os.path.join(os.getcwd(), log_file)
-
-        handler = logging.FileHandler(log_file, delay=True)
-        handler.setLevel(level)
-        handler.setFormatter(LogConfig.__ENTRY_FORMAT)
-
-        self.__handlers.append(handler)
-        return self
-
-    def add_console_log(self, level: LogLevel) -> 'LogConfig':
-        """Add a new Console Log to the Config Builder.
-
-        Arguments:
-            level: LogLevel of the added console log file.
-
-        Returns:
-            Reference to the LogConfig instance (builder pattern).
-        """
-        handler = logging.StreamHandler()
-        handler.setLevel(level)
-        handler.setFormatter(LogConfig.__ENTRY_FORMAT)
-
-        self.__handlers.append(handler)
-        return self
-
-    def set_max_msg_length(self, max_msg_length: int):
-        """Set max length of a log entry. Messages longer than this entry will be cut off."""
-        self.__max_msg_length = max_msg_length
-
-    def get_max_msg_length(self) -> Optional[int]:
-        """Get configured max message length"""
-        return self.__max_msg_length
-
-    def get_handlers(self) -> List[logging.Handler]:
-        """Get all configured log handlers"""
-        return self.__handlers
-
-
-class Log:
-    class __Impl:
-        """This class is wraps the logging Facility. Since this is as Singleton
-        Use Log.get_instace(), to access the log.
-        """
-        def __init__(self):
-            """Do not call directly. Use Log.get_instance() instead."""
-            self.__logger: Optional[logging.Logger] = None
-            self.__config: Optional[LogConfig] = None
-            self._test_buffer: Optional[List[str]] = None
-
-        def __bool__(self):
-            return bool(self.__logger)
-
-        def enable(self, config: LogConfig):
-            """Enable global VimbaPython logging mechanism.
-
-            Arguments:
-                config: The configuration to apply.
-            """
-            self.disable()
-
-            logger = logging.getLogger('VimbaPythonLog')
-            logger.setLevel(logging.DEBUG)
-
-            for handler in config.get_handlers():
-                logger.addHandler(handler)
-
-            self.__config = config
-            self.__logger = logger
-
-        def disable(self):
-            """Disable global VimbaPython logging mechanism."""
-            if self.__logger and self.__config:
-                for handler in self.__config.get_handlers():
-                    handler.close()
-                    self.__logger.removeHandler(handler)
-
-                self.__logger = None
-                self.__config = None
-
-        def get_config(self) -> Optional[LogConfig]:
-            """ Get log configuration
-
-            Returns:
-                Configuration if the log is enabled. In case the log is disabled return None.
-            """
-            return self.__config
-
-        def trace(self, msg: str):
-            """Add an entry of LogLevel.Trace to the log. Does nothing is the log is disabled.
-
-            Arguments:
-                msg - The message that should be added to the Log.
-            """
-            if self.__logger:
-                self.__logger.debug(self.__build_msg(LogLevel.Trace, msg))
-
-        def info(self, msg: str):
-            """Add an entry of LogLevel.Info to the log. Does nothing is the log is disabled.
-
-            Arguments:
-                msg - The message that should be added to the Log.
-            """
-            if self.__logger:
-                self.__logger.info(self.__build_msg(LogLevel.Info, msg))
-
-        def warning(self, msg: str):
-            """Add an entry of LogLevel.Warning to the log. Does nothing is the log is disabled.
-
-            Arguments:
-                msg - The message that should be added to the Log.
-            """
-            if self.__logger:
-                self.__logger.warning(self.__build_msg(LogLevel.Warning, msg))
-
-        def error(self, msg: str):
-            """Add an entry of LogLevel.Error to the log. Does nothing is the log is disabled.
-
-            Arguments:
-                msg - The message that should be added to the Log.
-            """
-            if self.__logger:
-                self.__logger.error(self.__build_msg(LogLevel.Error, msg))
-
-        def critical(self, msg: str):
-            """Add an entry of LogLevel.Critical to the log. Does nothing is the log is disabled.
-
-            Arguments:
-                msg - The message that should be added to the Log.
-            """
-            if self.__logger:
-                self.__logger.critical(self.__build_msg(LogLevel.Critical, msg))
-
-        def __build_msg(self, loglevel: LogLevel, msg: str) -> str:
-            msg = '{} | {}'.format(loglevel.as_equal_len_str(), msg)
-            max_len = self.__config.get_max_msg_length() if self.__config else None
-
-            if max_len and (max_len < len(msg)):
-                suffix = ' ...'
-                msg = msg[:max_len - len(suffix)] + suffix
-
-            if self._test_buffer is not None:
-                self._test_buffer.append(msg)
-
-            return msg
-
-    __instance = __Impl()
-
-    @staticmethod
-    def get_instance() -> '__Impl':
-        """Get Log instance."""
-        return Log.__instance
-
-
-def _build_cfg(console_level: Optional[LogLevel], file_level: Optional[LogLevel]) -> LogConfig:
-    cfg = LogConfig()
-
-    cfg.set_max_msg_length(200)
-
-    if console_level:
-        cfg.add_console_log(console_level)
-
-    if file_level:
-        cfg.add_file_log(file_level)
-
-    return cfg
-
-
-# Exported Default Log configurations.
-LOG_CONFIG_TRACE_CONSOLE_ONLY = _build_cfg(LogLevel.Trace, None)
-LOG_CONFIG_TRACE_FILE_ONLY = _build_cfg(None, LogLevel.Trace)
-LOG_CONFIG_TRACE = _build_cfg(LogLevel.Trace, LogLevel.Trace)
-LOG_CONFIG_INFO_CONSOLE_ONLY = _build_cfg(LogLevel.Info, None)
-LOG_CONFIG_INFO_FILE_ONLY = _build_cfg(None, LogLevel.Info)
-LOG_CONFIG_INFO = _build_cfg(LogLevel.Info, LogLevel.Info)
-LOG_CONFIG_WARNING_CONSOLE_ONLY = _build_cfg(LogLevel.Warning, None)
-LOG_CONFIG_WARNING_FILE_ONLY = _build_cfg(None, LogLevel.Warning)
-LOG_CONFIG_WARNING = _build_cfg(LogLevel.Warning, LogLevel.Warning)
-LOG_CONFIG_ERROR_CONSOLE_ONLY = _build_cfg(LogLevel.Error, None)
-LOG_CONFIG_ERROR_FILE_ONLY = _build_cfg(None, LogLevel.Error)
-LOG_CONFIG_ERROR = _build_cfg(LogLevel.Error, LogLevel.Error)
-LOG_CONFIG_CRITICAL_CONSOLE_ONLY = _build_cfg(LogLevel.Critical, None)
-LOG_CONFIG_CRITICAL_FILE_ONLY = _build_cfg(None, LogLevel.Critical)
-LOG_CONFIG_CRITICAL = _build_cfg(LogLevel.Critical, LogLevel.Critical)
diff --git a/VimbaPython/Source/vimba/util/runtime_type_check.py b/VimbaPython/Source/vimba/util/runtime_type_check.py
deleted file mode 100644
index 09553e2875abeda08fd784bbf18356b4ff44a1de..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/util/runtime_type_check.py
+++ /dev/null
@@ -1,223 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import collections.abc
-
-from inspect import isfunction, ismethod, signature
-from functools import wraps
-from typing import get_type_hints, Union
-from .log import Log
-
-
-__all__ = [
-    'RuntimeTypeCheckEnable'
-]
-
-
-class RuntimeTypeCheckEnable:
-    """Decorator adding runtime type checking to the wrapped callable.
-
-    Each time the callable is executed, all arguments are checked if they match with the given
-    type hints. If all checks are passed, the wrapped function is executed, if the given
-    arguments to not match a TypeError is raised.
-    Note: This decorator is no replacement for a feature complete TypeChecker. It supports only
-    a subset of all types expressible by type hints.
-    """
-    _log = Log.get_instance()
-
-    def __call__(self, func):
-        @wraps(func)
-        def wrapper(*args, **kwargs):
-            full_args, hints = self.__dismantle_sig(func, *args, **kwargs)
-
-            for arg_name in hints:
-                self.__verify_arg(func, hints[arg_name], (arg_name, full_args[arg_name]))
-
-            return func(*args, **kwargs)
-
-        return wrapper
-
-    def __dismantle_sig(self, func, *args, **kwargs):
-        # Get merge args, kwargs and defaults to complete argument list.
-        full_args = signature(func).bind(*args, **kwargs)
-        full_args.apply_defaults()
-
-        # Get available type hints, remove return value.
-        hints = get_type_hints(func)
-        hints.pop('return', None)
-
-        return (full_args.arguments, hints)
-
-    def __verify_arg(self, func, type_hint, arg_spec):
-        arg_name, arg = arg_spec
-
-        if (self.__matches(type_hint, arg)):
-            return
-
-        msg = '\'{}\' called with unexpected argument type. Argument\'{}\'. Expected type: {}.'
-        msg = msg.format(func.__qualname__, arg_name, type_hint)
-
-        RuntimeTypeCheckEnable._log.error(msg)
-        raise TypeError(msg)
-
-    def __matches(self, type_hint, arg) -> bool:
-        if self.__matches_base_types(type_hint, arg):
-            return True
-
-        elif self.__matches_type_types(type_hint, arg):
-            return True
-
-        elif self.__matches_union_types(type_hint, arg):
-            return True
-
-        elif self.__matches_tuple_types(type_hint, arg):
-            return True
-
-        elif self.__matches_dict_types(type_hint, arg):
-            return True
-
-        else:
-            return self.__matches_callable(type_hint, arg)
-
-    def __matches_base_types(self, type_hint, arg) -> bool:
-        return type_hint == type(arg)
-
-    def __matches_type_types(self, type_hint, arg) -> bool:
-        try:
-            if not type_hint.__origin__ == type:
-                return False
-
-            hint_args = type_hint.__args__
-
-        except AttributeError:
-            return False
-
-        return arg in hint_args
-
-    def __matches_union_types(self, type_hint, arg) -> bool:
-        try:
-            if not type_hint.__origin__ == Union:
-                return False
-
-        except AttributeError:
-            return False
-
-        # If Matches if true for an Union hint:
-        for hint in type_hint.__args__:
-            if self.__matches(hint, arg):
-                return True
-
-        return False
-
-    def __matches_tuple_types(self, type_hint, arg) -> bool:
-        try:
-            if not (type_hint.__origin__ == tuple and type(arg) == tuple):
-                return False
-
-        except AttributeError:
-            return False
-
-        if arg == ():
-            return True
-
-        if Ellipsis in type_hint.__args__:
-            fn = self.__matches_var_length_tuple
-
-        else:
-            fn = self.__matches_fixed_size_tuple
-
-        return fn(type_hint, arg)
-
-    def __matches_fixed_size_tuple(self, type_hint, arg) -> bool:
-        # To pass, the entire tuple must match in length and all types
-        expand_hint = type_hint.__args__
-
-        if len(expand_hint) != len(arg):
-            return False
-
-        for hint, value in zip(expand_hint, arg):
-            if not self.__matches(hint, value):
-                return False
-
-        return True
-
-    def __matches_var_length_tuple(self, type_hint, arg) -> bool:
-        # To pass a tuple can be empty or all contents must match the given type.
-        hint, _ = type_hint.__args__
-
-        for value in arg:
-            if not self.__matches(hint, value):
-                return False
-
-        return True
-
-    def __matches_dict_types(self, type_hint, arg) -> bool:
-        # To pass the hint must be a Dictionary and arg must match the given types.
-        try:
-            if not (type_hint.__origin__ == dict and type(arg) == dict):
-                return False
-
-        except AttributeError:
-            return False
-
-        key_type, val_type = type_hint.__args__
-
-        for k, v in arg.items():
-            if type(k) != key_type or type(v) != val_type:
-                return False
-
-        return True
-
-    def __matches_callable(self, type_hint, arg) -> bool:
-        # Return if the given hint is no callable
-        try:
-            if not type_hint.__origin__ == collections.abc.Callable:
-                return False
-
-        except AttributeError:
-            return False
-
-        # Verify that are is some form of callable.:
-        # 1) Check if it is either a function or a method
-        # 2) If it is an object, check if it has a __call__ method. If so use call for checks.
-        if not (isfunction(arg) or ismethod(arg)):
-
-            try:
-                arg = getattr(arg, '__call__')
-
-            except AttributeError:
-                return False
-
-        # Examine signature of given callable
-        sig_args = signature(arg).parameters
-        hint_args = type_hint.__args__
-
-        # Verify Parameter list length
-        if len(sig_args) != len(hint_args[:-1]):
-            return False
-
-        return True
diff --git a/VimbaPython/Source/vimba/util/scoped_log.py b/VimbaPython/Source/vimba/util/scoped_log.py
deleted file mode 100644
index 93d79208d7ed82e306d3d5a2a5187722b1e51ee7..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/util/scoped_log.py
+++ /dev/null
@@ -1,80 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-from functools import wraps
-from typing import Any, Callable, Tuple, Optional
-from .log import LogConfig, Log
-
-
-__all__ = [
-    'ScopedLogEnable'
-]
-
-
-class _ScopedLog:
-    __log = Log.get_instance()
-
-    def __init__(self, config: LogConfig):
-        self.__config: LogConfig = config
-        self.__old_config: Optional[LogConfig] = None
-
-    def __enter__(self):
-        self.__old_config = _ScopedLog.__log.get_config()
-        _ScopedLog.__log.enable(self.__config)
-        return self
-
-    def __exit__(self, exc_type, exc_value, exc_traceback):
-        if self.__old_config:
-            _ScopedLog.__log.enable(self.__old_config)
-
-        else:
-            _ScopedLog.__log.disable()
-
-
-class ScopedLogEnable:
-    """Decorator: Enables logging facility before execution of the wrapped function
-    and disables logging after exiting the wrapped function. This allows more specific
-    logging of a code section compared to enabling or disabling the global logging mechanism.
-
-    Arguments:
-        config: The configuration the log should be enabled with.
-    """
-    def __init__(self, config: LogConfig):
-        """Add scoped logging to a Callable.
-
-        Arguments:
-            config: The configuration the log should be enabled with.
-        """
-        self.__config = config
-
-    def __call__(self, func: Callable[..., Any]):
-        @wraps(func)
-        def wrapper(*args: Tuple[Any, ...]):
-            with _ScopedLog(self.__config):
-                return func(*args)
-
-        return wrapper
diff --git a/VimbaPython/Source/vimba/util/tracer.py b/VimbaPython/Source/vimba/util/tracer.py
deleted file mode 100644
index e1b2ae321435f68b53eec085f4878685d3cca19e..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/util/tracer.py
+++ /dev/null
@@ -1,136 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-from functools import reduce, wraps
-from inspect import signature
-from .log import Log
-
-
-__all__ = [
-    'TraceEnable'
-]
-
-
-_FMT_MSG_ENTRY: str = 'Enter | {}'
-_FMT_MSG_LEAVE: str = 'Leave | {}'
-_FMT_MSG_RAISE: str = 'Raise | {}, {}'
-_FMT_ERROR: str = 'ErrorType: {}, ErrorValue: {}'
-_INDENT_PER_LEVEL: str = '  '
-
-
-def _args_to_str(func, *args, **kwargs) -> str:
-    # Expand function signature
-    sig = signature(func).bind(*args, **kwargs)
-    sig.apply_defaults()
-    full_args = sig.arguments
-
-    # Early return if there is nothing to print
-    if not full_args:
-        return '(None)'
-
-    def fold(args_as_str: str, arg):
-        name, value = arg
-
-        if name == 'self':
-            arg_str = 'self'
-
-        else:
-            arg_str = str(value)
-
-        return '{}{}, '.format(args_as_str, arg_str)
-
-    return '({})'.format(reduce(fold, full_args.items(), '')[:-2])
-
-
-def _get_indent(level: int) -> str:
-    return _INDENT_PER_LEVEL * level
-
-
-def _create_enter_msg(name: str, level: int, args_str: str) -> str:
-    msg = '{}{}{}'.format(_get_indent(level), name, args_str)
-    return _FMT_MSG_ENTRY.format(msg)
-
-
-def _create_leave_msg(name: str, level: int, ) -> str:
-    msg = '{}{}'.format(_get_indent(level), name)
-    return _FMT_MSG_LEAVE.format(msg)
-
-
-def _create_raise_msg(name: str, level: int,  exc_type: Exception, exc_value: str) -> str:
-    msg = '{}{}'.format(_get_indent(level), name)
-    exc = _FMT_ERROR.format(exc_type, exc_value)
-    return _FMT_MSG_RAISE.format(msg, exc)
-
-
-class _Tracer:
-    __log = Log.get_instance()
-    __level: int = 0
-
-    @staticmethod
-    def is_log_enabled() -> bool:
-        return bool(_Tracer.__log)
-
-    def __init__(self, func, *args, **kwargs):
-        self.__full_name: str = '{}.{}'.format(func.__module__, func.__qualname__)
-        self.__full_args: str = _args_to_str(func, *args, **kwargs)
-
-    def __enter__(self):
-        msg = _create_enter_msg(self.__full_name, _Tracer.__level, self.__full_args)
-
-        _Tracer.__log.trace(msg)
-        _Tracer.__level += 1
-
-    def __exit__(self, exc_type, exc_value, exc_traceback):
-        _Tracer.__level -= 1
-
-        if exc_type:
-            msg = _create_raise_msg(self.__full_name, _Tracer.__level, exc_type, exc_value)
-
-        else:
-            msg = _create_leave_msg(self.__full_name, _Tracer.__level)
-
-        _Tracer.__log.trace(msg)
-
-
-class TraceEnable:
-    """Decorator: Adds an entry of LogLevel. Trace on entry and exit of the wrapped function.
-    On exit, the log entry contains information if the function was left normally or with an
-    exception.
-    """
-    def __call__(self, func):
-        @wraps(func)
-        def wrapper(*args, **kwargs):
-            if _Tracer.is_log_enabled():
-                with _Tracer(func, *args, **kwargs):
-                    result = func(*args, **kwargs)
-
-                return result
-
-            else:
-                return func(*args, **kwargs)
-
-        return wrapper
diff --git a/VimbaPython/Source/vimba/vimba.py b/VimbaPython/Source/vimba/vimba.py
deleted file mode 100644
index 20c77131e553a76ebac808c4faff483ec994dbc3..0000000000000000000000000000000000000000
--- a/VimbaPython/Source/vimba/vimba.py
+++ /dev/null
@@ -1,600 +0,0 @@
-"""BSD 2-Clause License
-
-Copyright (c) 2019, Allied Vision Technologies GmbH
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import threading
-from typing import List, Dict, Tuple
-from .c_binding import call_vimba_c, VIMBA_C_VERSION, VIMBA_IMAGE_TRANSFORM_VERSION, \
-                       G_VIMBA_C_HANDLE
-from .feature import discover_features, FeatureTypes, FeaturesTuple, FeatureTypeTypes, EnumFeature
-from .shared import filter_features_by_name, filter_features_by_type, filter_affected_features, \
-                    filter_selected_features, filter_features_by_category, \
-                    attach_feature_accessors, remove_feature_accessors, read_memory, \
-                    write_memory, read_registers, write_registers
-from .interface import Interface, InterfaceChangeHandler, InterfaceEvent, InterfacesTuple, \
-                       InterfacesList, discover_interfaces, discover_interface
-from .camera import Camera, CamerasList, CameraChangeHandler, CameraEvent, CamerasTuple, \
-                    discover_cameras, discover_camera
-from .util import Log, LogConfig, TraceEnable, RuntimeTypeCheckEnable, EnterContextOnCall, \
-                  LeaveContextOnCall, RaiseIfInsideContext, RaiseIfOutsideContext
-from .error import VimbaCameraError, VimbaInterfaceError, VimbaFeatureError
-from . import __version__ as VIMBA_PYTHON_VERSION
-
-
-__all__ = [
-    'Vimba',
-]
-
-
-class Vimba:
-    class __Impl:
-        """This class allows access to the entire Vimba System.
-        Vimba is meant be used in conjunction with the "with" - Statement, upon
-        entering the context, all system features, connected cameras and interfaces are detected
-        and can be used.
-        """
-
-        @TraceEnable()
-        @LeaveContextOnCall()
-        def __init__(self):
-            """Do not call directly. Use Vimba.get_instance() instead."""
-            self.__feats: FeaturesTuple = ()
-
-            self.__inters: InterfacesList = ()
-            self.__inters_lock: threading.Lock = threading.Lock()
-            self.__inters_handlers: List[InterfaceChangeHandler] = []
-            self.__inters_handlers_lock: threading.Lock = threading.Lock()
-
-            self.__cams: CamerasList = ()
-            self.__cams_lock: threading.Lock = threading.Lock()
-            self.__cams_handlers: List[CameraChangeHandler] = []
-            self.__cams_handlers_lock: threading.Lock = threading.Lock()
-
-            self.__nw_discover: bool = True
-            self.__context_cnt: int = 0
-
-        @TraceEnable()
-        def __enter__(self):
-            if not self.__context_cnt:
-                self._startup()
-
-            self.__context_cnt += 1
-            return self
-
-        @TraceEnable()
-        def __exit__(self, exc_type, exc_value, exc_traceback):
-            self.__context_cnt -= 1
-
-            if not self.__context_cnt:
-                self._shutdown()
-
-        def get_version(self) -> str:
-            """ Returns version string of VimbaPython and underlaying dependencies."""
-            msg = 'VimbaPython: {} (using VimbaC: {}, VimbaImageTransform: {})'
-            return msg.format(VIMBA_PYTHON_VERSION, VIMBA_C_VERSION, VIMBA_IMAGE_TRANSFORM_VERSION)
-
-        @RaiseIfInsideContext()
-        @RuntimeTypeCheckEnable()
-        def set_network_discovery(self, enable: bool):
-            """Enable/Disable network camera discovery.
-
-            Arguments:
-                enable - If 'True' VimbaPython tries to detect cameras connected via Ethernet
-                         on entering the 'with' statement. If set to 'False', no network
-                         discover occurs.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-                RuntimeError if called inside with-statement.
-            """
-            self.__nw_discover = enable
-
-        @RuntimeTypeCheckEnable()
-        def enable_log(self, config: LogConfig):
-            """Enable VimbaPython's logging mechanism.
-
-            Arguments:
-                config - Configuration for the logging mechanism.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-            """
-            Log.get_instance().enable(config)
-
-        def disable_log(self):
-            """Disable VimbaPython's logging mechanism."""
-            Log.get_instance().disable()
-
-        @TraceEnable()
-        @RaiseIfOutsideContext()
-        @RuntimeTypeCheckEnable()
-        def read_memory(self, addr: int, max_bytes: int) -> bytes:  # coverage: skip
-            """Read a byte sequence from a given memory address.
-
-            Arguments:
-                addr: Starting address to read from.
-                max_bytes: Maximum number of bytes to read from addr.
-
-            Returns:
-                Read memory contents as bytes.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-                RuntimeError then called outside of "with" - statement.
-                ValueError if addr is negative
-                ValueError if max_bytes is negative.
-                ValueError if the memory access was invalid.
-            """
-            # Note: Coverage is skipped. Function is untestable in a generic way.
-            return read_memory(G_VIMBA_C_HANDLE, addr, max_bytes)
-
-        @TraceEnable()
-        @RaiseIfOutsideContext()
-        @RuntimeTypeCheckEnable()
-        def write_memory(self, addr: int, data: bytes):  # coverage: skip
-            """ Write a byte sequence to a given memory address.
-
-            Arguments:
-                addr: Address to write the content of 'data' too.
-                data: Byte sequence to write at address 'addr'.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-                RuntimeError then called outside of "with" - statement.
-                ValueError if addr is negative.
-            """
-            # Note: Coverage is skipped. Function is untestable in a generic way.
-            return write_memory(G_VIMBA_C_HANDLE, addr, data)
-
-        @TraceEnable()
-        @RaiseIfOutsideContext()
-        @RuntimeTypeCheckEnable()
-        def read_registers(self, addrs: Tuple[int, ...]) -> Dict[int, int]:  # coverage: skip
-            """Read contents of multiple registers.
-
-            Arguments:
-                addrs: Sequence of addresses that should be read iteratively.
-
-            Return:
-                Dictionary containing a mapping from given address to the read register values.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-                RuntimeError then called outside of "with" - statement.
-                ValueError if any address in addrs_values is negative.
-                ValueError if the register access was invalid.
-            """
-            # Note: Coverage is skipped. Function is untestable in a generic way.
-            return read_registers(G_VIMBA_C_HANDLE, addrs)
-
-        @TraceEnable()
-        @RaiseIfOutsideContext()
-        @RuntimeTypeCheckEnable()
-        def write_registers(self, addrs_values: Dict[int, int]):  # coverage: skip
-            """Write data to multiple Registers.
-
-            Arguments:
-                addrs_values: Mapping between Register addresses and the data to write.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-                RuntimeError then called outside of "with" - statement.
-                ValueError if any address in addrs is negative.
-                ValueError if the register access was invalid.
-            """
-            # Note: Coverage is skipped. Function is untestable in a generic way.
-            return write_registers(G_VIMBA_C_HANDLE, addrs_values)
-
-        @RaiseIfOutsideContext()
-        def get_all_interfaces(self) -> InterfacesTuple:
-            """Get access to all discovered Interfaces:
-
-            Returns:
-                A set of all currently detected Interfaces.
-
-            Raises:
-                RuntimeError then called outside of "with" - statement.
-            """
-            with self.__inters_lock:
-                return tuple(self.__inters)
-
-        @RaiseIfOutsideContext()
-        @RuntimeTypeCheckEnable()
-        def get_interface_by_id(self, id_: str) -> Interface:
-            """Lookup Interface with given ID.
-
-            Arguments:
-                id_ - Interface Id to search for.
-
-            Returns:
-                Interface associated with given Id.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-                RuntimeError then called outside of "with" - statement.
-                VimbaInterfaceError if interface with id_ can't be found.
-            """
-            with self.__inters_lock:
-                inter = [inter for inter in self.__inters if id_ == inter.get_id()]
-
-            if not inter:
-                raise VimbaInterfaceError('Interface with ID \'{}\' not found.'.format(id_))
-
-            return inter.pop()
-
-        @RaiseIfOutsideContext()
-        def get_all_cameras(self) -> CamerasTuple:
-            """Get access to all discovered Cameras.
-
-            Returns:
-                A set of all currently detected Cameras.
-
-            Raises:
-                RuntimeError then called outside of "with" - statement.
-            """
-            with self.__cams_lock:
-                return tuple(self.__cams)
-
-        @RaiseIfOutsideContext()
-        @RuntimeTypeCheckEnable()
-        def get_camera_by_id(self, id_: str) -> Camera:
-            """Lookup Camera with given ID.
-
-            Arguments:
-                id_ - Camera Id to search for. For GigE - Cameras, the IP and MAC-Address
-                      can be used to Camera lookup
-
-            Returns:
-                Camera associated with given Id.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-                RuntimeError then called outside of "with" - statement.
-                VimbaCameraError if camera with id_ can't be found.
-            """
-            with self.__cams_lock:
-                # Search for given Camera Id in all currently detected cameras.
-                for cam in self.__cams:
-                    if id_ == cam.get_id():
-                        return cam
-
-                # If a search by ID fails, the given id_ is almost certain an IP or MAC - Address.
-                # Try to query this Camera.
-                try:
-                    cam_info = discover_camera(id_)
-
-                    # Since cam_info is newly constructed, search in existing cameras for a Camera
-                    for cam in self.__cams:
-                        if cam_info.get_id() == cam.get_id():
-                            return cam
-
-                except VimbaCameraError:
-                    pass
-
-            raise VimbaCameraError('No Camera with Id \'{}\' available.'.format(id_))
-
-        @RaiseIfOutsideContext()
-        def get_all_features(self) -> FeaturesTuple:
-            """Get access to all discovered system features:
-
-            Returns:
-                A set of all currently detected Features.
-
-            Raises:
-                RuntimeError then called outside of "with" - statement.
-            """
-            return self.__feats
-
-        @TraceEnable()
-        @RaiseIfOutsideContext()
-        @RuntimeTypeCheckEnable()
-        def get_features_affected_by(self, feat: FeatureTypes) -> FeaturesTuple:
-            """Get all system features affected by a specific system feature.
-
-            Arguments:
-                feat - Feature used find features that are affected by feat.
-
-            Returns:
-                A set of features affected by changes on 'feat'.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-                RuntimeError then called outside of "with" - statement.
-                VimbaFeatureError if 'feat' is not a system feature.
-            """
-            return filter_affected_features(self.__feats, feat)
-
-        @TraceEnable()
-        @RaiseIfOutsideContext()
-        @RuntimeTypeCheckEnable()
-        def get_features_selected_by(self, feat: FeatureTypes) -> FeaturesTuple:
-            """Get all system features selected by a specific system feature.
-
-            Arguments:
-                feat - Feature used find features that are selected by feat.
-
-            Returns:
-                A set of features selected by 'feat'.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-                RuntimeError then called outside of "with" - statement.
-                VimbaFeatureError if 'feat' is not a system feature.
-            """
-            return filter_selected_features(self.__feats, feat)
-
-        @RaiseIfOutsideContext()
-        @RuntimeTypeCheckEnable()
-        def get_features_by_type(self, feat_type: FeatureTypeTypes) -> FeaturesTuple:
-            """Get all system features of a specific feature type.
-
-            Valid FeatureTypes are: IntFeature, FloatFeature, StringFeature, BoolFeature,
-            EnumFeature, CommandFeature, RawFeature
-
-            Arguments:
-                feat_type - FeatureType used find features of that type.
-
-            Returns:
-                A set of features of type 'feat_type'.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-                RuntimeError then called outside of "with" - statement.
-            """
-            return filter_features_by_type(self.__feats, feat_type)
-
-        @RaiseIfOutsideContext()
-        @RuntimeTypeCheckEnable()
-        def get_features_by_category(self, category: str) -> FeaturesTuple:
-            """Get all system features of a specific category.
-
-            Arguments:
-                category - Category that should be used for filtering.
-
-            Returns:
-                A set of features of category 'category'.
-
-            Returns:
-                TypeError if parameters do not match their type hint.
-                RuntimeError then called outside of "with" - statement.
-            """
-            return filter_features_by_category(self.__feats, category)
-
-        @RaiseIfOutsideContext()
-        @RuntimeTypeCheckEnable()
-        def get_feature_by_name(self, feat_name: str) -> FeatureTypes:
-            """Get a system feature by its name.
-
-            Arguments:
-                feat_name - Name used to find a feature.
-
-            Returns:
-                Feature with the associated name.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-                RuntimeError then called outside of "with" - statement.
-                VimbaFeatureError if no feature is associated with 'feat_name'.
-            """
-            feat = filter_features_by_name(self.__feats, feat_name)
-
-            if not feat:
-                raise VimbaFeatureError('Feature \'{}\' not found.'.format(feat_name))
-
-            return feat
-
-        @RuntimeTypeCheckEnable()
-        def register_camera_change_handler(self, handler: CameraChangeHandler):
-            """Add Callable what is executed on camera connect/disconnect
-
-            Arguments:
-                handler - The change handler that shall be added.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-            """
-            with self.__cams_handlers_lock:
-                if handler not in self.__cams_handlers:
-                    self.__cams_handlers.append(handler)
-
-        def unregister_all_camera_change_handlers(self):
-            """Remove all currently registered camera change handlers"""
-            with self.__cams_handlers_lock:
-                if self.__cams_handlers:
-                    self.__cams_handlers.clear()
-
-        @RuntimeTypeCheckEnable()
-        def unregister_camera_change_handler(self, handler: CameraChangeHandler):
-            """Remove previously registered camera change handler
-
-            Arguments:
-                handler - The change handler that shall be removed.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-            """
-            with self.__cams_handlers_lock:
-                if handler in self.__cams_handlers:
-                    self.__cams_handlers.remove(handler)
-
-        @RuntimeTypeCheckEnable()
-        def register_interface_change_handler(self, handler: InterfaceChangeHandler):
-            """Add Callable what is executed on interface connect/disconnect
-
-            Arguments:
-                handler - The change handler that shall be added.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-            """
-            with self.__inters_handlers_lock:
-                if handler not in self.__inters_handlers:
-                    self.__inters_handlers.append(handler)
-
-        def unregister_all_interface_change_handlers(self):
-            """Remove all currently registered interface change handlers"""
-            with self.__inters_handlers_lock:
-                if self.__inters_handlers:
-                    self.__inters_handlers.clear()
-
-        @RuntimeTypeCheckEnable()
-        def unregister_interface_change_handler(self, handler: InterfaceChangeHandler):
-            """Remove previously registered interface change handler
-
-            Arguments:
-                handler - The change handler that shall be removed.
-
-            Raises:
-                TypeError if parameters do not match their type hint.
-            """
-            with self.__inters_handlers_lock:
-                if handler in self.__inters_handlers:
-                    self.__inters_handlers.remove(handler)
-
-        @TraceEnable()
-        @EnterContextOnCall()
-        def _startup(self):
-            Log.get_instance().info('Starting {}'.format(self.get_version()))
-
-            call_vimba_c('VmbStartup')
-
-            self.__inters = discover_interfaces()
-            self.__cams = discover_cameras(self.__nw_discover)
-            self.__feats = discover_features(G_VIMBA_C_HANDLE)
-            attach_feature_accessors(self, self.__feats)
-
-            feat = self.get_feature_by_name('DiscoveryInterfaceEvent')
-            feat.register_change_handler(self.__inter_cb_wrapper)
-
-            feat = self.get_feature_by_name('DiscoveryCameraEvent')
-            feat.register_change_handler(self.__cam_cb_wrapper)
-
-        @TraceEnable()
-        @LeaveContextOnCall()
-        def _shutdown(self):
-            self.unregister_all_camera_change_handlers()
-            self.unregister_all_interface_change_handlers()
-
-            for feat in self.__feats:
-                feat.unregister_all_change_handlers()
-
-            remove_feature_accessors(self, self.__feats)
-            self.__feats = ()
-            self.__cams_handlers = []
-            self.__cams = ()
-            self.__inters_handlers = []
-            self.__inters = ()
-
-            call_vimba_c('VmbShutdown')
-
-        def __cam_cb_wrapper(self, cam_event: EnumFeature):   # coverage: skip
-            # Skip coverage because it can't be measured. This is called from C-Context
-            event = CameraEvent(int(cam_event.get()))
-            cam = None
-            cam_id = self.get_feature_by_name('DiscoveryCameraIdent').get()
-            log = Log.get_instance()
-
-            # New camera found: Add it to camera list
-            if event == CameraEvent.Detected:
-                cam = discover_camera(cam_id)
-
-                with self.__cams_lock:
-                    self.__cams.append(cam)
-
-                log.info('Added camera \"{}\" to active cameras'.format(cam_id))
-
-            # Existing camera lost. Remove it from active cameras
-            elif event == CameraEvent.Missing:
-                with self.__cams_lock:
-                    cam = [c for c in self.__cams if cam_id == c.get_id()].pop()
-                    cam._disconnected = True
-                    self.__cams.remove(cam)
-
-                log.info('Removed camera \"{}\" from active cameras'.format(cam_id))
-
-            else:
-                cam = self.get_camera_by_id(cam_id)
-
-            with self.__cams_handlers_lock:
-                for handler in self.__cams_handlers:
-                    try:
-                        handler(cam, event)
-
-                    except Exception as e:
-                        msg = 'Caught Exception in handler: '
-                        msg += 'Type: {}, '.format(type(e))
-                        msg += 'Value: {}, '.format(e)
-                        msg += 'raised by: {}'.format(handler)
-                        Log.get_instance().error(msg)
-                        raise e
-
-        def __inter_cb_wrapper(self, inter_event: EnumFeature):   # coverage: skip
-            # Skip coverage because it can't be measured. This is called from C-Context
-            event = InterfaceEvent(int(inter_event.get()))
-            inter = None
-            inter_id = self.get_feature_by_name('DiscoveryInterfaceIdent').get()
-            log = Log.get_instance()
-
-            # New interface found: Add it to interface list
-            if event == InterfaceEvent.Detected:
-                inter = discover_interface(inter_id)
-
-                with self.__inters_lock:
-                    self.__inters.append(inter)
-
-                log.info('Added interface \"{}\" to active interfaces'.format(inter_id))
-
-            # Existing interface lost. Remove it from active interfaces
-            elif event == InterfaceEvent.Missing:
-                with self.__inters_lock:
-                    inter = [i for i in self.__inters if inter_id == i.get_id()].pop()
-                    self.__inters.remove(inter)
-
-                log.info('Removed interface \"{}\" from active interfaces'.format(inter_id))
-
-            else:
-                inter = self.get_interface_by_id(inter_id)
-
-            with self.__inters_handlers_lock:
-                for handler in self.__inters_handlers:
-                    try:
-                        handler(inter, event)
-
-                    except Exception as e:
-                        msg = 'Caught Exception in handler: '
-                        msg += 'Type: {}, '.format(type(e))
-                        msg += 'Value: {}, '.format(e)
-                        msg += 'raised by: {}'.format(handler)
-                        Log.get_instance().error(msg)
-                        raise e
-
-    __instance = __Impl()
-
-    @staticmethod
-    @TraceEnable()
-    def get_instance() -> '__Impl':
-        """Get VimbaSystem Singleton."""
-        return Vimba.__instance
diff --git a/VimbaPython/Uninstall.sh b/VimbaPython/Uninstall.sh
deleted file mode 100755
index ced894e8e3eb607f03be50644eb916d865c78a0f..0000000000000000000000000000000000000000
--- a/VimbaPython/Uninstall.sh
+++ /dev/null
@@ -1,236 +0,0 @@
-#!/bin/bash
-
-# BSD 2-Clause License
-#
-# Copyright (c) 2019, Allied Vision Technologies GmbH
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# 1. Redistributions of source code must retain the above copyright notice, this
-#    list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright notice,
-#    this list of conditions and the following disclaimer in the documentation
-#    and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# global parameters parsed from command line flags 
-DEBUG=false
-
-while getopts "d" flag; do
-  case "${flag}" in
-    d) DEBUG=true ;;
-    *) ;;
-  esac
-done
-
-function inside_virtual_env
-{
-    if [ -z "$VIRTUAL_ENV" ]; then
-        echo "false"
-    else
-        echo "true"
-    fi
-}
-
-
-function get_python_versions
-{
-    DETECTED_PYTHONS=()
-
-    # Check if the script was run from a virtual environment and set search path for binary accordingly
-    if [ "$(inside_virtual_env)" = true ]; then
-        if [ "$DEBUG" = true ] ; then
-            echo "Detected active virtual environment" >&2
-        fi
-        SEARCH_PATH="$VIRTUAL_ENV"/bin
-    else
-        if [ "$DEBUG" = true ] ; then
-            echo "No virtual environment detected" >&2
-        fi
-        SEARCH_PATH=$(echo "$PATH" | tr ":" " ")
-    fi
-
-    if [ "$DEBUG" = true ] ; then
-        echo "Searching for python in $SEARCH_PATH" >&2
-    fi
-
-    # iterate over all detected python binaries and check if they are viable installations
-    for P in $(whereis -b -B $SEARCH_PATH -f python | tr " " "\n" | grep "python[[:digit:]]\.[[:digit:]]\.\?[[:digit:]]\?$" | sort -V)
-    do
-        # 1) Remove results that are links (venv executables are often links so we allow those)
-        if [ -L "$P" ] && [ "$(inside_virtual_env)" = false ]
-        then
-            if [ "$DEBUG" = true ] ; then
-                echo "$P was a link" >&2
-            fi
-            continue
-        fi
-
-        # 2) Remove results that are directories
-        if [ -d "$P" ]
-        then
-            if [ "$DEBUG" = true ] ; then
-                echo "$P was a directory" >&2
-            fi
-            continue
-        fi
-
-        # 3) Remove results that offer no pip support.
-        $P -m pip > /dev/null 2>&1
-        if [ $? -ne 0 ]
-        then
-            if [ "$DEBUG" = true ] ; then
-                echo "$P did not have pip support" >&2
-            fi
-            continue 
-        fi
-
-        # 4) Remove results where VimbaPython is not installed
-        if [ $($P -m pip list --format=columns | grep "VimbaPython" | wc -l) -ne 1 ]
-        then
-            if [ "$DEBUG" = true ] ; then
-                echo "$P did not have VimbaPython installed" >&2
-            fi
-            continue
-        fi
-        DETECTED_PYTHONS+=("$P")
-    done
-    echo "${DETECTED_PYTHONS[@]}"
-}
-echo "#################################"
-echo "# VimbaPython uninstall script. #"
-echo "#################################"
-
-#########################
-# Perform sanity checks #
-#########################
-
-if [ $UID -ne 0 ] && [ "$(inside_virtual_env)" = false ]
-then
-    echo "Error: Uninstallation requires root privileges. Abort."
-    exit 1
-fi
-
-PWD=$(pwd)
-PWD=${PWD##*/}
-
-if [[ "$PWD" != "VimbaPython" ]]
-then
-    echo "Error: Please execute Uninstall.sh within VimbaPython directory."
-    exit 1
-fi
-
-PYTHONS=$(get_python_versions)
-
-if [ -z "$PYTHONS" ]
-then
-    echo "Can't remove VimbaPython. No installation was found."
-    exit 0
-fi
-
-#############################################
-# Determine python to uninstall VimbaPython #
-#############################################
-
-# List all given interpreters and create an Index
-echo "VimbaPython is installed for the following interpreters:"
-
-ITER=0
-
-for ITEM in ${PYTHONS[@]}
-do  
-    echo "  $ITER: $ITEM"
-    LAST=$ITER
-    ITER=$(expr $ITER + 1)
-done
-
-# Read and verfiy user input
-while true
-do
-    echo -n "Enter python version to uninstall VimbaPython (0 - $LAST, all: a, default: a): "
-    read TMP
-
-    # Set TMP to default value if nothing was entered.
-    if [ -z $TMP ]
-    then
-        TMP="a"
-    fi
-
-    # Check if Input was "a". If so skip further Input verification.
-    if [ "$TMP" == "a" ]
-    then
-        echo "  Removing all installations of VimbaPython."
-        ITER=$TMP
-        break
-
-    else
-        # Check if Input was a number. If so: assign it.
-        if [ $TMP -eq $TMP ] 2>/dev/null
-        then
-            ITER=$TMP
-
-        else
-            echo "  Error: Given input was not a number. Try again."
-            continue
-        fi
-    
-        # Verify Input range
-        if [ 0 -le $ITER -a $ITER -le $LAST ]
-        then
-            break
-
-        else
-            echo "  Error: Given input is not between 0 and $LAST. Try again."
-        fi
-    fi
-done
-
-# Search for selected python interpreter
-IDX=0
-PYTHON=""
-
-for ITEM in ${PYTHONS[@]}
-do  
-    if [ "$ITER" == "a" ]
-    then
-        PYTHON=$PYTHONS
-        break
-
-    elif [ $IDX -eq $ITER ]
-    then
-        PYTHON=$ITEM
-        break
-    else
-        IDX=$(expr $IDX + 1)
-    fi
-done
-
-
-# Remove VimbaPython via pip
-for P in ${PYTHON[@]}
-do
-    echo ""
-    echo "Remove VimbaPython for $P"
-
-    $P -m pip uninstall --yes VimbaPython
-
-    if [ $? -eq 0 ]
-    then
-        echo "VimbaPython removal for $P was successful."
-    else
-        echo "Error: VimbaPython removal for $P failed. Please check pip output for details."
-    fi
-done
diff --git a/VimbaUSBTL/CTI/x86_64bit/VimbaUSBTL.cti b/VimbaUSBTL/CTI/x86_64bit/VimbaUSBTL.cti
deleted file mode 100644
index f45ca4dbca6ec9803e1c7a03c89d5fed99bf3ae4..0000000000000000000000000000000000000000
Binary files a/VimbaUSBTL/CTI/x86_64bit/VimbaUSBTL.cti and /dev/null differ
diff --git a/VimbaUSBTL/CTI/x86_64bit/VimbaUSBTL.xml b/VimbaUSBTL/CTI/x86_64bit/VimbaUSBTL.xml
deleted file mode 100644
index 752aa2108f4179ecc56b3e05f9bf4bf4a9a8259c..0000000000000000000000000000000000000000
--- a/VimbaUSBTL/CTI/x86_64bit/VimbaUSBTL.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" standalone="no" ?>
-<Settings>
-
-    <!--
-            Use this to activate logging and set filename for logging (path can be absolute or relative to TL)
-            Default behavior if omitted:    Logging is deactivated
-    -->
-    <!-- <LogFileName>&#37;TEMP&#37;\VimbaUSBTL.log</LogFileName> -->
-
-
-    <!--
-            Append messages to log file or reset log file at each transport layer restart (if logging is enabled)
-            True:                           Always append log messages
-            False:                          Reset log file at each transport layer restart
-            Default behavior if omitted:    Reset log file at each transport layer restart
-    -->
-    <!-- <AppendLog>True</AppendLog> -->
-
-
-    <!--
-            Activate less pedantic function parameter checks (needed for some TL consumers)
-            True:                           Tolerant function parameter checks
-            False:                          Pedantic function parameter checks
-            Default behavior if omitted:    Pedantic function parameter checks (GenTL compliant behavior)
-    -->
-    <TolerateTypeNullptr>True</TolerateTypeNullptr>
-
-
-    <!--
-            Emulate unsupported device access modes (needed for some TL consumers)
-            True:                           Emulation on
-            False:                          Emulation off
-            Default behavior if omitted:    Emulation off (GenTL compliant behavior)
-    -->
-    <EmulateAccessModes>True</EmulateAccessModes>
-    
-    
-    <!--
-			Use manual maximum transfer count for USB transfers
-            Decimal and hexadecimal numbers (prefixed with "0x") can be used
-            Default behavior if omitted:    Windows: 64
-                                            Linux:   31
-    -->
-    <!-- <MaxTransferCount>64</MaxTransferCount> -->
-	
-    
-	<!--
-			Use manual maximum transfer size (in bytes) for USB transfers
-            Decimal and hexadecimal numbers (prefixed with "0x") can be used
-            Default behavior if omitted:    262144
-    -->
-    <!-- <MaxTransferSize>262144</MaxTransferSize> -->
-    
-    
-    <!--
-			Number of frames to use for intermediate frame buffering. Values
-            greater than 0 mean that no zero copy is possible anymore.
-            Decimal and hexadecimal numbers (prefixed with "0x") can be used
-            Default behavior if omitted:    0 (No intermediate frame buffering)
-    -->
-    <!-- <DriverBuffersCount>3</DriverBuffersCount> -->
-    
-    <!--
-            Set the folder in which remote device XML files will be cached
-            Default behavior if omitted:    No XML files will be cached
-    -->
-    <!-- <XMLCacheFolder>XMLCache</XMLCacheFolder> -->
-
-</Settings>
\ No newline at end of file
diff --git a/VimbaUSBTL/Documentation/ReleaseNotes.txt b/VimbaUSBTL/Documentation/ReleaseNotes.txt
deleted file mode 100644
index 7ba94cf7d982955d5881a185f4c99dbb4907816c..0000000000000000000000000000000000000000
--- a/VimbaUSBTL/Documentation/ReleaseNotes.txt
+++ /dev/null
@@ -1,124 +0,0 @@
-===========================================================================
-
-  Vimba USB Transport Layer - Release Notes 
-  
-  Version: 1.4.0
-  Date:    October 2021
-===========================================================================
-
---------------------------------
-Components and Version Reference  
---------------------------------
-
-Drivers
-------
-  Vimba USB Driver                                    1.0.0
-
-Vimba GenICam Transport Layer modules
------------------------------------
-  USB Transport Layer (VimbaUSBTL.cti)                1.4.0*
-
-Tools
------
-  Vimba Driver Installer (VimbaDriverInstaller.exe)	  1.1.9
-  
----------------------
-Hardware Requirements
----------------------
-PC or laptop with 1 GHz 32-bit (x86) or 64-bit (x64) processor or better.
-
-ARMv8-compatible 64-bit embedded system, for example, Jetson TX2. 
-
-Additionally, a built-in USB 3.0 controller for PCI Express bus is required.
-
-  Remark:
-  Testing has been performed on host controllers that are based on Intel chip
-  sets and Renesas chip sets. The driver may run on host controllers that
-  are based on chip sets from other vendors, too. Nevertheless for best
-  performance we highly recommend Intel chip sets.
-  However, if there are any problems please feel free to contact our Technical
-  Software Support (see below).
-
-
-------------
-Installation
-------------            
-The Vimba USB Transport Layer is part of the Vimba SDK. For instructions on how
-to install this module, please refer to the Vimba User Manual.
-
-
--------------------------------------------------------
-Correlations with other Allied Vision Software Packages
--------------------------------------------------------
-Please refer to the Vimba SDK Release Notes.
-
-
--------------------------------------------------------
-Known issues
--------------------------------------------------------
-MSI Uninstallation by new Windows 10 dialog "Apps&Features" is not supported by now.
-Please use the old "Programs and Features" dialog.
-
-
----------------------------
-Changes and release history
----------------------------
-
-Changes in version 1.4.0:
--------------------------
--  Fixed: Reset cameras streaming state when opened (Endpoint Halt)
--  New: Zero-Copy for Linux/libusb for better performance
--  Updated 3rd-party libraries
-
-Changes in version 1.3.0:
--------------------------
-- Increased default MaxTransferSize value for better performance with current Linux versions
-- Improved camera detection on Linux systems (plugin event handling)
-
-Changes in version 1.2.2:
--------------------------
-- Solved conflicts between customers' boost version and the internally used version
-- Other internal bug fixes
-
-
-Changes in version 1.2.1:
--------------------------
-- Improved visibility of USB camera status
-- Other bug fixes
-
-Vimba Driver Installer
-  - Internal changes
-
-
-Changes in version 1.2.0:
--------------------------
-- GenTL 1.5 support
-
-
-Changes in version 1.1.1:
--------------------------
-USB Transport Layer
-  - Minor bug fixes
-
-Installer and driver
-   - New certificates for installer and driver (Windows 7, Windows 8, and Windows 8.1)
-
-Changes in version 1.1.0:
--------------------------
-USB Transport Layer
-  - Minor bug fixes
-  - Added transport layer XML file caching
-
-Changes in version 1.0.3:
--------------------------
-USB Transport Layer
-  - Minor bug fixes
-  - Interface features DeviceDriverPath and DeviceLocation added
-
-
-----------------------------------------
-Allied Vision Technical Support
-----------------------------------------
-Contact us:
-https://www.alliedvision.com/contact
-
diff --git a/VimbaUSBTL/Documentation/VimbaUSBTLFeaturesManual.pdf b/VimbaUSBTL/Documentation/VimbaUSBTLFeaturesManual.pdf
deleted file mode 100644
index 5bf26f6aa173477c48cba34221aa96f714e7c367..0000000000000000000000000000000000000000
Binary files a/VimbaUSBTL/Documentation/VimbaUSBTLFeaturesManual.pdf and /dev/null differ
diff --git a/VimbaUSBTL/Install.sh b/VimbaUSBTL/Install.sh
deleted file mode 100755
index eeee76831aa917a217c7d54967f2f1a19924773c..0000000000000000000000000000000000000000
--- a/VimbaUSBTL/Install.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/sh
-#==============================================================================
-# Copyright (C) 2013 - 2017 Allied Vision Technologies.  All Rights Reserved.
-#
-# Redistribution of this file, in original or modified form, without
-# prior written consent of Allied Vision Technologies is prohibited.
-#
-#------------------------------------------------------------------------------
-#
-# File:        Install.sh
-#
-# Description: Setup script for creating a startup script that exports the
-#	       GENICAM_GENTL32_PATH and GENICAM_GENTL64_PATH variable
-#
-#------------------------------------------------------------------------------
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-# NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-#==============================================================================
-CWD=$(dirname $(readlink -f $0))
-UNAME=$(uname -m)
-
-if [ ${UNAME} = amd64 ] || [ ${UNAME} = x86_64 ]
-then
-ARCH=x86
-elif [ ${UNAME} = aarch64 ]
-then
-ARCH=arm
-else
-   echo "Error: Incompatible system architecture found." 1>&2
-   exit 1
-fi
-
-# Make sure our script is only being run with root privileges
-if [ "$(id -u)" != "0" ];
-then
-   echo "Error: This script must be run with root privileges." 1>&2
-   exit 1
-fi
-
-TL_NAME=VimbaUSBTL
-PROFILE_FOLDER=/etc/profile.d
-UDEV_FOLDER=/etc/udev/rules.d
-
-TL_SCRIPT_64BIT=${PROFILE_FOLDER}/${TL_NAME}_64bit.sh
-TL_PATH_64BIT=$CWD/CTI/${ARCH}_64bit
-echo "Registering GENICAM_GENTL64_PATH"
-printf "#!/bin/sh\n\n#Do not edit this file manually because it may be overwritten automatically.\nexport GENICAM_GENTL64_PATH=\$GENICAM_GENTL64_PATH:\"%s\"" $TL_PATH_64BIT > $TL_SCRIPT_64BIT
-chmod +x $TL_SCRIPT_64BIT
-
-UDEV_SCRIPT=${UDEV_FOLDER}/99-${TL_NAME}.rules
-echo "Registering $TL_NAME device types"
-printf "SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"1ab2\", ATTRS{idProduct}==\"0001\", MODE=\"0666\"\nSUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"1ab2\", ATTRS{idProduct}==\"ff01\", MODE=\"0666\"\n" > $UDEV_SCRIPT
-
-echo "Done"
-echo "Please reboot before using the USB transport layer"
diff --git a/VimbaUSBTL/SetGenTLPath.sh b/VimbaUSBTL/SetGenTLPath.sh
deleted file mode 100755
index 6a5f8d40ca234b3052b99671ab507eaeacd5b821..0000000000000000000000000000000000000000
--- a/VimbaUSBTL/SetGenTLPath.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/sh
-#==============================================================================
-# Copyright (C) 2017 Allied Vision Technologies.  All Rights Reserved.
-#
-# Redistribution of this file, in original or modified form, without
-# prior written consent of Allied Vision Technologies is prohibited.
-#
-#------------------------------------------------------------------------------
-#
-# File:			SetGenTLPath.sh
-#
-# Description:	This script sets the GENICAM_GENTL32_PATH and
-#	       		GENICAM_GENTL64_PATH environment variable for the current shell
-#	       		only.
-#	       		This can become necessary when running a Vimba application under
-#				a not logged-in user like a service.
-#
-# Note:			This script needs to be executed sourced. That is, using the
-#				same shell the application will be launched in. This is done
-#				by calling the script with the built-in shell command source
-#				or . (period), e.g. . SetGenTLPath.sh
-#
-#------------------------------------------------------------------------------
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-# NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-#==============================================================================
-CWD=$(dirname $(readlink -f $_))
-UNAME=$(uname -m)
-
-if [ ${UNAME} = aarch64 ]
-then
-ARCH=arm
-elif [ ${UNAME} = amd64 ] || [ ${UNAME} = x86_64 ]
-then
-ARCH=x86
-else
-   echo "
-   Error: Incompatible system architecture found." 1>&2
-   exit 1
-fi
-
-if [ "$_" = "$0" ]
-then
-  echo "
-  Please asure to run this script using the 'source' shell command.
-  This is done through: '. SetGenTLPath.sh'
-  Please note the whitespace.
-  Further help can be found by typing 'help source' or 'help .' in your shell.
-  "
-  exit 1
-fi
-
-TL_PATH_64BIT=$CWD/CTI/${ARCH}_64bit
-echo "
-Setting the GENICAM_GENTL64_PATH to $TL_PATH_64BIT for this shell only."
-export GENICAM_GENTL64_PATH=:$TL_PATH_64BIT	
-
-echo "  Done
-"
diff --git a/VimbaUSBTL/Uninstall.sh b/VimbaUSBTL/Uninstall.sh
deleted file mode 100755
index 655f2dbd5a2f68aa47dee8a43efdb9b7e2e704d0..0000000000000000000000000000000000000000
--- a/VimbaUSBTL/Uninstall.sh
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/bin/sh
-#==============================================================================
-# Copyright (C) 2013 - 2017 Allied Vision Technologies.  All Rights Reserved.
-#
-# Redistribution of this file, in original or modified form, without
-# prior written consent of Allied Vision Technologies is prohibited.
-#
-#------------------------------------------------------------------------------
-#
-# File:        Uninstall.sh
-#
-# Description: Setup script for deleting a startup script that exports the
-#	       GENICAM_GENTL32_PATH and GENICAM_GENTL64_PATH variable
-#
-#------------------------------------------------------------------------------
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
-# NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
-# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-#==============================================================================
-
-CWD=$(dirname $(readlink -f $0))
-UNAME=$(uname -m)
-
-if [ ${UNAME} = amd64 ] || [ ${UNAME} = x86_64 ]
-then
-ARCH=x86
-elif [ ${UNAME} = aarch64 ]
-then
-ARCH=arm
-else
-   echo "Error: Incompatible system architecture found." 1>&2
-   exit 1
-fi
-
-# Make sure our script is only being run with root privileges
-if [ "$(id -u)" != "0" ];
-then
-   echo "Error: This script must be run with root privileges." 1>&2
-   exit 1
-fi
-
-TL_NAME=VimbaUSBTL
-PROFILE_FOLDER=/etc/profile.d
-UDEV_FOLDER=/etc/udev/rules.d
-
-TL_SCRIPT_64BIT=${PROFILE_FOLDER}/${TL_NAME}_64bit.sh
-if [ -f $TL_SCRIPT_64BIT ]; then
-	echo "Unregistering GENICAM_GENTL64_PATH"
-	rm $TL_SCRIPT_64BIT
-else
-	echo "Could not unregister $TL_NAME 64bit because it was not registered" 
-fi
-
-UDEV_SCRIPT=${UDEV_FOLDER}/99-${TL_NAME}.rules
-if [ -f $UDEV_SCRIPT ]; then
-	echo "Unregistering USB device types"
-	rm $UDEV_SCRIPT
-else
-	echo "Could not unregister $TL_NAME device types because they were not registered" 
-fi
-
-echo "Done"
diff --git a/VimbaX/api/include/VmbCPP/VmbCPP.h b/VimbaX/api/include/VmbCPP/VmbCPP.h
index 87605daef74d582bd7447cdb58a91b3662b746bf..9338f6154f978705b65b6a4eaed5ddb9e52e88c5 100644
--- a/VimbaX/api/include/VmbCPP/VmbCPP.h
+++ b/VimbaX/api/include/VmbCPP/VmbCPP.h
@@ -31,9 +31,7 @@
 * \brief     Main include file for VmbCPP.
 */
 
-// #include <VmbCPP/VmbCPPCommon.h>
-#include <VimbaX/api/include/VmbCPP/VmbCPPCommon.h>
-
+#include <VmbCPP/VmbCPPCommon.h>
 #include <VmbCPP/Camera.h>
 #include <VmbCPP/Interface.h>
 #include <VmbCPP/VmbSystem.h>
diff --git a/recorder/lib/libGCBase_GNU8_4_0_v3_2_AVT.so b/lib/libGCBase_GNU8_4_0_v3_2_AVT.so
similarity index 100%
rename from recorder/lib/libGCBase_GNU8_4_0_v3_2_AVT.so
rename to lib/libGCBase_GNU8_4_0_v3_2_AVT.so
diff --git a/recorder/lib/libGenApi_GNU8_4_0_v3_2_AVT.so b/lib/libGenApi_GNU8_4_0_v3_2_AVT.so
similarity index 100%
rename from recorder/lib/libGenApi_GNU8_4_0_v3_2_AVT.so
rename to lib/libGenApi_GNU8_4_0_v3_2_AVT.so
diff --git a/recorder/lib/libLog_GNU8_4_0_v3_2_AVT.so b/lib/libLog_GNU8_4_0_v3_2_AVT.so
similarity index 100%
rename from recorder/lib/libLog_GNU8_4_0_v3_2_AVT.so
rename to lib/libLog_GNU8_4_0_v3_2_AVT.so
diff --git a/recorder/lib/libMathParser_GNU8_4_0_v3_2_AVT.so b/lib/libMathParser_GNU8_4_0_v3_2_AVT.so
similarity index 100%
rename from recorder/lib/libMathParser_GNU8_4_0_v3_2_AVT.so
rename to lib/libMathParser_GNU8_4_0_v3_2_AVT.so
diff --git a/recorder/lib/libNodeMapData_GNU8_4_0_v3_2_AVT.so b/lib/libNodeMapData_GNU8_4_0_v3_2_AVT.so
similarity index 100%
rename from recorder/lib/libNodeMapData_GNU8_4_0_v3_2_AVT.so
rename to lib/libNodeMapData_GNU8_4_0_v3_2_AVT.so
diff --git a/recorder/lib/libVmbC.so b/lib/libVmbC.so
similarity index 100%
rename from recorder/lib/libVmbC.so
rename to lib/libVmbC.so
diff --git a/recorder/lib/libVmbCPP.so b/lib/libVmbCPP.so
similarity index 100%
rename from recorder/lib/libVmbCPP.so
rename to lib/libVmbCPP.so
diff --git a/recorder/lib/libVmbImageTransform.so b/lib/libVmbImageTransform.so
similarity index 100%
rename from recorder/lib/libVmbImageTransform.so
rename to lib/libVmbImageTransform.so
diff --git a/recorder/lib/libXmlParser_GNU8_4_0_v3_2_AVT.so b/lib/libXmlParser_GNU8_4_0_v3_2_AVT.so
similarity index 100%
rename from recorder/lib/libXmlParser_GNU8_4_0_v3_2_AVT.so
rename to lib/libXmlParser_GNU8_4_0_v3_2_AVT.so
diff --git a/recorder/lib/liblog4cpp_GNU8_4_0_v3_2_AVT.so b/lib/liblog4cpp_GNU8_4_0_v3_2_AVT.so
similarity index 100%
rename from recorder/lib/liblog4cpp_GNU8_4_0_v3_2_AVT.so
rename to lib/liblog4cpp_GNU8_4_0_v3_2_AVT.so
diff --git a/obj/Makefile b/obj/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..5586b969e85f5c5047910a7e04f2cc094f9d3b1c
--- /dev/null
+++ b/obj/Makefile
@@ -0,0 +1,550 @@
+#############################################################################
+# Makefile for building: ../bin/recorder
+# Generated by qmake (3.1) (Qt 6.2.4)
+# Project:  recorder.pro
+# Template: app
+# Command: /usr/bin/qmake6 -o Makefile recorder.pro
+#############################################################################
+
+MAKEFILE      = Makefile
+
+EQ            = =
+
+####### Compiler, tools and options
+
+CC            = gcc
+CXX           = g++
+DEFINES       = -DQT_USE_QSTRINGBUILDER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
+CFLAGS        = -pipe -O2 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES)
+CXXFLAGS      = -pipe -O2 -std=gnu++2a -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES)
+INCPATH       = -I. -I../VimbaX/api/include -I/usr/include/opencv4 -I/usr/include/x86_64-linux-gnu/qt6 -I/usr/include/x86_64-linux-gnu/qt6/QtWidgets -I/usr/include/x86_64-linux-gnu/qt6/QtGui -I/usr/include/x86_64-linux-gnu/qt6/QtCore -I. -I. -I/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++
+QMAKE         = /usr/bin/qmake6
+DEL_FILE      = rm -f
+CHK_DIR_EXISTS= test -d
+MKDIR         = mkdir -p
+COPY          = cp -f
+COPY_FILE     = cp -f
+COPY_DIR      = cp -f -R
+INSTALL_FILE  = install -m 644 -p
+INSTALL_PROGRAM = install -m 755 -p
+INSTALL_DIR   = cp -f -R
+QINSTALL      = /usr/bin/qmake6 -install qinstall
+QINSTALL_PROGRAM = /usr/bin/qmake6 -install qinstall -exe
+DEL_FILE      = rm -f
+SYMLINK       = ln -f -s
+DEL_DIR       = rmdir
+MOVE          = mv -f
+TAR           = tar -cf
+COMPRESS      = gzip -9f
+DISTNAME      = recorder1.0.0
+DISTDIR = /home/sugu/code/idiv/camtron_all/b/obj/.tmp/recorder1.0.0
+LINK          = g++
+LFLAGS        = -Wl,-O1 -Wl,-rpath-link,/usr/lib/x86_64-linux-gnu
+LIBS          = $(SUBLIBS) -L../lib -lVmbC -lVmbCPP -Wl,-rpath,. -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_barcode -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_wechat_qrcode -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core /usr/lib/x86_64-linux-gnu/libQt6Widgets.so /usr/lib/x86_64-linux-gnu/libQt6Gui.so /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libOpenGL.so /usr/lib/x86_64-linux-gnu/libQt6Core.so -lpthread -lGLX -lOpenGL   
+AR            = ar cqs
+RANLIB        = 
+SED           = sed
+STRIP         = strip
+
+####### Output directory
+
+OBJECTS_DIR   = ./
+
+####### Files
+
+SOURCES       = ../src/main.cpp \
+		../src/mainwindow.cpp \
+		../src/utils.cpp moc_mainwindow.cpp
+OBJECTS       = main.o \
+		mainwindow.o \
+		utils.o \
+		moc_mainwindow.o
+DIST          = /usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_pre.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/unix.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/linux.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/sanitize.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base-unix.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-base.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-unix.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/qconfig.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_fb_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_input_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_kms_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_functions.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_config.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++/qmake.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_post.prf \
+		.qmake.stash \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exclusive_builds.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/toolchain.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_pre.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resolve_config.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_post.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/link_pkgconfig.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/warn_on.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resources_functions.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resources.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/moc.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/unix/opengl.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/uic.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/unix/thread.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qmake_use.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/file_copies.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/testcase_targets.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exceptions.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/yacc.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/lex.prf \
+		recorder.pro ui_mainwindow.h \
+		../src/mainwindow.h \
+		../src/utils.h ../src/main.cpp \
+		../src/mainwindow.cpp \
+		../src/utils.cpp
+QMAKE_TARGET  = recorder
+DESTDIR       = ../bin/
+TARGET        = ../bin/recorder
+
+
+first: all
+####### Build rules
+
+../bin/recorder: ui_mainwindow.h $(OBJECTS)  
+	@test -d ../bin/ || mkdir -p ../bin/
+	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
+	cp ../lib/lib*.so ../bin
+
+Makefile: recorder.pro /usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_pre.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/unix.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/linux.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/sanitize.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base-unix.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-base.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-unix.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/qconfig.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_fb_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_input_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_kms_support_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml_private.pri \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_functions.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_config.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++/qmake.conf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_post.prf \
+		.qmake.stash \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exclusive_builds.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/toolchain.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_pre.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resolve_config.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_post.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/link_pkgconfig.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/warn_on.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resources_functions.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resources.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/moc.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/unix/opengl.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/uic.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/unix/thread.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qmake_use.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/file_copies.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/testcase_targets.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exceptions.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/yacc.prf \
+		/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/lex.prf \
+		recorder.pro \
+		/usr/lib/x86_64-linux-gnu/libQt6Widgets.prl \
+		/usr/lib/x86_64-linux-gnu/libQt6Gui.prl \
+		/usr/lib/x86_64-linux-gnu/libQt6Core.prl
+	$(QMAKE) -o Makefile recorder.pro
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_pre.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/unix.conf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/linux.conf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/sanitize.conf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base.conf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/gcc-base-unix.conf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-base.conf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/common/g++-unix.conf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/qconfig.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_concurrent_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_core_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_dbus_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_fb_support_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_gui_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_input_support_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_kms_support_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_network_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_opengl_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_printsupport_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_sql_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_testlib_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_widgets_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/modules/qt_lib_xml_private.pri:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_functions.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt_config.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++/qmake.conf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/spec_post.prf:
+.qmake.stash:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exclusive_builds.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/toolchain.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_pre.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resolve_config.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/default_post.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/link_pkgconfig.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/warn_on.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qt.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resources_functions.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/resources.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/moc.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/unix/opengl.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/uic.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/unix/thread.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/qmake_use.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/file_copies.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/testcase_targets.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/exceptions.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/yacc.prf:
+/usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/lex.prf:
+recorder.pro:
+/usr/lib/x86_64-linux-gnu/libQt6Widgets.prl:
+/usr/lib/x86_64-linux-gnu/libQt6Gui.prl:
+/usr/lib/x86_64-linux-gnu/libQt6Core.prl:
+qmake: FORCE
+	@$(QMAKE) -o Makefile recorder.pro
+
+qmake_all: FORCE
+
+
+all: Makefile ../bin/recorder
+
+dist: distdir FORCE
+	(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
+
+distdir: FORCE
+	@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
+	$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
+	$(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/data/dummy.cpp $(DISTDIR)/
+	$(COPY_FILE) --parents ui_mainwindow.h ../src/mainwindow.h ../src/utils.h $(DISTDIR)/
+	$(COPY_FILE) --parents ../src/main.cpp ../src/mainwindow.cpp ../src/utils.cpp $(DISTDIR)/
+	$(COPY_FILE) --parents ../src/mainwindow.ui $(DISTDIR)/
+
+
+clean: compiler_clean 
+	-$(DEL_FILE) $(OBJECTS)
+	-$(DEL_FILE) *~ core *.core
+
+
+distclean: clean 
+	-$(DEL_FILE) $(TARGET) 
+	-$(DEL_FILE) .qmake.stash
+	-$(DEL_FILE) Makefile
+
+
+####### Sub-libraries
+
+mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all
+
+check: first
+
+benchmark: first
+
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_moc_predefs_make_all: moc_predefs.h
+compiler_moc_predefs_clean:
+	-$(DEL_FILE) moc_predefs.h
+moc_predefs.h: /usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/data/dummy.cpp
+	g++ -pipe -O2 -std=gnu++2a -Wall -Wextra -dM -E -o moc_predefs.h /usr/lib/x86_64-linux-gnu/qt6/mkspecs/features/data/dummy.cpp
+
+compiler_moc_header_make_all: moc_mainwindow.cpp
+compiler_moc_header_clean:
+	-$(DEL_FILE) moc_mainwindow.cpp
+moc_mainwindow.cpp: ../src/mainwindow.h \
+		../VimbaX/api/include/VmbCPP/VmbCPP.h \
+		../VimbaX/api/include/VmbCPP/VmbCPPCommon.h \
+		../VimbaX/api/include/VmbC/VmbCommonTypes.h \
+		../VimbaX/api/include/VmbCPP/Camera.h \
+		../VimbaX/api/include/VmbC/VmbC.h \
+		../VimbaX/api/include/VmbC/VmbCTypeDefinitions.h \
+		../VimbaX/api/include/VmbCPP/Frame.h \
+		../VimbaX/api/include/VmbCPP/FeatureContainer.h \
+		../VimbaX/api/include/VmbCPP/BasicLockable.h \
+		../VimbaX/api/include/VmbCPP/SharedPointerDefines.h \
+		../VimbaX/api/include/VmbCPP/SharedPointer.h \
+		../VimbaX/api/include/VmbCPP/SharedPointer_impl.h \
+		../VimbaX/api/include/VmbCPP/Mutex.h \
+		../VimbaX/api/include/VmbCPPConfig/config.h \
+		../VimbaX/api/include/VmbCPP/Feature.h \
+		../VimbaX/api/include/VmbCPP/EnumEntry.h \
+		../VimbaX/api/include/VmbCPP/UniquePointer.hpp \
+		../VimbaX/api/include/VmbCPP/EnumEntry.hpp \
+		../VimbaX/api/include/VmbCPP/CopyHelper.hpp \
+		../VimbaX/api/include/VmbCPP/IFeatureObserver.h \
+		../VimbaX/api/include/VmbCPP/Feature.hpp \
+		../VimbaX/api/include/VmbCPP/FeatureContainer.hpp \
+		../VimbaX/api/include/VmbCPP/IFrameObserver.h \
+		../VimbaX/api/include/VmbCPP/Frame.hpp \
+		../VimbaX/api/include/VmbCPP/Interface.h \
+		../VimbaX/api/include/VmbCPP/PersistableFeatureContainer.h \
+		../VimbaX/api/include/VmbCPP/Interface.hpp \
+		../VimbaX/api/include/VmbCPP/LocalDevice.h \
+		../VimbaX/api/include/VmbCPP/Stream.h \
+		../VimbaX/api/include/VmbCPP/ICapturingModule.h \
+		../VimbaX/api/include/VmbCPP/Camera.hpp \
+		../VimbaX/api/include/VmbCPP/VmbSystem.h \
+		../VimbaX/api/include/VmbCPP/ICameraFactory.h \
+		../VimbaX/api/include/VmbCPP/ICameraListObserver.h \
+		../VimbaX/api/include/VmbCPP/IInterfaceListObserver.h \
+		../VimbaX/api/include/VmbCPP/LoggerDefines.h \
+		../VimbaX/api/include/VmbCPP/FileLogger.h \
+		../VimbaX/api/include/VmbCPP/StringLike.hpp \
+		../VimbaX/api/include/VmbCPP/TransportLayer.h \
+		../VimbaX/api/include/VmbCPP/TransportLayer.hpp \
+		../VimbaX/api/include/VmbCPP/VmbSystem.hpp \
+		moc_predefs.h \
+		/usr/lib/qt6/libexec/moc
+	/usr/lib/qt6/libexec/moc $(DEFINES) --include /home/sugu/code/idiv/camtron_all/b/obj/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++ -I/home/sugu/code/idiv/camtron_all/b/obj -I/home/sugu/code/idiv/camtron_all/b/VimbaX/api/include -I/usr/include/opencv4 -I/usr/include/x86_64-linux-gnu/qt6 -I/usr/include/x86_64-linux-gnu/qt6/QtWidgets -I/usr/include/x86_64-linux-gnu/qt6/QtGui -I/usr/include/x86_64-linux-gnu/qt6/QtCore -I/usr/include/c++/11 -I/usr/include/x86_64-linux-gnu/c++/11 -I/usr/include/c++/11/backward -I/usr/lib/gcc/x86_64-linux-gnu/11/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include ../src/mainwindow.h -o moc_mainwindow.cpp
+
+compiler_moc_objc_header_make_all:
+compiler_moc_objc_header_clean:
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all: ui_mainwindow.h
+compiler_uic_clean:
+	-$(DEL_FILE) ui_mainwindow.h
+ui_mainwindow.h: ../src/mainwindow.ui \
+		/usr/lib/qt6/libexec/uic
+	/usr/lib/qt6/libexec/uic ../src/mainwindow.ui -o ui_mainwindow.h
+
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_predefs_clean compiler_moc_header_clean compiler_uic_clean 
+
+####### Compile
+
+main.o: ../src/main.cpp ../src/mainwindow.h \
+		../VimbaX/api/include/VmbCPP/VmbCPP.h \
+		../VimbaX/api/include/VmbCPP/VmbCPPCommon.h \
+		../VimbaX/api/include/VmbC/VmbCommonTypes.h \
+		../VimbaX/api/include/VmbCPP/Camera.h \
+		../VimbaX/api/include/VmbC/VmbC.h \
+		../VimbaX/api/include/VmbC/VmbCTypeDefinitions.h \
+		../VimbaX/api/include/VmbCPP/Frame.h \
+		../VimbaX/api/include/VmbCPP/FeatureContainer.h \
+		../VimbaX/api/include/VmbCPP/BasicLockable.h \
+		../VimbaX/api/include/VmbCPP/SharedPointerDefines.h \
+		../VimbaX/api/include/VmbCPP/SharedPointer.h \
+		../VimbaX/api/include/VmbCPP/SharedPointer_impl.h \
+		../VimbaX/api/include/VmbCPP/Mutex.h \
+		../VimbaX/api/include/VmbCPPConfig/config.h \
+		../VimbaX/api/include/VmbCPP/Feature.h \
+		../VimbaX/api/include/VmbCPP/EnumEntry.h \
+		../VimbaX/api/include/VmbCPP/UniquePointer.hpp \
+		../VimbaX/api/include/VmbCPP/EnumEntry.hpp \
+		../VimbaX/api/include/VmbCPP/CopyHelper.hpp \
+		../VimbaX/api/include/VmbCPP/IFeatureObserver.h \
+		../VimbaX/api/include/VmbCPP/Feature.hpp \
+		../VimbaX/api/include/VmbCPP/FeatureContainer.hpp \
+		../VimbaX/api/include/VmbCPP/IFrameObserver.h \
+		../VimbaX/api/include/VmbCPP/Frame.hpp \
+		../VimbaX/api/include/VmbCPP/Interface.h \
+		../VimbaX/api/include/VmbCPP/PersistableFeatureContainer.h \
+		../VimbaX/api/include/VmbCPP/Interface.hpp \
+		../VimbaX/api/include/VmbCPP/LocalDevice.h \
+		../VimbaX/api/include/VmbCPP/Stream.h \
+		../VimbaX/api/include/VmbCPP/ICapturingModule.h \
+		../VimbaX/api/include/VmbCPP/Camera.hpp \
+		../VimbaX/api/include/VmbCPP/VmbSystem.h \
+		../VimbaX/api/include/VmbCPP/ICameraFactory.h \
+		../VimbaX/api/include/VmbCPP/ICameraListObserver.h \
+		../VimbaX/api/include/VmbCPP/IInterfaceListObserver.h \
+		../VimbaX/api/include/VmbCPP/LoggerDefines.h \
+		../VimbaX/api/include/VmbCPP/FileLogger.h \
+		../VimbaX/api/include/VmbCPP/StringLike.hpp \
+		../VimbaX/api/include/VmbCPP/TransportLayer.h \
+		../VimbaX/api/include/VmbCPP/TransportLayer.hpp \
+		../VimbaX/api/include/VmbCPP/VmbSystem.hpp
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../src/main.cpp
+
+mainwindow.o: ../src/mainwindow.cpp ../src/utils.h \
+		../VimbaX/api/include/VmbC/VmbCommonTypes.h \
+		../src/mainwindow.h \
+		../VimbaX/api/include/VmbCPP/VmbCPP.h \
+		../VimbaX/api/include/VmbCPP/VmbCPPCommon.h \
+		../VimbaX/api/include/VmbCPP/Camera.h \
+		../VimbaX/api/include/VmbC/VmbC.h \
+		../VimbaX/api/include/VmbC/VmbCTypeDefinitions.h \
+		../VimbaX/api/include/VmbCPP/Frame.h \
+		../VimbaX/api/include/VmbCPP/FeatureContainer.h \
+		../VimbaX/api/include/VmbCPP/BasicLockable.h \
+		../VimbaX/api/include/VmbCPP/SharedPointerDefines.h \
+		../VimbaX/api/include/VmbCPP/SharedPointer.h \
+		../VimbaX/api/include/VmbCPP/SharedPointer_impl.h \
+		../VimbaX/api/include/VmbCPP/Mutex.h \
+		../VimbaX/api/include/VmbCPPConfig/config.h \
+		../VimbaX/api/include/VmbCPP/Feature.h \
+		../VimbaX/api/include/VmbCPP/EnumEntry.h \
+		../VimbaX/api/include/VmbCPP/UniquePointer.hpp \
+		../VimbaX/api/include/VmbCPP/EnumEntry.hpp \
+		../VimbaX/api/include/VmbCPP/CopyHelper.hpp \
+		../VimbaX/api/include/VmbCPP/IFeatureObserver.h \
+		../VimbaX/api/include/VmbCPP/Feature.hpp \
+		../VimbaX/api/include/VmbCPP/FeatureContainer.hpp \
+		../VimbaX/api/include/VmbCPP/IFrameObserver.h \
+		../VimbaX/api/include/VmbCPP/Frame.hpp \
+		../VimbaX/api/include/VmbCPP/Interface.h \
+		../VimbaX/api/include/VmbCPP/PersistableFeatureContainer.h \
+		../VimbaX/api/include/VmbCPP/Interface.hpp \
+		../VimbaX/api/include/VmbCPP/LocalDevice.h \
+		../VimbaX/api/include/VmbCPP/Stream.h \
+		../VimbaX/api/include/VmbCPP/ICapturingModule.h \
+		../VimbaX/api/include/VmbCPP/Camera.hpp \
+		../VimbaX/api/include/VmbCPP/VmbSystem.h \
+		../VimbaX/api/include/VmbCPP/ICameraFactory.h \
+		../VimbaX/api/include/VmbCPP/ICameraListObserver.h \
+		../VimbaX/api/include/VmbCPP/IInterfaceListObserver.h \
+		../VimbaX/api/include/VmbCPP/LoggerDefines.h \
+		../VimbaX/api/include/VmbCPP/FileLogger.h \
+		../VimbaX/api/include/VmbCPP/StringLike.hpp \
+		../VimbaX/api/include/VmbCPP/TransportLayer.h \
+		../VimbaX/api/include/VmbCPP/TransportLayer.hpp \
+		../VimbaX/api/include/VmbCPP/VmbSystem.hpp \
+		ui_mainwindow.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o ../src/mainwindow.cpp
+
+utils.o: ../src/utils.cpp ../src/mainwindow.h \
+		../VimbaX/api/include/VmbCPP/VmbCPP.h \
+		../VimbaX/api/include/VmbCPP/VmbCPPCommon.h \
+		../VimbaX/api/include/VmbC/VmbCommonTypes.h \
+		../VimbaX/api/include/VmbCPP/Camera.h \
+		../VimbaX/api/include/VmbC/VmbC.h \
+		../VimbaX/api/include/VmbC/VmbCTypeDefinitions.h \
+		../VimbaX/api/include/VmbCPP/Frame.h \
+		../VimbaX/api/include/VmbCPP/FeatureContainer.h \
+		../VimbaX/api/include/VmbCPP/BasicLockable.h \
+		../VimbaX/api/include/VmbCPP/SharedPointerDefines.h \
+		../VimbaX/api/include/VmbCPP/SharedPointer.h \
+		../VimbaX/api/include/VmbCPP/SharedPointer_impl.h \
+		../VimbaX/api/include/VmbCPP/Mutex.h \
+		../VimbaX/api/include/VmbCPPConfig/config.h \
+		../VimbaX/api/include/VmbCPP/Feature.h \
+		../VimbaX/api/include/VmbCPP/EnumEntry.h \
+		../VimbaX/api/include/VmbCPP/UniquePointer.hpp \
+		../VimbaX/api/include/VmbCPP/EnumEntry.hpp \
+		../VimbaX/api/include/VmbCPP/CopyHelper.hpp \
+		../VimbaX/api/include/VmbCPP/IFeatureObserver.h \
+		../VimbaX/api/include/VmbCPP/Feature.hpp \
+		../VimbaX/api/include/VmbCPP/FeatureContainer.hpp \
+		../VimbaX/api/include/VmbCPP/IFrameObserver.h \
+		../VimbaX/api/include/VmbCPP/Frame.hpp \
+		../VimbaX/api/include/VmbCPP/Interface.h \
+		../VimbaX/api/include/VmbCPP/PersistableFeatureContainer.h \
+		../VimbaX/api/include/VmbCPP/Interface.hpp \
+		../VimbaX/api/include/VmbCPP/LocalDevice.h \
+		../VimbaX/api/include/VmbCPP/Stream.h \
+		../VimbaX/api/include/VmbCPP/ICapturingModule.h \
+		../VimbaX/api/include/VmbCPP/Camera.hpp \
+		../VimbaX/api/include/VmbCPP/VmbSystem.h \
+		../VimbaX/api/include/VmbCPP/ICameraFactory.h \
+		../VimbaX/api/include/VmbCPP/ICameraListObserver.h \
+		../VimbaX/api/include/VmbCPP/IInterfaceListObserver.h \
+		../VimbaX/api/include/VmbCPP/LoggerDefines.h \
+		../VimbaX/api/include/VmbCPP/FileLogger.h \
+		../VimbaX/api/include/VmbCPP/StringLike.hpp \
+		../VimbaX/api/include/VmbCPP/TransportLayer.h \
+		../VimbaX/api/include/VmbCPP/TransportLayer.hpp \
+		../VimbaX/api/include/VmbCPP/VmbSystem.hpp
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o utils.o ../src/utils.cpp
+
+moc_mainwindow.o: moc_mainwindow.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp
+
+####### Install
+
+install:  FORCE
+
+uninstall:  FORCE
+
+FORCE:
+
diff --git a/recorder/obj/moc_mainwindow.cpp b/obj/moc_mainwindow.cpp
similarity index 100%
rename from recorder/obj/moc_mainwindow.cpp
rename to obj/moc_mainwindow.cpp
diff --git a/recorder/obj/moc_predefs.h b/obj/moc_predefs.h
similarity index 100%
rename from recorder/obj/moc_predefs.h
rename to obj/moc_predefs.h
diff --git a/recorder/obj/recorder.pro b/obj/recorder.pro
similarity index 95%
rename from recorder/obj/recorder.pro
rename to obj/recorder.pro
index 5a9b2bc084801b88f1438a440315edd2d884b27a..7f671841a16fa9cd52c4049d8f5a13d0b3cc7866 100644
--- a/recorder/obj/recorder.pro
+++ b/obj/recorder.pro
@@ -23,13 +23,8 @@ CONFIG += link_pkgconfig
 PKGCONFIG += opencv4
 
 # Vimba
+INCLUDEPATH += ../VimbaX/api/include
 VIMBA_LIB_DIR = ../lib
-
-INCLUDEPATH += \
-	../../VimbaX/api/include \
-	$${VIMBA_LIB_DIR} \
-	../..
-
 LIBS += -L$${VIMBA_LIB_DIR} -lVmbC -lVmbCPP -Wl,-rpath,.
 QMAKE_POST_LINK += cp $${VIMBA_LIB_DIR}/lib*.so ../bin  # copy vimlibs to bin
 
diff --git a/obj/ui_mainwindow.h b/obj/ui_mainwindow.h
new file mode 100644
index 0000000000000000000000000000000000000000..670947d047f55c6e529cb89c5c12d25ec6efdb6b
--- /dev/null
+++ b/obj/ui_mainwindow.h
@@ -0,0 +1,143 @@
+/********************************************************************************
+** Form generated from reading UI file 'mainwindow.ui'
+**
+** Created by: Qt User Interface Compiler version 6.2.4
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_MAINWINDOW_H
+#define UI_MAINWINDOW_H
+
+#include <QtCore/QVariant>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QDockWidget>
+#include <QtWidgets/QHeaderView>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QListWidget>
+#include <QtWidgets/QMainWindow>
+#include <QtWidgets/QMenuBar>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QStatusBar>
+#include <QtWidgets/QTableWidget>
+#include <QtWidgets/QVBoxLayout>
+#include <QtWidgets/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_MainWindow
+{
+public:
+    QWidget *centralwidget;
+    QVBoxLayout *verticalLayout_3;
+    QLabel *l_vid;
+    QMenuBar *menubar;
+    QStatusBar *statusbar;
+    QDockWidget *dockWidget_down;
+    QWidget *dockWidgetContents;
+    QVBoxLayout *verticalLayout;
+    QListWidget *lw_log;
+    QDockWidget *dockWidget_left;
+    QWidget *dockWidgetContents_2;
+    QVBoxLayout *verticalLayout_2;
+    QPushButton *b_update;
+    QTableWidget *tw_cams;
+    QDockWidget *dockWidget_right;
+    QWidget *dockWidgetContents_3;
+    QVBoxLayout *verticalLayout_4;
+    QPushButton *b_openclose;
+
+    void setupUi(QMainWindow *MainWindow)
+    {
+        if (MainWindow->objectName().isEmpty())
+            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
+        MainWindow->resize(984, 622);
+        centralwidget = new QWidget(MainWindow);
+        centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
+        verticalLayout_3 = new QVBoxLayout(centralwidget);
+        verticalLayout_3->setObjectName(QString::fromUtf8("verticalLayout_3"));
+        l_vid = new QLabel(centralwidget);
+        l_vid->setObjectName(QString::fromUtf8("l_vid"));
+
+        verticalLayout_3->addWidget(l_vid);
+
+        MainWindow->setCentralWidget(centralwidget);
+        menubar = new QMenuBar(MainWindow);
+        menubar->setObjectName(QString::fromUtf8("menubar"));
+        menubar->setGeometry(QRect(0, 0, 984, 22));
+        MainWindow->setMenuBar(menubar);
+        statusbar = new QStatusBar(MainWindow);
+        statusbar->setObjectName(QString::fromUtf8("statusbar"));
+        MainWindow->setStatusBar(statusbar);
+        dockWidget_down = new QDockWidget(MainWindow);
+        dockWidget_down->setObjectName(QString::fromUtf8("dockWidget_down"));
+        dockWidgetContents = new QWidget();
+        dockWidgetContents->setObjectName(QString::fromUtf8("dockWidgetContents"));
+        verticalLayout = new QVBoxLayout(dockWidgetContents);
+        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+        lw_log = new QListWidget(dockWidgetContents);
+        lw_log->setObjectName(QString::fromUtf8("lw_log"));
+
+        verticalLayout->addWidget(lw_log);
+
+        dockWidget_down->setWidget(dockWidgetContents);
+        MainWindow->addDockWidget(Qt::BottomDockWidgetArea, dockWidget_down);
+        dockWidget_left = new QDockWidget(MainWindow);
+        dockWidget_left->setObjectName(QString::fromUtf8("dockWidget_left"));
+        dockWidgetContents_2 = new QWidget();
+        dockWidgetContents_2->setObjectName(QString::fromUtf8("dockWidgetContents_2"));
+        verticalLayout_2 = new QVBoxLayout(dockWidgetContents_2);
+        verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
+        b_update = new QPushButton(dockWidgetContents_2);
+        b_update->setObjectName(QString::fromUtf8("b_update"));
+
+        verticalLayout_2->addWidget(b_update);
+
+        tw_cams = new QTableWidget(dockWidgetContents_2);
+        tw_cams->setObjectName(QString::fromUtf8("tw_cams"));
+        tw_cams->setSelectionBehavior(QAbstractItemView::SelectRows);
+        tw_cams->setTextElideMode(Qt::ElideNone);
+        tw_cams->horizontalHeader()->setVisible(true);
+        tw_cams->verticalHeader()->setVisible(true);
+        tw_cams->verticalHeader()->setStretchLastSection(true);
+
+        verticalLayout_2->addWidget(tw_cams);
+
+        dockWidget_left->setWidget(dockWidgetContents_2);
+        MainWindow->addDockWidget(Qt::LeftDockWidgetArea, dockWidget_left);
+        dockWidget_right = new QDockWidget(MainWindow);
+        dockWidget_right->setObjectName(QString::fromUtf8("dockWidget_right"));
+        dockWidgetContents_3 = new QWidget();
+        dockWidgetContents_3->setObjectName(QString::fromUtf8("dockWidgetContents_3"));
+        verticalLayout_4 = new QVBoxLayout(dockWidgetContents_3);
+        verticalLayout_4->setObjectName(QString::fromUtf8("verticalLayout_4"));
+        b_openclose = new QPushButton(dockWidgetContents_3);
+        b_openclose->setObjectName(QString::fromUtf8("b_openclose"));
+
+        verticalLayout_4->addWidget(b_openclose);
+
+        dockWidget_right->setWidget(dockWidgetContents_3);
+        MainWindow->addDockWidget(Qt::RightDockWidgetArea, dockWidget_right);
+
+        retranslateUi(MainWindow);
+
+        QMetaObject::connectSlotsByName(MainWindow);
+    } // setupUi
+
+    void retranslateUi(QMainWindow *MainWindow)
+    {
+        MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr));
+        l_vid->setText(QString());
+        b_update->setText(QCoreApplication::translate("MainWindow", "update (search Cams)", nullptr));
+        b_openclose->setText(QCoreApplication::translate("MainWindow", "open", nullptr));
+    } // retranslateUi
+
+};
+
+namespace Ui {
+    class MainWindow: public Ui_MainWindow {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_MAINWINDOW_H
diff --git a/recorder/recorder.sublime-project b/recorder.sublime-project
similarity index 100%
rename from recorder/recorder.sublime-project
rename to recorder.sublime-project
diff --git a/recorder/lib/libVimbaC.so.bup b/recorder/lib/libVimbaC.so.bup
deleted file mode 100644
index 781383deb7c36a92813b8997376e622b6e3e5a96..0000000000000000000000000000000000000000
Binary files a/recorder/lib/libVimbaC.so.bup and /dev/null differ
diff --git a/recorder/lib/libVimbaCPP.so.bup b/recorder/lib/libVimbaCPP.so.bup
deleted file mode 100644
index 081afba051f4fc154481cec96cd4af633ca6b7ee..0000000000000000000000000000000000000000
Binary files a/recorder/lib/libVimbaCPP.so.bup and /dev/null differ
diff --git a/recorder/src/main.cpp b/src/main.cpp
similarity index 100%
rename from recorder/src/main.cpp
rename to src/main.cpp
diff --git a/recorder/src/mainwindow.cpp b/src/mainwindow.cpp
similarity index 100%
rename from recorder/src/mainwindow.cpp
rename to src/mainwindow.cpp
diff --git a/recorder/src/mainwindow.h b/src/mainwindow.h
similarity index 100%
rename from recorder/src/mainwindow.h
rename to src/mainwindow.h
diff --git a/recorder/src/mainwindow.ui b/src/mainwindow.ui
similarity index 100%
rename from recorder/src/mainwindow.ui
rename to src/mainwindow.ui
diff --git a/recorder/src/recorder.cpp b/src/recorder.cpp
similarity index 100%
rename from recorder/src/recorder.cpp
rename to src/recorder.cpp
diff --git a/recorder/src/simple_streaming.cpp b/src/simple_streaming.cpp
similarity index 100%
rename from recorder/src/simple_streaming.cpp
rename to src/simple_streaming.cpp
diff --git a/recorder/src/utils.cpp b/src/utils.cpp
similarity index 98%
rename from recorder/src/utils.cpp
rename to src/utils.cpp
index 10735d0e997f88d9674eb9f69c338d87c802e15b..d2b9bb39fda0acbbca6ca354ae003509c38f5636 100644
--- a/recorder/src/utils.cpp
+++ b/src/utils.cpp
@@ -10,7 +10,7 @@
 
 const int APP_VERSION_MAJOR = 0;
 const int APP_VERSION_MINOR = 0;
-const int APP_VERSION_PATCH = 3;
+const int APP_VERSION_PATCH = 4;
 
 using namespace VmbCPP;
 
diff --git a/recorder/src/utils.h b/src/utils.h
similarity index 100%
rename from recorder/src/utils.h
rename to src/utils.h