ó żœ^c@sEdZddlZddlmZddlZddd„ƒYZdS(s˝Switchboard class. This class is used to coordinate updates among all Viewers. Every Viewer must conform to the following interface: - it must include a method called update_yourself() which takes three arguments; the red, green, and blue values of the selected color. - When a Viewer selects a color and wishes to update all other Views, it should call update_views() on the Switchboard object. Note that the Viewer typically does *not* update itself before calling update_views(), since this would cause it to get updated twice. Optionally, Viewers can also implement: - save_options() which takes an optiondb (a dictionary). Store into this dictionary any values the Viewer wants to save in the persistent ~/.pynche file. This dictionary is saved using marshal. The namespace for the keys is ad-hoc; make sure you don't clobber some other Viewer's keys! - withdraw() which takes no arguments. This is called when Pynche is unmapped. All Viewers should implement this. - colordb_changed() which takes a single argument, an instance of ColorDB. This is called whenever the color name database is changed and gives a chance for the Viewers to do something on those events. See ListViewer for details. External Viewers are found dynamically. Viewer modules should have names such as FooViewer.py. If such a named module has a module global variable called ADDTOVIEW and this variable is true, the Viewer will be added dynamically to the `View' menu. ADDTOVIEW contains a string which is used as the menu item to display the Viewer (one kludge: if the string contains a `%', this is used to indicate that the next character will get an underline in the menu, otherwise the first character is underlined). FooViewer.py should contain a class called FooViewer, and its constructor should take two arguments, an instance of Switchboard, and optionally a Tk master window. i˙˙˙˙N(tDictTypet SwitchboardcBsweZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d d „Z d „Z RS( cCsć||_d|_i|_g|_d|_d|_d|_d|_d}|râztySt |ƒ}t j |ƒ|_t |jt ƒsŠtjdI|IJi|_nWntttfk rĆnXWd|rŢ|jƒnXndS(Nis"Problem reading options from file:(t_Switchboard__initfiletNonet_Switchboard__colordbt_Switchboard__optiondbt_Switchboard__viewst_Switchboard__redt_Switchboard__greent_Switchboard__bluet_Switchboard__canceledtopentmarshaltloadt isinstanceRtsyststderrtIOErrortEOFErrort ValueErrortclose(tselftinitfiletfp((s8/usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt__init__3s,          cCs|jj|ƒdS(N(Rtappend(Rtview((s8/usr/lib64/python2.7/site-packages/pynche/Switchboard.pytadd_viewMscCsF||_||_||_x$|jD]}|j|||ƒq%WdS(N(RRR Rtupdate_yourself(Rtredtgreentbluetv((s8/usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt update_viewsPs    cCs |j|j|j|jƒdS(N(R!RRR (R((s8/usr/lib64/python2.7/site-packages/pynche/Switchboard.pytupdate_views_currentWscCs|j|j|jfS(N(RRR (R((s8/usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt current_rgbZscCs|jS(N(R(R((s8/usr/lib64/python2.7/site-packages/pynche/Switchboard.pytcolordb]scCsJ||_x0|jD]%}t|dƒr|j|ƒqqW|jƒdS(Ntcolordb_changed(RRthasattrR%R"(RR$R ((s8/usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt set_colordb`s  cCs|jS(N(R(R((s8/usr/lib64/python2.7/site-packages/pynche/Switchboard.pytoptiondbgscCsô|j|jd<|j|jd<|j|jd*s