Source code for jdxi_editor.ui.style.dimensions

"""
class JDXIDimensions

Class to store dimensions of a Roland JDXi instrument

# Example usage:
----------------
>>> print(JDXiUIDimensions.INSTRUMENT.HEIGHT)
400
>>> print(JDXiUIDimensions.INSTRUMENT.WIDTH)
1000
"""

from dataclasses import dataclass
from typing import Optional

from PySide6.QtCore import QMargins


[docs] class ControlMetrics:
[docs] MIN_WIDTH: int = 20
[docs] MIN_HEIGHT: int = 14
@dataclass(frozen=True)
[docs] class Margins:
[docs] left: int
[docs] top: int
[docs] right: int
[docs] bottom: int
[docs] def __iter__(self): """Make Margins iterable so it can be unpacked with *margins.""" return iter((self.left, self.top, self.right, self.bottom))
[docs] class Dimensions: """Dimensions"""
[docs] X: int = 0
[docs] Y: int = 0
[docs] WIDTH: int = 0
[docs] HEIGHT: int = 0
[docs] MARGIN: int = 0
[docs] SPACING: int = 0
[docs] MIN_WIDTH: Optional[int] = None
[docs] MIN_HEIGHT: Optional[int] = None
[docs] MAX_WIDTH: Optional[int] = None
[docs] MAX_HEIGHT: Optional[int] = None
[docs] INIT_WIDTH: Optional[int] = None
[docs] INIT_HEIGHT: Optional[int] = None
[docs] MARGINS: tuple = (5, 5, 5, 5)
@classmethod
[docs] def right(cls) -> int: return cls.X + cls.WIDTH
@classmethod
[docs] def bottom(cls) -> int: return cls.Y + cls.HEIGHT
[docs] class DigitalDimensions(Dimensions): """Digital Dimensions"""
[docs] SPACING: int = 5
[docs] MARGIN: int = 5
[docs] MIN_CONTROL_WIDTH: int = 20
[docs] MIN_CONTROL_HEIGHT: int = 14
[docs] MIN_WIDTH = 850
[docs] MIN_HEIGHT: int = 300
[docs] WIDTH: int = 1030
[docs] HEIGHT = 600
[docs] class AnalogDimensions(Dimensions): """Analog Editor Dimensions"""
[docs] SPACING: int = 4
[docs] MARGIN: int = 5
[docs] MIN_CONTROL_WIDTH: int = 20
[docs] MIN_CONTROL_HEIGHT: int = 14
[docs] class ComboBoxDimensions(Dimensions): """Combo Box Dimensions"""
[docs] WIDTH: int = 425
[docs] HEIGHT: int = 25
[docs] class IconDimensions(Dimensions): """Icon Dimensions"""
[docs] SCALE_SMALL: float = 0.7
[docs] WIDTH: int = 30
[docs] HEIGHT: int = 30
[docs] class SmallIconDimensions(Dimensions): """Dimensions of an Icon"""
[docs] WIDTH: int = 20
[docs] HEIGHT: int = 20
[docs] class DigitalEditorDimensions(Dimensions): """Digital Filter Dimensions"""
[docs] SPACING: int = 5
[docs] MARGINS = Margins(5, 15, 5, 5)
[docs] MIN_WIDTH: Optional[int] = 850
[docs] MIN_HEIGHT: Optional[int] = 300
[docs] INIT_WIDTH: Optional[int] = 1030
[docs] INIT_HEIGHT: Optional[int] = 600
[docs] class BasicEditorDimensions(Dimensions): """Basic Editor Dimensions"""
[docs] IMAGE_HEIGHT: int = 150
[docs] WIDTH: int = 550
[docs] HEIGHT: int = 550
[docs] class DrumEditorDimensions(Dimensions): """Drum Editor Dimensions"""
[docs] WIDTH: int = 1100
[docs] HEIGHT: int = 800
[docs] PARTIAL_TAB_MIN_WIDTH = ( 400 # Minimum width for drum partial tabs to match WMT width )
[docs] MIN_HEIGHT: Optional[int] = 300
[docs] class WaveformIconDimensions(Dimensions): """Waveform Icon Dimensions"""
[docs] Icon: SmallIconDimensions = SmallIconDimensions # Need lots of waveform icons
[docs] WIDTH: int = 80
[docs] HEIGHT: int = 30
[docs] class LfoIconDimensions(Dimensions): """Lfo Icon Dimensions"""
[docs] WIDTH: int = 20
[docs] HEIGHT: int = 20
[docs] class SplashScreenDimensions(Dimensions): """Splash screen dimensions (matches splash_screen_540_850.png)"""
[docs] WIDTH: int = 850
[docs] HEIGHT: int = 540
[docs] IMAGE_WIDTH: int = 850
[docs] IMAGE_HEIGHT: int = 540
[docs] class ChartMetrics: """Chart Metrics"""
[docs] POINT_SIZE: int = 2
[docs] class InstrumentDimensions(Dimensions): """Instrument Dimensions"""
[docs] MARGIN: int = 15
[docs] HEIGHT: int = 400
[docs] WIDTH: int = 1000
[docs] class EditorDimensions(Dimensions): """EditorDimensions"""
[docs] HEIGHT: int = 250
[docs] MIN_HEIGHT: int = 250
[docs] MARGINS = (1, 1, 1, 1)
[docs] class ArpDimensions(Dimensions): """ArpDimensions"""
[docs] MARGIN: int = 5
[docs] SPACING: int = 20
[docs] X: int = 120
[docs] Y: int = 125
[docs] WIDTH: int = 120
[docs] HEIGHT: int = 100
[docs] class AnalogEditorDimensions(EditorDimensions): """Analog Editor Dimensions"""
[docs] MIN_WIDTH: int = 330
[docs] MIN_HEIGHT: int = 330
[docs] WIDTH: int = 950
[docs] HEIGHT: int = 600
[docs] MARGINS = (1, 1, 1, 1)
[docs] class LEDDisplayDimensions(Dimensions): """LED digital area (enlarged for 2 rows)"""
[docs] WIDTH: int = 210
[docs] HEIGHT: int = 70
[docs] X = InstrumentDimensions.MARGIN + 20
[docs] Y = InstrumentDimensions.MARGIN + 35
[docs] class DigitalTitleDimensions(Dimensions): """ Digital Title Dimensions LED title area (enlarged for 2 rows)"""
[docs] WIDTH: int = 330
[docs] HEIGHT: int = 70
[docs] class PWMWidgetDimensions(Dimensions): """PWM Widget Dimensions"""
[docs] X: int = 100
[docs] Y: int = 100
[docs] WIDTH: int = 300
[docs] HEIGHT: int = 500
[docs] class TitleDimensions(Dimensions): """Title above digital (moved down)"""
[docs] X = InstrumentDimensions.MARGIN + 20
[docs] Y = InstrumentDimensions.MARGIN
[docs] WIDTH: int = 200
[docs] HEIGHT: int = 50
[docs] class KeyboardDimensions(Dimensions): """Keyboard Dimensions""" # Keyboard
[docs] HEIGHT: int = 127
[docs] WIDTH = 800
[docs] class SequencerGridDimensions(Dimensions): """Sequencer Grid Dimensions""" # --- Sequencer grid
[docs] WIDTH: int = 300
[docs] HEIGHT: int = 30
[docs] class SequencerContainerDimensions(Dimensions): """Sequencer container"""
[docs] X = InstrumentDimensions.MARGIN + 520
[docs] Y = InstrumentDimensions.MARGIN + 155
[docs] WIDTH: int = 500
[docs] HEIGHT: int = 80
[docs] class SequencerDimensions(Dimensions): """Sequencer Dimensions""" # --- Sequencer steps
[docs] STEPS: int = 16
[docs] STEP_SIZE: int = 18
[docs] SQUARE_SIZE: int = 25
[docs] LARGE_SQUARE_SIZE: int = 40
# Sequencer above keyboard
[docs] Y_WINDOWS = ( InstrumentDimensions.HEIGHT - KeyboardDimensions.HEIGHT + 20 ) # Windows has a menu across the top
[docs] Y_NON_WINDOWS = ( InstrumentDimensions.HEIGHT - KeyboardDimensions.HEIGHT + 20 ) # Keep same distance above keyboard
[docs] WIDTH: int = 440 # # Use roughly half keyboard width
[docs] X = InstrumentDimensions.WIDTH - InstrumentDimensions.MARGIN - WIDTH
[docs] GRID: SequencerGridDimensions = SequencerGridDimensions
# --- Sequencer container
[docs] CONTAINER: SequencerContainerDimensions = SequencerContainerDimensions
[docs] class SliderContainerDimensions(Dimensions): """Slider Container Dimensions"""
[docs] WIDTH: int = 360
[docs] HEIGHT: int = 120 + 20 # Height = SliderDimensions Height
[docs] class SliderDimensions(Dimensions): """Slider Dimensions"""
[docs] X: int = 515
[docs] Y: int = InstrumentDimensions.MARGIN
[docs] HEIGHT: int = 120
[docs] CONTAINER: SliderContainerDimensions = SliderContainerDimensions
[docs] class PartsDimensions(Dimensions): """Parts container"""
[docs] X = LEDDisplayDimensions.right() + 10
[docs] Y = InstrumentDimensions.MARGIN
[docs] WIDTH: int = 180
[docs] HEIGHT: int = 220
[docs] class EffectsButtonDimensions(Dimensions): """Effects Button Dimensions"""
[docs] X = 910
[docs] Y = InstrumentDimensions.MARGIN
[docs] WIDTH = 80
[docs] HEIGHT: int = 120
[docs] class RoundButtonDimensions(Dimensions): """Button Dimensions"""
[docs] WIDTH: int = 30
[docs] HEIGHT: int = 30
[docs] class ToneButtonDimensions(Dimensions): """Tone button dimensions"""
[docs] X: int = 385
[docs] Y = InstrumentDimensions.MARGIN + 75
[docs] WIDTH: int = 150
[docs] HEIGHT = 80
[docs] class ProgramButtonDimensions(Dimensions): """Program buttons"""
[docs] X: int = 385
[docs] Y = InstrumentDimensions.MARGIN + 15
[docs] WIDTH: int = 150
[docs] HEIGHT = 80
[docs] class OctaveButtonDimensions(Dimensions): """Octave Button Dimensions"""
[docs] X = InstrumentDimensions.MARGIN + 10
[docs] Y: int = 125
[docs] WIDTH: int = 120
[docs] HEIGHT: int = 100
[docs] class MidiConfig(Dimensions): """Midi Config Dimensions"""
[docs] WIDTH = 300
[docs] HEIGHT = 300
[docs] class SliderValueLabelDimensions(Dimensions): """Slider label dimensions"""
[docs] MIN_WIDTH = 20
[docs] class VerticalSliderDimensions(Dimensions): """Slider Dimensions"""
[docs] label = SliderValueLabelDimensions
[docs] HEIGHT = 180
[docs] MIN_WIDTH = 80
[docs] MAX_WIDTH = 100
[docs] class HorizontalSliderDimensions(Dimensions): """Slider Dimensions"""
[docs] label = SliderValueLabelDimensions
[docs] HEIGHT = 180
[docs] MIN_HEIGHT = 50
[docs] MAX_HEIGHT = 60
[docs] MIN_WIDTH = 80
[docs] MAX_WIDTH = 100
[docs] class PatchManagerDimensions(Dimensions): """Patch manager Dimensions"""
[docs] WIDTH = 400
[docs] HEIGHT = 300
[docs] class GroupBoxDimensions(Dimensions): """group box dimensions"""
[docs] MARGINS = QMargins(0, 0, 0, 0)
[docs] SPACING = 5
[docs] class JDXiUIDimensions(Dimensions): """ A class to store dimensions for the JD-Xi editor UI. """
[docs] group = GroupBoxDimensions
# --- Icons
[docs] patch = PatchManagerDimensions
[docs] slider_vertical = VerticalSliderDimensions
[docs] slider_horizontal = HorizontalSliderDimensions
[docs] Icon: IconDimensions = IconDimensions
[docs] Combo: ComboBoxDimensions = ComboBoxDimensions
[docs] WaveformIcon: WaveformIconDimensions = WaveformIconDimensions
[docs] LFOIcon: LfoIconDimensions = LfoIconDimensions
# --- Splash screen
[docs] SPLASH: SplashScreenDimensions = SplashScreenDimensions
# Config
[docs] Config: MidiConfig = MidiConfig
# --- Editor Windows
[docs] INSTRUMENT: InstrumentDimensions = InstrumentDimensions
[docs] EDITOR: EditorDimensions = EditorDimensions
[docs] EDITOR_DIGITAL: DigitalEditorDimensions = DigitalEditorDimensions
[docs] EDITOR_BASIC: BasicEditorDimensions = BasicEditorDimensions
[docs] EDITOR_ANALOG: AnalogEditorDimensions = AnalogEditorDimensions
[docs] EDITOR_DRUM: DrumEditorDimensions = DrumEditorDimensions
[docs] ANALOG = AnalogDimensions
[docs] ARPEGGIATOR: ArpDimensions = ArpDimensions
# --- Widgets
[docs] PWM_WIDGET: PWMWidgetDimensions = PWMWidgetDimensions
[docs] BUTTON_ROUND: RoundButtonDimensions = RoundButtonDimensions
[docs] CHART: ChartMetrics = ChartMetrics
[docs] LED: LEDDisplayDimensions = LEDDisplayDimensions
[docs] DIGITAL_TITLE: DigitalTitleDimensions = DigitalTitleDimensions
[docs] TITLE: TitleDimensions = TitleDimensions
[docs] KEYBOARD: KeyboardDimensions = KeyboardDimensions
[docs] SEQUENCER: SequencerDimensions = SequencerDimensions
[docs] SLIDER: SliderDimensions = SliderDimensions
[docs] PARTS: PartsDimensions = PartsDimensions
[docs] OCTAVE: OctaveButtonDimensions = OctaveButtonDimensions
[docs] PROGRAM: ProgramButtonDimensions = ProgramButtonDimensions
[docs] TONE: ToneButtonDimensions = ToneButtonDimensions
[docs] EFFECTS: EffectsButtonDimensions = EffectsButtonDimensions