U
    .R”iŽ#  ã                   @   sò   d dl m Z  d dlmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ G d
d„ deeƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )é    )Úcopy)Úsafe_string)Úget_column_letterÚget_column_intervalÚcolumn_index_from_stringÚrange_boundaries)ÚDEFAULT_COLUMN_WIDTH)ÚIntegerÚFloatÚBoolÚStrictÚStringÚAlias)ÚSerialisable)ÚStyleableObject)ÚBoundDictionary)ÚElementc                       sj   e Zd ZdZdZeƒ Zeƒ Zedd�Z	e
dƒZeƒ Ze
dƒZd‡ fdd	„	Zd
d„ Zdd„ Zdd„ Z‡  ZS )Ú	Dimensionz<Information about the display properties of a row or column.)ÚhiddenÚoutlineLevelÚ	collapsedT©Ú
allow_noner   Ústyle_idNc                    s,   t ƒ j||d� || _|| _|| _|| _d S )N)ZsheetZstyle_array)ÚsuperÚ__init__Úindexr   r   r   )Úselfr   r   r   r   Ú	worksheetÚvisibleÚstyle©Ú	__class__© úA/tmp/pip-unpacked-wheel-r0v169r1/openpyxl/worksheet/dimensions.pyr   )   s
    zDimension.__init__c                 c   s.   | j D ]"}t| |d ƒ}|r|t|ƒfV  qd S ©N)Ú
__fields__Úgetattrr   )r   ÚkeyÚvaluer#   r#   r$   Ú__iter__2   s    
zDimension.__iter__c                 C   s8   |   | j¡}| j}| j|d< |jf |Ž t| jƒ|_|S )Nr   )Ú__new__r"   Ú__dict__Úparentr   r   Ú_style)r   ÚcpÚattribr#   r#   r$   Ú__copy__9   s    
zDimension.__copy__c                 C   s   d| j j› dt| ƒ› d�S )Nú<z Instance, Attributes=ú>)r"   Ú__name__Údict©r   r#   r#   r$   Ú__repr__B   s    zDimension.__repr__)TN)r4   Ú
__module__Ú__qualname__Ú__doc__r&   r	   r   r   r   r   r   Úoutline_levelr   r    r   r*   r1   r7   Ú__classcell__r#   r#   r!   r$   r      s   
   ÿ		r   c                       sr   e Zd ZdZejd ZedƒZedƒZe	dd�Z
edƒZeƒ Zeƒ Zd‡ fdd„	Zedd„ ƒZedd„ ƒZ‡  ZS )ÚRowDimensionz2Information about the display properties of a row.)ÚhtÚcustomFormatÚcustomHeightÚsÚthickBotÚthickTopr   r   Tr   r>   r   NFc                    s`   |d k	r|}|d k	r|}|| _ |d k	r,| }|	d k	r8|	}|| _|| _tƒ j||||
||d� d S ©N)r    )r>   rB   rC   r   r   )r   r   r   r>   r@   rA   r?   r   r   r;   r   r   ÚheightÚrZspansrB   rC   Úkwr!   r#   r$   r   R   s       ÿzRowDimension.__init__c                 C   s   | j S )z+Always true if there is a style for the row)Z	has_styler6   r#   r#   r$   r?   s   s    zRowDimension.customFormatc                 C   s
   | j dk	S )z,Always true if there is a height for the rowN)r>   r6   r#   r#   r$   r@   x   s    zRowDimension.customHeight)r   NNNNFr   NFNNNNNN)r4   r8   r9   r:   r   r&   r   rF   rA   r
   r>   rE   r   rB   rC   r   Úpropertyr?   r@   r<   r#   r#   r!   r$   r=   F   s8   

               ð!
r=   c                       s¢   e Zd ZdZeƒ Zeƒ ZedƒZ	e
ƒ Zedd�Zedd�Zeƒ Zejd Zdedddd	dd	d	d	dd	d	f‡ fd
d„	Zedd„ ƒZdd„ Zedd„ ƒZdd„ Z‡  ZS )ÚColumnDimensionz5Information about the display properties of a column.ÚbestFitTr   )ÚwidthrJ   ÚcustomWidthr    ÚminÚmaxÚAFr   Nc                    s`   || _ |
| _|| _|d k	r | }|d k	r,|}|| _|d k	r>|}|| _tƒ j||||||	d� d S rD   )rK   rM   rN   rJ   r   r   r   )r   r   r   rK   rJ   r   r   r;   r   r    rM   rN   rL   r   Ú	auto_sizer!   r#   r$   r   Œ   s       ÿzColumnDimension.__init__c                 C   s
   t | jƒS )z.Always true if there is a width for the column)ÚboolrK   r6   r#   r#   r$   rL   ª   s    zColumnDimension.customWidthc                 C   s&   t | j| jgƒs"t| jƒ | _| _dS )z6
        Set boundaries for column definition
        N)ÚallrM   rN   r   r   r6   r#   r#   r$   Úreindex°   s    zColumnDimension.reindexc                 C   s   t | jƒ› dt | jƒ› �S )z*Return the range of cells actually coveredú:)r   rM   rN   r6   r#   r#   r$   Úrange·   s    zColumnDimension.rangec                 C   s&   t | ƒ}| ¡ ddhkr"td|ŽS d S )NrM   rN   Úcol)rV   )r5   Úkeysr   )r   Úattrsr#   r#   r$   Úto_tree½   s    zColumnDimension.to_tree)r4   r8   r9   r:   r
   rK   r   rJ   r   rP   r   r   r	   rM   rN   r   r   r&   r   r   rH   rL   rS   rU   rY   r<   r#   r#   r!   r$   rI   ~   s:   


ò

rI   c                       s4   e Zd ZdZd‡ fdd„	Zddd	„Zd
d„ Z‡  ZS )ÚDimensionHolderz%
    Allow columns to be grouped
    r   Nc                    s$   || _ d | _|| _tƒ  ||¡ d S r%   )r   Úmax_outlineÚdefault_factoryr   r   )r   r   Ú	referencer\   r!   r#   r$   r   È   s    zDimensionHolder.__init__é   Fc           	      C   s®   |dkr|}t |  ¡ tƒrp| | }||_||_t||ƒdd… }|D ]}|| krD| |= qDtt||fƒ\|_|_	n:t |  ¡ t
ƒrªt||d ƒD ]}| jj| }||_||_qŒdS )aT  allow grouping a range of consecutive rows or columns together

        :param start: first row or column to be grouped (mandatory)
        :param end: last row or column to be grouped (optional, default to start)
        :param outline_level: outline level
        :param hidden: should the group be hidden on workbook open or not
        Nr^   )Ú
isinstancer\   rI   r;   r   r   Úmapr   rM   rN   r=   rU   r   Zrow_dimensions)	r   ÚstartÚendr;   r   Znew_dimZwork_sequenceZcolumn_letterÚelr#   r#   r$   ÚgroupÏ   s     zDimensionHolder.groupc                 C   sp   dd„ }t dƒ}tƒ }t|  ¡ |d�D ]*}| ¡ }|d k	r&| |j¡ | |¡ q&|r`t|ƒ| _	t
|ƒrl|S d S )Nc                 S   s   |   ¡  | jS r%   )rS   rM   )r)   r#   r#   r$   Úsorterì   s    z'DimensionHolder.to_tree.<locals>.sorterÚcols)r(   )r   ÚsetÚsortedÚvaluesrY   Úaddr   ÚappendrN   r[   Úlen)r   re   rc   ZoutlinesrV   Úobjr#   r#   r$   rY   ê   s    
zDimensionHolder.to_tree)r   N)Nr^   F)r4   r8   r9   r:   r   rd   rY   r<   r#   r#   r!   r$   rZ   Ã   s   
rZ   c                	   @   sp   e Zd ZdZedd�Zedd�Zeƒ Ze	dd�Z
e	dd�Ze	dd�Ze	dd�Zedd�Zedd�Zd	dd„ZdS )
ÚSheetFormatPropertiesZsheetFormatPrTr   é   Né   c
           
      C   s:   || _ || _|| _|| _|| _|| _|| _|| _|	| _d S r%   )	ÚbaseColWidthÚdefaultColWidthÚdefaultRowHeightr@   Ú
zeroHeightrC   ÚthickBottomÚoutlineLevelRowÚoutlineLevelCol)
r   rq   rr   rs   r@   rt   rC   ru   rv   rw   r#   r#   r$   r     s    zSheetFormatProperties.__init__)	ro   Nrp   NNNNNN)r4   r8   r9   Útagnamer	   rq   r
   rr   rs   r   r@   rt   rC   ru   rv   rw   r   r#   r#   r#   r$   rn      s(   







         ÷rn   c                   @   s,   e Zd ZdZeƒ Zddd„Zedd„ ƒZdS )ÚSheetDimensionZ	dimensionNc                 C   s
   || _ d S r%   )Úref)r   rz   r#   r#   r$   r   *  s    zSheetDimension.__init__c                 C   s
   t | jƒS r%   )r   rz   r6   r#   r#   r$   Ú
boundaries0  s    zSheetDimension.boundaries)N)	r4   r8   r9   rx   r   rz   r   rH   r{   r#   r#   r#   r$   ry   $  s    ÿ
ry   N)r   Zopenpyxl.compatr   Zopenpyxl.utilsr   r   r   r   Zopenpyxl.utils.unitsr   Zopenpyxl.descriptorsr	   r
   r   r   r   r   Z!openpyxl.descriptors.serialisabler   Zopenpyxl.styles.styleabler   Zopenpyxl.utils.bound_dictionaryr   Zopenpyxl.xml.functionsr   r   r=   rI   rZ   rn   ry   r#   r#   r#   r$   Ú<module>   s    +8E=$