blob: d5a0da010af6ba7b7caf207d66266bfee323fe7e [file] [log] [blame] [raw]
/*
Copyright 2007-2013 PC GO Ld.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*/
#include <stdio.h>
#include <QtCore/QLibraryInfo>
#include <QtCore/QLocale>
#include <QtCore/QTranslator>
#include <QtGui/QApplication>
#include <QtGui/QMessageBox>
#include <QtGui/QIcon>
#include <QtGui/QFileDialog>
#include <QtGui/QInputDialog>
#include <QtGui/QDialog>
#ifdef Q_OS_MAC
#include <QtGui/QStyle>
#endif
int GetFileName(QString title, QString filename, bool multiple){
char *out;
if(multiple){
QStringList files = QFileDialog::getOpenFileNames(0, title, filename, QString(), &QString(), QFileDialog::DontUseNativeDialog);
QString line;
for(int i=0; i<files.count(); ++i){
if(i!=0) line += "|";
line += files[i];
}
out = QByteArray(line.toLocal8Bit()).data();
}else out = QByteArray(QFileDialog::getOpenFileName(0, title, filename, QString(), &QString(), QFileDialog::DontUseNativeDialog).toLocal8Bit()).data();
if(out != QString("")){
printf("%s\n", out);
return 0;
}else return 1;
}
int GetText(QString title, QString text, QString etext){
//if(title.isEmpty()) title =
if(text.isEmpty()) text = QObject::trUtf8("Enter text:");
bool ok;
char *out = QByteArray(QInputDialog::getText(0, title, text, QLineEdit::Normal, etext, &ok).toLocal8Bit()).data();
if(ok) printf("%s\n", out);
//return ok;
return ok? 0:1;
}
int MessageBox(QString title, QString text, int type, int button){
QMessageBox box;
if(title.isEmpty()){
switch(type){
case QMessageBox::Question:
title = QApplication::translate("QDialog", "Question", 0, QApplication::UnicodeUTF8);
break;
case QMessageBox::Information:
title = QApplication::translate("QDialog", "Information", 0, QApplication::UnicodeUTF8);
break;
case QMessageBox::Warning:
title = QApplication::translate("QDialog", "Warning", 0, QApplication::UnicodeUTF8);
break;
case QMessageBox::Critical:
title = QApplication::translate("QDialog", "Error", 0, QApplication::UnicodeUTF8);
break;
}
}
box.setWindowTitle(title);
box.setText(text);
#ifdef Q_OS_MAC
if(QApplication::style()->objectName() != "macintosh (aqua)" || type == QMessageBox::Warning || type == QMessageBox::Critical)
#endif
box.setIcon(QMessageBox::Icon(type));
if(button == 2){
box.setStandardButtons(box.Ok | box.Cancel);
box.setDefaultButton(box.Ok);
}
//return box.exec();
int OK = box.exec();
if(OK == 1024) return 0; else return 1;
}
int main(int argc, char *argv[]){
const char *version = "1.3";
if(argc <= 1){
fprintf(stderr, "Missing argument, please see --help for usages.\n");
return 2;
}
if(argv[1] == QString("-h") || argv[1] == QString("--help")){
fprintf(stderr, "qdialog - display Qt dialog from shell scripts.\nVersion: %s\nCopyright 2007-2013 PC GO Ld.\n\n"
"Usage: \n"
" %s [<general options...>] <message box type> [--double-button]"
#ifndef Q_OS_MAC
" [--title <title>]"
#endif
" --text <text>\n"
" %s [<general options...>] --entry [--title <title>] [--text <text>] [--entry-text <text>]\n"
" %s [<general options...>] --file-selection [--multiple] [--title <title>] [--filename <filename>]\n"
" %s [<general options...>] --aboutqt\n"
" %s -h|--help\n\n"
"General options:\n -l|--language <QLocale name> Set the language\n --style <QStyle name> Set the GUI style\n --window-icon <path> Set the window icon\n\n"
"The message box type are:\n --info Display information dialog\n --warning Display warning dialog\n --error Display error dialog\n --question Display question dialog\n\n", version, argv[0], argv[0], argv[0], argv[0], argv[0]);
return -1;
}
if(argv[1] == QString("--style")){
QApplication::setStyle(argv[2]);
argv[2] = argv[0];
argc-=2;
argv+=2;
}else if(argv[3] == QString("--style")){
QApplication::setStyle(argv[4]);
argv[4] = argv[2];
argv[3] = argv[1];
argv[2] = argv[0];
argc-=2;
argv+=2;
}else if(argv[5] == QString("--style")){
QApplication::setStyle(argv[6]);
argv[6] = argv[4];
argv[5] = argv[3];
argv[4] = argv[2];
argv[3] = argv[1];
argv[2] = argv[0];
argc-=2;
argv+=2;
}
QApplication a(argc, argv);
QString Locale;
if(argv[1] == QString("--window-icon")){
a.setWindowIcon(QIcon(QString::fromUtf8(argv[2])));
argv[2] = argv[0];
argc-=2;
argv+=2;
}else if(argv[3] == QString("--window-icon")){
a.setWindowIcon(QIcon(QString::fromUtf8(argv[4])));
argv[4] = argv[2];
argv[3] = argv[1];
argv[2] = argv[0];
argc-=2;
argv+=2;
}
if(argv[1] == QString("-l") || argv[1] == QString("--language")){
Locale = argv[2];
argv[2] = argv[0];
argc-=2;
argv+=2;
}else Locale = QLocale::system().name();
QTranslator translator;
translator.load("qt_" + Locale + ".qm", QLibraryInfo::location(QLibraryInfo::TranslationsPath));
a.installTranslator(&translator);
if(argv[1] == QString("--aboutqt")){
a.aboutQt();
return -1;
}
int type;
char *title = NULL;
char *text;
if(argv[1] == QString("--question")) type = QMessageBox::Question;
else if(argv[1] == QString("--info")) type = QMessageBox::Information;
else if(argv[1] == QString("--warning")) type = QMessageBox::Warning;
else if(argv[1] == QString("--error")) type = QMessageBox::Critical;
else if(argv[1] == QString("--entry")) type = 5;
else if(argv[1] == QString("--file-selection")) type = 7;
else{
fprintf(stderr, "Not a legal dialog type, please see --help for usages.\n");
return 2;
}
if(type == 1 || type == 2 || type == 3 || type == 4){
int button = 1;
if(argv[2] == QString("--double-button")){
button = 2;
argv[2] = argv[1];
argv[1] = argv[0];
argc--;
argv++;
}else if(argv[4] == QString("--double-button")){
button = 2;
argv[4] = argv[3];
argv[3] = argv[2];
argv[2] = argv[1];
argv[1] = argv[0];
argc--;
argv++;
}else if(argv[6] == QString("--double-button")){
button = 2;
argv[6] = argv[5];
argv[5] = argv[4];
argv[4] = argv[3];
argv[3] = argv[2];
argv[2] = argv[1];
argv[1] = argv[0];
argc--;
argv++;
}
if(argc < 4){
fprintf(stderr, "Arguments Error\n");
return 2;
}
if(argv[2] == QString("--title")){
if(argc < 6){
fprintf(stderr, "Arguments Error\n");
return 2;
}
title = argv[3];
if(argv[4] == QString("--text")) text = argv[5]; else{
fprintf(stderr, "Arguments Error\n");
return 2;
}
}else if(argv[2] == QString("--text")){
text = argv[3];
if(argv[4] == QString("--title")) title = argv[5];
}else{
fprintf(stderr, "Unknown argument: %s", argv[2]);
return 2;
}
return MessageBox(QString::fromUtf8(title), QString::fromUtf8(text), type, button);
}
if(type == 5){
text = NULL;
char *etext = NULL;
if(argv[2] == QString("--title")){
if(argc < 4){
fprintf(stderr, "Arguments Error\n");
return 2;
}
title = argv[3];
if(argv[4] == QString("--text")){
text = argv[5];
if(argv[6] == QString("--entry-text")) etext = argv[7];
}else if(argv[4] == QString("--entry-text")){
etext = argv[5];
if(argv[6] == QString("--text")) text = argv[7];
}
}else if(argv[2] == QString("--text")){
if(argc < 4){
fprintf(stderr, "Arguments Error\n");
return 2;
}
text = argv[3];
if(argv[4] == QString("--title")){
title = argv[5];
if(argv[6] == QString("--entry-text")) etext = argv[7];
}else if(argv[4] == QString("--entry-text")){
etext = argv[5];
if(argv[6] == QString("--title")) title = argv[7];
}
}else if(argv[2] == QString("--entry-text")){
if(argc < 4){
fprintf(stderr, "Arguments Error\n");
return 2;
}
etext = argv[3];
if(argv[4] == QString("--title")){
title = argv[5];
if(argv[6] == QString("--text")) text = argv[7];
}else if(argv[4] == QString("--text")){
text = argv[5];
if(argv[6] == QString("--title")) title = argv[7];
}
}
return GetText(QString::fromUtf8(title), QString::fromUtf8(text), QString::fromUtf8(etext));
}
if(type == 7){
bool multiple = false;
char *filename = NULL;
if(argv[2] == QString("--multiple")){
multiple = true;
argv[2] = argv[1];
argv[1] = argv[0];
argc--;
argv++;
}else if(argv[4] == QString("--multiple")){
multiple = true;
argv[4] = argv[3];
argv[3] = argv[2];
argv[2] = argv[1];
argv[1] = argv[0];
argc--;
argv++;
}else if(argv[6] == QString("--multiple")){
multiple = true;
argv[6] = argv[5];
argv[5] = argv[4];
argv[4] = argv[3];
argv[3] = argv[2];
argv[2] = argv[1];
argv[1] = argv[0];
argc--;
argv++;
}
if(argv[2] == QString("--title")){
if(argc < 4){
fprintf(stderr, "Arguments Error\n");
return 2;
}
title = argv[3];
if(argv[4] == QString("--filename")) filename = argv[5];
}else if(argv[2] == QString("--filename")){
if(argc < 4){
fprintf(stderr, "Arguments Error\n");
return 2;
}
filename = argv[3];
if(argv[4] == QString("--title")) title = argv[5];
}
return GetFileName(QString::fromUtf8(title), QString::fromUtf8(filename), multiple);
}
}