fszontagh
2024-02-25 621935256b987929450717d4561fa16f0e732e8d
Skeleton with icons
1 files modified
40 files added
854 ■■■■■ changed files
.gitignore 7 ●●●●● patch | view | raw | blame | history
CMakeLists.txt 28 ●●●●● patch | view | raw | blame | history
main.cpp 25 ●●●●● patch | view | raw | blame | history
res/add_image.png.h 64 ●●●●● patch | view | raw | blame | history
res/fullscreen.png.h 48 ●●●●● patch | view | raw | blame | history
res/icons/16/add_image.png patch | view | raw | blame | history
res/icons/16/cross_circle.png patch | view | raw | blame | history
res/icons/16/cube.ico patch | view | raw | blame | history
res/icons/16/cube.png patch | view | raw | blame | history
res/icons/16/dice_four.png patch | view | raw | blame | history
res/icons/16/disk.png patch | view | raw | blame | history
res/icons/16/file_import.png patch | view | raw | blame | history
res/icons/16/folder_open.png patch | view | raw | blame | history
res/icons/16/forward.png patch | view | raw | blame | history
res/icons/16/fullscreen.png patch | view | raw | blame | history
res/icons/16/images.png patch | view | raw | blame | history
res/icons/16/interrogation.png patch | view | raw | blame | history
res/icons/16/palette.png patch | view | raw | blame | history
res/icons/16/pause.png patch | view | raw | blame | history
res/icons/16/picture.png patch | view | raw | blame | history
res/icons/16/play.png patch | view | raw | blame | history
res/icons/16/refresh.png patch | view | raw | blame | history
res/icons/16/replace.png patch | view | raw | blame | history
res/icons/16/rewind.png patch | view | raw | blame | history
res/icons/16/rotate_left.png patch | view | raw | blame | history
res/icons/16/rotate_right.png patch | view | raw | blame | history
res/icons/16/settings.png patch | view | raw | blame | history
res/icons/16/text_box_dots.png patch | view | raw | blame | history
res/icons/16/trash.png patch | view | raw | blame | history
res/icons/16/zoom_in.png patch | view | raw | blame | history
res/icons/16/zoom_out.png patch | view | raw | blame | history
res/rotate_left.png.h 60 ●●●●● patch | view | raw | blame | history
res/rotate_right.png.h 60 ●●●●● patch | view | raw | blame | history
res/zoom_in.png.h 59 ●●●●● patch | view | raw | blame | history
res/zoom_out.png.h 59 ●●●●● patch | view | raw | blame | history
static/minimal.rc 2 ●●●●● patch | view | raw | blame | history
static/window.fbp 279 ●●●●● patch | view | raw | blame | history
ui/ImageViewer.cpp 74 ●●●●● patch | view | raw | blame | history
ui/ImageViewer.h 56 ●●●●● patch | view | raw | blame | history
ui/ImageViewerImageWindow.cpp 8 ●●●●● patch | view | raw | blame | history
ui/ImageViewerImageWindow.h 25 ●●●●● patch | view | raw | blame | history
.gitignore
@@ -19,3 +19,10 @@
*.exe
*.out
*.app
vcpkg_installed
build/
.vscode/c_cpp_properties.json
.vscode/settings.json
.vscode/tasks.json
CMakeLists.txt
New file
@@ -0,0 +1,28 @@
cmake_minimum_required(VERSION 3.5.0)
set(PNAME ImageViewer)
project(${PNAME} VERSION 0.1.0 LANGUAGES C CXX)
find_package(wxWidgets CONFIG REQUIRED)
find_package(exiv2 CONFIG REQUIRED)
IF(WIN32)
    SET(OPTIONS WIN32)
    SET(SRCS ${SRCS} static/minimal.rc)
ENDIF(WIN32)
add_executable(${PNAME} ${OPTIONS} ${SRCS} main.cpp ui/ImageViewer.cpp ui/ImageViewerImageWindow.cpp)
target_compile_definitions(${PROJECT_NAME} PRIVATE ${wxWidgets_DEFINITIONS} "$<$<CONFIG:DEBUG>:${wxWidgets_DEFINITIONS_DEBUG}>")
target_include_directories(${PROJECT_NAME} PRIVATE ${wxWidgets_INCLUDE_DIRS})
target_link_libraries(${PNAME} PRIVATE Exiv2::exiv2lib wx::core wx::base wx::xrc wx::adv wx::richtext wx::aui wx::propgrid wx::html)
target_compile_features(${PNAME} PUBLIC cxx_std_17)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
main.cpp
New file
@@ -0,0 +1,25 @@
#include <wx/app.h>
#include <wx/event.h>
#define STB_IMAGE_IMPLEMENTATION
#include "ui/ImageViewerImageWindow.h"
#include <wx/image.h>
// Define the MainApp
class MainApp : public wxApp
{
public:
    MainApp() {}
    virtual ~MainApp() {}
    virtual bool OnInit()
    {
        wxInitAllImageHandlers();
        ImageViewerImageWindow *mainFrame = new ImageViewerImageWindow(nullptr);
        SetTopWindow(mainFrame);
        return GetTopWindow()->Show();
    }
};
DECLARE_APP(MainApp)
IMPLEMENT_APP(MainApp)
res/add_image.png.h
New file
@@ -0,0 +1,64 @@
#ifndef ADD_IMAGE_PNG_H
#define ADD_IMAGE_PNG_H
#include <wx/mstream.h>
#include <wx/image.h>
#include <wx/bitmap.h>
static const unsigned char add_image_png[] =
{
    0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00,
    0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10,
    0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F,
    0xF3, 0xFF, 0x61, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
    0x73, 0x00, 0x00, 0x09, 0xD7, 0x00, 0x00, 0x09, 0xD7, 0x01,
    0xB1, 0x6E, 0x17, 0xB7, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45,
    0x58, 0x74, 0x53, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
    0x00, 0x77, 0x77, 0x77, 0x2E, 0x69, 0x6E, 0x6B, 0x73, 0x63,
    0x61, 0x70, 0x65, 0x2E, 0x6F, 0x72, 0x67, 0x9B, 0xEE, 0x3C,
    0x1A, 0x00, 0x00, 0x01, 0x38, 0x49, 0x44, 0x41, 0x54, 0x38,
    0x8D, 0x7D, 0xD3, 0x3D, 0x4B, 0x5D, 0x41, 0x10, 0x06, 0xE0,
    0xE7, 0xE2, 0x15, 0x04, 0xFF, 0x80, 0x8D, 0x55, 0x1A, 0x0B,
    0x3F, 0xDA, 0x58, 0xE4, 0x17, 0xD8, 0x26, 0x04, 0xAD, 0x44,
    0xC4, 0xCA, 0x52, 0xB0, 0x12, 0x0B, 0x6D, 0x24, 0xA2, 0x28,
    0xA4, 0x89, 0xE9, 0x05, 0xBF, 0x3A, 0x2B, 0x1B, 0x3F, 0x0A,
    0x6F, 0x23, 0x04, 0x82, 0x60, 0x27, 0x89, 0xE6, 0x07, 0x04,
    0x15, 0x41, 0xEE, 0xF5, 0x5A, 0xEC, 0x1C, 0xB9, 0x1E, 0x8E,
    0xFB, 0xC2, 0x70, 0x76, 0x67, 0xE7, 0x7D, 0x67, 0xF6, 0xEC,
    0x0C, 0x09, 0x53, 0xB8, 0x44, 0x13, 0xED, 0x8C, 0xDD, 0xE3,
    0x08, 0x43, 0xC1, 0x53, 0x0B, 0xF2, 0x0F, 0x7C, 0xC7, 0x39,
    0x5A, 0xDE, 0x47, 0x2F, 0x26, 0x31, 0x82, 0x41, 0xFC, 0x13,
    0x99, 0x37, 0x32, 0xA4, 0x3E, 0xAC, 0x63, 0x2D, 0xD6, 0x3D,
    0xF8, 0x83, 0xC5, 0x22, 0xA0, 0x89, 0xAF, 0x19, 0x81, 0x33,
    0xFC, 0x0D, 0x3B, 0x09, 0xDF, 0x3E, 0xB6, 0xA1, 0x8E, 0x2E,
    0x3C, 0x67, 0x04, 0x86, 0xF1, 0x2D, 0xD6, 0x73, 0xF1, 0x6D,
    0x05, 0x4F, 0xBD, 0x14, 0xFC, 0x01, 0xB3, 0xE8, 0xC6, 0x4F,
    0xFC, 0xC2, 0x16, 0x96, 0xE2, 0x7C, 0xB5, 0xAC, 0xDE, 0x29,
    0xF0, 0x09, 0x87, 0xB8, 0xC1, 0x23, 0x66, 0x30, 0x1E, 0x59,
    0xF7, 0x22, 0xA6, 0x51, 0x55, 0x62, 0x1B, 0x9B, 0xB8, 0x8B,
    0xC0, 0x6E, 0xE9, 0x75, 0x36, 0xF1, 0x84, 0xCF, 0x15, 0x9C,
    0x95, 0xB0, 0x57, 0x81, 0x76, 0x07, 0xB9, 0x40, 0x4D, 0x7A,
    0x9D, 0x26, 0x26, 0xAA, 0x32, 0x77, 0x0A, 0x1C, 0x94, 0xC8,
    0x9D, 0x22, 0x45, 0x25, 0x63, 0xE1, 0x5B, 0x46, 0x7F, 0x59,
    0xE0, 0x4B, 0x26, 0x41, 0x4D, 0xFA, 0x89, 0x33, 0x55, 0xF1,
    0x75, 0x3C, 0x48, 0x1D, 0x96, 0xAB, 0x70, 0x21, 0x73, 0xEE,
    0x08, 0xC7, 0x52, 0x87, 0xBD, 0x87, 0x25, 0xD5, 0xB3, 0x71,
    0x55, 0x93, 0x06, 0xE3, 0x14, 0xFF, 0x71, 0xE1, 0xED, 0x2C,
    0x5C, 0x63, 0x5E, 0xBA, 0xF3, 0xC7, 0xF0, 0xED, 0x48, 0x6D,
    0xDD, 0xC0, 0x6D, 0x1D, 0xBF, 0xA5, 0xC1, 0x98, 0xC6, 0x80,
    0xE8, 0xB0, 0x12, 0x6E, 0xC2, 0x0A, 0x34, 0xB0, 0x9B, 0xBB,
    0x56, 0x0E, 0x57, 0x18, 0x2D, 0x36, 0x2F, 0x15, 0x18, 0x51,
    0x56, 0x88, 0xBB, 0xC5, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x49,
    0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82,
};
wxBitmap& add_image_png_to_wx_bitmap()
{
    static wxMemoryInputStream memIStream( add_image_png, sizeof( add_image_png ) );
    static wxImage image( memIStream, wxBITMAP_TYPE_PNG );
    static wxBitmap bmp( image );
    return bmp;
}
#endif //ADD_IMAGE_PNG_H
res/fullscreen.png.h
New file
@@ -0,0 +1,48 @@
#ifndef FULLSCREEN_PNG_H
#define FULLSCREEN_PNG_H
#include <wx/mstream.h>
#include <wx/image.h>
#include <wx/bitmap.h>
static const unsigned char fullscreen_png[] =
{
    0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00,
    0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10,
    0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F,
    0xF3, 0xFF, 0x61, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
    0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x76, 0x01,
    0x4E, 0x7B, 0x26, 0x08, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45,
    0x58, 0x74, 0x53, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
    0x00, 0x77, 0x77, 0x77, 0x2E, 0x69, 0x6E, 0x6B, 0x73, 0x63,
    0x61, 0x70, 0x65, 0x2E, 0x6F, 0x72, 0x67, 0x9B, 0xEE, 0x3C,
    0x1A, 0x00, 0x00, 0x00, 0x9B, 0x49, 0x44, 0x41, 0x54, 0x38,
    0x8D, 0xCD, 0xD3, 0xB1, 0x0D, 0xC2, 0x30, 0x10, 0x85, 0xE1,
    0x2F, 0x62, 0x0C, 0x28, 0x58, 0x83, 0x94, 0x74, 0xE9, 0x68,
    0x18, 0x20, 0x1D, 0x2D, 0xA9, 0x18, 0x85, 0x65, 0x42, 0xC9,
    0x0C, 0xA4, 0x05, 0xB1, 0x06, 0xA1, 0xB0, 0x23, 0x19, 0x45,
    0x48, 0x36, 0x15, 0x4F, 0xB2, 0x64, 0x3F, 0xE9, 0x7E, 0xDD,
    0xE9, 0xF9, 0xC8, 0xD7, 0x80, 0x31, 0x39, 0x0F, 0x34, 0x55,
    0x01, 0xA0, 0xC6, 0x32, 0xDE, 0x0F, 0xD8, 0x46, 0x48, 0xB1,
    0x3A, 0xBC, 0xD0, 0xC7, 0x4E, 0x8A, 0x74, 0x8C, 0x45, 0x27,
    0xEC, 0x4B, 0x01, 0x69, 0xB1, 0x52, 0x40, 0x2B, 0xB4, 0xDD,
    0x25, 0x5E, 0x8D, 0x5B, 0x2E, 0x60, 0x17, 0x21, 0x7F, 0xA8,
    0xC5, 0x17, 0xBF, 0xC5, 0x5A, 0xE6, 0x8C, 0x03, 0x36, 0xC9,
    0x7B, 0xCA, 0x39, 0x7B, 0xE6, 0x51, 0x88, 0x84, 0x79, 0x54,
    0x45, 0x80, 0x9F, 0x8A, 0x27, 0x40, 0x6F, 0x9E, 0x73, 0x96,
    0x2A, 0x61, 0x21, 0x56, 0xB8, 0xE0, 0x1C, 0xFD, 0x27, 0xAE,
    0xB9, 0x90, 0x06, 0x77, 0x9F, 0xAB, 0x9A, 0xFD, 0xC3, 0xDE,
    0x7F, 0x59, 0x2B, 0x02, 0x7A, 0x97, 0x4A, 0x74, 0x00, 0x00,
    0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82,
};
wxBitmap& fullscreen_png_to_wx_bitmap()
{
    static wxMemoryInputStream memIStream( fullscreen_png, sizeof( fullscreen_png ) );
    static wxImage image( memIStream, wxBITMAP_TYPE_PNG );
    static wxBitmap bmp( image );
    return bmp;
}
#endif //FULLSCREEN_PNG_H
res/icons/16/add_image.png
res/icons/16/cross_circle.png
res/icons/16/cube.ico
res/icons/16/cube.png
res/icons/16/dice_four.png
res/icons/16/disk.png
res/icons/16/file_import.png
res/icons/16/folder_open.png
res/icons/16/forward.png
res/icons/16/fullscreen.png
res/icons/16/images.png
res/icons/16/interrogation.png
res/icons/16/palette.png
res/icons/16/pause.png
res/icons/16/picture.png
res/icons/16/play.png
res/icons/16/refresh.png
res/icons/16/replace.png
res/icons/16/rewind.png
res/icons/16/rotate_left.png
res/icons/16/rotate_right.png
res/icons/16/settings.png
res/icons/16/text_box_dots.png
res/icons/16/trash.png
res/icons/16/zoom_in.png
res/icons/16/zoom_out.png
res/rotate_left.png.h
New file
@@ -0,0 +1,60 @@
#ifndef ROTATE_LEFT_PNG_H
#define ROTATE_LEFT_PNG_H
#include <wx/mstream.h>
#include <wx/image.h>
#include <wx/bitmap.h>
static const unsigned char rotate_left_png[] =
{
    0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00,
    0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10,
    0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F,
    0xF3, 0xFF, 0x61, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
    0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x76, 0x01,
    0x4E, 0x7B, 0x26, 0x08, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45,
    0x58, 0x74, 0x53, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
    0x00, 0x77, 0x77, 0x77, 0x2E, 0x69, 0x6E, 0x6B, 0x73, 0x63,
    0x61, 0x70, 0x65, 0x2E, 0x6F, 0x72, 0x67, 0x9B, 0xEE, 0x3C,
    0x1A, 0x00, 0x00, 0x01, 0x1C, 0x49, 0x44, 0x41, 0x54, 0x38,
    0x8D, 0x9D, 0xD3, 0x4B, 0x2B, 0xC4, 0x51, 0x18, 0xC7, 0xF1,
    0x4F, 0xE3, 0xD2, 0x94, 0x12, 0x56, 0xDE, 0x81, 0x72, 0x09,
    0x53, 0x34, 0xAC, 0xF0, 0x06, 0xAC, 0xAC, 0x78, 0x07, 0x5E,
    0x8A, 0x24, 0x26, 0x59, 0x7A, 0x01, 0x4A, 0x59, 0x49, 0x16,
    0xB2, 0xB3, 0x90, 0x92, 0xCB, 0x96, 0xCD, 0x94, 0xD5, 0x94,
    0x12, 0xC3, 0x18, 0x63, 0xF1, 0x7F, 0xC6, 0x65, 0x9A, 0xF9,
    0xBB, 0xFC, 0xEA, 0x74, 0xEA, 0x39, 0xCF, 0xF9, 0x9E, 0xDF,
    0x73, 0xCE, 0x79, 0x48, 0xD4, 0xEE, 0x53, 0x23, 0x28, 0xE0,
    0x0A, 0x8F, 0x78, 0xC2, 0x75, 0xC4, 0x86, 0x35, 0xD1, 0x2C,
    0x4A, 0x98, 0xC1, 0x26, 0xAA, 0xA8, 0xB5, 0x18, 0x55, 0xAC,
    0x22, 0xFB, 0x15, 0xB0, 0xD0, 0x90, 0xF4, 0x8A, 0x2D, 0xCC,
    0xA1, 0x0F, 0xBD, 0x98, 0xC0, 0x3A, 0x9E, 0x23, 0xE7, 0x00,
    0x9D, 0xAD, 0x00, 0xCB, 0xCD, 0x6C, 0x86, 0xC6, 0x51, 0x8C,
    0xBC, 0x42, 0x3D, 0x38, 0xDF, 0x00, 0x28, 0xA1, 0x2D, 0x05,
    0x32, 0x16, 0x4E, 0x2A, 0x18, 0x6C, 0xC3, 0x2D, 0x4E, 0xB1,
    0x8B, 0x1D, 0x6C, 0xE3, 0x26, 0x05, 0x70, 0x87, 0x7E, 0xE4,
    0xF1, 0x92, 0x92, 0x97, 0xAA, 0xA9, 0x70, 0x7B, 0xF1, 0x5F,
    0x40, 0x4F, 0x00, 0x4A, 0x19, 0xEC, 0xE1, 0x44, 0x7A, 0xDD,
    0x8D, 0x7A, 0x8B, 0xB9, 0x03, 0x2E, 0x83, 0x36, 0xF9, 0x07,
    0xC0, 0x74, 0xEC, 0x39, 0xCB, 0xE0, 0x28, 0x82, 0x8B, 0x7F,
    0x00, 0x2C, 0xC5, 0x7C, 0x0C, 0x43, 0x61, 0xA9, 0x8C, 0xD1,
    0x5F, 0x6C, 0xCE, 0x49, 0x6E, 0xBF, 0x8A, 0x81, 0x7A, 0xB0,
    0x10, 0x96, 0x8A, 0x3F, 0x40, 0x72, 0x92, 0x67, 0xAC, 0x49,
    0xBE, 0xF4, 0x87, 0xB2, 0x38, 0x8C, 0x85, 0x72, 0x00, 0xF3,
    0xE8, 0x42, 0xB7, 0xA4, 0xE6, 0xCD, 0x38, 0xB9, 0x86, 0x7D,
    0x0D, 0xFD, 0x50, 0x87, 0x14, 0xA4, 0x37, 0x53, 0x05, 0x6B,
    0xBE, 0xF4, 0x41, 0x33, 0x0D, 0x62, 0x43, 0xF2, 0x3A, 0x0F,
    0xB8, 0xC7, 0x39, 0x56, 0x62, 0xED, 0x9B, 0xDE, 0x01, 0xA6,
    0xD5, 0x58, 0x18, 0xA2, 0x54, 0x3E, 0x29, 0x00, 0x00, 0x00,
    0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82, };
wxBitmap& rotate_left_png_to_wx_bitmap()
{
    static wxMemoryInputStream memIStream( rotate_left_png, sizeof( rotate_left_png ) );
    static wxImage image( memIStream, wxBITMAP_TYPE_PNG );
    static wxBitmap bmp( image );
    return bmp;
}
#endif //ROTATE_LEFT_PNG_H
res/rotate_right.png.h
New file
@@ -0,0 +1,60 @@
#ifndef ROTATE_RIGHT_PNG_H
#define ROTATE_RIGHT_PNG_H
#include <wx/mstream.h>
#include <wx/image.h>
#include <wx/bitmap.h>
static const unsigned char rotate_right_png[] =
{
    0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00,
    0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10,
    0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F,
    0xF3, 0xFF, 0x61, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
    0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x76, 0x01,
    0x4E, 0x7B, 0x26, 0x08, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45,
    0x58, 0x74, 0x53, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
    0x00, 0x77, 0x77, 0x77, 0x2E, 0x69, 0x6E, 0x6B, 0x73, 0x63,
    0x61, 0x70, 0x65, 0x2E, 0x6F, 0x72, 0x67, 0x9B, 0xEE, 0x3C,
    0x1A, 0x00, 0x00, 0x01, 0x1C, 0x49, 0x44, 0x41, 0x54, 0x38,
    0x8D, 0x9D, 0xD3, 0xBB, 0x4A, 0x03, 0x51, 0x10, 0xC6, 0xF1,
    0x9F, 0x31, 0xF1, 0x0A, 0x3E, 0x80, 0xAD, 0x90, 0x26, 0xE0,
    0xA5, 0x08, 0x2A, 0x08, 0xB6, 0xBE, 0x80, 0x08, 0x0A, 0x16,
    0x56, 0xBE, 0x8A, 0x5A, 0x18, 0x2D, 0xA2, 0x95, 0x2F, 0xA1,
    0x85, 0x8D, 0xA2, 0xAD, 0x58, 0x48, 0x04, 0x4B, 0x41, 0x10,
    0x9B, 0x80, 0x60, 0x21, 0x31, 0x6A, 0x8C, 0x45, 0x26, 0x18,
    0x72, 0x59, 0x88, 0x03, 0xCB, 0x9E, 0x9D, 0x99, 0xEF, 0x3F,
    0x73, 0x66, 0xCF, 0xA1, 0xD3, 0x72, 0xD8, 0x47, 0x09, 0x1F,
    0x78, 0xC3, 0x03, 0x8A, 0x98, 0x6E, 0xC9, 0x1B, 0x6C, 0x17,
    0x66, 0x42, 0xF8, 0x8D, 0x7A, 0x8F, 0xE7, 0x07, 0xC7, 0x58,
    0x46, 0x19, 0x2B, 0xAD, 0xE2, 0xB3, 0x48, 0xAA, 0xA2, 0x80,
    0x3C, 0x86, 0x31, 0x8A, 0x25, 0x1C, 0xE0, 0xB3, 0x0D, 0xB8,
    0xD9, 0x04, 0xEC, 0x84, 0xE3, 0x19, 0x33, 0x5D, 0xB6, 0xD5,
    0xB4, 0xAD, 0x6E, 0x80, 0xA9, 0x68, 0xBB, 0x82, 0xD9, 0x04,
    0xF1, 0x00, 0x5E, 0xDA, 0x00, 0x6B, 0x69, 0x6C, 0xC7, 0x40,
    0x8A, 0xB8, 0x4B, 0x00, 0xD4, 0xB1, 0x8A, 0xC9, 0xF8, 0xFE,
    0xC2, 0x39, 0xDC, 0x46, 0x70, 0x31, 0x41, 0x9C, 0x68, 0xE5,
    0x00, 0x4C, 0xFC, 0x47, 0x9C, 0x46, 0x2A, 0xD6, 0x3F, 0x7D,
    0xE8, 0x52, 0xB8, 0xD6, 0x38, 0x27, 0x6E, 0xA2, 0x83, 0x85,
    0x3E, 0x00, 0x73, 0xA1, 0x79, 0x4C, 0xE1, 0x22, 0x9C, 0x1B,
    0x7D, 0x00, 0xD6, 0xE3, 0x7D, 0x09, 0x59, 0x8D, 0x89, 0x56,
    0x25, 0xFF, 0xC6, 0xA6, 0xE5, 0xF0, 0xAE, 0xB1, 0xE5, 0x7C,
    0xD3, 0xB9, 0xEB, 0xEF, 0x20, 0x25, 0x41, 0x72, 0x78, 0x8A,
    0xDC, 0x93, 0xD6, 0x40, 0x06, 0xA7, 0x11, 0xA8, 0xE0, 0x10,
    0xF3, 0x18, 0xC3, 0x48, 0x54, 0x2A, 0x68, 0x0C, 0xAD, 0x8E,
    0x2B, 0x8C, 0xB7, 0xD3, 0x87, 0xB0, 0x87, 0x9A, 0xDE, 0x97,
    0xA9, 0x86, 0xA3, 0x80, 0xF6, 0xB4, 0x6C, 0x54, 0x2B, 0xE1,
    0x35, 0xAA, 0xDE, 0x47, 0x57, 0x1D, 0xF7, 0xE4, 0x17, 0xBF,
    0xE2, 0x56, 0x31, 0x5E, 0xE5, 0x59, 0xC4, 0x00, 0x00, 0x00,
    0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82, };
wxBitmap& rotate_right_png_to_wx_bitmap()
{
    static wxMemoryInputStream memIStream( rotate_right_png, sizeof( rotate_right_png ) );
    static wxImage image( memIStream, wxBITMAP_TYPE_PNG );
    static wxBitmap bmp( image );
    return bmp;
}
#endif //ROTATE_RIGHT_PNG_H
res/zoom_in.png.h
New file
@@ -0,0 +1,59 @@
#ifndef ZOOM_IN_PNG_H
#define ZOOM_IN_PNG_H
#include <wx/mstream.h>
#include <wx/image.h>
#include <wx/bitmap.h>
static const unsigned char zoom_in_png[] =
{
    0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00,
    0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10,
    0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F,
    0xF3, 0xFF, 0x61, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
    0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x76, 0x01,
    0x4E, 0x7B, 0x26, 0x08, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45,
    0x58, 0x74, 0x53, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
    0x00, 0x77, 0x77, 0x77, 0x2E, 0x69, 0x6E, 0x6B, 0x73, 0x63,
    0x61, 0x70, 0x65, 0x2E, 0x6F, 0x72, 0x67, 0x9B, 0xEE, 0x3C,
    0x1A, 0x00, 0x00, 0x01, 0x05, 0x49, 0x44, 0x41, 0x54, 0x38,
    0x8D, 0x8D, 0xD2, 0x3D, 0x4E, 0x02, 0x51, 0x14, 0x05, 0xE0,
    0x4F, 0x3A, 0xE9, 0x05, 0x94, 0xB5, 0x58, 0xD8, 0xD3, 0x60,
    0x88, 0xDB, 0xD0, 0xC4, 0x0D, 0xE0, 0x5F, 0xED, 0x4E, 0x2C,
    0x8C, 0xD8, 0x58, 0xA2, 0x8D, 0x89, 0x10, 0xB1, 0x74, 0x0F,
    0x0A, 0x89, 0x12, 0x0B, 0x15, 0x0B, 0x2E, 0xE1, 0x31, 0xCE,
    0x64, 0x38, 0xC9, 0xCB, 0x9B, 0x77, 0xEE, 0xB9, 0xBF, 0x73,
    0x59, 0x45, 0x1D, 0xA7, 0x78, 0xC2, 0x04, 0x53, 0x0C, 0x70,
    0x82, 0x9A, 0x12, 0x74, 0x30, 0xC6, 0xAC, 0xE0, 0xBC, 0x87,
    0x26, 0x17, 0xFB, 0xF8, 0x0E, 0x61, 0x1F, 0x6D, 0x34, 0xB1,
    0x83, 0x16, 0xEE, 0xC2, 0xF6, 0x83, 0x83, 0xAC, 0x73, 0x0D,
    0x6F, 0x21, 0xB8, 0xC4, 0x46, 0x41, 0x92, 0x6E, 0x68, 0xC6,
    0x68, 0xE4, 0x19, 0xFA, 0xA8, 0x24, 0xFC, 0x43, 0x70, 0x29,
    0x7A, 0xA1, 0x3D, 0x4F, 0xC9, 0x61, 0x90, 0xED, 0x8C, 0x78,
    0xD1, 0x7B, 0x8A, 0xBD, 0xE0, 0x86, 0x29, 0xF9, 0x11, 0x64,
    0x33, 0xC9, 0x9C, 0x1D, 0xE0, 0xA2, 0x92, 0x6A, 0xBC, 0x3F,
    0x17, 0xCE, 0x15, 0xFC, 0x26, 0x19, 0x25, 0xEF, 0x6C, 0x35,
    0xE9, 0xBD, 0x82, 0x41, 0x18, 0x5A, 0x6B, 0xB4, 0xB0, 0x1B,
    0xDC, 0x73, 0x5A, 0xC1, 0x4D, 0x7C, 0x1F, 0x66, 0xC4, 0xF7,
    0xFE, 0x0F, 0xF1, 0x28, 0xEE, 0xEB, 0x94, 0xAC, 0x5B, 0x2E,
    0x50, 0x37, 0xAF, 0xC4, 0xC0, 0xB1, 0xE5, 0x6F, 0xAC, 0x67,
    0x8D, 0x1D, 0xCB, 0x45, 0xEA, 0x99, 0x4F, 0xBB, 0x8A, 0xCD,
    0x28, 0xFB, 0x2A, 0x69, 0xE9, 0x15, 0x5B, 0x79, 0x19, 0xCA,
    0x56, 0x79, 0x12, 0xCE, 0x33, 0x8C, 0x8A, 0x82, 0x34, 0x70,
    0x66, 0x3E, 0xA4, 0x69, 0x9C, 0x11, 0x2E, 0xB0, 0x1D, 0x4E,
    0x2F, 0x65, 0x41, 0xCA, 0x90, 0x06, 0x79, 0x2C, 0xDA, 0xFB,
    0x75, 0x82, 0xDC, 0xE2, 0xEB, 0x0F, 0x93, 0xCD, 0x61, 0x15,
    0x7C, 0x55, 0xE1, 0x85, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
    0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82,
};
wxBitmap& zoom_in_png_to_wx_bitmap()
{
    static wxMemoryInputStream memIStream( zoom_in_png, sizeof( zoom_in_png ) );
    static wxImage image( memIStream, wxBITMAP_TYPE_PNG );
    static wxBitmap bmp( image );
    return bmp;
}
#endif //ZOOM_IN_PNG_H
res/zoom_out.png.h
New file
@@ -0,0 +1,59 @@
#ifndef ZOOM_OUT_PNG_H
#define ZOOM_OUT_PNG_H
#include <wx/mstream.h>
#include <wx/image.h>
#include <wx/bitmap.h>
static const unsigned char zoom_out_png[] =
{
    0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00,
    0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10,
    0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F,
    0xF3, 0xFF, 0x61, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
    0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x76, 0x01,
    0x4E, 0x7B, 0x26, 0x08, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45,
    0x58, 0x74, 0x53, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
    0x00, 0x77, 0x77, 0x77, 0x2E, 0x69, 0x6E, 0x6B, 0x73, 0x63,
    0x61, 0x70, 0x65, 0x2E, 0x6F, 0x72, 0x67, 0x9B, 0xEE, 0x3C,
    0x1A, 0x00, 0x00, 0x01, 0x01, 0x49, 0x44, 0x41, 0x54, 0x38,
    0x8D, 0x9D, 0xD2, 0xBD, 0x4E, 0x02, 0x51, 0x10, 0x05, 0xE0,
    0x4F, 0x3A, 0xB5, 0x76, 0xFD, 0xE1, 0x11, 0xEC, 0x8C, 0xB5,
    0x89, 0xD6, 0x16, 0x04, 0x7D, 0x0F, 0x63, 0x61, 0x0F, 0x4A,
    0xED, 0xAB, 0x98, 0x98, 0x60, 0x63, 0x68, 0xAC, 0xA5, 0x20,
    0x94, 0x3C, 0x83, 0x42, 0x42, 0xB4, 0x22, 0x62, 0xC1, 0xAC,
    0x7B, 0x45, 0xD6, 0x35, 0x9E, 0x64, 0x72, 0xE7, 0xCE, 0x9C,
    0x73, 0xEE, 0xEE, 0xBD, 0xC3, 0x77, 0x64, 0x68, 0xE1, 0x19,
    0x13, 0xBC, 0xA1, 0x1F, 0xB5, 0x4C, 0x05, 0x9A, 0x18, 0x63,
    0x5E, 0x12, 0xAF, 0xC1, 0x59, 0x89, 0x06, 0x66, 0x41, 0x7C,
    0x8A, 0x7D, 0x1D, 0x7B, 0x38, 0xC5, 0x63, 0xF4, 0x66, 0x38,
    0x5F, 0x16, 0x6F, 0xE1, 0x25, 0x08, 0xB7, 0x58, 0x2B, 0x39,
    0xA4, 0x1D, 0x9C, 0x09, 0xB6, 0xD3, 0x46, 0x2B, 0x39, 0xB9,
    0x4C, 0x9C, 0xA3, 0x1B, 0xDC, 0xEB, 0xB4, 0xD8, 0x8F, 0x62,
    0xA3, 0x42, 0x0C, 0xC7, 0xC1, 0xED, 0xA7, 0xC5, 0x69, 0x14,
    0xEB, 0xB1, 0x2F, 0xBB, 0x44, 0xD8, 0x8C, 0x7C, 0x9A, 0x8B,
    0x6B, 0xF8, 0x48, 0x84, 0x55, 0xC8, 0x39, 0x5F, 0xBF, 0x5A,
    0xC3, 0x28, 0xF2, 0x83, 0xA4, 0xB9, 0x2A, 0xE0, 0x30, 0xD6,
    0x51, 0x6A, 0xD0, 0x8D, 0xFC, 0xE2, 0x0F, 0x5F, 0x70, 0x19,
    0xEB, 0x7D, 0x5A, 0xCC, 0x14, 0x03, 0xD4, 0xFE, 0x45, 0x7C,
    0x15, 0x9C, 0xB1, 0xA5, 0x67, 0x84, 0x33, 0xC5, 0x20, 0x3D,
    0xE0, 0x04, 0x1B, 0x58, 0xC7, 0x11, 0xEE, 0x14, 0x97, 0x39,
    0xB2, 0x98, 0x9D, 0x1F, 0x68, 0x5A, 0x0C, 0x49, 0xD9, 0x2B,
    0x4C, 0x42, 0x3C, 0xC7, 0xB0, 0xCC, 0x64, 0x07, 0x37, 0x18,
    0xE0, 0x3D, 0x62, 0x80, 0x0E, 0x76, 0x43, 0x34, 0xAC, 0x32,
    0xA9, 0x42, 0x6A, 0xD2, 0xFB, 0x8F, 0x41, 0x6E, 0xD2, 0xC3,
    0xFE, 0x27, 0xE9, 0xED, 0x55, 0x8D, 0x88, 0x47, 0x65, 0x9C,
    0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42,
    0x60, 0x82,
};
wxBitmap& zoom_out_png_to_wx_bitmap()
{
    static wxMemoryInputStream memIStream( zoom_out_png, sizeof( zoom_out_png ) );
    static wxImage image( memIStream, wxBITMAP_TYPE_PNG );
    static wxBitmap bmp( image );
    return bmp;
}
#endif //ZOOM_OUT_PNG_H
static/minimal.rc
New file
@@ -0,0 +1,2 @@
mondrian ICON "../res/icons/16/cube.ico"
#include "wx/msw/wx.rc"
static/window.fbp
New file
@@ -0,0 +1,279 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<wxFormBuilder_Project>
  <FileVersion major="1" minor="17"/>
  <object class="Project" expanded="true">
    <property name="class_decoration">; </property>
    <property name="code_generation">C++</property>
    <property name="disconnect_events">1</property>
    <property name="disconnect_mode">source_name</property>
    <property name="disconnect_php_events">0</property>
    <property name="disconnect_python_events">0</property>
    <property name="embedded_files_path">Z:\wx.image_viewer\res</property>
    <property name="encoding">UTF-8</property>
    <property name="event_generation">connect</property>
    <property name="file">ImageViewer</property>
    <property name="first_id">1000</property>
    <property name="help_provider">wxSimpleHelpProvider</property>
    <property name="image_path_wrapper_function_name"></property>
    <property name="indent_with_spaces"></property>
    <property name="internationalize">1</property>
    <property name="name">ImageViewer</property>
    <property name="namespace"></property>
    <property name="path">Z:\wx.image_viewer\ui</property>
    <property name="precompiled_header"></property>
    <property name="relative_path">1</property>
    <property name="skip_lua_events">1</property>
    <property name="skip_php_events">1</property>
    <property name="skip_python_events">1</property>
    <property name="ui_table">UI</property>
    <property name="use_array_enum">0</property>
    <property name="use_enum">0</property>
    <property name="use_microsoft_bom">0</property>
    <object class="Frame" expanded="true">
      <property name="aui_managed">0</property>
      <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
      <property name="bg"></property>
      <property name="center">wxBOTH</property>
      <property name="context_help"></property>
      <property name="context_menu">1</property>
      <property name="drag_accept_files">1</property>
      <property name="enabled">1</property>
      <property name="event_handler">impl_virtual</property>
      <property name="extra_style"></property>
      <property name="fg"></property>
      <property name="font"></property>
      <property name="hidden">0</property>
      <property name="id">wxID_ANY</property>
      <property name="maximum_size"></property>
      <property name="minimum_size"></property>
      <property name="name">ImageWindow</property>
      <property name="pos"></property>
      <property name="size">500,300</property>
      <property name="style">wxDEFAULT_FRAME_STYLE</property>
      <property name="subclass">; ; forward_declare</property>
      <property name="title">Image viewer</property>
      <property name="tooltip"></property>
      <property name="two_step_creation">0</property>
      <property name="window_extra_style"></property>
      <property name="window_name"></property>
      <property name="window_style">wxTAB_TRAVERSAL</property>
      <property name="xrc_skip_sizer">1</property>
      <object class="wxBoxSizer" expanded="true">
        <property name="minimum_size"></property>
        <property name="name">bSizer1</property>
        <property name="orient">wxVERTICAL</property>
        <property name="permission">none</property>
        <object class="sizeritem" expanded="true">
          <property name="border">5</property>
          <property name="flag">wxALL|wxEXPAND</property>
          <property name="proportion">1</property>
          <object class="wxStaticBitmap" expanded="true">
            <property name="BottomDockable">1</property>
            <property name="LeftDockable">1</property>
            <property name="RightDockable">1</property>
            <property name="TopDockable">1</property>
            <property name="aui_layer"></property>
            <property name="aui_name"></property>
            <property name="aui_position"></property>
            <property name="aui_row"></property>
            <property name="best_size"></property>
            <property name="bg"></property>
            <property name="bitmap"></property>
            <property name="caption"></property>
            <property name="caption_visible">1</property>
            <property name="center_pane">0</property>
            <property name="close_button">1</property>
            <property name="context_help"></property>
            <property name="context_menu">1</property>
            <property name="default_pane">0</property>
            <property name="dock">Dock</property>
            <property name="dock_fixed">0</property>
            <property name="docking">Left</property>
            <property name="drag_accept_files">0</property>
            <property name="enabled">1</property>
            <property name="fg"></property>
            <property name="floatable">1</property>
            <property name="font"></property>
            <property name="gripper">0</property>
            <property name="hidden">0</property>
            <property name="id">wxID_ANY</property>
            <property name="max_size"></property>
            <property name="maximize_button">0</property>
            <property name="maximum_size"></property>
            <property name="min_size"></property>
            <property name="minimize_button">0</property>
            <property name="minimum_size"></property>
            <property name="moveable">1</property>
            <property name="name">m_bitmap1</property>
            <property name="pane_border">1</property>
            <property name="pane_position"></property>
            <property name="pane_size"></property>
            <property name="permission">protected</property>
            <property name="pin_button">1</property>
            <property name="pos"></property>
            <property name="resize">Resizable</property>
            <property name="show">1</property>
            <property name="size"></property>
            <property name="subclass">; ; forward_declare</property>
            <property name="toolbar_pane">0</property>
            <property name="tooltip"></property>
            <property name="window_extra_style"></property>
            <property name="window_name"></property>
            <property name="window_style"></property>
          </object>
        </object>
      </object>
      <object class="wxStatusBar" expanded="true">
        <property name="bg"></property>
        <property name="context_help"></property>
        <property name="context_menu">1</property>
        <property name="drag_accept_files">0</property>
        <property name="enabled">1</property>
        <property name="fg"></property>
        <property name="fields">1</property>
        <property name="font"></property>
        <property name="hidden">0</property>
        <property name="id">wxID_ANY</property>
        <property name="maximum_size"></property>
        <property name="minimum_size"></property>
        <property name="name">m_statusBar1</property>
        <property name="permission">protected</property>
        <property name="pos"></property>
        <property name="size"></property>
        <property name="style">wxSTB_SIZEGRIP</property>
        <property name="subclass">; ; forward_declare</property>
        <property name="tooltip"></property>
        <property name="window_extra_style"></property>
        <property name="window_name"></property>
        <property name="window_style"></property>
      </object>
      <object class="wxToolBar" expanded="true">
        <property name="BottomDockable">1</property>
        <property name="LeftDockable">1</property>
        <property name="RightDockable">1</property>
        <property name="TopDockable">1</property>
        <property name="aui_layer"></property>
        <property name="aui_name"></property>
        <property name="aui_position"></property>
        <property name="aui_row"></property>
        <property name="best_size"></property>
        <property name="bg"></property>
        <property name="bitmapsize"></property>
        <property name="caption"></property>
        <property name="caption_visible">1</property>
        <property name="center_pane">0</property>
        <property name="close_button">1</property>
        <property name="context_help"></property>
        <property name="context_menu">1</property>
        <property name="default_pane">0</property>
        <property name="dock">Dock</property>
        <property name="dock_fixed">0</property>
        <property name="docking">Left</property>
        <property name="drag_accept_files">0</property>
        <property name="enabled">1</property>
        <property name="fg"></property>
        <property name="floatable">1</property>
        <property name="font"></property>
        <property name="gripper">0</property>
        <property name="hidden">0</property>
        <property name="id">wxID_ANY</property>
        <property name="margins"></property>
        <property name="max_size"></property>
        <property name="maximize_button">0</property>
        <property name="maximum_size"></property>
        <property name="min_size"></property>
        <property name="minimize_button">0</property>
        <property name="minimum_size"></property>
        <property name="moveable">1</property>
        <property name="name">m_toolBar1</property>
        <property name="packing">1</property>
        <property name="pane_border">1</property>
        <property name="pane_position"></property>
        <property name="pane_size"></property>
        <property name="permission">protected</property>
        <property name="pin_button">1</property>
        <property name="pos"></property>
        <property name="resize">Resizable</property>
        <property name="separation">5</property>
        <property name="show">1</property>
        <property name="size"></property>
        <property name="style">wxTB_DOCKABLE|wxTB_HORIZONTAL</property>
        <property name="subclass">; ; forward_declare</property>
        <property name="toolbar_pane">0</property>
        <property name="tooltip"></property>
        <property name="window_extra_style"></property>
        <property name="window_name"></property>
        <property name="window_style"></property>
        <object class="tool" expanded="true">
          <property name="bitmap">Load From Embedded File; ../res/icons/16/add_image.png</property>
          <property name="context_menu">0</property>
          <property name="id">wxID_ANY</property>
          <property name="kind">wxITEM_NORMAL</property>
          <property name="label">Open image</property>
          <property name="name">m_open_image</property>
          <property name="permission">protected</property>
          <property name="statusbar"></property>
          <property name="tooltip"></property>
        </object>
        <object class="toolSeparator" expanded="true">
          <property name="permission">protected</property>
        </object>
        <object class="tool" expanded="true">
          <property name="bitmap">Load From Embedded File; ../res/icons/16/rotate_left.png</property>
          <property name="context_menu">0</property>
          <property name="id">wxID_ANY</property>
          <property name="kind">wxITEM_NORMAL</property>
          <property name="label">Rotate -90</property>
          <property name="name">m_rotate_left</property>
          <property name="permission">protected</property>
          <property name="statusbar"></property>
          <property name="tooltip"></property>
        </object>
        <object class="tool" expanded="true">
          <property name="bitmap">Load From Embedded File; ../res/icons/16/rotate_right.png</property>
          <property name="context_menu">0</property>
          <property name="id">wxID_ANY</property>
          <property name="kind">wxITEM_NORMAL</property>
          <property name="label">Rotate +90</property>
          <property name="name">m_rotate_right</property>
          <property name="permission">protected</property>
          <property name="statusbar"></property>
          <property name="tooltip"></property>
        </object>
        <object class="tool" expanded="true">
          <property name="bitmap">Load From Embedded File; ../res/icons/16/zoom_in.png</property>
          <property name="context_menu">0</property>
          <property name="id">wxID_ANY</property>
          <property name="kind">wxITEM_NORMAL</property>
          <property name="label">Zoom in</property>
          <property name="name">m_zoom_in</property>
          <property name="permission">protected</property>
          <property name="statusbar"></property>
          <property name="tooltip"></property>
        </object>
        <object class="tool" expanded="true">
          <property name="bitmap">Load From Embedded File; ../res/icons/16/zoom_out.png</property>
          <property name="context_menu">0</property>
          <property name="id">wxID_ANY</property>
          <property name="kind">wxITEM_NORMAL</property>
          <property name="label">Zoom out</property>
          <property name="name">m_zoom_out</property>
          <property name="permission">protected</property>
          <property name="statusbar"></property>
          <property name="tooltip"></property>
        </object>
        <object class="tool" expanded="true">
          <property name="bitmap">Load From Embedded File; ../res/icons/16/fullscreen.png</property>
          <property name="context_menu">0</property>
          <property name="id">wxID_ANY</property>
          <property name="kind">wxITEM_NORMAL</property>
          <property name="label">Fullscreen</property>
          <property name="name">m_fullscreen</property>
          <property name="permission">protected</property>
          <property name="statusbar"></property>
          <property name="tooltip"></property>
        </object>
      </object>
    </object>
  </object>
</wxFormBuilder_Project>
ui/ImageViewer.cpp
New file
@@ -0,0 +1,74 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "ImageViewer.h"
#include "../res/add_image.png.h"
#include "../res/fullscreen.png.h"
#include "../res/rotate_left.png.h"
#include "../res/rotate_right.png.h"
#include "../res/zoom_in.png.h"
#include "../res/zoom_out.png.h"
// Using the construction of a static object to ensure that the help provider is set
// wx Manages the most recent HelpProvider passed to ::Set, but not the previous ones
// If ::Set gets called more than once, the previous one is returned and should be deleted
class wxFBContextSensitiveHelpSetter
{
public:
wxFBContextSensitiveHelpSetter()
{
wxSimpleHelpProvider* help = new wxSimpleHelpProvider();
wxHelpProvider* old = wxHelpProvider::Set( help );
if (old != 0){
delete old;
}
}
};
static wxFBContextSensitiveHelpSetter s_wxFBSetTheHelpProvider;
///////////////////////////////////////////////////////////////////////////
ImageWindow::ImageWindow( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
{
    this->SetSizeHints( wxDefaultSize, wxDefaultSize );
    this->DragAcceptFiles( true );
    wxBoxSizer* bSizer1;
    bSizer1 = new wxBoxSizer( wxVERTICAL );
    m_bitmap1 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
    bSizer1->Add( m_bitmap1, 1, wxALL|wxEXPAND, 5 );
    this->SetSizer( bSizer1 );
    this->Layout();
    m_statusBar1 = this->CreateStatusBar( 1, wxSTB_SIZEGRIP, wxID_ANY );
    m_toolBar1 = this->CreateToolBar( wxTB_DOCKABLE|wxTB_HORIZONTAL, wxID_ANY );
    m_open_image = m_toolBar1->AddTool( wxID_ANY, _("Open image"), add_image_png_to_wx_bitmap(), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString, NULL );
    m_toolBar1->AddSeparator();
    m_rotate_left = m_toolBar1->AddTool( wxID_ANY, _("Rotate -90"), rotate_left_png_to_wx_bitmap(), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString, NULL );
    m_rotate_right = m_toolBar1->AddTool( wxID_ANY, _("Rotate +90"), rotate_right_png_to_wx_bitmap(), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString, NULL );
    m_zoom_in = m_toolBar1->AddTool( wxID_ANY, _("Zoom in"), zoom_in_png_to_wx_bitmap(), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString, NULL );
    m_zoom_out = m_toolBar1->AddTool( wxID_ANY, _("Zoom out"), zoom_out_png_to_wx_bitmap(), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString, NULL );
    m_fullscreen = m_toolBar1->AddTool( wxID_ANY, _("Fullscreen"), fullscreen_png_to_wx_bitmap(), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString, NULL );
    m_toolBar1->Realize();
    this->Centre( wxBOTH );
}
ImageWindow::~ImageWindow()
{
}
ui/ImageViewer.h
New file
@@ -0,0 +1,56 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#pragma once
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/cshelp.h>
#include <wx/intl.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/statbmp.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/string.h>
#include <wx/sizer.h>
#include <wx/statusbr.h>
#include <wx/toolbar.h>
#include <wx/frame.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class ImageWindow
///////////////////////////////////////////////////////////////////////////////
class ImageWindow : public wxFrame
{
    private:
    protected:
        wxStaticBitmap* m_bitmap1;
        wxStatusBar* m_statusBar1;
        wxToolBar* m_toolBar1;
        wxToolBarToolBase* m_open_image;
        wxToolBarToolBase* m_rotate_left;
        wxToolBarToolBase* m_rotate_right;
        wxToolBarToolBase* m_zoom_in;
        wxToolBarToolBase* m_zoom_out;
        wxToolBarToolBase* m_fullscreen;
    public:
        ImageWindow( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Image viewer"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,300 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
        ~ImageWindow();
};
ui/ImageViewerImageWindow.cpp
New file
@@ -0,0 +1,8 @@
#include "ImageViewerImageWindow.h"
ImageViewerImageWindow::ImageViewerImageWindow( wxWindow* parent )
:
ImageWindow( parent )
{
}
ui/ImageViewerImageWindow.h
New file
@@ -0,0 +1,25 @@
#ifndef __ImageViewerImageWindow__
#define __ImageViewerImageWindow__
/**
@file
Subclass of ImageWindow, which is generated by wxFormBuilder.
*/
#include "ImageViewer.h"
//// end generated include
/** Implementing ImageWindow */
class ImageViewerImageWindow : public ImageWindow
{
    public:
        /** Constructor */
        ImageViewerImageWindow( wxWindow* parent );
    //// end generated class members
};
#endif // __ImageViewerImageWindow__