|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- /*
- * Carla plugin host
- * Copyright (C) 2011-2019 Filipe Coelho <falktx@falktx.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * For a full copy of the GNU General Public License see the doc/GPL.txt file.
- */
-
- #ifndef CARLA_HOST_HPP_INCLUDED
- #define CARLA_HOST_HPP_INCLUDED
-
- //---------------------------------------------------------------------------------------------------------------------
- // Imports (Global)
-
- #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
- # pragma GCC diagnostic push
- # pragma GCC diagnostic ignored "-Wconversion"
- # pragma GCC diagnostic ignored "-Weffc++"
- # pragma GCC diagnostic ignored "-Wsign-conversion"
- #endif
-
- #include <QtWidgets/QMainWindow>
-
- #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
- # pragma GCC diagnostic pop
- #endif
-
- //---------------------------------------------------------------------------------------------------------------------
- // Imports (Custom)
-
- #include "carla_shared.hpp"
- #include "carla_widgets.hpp"
-
- #include "CarlaHost.h"
- #include "CarlaJuceUtils.hpp"
-
- CARLA_BACKEND_USE_NAMESPACE;
-
- //---------------------------------------------------------------------------------------------------------------------
-
- class CarlaHost : public QObject
- {
- Q_OBJECT
-
- public:
- // host handle
- CarlaHostHandle handle;
-
- // info about this host object
- bool isControl;
- bool isPlugin;
- bool isRemote;
- bool nsmOK;
-
- // settings
- EngineProcessMode processMode;
- EngineTransportMode transportMode;
- QCarlaString transportExtra;
- EngineProcessMode nextProcessMode;
- bool processModeForced;
- QCarlaString audioDriverForced;
-
- // settings
- bool experimental;
- bool exportLV2;
- bool forceStereo;
- bool manageUIs;
- uint maxParameters;
- bool resetXruns;
- bool preferPluginBridges;
- bool preferUIBridges;
- bool preventBadBehaviour;
- bool showLogs;
- bool showPluginBridges;
- bool showWineBridges;
- bool uiBridgesTimeout;
- bool uisAlwaysOnTop;
-
- // settings
- QString pathBinaries;
- QString pathResources;
-
- CarlaHost();
-
- signals:
- void SignalTerminate();
- void SignalSave();
-
- // Engine stuff
- void EngineStartedCallback(uint, int, int, uint, float, QString);
- void EngineStoppedCallback();
-
- private:
- CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaHost)
- };
-
- //---------------------------------------------------------------------------------------------------------------------
- // Host Window
-
- class CarlaHostWindow : public QMainWindow,
- public PluginEditParentMeta
- {
- Q_OBJECT
-
- public:
- //-----------------------------------------------------------------------------------------------------------------
-
- CarlaHostWindow(CarlaHost& host, const bool withCanvas, QWidget* const parent = nullptr);
- ~CarlaHostWindow() override;
-
- private:
- struct PrivateData;
- PrivateData* const self;
-
- protected:
- //-----------------------------------------------------------------------------------------------------------------
- // Plugin Editor Parent
-
- void editDialogVisibilityChanged(int pluginId, bool visible) override;
- void editDialogPluginHintsChanged(int pluginId, int hints) override;
- void editDialogParameterValueChanged(int pluginId, int parameterId, float value) override;
- void editDialogProgramChanged(int pluginId, int index) override;
- void editDialogMidiProgramChanged(int pluginId, int index) override;
- void editDialogNotePressed(int pluginId, int note) override;
- void editDialogNoteReleased(int pluginId, int note) override;
- void editDialogMidiActivityChanged(int pluginId, bool onOff) override;
-
- //-----------------------------------------------------------------------------------------------------------------
- // show/hide event
-
- void showEvent(QShowEvent* event) override;
- void hideEvent(QHideEvent* event) override;
-
- //-----------------------------------------------------------------------------------------------------------------
- // resize event
-
- void resizeEvent(QResizeEvent* event) override;
-
- //-----------------------------------------------------------------------------------------------------------------
- // timer event
-
- void timerEvent(QTimerEvent* event) override;
-
- //-----------------------------------------------------------------------------------------------------------------
- // color/style change event
-
- void changeEvent(QEvent* event) override;
-
- //-----------------------------------------------------------------------------------------------------------------
- // close event
-
- void closeEvent(QCloseEvent* event) override;
-
- private slots:
- //-----------------------------------------------------------------------------------------------------------------
- // Files (menu actions)
-
- void slot_fileNew();
- void slot_fileOpen();
- void slot_fileSave(bool saveAs = false);
- void slot_fileSaveAs();
- void slot_loadProjectNow();
-
- //-----------------------------------------------------------------------------------------------------------------
- // Engine (menu actions)
-
- void slot_engineStart();
- bool slot_engineStop(bool forced = false);
- void slot_engineConfig();
- bool slot_engineStopTryAgain();
-
- //-----------------------------------------------------------------------------------------------------------------
- // Engine (host callbacks)
-
- void slot_handleEngineStartedCallback(uint pluginCount, int processMode, int transportMode, uint bufferSize, float sampleRate, QString driverName);
- void slot_handleEngineStoppedCallback();
- void slot_handleTransportModeChangedCallback(int transportMode, QString transportExtra);
- void slot_handleBufferSizeChangedCallback(int newBufferSize);
- void slot_handleSampleRateChangedCallback(double newSampleRate);
- void slot_handleCancelableActionCallback(int pluginId, bool started, QString action);
- void slot_canlableActionBoxClicked();
- void slot_handleProjectLoadFinishedCallback();
-
- //-----------------------------------------------------------------------------------------------------------------
- // Plugins (menu actions)
-
- void slot_favoritePluginAdd();
- void slot_showPluginActionsMenu();
- void slot_pluginAdd();
- void slot_confirmRemoveAll();
- void slot_jackAppAdd();
-
- //-----------------------------------------------------------------------------------------------------------------
- // Plugins (macros)
-
- void slot_pluginsEnable();
- void slot_pluginsDisable();
- void slot_pluginsVolume100();
- void slot_pluginsMute();
- void slot_pluginsWet100();
- void slot_pluginsBypass();
- void slot_pluginsCenter();
- void slot_pluginsCompact();
- void slot_pluginsExpand();
-
- //-----------------------------------------------------------------------------------------------------------------
- // Plugins (host callbacks)
-
- void slot_handlePluginAddedCallback(int pluginId, QString pluginName);
- void slot_handlePluginRemovedCallback(int pluginId);
-
- //-----------------------------------------------------------------------------------------------------------------
- // Canvas (menu actions)
-
- void slot_canvasShowInternal();
- void slot_canvasShowExternal();
- void slot_canvasArrange();
- void slot_canvasRefresh();
- void slot_canvasZoomFit();
- void slot_canvasZoomIn();
- void slot_canvasZoomOut();
- void slot_canvasZoomReset();
- void slot_canvasSaveImage();
-
- //-----------------------------------------------------------------------------------------------------------------
- // Canvas (canvas callbacks)
-
- void slot_canvasItemMoved(int group_id, int split_mode, QPointF pos);
- void slot_canvasSelectionChanged();
- void slot_canvasScaleChanged(double scale);
- void slot_canvasPluginSelected(QList<void*> pluginList);
-
- //-----------------------------------------------------------------------------------------------------------------
- // Canvas (host callbacks)
-
- void slot_handlePatchbayClientAddedCallback(int clientId, int clientIcon, int pluginId, QString clientName);
- void slot_handlePatchbayClientRemovedCallback(int clientId);
- void slot_handlePatchbayClientRenamedCallback(int clientId, QString newClientName);
- void slot_handlePatchbayClientDataChangedCallback(int clientId, int clientIcon, int pluginId);
- void slot_handlePatchbayPortAddedCallback(int clientId, int portId, int portFlags, int portGroupId, QString portName);
- void slot_handlePatchbayPortRemovedCallback(int groupId, int portId);
- void slot_handlePatchbayPortChangedCallback(int groupId, int portId, int portFlags, int portGroupId, QString newPortName);
- void slot_handlePatchbayPortGroupAddedCallback(int groupId, int portId, int portGroupId, QString newPortName);
- void slot_handlePatchbayPortGroupRemovedCallback(int groupId, int portId);
- void slot_handlePatchbayPortGroupChangedCallback(int groupId, int portId, int portGroupId, QString newPortName);
- void slot_handlePatchbayConnectionAddedCallback(int connectionId, int groupOutId, int portOutId, int groupInId, int portInId);
- void slot_handlePatchbayConnectionRemovedCallback(int connectionId, int portOutId, int portInId);
-
- //-----------------------------------------------------------------------------------------------------------------
- // Settings (helpers)
-
- void slot_restoreCanvasScrollbarValues();
-
- //-----------------------------------------------------------------------------------------------------------------
- // Settings (menu actions)
-
- void slot_showSidePanel(bool yesNo);
- void slot_showToolbar(bool yesNo);
- void slot_showCanvasMeters(bool yesNo);
- void slot_showCanvasKeyboard(bool yesNo);
- void slot_configureCarla();
-
- //-----------------------------------------------------------------------------------------------------------------
- // About (menu actions)
-
- void slot_aboutCarla();
- void slot_aboutJuce();
- void slot_aboutQt();
-
- //-----------------------------------------------------------------------------------------------------------------
- // Disk (menu actions)
-
- void slot_diskFolderChanged(int index);
- void slot_diskFolderAdd();
- void slot_diskFolderRemove();
- void slot_fileTreeDoubleClicked(QModelIndex* modelIndex);
-
- //-----------------------------------------------------------------------------------------------------------------
- // Transport (menu actions)
-
- void slot_transportPlayPause(bool toggled);
- void slot_transportStop();
- void slot_transportBackwards();
- void slot_transportBpmChanged(qreal newValue);
- void slot_transportForwards();
- void slot_transportJackEnabled(bool clicked);
- void slot_transportLinkEnabled(bool clicked);
-
- //-----------------------------------------------------------------------------------------------------------------
- // Other
-
- void slot_xrunClear();
-
- //-----------------------------------------------------------------------------------------------------------------
- // Canvas scrollbars
-
- void slot_horizontalScrollBarChanged(int value);
- void slot_verticalScrollBarChanged(int value);
-
- //-----------------------------------------------------------------------------------------------------------------
- // Canvas keyboard
-
- void slot_noteOn(int note);
- void slot_noteOff(int note);
-
- //-----------------------------------------------------------------------------------------------------------------
- // Canvas keyboard (host callbacks)
-
- void slot_handleNoteOnCallback(int pluginId, int channel, int note, int velocity);
- void slot_handleNoteOffCallback(int pluginId, int channel, int note);
-
- //-----------------------------------------------------------------------------------------------------------------
-
- void slot_handleUpdateCallback(int pluginId);
-
- //-----------------------------------------------------------------------------------------------------------------
- // MiniCanvas stuff
-
- void slot_miniCanvasCheckAll();
- void slot_miniCanvasCheckSize();
- void slot_miniCanvasMoved(qreal xp, qreal yp);
-
- //-----------------------------------------------------------------------------------------------------------------
- // Misc
-
- void slot_tabChanged(int index);
- void slot_handleReloadAllCallback(int pluginId);
-
- //-----------------------------------------------------------------------------------------------------------------
-
- void slot_handleNSMCallback(int opcode, int valueInt, QString valueStr);
-
- //-----------------------------------------------------------------------------------------------------------------
-
- void slot_handleDebugCallback(int pluginId, int value1, int value2, int value3, float valuef, QString valueStr);
- void slot_handleInfoCallback(QString info);
- void slot_handleErrorCallback(QString error);
- void slot_handleQuitCallback();
- void slot_handleInlineDisplayRedrawCallback(int pluginId);
-
- //-----------------------------------------------------------------------------------------------------------------
-
- void slot_handleSIGUSR1();
- void slot_handleSIGTERM();
-
- //-----------------------------------------------------------------------------------------------------------------
-
- private:
- CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaHostWindow)
- };
-
- //---------------------------------------------------------------------------------------------------------------------
- // Init host
-
- CarlaHost& initHost(const QString initName, const bool isControl, const bool isPlugin, const bool failError);
-
- //---------------------------------------------------------------------------------------------------------------------
- // Load host settings
-
- void loadHostSettings(CarlaHost& host);
-
- //---------------------------------------------------------------------------------------------------------------------
- // Set host settings
-
- void setHostSettings(const CarlaHost& host);
-
- //---------------------------------------------------------------------------------------------------------------------
- // Set Engine settings according to carla preferences. Returns selected audio driver.
-
- QString setEngineSettings(CarlaHost& host);
-
- //---------------------------------------------------------------------------------------------------------------------
- // Run Carla without showing UI
-
- void runHostWithoutUI(CarlaHost& host);
-
- //---------------------------------------------------------------------------------------------------------------------
-
- #endif // CARLA_HOST_HPP_INCLUDED
|