Plan 9 from Bell Labs’s /usr/web/sources/contrib/stallion/root/sys/lib/python2.7/idlelib/tabbedpages.pyo

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


�`^c@s�dZddlTdefd��YZdefd��YZdefd��YZd	efd
��YZd�Ze	dkr�dd
l
mZee�ndS(sAn implementation of tabbed pages using only standard Tkinter.

Originally developed for use in IDLE. Based on tabpage.py.

Classes exported:
TabbedPageSet -- A Tkinter implementation of a tabbed-page widget.
TabSet -- A widget containing tabs (buttons) in one or more rows.

i�(t*tInvalidNameErrorcBseZRS((t__name__t
__module__(((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRstAlreadyExistsErrorcBseZRS((RR(((s)/sys/lib/python2.7/idlelib/tabbedpages.pyR
stTabSetcBsoeZdZddded�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
efd��YZ
RS(
sjA widget containing tabs (buttons) in one or more rows.

    Only one tab may be selected at a time.

    iicKs�tj|||�||_||_||_||_||_i|_i|_|rjt	|�|_
n	g|_
d
|_g|_
t|dddddtd|jd��|_|jjdtdtd	t�|j�d
S(sConstructor arguments:

        select_command -- A callable which will be called when a tab is
        selected. It is called with the name of the selected tab as an
        argument.

        tabs -- A list of strings, the names of the tabs. Should be specified in
        the desired tab order. The first tab will be the default and first
        active tab. If tabs is None or empty, the TabSet will be initialized
        empty.

        n_rows -- Number of rows of tabs to be shown. If n_rows <= 0 or is
        None, then the number of rows will be decided by TabSet. See
        _arrange_tabs() for details.

        max_tabs_per_row -- Used for deciding how many rows of tabs are needed,
        when the number of rows is not constant. See _arrange_tabs() for
        details.

        theightitborderwidthitrelieft
backgroundtsidetfilltexpandN(tFramet__init__tselect_commandtn_rowstmax_tabs_per_rowtexpand_tabstpage_sett_tabst_tab2rowtlistt
_tab_namestNonet
_selected_tabt	_tab_rowstFLATtcgett
padding_frametpacktTOPtXtFalset
_arrange_tabs(tselfRRttabsRRRtkw((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRs$										cCsY|std|��n||jkr;td|��n|jj|�|j�dS(s.Add a new tab with the name given in tab_name.sInvalid Tab name: '%s'sTab named '%s' already existsN(RRRtappendR"(R#ttab_name((s)/sys/lib/python2.7/idlelib/tabbedpages.pytadd_tabDscCs@||jkr"tdt��n|jj|�|j�dS(sRemove the tab named <tab_name>sNo such Tab: '%sN(RtKeyErrort	page_nametremoveR"(R#R'((s)/sys/lib/python2.7/idlelib/tabbedpages.pyt
remove_tabNscCs�||jkrdS|dk	rA||jkrAtdt��n|jdk	rg|j|jj�nd|_|dk	r�||_|j|}|j�|j|}|j�|j	dt
dtdd�ndS(s1Show the tab named <tab_name> as the selected oneNsNo such Tab: '%sR
RRi(RRRR)R*t
set_normaltset_selectedRtpack_forgetRRR (R#R'ttabttab_row((s)/sys/lib/python2.7/idlelib/tabbedpages.pytset_selected_tabVs		



cCs�|s
dSt|�}|jdtdtdd�|jj|�xx|D]p}tj||j||�}|r�|jdt	dtdt
�n|jdt	�||j|<||j|<qIWt
|_
dS(NR
RRi(R
RRR RR&Rt	TabButtonRtLEFTtTrueRRtis_last_in_row(R#t	tab_namesRR1R'R0((s)/sys/lib/python2.7/idlelib/tabbedpages.pyt_add_tab_rowls

cCs6x&|jr(|jj�}|j�qWi|_dS(N(RtpoptdestroyR(R#R1((s)/sys/lib/python2.7/idlelib/tabbedpages.pyt_reset_tab_rows�sc	CsKx-|jj�D]}|jj|�j�qW|j�|jsGdS|jdk	rq|jdkrq|j}nt|j�d|j	d}|j
p�|dk}d}xet|�D]W}t|j�|d||d}|j|||!}||7}|j||�q�W|j
}|jd�||jkrG|j|�ndS(sW
        Arrange the tabs in rows, in the order in which they were added.

        If n_rows >= 1, this will be the number of rows used. Otherwise the
        number of rows will be calculated according to the number of tabs and
        max_tabs_per_row. In this case, the number of rows may change when
        adding/removing tabs.

        Nii(RtkeysR9R:R;RRRtlenRRtxrangeR8RR2(	R#R'RRtit	row_indextn_tabsR7tselected((s)/sys/lib/python2.7/idlelib/tabbedpages.pyR"�s&
	#
	
R3cBsMeZdZdZd�Zd�Zd�Zd�Zd�Ze	d�Z
RS(sA simple tab-like widget.icCs�tj||d|jdt�||_||_||_t|_t	|d|d|j
ddddd	td
tddd
ddd�	|_|jj
dtdtdt�|j�|j�dS(s�Constructor arguments:

            name -- The tab's name, which will appear in its button.

            select_command -- The command to be called upon selection of the
            tab. It is called with the tab's name as an argument.

            RRttexttcommandtpadxitpadyit	takefocustindicatoronthighlightthicknessitselectcolortR
RRN(R
RtbwtRAISEDtnameRttab_setR!R6tRadiobuttont
_select_eventtFALSEtbuttonRR4R R5t_init_masksR-(R#RNRR1RO((s)/sys/lib/python2.7/idlelib/tabbedpages.pyR�s					
cGs|j|j�dS(ssEvent handler for tab selection.

            With TabbedPageSet, this calls TabbedPageSet.change_page, so that
            selecting a tab changes the page.

            Note that this does -not- call set_selected -- it will be called by
            TabSet.set_selected_tab, which should be called when whatever the
            tabs are related to changes.

            N(RRN(R#targs((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRQ�scCs|jdt�dS(sAssume selected lookRBN(t_place_masksR5(R#((s)/sys/lib/python2.7/idlelib/tabbedpages.pyR.�scCs|jdt�dS(sAssume normal lookRBN(RVR!(R#((s)/sys/lib/python2.7/idlelib/tabbedpages.pyR-�sc
Cs|jj}|jjd�}t|dddtd|�|_t|dddtd|�|_t|jd|jdt	�|j_
|jj
jddd|jdd|jd	|jd
�t|dddtd|�|_t|jd|jdt	�|j_
dS(NR	RiRtxtytwidthiRi(RORtpages_frameRR
RtmasktmsklRLRMtmltplacetmskrtmr(R#RR	((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRT�scCs�|j}|r||j7}n|jjd|ddddddddd	dd
dddd|�	|jjd|ddd|jddddd	dd
|jddd|�	|jj}|r|js�j�|j�|j�|j�kr||j8}n|j	jd|ddddddddd	dd
|jddd|�	|j	j
jd|jd|jd
d
|jd||jd
�|jj�dS(Ntin_trelxgRWitrelyg�trelwidthRYt	relheightRi(RLR[R^R\RORR6twinfo_rootxtwinfo_widthR_R`tlower(R#RBRR((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRV�s4	


#(RRt__doc__RLRRQR.R-RTR!RV(((s)/sys/lib/python2.7/idlelib/tabbedpages.pyR3�s					N(RRRiRR!RR(R,R2R8R;R"R
R3(((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRs	,	
					(t
TabbedPageSetcBs�eZdZdefd��YZdefd��YZdefd��YZdefd��YZded	d
e	d�Z
d�Zd
�Zd�Z
RS(sjA Tkinter tabbed-pane widget.

    Constains set of 'pages' (or 'panes') with tabs above for selecting which
    page is displayed. Only one page will be displayed at a time.

    Pages may be accessed through the 'pages' attribute, which is a dictionary
    of pages, using the name given as the key. A page is an instance of a
    subclass of Tk's Frame widget.

    The page widgets will be created (and destroyed when required) by the
    TabbedPageSet. Do not call the page's pack/place/grid/destroy methods.

    Pages may be added or removed at any time using the add_page() and
    remove_page() methods.

    tPagecBs/eZdZeZd�Zd�Zd�ZRS(s{Abstract base class for TabbedPageSet's pages.

        Subclasses must override the _show() and _hide() methods.

        cCst|dddt�|_dS(NRiR(R
RMtframe(R#R((s)/sys/lib/python2.7/idlelib/tabbedpages.pyR9scCs
t�dS(N(tNotImplementedError(R#((s)/sys/lib/python2.7/idlelib/tabbedpages.pyt_show<scCs
t�dS(N(Rm(R#((s)/sys/lib/python2.7/idlelib/tabbedpages.pyt_hide?s(RRRiR!t	uses_gridRRnRo(((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRk1s
		t
PageRemovecBs&eZdZeZd�Zd�ZRS(sAPage class using the grid placement manager's "remove" mechanism.cCs#|jjdddddt�dS(Ntrowitcolumntsticky(RltgridtNSEW(R#((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRnFscCs|jj�dS(N(Rltgrid_remove(R#((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRoIs(RRRiR5RpRnRo(((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRqBs	tPageLiftcBs/eZdZeZd�Zd�Zd�ZRS(s?Page class using the grid placement manager's "lift" mechanism.cCsIttj|�j|�|jjdddddt�|jj�dS(NRriRsRt(tsuperRjRxRRlRuRvRh(R#R((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRPscCs|jj�dS(N(Rltlift(R#((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRnUscCs|jj�dS(N(RlRh(R#((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRoXs(RRRiR5RpRRnRo(((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRxLs
		tPagePackForgetcBs eZdZd�Zd�ZRS(sAPage class using the pack placement manager's "forget" mechanism.cCs|jjdtdt�dS(NRR(RlRtBOTHR5(R#((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRn]scCs|jj�dS(N(RlR/(R#((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRo`s(RRRiRnRo(((s)/sys/lib/python2.7/idlelib/tabbedpages.pyR{[s	iic		KsPtj|||�||_i|_g|_d
|_d
|_|jddd�|j	ddd�t|�|_
|j
jdddddt�|jj
r�|j
jddd�|j
j	ddd�nt||jd|d|d	|�|_|rx|D]}|j|�qWn|jjdddddt�|j|j�d
S(s�Constructor arguments:

        page_names -- A list of strings, each will be the dictionary key to a
        page's widget, and the name displayed on the page's tab. Should be
        specified in the desired page order. The first page will be the default
        and first active page. If page_names is None or empty, the
        TabbedPageSet will be initialized empty.

        n_rows, max_tabs_per_row -- Parameters for the TabSet which will
        manage the tabs. See TabSet's docs for details.

        page_class -- Pages can be shown/hidden using three mechanisms:

        * PageLift - All pages will be rendered one on top of the other. When
          a page is selected, it will be brought to the top, thus hiding all
          other pages. Using this method, the TabbedPageSet will not be resized
          when pages are switched. (It may still be resized when pages are
          added/removed.)

        * PageRemove - When a page is selected, the currently showing page is
          hidden, and the new page shown in its place. Using this method, the
          TabbedPageSet may resize when pages are changed.

        * PagePackForget - This mechanism uses the pack placement manager.
          When a page is shown it is packed, and when it is hidden it is
          unpacked (i.e. pack_forget). This mechanism may also cause the
          TabbedPageSet to resize when the page is changed.

        itweightiRrRsRtRRRN(R
Rt
page_classtpagest_pages_orderRt
_current_paget
_default_pagetcolumnconfiguretrowconfigureRZRuRvRpRtchange_paget_tab_settadd_page(	R#tparentt
page_namesR~RRRR%RN((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRcs* 					
cCs�|std|��n||jkr;td|��n|j|j�|j|<|jj|�|jj|�t	|j�dkr�||_
|j|�ndS(s0Add a new page with the name given in page_name.sInvalid TabPage name: '%s's!TabPage named '%s' already existsiN(RRRR~RZR�R&R�R(R=R�R�(R#R*((s)/sys/lib/python2.7/idlelib/tabbedpages.pyR��s	cCs�||jkr"td|��n|jj|�t|j�dkrl||jkru|jd|_qun	d|_||jkr�|j|j�n|j	j
|�|jj|�}|jj
�dS(s2Destroy the page whose name is given in page_name.sNo such TabPage: '%siN(RR)R�R+R=R�RR�R�R�R,R9RlR:(R#R*tpage((s)/sys/lib/python2.7/idlelib/tabbedpages.pytremove_page�s	cCs�|j|krdS|dk	rA||jkrAtd|��n|jdk	rg|j|jj�nd|_|dk	r�||_|j|j�n|jj|�dS(s/Show the page whose name is given in page_name.NsNo such TabPage: '%s'(R�RRR)RoRnR�R2(R#R*((s)/sys/lib/python2.7/idlelib/tabbedpages.pyR��s		N(RRRitobjectRkRqRxR{RR!RR�R�R�(((s)/sys/lib/python2.7/idlelib/tabbedpages.pyRj s
;		c	s�t�}ttttjd|j����\}}}}|jd||df�|jd�t|dddgdd	d
t	���j
dtdtd
t
�t�jdjdddd�j
�t�jdjdddd�j
�t�jdjdd�j
�t|��t|ddd��fd��}t|ddd��fd��}t|dd�}|j
dddd�|j
dddd�|j
dd��j
dd�|j�dS(Ns[x+]s+%d+%di�sTest tabbed pagesR�tFoobartBazRiRR
RRRCtFooRFitBarsAdd PageRDcs�j�j��S(N(R�tget((tentryPgNamettabPage(s)/sys/lib/python2.7/idlelib/tabbedpages.pyt<lambda>�ssRemove Pagecs�j�j��S(N(R�R�((R�R�(s)/sys/lib/python2.7/idlelib/tabbedpages.pyR��ssname of page to add/remove:REi(tTkRtmaptinttretsplittgeometryttitleRjR!RRtTRUER|tLabelRRltEntrytButtontmainloop(	R�trootRYRRWRXt	buttonAddtbuttonRemovetlabelPgName((R�R�s)/sys/lib/python2.7/idlelib/tabbedpages.pyt
_tabbed_pages�s*	3
	&& t__main__(trunN(RitTkintert	ExceptionRRR
RRjR�Rtidlelib.idle_test.htestR�(((s)/sys/lib/python2.7/idlelib/tabbedpages.pyt<module>	s
��

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].