§
   H¾—ÞbMã                   óÂ   — d Z ddlZddlmZm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iddiddddœddiddiddiddidddddœddidœ	ZdZdZ G d„ d¦  «        ZdS )a®  
Adapter between MillionaireGameController and a game window (the MyTV inline panel, the classic card, the modern card).

Maps controller callbacks to window property setProperty() calls, ensuring all UI updates go through Kodi's property
system (thread-safe), and turns what the player did (an intent, see designs.py) into controller calls. A modern design
also gets the structured properties of game_view.py after every change.
é    N)ÚdesignsÚ	game_viewi%  Ú40FFFFFFÚCC2997FFÚFF34C759ÚFFFF3B30Ú15FFFFFFÚFF232323ÚFF335C8FÚFF3CB371ÚFFB04A4AÚAAFFFFFFÚFFFFFFFFÚ60FFFFFFé   )Úmillionaire_welcomeÚmillionaire_rulesÚwelcome_screenr   r   Úanswer_feedbackÚgame_finished)r   Ú	game_overr   ÚresultsÚerror)	ÚprimaryÚ	secondaryÚstartÚrulesÚbackÚnextr   ÚagainÚretry)ÚendÚtitleÚhomeu   NaÄ�Ã­tÃ¡nÃ­...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e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 „ Z d!„ Z!d"„ Z"dS )%ÚMillionaireMyTVAdapterz:Adapter between MillionaireGameController and MyTV dialog.Ú NÚseriesc                 óR  — ddl m} || _        || _        || _        |pt
          j        | _        d| _        i | _	        d| _
         |||||||	|
||¬¦	  «	        | _        | j                             | j        | j        | j        | j        | j        | j        | j        | j        | j        ¬¦	  «	         | j                             | j        ¦  «         |                     d|¦  «         |                     d|¦  «         |                     d|¦  «         |                     d	|d
k    rdn|¦  «         |                     d|¦  «         |                     dt3          |pd¦  «        ¦  «         |                     d|pd¦  «         |                      ¦   «          |                      ¦   «          dS )aê  
        Args:
            dialog: MyTVDialog instance (has setProperty/clearProperty)
            series_id: TMDb series ID
            title: Series name or channel name
            plot: Series/episode plot or combined plots for channel
            poster: Poster URL
            fanart: Fanart URL
            logo: Logo URL
            episode_title: Episode name (for episode mode)
            season_number: Season number (for episode mode)
            episode_number: Episode number (for episode mode)
            media_type: 'series' (default), 'channel' (mix mode), 'movie', 'actor', 'director', ...
            genre: Film/series genres (standalone modal)
            actor_data: Person data for actor/director/... games (standalone modal)
            content: content source of the game (wcs/games/content); None: the live AI chat
            design: wcs.games.designs.Design of the window; None: the classic card's controls
            year: release year of the work (modern card)
        r   )ÚMillionaireGameControllerF)	r#   ÚplotÚgenreÚ
media_typeÚepisode_titleÚseason_numberÚepisode_numberÚ
actor_dataÚcontent)	Úupdate_displayÚupdate_buttonsÚupdate_sidebarÚ
show_errorÚ	set_focusÚstart_countdownÚclose_dialogÚupdate_millionaire_ladderÚset_answer_button_colorsúWCS.Game.PosterúWCS.Game.LogoúWCS.Game.FanartúWCS.Game.SeriesNameÚchannelr'   zWCS.Game.NamezWCS.Game.YearzWCS.Game.GenreN)Úwcs.games.MillionaireGamer*   ÚdialogÚ	series_idr#   r   ÚCLASSICÚdesignÚ_buttons_readyÚ_shownÚ_retiredÚ
controllerÚset_ui_callbacksÚ_on_display_updateÚ_on_buttons_updateÚ_on_sidebar_updateÚ	_on_errorÚ_on_set_focusÚ_on_countdownÚ	_on_closeÚ_on_ladder_updateÚ_on_answer_colorsÚset_return_to_menu_callbackÚ_on_return_to_menuÚsetPropertyÚstrÚ_reset_answer_colorsÚ_update_ladder_defaults)ÚselfrB   rC   r#   r+   ÚposterÚfanartÚlogor.   r/   r0   r-   r,   r1   r2   rE   Úyearr*   s                     ún/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/games/MillionaireMyTVAdapter.pyÚ__init__zMillionaireMyTVAdapter.__init__3   sÚ  € ð, 	HÐGÐGÐGÐGÐGàˆŒØ"ˆŒØˆŒ
ØÐ/¥¤ˆŒØ#ˆÔØˆŒØˆŒØ3Ð3Ø˜d¨%¸JØ'Ø'Ø)Ø!Øð
ñ 
ô 
ˆŒð 	Œ×(Ò(ØÔ2ØÔ2ØÔ2Ø”~ØÔ(Ø Ô.ØœØ&*Ô&<Ø%)Ô%;ð 	)ñ 
	
ô 
	
ð 
	
ð 	Œ×3Ò3°DÔ4KÑLÔLÐLð 	×ÒÐ,¨fÑ5Ô5Ð5Ø×Ò˜?¨DÑ1Ô1Ð1Ø×ÒÐ,¨fÑ5Ô5Ð5Ø×ÒÐ0¸
ÀiÒ8OÐ8O°"°"ÐUZÑ[Ô[Ð[Ø×Ò˜?¨EÑ2Ô2Ð2Ø×Ò˜?­C°°
¸©O¬OÑ<Ô<Ð<Ø×ÒÐ+¨U¨[°bÑ9Ô9Ð9ð 	×!Ò!Ñ#Ô#Ð#Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&ó    c                 ó`   — | j                              ¦   «          |                      ¦   «          dS )z%Start the game (show welcome screen).N)rI   Ústart_specific_gameÚ_publish©rZ   s    r_   r   zMillionaireMyTVAdapter.startx   s'   € àŒ×+Ò+Ñ-Ô-Ð-Ø�Š‰Œˆˆˆra   c                 ó|  — | j         }|                     d¦  «        r,|                      t          |dd…         ¦  «        ¦  «         dS |dk    r|                      ¦   «          dS |dk    r|                      ¦   «          dS |dk    r|                      ¦   «          dS |t          v r| j         	                    |¦  «         dS |t          v ro|j        }|dk    rt          |dd	¦  «        rd
}t          |         }|                     ||                     d¦  «        ¦  «        }|�|                      |¦  «         dS dS dS )zWThe player asked for something: an answer, a lifeline, a menu button, leaving the game.Úansweré   NÚlife5050ÚlifetipÚlifeaudiencer   Ú_results_shownFr   )rI   Ú
startswithÚhandle_answerÚintÚuse_lifeline_5050Úuse_lifeline_tipÚuse_lifeline_audienceÚLEAVErB   ÚleaveÚCHOICESÚ
game_stateÚgetattrÚgetÚhandle_choice)rZ   ÚintentrI   ÚstateÚchoicesÚindexs         r_   ÚactzMillionaireMyTVAdapter.act}   sc  € à”_ˆ
Ø×Ò˜XÑ&Ô&ð 	*Ø×Ò�s 6¨!¨"¨"¤:™œÑ/Ô/Ð/Ð/Ð/Ø�zÒ!Ð!Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$Ø�yÒ Ð Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#Ø�~Ò%Ð%Ø×&Ò&Ñ(Ô(Ð(Ð(Ð(Ø•uˆ_ˆ_ØŒK×Ò˜fÑ%Ô%Ð%Ð%Ð%Ø•wÐÐØÔ)ˆEØ˜Ò'Ð'­G°JÐ@PÐRWÑ,XÔ,XÐ'Ø!�Ý˜f”oˆGØ—K’K  w§{¢{°4Ñ'8Ô'8Ñ9Ô9ˆEØÐ Ø×"Ò" 5Ñ)Ô)Ð)Ð)Ð)ð Ðð !Ð ra   c                 óB  — | j         s| j        j        sdS t          j        | j        ¦  «        }| j        rdnd|d<   |                     ¦   «         D ]M\  }}d|z   }| j         	                    |¦  «        |k    r%|| j        |<   | j
                             ||¦  «         ŒNdS )zUGive a modern design the properties of the screen the game is on (only what changed).NÚtruer'   ÚButtonsReadyú	WCS.Game.)rH   rE   Úmodernr   ÚviewrI   rF   ÚitemsrG   rx   rB   rV   )rZ   ÚvaluesÚkeyÚvalueÚnames        r_   rd   zMillionaireMyTVAdapter._publish“   s±   € àŒ=ð 	 ¤Ô 2ð 	ØˆFÝ” ¤Ñ0Ô0ˆØ+/Ô+>Ð!F  ÀBˆˆ~ÑØ Ÿ,š,™.œ.ð 	5ð 	5‰JˆC�Ø Ñ$ˆDØŒ{�Š˜tÑ$Ô$¨Ò-Ð-Ø$)�”˜DÑ!Ø”×'Ò'¨¨eÑ4Ô4Ð4øð		5ð 	5ra   c                 ó´   — | j         j        rA| j         j                             t	          j        | j        ¦  «        | j         j        ¦  «        S | j         j        S )z8The control to focus first on the screen the game is on.)rE   rƒ   r   rx   r   Ú	screen_ofrI   Úmenu_primaryre   s    r_   Úfocus_targetz#MillionaireMyTVAdapter.focus_targetŸ   sJ   € àŒ;Ôð 	kØ”;Ô&×*Ò*­9Ô+>¸t¼Ñ+OÔ+OÐQUÔQ\ÔQiÑjÔjÐjØŒ{Ô'Ð'ra   c                 ó4   — t          j        | j        ¦  «        S ©N)r   r‹   rI   re   s    r_   ÚscreenzMillionaireMyTVAdapter.screen¥   s   € ÝÔ" 4¤?Ñ3Ô3Ð3ra   c                 óZ  — | j         rdS d| _         | j        }|                     dddd¦  «         |                     d¦  «         |                     ¦   «          d|_        |                     ¦   «          t          |j        dd¦  «        }|r
 |¦   «          ddl	m
}  |¦   «         |_        dS )zBDetach game workers before the shared shell replaces this adapter.NTFÚstopr   )ÚSilentVoice)rH   rI   rJ   rT   Ú_cancel_autoplay_timerÚ_autoplay_enabledÚstop_ladder_animationrw   ÚvoiceÚwcs.games.voicer“   )rZ   rI   Ú
stop_voicer“   s       r_   ÚretirezMillionaireMyTVAdapter.retire¨   sÆ   € àŒ=ð 	ØˆFØˆŒØ”_ˆ
Ø×#Ò# D¨$°°dÑ;Ô;Ð;Ø×.Ò.¨tÑ4Ô4Ð4Ø×)Ò)Ñ+Ô+Ð+Ø',ˆ
Ô$Ø×(Ò(Ñ*Ô*Ð*Ý˜ZÔ-¨v°tÑ<Ô<ˆ
Øð 	ØˆJ‰LŒLˆLØ/Ð/Ð/Ð/Ð/Ð/Ø&˜;™=œ=ˆ
ÔÐÐra   c                 ó:   — | j                              |¦  «         dS )z!Handle answer button press (0-3).N)rI   Úanswer_question)rZ   r}   s     r_   rn   z$MillionaireMyTVAdapter.handle_answer¹   s   € àŒ×'Ò'¨Ñ.Ô.Ð.Ð.Ð.ra   c                 ó:   — | j                              |¦  «         dS )z.Handle menu choice (welcome/feedback buttons).N)rI   Úhandle_game_choice)rZ   Úchoice_indexs     r_   ry   z$MillionaireMyTVAdapter.handle_choice½   s   € àŒ×*Ò*¨<Ñ8Ô8Ð8Ð8Ð8ra   c                 ó8   — | j                              ¦   «          dS )zUse 50:50 lifeline.N)rI   Úuse_5050_lifelinere   s    r_   rp   z(MillionaireMyTVAdapter.use_lifeline_5050Á   s   € àŒ×)Ò)Ñ+Ô+Ð+Ð+Ð+ra   c                 ó8   — | j                              ¦   «          dS )zUse tip lifeline.N)rI   Úuse_tip_lifelinere   s    r_   rq   z'MillionaireMyTVAdapter.use_lifeline_tipÅ   s   € àŒ×(Ò(Ñ*Ô*Ð*Ð*Ð*ra   c                 ó8   — | j                              ¦   «          dS )zUse audience poll lifeline.N)rI   Úuse_audience_poll_lifelinere   s    r_   rr   z,MillionaireMyTVAdapter.use_lifeline_audienceÉ   s   € àŒ×2Ò2Ñ4Ô4Ð4Ð4Ð4ra   c                 ó   — | j         j        S r�   ©rI   rv   re   s    r_   rv   z!MillionaireMyTVAdapter.game_stateÍ   s   € àŒÔ)Ð)ra   c                 ó   — | j         j        dv S )z(Return True if in active question state.©ÚplayingÚanswer_pendingr§   re   s    r_   Ú
is_playingz!MillionaireMyTVAdapter.is_playingÑ   s   € àŒÔ)ð .
ð 
ð 	
ra   c                 ó"   — | j         j        dk    S )z-Return True if waiting for answer evaluation.r«   r§   re   s    r_   Úis_answer_pendingz(MillionaireMyTVAdapter.is_answer_pending×   s   € àŒÔ)Ð-=Ò=Ð=ra   c                 óˆ  — | j         rdS |sL| j                             dd¦  «         | j                             dd¦  «         |                      ¦   «          dS |                     d¦  «        }|r|d         nd}ddl}|                     dd|¦  «                             ¦   «         }d}|t          |¦  «        k     r ||                              ¦   «         dk    rd	}d 	                    ||d…         ¦  «        }| j                             d|¦  «         | j                             d|¦  «         |                      ¦   «          dS )
zÆUpdate title label and main content text area.

        Extracts the first non-empty line as the title (stripping Kodi
        formatting tags) and puts the remaining text into the textbox.
        NúWCS.Game.Titler'   úWCS.Game.Textú
r   z#\[/?(?:COLOR|B|I|UPPERCASE)[^\]]*\]r   é   )
rH   rB   rV   rd   ÚsplitÚreÚsubÚstripÚlenÚjoin)rZ   ÚtextÚlinesÚ
title_linerµ   Úclean_titleÚ
rest_startÚ	remainings           r_   rK   z)MillionaireMyTVAdapter._on_display_updateÝ   s@  € ð Œ=ð 	ØˆFØð 	ØŒK×#Ò#Ð$4°bÑ9Ô9Ð9ØŒK×#Ò# O°RÑ8Ô8Ð8Ø�MŠM‰OŒOˆOØˆFà—
’
˜4Ñ Ô ˆà!&Ð.�U˜1”X�X¨Bˆ
àˆ	ˆ	ˆ	Ø—f’fÐCÀRÈÑTÔT×ZÒZÑ\Ô\ˆð ˆ
Ø�˜E™
œ
Ò"Ð" u¨ZÔ'8×'>Ò'>Ñ'@Ô'@ÀBÒ'FÐ'FØˆJØ—I’I˜e J K KÔ0Ñ1Ô1ˆ	àŒ×ÒÐ 0°+Ñ>Ô>Ð>ØŒ×Ò °Ñ;Ô;Ð;Ø�Š‰Œˆˆˆra   c                 ó  — | j         rdS g d¢}d}t          | j        dd¦  «        |v }|�rht          |¦  «        D ]W\  }}|dk     rL||         }|r$| j                             d|› �|› d|› �¦  «         Œ9| j                             d|› �d¦  «         ŒXd	| _        | j                             d
d¦  «         t          | j        di ¦  «        }|r|                     dd¦  «        nd}	| j                             d|	¦  «         |                      ¦   «          |  	                    ¦   «          t          | j        d¦  «        rUt          d„ t          |dd…         ¦  «        D ¦   «         d¦  «        }
| j                             t          |
z   d¬¦  «         dS dS | j                             d
¦  «         g }|D ]h}|rdt          |¦  «        dk    r<|d         dk    r0|                     |dd…                              ¦   «         ¦  «         ŒS|                     |¦  «         Œi| j                             dt          |¦  «        dk    r|d         nd¦  «         | j                             dt          |¦  «        dk    r|d         nd¦  «         t%          |¦  «        o|d         t&          k    | _        |  	                    ¦   «          | j        rEt          | j        d¦  «        r2| j                             |                      ¦   «         d¬¦  «         dS dS dS )z1Update answer button labels and show/hide footer.N©ÚAÚBÚCÚDr©   rv   r'   é   úWCS.Game.Answerz: FúWCS.Game.ShowAnswersr€   Úcurrent_questionÚquestionúWCS.Game.QuestionÚ_delayed_focusc              3   ó$   K  — | ]\  }}|¯|V — Œd S r�   © )Ú.0ÚiÚlabels      r_   ú	<genexpr>z<MillionaireMyTVAdapter._on_buttons_update.<locals>.<genexpr>  s+   è è € ÐOÐO¡H A uÈÐO˜aÐOÐOÐOÐOÐOÐOra   r   g333333Ã?)Údelayr³   r   ú:é   úWCS.Game.MenuBtn1úWCS.Game.MenuBtn2)rH   rw   rI   Ú	enumeraterB   rV   rF   rx   rX   rd   Úhasattrr   rÌ   ÚANSWER_FIRST_IDÚclearPropertyr¸   Úappendr·   ÚboolÚLOADING_LABELr�   )rZ   ÚlabelsÚ
letter_mapÚanswer_statesÚis_answer_staterÐ   rÑ   ÚletterrÊ   Úquestion_textÚfirstÚmenu_labelss               r_   rL   z)MillionaireMyTVAdapter._on_buttons_updateü   s]  € àŒ=ð 	ØˆFØ)Ð)Ð)ˆ
ð 6ˆÝ! $¤/°<ÀÑDÔDÈÐUˆàñ +	Lå% fÑ-Ô-ð Pð P‘��5Ø�q’5�5Ø'¨œ]�FØð PØœ×/Ò/Ð0JÀ&Ð0JÐ0JÈvÐL`ÐL`ÐY^ÐL`ÐL`ÑaÔaÐaÐaàœ×/Ò/Ð0JÀ&Ð0JÐ0JÈBÑOÔOÐOøà"'ˆDÔØŒK×#Ò#Ð$:¸FÑCÔCÐCå˜tœÐ0BÀBÑGÔGˆHØ<DÐL˜HŸLšL¨°RÑ8Ô8Ð8È"ˆMØŒK×#Ò#Ð$7¸ÑGÔGÐGà×%Ò%Ñ'Ô'Ð'Ø�MŠM‰OŒOˆOå�t”{Ð$4Ñ5Ô5ð PÝÐOÐOµ	¸&ÀÀ!À¼*Ñ0EÔ0EÐOÑOÔOÐQRÑSÔS�Ø”×*Ò*­?¸UÑ+BÈ$Ð*ÑOÔOÐOÐOÐOðPð Pð
 ŒK×%Ò%Ð&<Ñ=Ô=Ð=ð ˆKØð 2ð 2�Øð 2å˜5‘z”z A’~�~¨%°¬(°cª/¨/Ø#×*Ò*¨5°°°¬9¯?ª?Ñ+<Ô+<Ñ=Ô=Ð=Ð=à#×*Ò*¨5Ñ1Ô1Ð1øàŒK×#Ò#Ð$7Í3È{ÑK[ÔK[Ð^_ÒK_ÐK_¸ÀQ¼¸ÐegÑhÔhÐhØŒK×#Ò#Ð$7Í3È{ÑK[ÔK[Ð^_ÒK_ÐK_¸ÀQ¼¸ÐegÑhÔhÐhÝ"& {Ñ"3Ô"3Ð"W¸ÀA¼Í-Ò8WˆDÔØ�MŠM‰OŒOˆOàÔ"ð L¥w¨t¬{Ð<LÑ'MÔ'Mð LØ”×*Ò*¨4×+<Ò+<Ñ+>Ô+>ÀdÐ*ÑKÔKÐKÐKÐKðLð Lð Lð Lra   c                 óh   — | j         rdS |                      ¦   «          |                      ¦   «          dS )z0Update sidebar (we use ladder + lifeline state).N)rH   Ú_update_lifeline_staterd   re   s    r_   rM   z)MillionaireMyTVAdapter._on_sidebar_update3  s4   € àŒ=ð 	ØˆFØ×#Ò#Ñ%Ô%Ð%Ø�Š‰Œˆˆˆra   c                 óÀ   — | j         rdS t          j        d|› �t          j        ¦  «         t	          | j        d¦  «        r| j                             |d¦  «         dS dS )zShow error via toast.Nz[MyTV Game] Error: Ú_show_toastr   )rH   ÚxbmcÚlogÚLOGERRORrÙ   rB   rê   )rZ   Úmessages     r_   rN   z MillionaireMyTVAdapter._on_error:  sj   € àŒ=ð 	ØˆFÝŒÐ0 wÐ0Ð0µ$´-Ñ@Ô@Ð@Ý�4”; Ñ.Ô.ð 	6ØŒK×#Ò# G¨WÑ5Ô5Ð5Ð5Ð5ð	6ð 	6ra   c                 óN  — | j         rdS |                      ¦   «         rI	 | j                             t          |t          d¦  «        v r|ndz   ¦  «         dS # t          $ r Y dS w xY w	 | j                             |                      ¦   «         ¦  «         dS # t          $ r Y dS w xY w)z<Map the controller's button index to a control of the panel.NrÆ   r   )rH   r¬   rB   Ú
setFocusIdrÚ   ÚrangeÚ	Exceptionr�   )rZ   Ú
control_ids     r_   rO   z$MillionaireMyTVAdapter._on_set_focusB  sÕ   € àŒ=ð 	ØˆFð �?Š?ÑÔð 		ðØ”×&Ò&¥È
ÕV[Ð\]ÑV^ÔV^ÐH^ÐH^¸*¸*ÐdeÑ'fÑgÔgÐgÐgÐgøÝð ð ð Ø��ðøøøðØ”×&Ò& t×'8Ò'8Ñ':Ô':Ñ;Ô;Ð;Ð;Ð;øÝð ð ð Ø��ðøøøs#   Ÿ5A Á
A$Á#A$Á(,B Â
B$Â#B$c                 óN   — | j         rdS | j                             ||¦  «         dS )z&Start countdown for answer evaluation.N)rH   rI   Ú$start_countdown_with_dynamic_buttons)rZ   ÚsecondsÚcallbacks      r_   rP   z$MillionaireMyTVAdapter._on_countdownS  s/   € àŒ=ð 	ØˆFØŒ×<Ò<¸WÀhÑOÔOÐOÐOÐOra   c                 óx   — | j         rdS t          | j        d¦  «        r| j                             ¦   «          dS dS )zClose game dialog.NÚ_close_game_dialog)rH   rÙ   rB   rù   re   s    r_   rQ   z MillionaireMyTVAdapter._on_closeY  sJ   € àŒ=ð 	ØˆFÝ�4”;Ð 4Ñ5Ô5ð 	-ØŒK×*Ò*Ñ,Ô,Ð,Ð,Ð,ð	-ð 	-ra   c                 ól  — | j         rdS | j                             d¦  «         | j                             d¦  «         |                      ¦   «          | j                             dd¦  «         | j                             dd¦  «         	 | j                             d¦  «         dS # t          $ r Y dS w xY w)	zReturn to welcome menu.NrÈ   rË   rÖ   u	   HrÃ¡t hrur×   ÚPravidlai*%  )rH   rB   rÛ   rX   rV   rð   rò   re   s    r_   rU   z)MillionaireMyTVAdapter._on_return_to_menu`  sÆ   € àŒ=ð 	ØˆFØŒ×!Ò!Ð"8Ñ9Ô9Ð9ØŒ×!Ò!Ð"5Ñ6Ô6Ð6Ø×!Ò!Ñ#Ô#Ð#àŒ×ÒÐ 3°[ÑAÔAÐAØŒ×ÒÐ 3°ZÑ@Ô@Ð@ð	ØŒK×"Ò" 4Ñ(Ô(Ð(Ð(Ð(øÝð 	ð 	ð 	ØˆDˆDð	øøøs   Â	B% Â%
B3Â2B3c                 ó¾  — | j         rdS | j                             ¦   «         }|                     ¦   «         D ]‘\  }}|d         }| j                             d|› �|d         ¦  «         |d         dk    rt          }n-|d         dk    rt          }n|d         dv rt          }nt          }| j                             d|› d	�|¦  «         Œ’|  
                    ¦   «          dS )
z$Update ladder from controller state.NÚquestion_numúWCS.Game.Ladder.Úbgcolorr{   ÚcurrentÚ	completed)ÚemptyÚ
generatingú.Color)rH   rI   Úget_millionaire_ladder_statesr…   rB   rV   ÚCOLOR_LADDER_TEXT_CURRENTÚCOLOR_LADDER_TEXT_COMPLETEDÚCOLOR_LADDER_TEXT_DEFAULTÚCOLOR_LADDER_TEXT_DIMrd   )rZ   Úladder_statesÚ_ctrl_idr{   Úq_numÚ
text_colors         r_   rR   z(MillionaireMyTVAdapter._on_ladder_updateo  s÷   € àŒ=ð 	ØˆFØœ×EÒEÑGÔGˆØ,×2Ò2Ñ4Ô4ð 	Rð 	R‰OˆH�eØ˜.Ô)ˆEØŒK×#Ò#Ð$>°uÐ$>Ð$>ÀÀiÔ@PÑQÔQÐQð �WŒ~ Ò*Ð*Ý6�
�
Ø�w” ;Ò.Ð.Ý8�
�
Ø�w”Ð#:Ð:Ð:Ý6�
�
å2�
ØŒK×#Ò#Ð$D°uÐ$DÐ$DÐ$DÀjÑQÔQÐQÐQØ�Š‰Œˆˆˆra   c                 ó    — dD ]J}| j                              d|› d�t          ¦  «         | j                              d|› d�t          ¦  «         ŒKdS )z*Reset all answer button colors to default.rÁ   rÇ   r  ú.FocusColorN)rB   rV   ÚCOLOR_ANSWER_DEFAULTÚCOLOR_ANSWER_FOCUS)rZ   rã   s     r_   rX   z+MillionaireMyTVAdapter._reset_answer_colors†  sl   € à*ð 	_ð 	_ˆFØŒK×#Ò#Ð$D°fÐ$DÐ$DÐ$DÕFZÑ[Ô[Ð[ØŒK×#Ò#Ð$I°fÐ$IÐ$IÐ$IÕK]Ñ^Ô^Ð^Ð^ð	_ð 	_ra   c                 óà   — g d¢}d|cxk    rdk     r\n dS ||         }|rt           nt          }| j                             d|› d�|¦  «         | j                             d|› d�|¦  «         dS dS )z)Set answer button color after evaluation.rÁ   r   rÆ   rÇ   r  r  N)ÚCOLOR_ANSWER_CORRECTÚCOLOR_ANSWER_WRONGrB   rV   )rZ   r}   Ú
is_correctÚlettersrã   Úcolors         r_   Úset_answer_colorz'MillionaireMyTVAdapter.set_answer_colorŒ  s—   € à&Ð&Ð&ˆØ�ˆ>ˆ>Š>ˆ>˜Š>ˆ>ˆ>ˆ>ˆ>ˆ>Ø˜U”^ˆFØ,6ÐNÕ(Ð(Õ<NˆEØŒK×#Ò#Ð$D°fÐ$DÐ$DÐ$DÀeÑLÔLÐLØŒK×#Ò#Ð$I°fÐ$IÐ$IÐ$IÈ5ÑQÔQÐQÐQÐQð	 ˆ>ra   c                 ó  — | j         rdS g d¢}|dk    r*|                      ¦   «          |                      ¦   «          dS |��t          d¦  «        D ]ö}||         }||k    rI| j                             d|› d�t          ¦  «         | j                             d|› d�t          ¦  «         ŒY||k    rO||k    rI| j                             d|› d�t          ¦  «         | j                             d|› d�t          ¦  «         Œ®| j                             d|› d�t          ¦  «         | j                             d|› d�t          ¦  «         Œ÷n±t          d¦  «        D ]¡}||         }||k    rI| j                             d|› d�t          ¦  «         | j                             d|› d�t          ¦  «         ŒY| j                             d|› d�t          ¦  «         | j                             d|› d�t          ¦  «         Œ¢|                      ¦   «          dS )u'  Callback pro nastavenÃ­ barev odpovÄ›dÃ­ na tlaÄ�Ã­tkÃ¡ch.
        
        FÃ¡ze 1 (countdown): correct_index=None -> vybranÃ¡ = modrÃ¡ focus barva
        FÃ¡ze 2 (reveal): correct_index set -> sprÃ¡vnÃ¡ = zelenÃ¡, Å¡patnÃ¡ = Ä�ervenÃ¡
        Reset: selected_index=-1 -> vÅ¡e default
        NrÁ   éÿÿÿÿrÆ   rÇ   r  r  )
rH   rX   rd   rñ   rB   rV   r  r  r  r  )rZ   Úselected_indexÚcorrect_indexr  rÐ   rã   s         r_   rS   z(MillionaireMyTVAdapter._on_answer_colors•  sX  € ð Œ=ð 	ØˆFØ&Ð&Ð&ˆà˜RÒÐà×%Ò%Ñ'Ô'Ð'Ø�MŠM‰OŒOˆOØˆFàÑ$å˜1‘X”Xð 
gð 
g�Ø  œ�Ø˜Ò%Ð%Ø”K×+Ò+Ð,L¸fÐ,LÐ,LÐ,LÕNbÑcÔcÐcØ”K×+Ò+Ð,Q¸fÐ,QÐ,QÐ,QÕSgÑhÔhÐhÐhØ˜.Ò(Ð(¨^¸}Ò-LÐ-LØ”K×+Ò+Ð,L¸fÐ,LÐ,LÐ,LÕN`ÑaÔaÐaØ”K×+Ò+Ð,Q¸fÐ,QÐ,QÐ,QÕSeÑfÔfÐfÐfà”K×+Ò+Ð,L¸fÐ,LÐ,LÐ,LÕNbÑcÔcÐcØ”K×+Ò+Ð,Q¸fÐ,QÐ,QÐ,QÕSeÑfÔfÐfÐfð
gõ ˜1‘X”Xð gð g�Ø  œ�Ø˜Ò&Ð&Ø”K×+Ò+Ð,L¸fÐ,LÐ,LÐ,LÕN`ÑaÔaÐaØ”K×+Ò+Ð,Q¸fÐ,QÐ,QÐ,QÕSeÑfÔfÐfÐfà”K×+Ò+Ð,L¸fÐ,LÐ,LÐ,LÕNbÑcÔcÐcØ”K×+Ò+Ð,Q¸fÐ,QÐ,QÐ,QÕSeÑfÔfÐfÐfØ�Š‰Œˆˆˆra   c                 óô   — | j         j        r| j                             dd¦  «         | j         j        r| j                             dd¦  «         | j         j        r| j                             dd¦  «         dS dS )zUpdate lifeline button states.úWCS.Game.Lifeline5050ÚusedúWCS.Game.LifelineTipúWCS.Game.LifelineAudienceN)rI   Úlifeline_5050_usedrB   rV   Úlifeline_tip_usedÚlifeline_audience_usedre   s    r_   rè   z-MillionaireMyTVAdapter._update_lifeline_state¿  s‰   € àŒ?Ô-ð 	EØŒK×#Ò#Ð$;¸VÑDÔDÐDØŒ?Ô,ð 	DØŒK×#Ò#Ð$:¸FÑCÔCÐCØŒ?Ô1ð 	IØŒK×#Ò#Ð$?ÀÑHÔHÐHÐHÐHð	Ið 	Ira   c                 óº   — t          dd¦  «        D ]I}| j                             d|› �t          ¦  «         | j                             d|› d�t          ¦  «         ŒJdS )z3Set default ladder colors (all rows default state).r   é
   rþ   r  N)rñ   rB   rV   ÚCOLOR_LADDER_DEFAULTr  )rZ   rÐ   s     r_   rY   z.MillionaireMyTVAdapter._update_ladder_defaultsÈ  sq   € å�q˜"‘”ð 	]ð 	]ˆAØŒK×#Ò#Ð$:°qÐ$:Ð$:Õ<PÑQÔQÐQØŒK×#Ò#Ð$@°qÐ$@Ð$@Ð$@ÕB[Ñ\Ô\Ð\Ð\ð	]ð 	]ra   c                 óF  — g d¢}|D ]}| j                              |¦  «         ŒdD ][}| j                              d|› �¦  «         | j                              d|› d�¦  «         | j                              d|› d�¦  «         Œ\t          dd¦  «        D ]=}| j                              d|› �¦  «         | j                              d|› d�¦  «         Œ>t          j        ¦   «         g d	¢z   D ]}| j                              d
|z   ¦  «         Œ | j                             ¦   «          dS )zClear all game properties.)zWCS.MyTV.Game.ActivezWCS.Game.Stater±   r°   rË   rÈ   r<   r=   r>   r?   rÖ   r×   r  r   r!  rÁ   rÇ   r  r  r   r&  rþ   )r�   ÚNameÚYearÚGenrer‚   N)rB   rÛ   rñ   r   ÚkeysrG   Úclear)rZ   ÚpropsÚprã   rÐ   r‡   s         r_   ÚcleanupzMillionaireMyTVAdapter.cleanupÎ  sl  € ð	
ð 	
ð 	
ˆð ð 	)ð 	)ˆAØŒK×%Ò% aÑ(Ô(Ð(Ð(à*ð 	Mð 	MˆFØŒK×%Ò%Ð&@¸Ð&@Ð&@ÑAÔAÐAØŒK×%Ò%Ð&F¸Ð&FÐ&FÐ&FÑGÔGÐGØŒK×%Ò%Ð&K¸Ð&KÐ&KÐ&KÑLÔLÐLÐLå�q˜"‘”ð 	Dð 	DˆAØŒK×%Ò%Ð&<¸Ð&<Ð&<Ñ=Ô=Ð=ØŒK×%Ò%Ð&B¸Ð&BÐ&BÐ&BÑCÔCÐCÐCå”>Ñ#Ô#Ð&OÐ&OÐ&OÑOð 	9ð 	9ˆCØŒK×%Ò% k°CÑ&7Ñ8Ô8Ð8Ð8ØŒ×ÒÑÔÐÐÐra   )	r'   NNr(   r'   NNNr'   r�   )#Ú__name__Ú
__module__Ú__qualname__Ú__doc__r`   r   r~   rd   r�   r�   rš   rn   ry   rp   rq   rr   Úpropertyrv   r¬   r®   rK   rL   rM   rN   rO   rP   rQ   rU   rR   rX   r  rS   rè   rY   r0  rÎ   ra   r_   r&   r&   0   s  € € € € € ØDÐDð GKØacðC'ð C'ð C'ð C'ðJð ð ð
*ð *ð *ð,
5ð 
5ð 
5ð(ð (ð (ð4ð 4ð 4ð)ð )ð )ð"/ð /ð /ð9ð 9ð 9ð,ð ,ð ,ð+ð +ð +ð5ð 5ð 5ð ð*ð *ñ „Xð*ð
ð 
ð 
ð>ð >ð >ðð ð ð>5Lð 5Lð 5Lðnð ð ð6ð 6ð 6ðð ð ð"Pð Pð Pð-ð -ð -ðð ð ðð ð ð._ð _ð _ðRð Rð Rð(ð (ð (ð (ðTIð Ið Ið]ð ]ð ]ðð ð ð ð ra   r&   )r4  rë   Ú	wcs.gamesr   r   rÚ   r  r  r  r  ÚCOLOR_ANSWER_DISABLEDr'  ÚCOLOR_LADDER_CURRENTÚCOLOR_LADDER_COMPLETEDÚCOLOR_LADDER_FAILEDr  r  r  r	  ru   rs   rÞ   r&   rÎ   ra   r_   ú<module>r;     s3  ððð ð €€€à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ð €ð "Ð ØÐ Ø!Ð ØÐ Ø"Ð ð "Ð Ø!Ð Ø#Ð Ø Ð Ø&Ð Ø&Ð Ø(Ð Ø"Ð ð �aˆy¨¨a yØ%&¸QÐRSÐTÐTØ# QÐ'Ø  !Ð$Ø Ð"Ø Ð#Ø!"°ÀQÐSTÐUÐUØ�qˆ\ð	ð 	€ð 	!€Ø!€ðxð xð xð xð xñ xô xð xð xð xra   