|
1 | 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
2 | 2 |
|
| 3 | +#include <QTemporaryFile> |
| 4 | + |
3 | 5 | #include "appmenubar.h" |
4 | 6 | #include "uicomponents/menubarmodel.h" |
5 | 7 | #include "uicomponents/menumodel.h" |
6 | 8 | #include "uicomponents/menuitemmodel.h" |
| 9 | +#include "uicomponents/filedialog.h" |
7 | 10 |
|
8 | 11 | using namespace scratchcpp; |
9 | 12 | using namespace scratchcpp::uicomponents; |
10 | 13 |
|
11 | 14 | AppMenuBar::AppMenuBar(QObject *parent) : |
12 | 15 | QObject(parent), |
13 | | - m_model(new MenuBarModel(this)) |
| 16 | + m_model(new MenuBarModel(this)), |
| 17 | + m_openFileDialog(new FileDialog(this)) |
14 | 18 | { |
| 19 | + m_openFileDialog->setShowAllFiles(false); |
| 20 | + m_openFileDialog->setNameFilters({ tr("Scratch 3 projects (%1)").arg("*.sb3") }); |
| 21 | + |
| 22 | + // File menu |
| 23 | + m_fileMenu = new MenuModel(m_model); |
| 24 | + m_fileMenu->setTitle(tr("File")); |
| 25 | + m_model->addMenu(m_fileMenu); |
| 26 | + |
| 27 | + // File -> Open |
| 28 | + m_openFileItem = new MenuItemModel(m_fileMenu); |
| 29 | + m_openFileItem->setText(tr("Open...")); |
| 30 | + m_fileMenu->addItem(m_openFileItem); |
| 31 | + |
| 32 | + connect(m_openFileItem, &MenuItemModel::clicked, this, &AppMenuBar::openFile); |
| 33 | +#ifdef Q_OS_WASM |
| 34 | + connect(m_openFileDialog, &FileDialog::fileContentReady, this, &AppMenuBar::loadOpenedFile); |
| 35 | +#endif |
15 | 36 | } |
16 | 37 |
|
17 | 38 | MenuBarModel *AppMenuBar::model() const |
18 | 39 | { |
19 | 40 | return m_model; |
20 | 41 | } |
| 42 | + |
| 43 | +void AppMenuBar::openFile() |
| 44 | +{ |
| 45 | +#ifdef Q_OS_WASM |
| 46 | + m_openFileDialog->getOpenFileContent(); |
| 47 | +#else |
| 48 | + QString fileName = m_openFileDialog->getOpenFileName(); |
| 49 | + |
| 50 | + if (!fileName.isEmpty()) |
| 51 | + emit fileOpened(fileName); |
| 52 | +#endif |
| 53 | +} |
| 54 | + |
| 55 | +#ifdef Q_OS_WASM |
| 56 | +void AppMenuBar::loadOpenedFile(const QByteArray &content) |
| 57 | +{ |
| 58 | + if (m_tmpFile) |
| 59 | + m_tmpFile->deleteLater(); |
| 60 | + |
| 61 | + m_tmpFile = new QTemporaryFile(this); |
| 62 | + |
| 63 | + if (m_tmpFile->open()) { |
| 64 | + m_tmpFile->write(content); |
| 65 | + m_tmpFile->close(); |
| 66 | + emit fileOpened(m_tmpFile->fileName()); |
| 67 | + } else |
| 68 | + qWarning("Failed to create temporary file."); |
| 69 | +} |
| 70 | +#endif |
0 commit comments