view main.cpp @ 0:47f1298cc11d

first release.
author pyon@macmini
date Sun, 28 Jul 2013 23:01:57 +0900
parents
children a14406960539
line wrap: on
line source

// Filename   : main.cpp
// Last Change: 28-Jul-2013.
//
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/cmdline.h"
#include <wx/string.h>
#include <wx/bitmap.h>
#include <wx/image.h>


// private classes
// Define a new application type, each program should derive a class from wxApp
class MyApp : public wxApp
{
    DECLARE_CLASS( MyApp )
public:
    MyApp();
    ~MyApp();

    virtual bool OnInit();
    virtual int  OnExit();
    virtual int  OnRun();
    virtual void OnInitCmdLine( wxCmdLineParser& parser );
    virtual bool OnCmdLineParsed( wxCmdLineParser& parser );

private:
    void InitImageData();
    void SetImageData1( wxString color );
    void SetImageData2( wxString color );
    void SetImageData3( wxString color );
    void SetImageData4( wxString color );
    void SetImageData5( wxString color );
    void SetImageData6( wxString color );
    void SetImageData7( wxString color );
    void SetImageData8( wxString color );
    void SetImageData9( wxString color );
    void SetImageDataA( wxString color );
    void SetImageDataB( wxString color );
    void SetImageDataC( wxString color );
    void SetImageDataD( wxString color );
    void SetImageDataE( wxString color );
    void SetImageDataF( wxString color );
    void SetImageDataG( wxString color );
    void SetImageDataH( wxString color );
    void SetImageDataI( wxString color );
    void SetImageDataJ( wxString color );
    void SetImageDataK( wxString color );
    void SetImageDataL( wxString color );
    void SetImageData( int x, int y, int w, int h, wxString color );
    wxString ColorName( wxString color );

    wxImage image;
    wxString color1;
    wxString color2;
    wxString color3;
    wxString color4;
    wxString color5;
    wxString color6;
    wxString color7;
    wxString color8;
    wxString color9;
    wxString colorA;
    wxString colorB;
    wxString colorC;
    wxString colorD;
    wxString colorE;
    wxString colorF;
    wxString colorG;
    wxString colorH;
    wxString colorI;
    wxString colorJ;
    wxString colorK;
    wxString colorL;
};

static const wxCmdLineEntryDesc g_cmdLineDesc [] =
{
    { wxCMD_LINE_SWITCH, "v", "version", "display version" , wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
    { wxCMD_LINE_OPTION, "1", "color1", "1 color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "2", "color2", "2 color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "3", "color3", "3 color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "4", "color4", "4 color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "5", "color5", "5 color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "6", "color6", "6 color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "7", "color7", "7 color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "8", "color8", "8 color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "9", "color9", "9 color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "a", "colora", "A color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "b", "colorb", "B color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "c", "colorc", "C color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "d", "colord", "D color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "e", "colore", "E color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "f", "colorf", "F color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "g", "colorg", "G color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "h", "colorh", "H color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "i", "colori", "I color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "j", "colorj", "J color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "k", "colork", "K color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_OPTION, "l", "colorl", "L color", wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY },
    { wxCMD_LINE_NONE }

};

unsigned char *data;

DECLARE_APP(MyApp)


IMPLEMENT_APP(MyApp)

IMPLEMENT_CLASS( MyApp, wxApp )

// constructor
MyApp::MyApp()
{
}
MyApp::~MyApp()
{
}

bool MyApp::OnInit()
{
    if ( !wxApp::OnInit() ) return false;

    wxCmdLineParser( g_cmdLineDesc, argc, argv );

    image.Create( 19, 19, true );
    wxImage::AddHandler( new wxPNGHandler );

    return true;
}

int MyApp::OnExit()
{
    return 0;
}

int MyApp::OnRun()
{
    /*
    int exitcode = wxApp::OnRun();
    if ( exitcode != 0 ) return exitcode;
    */
    InitImageData();
    SetImageData1( ColorName( color1 ) );
    SetImageData2( ColorName( color2 ) );
    SetImageData3( ColorName( color3 ) );
    SetImageData4( ColorName( color4 ) );
    SetImageData5( ColorName( color5 ) );
    SetImageData6( ColorName( color6 ) );
    SetImageData7( ColorName( color7 ) );
    SetImageData8( ColorName( color8 ) );
    SetImageData9( ColorName( color9 ) );
    SetImageDataA( ColorName( colorA ) );
    SetImageDataB( ColorName( colorB ) );
    SetImageDataC( ColorName( colorC ) );
    SetImageDataD( ColorName( colorD ) );
    SetImageDataE( ColorName( colorE ) );
    SetImageDataF( ColorName( colorF ) );
    SetImageDataG( ColorName( colorG ) );
    SetImageDataH( ColorName( colorH ) );
    SetImageDataI( ColorName( colorI ) );
    SetImageDataJ( ColorName( colorJ ) );
    SetImageDataK( ColorName( colorK ) );
    SetImageDataL( ColorName( colorL ) );
    image.SaveFile( wxT("output.png"), wxBITMAP_TYPE_PNG );
}

void MyApp::OnInitCmdLine( wxCmdLineParser& parser )
{
    parser.SetDesc( g_cmdLineDesc );
    parser.SetSwitchChars( wxT("-") );

    parser.AddUsageText( wxT("\n[overview]") );
    parser.AddUsageText( wxT("     A   B   C"    ) );
    parser.AddUsageText( wxT("    --- --- ---"   ) );
    parser.AddUsageText( wxT(" L | 1 | 2 | 3 | D") );
    parser.AddUsageText( wxT("    --- --- ---"   ) );
    parser.AddUsageText( wxT(" K | 4 | 5 | 6 | E") );
    parser.AddUsageText( wxT("    --- --- ---"   ) );
    parser.AddUsageText( wxT(" J | 7 | 8 | 9 | F") );
    parser.AddUsageText( wxT("    --- --- ---   ") );
    parser.AddUsageText( wxT("     I   H   G    ") );
    parser.AddUsageText( wxT("\n[color]") );
    parser.AddUsageText( wxT("     w: white   y: yellow  o: orange  r: red  b: blue  g: gree") );
}

bool MyApp::OnCmdLineParsed( wxCmdLineParser& parser )
{
    parser.Found( wxT("1"), &color1 );
    parser.Found( wxT("2"), &color2 );
    parser.Found( wxT("3"), &color3 );
    parser.Found( wxT("4"), &color4 );
    parser.Found( wxT("5"), &color5 );
    parser.Found( wxT("6"), &color6 );
    parser.Found( wxT("7"), &color7 );
    parser.Found( wxT("8"), &color8 );
    parser.Found( wxT("9"), &color9 );
    parser.Found( wxT("a"), &colorA );
    parser.Found( wxT("b"), &colorB );
    parser.Found( wxT("c"), &colorC );
    parser.Found( wxT("d"), &colorD );
    parser.Found( wxT("e"), &colorE );
    parser.Found( wxT("f"), &colorF );
    parser.Found( wxT("g"), &colorG );
    parser.Found( wxT("h"), &colorH );
    parser.Found( wxT("i"), &colorI );
    parser.Found( wxT("j"), &colorJ );
    parser.Found( wxT("k"), &colorK );
    parser.Found( wxT("l"), &colorL );
    return true;
}

void MyApp::InitImageData()                 { SetImageData(  3,  3, 13, 13, wxT("black") ); }
void MyApp::SetImageData1( wxString color ) { SetImageData(  4,  4,  3,  3, color ); }
void MyApp::SetImageData2( wxString color ) { SetImageData(  8,  4,  3,  3, color ); }
void MyApp::SetImageData3( wxString color ) { SetImageData( 12,  4,  3,  3, color ); }
void MyApp::SetImageData4( wxString color ) { SetImageData(  4,  8,  3,  3, color ); }
void MyApp::SetImageData5( wxString color ) { SetImageData(  8,  8,  3,  3, color ); }
void MyApp::SetImageData6( wxString color ) { SetImageData( 12,  8,  3,  3, color ); }
void MyApp::SetImageData7( wxString color ) { SetImageData(  4, 12,  3,  3, color ); }
void MyApp::SetImageData8( wxString color ) { SetImageData(  8, 12,  3,  3, color ); }
void MyApp::SetImageData9( wxString color ) { SetImageData( 12, 12,  3,  3, color ); }
void MyApp::SetImageDataA( wxString color ) { SetImageData(  4,  1,  3,  1, color ); }
void MyApp::SetImageDataB( wxString color ) { SetImageData(  8,  1,  3,  1, color ); }
void MyApp::SetImageDataC( wxString color ) { SetImageData( 12,  1,  3,  1, color ); }
void MyApp::SetImageDataD( wxString color ) { SetImageData( 17,  4,  1,  3, color ); }
void MyApp::SetImageDataE( wxString color ) { SetImageData( 17,  8,  1,  3, color ); }
void MyApp::SetImageDataF( wxString color ) { SetImageData( 17, 12,  1,  3, color ); }
void MyApp::SetImageDataG( wxString color ) { SetImageData( 12, 17,  3,  1, color ); }
void MyApp::SetImageDataH( wxString color ) { SetImageData(  8, 17,  3,  1, color ); }
void MyApp::SetImageDataI( wxString color ) { SetImageData(  4, 17,  3,  1, color ); }
void MyApp::SetImageDataJ( wxString color ) { SetImageData(  1, 12,  1,  3, color ); }
void MyApp::SetImageDataK( wxString color ) { SetImageData(  1,  8,  1,  3, color ); }
void MyApp::SetImageDataL( wxString color ) { SetImageData(  1,  4,  1,  3, color ); }

void MyApp::SetImageData( int x, int y, int w, int h, wxString color ) 
{
    wxRect rect( x, y, w, h );
    if (      color.IsSameAs( wxT("black"),  true ) ) image.SetRGB( rect,   0,   0,   0 );
    else if ( color.IsSameAs( wxT("white"),  true ) ) image.SetRGB( rect, 255, 255, 255 );
    else if ( color.IsSameAs( wxT("yellow"), true ) ) image.SetRGB( rect, 255, 255,   0 );
    else if ( color.IsSameAs( wxT("orange"), true ) ) image.SetRGB( rect, 255, 127,   0 );
    else if ( color.IsSameAs( wxT("red"),    true ) ) image.SetRGB( rect, 255,   0,   0 );
    else if ( color.IsSameAs( wxT("blue"),   true ) ) image.SetRGB( rect,   0,   0, 255 );
    else if ( color.IsSameAs( wxT("green"),  true ) ) image.SetRGB( rect,   0, 255,   0 );
}

wxString MyApp::ColorName( wxString color ) 
{
    wxString name;

    if      ( color.IsSameAs( wxT("w"), false ) ) name = wxT( "white"  );
    else if ( color.IsSameAs( wxT("r"), false ) ) name = wxT( "red"    );
    else if ( color.IsSameAs( wxT("b"), false ) ) name = wxT( "blue"   );
    else if ( color.IsSameAs( wxT("y"), false ) ) name = wxT( "yellow" );
    else if ( color.IsSameAs( wxT("o"), false ) ) name = wxT( "orange" );
    else if ( color.IsSameAs( wxT("g"), false ) ) name = wxT( "green"  );

    return name;
}