+#ifndef __cpPipelineEditor__MainHelper__h__
+#define __cpPipelineEditor__MainHelper__h__
+
+#include <cstdlib>
+#include <QApplication>
+
+// -------------------------------------------------------------------------
+#define cpPipelineEditor_Main( _window_class_ ) \
+ int main( int argc, char* argv[] ) \
+ { \
+ QApplication a( argc, argv ); \
+ _window_class_ w( argc, argv ); \
+ w.show( ); \
+ return( a.exec( ) ); \
+ }
+
+// -------------------------------------------------------------------------
+
+#ifdef _WIN32
+
+# include <memory>
+# include <vector>
+# include <windows.h>
+# include <shellapi.h>
+
+// -------------------------------------------------------------------------
+namespace cpPipelineEditor
+{
+ /**
+ */
+ class Win32CommandLineConverter
+ {
+ private:
+ std::unique_ptr< char*[ ] > argv_;
+ std::vector< std::unique_ptr< char[ ] > > storage_;
+
+ public:
+ Win32CommandLineConverter( )
+ {
+ LPWSTR cmd_line = GetCommandLineW( );
+ int argc;
+ LPWSTR* w_argv = CommandLineToArgvW( cmd_line, &argc );
+ argv_ = std::unique_ptr< char*[ ] >( new char*[ argc ] );
+ storage_.reserve( argc );
+ for( int i = 0; i < argc; ++i )
+ {
+ storage_.push_back( ConvertWArg( w_argv[ i ] ) );
+ argv_[ i ] = storage_.back( ).get( );
+
+ } // rof
+ LocalFree( w_argv );
+ }
+ int argc( ) const
+ {
+ return( static_cast< int >(storage_.size( ) ) );
+ }
+ char** argv( ) const
+ {
+ return( argv_.get( ) );
+ }
+ static std::unique_ptr< char[ ] > ConvertWArg( LPWSTR w_arg )
+ {
+ int size = WideCharToMultiByte(
+ CP_UTF8, 0, w_arg, -1, nullptr, 0, nullptr, nullptr
+ );
+ std::unique_ptr< char[ ] > ret( new char[ size ] );
+ WideCharToMultiByte(
+ CP_UTF8, 0, w_arg, -1, ret.get( ), size, nullptr, nullptr
+ );
+ return( ret );
+ }
+ };
+
+} // ecapseman
+
+// -------------------------------------------------------------------------
+# define cpPipelineEditor_MainComplement \
+ int CALLBACK WinMain( HINSTANCE i, HINSTANCE p, LPSTR c, int s ) \
+ { \
+ cpPipelineEditor::Win32CommandLineConverter cmd_line; \
+ return( main( cmd_line.argc( ), cmd_line.argv( ) ) ); \
+ }
+#else // _WIN32
+# define cpPipelineEditor_MainComplement
+#endif // _WIN32
+
+#endif // __cpPipelineEditor__MainHelper__h__
+
+// eof - $RCSfile$