
    chp                     H    d dl Zd dl mZ d dlZd dlmZ  G d d          ZdS )    N)ttk)ApplicationControllerc                      e Z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 Z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,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' Z(d( Z)d) Z*d* Z+d+ Z,dS )-GPSAppc                    || _         | j                             d           | j                             d           | j                             dd           | j                             d           d| _        t                      | _        |                                  | 	                                 d| _        | j        
                                 | j                             d| j                   | j                             d| j                   | j                             d	| j                   |                                  d S )
NzMBARI CSEM Triggerbox1000x450FblackbgTz<Map>z<Configure>WM_DELETE_WINDOW)roottitlegeometry	resizable	configuregui_initializedr   app_controller	setup_gui_register_callbacks
initializebindon_window_mapon_window_configureprotocolon_closeprocess_updates)selfr   s     $/home/morepork/Documents/CSEM/gui.py__init__zGPSApp.__init__   s/   		/000	:&&&	E5)))	w'''  % 455 	 	  """  $ 	&&((( 		w 2333	}d&>???	-t}=== 	    c                     | j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        d}| j                            |           dS )zCRegister all GUI callback functions with the application controller)status_updatesync_status_updatetime_updatefrequency_updatecountdown_update
gps_updatepps_indicatoronoff_indicatorduty_indicatorpolarity_indicatorrecording_indicatorN)update_statusupdate_sync_statusupdate_time_displaysupdate_frequency_displayupdate_countdown_displayupdate_gps_dataupdate_pps_indicatorupdate_onoff_indicatorupdate_duty_indicatorupdate_polarity_indicatorupdate_recording_indicatorr   register_gui_callbacks)r   	callbackss     r   r   zGPSApp._register_callbacks)   sq     "/"&"94 $ = $ =.!6#:"8"&"@#'#B
 
	 	229=====r    c                 T   t          j        | j        d          }|                    t           j        ddd           |                     |           |                     |           |                     |           |                     |           | 	                    |           dS )zSetup the main GUI componentsr	   r
   T      )fillexpandpadxpadyN)
tkFramer   packBOTH_setup_status_section_setup_time_section_setup_control_section_setup_button_section_setup_indicator_section)r   
main_frames     r   r   zGPSApp.setup_gui;   s     XdiG444
RWTBBB 	"":... 	  ,,, 	##J/// 	"":... 	%%j11111r    c                    t          j        |d          | _        | j                            t           j        d           t          j        | j        d          }|                                 t          j        |dddd          | _        | j                            t           j        	           t          j        |d
ddd          | _        | j                            t           j        d           t          j        |dddd          | _	        | j	                            t           j        d           t          j        |dddd          | _
        | j
                            t           j        d           dS )z!Setup status and GPS info sectionr	   r
   r   r<   r=   r@   zInitializing...)Courier	   graytextfontfgr   sidezLat: ---
lightgreen   r<   rV   r?   z	Long: ---zSats: --orangeN)rA   rB   status_framerC   XLabelstatus_labelLEFT	lat_label	lon_label
sats_label)r   parentstatus_info_frames      r   rE   zGPSApp._setup_status_sectionP   s|   HV888BDv666 HT%67CCC   H%6=N(66gO O OBG,,, "3*%3R R Rw777"3+%3R R Rv666(#4:&4gO O O"'77777r    c           
      H   t          j        |d          }|                    t           j        d           t          j        |d          }|                                 t          j        |d          }|                    t           j        t           j        d           t          j        |ddd	dd
          | _        | j                            dt           j                   t          j        |ddddd
          | _        | j                            dt           j                   t          j        |ddddd
          | _	        | j	                            dt           j                   t          j        |d          }|                    t           j
        d           t          j        |dddd          | _        | j                                         t          j        |d| j        ddddd          | _        | j                            d           dS )zSetup time display sectionr	   r
   r   r;   rM   T)rV   r=   r>   zRPI Time (UTC): --)rN      boldwhitecenter)rR   rS   rT   r   anchor   )r@   r=   GPS Time (UTC): --cyanzRTC Time (UTC): --yellow)   r   rZ    )rN   r;   	lightbluerQ   zSync GPS
to RTC)Arialrh   r;      rR   commandrS   r   rT   widthheightr@   N)rA   rB   rC   r]   r`   rD   r^   rpi_time_labelgps_time_labelrtc_time_labelRIGHTsync_status_labelButtonsync_rtc_timesync_button)r   rd   time_section_frametimes_container
time_frame
sync_frames         r   rF   zGPSApp._setup_time_sectionj   s*   Xf999RT777 (#5'BBB Xo':::
RW274@@@ hz8L*AgRYbjl l l  abd 333 hz8L*AfQXaik k k  abd 333 hz8L*AhSZckm m m  abd 333 Xo':::
RXG444!#*2-;PW"Y "Y "Y##%%%9Z6H+/+=M&1gQqR R R 	1%%%%%r    c                 J   t          j        |d          }|                    t           j        d           t          j        |d          }|                    d           |                     |           |                     |           |                     |           dS )z"Setup transmission control sectionr	   r
   rg   rM   rL   rz   N)rA   rB   rC   r]   _setup_frequency_controls_setup_transmit_controls_setup_pause_controls)r   rd   tx_framecontrol_sections_frames       r   rG   zGPSApp._setup_control_section   s    8Fw///24f--- "$(w!?!?!?###000 	&&'=>>> 	%%&<=== 	""#9:::::r    c           
         t          j        |d          }|                    t           j        d           t          j        |d          }|                                 t          j        |dddd                                           t          j        |d	d
dd          | _        | j                            d           t          j        |dddd          | _        | j                                         t          j        |d          }|                    d           t          j        |dddddd| j                  | _	        | j	        
                    dddd           t          j        |d          }|
                    dddd           t          j        |dddddd| j                  | _        | j                            t           j        d           t          j        |ddddd d!d"          | _        | j                            t           j        d#           t          j        |d$ddddd| j                  | _        | j                            t           j        d           t          j        |d%ddddd| j                  | _        | j        
                    dddd           d&S )'zSetup frequency control widgetsr	   r
   r   rq   rZ   zFrequency (Hz):rt   
   rj   rQ   zPeriod: 1.000srt   rO   r[   )   r   rz   zEditing: Ones placert   r;   rs   r<   r      ▲rt   rh   ri   	lightgrayru   rm   rR   rS   r   rT   rx   ry   rw   r   r   rowcolumnr?   r@   )r   r   
columnspanr@   u   ◄z1.0rN      ri   rp   r;   sunkenrR   rS   rT   r   rx   reliefbdr<   u   ►   ▼N)rA   rB   rC   r`   r^   period_displaydecimal_indicatorr   freq_upfreq_up_btngrid	freq_leftfreq_left_btnfreq_display
freq_rightfreq_right_btn	freq_downfreq_down_btn)r   rd   freq_sectionfreq_info_linefreq_control_framefreq_middle_frames         r   r   z GPSApp._setup_frequency_controls   s   x7333rwW555 ,7;;;
&7mw	( 	( 	((, h~<L*68Q Q Q  f ---!#.?T-9kg"W "W "W##%%%  Xlw???V,,, 9%7e(=+RY)*1dlL L L 	!AAA>>> H%7GDDD1Q11EEEY'8u*?KT[+,QP P P 	RW1555H%6U(?HQX)*8C C C 	BG!444 i(9+@[U\,-aR R R 	  bgA 666  Y'9*?KT[+,QP P P 	Aaaa@@@@@r    c           
         t          j        |d          }|                    t           j        d           t          j        |dddd                                           t          j        |d	d
dd                                           t          j        |d          }|                    d           t          j        |dddddd| j                  | _        | j                            dddd           t          j        |ddddddd          | _	        | j	                            dddd           t          j        |dddddd| j
                  | _        | j                            dddd           dS )zSetup transmit time controlsr	   r
   r   rZ   zTransmit Timer   rj   rQ   	(seconds)r   r[   r   rz   r   r   r   ru   rm   r   r   r   r   60r   rW   r;   r   r   r   N)rA   rB   rC   r`   r^   r   transmit_time_uptransmit_up_btnr   transmit_displaytransmit_time_downtransmit_down_btn)r   rd   transmit_sectiontransmit_control_frames       r   r   zGPSApp._setup_transmit_controls   s   8Fw77727999
!mw	( 	( 	((,
!,	) 	) 	))-!#*:w!G!G!G###000  "y)?e,AkV]-.q$BW Y  Y  Y 	!!a!BBB !#)?d,CY`-.xA!G !G !G 	""q"CCC "$+A.CX_/0DD["] "] "] 	##!!!#DDDDDr    c           
         t          j        |d          }|                    t           j                   t          j        |dddd                                           t          j        |dd	d
d                                           t          j        |d          }|                    d           t          j        |dddddd| j                  | _        | j                            dddd           t          j        |ddddddd          | _	        | j	                            dddd           t          j        |dddddd| j
                  | _        | j                            dddd           dS )zSetup pause time controlsr	   r
   rU   z
Pause Timer   rj   rQ   r   r   r[   r   rz   r   r   r   ru   rm   r   r   r   r   30r   
lightcoralr;   r   r   r   N)rA   rB   rC   r`   r^   r   pause_time_uppause_up_btnr   pause_displaypause_time_downpause_down_btn)r   rd   pause_sectionpause_control_frames       r   r   zGPSApp._setup_pause_controls   s   G444(((
\w	( 	( 	((,
[|	) 	) 	))- h}AAA  f --- I&9)>;SZ*+At?QS S S 	1QQQ???  X&9)@\V]*+HD D D 	Aaaa@@@ !i(;%+@[U\,-aAUW W W 	  Qqqq AAAAAr    c                    t          j        |d          }|                    t           j        d           t          j        |d          }|                    d           t          j        |d| j        dd	d
dd          | _        | j                            t           j        d           t          j        |d| j        ddd
ddd	  	        | _	        | j	                            t           j                   t          j        |d          }|                    d           t          j        |d          | _
        | j
                                         t          j        | j
        dddd          | _        | j                            t           j        d           t          j        | j
        dddd          | _        | j                            t           j                   dS )z)Setup control buttons and status displaysr	   r
   rg   rM   rk   rl   STARTr   greenrj      rm   rv   rZ   STOPreddisabled)rR   rw   rS   r   rT   rx   ry   staterU   )r   r   rz   rr   r   rp   rQ   )r   r   NOT TRANSMITTINGN)rA   rB   rC   r]   r   start_countdownstart_buttonr`   stop_transmissionstop_buttonstatus_line_framer^   countdown_labeltx_status_label)r   rd   r   button_framestatus_display_frames        r   rH   zGPSApp._setup_button_section  s   8Fw///24f--- xW555***Il$J^)>7w*+A7 7 7 	BG&9999\H^(=%G)*1JH H H 	27+++  "xW===!!v!... "$*>7!K!K!K##%%%!x(>R+BxT[ ]  ]  ]!!rwW!===!x(>EW+BuQX Z  Z  Z!!rw!/////r    c                    t          j        |d          }|                                 t          j        |d          }|                    d           t          j        |d          }|                    t           j        d           t          j        |ddd	d
                                           t          j        |dddd
          | _        | j                                         t          j        |d          }|                    t           j        d           t          j        |ddd	d
                                           t          j        |dddd
          | _        | j                                         t          j        |d          }|                    t           j        d           t          j        |ddd	d
                                           t          j        |dddd
          | _        | j                                         t          j        |d          }|                    t           j        d           t          j        |ddd	d
                                           t          j        |dddd
          | _        | j                                         t          j        |d          }|                    t           j        d           t          j        |ddd	d
                                           t          j        |dddd
          | _	        | j	                                         t          j        |d          }	|	                    t           j        d           t          j        |	dddd
          | _
        | j
                            d           t          j        |	dddd
          | _        | j                            d           dS )zSetup GPIO status indicatorsr	   r
   )r<   r   rz   )r   rY   rZ   PPSr   rj   rQ   u   ●)rt       rP   zON/OFFDutyPolarityrX   Rec)r   r   z
Log: -- KBr   r   wr   zGPS Log: -- KBN)rA   rB   rC   r`   r^   r(   r)   r*   r+   r,   logsize_labelgpslogsize_label)
r   rd   r   gpio_indicators_frame	pps_frameonoff_frame
duty_framepolarity_framerecording_framelogsize_frames
             r   rI   zGPSApp._setup_indicator_section:  s   !x7;;;!!### !#)=' J J J"""/// H2w???	BG'222
\w	( 	( 	((,Xie-(.7< < <!!! h4AAAbgG444
8,w	( 	( 	((,!x%m*0W >  >  >!!### X3@@@
RW7333
&|w	( 	( 	((, hzM)/G= = =  """ "7GDDDw777
j|w	( 	( 	((,"$(>M-3#A #A #A$$&&& (#8WEEE"'888
u<w	( 	( 	((,#%8O%m-3$A $A $A  %%''' !67CCCg666Xm,\'2w@ @ @s+++ "=MT`*5'!C !C !C""#".....r    c                     | j         sdS | j                                        }|r8| j                            d           | j                            d           dS dS )zStart countdown to transmissionNr   r   normal)r   r    start_countdown_and_transmissionr   configr   r   successs     r   r   zGPSApp.start_countdown  sr    # 	F%FFHH 	4$$:$666##(#33333	4 	4r    c                 $   | j         sdS | j                                         | j                            d           | j                            d           | j                            d           | j                            dd	           dS )
zStop transmissionNr   r   r   rr   rR   r   r   rR   rT   )r   r   r   r   r   r   r   r   r   s    r   r   zGPSApp.stop_transmission  s    # 	F--/// 	  x 000j111###,,,##);#FFFFFr    c                     | j         r| j        sdS | j                             | j        | j                  }|r9| j                            d           | j                            dd           dS dS )z#Initiate GPS to RTC synchronizationN)success_callbackerror_callbackr   r   zSync in progress...r[   r   )r   r   r   sync_success
sync_errorr   r   r   r   s     r   r   zGPSApp.sync_rtc_time  s    " 	$*> 	F%33!.? 4 
 

  	S##*#555"))/D)RRRRR	S 	Sr    c                     | j         sdS |                    d          }| j                            d| d           | j                            d           dS )zCalled after successful syncN%Y-%m-%d %H:%M:%SzLast sync: rs   r   r   r   )r   strftimer   r   r   )r   	sync_timesync_strs      r   r   zGPSApp.sync_success  sk    # 	F%%&9::%%+C+C+C%TTTh/////r    c                     | j         sdS | j                            dt          |           d           | j                            d           dS )zCalled after sync errorNzSync error: r   r   r   r   )r   r   r   strr   )r   errors     r   r   zGPSApp.sync_error  s]    # 	F%%+F#e**+F+F5%QQQh/////r    c                 n    | j         sdS | j                                                                         dS )z+Increase frequency at current decimal placeN)r   r   get_frequency_controllerfrequency_upr   s    r   r   zGPSApp.freq_up  s9    # 	F4466CCEEEEEr    c                 n    | j         sdS | j                                                                         dS )z+Decrease frequency at current decimal placeN)r   r   r  frequency_downr   s    r   r   zGPSApp.freq_down  s9    # 	F4466EEGGGGGr    c                 n    | j         sdS | j                                                                         dS )z4Move decimal place to the left (higher significance)N)r   r   r  decimal_place_leftr   s    r   r   zGPSApp.freq_left  s9    # 	F4466IIKKKKKr    c                 n    | j         sdS | j                                                                         dS )z4Move decimal place to the right (lower significance)N)r   r   r  decimal_place_rightr   s    r   r   zGPSApp.freq_right  s9    # 	F4466JJLLLLLr    c                    | j         sdS t          | j                            d                    }t	          d|dz             }| j                            t          |                     | j                            |           dS )zIncrease transmit timeNrR     rm   r   )	r   intr   cgetminr   r  r   update_transmit_timer   currentnew_times      r   r   zGPSApp.transmit_time_up  s    # 	Fd+008899tWq[))$$#h--$88800:::::r    c                    | j         sdS t          | j                            d                    }t	          d|dz
            }| j                            t          |                     | j                            |           dS )zDecrease transmit timeNrR   rm   r   )	r   r  r   r  maxr   r  r   r  r  s      r   r   zGPSApp.transmit_time_down  s    # 	Fd+008899q'A+&&$$#h--$88800:::::r    c                    | j         sdS t          | j                            d                    }t	          d|dz             }| j                            t          |                     | j                            |           dS )zIncrease pause timeNrR   r  rm   r   )	r   r  r   r  r  r   r  r   update_pause_timer  s      r   r   zGPSApp.pause_time_up  s    # 	Fd(--f5566tWq[))!!s8}}!555--h77777r    c                    | j         sdS t          | j                            d                    }t	          d|dz
            }| j                            t          |                     | j                            |           dS )zDecrease pause timeNrR   r   rm   r   )	r   r  r   r  r  r   r  r   r  r  s      r   r   zGPSApp.pause_time_down  s    # 	Fd(--f5566q'A+&&!!s8}}!555--h77777r    Nc                       j         sdS |rdddd}|                    |d          nd j                            d fd           dS )	zUpdate status messageNr   r   r[   r   r   r[   rP   r   c                  <    j                                        S Nr   r_   r   fg_colormsgr   s   r   <lambda>z&GPSApp.update_status.<locals>.<lambda>      4#4#;#;#;#R#R r    r   getr   afterr   r!  color	color_mapr   s   ``  @r   r-   zGPSApp.update_status  sr    # 	F 	  %8LLI }}UF33HHH	RRRRRRSSSSSr    c                       j         sdS dddd}|                    |d           j                            d fd           dS )	zUpdate sync-related statusNr   r   r[   r  rP   r   c                  <    j                                        S r  r  r  s   r   r"  z+GPSApp.update_sync_status.<locals>.<lambda>  r#  r    r$  r'  s   ``  @r   r.   zGPSApp.update_sync_status  sc    # 	F!GxHH	==//	RRRRRRSSSSSr    c                 Z      j         sdS  j                            d fd           dS )z=Update the time display labels with cached synchronized timesNr   c                  .                                    S N)_update_time_labels)cached_timesr   s   r   r"  z-GPSApp.update_time_displays.<locals>.<lambda>  s    4#;#;L#I#I r    r   r   r&  )r   r0  s   ``r   r/   zGPSApp.update_time_displays	  s=    # 	F	IIIIIJJJJJr    c                    | j         sdS |d         r9|d                             d          }| j                            d|            |d         r:|d                             d          }| j                            d|            n| j                            d           |d	         r<|d	                             d          }| j                            d
| d           dS | j                            dd           dS )z*Update time labels (called on main thread)Nrpir   zRPI Time (UTC): r   gpszGPS Time (UTC): rn   rtczRTC Time (UTC): rp   r   zRTC Time (UTC): Read Errorr   )r   r   r{   r   r|   r}   )r   r0  rpi_time_strgps_time_strrtc_time_strs        r   r/  zGPSApp._update_time_labels  s@   # 	F  	O'.778KLLL&&,M|,M,M&NNN  	B'.778KLLL&&,M|,M,M&NNNN&&,@&AAA  	T'.778KLLL&&,M|,M,MRZ&[[[[[&&,HU&SSSSSr    c                 b      j         sdS  j                            d fd           dS )z!Update frequency display elementsNr   c                  2                                    S r.  )_update_freq_labels)decimal_place_name	frequencyperiodr   s   r   r"  z1GPSApp.update_frequency_display.<locals>.<lambda>+  s    4#;#;IvOa#b#b r    r1  r   r=  r>  r<  s   ````r   r0   zGPSApp.update_frequency_display'  sE    # 	F	bbbbbbbcccccr    c                     | j         sdS | j                            |d           | j                            d|dd           | j                            d| d           dS )z/Update frequency labels (called on main thread)Nz.3fr   zPeriod: sz	Editing: z place)r   r   r   r   r   r?  s       r   r;  zGPSApp._update_freq_labels-  s    # 	F  &8&8 999""(@6(@(@(@(@"AAA%%+Q7I+Q+Q+Q%RRRRRr    c                 ^      j         sdS  fd} j                            d|           dS )zUpdate countdown displayNc                                                       d v r9j                            d           j                            dd           d S j                                        j                            dd           d S )	Nz00:00rr   r   TRANSMITTINGr   r   	COUNTDOWNrp   )update_log_sizesr   r   r   )countdown_textr   s   r   update_labelsz6GPSApp.update_countdown_display.<locals>.update_labels:  s    !!### .(($+++444$++G+LLLLL$+++@@@$+++JJJJJr    r   r1  )r   rG  rH  s   `` r   r1   zGPSApp.update_countdown_display5  sV    # 	F
	K 
	K 
	K 
	K 
	K 
	K 		=)))))r    c                 ^      j         sdS  fd} j                            d|           dS )zUpdate GPS data displayNc                  @   d         dk    rd         nd} d         dk    rd         nd}d         dk    rd         nd}j                             d|             j                            d	|            j                            d
|            d S )NlatzN/Az---lonsatsz--zLat: r   zLong: zSats: )ra   r   rb   rc   )lat_strlon_strsats_strdatar   s      r   update_gps_labelsz1GPSApp.update_gps_data.<locals>.update_gps_labelsM  s    %)%[E%9%9d5kkuG%)%[E%9%9d5kkuG'+F|u'<'<tF||$HN!!'8w'8'8!999N!!'9'9'9!:::O""(;(;(;"<<<<<r    r   r1  )r   rQ  rR  s   `` r   r2   zGPSApp.update_gps_dataH  sQ    # 	F	= 	= 	= 	= 	= 	= 		,-----r    c                 Z      j         sdS  j                            d fd           dS )z+Update PPS indicator based on GPIO 17 stateNr   c                  B    j                              rdnd          S )Nrp   rP   rT   )r(   r   )	pps_stater   s   r   r"  z-GPSApp.update_pps_indicator.<locals>.<lambda>]  s%    4#5#<#<I@a[a#<#b#b r    r1  )r   rV  s   ``r   r3   zGPSApp.update_pps_indicatorY  =    # 	F	bbbbbcccccr    c                 Z      j         sdS  j                            d fd           dS )zUpdate ON/OFF indicatorNr   c                  B     j                             rdnd          S Nrs   rP   rU  )r)   r   r   r   s   r   r"  z/GPSApp.update_onoff_indicator.<locals>.<lambda>c  s&    4#7#>#>QVBb++\b#>#c#c r    r1  r[  s   ``r   r4   zGPSApp.update_onoff_indicator_  s=    # 	F	cccccdddddr    c                 Z      j         sdS  j                            d fd           dS )zUpdate Duty indicatorNr   c                  B     j                             rdnd          S rZ  )r*   r   r[  s   r   r"  z.GPSApp.update_duty_indicator.<locals>.<lambda>i  s&    4#6#=#=PUAa[a#=#b#b r    r1  r[  s   ``r   r5   zGPSApp.update_duty_indicatore  rW  r    c                 Z      j         sdS  j                            d fd           dS )zUpdate Polarity indicatorNr   c                  B     j                             rdnd          S rZ  )r+   r   r[  s   r   r"  z2GPSApp.update_polarity_indicator.<locals>.<lambda>o  s&    4#:#A#ATYEe[[_e#A#f#f r    r1  r[  s   ``r   r6   z GPSApp.update_polarity_indicatork  s=    # 	F	fffffgggggr    c                 Z      j         sdS  j                            d fd           dS )zUpdate recording indicatorNr   c                  B    j                              rdnd          S )Nr   rP   rU  )r,   r   )recording_stater   s   r   r"  z3GPSApp.update_recording_indicator.<locals>.<lambda>u  s%    4#;#B#BFjeedj#B#k#k r    r1  )r   rb  s   ``r   r7   z!GPSApp.update_recording_indicatorq  s=    # 	F	kkkkklllllr    c                 Z      j         sdS  fd} j                            d|           dS )zUpdate log size displaysNc                      j                                         } j                            d| d         dd           j                            d| d         dd           d S )NzLog: main_log_kbz.1fz KBr   z	GPS Log: 
gps_log_kb)r   get_log_sizesr   r   r   )sizesr   s    r   update_size_labelsz3GPSApp.update_log_sizes.<locals>.update_size_labels|  sy    '5577E%%+P53G+P+P+P+P%QQQ!((.V%:M.V.V.V.V(WWWWWr    r   r1  )r   ri  s   ` r   rF  zGPSApp.update_log_sizesw  sP    # 	F	X 	X 	X 	X 	X
 		-.....r    c                     | j         r6|                                  | j                            d| j                   dS dS )z)Process any remaining queue-based updatesi  N)r   rF  r   r&  r   r   s    r   r   zGPSApp.process_updates  sH     	8!!###IOOD$"677777	8 	8r    c                 n    |j         | j        k    r"| j        r| j                                         dS dS dS )zHandle window mapping eventsNwidgetr   r   update_idletasksr   events     r   r   zGPSApp.on_window_map  A    <49$$)=$I&&((((( %$$$r    c                 n    |j         | j        k    r"| j        r| j                                         dS dS dS )z#Handle window configuration changesNrl  ro  s     r   r   zGPSApp.on_window_configure  rq  r    c                     d| _         t          | d          r| j                                         | j                                         dS )zClean up and close applicationFr   N)r   hasattrr   cleanupr   destroyr   s    r   r   zGPSApp.on_close  sN    $ 4)** 	*'')))	r    r.  )-__name__
__module____qualname__r   r   r   rE   rF   rG   r   r   r   rH   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r.   r/   r/  r0   r;  r1   r2   r3   r4   r5   r6   r7   rF  r   r   r   r    r    r   r   r      s         B> > >$2 2 2*8 8 84$& $& $&L; ; ;$5A 5A 5AnE E E>B B B>!0 !0 !0FE/ E/ E/P	4 	4 	4G G GS S S0 0 00 0 0F F FH H HL L LM M M; ; ;; ; ;8 8 88 8 8	T 	T 	T 	TT T T TK K KT T T0d d dS S S* * *&. . ."d d de e ed d dh h hm m m
/ 
/ 
/8 8 8) ) )
) ) )
    r    r   )tkinterrA   r   queueapplication_controllerr   r   rz  r    r   <module>r~     sz               8 8 8 8 8 8U
 U
 U
 U
 U
 U
 U
 U
 U
 U
r    