ó |•$Mc@sÓdZdZeZeZddlZejZyddlm Z Wne k r]e d‚nXddlm Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#ddl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ddl,m-Z-d efd „ƒYZ.d „Z/d efd „ƒYZ0d„Z1d„Z2d„Z3de#fd„ƒYZ4de fd„ƒYZ5de fd„ƒYZ6de fd„ƒYZ7defd„ƒYZ8dddddd„Z:e;dkrÏd„Z<d„Z=e<ƒZ>d „Z?d!Ge:e>d"d#d$d%d&e?ƒGHe=ƒZ@d!Ge:e@d'ƒGHe<ƒZ>e=ƒZ@d!Ge:e@d(d)fe>d*d+fe>d,d-ffd'ƒGHndS(.sá formlayout ========== Module creating PyQt4 form dialogs/layouts to edit various type of parameters formlayout License Agreement (MIT License) ------------------------------------------ Copyright (c) 2009 Pierre Raybaut Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. s1.0.7iÿÿÿÿN(t QFormLayouts(Warning: formlayout requires PyQt4 >v4.3(tQWidgett QLineEditt QComboBoxtQLabeltQSpinBoxtQIcontQStyletQDialogButtonBoxt QHBoxLayoutt QVBoxLayouttQDialogtQColort QPushButtont QCheckBoxt QColorDialogtQPixmapt QTabWidgett QApplicationtQStackedWidgett QDateEditt QDateTimeEdittQFontt QFontComboBoxt QFontDatabaset QGridLayout(tQttSIGNALtSLOTtQSizetQStringt pyqtSignaturet pyqtProperty(tdatet ColorButtoncBsYeZdZdZdd„Zd„Zd„Zedƒd„ƒZ e dee ƒZ RS( s$ Color choosing push button scolorChanged(QColor)cCsbtj||ƒ|jddƒ|jtddƒƒ|j|tdƒ|jƒtƒ|_ dS(Nii s clicked()( R t__init__t setFixedSizet setIconSizeRtconnectRt choose_colorR t_color(tselftparent((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR#Fs cCsPtj|jjƒ|jƒƒ\}}|rLtj|ƒ}|j|ƒndS(N(RtgetRgbaR(trgbat parentWidgetR tfromRgbat set_color(R)R,tvalidtcolor((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR'Ms cCs|jS(N(R((R)((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyt get_colorTsR cCsj||jkrf||_|jtdƒ|jƒt|jƒƒ}|j|ƒ|jt|ƒƒndS(NscolorChanged(QColor)(R(temitRRticonSizetfilltsetIconR(R)R1tpixmap((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR/Ws   (scolorChanged(QColor)N( t__name__t __module__t__doc__t__pyqtSignals__tNoneR#R'R2RR/R R1(((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR"@s    cCs¾tƒ}t|tƒr't|ƒ}nt|ttfƒs@|S|jdƒr‘t|ƒdkr‘d}xC|D]}|jƒ|krn|SqnWn|ttj ƒƒkr­|S|j |ƒ|S(sp Create a QColor from specified string Avoid warning from Qt when an invalid QColor is instantiated t#is#0123456789abcdef( R t isinstanceRtstrtunicodet startswithtlentlowertlistt colorNamest setNamedColor(ttextR1tcorrecttchar((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyttext_to_qcolorcs !   t ColorLayoutcBs5eZdZdd„Zd„Zd„Zd„ZRS(s"Color-specialized QLineEdit layoutcCs·tj|ƒt|tƒs"t‚t|jƒ|ƒ|_|j|jt dƒ|j ƒ|j |jƒt |ƒ|_ ||j _|j|j t dƒ|jƒ|j |j ƒdS(NstextChanged(QString)scolorChanged(QColor)(R R#R>R tAssertionErrorRtnametlineeditR&Rt update_colort addWidgetR"tcolorbtnR1t update_text(R)R1R*((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR#zs    cCs+t|ƒ}|jƒr'||j_ndS(N(RJtisValidRQR1(R)RGR1((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyRO‡s  cCs|jj|jƒƒdS(N(RNtsetTextRM(R)R1((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyRRŒscCs |jjƒS(N(RNRG(R)((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyRGsN(R8R9R:R<R#RORRRG(((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyRKxs   cCs2gtƒjƒD]}t|ƒ|kr|^qS(sCheck if font is installed(RtfamiliesR@(tfonttfam((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pytfont_is_installed“sc CsÆt|tƒ sot|ƒdksot|dƒ sot|dtƒ sot|dtƒ sot|dtƒ rsdStƒ}|\}}}}|j|ƒ|j |ƒ|j |ƒ|j |ƒ|S(sf Create a QFont from tuple: (family [string], size [int], italic [bool], bold [bool]) iiiiiN( R>ttupleRBRXtinttboolR<Rt setFamilyt setPointSizet setItalictsetBold(ttupRVtfamilytsizetitalictbold((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyttuple_to_qfont—s"     cCs4t|jƒƒt|jƒƒ|jƒ|jƒfS(N(R@RaRZt pointSizeRcRd(RV((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pytqfont_to_tupleªst FontLayoutcBs#eZdZdd„Zd„ZRS(sFont selectioncCsÍtj|ƒt|ƒ}|dk s+t‚t|ƒ|_|jj|ƒ|j|jddddƒt |ƒ|_ |j j t ƒt ddƒt dddƒdd d g}|jƒ}||krã|j|ƒ|jƒn|j jg|D]}t|ƒ^qóƒ|j j|j|ƒƒ|j|j ddƒt|jd ƒ|ƒ|_|jj|jƒƒ|j|jddƒt|jd ƒ|ƒ|_|jj|jƒƒ|j|jddƒdS( Niiiÿÿÿÿii iii$i0iHtItalictBold(RR#ReR<RLRRatsetCurrentFontRPRRbt setEditabletTruetrangeRftappendtsorttaddItemsR?tsetCurrentIndextindexRttrRct setCheckedRd(R)tvalueR*RVtsizelistRbts((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR#±s,  ,    )cCsa|jjƒ}|j|jjƒƒ|j|jjƒƒ|jt|j j ƒƒƒt |ƒS(N( Rat currentFontR^Rct isCheckedR_RdR]RZRbt currentTextRg(R)RV((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pytget_fontÑs N(R8R9R:R<R#R|(((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyRh¯s t FormWidgetcBs)eZddd„Zd„Zd„ZRS(tcCsÍtt|ƒj|ƒddlm}||ƒ|_g|_t|ƒ|_|r‚|jj t |ƒƒ|jj t dƒƒnt r¿dddGHdG|jGHddGHdG|GHddGHn|j ƒdS( Niÿÿÿÿ(tdeepcopyt s t*iPsDATA:sCOMMENT:( tsuperR}R#tcopyRtdatatwidgetsRt formlayouttaddRowRtDEBUGtsetup(R)R„tcommentR*R((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR#Ús      c Csvxo|jD]d\}}tr(dG|GHn|dkru|dkru|jjtdƒtdƒƒ|jjdƒq nÖ|dkr­|jjt|ƒƒ|jjdƒq nžt|ƒdk rÑt ||ƒ}nzt |ƒj ƒrût t |ƒ|ƒ}nPt|ttfƒr"t||ƒ}n)t|ttfƒr:|jdƒ}t|ƒ}t|dttfƒr¬g|D]\}}|^qr}g|D]\}} | ^q‘}n|}|j|ƒ||krÝ|j|ƒ}nM||krû|j|ƒ}n/t|tƒs*td|||fIJd}n|j|ƒnt|tƒrt|ƒ}|rn|jtjƒqK|j tj!ƒnÊt|t"ƒr¨tt#|ƒ|ƒ}n£t|tƒràt$|ƒ}|j%|ƒ|j&dƒnkt|t'ƒr6t(|dƒrt)|ƒ}|j*|ƒqKt+|ƒ}|j,|ƒntt#|ƒ|ƒ}|jj||ƒ|jj|ƒq WdS(Nsvalue:R€is5Warning: '%s' index is invalid (label: %s, value: %s)geÍÍAthour(-R„RˆR<R†R‡RR…RoReRhRJRSRKR R>R?R@RRDRYtpopRRqRsRZtSTDERRRrR[Rt setCheckStateRtCheckedtsetCheckedStatet UncheckedtfloattreprRtsetValuet setMaximumR!thasattrRt setDateTimeRtsetDate( R)tlabelRvtfieldtselindextkeyt_valtkeyst_keytval((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR‰ësl   "         cCsÔg}xÇt|jƒD]¶\}\}}|j|}|dkrGqnxt|ƒdk rh|jƒ}nWt|ttfƒr’t|j ƒƒ}n-t|t t fƒrðt |j ƒƒ}t|dt t fƒrã||d}q¿||}nÏt|tƒr|jƒtjk}n¨t|tƒr;t|j ƒƒ}n„t|t ƒr_t |jƒƒ}n`t|tƒr§t|dƒr’|jƒjƒ}q¿|jƒjƒ}ntt|j ƒƒƒ}|j|ƒqW|S(NiR‹(t enumerateR„R…R<ReR|R>R?R@RGRDRYRZt currentIndexR[t checkStateRRR’RvR!R–tdateTimet toPyDateTimettoPyDatetevalRo(R)t valuelistRsR™RvRš((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pytget*s6"   N(R8R9R<R#R‰R©(((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR}Ùs ?tFormComboWidgetcBs eZddd„Zd„ZRS(R~cCsþtt|ƒj|ƒtƒ}|j|ƒtƒ|_|j|jƒt|ƒ|_ |j|j ƒ|j |jt dƒ|j t dƒƒg|_ x_|D]W\}}}|jj|ƒt|d|d|ƒ}|j j|ƒ|j j|ƒqŸWdS(NscurrentIndexChanged(int)ssetCurrentIndex(int)RŠR*(R‚RªR#R t setLayoutRtcomboboxRPRt stackwidgetR&RRt widgetlisttaddItemR}Ro(R)tdatalistRŠR*tlayoutR„ttitletwidget((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR#Ms    cCs g|jD]}|jƒ^q S(N(R®R©(R)R³((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR©`sN(R8R9R<R#R©(((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyRªLst FormTabWidgetcBs eZddd„Zd„ZRS(R~c Csðtt|ƒj|ƒtƒ}tƒ|_|j|jƒ|j|ƒg|_x˜|D]\}}}t |dƒdkr˜t |d|d|ƒ}nt |d|d|ƒ}|jj ||ƒ}|jj ||ƒ|jj|ƒqXWdS(NiiRŠR*(R‚R´R#R Rt tabwidgetRPR«R®RBRªR}taddTabt setTabToolTipRo( R)R°RŠR*R±R„R²R³Rs((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR#es    cCs g|jD]}|jƒ^q S(N(R®R©(R)R³((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR©usN(R8R9R<R#R©(((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR´dst FormDialogcBsJeZdZdddddd„Zd„Zd„Zd„Zd„ZRS(s Form DialogR~c Cs»tt|ƒj|ƒ||_t|ddttfƒrZt|d|d|ƒ|_nOt |dƒdkrŽt |d|d|ƒ|_nt |d|d|ƒ|_t ƒ}|j |jƒttjtjBƒ}|jdk r|jtjƒ} |j| tdƒ|jƒn|j|tdƒtdƒƒ|j|tdƒtd ƒƒ|j |ƒ|j|ƒ|j|ƒt|tƒsªtƒjƒjtjƒ}n|j |ƒdS( NiRŠR*is clicked()s accepted()saccept()s rejected()sreject()(!R‚R¸R#tapply_callbackR>RDRYR´t formwidgetRBRªR}R RPRtOktCancelR<t addButtontApplyR&RtapplyRR«tsetWindowTitleRRtstylet standardIconRtSP_MessageBoxQuestiont setWindowIcon( R)R„R²RŠticonR*R¿R±tbboxt apply_btn((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR#{s0      cCs#|jjƒ|_tj|ƒdS(N(RºR©R„R taccept(R)((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyRÈžscCsd|_tj|ƒdS(N(R<R„R treject(R)((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyRÉ¢s cCs|j|jjƒƒdS(N(R¹RºR©(R)((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR¿¦scCs|jS(sReturn form result(R„(R)((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR©©sN( R8R9R:R<R#RÈRÉR¿R©(((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyR¸ys"   R~cCsNtjƒrtgƒnt||||||ƒ}|jƒrJ|jƒSdS(sø Create form dialog and return result (if Cancel button is pressed, return None) data: datalist, datagroup title: string comment: string icon: QIcon instance parent: parent QWidget apply: apply callback (function) datalist: list/tuple of (field_name, field_value) datagroup: list/tuple of (datalist *or* datagroup, title, comment) -> one field for each member of a datalist -> one tab for each member of a top-level datagroup -> one page (of a multipage widget, each page can be selected with a combo box) for each member of a datagroup inside a datagroup Supported types for field_value: - int, float, str, unicode, bool - colors: in Qt-compatible text form, i.e. in hex format or name (red,...) (automatically detected from a string) - list/tuple: * the first element will be the selected index (or value) * the other elements can be couples (key, value) or only values N(Rt startingUpR¸texec_R©(R„R²RŠRÅR*R¿tdialog((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pytfedit®s    t__main__cCsyd"dddddgfdd d#d$d%d&d'd(gfd)d*d+dddttffd,dtfd td!ddƒfg S(-NR?sthis is a stringRDit1t3t4tlist2s--tnoneR<tDasheds-.tDashDott-tSolidtstepstStepst:tDottedR’g333333ó?sOther:RZi RVtAriali R1s#123409R[tdatetimeiÚ(sstrsthis is a string(RÓsNone(s--RÔ(s-.RÕ(RÖR×(RØRÙ(RÚRÛ(sfloatg333333ó?(NsOther:(sinti (scolors#123409(R<tFalseRmR!(((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pytcreate_datalist_exampleØs   cCs1tƒ}|ddf|ddf|ddffS(Ns Category 1sCategory 1 comments Category 2sCategory 2 comments Category 3sCategory 3 comment(Rß(R°((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pytcreate_datagroup_exampleçs   cCs dG|GHdS(Nsdata:((R„((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyt apply_testïssresult:R²tExampleRŠsThis is just an example.R¿s Global titlesTitle 1s Tab 1 commentsTitle 2s Tab 2 commentsTitle 3s Tab 3 comment(AR:t __version__t __license__RÞRˆtsyststderrRt PyQt4.QtGuiRt ImportErrorRRRRRRRRR R R R R RRRRRRRRRRRRt PyQt4.QtCoreRRRRRRR RÝR!R"RJRKRXReRgRhR}RªR´R¸R<RÍR8RßRàR°Rát datagroup(((s\/opt/alt/python27/lib64/python2.7/site-packages/matplotlib/backends/qt4_editor/formlayout.pyt"sP     4#    *s5(