a
    b"                     @   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__ m/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/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   s<   |  | j}| j}| j|d< |jf i | 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 ur|}|d ur|}|| _ |d ur,| }|	d u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u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 ur | }|d ur,|}|| _|d u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i |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u r|}t |  trp| | }||_||_t||dd }|D ]}|| v 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
        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 u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@=$