xybrid/xybrid/mainwindow.h

98 lines
2.4 KiB
C
Raw Normal View History

#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"
#include "ui/patterneditormodel.h"
class QUndoStack;
2018-11-19 15:57:54 -05:00
namespace Ui {
class MainWindow;
2018-11-19 15:57:54 -05:00
}
namespace Xybrid {
2019-06-21 17:50:42 -04:00
namespace Data { class Node; }
class MainWindow : public QMainWindow {
friend class Data::Graph;
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr, const QString& fileName = QString());
~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
private:
Ui::MainWindow* ui;
UISocket* socket;
2018-12-01 10:41:14 -05:00
std::shared_ptr<Data::Project> project;
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
QUndoStack* undoStack;
2022-03-13 06:47:17 -04:00
std::vector<QAction*> recentFileActions;
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();
void updatePatternLists();
2018-12-01 10:41:14 -05:00
bool selectPatternForEditing(Data::Pattern*);
void selectSampleForEditing(std::shared_ptr<Data::Sample>);
void openGraph(const std::shared_ptr<Data::Graph>&);
2019-06-21 17:50:42 -04:00
void openNodeUI(const std::shared_ptr<Data::Node>&);
2019-01-09 03:02:58 -05:00
void openPatternProperties(const std::shared_ptr<Data::Pattern>&);
void updateTitle();
2022-03-22 05:15:02 -04:00
void updateFont();
void setSongInfoPaneExpanded(bool);
void setFloater(QWidget* = nullptr);
void render();
public:
const std::shared_ptr<Data::Project>& getProject() const { return project; }
int patternSelection(int = -100);
int sequenceSelection(int = -100);
void playbackPosition(int seq, int row);
inline UISocket* uiSocket() { return socket; }
protected:
void resizeEvent(QResizeEvent*) override;
2019-06-14 05:00:01 -04:00
void closeEvent(QCloseEvent*) override;
bool eventFilter(QObject *obj, QEvent *event) override;
2018-12-01 10:41:14 -05:00
public slots:
void tryFocus();
2018-12-01 10:41:14 -05:00
void menuFileNew();
void menuFileOpen();
void menuFileSave();
void menuFileSaveAs();
void menuFileExport();
void menuFileExportAs();
void menuFileNewWindow();
2022-03-18 22:59:50 -04:00
void menuSettings();
2022-03-13 16:34:07 -04:00
void menuQuit();
2019-06-16 14:40:09 -04:00
signals:
void projectLoaded();
};
}