Merge pull request #1245 from shun-iwasawa/fix_filebrowser_hierarchy
Fix of the file browser and popups hierarchy
This commit is contained in:
commit
5af8251baa
6 changed files with 59 additions and 35 deletions
|
@ -61,6 +61,7 @@
|
||||||
#include <QGroupBox>
|
#include <QGroupBox>
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
//***********************************************************************************
|
//***********************************************************************************
|
||||||
// FileBrowserPopup implementation
|
// FileBrowserPopup implementation
|
||||||
|
@ -371,11 +372,32 @@ void FileBrowserPopup::showEvent(QShowEvent *) {
|
||||||
m_nameField->setFocus();
|
m_nameField->setFocus();
|
||||||
}
|
}
|
||||||
resize(m_dialogSize);
|
resize(m_dialogSize);
|
||||||
|
}
|
||||||
|
|
||||||
// Set ALL the file browsers non-modal (even if opened with exec())
|
//-----------------------------------------------------------------------------
|
||||||
// in order to handle the info viewer and the flipbook which are opened
|
// utility function. Make the widget to be a child of modal file browser in
|
||||||
// with "Info..." and "View..." commands respectively.
|
// order to allow control.
|
||||||
setWindowModality(Qt::NonModal);
|
|
||||||
|
void FileBrowserPopup::setModalBrowserToParent(QWidget *widget) {
|
||||||
|
if (!widget) return;
|
||||||
|
QWidget *pwidget = NULL;
|
||||||
|
foreach (pwidget, QApplication::topLevelWidgets()) {
|
||||||
|
if ((pwidget->isWindow()) && (pwidget->isModal()) &&
|
||||||
|
(pwidget->isVisible())) {
|
||||||
|
FileBrowserPopup *popup = qobject_cast<FileBrowserPopup *>(pwidget);
|
||||||
|
if (popup) {
|
||||||
|
// According to the description of QDialog;
|
||||||
|
// "setParent() function will clear the window flags specifying the
|
||||||
|
// window-system properties for the widget (in particular it will reset
|
||||||
|
// the Qt::Dialog flag)."
|
||||||
|
// So keep the window flags and set back after calling setParent().
|
||||||
|
Qt::WindowFlags flags = widget->windowFlags();
|
||||||
|
widget->setParent(pwidget);
|
||||||
|
widget->setWindowFlags(flags);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//***********************************************************************************
|
//***********************************************************************************
|
||||||
|
@ -399,14 +421,6 @@ bool GenericLoadFilePopup::execute() {
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
TFilePath GenericLoadFilePopup::getPath() {
|
TFilePath GenericLoadFilePopup::getPath() {
|
||||||
// In case that this function is called twice before closing the popup.
|
|
||||||
// Note that the file browser popup will be always non-modal even if opened
|
|
||||||
// with exec().
|
|
||||||
// see FileBrowserPopup::showEvent()
|
|
||||||
if (isVisible()) {
|
|
||||||
activateWindow();
|
|
||||||
return TFilePath();
|
|
||||||
}
|
|
||||||
return (exec() == QDialog::Rejected) ? TFilePath() : *m_selectedPaths.begin();
|
return (exec() == QDialog::Rejected) ? TFilePath() : *m_selectedPaths.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -458,14 +472,6 @@ bool GenericSaveFilePopup::execute() {
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
TFilePath GenericSaveFilePopup::getPath() {
|
TFilePath GenericSaveFilePopup::getPath() {
|
||||||
// In case that this function is called twice before closing the popup.
|
|
||||||
// Note that the file browser popup will be always non-modal even if opened
|
|
||||||
// with exec().
|
|
||||||
// see FileBrowserPopup::showEvent()
|
|
||||||
if (isVisible()) {
|
|
||||||
activateWindow();
|
|
||||||
return TFilePath();
|
|
||||||
}
|
|
||||||
return (exec() == QDialog::Rejected) ? TFilePath() : *m_selectedPaths.begin();
|
return (exec() == QDialog::Rejected) ? TFilePath() : *m_selectedPaths.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,10 @@ protected slots:
|
||||||
virtual void onFilePathsSelected(
|
virtual void onFilePathsSelected(
|
||||||
const std::set<TFilePath> &paths,
|
const std::set<TFilePath> &paths,
|
||||||
const std::list<std::vector<TFrameId>> &fIds);
|
const std::list<std::vector<TFrameId>> &fIds);
|
||||||
|
|
||||||
|
// utility function
|
||||||
|
public:
|
||||||
|
static void setModalBrowserToParent(QWidget *widget);
|
||||||
};
|
};
|
||||||
|
|
||||||
//********************************************************************************
|
//********************************************************************************
|
||||||
|
|
|
@ -183,7 +183,6 @@ public:
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -354,6 +353,7 @@ void FileSelection::viewFileInfo() {
|
||||||
infoViewer = new InfoViewer();
|
infoViewer = new InfoViewer();
|
||||||
m_infoViewers.append(infoViewer);
|
m_infoViewers.append(infoViewer);
|
||||||
}
|
}
|
||||||
|
FileBrowserPopup::setModalBrowserToParent(infoViewer);
|
||||||
infoViewer->setItem(0, 0, files[j]);
|
infoViewer->setItem(0, 0, files[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -371,8 +371,12 @@ void FileSelection::viewFile() {
|
||||||
(files[i].getType() == "mov" || files[i].getType() == "avi" ||
|
(files[i].getType() == "mov" || files[i].getType() == "avi" ||
|
||||||
files[i].getType() == "3gp"))
|
files[i].getType() == "3gp"))
|
||||||
QDesktopServices::openUrl(QUrl("file:///" + toQString(files[i])));
|
QDesktopServices::openUrl(QUrl("file:///" + toQString(files[i])));
|
||||||
else
|
else {
|
||||||
::viewFile(files[i]);
|
FlipBook *fb = ::viewFile(files[i]);
|
||||||
|
if (fb) {
|
||||||
|
FileBrowserPopup::setModalBrowserToParent(fb->parentWidget());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2177,9 +2177,10 @@ void FlipBook::loadAndCacheAllTlvImages(Level level, int fromFrame,
|
||||||
//! some additional random access information may be retrieved (i.e. images may
|
//! some additional random access information may be retrieved (i.e. images may
|
||||||
//! map
|
//! map
|
||||||
//! to specific frames).
|
//! to specific frames).
|
||||||
void viewFile(const TFilePath &path, int from, int to, int step, int shrink,
|
// returns pointer to the opened flipbook to control modality.
|
||||||
TSoundTrack *snd, FlipBook *flipbook, bool append,
|
FlipBook *viewFile(const TFilePath &path, int from, int to, int step,
|
||||||
bool isToonzOutput) {
|
int shrink, TSoundTrack *snd, FlipBook *flipbook,
|
||||||
|
bool append, bool isToonzOutput) {
|
||||||
// In case the step and shrink informations are invalid, load them from
|
// In case the step and shrink informations are invalid, load them from
|
||||||
// preferences
|
// preferences
|
||||||
if (step == -1 || shrink == -1) {
|
if (step == -1 || shrink == -1) {
|
||||||
|
@ -2195,11 +2196,11 @@ void viewFile(const TFilePath &path, int from, int to, int step, int shrink,
|
||||||
path.isLevelName()) {
|
path.isLevelName()) {
|
||||||
DVGui::warning(QObject::tr("%1 has an invalid extension format.")
|
DVGui::warning(QObject::tr("%1 has an invalid extension format.")
|
||||||
.arg(QString::fromStdString(path.getLevelName())));
|
.arg(QString::fromStdString(path.getLevelName())));
|
||||||
return;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Windows Screen Saver - avoid
|
// Windows Screen Saver - avoid
|
||||||
if (path.getType() == "scr") return;
|
if (path.getType() == "scr") return NULL;
|
||||||
|
|
||||||
// Avi and movs may be viewed by an external viewer, depending on preferences
|
// Avi and movs may be viewed by an external viewer, depending on preferences
|
||||||
if (path.getType() == "mov" || path.getType() == "avi" && !flipbook) {
|
if (path.getType() == "mov" || path.getType() == "avi" && !flipbook) {
|
||||||
|
@ -2207,7 +2208,7 @@ void viewFile(const TFilePath &path, int from, int to, int step, int shrink,
|
||||||
QSettings().value("generatedMovieViewEnabled", str);
|
QSettings().value("generatedMovieViewEnabled", str);
|
||||||
if (str.toInt() != 0) {
|
if (str.toInt() != 0) {
|
||||||
TSystem::showDocument(path);
|
TSystem::showDocument(path);
|
||||||
return;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2220,6 +2221,7 @@ void viewFile(const TFilePath &path, int from, int to, int step, int shrink,
|
||||||
// Assign the passed level with associated infos
|
// Assign the passed level with associated infos
|
||||||
flipbook->setLevel(path, 0, from, to, step, shrink, snd, append,
|
flipbook->setLevel(path, 0, from, to, step, shrink, snd, append,
|
||||||
isToonzOutput);
|
isToonzOutput);
|
||||||
|
return flipbook;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
|
@ -298,9 +298,11 @@ public slots:
|
||||||
};
|
};
|
||||||
|
|
||||||
// utility
|
// utility
|
||||||
|
// returns pointer to the opened flipbook to control modality.
|
||||||
|
|
||||||
void viewFile(const TFilePath &fp, int from = -1, int to = -1, int step = -1,
|
FlipBook *viewFile(const TFilePath &fp, int from = -1, int to = -1,
|
||||||
int shrink = -1, TSoundTrack *snd = 0, FlipBook *flipbook = 0,
|
int step = -1, int shrink = -1, TSoundTrack *snd = 0,
|
||||||
bool append = false, bool isToonzOutput = false);
|
FlipBook *flipbook = 0, bool append = false,
|
||||||
|
bool isToonzOutput = false);
|
||||||
|
|
||||||
#endif // FLIPBOOK_H
|
#endif // FLIPBOOK_H
|
||||||
|
|
|
@ -1193,10 +1193,16 @@ public:
|
||||||
for (i = 0; i < simpleLevels.size(); i++) {
|
for (i = 0; i < simpleLevels.size(); i++) {
|
||||||
TFilePath path = simpleLevels[i]->getPath();
|
TFilePath path = simpleLevels[i]->getPath();
|
||||||
path = simpleLevels[i]->getScene()->decodeFilePath(path);
|
path = simpleLevels[i]->getScene()->decodeFilePath(path);
|
||||||
|
FlipBook *fb;
|
||||||
if (TSystem::doesExistFileOrLevel(path))
|
if (TSystem::doesExistFileOrLevel(path))
|
||||||
::viewFile(path);
|
fb = ::viewFile(path);
|
||||||
else
|
else {
|
||||||
FlipBookPool::instance()->pop()->setLevel(simpleLevels[i]);
|
fb = FlipBookPool::instance()->pop();
|
||||||
|
fb->setLevel(simpleLevels[i]);
|
||||||
|
}
|
||||||
|
if (fb) {
|
||||||
|
FileBrowserPopup::setModalBrowserToParent(fb->parentWidget());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue