2018-11-22 06:36:27 -05:00
|
|
|
#pragma once
|
2018-11-19 15:57:54 -05:00
|
|
|
|
2022-03-13 16:18:35 -04:00
|
|
|
#include <unordered_set>
|
|
|
|
|
2018-11-19 15:57:54 -05:00
|
|
|
#include <QMainWindow>
|
|
|
|
|
2018-12-01 10:41:14 -05:00
|
|
|
#include "uisocket.h"
|
|
|
|
#include "data/project.h"
|
2018-11-22 06:36:27 -05:00
|
|
|
#include "ui/patterneditormodel.h"
|
|
|
|
|
2018-12-06 14:27:22 -05:00
|
|
|
class QUndoStack;
|
|
|
|
|
2018-11-19 15:57:54 -05:00
|
|
|
namespace Ui {
|
2018-11-22 06:36:27 -05:00
|
|
|
class MainWindow;
|
2018-11-19 15:57:54 -05:00
|
|
|
}
|
|
|
|
|
2018-11-28 05:19:10 -05:00
|
|
|
namespace Xybrid {
|
2019-06-21 17:50:42 -04:00
|
|
|
namespace Data { class Node; }
|
2018-11-28 05:19:10 -05:00
|
|
|
class MainWindow : public QMainWindow {
|
2018-12-25 01:54:23 -05:00
|
|
|
friend class Data::Graph;
|
2018-11-28 05:19:10 -05:00
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
2022-03-13 17:51:06 -04:00
|
|
|
explicit MainWindow(QWidget *parent = nullptr, const QString& fileName = QString());
|
2018-11-28 05:19:10 -05:00
|
|
|
~MainWindow() override;
|
|
|
|
|
2022-03-13 16:18:35 -04:00
|
|
|
static std::unordered_set<MainWindow*> openWindows;
|
2022-03-13 18:00:02 -04:00
|
|
|
static MainWindow* projectWindow(const QString& fileName);
|
2022-03-13 16:18:35 -04:00
|
|
|
|
2018-11-28 05:19:10 -05:00
|
|
|
private:
|
|
|
|
Ui::MainWindow* ui;
|
2018-12-17 14:09:44 -05:00
|
|
|
UISocket* socket;
|
2018-12-01 10:41:14 -05:00
|
|
|
std::shared_ptr<Data::Project> project;
|
2018-12-17 14:09:44 -05:00
|
|
|
std::shared_ptr<Data::Pattern> editingPattern;
|
2021-11-10 02:13:51 -05:00
|
|
|
std::shared_ptr<Data::Sample> editingSample;
|
2018-12-01 10:41:14 -05:00
|
|
|
|
2018-12-06 14:27:22 -05:00
|
|
|
QUndoStack* undoStack;
|
2022-03-13 06:47:17 -04:00
|
|
|
std::vector<QAction*> recentFileActions;
|
2018-12-06 14:27:22 -05:00
|
|
|
|
2022-03-13 17:51:06 -04:00
|
|
|
void openProject(const QString& fileName, bool failSilent = false);
|
2022-03-13 06:47:17 -04:00
|
|
|
void openRecentProject(size_t idx);
|
2022-03-13 07:24:28 -04:00
|
|
|
bool promptSave();
|
|
|
|
|
2018-12-01 10:41:14 -05:00
|
|
|
void onNewProjectLoaded();
|
2018-12-04 17:04:45 -05:00
|
|
|
void updatePatternLists();
|
2018-12-01 10:41:14 -05:00
|
|
|
bool selectPatternForEditing(Data::Pattern*);
|
2018-11-28 05:19:10 -05:00
|
|
|
|
2019-06-16 15:14:46 -04:00
|
|
|
void selectSampleForEditing(std::shared_ptr<Data::Sample>);
|
|
|
|
|
2018-12-22 21:03:51 -05:00
|
|
|
void openGraph(const std::shared_ptr<Data::Graph>&);
|
2019-06-21 17:50:42 -04:00
|
|
|
void openNodeUI(const std::shared_ptr<Data::Node>&);
|
2018-12-22 21:03:51 -05:00
|
|
|
|
2019-01-09 03:02:58 -05:00
|
|
|
void openPatternProperties(const std::shared_ptr<Data::Pattern>&);
|
|
|
|
|
2018-12-06 14:27:22 -05:00
|
|
|
void updateTitle();
|
2022-03-22 05:15:02 -04:00
|
|
|
void updateFont();
|
2018-12-06 14:27:22 -05:00
|
|
|
|
2019-06-20 05:17:30 -04:00
|
|
|
void setSongInfoPaneExpanded(bool);
|
2022-03-15 05:43:04 -04:00
|
|
|
void setFloater(QWidget* = nullptr);
|
|
|
|
|
|
|
|
void render();
|
2019-06-20 05:17:30 -04:00
|
|
|
|
2018-12-04 17:04:45 -05:00
|
|
|
public:
|
2018-12-17 14:09:44 -05:00
|
|
|
const std::shared_ptr<Data::Project>& getProject() const { return project; }
|
2018-12-04 17:04:45 -05:00
|
|
|
|
2018-12-07 13:45:32 -05:00
|
|
|
int patternSelection(int = -100);
|
|
|
|
int sequenceSelection(int = -100);
|
|
|
|
|
2018-12-19 10:18:32 -05:00
|
|
|
void playbackPosition(int seq, int row);
|
|
|
|
|
2019-06-23 03:57:40 -04:00
|
|
|
inline UISocket* uiSocket() { return socket; }
|
|
|
|
|
2018-11-28 05:19:10 -05:00
|
|
|
protected:
|
2022-03-15 05:43:04 -04:00
|
|
|
void resizeEvent(QResizeEvent*) override;
|
2019-06-14 05:00:01 -04:00
|
|
|
void closeEvent(QCloseEvent*) override;
|
2018-11-28 05:19:10 -05:00
|
|
|
bool eventFilter(QObject *obj, QEvent *event) override;
|
|
|
|
|
2018-12-01 10:41:14 -05:00
|
|
|
public slots:
|
2022-03-13 18:38:10 -04:00
|
|
|
void tryFocus();
|
|
|
|
|
2018-12-01 10:41:14 -05:00
|
|
|
void menuFileNew();
|
|
|
|
void menuFileOpen();
|
|
|
|
void menuFileSave();
|
|
|
|
void menuFileSaveAs();
|
|
|
|
|
2019-07-20 15:25:35 -04:00
|
|
|
void menuFileExport();
|
|
|
|
void menuFileExportAs();
|
|
|
|
|
2019-06-20 05:17:30 -04:00
|
|
|
void menuFileNewWindow();
|
2022-03-18 22:59:50 -04:00
|
|
|
void menuSettings();
|
2022-03-13 16:34:07 -04:00
|
|
|
void menuQuit();
|
2019-06-20 05:17:30 -04:00
|
|
|
|
2019-06-16 14:40:09 -04:00
|
|
|
signals:
|
|
|
|
void projectLoaded();
|
|
|
|
|
2018-11-28 05:19:10 -05:00
|
|
|
};
|
|
|
|
}
|