| @@ -587,6 +587,13 @@ | |||
| </property> | |||
| </widget> | |||
| </item> | |||
| <item> | |||
| <widget class="QCheckBox" name="cb_canvas_auto_select"> | |||
| <property name="text"> | |||
| <string>Auto-select items on hover</string> | |||
| </property> | |||
| </widget> | |||
| </item> | |||
| <item> | |||
| <widget class="QCheckBox" name="cb_canvas_eyecandy"> | |||
| <property name="text"> | |||
| @@ -1410,7 +1417,7 @@ This mode is not available for VST plugins.</string> | |||
| <include location="../resources.qrc"/> | |||
| <include location="../resources.qrc"/> | |||
| <include location="../resources.qrc"/> | |||
| <include location="../../../Carla-stable/resources/resources.qrc"/> | |||
| <include location="../resources.qrc"/> | |||
| </resources> | |||
| <connections> | |||
| <connection> | |||
| @@ -861,11 +861,12 @@ class HostWindow(QMainWindow): | |||
| def setupCanvas(self): | |||
| pOptions = patchcanvas.options_t() | |||
| pOptions.theme_name = self.fSavedSettings[CARLA_KEY_CANVAS_THEME] | |||
| pOptions.auto_hide_groups = self.fSavedSettings[CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS] | |||
| pOptions.use_bezier_lines = self.fSavedSettings[CARLA_KEY_CANVAS_USE_BEZIER_LINES] | |||
| pOptions.antialiasing = self.fSavedSettings[CARLA_KEY_CANVAS_ANTIALIASING] | |||
| pOptions.eyecandy = self.fSavedSettings[CARLA_KEY_CANVAS_EYE_CANDY] | |||
| pOptions.theme_name = self.fSavedSettings[CARLA_KEY_CANVAS_THEME] | |||
| pOptions.auto_hide_groups = self.fSavedSettings[CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS] | |||
| pOptions.auto_select_items = self.fSavedSettings[CARLA_KEY_CANVAS_AUTO_SELECT_ITEMS] | |||
| pOptions.use_bezier_lines = self.fSavedSettings[CARLA_KEY_CANVAS_USE_BEZIER_LINES] | |||
| pOptions.antialiasing = self.fSavedSettings[CARLA_KEY_CANVAS_ANTIALIASING] | |||
| pOptions.eyecandy = self.fSavedSettings[CARLA_KEY_CANVAS_EYE_CANDY] | |||
| pFeatures = patchcanvas.features_t() | |||
| pFeatures.group_info = False | |||
| @@ -1272,19 +1273,20 @@ class HostWindow(QMainWindow): | |||
| # TODO - complete this | |||
| self.fSavedSettings = { | |||
| CARLA_KEY_MAIN_PROJECT_FOLDER: settings.value(CARLA_KEY_MAIN_PROJECT_FOLDER, CARLA_DEFAULT_MAIN_PROJECT_FOLDER, type=str), | |||
| CARLA_KEY_MAIN_REFRESH_INTERVAL: settings.value(CARLA_KEY_MAIN_REFRESH_INTERVAL, CARLA_DEFAULT_MAIN_REFRESH_INTERVAL, type=int), | |||
| CARLA_KEY_MAIN_USE_CUSTOM_SKINS: settings.value(CARLA_KEY_MAIN_USE_CUSTOM_SKINS, CARLA_DEFAULT_MAIN_USE_CUSTOM_SKINS, type=bool), | |||
| CARLA_KEY_CANVAS_THEME: settings.value(CARLA_KEY_CANVAS_THEME, CARLA_DEFAULT_CANVAS_THEME, type=str), | |||
| CARLA_KEY_CANVAS_SIZE: settings.value(CARLA_KEY_CANVAS_SIZE, CARLA_DEFAULT_CANVAS_SIZE, type=str), | |||
| CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS: settings.value(CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS, CARLA_DEFAULT_CANVAS_AUTO_HIDE_GROUPS, type=bool), | |||
| CARLA_KEY_CANVAS_USE_BEZIER_LINES: settings.value(CARLA_KEY_CANVAS_USE_BEZIER_LINES, CARLA_DEFAULT_CANVAS_USE_BEZIER_LINES, type=bool), | |||
| CARLA_KEY_CANVAS_EYE_CANDY: settings.value(CARLA_KEY_CANVAS_EYE_CANDY, CARLA_DEFAULT_CANVAS_EYE_CANDY, type=int), | |||
| CARLA_KEY_CANVAS_USE_OPENGL: settings.value(CARLA_KEY_CANVAS_USE_OPENGL, CARLA_DEFAULT_CANVAS_USE_OPENGL, type=bool), | |||
| CARLA_KEY_CANVAS_ANTIALIASING: settings.value(CARLA_KEY_CANVAS_ANTIALIASING, CARLA_DEFAULT_CANVAS_ANTIALIASING, type=int), | |||
| CARLA_KEY_CANVAS_HQ_ANTIALIASING: settings.value(CARLA_KEY_CANVAS_HQ_ANTIALIASING, CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING, type=bool), | |||
| CARLA_KEY_CUSTOM_PAINTING: (settings.value(CARLA_KEY_MAIN_USE_PRO_THEME, True, type=bool) and | |||
| settings.value(CARLA_KEY_MAIN_PRO_THEME_COLOR, "Black", type=str).lower() == "black") | |||
| CARLA_KEY_MAIN_PROJECT_FOLDER: settings.value(CARLA_KEY_MAIN_PROJECT_FOLDER, CARLA_DEFAULT_MAIN_PROJECT_FOLDER, type=str), | |||
| CARLA_KEY_MAIN_REFRESH_INTERVAL: settings.value(CARLA_KEY_MAIN_REFRESH_INTERVAL, CARLA_DEFAULT_MAIN_REFRESH_INTERVAL, type=int), | |||
| CARLA_KEY_MAIN_USE_CUSTOM_SKINS: settings.value(CARLA_KEY_MAIN_USE_CUSTOM_SKINS, CARLA_DEFAULT_MAIN_USE_CUSTOM_SKINS, type=bool), | |||
| CARLA_KEY_CANVAS_THEME: settings.value(CARLA_KEY_CANVAS_THEME, CARLA_DEFAULT_CANVAS_THEME, type=str), | |||
| CARLA_KEY_CANVAS_SIZE: settings.value(CARLA_KEY_CANVAS_SIZE, CARLA_DEFAULT_CANVAS_SIZE, type=str), | |||
| CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS: settings.value(CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS, CARLA_DEFAULT_CANVAS_AUTO_HIDE_GROUPS, type=bool), | |||
| CARLA_KEY_CANVAS_AUTO_SELECT_ITEMS: settings.value(CARLA_KEY_CANVAS_AUTO_SELECT_ITEMS, CARLA_DEFAULT_CANVAS_AUTO_SELECT_ITEMS, type=bool), | |||
| CARLA_KEY_CANVAS_USE_BEZIER_LINES: settings.value(CARLA_KEY_CANVAS_USE_BEZIER_LINES, CARLA_DEFAULT_CANVAS_USE_BEZIER_LINES, type=bool), | |||
| CARLA_KEY_CANVAS_EYE_CANDY: settings.value(CARLA_KEY_CANVAS_EYE_CANDY, CARLA_DEFAULT_CANVAS_EYE_CANDY, type=int), | |||
| CARLA_KEY_CANVAS_USE_OPENGL: settings.value(CARLA_KEY_CANVAS_USE_OPENGL, CARLA_DEFAULT_CANVAS_USE_OPENGL, type=bool), | |||
| CARLA_KEY_CANVAS_ANTIALIASING: settings.value(CARLA_KEY_CANVAS_ANTIALIASING, CARLA_DEFAULT_CANVAS_ANTIALIASING, type=int), | |||
| CARLA_KEY_CANVAS_HQ_ANTIALIASING : settings.value(CARLA_KEY_CANVAS_HQ_ANTIALIASING, CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING, type=bool), | |||
| CARLA_KEY_CUSTOM_PAINTING: (settings.value(CARLA_KEY_MAIN_USE_PRO_THEME, True, type=bool) and | |||
| settings.value(CARLA_KEY_MAIN_PRO_THEME_COLOR, "Black", type=str).lower() == "black") | |||
| } | |||
| self.fMiniCanvasUpdateTimeout = 1000 if self.fSavedSettings[CARLA_KEY_CANVAS_EYE_CANDY] == patchcanvas.EYECANDY_FULL else 0 | |||
| @@ -320,6 +320,7 @@ class CarlaSettingsW(QDialog): | |||
| self.ui.cb_canvas_size.setCurrentIndex(self.ui.cb_canvas_size.findText(settings.value(CARLA_KEY_CANVAS_SIZE, CARLA_DEFAULT_CANVAS_SIZE, type=str))) | |||
| self.ui.cb_canvas_bezier_lines.setChecked(settings.value(CARLA_KEY_CANVAS_USE_BEZIER_LINES, CARLA_DEFAULT_CANVAS_USE_BEZIER_LINES, type=bool)) | |||
| self.ui.cb_canvas_hide_groups.setChecked(settings.value(CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS, CARLA_DEFAULT_CANVAS_AUTO_HIDE_GROUPS, type=bool)) | |||
| self.ui.cb_canvas_auto_select.setChecked(settings.value(CARLA_KEY_CANVAS_AUTO_SELECT_ITEMS, CARLA_DEFAULT_CANVAS_AUTO_SELECT_ITEMS, type=bool)) | |||
| self.ui.cb_canvas_eyecandy.setCheckState(settings.value(CARLA_KEY_CANVAS_EYE_CANDY, CARLA_DEFAULT_CANVAS_EYE_CANDY, type=int)) | |||
| self.ui.cb_canvas_use_opengl.setChecked(settings.value(CARLA_KEY_CANVAS_USE_OPENGL, CARLA_DEFAULT_CANVAS_USE_OPENGL, type=bool) and self.ui.cb_canvas_use_opengl.isEnabled()) | |||
| self.ui.cb_canvas_render_aa.setCheckState(settings.value(CARLA_KEY_CANVAS_ANTIALIASING, CARLA_DEFAULT_CANVAS_ANTIALIASING, type=int)) | |||
| @@ -439,14 +440,15 @@ class CarlaSettingsW(QDialog): | |||
| # ---------------------------------------------------------------------------------------------------- | |||
| # Canvas | |||
| settings.setValue(CARLA_KEY_CANVAS_THEME, self.ui.cb_canvas_theme.currentText()) | |||
| settings.setValue(CARLA_KEY_CANVAS_SIZE, self.ui.cb_canvas_size.currentText()) | |||
| settings.setValue(CARLA_KEY_CANVAS_USE_BEZIER_LINES, self.ui.cb_canvas_bezier_lines.isChecked()) | |||
| settings.setValue(CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS, self.ui.cb_canvas_hide_groups.isChecked()) | |||
| settings.setValue(CARLA_KEY_CANVAS_EYE_CANDY, self.ui.cb_canvas_eyecandy.checkState()) # 0, 1, 2 match their enum variants | |||
| settings.setValue(CARLA_KEY_CANVAS_USE_OPENGL, self.ui.cb_canvas_use_opengl.isChecked()) | |||
| settings.setValue(CARLA_KEY_CANVAS_HQ_ANTIALIASING, self.ui.cb_canvas_render_hq_aa.isChecked()) | |||
| settings.setValue(CARLA_KEY_CANVAS_ANTIALIASING, self.ui.cb_canvas_render_aa.checkState()) # 0, 1, 2 match their enum variants | |||
| settings.setValue(CARLA_KEY_CANVAS_THEME, self.ui.cb_canvas_theme.currentText()) | |||
| settings.setValue(CARLA_KEY_CANVAS_SIZE, self.ui.cb_canvas_size.currentText()) | |||
| settings.setValue(CARLA_KEY_CANVAS_USE_BEZIER_LINES, self.ui.cb_canvas_bezier_lines.isChecked()) | |||
| settings.setValue(CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS, self.ui.cb_canvas_hide_groups.isChecked()) | |||
| settings.setValue(CARLA_KEY_CANVAS_AUTO_SELECT_ITEMS, self.ui.cb_canvas_auto_select.isChecked()) | |||
| settings.setValue(CARLA_KEY_CANVAS_EYE_CANDY, self.ui.cb_canvas_eyecandy.checkState()) # 0, 1, 2 match their enum variants | |||
| settings.setValue(CARLA_KEY_CANVAS_USE_OPENGL, self.ui.cb_canvas_use_opengl.isChecked()) | |||
| settings.setValue(CARLA_KEY_CANVAS_HQ_ANTIALIASING, self.ui.cb_canvas_render_hq_aa.isChecked()) | |||
| settings.setValue(CARLA_KEY_CANVAS_ANTIALIASING, self.ui.cb_canvas_render_aa.checkState()) # 0, 1, 2 match their enum variants | |||
| # ---------------------------------------------------------------------------------------------------- | |||
| # Engine | |||
| @@ -567,6 +569,7 @@ class CarlaSettingsW(QDialog): | |||
| self.ui.cb_canvas_size.setCurrentIndex(self.ui.cb_canvas_size.findText(CARLA_DEFAULT_CANVAS_SIZE)) | |||
| self.ui.cb_canvas_bezier_lines.setChecked(CARLA_DEFAULT_CANVAS_USE_BEZIER_LINES) | |||
| self.ui.cb_canvas_hide_groups.setChecked(CARLA_DEFAULT_CANVAS_AUTO_HIDE_GROUPS) | |||
| self.ui.cb_canvas_auto_select.setChecked(CARLA_DEFAULT_CANVAS_AUTO_SELECT_ITEMS) | |||
| self.ui.cb_canvas_eyecandy.setCheckState(Qt.PartiallyChecked) # CARLA_DEFAULT_CANVAS_EYE_CANDY | |||
| self.ui.cb_canvas_use_opengl.setChecked(CARLA_DEFAULT_CANVAS_USE_OPENGL and self.ui.cb_canvas_use_opengl.isEnabled()) | |||
| self.ui.cb_canvas_render_aa.setCheckState(Qt.PartiallyChecked) # CARLA_DEFAULT_CANVAS_ANTIALIASING | |||
| @@ -189,14 +189,15 @@ CARLA_KEY_MAIN_PRO_THEME_COLOR = "Main/ProThemeColor" # str | |||
| CARLA_KEY_MAIN_REFRESH_INTERVAL = "Main/RefreshInterval" # int | |||
| CARLA_KEY_MAIN_USE_CUSTOM_SKINS = "Main/UseCustomSkins" # bool | |||
| CARLA_KEY_CANVAS_THEME = "Canvas/Theme" # str | |||
| CARLA_KEY_CANVAS_SIZE = "Canvas/Size" # str "NxN" | |||
| CARLA_KEY_CANVAS_USE_BEZIER_LINES = "Canvas/UseBezierLines" # bool | |||
| CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS = "Canvas/AutoHideGroups" # bool | |||
| CARLA_KEY_CANVAS_EYE_CANDY = "Canvas/EyeCandy" # enum | |||
| CARLA_KEY_CANVAS_USE_OPENGL = "Canvas/UseOpenGL" # bool | |||
| CARLA_KEY_CANVAS_ANTIALIASING = "Canvas/Antialiasing" # enum | |||
| CARLA_KEY_CANVAS_HQ_ANTIALIASING = "Canvas/HQAntialiasing" # bool | |||
| CARLA_KEY_CANVAS_THEME = "Canvas/Theme" # str | |||
| CARLA_KEY_CANVAS_SIZE = "Canvas/Size" # str "NxN" | |||
| CARLA_KEY_CANVAS_USE_BEZIER_LINES = "Canvas/UseBezierLines" # bool | |||
| CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS = "Canvas/AutoHideGroups" # bool | |||
| CARLA_KEY_CANVAS_AUTO_SELECT_ITEMS = "Canvas/AutoSelectItems" # bool | |||
| CARLA_KEY_CANVAS_EYE_CANDY = "Canvas/EyeCandy" # enum | |||
| CARLA_KEY_CANVAS_USE_OPENGL = "Canvas/UseOpenGL" # bool | |||
| CARLA_KEY_CANVAS_ANTIALIASING = "Canvas/Antialiasing" # enum | |||
| CARLA_KEY_CANVAS_HQ_ANTIALIASING = "Canvas/HQAntialiasing" # bool | |||
| CARLA_KEY_ENGINE_DRIVER_PREFIX = "Engine/Driver-" | |||
| CARLA_KEY_ENGINE_AUDIO_DRIVER = "Engine/AudioDriver" # str | |||
| @@ -233,16 +234,17 @@ CARLA_DEFAULT_MAIN_REFRESH_INTERVAL = 20 | |||
| CARLA_DEFAULT_MAIN_USE_CUSTOM_SKINS = True | |||
| # Canvas | |||
| CARLA_DEFAULT_CANVAS_THEME = "Modern Dark" | |||
| CARLA_DEFAULT_CANVAS_SIZE = "3100x2400" | |||
| CARLA_DEFAULT_CANVAS_SIZE_WIDTH = 3100 | |||
| CARLA_DEFAULT_CANVAS_SIZE_HEIGHT = 2400 | |||
| CARLA_DEFAULT_CANVAS_USE_BEZIER_LINES = True | |||
| CARLA_DEFAULT_CANVAS_AUTO_HIDE_GROUPS = True | |||
| CARLA_DEFAULT_CANVAS_EYE_CANDY = CANVAS_EYECANDY_SMALL | |||
| CARLA_DEFAULT_CANVAS_USE_OPENGL = False | |||
| CARLA_DEFAULT_CANVAS_ANTIALIASING = CANVAS_ANTIALIASING_SMALL | |||
| CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING = False | |||
| CARLA_DEFAULT_CANVAS_THEME = "Modern Dark" | |||
| CARLA_DEFAULT_CANVAS_SIZE = "3100x2400" | |||
| CARLA_DEFAULT_CANVAS_SIZE_WIDTH = 3100 | |||
| CARLA_DEFAULT_CANVAS_SIZE_HEIGHT = 2400 | |||
| CARLA_DEFAULT_CANVAS_USE_BEZIER_LINES = True | |||
| CARLA_DEFAULT_CANVAS_AUTO_HIDE_GROUPS = True | |||
| CARLA_DEFAULT_CANVAS_AUTO_SELECT_ITEMS = False | |||
| CARLA_DEFAULT_CANVAS_EYE_CANDY = CANVAS_EYECANDY_SMALL | |||
| CARLA_DEFAULT_CANVAS_USE_OPENGL = False | |||
| CARLA_DEFAULT_CANVAS_ANTIALIASING = CANVAS_ANTIALIASING_SMALL | |||
| CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING = False | |||
| # Engine | |||
| CARLA_DEFAULT_FORCE_STEREO = False | |||
| @@ -106,6 +106,7 @@ class options_t(object): | |||
| __slots__ = [ | |||
| 'theme_name', | |||
| 'auto_hide_groups', | |||
| 'auto_select_items', | |||
| 'use_bezier_lines', | |||
| 'antialiasing', | |||
| 'eyecandy' | |||
| @@ -244,10 +245,11 @@ canvas.animation_list = [] | |||
| options = options_t() | |||
| options.theme_name = getDefaultThemeName() | |||
| options.auto_hide_groups = False | |||
| options.use_bezier_lines = True | |||
| options.antialiasing = ANTIALIASING_SMALL | |||
| options.eyecandy = EYECANDY_SMALL | |||
| options.auto_hide_groups = False | |||
| options.auto_select_items = False | |||
| options.use_bezier_lines = True | |||
| options.antialiasing = ANTIALIASING_SMALL | |||
| options.eyecandy = EYECANDY_SMALL | |||
| features = features_t() | |||
| features.group_info = False | |||
| @@ -313,11 +315,12 @@ def split2str(split): | |||
| # PatchCanvas API | |||
| def setOptions(new_options): | |||
| if canvas.initiated: return | |||
| options.theme_name = new_options.theme_name | |||
| options.auto_hide_groups = new_options.auto_hide_groups | |||
| options.use_bezier_lines = new_options.use_bezier_lines | |||
| options.antialiasing = new_options.antialiasing | |||
| options.eyecandy = new_options.eyecandy | |||
| options.theme_name = new_options.theme_name | |||
| options.auto_hide_groups = new_options.auto_hide_groups | |||
| options.auto_select_items = new_options.auto_select_items | |||
| options.use_bezier_lines = new_options.use_bezier_lines | |||
| options.antialiasing = new_options.antialiasing | |||
| options.eyecandy = new_options.eyecandy | |||
| def setFeatures(new_features): | |||
| if canvas.initiated: return | |||
| @@ -1765,6 +1768,9 @@ class CanvasPort(QGraphicsItem): | |||
| self.setFlags(QGraphicsItem.ItemIsSelectable) | |||
| if options.auto_select_items: | |||
| self.setAcceptHoverEvents(True) | |||
| def getGroupId(self): | |||
| return self.m_group_id | |||
| @@ -1814,6 +1820,16 @@ class CanvasPort(QGraphicsItem): | |||
| def type(self): | |||
| return CanvasPortType | |||
| def hoverEnterEvent(self, event): | |||
| if options.auto_select_items: | |||
| self.setSelected(True) | |||
| QGraphicsItem.hoverEnterEvent(self, event) | |||
| def hoverLeaveEvent(self, event): | |||
| if options.auto_select_items: | |||
| self.setSelected(False) | |||
| QGraphicsItem.hoverLeaveEvent(self, event) | |||
| def mousePressEvent(self, event): | |||
| self.m_hover_item = None | |||
| self.m_mouse_down = bool(event.button() == Qt.LeftButton) | |||
| @@ -2154,6 +2170,9 @@ class CanvasBox(QGraphicsItem): | |||
| self.setFlag(QGraphicsItem.ItemIsFocusable, True) | |||
| if options.auto_select_items: | |||
| self.setAcceptHoverEvents(True) | |||
| self.updatePositions() | |||
| canvas.scene.addItem(self) | |||
| @@ -2602,6 +2621,13 @@ class CanvasBox(QGraphicsItem): | |||
| return event.accept() | |||
| QGraphicsItem.keyPressEvent(self, event) | |||
| def hoverEnterEvent(self, event): | |||
| if options.auto_select_items: | |||
| if len(canvas.scene.selectedItems()) > 0: | |||
| canvas.scene.clearSelection() | |||
| self.setSelected(True) | |||
| QGraphicsItem.hoverEnterEvent(self, event) | |||
| def mouseDoubleClickEvent(self, event): | |||
| if self.m_plugin_id >= 0: | |||
| canvas.callback(ACTION_PLUGIN_SHOW_UI if self.m_plugin_ui else ACTION_PLUGIN_EDIT, self.m_plugin_id, 0, "") | |||