17 #include <QTranslator>
18 #include <QLibraryInfo>
20 #include <QCommandLineParser>
21 #include <QCommandLineOption>
23 #include "mainwindow2.h"
24 #include "pencilapplication.h"
33 QSettings setting( PENCIL2D, PENCIL2D );
34 QString strUserLocale = setting.value( SETTING_LANGUAGE ).toString();
35 if ( strUserLocale.isEmpty() )
37 strUserLocale = QLocale::system().name();
40 QString strQtLocale = strUserLocale;
41 strQtLocale.replace(
"-",
"_" );
42 QTranslator* qtTranslator =
new QTranslator(&app);
43 qtTranslator->load(
"qt_" + strUserLocale, QLibraryInfo::location( QLibraryInfo::TranslationsPath ) );
44 app.installTranslator( qtTranslator );
46 strUserLocale.replace(
"_",
"-" );
47 qDebug() <<
"Detect locale =" << strUserLocale;
49 QTranslator* pencil2DTranslator =
new QTranslator(&app);
50 bool b = pencil2DTranslator->load(
":/qm/Language." + strUserLocale );
52 qDebug() <<
"Load translation = " << b;
54 b = app.installTranslator( pencil2DTranslator );
56 qDebug() <<
"Install translation = " << b;
61 QStringList args = PencilApplication::arguments();
63 QStringList outputPaths;
64 int width = -1, height = -1;
65 bool transparency =
false;
67 QCommandLineParser parser;
70 parser.setApplicationDescription( PencilApplication::tr(
"Pencil2D is an animation/drawing software for Mac OS X, Windows, and Linux. It lets you create traditional hand-drawn animation (cartoon) using both bitmap and vector graphics.") );
71 parser.addHelpOption();
72 parser.addVersionOption();
73 parser.addPositionalArgument(
"input", PencilApplication::tr(
"Path to the input pencil file." ) );
75 QCommandLineOption exportSeqOption( QStringList() <<
"o" <<
"export-sequence",
76 PencilApplication::tr(
"Render the file to <output_path>" ),
77 PencilApplication::tr(
"output_path" ) );
78 parser.addOption( exportSeqOption );
80 QCommandLineOption widthOption( QStringList() <<
"width",
81 PencilApplication::tr(
"Width of the output frames" ),
82 PencilApplication::tr(
"integer" ) );
83 parser.addOption( widthOption );
85 QCommandLineOption heightOption( QStringList() <<
"height",
86 PencilApplication::tr(
"Height of the output frames" ),
87 PencilApplication::tr(
"integer" ) );
88 parser.addOption( heightOption );
90 QCommandLineOption transparencyOption( QStringList() <<
"transparency",
91 PencilApplication::tr(
"Render transparency when possible" ) );
92 parser.addOption( transparencyOption );
94 parser.process( args );
96 QStringList posArgs = parser.positionalArguments();
97 if ( !posArgs.isEmpty() )
99 inputPath = posArgs.at(0);
102 outputPaths = parser.values( exportSeqOption );
104 if ( !parser.value( widthOption ).isEmpty() )
107 width = parser.value( widthOption ).toInt( &ok );
110 qDebug() << PencilApplication::tr(
"Warning: width value %1 is not an integer, ignoring." ).arg(parser.value( widthOption ));
114 if ( !parser.value( heightOption ).isEmpty() )
117 height = parser.value( heightOption ).toInt( &ok );
120 qDebug() << PencilApplication::tr(
"Warning: height value %1 is not an integer, ignoring." ).arg(parser.value( heightOption ));
124 transparency = parser.isSet( transparencyOption );
127 if ( outputPaths.isEmpty() )
130 if( !inputPath.isEmpty() )
132 mainWindow.openFile(inputPath);
134 return PencilApplication::exec();
136 else if ( inputPath.isEmpty() )
139 qDebug() << PencilApplication::tr(
"Error: No input file specified." );
143 std::cout << PencilApplication::tr(
"Exporting image sequence..." ).constData() << std::endl;
145 QFileInfo inputFileInfo(inputPath);
146 if(!inputFileInfo.exists()) {
147 qDebug() << PencilApplication::tr(
"Error: the input file at '%1' does not exist" ).arg(inputPath);
150 if ( !inputFileInfo.isFile() )
152 qDebug() << PencilApplication::tr(
"Error: the input path '%1' is not a file" ).arg(inputPath);
156 for (
int i = 0; i < outputPaths.length(); i++ )
158 mainWindow.openFile( inputPath );
162 QMap<QString, QString> extensionMapping;
163 extensionMapping[
"png" ] =
"PNG";
164 extensionMapping[
"jpg" ] =
"JPG";
165 extensionMapping[
"jpeg" ] =
"JPG";
166 extensionMapping[
"tif" ] =
"TIF";
167 extensionMapping[
"tiff" ] =
"TIF";
168 extensionMapping[
"bmp" ] =
"BMP";
169 QString extension = outputPaths[i].mid( outputPaths[i].lastIndexOf(
"." ) + 1 ).toLower();
171 if ( inputPath.contains(
".") && extensionMapping.contains( extension ) )
173 format = extensionMapping[extension];
176 qDebug() << PencilApplication::tr(
"Warning: Output format is not specified or unsupported. Using PNG." );
180 mainWindow.mEditor->exportSeqCLI( outputPaths[i], format, width, height, transparency );
182 qDebug() << PencilApplication::tr(
"Done." );
187 bool isGUIMode(
int argc,
char* argv[] )
191 b |= ( argc <= 3 ) && QString( argv[ 1 ] ) ==
"-NSDocumentRevisionsDebugMode";
195 int main(
int argc,
char* argv[])
199 installTranslator( app );
202 mainWindow.setWindowTitle( PENCIL_WINDOW_TITLE );
204 QObject::connect( &app, &PencilApplication::openFileRequested, &mainWindow, &MainWindow2::openFile );
205 app.emitOpenFileRequest();
207 if ( isGUIMode( argc, argv ) )
213 return handleArguments( mainWindow );