A simple Qt based browser with no bullshit that supports PKCS#11 tokens (such as the SuisseID).
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

/*! @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