o
    e<4                     @   sr   d Z d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 G dd deZd	d
 Zedkr7e  dS dS )z3.3.0zThis file is a
    )colors)RectDrawingGroupString)Label)Widgetc                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )EventCalendarc                 C   sj   d| _ d| _d| _d| _d | _d| _g | _d | _d | _d | _	d| _
g | _d | _d | _d| _g | _g | _d S )Nr   i,        )xywidthheighttimeColWidthtrackRowHeightdataZ
trackNames	startTimeendTimeday_talksVisible
_startTime_endTime_trackCount
_colWidths_colLeftEdges)self r   SD:\Projects\ConvertPro\env\Lib\site-packages\reportlab/graphics/widgets/eventcal.py__init__   s"   
zEventCalendar.__init__c                 C   s   |  | j| _t|  | _|   | jg| _| j	du rB| j
d| j  }|gd| j  | _t| jD ]}| j| jd |  q2dS | j	g| _| j
| j	 | j }t| jD ]}| j| | j| jd |  qUdS )z4Called at start of draw.  Sets various column widthsN   )getRelevantTalksr   r   lengetAllTracksr   computeStartAndEndTimesr   r   r   r   r   rangeappend)r   wir   r   r   computeSize*   s    


zEventCalendar.computeSizec                 C   s   | j r| j | _n| jD ]\}}}}}}| jdu r|| _q|| jk r$|| _q| jr.| j| _dS | jD ]\}}}}}}| jdu rD|| | _q1|| | jkrP|| | _q1dS )z(Work out first and last times to displayN)r   r   r   r   r   )r   titlespeakertrackIdr   startdurationr   r   r   r%   >   s"   




z%EventCalendar.computeStartAndEndTimesc                 C   sB   g }| j D ]\}}}}}}|d ur||vr|| q|  |S )N)r   r'   sort)r   Ztracksr+   r,   r-   r   hoursr/   r   r   r   r$   X   s   
zEventCalendar.getAllTracksc           
      C   sr   g }|D ]2}|\}}}}}}	|dksJ d|| j kr6| jdu s'||	 | jkr6| jdu s1|| jkr6|| q|S )zScans for tracks actually usedr   z2trackId must be None or 1,2,3... zero not allowed!N)r   r   r   r'   )
r   ZtalkListusedtalkr+   r,   r-   r   r1   r/   r   r   r   r"   a   s   

zEventCalendar.getRelevantTalksc                 C   s8   | j | j }|| j | j| j  }| j| ||  }|S )z+Return y-value corresponding to times given)r   r   r   r   r   )r   ZtheTimeZ
axisHeightZproportionUpr   r   r   r   	scaleTimem   s   zEventCalendar.scaleTimec                 C   s   t  }| || }| |}|| }|du r%| jd }	| j| jd  }
n
| j| }	| j| }
t }|| ||	d|
  |d|   d|_|
|_||_	d|_
t|	||
|tjd}|| || |S )z!Return shapes for a specific talkNr    r         ?c   Z	fillColor)r   r4   r   r   r   r   ZsetTextZ	setOriginZ	boxAnchorr   ZfontSizer   r   cyanadd)r   r   r/   r-   textgZy_bottomZy_topZy_heightr   r   Zlabrr   r   r   getTalkRectv   s(   






zEventCalendar.getTalkRectc              	   C   s
  |    t }|t| j| j| jd | j| j t	j
d | j| jd  }| j| j | j }t| jD ]0}| j|d  }t|||| jt	jd}t|d|  |d| dd}|| || || }q3| jD ]}|\}	}
}}}}| ||||	d |
 }|| qg|S )	Nr   r8   r    r5   zTrack %dmiddle)align
)r*   r   r:   r   r   r   r   r   r   r   Zcornsilkr&   r   yellowr   r   r>   )r   r<   r   r   ZtrkZwidr=   sr3   r+   r,   r-   r   r.   r/   r   r   r   draw   s"   ,



zEventCalendar.drawN)__name__
__module____qualname__r   r*   r%   r$   r"   r4   r>   rD   r   r   r   r   r	      s    		!r	   c                  C   sn   t dd} t }d|_d|_g d|_d|_| | dD ]}| |}td| d		| t
d
|  qdS )z3Make a conference event for day 1 of UP Python 2003i     2      )B)z1Keynote: Why design another programming language?zGuido van RossumNr          "@      ?)zSiena Web Service ArchitecturezMarc-Andre Lemburgr    r          %@      ?)zExtreme Programming in PythonzChris Withers   r    rM   rN   )zPattern Experiences in C++zMark Radford   r    rM   rN   )z"What is the Type of std::toupper()zGabriel Dos Reis   r    rM   rN   )z6Linguistic Variables: Clear Thinking with Fuzzy Logic zWalter Banks   r    rM   rN   )0lunch, short presentations, vendor presentations Nr          (@       @)zCORBA? Isn't that obsoletezDuncan Grisbyr    r          ,@rN   )zPython Design PatternsDuncan BoothrO   r    rW   rN   )z*Inside Security Checks and Safe ExceptionsBrandon BrayrP   r    rW   rN   )zStudying at a DistanceCPanel Discussion, Panel to include Alan Lenton & Francis GlassborowrQ   r    rW   rN   )zRCoding Standards - Given the ANSI C Standard why do I still need a coding StandardRandy MarquesrR   r    rW   rN   )zRESTful PythonzHamish Lawsonr    r          0@rN   )z(Parsing made easier - a radical old ideazAndrew KoenigrO   r    r\   rN   )zC++ & MultimethodszJulian SmithrP   r    r\   rN   )zC++ ThreadingzKevlin HenneyrQ   r    r\   rN   )zThe Organisation Strikes BackzAlan Griffiths & Sarah LeesrR   r    r\   rN   )Birds of a Feather meetingrT   Nr         1@rV   )zKeynote: In the Spirit of CzGreg ColvinNrO   rK   rL   )z6The Infinite Filing Cabinet - object storage in PythonzJacob Hallenr    rO   rM   rN   )z>Introduction to Python and Jython for C++ and Java ProgrammerszAlex MartellirO   rO   rM   rN   )z#Template metaprogramming in HaskellzSimon Peyton JonesrP   rO   rM   rN   )zQPlenty People Programming: C++ Programming in a Group, Workshop with a differencezNico JosuttisrQ   rO   rM   rN   )z4Design and Implementation of the Boost Graph LibraryzJeremy SiekrR   rO   rM   rN   )rS   rT   NrO   rU   rV   )z5Building GUI Applications with PythonCard and PyCrustz	Andy Toddr    rO   rW   rN   )zIntegrating Python, C and C++rX   rO   rO   rW   rN   )z!Secrets and Pitfalls of Templatesz$Nicolai Josuttis & David VandevoorderP   rO   rW   rN   )zBeing a MentorrZ   rQ   rO   rW   rN   )zThe Embedded C Extensions to CzWillem WakkerrR   rO   rW   rN   )zLightning Talksz
Paul Brianr    rO   r\   rN   )z'Scripting Java Applications with JythonzAnthony EdenrO   rO   r\   rN   )z5Metaprogramming and the Boost Metaprogramming LibraryDavid AbrahamsrP   rO   r\   rN   )z6A Common Vendor ABI for C++ -- GCC's why, what and notz!Nathan Sidwell & Gabriel Dos ReisrQ   rO   r\   rN   )zThe Timing and Cost of ChoiceszHubert MatthewsrR   rO   r\   rN   )r]   rT   NrO   r^   rV   )z.Keynote: The Cost of C &amp; C++ CompatibilityzAndy KoenigNrP   rK   rL   )z4Prying Eyes: Generic Observer Implementations in C++Andrei Alexandrescur    rO   rM   rN   )z.The Roadmap to Generative Programming With C++zUlrich EiseneckerrO   rO   rM   rN   )z=Design Patterns in C++ and C# for the Common Language RuntimerY   rP   rO   rM   rN   )z@Extreme Hour (XH): (workshop) - Jutta Eckstein and Nico JosuttiszJutta EcsteinrQ   rO   rM   rN   )z.The Lambda Library : Unnamed Functions for C++zJaako JarvirR   rO   rM   rN   )rS   rT   NrP   rU   rV   )zReflective MetaprogrammingzDaveed Vandevoorder    rP   rW   rN   )z7Advanced Template Issues and Solutions (double session)zHerb SutterrO   rP   rW   rP   )z/Concurrent Programming in Java (double session)zAngelika LangerrP   rP   rW   rP   )z)What can MISRA-C (2nd Edition) do for us?zChris HillsrQ   rP   rW   rN   )z(C++ Metaprogramming Concepts and ResultszWalter E BrownrR   rP   rW   rN   )z3Binding C++ to Python with the Boost Python Libraryr_   r    rP   r\   rN   )zHUsing Aspect Oriented Programming for Enterprise Application IntegrationzArno SchmidmeierrQ   rP   r\   rN   )zDefective C++zMarc PaternorR   rP   r\   rN   )z.Speakers' Banquet & Birds of a Feather meetingrT   NrP   r^   rV   )z=Keynote: The Internet, Software and Computers - A Report CardzAlan LentonNrQ   rK   rL   )zEMulti-Platform Software Development; Lessons from the Boost librarieszBeman Dawesr    rR   rM   rN   )zThe Stability of the C++ ABIzSteve ClamagerO   rR   rM   rN   )zJGeneric Build Support - A Pragmatic Approach to the Software Build Processr[   rP   rR   rM   rN   )z0How to Handle Project Managers: a survival guidez	Barb ByrorQ   rR   rM   rN   )zlunch, ACCU AGMrT   NrR   rU   rV   )zESauce: An OO recursive descent parser; its design and implementation.z
Jon Jaggerr    rR   rW   rN   )zKGNIRTS ESAC REWOL -  Bringing the UNIX filters to the C++ iostream library.zJC van WinkelrO   rR   rW   rN   )z Pattern Writing: Live and DirectzFrank Buschmann & Kevlin HenneyrP   rR   rW   g      @)z5The Future of Programming Languages - A Goldfish BowlzFrancis Glassborow and friendsrP   rR   rW   rN   )zSHoney, I Shrunk the Threads: Compile-time checked multithreaded transactions in C++r`   r    rR   r\   rN   )z#Fun and Functionality with FunctorszLois GoldthwaiterO   rR   r\   rN   )zAgile Enough?zAlan GriffithsrQ   rR   r\   rN   )z+Conference Closure: A brief plenary sessionrT   NrR   r^   r5   r    )Zpdfzeventcal.%swbzsaved eventcal.%sN)r   r	   r   r   r   r   r:   asStringopenwriteprint)dcalformatoutr   r   r   test   s   

c

rj   __main__N)__version____doc__Zreportlab.libr   Zreportlab.graphics.shapesr   r   r   r   Z$reportlab.graphics.charts.textlabelsr   Zreportlab.graphics.widgetbaser   r	   rj   rE   r   r   r   r   <module>   s    %v
