diff --git a/toonz/sources/include/toonzqt/filefield.h b/toonz/sources/include/toonzqt/filefield.h index 944f2d1..a0beb74 100644 --- a/toonz/sources/include/toonzqt/filefield.h +++ b/toonz/sources/include/toonzqt/filefield.h @@ -69,7 +69,8 @@ public: virtual ~BrowserPopupController() {} virtual bool isExecute() { return true; }; virtual QString getPath() { return QString(); }; - virtual void openPopup(QStringList, bool, QString){}; + virtual void openPopup(QStringList, bool, QString, + const QWidget * = NULL){}; }; static BrowserPopupController *m_browserPopupController; diff --git a/toonz/sources/toonz/filebrowserpopup.cpp b/toonz/sources/toonz/filebrowserpopup.cpp index 11c40c6..23f56f1 100644 --- a/toonz/sources/toonz/filebrowserpopup.cpp +++ b/toonz/sources/toonz/filebrowserpopup.cpp @@ -2072,7 +2072,8 @@ BrowserPopupController::BrowserPopupController() : m_browserPopup() { void BrowserPopupController::openPopup(QStringList filters, bool isDirectoryOnly, - QString lastSelectedPath) { + QString lastSelectedPath, + const QWidget *parentWidget) { if (!m_browserPopup) m_browserPopup = new BrowserPopup(); m_browserPopup->setWindowTitle(QString("")); @@ -2084,6 +2085,19 @@ void BrowserPopupController::openPopup(QStringList filters, m_browserPopup->initFolder(TFilePath(lastSelectedPath.toStdWString())); m_browserPopup->setFileMode(isDirectoryOnly); + if (parentWidget) { + QWidget *pwidget = NULL; + foreach (pwidget, QApplication::topLevelWidgets()) { + if (pwidget->isWindow() && pwidget->isVisible() && + pwidget->isAncestorOf(parentWidget)) { + Qt::WindowFlags flags = m_browserPopup->windowFlags(); + m_browserPopup->setParent(pwidget); + m_browserPopup->setWindowFlags(flags); + break; + } + } + } + if (isDirectoryOnly) m_browserPopup->setFilename(TFilePath(lastSelectedPath.toStdWString())); diff --git a/toonz/sources/toonz/filebrowserpopup.h b/toonz/sources/toonz/filebrowserpopup.h index ae5ba8e..3113261 100644 --- a/toonz/sources/toonz/filebrowserpopup.h +++ b/toonz/sources/toonz/filebrowserpopup.h @@ -433,8 +433,11 @@ public: BrowserPopupController(); bool isExecute() override { return m_isExecute; } + // if parentWidget is non-zero, then check if the any modal dialog is ancestor + // of it. void openPopup(QStringList filters, bool isDirectoryOnly, - QString lastSelectedPath) override; + QString lastSelectedPath, + const QWidget *parentWidget = NULL) override; QString getPath() override; }; diff --git a/toonz/sources/toonz/penciltestpopup.cpp b/toonz/sources/toonz/penciltestpopup.cpp index 818e2cc..d83a900 100644 --- a/toonz/sources/toonz/penciltestpopup.cpp +++ b/toonz/sources/toonz/penciltestpopup.cpp @@ -81,6 +81,7 @@ TEnv::StringVar CamCapCameraResolution("CamCapCameraResolution", ""); // Whether to open save-in popup on launch TEnv::IntVar CamCapOpenSaveInPopupOnLaunch("CamCapOpenSaveInPopupOnLaunch", 0); // SaveInFolderPopup settings +TEnv::StringVar CamCapSaveInParentFolder("CamCapSaveInParentFolder", ""); TEnv::IntVar CamCapSaveInPopupSubFolder("CamCapSaveInPopupSubFolder", 0); TEnv::StringVar CamCapSaveInPopupProject("CamCapSaveInPopupProject", ""); TEnv::StringVar CamCapSaveInPopupEpisode("CamCapSaveInPopupEpisode", "1"); @@ -584,8 +585,14 @@ PencilTestSaveInFolderPopup::PencilTestSaveInFolderPopup(QWidget* parent) : Dialog(parent, true, false, "PencilTestSaveInFolder") { setWindowTitle("Create the Destination Subfolder to Save"); - m_parentFolderField = new FileField( - this, QString("+%1").arg(QString::fromStdString(TProject::Extras))); + QString parentFolder = QString::fromStdString(CamCapSaveInParentFolder); + if (parentFolder.isEmpty()) + parentFolder = QString("+%1").arg(QString::fromStdString(TProject::Extras)); + m_parentFolderField = new FileField(this, parentFolder); + + QPushButton* setAsDefaultBtn = new QPushButton(tr("Set As Default"), this); + setAsDefaultBtn->setToolTip( + tr("Set the current \"Save In\" path as the default.")); m_subFolderCB = new QCheckBox(tr("Create Subfolder"), this); @@ -638,6 +645,7 @@ PencilTestSaveInFolderPopup::PencilTestSaveInFolderPopup(QWidget* parent) << tr("Episode + Sequence + Scene") << tr("Project + Episode + Sequence + Scene"); m_subNameFormatCombo->addItems(items); + m_subNameFormatCombo->setCurrentIndex(CamCapSaveInPopupAutoSubName - 1); showPopupOnLaunchCB->setChecked(CamCapOpenSaveInPopupOnLaunch != 0); @@ -647,13 +655,18 @@ PencilTestSaveInFolderPopup::PencilTestSaveInFolderPopup(QWidget* parent) m_topLayout->setMargin(10); m_topLayout->setSpacing(10); { - QHBoxLayout* saveInLay = new QHBoxLayout(); + QGridLayout* saveInLay = new QGridLayout(); saveInLay->setMargin(0); - saveInLay->setSpacing(3); + saveInLay->setHorizontalSpacing(3); + saveInLay->setVerticalSpacing(0); { - saveInLay->addWidget(new QLabel(tr("Save In:"), this), 0); - saveInLay->addWidget(m_parentFolderField, 1); + saveInLay->addWidget(new QLabel(tr("Save In:"), this), 0, 0, + Qt::AlignRight | Qt::AlignVCenter); + saveInLay->addWidget(m_parentFolderField, 0, 1); + saveInLay->addWidget(setAsDefaultBtn, 1, 1); } + saveInLay->setColumnStretch(0, 0); + saveInLay->setColumnStretch(1, 1); m_topLayout->addLayout(saveInLay); m_topLayout->addWidget(m_subFolderCB, 0, Qt::AlignLeft); @@ -725,9 +738,13 @@ PencilTestSaveInFolderPopup::PencilTestSaveInFolderPopup(QWidget* parent) SLOT(updateSubFolderName())); ret = ret && connect(m_autoSubNameCB, SIGNAL(clicked(bool)), this, SLOT(onAutoSubNameCBClicked(bool))); + ret = ret && connect(m_subNameFormatCombo, SIGNAL(currentIndexChanged(int)), + this, SLOT(updateSubFolderName())); ret = ret && connect(showPopupOnLaunchCB, SIGNAL(clicked(bool)), this, SLOT(onShowPopupOnLaunchCBClicked(bool))); + ret = ret && connect(setAsDefaultBtn, SIGNAL(pressed()), this, + SLOT(onSetAsDefaultBtnPressed())); ret = ret && connect(okBtn, SIGNAL(clicked(bool)), this, SLOT(onOkPressed())); ret = ret && connect(cancelBtn, SIGNAL(clicked(bool)), this, SLOT(reject())); @@ -746,6 +763,12 @@ QString PencilTestSaveInFolderPopup::getPath() { } //----------------------------------------------------------------------------- + +QString PencilTestSaveInFolderPopup::getParentPath() { + return m_parentFolderField->getPath(); +} + +//----------------------------------------------------------------------------- namespace { QString formatString(QString inStr, int charNum) { if (inStr.isEmpty()) return QString("0").rightJustified(charNum, '0'); @@ -813,6 +836,12 @@ void PencilTestSaveInFolderPopup::onShowPopupOnLaunchCBClicked(bool on) { //----------------------------------------------------------------------------- +void PencilTestSaveInFolderPopup::onSetAsDefaultBtnPressed() { + CamCapSaveInParentFolder = m_parentFolderField->getPath().toStdString(); +} + +//----------------------------------------------------------------------------- + void PencilTestSaveInFolderPopup::onOkPressed() { if (!m_subFolderCB->isChecked()) { accept(); @@ -850,7 +879,9 @@ void PencilTestSaveInFolderPopup::onOkPressed() { CamCapSaveInPopupEpisode = m_episodeField->text().toStdString(); CamCapSaveInPopupSequence = m_sequenceField->text().toStdString(); CamCapSaveInPopupScene = m_sceneField->text().toStdString(); - CamCapSaveInPopupAutoSubName = (m_autoSubNameCB->isChecked()) ? 1 : 0; + CamCapSaveInPopupAutoSubName = (!m_autoSubNameCB->isChecked()) + ? 0 + : m_subNameFormatCombo->currentIndex() + 1; // create folder try { @@ -886,6 +917,8 @@ PencilTestPopup::PencilTestPopup() TFilePath(L"penciltest" + dateTime + L".jpg"); m_cacheImagePath = cacheImageFp.getQString(); + m_saveInFolderPopup = new PencilTestSaveInFolderPopup(this); + m_cameraViewfinder = new MyViewFinder(this); // CameraViewfinderContainer* cvfContainer = new // CameraViewfinderContainer(m_cameraViewfinder, this); @@ -904,8 +937,9 @@ PencilTestPopup::PencilTestPopup() m_frameNumberEdit = new FrameNumberLineEdit(this, startFrame); m_fileTypeCombo = new QComboBox(this); m_fileFormatOptionButton = new QPushButton(tr("Options"), this); - m_saveInFileFld = new FileField( - 0, QString("+%1").arg(QString::fromStdString(TProject::Extras))); + + m_saveInFileFld = new FileField(this, m_saveInFolderPopup->getParentPath()); + QToolButton* nextLevelButton = new QToolButton(this); m_saveOnCaptureCB = new QCheckBox(tr("Save images as they are captured"), this); @@ -943,8 +977,6 @@ PencilTestPopup::PencilTestPopup() QPushButton* subfolderButton = new QPushButton(tr("Subfolder"), this); - m_saveInFolderPopup = new PencilTestSaveInFolderPopup(this); - //---- m_resolutionCombo->setMaximumWidth(fontMetrics().width("0000 x 0000") + 25); diff --git a/toonz/sources/toonz/penciltestpopup.h b/toonz/sources/toonz/penciltestpopup.h index 6697fc8..00aa53f 100644 --- a/toonz/sources/toonz/penciltestpopup.h +++ b/toonz/sources/toonz/penciltestpopup.h @@ -138,11 +138,13 @@ class PencilTestSaveInFolderPopup : public DVGui::Dialog { public: PencilTestSaveInFolderPopup(QWidget* parent = 0); QString getPath(); + QString getParentPath(); protected slots: void updateSubFolderName(); void onAutoSubNameCBClicked(bool); void onShowPopupOnLaunchCBClicked(bool); + void onSetAsDefaultBtnPressed(); void onOkPressed(); }; diff --git a/toonz/sources/toonzqt/filefield.cpp b/toonz/sources/toonzqt/filefield.cpp index 1832f08..848ffdb 100644 --- a/toonz/sources/toonzqt/filefield.cpp +++ b/toonz/sources/toonzqt/filefield.cpp @@ -94,7 +94,8 @@ void FileField::browseDirectory() { if (!m_browserPopupController) return; m_browserPopupController->openPopup( m_filters, (m_fileMode == QFileDialog::DirectoryOnly), - (m_lastSelectedPath == m_descriptionText) ? "" : m_lastSelectedPath); + (m_lastSelectedPath == m_descriptionText) ? "" : m_lastSelectedPath, + this); if (m_browserPopupController->isExecute()) directory = m_browserPopupController->getPath();