Browse Source

PatchCanvas: Add option to auto-select items on hover

tags/1.9.6
falkTX 10 years ago
parent
commit
0ed93f318f
5 changed files with 94 additions and 54 deletions
  1. +8
    -1
      resources/ui/carla_settings.ui
  2. +20
    -18
      source/carla_host.py
  3. +11
    -8
      source/carla_settings.py
  4. +20
    -18
      source/carla_shared.py
  5. +35
    -9
      source/patchcanvas.py

+ 8
- 1
resources/ui/carla_settings.ui View File

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


+ 20
- 18
source/carla_host.py View File

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


+ 11
- 8
source/carla_settings.py View File

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


+ 20
- 18
source/carla_shared.py View File

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


+ 35
- 9
source/patchcanvas.py View File

@@ -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, "")


Loading…
Cancel
Save