3 Commits

Author SHA1 Message Date
onyx-and-iris
2c290e2632 now using event toggles when dragging sliders
patch bump
2022-09-16 09:44:47 +01:00
onyx-and-iris
d08299a88d minor bump 2022-09-12 02:08:49 +01:00
onyx-and-iris
4507358215 update sv-ttk dependency version 2022-09-12 02:04:32 +01:00
10 changed files with 84 additions and 31 deletions

View File

@@ -9,11 +9,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- [ ] Add support for forest theme (should be coming soon)
## [1.4.0] - 2022-09-03
## [1.5.1] - 2022-09-16
### Added
- 1.5.1 binary to releases
### Changed
- sv_ttk updated to v2.0.
- event toggles used to pause updates when dragging sliders.
### Removed
## [1.4.2] - 2022-09-03
### Added
- tomli/tomllib compatibility layer to support python 3.10
- 1.4.2 binary to releases
## [1.3.0] - 2022-07-14

11
poetry.lock generated
View File

@@ -68,8 +68,8 @@ test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytes
[[package]]
name = "sv-ttk"
version = "0.1"
description = "Python module to easily use the Sun Valley ttk theme"
version = "2.0"
description = "A gorgeous theme for Tkinter that looks like Windows 11"
category = "main"
optional = false
python-versions = ">=3.4"
@@ -107,7 +107,7 @@ tomli = {version = ">=2.0.1,<3.0.0", markers = "python_version < \"3.11\""}
[metadata]
lock-version = "1.1"
python-versions = "^3.10"
content-hash = "b1536b0935a1bd7b0d87a97924ba6714c753ff4e59e6863abd7765642cb0a0d1"
content-hash = "738f40473a635574dc00427d128af1c3bf45f4290aca9b4d8ae78b6992a486c7"
[metadata.files]
black = []
@@ -128,10 +128,7 @@ platformdirs = [
{file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"},
{file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"},
]
sv-ttk = [
{file = "sv_ttk-0.1-py3-none-any.whl", hash = "sha256:c47ab1c70aad0333bc7f5063ab55e8a16b562e700e89e7853e577a1e2fdaa091"},
{file = "sv_ttk-0.1.tar.gz", hash = "sha256:342754618292b6d224060307eccaa35b6f6c284b34b4da1d0cf0484b652ffb0f"},
]
sv-ttk = []
tomli = [
{file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "voicemeeter-compact"
version = "1.4.2"
version = "1.5.1"
description = "A Compact Voicemeeter Remote App"
authors = ["onyx-and-iris <code@onyxandiris.online>"]
license = "MIT"
@@ -14,10 +14,10 @@ include = ["vmcompact/img/cat.ico"]
[tool.poetry.dependencies]
python = "^3.10"
sv-ttk = "^0.1"
sv-ttk = "^2.0"
tomli = { version = "^2.0.1", python = "<3.11" }
voicemeeter-api = "^0.7.0"
vban-cmd = "1.4.2"
vban-cmd = "^1.4.2"
[tool.poetry.dev-dependencies]
black = {version = "^22.6.0", allow-prereleases = true}

View File

@@ -93,11 +93,10 @@ class App(tk.Tk):
def on_update(self, subject):
"""called whenever notified of update"""
if not _base_values.in_scale_button_1:
if subject == "pdirty":
self.after(1, self.subject.notify, "pdirty")
elif subject == "ldirty" and not _base_values.dragging:
self.after(1, self.subject.notify, "ldirty")
if subject == "pdirty" and _base_values.run_update:
self.after(1, self.subject.notify, "pdirty")
elif subject == "ldirty" and not _base_values.dragging:
self.after(1, self.subject.notify, "ldirty")
def _destroy_top_level_frames(self):
"""
@@ -118,16 +117,14 @@ class App(tk.Tk):
def dragging(self, event, *args):
if event.widget is self:
if self.drag_id == "":
_base_values.in_scale_button_1 = True
_base_values.dragging = True
else:
self.after_cancel(self.drag_id)
self.drag_id = self.after(100, self.stop_drag)
def stop_drag(self):
_base_values.dragging = False
_base_values.in_scale_button_1 = False
self.drag_id = ""
_base_values.dragging = False
_apps = {kind.name: App.make(kind) for kind in _kinds_all}

View File

@@ -41,6 +41,9 @@ class MainFrameBuilder(AbstractBuilder):
sv_ttk.set_theme(_configuration.theme_mode)
print(f"Sunvalley {sv_ttk.get_theme().capitalize()} Theme applied")
self.app.target.event.remove("mdirty")
self.app.target.event.remove("midi")
def create_channelframe(self, type_):
if type_ == "strip":
self.app.strip_frame = _make_channelframe(self.app, type_)

View File

@@ -64,15 +64,29 @@ class ChannelLabelFrame(ttk.LabelFrame):
def reset_gain(self, *args):
self.setter("gain", 0)
self.gain.set(0)
self.gainlabel.set(self.gain.get())
def scale_press(self, *args):
_base_values.in_scale_button_1 = True
self.after(1, self.remove_events)
def remove_events(self):
self.parent.target.event.remove("pdirty")
self.parent.target.event.remove("ldirty")
def scale_release(self, *args):
_base_values.in_scale_button_1 = False
_base_values.run_update = False
self.after(1, self.add_events)
def add_events(self):
self.parent.target.event.add("pdirty")
self.parent.target.event.add("ldirty")
self.after(500, self.resume_updates)
def resume_updates(self):
_base_values.run_update = True
def _on_mousewheel(self, event):
_base_values.in_scale_button_1 = True
_base_values.run_update = False
self.gain.set(
self.gain.get()
+ (
@@ -86,7 +100,7 @@ class ChannelLabelFrame(ttk.LabelFrame):
elif self.gain.get() < -60:
self.gain.set(-60)
self.setter("gain", self.gain.get())
_base_values.in_scale_button_1 = False
self.after(1, self.resume_updates)
def open_config(self):
if self.conf.get():

View File

@@ -37,10 +37,23 @@ class Config(ttk.Frame):
setattr(self.target, param, value)
def scale_press(self, *args):
_base_values.in_scale_button_1 = True
self.after(1, self.remove_events)
def remove_events(self):
self.parent.target.event.remove("pdirty")
self.parent.target.event.remove("ldirty")
def scale_release(self, *args):
_base_values.in_scale_button_1 = False
_base_values.run_update = False
self.after(1, self.add_events)
def add_events(self):
self.parent.target.event.add("pdirty")
self.parent.target.event.add("ldirty")
self.after(350, self.resume_updates)
def resume_updates(self):
_base_values.run_update = True
def scale_enter(self, param, *args):
val = self.slider_vars[self.slider_params.index(param)].get()

View File

@@ -45,8 +45,8 @@ class Configurations(metaclass=SingletonMeta):
@dataclass
class BaseValues(metaclass=SingletonMeta):
# are we dragging a scale with mouse 1
in_scale_button_1: bool = False
# pause updates after releasing scale
run_update: bool = True
# are we dragging main window with mouse 1
dragging: bool = False
# a vban connection established

View File

@@ -52,7 +52,7 @@ class GainLayer(ttk.LabelFrame):
def reset_gain(self, *args):
self.setter("gain", 0)
self.gain.set(0)
self.gainlabel.set(0)
self.gainlabel.set(self.gain.get())
def scale_callback(self, *args):
"""callback function for scale widget"""
@@ -61,12 +61,26 @@ class GainLayer(ttk.LabelFrame):
self.gainlabel.set(round(self.gain.get(), 1))
def scale_press(self, *args):
_base_values.in_scale_button_1 = True
self.after(1, self.remove_events)
def remove_events(self):
self.parent.target.event.remove("pdirty")
self.parent.target.event.remove("ldirty")
def scale_release(self, *args):
_base_values.in_scale_button_1 = False
_base_values.run_update = False
self.after(1, self.add_events)
def add_events(self):
self.parent.target.event.add("pdirty")
self.parent.target.event.add("ldirty")
self.after(500, self.resume_updates)
def resume_updates(self):
_base_values.run_update = True
def _on_mousewheel(self, event):
_base_values.run_update = False
self.gain.set(
self.gain.get()
+ (
@@ -80,6 +94,7 @@ class GainLayer(ttk.LabelFrame):
elif self.gain.get() < -60:
self.gain.set(-60)
self.setter("gain", self.gain.get())
self.after(1, self.resume_updates)
def set_on(self):
"""enables a gainlayer. sets its button colour"""

View File

@@ -84,4 +84,4 @@ class Navigation(ttk.Frame):
background=f'{"purple" if self.submix.get() else "white"}',
)
self.extend_text.set("REDUCE" if self.extend.get() else "EXTEND")
self.extend_text.set("REDUCE" if self.extend.get() else "EXTEND")