]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
confwiz: reworked confwiz look and feel
authorrobk-tahoe <robk-tahoe@allmydata.com>
Tue, 18 Mar 2008 23:15:36 +0000 (16:15 -0700)
committerrobk-tahoe <robk-tahoe@allmydata.com>
Tue, 18 Mar 2008 23:15:36 +0000 (16:15 -0700)
this changes the confwiz to have a look and feel much more consistent
with that of the innosetup installer it is launched within the context
of.  this applies, naturally, primarily to windows.

src/allmydata/gui/amdlogo.py [new file with mode: 0644]
src/allmydata/gui/confwiz.py

diff --git a/src/allmydata/gui/amdlogo.py b/src/allmydata/gui/amdlogo.py
new file mode 100644 (file)
index 0000000..7145692
--- /dev/null
@@ -0,0 +1,173 @@
+#----------------------------------------------------------------------
+# This file was generated by /opt/local/lib/python2.4/site-packages/wx-2.6-mac-unicode/wx/tools/img2py.py
+#
+from wx import ImageFromStream, BitmapFromImage
+from wx import EmptyIcon
+import cStringIO, zlib
+
+
+def getData():
+    return zlib.decompress(
+'x\xda\x01\n\x0f\xf5\xf0\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x006\x00\
+\x00\x006\x08\x06\x00\x00\x00\x8cEj\xdd\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\
+\x08d\x88\x00\x00\x0e\xc1IDATh\x81\xbd\x9ai\x90\\Wu\xc7\x7f\xe7\xde\xb7\xf42\
+\xdd\xa3\x914\x92,\x8d$[\xdedIF62\x8b\xb0\xc16\xa0\x02C\xb1\x84J\xfc!T\xd9\
+\x15\x12Ha\x96PT\x92\xa2\x12 \xa4(Hp\x80\xa2\x1c\x8aP\x10\x92\x94M\x9cJ\x11\
+\x02$\x80C\x19\x8c\xcdb\xcb\x06\x83\xe5\x05!,dY\x8b5\xb24\x9a\x99\xee\xe9\
+\xe5\xdd\xf7\xee\xbd\xf9\xf0^\xcf\xa6\x91=\xd3\x92y]\xb7\xdf\xed\xb7\x9cw\
+\xfe\xf7\x7f\xce\xb9\xe7\xdc\xd7\xc2\x1d\xaf\xe4\x05\xdf\xbc\x03\xef\xf3\xbe\
+\x00(\x10yA\x1f\x19\xbc`\x92m:\x80\xcb\xde\x80\xe8\x9daT=\xaf\x16\x96\x97\t\
+\x12\xa6\xce\xb6\x1bfj\x8c\xb4{\x10\xf86A\xf8sD\x9f\xf3\xc7\x9f{`.\x1b\xc1\
+\xd9?\xbct\xf9\x85\x7f\xbcs\xd5E\x97l]\xbe\x96-\xcb\xd6\xb1\xa2TE\x10\x8c\
+\xb3\x1ci\x9db\xcf\xd8!\xf6\x8e\x8f~\xe4\x87\xc7\x1e\xffv\xa33\xf6/\x84\xa5o\
+\x15t\x9e\x93M\xce\xa9)f\xc9\xf5C\xa5e\xb7\xdf\xb2\xf5\x8d#o\xbf\xe8%\x04\
+\xda`|\x82\xb1\x19\xd6[<\xa0D\x08$ R\x01\x91\xaap\xa8\xd9\xe63{\xbe\xc3w\x9e\
+~\xe0\xbfP\xfaOQ\xfa\xd4\xb9P\xe5\xdc\x01K;\xef\xbb~\xfdK?\xfb\xb1\x1do\rVWC\
+\x1ai\x13\xeb=R\xb0\xe0\x8bo_|{\x1c\x16GY\x87D\xaa\xca\xcf\x8e\x8d\xf2\xe7\
+\xbbo\xff\xf5d2y#:z\xecl\xd5\xd1\xbcm\xe3\xd9\xca\x80\xb4{\xcb\xef]x\xfd\xe7\
+?\xb3\xf3F\x15\x06\x1d\x1aY\x1b\x07\x80\xc7b\xc9\xc8\xf0bq\xe2\xc8HI\xc9\nX\
+\x8e\xae7\xb4|\x93\xf3\x87\xea\\\xb3z\xfb\xca\xdd\xc7\x0f\xbc\xb6\xd1\x9d\
+\xb8\x0f\x15\x1c?\x1b\x95\xd49\x00\xf5\xa6\xab\xd7]\xf9\xb9O\xbc\xec\xad4\
+\xdc\xb34l\x87\x8c\x0c\x83!\xa1K\x1c\x06\xd4\xc2A\xbc+\xd1\xcd4\xb1\xaa3\x18\
+\r\xe2\xb5\xa3K\x17C\x8a\xc1r\xcc\x9cd\xdd\n\xf8\xe8\xcb\xdevq=\xaa\xfd;\xde\
+V\xceF\xad\xb3c\xcc\xd9hYi\xd9]\xb7]s\xd3r\x82I\xda\xce\xe0p\xa4\xa4(-T\xf5\
+\x10\x0f\x8f\x9e\xe4\x0b\x8f\xfe\xd0}\xf1W\xf7M\xde\xb9\xff\xa1\xd6\x0f\x0f\
+\xef\xf3\xc7\xa7\xba\xd1\x05\xb5\x11\x06+!-\xdf"-\xd8\x9b\xb4S\\0\xb4\x8c5\
+\xa5\x91U\xf7>\xfd\x88\xa0\x83{\xfaU\xed\xec|,3\x1f\xfc\xe4\xce?\xfa\xcc\xeb\
+6\xad\xe7\xd9d\x0c\x10\x1c\x96\x81\xb0\xc2\xc4T\xc8\xc7v\xffw\xfa\xcb\x93\
+\xfbo\xc5e_C\x07\xcf\x80dx[\xc3\xda\xcd\x95\xb8\xfe\xc1?\xb8\xf8\xea\xd7\xdd\
+\xf4\xa2+9\xe9\x8e\xe1|\xe1\x7fb\x19\x94a>p\xf7\xb7\xba\xfb\xc7\x0f^\x82\x8e\
+\x0e\xf7\xa3Z\xff\x8c9\xbblye\xc5W\xdf\xb3\xfd\x9a\xda\x94?E\x86\xc7\x92\x11\
+\x06\x9a\xb1\xa6\xe6\xcf\xee\xbd\xe3\xe9\xdf\x8c\x1f|#Ax;:<\x8e\xa86\xa2\xba\
+(=\x89\x0e\x7f\x9b\xfa\xec\xab{\x8e\xed\xed4\xd3\xf05\xd7\x8c\\(\xe3n\x1c\
+\x8b#\x15\x8b\x0e\x1d\x1b\xe2\xf5\xc1=\x87\x9e8\x8aR\x0f\xf4\xa3^\xff>f\xd3K\
+\xae[\xbbem\xb9\xech{S\xf8TBU\x86\xf8\xa7G\x7f\xdc<\xd28z\x13ai\xf7\x19\xe7&\
+Q\x10\x97o\xfd\xc6\xbe{\xbf\xfc\xfd\x03\x07)G1F\x0c)\x19\'\xb3S\\\xbaf\x905\
+\x03\xc37\xe1l_sm\xff\xc0T\xf0\xb2k\xd7]\xca\x94\x9f*\x02\x80!\nC\xee9\xf4\
+\x14\xf7\x1e\xfa\xf9\x9dD\x95\x1f=\xbf\x10\x01\xa5\xfe\xea\xdb\xbf}\xf4H\xec\
+\x06I\xa4\x9b\x0f\x907L\x05c\xac\xa9\xd6\xb7\xe1\xdc\xd6\xbe\xd4\xeb\xe7&\
+\xbc\xa3\x1a\xd7^\xba\xb6^e\xd26HII0X\x0f\xdf=\xf8\x88G\xfc\x9d\x8b\x96\x15D\
+\xa7\xf6\x9e:t\xc7\xc1\x93M\x02\xad\xc9\xb9\xcf\xe8\xaa6k\xebu\x85\xf7\x9b\
+\xfaQ\xb1O`\x9e\x81\xa0t\x9e\x0e\x1d\x1d\xdf\xc5H\x8aQ\x06\xe3<\xe3\xdd\xce\
+\tD\xedY\x92<k\x9e\xdc?~\x12\xad4\xdd\x02\x9aQ\t+\xaaU\xf0\xd4\xfaQ\xb1\xef\
+\\QDTFF"\x06\xbc`\x8b\x8f\xc7w@\xd2%\t\xf3t\xdaiB&\n#\x06\x80\xc4\x1bJA\x00"\
+}\xe9x6I\xb0O\xc90\xa4\xf8"\xcc\xa7d\x90G\x8b\xa5f\xb3\x82\xd0\xe3\n\x0f\xc4\
+\x04\xb8\\=\xdf\x8frg\x95\xddgX\x12\x0cL\x03[\x1aQ\xb37\x87\xc3\xe0\x8a\x81\
+\xcaA:4\xfdf\xfcg\t,O\x9d@a\xb1\xa4\x92\xf5-\xcb\xe31\xa4$\xa4 `$\xc0\x11\
+\xf7-\xaf\x0f`\x1e\xbc\xc7{o32\x12RD\x14V2R\x9f\xe2\xbdsx\xdf\x9a\xae\x98\
+\x17%\xd2w\x1d.\x0fB\x85\x8f\x194\x0e\x0b\xdew\xf1\xbe n\xf1\xec-\x11\x98\
+\xbf\\\xbc~\xb7\x12U\x0e%\xdc\xe6\xc4c$A\xbc&##\xc3\x12H8\xac%\xbc\x03\x82\
+\xdc.\x0b]\x9eC%\x0f\\\x18\x10\x90\x15\xf3\xa1 \x18\x02\x14\x9a\x80\xe8\x16\
+\x91`W\xea\xd2\t\xc4\x7f\n\x91Ee\xfd\x8b\xcf\x15\xbd\xafT\xc2\xd2\x9e\xf7\
+\xed|\xd5E\xa5\x18B\x89\x08\xeb\x1d\x8e\xfa\xc3(\x14\x19\x19\xcbe\x05As9m\
+\xdb\xcdo\x91^\x15\x96\x7f\xfb9U\xd9\xac\xf3\xce\xb3\xacZ\xe6p\xe97\xb4\\\
+\x1b\x00-\x8a\xf5\xc9%L\xb53D{\xa4U\xe1\x8b\x0f\xdc\xff\xe5n\x96\xbck1\xeb%\
+\x8bg\xcc\xfbrIE\xab\xc2\x15\x934\xa3S8\x0f\xc6Z\x04\xe9ECF\xfd(zp\x14\xa4\
+\x07c\xee\xc7\xf5z2\xef\x8cx\x8e:\x8b\xcf\x8b\xb8\xfc:\xef\xd8[\xfa%\xaa"X\
+\x95\xb2\xa3\xbe\x93\x81\xa0\xb2\xa6\x9bv\x17\xb5\x10\xb4\x14S\xf4\x1e\x9f\
+\xb5\xad\xa1e\xf3\xb9\xeb4\xd5\xc5\x93\xbaY\x00\x168?\x1b$\xf3\xfa\xa7\x01\
+\xf7\x1eg=\xd6\xa5t2\x03\xf8EG\xa7%\x07\x8f\x9e\x1f\x80,8\xfan\xba\xfc\xef\
+\xa9\t^f\xc3\x98\xcb\xde\x82\x80\xe6]\x97a\xc8XZ\xc4]2\xb0\xb4\x17\xe2E\x9d\
+\xd1\xdc(\x94tx\x1c\xaeX\x1a\xf0 \x1e\xe7\x1d\xde\x83BOCu\xd3\x80`>\x7f9\xb0\
+\x94\x0c\xfb\x02\x02\x13H%\xc5HZ\x98\xe2lEr\x10^ \x9fn\xf3y\xa9\x16\x94Y/\
+\x1b\xf0I\x88\xb3\x1e\x15\x80\x89[\x1crG\xe8X\x83F\x9f\xc9p\xa7\x99\xcc\xc4\
+\x90\xc9\x0b\t\x8c\x9c\xb1\x04\x83\xa0\xe6<|\xae\xff8P\x8e\r\xb2\x91\xf2\xe8\
+\x08O\x1c\x18\xef\xec;1z\xa8\x9b\xa5\x9dZ\\\xaam[\xb3\xf6\x82\xcd\x9b\xd6\
+\xa9c+\xf6q\xd8\x1e\x01\x9f\xe7\xe2\xc5\xd0\xcc2\xe1\xbc\x97\xfenL1\x9d\xce6\
+\x98cF\xb3FYYv\xf8\x97\xb0\xfb\xa7\x1d\xee\x7f\xfa\xfe\x7f\xf5\xde|\n\xad\
+\x9f\x02I\xc7\xba\x93\xa5\x83\xe3\xcf\\\x1e\xed+\xff\xed\x9b\xb6m\x7f\xfd\
+\xa5WTx\xd8>B\xe4\xa3\x99\xfb\xe7\xc9LI\xb1K4\xc5%\x97-\xbd\xc4\xd7\x14&\x99\
+\x17\x993\xad--\xce\xf7\x9bxhw\x92\xfd\xf4\xa9\'\xfe\xc4\x07\xfe\x1d\x84\xd1\
+>\x946(\xe5\xd1\xbaC\x18=dTv\xc3\xd7\xf7\xfc\xecS\x13\x8f\xad\xe4\xe2\xf0\
+\x02Z\xd2\x99\x96\x99\x0f\xdd\x8c\xcc\x04C\xb6\xc4<ti\xc0|\xeec\x89\xf4\x96\
+\x02z\xf9x\xae@\x87\x84\xc1p\x00\xf3\xf4\n~\xbc\xff\xf1\xcf\x13\x85_9\xf3\
+\xd2\x80@(\x1f\xba\xeb\xd1}\xdf\r\x8f\x9e\x87U&\xaf\xed0\x18\xc9\xc8$\x9b\
+\xf6\xe7\xbc\xf4\xfc\x1d\xf8\x98!\x9d\xf6\xb1\x9e? \x1e#\x86\r\xeer\x1e:0q\
+\x14\xcdG\x9fW\x98(\x92\xac\xf5\xd9\x03\xbf\xed\xde`KN\x0e\x99ch\xad\xd1Z\
+\x13\xe8\x800\xd4\xe8@c\x83l\xc9\xa6\xd8\xb7\x8f\tz\xba\xf2r\xde\xd1\xcd\x12\
+&\x92\t\xa6:\xb0\xff\xd4\xb3\xf7\xa3usQ\x02\x95\xfc\xa81\x95=9\xe2\xd7_r\xc0\
+\x1d!\xf3\x96\xe98!\xf9\x9a\x8f\x04\xc2\x94\x9aZR\x01\xd3\x17c\xa9d\x08\x9en\
+\xdae\xb2\xdd\xa4c\xba\xb4M\x07/\x9e\xb6\xb1t2s\n\xb5H5D\xd2\xa9\xc4\x1c\xba\
+\xc0\xd7.A1c\xb9\xc5\xde\x03\xdez\xb2^\xbe\xb5\xc8\xad/\xc6Nu\'\xe8\xb4\x12\
+\x1a\x9d)\xbc\xf3\xd3\xcc\x89\x06\x15:B\xa5+\xc6g\x8b{\xb9\xe7=q\x10,K\x95\
+\x99\x0bj^\x7f\xa9\xef\t\x17\x1f<D\x10\x81c\xa7\x9ee\xf4\xc4I&[\xcd\xdc\xbbt\
+!E\xe5/.Me\x825\x03\x83\xdbX\xec\x08{\x7f\xf1P5\xdez\\?\x93\x83X\x80\xb5~\
+\x8a\xe8%EE\xef=If\xf2\xbbzU\xfb\xbc\xf6\xb8\xec\xe1\xb2u\x83W\x90\xf9\x9b\
+\x17\'4\xbc\xa5\xba*)?\xe9\x0e,(\xaf\xd7\xd4\x12\'\xa6%\xcfc\xa2\xe49\x158\
+\x94\x8e\xd2]\xfb\x94lZ\xbe\xeeV\xb2l\xcbs\n3\xe9\x8d/\xdfx\xfe;\xcc\xc8A\
+\x12\x9b\x9d&K\x04\x02%h\x05\x91,MU\x85\xcbXR\x19\xcf\x99A!\x80\x87_\x04\x0f\
+\xb1cG\xb4j]m\xf8\xfb8\xf7\x16 \x9a\'\xa1\x8as7o^\xbd\xe1\xf6\xda\xb6\xd1\
+\xfa\x83\xf6\xe1\x19\xb9\xcc\x00\x8a\x95\xa6\xac4\xe5~\x80\r\x95\x86rm\xb2dF\
+r\xbf\xa0\n\x1fifm\xfe7\xfa\x1a\xaf\xb868o\xf3\xf0\x9aob\xed\x85sdX\xfb\xcam\
+k\xd6\xfe\xdb\xc8\xd5\xc7\xe3{\xf4\xdd\xf9\xb8\x16\x7f$\x08\x95PR\x9a\x8a\
+\xd2T\x94\xa2\xac4\x15Q\x8b\x07f\x13\xc8\xba\xa8\xdf\xbc\xe5N\xee\xde\xf59v\
+\x0co\x81d\xe2y\xd9\x93y \xe6\xecg\xb5\xaeMyP\xdf\xcf\xb2\x81\xd8\xe2\x0b\
+\x93\xef\xc9\xf6\xe8z5\xe4W\xea\t\xac\xf3(\x81PT\xc1N\x0ej\xba/\x8a\x8aR\x84\
+\xa2xN\xcd\xbc\x83\xa4\xc1\x8e\xe1m|\xfd\xd5\x9fF\xad\x8c\x07y\xed\x9a\xab\
+\xb8{\xd7m\xfc\xc5\x15\xef\x04g\xc0-\x90I\xf7\xa4>\x0f[\xd3{\x05\x01\x01\xd6\
+\xb9\xa2\xba\xc9\xf2\x87\xbb\x0c\xbcx\xe7=\x91Dh\xc5i`\xcaJQ\x16\x9d\xb7\xe2\
+X\xfc\\\xf1\xde\xa5\xe02>\xfc\xe2[\xf8\xc1\xae\xdbx\xdb\x86W\xcd\x04\x8f\xa1\
+\xa8\xc6\xad;\xde\xcb\xdf]\xf5~b\x15\x805,h\x9a\xb3\x810o\xbf\xd0\xfc\x83@\
+\xda\xe6\xca\x95\x97\xf1\x8d\xeb\xff\x9e\xd5\x95a\xb0\x1d\x04(\x89\xa2\xa4d\
+\x06Laz%\xd13\xfd\x02Xx&S\xb4\t5]\xe2\x9f\xaf\xfe\x08\x1f\xbf\xf2]\x0c\x86U`\
+\xd6\x04\xed\x8b7\xfc\x1f\xda\xfav^\xber\x0b7\xde\xf7\xd7\x9ch=\x0bau\x16]\
+\xcf\x01j\xa1=\xd0\xb1\t\xdbV]\x9e\xdd\xf5\x9aO\xb3:\x1eb\xa4\xba\x8a7\xfc\
+\xdf\x07l\xe6\xed\x1cv\x02\x84@\x84@)\xc2^_\x84P\x14\xa2\xdc\xc2>\x96\xb6X_\
+\x1b\xe1?\xaf\xfd$;\x87\xe7\xbem\x9asuo\x01\xe5\xba\xd5Wr\xf7\xae\xdbx\xf1\
+\xf0VH\x17H\xf9\x16\xf0\xa9\x85\x9a\x13\x8f\x88\xf0\x89\xed\xef\xde\xba:\x1c\
+\xba\xcc\x18\xf3\xa2\xab\x96_z\xe9\x87\xb7\xbfk\x93\xb1)%Q\xd3&X\x99\xe3SE\
+\xf0(\x98\xab(M4\xdf\x14\xcd\x14\xaf\x1d\xb9\x86\x9f\xdc\xf0%v\x0eo\xc5\xcf\
+\x8b\rgL\xa9\xb6\x0f]\xc4\xf7v\xdd\xc6\x9b\xef\xf9K\x1ex\xe6A@Ci`f(\x16J\x7f\
+\xe6\x1d\xd7J\x88t(\xc7\xf6\x1e\x1c\xf9\xc5A\xd5\xed8\x13\r\xe8R\xb7\xd1<q^\
+\xb4,\x98ez\x8a\x00U0T0\x85B\x17\xbf\x95rD*_B \xeb\x02\x96\xb7n\xba\x81;\xaf\
+\xf9\x1b\xcaA\x8cs\x0e\x99\x07\xfc\x8c\xc0\xbc\xf7\xac\x8c\x07\xf9\xc1\xae\
+\x7f\xe4+\xfb\xff\x87\xbb\x8e>\x90\xed>\xb57\x17\x9e\x17\xcf\x0b\x9a\xa0\x00\
+Z\xf2\t\xad\xa2\x02\x9c\xf5\xf2\x1f\x8f|\xef\xa2\x9f\xd8\xc1r\x8a\x0b#\xb4\
+\xd9\x1b\x9e\xd8\xa8^\xa1(\xab\x80\xb2\xe4>\xd53\xbd@f\x9b\xa2"\x14A\xab\xfc\
+\xbdK\xa4Bw\xe5\xca\xcd\xbcf\xddN\xfe\xe1\xc5\xef\xc9\xad\xc2-\x9c\xba=o\x12\
+\\\xd6\x11\xef\xdd\xfc\xfb\xdc\xbc\xe9\x8d[\xae\xf8\xee\xcdq\xc7\xdb\x05}I\
+\x04\x02\x99\x19u\xb0\x04\xde\xb3}d\xa5:p\xdd\xd8\xfb\x0f\xabg\x11\xc9\xff\
+\xa73h\x85\xcd\xabVq\x18OE)b\xd1\xd3L\x05"\x04\xa89\xbf5\x1a\xe3\x12\xae^\
+\xb9m\xe5\xd7\xae\xfd\xf8 0\tg\x06u\x1a\xb0YtF"Ru\xceU\xad\xb55o\xddUGN<s\
+\xb9sN\xc9\xbc$U\x15\x0c\x85\xd2SF\x15\xca\x05L\xb81~5\xf2MJ\x1b\x03\x02a\
+\x96\xb9)\x8exG\xcb6\xa9\xaa\x88h\xfa\x1eE\xa0\xa4`,?&\x80+\x1e\xa8\xad\xaci\
+O\xb4\xde\x19V\xc2GD\xa9\x03Z\xeb)\x11i\x03m`\x0e\xca\x1e\xb0\x92snU\x9a\xa6\
+\xf5$I\x96w:\x9dz\xab\xd5\x8a\x9b\xcd\xa6dY6X\n\xa2mO\x9e8\x14Yk\x85"WT\xc8\
+\xb4\x0f\x04s\x80I\x11\xe1\x14\x81@\xc3\x8d\xd3\xf1s#]\xcf\xc4b\x15\x10\x8a\
+\x9ecz\x81\xca\xef\x9f?\xd1(\xa5i6\x9a\xfa\xb1\xc7\x1f[S\xaeW\xaeK\x92d\xa8Z\
+\xadR\xadV\xd3j\xb5\xda)\x97\xcb\xe3Q\x14\x8d\x07A0."\'\x03\xa0j\x8cyu\xa3\
+\xd1\x18h4\x1a\xae\xd1h\xf8F\xa3\xe1\x9a\xcd\xa6o4\x1a\xb6\xd3\xe94W\xad\x18\
+n\x9cl\x8f\r{\xed\xf1\x92\x9bb \xbeh\x85\t\xe2g\xd8\x12!\x14?\xcb4)\x02\x820\
+;@\x04\xe2\xa6\xaf\x0b\x11\xb4\xf8\x82\xa1|\xeb\xc59G\x8a(\x8f1\t\xa3\xc7\
+\x8f\xdb\xe4h\xf7\xe4T\xab\x95\x0e\x0e\x0e\xaaZ\xad\xa6\xeb\xf5z\xad^\xaf/\
+\xab\xd7\xeb\x9b\xea\xf5\xba\x0c\x0c\x0c\xec\x0b\x00\xa3\x94:\x1cE\xd1\x868\
+\x8eK\xa5RI\x8c1:MSo\x8c\x91$I\xd2\xb1\xb1\xb1_\xeb\x01\x1d\'>\x8d\xb6\x84\
+\x1b9/.\x11\xf9`\xc6\x07z\x0e\xaf\x04=\xcb\x8cr\xff\x10B\xa5\x08\n\x8659@M\
+\xce\x8c.\xda\xe9\xa9\xc0\xec\xf0\xed(\xf9\x01\x8cX\xdd\xedt\x9e\x9el5\x8e\
+\xd5\xea5]*\x95T\xa9T\x92R\xa9$q\x1c\xfb8\x8em\x18\x86\x13\xc0\xa8\xf8\xfc%\
+\x1e@\xd997\x94\xa6i\xd9\x183\x90$\xc9`\xb7\xdb\xad\xb4\xdb\xed\xb85\xd5R&1\
+\xfa\x0b\x8d\xbbnzB\xff\xfa\xf5\x95(\x0e\x05\x01\xe7g\xe6\x0f\xef\xe7\x0c\
+\xb4\xf4z\x02\xd2\xfb\xd7\xac\xe4g\xe6\xc4\x1e\x99\x03J$wt\x11\x11z\xcd{\xe7\
+&Mbn\x90W}\xe9\xcd\x03/\xf9~X\x8d\x83J\xa5\x92V*\x95N\x1c\xc7SQ\x14M\x86a\
+\xd8\t\xc3\xb0\xa9\x94\x1a\xf7\xde\xfbi`\xb3\'\xb8\\\x98\x87\xbc\x9c\x8c\x9d\
+seA\xa241\xe1c\x13\x07\xd7g\xdeV\xc51d\xad\xad\xa7Y6`\x12S\xeb&\xddJ\x92$a\
+\x92\x18mR#i\x9ab3+\xd6fX\xe7\xe6\xc8W"(\xad\t\x82\x80 \x08|\x18\x86>\x8a"\
+\x17\xc7\xb1\x8d\xe38)\x94m*\xa5\xa6\xb4\xd6\xe3\x99\xb8F=\xa8\xb4/\x1f\xdax\
+\xc4k\xb1\xa2\xa4\x0bt\x94Rf\xb6\xee\xbd\x81\x008\r\xd8\xec\xbd\xf7y\xe6\xe0\
+\x9c#\x08\x02lf\tu\x98\x87\xc2\xccA\xa0f\x87\xfc*\x8e\xaa\xcf\xec\x80s\xae\
+\x92eY\xd9Z\x1b9\xe7\x94sN\x9cs\xd2{\xb8R\xca+\xa5\x9cR\xcaj\xad;A\x10t\x95\
+\xd6-D\x9ahZ\x90\xaf\x8ezc\x11\xa5 \x10|j\xb12W75\xaf\xacVJM\x03\xfb\x7f\xee\
+r\xc9\xfc\x835!h\x00\x00\x00\x00IEND\xaeB`\x82`\xcd|Q' )
+
+def getBitmap():
+    return BitmapFromImage(getImage())
+
+def getImage():
+    stream = cStringIO.StringIO(getData())
+    return ImageFromStream(stream)
+
+def getIcon():
+    icon = EmptyIcon()
+    icon.CopyFromBitmap(getBitmap())
+    return icon
+
index c5a4c61030e766522aabbee10cd48227fed89965..6ef06af9e3808c4b0f99642f4abf14cd7dcc3678 100644 (file)
@@ -22,7 +22,8 @@ from allmydata.util.assertutil import precondition
 from allmydata import uri
 import allmydata
 
-import amdicon
+#import amdicon
+import amdlogo
 
 import foolscap
 from twisted.python import usage
@@ -194,7 +195,7 @@ class ConfWizApp(wx.App):
         try:
             wx.InitAllImageHandlers()
 
-            self.login_frame = LoginFrame(self)
+            self.login_frame = WizardFrame(self, LoginPanel)
             self.login_frame.CenterOnScreen()
             self.SetTopWindow(self.login_frame)
             #self.SetExitOnFrameDelete(True)
@@ -207,7 +208,7 @@ class ConfWizApp(wx.App):
     def swap_to_register_frame(self):
         try:
             self.login_frame.Show(False)
-            self.regiser_frame = RegisterFrame(self)
+            self.regiser_frame = WizardFrame(self, RegisterPanel)
             self.regiser_frame.CenterOnScreen()
             self.SetTopWindow(self.regiser_frame)
             self.SetExitOnFrameDelete(True)
@@ -215,55 +216,48 @@ class ConfWizApp(wx.App):
         except:
             DisplayTraceback('config wizard threw an exception')
 
-class LoginFrame(wx.Frame):
-    def __init__(self, app):
-        title = 'Allmydata Config Wizard'
+class WizardFrame(wx.Frame):
+    def __init__(self, app, panel_class):
+        #title = 'Allmydata Config Wizard'
+        title = 'Setup - Allmydata 3.0'
         wx.Frame.__init__(self, None, -1, title)
         self.app = app
-        self.SetIcon(amdicon.getIcon())
+        self.SetIcon(amdlogo.getIcon())
         self.Bind(wx.EVT_CLOSE, self.close)
 
-        background = wx.Panel(self, -1)
-        background.SetSizeHints(500, 360, 600, 800)
-        background.parent = self
-        self.login_panel = LoginPanel(background, app)
-        self.reg_btn_panel = RegisterButtonPanel(background, app)
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        background_sizer = wx.BoxSizer(wx.VERTICAL)
-        background_sizer.Add(wx.Size(2,2), 10, wx.EXPAND | wx.ALL, 26)
-        background_sizer.Add(self.login_panel, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 26)
-        background_sizer.Add(wx.Size(2,2), 10, wx.EXPAND | wx.ALL, 26)
-        background_sizer.Add(self.reg_btn_panel, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 26)
-        background.SetSizer(background_sizer)
-        sizer.Add(background, 0, wx.EXPAND | wx.ALL, 0)
-        self.SetSizer(sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        self.Layout()
+        self.SetSizeHints(500, 360, 600, 800)
 
-    def close(self, event):
-        self.Show(False)
-        self.app.ExitMainLoop()
+        banner = wx.Panel(self, -1)
+        banner.SetSize((496,58))
+        banner.SetBackgroundColour(wx.WHITE)
+        banner_label = wx.StaticText(banner, -1, 'Sign in to your account')
 
-class RegisterFrame(wx.Frame):
-    def __init__(self, app):
-        title = 'Allmydata Config Wizard'
-        wx.Frame.__init__(self, None, -1, title)
-        self.app = app
-        self.SetIcon(amdicon.getIcon())
-        self.Bind(wx.EVT_CLOSE, self.close)
+        banner_icon = wx.StaticBitmap(banner, -1, amdlogo.getBitmap())
 
-        background = wx.Panel(self, -1)
-        background.SetSizeHints(500, 360, 600, 800)
+        banner_sizer = wx.BoxSizer(wx.HORIZONTAL)
+        banner_sizer.Add(banner_label, 1, wx.EXPAND | wx.ALL, 12)
+        banner_sizer.Add(banner_icon, 0, wx.ALL, 12)
+        banner.SetSizer(banner_sizer)
+        banner.SetAutoLayout(True)
+
+        background = wx.Panel(self, -1, style=wx.SIMPLE_BORDER)
         background.parent = self
-        self.register_panel = RegisterPanel(background, app)
+
+        button_panel = wx.Panel(self, -1)
+        button_panel.SetSize((496, 64))
+
+        self.panel = panel_class(background, button_panel, app)
         sizer = wx.BoxSizer(wx.VERTICAL)
         background_sizer = wx.BoxSizer(wx.VERTICAL)
-        background_sizer.Add(wx.Size(2,2), 10, wx.EXPAND | wx.ALL, 26)
-        background_sizer.Add(self.register_panel, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 26)
-        background_sizer.Add(wx.Size(2,2), 10, wx.EXPAND | wx.ALL, 26)
+        background_sizer.Add(wx.Size(2,2), 0, wx.EXPAND | wx.ALL, self.panel.padding)
+        background_sizer.Add(self.panel, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 26)
+        background_sizer.Add(wx.Size(2,2), 0, wx.EXPAND | wx.ALL, self.panel.padding)
         background.SetSizer(background_sizer)
+
+
+        sizer.Add(banner, 0, wx.EXPAND | wx.HORIZONTAL, 0)
         sizer.Add(background, 0, wx.EXPAND | wx.ALL, 0)
+        sizer.Add(button_panel, 0, wx.EXPAND | wx.HORIZONTAL, 0)
         self.SetSizer(sizer)
         self.SetAutoLayout(True)
         self.Fit()
@@ -275,7 +269,9 @@ class RegisterFrame(wx.Frame):
 
 
 class LoginPanel(wx.Panel):
-    def __init__(self, parent, app):
+    padding = 26
+
+    def __init__(self, parent, button_panel, app):
         wx.Panel.__init__(self, parent, -1)
         self.parent = parent
         self.app = app
@@ -286,24 +282,36 @@ class LoginPanel(wx.Panel):
         self.pass_label = wx.StaticText(self, -1, 'Password')
         self.user_field = wx.TextCtrl(self, -1, u'', size=(260,-1))
         self.pass_field = wx.TextCtrl(self, -1, u'', size=(260,-1), style=wx.TE_PASSWORD)
-        self.login_button = wx.Button(self, -1, 'Sign In')
         self.warning_label = wx.StaticText(self, -1, '')
         self.warning_label.SetOwnForegroundColour(wx.RED)
         wx.EVT_CHAR(self.user_field, self.on_user_entry)
         wx.EVT_CHAR(self.pass_field, self.on_pass_entry)
-        self.Bind(wx.EVT_BUTTON, self.on_login, self.login_button)
-        login_sizer = wx.FlexGridSizer(3, 2, 5, 4)
+        login_sizer = wx.FlexGridSizer(2, 2, 5, 4)
         login_sizer.Add(self.user_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
         login_sizer.Add(self.user_field, 0, wx.EXPAND | wx.ALL, 2)
         login_sizer.Add(self.pass_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
         login_sizer.Add(self.pass_field, 0, wx.EXPAND | wx.ALL, 2)
-        login_sizer.Add(wx.Size(2,2), 0, wx.ALIGN_RIGHT | wx.ALL, 2)
-        login_sizer.Add(self.login_button, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
         self.sizer.Add(login_sizer, 1, wx.EXPAND | wx.ALL, 2)
         self.sizer.Add(self.warning_label, 0, wx.CENTER | wx.ALL, 2)
         self.SetSizer(self.sizer)
         self.SetAutoLayout(True)
 
+        self.reg_label = wx.StaticText(button_panel, -1, "Don't have an account?")
+        self.reg_button = wx.Button(button_panel, -1, 'Create Account')
+        self.login_button = wx.Button(button_panel, -1, 'Sign In')
+        button_panel.Bind(wx.EVT_BUTTON, self.on_reg_button, self.reg_button)
+        button_panel.Bind(wx.EVT_BUTTON, self.on_login, self.login_button)
+        btn_sizer = wx.BoxSizer(wx.HORIZONTAL)
+        btn_sizer.Add(wx.Size(2,2), 1, wx.EXPAND | wx.ALL, 12)
+        btn_sizer.Add(self.reg_label, 0, wx.ALIGN_RIGHT | wx.ALL, 12)
+        btn_sizer.Add(self.reg_button, 0, wx.ALIGN_RIGHT | wx.ALL, 12)
+        btn_sizer.Add(self.login_button, 0, wx.ALIGN_RIGHT | wx.ALL, 12)
+        button_panel.SetSizer(btn_sizer)
+        self.button_panel = button_panel
+
+    def on_reg_button(self, event):
+        self.app.swap_to_register_frame()
+
     def on_user_entry(self, event):
         if event.GetKeyCode() == wx.WXK_RETURN:
             self.pass_field.SetFocus()
@@ -356,29 +364,10 @@ class LoginPanel(wx.Panel):
         # exit
         self.parent.parent.Close()
 
-class RegisterButtonPanel(wx.Panel):
-    def __init__(self, parent, app):
-        wx.Panel.__init__(self, parent, -1)
-        self.parent = parent
-        self.app = app
-
-        self.sizer = wx.BoxSizer(wx.VERTICAL)
-
-        self.reg_label = wx.StaticText(self, -1, "Don't have an account?")
-        self.reg_button = wx.Button(self, -1, 'Create Account')
-        self.Bind(wx.EVT_BUTTON, self.on_reg_button, self.reg_button)
-        reg_sizer = wx.FlexGridSizer(1, 2, 5, 4)
-        reg_sizer.Add(self.reg_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
-        reg_sizer.Add(self.reg_button, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
-        self.sizer.Add(reg_sizer, 1, wx.EXPAND | wx.ALL, 2)
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-
-    def on_reg_button(self, event):
-        self.app.swap_to_register_frame()
-
 class RegisterPanel(wx.Panel):
-    def __init__(self, parent, app):
+    padding = 7
+
+    def __init__(self, parent, button_panel, app):
         wx.Panel.__init__(self, parent, -1)
         self.parent = parent
         self.app = app
@@ -391,7 +380,6 @@ class RegisterPanel(wx.Panel):
         self.user_field = wx.TextCtrl(self, -1, u'', size=(260,-1))
         self.pass_field = wx.TextCtrl(self, -1, u'', size=(260,-1), style=wx.TE_PASSWORD)
         self.conf_field = wx.TextCtrl(self, -1, u'', size=(260,-1), style=wx.TE_PASSWORD)
-        self.create_account_button = wx.Button(self, -1, 'Create Account')
         self.subscribe_box = wx.CheckBox(self, -1, 'Sign up for our Newsletter')
         self.subscribe_box.SetValue(True)
         self.warning_label = wx.StaticText(self, -1, '')
@@ -399,8 +387,7 @@ class RegisterPanel(wx.Panel):
         wx.EVT_CHAR(self.user_field, self.on_user_entry)
         wx.EVT_CHAR(self.pass_field, self.on_pass_entry)
         wx.EVT_CHAR(self.conf_field, self.on_conf_entry)
-        self.Bind(wx.EVT_BUTTON, self.on_create_account, self.create_account_button)
-        login_sizer = wx.FlexGridSizer(4, 2, 5, 4)
+        login_sizer = wx.FlexGridSizer(3, 2, 5, 4)
         login_sizer.Add(self.user_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
         login_sizer.Add(self.user_field, 0, wx.EXPAND | wx.ALL, 2)
         login_sizer.Add(self.pass_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
@@ -408,14 +395,23 @@ class RegisterPanel(wx.Panel):
         login_sizer.Add(self.conf_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
         login_sizer.Add(self.conf_field, 0, wx.EXPAND | wx.ALL, 2)
         login_sizer.Add(wx.Size(2,2), 0, wx.ALIGN_RIGHT | wx.ALL, 2)
-        login_sizer.Add(self.create_account_button, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
-        self.sizer.Add(login_sizer, 1, wx.EXPAND | wx.ALL, 2)
+        self.sizer.Add(login_sizer, 0, wx.EXPAND | wx.ALL, 2)
         self.sizer.Add(self.warning_label, 0, wx.CENTER | wx.ALL, 2)
         self.sizer.Add(wx.Size(2,2), 0, wx.EXPAND | wx.ALL, 4)
         self.sizer.Add(self.subscribe_box, 0, wx.CENTER | wx.ALL, 2)
         self.SetSizer(self.sizer)
         self.SetAutoLayout(True)
 
+        self.reg_button = wx.Button(button_panel, -1, 'Create Account')
+        button_panel.Bind(wx.EVT_BUTTON, self.on_create_account, self.reg_button)
+        btn_sizer = wx.BoxSizer(wx.HORIZONTAL)
+        btn_sizer.Add(wx.Size(2,2), 1, wx.EXPAND | wx.ALL, 12)
+        btn_sizer.Add(self.reg_button, 0, wx.ALIGN_RIGHT | wx.ALL, 12)
+        button_panel.SetSizer(btn_sizer)
+        self.button_panel = button_panel
+
+        self.Fit()
+
     def on_user_entry(self, event):
         if event.GetKeyCode() == wx.WXK_RETURN:
             self.pass_field.SetFocus()