/* * Carla plugin host * Copyright (C) 2011-2019 Filipe Coelho * * 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 #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 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