You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
4.8 KiB
209 lines
4.8 KiB
/*! @file |
|
|
|
@id $Id$ |
|
*/ |
|
// 1 2 3 4 5 6 7 8 |
|
// 45678901234567890123456789012345678901234567890123456789012345678901234567890 |
|
|
|
#ifndef __SAVEORRUN_HXX__ |
|
#define __SAVEORRUN_HXX__ |
|
|
|
#include <ui_saveorrun.h> |
|
|
|
#include <QtCore/QUrl> |
|
#include <QtGui/QDialog> |
|
#include <QtGui/QFileDialog> |
|
#include <QtGui/QFileSystemModel> |
|
#include <QtGui/QMessageBox> |
|
#include <memory> |
|
|
|
#include <cassert> |
|
#include <QtCore/QDebug> |
|
#ifndef LOG |
|
#define LOG qDebug()<<__PRETTY_FUNCTION__ |
|
#endif |
|
|
|
class SaveOrRun: public QWidget, public Ui::SaveOrRun { |
|
Q_OBJECT; |
|
|
|
Q_SIGNALS: |
|
|
|
void save(); |
|
void run(); |
|
|
|
public: |
|
|
|
SaveOrRun(QWidget* p=0): QWidget(p) { |
|
LOG; |
|
setupUi(this); |
|
_filename->setText(savePath()+QDir::separator()); |
|
_program->setText(QCoreApplication::applicationDirPath() |
|
+QDir::separator()); |
|
} |
|
|
|
void setup(QString obj, QString type, QString src) { |
|
LOG; |
|
_object->setText(obj); |
|
_type->setText(type); |
|
_source->setText(src); |
|
_filename->setText(savePath()+QDir::separator()+obj); |
|
} |
|
|
|
QString filename() { |
|
LOG; |
|
return _filename->text(); |
|
} |
|
|
|
QString program() { |
|
LOG; |
|
return _program->text(); |
|
} |
|
|
|
protected Q_SLOTS: |
|
|
|
void on__saveFileAs_clicked(bool=true) { |
|
LOG; |
|
if ((QFileInfo(filename()).exists() |
|
&& QMessageBox::question(this, tr("File Exists"), |
|
tr("File already exists:\n\n" |
|
"%1\n\n" |
|
"Overwrite?").arg(filename()), |
|
QMessageBox::Yes|QMessageBox::No) |
|
== QMessageBox::No) |
|
|| filename().size()==0) |
|
return; // reject |
|
save(); |
|
} |
|
|
|
void on__openFileIn_clicked(bool=true) { |
|
LOG; |
|
if ((!QFile::exists(program()) |
|
|| !QFileInfo(program()).isExecutable() |
|
|| QFileInfo(program()).isDir()) |
|
|| program().size()==0) |
|
return; // reject |
|
run(); |
|
} |
|
|
|
void on__browseSaveAs_clicked(bool) { |
|
LOG; |
|
QString saveFile |
|
(QFileDialog::getSaveFileName(this, tr("Save File As ..."), |
|
_filename->text(), QString(), 0, |
|
QFileDialog::DontConfirmOverwrite)); |
|
if (!saveFile.size()) return; |
|
if (QFileInfo(saveFile).isDir()) |
|
saveFile += QDir::separator()+_object->text(); |
|
_filename->setText(saveFile); |
|
on__saveFileAs_clicked(); |
|
} |
|
|
|
void on__browseOpenWith_clicked(bool) { |
|
LOG; |
|
QString openFile |
|
(QFileDialog::getOpenFileName(this, tr("Open File With ..."), |
|
_program->text())); |
|
if (!openFile.size()) return; |
|
_program->setText(openFile); |
|
on__openFileIn_clicked(); |
|
} |
|
|
|
protected: |
|
|
|
QString savePath() { |
|
LOG; |
|
QString path(QDir::homePath()); |
|
QStringList defpaths; |
|
defpaths<<"downloads"<<"Downloads"<<"Documents" |
|
<<tr("Dokumente", "Documents folder in local language") |
|
<<"Desktop" |
|
<<tr("Arbeitsfläche", "Desktop folder in local language"); |
|
for (QStringList::iterator it(defpaths.begin()); it!=defpaths.end(); ++it) |
|
if (QFile::exists(QDir::homePath()+QDir::separator()+*it)) { |
|
path = QDir::homePath()+QDir::separator()+*it; |
|
break; |
|
} |
|
return path; |
|
} |
|
|
|
private: |
|
friend class SaveOrRunDialog; |
|
}; |
|
|
|
class SaveOrRunPlugin: public SaveOrRun { |
|
Q_OBJECT; |
|
|
|
public: |
|
|
|
SaveOrRunPlugin(const QUrl& url, const QString& mime, |
|
bool kiosk=false, QWidget* p=0): |
|
SaveOrRun(p) { |
|
LOG; |
|
setAutoFillBackground(true); |
|
_type->setText(mime); |
|
_source->setText(url.host()); |
|
} |
|
|
|
}; |
|
|
|
class SaveOrRunDialog: public QDialog { |
|
Q_OBJECT; |
|
|
|
public: |
|
|
|
SaveOrRunDialog(bool kiosk=false, QWidget* p=0): |
|
QDialog(p), _action(UNDEFINED), _sor(new SaveOrRun) { |
|
LOG; |
|
QVBoxLayout* l(new QVBoxLayout(this)); |
|
l->addWidget(_sor); |
|
assert(connect(_sor, SIGNAL(save()), SLOT(doSave()))); |
|
assert(connect(_sor, SIGNAL(run()), SLOT(doRun()))); |
|
assert(connect(_sor->_buttons, SIGNAL(rejected()), SLOT(reject()))); |
|
} |
|
|
|
void setup(QString obj, QString type, QString src) { |
|
_sor->setup(obj, type, src); |
|
} |
|
|
|
bool save() { |
|
LOG; |
|
return _action==SAVE; |
|
} |
|
|
|
bool run() { |
|
LOG; |
|
return _action==RUN; |
|
} |
|
|
|
SaveOrRun* sor() { |
|
LOG; |
|
return _sor; |
|
} |
|
|
|
public Q_SLOTS: |
|
|
|
void doSave() { |
|
LOG; |
|
_action = SAVE; |
|
accept(); |
|
} |
|
|
|
void doRun() { |
|
LOG; |
|
_action = RUN; |
|
accept(); |
|
} |
|
|
|
protected: |
|
|
|
enum Action { |
|
SAVE, |
|
RUN, |
|
UNDEFINED |
|
} _action; |
|
|
|
SaveOrRun* _sor; |
|
|
|
}; |
|
|
|
#endif
|
|
|