| @@ -271,6 +271,7 @@ RES = \ | |||||
| bin/resources/pixmapkeyboard.py \ | bin/resources/pixmapkeyboard.py \ | ||||
| bin/resources/resources_rc.py \ | bin/resources/resources_rc.py \ | ||||
| bin/resources/ui_carla_about.py \ | bin/resources/ui_carla_about.py \ | ||||
| bin/resources/ui_carla_about_juce.py \ | |||||
| bin/resources/ui_carla_database.py \ | bin/resources/ui_carla_database.py \ | ||||
| bin/resources/ui_carla_edit.py \ | bin/resources/ui_carla_edit.py \ | ||||
| bin/resources/ui_carla_host.py \ | bin/resources/ui_carla_host.py \ | ||||
| @@ -309,6 +310,7 @@ bin/resources/%.py: source/%.py | |||||
| UIs = \ | UIs = \ | ||||
| source/ui_carla_control.py \ | source/ui_carla_control.py \ | ||||
| source/ui_carla_about.py \ | source/ui_carla_about.py \ | ||||
| source/ui_carla_about_juce.py \ | |||||
| source/ui_carla_database.py \ | source/ui_carla_database.py \ | ||||
| source/ui_carla_edit.py \ | source/ui_carla_edit.py \ | ||||
| source/ui_carla_host.py \ | source/ui_carla_host.py \ | ||||
| @@ -521,6 +523,7 @@ install: | |||||
| $(LINK) $(PREFIX)/share/carla/pixmapkeyboard.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | $(LINK) $(PREFIX)/share/carla/pixmapkeyboard.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | ||||
| $(LINK) $(PREFIX)/share/carla/resources_rc.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | $(LINK) $(PREFIX)/share/carla/resources_rc.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | ||||
| $(LINK) $(PREFIX)/share/carla/ui_carla_about.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | $(LINK) $(PREFIX)/share/carla/ui_carla_about.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | ||||
| $(LINK) $(PREFIX)/share/carla/ui_carla_about_juce.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | |||||
| $(LINK) $(PREFIX)/share/carla/ui_carla_database.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | $(LINK) $(PREFIX)/share/carla/ui_carla_database.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | ||||
| $(LINK) $(PREFIX)/share/carla/ui_carla_edit.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | $(LINK) $(PREFIX)/share/carla/ui_carla_edit.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | ||||
| $(LINK) $(PREFIX)/share/carla/ui_carla_host.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | $(LINK) $(PREFIX)/share/carla/ui_carla_host.py $(DESTDIR)$(PREFIX)/share/carla/resources/ | ||||
| @@ -38,6 +38,7 @@ | |||||
| <file>48x48/canvas.png</file> | <file>48x48/canvas.png</file> | ||||
| <file>48x48/jack.png</file> | <file>48x48/jack.png</file> | ||||
| <file>48x48/juce.png</file> | |||||
| <file>48x48/folder.png</file> | <file>48x48/folder.png</file> | ||||
| <file>48x48/carla.png</file> | <file>48x48/carla.png</file> | ||||
| @@ -0,0 +1,186 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <ui version="4.0"> | |||||
| <class>JuceAboutW</class> | |||||
| <widget class="QDialog" name="JuceAboutW"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>0</x> | |||||
| <y>0</y> | |||||
| <width>463</width> | |||||
| <height>244</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="windowTitle"> | |||||
| <string>About JUCE</string> | |||||
| </property> | |||||
| <layout class="QGridLayout" name="gridLayout"> | |||||
| <item row="0" column="0"> | |||||
| <layout class="QVBoxLayout" name="verticalLayout"> | |||||
| <item> | |||||
| <widget class="QLabel" name="icon"> | |||||
| <property name="minimumSize"> | |||||
| <size> | |||||
| <width>48</width> | |||||
| <height>48</height> | |||||
| </size> | |||||
| </property> | |||||
| <property name="maximumSize"> | |||||
| <size> | |||||
| <width>48</width> | |||||
| <height>48</height> | |||||
| </size> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string/> | |||||
| </property> | |||||
| <property name="pixmap"> | |||||
| <pixmap resource="../resources.qrc">:/48x48/juce.png</pixmap> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | |||||
| <spacer name="verticalSpacer"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Vertical</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>20</width> | |||||
| <height>40</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| </layout> | |||||
| </item> | |||||
| <item row="0" column="1"> | |||||
| <layout class="QVBoxLayout" name="verticalLayout_2"> | |||||
| <item> | |||||
| <widget class="QLabel" name="l_text1"> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>8</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string><b>About JUCE</b></string> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | |||||
| <spacer name="verticalSpacer_3"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Vertical</enum> | |||||
| </property> | |||||
| <property name="sizeType"> | |||||
| <enum>QSizePolicy::Fixed</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>10</width> | |||||
| <height>10</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| <item> | |||||
| <widget class="QLabel" name="l_text2"> | |||||
| <property name="text"> | |||||
| <string>This program uses JUCE version 3.x.x.</string> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | |||||
| <spacer name="verticalSpacer_4"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Vertical</enum> | |||||
| </property> | |||||
| <property name="sizeType"> | |||||
| <enum>QSizePolicy::Fixed</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>10</width> | |||||
| <height>10</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| <item> | |||||
| <widget class="QLabel" name="l_text3"> | |||||
| <property name="text"> | |||||
| <string>JUCE (Jules' Utility Class Extensions) is an all-encompassing C++ class library for developing cross-platform software. | |||||
| It contains pretty much everything you're likely to need to create most applications, and is particularly well-suited for building highly-customised GUIs, and for handling graphics and sound. | |||||
| Most JUCE modules are shared under the GNU Public Licence (GPLv2, v3, and the AGPLv3). | |||||
| One module (the juce_core module) is permissively licensed under the ISC.</string> | |||||
| </property> | |||||
| <property name="wordWrap"> | |||||
| <bool>true</bool> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | |||||
| <spacer name="verticalSpacer_2"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Vertical</enum> | |||||
| </property> | |||||
| <property name="sizeType"> | |||||
| <enum>QSizePolicy::Expanding</enum> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| </layout> | |||||
| </item> | |||||
| <item row="1" column="0" colspan="2"> | |||||
| <widget class="QDialogButtonBox" name="buttonBox"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Horizontal</enum> | |||||
| </property> | |||||
| <property name="standardButtons"> | |||||
| <set>QDialogButtonBox::Ok</set> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| </layout> | |||||
| </widget> | |||||
| <resources> | |||||
| <include location="../resources.qrc"/> | |||||
| <include location="../resources.qrc"/> | |||||
| </resources> | |||||
| <connections> | |||||
| <connection> | |||||
| <sender>buttonBox</sender> | |||||
| <signal>accepted()</signal> | |||||
| <receiver>JuceAboutW</receiver> | |||||
| <slot>accept()</slot> | |||||
| <hints> | |||||
| <hint type="sourcelabel"> | |||||
| <x>248</x> | |||||
| <y>254</y> | |||||
| </hint> | |||||
| <hint type="destinationlabel"> | |||||
| <x>157</x> | |||||
| <y>274</y> | |||||
| </hint> | |||||
| </hints> | |||||
| </connection> | |||||
| <connection> | |||||
| <sender>buttonBox</sender> | |||||
| <signal>rejected()</signal> | |||||
| <receiver>JuceAboutW</receiver> | |||||
| <slot>reject()</slot> | |||||
| <hints> | |||||
| <hint type="sourcelabel"> | |||||
| <x>316</x> | |||||
| <y>260</y> | |||||
| </hint> | |||||
| <hint type="destinationlabel"> | |||||
| <x>286</x> | |||||
| <y>274</y> | |||||
| </hint> | |||||
| </hints> | |||||
| </connection> | |||||
| </connections> | |||||
| </ui> | |||||
| @@ -175,7 +175,7 @@ | |||||
| <x>0</x> | <x>0</x> | ||||
| <y>0</y> | <y>0</y> | ||||
| <width>688</width> | <width>688</width> | ||||
| <height>19</height> | |||||
| <height>17</height> | |||||
| </rect> | </rect> | ||||
| </property> | </property> | ||||
| <widget class="QMenu" name="menu_File"> | <widget class="QMenu" name="menu_File"> | ||||
| @@ -265,6 +265,7 @@ | |||||
| <string>&Help</string> | <string>&Help</string> | ||||
| </property> | </property> | ||||
| <addaction name="act_help_about"/> | <addaction name="act_help_about"/> | ||||
| <addaction name="act_help_about_juce"/> | |||||
| <addaction name="act_help_about_qt"/> | <addaction name="act_help_about_qt"/> | ||||
| </widget> | </widget> | ||||
| <addaction name="menu_File"/> | <addaction name="menu_File"/> | ||||
| @@ -646,6 +647,11 @@ | |||||
| <string>Show Canvas &Keyboard</string> | <string>Show Canvas &Keyboard</string> | ||||
| </property> | </property> | ||||
| </action> | </action> | ||||
| <action name="act_help_about_juce"> | |||||
| <property name="text"> | |||||
| <string>About &JUCE</string> | |||||
| </property> | |||||
| </action> | |||||
| </widget> | </widget> | ||||
| <customwidgets> | <customwidgets> | ||||
| <customwidget> | <customwidget> | ||||
| @@ -353,6 +353,11 @@ typedef struct _CarlaTransportInfo { | |||||
| */ | */ | ||||
| CARLA_EXPORT const char* carla_get_complete_license_text(); | CARLA_EXPORT const char* carla_get_complete_license_text(); | ||||
| /*! | |||||
| * Get the juce version used in the current Carla build. | |||||
| */ | |||||
| CARLA_EXPORT const char* carla_get_juce_version(); | |||||
| /*! | /*! | ||||
| * Get all the supported file extensions in carla_load_file(). | * Get all the supported file extensions in carla_load_file(). | ||||
| * Returned string uses this syntax: | * Returned string uses this syntax: | ||||
| @@ -512,6 +512,23 @@ const char* carla_get_complete_license_text() | |||||
| return retText; | return retText; | ||||
| } | } | ||||
| const char* carla_get_juce_version() | |||||
| { | |||||
| carla_debug("carla_get_juce_version()"); | |||||
| static CarlaString retVersion; | |||||
| if (retVersion.isEmpty()) | |||||
| { | |||||
| if (const char* const version = juce::SystemStats::getJUCEVersion().toRawUTF8()) | |||||
| retVersion = version+6; | |||||
| else | |||||
| retVersion = "3.0"; | |||||
| } | |||||
| return retVersion; | |||||
| } | |||||
| const char* carla_get_supported_file_extensions() | const char* carla_get_supported_file_extensions() | ||||
| { | { | ||||
| carla_debug("carla_get_supported_file_extensions()"); | carla_debug("carla_get_supported_file_extensions()"); | ||||
| @@ -1224,6 +1224,10 @@ class Host(object): | |||||
| def get_complete_license_text(self): | def get_complete_license_text(self): | ||||
| return charPtrToString(self.lib.carla_get_complete_license_text()) | return charPtrToString(self.lib.carla_get_complete_license_text()) | ||||
| # Get the juce version used in the current Carla build. | |||||
| def get_juce_version(self): | |||||
| return charPtrToString(self.lib.carla_get_juce_version()) | |||||
| # Get all the supported file extensions in carla_load_file(). | # Get all the supported file extensions in carla_load_file(). | ||||
| # Returned string uses this syntax: | # Returned string uses this syntax: | ||||
| # @code | # @code | ||||
| @@ -1742,6 +1746,9 @@ class Host(object): | |||||
| self.lib.carla_get_complete_license_text.argtypes = None | self.lib.carla_get_complete_license_text.argtypes = None | ||||
| self.lib.carla_get_complete_license_text.restype = c_char_p | self.lib.carla_get_complete_license_text.restype = c_char_p | ||||
| self.lib.carla_get_juce_version.argtypes = None | |||||
| self.lib.carla_get_juce_version.restype = c_char_p | |||||
| self.lib.carla_get_supported_file_extensions.argtypes = None | self.lib.carla_get_supported_file_extensions.argtypes = None | ||||
| self.lib.carla_get_supported_file_extensions.restype = c_char_p | self.lib.carla_get_supported_file_extensions.restype = c_char_p | ||||
| @@ -179,6 +179,7 @@ class HostWindow(QMainWindow): | |||||
| self.ui.act_file_quit.setMenuRole(QAction.QuitRole) | self.ui.act_file_quit.setMenuRole(QAction.QuitRole) | ||||
| self.ui.act_settings_configure.setMenuRole(QAction.PreferencesRole) | self.ui.act_settings_configure.setMenuRole(QAction.PreferencesRole) | ||||
| self.ui.act_help_about.setMenuRole(QAction.AboutRole) | self.ui.act_help_about.setMenuRole(QAction.AboutRole) | ||||
| self.ui.act_help_about_juce.setMenuRole(QAction.AboutQtRole) | |||||
| self.ui.act_help_about_qt.setMenuRole(QAction.AboutQtRole) | self.ui.act_help_about_qt.setMenuRole(QAction.AboutQtRole) | ||||
| self.ui.menu_Settings.setTitle("Panels") | self.ui.menu_Settings.setTitle("Panels") | ||||
| #self.ui.menu_Help.hide() | #self.ui.menu_Help.hide() | ||||
| @@ -306,6 +307,7 @@ class HostWindow(QMainWindow): | |||||
| self.ui.act_transport_forwards.triggered.connect(self.slot_transportForwards) | self.ui.act_transport_forwards.triggered.connect(self.slot_transportForwards) | ||||
| self.ui.act_help_about.triggered.connect(self.slot_aboutCarla) | self.ui.act_help_about.triggered.connect(self.slot_aboutCarla) | ||||
| self.ui.act_help_about_juce.triggered.connect(self.slot_aboutJuce) | |||||
| self.ui.act_help_about_qt.triggered.connect(self.slot_aboutQt) | self.ui.act_help_about_qt.triggered.connect(self.slot_aboutQt) | ||||
| self.ui.cb_disk.currentIndexChanged.connect(self.slot_diskFolderChanged) | self.ui.cb_disk.currentIndexChanged.connect(self.slot_diskFolderChanged) | ||||
| @@ -1007,6 +1009,10 @@ class HostWindow(QMainWindow): | |||||
| def slot_aboutCarla(self): | def slot_aboutCarla(self): | ||||
| CarlaAboutW(self).exec_() | CarlaAboutW(self).exec_() | ||||
| @pyqtSlot() | |||||
| def slot_aboutJuce(self): | |||||
| JuceAboutW(self).exec_() | |||||
| @pyqtSlot() | @pyqtSlot() | ||||
| def slot_aboutQt(self): | def slot_aboutQt(self): | ||||
| QApplication.instance().aboutQt() | QApplication.instance().aboutQt() | ||||
| @@ -37,6 +37,7 @@ else: | |||||
| # Imports (Custom) | # Imports (Custom) | ||||
| import ui_carla_about | import ui_carla_about | ||||
| import ui_carla_about_juce | |||||
| import ui_carla_edit | import ui_carla_edit | ||||
| import ui_carla_parameter | import ui_carla_parameter | ||||
| @@ -120,7 +121,6 @@ class CarlaAboutW(QDialog): | |||||
| self.ui.l_extended.hide() | self.ui.l_extended.hide() | ||||
| self.ui.tabWidget.removeTab(1) | self.ui.tabWidget.removeTab(1) | ||||
| self.ui.tabWidget.removeTab(1) | self.ui.tabWidget.removeTab(1) | ||||
| self.adjustSize() | |||||
| else: | else: | ||||
| self.ui.l_extended.setText(gCarla.host.get_complete_license_text()) | self.ui.l_extended.setText(gCarla.host.get_complete_license_text()) | ||||
| @@ -188,6 +188,27 @@ class CarlaAboutW(QDialog): | |||||
| "</ul>")) | "</ul>")) | ||||
| self.ui.l_vst.setText(self.tr("<p>About 85% complete (missing vst bank/presets and some minor stuff)</p>")) | self.ui.l_vst.setText(self.tr("<p>About 85% complete (missing vst bank/presets and some minor stuff)</p>")) | ||||
| self.adjustSize() | |||||
| self.setFixedSize(self.size()) | |||||
| def done(self, r): | |||||
| QDialog.done(self, r) | |||||
| self.close() | |||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # JUCE About dialog | |||||
| class JuceAboutW(QDialog): | |||||
| def __init__(self, parent): | |||||
| QDialog.__init__(self, parent) | |||||
| self.ui = ui_carla_about_juce.Ui_JuceAboutW() | |||||
| self.ui.setupUi(self) | |||||
| self.ui.l_text2.setText(self.tr("This program uses JUCE version %s." % (gCarla.host.get_juce_version() if gCarla.host is not None else "3.0"))) | |||||
| self.adjustSize() | |||||
| self.setFixedSize(self.size()) | |||||
| def done(self, r): | def done(self, r): | ||||
| QDialog.done(self, r) | QDialog.done(self, r) | ||||
| self.close() | self.close() | ||||