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); }, 42);
} }
void SampleViewModel::getFiles()
{
QtMvvm::getOpenFiles(this, [this](QList<QUrl> urls) {
for(auto url : urls)
addEvent(url.toString());
});
}
void SampleViewModel::getResult() void SampleViewModel::getResult()
{ {
showForResult<ResultViewModel>(ResCode, { showForResult<ResultViewModel>(ResCode, {

1
examples/mvvmcore/SampleCore/sampleviewmodel.h

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

2
examples/mvvmwidgets/SampleWidgets/sampleview.cpp

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

6
examples/mvvmwidgets/SampleWidgets/sampleview.ui

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

62
src/mvvmwidgets/widgetspresenter.cpp

@ -14,6 +14,7 @@
#include <QtWidgets/QVBoxLayout> #include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QDialogButtonBox> #include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QPushButton> #include <QtWidgets/QPushButton>
#include <QtWidgets/QFileDialog>
#include <QtMvvmCore/private/coreapp_p.h> #include <QtMvvmCore/private/coreapp_p.h>
#include <QtMvvmCore/private/qtmvvm_logging_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 //create and show the msgbox
auto msgBox = DialogMaster::createMessageBox(info); auto msgBox = DialogMaster::createMessageBox(info);
connect(msgBox, &QMessageBox::finished, connect(msgBox, &QMessageBox::finished,
result, [qtHelp, checked, result](int resCode){ result, [msgBox, qtHelp, checked, result](){
int sBtn = msgBox->standardButton(msgBox->clickedButton());
if(result) { if(result) {
if(checked) if(checked)
result->setResult(*checked); result->setResult(*checked);
result->complete(static_cast<MessageConfig::StandardButton>(resCode)); result->complete(static_cast<MessageConfig::StandardButton>(sBtn));
if(qtHelp && resCode == QMessageBox::Help) if(qtHelp && sBtn == QMessageBox::Help)
QApplication::aboutQt(); QApplication::aboutQt();
} }
}); });
@ -325,7 +327,61 @@ void WidgetsPresenter::presentInputDialog(const MessageConfig &config, QPointer<
void WidgetsPresenter::presentFileDialog(const MessageConfig &config, QPointer<MessageResult> result) 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) void WidgetsPresenter::presentOtherDialog(const MessageConfig &config, QPointer<MessageResult> result)

Loading…
Cancel
Save