From 0ed93f318fd2659ba40f095019b68729e18a2af6 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 16 Jan 2015 23:32:35 +0000 Subject: [PATCH] PatchCanvas: Add option to auto-select items on hover --- resources/ui/carla_settings.ui | 9 ++++++- source/carla_host.py | 38 +++++++++++++++-------------- source/carla_settings.py | 19 ++++++++------- source/carla_shared.py | 38 +++++++++++++++-------------- source/patchcanvas.py | 44 +++++++++++++++++++++++++++------- 5 files changed, 94 insertions(+), 54 deletions(-) diff --git a/resources/ui/carla_settings.ui b/resources/ui/carla_settings.ui index d30cd91ed..169e8cf13 100644 --- a/resources/ui/carla_settings.ui +++ b/resources/ui/carla_settings.ui @@ -587,6 +587,13 @@ + + + + Auto-select items on hover + + + @@ -1410,7 +1417,7 @@ This mode is not available for VST plugins. - + diff --git a/source/carla_host.py b/source/carla_host.py index eeb0477b5..27063ffc7 100644 --- a/source/carla_host.py +++ b/source/carla_host.py @@ -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 diff --git a/source/carla_settings.py b/source/carla_settings.py index 6ed2f5cda..cd03a3d7b 100755 --- a/source/carla_settings.py +++ b/source/carla_settings.py @@ -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 diff --git a/source/carla_shared.py b/source/carla_shared.py index a4496b791..5613f4254 100644 --- a/source/carla_shared.py +++ b/source/carla_shared.py @@ -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 diff --git a/source/patchcanvas.py b/source/patchcanvas.py index df8c44e42..b0ae6cc0c 100644 --- a/source/patchcanvas.py +++ b/source/patchcanvas.py @@ -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, "")