diff --git a/pw_multiScriptEditor/__init__.py b/pw_multiScriptEditor/__init__.py index 89c5916..55ead02 100644 --- a/pw_multiScriptEditor/__init__.py +++ b/pw_multiScriptEditor/__init__.py @@ -1,10 +1,5 @@ import os, sys -root = os.path.dirname(__file__) -if not root in sys.path: - sys.path.append(root) - - # HOUDINI def showHoudini(clear=False, ontop=False, name=None, floating=False, position=(), size=(), pane=None, replacePyPanel=False, hideTitleMenu=True): @@ -26,12 +21,12 @@ def showNuke(panel=False): # MAYA def showMaya(dock=False): from .managers import _maya - reload (_maya) + reload(_maya) _maya.show(dock) # 3DSMAX PLUS def show3DSMax(): sys.argv = [] from .managers import _3dsmax - reload (_3dsmax) - _3dsmax.show() \ No newline at end of file + reload(_3dsmax) + _3dsmax.show() diff --git a/pw_multiScriptEditor/icons_rcs.py b/pw_multiScriptEditor/icons_rcs.py index 6d1892b..09d7b3d 100644 --- a/pw_multiScriptEditor/icons_rcs.py +++ b/pw_multiScriptEditor/icons_rcs.py @@ -6,10 +6,8 @@ # by: The Resource Compiler for PySide (Qt v4.8.5) # # WARNING! All changes made in this file will be lost! -try: - from PySide import QtCore -except: - from PySide2 import QtCore +from Qt import QtCore + qt_resource_data = "\x00\x00F~\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x0aOiCCPPhotoshop ICC profile\x00\x00x\xda\x9dSgTS\xe9\x16=\xf7\xde\xf4BK\x88\x80\x94KoR\x15\x08 RB\x8b\x80\x14\x91&*!\x09\x10J\x88!\xa1\xd9\x15Q\xc1\x11EE\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15Q,\x0c\x8a\x0a\xd8\x07\xe4!\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1{\xa3k\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7>\xe7\xac\xf3\x9d\xb3\xcf\x07\xc0\x08\x0c\x96H3Q5\x80\x0c\xa9B\x1e\x11\xe0\x83\xc7\xc4\xc6\xe1\xe4.@\x81\x0a$p\x00\x10\x08\xb3d!s\xfd#\x01\x00\xf8~<<+\x22\xc0\x07\xbe\x00\x01x\xd3\x0b\x08\x00\xc0M\x9b\xc00\x1c\x87\xff\x0f\xeaB\x99\x5c\x01\x80\x84\x01\xc0t\x918K\x08\x80\x14\x00@z\x8eB\xa6\x00@F\x01\x80\x9d\x98&S\x00\xa0\x04\x00`\xcbcb\xe3\x00P-\x00`'\x7f\xe6\xd3\x00\x80\x9d\xf8\x99{\x01\x00[\x94!\x15\x01\xa0\x91\x00 \x13e\x88D\x00h;\x00\xac\xcfV\x8aE\x00X0\x00\x14fK\xc49\x00\xd8-\x000IWfH\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x000Q\x88\x85)\x00\x04{\x00`\xc8##x\x00\x84\x99\x00\x14F\xf2W<\xf1+\xae\x10\xe7*\x00\x00x\x99\xb2<\xb9$9E\x81[\x08-q\x07WW.\x1e(\xceI\x17+\x146a\x02a\x9a@.\xc2y\x99\x192\x814\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\xf3\xfdx\xce\x0e\xae\xce\xce6\x8e\xb6\x0e_-\xea\xbf\x06\xff\x22bb\xe3\xfe\xe5\xcf\xabp@\x00\x00\xe1t~\xd1\xfe,/\xb3\x1a\x80;\x06\x80m\xfe\xa2%\xee\x04h^\x0b\xa0u\xf7\x8bf\xb2\x0f@\xb5\x00\xa0\xe9\xdaW\xf3p\xf8~<\xdf5\x00\xb0j>\x01{\x91-\xa8]c\x03\xf6K'\x10Xt\xc0\xe2\xf7\x00\x00\xf2\xbbo\xc1\xd4(\x08\x03\x80h\x83\xe1\xcfw\xff\xef?\xfdG\xa0%\x00\x80fI\x92q\x00\x00^D$.T\xca\xb3?\xc7\x08\x00\x00D\xa0\x81*\xb0A\x1b\xf4\xc1\x18,\xc0\x06\x1c\xc1\x05\xdc\xc1\x0b\xfc`6\x84B$\xc4\xc2B\x10B\x0ad\x80\x1cr`)\xac\x82B(\x86\xcd\xb0\x1d*`/\xd4@\x1d4\xc0Qh\x86\x93p\x0e.\xc2U\xb8\x0e=p\x0f\xfaa\x08\x9e\xc1(\xbc\x81\x09\x04A\xc8\x08\x13a!\xda\x88\x01b\x8aX#\x8e\x08\x17\x99\x85\xf8!\xc1H\x04\x12\x8b$ \xc9\x88\x14Q\x22K\x915H1R\x8aT UH\x1d\xf2=r\x029\x87\x5cF\xba\x91;\xc8\x002\x82\xfc\x86\xbcG1\x94\x81\xb2Q=\xd4\x0c\xb5C\xb9\xa87\x1a\x84F\xa2\x0b\xd0dt1\x9a\x8f\x16\xa0\x9b\xd0r\xb4\x1a=\x8c6\xa1\xe7\xd0\xabh\x0f\xda\x8f>C\xc70\xc0\xe8\x18\x073\xc4l0.\xc6\xc3B\xb18,\x09\x93c\xcb\xb1\x22\xac\x0c\xab\xc6\x1a\xb0V\xac\x03\xbb\x89\xf5c\xcf\xb1w\x04\x12\x81E\xc0\x096\x04wB a\x1eAHXLXN\xd8H\xa8 \x1c$4\x11\xda\x097\x09\x03\x84Q\xc2'\x22\x93\xa8K\xb4&\xba\x11\xf9\xc4\x18b21\x87XH,#\xd6\x12\x8f\x13/\x10{\x88C\xc47$\x12\x89C2'\xb9\x90\x02I\xb1\xa4T\xd2\x12\xd2F\xd2nR#\xe9,\xa9\x9b4H\x1a#\x93\xc9\xdadk\xb2\x079\x94, +\xc8\x85\xe4\x9d\xe4\xc3\xe43\xe4\x1b\xe4!\xf2[\x0a\x9db@q\xa4\xf8S\xe2(R\xcajJ\x19\xe5\x10\xe54\xe5\x06e\x982AU\xa3\x9aR\xdd\xa8\xa1T\x115\x8fZB\xad\xa1\xb6R\xafQ\x87\xa8\x134u\x9a9\xcd\x83\x16IK\xa5\xad\xa2\x95\xd3\x1ah\x17h\xf7i\xaf\xe8t\xba\x11\xdd\x95\x1eN\x97\xd0W\xd2\xcb\xe9G\xe8\x97\xe8\x03\xf4w\x0c\x0d\x86\x15\x83\xc7\x88g(\x19\x9b\x18\x07\x18g\x19w\x18\xaf\x98L\xa6\x19\xd3\x8b\x19\xc7T071\xeb\x98\xe7\x99\x0f\x99oUX*\xb6*|\x15\x91\xca\x0a\x95J\x95&\x95\x1b*/T\xa9\xaa\xa6\xaa\xde\xaa\x0bU\xf3U\xcbT\x8f\xa9^S}\xaeFU3S\xe3\xa9\x09\xd4\x96\xabU\xaa\x9dP\xebS\x1bSg\xa9;\xa8\x87\xaag\xa8oT?\xa4~Y\xfd\x89\x06Y\xc3L\xc3OC\xa4Q\xa0\xb1_\xe3\xbc\xc6 \x0bc\x19\xb3x,!k\x0d\xab\x86u\x815\xc4&\xb1\xcd\xd9|v*\xbb\x98\xfd\x1d\xbb\x8b=\xaa\xa9\xa19C3J3W\xb3R\xf3\x94f?\x07\xe3\x98q\xf8\x9ctN\x09\xe7(\xa7\x97\xf3~\x8a\xde\x14\xef)\xe2)\x1b\xa64L\xb91e\x5ck\xaa\x96\x97\x96X\xabH\xabQ\xabG\xeb\xbd6\xae\xed\xa7\x9d\xa6\xbdE\xbbY\xfb\x81\x0eA\xc7J'\x5c'Gg\x8f\xce\x05\x9d\xe7S\xd9S\xdd\xa7\x0a\xa7\x16M=:\xf5\xae.\xaak\xa5\x1b\xa1\xbbDw\xbfn\xa7\xee\x98\x9e\xbe^\x80\x9eLo\xa7\xdey\xbd\xe7\xfa\x1c}/\xfdT\xfdm\xfa\xa7\xf5G\x0cX\x06\xb3\x0c$\x06\xdb\x0c\xce\x18<\xc55qo<\x1d/\xc7\xdb\xf1QC]\xc3@C\xa5a\x95a\x97\xe1\x84\x91\xb9\xd1<\xa3\xd5F\x8dF\x0f\x8ci\xc6\x5c\xe3$\xe3m\xc6m\xc6\xa3&\x06&!&KM\xeaM\xee\x9aRM\xb9\xa6)\xa6;L;L\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x995\x9b=1\xd72\xe7\x9b\xe7\x9b\xd7\x9b\xdf\xb7`ZxZ,\xb6\xa8\xb6\xb8eI\xb2\xe4Z\xa6Y\xee\xb6\xbcn\x85Z9Y\xa5XUZ]\xb3F\xad\x9d\xad%\xd6\xbb\xad\xbb\xa7\x11\xa7\xb9N\x93N\xab\x9e\xd6g\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\x19\xb0\xe5\xd8\x06\xdb\xae\xb6m\xb6}agb\x17g\xb7\xc5\xae\xc3\xee\x93\xbd\x93}\xba}\x8d\xfd=\x07\x0d\x87\xd9\x0e\xab\x1dZ\x1d~s\xb4r\x14:V:\xde\x9a\xce\x9c\xee?}\xc5\xf4\x96\xe9/gX\xcf\x10\xcf\xd83\xe3\xb6\x13\xcb)\xc4i\x9dS\x9b\xd3Gg\x17g\xb9s\x83\xf3\x88\x8b\x89K\x82\xcb.\x97>.\x9b\x1b\xc6\xdd\xc8\xbd\xe4Jt\xf5q]\xe1z\xd2\xf5\x9d\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee6\xeei\xee\x87\xdc\x9f\xcc4\x9f)\x9eY3s\xd0\xc3\xc8C\xe0Q\xe5\xd1?\x0b\x9f\x950k\xdf\xac~OCO\x81g\xb5\xe7#/c/\x91W\xad\xd7\xb0\xb7\xa5w\xaa\xf7a\xef\x17>\xf6>r\x9f\xe3>\xe3<7\xde2\xdeY_\xcc7\xc0\xb7\xc8\xb7\xcbO\xc3o\x9e_\x85\xdfC\x7f#\xffd\xffz\xff\xd1\x00\xa7\x80%\x01g\x03\x89\x81A\x81[\x02\xfb\xf8z|!\xbf\x8e?:\xdbe\xf6\xb2\xd9\xedA\x8c\xa0\xb9A\x15A\x8f\x82\xad\x82\xe5\xc1\xad!h\xc8\xec\x90\xad!\xf7\xe7\x98\xce\x91\xcei\x0e\x85P~\xe8\xd6\xd0\x07a\xe6a\x8b\xc3~\x0c'\x85\x87\x85W\x86?\x8ep\x88X\x1a\xd11\x975w\xd1\xdcCs\xdfD\xfaD\x96D\xde\x9bg1O9\xaf-J5*>\xaa.j<\xda7\xba4\xba?\xc6.fY\xcc\xd5X\x9dXIlK\x1c9.*\xae6nl\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3{\x17\x98/\xc8]py\xa1\xce\xc2\xf4\x85\xa7\x16\xa9.\x12,:\x96@L\x88N8\x94\xf0A\x10*\xa8\x16\x8c%\xf2\x13w%\x8e\x0ay\xc2\x1d\xc2g\x22/\xd16\xd1\x88\xd8C\x5c*\x1eN\xf2H*Mz\x92\xec\x91\xbc5y$\xc53\xa5,\xe5\xb9\x84'\xa9\x90\xbcL\x0dL\xdd\x9b:\x9e\x16\x9av m2=:\xbd1\x83\x92\x91\x90qB\xaa!M\x93\xb6g\xeag\xe6fv\xcb\xace\x85\xb2\xfe\xc5n\x8b\xb7/\x1e\x95\x07\xc9k\xb3\x90\xac\x05Y-\x0a\xb6B\xa6\xe8TZ(\xd7*\x07\xb2geWf\xbf\xcd\x89\xca9\x96\xab\x9e+\xcd\xed\xcc\xb3\xca\xdb\x907\x9c\xef\x9f\xff\xed\x12\xc2\x12\xe1\x92\xb6\xa5\x86KW-\x1dX\xe6\xbd\xacj9\xb2\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8(\xdcx\xe5\x1b\x87o\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9d\xcff\xd2f\xe9\xe6\xde-\x9e[\x0e\x96\xaa\x97\xe6\x97\x0en\x0d\xd9\xda\xb4\x0d\xdfV\xb4\xed\xf5\xf6E\xdb/\x97\xcd(\xdb\xbb\x83\xb6C\xb9\xa3\xbf<\xb8\xbce\xa7\xc9\xce\xcd;?T\xa4T\xf4T\xfaT6\xee\xd2\xdd\xb5a\xd7\xf8n\xd1\xee\x1b{\xbc\xf64\xec\xd5\xdb[\xbc\xf7\xfd>\xc9\xbe\xdbU\x01UM\xd5f\xd5e\xfbI\xfb\xb3\xf7?\xae\x89\xaa\xe9\xf8\x96\xfbm]\xadNmq\xed\xc7\x03\xd2\x03\xfd\x07#\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2=TR\x8f\xd6+\xebG\x0e\xc7\x1f\xbe\xfe\x9d\xefw-\x0d6\x0dU\x8d\x9c\xc6\xe2#pDy\xe4\xe9\xf7\x09\xdf\xf7\x1e\x0d:\xdav\x8c{\xac\xe1\x07\xd3\x1fv\x1dg\x1d/jB\x9a\xf2\x9aF\x9bS\x9a\xfb[b[\xbaO\xcc>\xd1\xd6\xea\xdez\xfcG\xdb\x1f\x0f\x9c499\xe2?r\xfd\xe9\xfc\xa7C\xcfd\xcf&\x9e\x17\xfe\xa2\xfe\xcb\xae\x17\x16/~\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\x93\xbfm|\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\xbe\xc9x31^\xf4V\xfb\xed\xc1w\xdcw\x1d\xef\xa3\xdf\x0fO\xe4| \x7f(\xffh\xf9\xb1\xf5S\xd0\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfcc3-\xdb\x00\x00:\xd8iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a xmp.iid:4129fec3-aa60-0e4a-bd2d-0c1e89a9dba5\x0a xmp.did:1205f81a-573a-6345-84bc-1bec692589ce\x0a xmp.did:1205f81a-573a-6345-84bc-1bec692589ce\x0a \x0a \x0a \x0a created\x0a xmp.iid:1205f81a-573a-6345-84bc-1bec692589ce\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:4129fec3-aa60-0e4a-bd2d-0c1e89a9dba5\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a \x0a \x0a xmp.did:CED979F2760511E1954F918C86BB5E3E\x0a \x0a \x0a 3\x0a sRGB IEC61966-2.1\x0a image/png\x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 1\x0a 16\x0a 16\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x1c\xda\xc4\xc8\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xc5IDATx\xda\xdc\xd3=jBQ\x10\xc5\xf1\xdf\x93`-\xe2\x12\xb2\x01\x85\xe0\x02\xde6\x82\xba\x85$ba\x95^\x0d\xa9\xd2&\xd8\xd9\xd9Z\xbc\x15\xa4M\xd2\xa5\x10\x02\xb1\xb0\xb5\x92\xf0\xd2\x8c ~\x06\xac\xe2T\x03\xf7\xce\xb9\xffs\x0f\x93\xe4y\xee\x94*8\xb1\xce@\xe0b\xd5dYV@\x19\xf3#3%,\xd34]l\x12\x5ca\x82\x9b\x03d5\x8c\xd0\xdd\x22\xc0,^o\x85\xc0\x03\xd63\xae\xa2\x87\x0a>w\xfd\xc1\x14w\xf8F\x03m$qV\xc7c\x0c?\xe1e\x17\x01\xbc\x85\xc8\x00\xd7\xf8\xc1+\xee\xc3\xfb\x00\xc3c)\xbc\xe3\x16_h\x86\x95J\x10\x0c\xff\x1a\xe3\x07:a\xa7\x88>\x9e\x0f\xc6\xb8\x87\xa4\x8dK\x8c\xf7]J\xfe\xff2\xfd\x0e\x00\x01\xd7(\xfc\x88\x81e\xcb\x00\x00\x00\x00IEND\xaeB`\x82\x00\x008\xe3\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x18\x00\x00\x00\x11\x08\x06\x00\x00\x00\xc7xl0\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x008\x1aiTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-11-30T20:27:51+04:00\x0a 2013-11-30T20:47:55+04:00\x0a 2013-11-30T20:47:55+04:00\x0a image/png\x0a 3\x0a xmp.iid:108a5c37-0a08-6f40-9e0e-3045064bd091\x0a xmp.did:108a5c37-0a08-6f40-9e0e-3045064bd091\x0a xmp.did:108a5c37-0a08-6f40-9e0e-3045064bd091\x0a \x0a \x0a \x0a created\x0a xmp.iid:108a5c37-0a08-6f40-9e0e-3045064bd091\x0a 2013-11-30T20:27:51+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a \x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 65535\x0a 24\x0a 17\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0aD\x1e`\xf0\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00CIDATx\xdab\xfc\xff\xff?\x03\xb1 22\xd2\x8b\x81\x81\xe1\xcf\xf2\xe5\xcbw\x11\xab\x87q\xd4\x82Q\x0b\x06\xc4\x02N\x06\x06\x86\xc7\xb4\xb4\x80\x83\x81\x81\xe1\xe1h\x1c\x8cZ0j\x01\xf1\x16\x00\x00\x00\x00\xff\xff\x03\x00)\x82\x82^\xb0\x8fF\x15\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00F{\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x0aOiCCPPhotoshop ICC profile\x00\x00x\xda\x9dSgTS\xe9\x16=\xf7\xde\xf4BK\x88\x80\x94KoR\x15\x08 RB\x8b\x80\x14\x91&*!\x09\x10J\x88!\xa1\xd9\x15Q\xc1\x11EE\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15Q,\x0c\x8a\x0a\xd8\x07\xe4!\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1{\xa3k\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7>\xe7\xac\xf3\x9d\xb3\xcf\x07\xc0\x08\x0c\x96H3Q5\x80\x0c\xa9B\x1e\x11\xe0\x83\xc7\xc4\xc6\xe1\xe4.@\x81\x0a$p\x00\x10\x08\xb3d!s\xfd#\x01\x00\xf8~<<+\x22\xc0\x07\xbe\x00\x01x\xd3\x0b\x08\x00\xc0M\x9b\xc00\x1c\x87\xff\x0f\xeaB\x99\x5c\x01\x80\x84\x01\xc0t\x918K\x08\x80\x14\x00@z\x8eB\xa6\x00@F\x01\x80\x9d\x98&S\x00\xa0\x04\x00`\xcbcb\xe3\x00P-\x00`'\x7f\xe6\xd3\x00\x80\x9d\xf8\x99{\x01\x00[\x94!\x15\x01\xa0\x91\x00 \x13e\x88D\x00h;\x00\xac\xcfV\x8aE\x00X0\x00\x14fK\xc49\x00\xd8-\x000IWfH\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x000Q\x88\x85)\x00\x04{\x00`\xc8##x\x00\x84\x99\x00\x14F\xf2W<\xf1+\xae\x10\xe7*\x00\x00x\x99\xb2<\xb9$9E\x81[\x08-q\x07WW.\x1e(\xceI\x17+\x146a\x02a\x9a@.\xc2y\x99\x192\x814\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\xf3\xfdx\xce\x0e\xae\xce\xce6\x8e\xb6\x0e_-\xea\xbf\x06\xff\x22bb\xe3\xfe\xe5\xcf\xabp@\x00\x00\xe1t~\xd1\xfe,/\xb3\x1a\x80;\x06\x80m\xfe\xa2%\xee\x04h^\x0b\xa0u\xf7\x8bf\xb2\x0f@\xb5\x00\xa0\xe9\xdaW\xf3p\xf8~<\xdf5\x00\xb0j>\x01{\x91-\xa8]c\x03\xf6K'\x10Xt\xc0\xe2\xf7\x00\x00\xf2\xbbo\xc1\xd4(\x08\x03\x80h\x83\xe1\xcfw\xff\xef?\xfdG\xa0%\x00\x80fI\x92q\x00\x00^D$.T\xca\xb3?\xc7\x08\x00\x00D\xa0\x81*\xb0A\x1b\xf4\xc1\x18,\xc0\x06\x1c\xc1\x05\xdc\xc1\x0b\xfc`6\x84B$\xc4\xc2B\x10B\x0ad\x80\x1cr`)\xac\x82B(\x86\xcd\xb0\x1d*`/\xd4@\x1d4\xc0Qh\x86\x93p\x0e.\xc2U\xb8\x0e=p\x0f\xfaa\x08\x9e\xc1(\xbc\x81\x09\x04A\xc8\x08\x13a!\xda\x88\x01b\x8aX#\x8e\x08\x17\x99\x85\xf8!\xc1H\x04\x12\x8b$ \xc9\x88\x14Q\x22K\x915H1R\x8aT UH\x1d\xf2=r\x029\x87\x5cF\xba\x91;\xc8\x002\x82\xfc\x86\xbcG1\x94\x81\xb2Q=\xd4\x0c\xb5C\xb9\xa87\x1a\x84F\xa2\x0b\xd0dt1\x9a\x8f\x16\xa0\x9b\xd0r\xb4\x1a=\x8c6\xa1\xe7\xd0\xabh\x0f\xda\x8f>C\xc70\xc0\xe8\x18\x073\xc4l0.\xc6\xc3B\xb18,\x09\x93c\xcb\xb1\x22\xac\x0c\xab\xc6\x1a\xb0V\xac\x03\xbb\x89\xf5c\xcf\xb1w\x04\x12\x81E\xc0\x096\x04wB a\x1eAHXLXN\xd8H\xa8 \x1c$4\x11\xda\x097\x09\x03\x84Q\xc2'\x22\x93\xa8K\xb4&\xba\x11\xf9\xc4\x18b21\x87XH,#\xd6\x12\x8f\x13/\x10{\x88C\xc47$\x12\x89C2'\xb9\x90\x02I\xb1\xa4T\xd2\x12\xd2F\xd2nR#\xe9,\xa9\x9b4H\x1a#\x93\xc9\xdadk\xb2\x079\x94, +\xc8\x85\xe4\x9d\xe4\xc3\xe43\xe4\x1b\xe4!\xf2[\x0a\x9db@q\xa4\xf8S\xe2(R\xcajJ\x19\xe5\x10\xe54\xe5\x06e\x982AU\xa3\x9aR\xdd\xa8\xa1T\x115\x8fZB\xad\xa1\xb6R\xafQ\x87\xa8\x134u\x9a9\xcd\x83\x16IK\xa5\xad\xa2\x95\xd3\x1ah\x17h\xf7i\xaf\xe8t\xba\x11\xdd\x95\x1eN\x97\xd0W\xd2\xcb\xe9G\xe8\x97\xe8\x03\xf4w\x0c\x0d\x86\x15\x83\xc7\x88g(\x19\x9b\x18\x07\x18g\x19w\x18\xaf\x98L\xa6\x19\xd3\x8b\x19\xc7T071\xeb\x98\xe7\x99\x0f\x99oUX*\xb6*|\x15\x91\xca\x0a\x95J\x95&\x95\x1b*/T\xa9\xaa\xa6\xaa\xde\xaa\x0bU\xf3U\xcbT\x8f\xa9^S}\xaeFU3S\xe3\xa9\x09\xd4\x96\xabU\xaa\x9dP\xebS\x1bSg\xa9;\xa8\x87\xaag\xa8oT?\xa4~Y\xfd\x89\x06Y\xc3L\xc3OC\xa4Q\xa0\xb1_\xe3\xbc\xc6 \x0bc\x19\xb3x,!k\x0d\xab\x86u\x815\xc4&\xb1\xcd\xd9|v*\xbb\x98\xfd\x1d\xbb\x8b=\xaa\xa9\xa19C3J3W\xb3R\xf3\x94f?\x07\xe3\x98q\xf8\x9ctN\x09\xe7(\xa7\x97\xf3~\x8a\xde\x14\xef)\xe2)\x1b\xa64L\xb91e\x5ck\xaa\x96\x97\x96X\xabH\xabQ\xabG\xeb\xbd6\xae\xed\xa7\x9d\xa6\xbdE\xbbY\xfb\x81\x0eA\xc7J'\x5c'Gg\x8f\xce\x05\x9d\xe7S\xd9S\xdd\xa7\x0a\xa7\x16M=:\xf5\xae.\xaak\xa5\x1b\xa1\xbbDw\xbfn\xa7\xee\x98\x9e\xbe^\x80\x9eLo\xa7\xdey\xbd\xe7\xfa\x1c}/\xfdT\xfdm\xfa\xa7\xf5G\x0cX\x06\xb3\x0c$\x06\xdb\x0c\xce\x18<\xc55qo<\x1d/\xc7\xdb\xf1QC]\xc3@C\xa5a\x95a\x97\xe1\x84\x91\xb9\xd1<\xa3\xd5F\x8dF\x0f\x8ci\xc6\x5c\xe3$\xe3m\xc6m\xc6\xa3&\x06&!&KM\xeaM\xee\x9aRM\xb9\xa6)\xa6;L;L\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x995\x9b=1\xd72\xe7\x9b\xe7\x9b\xd7\x9b\xdf\xb7`ZxZ,\xb6\xa8\xb6\xb8eI\xb2\xe4Z\xa6Y\xee\xb6\xbcn\x85Z9Y\xa5XUZ]\xb3F\xad\x9d\xad%\xd6\xbb\xad\xbb\xa7\x11\xa7\xb9N\x93N\xab\x9e\xd6g\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\x19\xb0\xe5\xd8\x06\xdb\xae\xb6m\xb6}agb\x17g\xb7\xc5\xae\xc3\xee\x93\xbd\x93}\xba}\x8d\xfd=\x07\x0d\x87\xd9\x0e\xab\x1dZ\x1d~s\xb4r\x14:V:\xde\x9a\xce\x9c\xee?}\xc5\xf4\x96\xe9/gX\xcf\x10\xcf\xd83\xe3\xb6\x13\xcb)\xc4i\x9dS\x9b\xd3Gg\x17g\xb9s\x83\xf3\x88\x8b\x89K\x82\xcb.\x97>.\x9b\x1b\xc6\xdd\xc8\xbd\xe4Jt\xf5q]\xe1z\xd2\xf5\x9d\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee6\xeei\xee\x87\xdc\x9f\xcc4\x9f)\x9eY3s\xd0\xc3\xc8C\xe0Q\xe5\xd1?\x0b\x9f\x950k\xdf\xac~OCO\x81g\xb5\xe7#/c/\x91W\xad\xd7\xb0\xb7\xa5w\xaa\xf7a\xef\x17>\xf6>r\x9f\xe3>\xe3<7\xde2\xdeY_\xcc7\xc0\xb7\xc8\xb7\xcbO\xc3o\x9e_\x85\xdfC\x7f#\xffd\xffz\xff\xd1\x00\xa7\x80%\x01g\x03\x89\x81A\x81[\x02\xfb\xf8z|!\xbf\x8e?:\xdbe\xf6\xb2\xd9\xedA\x8c\xa0\xb9A\x15A\x8f\x82\xad\x82\xe5\xc1\xad!h\xc8\xec\x90\xad!\xf7\xe7\x98\xce\x91\xcei\x0e\x85P~\xe8\xd6\xd0\x07a\xe6a\x8b\xc3~\x0c'\x85\x87\x85W\x86?\x8ep\x88X\x1a\xd11\x975w\xd1\xdcCs\xdfD\xfaD\x96D\xde\x9bg1O9\xaf-J5*>\xaa.j<\xda7\xba4\xba?\xc6.fY\xcc\xd5X\x9dXIlK\x1c9.*\xae6nl\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3{\x17\x98/\xc8]py\xa1\xce\xc2\xf4\x85\xa7\x16\xa9.\x12,:\x96@L\x88N8\x94\xf0A\x10*\xa8\x16\x8c%\xf2\x13w%\x8e\x0ay\xc2\x1d\xc2g\x22/\xd16\xd1\x88\xd8C\x5c*\x1eN\xf2H*Mz\x92\xec\x91\xbc5y$\xc53\xa5,\xe5\xb9\x84'\xa9\x90\xbcL\x0dL\xdd\x9b:\x9e\x16\x9av m2=:\xbd1\x83\x92\x91\x90qB\xaa!M\x93\xb6g\xeag\xe6fv\xcb\xace\x85\xb2\xfe\xc5n\x8b\xb7/\x1e\x95\x07\xc9k\xb3\x90\xac\x05Y-\x0a\xb6B\xa6\xe8TZ(\xd7*\x07\xb2geWf\xbf\xcd\x89\xca9\x96\xab\x9e+\xcd\xed\xcc\xb3\xca\xdb\x907\x9c\xef\x9f\xff\xed\x12\xc2\x12\xe1\x92\xb6\xa5\x86KW-\x1dX\xe6\xbd\xacj9\xb2\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8(\xdcx\xe5\x1b\x87o\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9d\xcff\xd2f\xe9\xe6\xde-\x9e[\x0e\x96\xaa\x97\xe6\x97\x0en\x0d\xd9\xda\xb4\x0d\xdfV\xb4\xed\xf5\xf6E\xdb/\x97\xcd(\xdb\xbb\x83\xb6C\xb9\xa3\xbf<\xb8\xbce\xa7\xc9\xce\xcd;?T\xa4T\xf4T\xfaT6\xee\xd2\xdd\xb5a\xd7\xf8n\xd1\xee\x1b{\xbc\xf64\xec\xd5\xdb[\xbc\xf7\xfd>\xc9\xbe\xdbU\x01UM\xd5f\xd5e\xfbI\xfb\xb3\xf7?\xae\x89\xaa\xe9\xf8\x96\xfbm]\xadNmq\xed\xc7\x03\xd2\x03\xfd\x07#\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2=TR\x8f\xd6+\xebG\x0e\xc7\x1f\xbe\xfe\x9d\xefw-\x0d6\x0dU\x8d\x9c\xc6\xe2#pDy\xe4\xe9\xf7\x09\xdf\xf7\x1e\x0d:\xdav\x8c{\xac\xe1\x07\xd3\x1fv\x1dg\x1d/jB\x9a\xf2\x9aF\x9bS\x9a\xfb[b[\xbaO\xcc>\xd1\xd6\xea\xdez\xfcG\xdb\x1f\x0f\x9c499\xe2?r\xfd\xe9\xfc\xa7C\xcfd\xcf&\x9e\x17\xfe\xa2\xfe\xcb\xae\x17\x16/~\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\x93\xbfm|\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\xbe\xc9x31^\xf4V\xfb\xed\xc1w\xdcw\x1d\xef\xa3\xdf\x0fO\xe4| \x7f(\xffh\xf9\xb1\xf5S\xd0\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfcc3-\xdb\x00\x00:\xd8iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a xmp.iid:f58ea093-289f-7d49-8786-e3a77ce63fb9\x0a xmp.did:6b476d3f-677f-1148-8796-2a2f6b11441d\x0a xmp.did:6b476d3f-677f-1148-8796-2a2f6b11441d\x0a \x0a \x0a \x0a created\x0a xmp.iid:6b476d3f-677f-1148-8796-2a2f6b11441d\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:f58ea093-289f-7d49-8786-e3a77ce63fb9\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a \x0a \x0a xmp.did:CED979F2760511E1954F918C86BB5E3E\x0a \x0a \x0a 3\x0a sRGB IEC61966-2.1\x0a image/png\x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 1\x0a 16\x0a 16\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a;Q\xea\x18\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xc2IDATx\xda\xc4\xd31N\x02a\x10\x05\xe0\x0f\x824\xb4\x1e\x05O\xb0-\x05\x07\x00\x12[\x1b4 \x09T^\x83\xce\x8b\xec\x01h\xa0\x82J\x0b\x13\x92\xa50\xc6\x9a\xc2\xb5\x99\x82\x10\x02\xfeK\xe1T\x93\x7f2\xef\x9f\xf7\xdeL\xad,K\xd7D\xdd\x95\xd18\xf5\x98\xe7y\x0b3\xbc\xe3\x15?\x87\xf5,\xcb\xce\x03\xe0\x06mt\x22\x9f\xa7R\xf8\xc6\x14\x9fx\xc0\xa0\x8a\x06K\x8c\x03l\x84\xfb*\x22\xae0\x89I\x1e\xd1\xaf\xe2\xc2\x02/\xd8\xc7D\xddT\x80\x1a\xee\xd0D\x81\xb7\x8b6\x1e5\x8f\xd1\xc36\xe8\xac\xff\x0aP\xc7S4\x17x\xc6&E\x83a\xd8W\x84\x0b\x9b\x14\x17n\xe3\xe7]PX'\xad2\xbeb\x81v\xf88+\xd2\xbf_\xe3\xef\x00\x1c\x17*-\xd7G\xaa_\x00\x00\x00\x00IEND\xaeB`\x82\x00\x009u\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x0c\x00\x00\x00\x0c\x08\x06\x00\x00\x00Vu\x5c\xe7\x00\x00\x00\x09pHYs\x00\x00\x01#\x00\x00\x01#\x01rAw\xde\x00\x008\x18iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-11-30T20:27:38+04:00\x0a 2013-11-30T20:48:59+04:00\x0a 2013-11-30T20:48:59+04:00\x0a image/png\x0a 3\x0a xmp.iid:7616c5dd-35f8-9440-9856-45cc4980ec01\x0a xmp.did:17ee26ae-3d57-e54f-80da-9ef46285218f\x0a xmp.did:7616c5dd-35f8-9440-9856-45cc4980ec01\x0a \x0a \x0a \x0a created\x0a xmp.iid:7616c5dd-35f8-9440-9856-45cc4980ec01\x0a 2013-11-30T20:27:38+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a \x0a 1\x0a 73914/10000\x0a 73914/10000\x0a 2\x0a 65535\x0a 12\x0a 12\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a0$Pw\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xd7IDATx\xdal\xd1\xcdJ\x03A\x10\x04\xe0\x8e\xe8bT<\x1a\xffE\x85\x90K\x14L\x0e^<\xa8\x18M\xf4\x94\x0d\x89\xeb\xc1\xf7\x7f\x8b\xcfK/\x0c\x8b\x87\x82\x99\xaa\xae\x9e\xee\x9a@\x14\xb8\xc1\x1b\x96\x89\x19n\xcb\x9a\xf6\xb0\x8d\x17\xac1\xc5Eb\x82U6\xa9J\xc3+\xbe\xd0\xef\xbc\x18\xd8\xc5\x1c\xef\xe8\x05\xae\xd1\xa4\xd0\x16\x0cp\x8a\xfd\xe4v\xb0\xc10\xd29-\x8a\xdb16x*LwX\x04j\x9c'y\x94\xf7\xdfD\x93\xbb\x04\x8eQw\x0d\x83\xec\xde\x1a~pUhu\xe0\x03\x0fI\xf6\xf1\x98\xe34x\xc6ajc|F\xe6\xfc\xdd\xc6\x86=\x9c\xe1\x12\x07\xe8e\xeck\x8c\x22\x89YFW\xfd\x13k\x95\xfa\x02[]r\x85{\x9c\xe4\x92\xe3\xfc\xf1y\x1b{\xd9\xa9\x87a\x8a\xcb\xa2p\x94Z \xfe\x06\x00\xefw\xc3A\xdf\x8f\xb4\xd9\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00V\x08\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\x00\x00\x00\x09pHYs\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\x95+\x0e\x1b\x00\x00\x0aOiCCPPhotoshop ICC profile\x00\x00x\xda\x9dSgTS\xe9\x16=\xf7\xde\xf4BK\x88\x80\x94KoR\x15\x08 RB\x8b\x80\x14\x91&*!\x09\x10J\x88!\xa1\xd9\x15Q\xc1\x11EE\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15Q,\x0c\x8a\x0a\xd8\x07\xe4!\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1{\xa3k\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7>\xe7\xac\xf3\x9d\xb3\xcf\x07\xc0\x08\x0c\x96H3Q5\x80\x0c\xa9B\x1e\x11\xe0\x83\xc7\xc4\xc6\xe1\xe4.@\x81\x0a$p\x00\x10\x08\xb3d!s\xfd#\x01\x00\xf8~<<+\x22\xc0\x07\xbe\x00\x01x\xd3\x0b\x08\x00\xc0M\x9b\xc00\x1c\x87\xff\x0f\xeaB\x99\x5c\x01\x80\x84\x01\xc0t\x918K\x08\x80\x14\x00@z\x8eB\xa6\x00@F\x01\x80\x9d\x98&S\x00\xa0\x04\x00`\xcbcb\xe3\x00P-\x00`'\x7f\xe6\xd3\x00\x80\x9d\xf8\x99{\x01\x00[\x94!\x15\x01\xa0\x91\x00 \x13e\x88D\x00h;\x00\xac\xcfV\x8aE\x00X0\x00\x14fK\xc49\x00\xd8-\x000IWfH\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x000Q\x88\x85)\x00\x04{\x00`\xc8##x\x00\x84\x99\x00\x14F\xf2W<\xf1+\xae\x10\xe7*\x00\x00x\x99\xb2<\xb9$9E\x81[\x08-q\x07WW.\x1e(\xceI\x17+\x146a\x02a\x9a@.\xc2y\x99\x192\x814\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\xf3\xfdx\xce\x0e\xae\xce\xce6\x8e\xb6\x0e_-\xea\xbf\x06\xff\x22bb\xe3\xfe\xe5\xcf\xabp@\x00\x00\xe1t~\xd1\xfe,/\xb3\x1a\x80;\x06\x80m\xfe\xa2%\xee\x04h^\x0b\xa0u\xf7\x8bf\xb2\x0f@\xb5\x00\xa0\xe9\xdaW\xf3p\xf8~<\xdf5\x00\xb0j>\x01{\x91-\xa8]c\x03\xf6K'\x10Xt\xc0\xe2\xf7\x00\x00\xf2\xbbo\xc1\xd4(\x08\x03\x80h\x83\xe1\xcfw\xff\xef?\xfdG\xa0%\x00\x80fI\x92q\x00\x00^D$.T\xca\xb3?\xc7\x08\x00\x00D\xa0\x81*\xb0A\x1b\xf4\xc1\x18,\xc0\x06\x1c\xc1\x05\xdc\xc1\x0b\xfc`6\x84B$\xc4\xc2B\x10B\x0ad\x80\x1cr`)\xac\x82B(\x86\xcd\xb0\x1d*`/\xd4@\x1d4\xc0Qh\x86\x93p\x0e.\xc2U\xb8\x0e=p\x0f\xfaa\x08\x9e\xc1(\xbc\x81\x09\x04A\xc8\x08\x13a!\xda\x88\x01b\x8aX#\x8e\x08\x17\x99\x85\xf8!\xc1H\x04\x12\x8b$ \xc9\x88\x14Q\x22K\x915H1R\x8aT UH\x1d\xf2=r\x029\x87\x5cF\xba\x91;\xc8\x002\x82\xfc\x86\xbcG1\x94\x81\xb2Q=\xd4\x0c\xb5C\xb9\xa87\x1a\x84F\xa2\x0b\xd0dt1\x9a\x8f\x16\xa0\x9b\xd0r\xb4\x1a=\x8c6\xa1\xe7\xd0\xabh\x0f\xda\x8f>C\xc70\xc0\xe8\x18\x073\xc4l0.\xc6\xc3B\xb18,\x09\x93c\xcb\xb1\x22\xac\x0c\xab\xc6\x1a\xb0V\xac\x03\xbb\x89\xf5c\xcf\xb1w\x04\x12\x81E\xc0\x096\x04wB a\x1eAHXLXN\xd8H\xa8 \x1c$4\x11\xda\x097\x09\x03\x84Q\xc2'\x22\x93\xa8K\xb4&\xba\x11\xf9\xc4\x18b21\x87XH,#\xd6\x12\x8f\x13/\x10{\x88C\xc47$\x12\x89C2'\xb9\x90\x02I\xb1\xa4T\xd2\x12\xd2F\xd2nR#\xe9,\xa9\x9b4H\x1a#\x93\xc9\xdadk\xb2\x079\x94, +\xc8\x85\xe4\x9d\xe4\xc3\xe43\xe4\x1b\xe4!\xf2[\x0a\x9db@q\xa4\xf8S\xe2(R\xcajJ\x19\xe5\x10\xe54\xe5\x06e\x982AU\xa3\x9aR\xdd\xa8\xa1T\x115\x8fZB\xad\xa1\xb6R\xafQ\x87\xa8\x134u\x9a9\xcd\x83\x16IK\xa5\xad\xa2\x95\xd3\x1ah\x17h\xf7i\xaf\xe8t\xba\x11\xdd\x95\x1eN\x97\xd0W\xd2\xcb\xe9G\xe8\x97\xe8\x03\xf4w\x0c\x0d\x86\x15\x83\xc7\x88g(\x19\x9b\x18\x07\x18g\x19w\x18\xaf\x98L\xa6\x19\xd3\x8b\x19\xc7T071\xeb\x98\xe7\x99\x0f\x99oUX*\xb6*|\x15\x91\xca\x0a\x95J\x95&\x95\x1b*/T\xa9\xaa\xa6\xaa\xde\xaa\x0bU\xf3U\xcbT\x8f\xa9^S}\xaeFU3S\xe3\xa9\x09\xd4\x96\xabU\xaa\x9dP\xebS\x1bSg\xa9;\xa8\x87\xaag\xa8oT?\xa4~Y\xfd\x89\x06Y\xc3L\xc3OC\xa4Q\xa0\xb1_\xe3\xbc\xc6 \x0bc\x19\xb3x,!k\x0d\xab\x86u\x815\xc4&\xb1\xcd\xd9|v*\xbb\x98\xfd\x1d\xbb\x8b=\xaa\xa9\xa19C3J3W\xb3R\xf3\x94f?\x07\xe3\x98q\xf8\x9ctN\x09\xe7(\xa7\x97\xf3~\x8a\xde\x14\xef)\xe2)\x1b\xa64L\xb91e\x5ck\xaa\x96\x97\x96X\xabH\xabQ\xabG\xeb\xbd6\xae\xed\xa7\x9d\xa6\xbdE\xbbY\xfb\x81\x0eA\xc7J'\x5c'Gg\x8f\xce\x05\x9d\xe7S\xd9S\xdd\xa7\x0a\xa7\x16M=:\xf5\xae.\xaak\xa5\x1b\xa1\xbbDw\xbfn\xa7\xee\x98\x9e\xbe^\x80\x9eLo\xa7\xdey\xbd\xe7\xfa\x1c}/\xfdT\xfdm\xfa\xa7\xf5G\x0cX\x06\xb3\x0c$\x06\xdb\x0c\xce\x18<\xc55qo<\x1d/\xc7\xdb\xf1QC]\xc3@C\xa5a\x95a\x97\xe1\x84\x91\xb9\xd1<\xa3\xd5F\x8dF\x0f\x8ci\xc6\x5c\xe3$\xe3m\xc6m\xc6\xa3&\x06&!&KM\xeaM\xee\x9aRM\xb9\xa6)\xa6;L;L\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x995\x9b=1\xd72\xe7\x9b\xe7\x9b\xd7\x9b\xdf\xb7`ZxZ,\xb6\xa8\xb6\xb8eI\xb2\xe4Z\xa6Y\xee\xb6\xbcn\x85Z9Y\xa5XUZ]\xb3F\xad\x9d\xad%\xd6\xbb\xad\xbb\xa7\x11\xa7\xb9N\x93N\xab\x9e\xd6g\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\x19\xb0\xe5\xd8\x06\xdb\xae\xb6m\xb6}agb\x17g\xb7\xc5\xae\xc3\xee\x93\xbd\x93}\xba}\x8d\xfd=\x07\x0d\x87\xd9\x0e\xab\x1dZ\x1d~s\xb4r\x14:V:\xde\x9a\xce\x9c\xee?}\xc5\xf4\x96\xe9/gX\xcf\x10\xcf\xd83\xe3\xb6\x13\xcb)\xc4i\x9dS\x9b\xd3Gg\x17g\xb9s\x83\xf3\x88\x8b\x89K\x82\xcb.\x97>.\x9b\x1b\xc6\xdd\xc8\xbd\xe4Jt\xf5q]\xe1z\xd2\xf5\x9d\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee6\xeei\xee\x87\xdc\x9f\xcc4\x9f)\x9eY3s\xd0\xc3\xc8C\xe0Q\xe5\xd1?\x0b\x9f\x950k\xdf\xac~OCO\x81g\xb5\xe7#/c/\x91W\xad\xd7\xb0\xb7\xa5w\xaa\xf7a\xef\x17>\xf6>r\x9f\xe3>\xe3<7\xde2\xdeY_\xcc7\xc0\xb7\xc8\xb7\xcbO\xc3o\x9e_\x85\xdfC\x7f#\xffd\xffz\xff\xd1\x00\xa7\x80%\x01g\x03\x89\x81A\x81[\x02\xfb\xf8z|!\xbf\x8e?:\xdbe\xf6\xb2\xd9\xedA\x8c\xa0\xb9A\x15A\x8f\x82\xad\x82\xe5\xc1\xad!h\xc8\xec\x90\xad!\xf7\xe7\x98\xce\x91\xcei\x0e\x85P~\xe8\xd6\xd0\x07a\xe6a\x8b\xc3~\x0c'\x85\x87\x85W\x86?\x8ep\x88X\x1a\xd11\x975w\xd1\xdcCs\xdfD\xfaD\x96D\xde\x9bg1O9\xaf-J5*>\xaa.j<\xda7\xba4\xba?\xc6.fY\xcc\xd5X\x9dXIlK\x1c9.*\xae6nl\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3{\x17\x98/\xc8]py\xa1\xce\xc2\xf4\x85\xa7\x16\xa9.\x12,:\x96@L\x88N8\x94\xf0A\x10*\xa8\x16\x8c%\xf2\x13w%\x8e\x0ay\xc2\x1d\xc2g\x22/\xd16\xd1\x88\xd8C\x5c*\x1eN\xf2H*Mz\x92\xec\x91\xbc5y$\xc53\xa5,\xe5\xb9\x84'\xa9\x90\xbcL\x0dL\xdd\x9b:\x9e\x16\x9av m2=:\xbd1\x83\x92\x91\x90qB\xaa!M\x93\xb6g\xeag\xe6fv\xcb\xace\x85\xb2\xfe\xc5n\x8b\xb7/\x1e\x95\x07\xc9k\xb3\x90\xac\x05Y-\x0a\xb6B\xa6\xe8TZ(\xd7*\x07\xb2geWf\xbf\xcd\x89\xca9\x96\xab\x9e+\xcd\xed\xcc\xb3\xca\xdb\x907\x9c\xef\x9f\xff\xed\x12\xc2\x12\xe1\x92\xb6\xa5\x86KW-\x1dX\xe6\xbd\xacj9\xb2\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8(\xdcx\xe5\x1b\x87o\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9d\xcff\xd2f\xe9\xe6\xde-\x9e[\x0e\x96\xaa\x97\xe6\x97\x0en\x0d\xd9\xda\xb4\x0d\xdfV\xb4\xed\xf5\xf6E\xdb/\x97\xcd(\xdb\xbb\x83\xb6C\xb9\xa3\xbf<\xb8\xbce\xa7\xc9\xce\xcd;?T\xa4T\xf4T\xfaT6\xee\xd2\xdd\xb5a\xd7\xf8n\xd1\xee\x1b{\xbc\xf64\xec\xd5\xdb[\xbc\xf7\xfd>\xc9\xbe\xdbU\x01UM\xd5f\xd5e\xfbI\xfb\xb3\xf7?\xae\x89\xaa\xe9\xf8\x96\xfbm]\xadNmq\xed\xc7\x03\xd2\x03\xfd\x07#\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2=TR\x8f\xd6+\xebG\x0e\xc7\x1f\xbe\xfe\x9d\xefw-\x0d6\x0dU\x8d\x9c\xc6\xe2#pDy\xe4\xe9\xf7\x09\xdf\xf7\x1e\x0d:\xdav\x8c{\xac\xe1\x07\xd3\x1fv\x1dg\x1d/jB\x9a\xf2\x9aF\x9bS\x9a\xfb[b[\xbaO\xcc>\xd1\xd6\xea\xdez\xfcG\xdb\x1f\x0f\x9c499\xe2?r\xfd\xe9\xfc\xa7C\xcfd\xcf&\x9e\x17\xfe\xa2\xfe\xcb\xae\x17\x16/~\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\x93\xbfm|\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\xbe\xc9x31^\xf4V\xfb\xed\xc1w\xdcw\x1d\xef\xa3\xdf\x0fO\xe4| \x7f(\xffh\xf9\xb1\xf5S\xd0\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfcc3-\xdb\x00\x00A\x05iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-05-12T21:58:38+04:00\x0a 2014-05-13T11:06+04:00\x0a 2014-05-13T11:06+04:00\x0a image/png\x0a xmp.iid:90266b52-84a9-2c4f-afb6-b1c65e09b7fb\x0a xmp.did:E8A7C96826BBE211806D84C2D957BF50\x0a xmp.did:E8A7C96826BBE211806D84C2D957BF50\x0a \x0a \x0a \x0a created\x0a xmp.iid:E8A7C96826BBE211806D84C2D957BF50\x0a 2013-05-12T21:58:38+04:00\x0a Adobe Photoshop CS6 (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:c1161d27-f700-274f-93d8-153843ea278c\x0a 2014-05-13T10:08:20+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a saved\x0a xmp.iid:43a23237-6cf6-5941-a4de-3cd947c17736\x0a 2014-05-13T11:06+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a converted\x0a from application/vnd.adobe.photoshop to image/png\x0a \x0a \x0a derived\x0a converted from application/vnd.adobe.photoshop to image/png\x0a \x0a \x0a saved\x0a xmp.iid:90266b52-84a9-2c4f-afb6-b1c65e09b7fb\x0a 2014-05-13T11:06+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a \x0a xmp.iid:43a23237-6cf6-5941-a4de-3cd947c17736\x0a xmp.did:E8A7C96826BBE211806D84C2D957BF50\x0a xmp.did:E8A7C96826BBE211806D84C2D957BF50\x0a \x0a 3\x0a sRGB IEC61966-2.1\x0a 1\x0a 960000/10000\x0a 960000/10000\x0a 2\x0a 1\x0a 64\x0a 64\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0aD?\xa7~\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x0a\x22IDATx\xda\xdc\x9by\x8c\xdce\x19\xc7?s\xec\xbd\xdd\xed\xf6\xd8\x85\xb4\x14\xa8\xb8\xc5\xd2C%E\xac\xa0\x82\x84(VE\xc0@c\xa2\xa0Q\x9azWc\xa5\x8ah\xd4\xe0\xc1*T\x11\x0f\xbcm\x8c\x91\x9a\x80-\xe0U\xb4H]\x89Z1\xdb\x9bV[z\xd0\xa5\xdb\xed\xb5Gwg\xe6\xf1\x8f\xdf\xf7M\xdf\xfe\x98\xeb7G\xbb\xeb\x9bLvf\xf6\xf7\x9by\x9f\xef\xf3<\xdf\xe7z'ff\x8c\x91\xd5\x0c\xbc\x02\xd8\x00\xa4\xcf\xd4\x97\xc6\x19;\xcb\x80\x9b\x81\x8f\x01\x13\xff\xdf\x00\x88\x15q\xcd \xf0\x1f\xe0\x1d\xc0\xf7\x80\xcb\xce\xc4\xfebUt\x81V`!0W\x1a\xcd\x00\xfd\x12r\x17\xb0G\xaf\xfd\x0d\xcc\x04V\x01\xe7\x03\xbd\xc0\xc3\xc0O\x81\x9d\xd5\xdad\xb2\xcaZ\xef\x04\xde*\x81\xea\x81\x140\x0c\x0c\x00\x87\x81\xa7\x81u\xc0\xdf%\xf0.\xe0I\xe0\xa5\xba\xf7v\xe0:`\x0d\xb0\x1a\xd8\x06\x8c\x8e\x17\x0bp.\xf6^\xe0\x93\xc0y@\x8d4n\x12d\x108\x02\x1c\x00\xd6\x02\x8f\x00W\x01\x9f\x03&\xe93F\x80\xa3\xc0\xf3\x02l5\xd0\xad\xf7\xc6<\x00\x0e\x84\x9f\x00o\x13\xd3\xc7B\xc4\x97\x96\x90\xc7\x80\xe3\xb2\x92\x0bd1\xee\xda\x8c\xde\x1f\x00\x0e\xc9%V\x03\x8f\x02\xfb\xc7\xa2\x0b4\x88\x03\x1a\x80\x84L;\x93\xc3M\x92\xba\xa6\x1e\x98\xe2\x81\x16\x0b\x81X+\x0b\x9a\x00\x9c\x0b\x5c\x02\xdc*\xce\xf8\x95\x809\xab\x16P\x0f\xcc\x07\xae\x06^\x05\x9c\xa3M\xd7\x01m\xc0d\xbd\xaeT\xc8\xcc\x00'%\xf8f\xe0\xeb\xc0\x1fs\x00]U\x00&\x03W*\x86\xcf\x95\x16\x9b\xa5\xad\x98\xf7\x88\x17\x19\x0e\xa3\x02\x91\x96k\xec\x915|[\xaeT5\x00\xea\x81v\x85\xac\x85\xc0\xb5\xc0\x0c\x91V\xa3\xcc9V\x05a\xf3-g\x0d\xbd\xc0\x1f\x80;E\xacU\x01\xa0\x11X v\x7f\xa5\xd8\xdd\x17\xfclf\x92)\xa0\x0fx\x0aX&\xab\xa8\x9a\x0bL\x06\xee\x05\xde.\x00\xce\xa6\xf0\xfeJ)\xc7\xf8\x0b\xf0\x01\x85\xcf\x8a\xa7\xc2S\x81\xeb\x81Y\xd2\xfcXZI\xb9\xe3B\xe0\x8b\xe2\xa3\x8aY@\xbd2\xb3%\xca\xd6\xa6*\xd4\xc5\x19{k\x14\xd8\x07<\x00\xdc\x93+:D\x01`\x16\xf0q\xe0u\x8a\xc3\x0dc\xc0\xef\x0bq\xc20\xb0\x03\xf8\x10\xb0\xbeT\x00b\xc0\x1b\x81\xcfH\xeb\xad^\x88\x1b\xeb+\xa3\x90\xf8'\xe0]\xca6#q@\x1c\xb8\x0d\xb8[1\xde%3\xe3Ax\xb7\xff&`\x9eR\xf1H$\x18\x13j\xcb\xa4\xf9\xe61\xea\xeb\x85VB\x5c\xf5NYo\xd1\x00\xbcE\xdd\x99\x0b\xe5\xef1\xc6\xe7\x8a\x89\xbc_\xa2\xc8P\x14\x00s\x81;\x94\xed\x8dg\xe1}+\x98$\xa5&\x0a\x01\xd0\x0c|Zf\x7f6\x13\x1cW\xf0\xa4\x95\xdc\xa4\xf4<\xad\xf7-\xa2\x154)sm/T\x0e\xdf\xa8~\x5ck\x08 \xf3\x1e\xb1*\xe5\xfb\xe6\xa5\xb4'\xd50\x19R\xbf\xc0\xb4\x9f:)\xa6Q\xcf\x13\x1e\xe3g\xf2\x14^IU\xa5\xb3\x94\x1dZ6\x00\xa6\x02\xef\x16J\x09O\x0b\xae\x955\xa8\xe7\x0d@K\x85\xc3aZB\x1fQQ\xb3E\xad\xb2\x1d\xca\xefG\xe5\xcb\x1d*\xbb\xaf\xd4\xdf\x16\xed!\x05\xfcW24f\x89V1Y\xf7\x5cu\x94\x86\xb3\x01p\x9d\xfc\xbeN\x82\x0f)\xaf>\x08\xfc\x0bxF\x05\xc6\xe5\xca\xb3\x93\x15\x00\xc0$x\xbf\x04\xf8\xa5:={\xf4~\xb6\xf5\x90\x08\xedG\x12*!\x00z\x08\x9a\xae\xb7\x08\x88\xda\x10\x00\x0d\xb2\x80\x96l\x004\xa9\xb0\x99(\x93\xeb\x93\x16~\x06K]gd\xba\xfdRT\xbb\x5c\xc7\xb5\xbe\xd6\x8a0\xb7\xea:'\x9b?\x8a\x1b\x06\x9e\x05\x9e\x8b\xd2\x10\xb9\xa2\x02\xc4\xe7\x008N0\xb9\xe9S\x87\xe9Ri2\x9e\xa7\xb9\xd9A0pAY\xe2z\x99\xfeDE\x90\xeb\x15\xa1\x1e\x06\x96*\x8bL{]\xeb\x0e\xed=#\xed?\xea2\xc0|\xc5\x90\x9f5-\xe0\xc5\x03\xcdR\xc9\xef\xa82\xcaZ`\xb1\xb4\x98,P\xc1MTZ\xdbM0F\xbf_\xae3\x9f`\x18\xf3\x15\xfd\x7f\xab8\xaa\x09\xf8\xb3@\xbd]\xc4\x9d\x90\xf5\xed\x03~\xffb\xd5\x98\xe5z\xb4\x9b\xd9_\xcdl\xd8\xca_\xc3f\xf6\xb4>s\x9e\x99=cf'\x8b\xb8/mf\xc7\xcc\xecofv\x95\xf65\xcf\xcc\xd6\x9a\xd9n3\xeb\xd7\xe3\xa0\x99\xf5\x98\xd9R]s\x8b\x99m\xd6\xf7\xa6\xccl\x9f\x99-\xcf&g>\x17\xe8\xf0\x0a\x8dr\xcd?%\x0d\x1cQ\x92\xd3Fq\x93i\xd7\xd3\xbb\x98`\x08\xb3BI\xd12\xe5\x01=^\xad?\xa0t\xfa&\xe0S\xb2\x90\x1a1\xfeN\xe0\xe7\xb9\xfc,\xd7:\xb7\x82\xdd g\x821\xf9~.\xb7\xca\xd6spd\xd6\xa9d\xe9f\x09~@\x05Z\xa7\x94\xb4\x93`\x5cw\x83R\xe6\x06o6\xb0R\x7f#\x010\xcd+$2e4B\x9c\x05\x1c\x92\xa6fr\xfa\xe1\x07\xff\x1a\xd7s\x18\x91\xe0\x0d\x8a\x185\xdaK\xbbB\xf2\x05\x22\xbb\xa4>\x0b\xe0M^\xda^\xeb%]kD\x92D\x05\xa0C\xff\x1fV\x865\xa4\x0f\x9fTB)\xecz\x0b-\xba?\x11\xca\x0f\x06\xa4\xd1\x8d*\xc2\xf6K\xf8y\x04\x83\x98\xf3t_\x9d\x1e\xb5\x9eB\xdcj\xf1\xc8\xd3\x91n7\xf0e\xf2\x9c+J\xe6a\xe0\xa9\xd2\xc6^\xd5\xea\xeb\x14{?L\xf4s|\xee$\xc8\x84\x10xi\xc5\xf6\x7fj\xa3\x1bBM\x90Ur\xc5\xc5\xc0{\xa4\xf9\xc6\x1cV\xe8\x7f\xe6Q\xd5\x19\xcb)pr$\x99\xe7\xfd\x09\x0a[]^\x81\xb4(\xe4\x0eQ\xba\xb2m\xd2j2\x14\x1a\xd7+\xa6\xe7j\x84\x1c\x00\xbe\xa1\x04\xe6\x0bJ\xccr\x9d4I\x89h7\xaa\xcc~\xb6\x18\x96\xcd\xb6\xea\x944,\xf3\x84\xafQM\x10u2\x14\xd3\xbd\x1d\xd2^\xd2\xcb\xcc\xb6\x8b\xb1\xf7\x16\xc1#\xeePT\xb6\xb4\xdde\x9a\x07\x95l-\xc9Q\xd8\x15\x0d\xc0\xa0\x88\xc3\x9f\xa55x\x15a\xd4\xc8P#\xf3\x9d\xe2ef}*\x8avD\xe0\x91Gd5\x96E\xf3\x07\xe52K\x09\x0ee\x15\xb5\x92y\xbe\x8c,M\x91R\xc6c\xce\xff\xa7\x09\xc0\x8c\xb4\xf5\x1c\xf0\x9b\x88\x9f\xb5_\xca\xc9\x84\x9a\x1c\xc7\xc5Q\x9f\xcd\xd3H\x8dd\x01\xb9\xc0*\xf5\xa0SB,=\xdb\x0bu\xdd\xc0\x0b%\x80\x19\xfe~\x17\xeb\xbf\x1bUx8\xb3\x87\xa5\x1b\x81\xd7(\x17\x18\x02\xfe\x11q\xba\xe3\x92\xb3\xba,Q\xe4q\x82S\xa4T\x13\x007\x9a\xb2\x12\x01\xa8SJ\xdb\xe1\xf9l\xd4u\x99\xa2S\x5c\xa6\x7fB$\xbd\x92\x12\x7fc\x10\xe5\xa4\xe8\x90H\xb1\xd4\x1f3\xc4=\x17\xb2\x12\xcc\xb5E\x8d\x8ff\xdd?\xa8(rW\x91\xb3\x84\xb2-`P\x0d\x8d\x91\x12\xad \x1c\x16[#\xde\xf7Z\xe5\x00q\xc5\xfaM\x12\xfe\xc9r|3\x0a\x00i\x82\xd1\xd8@\x05\x00h\x94;\x14\xbb&\x10\x1cp\xc8\xa8\xe8y\x9c`4\xf7X\xb9\xe4\x14\xf5\xb0t\xb7\xd0\x9fZ\x06\x81\xba\xf2\xf5\xf5\xc0w\x04h\xa15]\xe0w\x8b<7\x16y_\xc5\x01\xd8\xa2\xd6\xd4\x0c/\xa1q\x8dGw\xea;^\x04\x00uj^^\x93\xafR\xf3\xd6V=*~\xb6?\xaa\x16Oh\xc3\x87\xc5\x09\xfb\xe4\x83\x8fy\xfd\xf6T\x91yA\xbb\xea\xfb\x8e\x22K\xea\xea\xfc\xb0!OK,\xd7\xe3\x1c3[\xa7\xb6\xd6\xfb\xcd\xac\xd9\xccj\xccl\x8e\x99=df/\xa8\x0dUh\xa5\xcc\xec\x80\x99\xddkf\xf5%\xec\xa3\x22\x8fR\xcf\x0a/\x06.\x02\xbe\x14J\x9bg\x00?\xe6\xd4d\xb6\x90\x85\xb9N\xd1\x0f\x80\xaf\xe9\xf5\x19]\xa5\x02\xe0:\xb0\x87r\x84\xab\xfb\xd4\xaa*\xd4RsU\xdc^\xf5\xec\xba\x88p\xd6\xfflp\x80\x9f\x14\xe5j4\xac\x07\xbe\xcf\xa9\xb9\x9e\x15 \xc4Z\xb1\xfcmj|^4\x1e,\xa0\xd0\xaa'8Kp#\x85\xfb\xff~O\xf0\xa8\x9a\x18\x0f\xa8R\xec\x1f\xaf\x00@0\x99\xf9&\xc1X}\x92\x97L\xc5Ci\xb1\xdf\xce\xcax\xd6\xb5\x8d\xe0\xc7PO\x88'\x86\xc7\x1b\x00\xa8\x07\xd0%R\x1c!8\x17\xd0\xce\xa9\xe1\xa6;\xcd\x95\x08\xd5\x09i\x01\xd1\xaf\xa2i\x17A+|\x9b\xfa\x08{UJ\xa7\xc7:\x00\x10\xfcz\xecV\x82\xf3\x00\x9b\xd5P\xed$8o4\x9b`\x02<\x85\xd3\x7fv\xe3\x12\xac\x13\x02`\xb7\xee\xdd\xa4T\xb8\x8f\x0a\xfd\xc2\xdf\x807\x93\x0f\xf5\x1e\x9b<\x8bp\x07\x1f\xddA\xc9\x13\xaa@\x07\xaa\x15\x22\xff7\x00\x00\xce|\xf6T\x0e\xbbG\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00F~\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x0aOiCCPPhotoshop ICC profile\x00\x00x\xda\x9dSgTS\xe9\x16=\xf7\xde\xf4BK\x88\x80\x94KoR\x15\x08 RB\x8b\x80\x14\x91&*!\x09\x10J\x88!\xa1\xd9\x15Q\xc1\x11EE\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15Q,\x0c\x8a\x0a\xd8\x07\xe4!\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1{\xa3k\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7>\xe7\xac\xf3\x9d\xb3\xcf\x07\xc0\x08\x0c\x96H3Q5\x80\x0c\xa9B\x1e\x11\xe0\x83\xc7\xc4\xc6\xe1\xe4.@\x81\x0a$p\x00\x10\x08\xb3d!s\xfd#\x01\x00\xf8~<<+\x22\xc0\x07\xbe\x00\x01x\xd3\x0b\x08\x00\xc0M\x9b\xc00\x1c\x87\xff\x0f\xeaB\x99\x5c\x01\x80\x84\x01\xc0t\x918K\x08\x80\x14\x00@z\x8eB\xa6\x00@F\x01\x80\x9d\x98&S\x00\xa0\x04\x00`\xcbcb\xe3\x00P-\x00`'\x7f\xe6\xd3\x00\x80\x9d\xf8\x99{\x01\x00[\x94!\x15\x01\xa0\x91\x00 \x13e\x88D\x00h;\x00\xac\xcfV\x8aE\x00X0\x00\x14fK\xc49\x00\xd8-\x000IWfH\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x000Q\x88\x85)\x00\x04{\x00`\xc8##x\x00\x84\x99\x00\x14F\xf2W<\xf1+\xae\x10\xe7*\x00\x00x\x99\xb2<\xb9$9E\x81[\x08-q\x07WW.\x1e(\xceI\x17+\x146a\x02a\x9a@.\xc2y\x99\x192\x814\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\xf3\xfdx\xce\x0e\xae\xce\xce6\x8e\xb6\x0e_-\xea\xbf\x06\xff\x22bb\xe3\xfe\xe5\xcf\xabp@\x00\x00\xe1t~\xd1\xfe,/\xb3\x1a\x80;\x06\x80m\xfe\xa2%\xee\x04h^\x0b\xa0u\xf7\x8bf\xb2\x0f@\xb5\x00\xa0\xe9\xdaW\xf3p\xf8~<\xdf5\x00\xb0j>\x01{\x91-\xa8]c\x03\xf6K'\x10Xt\xc0\xe2\xf7\x00\x00\xf2\xbbo\xc1\xd4(\x08\x03\x80h\x83\xe1\xcfw\xff\xef?\xfdG\xa0%\x00\x80fI\x92q\x00\x00^D$.T\xca\xb3?\xc7\x08\x00\x00D\xa0\x81*\xb0A\x1b\xf4\xc1\x18,\xc0\x06\x1c\xc1\x05\xdc\xc1\x0b\xfc`6\x84B$\xc4\xc2B\x10B\x0ad\x80\x1cr`)\xac\x82B(\x86\xcd\xb0\x1d*`/\xd4@\x1d4\xc0Qh\x86\x93p\x0e.\xc2U\xb8\x0e=p\x0f\xfaa\x08\x9e\xc1(\xbc\x81\x09\x04A\xc8\x08\x13a!\xda\x88\x01b\x8aX#\x8e\x08\x17\x99\x85\xf8!\xc1H\x04\x12\x8b$ \xc9\x88\x14Q\x22K\x915H1R\x8aT UH\x1d\xf2=r\x029\x87\x5cF\xba\x91;\xc8\x002\x82\xfc\x86\xbcG1\x94\x81\xb2Q=\xd4\x0c\xb5C\xb9\xa87\x1a\x84F\xa2\x0b\xd0dt1\x9a\x8f\x16\xa0\x9b\xd0r\xb4\x1a=\x8c6\xa1\xe7\xd0\xabh\x0f\xda\x8f>C\xc70\xc0\xe8\x18\x073\xc4l0.\xc6\xc3B\xb18,\x09\x93c\xcb\xb1\x22\xac\x0c\xab\xc6\x1a\xb0V\xac\x03\xbb\x89\xf5c\xcf\xb1w\x04\x12\x81E\xc0\x096\x04wB a\x1eAHXLXN\xd8H\xa8 \x1c$4\x11\xda\x097\x09\x03\x84Q\xc2'\x22\x93\xa8K\xb4&\xba\x11\xf9\xc4\x18b21\x87XH,#\xd6\x12\x8f\x13/\x10{\x88C\xc47$\x12\x89C2'\xb9\x90\x02I\xb1\xa4T\xd2\x12\xd2F\xd2nR#\xe9,\xa9\x9b4H\x1a#\x93\xc9\xdadk\xb2\x079\x94, +\xc8\x85\xe4\x9d\xe4\xc3\xe43\xe4\x1b\xe4!\xf2[\x0a\x9db@q\xa4\xf8S\xe2(R\xcajJ\x19\xe5\x10\xe54\xe5\x06e\x982AU\xa3\x9aR\xdd\xa8\xa1T\x115\x8fZB\xad\xa1\xb6R\xafQ\x87\xa8\x134u\x9a9\xcd\x83\x16IK\xa5\xad\xa2\x95\xd3\x1ah\x17h\xf7i\xaf\xe8t\xba\x11\xdd\x95\x1eN\x97\xd0W\xd2\xcb\xe9G\xe8\x97\xe8\x03\xf4w\x0c\x0d\x86\x15\x83\xc7\x88g(\x19\x9b\x18\x07\x18g\x19w\x18\xaf\x98L\xa6\x19\xd3\x8b\x19\xc7T071\xeb\x98\xe7\x99\x0f\x99oUX*\xb6*|\x15\x91\xca\x0a\x95J\x95&\x95\x1b*/T\xa9\xaa\xa6\xaa\xde\xaa\x0bU\xf3U\xcbT\x8f\xa9^S}\xaeFU3S\xe3\xa9\x09\xd4\x96\xabU\xaa\x9dP\xebS\x1bSg\xa9;\xa8\x87\xaag\xa8oT?\xa4~Y\xfd\x89\x06Y\xc3L\xc3OC\xa4Q\xa0\xb1_\xe3\xbc\xc6 \x0bc\x19\xb3x,!k\x0d\xab\x86u\x815\xc4&\xb1\xcd\xd9|v*\xbb\x98\xfd\x1d\xbb\x8b=\xaa\xa9\xa19C3J3W\xb3R\xf3\x94f?\x07\xe3\x98q\xf8\x9ctN\x09\xe7(\xa7\x97\xf3~\x8a\xde\x14\xef)\xe2)\x1b\xa64L\xb91e\x5ck\xaa\x96\x97\x96X\xabH\xabQ\xabG\xeb\xbd6\xae\xed\xa7\x9d\xa6\xbdE\xbbY\xfb\x81\x0eA\xc7J'\x5c'Gg\x8f\xce\x05\x9d\xe7S\xd9S\xdd\xa7\x0a\xa7\x16M=:\xf5\xae.\xaak\xa5\x1b\xa1\xbbDw\xbfn\xa7\xee\x98\x9e\xbe^\x80\x9eLo\xa7\xdey\xbd\xe7\xfa\x1c}/\xfdT\xfdm\xfa\xa7\xf5G\x0cX\x06\xb3\x0c$\x06\xdb\x0c\xce\x18<\xc55qo<\x1d/\xc7\xdb\xf1QC]\xc3@C\xa5a\x95a\x97\xe1\x84\x91\xb9\xd1<\xa3\xd5F\x8dF\x0f\x8ci\xc6\x5c\xe3$\xe3m\xc6m\xc6\xa3&\x06&!&KM\xeaM\xee\x9aRM\xb9\xa6)\xa6;L;L\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x995\x9b=1\xd72\xe7\x9b\xe7\x9b\xd7\x9b\xdf\xb7`ZxZ,\xb6\xa8\xb6\xb8eI\xb2\xe4Z\xa6Y\xee\xb6\xbcn\x85Z9Y\xa5XUZ]\xb3F\xad\x9d\xad%\xd6\xbb\xad\xbb\xa7\x11\xa7\xb9N\x93N\xab\x9e\xd6g\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\x19\xb0\xe5\xd8\x06\xdb\xae\xb6m\xb6}agb\x17g\xb7\xc5\xae\xc3\xee\x93\xbd\x93}\xba}\x8d\xfd=\x07\x0d\x87\xd9\x0e\xab\x1dZ\x1d~s\xb4r\x14:V:\xde\x9a\xce\x9c\xee?}\xc5\xf4\x96\xe9/gX\xcf\x10\xcf\xd83\xe3\xb6\x13\xcb)\xc4i\x9dS\x9b\xd3Gg\x17g\xb9s\x83\xf3\x88\x8b\x89K\x82\xcb.\x97>.\x9b\x1b\xc6\xdd\xc8\xbd\xe4Jt\xf5q]\xe1z\xd2\xf5\x9d\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee6\xeei\xee\x87\xdc\x9f\xcc4\x9f)\x9eY3s\xd0\xc3\xc8C\xe0Q\xe5\xd1?\x0b\x9f\x950k\xdf\xac~OCO\x81g\xb5\xe7#/c/\x91W\xad\xd7\xb0\xb7\xa5w\xaa\xf7a\xef\x17>\xf6>r\x9f\xe3>\xe3<7\xde2\xdeY_\xcc7\xc0\xb7\xc8\xb7\xcbO\xc3o\x9e_\x85\xdfC\x7f#\xffd\xffz\xff\xd1\x00\xa7\x80%\x01g\x03\x89\x81A\x81[\x02\xfb\xf8z|!\xbf\x8e?:\xdbe\xf6\xb2\xd9\xedA\x8c\xa0\xb9A\x15A\x8f\x82\xad\x82\xe5\xc1\xad!h\xc8\xec\x90\xad!\xf7\xe7\x98\xce\x91\xcei\x0e\x85P~\xe8\xd6\xd0\x07a\xe6a\x8b\xc3~\x0c'\x85\x87\x85W\x86?\x8ep\x88X\x1a\xd11\x975w\xd1\xdcCs\xdfD\xfaD\x96D\xde\x9bg1O9\xaf-J5*>\xaa.j<\xda7\xba4\xba?\xc6.fY\xcc\xd5X\x9dXIlK\x1c9.*\xae6nl\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3{\x17\x98/\xc8]py\xa1\xce\xc2\xf4\x85\xa7\x16\xa9.\x12,:\x96@L\x88N8\x94\xf0A\x10*\xa8\x16\x8c%\xf2\x13w%\x8e\x0ay\xc2\x1d\xc2g\x22/\xd16\xd1\x88\xd8C\x5c*\x1eN\xf2H*Mz\x92\xec\x91\xbc5y$\xc53\xa5,\xe5\xb9\x84'\xa9\x90\xbcL\x0dL\xdd\x9b:\x9e\x16\x9av m2=:\xbd1\x83\x92\x91\x90qB\xaa!M\x93\xb6g\xeag\xe6fv\xcb\xace\x85\xb2\xfe\xc5n\x8b\xb7/\x1e\x95\x07\xc9k\xb3\x90\xac\x05Y-\x0a\xb6B\xa6\xe8TZ(\xd7*\x07\xb2geWf\xbf\xcd\x89\xca9\x96\xab\x9e+\xcd\xed\xcc\xb3\xca\xdb\x907\x9c\xef\x9f\xff\xed\x12\xc2\x12\xe1\x92\xb6\xa5\x86KW-\x1dX\xe6\xbd\xacj9\xb2\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8(\xdcx\xe5\x1b\x87o\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9d\xcff\xd2f\xe9\xe6\xde-\x9e[\x0e\x96\xaa\x97\xe6\x97\x0en\x0d\xd9\xda\xb4\x0d\xdfV\xb4\xed\xf5\xf6E\xdb/\x97\xcd(\xdb\xbb\x83\xb6C\xb9\xa3\xbf<\xb8\xbce\xa7\xc9\xce\xcd;?T\xa4T\xf4T\xfaT6\xee\xd2\xdd\xb5a\xd7\xf8n\xd1\xee\x1b{\xbc\xf64\xec\xd5\xdb[\xbc\xf7\xfd>\xc9\xbe\xdbU\x01UM\xd5f\xd5e\xfbI\xfb\xb3\xf7?\xae\x89\xaa\xe9\xf8\x96\xfbm]\xadNmq\xed\xc7\x03\xd2\x03\xfd\x07#\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2=TR\x8f\xd6+\xebG\x0e\xc7\x1f\xbe\xfe\x9d\xefw-\x0d6\x0dU\x8d\x9c\xc6\xe2#pDy\xe4\xe9\xf7\x09\xdf\xf7\x1e\x0d:\xdav\x8c{\xac\xe1\x07\xd3\x1fv\x1dg\x1d/jB\x9a\xf2\x9aF\x9bS\x9a\xfb[b[\xbaO\xcc>\xd1\xd6\xea\xdez\xfcG\xdb\x1f\x0f\x9c499\xe2?r\xfd\xe9\xfc\xa7C\xcfd\xcf&\x9e\x17\xfe\xa2\xfe\xcb\xae\x17\x16/~\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\x93\xbfm|\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\xbe\xc9x31^\xf4V\xfb\xed\xc1w\xdcw\x1d\xef\xa3\xdf\x0fO\xe4| \x7f(\xffh\xf9\xb1\xf5S\xd0\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfcc3-\xdb\x00\x00:\xd8iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a xmp.iid:912a076e-06c9-9c41-964c-4ac3b1eac27c\x0a xmp.did:f1a83438-1190-f446-b9f2-efc89d7bbf8b\x0a xmp.did:f1a83438-1190-f446-b9f2-efc89d7bbf8b\x0a \x0a \x0a \x0a created\x0a xmp.iid:f1a83438-1190-f446-b9f2-efc89d7bbf8b\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:912a076e-06c9-9c41-964c-4ac3b1eac27c\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a \x0a \x0a xmp.did:CED979F2760511E1954F918C86BB5E3E\x0a \x0a \x0a 3\x0a sRGB IEC61966-2.1\x0a image/png\x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 1\x0a 16\x0a 16\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0ack\x1e\x85\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xc5IDATx\xda\xd4\xd21N\x02A\x14\x87\xf1\x1f\x04n@\x81\x09\x89\x85\x9dp\x8b\xbd\x00\x17\x90Heb\xb5Qi\xecl,\x08\xe8\x15\x00\xb9\xc6VTT6\x96\x1e\xc0\x82\x18k\x0b\x87f61\xeb\x125[\x10\xfe\xd5\xcb{\xc97\xdf\x9b\x99Z\x08A\x95\xd4ULe@#/\xb2,+\x9b\xf7\xf1\x8a\x97\xe2 I\x92_\x0d\xcep\x87\x09\xba\xff]a\x88\x1b|\xe2\x08c\x9c\xfe\x150@\x8a\x0d\xae0G\x07\x0fe&\xf5B}\x81k|\xe0\x16+\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-11-30T20:27:55+04:00\x0a 2013-11-30T20:48:10+04:00\x0a 2013-11-30T20:48:10+04:00\x0a image/png\x0a 3\x0a xmp.iid:7bc40d1b-ffcd-7d44-a96d-87bb4278e245\x0a xmp.did:7bc40d1b-ffcd-7d44-a96d-87bb4278e245\x0a xmp.did:7bc40d1b-ffcd-7d44-a96d-87bb4278e245\x0a \x0a \x0a \x0a created\x0a xmp.iid:7bc40d1b-ffcd-7d44-a96d-87bb4278e245\x0a 2013-11-30T20:27:55+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a \x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 65535\x0a 81\x0a 58\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0aj\xf7\xedW\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\x83IDATx\xda\xec\xd0\xb1\x0d\x00 \x0c\x04\xb1\xecD\xc7$?\x0c\xbb\x87\x96\x11\x22\xe4\xe2\xfa\x93\xab\xbbkbIv\x92\xf3\xb4\xa6\xbe\x16D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\xf1/\xc4\x0b\x00\x00\xff\xff\x03\x00^\x88\x0f~\xc4\xb7\xc6o\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00Fx\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x0aOiCCPPhotoshop ICC profile\x00\x00x\xda\x9dSgTS\xe9\x16=\xf7\xde\xf4BK\x88\x80\x94KoR\x15\x08 RB\x8b\x80\x14\x91&*!\x09\x10J\x88!\xa1\xd9\x15Q\xc1\x11EE\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15Q,\x0c\x8a\x0a\xd8\x07\xe4!\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1{\xa3k\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7>\xe7\xac\xf3\x9d\xb3\xcf\x07\xc0\x08\x0c\x96H3Q5\x80\x0c\xa9B\x1e\x11\xe0\x83\xc7\xc4\xc6\xe1\xe4.@\x81\x0a$p\x00\x10\x08\xb3d!s\xfd#\x01\x00\xf8~<<+\x22\xc0\x07\xbe\x00\x01x\xd3\x0b\x08\x00\xc0M\x9b\xc00\x1c\x87\xff\x0f\xeaB\x99\x5c\x01\x80\x84\x01\xc0t\x918K\x08\x80\x14\x00@z\x8eB\xa6\x00@F\x01\x80\x9d\x98&S\x00\xa0\x04\x00`\xcbcb\xe3\x00P-\x00`'\x7f\xe6\xd3\x00\x80\x9d\xf8\x99{\x01\x00[\x94!\x15\x01\xa0\x91\x00 \x13e\x88D\x00h;\x00\xac\xcfV\x8aE\x00X0\x00\x14fK\xc49\x00\xd8-\x000IWfH\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x000Q\x88\x85)\x00\x04{\x00`\xc8##x\x00\x84\x99\x00\x14F\xf2W<\xf1+\xae\x10\xe7*\x00\x00x\x99\xb2<\xb9$9E\x81[\x08-q\x07WW.\x1e(\xceI\x17+\x146a\x02a\x9a@.\xc2y\x99\x192\x814\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\xf3\xfdx\xce\x0e\xae\xce\xce6\x8e\xb6\x0e_-\xea\xbf\x06\xff\x22bb\xe3\xfe\xe5\xcf\xabp@\x00\x00\xe1t~\xd1\xfe,/\xb3\x1a\x80;\x06\x80m\xfe\xa2%\xee\x04h^\x0b\xa0u\xf7\x8bf\xb2\x0f@\xb5\x00\xa0\xe9\xdaW\xf3p\xf8~<\xdf5\x00\xb0j>\x01{\x91-\xa8]c\x03\xf6K'\x10Xt\xc0\xe2\xf7\x00\x00\xf2\xbbo\xc1\xd4(\x08\x03\x80h\x83\xe1\xcfw\xff\xef?\xfdG\xa0%\x00\x80fI\x92q\x00\x00^D$.T\xca\xb3?\xc7\x08\x00\x00D\xa0\x81*\xb0A\x1b\xf4\xc1\x18,\xc0\x06\x1c\xc1\x05\xdc\xc1\x0b\xfc`6\x84B$\xc4\xc2B\x10B\x0ad\x80\x1cr`)\xac\x82B(\x86\xcd\xb0\x1d*`/\xd4@\x1d4\xc0Qh\x86\x93p\x0e.\xc2U\xb8\x0e=p\x0f\xfaa\x08\x9e\xc1(\xbc\x81\x09\x04A\xc8\x08\x13a!\xda\x88\x01b\x8aX#\x8e\x08\x17\x99\x85\xf8!\xc1H\x04\x12\x8b$ \xc9\x88\x14Q\x22K\x915H1R\x8aT UH\x1d\xf2=r\x029\x87\x5cF\xba\x91;\xc8\x002\x82\xfc\x86\xbcG1\x94\x81\xb2Q=\xd4\x0c\xb5C\xb9\xa87\x1a\x84F\xa2\x0b\xd0dt1\x9a\x8f\x16\xa0\x9b\xd0r\xb4\x1a=\x8c6\xa1\xe7\xd0\xabh\x0f\xda\x8f>C\xc70\xc0\xe8\x18\x073\xc4l0.\xc6\xc3B\xb18,\x09\x93c\xcb\xb1\x22\xac\x0c\xab\xc6\x1a\xb0V\xac\x03\xbb\x89\xf5c\xcf\xb1w\x04\x12\x81E\xc0\x096\x04wB a\x1eAHXLXN\xd8H\xa8 \x1c$4\x11\xda\x097\x09\x03\x84Q\xc2'\x22\x93\xa8K\xb4&\xba\x11\xf9\xc4\x18b21\x87XH,#\xd6\x12\x8f\x13/\x10{\x88C\xc47$\x12\x89C2'\xb9\x90\x02I\xb1\xa4T\xd2\x12\xd2F\xd2nR#\xe9,\xa9\x9b4H\x1a#\x93\xc9\xdadk\xb2\x079\x94, +\xc8\x85\xe4\x9d\xe4\xc3\xe43\xe4\x1b\xe4!\xf2[\x0a\x9db@q\xa4\xf8S\xe2(R\xcajJ\x19\xe5\x10\xe54\xe5\x06e\x982AU\xa3\x9aR\xdd\xa8\xa1T\x115\x8fZB\xad\xa1\xb6R\xafQ\x87\xa8\x134u\x9a9\xcd\x83\x16IK\xa5\xad\xa2\x95\xd3\x1ah\x17h\xf7i\xaf\xe8t\xba\x11\xdd\x95\x1eN\x97\xd0W\xd2\xcb\xe9G\xe8\x97\xe8\x03\xf4w\x0c\x0d\x86\x15\x83\xc7\x88g(\x19\x9b\x18\x07\x18g\x19w\x18\xaf\x98L\xa6\x19\xd3\x8b\x19\xc7T071\xeb\x98\xe7\x99\x0f\x99oUX*\xb6*|\x15\x91\xca\x0a\x95J\x95&\x95\x1b*/T\xa9\xaa\xa6\xaa\xde\xaa\x0bU\xf3U\xcbT\x8f\xa9^S}\xaeFU3S\xe3\xa9\x09\xd4\x96\xabU\xaa\x9dP\xebS\x1bSg\xa9;\xa8\x87\xaag\xa8oT?\xa4~Y\xfd\x89\x06Y\xc3L\xc3OC\xa4Q\xa0\xb1_\xe3\xbc\xc6 \x0bc\x19\xb3x,!k\x0d\xab\x86u\x815\xc4&\xb1\xcd\xd9|v*\xbb\x98\xfd\x1d\xbb\x8b=\xaa\xa9\xa19C3J3W\xb3R\xf3\x94f?\x07\xe3\x98q\xf8\x9ctN\x09\xe7(\xa7\x97\xf3~\x8a\xde\x14\xef)\xe2)\x1b\xa64L\xb91e\x5ck\xaa\x96\x97\x96X\xabH\xabQ\xabG\xeb\xbd6\xae\xed\xa7\x9d\xa6\xbdE\xbbY\xfb\x81\x0eA\xc7J'\x5c'Gg\x8f\xce\x05\x9d\xe7S\xd9S\xdd\xa7\x0a\xa7\x16M=:\xf5\xae.\xaak\xa5\x1b\xa1\xbbDw\xbfn\xa7\xee\x98\x9e\xbe^\x80\x9eLo\xa7\xdey\xbd\xe7\xfa\x1c}/\xfdT\xfdm\xfa\xa7\xf5G\x0cX\x06\xb3\x0c$\x06\xdb\x0c\xce\x18<\xc55qo<\x1d/\xc7\xdb\xf1QC]\xc3@C\xa5a\x95a\x97\xe1\x84\x91\xb9\xd1<\xa3\xd5F\x8dF\x0f\x8ci\xc6\x5c\xe3$\xe3m\xc6m\xc6\xa3&\x06&!&KM\xeaM\xee\x9aRM\xb9\xa6)\xa6;L;L\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x995\x9b=1\xd72\xe7\x9b\xe7\x9b\xd7\x9b\xdf\xb7`ZxZ,\xb6\xa8\xb6\xb8eI\xb2\xe4Z\xa6Y\xee\xb6\xbcn\x85Z9Y\xa5XUZ]\xb3F\xad\x9d\xad%\xd6\xbb\xad\xbb\xa7\x11\xa7\xb9N\x93N\xab\x9e\xd6g\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\x19\xb0\xe5\xd8\x06\xdb\xae\xb6m\xb6}agb\x17g\xb7\xc5\xae\xc3\xee\x93\xbd\x93}\xba}\x8d\xfd=\x07\x0d\x87\xd9\x0e\xab\x1dZ\x1d~s\xb4r\x14:V:\xde\x9a\xce\x9c\xee?}\xc5\xf4\x96\xe9/gX\xcf\x10\xcf\xd83\xe3\xb6\x13\xcb)\xc4i\x9dS\x9b\xd3Gg\x17g\xb9s\x83\xf3\x88\x8b\x89K\x82\xcb.\x97>.\x9b\x1b\xc6\xdd\xc8\xbd\xe4Jt\xf5q]\xe1z\xd2\xf5\x9d\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee6\xeei\xee\x87\xdc\x9f\xcc4\x9f)\x9eY3s\xd0\xc3\xc8C\xe0Q\xe5\xd1?\x0b\x9f\x950k\xdf\xac~OCO\x81g\xb5\xe7#/c/\x91W\xad\xd7\xb0\xb7\xa5w\xaa\xf7a\xef\x17>\xf6>r\x9f\xe3>\xe3<7\xde2\xdeY_\xcc7\xc0\xb7\xc8\xb7\xcbO\xc3o\x9e_\x85\xdfC\x7f#\xffd\xffz\xff\xd1\x00\xa7\x80%\x01g\x03\x89\x81A\x81[\x02\xfb\xf8z|!\xbf\x8e?:\xdbe\xf6\xb2\xd9\xedA\x8c\xa0\xb9A\x15A\x8f\x82\xad\x82\xe5\xc1\xad!h\xc8\xec\x90\xad!\xf7\xe7\x98\xce\x91\xcei\x0e\x85P~\xe8\xd6\xd0\x07a\xe6a\x8b\xc3~\x0c'\x85\x87\x85W\x86?\x8ep\x88X\x1a\xd11\x975w\xd1\xdcCs\xdfD\xfaD\x96D\xde\x9bg1O9\xaf-J5*>\xaa.j<\xda7\xba4\xba?\xc6.fY\xcc\xd5X\x9dXIlK\x1c9.*\xae6nl\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3{\x17\x98/\xc8]py\xa1\xce\xc2\xf4\x85\xa7\x16\xa9.\x12,:\x96@L\x88N8\x94\xf0A\x10*\xa8\x16\x8c%\xf2\x13w%\x8e\x0ay\xc2\x1d\xc2g\x22/\xd16\xd1\x88\xd8C\x5c*\x1eN\xf2H*Mz\x92\xec\x91\xbc5y$\xc53\xa5,\xe5\xb9\x84'\xa9\x90\xbcL\x0dL\xdd\x9b:\x9e\x16\x9av m2=:\xbd1\x83\x92\x91\x90qB\xaa!M\x93\xb6g\xeag\xe6fv\xcb\xace\x85\xb2\xfe\xc5n\x8b\xb7/\x1e\x95\x07\xc9k\xb3\x90\xac\x05Y-\x0a\xb6B\xa6\xe8TZ(\xd7*\x07\xb2geWf\xbf\xcd\x89\xca9\x96\xab\x9e+\xcd\xed\xcc\xb3\xca\xdb\x907\x9c\xef\x9f\xff\xed\x12\xc2\x12\xe1\x92\xb6\xa5\x86KW-\x1dX\xe6\xbd\xacj9\xb2\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8(\xdcx\xe5\x1b\x87o\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9d\xcff\xd2f\xe9\xe6\xde-\x9e[\x0e\x96\xaa\x97\xe6\x97\x0en\x0d\xd9\xda\xb4\x0d\xdfV\xb4\xed\xf5\xf6E\xdb/\x97\xcd(\xdb\xbb\x83\xb6C\xb9\xa3\xbf<\xb8\xbce\xa7\xc9\xce\xcd;?T\xa4T\xf4T\xfaT6\xee\xd2\xdd\xb5a\xd7\xf8n\xd1\xee\x1b{\xbc\xf64\xec\xd5\xdb[\xbc\xf7\xfd>\xc9\xbe\xdbU\x01UM\xd5f\xd5e\xfbI\xfb\xb3\xf7?\xae\x89\xaa\xe9\xf8\x96\xfbm]\xadNmq\xed\xc7\x03\xd2\x03\xfd\x07#\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2=TR\x8f\xd6+\xebG\x0e\xc7\x1f\xbe\xfe\x9d\xefw-\x0d6\x0dU\x8d\x9c\xc6\xe2#pDy\xe4\xe9\xf7\x09\xdf\xf7\x1e\x0d:\xdav\x8c{\xac\xe1\x07\xd3\x1fv\x1dg\x1d/jB\x9a\xf2\x9aF\x9bS\x9a\xfb[b[\xbaO\xcc>\xd1\xd6\xea\xdez\xfcG\xdb\x1f\x0f\x9c499\xe2?r\xfd\xe9\xfc\xa7C\xcfd\xcf&\x9e\x17\xfe\xa2\xfe\xcb\xae\x17\x16/~\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\x93\xbfm|\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\xbe\xc9x31^\xf4V\xfb\xed\xc1w\xdcw\x1d\xef\xa3\xdf\x0fO\xe4| \x7f(\xffh\xf9\xb1\xf5S\xd0\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfcc3-\xdb\x00\x00:\xd8iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a xmp.iid:24a905d7-3fe1-ca4d-a9c1-1ab2125c0f5e\x0a xmp.did:628324e0-7850-614a-be1a-f035b8641035\x0a xmp.did:628324e0-7850-614a-be1a-f035b8641035\x0a \x0a \x0a \x0a created\x0a xmp.iid:628324e0-7850-614a-be1a-f035b8641035\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:24a905d7-3fe1-ca4d-a9c1-1ab2125c0f5e\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a \x0a \x0a xmp.did:CED979F2760511E1954F918C86BB5E3E\x0a \x0a \x0a 3\x0a sRGB IEC61966-2.1\x0a image/png\x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 1\x0a 16\x0a 16\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0aV\xfc\xea\xb3\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xbfIDATx\xda\xc4\xd3;n\x02A\x10\x04\xd0\x87\x85\x88\x91\xb5\x01D\x04\x10\x81\x13H|\x80\xbd\x18\x99%\xf3\xb1I\x1c@`\xf19\x80/\xb0'\xe0*\x9c\x00K\xac\x93\x0e\x90\x8d\x04\xb3\x04\xaed4RWOuWM\xad,K\xf7\xe0\xc1\x9d\xa8\x9f_\x8a\xa2\xb8T\xd3A\x0b\xfb<\xcfO\xa9\x0a\x9e\xb0\xc4\x07\x1eSG\x18`\x1a\xaf\xefpHi\xd0\xc7\x0cml\xb0HY\xe2\x00\x93 \xef0\xc7\xe9\xa6%\xc6\xcc\xd3 \xaf\xf1\x862\xc5\xc6^\x90\x8f\xd8_#_j\xf0\x15\x0a\x1a\x18\xe3\xb9J\x90\xb6xG\x86W\x0c\xab$\xf13\x5ch\x86\xa2Q\x95(o\x22@\x19^\xa2\xd9U\x17~c\x85ot\xe3\xfc\x83\xda\xbf\xff\xc6\x9f\x01\x00$\x1b${\x89\x22c7\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00;\x00\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x0c\x00\x00\x00\x0c\x08\x06\x00\x00\x00Vu\x5c\xe7\x00\x00\x00\x09pHYs\x00\x00\x01#\x00\x00\x01#\x01rAw\xde\x00\x009\xcdiTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-11-30T20:27:38+04:00\x0a 2013-11-30T20:49:08+04:00\x0a 2013-11-30T20:49:08+04:00\x0a image/png\x0a 3\x0a xmp.iid:c789d111-ecc1-2943-8c52-95c61b03f3a8\x0a xmp.did:2acebcb2-7aac-0943-938e-d33e2def2b2b\x0a xmp.did:2acebcb2-7aac-0943-938e-d33e2def2b2b\x0a \x0a \x0a \x0a created\x0a xmp.iid:2acebcb2-7aac-0943-938e-d33e2def2b2b\x0a 2013-11-30T20:27:38+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:c789d111-ecc1-2943-8c52-95c61b03f3a8\x0a 2013-11-30T20:49:08+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a 1\x0a 73914/10000\x0a 73914/10000\x0a 2\x0a 65535\x0a 12\x0a 12\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x97\xd8kP\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xadIDATx\xda\x94\xd1\xd1JBA\x14\x85\xe1}\xc2\xc4\x9e@\x83\xbcPA\xbc1\xa1|\x82\xc2\xf2\xa8W*Y\xef\xff _7{`\x10N\xd8\xc5\x82a\xd6\xfa\xf70k\x07\xa2\xd2\x14\x1b\x1cS\x1f\x98\xd5\x99r\xe8\xe1\x0d_Xc\x9cz\xc59\x87\xf4k\xe0\x1d\x07<\x5c\xbd\x18\x18\xa0\xc5'\x9a\xc0\x04?iD\x87\xeeq\xc1<\x92\x5c\xff\x11.z\xc6.p\xc2\xd3\x0d\xc0\x08\xa7\xff\x00\xc3\x02l\xf1r\x03\xb0\xc4>\xb2\xe7\xefR[\x87zY\xf9\x22\xd0\xe4\x82\xda\x0e\xa8\x9f\xfe\x0ew\xd7\x97g\xac\xf0\x98\x9f\x5c\xe6\xc6\xdbR{=\xa9\xc1<\xcdc\x15\x5c\xa4\x17\x88\xdf\x01\x00\xdb\x9d\xbd\x04\x1e\x00\xecQ\x00\x00\x00\x00IEND\xaeB`\x82\x00\x009=\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00Q\x00\x00\x00:\x08\x06\x00\x00\x00\xc8\xbc\xb5\xaf\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x008\x1aiTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-11-30T20:27:47+04:00\x0a 2013-11-30T20:48:05+04:00\x0a 2013-11-30T20:48:05+04:00\x0a image/png\x0a 3\x0a xmp.iid:19b03b56-2069-2c45-9900-1dd879bc06b6\x0a xmp.did:19b03b56-2069-2c45-9900-1dd879bc06b6\x0a xmp.did:19b03b56-2069-2c45-9900-1dd879bc06b6\x0a \x0a \x0a \x0a created\x0a xmp.iid:19b03b56-2069-2c45-9900-1dd879bc06b6\x0a 2013-11-30T20:27:47+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a \x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 65535\x0a 81\x0a 58\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x8aD\x09\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\x9dIDATx\xda\xec\xd0\xa1\x11\x84@\x14D\xc1\xcd\x820\x108\xcc\xa51Ta\xc9\x01A\xee\x8b\xa5\xd0\x88\x0f\xd7\xe2\x89qS\xddz\xef\xadbI\xe6$\xc7\xa5\xa9\xea\xd7\x06\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!\xfe\x09\xe2/\xc9P\xb17!\xee\xb7]&\x88\x1fG\x1c\x93l\x97\xd6$K\xc5\xca\x22\xbe)\x08\x10!B\x14D\x88\x10!\x0a\x22D\x88\x10\x05\x11\x22D\x88\x82\x08\x11\x22DA\x84\x08\x11\xa2 B\x84(\x88\xcft\x02\x00\x00\xff\xff\x03\x00\x8a\x81\x01-;\x8b=H\x00\x00\x00\x00IEND\xaeB`\x82" qt_resource_name = "\x00\x0e\x06\x0c\xe6\x07\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00o\x00w\x00n\x00.\x00p\x00n\x00g\x00\x08\x06\x88Y\xc7\x00m\x00o\x00r\x00e\x00.\x00p\x00n\x00g\x00\x0f\x0f,$\xc7\x00a\x00r\x00r\x00o\x00w\x00_\x00r\x00i\x00g\x00h\x00t\x00.\x00p\x00n\x00g\x00\x0a\x09\xba\x11\x87\x00c\x00l\x00o\x00s\x00e\x00d\x00.\x00p\x00n\x00g\x00\x0b\x08g\xfa'\x00p\x00w\x00_\x00t\x00r\x00a\x00y\x00.\x00p\x00n\x00g\x00\x0c\x0b\xd0z\xe7\x00a\x00r\x00r\x00o\x00w\x00_\x00u\x00p\x00.\x00p\x00n\x00g\x00\x09\x00H\xad'\x00v\x00l\x00i\x00n\x00e\x00.\x00p\x00n\x00g\x00\x0e\x08\xfa\xe1'\x00a\x00r\x00r\x00o\x00w\x00_\x00l\x00e\x00f\x00t\x00.\x00p\x00n\x00g\x00\x08\x06\xc1Y\x87\x00o\x00p\x00e\x00n\x00.\x00p\x00n\x00g\x00\x07\x0cGW\x87\x00e\x00n\x00d\x00.\x00p\x00n\x00g" diff --git a/pw_multiScriptEditor/managers/_3dsmax.py b/pw_multiScriptEditor/managers/_3dsmax.py index 0af2b2d..f676b9f 100644 --- a/pw_multiScriptEditor/managers/_3dsmax.py +++ b/pw_multiScriptEditor/managers/_3dsmax.py @@ -1,12 +1,12 @@ import os, sys, re -from PySide import QtGui -from PySide import QtCore +from Qt import QtCore, QtWidgets from pw_multiScriptEditor import scriptEditor + reload(scriptEditor) import MaxPlus -q3dsmax = QtGui.QApplication.instance() +q3dsmax = QtWidgets.QApplication.instance() class MaxDialogEvents(QtCore.QObject): def eventFilter(self, obj, event): @@ -24,4 +24,5 @@ def show(): se.runCommand('import MaxPlus') se.MaxEventFilter = MaxDialogEvents() se.installEventFilter(se.MaxEventFilter) + se.setWindowStyle() se.show() diff --git a/pw_multiScriptEditor/managers/__init__.py b/pw_multiScriptEditor/managers/__init__.py index ab3317a..592310f 100644 --- a/pw_multiScriptEditor/managers/__init__.py +++ b/pw_multiScriptEditor/managers/__init__.py @@ -6,40 +6,40 @@ # NUKE def nukeCompleter(*args): - from managers import _nuke + import _nuke return _nuke.completer(*args) def getNukeContextMenu(*args): - from managers import _nuke + import _nuke reload(_nuke) return _nuke.contextMenu(*args) ################################################################### # HOUDINI def houdiniCompleter(*args): - from managers import _houdini + import _houdini return _houdini.completer(*args) def getHoudiniContextMenu(*args): - from managers import _houdini + import _houdini reload(_houdini) return _houdini.contextMenu(*args) def houdiniDropEvent(*args): - from managers import _houdini + import _houdini reload(_houdini) return _houdini.wrapDroppedText(*args) ################################################################### # MAYA def mayaCompleter(*args): - from managers import _maya + import _maya reload(_maya) return _maya.completer(*args) def mayaDropEvent(*args): - from managers import _maya + import _maya return _maya.wrapDroppedText(*args) def getMayaContextMenu(*args): - from managers import _maya + import _maya reload(_maya) return _maya.contextMenu(*args) ################################################################### @@ -90,4 +90,4 @@ def getMayaContextMenu(*args): elif platform.system().lower() == 'darwin': _s = 'x' else: - _s = 'l' \ No newline at end of file + _s = 'l' diff --git a/pw_multiScriptEditor/managers/_maya.py b/pw_multiScriptEditor/managers/_maya.py index 0cdf797..4a8b54d 100644 --- a/pw_multiScriptEditor/managers/_maya.py +++ b/pw_multiScriptEditor/managers/_maya.py @@ -1,18 +1,13 @@ _pyside_ver = 0 try: - from PySide.QtCore import * - from PySide.QtGui import * - from shiboken import wrapInstance as wrp + from Qt import QtCore, QtGui, QtWidgets _pyside_ver = 1 except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * _pyside_ver = 2 import maya.OpenMayaUI as omui import os, sys, re -from managers.completeWidget import contextCompleterClass +from ..managers.completeWidget import contextCompleterClass main = __import__('__main__') ns = main.__dict__ @@ -27,9 +22,10 @@ def getMayaWindow(): if _pyside_ver == 1: + from shiboken import wrapInstance ptr = omui.MQtUtil.mainWindow() if ptr is not None: - return wrp(long(ptr), QMainWindow) + return wrapInstance(long(ptr), QtWidgets.QMainWindow) elif _pyside_ver == 2: from pymel.core import ui return ui.Window('MayaWindow').asQtObject() @@ -108,7 +104,7 @@ def completer(line, ns): # drop event def wrapDroppedText(namespace, text, event): - if event.keyboardModifiers() == Qt.AltModifier: + if event.keyboardModifiers() == QtCore.Qt.AltModifier: # pymel with namespace for k, m in namespace.items(): if hasattr(m, '__name__'): @@ -160,13 +156,13 @@ def contextMenu(parent): m = mayaMenuClass(parent) return m -class mayaMenuClass(QMenu): +class mayaMenuClass(QtWidgets.QMenu): def __init__(self, parent): super(mayaMenuClass, self).__init__('Maya', parent) self.par = parent self.setTearOffEnabled(1) self.setWindowTitle('MSE %s Maya' % self.par.ver) - a = QAction('Save to shelf', parent, triggered=self.saveToShelfDialog) + a = QtWidgets.QAction('Save to shelf', parent, triggered=self.saveToShelfDialog) self.addAction(a) def saveToShelfDialog(self): @@ -175,15 +171,15 @@ def saveToShelfDialog(self): self.dial.show() -class mayaIconsClass(QListWidget): +class mayaIconsClass(QtWidgets.QListWidget): def __init__(self, parent): super(mayaIconsClass, self).__init__() self.par = parent - self.setWindowFlags(Qt.Tool) - self.setViewMode(QListView.IconMode) - self.setIconSize(QSize(32,32)) - self.setEditTriggers(QAbstractItemView.NoEditTriggers) - self.setResizeMode(QListWidget.ResizeMode.Adjust) + self.setWindowFlags(QtCore.Qt.Tool) + self.setViewMode(QtWidgets.QListView.IconMode) + self.setIconSize(QtCore.QSize(32,32)) + self.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.setResizeMode(QtWidgets.QListWidget.ResizeMode.Adjust) self.fillIcons() self.itemClicked.connect(self.print_name) @@ -191,14 +187,14 @@ def fillIcons(self): res, files = self.getIcons() self.par.out.showMessage( "%s icons found" % len(res+files)) for ico in sorted(res): - item = QListWidgetItem(self) - item.setIcon(QIcon(':/'+ico)) + item = QtWidgets.QListWidgetItem(self) + item.setIcon(QtGui.QIcon(':/'+ico)) item.setData(32, ':/'+ico) item.setToolTip(ico) self.addItem(item) for f in sorted(files, key=lambda x: os.path.splitext(x)[0]): - item = QListWidgetItem(self) - item.setIcon(QIcon(f)) + item = QtWidgets.QListWidgetItem(self) + item.setIcon(QtGui.QIcon(f)) item.setData(32, f) item.setToolTip(f) self.addItem(item) @@ -225,23 +221,23 @@ def findInPath(self, path): def print_name(self, item): print item.data(32) -class saveToShelfClass(QDialog): +class saveToShelfClass(QtWidgets.QDialog): def __init__(self, parent): super(saveToShelfClass, self).__init__(parent) self.par = parent - self.setWindowFlags(Qt.Tool) + self.setWindowFlags(QtCore.Qt.Tool) self.setObjectName('maya_create_shelfButton') self.setWindowTitle('Save script to shelf') - self.verticalLayout = QVBoxLayout(self) - self.gridLayout = QGridLayout() - self.label = QLabel('Label') + self.verticalLayout = QtWidgets.QVBoxLayout(self) + self.gridLayout = QtWidgets.QGridLayout() + self.label = QtWidgets.QLabel('Label') self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - self.lineEdit = QLineEdit(self) + self.lineEdit = QtWidgets.QLineEdit(self) self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 1) self.verticalLayout.addLayout(self.gridLayout) self.listWidget = mayaIconsClass(parent) self.verticalLayout.addWidget(self.listWidget) - self.pushButton = QPushButton('Save to shelf') + self.pushButton = QtWidgets.QPushButton('Save to shelf') self.verticalLayout.addWidget(self.pushButton) self.pushButton.clicked.connect(self.createButton) diff --git a/pw_multiScriptEditor/managers/_nuke.py b/pw_multiScriptEditor/managers/_nuke.py index bbb6e5d..c6b8c21 100644 --- a/pw_multiScriptEditor/managers/_nuke.py +++ b/pw_multiScriptEditor/managers/_nuke.py @@ -6,12 +6,11 @@ exec 'import nukescripts' in ns nuke = ns['nuke'] import nukescripts -from managers.nuke import nodes +from ..managers.nuke import nodes nuke_nodes = dir(nodes) -from managers.completeWidget import contextCompleterClass +from ..managers.completeWidget import contextCompleterClass -from PySide.QtGui import * -from PySide.QtCore import * +from Qt import QtCore, QtWidgets p = os.path.dirname(__file__).replace('\\','/') if not p in sys.path: @@ -21,7 +20,7 @@ reload(scriptEditor) # QT -qApp = QApplication.instance() +qApp = QtWidgets.QApplication.instance() def getMainWindow(): for widget in qApp.topLevelWidgets(): @@ -126,17 +125,17 @@ def contextMenu(parent): m = nukeContextMenu(parent) return m -class nukeContextMenu(QMenu): +class nukeContextMenu(QtWidgets.QMenu): def __init__(self, parent): super(nukeContextMenu, self).__init__('Nuke') self.par = parent self.setTearOffEnabled(1) self.setWindowTitle('MSE %s Nuke' % self.par.ver) - self.addAction(QAction('Read PyScript Knob', parent, triggered=self.readPyScriptKnob)) - self.addAction(QAction('Save To PyScript Knob', parent, triggered=self.saveToKnob)) + self.addAction(QtWidgets.QAction('Read PyScript Knob', parent, triggered=self.readPyScriptKnob)) + self.addAction(QtWidgets.QAction('Save To PyScript Knob', parent, triggered=self.saveToKnob)) self.addSeparator() - self.addAction(QAction('From Selected', parent, triggered=self.nodeToCode)) - self.addAction(QAction('From Clipboard', parent, triggered=self.nodesFromClipboard)) + self.addAction(QtWidgets.QAction('From Selected', parent, triggered=self.nodeToCode)) + self.addAction(QtWidgets.QAction('From Clipboard', parent, triggered=self.nodesFromClipboard)) def nodeToCode(self): nodes = nuke.selectedNodes() @@ -180,7 +179,7 @@ def saveToKnob(self): def nodesFromClipboard(self): # nuke.tprint(str(self.par)) - text = QApplication.clipboard().text() + text = QtWidgets.QApplication.clipboard().text() nodes = [] if text: for l in text.split('\n'): @@ -191,22 +190,22 @@ def nodesFromClipboard(self): for n in nodes: self.par.tab.addToCurrent('nuke.toNode("%s")\n' % n) -class selectDialog(QDialog): +class selectDialog(QtWidgets.QDialog): def __init__(self, items, title, sel=None): super(selectDialog, self).__init__() self.setWindowTitle(title) - self.setWindowFlags(Qt.Tool) - self.list = QListWidget(self) - self.list.setSelectionMode(QAbstractItemView.SingleSelection) - self.ly = QVBoxLayout(self) + self.setWindowFlags(QtCore.Qt.Tool) + self.list = QtWidgets.QListWidget(self) + self.list.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection) + self.ly = QtWidgets.QVBoxLayout(self) self.setLayout(self.ly) self.ly.addWidget(self.list) - self.btn = QPushButton('Select') + self.btn = QtWidgets.QPushButton('Select') self.ly.addWidget(self.btn) self.btn.clicked.connect(self.accept) selected = None for i in items: - item = QListWidgetItem(i) + item = QtWidgets.QListWidgetItem(i) item.setData(32, i) self.list.addItem(item) if i == sel: diff --git a/pw_multiScriptEditor/managers/completeWidget.py b/pw_multiScriptEditor/managers/completeWidget.py index cd727ee..bddc770 100644 --- a/pw_multiScriptEditor/managers/completeWidget.py +++ b/pw_multiScriptEditor/managers/completeWidget.py @@ -5,4 +5,4 @@ class contextCompleterClass(object): def __init__(self, name, complete, end=None): self.name = name self.complete = complete - self.end_char = end \ No newline at end of file + self.end_char = end diff --git a/pw_multiScriptEditor/managers/houdini/hou.py b/pw_multiScriptEditor/managers/houdini/hou.py index a852f67..b471dce 100644 --- a/pw_multiScriptEditor/managers/houdini/hou.py +++ b/pw_multiScriptEditor/managers/houdini/hou.py @@ -1,4 +1,4 @@ -from PySide2.QtWidgets import * +from Qt import QtWidgets class appearanceChangeType: @@ -7074,7 +7074,7 @@ def activeInterface(self): def activeInterfaceRootWidget(self): - return QWidget + return QtWidgets.QWidget def setActiveInterface(self, interface): @@ -9878,19 +9878,19 @@ class qt(): def createDialog(self): - return QWidget + return QtWidgets.QWidget def createMenu(self): - return QMenu + return QtWidgets.QMenu def createToolTip(self): - return QWidget + return QtWidgets.QWidget def createWindow(self): - return QWidget + return QtWidgets.QWidget class session(): diff --git a/pw_multiScriptEditor/managers/nuke/geo.py b/pw_multiScriptEditor/managers/nuke/geo.py index 5d678e2..3af8d94 100644 --- a/pw_multiScriptEditor/managers/nuke/geo.py +++ b/pw_multiScriptEditor/managers/nuke/geo.py @@ -126,4 +126,4 @@ def normal(self): def points(self): """ Get the list of point indexes for this primitive.""" - return [0,] \ No newline at end of file + return [0,] diff --git a/pw_multiScriptEditor/managers/rvsupport/plugins/Mu/rvload b/pw_multiScriptEditor/managers/rvsupport/plugins/Mu/rvload new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/pw_multiScriptEditor/managers/rvsupport/plugins/Mu/rvload @@ -0,0 +1 @@ +1 diff --git a/pw_multiScriptEditor/managers/rvsupport/plugins/Mu/rvload2 b/pw_multiScriptEditor/managers/rvsupport/plugins/Mu/rvload2 new file mode 100644 index 0000000..5717995 --- /dev/null +++ b/pw_multiScriptEditor/managers/rvsupport/plugins/Mu/rvload2 @@ -0,0 +1,2 @@ +3 +scriptEditorRv,scriptEditorRv.zip,nil,nil,nil,true,true,4.0.9,false diff --git a/pw_multiScriptEditor/managers/rvsupport/plugins/Python/scriptEditorRv.py b/pw_multiScriptEditor/managers/rvsupport/plugins/Python/scriptEditorRv.py new file mode 100644 index 0000000..d21c0a2 --- /dev/null +++ b/pw_multiScriptEditor/managers/rvsupport/plugins/Python/scriptEditorRv.py @@ -0,0 +1,64 @@ +''' +add rvsupport-plugins to your env into the var + +RV_SUPPORT_PATH=$RV_SUPPORT_PATH:/pathto/rvsupport/plugins + +make sure the script editor module is in the python path + +PYTHONPATH=$PYTHONPATH:/pathto/pw_multiscriptEditor + +''' + +import sys +sys.dont_write_bytecode = 1 + +from rv import rvtypes, commands, extra_commands, qtutils + +from Qt import QtWidgets, QtCore + +class ScriptEditorRv(rvtypes.MinorMode): + ''' + this class creates a menu and + handles the parenting and creation of a dock widget in which the editor then resides + ''' + def __init__(self): + rvtypes.MinorMode.__init__(self) + + self.init("scriptEditorRv", + None, + None, + [("Script Editor", + [("Show Editor", self.showUi, "", None) + ] + )] + ) + self.NOT_INIT = True + + + def showUi(self, event): + if self.NOT_INIT: + self.initUi() + self.NOT_INIT = False + self.dialog.show() + + def initUi(self): + from pw_multiScriptEditor import scriptEditor + self.mainWindow = qtutils.sessionWindow() + self.widget = scriptEditor.scriptEditorClass() + self.dialog = QtWidgets.QDockWidget("%s" % self.widget.windowTitle(), self.mainWindow) + self.mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.dialog) + self.dialog.setWidget(self.widget) + + def activate(self): + rvtypes.MinorMode.activate(self) + + def deactivate(self): + rvtypes.MinorMode.deactivate(self) + self.dialog.hide() + +def createMode(): + """ + Required to initialize the module. RV will call this function to create your mode. + """ + print("Adding ScriptEditor") + return ScriptEditorRv() diff --git a/pw_multiScriptEditor/run.cmd b/pw_multiScriptEditor/run.cmd index f7c56f6..13d05ad 100644 --- a/pw_multiScriptEditor/run.cmd +++ b/pw_multiScriptEditor/run.cmd @@ -1 +1 @@ -start c:\python27\python.exe scriptEditor.py %* \ No newline at end of file +start c:\python27\python.exe runScriptEditor.py %* \ No newline at end of file diff --git a/pw_multiScriptEditor/run.sh b/pw_multiScriptEditor/run.sh index a197682..b2ce0ab 100644 --- a/pw_multiScriptEditor/run.sh +++ b/pw_multiScriptEditor/run.sh @@ -1,3 +1,3 @@ #!/bin/bash CURRENT=`dirname $(readlink -f $0)` -python "$CURRENT/scriptEditor.py" +python "$CURRENT/runScriptEditor.py" diff --git a/pw_multiScriptEditor/runScriptEditor.py b/pw_multiScriptEditor/runScriptEditor.py new file mode 100644 index 0000000..5b9bf06 --- /dev/null +++ b/pw_multiScriptEditor/runScriptEditor.py @@ -0,0 +1,8 @@ +from pw_multiScriptEditor import scriptEditor +from Qt import QtWidgets + +app = QtWidgets.QApplication([]) +w = scriptEditor.scriptEditorClass() +w.setWindowStyle() +w.show() +app.exec_() diff --git a/pw_multiScriptEditor/scriptEditor.py b/pw_multiScriptEditor/scriptEditor.py index 6c121f4..c73f14a 100644 --- a/pw_multiScriptEditor/scriptEditor.py +++ b/pw_multiScriptEditor/scriptEditor.py @@ -2,49 +2,51 @@ import sys import webbrowser import os -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * -from widgets import scriptEditor_UIs as ui, tabWidget, outputWidget, about, shortcuts -from widgets.pythonSyntax import design + +from Qt import QtCore, QtGui, QtWidgets + +from .widgets import scriptEditor_UIs as ui +from .widgets import tabWidget, outputWidget, about, shortcuts, themeEditor, findWidget + reload(tabWidget) reload(outputWidget) reload(ui) -import sessionManager -import settingsManager -from widgets import themeEditor, findWidget reload(themeEditor) reload(findWidget) -import managers + +from .widgets.pythonSyntax import design +from . import sessionManager +from . import settingsManager +from . import managers reload(managers) + if managers._s == 'w': import ctypes ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID('paulwinex.multiscripteditor.1.0') + import icons_rcs -from icons import * +from .icons import * -class scriptEditorClass(QMainWindow, ui.Ui_scriptEditor): +class scriptEditorClass(QtWidgets.QMainWindow, ui.Ui_scriptEditor): def __init__(self, parent=None): - QMainWindow.__init__(self, parent) + QtWidgets.QMainWindow.__init__(self, parent) # ui self.ver = '2.0.4' + self.tab = tabWidget.tabWidgetClass(self) self.setupUi(self) self.setWindowTitle('pw Multi Script Editor v%s' % self.ver) self.setObjectName('pw_scriptEditor') # widgets self.out = outputWidget.outputClass() + self.out_ly.addWidget(self.out) - self.tab = tabWidget.tabWidgetClass(self) self.in_ly.addWidget(self.tab) for m in self.file_menu, self.tools_menu, self.options_menu, self.run_menu, self.help_menu: m.setWindowTitle('MSE '+self.ver) + #variables self.s = settingsManager.scriptEditorClass() # self.namespace = {} @@ -57,10 +59,10 @@ def __init__(self, parent=None): 'self_help': self.mse_help, 'self_context':managers.context}) self.session = sessionManager.sessionManagerClass() - self.execAll_act.setIcon(QIcon(icons['all'])) - self.execSel_act.setIcon(QIcon(icons['sel'])) - self.clearHistory_act.setIcon(QIcon(icons['clear'])) - self.toolBar.setIconSize(QSize(32,32)) + self.execAll_act.setIcon(QtGui.QIcon(icons['all'])) + self.execSel_act.setIcon(QtGui.QIcon(icons['sel'])) + self.clearHistory_act.setIcon(QtGui.QIcon(icons['clear'])) + self.toolBar.setIconSize(QtCore.QSize(32,32)) self.menubar.setNativeMenuBar(False) # connects @@ -77,34 +79,34 @@ def __init__(self, parent=None): self.shortcuts_act.triggered.connect(self.shortcuts) self.printHelp_act.triggered.connect(self.mse_help) # editor - c = Qt.WindowShortcut + c = QtCore.Qt.WindowShortcut self.undo_act.triggered.connect(self.tab.undo) self.undo_act.setShortcut('Ctrl+Z') - self.undo_act.setShortcutContext(Qt.WidgetShortcut) + self.undo_act.setShortcutContext(QtCore.Qt.WidgetShortcut) self.redo_act.triggered.connect(self.tab.redo) self.redo_act.setShortcut('Ctrl+Y') - self.redo_act.setShortcutContext(Qt.WidgetShortcut) + self.redo_act.setShortcutContext(QtCore.Qt.WidgetShortcut) self.copy_act.triggered.connect(self.tab.copy) self.copy_act.setShortcut('Ctrl+C') - self.copy_act.setShortcutContext(Qt.WidgetShortcut) + self.copy_act.setShortcutContext(QtCore.Qt.WidgetShortcut) self.cut_act.triggered.connect(self.tab.cut) self.cut_act.setShortcut('Ctrl+X') - self.cut_act.setShortcutContext(Qt.WidgetShortcut) + self.cut_act.setShortcutContext(QtCore.Qt.WidgetShortcut) self.paste_act.triggered.connect(self.tab.paste) self.paste_act.setShortcut('Ctrl+V') - self.paste_act.setShortcutContext(Qt.WidgetShortcut) + self.paste_act.setShortcutContext(QtCore.Qt.WidgetShortcut) self.find_act.triggered.connect(self.findWidget) self.find_act.setShortcut('Ctrl+F') - self.find_act.setShortcutContext(Qt.WindowShortcut) + self.find_act.setShortcutContext(QtCore.Qt.WindowShortcut) self.comment_cat.triggered.connect(self.tab.comment) - self.comment_cat.setShortcut(QKeySequence( Qt.ALT+Qt.Key_Q)) - self.comment_cat.setShortcutContext(Qt.WidgetShortcut) + self.comment_cat.setShortcut(QtGui.QKeySequence( QtCore.Qt.ALT+QtCore.Qt.Key_Q)) + self.comment_cat.setShortcutContext(QtCore.Qt.WidgetShortcut) self.fillThemeMenu() @@ -113,15 +115,15 @@ def __init__(self, parent=None): import nuke if nuke.NUKE_VERSION_MAJOR>8: self.execSel_act.setShortcut('Ctrl+Return') - self.execSel_act.setShortcutContext(Qt.ApplicationShortcut) + self.execSel_act.setShortcutContext(QtCore.Qt.ApplicationShortcut) self.execSel_act.triggered.connect(self.executeSelected) self.execSel_act.setShortcut('Ctrl+Return') - self.execSel_act.setShortcutContext(Qt.WidgetWithChildrenShortcut) + self.execSel_act.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.execAll_act.setShortcut('Ctrl+Shift+Return') self.execAll_act.triggered.connect(self.executeAll) - self.execAll_act.setShortcutContext(Qt.ApplicationShortcut) + self.execAll_act.setShortcutContext(QtCore.Qt.ApplicationShortcut) self.clearHistory_act.triggered.connect(self.clearHistory) @@ -131,7 +133,6 @@ def __init__(self, parent=None): #start self.loadSession() self.loadSettings() - self.setWindowStyle() # self.out.showMessage('Multi Script Editor v.%s Loaded\npaulwinex.com' % self.ver) self.tab.widget(0).edit.setFocus() self.appContextMenu() @@ -148,7 +149,7 @@ def mse_help(self): txt = '

File not found: helpText.txt


' old = self.out.toPlainText().replace('\n', '
') self.out.setHtml(old+txt) - self.out.moveCursor(QTextCursor.End) + self.out.moveCursor(QtGui.QTextCursor.End) self.out.ensureCursorVisible() def closeEvent(self, event): @@ -170,24 +171,25 @@ def appContextMenu(self): def addArgs(self): if sys.argv: - f = sys.argv[-1] - if os.path.exists(f): - if not os.path.basename(f) == os.path.basename(__file__): - if os.path.splitext(f)[-1] in ['.txt', '.py']: - self.out.showMessage( os.path.splitext(f)[-1]) - self.out.showMessage('Open File: '+f) - text = open(f).read() - self.tab.addNewTab(os.path.basename(f), text) + if len(sys.argv) > 1: + for f in sys.argv[1:]: + if os.path.exists(f): + if not os.path.basename(f) == os.path.basename(__file__): + if os.path.splitext(f)[-1] in ['.txt', '.py']: + self.out.showMessage( os.path.splitext(f)[-1]) + self.out.showMessage('Open File: '+f) + text = open(f).read() + self.tab.addNewTab(os.path.basename(f), text) def fillThemeMenu(self): self.theme_menu.clear() - self.theme_menu.addAction(QAction('Edit...', self, triggered=self.openThemeEditor)) + self.theme_menu.addAction(QtWidgets.QAction('Edit...', self, triggered=self.openThemeEditor)) self.theme_menu.addSeparator() - self.theme_menu.addAction(QAction('default', self, triggered=lambda: self.applyTheme('default'))) + self.theme_menu.addAction(QtWidgets.QAction('default', self, triggered=lambda: self.applyTheme('default'))) data = self.s.readSettings() if data.get('colors'): for t in data.get('colors').keys(): - self.theme_menu.addAction(QAction(t, self, triggered=lambda x=t: self.applyTheme(x))) + self.theme_menu.addAction(QtWidgets.QAction(t, self, triggered=lambda x=t: self.applyTheme(x))) def applyTheme(self, name): for i in range(self.tab.count()): @@ -204,11 +206,10 @@ def applyTheme(self, name): self.s.writeSettings(s) def setWindowStyle(self): - if __name__ == '__main__': - qss = os.path.join(os.path.dirname(__file__),'style', 'style.css') - if os.path.exists(qss): - self.setStyleSheet(open(qss).read()) - self.setWindowIcon(QIcon(icons['pw'])) + qss = os.path.join(os.path.abspath(os.path.dirname(__file__)),'style', 'style.css') + if os.path.exists(qss): + self.setStyleSheet(open(qss).read()) + self.setWindowIcon(QtGui.QIcon(icons['pw'])) def loadSession(self): sessions = self.session.readSession() @@ -219,7 +220,7 @@ def loadSession(self): w= self.tab.addNewTab(s['name'], s['text']) if s['active']: active = i - w.setFontSize(s.get('size', None)) + w.setFontSize(s.get('size', 10)) else: self.tab.addNewTab() self.tab.setCurrentIndex(active) @@ -275,7 +276,7 @@ def write(self, text): if not self.skip: stripped_text = text.rstrip('\n') self.write_func(stripped_text) - QCoreApplication.processEvents() + QtCore.QCoreApplication.processEvents() self.skip = not self.skip sys.stdout = stdoutProxy(self.out.showMessage) @@ -305,7 +306,7 @@ def saveScript(self): d = os.getenv('HOME') if not d: d = os.path.expanduser('~') - path = QFileDialog.getSaveFileName (self, 'Save script', d, "PY Files (*.py)") + path = QtWidgets.QFileDialog.getSaveFileName (self, 'Save script', d, "PY Files (*.py)") if path[0]: try: with open(path[0], 'w') as f: @@ -317,7 +318,7 @@ def loadScript(self): d = os.getenv('HOME') if not d: d = os.path.expanduser('~') - path = QFileDialog.getOpenFileName(self, 'Open script', d, "PY Files (*.py)") + path = QtWidgets.QFileDialog.getOpenFileName(self, 'Open script', d, "PY Files (*.py)") if path[0]: if os.path.exists(path[0]): text = open(path[0]).read() @@ -339,7 +340,7 @@ def loadSettings(self): if data.get('center'): x, y = data.get('center') geo = self.geometry() - geo.moveCenter(QPoint(x,y)) + geo.moveCenter(QtCore.QPoint(x,y)) self.setGeometry(geo) f = self.out.font() f.setPointSize(data['outFontSize']) @@ -374,7 +375,7 @@ def openThemeEditor(self): def moveEvent(self, event): self.adjustColmpeters() # super(scriptEditorClass, self).moveEvent(event) - QMainWindow.moveEvent(self, event) + QtWidgets.QMainWindow.moveEvent(self, event) def adjustColmpeters(self): for i in range(self.tab.count()): @@ -385,7 +386,7 @@ def adjustColmpeters(self): def resizeEvent(self, event): self.adjustColmpeters() # super(scriptEditorClass, self).resizeEvent(event) - QMainWindow.resizeEvent(self, event) + QtWidgets.QMainWindow.resizeEvent(self, event) def openLink(self, name): @@ -417,12 +418,7 @@ def openFolder(self, path): os.system('open "%s"' % path) try: - QTextCodec.setCodecForCStrings(QTextCodec.codecForName("UTF-8")) + QtCore.QTextCodec.setCodecForCStrings(QtCore.QTextCodec.codecForName("UTF-8")) except: pass -if __name__ == '__main__': - app = QApplication([]) - w = scriptEditorClass() - w.show() - app.exec_() diff --git a/pw_multiScriptEditor/widgets/_uiToPy.py b/pw_multiScriptEditor/widgets/_uiToPy.py new file mode 100644 index 0000000..3719ec3 --- /dev/null +++ b/pw_multiScriptEditor/widgets/_uiToPy.py @@ -0,0 +1,15 @@ +import pyside2uic +import os +import qt_py_convert.run + +print pyside2uic.__file__ + +def name_pattern(py_dir, py_file): + py_file = os.path.splitext(py_file)[0] + "_UIs" + os.path.splitext(py_file)[1] + return py_dir, py_file + + +currentDir = os.path.dirname(os.path.abspath(__file__)) + +pyside2uic.compileUiDir(currentDir, map=name_pattern) +qt_py_convert.run.process_folder(currentDir) diff --git a/pw_multiScriptEditor/widgets/about.py b/pw_multiScriptEditor/widgets/about.py old mode 100644 new mode 100755 index 5157c93..ac1321f --- a/pw_multiScriptEditor/widgets/about.py +++ b/pw_multiScriptEditor/widgets/about.py @@ -1,24 +1,19 @@ -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * -import icons +from Qt import QtCore, QtGui, QtWidgets + +from .. import icons import about_UIs import os -class aboutClass(QDialog, about_UIs.Ui_Dialog): +class aboutClass(QtWidgets.QDialog, about_UIs.Ui_Dialog): def __init__(self, parent): super(aboutClass, self).__init__(parent) self.setupUi(self) self.title_lb.setText(self.title_lb.text()+str(parent.ver)) self.text_link_lb.setText(text) - self.icon_lb.setPixmap(QPixmap(icons.icons['pw']).scaled(60,60, Qt.KeepAspectRatio, Qt.SmoothTransformation)) + self.icon_lb.setPixmap(QtGui.QPixmap(icons.icons['pw']).scaled(60,60, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)) self.donate_btn.setMinimumHeight(35) - self.donate_btn.setIconSize(QSize(24,24)) - self.donate_btn.setIcon(QIcon(icons.icons['donate'])) + self.donate_btn.setIconSize(QtCore.QSize(24,24)) + self.donate_btn.setIcon(QtGui.QIcon(icons.icons['donate'])) self.donate_btn.clicked.connect(lambda :parent.openLink('donate')) self.donate_btn.hide() testedFile = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'tested.txt') diff --git a/pw_multiScriptEditor/widgets/about_UIs.py b/pw_multiScriptEditor/widgets/about_UIs.py index 3c5b530..2013847 100644 --- a/pw_multiScriptEditor/widgets/about_UIs.py +++ b/pw_multiScriptEditor/widgets/about_UIs.py @@ -1,72 +1,66 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'D:\Dropbox\Dropbox\pw_prefs\RnD\tools\pw_scriptEditor\pw_multiScriptEditor\widgets\about.ui' -# -# Created: Thu Apr 02 22:56:45 2015 -# by: pyside-uic 0.2.15 running on PySide 1.2.2 -# -# WARNING! All changes made in this file will be lost! - -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * - -class Ui_Dialog(object): - def setupUi(self, Dialog): - Dialog.setObjectName("Dialog") - Dialog.resize(465, 393) - self.verticalLayout = QVBoxLayout(Dialog) - self.verticalLayout.setObjectName("verticalLayout") - self.horizontalLayout = QHBoxLayout() - self.horizontalLayout.setContentsMargins(-1, 20, -1, 20) - self.horizontalLayout.setObjectName("horizontalLayout") - spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem) - self.icon_lb = QLabel(Dialog) - font = QFont() - font.setPointSize(20) - self.icon_lb.setFont(font) - self.icon_lb.setText("") - self.icon_lb.setObjectName("icon_lb") - self.horizontalLayout.addWidget(self.icon_lb) - self.title_lb = QLabel(Dialog) - font = QFont() - font.setPointSize(20) - self.title_lb.setFont(font) - self.title_lb.setObjectName("title_lb") - self.horizontalLayout.addWidget(self.title_lb) - spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem1) - self.verticalLayout.addLayout(self.horizontalLayout) - self.text_link_lb = QLabel(Dialog) - self.text_link_lb.setObjectName("text_link_lb") - self.verticalLayout.addWidget(self.text_link_lb) - self.textBrowser = QTextBrowser(Dialog) - self.textBrowser.setObjectName("textBrowser") - self.verticalLayout.addWidget(self.textBrowser) - self.horizontalLayout_2 = QHBoxLayout() - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.donate_btn = QPushButton(Dialog) - self.donate_btn.setObjectName("donate_btn") - self.horizontalLayout_2.addWidget(self.donate_btn) - self.verticalLayout.addLayout(self.horizontalLayout_2) - self.verticalLayout.setStretch(2, 1) - - self.retranslateUi(Dialog) - QMetaObject.connectSlotsByName(Dialog) - - def retranslateUi(self, Dialog): - Dialog.setWindowTitle(QApplication.translate("Dialog", "About Multi Script Editor", None)) - self.title_lb.setText(QApplication.translate("Dialog", "Multi Script Editor v", None)) - self.text_link_lb.setText(QApplication.translate("Dialog", "Paul Winex 2015", None)) - self.textBrowser.setHtml(QApplication.translate("Dialog", "\n" -"\n" -"

File not Found :(

", None)) - self.donate_btn.setText(QApplication.translate("Dialog", "Donate", None)) - +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/Users/johannes/PycharmProjects/pw_MultiScriptEditor/pw_multiScriptEditor/widgets/about.ui' +# +# Created: Sat Apr 28 00:29:02 2018 +# by: pyside2-uic running on PySide2 5.9.0a1.dev1524638381 +# +# WARNING! All changes made in this file will be lost! + +from Qt import QtGui, QtCore, QtCompat, QtWidgets + +class Ui_Dialog(object): + def setupUi(self, Dialog): + Dialog.setObjectName("Dialog") + Dialog.resize(465, 393) + self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) + self.verticalLayout.setObjectName("verticalLayout") + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setContentsMargins(-1, 20, -1, 20) + self.horizontalLayout.setObjectName("horizontalLayout") + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem) + self.icon_lb = QtWidgets.QLabel(Dialog) + font = QtGui.QFont() + font.setPointSize(20) + self.icon_lb.setFont(font) + self.icon_lb.setText("") + self.icon_lb.setObjectName("icon_lb") + self.horizontalLayout.addWidget(self.icon_lb) + self.title_lb = QtWidgets.QLabel(Dialog) + font = QtGui.QFont() + font.setPointSize(20) + self.title_lb.setFont(font) + self.title_lb.setObjectName("title_lb") + self.horizontalLayout.addWidget(self.title_lb) + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem1) + self.verticalLayout.addLayout(self.horizontalLayout) + self.text_link_lb = QtWidgets.QLabel(Dialog) + self.text_link_lb.setObjectName("text_link_lb") + self.verticalLayout.addWidget(self.text_link_lb) + self.textBrowser = QtWidgets.QTextBrowser(Dialog) + self.textBrowser.setObjectName("textBrowser") + self.verticalLayout.addWidget(self.textBrowser) + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.donate_btn = QtWidgets.QPushButton(Dialog) + self.donate_btn.setObjectName("donate_btn") + self.horizontalLayout_2.addWidget(self.donate_btn) + self.verticalLayout.addLayout(self.horizontalLayout_2) + self.verticalLayout.setStretch(2, 1) + + self.retranslateUi(Dialog) + QtCore.QMetaObject.connectSlotsByName(Dialog) + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QtCompat.translate("Dialog", "About Multi Script Editor", None, -1)) + self.title_lb.setText(QtCompat.translate("Dialog", "Multi Script Editor v", None, -1)) + self.text_link_lb.setText(QtCompat.translate("Dialog", "Paul Winex 2015", None, -1)) + self.textBrowser.setHtml(QtCompat.translate("Dialog", "\n" +"\n" +"

File not Found :(

", None, -1)) + self.donate_btn.setText(QtCompat.translate("Dialog", "Donate", None, -1)) + diff --git a/pw_multiScriptEditor/widgets/completeWidget.py b/pw_multiScriptEditor/widgets/completeWidget.py index b8d2102..758b698 100644 --- a/pw_multiScriptEditor/widgets/completeWidget.py +++ b/pw_multiScriptEditor/widgets/completeWidget.py @@ -1,19 +1,14 @@ -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * +from Qt import QtCore, QtGui, QtWidgets + import os, re from . pythonSyntax import design -import managers +from .. import managers style = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'style', 'completer.qss') if not os.path.exists(style): style=None -class completeMenuClass(QListWidget): +class completeMenuClass(QtWidgets.QListWidget): def __init__(self, parent=None, editor=None): # if managers.context == 'hou': # super(completeMenuClass, self).__init__(managers.main_parent or parent) @@ -22,11 +17,11 @@ def __init__(self, parent=None, editor=None): self.setAlternatingRowColors(1) self.lineHeight = 18 self.e = editor - self.setAttribute(Qt.WA_ShowWithoutActivating) + self.setAttribute(QtCore.Qt.WA_ShowWithoutActivating) if managers._s == 'w': - self.setWindowFlags(Qt.FramelessWindowHint | Qt.Window) + self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Window) else: - self.setWindowFlags(Qt.FramelessWindowHint | Qt.Window | Qt.WindowStaysOnTopHint) + self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Window | QtCore.Qt.WindowStaysOnTopHint) @self.itemDoubleClicked.connect def insertSelected(item): if item: @@ -44,7 +39,7 @@ def updateCompleteList(self, lines=None, extra=None): self.showMe() if lines: for i in [x for x in lines if not x.name == 'mro']: - item = QListWidgetItem(i.name) + item = QtWidgets.QListWidgetItem(i.name) item.setData(32, i) self.addItem(item) if extra: @@ -53,13 +48,13 @@ def updateCompleteList(self, lines=None, extra=None): font.setItalic(1) font.setPointSize(font.pointSize()*0.8) for e in extra: - item = QListWidgetItem(e.name) + item = QtWidgets.QListWidgetItem(e.name) item.setData(32, e) item.setFont(font) self.addItem(item) - font = QFont("monospace", self.lineHeight, False) - fm = QFontMetrics (font) + font = QtGui.QFont("monospace", self.lineHeight, False) + fm = QtGui.QFontMetrics (font) width = fm.width(' ') * max([len(x.name) for x in lines or extra]) + 40 self.resize(max(250,width), 250) @@ -75,38 +70,38 @@ def applyCurrentComplete(self): self.hideMe() def keyPressEvent(self, event): - if event.key() == Qt.Key_Escape: + if event.key() == QtCore.Qt.Key_Escape: self.close() # elif event.text(): # self.editor().setFocus() - elif event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter: + elif event.key() == QtCore.Qt.Key_Return or event.key() == QtCore.Qt.Key_Enter: self.editor().setFocus() self.applyCurrentComplete() return event - elif event.key() == Qt.Key_Up: + elif event.key() == QtCore.Qt.Key_Up: sel = self.selectedItems() if sel: i = self.row(sel[0]) if i == 0: - QListWidget.keyPressEvent(self, event) + QtWidgets.QListWidget.keyPressEvent(self, event) self.setCurrentRow(self.count()-1) return - elif event.key() == Qt.Key_Down: + elif event.key() == QtCore.Qt.Key_Down: sel = self.selectedItems() if sel: i = self.row(sel[0]) if i+1 == self.count(): - QListWidget.keyPressEvent(self, event) + QtWidgets.QListWidget.keyPressEvent(self, event) self.setCurrentRow(0) return - elif event.key() == Qt.Key_Backspace: + elif event.key() == QtCore.Qt.Key_Backspace: self.editor().setFocus() self.editor().activateWindow() elif event.text(): self.editor().keyPressEvent(event) return - QListWidget.keyPressEvent(self, event) + QtWidgets.QListWidget.keyPressEvent(self, event) def sendText(self, comp): self.editor().insertText(comp) @@ -116,7 +111,7 @@ def editor(self): def activateCompleter(self, key=False): self.activateWindow() - if not key==Qt.Key_Up: + if not key==QtCore.Qt.Key_Up: self.setCurrentRow(min(1, self.count()-1)) else: self.setCurrentRow(self.count()-1) diff --git a/pw_multiScriptEditor/widgets/findWidget.py b/pw_multiScriptEditor/widgets/findWidget.py old mode 100644 new mode 100755 index 70e820e..47aa5e6 --- a/pw_multiScriptEditor/widgets/findWidget.py +++ b/pw_multiScriptEditor/widgets/findWidget.py @@ -1,20 +1,14 @@ -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * +from Qt import QtCore, QtWidgets import findWidget_UIs as ui -class findWidgetClass(QWidget, ui.Ui_findReplace): - searchSignal = Signal(str) - replaceSignal = Signal(list) - replaceAllSignal = Signal(list) +class findWidgetClass(QtWidgets.QWidget, ui.Ui_findReplace): + searchSignal = QtCore.Signal(str) + replaceSignal = QtCore.Signal(list) + replaceAllSignal = QtCore.Signal(list) def __init__(self, parent): super(findWidgetClass, self).__init__(parent) self.setupUi(self) - self.setWindowFlags(Qt.Tool) + self.setWindowFlags(QtCore.Qt.Tool) center = parent.parent().mapToGlobal(parent.geometry().center()) myGeo = self.geometry() myGeo.moveCenter(center) @@ -29,21 +23,21 @@ def __init__(self, parent): def search(self): self.searchSignal.emit(self.find_le.text()) - QTimer.singleShot(10, self.find_le.setFocus) + QtCore.QTimer.singleShot(10, self.find_le.setFocus) def replace(self): find = self.find_le.text() rep = self.replace_le.text() self.replaceSignal.emit([find, rep]) - QTimer.singleShot(10, self.replace_le.setFocus) + QtCore.QTimer.singleShot(10, self.replace_le.setFocus) def replaceAll(self): find = self.find_le.text() rep = self.replace_le.text() self.replaceAllSignal.emit([find, rep]) - QTimer.singleShot(10, self.replace_le.setFocus) + QtCore.QTimer.singleShot(10, self.replace_le.setFocus) def keyPressEvent(self, event): - if event.key() == Qt.Key_Escape: + if event.key() == QtCore.Qt.Key_Escape: self.close() - super(findWidgetClass, self).keyPressEvent(event) \ No newline at end of file + super(findWidgetClass, self).keyPressEvent(event) diff --git a/pw_multiScriptEditor/widgets/findWidget_UIs.py b/pw_multiScriptEditor/widgets/findWidget_UIs.py index e438a80..e247187 100644 --- a/pw_multiScriptEditor/widgets/findWidget_UIs.py +++ b/pw_multiScriptEditor/widgets/findWidget_UIs.py @@ -1,56 +1,49 @@ # -*- coding: utf-8 -*- -# Form implementation generated from reading ui file 'D:\Dropbox\Dropbox\pw_prefs\RnD\tools\pw_scriptEditor\pw_multiScriptEditor\widgets\findWidget.ui' +# Form implementation generated from reading ui file '/Users/johannes/PycharmProjects/pw_MultiScriptEditor/pw_multiScriptEditor/widgets/findWidget.ui' # -# Created: Thu Apr 02 15:51:34 2015 -# by: pyside-uic 0.2.15 running on PySide 1.2.2 +# Created: Sat Apr 28 00:29:02 2018 +# by: pyside2-uic running on PySide2 5.9.0a1.dev1524638381 # # WARNING! All changes made in this file will be lost! -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * - +from Qt import QtCore, QtCompat, QtWidgets class Ui_findReplace(object): def setupUi(self, findReplace): findReplace.setObjectName("findReplace") findReplace.resize(246, 101) - self.verticalLayout = QVBoxLayout(findReplace) + self.verticalLayout = QtWidgets.QVBoxLayout(findReplace) self.verticalLayout.setObjectName("verticalLayout") - self.gridLayout = QGridLayout() + self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") - self.replace_le = QLineEdit(findReplace) + self.replace_le = QtWidgets.QLineEdit(findReplace) self.replace_le.setObjectName("replace_le") self.gridLayout.addWidget(self.replace_le, 1, 0, 1, 1) - self.find_le = QLineEdit(findReplace) + self.find_le = QtWidgets.QLineEdit(findReplace) self.find_le.setObjectName("find_le") self.gridLayout.addWidget(self.find_le, 0, 0, 1, 1) - self.find_btn = QPushButton(findReplace) + self.find_btn = QtWidgets.QPushButton(findReplace) self.find_btn.setObjectName("find_btn") self.gridLayout.addWidget(self.find_btn, 0, 1, 1, 1) - self.replace_btn = QPushButton(findReplace) + self.replace_btn = QtWidgets.QPushButton(findReplace) self.replace_btn.setObjectName("replace_btn") self.gridLayout.addWidget(self.replace_btn, 1, 1, 1, 1) - self.replaceAll_btn = QPushButton(findReplace) + self.replaceAll_btn = QtWidgets.QPushButton(findReplace) self.replaceAll_btn.setObjectName("replaceAll_btn") self.gridLayout.addWidget(self.replaceAll_btn, 2, 1, 1, 1) self.verticalLayout.addLayout(self.gridLayout) self.retranslateUi(findReplace) - QMetaObject.connectSlotsByName(findReplace) + QtCore.QMetaObject.connectSlotsByName(findReplace) findReplace.setTabOrder(self.find_le, self.replace_le) findReplace.setTabOrder(self.replace_le, self.find_btn) findReplace.setTabOrder(self.find_btn, self.replace_btn) findReplace.setTabOrder(self.replace_btn, self.replaceAll_btn) def retranslateUi(self, findReplace): - findReplace.setWindowTitle(QApplication.translate("findReplace", "Find and Replace", None)) - self.find_btn.setText(QApplication.translate("findReplace", "Find", None)) - self.replace_btn.setText(QApplication.translate("findReplace", "Replace", None)) - self.replaceAll_btn.setText(QApplication.translate("findReplace", "Replace All", None)) + findReplace.setWindowTitle(QtCompat.translate("findReplace", "Find and Replace", None, -1)) + self.find_btn.setText(QtCompat.translate("findReplace", "Find", None, -1)) + self.replace_btn.setText(QtCompat.translate("findReplace", "Replace", None, -1)) + self.replaceAll_btn.setText(QtCompat.translate("findReplace", "Replace All", None, -1)) diff --git a/pw_multiScriptEditor/widgets/inputWidget.py b/pw_multiScriptEditor/widgets/inputWidget.py index c95ddd5..b640ca7 100644 --- a/pw_multiScriptEditor/widgets/inputWidget.py +++ b/pw_multiScriptEditor/widgets/inputWidget.py @@ -1,18 +1,13 @@ -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * +from Qt import QtCore, QtGui, QtWidgets + import re import jedi from pythonSyntax import syntaxHighLighter reload(syntaxHighLighter) import completeWidget reload(completeWidget) -import settingsManager -import managers +from .. import settingsManager +from .. import managers reload(managers) from pythonSyntax import design # import inspect @@ -23,13 +18,13 @@ indentLen = 4 minimumFontSize = 10 -escapeButtons = [Qt.Key_Return, Qt.Key_Enter, Qt.Key_Left, Qt.Key_Right, Qt.Key_Home, Qt.Key_End, Qt.Key_PageUp, Qt.Key_PageDown, Qt.Key_Delete, Qt.Key_Insert, Qt.Key_Escape] +escapeButtons = [QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter, QtCore.Qt.Key_Left, QtCore.Qt.Key_Right, QtCore.Qt.Key_Home, QtCore.Qt.Key_End, QtCore.Qt.Key_PageUp, QtCore.Qt.Key_PageDown, QtCore.Qt.Key_Delete, QtCore.Qt.Key_Insert, QtCore.Qt.Key_Escape] font_name = 'Lucida Console' -class inputClass(QTextEdit): - executeSignal = Signal() - saveSignal = Signal() - inputSignal = Signal() +class inputClass(QtWidgets.QTextEdit): + executeSignal = QtCore.Signal() + saveSignal = QtCore.Signal() + inputSignal = QtCore.Signal() def __init__(self, parent, desk=None): # https://github.com/davidhalter/jedi @@ -37,9 +32,9 @@ def __init__(self, parent, desk=None): super(inputClass, self).__init__(parent) self.p = parent self.desk = desk - self.setWordWrapMode(QTextOption.NoWrap) - self.document().setDefaultFont(QFont(font_name, minimumFontSize, QFont.Normal)) - metrics = QFontMetrics(self.document().defaultFont()) + self.setWordWrapMode(QtGui.QTextOption.NoWrap) + self.document().setDefaultFont(QtGui.QFont(font_name, minimumFontSize, QtGui.QFont.Normal)) + metrics = QtGui.QFontMetrics(self.document().defaultFont()) self.setTabStopWidth(4 * metrics.width(' ')) self.setAcceptDrops(True) self.fs = 12 @@ -54,12 +49,12 @@ def __init__(self, parent, desk=None): def focusOutEvent(self, event): self.saveSignal.emit() # self.completer.hideMe() - QTextEdit.focusOutEvent(self,event) + QtWidgets.QTextEdit.focusOutEvent(self,event) def hideEvent(self, event): self.completer.updateCompleteList() try: - QTextEdit.hideEvent(self,event) + QtWidgets.QTextEdit.hideEvent(self,event) except:pass def applyHightLighter(self, theme=None, qss=None): @@ -135,7 +130,7 @@ def moveCompleter(self): x = futureCompGeo.width() - i.width() y = futureCompGeo.height()+self.completer.lineHeight if (futureCompGeo.height()-i.height())>0 else 0 - pt = self.mapToGlobal(rec.bottomRight()) + QPoint(10-x, -y) + pt = self.mapToGlobal(rec.bottomRight()) + QtCore.QPoint(10-x, -y) # if managers.context == 'hou': # print self.mapToParent(self.geometry().topLeft()) self.completer.move(pt) @@ -149,8 +144,8 @@ def charBeforeCursor(self, cursor): def getCurrentIndent(self): cursor = self.textCursor() auto = self.charBeforeCursor(cursor) == ':' - cursor.movePosition(QTextCursor.MoveOperation.StartOfLine) - cursor.movePosition(QTextCursor.MoveOperation.EndOfLine,QTextCursor.KeepAnchor) + cursor.movePosition(QtGui.QTextCursor.MoveOperation.StartOfLine) + cursor.movePosition(QtGui.QTextCursor.MoveOperation.EndOfLine,QtGui.QTextCursor.KeepAnchor) line = cursor.selectedText() result = '' if line.strip(): @@ -166,7 +161,7 @@ def keyPressEvent(self, event): self.inputSignal.emit() parse = 0 # apply complete - if event.modifiers() == Qt.NoModifier and event.key() in [Qt.Key_Return , Qt.Key_Enter]: + if event.modifiers() == QtCore.Qt.NoModifier and event.key() in [QtCore.Qt.Key_Return , QtCore.Qt.Key_Enter]: if self.completer and self.completer.isVisible(): self.completer.applyCurrentComplete() return @@ -174,15 +169,15 @@ def keyPressEvent(self, event): else: add = self.getCurrentIndent() if add: - QTextEdit.keyPressEvent(self, event) + QtWidgets.QTextEdit.keyPressEvent(self, event) cursor = self.textCursor() cursor.insertText(add) self.setTextCursor(cursor) return # remove 4 spaces - elif event.modifiers() == Qt.NoModifier and event.key() == Qt.Key_Backspace: + elif event.modifiers() == QtCore.Qt.NoModifier and event.key() == QtCore.Qt.Key_Backspace: cursor = self.textCursor() - cursor.movePosition(QTextCursor.MoveOperation.StartOfLine,QTextCursor.KeepAnchor) + cursor.movePosition(QtGui.QTextCursor.MoveOperation.StartOfLine,QtGui.QTextCursor.KeepAnchor) line = cursor.selectedText() if line: p = r" $" @@ -194,25 +189,25 @@ def keyPressEvent(self, event): self.setTextCursor(cursor) parse = 1 #comment - elif event.modifiers() == Qt.AltModifier and event.key() == Qt.Key_Q: + elif event.modifiers() == QtCore.Qt.AltModifier and event.key() == QtCore.Qt.Key_Q: self.p.tab.comment() return # execute selected - elif event.modifiers() == Qt.ControlModifier and event.key() in [Qt.Key_Return , Qt.Key_Enter]: + elif event.modifiers() == QtCore.Qt.ControlModifier and event.key() in [QtCore.Qt.Key_Return , QtCore.Qt.Key_Enter]: if self.completer: self.completer.updateCompleteList() self.executeSignal.emit() return # ignore Shift + Enter - elif event.modifiers() == Qt.ShiftModifier and event.key() in [Qt.Key_Return , Qt.Key_Enter]: + elif event.modifiers() == QtCore.Qt.ShiftModifier and event.key() in [QtCore.Qt.Key_Return , QtCore.Qt.Key_Enter]: return # duplicate - elif event.modifiers() == Qt.ControlModifier and event.key() == Qt.Key_D: + elif event.modifiers() == QtCore.Qt.ControlModifier and event.key() == QtCore.Qt.Key_D: self.duplicate() self.update() return # increase indent - elif event.key() == Qt.Key_Tab: + elif event.key() == QtCore.Qt.Key_Tab: if self.completer: if self.completer.isVisible(): self.completer.applyCurrentComplete() @@ -225,7 +220,7 @@ def keyPressEvent(self, event): self.insertPlainText (' ' * indentLen) return # decrease indent - elif event.key() == Qt.Key_Backtab: + elif event.key() == QtCore.Qt.Key_Backtab: self.selectBlocks() self.moveSelected(False) if self.completer: @@ -237,18 +232,18 @@ def keyPressEvent(self, event): self.completer.updateCompleteList() self.setFocus() # go to completer - elif event.key() == Qt.Key_Down or event.key() == Qt.Key_Up: + elif event.key() == QtCore.Qt.Key_Down or event.key() == QtCore.Qt.Key_Up: if self.completer.isVisible(): self.completer.activateCompleter(event.key()) self.completer.setFocus() return # just close completer - elif not event.modifiers() == Qt.NoModifier and not event.modifiers() == Qt.ShiftModifier: + elif not event.modifiers() == QtCore.Qt.NoModifier and not event.modifiers() == QtCore.Qt.ShiftModifier: self.completer.updateCompleteList() else: parse = 1 - QTextEdit.keyPressEvent(self, event) + QtWidgets.QTextEdit.keyPressEvent(self, event) # start parse text if parse and event.text(): self.parseText() @@ -270,7 +265,7 @@ def moveSelected(self, inc): cursor.endEditBlock() newEnd = cursor.position() cursor.setPosition(start) - cursor.setPosition(newEnd, QTextCursor.KeepAnchor) + cursor.setPosition(newEnd, QtGui.QTextCursor.KeepAnchor) self.document().documentLayout().blockSignals(False) self.setTextCursor(cursor) self.update() @@ -283,9 +278,9 @@ def commentSelected(self): start = cursor.selectionStart() end = cursor.selectionEnd() cursor.setPosition(start) - cursor.movePosition(QTextCursor.MoveOperation.StartOfLine) - cursor.setPosition(end,QTextCursor.KeepAnchor) - cursor.movePosition(QTextCursor.MoveOperation.EndOfLine,QTextCursor.KeepAnchor) + cursor.movePosition(QtGui.QTextCursor.MoveOperation.StartOfLine) + cursor.setPosition(end,QtGui.QTextCursor.KeepAnchor) + cursor.movePosition(QtGui.QTextCursor.MoveOperation.EndOfLine,QtGui.QTextCursor.KeepAnchor) text = cursor.selection().toPlainText() self.document().documentLayout().blockSignals(False) # cursor.removeSelectedText() @@ -325,8 +320,8 @@ def fixLine(self, cursor, comp): pos = cursor.position() linePos = cursor.positionInBlock() - cursor.movePosition(QTextCursor.MoveOperation.StartOfLine) - cursor.movePosition(QTextCursor.MoveOperation.EndOfLine,QTextCursor.KeepAnchor) + cursor.movePosition(QtGui.QTextCursor.MoveOperation.StartOfLine) + cursor.movePosition(QtGui.QTextCursor.MoveOperation.EndOfLine,QtGui.QTextCursor.KeepAnchor) line = cursor.selectedText() cursor.removeSelectedText() @@ -351,7 +346,7 @@ def fixLine(self, cursor, comp): cursor.insertText(res) cursor.endEditBlock() cursor.clearSelection() - cursor.setPosition(pos+ofs,QTextCursor.MoveAnchor) + cursor.setPosition(pos+ofs,QtGui.QTextCursor.MoveAnchor) return cursor def duplicate(self): @@ -362,11 +357,11 @@ def duplicate(self): end = cursor.selectionEnd() cursor.setPosition(end) cursor.insertText(sel) - cursor.setPosition(end,QTextCursor.KeepAnchor) + cursor.setPosition(end,QtGui.QTextCursor.KeepAnchor) self.setTextCursor(cursor) else: # duplicate line - cursor.movePosition(QTextCursor.MoveOperation.StartOfLine) - cursor.movePosition(QTextCursor.MoveOperation.EndOfLine,QTextCursor.KeepAnchor) + cursor.movePosition(QtGui.QTextCursor.MoveOperation.StartOfLine) + cursor.movePosition(QtGui.QTextCursor.MoveOperation.EndOfLine,QtGui.QTextCursor.KeepAnchor) line = cursor.selectedText() cursor.clearSelection() cursor.insertText('\n'+line) @@ -394,9 +389,9 @@ def selectBlocks(self): cursor = self.textCursor() start, end = cursor.selectionStart(), cursor.selectionEnd() cursor.setPosition(start) - cursor.movePosition(QTextCursor.StartOfLine) - cursor.setPosition(end, QTextCursor.KeepAnchor) - cursor.movePosition(QTextCursor.EndOfLine, QTextCursor.KeepAnchor) + cursor.movePosition(QtGui.QTextCursor.StartOfLine) + cursor.setPosition(end, QtGui.QTextCursor.KeepAnchor) + cursor.movePosition(QtGui.QTextCursor.EndOfLine, QtGui.QTextCursor.KeepAnchor) self.setTextCursor(cursor) self.document().documentLayout().blockSignals(False) @@ -415,15 +410,15 @@ def addText(self, text): ########################### DROP def dragEnterEvent(self, event): event.acceptProposedAction() - QTextEdit.dragEnterEvent(self,event) + QtWidgets.QTextEdit.dragEnterEvent(self,event) def dragMoveEvent(self, event): event.acceptProposedAction() - QTextEdit.dragMoveEvent(self,event) + QtWidgets.QTextEdit.dragMoveEvent(self,event) def dragLeaveEvent(self, event): event.accept() - QTextEdit.dragLeaveEvent(self,event) + QtWidgets.QTextEdit.dragLeaveEvent(self,event) def dropEvent(self, event): event.acceptProposedAction() @@ -433,15 +428,15 @@ def dropEvent(self, event): namespace = self.p.namespace text = managers.dropEvents[managers.context](namespace, text, event) mim.setText(text) - QTextEdit.dropEvent(self,event) + QtWidgets.QTextEdit.dropEvent(self,event) else: - QTextEdit.dropEvent(self,event) + QtWidgets.QTextEdit.dropEvent(self,event) ################################################################ def wheelEvent(self, event): - if event.modifiers() == Qt.ControlModifier: + if event.modifiers() == QtCore.Qt.ControlModifier: if self.completer: self.completer.updateCompleteList() if event.delta() > 0: @@ -452,7 +447,7 @@ def wheelEvent(self, event): # self.zoomOut(1) # super(inputClass, self).wheelEvent(event) else: - QTextEdit.wheelEvent(self, event) + QtWidgets.QTextEdit.wheelEvent(self, event) def changeFontSize(self, up): if managers.context == 'hou': @@ -505,7 +500,7 @@ def mousePressEvent(self, event): # if event.button() == Qt.LeftButton: # super(inputClass, self).mousePressEvent(event) # else: - QTextEdit.mousePressEvent(self,event) + QtWidgets.QTextEdit.mousePressEvent(self,event) def selectWord(self, pattern, number, replace=None): text = self.toPlainText() @@ -516,7 +511,7 @@ def selectWord(self, pattern, number, replace=None): if number > len(indexis)-1: number = 0 cursor.setPosition(indexis[number][0]) - cursor.setPosition(indexis[number][1], QTextCursor.KeepAnchor) + cursor.setPosition(indexis[number][1], QtGui.QTextCursor.KeepAnchor) if replace: cursor.removeSelectedText() cursor.insertText(replace) diff --git a/pw_multiScriptEditor/widgets/numBarWidget.py b/pw_multiScriptEditor/widgets/numBarWidget.py index cafef46..e0c9ce2 100644 --- a/pw_multiScriptEditor/widgets/numBarWidget.py +++ b/pw_multiScriptEditor/widgets/numBarWidget.py @@ -1,15 +1,9 @@ -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * -import managers +from Qt import QtCore, QtGui, QtWidgets +from .. import managers -class lineNumberBarClass(QWidget): +class lineNumberBarClass(QtWidgets.QWidget): def __init__(self, edit, parent=None): - QWidget.__init__(self, parent) + QtWidgets.QWidget.__init__(self, parent) self.edit = edit self.highest_line = 0 self.setMinimumWidth(30) @@ -30,27 +24,27 @@ def update(self, *args): width = ((self.fontMetrics().width(str(self.highest_line)) + 7))*(fontSize/13.0) if self.width() != width and width > 10: self.setFixedWidth(width) - bg = self.palette().brush(QPalette.Normal,QPalette.Window).color().toHsv() + bg = self.palette().brush(QtGui.QPalette.Normal,QtGui.QPalette.Window).color().toHsv() v = bg.value() if v > 20: v = int(bg.value()*0.8) else: v = int(bg.value()*1.1) - self.bg = QColor.fromHsv(bg.hue(), bg.saturation(), v) - QWidget.update(self, *args) + self.bg = QtGui.QColor.fromHsv(bg.hue(), bg.saturation(), v) + QtWidgets.QWidget.update(self, *args) def paintEvent(self, event): contents_y = self.edit.verticalScrollBar().value() page_bottom = contents_y + self.edit.viewport().height() font_metrics = self.fontMetrics() current_block = self.edit.document().findBlock(self.edit.textCursor().position()) - painter = QPainter(self) + painter = QtGui.QPainter(self) line_count = 0 # Iterate over all text blocks in the document. block = self.edit.document().begin() if managers.context == 'hou': fontSize = self.edit.fs - font = QFont('monospace', fontSize*0.7) + font = QtGui.QFont('monospace', fontSize*0.7) offset = (font_metrics.ascent() + font_metrics.descent())/2 else: fontSize = self.edit.font().pointSize() @@ -59,7 +53,7 @@ def paintEvent(self, event): offset = font_metrics.ascent() + font_metrics.descent() color = painter.pen().color() painter.setFont(font) - align = Qt.AlignRight + align = QtCore.Qt.AlignRight while block.isValid(): line_count += 1 # The top left position of the block in the document @@ -69,21 +63,21 @@ def paintEvent(self, event): if position.y() == page_bottom: break - rec = QRect(0, + rec = QtCore.QRect(0, round(position.y()) - contents_y, self.width()-5, fontSize + offset) # draw line rect if block == current_block: - painter.setPen(Qt.NoPen) - painter.setBrush(QBrush(self.bg)) - painter.drawRect(QRect(0, + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtGui.QBrush(self.bg)) + painter.drawRect(QtCore.QRect(0, round(position.y()) - contents_y, self.width(), fontSize + (offset/2) )) # #restore color - painter.setPen(QPen(color)) + painter.setPen(QtGui.QPen(color)) # draw text painter.drawText(rec, align, str(line_count)) @@ -92,7 +86,7 @@ def paintEvent(self, event): block = block.next() self.highest_line = line_count painter.end() - QWidget.paintEvent(self, event) + QtWidgets.QWidget.paintEvent(self, event) def eventFilter(self, object, event): # Update the line numbers for all events on the text edit and the viewport. @@ -100,4 +94,4 @@ def eventFilter(self, object, event): if object in (self.edit, self.edit.viewport()): self.update() return False - return QWidget.eventFilter(object, event) \ No newline at end of file + return QtWidgets.QWidget.eventFilter(object, event) diff --git a/pw_multiScriptEditor/widgets/outputWidget.py b/pw_multiScriptEditor/widgets/outputWidget.py index 60a4305..2d073ff 100644 --- a/pw_multiScriptEditor/widgets/outputWidget.py +++ b/pw_multiScriptEditor/widgets/outputWidget.py @@ -1,29 +1,25 @@ -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * -from managers import context +from Qt import QtCore, QtGui, QtWidgets -class outputClass(QTextBrowser): + +from .. import managers + +class outputClass(QtWidgets.QTextBrowser): def __init__(self): super(outputClass, self).__init__() - self.setWordWrapMode(QTextOption.NoWrap) + self.setWordWrapMode(QtGui.QTextOption.NoWrap) self.fs = 14 - self.document().setDefaultFont(QFont("monospace", self.fs, QFont.Normal)) - metrics = QFontMetrics(self.document().defaultFont()) + self.document().setDefaultFont(QtGui.QFont("monospace", self.fs, QtGui.QFont.Normal)) + metrics = QtGui.QFontMetrics(self.document().defaultFont()) self.setTabStopWidth(4 * metrics.width(' ')) self.setMouseTracking(1) def showMessage(self, msg): - self.moveCursor(QTextCursor.End) + self.moveCursor(QtGui.QTextCursor.End) cursor = self.textCursor() cursor.insertText(str(msg)+'\n') self.setTextCursor(cursor) - self.moveCursor(QTextCursor.End) + self.moveCursor(QtGui.QTextCursor.End) self.ensureCursorVisible() def setTextEditFontSize(self, size): @@ -35,16 +31,16 @@ def setTextEditFontSize(self, size): def wheelEvent(self, event): - if event.modifiers() == Qt.ControlModifier: + if event.modifiers() == QtCore.Qt.ControlModifier: if event.delta() > 0: self.changeFontSize(True) else: self.changeFontSize(False) # super(outputClass, self).wheelEvent(event) - QTextBrowser.wheelEvent(self, event) + QtWidgets.QTextBrowser.wheelEvent(self, event) def changeFontSize(self, up): - if context == 'hou': + if managers.context == 'hou': if up: self.fs = min(30, self.fs+1) else: @@ -68,4 +64,4 @@ def changeFontSize(self, up): # # super(outputClass, self).mousePressEvent(event) # QTextBrowser.mousePressEvent(self, event) # else: - # QTextBrowser.mousePressEvent(self, event) \ No newline at end of file + # QTextBrowser.mousePressEvent(self, event) diff --git a/pw_multiScriptEditor/widgets/pythonSyntax/design.py b/pw_multiScriptEditor/widgets/pythonSyntax/design.py index 7123617..6f9aeac 100644 --- a/pw_multiScriptEditor/widgets/pythonSyntax/design.py +++ b/pw_multiScriptEditor/widgets/pythonSyntax/design.py @@ -1,4 +1,4 @@ -import settingsManager +from ... import settingsManager import os, re EditorStyle = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'style', 'completer.qss') diff --git a/pw_multiScriptEditor/widgets/pythonSyntax/syntaxHighLighter.py b/pw_multiScriptEditor/widgets/pythonSyntax/syntaxHighLighter.py index f30a440..1444039 100644 --- a/pw_multiScriptEditor/widgets/pythonSyntax/syntaxHighLighter.py +++ b/pw_multiScriptEditor/widgets/pythonSyntax/syntaxHighLighter.py @@ -1,18 +1,13 @@ -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * +from Qt import QtCore, QtGui + import re import design import keywords -class PythonHighlighterClass (QSyntaxHighlighter): +class PythonHighlighterClass (QtGui.QSyntaxHighlighter): def __init__(self, document, colors=None): - QSyntaxHighlighter.__init__(self, document) + QtGui.QSyntaxHighlighter.__init__(self, document) if colors: self.colors = colors @@ -20,8 +15,8 @@ def __init__(self, document, colors=None): self.colors = design.getColors() # Multi line comments - self.tri_single = (QRegExp("'''"), 1, self.getStyle(self.colors['docstring'])) - self.tri_double = (QRegExp('"""'), 2, self.getStyle(self.colors['docstring'])) + self.tri_single = (QtCore.QRegExp("'''"), 1, self.getStyle(self.colors['docstring'])) + self.tri_double = (QtCore.QRegExp('"""'), 2, self.getStyle(self.colors['docstring'])) rules = [] # defaults @@ -60,15 +55,15 @@ def __init__(self, document, colors=None): # Build a QRegExp for each pattern - self.rules = [(QRegExp(pat), index, fmt) for (pat, index, fmt) in rules] + self.rules = [(QtCore.QRegExp(pat), index, fmt) for (pat, index, fmt) in rules] # self.rehighlight() def getStyle(self, color, bold=False): - brush = QBrush( QColor(*color)) - f = QTextCharFormat() + brush = QtGui.QBrush( QtGui.QColor(*color)) + f = QtGui.QTextCharFormat() if bold: - f.setFontWeight( QFont.Bold ) + f.setFontWeight( QtGui.QFont.Bold ) f.setForeground( brush ) return f diff --git a/pw_multiScriptEditor/widgets/scriptEditor_UIs.py b/pw_multiScriptEditor/widgets/scriptEditor_UIs.py index 8c983a3..ba3242f 100644 --- a/pw_multiScriptEditor/widgets/scriptEditor_UIs.py +++ b/pw_multiScriptEditor/widgets/scriptEditor_UIs.py @@ -1,195 +1,189 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'D:\Dropbox\Dropbox\pw_prefs\RnD\tools\pw_scriptEditor\pw_multiScriptEditor\widgets\scriptEditor.ui' -# -# Created: Mon Apr 06 09:46:03 2015 -# by: pyside-uic 0.2.15 running on PySide 1.2.2 -# -# WARNING! All changes made in this file will be lost! - -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * - -class Ui_scriptEditor(object): - def setupUi(self, scriptEditor): - scriptEditor.setObjectName("scriptEditor") - scriptEditor.resize(800, 609) - self.centralwidget = QWidget(scriptEditor) - self.centralwidget.setObjectName("centralwidget") - self.verticalLayout_2 = QVBoxLayout(self.centralwidget) - self.verticalLayout_2.setSpacing(0) - self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) - self.verticalLayout_2.setObjectName("verticalLayout_2") - self.frame_2 = QFrame(self.centralwidget) - self.frame_2.setFrameShape(QFrame.NoFrame) - self.frame_2.setFrameShadow(QFrame.Raised) - self.frame_2.setObjectName("frame_2") - self.verticalLayout = QVBoxLayout(self.frame_2) - self.verticalLayout.setContentsMargins(3, 3, 3, 3) - self.verticalLayout.setObjectName("verticalLayout") - self.splitter = QSplitter(self.frame_2) - self.splitter.setOrientation(Qt.Vertical) - self.splitter.setObjectName("splitter") - self.verticalLayoutWidget = QWidget(self.splitter) - self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") - self.out_ly = QVBoxLayout(self.verticalLayoutWidget) - self.out_ly.setContentsMargins(0, 0, 0, 0) - self.out_ly.setObjectName("out_ly") - self.verticalLayoutWidget_2 = QWidget(self.splitter) - self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2") - self.in_ly = QVBoxLayout(self.verticalLayoutWidget_2) - self.in_ly.setContentsMargins(0, 0, 0, 0) - self.in_ly.setObjectName("in_ly") - self.verticalLayout.addWidget(self.splitter) - self.verticalLayout_2.addWidget(self.frame_2) - scriptEditor.setCentralWidget(self.centralwidget) - self.menubar = QMenuBar(scriptEditor) - self.menubar.setGeometry(QRect(0, 0, 800, 21)) - self.menubar.setObjectName("menubar") - self.file_menu = QMenu(self.menubar) - self.file_menu.setTearOffEnabled(True) - self.file_menu.setObjectName("file_menu") - self.help_menu = QMenu(self.menubar) - self.help_menu.setTearOffEnabled(True) - self.help_menu.setObjectName("help_menu") - self.tools_menu = QMenu(self.menubar) - self.tools_menu.setTearOffEnabled(True) - self.tools_menu.setObjectName("tools_menu") - self.options_menu = QMenu(self.menubar) - self.options_menu.setTearOffEnabled(True) - self.options_menu.setObjectName("options_menu") - self.theme_menu = QMenu(self.options_menu) - self.theme_menu.setTearOffEnabled(True) - self.theme_menu.setObjectName("theme_menu") - self.run_menu = QMenu(self.menubar) - self.run_menu.setTearOffEnabled(True) - self.run_menu.setObjectName("run_menu") - scriptEditor.setMenuBar(self.menubar) - self.toolBar = QToolBar(scriptEditor) - self.toolBar.setObjectName("toolBar") - scriptEditor.addToolBar(Qt.TopToolBarArea, self.toolBar) - self.clearHistory_act = QAction(scriptEditor) - self.clearHistory_act.setObjectName("clearHistory_act") - self.save_act = QAction(scriptEditor) - self.save_act.setObjectName("save_act") - self.load_act = QAction(scriptEditor) - self.load_act.setObjectName("load_act") - self.exit_act = QAction(scriptEditor) - self.exit_act.setObjectName("exit_act") - self.openManual_act = QAction(scriptEditor) - self.openManual_act.setObjectName("openManual_act") - self.quickHelp_act = QAction(scriptEditor) - self.quickHelp_act.setObjectName("quickHelp_act") - self.saveSeccion_act = QAction(scriptEditor) - self.saveSeccion_act.setObjectName("saveSeccion_act") - self.tabToSpaces_act = QAction(scriptEditor) - self.tabToSpaces_act.setObjectName("tabToSpaces_act") - self.spacesToTabs_act = QAction(scriptEditor) - self.spacesToTabs_act.setObjectName("spacesToTabs_act") - self.settingsFile_act = QAction(scriptEditor) - self.settingsFile_act.setObjectName("settingsFile_act") - self.editTheme_act = QAction(scriptEditor) - self.editTheme_act.setObjectName("editTheme_act") - self.shortcuts_act = QAction(scriptEditor) - self.shortcuts_act.setObjectName("shortcuts_act") - self.donate_act = QAction(scriptEditor) - self.donate_act.setObjectName("donate_act") - self.about_act = QAction(scriptEditor) - self.about_act.setObjectName("about_act") - self.execAll_act = QAction(scriptEditor) - self.execAll_act.setObjectName("execAll_act") - self.execSel_act = QAction(scriptEditor) - self.execSel_act.setObjectName("execSel_act") - self.copy_act = QAction(scriptEditor) - self.copy_act.setObjectName("copy_act") - self.cut_act = QAction(scriptEditor) - self.cut_act.setObjectName("cut_act") - self.paste_act = QAction(scriptEditor) - self.paste_act.setObjectName("paste_act") - self.find_act = QAction(scriptEditor) - self.find_act.setObjectName("find_act") - self.undo_act = QAction(scriptEditor) - self.undo_act.setObjectName("undo_act") - self.redo_act = QAction(scriptEditor) - self.redo_act.setObjectName("redo_act") - self.printHelp_act = QAction(scriptEditor) - self.printHelp_act.setObjectName("printHelp_act") - self.comment_cat = QAction(scriptEditor) - self.comment_cat.setObjectName("comment_cat") - self.file_menu.addAction(self.saveSeccion_act) - self.file_menu.addAction(self.save_act) - self.file_menu.addAction(self.load_act) - self.help_menu.addAction(self.openManual_act) - self.help_menu.addAction(self.shortcuts_act) - self.help_menu.addAction(self.donate_act) - self.help_menu.addSeparator() - self.help_menu.addAction(self.printHelp_act) - self.help_menu.addAction(self.about_act) - self.tools_menu.addAction(self.undo_act) - self.tools_menu.addAction(self.redo_act) - self.tools_menu.addSeparator() - self.tools_menu.addAction(self.copy_act) - self.tools_menu.addAction(self.cut_act) - self.tools_menu.addAction(self.paste_act) - self.tools_menu.addSeparator() - self.tools_menu.addAction(self.tabToSpaces_act) - self.tools_menu.addAction(self.comment_cat) - self.tools_menu.addAction(self.find_act) - self.theme_menu.addAction(self.editTheme_act) - self.theme_menu.addSeparator() - self.options_menu.addAction(self.theme_menu.menuAction()) - self.options_menu.addAction(self.settingsFile_act) - self.run_menu.addAction(self.execAll_act) - self.run_menu.addAction(self.execSel_act) - self.run_menu.addAction(self.clearHistory_act) - self.menubar.addAction(self.file_menu.menuAction()) - self.menubar.addAction(self.tools_menu.menuAction()) - self.menubar.addAction(self.run_menu.menuAction()) - self.menubar.addAction(self.options_menu.menuAction()) - self.menubar.addAction(self.help_menu.menuAction()) - self.toolBar.addAction(self.execAll_act) - self.toolBar.addAction(self.execSel_act) - self.toolBar.addAction(self.clearHistory_act) - - self.retranslateUi(scriptEditor) - QMetaObject.connectSlotsByName(scriptEditor) - - def retranslateUi(self, scriptEditor): - scriptEditor.setWindowTitle(QApplication.translate("scriptEditor", "MainWindow", None)) - self.file_menu.setTitle(QApplication.translate("scriptEditor", "File", None)) - self.help_menu.setTitle(QApplication.translate("scriptEditor", "Help", None)) - self.tools_menu.setTitle(QApplication.translate("scriptEditor", "Edit", None)) - self.options_menu.setTitle(QApplication.translate("scriptEditor", "Options", None)) - self.theme_menu.setTitle(QApplication.translate("scriptEditor", "Theme", None)) - self.run_menu.setTitle(QApplication.translate("scriptEditor", "Run", None)) - self.toolBar.setWindowTitle(QApplication.translate("scriptEditor", "toolBar", None)) - self.clearHistory_act.setText(QApplication.translate("scriptEditor", "Clear Output", None)) - self.save_act.setText(QApplication.translate("scriptEditor", "Save Script", None)) - self.load_act.setText(QApplication.translate("scriptEditor", "Load Script", None)) - self.exit_act.setText(QApplication.translate("scriptEditor", "Exit", None)) - self.openManual_act.setText(QApplication.translate("scriptEditor", "Manual", None)) - self.quickHelp_act.setText(QApplication.translate("scriptEditor", "Quick Help", None)) - self.saveSeccion_act.setText(QApplication.translate("scriptEditor", "Save session", None)) - self.tabToSpaces_act.setText(QApplication.translate("scriptEditor", "Tab to spaces", None)) - self.spacesToTabs_act.setText(QApplication.translate("scriptEditor", "Spaces to tab", None)) - self.settingsFile_act.setText(QApplication.translate("scriptEditor", "Open Settings Folder", None)) - self.editTheme_act.setText(QApplication.translate("scriptEditor", "Edit ...", None)) - self.shortcuts_act.setText(QApplication.translate("scriptEditor", "Show Shortcuts", None)) - self.donate_act.setText(QApplication.translate("scriptEditor", "Donate", None)) - self.about_act.setText(QApplication.translate("scriptEditor", "About", None)) - self.execAll_act.setText(QApplication.translate("scriptEditor", "Execute All", None)) - self.execSel_act.setText(QApplication.translate("scriptEditor", "Execute Selected", None)) - self.copy_act.setText(QApplication.translate("scriptEditor", "Copy", None)) - self.cut_act.setText(QApplication.translate("scriptEditor", "Cut", None)) - self.paste_act.setText(QApplication.translate("scriptEditor", "Paste", None)) - self.find_act.setText(QApplication.translate("scriptEditor", "Find and Replace", None)) - self.undo_act.setText(QApplication.translate("scriptEditor", "Undo", None)) - self.redo_act.setText(QApplication.translate("scriptEditor", "Redo", None)) - self.printHelp_act.setText(QApplication.translate("scriptEditor", "Print Help", None)) - self.comment_cat.setText(QApplication.translate("scriptEditor", "Comment", None)) - +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/Users/johannes/PycharmProjects/pw_MultiScriptEditor/pw_multiScriptEditor/widgets/scriptEditor.ui' +# +# Created: Sat Apr 28 00:29:02 2018 +# by: pyside2-uic running on PySide2 5.9.0a1.dev1524638381 +# +# WARNING! All changes made in this file will be lost! + +from Qt import QtCore, QtCompat, QtWidgets + +class Ui_scriptEditor(object): + def setupUi(self, scriptEditor): + scriptEditor.setObjectName("scriptEditor") + scriptEditor.resize(800, 609) + self.centralwidget = QtWidgets.QWidget(scriptEditor) + self.centralwidget.setObjectName("centralwidget") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget) + self.verticalLayout_2.setSpacing(0) + self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.frame_2 = QtWidgets.QFrame(self.centralwidget) + self.frame_2.setFrameShape(QtWidgets.QFrame.NoFrame) + self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame_2.setObjectName("frame_2") + self.verticalLayout = QtWidgets.QVBoxLayout(self.frame_2) + self.verticalLayout.setContentsMargins(3, 3, 3, 3) + self.verticalLayout.setObjectName("verticalLayout") + self.splitter = QtWidgets.QSplitter(self.frame_2) + self.splitter.setOrientation(QtCore.Qt.Vertical) + self.splitter.setObjectName("splitter") + self.verticalLayoutWidget = QtWidgets.QWidget(self.splitter) + self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") + self.out_ly = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) + self.out_ly.setContentsMargins(0, 0, 0, 0) + self.out_ly.setObjectName("out_ly") + self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.splitter) + self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2") + self.in_ly = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2) + self.in_ly.setContentsMargins(0, 0, 0, 0) + self.in_ly.setObjectName("in_ly") + self.verticalLayout.addWidget(self.splitter) + self.verticalLayout_2.addWidget(self.frame_2) + scriptEditor.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar() + self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) + self.menubar.setObjectName("menubar") + self.file_menu = QtWidgets.QMenu(self.menubar) + self.file_menu.setTearOffEnabled(True) + self.file_menu.setObjectName("file_menu") + self.help_menu = QtWidgets.QMenu(self.menubar) + self.help_menu.setTearOffEnabled(True) + self.help_menu.setObjectName("help_menu") + self.tools_menu = QtWidgets.QMenu(self.menubar) + self.tools_menu.setTearOffEnabled(True) + self.tools_menu.setObjectName("tools_menu") + self.options_menu = QtWidgets.QMenu(self.menubar) + self.options_menu.setTearOffEnabled(True) + self.options_menu.setObjectName("options_menu") + self.theme_menu = QtWidgets.QMenu(self.options_menu) + self.theme_menu.setTearOffEnabled(True) + self.theme_menu.setObjectName("theme_menu") + self.run_menu = QtWidgets.QMenu(self.menubar) + self.run_menu.setTearOffEnabled(True) + self.run_menu.setObjectName("run_menu") + scriptEditor.setMenuBar(self.menubar) + self.toolBar = QtWidgets.QToolBar(scriptEditor) + self.toolBar.setObjectName("toolBar") + scriptEditor.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) + self.clearHistory_act = QtWidgets.QAction(scriptEditor) + self.clearHistory_act.setObjectName("clearHistory_act") + self.save_act = QtWidgets.QAction(scriptEditor) + self.save_act.setObjectName("save_act") + self.load_act = QtWidgets.QAction(scriptEditor) + self.load_act.setObjectName("load_act") + self.exit_act = QtWidgets.QAction(scriptEditor) + self.exit_act.setObjectName("exit_act") + self.openManual_act = QtWidgets.QAction(scriptEditor) + self.openManual_act.setObjectName("openManual_act") + self.quickHelp_act = QtWidgets.QAction(scriptEditor) + self.quickHelp_act.setObjectName("quickHelp_act") + self.saveSeccion_act = QtWidgets.QAction(scriptEditor) + self.saveSeccion_act.setObjectName("saveSeccion_act") + self.tabToSpaces_act = QtWidgets.QAction(scriptEditor) + self.tabToSpaces_act.setObjectName("tabToSpaces_act") + self.spacesToTabs_act = QtWidgets.QAction(scriptEditor) + self.spacesToTabs_act.setObjectName("spacesToTabs_act") + self.settingsFile_act = QtWidgets.QAction(scriptEditor) + self.settingsFile_act.setObjectName("settingsFile_act") + self.editTheme_act = QtWidgets.QAction(scriptEditor) + self.editTheme_act.setObjectName("editTheme_act") + self.shortcuts_act = QtWidgets.QAction(scriptEditor) + self.shortcuts_act.setObjectName("shortcuts_act") + self.donate_act = QtWidgets.QAction(scriptEditor) + self.donate_act.setObjectName("donate_act") + self.about_act = QtWidgets.QAction(scriptEditor) + self.about_act.setObjectName("about_act") + self.execAll_act = QtWidgets.QAction(scriptEditor) + self.execAll_act.setObjectName("execAll_act") + self.execSel_act = QtWidgets.QAction(scriptEditor) + self.execSel_act.setObjectName("execSel_act") + self.copy_act = QtWidgets.QAction(scriptEditor) + self.copy_act.setObjectName("copy_act") + self.cut_act = QtWidgets.QAction(scriptEditor) + self.cut_act.setObjectName("cut_act") + self.paste_act = QtWidgets.QAction(scriptEditor) + self.paste_act.setObjectName("paste_act") + self.find_act = QtWidgets.QAction(scriptEditor) + self.find_act.setObjectName("find_act") + self.undo_act = QtWidgets.QAction(scriptEditor) + self.undo_act.setObjectName("undo_act") + self.redo_act = QtWidgets.QAction(scriptEditor) + self.redo_act.setObjectName("redo_act") + self.printHelp_act = QtWidgets.QAction(scriptEditor) + self.printHelp_act.setObjectName("printHelp_act") + self.comment_cat = QtWidgets.QAction(scriptEditor) + self.comment_cat.setObjectName("comment_cat") + self.file_menu.addAction(self.saveSeccion_act) + self.file_menu.addAction(self.save_act) + self.file_menu.addAction(self.load_act) + self.help_menu.addAction(self.openManual_act) + self.help_menu.addAction(self.shortcuts_act) + self.help_menu.addAction(self.donate_act) + self.help_menu.addSeparator() + self.help_menu.addAction(self.printHelp_act) + self.help_menu.addAction(self.about_act) + self.tools_menu.addAction(self.undo_act) + self.tools_menu.addAction(self.redo_act) + self.tools_menu.addSeparator() + self.tools_menu.addAction(self.copy_act) + self.tools_menu.addAction(self.cut_act) + self.tools_menu.addAction(self.paste_act) + self.tools_menu.addSeparator() + self.tools_menu.addAction(self.tabToSpaces_act) + self.tools_menu.addAction(self.comment_cat) + self.tools_menu.addAction(self.find_act) + self.theme_menu.addAction(self.editTheme_act) + self.theme_menu.addSeparator() + self.options_menu.addAction(self.theme_menu.menuAction()) + self.options_menu.addAction(self.settingsFile_act) + self.run_menu.addAction(self.execAll_act) + self.run_menu.addAction(self.execSel_act) + self.run_menu.addAction(self.clearHistory_act) + self.menubar.addAction(self.file_menu.menuAction()) + self.menubar.addAction(self.tools_menu.menuAction()) + self.menubar.addAction(self.run_menu.menuAction()) + self.menubar.addAction(self.options_menu.menuAction()) + self.menubar.addAction(self.help_menu.menuAction()) + self.toolBar.addAction(self.execAll_act) + self.toolBar.addAction(self.execSel_act) + self.toolBar.addAction(self.clearHistory_act) + + self.retranslateUi(scriptEditor) + QtCore.QMetaObject.connectSlotsByName(scriptEditor) + + def retranslateUi(self, scriptEditor): + scriptEditor.setWindowTitle(QtCompat.translate("scriptEditor", "MainWindow", None, -1)) + self.file_menu.setTitle(QtCompat.translate("scriptEditor", "File", None, -1)) + self.help_menu.setTitle(QtCompat.translate("scriptEditor", "Help", None, -1)) + self.tools_menu.setTitle(QtCompat.translate("scriptEditor", "Edit", None, -1)) + self.options_menu.setTitle(QtCompat.translate("scriptEditor", "Options", None, -1)) + self.theme_menu.setTitle(QtCompat.translate("scriptEditor", "Theme", None, -1)) + self.run_menu.setTitle(QtCompat.translate("scriptEditor", "Run", None, -1)) + self.toolBar.setWindowTitle(QtCompat.translate("scriptEditor", "toolBar", None, -1)) + self.clearHistory_act.setText(QtCompat.translate("scriptEditor", "Clear Output", None, -1)) + self.save_act.setText(QtCompat.translate("scriptEditor", "Save Script", None, -1)) + self.load_act.setText(QtCompat.translate("scriptEditor", "Load Script", None, -1)) + self.exit_act.setText(QtCompat.translate("scriptEditor", "Exit", None, -1)) + self.openManual_act.setText(QtCompat.translate("scriptEditor", "Manual", None, -1)) + self.quickHelp_act.setText(QtCompat.translate("scriptEditor", "Quick Help", None, -1)) + self.saveSeccion_act.setText(QtCompat.translate("scriptEditor", "Save session", None, -1)) + self.tabToSpaces_act.setText(QtCompat.translate("scriptEditor", "Tab to spaces", None, -1)) + self.spacesToTabs_act.setText(QtCompat.translate("scriptEditor", "Spaces to tab", None, -1)) + self.settingsFile_act.setText(QtCompat.translate("scriptEditor", "Open Settings Folder", None, -1)) + self.editTheme_act.setText(QtCompat.translate("scriptEditor", "Edit ...", None, -1)) + self.shortcuts_act.setText(QtCompat.translate("scriptEditor", "Show Shortcuts", None, -1)) + self.donate_act.setText(QtCompat.translate("scriptEditor", "Donate", None, -1)) + self.about_act.setText(QtCompat.translate("scriptEditor", "About", None, -1)) + self.execAll_act.setText(QtCompat.translate("scriptEditor", "Execute All", None, -1)) + self.execSel_act.setText(QtCompat.translate("scriptEditor", "Execute Selected", None, -1)) + self.copy_act.setText(QtCompat.translate("scriptEditor", "Copy", None, -1)) + self.cut_act.setText(QtCompat.translate("scriptEditor", "Cut", None, -1)) + self.paste_act.setText(QtCompat.translate("scriptEditor", "Paste", None, -1)) + self.find_act.setText(QtCompat.translate("scriptEditor", "Find and Replace", None, -1)) + self.undo_act.setText(QtCompat.translate("scriptEditor", "Undo", None, -1)) + self.redo_act.setText(QtCompat.translate("scriptEditor", "Redo", None, -1)) + self.printHelp_act.setText(QtCompat.translate("scriptEditor", "Print Help", None, -1)) + self.comment_cat.setText(QtCompat.translate("scriptEditor", "Comment", None, -1)) + diff --git a/pw_multiScriptEditor/widgets/shortcuts.py b/pw_multiScriptEditor/widgets/shortcuts.py old mode 100644 new mode 100755 index 1363c34..98f7217 --- a/pw_multiScriptEditor/widgets/shortcuts.py +++ b/pw_multiScriptEditor/widgets/shortcuts.py @@ -1,18 +1,13 @@ -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * +from Qt import QtCore, QtWidgets, QtCompat + import shortcuts_UIs import os -class shortcutsClass(QDialog, shortcuts_UIs.Ui_Dialog): +class shortcutsClass(QtWidgets.QDialog, shortcuts_UIs.Ui_Dialog): def __init__(self, parent): super(shortcutsClass, self).__init__(parent) self.setupUi(self) - self.table.horizontalHeader().setResizeMode(QHeaderView.Stretch) + QtCompat.setSectionResizeMode(self.table.horizontalHeader(), QtWidgets.QHeaderView.Stretch) self.table.setColumnCount(2) self.table.setHorizontalHeaderLabels(['Action', 'Shortcut']) self.read() @@ -25,11 +20,11 @@ def read(self): for i, l in enumerate(lines): self.table.insertRow(self.table.rowCount()) description, shortcut = l.split('>') - item = QTableWidgetItem(description) + item = QtWidgets.QTableWidgetItem(description) self.table.setItem(i, 0, item) - item.setFlags(Qt.ItemIsEnabled) - item = QTableWidgetItem(shortcut) - item.setFlags(Qt.ItemIsEnabled) + item.setFlags(QtCore.Qt.ItemIsEnabled) + item = QtWidgets.QTableWidgetItem(shortcut) + item.setFlags(QtCore.Qt.ItemIsEnabled) self.table.setItem(i, 1, item) else: self.table.hide() diff --git a/pw_multiScriptEditor/widgets/shortcuts_UIs.py b/pw_multiScriptEditor/widgets/shortcuts_UIs.py index 63a5b45..c88f40e 100644 --- a/pw_multiScriptEditor/widgets/shortcuts_UIs.py +++ b/pw_multiScriptEditor/widgets/shortcuts_UIs.py @@ -1,48 +1,42 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'D:\Dropbox\Dropbox\pw_prefs\RnD\tools\pw_scriptEditor\pw_multiScriptEditor\widgets\shortcuts.ui' -# -# Created: Wed Apr 01 13:33:16 2015 -# by: pyside-uic 0.2.15 running on PySide 1.2.2 -# -# WARNING! All changes made in this file will be lost! - -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * - -class Ui_Dialog(object): - def setupUi(self, Dialog): - Dialog.setObjectName("Dialog") - Dialog.resize(573, 391) - self.verticalLayout = QVBoxLayout(Dialog) - self.verticalLayout.setObjectName("verticalLayout") - self.table = QTableWidget(Dialog) - self.table.setObjectName("table") - self.table.setColumnCount(0) - self.table.setRowCount(0) - self.verticalLayout.addWidget(self.table) - self.label = QLabel(Dialog) - font = QFont() - font.setPointSize(12) - font.setWeight(75) - font.setItalic(False) - font.setBold(True) - self.label.setFont(font) - self.label.setFrameShape(QFrame.NoFrame) - self.label.setTextFormat(Qt.AutoText) - self.label.setAlignment(Qt.AlignCenter) - self.label.setObjectName("label") - self.verticalLayout.addWidget(self.label) - - self.retranslateUi(Dialog) - QMetaObject.connectSlotsByName(Dialog) - - def retranslateUi(self, Dialog): - Dialog.setWindowTitle(QApplication.translate("Dialog", "Shortcuts list", None)) - self.label.setText(QApplication.translate("Dialog", "Shortcut list hot found!!!", None)) - +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/Users/johannes/PycharmProjects/pw_MultiScriptEditor/pw_multiScriptEditor/widgets/shortcuts.ui' +# +# Created: Sat Apr 28 00:29:02 2018 +# by: pyside2-uic running on PySide2 5.9.0a1.dev1524638381 +# +# WARNING! All changes made in this file will be lost! + +from Qt import QtGui, QtCore, QtCompat, QtWidgets + +class Ui_Dialog(object): + def setupUi(self, Dialog): + Dialog.setObjectName("Dialog") + Dialog.resize(573, 391) + self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) + self.verticalLayout.setObjectName("verticalLayout") + self.table = QtWidgets.QTableWidget(Dialog) + self.table.setObjectName("table") + self.table.setColumnCount(0) + self.table.setRowCount(0) + self.verticalLayout.addWidget(self.table) + self.label = QtWidgets.QLabel(Dialog) + font = QtGui.QFont() + font.setPointSize(12) + font.setWeight(75) + font.setItalic(False) + font.setBold(True) + self.label.setFont(font) + self.label.setFrameShape(QtWidgets.QFrame.NoFrame) + self.label.setTextFormat(QtCore.Qt.AutoText) + self.label.setAlignment(QtCore.Qt.AlignCenter) + self.label.setObjectName("label") + self.verticalLayout.addWidget(self.label) + + self.retranslateUi(Dialog) + QtCore.QMetaObject.connectSlotsByName(Dialog) + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QtCompat.translate("Dialog", "Shortcuts list", None, -1)) + self.label.setText(QtCompat.translate("Dialog", "Shortcut list hot found!!!", None, -1)) + diff --git a/pw_multiScriptEditor/widgets/tabWidget.py b/pw_multiScriptEditor/widgets/tabWidget.py index 4f1eea3..3e42989 100644 --- a/pw_multiScriptEditor/widgets/tabWidget.py +++ b/pw_multiScriptEditor/widgets/tabWidget.py @@ -1,17 +1,13 @@ try: - from PySide.QtCore import * - from PySide.QtGui import * + from Qt import QtCore, QtGui, QtWidgets qt = 1 except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * qt = 2 import os import numBarWidget, inputWidget reload(inputWidget) reload(numBarWidget) -from managers import context +#from managers import context style = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'style', 'completer.qss') @@ -19,23 +15,23 @@ style=None -class tabWidgetClass(QTabWidget): +class tabWidgetClass(QtWidgets.QTabWidget): def __init__(self, parent=None): super(tabWidgetClass, self).__init__(parent) # ui self.setTabsClosable(True) self.setMovable(True) self.tabCloseRequested.connect(self.closeTab) - self.tabBar().setContextMenuPolicy(Qt.CustomContextMenu) + self.tabBar().setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.tabBar().customContextMenuRequested.connect(self.openMenu) - newTabButton = QPushButton(self) + newTabButton = QtWidgets.QPushButton(self) newTabButton.setMaximumWidth(30) - self.setCornerWidget(newTabButton, Qt.TopLeftCorner) - newTabButton.setCursor(Qt.ArrowCursor) + self.setCornerWidget(newTabButton, QtCore.Qt.TopLeftCorner) + newTabButton.setCursor(QtCore.Qt.ArrowCursor) newTabButton.setText('+') newTabButton.clicked.connect(self.addNewTab) newTabButton.setToolTip("Add Tab") - self.desk = QApplication.desktop() + self.desk = QtWidgets.QApplication.desktop() # variables self.p = parent self.lastSearch = [0, None] @@ -60,14 +56,14 @@ def closeTab(self, i): self.removeTab(i) def openMenu(self): - menu = QMenu(self) - menu.addAction(QAction('Rename Current Tab', self, triggered = self.renameTab)) - menu.exec_(QCursor.pos()) + menu = QtWidgets.QMenu(self) + menu.addAction(QtWidgets.QAction('Rename Current Tab', self, triggered = self.renameTab)) + menu.exec_(QtGui.QCursor.pos()) def renameTab(self): index = self.currentIndex() text = self.tabText(index) - result = QInputDialog.getText(self, 'New name', 'Enter New Name', text=text) + result = QtWidgets.QInputDialog.getText(self, 'New name', 'Enter New Name', text=text) if result[1]: self.setTabText(index, result[0]) @@ -81,7 +77,7 @@ def addNewTab(self, name='New Tab', text = None): cont.edit.saveSignal.connect(self.p.saveSession) # cont.edit.executeSignal.connect(self.p.executeSelected) self.addTab(cont, name) - cont.edit.moveCursor(QTextCursor.Start) + cont.edit.moveCursor(QtGui.QTextCursor.Start) self.setCurrentIndex(self.count()-1) return cont.edit @@ -156,18 +152,18 @@ def comment(self): self.current().commentSelected() def yes_no_question(self, question): - msg_box = QMessageBox(self) + msg_box = QtWidgets.QMessageBox(self) msg_box.setText(question) - yes_button = msg_box.addButton("Yes", QMessageBox.YesRole) - no_button = msg_box.addButton("No", QMessageBox.NoRole) + yes_button = msg_box.addButton("Yes", QtWidgets.QMessageBox.YesRole) + no_button = msg_box.addButton("No", QtWidgets.QMessageBox.NoRole) msg_box.exec_() return msg_box.clickedButton() == yes_button -class container(QWidget): +class container(QtWidgets.QWidget): def __init__(self, text, parent, desk): super(container, self).__init__() - hbox = QHBoxLayout(self) + hbox = QtWidgets.QHBoxLayout(self) hbox.setSpacing(0) hbox.setContentsMargins(0,0,0,0) # input widget @@ -191,7 +187,7 @@ def __init__(self, text, parent, desk): if __name__ == '__main__': - app = QApplication([]) + app = QtWidgets.QApplication([]) w = tabWidgetClass() w.show() - app.exec_() \ No newline at end of file + app.exec_() diff --git a/pw_multiScriptEditor/widgets/themeEditor.py b/pw_multiScriptEditor/widgets/themeEditor.py old mode 100644 new mode 100755 index 0eee310..80df032 --- a/pw_multiScriptEditor/widgets/themeEditor.py +++ b/pw_multiScriptEditor/widgets/themeEditor.py @@ -1,22 +1,18 @@ try: - from PySide.QtCore import * - from PySide.QtGui import * + from Qt import QtCore, QtGui, QtWidgets qt = 1 except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * qt = 2 import themeEditor_UIs as ui -import settingsManager +from .. import settingsManager import os from .pythonSyntax import design from .pythonSyntax import syntaxHighLighter from . import inputWidget -import icons_rcs +from .. import icons_rcs -class themeEditorClass(QDialog, ui.Ui_themeEditor): +class themeEditorClass(QtWidgets.QDialog, ui.Ui_themeEditor): def __init__(self, parent = None, desk=None): super(themeEditorClass, self).__init__(parent) self.setupUi(self) @@ -79,10 +75,10 @@ def updateColors(self): if x == 'textsize': self.textSize_spb.setValue(colors['textsize']) else: - item = QListWidgetItem(x) - pix = QPixmap(QSize(16,16)) - pix.fill(QColor(*colors[x])) - item.setIcon(QIcon(pix)) + item = QtWidgets.QListWidgetItem(x) + pix = QtGui.QPixmap(QtCore.QSize(16,16)) + pix.fill(QtGui.QColor(*colors[x])) + item.setIcon(QtGui.QIcon(pix)) item.setData(32, colors[x]) self.colors_lwd.addItem(item) self.updateExample() @@ -103,19 +99,19 @@ def getNewColor(self): items = self.colors_lwd.selectedItems() if items: item = items[0] - init = QColor(*item.data(32)) - color = QColorDialog.getColor(init ,self) + init = QtGui.QColor(*item.data(32)) + color = QtWidgets.QColorDialog.getColor(init ,self) if color.isValid(): newColor = (color.red(), color.green(), color.blue()) item.setData(32, newColor) - pix = QPixmap(QSize(16,16)) - pix.fill(QColor(*newColor)) - item.setIcon(QIcon(pix)) + pix = QtGui.QPixmap(QtCore.QSize(16,16)) + pix.fill(QtGui.QColor(*newColor)) + item.setIcon(QtGui.QIcon(pix)) self.updateExample() def saveTheme(self): text = self.themeList_cbb.currentText() or 'NewTheme' - name = QInputDialog.getText(self, 'Theme name', 'Enter Theme name', QLineEdit.Normal, text) + name = QtWidgets.QInputDialog.getText(self, 'Theme name', 'Enter Theme name', QtWidgets.QLineEdit.Normal, text) if name[1]: name = name[0] if name == 'default': @@ -163,7 +159,7 @@ def apply(self): self.accept() def keyPressEvent(self, event): - if event.key() == Qt.Key_Escape: + if event.key() == QtCore.Qt.Key_Escape: event.ignore() else: super(themeEditorClass, self).keyPressEvent(event) @@ -173,10 +169,10 @@ def current(self): # print self.colors_lwd.selectedItems()[0].data(32) def yes_no_question(self, question): - msg_box = QMessageBox(self) + msg_box = QtWidgets.QMessageBox(self) msg_box.setText(question) - yes_button = msg_box.addButton("Yes", QMessageBox.YesRole) - no_button = msg_box.addButton("No", QMessageBox.NoRole) + yes_button = msg_box.addButton("Yes", QtWidgets.QMessageBox.YesRole) + no_button = msg_box.addButton("No", QtWidgets.QMessageBox.NoRole) msg_box.exec_() return msg_box.clickedButton() == yes_button @@ -203,7 +199,7 @@ def makeSense(self, whatever): if __name__ == '__main__': - app = QApplication([]) + app = QtWidgets.QApplication([]) w = themeEditorClass() w.show() qss = os.path.join(os.path.dirname(os.path.dirname(__file__)),'style', 'style.css') diff --git a/pw_multiScriptEditor/widgets/themeEditor_UI.py b/pw_multiScriptEditor/widgets/themeEditor_UI.py index dcf05e3..71a78aa 100644 --- a/pw_multiScriptEditor/widgets/themeEditor_UI.py +++ b/pw_multiScriptEditor/widgets/themeEditor_UI.py @@ -7,83 +7,83 @@ # # WARNING! All changes made in this file will be lost! -from PyQt4 import QtCore, QtGui +from Qt import QtCore, QtCompat, QtWidgets try: - _fromUtf8 = QtCore.QString.fromUtf8 + _fromUtf8 = unicode except AttributeError: def _fromUtf8(s): return s try: - _encoding = QtGui.QApplication.UnicodeUTF8 + _encoding = QtWidgets.QApplication.UnicodeUTF8 def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig, _encoding) + return QtCompat.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig) + return QtCompat.translate(context, text, disambig) class Ui_themeEditor(object): def setupUi(self, themeEditor): themeEditor.setObjectName(_fromUtf8("themeEditor")) themeEditor.resize(724, 461) - self.verticalLayout_3 = QtGui.QVBoxLayout(themeEditor) + self.verticalLayout_3 = QtWidgets.QVBoxLayout(themeEditor) self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) - self.splitter = QtGui.QSplitter(themeEditor) + self.splitter = QtWidgets.QSplitter(themeEditor) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setObjectName(_fromUtf8("splitter")) - self.widget = QtGui.QWidget(self.splitter) + self.widget = QtWidgets.QWidget(self.splitter) self.widget.setObjectName(_fromUtf8("widget")) - self.verticalLayout_2 = QtGui.QVBoxLayout(self.widget) + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget) self.verticalLayout_2.setMargin(0) self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) - self.colors_lwd = QtGui.QListWidget(self.widget) + self.colors_lwd = QtWidgets.QListWidget(self.widget) self.colors_lwd.setObjectName(_fromUtf8("colors_lwd")) self.verticalLayout_2.addWidget(self.colors_lwd) - self.horizontalLayout_3 = QtGui.QHBoxLayout() + self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) - self.label = QtGui.QLabel(self.widget) + self.label = QtWidgets.QLabel(self.widget) self.label.setObjectName(_fromUtf8("label")) self.horizontalLayout_3.addWidget(self.label) - self.textSize_spb = QtGui.QSpinBox(self.widget) + self.textSize_spb = QtWidgets.QSpinBox(self.widget) self.textSize_spb.setMinimum(9) self.textSize_spb.setMaximum(25) self.textSize_spb.setProperty("value", 11) self.textSize_spb.setObjectName(_fromUtf8("textSize_spb")) self.horizontalLayout_3.addWidget(self.textSize_spb) - spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem) self.verticalLayout_2.addLayout(self.horizontalLayout_3) - self.layoutWidget = QtGui.QWidget(self.splitter) + self.layoutWidget = QtWidgets.QWidget(self.splitter) self.layoutWidget.setObjectName(_fromUtf8("layoutWidget")) - self.verticalLayout = QtGui.QVBoxLayout(self.layoutWidget) + self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget) self.verticalLayout.setMargin(0) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) - self.horizontalLayout = QtGui.QHBoxLayout() + self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) - self.themeList_cbb = QtGui.QComboBox(self.layoutWidget) + self.themeList_cbb = QtWidgets.QComboBox(self.layoutWidget) self.themeList_cbb.setObjectName(_fromUtf8("themeList_cbb")) self.horizontalLayout.addWidget(self.themeList_cbb) - self.save_btn = QtGui.QPushButton(self.layoutWidget) + self.save_btn = QtWidgets.QPushButton(self.layoutWidget) self.save_btn.setMaximumSize(QtCore.QSize(60, 16777215)) self.save_btn.setObjectName(_fromUtf8("save_btn")) self.horizontalLayout.addWidget(self.save_btn) - self.del_btn = QtGui.QPushButton(self.layoutWidget) + self.del_btn = QtWidgets.QPushButton(self.layoutWidget) self.del_btn.setMaximumSize(QtCore.QSize(60, 16777215)) self.del_btn.setObjectName(_fromUtf8("del_btn")) self.horizontalLayout.addWidget(self.del_btn) self.horizontalLayout.setStretch(0, 1) self.verticalLayout.addLayout(self.horizontalLayout) - self.preview_ly = QtGui.QVBoxLayout() + self.preview_ly = QtWidgets.QVBoxLayout() self.preview_ly.setObjectName(_fromUtf8("preview_ly")) self.verticalLayout.addLayout(self.preview_ly) self.verticalLayout.setStretch(1, 1) self.verticalLayout_3.addWidget(self.splitter) - self.horizontalLayout_2 = QtGui.QHBoxLayout() + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) - spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem1) - self.apply_btn = QtGui.QPushButton(themeEditor) + self.apply_btn = QtWidgets.QPushButton(themeEditor) self.apply_btn.setObjectName(_fromUtf8("apply_btn")) self.horizontalLayout_2.addWidget(self.apply_btn) self.verticalLayout_3.addLayout(self.horizontalLayout_2) diff --git a/pw_multiScriptEditor/widgets/themeEditor_UIs.py b/pw_multiScriptEditor/widgets/themeEditor_UIs.py index dd16a0e..2ce558e 100644 --- a/pw_multiScriptEditor/widgets/themeEditor_UIs.py +++ b/pw_multiScriptEditor/widgets/themeEditor_UIs.py @@ -1,93 +1,87 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'D:\Dropbox\Dropbox\pw_prefs\RnD\tools\pw_scriptEditor\widgets\themeEditor.ui' -# -# Created: Mon Mar 16 10:29:58 2015 -# by: pyside-uic 0.2.15 running on PySide 1.2.2 -# -# WARNING! All changes made in this file will be lost! - -try: - from PySide.QtCore import * - from PySide.QtGui import * -except: - from PySide2.QtCore import * - from PySide2.QtGui import * - from PySide2.QtWidgets import * - -class Ui_themeEditor(object): - def setupUi(self, themeEditor): - themeEditor.setObjectName("themeEditor") - themeEditor.resize(724, 461) - self.verticalLayout_3 = QVBoxLayout(themeEditor) - self.verticalLayout_3.setObjectName("verticalLayout_3") - self.splitter = QSplitter(themeEditor) - self.splitter.setOrientation(Qt.Horizontal) - self.splitter.setObjectName("splitter") - self.widget = QWidget(self.splitter) - self.widget.setObjectName("widget") - self.verticalLayout_2 = QVBoxLayout(self.widget) - self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) - self.verticalLayout_2.setObjectName("verticalLayout_2") - self.colors_lwd = QListWidget(self.widget) - self.colors_lwd.setObjectName("colors_lwd") - self.verticalLayout_2.addWidget(self.colors_lwd) - self.horizontalLayout_3 = QHBoxLayout() - self.horizontalLayout_3.setObjectName("horizontalLayout_3") - self.label = QLabel(self.widget) - self.label.setObjectName("label") - self.horizontalLayout_3.addWidget(self.label) - self.textSize_spb = QSpinBox(self.widget) - self.textSize_spb.setMinimum(9) - self.textSize_spb.setMaximum(25) - self.textSize_spb.setProperty("value", 11) - self.textSize_spb.setObjectName("textSize_spb") - self.horizontalLayout_3.addWidget(self.textSize_spb) - spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) - self.horizontalLayout_3.addItem(spacerItem) - self.verticalLayout_2.addLayout(self.horizontalLayout_3) - self.layoutWidget = QWidget(self.splitter) - self.layoutWidget.setObjectName("layoutWidget") - self.verticalLayout = QVBoxLayout(self.layoutWidget) - self.verticalLayout.setContentsMargins(0, 0, 0, 0) - self.verticalLayout.setObjectName("verticalLayout") - self.horizontalLayout = QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") - self.themeList_cbb = QComboBox(self.layoutWidget) - self.themeList_cbb.setObjectName("themeList_cbb") - self.horizontalLayout.addWidget(self.themeList_cbb) - self.save_btn = QPushButton(self.layoutWidget) - self.save_btn.setMaximumSize(QSize(60, 16777215)) - self.save_btn.setObjectName("save_btn") - self.horizontalLayout.addWidget(self.save_btn) - self.del_btn = QPushButton(self.layoutWidget) - self.del_btn.setMaximumSize(QSize(60, 16777215)) - self.del_btn.setObjectName("del_btn") - self.horizontalLayout.addWidget(self.del_btn) - self.horizontalLayout.setStretch(0, 1) - self.verticalLayout.addLayout(self.horizontalLayout) - self.preview_ly = QVBoxLayout() - self.preview_ly.setObjectName("preview_ly") - self.verticalLayout.addLayout(self.preview_ly) - self.verticalLayout.setStretch(1, 1) - self.verticalLayout_3.addWidget(self.splitter) - self.horizontalLayout_2 = QHBoxLayout() - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) - self.horizontalLayout_2.addItem(spacerItem1) - self.apply_btn = QPushButton(themeEditor) - self.apply_btn.setObjectName("apply_btn") - self.horizontalLayout_2.addWidget(self.apply_btn) - self.verticalLayout_3.addLayout(self.horizontalLayout_2) - self.verticalLayout_3.setStretch(0, 1) - - self.retranslateUi(themeEditor) - QMetaObject.connectSlotsByName(themeEditor) - - def retranslateUi(self, themeEditor): - themeEditor.setWindowTitle(QApplication.translate("themeEditor", "Code Theme Editor", None)) - self.label.setText(QApplication.translate("themeEditor", "Completer text size", None)) - self.save_btn.setText(QApplication.translate("themeEditor", "Save", None)) - self.del_btn.setText(QApplication.translate("themeEditor", "Del", None)) - self.apply_btn.setText(QApplication.translate("themeEditor", "Save", None)) - +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/Users/johannes/PycharmProjects/pw_MultiScriptEditor/pw_multiScriptEditor/widgets/themeEditor.ui' +# +# Created: Sat Apr 28 00:29:02 2018 +# by: pyside2-uic running on PySide2 5.9.0a1.dev1524638381 +# +# WARNING! All changes made in this file will be lost! + +from Qt import QtCore, QtCompat, QtWidgets + +class Ui_themeEditor(object): + def setupUi(self, themeEditor): + themeEditor.setObjectName("themeEditor") + themeEditor.resize(724, 461) + self.verticalLayout_3 = QtWidgets.QVBoxLayout(themeEditor) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.splitter = QtWidgets.QSplitter(themeEditor) + self.splitter.setOrientation(QtCore.Qt.Horizontal) + self.splitter.setObjectName("splitter") + self.widget = QtWidgets.QWidget(self.splitter) + self.widget.setObjectName("widget") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget) + self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.colors_lwd = QtWidgets.QListWidget(self.widget) + self.colors_lwd.setObjectName("colors_lwd") + self.verticalLayout_2.addWidget(self.colors_lwd) + self.horizontalLayout_3 = QtWidgets.QHBoxLayout() + self.horizontalLayout_3.setObjectName("horizontalLayout_3") + self.label = QtWidgets.QLabel(self.widget) + self.label.setObjectName("label") + self.horizontalLayout_3.addWidget(self.label) + self.textSize_spb = QtWidgets.QSpinBox(self.widget) + self.textSize_spb.setMinimum(9) + self.textSize_spb.setMaximum(25) + self.textSize_spb.setProperty("value", 11) + self.textSize_spb.setObjectName("textSize_spb") + self.horizontalLayout_3.addWidget(self.textSize_spb) + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_3.addItem(spacerItem) + self.verticalLayout_2.addLayout(self.horizontalLayout_3) + self.layoutWidget = QtWidgets.QWidget(self.splitter) + self.layoutWidget.setObjectName("layoutWidget") + self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setObjectName("verticalLayout") + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.themeList_cbb = QtWidgets.QComboBox(self.layoutWidget) + self.themeList_cbb.setObjectName("themeList_cbb") + self.horizontalLayout.addWidget(self.themeList_cbb) + self.save_btn = QtWidgets.QPushButton(self.layoutWidget) + self.save_btn.setMaximumSize(QtCore.QSize(60, 16777215)) + self.save_btn.setObjectName("save_btn") + self.horizontalLayout.addWidget(self.save_btn) + self.del_btn = QtWidgets.QPushButton(self.layoutWidget) + self.del_btn.setMaximumSize(QtCore.QSize(60, 16777215)) + self.del_btn.setObjectName("del_btn") + self.horizontalLayout.addWidget(self.del_btn) + self.horizontalLayout.setStretch(0, 1) + self.verticalLayout.addLayout(self.horizontalLayout) + self.preview_ly = QtWidgets.QVBoxLayout() + self.preview_ly.setObjectName("preview_ly") + self.verticalLayout.addLayout(self.preview_ly) + self.verticalLayout.setStretch(1, 1) + self.verticalLayout_3.addWidget(self.splitter) + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_2.addItem(spacerItem1) + self.apply_btn = QtWidgets.QPushButton(themeEditor) + self.apply_btn.setObjectName("apply_btn") + self.horizontalLayout_2.addWidget(self.apply_btn) + self.verticalLayout_3.addLayout(self.horizontalLayout_2) + self.verticalLayout_3.setStretch(0, 1) + + self.retranslateUi(themeEditor) + QtCore.QMetaObject.connectSlotsByName(themeEditor) + + def retranslateUi(self, themeEditor): + themeEditor.setWindowTitle(QtCompat.translate("themeEditor", "Code Theme Editor", None, -1)) + self.label.setText(QtCompat.translate("themeEditor", "Completer text size", None, -1)) + self.save_btn.setText(QtCompat.translate("themeEditor", "Save", None, -1)) + self.del_btn.setText(QtCompat.translate("themeEditor", "Del", None, -1)) + self.apply_btn.setText(QtCompat.translate("themeEditor", "Save", None, -1)) +