Browse Source

added widgets file dialog

pull/2/head
Skycoder42 7 years ago
parent
commit
5962848ca8
  1. 8
      examples/mvvmcore/SampleCore/sampleviewmodel.cpp
  2. 1
      examples/mvvmcore/SampleCore/sampleviewmodel.h
  3. 2
      examples/mvvmwidgets/SampleWidgets/sampleview.cpp
  4. 6
      examples/mvvmwidgets/SampleWidgets/sampleview.ui
  5. 62
      src/mvvmwidgets/widgetspresenter.cpp

8
examples/mvvmcore/SampleCore/sampleviewmodel.cpp

@ -74,6 +74,14 @@ void SampleViewModel::getInput()
}, 42);
}
void SampleViewModel::getFiles()
{
QtMvvm::getOpenFiles(this, [this](QList<QUrl> urls) {
for(auto url : urls)
addEvent(url.toString());
});
}
void SampleViewModel::getResult()
{
showForResult<ResultViewModel>(ResCode, {

1
examples/mvvmcore/SampleCore/sampleviewmodel.h

@ -33,6 +33,7 @@ public Q_SLOTS:
void setActive(bool active);
void getInput();
void getFiles();
void getResult();
void clearEvents();
void about();

2
examples/mvvmwidgets/SampleWidgets/sampleview.cpp

@ -26,6 +26,8 @@ SampleView::SampleView(QtMvvm::ViewModel *viewModel, QWidget *parent) :
_viewModel, &SampleViewModel::about);
connect(ui->actionUseless_Input, &QAction::triggered,
_viewModel, &SampleViewModel::getInput);
connect(ui->actionAdd_Files, &QAction::triggered,
_viewModel, &SampleViewModel::getFiles);
}
SampleView::~SampleView()

6
examples/mvvmwidgets/SampleWidgets/sampleview.ui

@ -107,6 +107,7 @@
<string>&amp;Actions</string>
</property>
<addaction name="actionUseless_Input"/>
<addaction name="actionAdd_Files"/>
</widget>
<addaction name="menu_Actions"/>
<addaction name="menu_Help"/>
@ -122,6 +123,11 @@
<string>Another &amp;Input</string>
</property>
</action>
<action name="actionAdd_Files">
<property name="text">
<string>Add &amp;Files</string>
</property>
</action>
</widget>
<resources/>
<connections/>

62
src/mvvmwidgets/widgetspresenter.cpp

@ -14,6 +14,7 @@
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QFileDialog>
#include <QtMvvmCore/private/coreapp_p.h>
#include <QtMvvmCore/private/qtmvvm_logging_p.h>
@ -250,12 +251,13 @@ void WidgetsPresenter::presentMessageBox(const MessageConfig &config, QPointer<M
//create and show the msgbox
auto msgBox = DialogMaster::createMessageBox(info);
connect(msgBox, &QMessageBox::finished,
result, [qtHelp, checked, result](int resCode){
result, [msgBox, qtHelp, checked, result](){
int sBtn = msgBox->standardButton(msgBox->clickedButton());
if(result) {
if(checked)
result->setResult(*checked);
result->complete(static_cast<MessageConfig::StandardButton>(resCode));
if(qtHelp && resCode == QMessageBox::Help)
result->complete(static_cast<MessageConfig::StandardButton>(sBtn));
if(qtHelp && sBtn == QMessageBox::Help)
QApplication::aboutQt();
}
});
@ -325,7 +327,61 @@ void WidgetsPresenter::presentInputDialog(const MessageConfig &config, QPointer<
void WidgetsPresenter::presentFileDialog(const MessageConfig &config, QPointer<MessageResult> result)
{
auto props = config.viewProperties();
QWidget *parent = nullptr;
if(!props.value(QStringLiteral("modal"), false).toBool())
parent = QApplication::activeWindow();
auto dialog = new QFileDialog(parent);
//prepare the dialog
auto title = config.title();
if(!title.isNull())
dialog->setWindowTitle(title);
auto dirUrl = config.defaultValue().toUrl();
if(dirUrl.isValid())
dialog->setDirectoryUrl(dirUrl);
//set the file mode
auto isMultiFile = false;
if(config.subType() == MessageConfig::SubTypeDir) {
dialog->setAcceptMode(QFileDialog::AcceptOpen);
dialog->setFileMode(QFileDialog::Directory);
} else if(config.subType() == MessageConfig::SubTypeOpenFile) {
dialog->setAcceptMode(QFileDialog::AcceptOpen);
dialog->setFileMode(QFileDialog::ExistingFile);
} else if(config.subType() == MessageConfig::SubTypeOpenFiles) {
isMultiFile = true;
dialog->setAcceptMode(QFileDialog::AcceptOpen);
dialog->setFileMode(QFileDialog::ExistingFiles);
} else if(config.subType() == MessageConfig::SubTypeSaveFile) {
dialog->setAcceptMode(QFileDialog::AcceptSave);
dialog->setFileMode(QFileDialog::AnyFile);
}
//set extra props
for(auto it = props.constBegin(); it != props.constEnd(); it++)
dialog->setProperty(qUtf8Printable(it.key()), it.value());
//connect stuff
QObject::connect(dialog, &QDialog::finished,
dialog, [dialog, isMultiFile, result](int resCode){
if(result) {
if(isMultiFile)
result->setResult(QVariant::fromValue(dialog->selectedUrls()));
else
result->setResult(dialog->selectedUrls().first());
if(resCode == QDialog::Accepted)
result->complete(MessageConfig::Ok);
else
result->complete(MessageConfig::Cancel);
}
});
//finalize and show
dialog->adjustSize();
DialogMaster::masterDialog(dialog);
dialog->open();
}
void WidgetsPresenter::presentOtherDialog(const MessageConfig &config, QPointer<MessageResult> result)

Loading…
Cancel
Save