
    hz                           G d  d          Z dS )c                   \    e Zd ZdZddZd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd ZdS )FrequencyControllerz+Handles frequency control and display logic      ?Nc                     || _         d| _        |pd | _        d| _        d| _        d| _        |                                  d S )N    c                     d S )N )freqperiodplaces      5/home/morepork/Documents/CSEM/frequency_controller.py<lambda>z.FrequencyController.__init__.<locals>.<lambda>   s    t     gMbP?gE?@   )frequency_valuedecimal_placeupdate_callbackmin_frequencymax_frequencymax_decimal_places_notify_update)selfinitial_frequencyr   s      r   __init__zFrequencyController.__init__   sU    0.T3S3S #$"#r   c                     | j         S )zGet current frequency valuer   r   s    r   get_frequencyz!FrequencyController.get_frequency   s    ##r   c                     d| j         z  S )z Get current period (1/frequency)r   r   r   s    r   
get_periodzFrequencyController.get_period   s    T)))r   c                     | j         S )z&Get current decimal place being edited)r   r   s    r   get_decimal_placez%FrequencyController.get_decimal_place   s    !!r   c                 `    g d}|t          | j        t          |          dz
                     S )z1Get human-readable name for current decimal place)OnesTenths
HundredthsThousandths   )minr   len)r   placess     r   get_decimal_place_namez*FrequencyController.get_decimal_place_name   s/    @@@c$,c&kk!m<<==r   c                     d| j          z  }t          | j        |z   d          | _        t          | j        | j                  | _        |                                  dS )z+Increase frequency at current decimal place
   r   N)r   roundr   r(   r   r   r   	increments     r   frequency_upz FrequencyController.frequency_up!   \    D../	$T%9I%EqII"4#79KLLr   c                     d| j          z  }t          | j        |z
  d          | _        t          | j        | j                  | _        |                                  dS )z+Decrease frequency at current decimal placer-   r   N)r   r.   r   maxr   r   r/   s     r   frequency_downz"FrequencyController.frequency_down(   r2   r   c                 h    t          d| j        dz
            | _        |                                  dS )z4Move decimal place to the left (higher significance)r   r'   N)r4   r   r   r   s    r   decimal_place_leftz&FrequencyController.decimal_place_left/   s4     D$6$:;;r   c                 r    t          | j        | j        dz             | _        |                                  dS )z4Move decimal place to the right (lower significance)r'   N)r(   r   r   r   r   s    r   decimal_place_rightz'FrequencyController.decimal_place_right4   s7     !8$:Lq:PQQr   c                     t          | j        t          || j                            | _        t          | j        d          | _        |                                  dS )zSet frequency directlyr   N)r4   r   r(   r   r   r.   r   )r   	frequencys     r   set_frequencyz!FrequencyController.set_frequency9   sQ    "4#5s9dFX7Y7YZZ$T%91==r   c                     | j         rB|                      | j        |                                 |                                            dS dS )z#Notify callback of frequency updateN)r   r   r   r+   r   s    r   r   z"FrequencyController._notify_update?   s[     	  $!!++--    	 	r   c                     | j         |                                 | j        |                                 | j         dd|                                 dddS )z+Get all display information as a dictionaryz.3fzPeriod: s)r;   r
   r   decimal_place_namefrequency_displayperiod_display)r   r   r   r+   r   s    r   get_display_infoz$FrequencyController.get_display_infoH   sb     -oo''!/"&"="="?"?$($8!>!>A):):AAAA
 
 	
r   )r   N)__name__
__module____qualname____doc__r   r   r   r!   r+   r1   r5   r7   r9   r<   r   rC   r   r   r   r   r      s        55
 
 
 
$ $ $* * *" " "> > >
      
  
    	
 	
 	
 	
 	
r   r   N)r   r   r   r   <module>rH      sA   P
 P
 P
 P
 P
 P
 P
 P
 P
 P
r   