| @@ -6,20 +6,174 @@ | |||
| <rect> | |||
| <x>0</x> | |||
| <y>0</y> | |||
| <width>679</width> | |||
| <height>191</height> | |||
| <width>688</width> | |||
| <height>355</height> | |||
| </rect> | |||
| </property> | |||
| <property name="windowTitle"> | |||
| <string>MainWindow</string> | |||
| </property> | |||
| <widget class="QWidget" name="centralwidget"/> | |||
| <widget class="QWidget" name="centralwidget"> | |||
| <layout class="QHBoxLayout" name="horizontalLayout_2"> | |||
| <property name="margin"> | |||
| <number>0</number> | |||
| </property> | |||
| <item> | |||
| <widget class="QSplitter" name="splitter"> | |||
| <property name="orientation"> | |||
| <enum>Qt::Horizontal</enum> | |||
| </property> | |||
| <widget class="QWidget" name="mainwidget" native="true"> | |||
| <property name="sizePolicy"> | |||
| <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> | |||
| <horstretch>0</horstretch> | |||
| <verstretch>0</verstretch> | |||
| </sizepolicy> | |||
| </property> | |||
| </widget> | |||
| <widget class="QWidget" name="layoutWidget"> | |||
| <layout class="QVBoxLayout" name="verticalLayout_4"> | |||
| <property name="spacing"> | |||
| <number>1</number> | |||
| </property> | |||
| <item> | |||
| <widget class="QTabWidget" name="tabUtils"> | |||
| <property name="sizePolicy"> | |||
| <sizepolicy hsizetype="Ignored" vsizetype="Expanding"> | |||
| <horstretch>0</horstretch> | |||
| <verstretch>0</verstretch> | |||
| </sizepolicy> | |||
| </property> | |||
| <property name="minimumSize"> | |||
| <size> | |||
| <width>210</width> | |||
| <height>0</height> | |||
| </size> | |||
| </property> | |||
| <property name="acceptDrops"> | |||
| <bool>false</bool> | |||
| </property> | |||
| <property name="tabPosition"> | |||
| <enum>QTabWidget::East</enum> | |||
| </property> | |||
| <property name="currentIndex"> | |||
| <number>0</number> | |||
| </property> | |||
| <widget class="QWidget" name="disk"> | |||
| <property name="acceptDrops"> | |||
| <bool>false</bool> | |||
| </property> | |||
| <attribute name="title"> | |||
| <string>Disk</string> | |||
| </attribute> | |||
| <layout class="QVBoxLayout" name="verticalLayout_3"> | |||
| <property name="spacing"> | |||
| <number>0</number> | |||
| </property> | |||
| <property name="leftMargin"> | |||
| <number>0</number> | |||
| </property> | |||
| <property name="topMargin"> | |||
| <number>0</number> | |||
| </property> | |||
| <property name="rightMargin"> | |||
| <number>0</number> | |||
| </property> | |||
| <property name="bottomMargin"> | |||
| <number>1</number> | |||
| </property> | |||
| <item> | |||
| <layout class="QHBoxLayout" name="horizontalLayout"> | |||
| <item> | |||
| <widget class="QComboBox" name="cb_disk"> | |||
| <item> | |||
| <property name="text"> | |||
| <string>Home</string> | |||
| </property> | |||
| </item> | |||
| </widget> | |||
| </item> | |||
| <item> | |||
| <widget class="QToolButton" name="b_disk_add"> | |||
| <property name="text"> | |||
| <string/> | |||
| </property> | |||
| <property name="icon"> | |||
| <iconset resource="../resources.qrc"> | |||
| <normaloff>:/16x16/list-add.png</normaloff>:/16x16/list-add.png</iconset> | |||
| </property> | |||
| </widget> | |||
| </item> | |||
| <item> | |||
| <widget class="QToolButton" name="b_disk_remove"> | |||
| <property name="enabled"> | |||
| <bool>false</bool> | |||
| </property> | |||
| <property name="text"> | |||
| <string/> | |||
| </property> | |||
| <property name="icon"> | |||
| <iconset resource="../resources.qrc"> | |||
| <normaloff>:/16x16/list-remove.png</normaloff>:/16x16/list-remove.png</iconset> | |||
| </property> | |||
| </widget> | |||
| </item> | |||
| </layout> | |||
| </item> | |||
| <item> | |||
| <widget class="QTreeView" name="fileTreeView"> | |||
| <property name="editTriggers"> | |||
| <set>QAbstractItemView::NoEditTriggers</set> | |||
| </property> | |||
| <property name="dragEnabled"> | |||
| <bool>true</bool> | |||
| </property> | |||
| <property name="dragDropMode"> | |||
| <enum>QAbstractItemView::DragDrop</enum> | |||
| </property> | |||
| </widget> | |||
| </item> | |||
| </layout> | |||
| </widget> | |||
| </widget> | |||
| </item> | |||
| <item> | |||
| <widget class="CanvasPreviewFrame" name="miniCanvasPreview"> | |||
| <property name="minimumSize"> | |||
| <size> | |||
| <width>210</width> | |||
| <height>162</height> | |||
| </size> | |||
| </property> | |||
| <property name="maximumSize"> | |||
| <size> | |||
| <width>210</width> | |||
| <height>162</height> | |||
| </size> | |||
| </property> | |||
| <property name="acceptDrops"> | |||
| <bool>false</bool> | |||
| </property> | |||
| <property name="frameShape"> | |||
| <enum>QFrame::StyledPanel</enum> | |||
| </property> | |||
| <property name="frameShadow"> | |||
| <enum>QFrame::Sunken</enum> | |||
| </property> | |||
| </widget> | |||
| </item> | |||
| </layout> | |||
| </widget> | |||
| </widget> | |||
| </item> | |||
| </layout> | |||
| </widget> | |||
| <widget class="QMenuBar" name="menubar"> | |||
| <property name="geometry"> | |||
| <rect> | |||
| <x>0</x> | |||
| <y>0</y> | |||
| <width>679</width> | |||
| <width>688</width> | |||
| <height>19</height> | |||
| </rect> | |||
| </property> | |||
| @@ -474,6 +628,14 @@ | |||
| </property> | |||
| </action> | |||
| </widget> | |||
| <customwidgets> | |||
| <customwidget> | |||
| <class>CanvasPreviewFrame</class> | |||
| <extends>QFrame</extends> | |||
| <header>canvaspreviewframe.h</header> | |||
| <container>1</container> | |||
| </customwidget> | |||
| </customwidgets> | |||
| <resources> | |||
| <include location="../resources.qrc"/> | |||
| </resources> | |||
| @@ -1059,7 +1059,7 @@ const char* CarlaEngine::getUniquePluginName(const char* const name) | |||
| bool CarlaEngine::loadFilename(const char* const filename) | |||
| { | |||
| CARLA_ASSERT(filename != nullptr); | |||
| CARLA_ASSERT(filename != nullptr && filename[0] != '\0'); | |||
| carla_debug("CarlaEngine::loadFilename(\"%s\")", filename); | |||
| using namespace juce; | |||
| @@ -1073,7 +1073,10 @@ bool CarlaEngine::loadFilename(const char* const filename) | |||
| } | |||
| CarlaString baseName(file.getFileNameWithoutExtension().toRawUTF8()); | |||
| CarlaString extension(file.getFileExtension().toRawUTF8()); | |||
| CarlaString extension(file.getFileExtension().toRawUTF8()+1); | |||
| extension.toLower(); | |||
| carla_stdout("loadFilename with extension %s", (const char*)extension); | |||
| // ------------------------------------------------------------------- | |||
| @@ -1190,7 +1193,7 @@ bool charEndsWith(const char* const str, const char* const suffix) | |||
| bool CarlaEngine::loadProject(const char* const filename) | |||
| { | |||
| CARLA_ASSERT(filename != nullptr); | |||
| CARLA_ASSERT(filename != nullptr && filename[0] != '\0'); | |||
| carla_debug("CarlaEngine::loadProject(\"%s\")", filename); | |||
| using namespace juce; | |||
| @@ -1260,7 +1263,7 @@ bool CarlaEngine::loadProject(const char* const filename) | |||
| bool CarlaEngine::saveProject(const char* const filename) | |||
| { | |||
| CARLA_ASSERT(filename != nullptr); | |||
| CARLA_ASSERT(filename != nullptr && filename[0] != '\0'); | |||
| carla_debug("CarlaEngine::saveProject(\"%s\")", filename); | |||
| using namespace juce; | |||
| @@ -1694,11 +1697,20 @@ void setValueIfHigher(float& value, const float& compare) | |||
| value = compare; | |||
| } | |||
| void CarlaEngine::processRack(float* inBuf[2], float* outBuf[2], const uint32_t frames) | |||
| void CarlaEngine::processRack(float* inBufReal[2], float* outBuf[2], const uint32_t frames) | |||
| { | |||
| CARLA_ASSERT(pData->bufEvents.in != nullptr); | |||
| CARLA_ASSERT(pData->bufEvents.out != nullptr); | |||
| // safe copy | |||
| float inBuf0[frames]; | |||
| float inBuf1[frames]; | |||
| float* inBuf[2] = { inBuf0, inBuf1 }; | |||
| // initialize inputs | |||
| carla_copyFloat(inBuf0, inBufReal[0], frames); | |||
| carla_copyFloat(inBuf1, inBufReal[1], frames); | |||
| // initialize outputs (zero) | |||
| carla_zeroFloat(outBuf[0], frames); | |||
| carla_zeroFloat(outBuf[1], frames); | |||
| @@ -1706,6 +1718,9 @@ void CarlaEngine::processRack(float* inBuf[2], float* outBuf[2], const uint32_t | |||
| bool processed = false; | |||
| uint32_t oldAudioInCount = 0; | |||
| uint32_t oldMidiOutCount = 0; | |||
| // process plugins | |||
| for (unsigned int i=0; i < pData->curPluginCount; ++i) | |||
| { | |||
| @@ -1716,9 +1731,10 @@ void CarlaEngine::processRack(float* inBuf[2], float* outBuf[2], const uint32_t | |||
| if (processed) | |||
| { | |||
| // initialize inputs (from previous outputs) | |||
| carla_copyFloat(inBuf[0], outBuf[0], frames); | |||
| carla_copyFloat(inBuf[1], outBuf[1], frames); | |||
| carla_copyFloat(inBuf0, outBuf[0], frames); | |||
| carla_copyFloat(inBuf1, outBuf[1], frames); | |||
| std::memcpy(pData->bufEvents.in, pData->bufEvents.out, sizeof(EngineEvent)*kEngineMaxInternalEventCount); | |||
| // initialize outputs (zero) | |||
| @@ -1727,26 +1743,35 @@ void CarlaEngine::processRack(float* inBuf[2], float* outBuf[2], const uint32_t | |||
| carla_zeroMem(pData->bufEvents.out, sizeof(EngineEvent)*kEngineMaxInternalEventCount); | |||
| } | |||
| oldAudioInCount = plugin->getAudioInCount(); | |||
| oldMidiOutCount = plugin->getMidiOutCount(); | |||
| // if plugin has no audio inputs, add input buffer | |||
| //if (oldAudioInCount == 0) | |||
| { | |||
| carla_addFloat(outBuf[0], inBuf0, frames); | |||
| carla_addFloat(outBuf[1], inBuf1, frames); | |||
| } | |||
| // if plugin has no midi out, add previous events | |||
| if (oldMidiOutCount == 0 && pData->bufEvents.in[0].type != CarlaBackend::kEngineEventTypeNull) | |||
| { | |||
| if (pData->bufEvents.out[0].type != CarlaBackend::kEngineEventTypeNull) | |||
| { | |||
| // TODO: carefully add to output, sorted events | |||
| } | |||
| else | |||
| { | |||
| // nothing in output, can be replaced directly | |||
| std::memcpy(pData->bufEvents.out, pData->bufEvents.in, sizeof(EngineEvent)*kEngineMaxInternalEventCount); | |||
| } | |||
| } | |||
| // process | |||
| plugin->initBuffers(); | |||
| plugin->process(inBuf, outBuf, frames); | |||
| plugin->unlock(); | |||
| // if plugin has no audio inputs, add previous buffers | |||
| if (plugin->getAudioInCount() == 0) | |||
| { | |||
| carla_addFloat(outBuf[0], inBuf[0], frames); | |||
| carla_addFloat(outBuf[1], inBuf[1], frames); | |||
| } | |||
| // if plugin has no midi output, add previous events | |||
| if (plugin->getMidiOutCount() == 0) | |||
| { | |||
| //for (uint32_t j=0, k=0; j < frames; ++j) | |||
| //{ | |||
| //} | |||
| std::memcpy(pData->bufEvents.out, pData->bufEvents.in, sizeof(EngineEvent)*kEngineMaxInternalEventCount); | |||
| } | |||
| // set peaks | |||
| { | |||
| float inPeak1 = 0.0f; | |||
| @@ -1756,8 +1781,8 @@ void CarlaEngine::processRack(float* inBuf[2], float* outBuf[2], const uint32_t | |||
| for (uint32_t k=0; k < frames; ++k) | |||
| { | |||
| setValueIfHigher(inPeak1, std::fabs(inBuf[0][k])); | |||
| setValueIfHigher(inPeak2, std::fabs(inBuf[1][k])); | |||
| setValueIfHigher(inPeak1, std::fabs(inBuf0[k])); | |||
| setValueIfHigher(inPeak2, std::fabs(inBuf1[k])); | |||
| setValueIfHigher(outPeak1, std::fabs(outBuf[0][k])); | |||
| setValueIfHigher(outPeak2, std::fabs(outBuf[1][k])); | |||
| } | |||
| @@ -816,7 +816,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||
| bool CarlaPlugin::saveStateToFile(const char* const filename) | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(filename != nullptr, false); | |||
| CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); | |||
| carla_debug("CarlaPlugin::saveStateToFile(\"%s\")", filename); | |||
| File file(filename); | |||
| @@ -836,7 +836,7 @@ bool CarlaPlugin::saveStateToFile(const char* const filename) | |||
| bool CarlaPlugin::loadStateFromFile(const char* const filename) | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(filename != nullptr, false); | |||
| CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); | |||
| carla_debug("CarlaPlugin::loadStateFromFile(\"%s\")", filename); | |||
| File file(filename); | |||
| @@ -659,9 +659,11 @@ struct CarlaPluginProtectedData { | |||
| if (client != nullptr) | |||
| { | |||
| if (client->isActive()) | |||
| client->deactivate(); | |||
| else | |||
| { | |||
| // must not happen | |||
| carla_assert("client->isActive()", __FILE__, __LINE__); | |||
| client->deactivate(); | |||
| } | |||
| clearBuffers(); | |||
| @@ -313,7 +313,7 @@ public: | |||
| PluginCategory getCategory() const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, PLUGIN_CATEGORY_NONE); | |||
| return static_cast<PluginCategory>(fDescriptor->category); | |||
| } | |||
| @@ -333,16 +333,15 @@ public: | |||
| uint32_t getParameterScalePointCount(const uint32_t parameterId) const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_ASSERT(parameterId < pData->param.count); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, 0); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, 0); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, 0); | |||
| CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0); | |||
| if (fDescriptor->get_parameter_info != nullptr && parameterId < pData->param.count) | |||
| { | |||
| if (const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) | |||
| return param->scalePointCount; | |||
| } | |||
| if (const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) | |||
| return param->scalePointCount; | |||
| carla_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||
| return 0; | |||
| } | |||
| @@ -356,10 +355,7 @@ public: | |||
| unsigned int getAvailableOptions() const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| if (fDescriptor == nullptr) | |||
| return 0x0; | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, 0x0); | |||
| const bool hasMidiProgs(fDescriptor->get_midi_program_count != nullptr && fDescriptor->get_midi_program_count(fHandle) > 0); | |||
| @@ -395,38 +391,35 @@ public: | |||
| float getParameterValue(const uint32_t parameterId) const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_ASSERT(parameterId < pData->param.count); | |||
| if (fDescriptor->get_parameter_value != nullptr && parameterId < pData->param.count) | |||
| return fDescriptor->get_parameter_value(fHandle, parameterId); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, 0.0f); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_value != nullptr, 0.0f); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, 0.0f); | |||
| CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); | |||
| return 0.0f; | |||
| return fDescriptor->get_parameter_value(fHandle, parameterId); | |||
| } | |||
| float getParameterScalePointValue(const uint32_t parameterId, const uint32_t scalePointId) const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_ASSERT(parameterId < pData->param.count); | |||
| CARLA_ASSERT(scalePointId < getParameterScalePointCount(parameterId)); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, 0.0f); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, 0.0f); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, 0.0f); | |||
| CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); | |||
| CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId), 0.0f); | |||
| if (fDescriptor->get_parameter_info != nullptr && parameterId < pData->param.count) | |||
| if (const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) | |||
| { | |||
| if (const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) | |||
| { | |||
| const ParameterScalePoint& scalePoint(param->scalePoints[scalePointId]); | |||
| return scalePoint.value; | |||
| } | |||
| const ParameterScalePoint& scalePoint(param->scalePoints[scalePointId]); | |||
| return scalePoint.value; | |||
| } | |||
| carla_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||
| return 0.0f; | |||
| } | |||
| void getLabel(char* const strBuf) const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| if (fDescriptor->label != nullptr) | |||
| std::strncpy(strBuf, fDescriptor->label, STR_MAX); | |||
| @@ -436,7 +429,7 @@ public: | |||
| void getMaker(char* const strBuf) const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| if (fDescriptor->maker != nullptr) | |||
| std::strncpy(strBuf, fDescriptor->maker, STR_MAX); | |||
| @@ -446,7 +439,7 @@ public: | |||
| void getCopyright(char* const strBuf) const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| if (fDescriptor->copyright != nullptr) | |||
| std::strncpy(strBuf, fDescriptor->copyright, STR_MAX); | |||
| @@ -456,7 +449,7 @@ public: | |||
| void getRealName(char* const strBuf) const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| if (fDescriptor->name != nullptr) | |||
| std::strncpy(strBuf, fDescriptor->name, STR_MAX); | |||
| @@ -466,7 +459,7 @@ public: | |||
| void getParameterName(const uint32_t parameterId, char* const strBuf) const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_ASSERT(parameterId < pData->param.count); | |||
| @@ -486,7 +479,7 @@ public: | |||
| void getParameterText(const uint32_t parameterId, char* const strBuf) const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_ASSERT(parameterId < pData->param.count); | |||
| @@ -506,7 +499,7 @@ public: | |||
| void getParameterUnit(const uint32_t parameterId, char* const strBuf) const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_ASSERT(parameterId < pData->param.count); | |||
| @@ -526,7 +519,7 @@ public: | |||
| void getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_ASSERT(parameterId < pData->param.count); | |||
| CARLA_ASSERT(scalePointId < getParameterScalePointCount(parameterId)); | |||
| @@ -553,10 +546,10 @@ public: | |||
| void prepareForSave() override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| if (pData->midiprog.count > 0 /*&& (fHints & PLUGIN_IS_SYNTH) != 0*/) // TODO | |||
| if (pData->midiprog.count > 0 && fDescriptor->category == ::PLUGIN_CATEGORY_SYNTH) | |||
| { | |||
| char strBuf[STR_MAX+1]; | |||
| std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i", | |||
| @@ -584,8 +577,9 @@ public: | |||
| void setName(const char* const newName) override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(newName != nullptr && newName[0] != '\0',); | |||
| char uiName[std::strlen(newName)+6+1]; | |||
| std::strcpy(uiName, newName); | |||
| @@ -595,7 +589,7 @@ public: | |||
| delete[] fHost.uiName; | |||
| fHost.uiName = carla_strdup(uiName); | |||
| if (fDescriptor != nullptr && fDescriptor->dispatcher != nullptr) | |||
| if (fDescriptor->dispatcher != nullptr) | |||
| fDescriptor->dispatcher(fHandle, PLUGIN_OPCODE_UI_NAME_CHANGED, 0, 0, uiName, 0.0f); | |||
| CarlaPlugin::setName(newName); | |||
| @@ -614,8 +608,8 @@ public: | |||
| void setParameterValue(const uint32_t parameterId, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| CARLA_ASSERT(parameterId < pData->param.count); | |||
| const float fixedValue(pData->param.getFixedValue(parameterId, value)); | |||
| @@ -633,8 +627,8 @@ public: | |||
| void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| CARLA_ASSERT(type != nullptr); | |||
| CARLA_ASSERT(key != nullptr); | |||
| CARLA_ASSERT(value != nullptr); | |||
| @@ -720,8 +714,8 @@ public: | |||
| void setMidiProgram(int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback) override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| CARLA_ASSERT(index >= -1 && index < static_cast<int32_t>(pData->midiprog.count)); | |||
| if (index < -1) | |||
| @@ -757,8 +751,8 @@ public: | |||
| void showGui(const bool yesNo) override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| if (fDescriptor->ui_show == nullptr) | |||
| return; | |||
| @@ -799,8 +793,8 @@ public: | |||
| void idleGui() override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| if (fIsUiVisible && fDescriptor->ui_idle != nullptr) | |||
| fDescriptor->ui_idle(fHandle); | |||
| @@ -812,16 +806,9 @@ public: | |||
| void reload() override | |||
| { | |||
| carla_debug("NativePlugin::reload() - start"); | |||
| CARLA_ASSERT(pData->engine != nullptr); | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| if (pData->engine == nullptr) | |||
| return; | |||
| if (fDescriptor == nullptr) | |||
| return; | |||
| if (fHandle == nullptr) | |||
| return; | |||
| CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| const ProcessMode processMode(pData->engine->getProccessMode()); | |||
| @@ -1294,8 +1281,8 @@ public: | |||
| void activate() override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| if (fDescriptor->activate != nullptr) | |||
| { | |||
| @@ -1308,8 +1295,8 @@ public: | |||
| void deactivate() override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| if (fDescriptor->deactivate != nullptr) | |||
| { | |||
| @@ -2034,8 +2021,8 @@ public: | |||
| void uiParameterChange(const uint32_t index, const float value) override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| CARLA_ASSERT(index < pData->param.count); | |||
| if (! fIsUiVisible) | |||
| @@ -2051,8 +2038,8 @@ public: | |||
| void uiMidiProgramChange(const uint32_t index) override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| CARLA_ASSERT(index < pData->midiprog.count); | |||
| if (! fIsUiVisible) | |||
| @@ -2068,8 +2055,8 @@ public: | |||
| void uiNoteOn(const uint8_t channel, const uint8_t note, const uint8_t velo) override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| CARLA_ASSERT(channel < MAX_MIDI_CHANNELS); | |||
| CARLA_ASSERT(note < MAX_MIDI_NOTE); | |||
| CARLA_ASSERT(velo > 0 && velo < MAX_MIDI_VALUE); | |||
| @@ -2090,8 +2077,8 @@ public: | |||
| void uiNoteOff(const uint8_t channel, const uint8_t note) override | |||
| { | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_ASSERT(fHandle != nullptr); | |||
| CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | |||
| CARLA_ASSERT(channel < MAX_MIDI_CHANNELS); | |||
| CARLA_ASSERT(note < MAX_MIDI_NOTE); | |||
| @@ -2110,24 +2097,24 @@ public: | |||
| // ------------------------------------------------------------------- | |||
| protected: | |||
| uint32_t handleGetBufferSize() | |||
| uint32_t handleGetBufferSize() const | |||
| { | |||
| return pData->engine->getBufferSize(); | |||
| } | |||
| double handleGetSampleRate() | |||
| double handleGetSampleRate() const | |||
| { | |||
| return pData->engine->getSampleRate(); | |||
| } | |||
| bool handleIsOffline() | |||
| bool handleIsOffline() const | |||
| { | |||
| return pData->engine->isOffline(); | |||
| } | |||
| const ::TimeInfo* handleGetTimeInfo() | |||
| const ::TimeInfo* handleGetTimeInfo() const | |||
| { | |||
| CARLA_ASSERT(fIsProcessing); | |||
| CARLA_SAFE_ASSERT_RETURN(fIsProcessing, nullptr); | |||
| return &fTimeInfo; | |||
| } | |||
| @@ -2296,10 +2283,6 @@ public: | |||
| bool init(const char* const name, const char* const label) | |||
| { | |||
| CARLA_ASSERT(pData->engine != nullptr); | |||
| CARLA_ASSERT(pData->client == nullptr); | |||
| CARLA_ASSERT(label != nullptr); | |||
| // --------------------------------------------------------------- | |||
| // first checks | |||
| @@ -2314,7 +2297,7 @@ public: | |||
| return false; | |||
| } | |||
| if (label == nullptr) | |||
| if (label == nullptr && label[0] != '\0') | |||
| { | |||
| pData->engine->setLastError("null label"); | |||
| return false; | |||
| @@ -2327,10 +2310,8 @@ public: | |||
| { | |||
| fDescriptor = *it; | |||
| CARLA_ASSERT(fDescriptor != nullptr); | |||
| CARLA_SAFE_ASSERT_BREAK(fDescriptor != nullptr); | |||
| if (fDescriptor == nullptr) | |||
| break; | |||
| if (fDescriptor->label != nullptr && std::strcmp(fDescriptor->label, label) == 0) | |||
| break; | |||
| @@ -30,7 +30,7 @@ class CarlaHostW(HostWindow): | |||
| HostWindow.__init__(self, parent) | |||
| self.fContainer = CarlaPatchbayW(self) | |||
| self.setCentralWidget(self.fContainer) | |||
| self.setupContainer(True) | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Main | |||
| @@ -30,7 +30,7 @@ class CarlaHostW(HostWindow): | |||
| HostWindow.__init__(self, parent) | |||
| self.fContainer = CarlaRackW(self) | |||
| self.setCentralWidget(self.fContainer) | |||
| self.setupContainer(False) | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Main | |||
| @@ -79,10 +79,6 @@ class CarlaMainW(QMainWindow): | |||
| self.fInfoLabel.setText("") | |||
| self.fInfoText = "" | |||
| self.fDirModel = QFileSystemModel(self) | |||
| self.fDirModel.setNameFilters(cString(Carla.host.get_supported_file_types()).split(";")) | |||
| self.fDirModel.setRootPath(HOME) | |||
| if not WINDOWS: | |||
| self.fSyntaxLog = LogSyntaxHighlighter(self.ui.pte_log) | |||
| self.fSyntaxLog.setDocument(self.ui.pte_log.document()) | |||
| @@ -93,13 +89,6 @@ class CarlaMainW(QMainWindow): | |||
| else: | |||
| self.ui.tabMain.removeTab(2) | |||
| self.ui.fileTreeView.setModel(self.fDirModel) | |||
| self.ui.fileTreeView.setRootIndex(self.fDirModel.index(HOME)) | |||
| self.ui.fileTreeView.setColumnHidden(1, True) | |||
| self.ui.fileTreeView.setColumnHidden(2, True) | |||
| self.ui.fileTreeView.setColumnHidden(3, True) | |||
| self.ui.fileTreeView.setHeaderHidden(True) | |||
| self.ui.act_engine_start.setEnabled(False) | |||
| self.ui.act_engine_stop.setEnabled(False) | |||
| self.ui.act_plugin_remove_all.setEnabled(False) | |||
| @@ -189,52 +178,6 @@ class CarlaMainW(QMainWindow): | |||
| def slot_splitterMoved(self): | |||
| self.updateInfoLabelSize() | |||
| @pyqtSlot(int) | |||
| def slot_diskFolderChanged(self, index): | |||
| if index < 0: | |||
| return | |||
| elif index == 0: | |||
| filename = HOME | |||
| self.ui.b_disk_remove.setEnabled(False) | |||
| else: | |||
| filename = self.ui.cb_disk.itemData(index) | |||
| self.ui.b_disk_remove.setEnabled(True) | |||
| self.fDirModel.setRootPath(filename) | |||
| self.ui.fileTreeView.setRootIndex(self.fDirModel.index(filename)) | |||
| @pyqtSlot() | |||
| def slot_diskFolderAdd(self): | |||
| newPath = QFileDialog.getExistingDirectory(self, self.tr("New Folder"), "", QFileDialog.ShowDirsOnly) | |||
| if newPath: | |||
| if newPath[-1] == os.sep: | |||
| newPath = newPath[:-1] | |||
| self.ui.cb_disk.addItem(os.path.basename(newPath), newPath) | |||
| self.ui.cb_disk.setCurrentIndex(self.ui.cb_disk.count()-1) | |||
| self.ui.b_disk_remove.setEnabled(True) | |||
| @pyqtSlot() | |||
| def slot_diskFolderRemove(self): | |||
| index = self.ui.cb_disk.currentIndex() | |||
| if index <= 0: | |||
| return | |||
| self.ui.cb_disk.removeItem(index) | |||
| if self.ui.cb_disk.currentIndex() == 0: | |||
| self.ui.b_disk_remove.setEnabled(False) | |||
| @pyqtSlot(QModelIndex) | |||
| def slot_fileTreeDoubleClicked(self, modelIndex): | |||
| filename = self.fDirModel.filePath(modelIndex) | |||
| if not Carla.host.load_filename(filename): | |||
| CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), | |||
| self.tr("Failed to load file"), | |||
| cString(Carla.host.get_last_error()), QMessageBox.Ok, QMessageBox.Ok) | |||
| @pyqtSlot(float, float) | |||
| def slot_miniCanvasMoved(self, xp, yp): | |||
| self.ui.graphicsView.horizontalScrollBar().setValue(xp * DEFAULT_CANVAS_WIDTH) | |||
| @@ -20,12 +20,12 @@ | |||
| # Imports (Global) | |||
| try: | |||
| from PyQt5.QtCore import QTimer | |||
| from PyQt5.QtCore import QModelIndex, QTimer | |||
| from PyQt5.QtGui import QPalette | |||
| from PyQt5.QtWidgets import QApplication, QMainWindow | |||
| from PyQt5.QtWidgets import QApplication, QFileSystemModel, QMainWindow | |||
| except: | |||
| from PyQt4.QtCore import QTimer | |||
| from PyQt4.QtGui import QApplication, QMainWindow, QPalette | |||
| from PyQt4.QtCore import QModelIndex, QTimer | |||
| from PyQt4.QtGui import QApplication, QFileSystemModel, QMainWindow, QPalette | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Imports (Custom) | |||
| @@ -213,6 +213,20 @@ class HostWindow(QMainWindow): | |||
| self.setTransportMenuEnabled(False) | |||
| # ------------------------------------------------------------- | |||
| # Set up GUI (right panel) | |||
| self.fDirModel = QFileSystemModel(self) | |||
| self.fDirModel.setNameFilters(cString(Carla.host.get_supported_file_types()).split(";")) | |||
| self.fDirModel.setRootPath(HOME) | |||
| self.ui.fileTreeView.setModel(self.fDirModel) | |||
| self.ui.fileTreeView.setRootIndex(self.fDirModel.index(HOME)) | |||
| self.ui.fileTreeView.setColumnHidden(1, True) | |||
| self.ui.fileTreeView.setColumnHidden(2, True) | |||
| self.ui.fileTreeView.setColumnHidden(3, True) | |||
| self.ui.fileTreeView.setHeaderHidden(True) | |||
| self.setProperWindowTitle() | |||
| # ------------------------------------------------------------- | |||
| @@ -240,10 +254,10 @@ class HostWindow(QMainWindow): | |||
| #self.ui.splitter.splitterMoved.connect(self.slot_splitterMoved) | |||
| #self.ui.cb_disk.currentIndexChanged.connect(self.slot_diskFolderChanged) | |||
| #self.ui.b_disk_add.clicked.connect(self.slot_diskFolderAdd) | |||
| #self.ui.b_disk_remove.clicked.connect(self.slot_diskFolderRemove) | |||
| #self.ui.fileTreeView.doubleClicked.connect(self.slot_fileTreeDoubleClicked) | |||
| self.ui.cb_disk.currentIndexChanged.connect(self.slot_diskFolderChanged) | |||
| self.ui.b_disk_add.clicked.connect(self.slot_diskFolderAdd) | |||
| self.ui.b_disk_remove.clicked.connect(self.slot_diskFolderRemove) | |||
| self.ui.fileTreeView.doubleClicked.connect(self.slot_fileTreeDoubleClicked) | |||
| self.DebugCallback.connect(self.slot_handleDebugCallback) | |||
| self.PluginAddedCallback.connect(self.slot_handlePluginAddedCallback) | |||
| @@ -277,6 +291,20 @@ class HostWindow(QMainWindow): | |||
| dialog = CarlaSettingsW(self, hasCanvas, hasCanvasGL) | |||
| return dialog.exec_() | |||
| def setupContainer(self, showMiniCanvas): | |||
| if showMiniCanvas: | |||
| CARLA_DEFAULT_CANVAS_WIDTH = 3100 | |||
| CARLA_DEFAULT_CANVAS_HEIGHT = 2400 | |||
| self.ui.miniCanvasPreview.setRealParent(self) | |||
| #self.ui.miniCanvasPreview.setViewTheme(patchcanvas.canvas.theme.canvas_bg, patchcanvas.canvas.theme.rubberband_brush, patchcanvas.canvas.theme.rubberband_pen.color()) | |||
| self.ui.miniCanvasPreview.init(self.fContainer.scene, CARLA_DEFAULT_CANVAS_WIDTH, CARLA_DEFAULT_CANVAS_HEIGHT, self.fSavedSettings["UseCustomMiniCanvasPaint"]) | |||
| else: | |||
| self.ui.miniCanvasPreview.hide() | |||
| self.ui.mainwidget.hide() | |||
| self.ui.splitter.insertWidget(0, self.fContainer) | |||
| del self.ui.mainwidget | |||
| # ----------------------------------------------------------------- | |||
| # Internal stuff (files) | |||
| @@ -521,16 +549,16 @@ class HostWindow(QMainWindow): | |||
| #if settings.contains("SplitterState"): | |||
| #self.ui.splitter.restoreState(settings.value("SplitterState", "")) | |||
| #else: | |||
| #self.ui.splitter.setSizes([99999, 210]) | |||
| self.ui.splitter.setSizes([99999, 210]) | |||
| #diskFolders = toList(settings.value("DiskFolders", [HOME])) | |||
| diskFolders = toList(settings.value("DiskFolders", [HOME])) | |||
| #self.ui.cb_disk.setItemData(0, HOME) | |||
| self.ui.cb_disk.setItemData(0, HOME) | |||
| #for i in range(len(diskFolders)): | |||
| #if i == 0: continue | |||
| #folder = diskFolders[i] | |||
| #self.ui.cb_disk.addItem(os.path.basename(folder), folder) | |||
| for i in range(len(diskFolders)): | |||
| if i == 0: continue | |||
| folder = diskFolders[i] | |||
| self.ui.cb_disk.addItem(os.path.basename(folder), folder) | |||
| if MACOS and not settings.value("Main/UseProTheme", True, type=bool): | |||
| self.setUnifiedTitleAndToolBarOnMac(True) | |||
| @@ -601,17 +629,17 @@ class HostWindow(QMainWindow): | |||
| settings = QSettings() | |||
| settings.setValue("Geometry", self.saveGeometry()) | |||
| #settings.setValue("SplitterState", self.ui.splitter.saveState()) | |||
| settings.setValue("SplitterState", self.ui.splitter.saveState()) | |||
| settings.setValue("ShowToolbar", self.ui.toolBar.isVisible()) | |||
| #settings.setValue("HorizontalScrollBarValue", self.ui.graphicsView.horizontalScrollBar().value()) | |||
| #settings.setValue("VerticalScrollBarValue", self.ui.graphicsView.verticalScrollBar().value()) | |||
| #diskFolders = [] | |||
| diskFolders = [] | |||
| #for i in range(self.ui.cb_disk.count()): | |||
| #diskFolders.append(self.ui.cb_disk.itemData(i)) | |||
| for i in range(self.ui.cb_disk.count()): | |||
| diskFolders.append(self.ui.cb_disk.itemData(i)) | |||
| #settings.setValue("DiskFolders", diskFolders) | |||
| settings.setValue("DiskFolders", diskFolders) | |||
| self.fContainer.saveSettings(settings) | |||
| @@ -823,6 +851,54 @@ class HostWindow(QMainWindow): | |||
| # ----------------------------------------------------------------- | |||
| @pyqtSlot(int) | |||
| def slot_diskFolderChanged(self, index): | |||
| if index < 0: | |||
| return | |||
| elif index == 0: | |||
| filename = HOME | |||
| self.ui.b_disk_remove.setEnabled(False) | |||
| else: | |||
| filename = self.ui.cb_disk.itemData(index) | |||
| self.ui.b_disk_remove.setEnabled(True) | |||
| self.fDirModel.setRootPath(filename) | |||
| self.ui.fileTreeView.setRootIndex(self.fDirModel.index(filename)) | |||
| @pyqtSlot() | |||
| def slot_diskFolderAdd(self): | |||
| newPath = QFileDialog.getExistingDirectory(self, self.tr("New Folder"), "", QFileDialog.ShowDirsOnly) | |||
| if newPath: | |||
| if newPath[-1] == os.sep: | |||
| newPath = newPath[:-1] | |||
| self.ui.cb_disk.addItem(os.path.basename(newPath), newPath) | |||
| self.ui.cb_disk.setCurrentIndex(self.ui.cb_disk.count()-1) | |||
| self.ui.b_disk_remove.setEnabled(True) | |||
| @pyqtSlot() | |||
| def slot_diskFolderRemove(self): | |||
| index = self.ui.cb_disk.currentIndex() | |||
| if index <= 0: | |||
| return | |||
| self.ui.cb_disk.removeItem(index) | |||
| if self.ui.cb_disk.currentIndex() == 0: | |||
| self.ui.b_disk_remove.setEnabled(False) | |||
| @pyqtSlot(QModelIndex) | |||
| def slot_fileTreeDoubleClicked(self, modelIndex): | |||
| filename = self.fDirModel.filePath(modelIndex) | |||
| if not Carla.host.load_filename(filename): | |||
| CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), | |||
| self.tr("Failed to load file"), | |||
| cString(Carla.host.get_last_error()), QMessageBox.Ok, QMessageBox.Ok) | |||
| # ----------------------------------------------------------------- | |||
| @pyqtSlot(int, int, int, float, str) | |||
| def slot_handleDebugCallback(self, pluginId, value1, value2, value3, valueStr): | |||
| print("DEBUG:", pluginId, value1, value2, value3, valueStr) | |||
| @@ -76,22 +76,22 @@ class CarlaRackW(QListWidget): | |||
| #self.setMnimumWidth(800) | |||
| self.setSortingEnabled(False) | |||
| app = QApplication.instance() | |||
| pal1 = app.palette().base().color() | |||
| pal2 = app.palette().button().color() | |||
| col1 = "stop:0 rgb(%i, %i, %i)" % (pal1.red(), pal1.green(), pal1.blue()) | |||
| col2 = "stop:1 rgb(%i, %i, %i)" % (pal2.red(), pal2.green(), pal2.blue()) | |||
| self.setStyleSheet(""" | |||
| QListWidget { | |||
| background-color: qlineargradient(spread:pad, | |||
| x1:0.0, y1:0.0, | |||
| x2:0.2, y2:1.0, | |||
| %s, | |||
| %s | |||
| ); | |||
| } | |||
| """ % (col1, col2)) | |||
| #app = QApplication.instance() | |||
| #pal1 = app.palette().base().color() | |||
| #pal2 = app.palette().button().color() | |||
| #col1 = "stop:0 rgb(%i, %i, %i)" % (pal1.red(), pal1.green(), pal1.blue()) | |||
| #col2 = "stop:1 rgb(%i, %i, %i)" % (pal2.red(), pal2.green(), pal2.blue()) | |||
| #self.setStyleSheet(""" | |||
| #QListWidget { | |||
| #background-color: qlineargradient(spread:pad, | |||
| #x1:0.0, y1:0.0, | |||
| #x2:0.2, y2:1.0, | |||
| #%s, | |||
| #%s | |||
| #); | |||
| #} | |||
| #""" % (col1, col2)) | |||
| # ------------------------------------------------------------- | |||
| # Connect actions to functions | |||
| @@ -136,6 +136,7 @@ | |||
| #define CARLA_SAFE_ASSERT_INT(cond, value) if (cond) pass(); else carla_assert_int (#cond, __FILE__, __LINE__, value); | |||
| #define CARLA_SAFE_ASSERT_INT2(cond, v1, v2) if (cond) pass(); else carla_assert_int2(#cond, __FILE__, __LINE__, v1, v2); | |||
| #define CARLA_SAFE_ASSERT_BREAK(cond) if (cond) pass(); else { carla_assert(#cond, __FILE__, __LINE__); break; } | |||
| #define CARLA_SAFE_ASSERT_CONTINUE(cond) if (cond) pass(); else { carla_assert(#cond, __FILE__, __LINE__); continue; } | |||
| #define CARLA_SAFE_ASSERT_RETURN(cond, ret) if (cond) pass(); else { carla_assert(#cond, __FILE__, __LINE__); return ret; } | |||
| @@ -333,11 +333,11 @@ public: | |||
| height = 1; | |||
| #ifndef DGL_OS_MAC | |||
| fView->width = width; | |||
| fView->height = height; | |||
| if (fView->width == (int)width && fView->height == (int)height && ! forced) | |||
| return; | |||
| fView->width = width; | |||
| fView->height = height; | |||
| #endif | |||
| #if DGL_OS_WINDOWS | |||
| @@ -99,7 +99,7 @@ class CanvasPreviewFrame(QFrame): | |||
| def setViewScale(self, scale): | |||
| self.fScale = scale | |||
| QTimer.singleShot(0, self.fRealParent, SLOT("slot_miniCanvasCheckAll()")) | |||
| #QTimer.singleShot(0, self.fRealParent, SLOT("slot_miniCanvasCheckAll()")) | |||
| def setViewSize(self, width, height): | |||
| self.fViewRect[iWidth] = width * self.fFakeWidth | |||
| @@ -139,7 +139,7 @@ class CanvasPreviewFrame(QFrame): | |||
| self.fViewRect[iY] = y + self.fRenderSource.y() | |||
| self.update() | |||
| self.emit(SIGNAL("miniCanvasMoved(double, double)"), x * self.fScale / self.fFakeWidth, y * self.fScale / self.fFakeHeight) | |||
| #self.emit(SIGNAL("miniCanvasMoved(double, double)"), x * self.fScale / self.fFakeWidth, y * self.fScale / self.fFakeHeight) | |||
| def mousePressEvent(self, event): | |||
| if event.button() == Qt.LeftButton: | |||
| @@ -178,7 +178,7 @@ class CanvasPreviewFrame(QFrame): | |||
| else: | |||
| painter.setBrush(self.fViewBg) | |||
| painter.setPen(self.fViewBg) | |||
| painter.drawRoundRect(2, 2, self.width()-6, self.height()-6, 3, 3) | |||
| painter.drawRoundedRect(2, 2, self.width()-6, self.height()-6, 3, 3) | |||
| self.fScene.render(painter, self.fRenderSource, self.fRenderTarget, Qt.KeepAspectRatio) | |||
| @@ -201,6 +201,6 @@ class CanvasPreviewFrame(QFrame): | |||
| def resizeEvent(self, event): | |||
| self.fRenderSource = self.getRenderSource() | |||
| if self.fRealParent: | |||
| QTimer.singleShot(0, self.fRealParent, SLOT("slot_miniCanvasCheckAll()")) | |||
| QFrame.resizeEvent(self, event) | |||
| #if self.fRealParent: | |||
| #QTimer.singleShot(0, self.fRealParent, SLOT("slot_miniCanvasCheckAll()")) | |||
| #QFrame.resizeEvent(self, event) | |||