| /* |
| 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); |
| } |
| } |