Verze po zapracovani prvni vlny pozadavku
This commit is contained in:
64
src/channel.py
Normal file
64
src/channel.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import logging
|
||||
import uuid
|
||||
from enum import Enum
|
||||
|
||||
from callbacks import CallbackDispatcher, CallbackType
|
||||
|
||||
class ChannelUnit(Enum):
|
||||
VOLTS=1
|
||||
PPM=2
|
||||
AMPERS=3
|
||||
CELSIUS=4
|
||||
|
||||
class Channel:
|
||||
name: str = ""
|
||||
_active: bool = True
|
||||
number: int = 0
|
||||
unit: ChannelUnit
|
||||
data = []
|
||||
color: str = ""
|
||||
|
||||
_slice = []
|
||||
|
||||
def __init__(self):
|
||||
self.id = uuid.uuid1()
|
||||
|
||||
@property
|
||||
def active(self):
|
||||
return self._active
|
||||
|
||||
def toggle_active(self):
|
||||
self._active = not self._active
|
||||
if self._active:
|
||||
logging.debug(f'Enabling channel {self.name} ({self.id})')
|
||||
CallbackDispatcher().call(CallbackType.ENABLE_CHANNEL, self.id)
|
||||
else:
|
||||
logging.debug(f'Disabling channel {self.name} ({self.id})')
|
||||
CallbackDispatcher().call(CallbackType.DISABLE_CHANNEL, self.id)
|
||||
|
||||
|
||||
def calibrate_data(self, offset: float=0, multiple: float=1, start=None, end=None):
|
||||
"""
|
||||
'Calibrates' internal data by adding offset and multiplying all numbers
|
||||
Updates the chart series
|
||||
Marks that the data has been tainted and should be saved or discarded upon exit
|
||||
"""
|
||||
|
||||
if start and end:
|
||||
self.data[start:end] = [(x + offset) * multiple for x in self.data[start:end]]
|
||||
else:
|
||||
self.data = [(x + offset) * multiple for x in self.data]
|
||||
logging.debug(f'Calibrating channel {self.name} ({self.id})')
|
||||
CallbackDispatcher().call(CallbackType.UPDATE_CHANNEL, self.id, True)
|
||||
CallbackDispatcher().call(CallbackType.DATA_TAINTED)
|
||||
|
||||
def copy(self, start: int, end: int):
|
||||
self._slice = self.data[start:end + 1]
|
||||
|
||||
def cut(self, start: int, end: int):
|
||||
# save the cut and remove it from active data
|
||||
self.copy(start, end)
|
||||
self.data[start:end + 1] = []
|
||||
|
||||
def paste(self, at: int):
|
||||
self.data[at:at] = self._slice
|
||||
Reference in New Issue
Block a user