@@ -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() | ||||