U
    rÎ·h­"  ã                   @   sî   d dl m Z  d dlmZ d dl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_intervalÚcolumn_index_from_stringÚrange_boundaries)ÚDEFAULT_COLUMN_WIDTH)ÚIntegerÚFloatÚBoolÚStrictÚStringÚAlias)ÚSerialisable)ÚStyleableObject)ÚBoundDictionary)ÚElementc                       sb   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‡  ZS )Ú	Dimensionz<Information about the display properties of a row or column.)ÚhiddenÚoutlineLevelÚ	collapsedT©Ú
allow_noner   Ústyle_idNc                    s0   t t| ƒj||d� || _|| _|| _|| _d S )N)ZsheetZstyle_array)Úsuperr   Ú__init__Úindexr   r   r   )Úselfr   r   r   r   Ú	worksheetÚvisibleÚstyle©Ú	__class__© úA/tmp/pip-unpacked-wheel-49e_hfpc/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__1   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__8   s    
zDimension.__copy__)TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r   r   r
   r   r   r   Úoutline_levelr   r   r   r)   r0   Ú__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   r8   r   NFc                    sd   |d k	r|}|d k	r|}|| _ |d k	r,| }|	d k	r8|	}|| _|| _tt| ƒj||||
||d� d S ©N)r   )r8   r<   r=   r   r7   r   )r   r   r   r8   r:   r;   r9   r   r   r5   r   r   ÚheightÚrZspansr<   r=   Úkwr    r"   r#   r   M   s       ÿzRowDimension.__init__c                 C   s   | j S )z+Always true if there is a style for the row)Z	has_style©r   r"   r"   r#   r9   n   s    zRowDimension.customFormatc                 C   s
   | j dk	S )z,Always true if there is a height for the rowN)r8   rB   r"   r"   r#   r:   s   s    zRowDimension.customHeight)r   NNNNFr   NFNNNNNN)r1   r2   r3   r4   r   r%   r   r@   r;   r	   r8   r?   r
   r<   r=   r   Úpropertyr9   r:   r6   r"   r"   r    r#   r7   A   s8   

               ð!
r7   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dd„ Z‡  ZS )ÚColumnDimensionz5Information about the display properties of a column.ÚbestFitTr   )ÚwidthrE   ÚcustomWidthr   ÚminÚmaxÚAFr   Nc                    sd   || _ |
| _|| _|d k	r | }|d k	r,|}|| _|d k	r>|}|| _tt| ƒj||||||	d� d S r>   )rF   rH   rI   rE   r   r   rD   r   )r   r   r   rF   rE   r   r   r5   r   r   rH   rI   rG   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)ÚboolrF   rB   r"   r"   r#   rG   ¥   s    zColumnDimension.customWidthc                 C   s&   t | j| jgƒs"t| jƒ | _| _dS )z6
        Set boundaries for column definition
        N)ÚallrH   rI   r   r   rB   r"   r"   r#   Úreindex«   s    zColumnDimension.reindexc                 C   s&   t | ƒ}| ¡ ddhkr"td|ŽS d S )NrH   rI   Úcol)rO   )ÚdictÚkeysr   )r   Úattrsr"   r"   r#   Úto_tree³   s    zColumnDimension.to_tree)r1   r2   r3   r4   r	   rF   r
   rE   r   rK   r   r   r   rH   rI   r   r   r%   r   r   rC   rG   rN   rS   r6   r"   r"   r    r#   rD   y   s6   


ò
rD   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t| ƒ ||¡ d S r$   )r   Úmax_outlineÚdefault_factoryr   rT   r   )r   r   Ú	referencerV   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
        NrX   )Ú
isinstancerV   rD   r5   r   r   Úmapr   rH   rI   r7   Úranger   Zrow_dimensions)	r   ÚstartÚendr5   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$   )rN   rH   )r(   r"   r"   r#   Úsorterâ   s    z'DimensionHolder.to_tree.<locals>.sorterÚcols)r'   )r   ÚsetÚsortedÚvaluesrS   Úaddr   ÚappendrI   rU   Úlen)r   r`   r^   ZoutlinesrO   Úobjr"   r"   r#   rS   à   s    
zDimensionHolder.to_tree)r   N)NrX   F)r1   r2   r3   r4   r   r_   rS   r6   r"   r"   r    r#   rT   ¹   s   
rT   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:   Ú
zeroHeightr=   ÚthickBottomÚoutlineLevelRowÚoutlineLevelCol)
r   rl   rm   rn   r:   ro   r=   rp   rq   rr   r"   r"   r#   r     s    zSheetFormatProperties.__init__)	rj   Nrk   NNNNNN)r1   r2   r3   Útagnamer   rl   r	   rm   rn   r
   r:   ro   r=   rp   rq   rr   r   r"   r"   r"   r#   ri   ö   s(   







         ÷ri   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   ru   r"   r"   r#   r      s    zSheetDimension.__init__c                 C   s
   t | jƒS r$   )r   ru   rB   r"   r"   r#   Ú
boundaries&  s    zSheetDimension.boundaries)N)	r1   r2   r3   rs   r   ru   r   rC   rv   r"   r"   r"   r#   rt     s    ÿ
rt   N)r   Zopenpyxl.compatr   Zopenpyxl.utilsr   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   r7   rD   rT   ri   rt   r"   r"   r"   r#   Ú<module>   s    '8@=$