U
    ~fh#                     @   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-eyn_au5k/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
rt||d D ]}| jj| }||_||_qd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=$