bc55b200e9b7831c2d99281348c691e0cbfda69a
[swftools.git] / wx / viewers / flexpaper.py
1 #!/usr/bin/env python
2 # -*- coding: UTF-8 -*-
3 #
4 # gpdf2swf.py
5 # graphical user interface for pdf2swf
6 #
7 # Part of the swftools package.
8
9 # Copyright (c) 2008,2009 Matthias Kramm <kramm@quiss.org> 
10 #
11 # This program is free software; you can redistribute it and/or modify
12 # it under the terms of the GNU General Public License as published by
13 # the Free Software Foundation; either version 2 of the License, or
14 # (at your option) any later version.
15 #
16 # This program is distributed in the hope that it will be useful,
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 # GNU General Public License for more details.
20 #
21 # You should have received a copy of the GNU General Public License
22 # along with this program; if not, write to the Free Software
23 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
24
25 from gui.fields import Choose, ChooseAndInt
26
27 order = 3
28 type = "custom"
29 name = u"Flex Paper Viewer"
30 desc = u"""Provides a light weight document viewer with:
31     Printing, Searching, Fit width, Fit height, Flowbox mode
32     Zooming, Scrolling with Page Up/Down, Arrows, Drag,
33     Full screen mode, Navigation buttons (next/prev),
34     Print range. See http://flexpaper.devaldi.com/"""
35
36 swf_options = [
37     Choose("flashversion", u"Flash version:",
38            (u"9", 9,), 0),
39 ]
40
41 viewer_options = [
42     Choose("scale", u"Scale:",
43            (u"0.1", 0.1,
44             u"0.2", 0.2,
45             u"0.3", 0.3,
46             u"0.4", 0.4,
47             u"0.5", 0.5,
48             u"0.6", 0.6,
49             u"0.7", 0.7,
50             u"0.8", 0.8,
51             u"0.9", 0.9,
52             u"1.0", 1.0,
53            ), 5),
54     Choose("zoomtransition", u"Zoom transition:",
55            ('easenone', 'easenone',
56             'easeout', 'easeout',
57             'linear', 'linear',
58             'easeoutquad', 'easeoutquad',
59            ), 1),
60     Choose("zoomtime", u"Zoom time:",
61            (u"0.0", '0.0',
62             u"0.1", '0.1',
63             u"0.2", '0.2',
64             u"0.3", '0.3',
65             u"0.4", '0.4',
66             u"0.5", '0.5',
67             u"0.6", '0.6',
68             u"0.7", '0.7',
69             u"0.8", '0.8',
70             u"0.9", '0.9',
71             u"1.0", '1.0',
72            ), 5),
73     Choose("zoominterval", u"Zoom interval:",
74            (u"0.1", '0.1',
75             u"0.2", '0.2',
76             u"0.3", '0.3',
77             u"0.4", '0.4',
78             u"0.5", '0.5',
79             u"0.6", '0.6',
80             u"0.7", '0.7',
81             u"0.8", '0.8',
82             u"0.9", '0.9',
83             u"1.0", '1.0',
84            ), 0),
85     Choose("fitpageonload", u"Fit page on load:",
86            (u"no", 'false', u"yes", 'true', ), 0),
87     Choose("localechain", u"Locale chain:",
88            (
89             'English',             'en_US',
90             'French',              'fr_FR',
91             'Chinese, Simple',     'zh_CN',
92             'Spanish',             'es_ES',
93             'Brazilian Portugese', 'pt_BR',
94             'Russian',             'ru_RU',
95             'Finnish',             'fi_FN',
96             'German',              'de_DE',
97             'Netherlands',         'nl_NL',
98             'Turkish',             'tr_TR',
99             'Swedish',             'se_SE',
100             'Portugese',           'pt_PT',
101             'Greek',               'el_EL',
102             'Danish',              'da_DN',
103             'Czech',               'cz_CS',
104             'Italian',             'it_IT',
105             'Polish',              'pl_PL',
106             'Finnish',             'pv_FN',
107             'Hungarian',           'hu_HU',
108            ), 0),
109 ]
110
111
112 html_template = open('viewers/flexpaper/FlexPaperViewer.html').read()
113
114 from gui.plugin import Plugin
115 import os
116
117 class FlexPaper(Plugin):
118     def __init__(self, swf, filename):
119         self.__swf = swf
120         self.__filename = filename
121
122         for opt in swf_options:
123             setattr(self, "_%s" % opt.name, opt.value)
124
125         for opt in viewer_options:
126             setattr(self, "_%s" % opt.name, opt.value)
127
128     def after_save(self, page):
129         template_vars = {
130                          'swffilename': os.path.basename(self.__filename),
131                          'scale': self._scale,
132                          'zoomtransition': self._zoomtransition,
133                          'zoomtime': self._zoomtime,
134                          'zoominterval': self._zoominterval,
135                          'fitpageonload': self._fitpageonload,
136                          'localechain': self._localechain,
137                         }
138
139         htmlfilename = self._swap_extension(self.__filename, "html")
140         f = open(htmlfilename, "wb")
141         try:
142             f.write(html_template % template_vars)
143         except Exception, e:
144             print e
145         f.close()
146
147
148         import shutil
149         opj = os.path.join
150         src = opj(os.path.dirname(__file__), 'flexpaper')
151         dst = os.path.dirname(self.__filename)
152         shutil.copy(opj(src, 'FlexPaperViewer.swf'), dst)
153
154         try:
155             os.mkdir(opj(dst, 'js'))
156         except OSError:
157             pass
158         shutil.copy(opj(src, 'js', 'jquery.js'), opj(dst,'js'))
159
160         try:
161             os.mkdir(opj(dst, 'js', 'swfobject'))
162         except OSError:
163             pass
164         shutil.copy(opj(src, 'js', 'swfobject', 'expressInstall.swf'), opj(dst,'js', 'swfobject'))
165         shutil.copy(opj(src, 'js', 'swfobject', 'swfobject.js'), opj(dst,'js', 'swfobject'))
166
167         #shutil.copytree(src+'/js', dst+'/js')
168
169 def init(swf, filename):
170     return FlexPaper(swf, filename)
171
172 from lib.embeddedimage import PyEmbeddedImage
173
174 preview = PyEmbeddedImage(
175     "iVBORw0KGgoAAAANSUhEUgAAAGYAAABmCAYAAAA53+RiAAAAAXNSR0IArs4c6QAAAAZiS0dE"
176     "AP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFDwEgKE4B7KAAAA9D"
177     "SURBVHja7V1pbxtHmn6qu/pi8xAvURxLlpzYSWTHQZANgmQXAdYY7C/JL8wf2PmYYNcDGN4Y"
178     "iZRk5Imow5Ilka1ms8+q/cCuUvPQsU520AVMAQJkmqSquqre533ek7x69YoTQgAAmqbB9324"
179     "rgvOOQCAEDLzOwBwzuXvQRDMvP+PGEmS4OTkRP4NMTjnaLZacCuVmb8XxzEMw5DvZ4zh9PQU"
180     "WZYtfLfrumg0GrfOgTEGzjk8z0MQBAtzmR+cc3RXV2EahnxW4/EYlUrlnZ4BpZTKibRaLXDO"
181     "Ua/XYVmWXHCWZTg8PESn04HjOPA8D2EYglKKSqWCTqeDLMtgGMYfskFJkuDp06eI0xRZxgAA"
182     "jmUCAE5P3yKOI/i+jyzL0G63MZlMUKlUwBgDYwymaeLhow9AqQ5t7oGOx2NMJhMkSYooSWBb"
183     "JnRNAyEEhBBcXFyg0WiAMYYkSbC+fh+NRu1O837z5gSj0RCEELTb7elmdbt3eiZJkiAMQxBC"
184     "UK1WQTnn0DQNlFJkWQZd1zEYDLCxsYFffvkFT58+lf9HCIGu6/B9H7u7u3BdFw8fPkSSphgc"
185     "HCCO49+9MVTX8fC995FmGf77f14hyxiOTt/ii6eP8WD9HgDg4uIClFIMh0M0Gg1QSmEYBn74"
186     "4Qe4rosHD94DYxle/PgrPnv84dxN4DAMirfDEX47Osa91S6SLMODe3+Cruv4/vvv8eWXX6LZ"
187     "bIJzDsayO89d13Xs/LSLv+39im+++QaUUlBK7/RMDg4O8Pz5c/R6PXz99dfTGxOGITjnaLVa"
188     "oJSi2+1C13W4rgvDMOD7PgaDARhj2N7eRhRFiKIIuq7DMAwcHh5ipdEA0TRUXRf4HZtDCIGm"
189     "T09wr90GwLHZXwOlulx8p9PBt99+C845PvroI8RxDEop7t+/DwAwDIo0SVGvuksenobLcYT+"
190     "ahdJmsEwTazYNiil0HUdW1tbaLfb0DRNive7Dk3T8K//9hU2Ntbh+758PnfZmNXVVXz66afY"
191     "3NwEpRRkf3+fr66uQtyco6Mj2LYN3/fBOcf6+jqGwyHG4zF0XUev18P5+TnCMIRlWfJzb05O"
192     "8PGTJ2CM/W5RNplMQHNZPT/CMES9NitaPM+D67ryITLGEMWJ3MziSNMUjm3fOocsy5CmKcIo"
193     "hus6t541QgjiOEbFceQmHR8fo9frvZMUIf/5l7/wtACSGiHgBaBnjEn5C87BcuAvKgViIsvA"
194     "9p1uDYD5pTRzwJ7/u9e9Jjc5DBFG0Y3ffdsDv+uDnf/u/8tnwTls24ZBKbKMgQZxjMswBEF5"
195     "B9E0/Mef/wwAGI1Gt4oXzjlc14Wu6/hhZwevdnZQ9sEYw79sPUC308Z4HIASQhY0l9JtTOH3"
196     "vb09bG9v33g74ziG53kSwEnJ1ycOHyHAX58/x/37m6AQYqrEY/7gWJZ1q3Y0Ho/lpqqwMRoh"
197     "ODg4RG9tDWfn59CKp7KsP7jmwXLO5U+RFM6BROnXR3KMaTZXsLW5BYCDihNV/jM1K4/fvn0L"
198     "TdOQpqnkYZPJBO12e+GGKLE+zuE4Dmq1Kur1Bqh8vcTXfV6UCQ0wyzIMh0Poug7bttFoNKBp"
199     "2lJNiJddnBU0uCzLphsjrlKZJz0/+v0+PM9DmqZI0xSUUlSrVei6jqigHiuxPqFqF0QzBSGQ"
200     "PwpoZUV8MU0ThBCYpgnLsqDr+iLHERtb9huT4yPnHIyzK1GmEsYI3LBtG5ZlwbZt1Gq1G8lc"
201     "2dc3vdX5oWNF8CdEmQ3hnGN/fx+GYaDf78/8n7hNRTGowvrEujhnuSgriIYyT1qMDz74AJxz"
202     "rKysXGsBME0Twp2hwvrkHMHBGL/aGBVOU1FV1jQN9Xr9ziJCFWkwdTMwMJbl4K8Qxuzs7MB1"
203     "XdRqNfi+L2+IYRjQNA1nZ2dYW1uDpmlotVrKYAwvaGWMqUIwCyde0zS8//77mEwmWFlZwdnZ"
204     "GVZWVsA5l5sz/1kVCObUAkBwcXEOzpgaBJMsYf66riNJEjSbTSRJAp6bzXu9HqIokrYyZQgm"
205     "5yAawd///hsYY/mNKTkBm8eIIAhkwEWtVgMhZOocy4llu93GvA0QCoA/YwydTgfHb07UIJjL"
206     "tK6joyM4joMkSaDrOhhjyLJMBpTMiEFFCCbLGPr9Po7fvMlFWcllMFmivYioGDt3E8dxLAMz"
207     "RLTJDM6UHfwJAUdukmFs6igru0o5PzMR52UYBhhjcF1XblAYhgtxByqozKTgumBMEYJZFEMi"
208     "Zusm93KSJFKVVolgSpMMFCGYRbP/2dkZXr9+faOZJQxD1Go1NJtNtQhmvjOccTUIJgcQJwkA"
209     "4NmzZ7eHSOV2pyRJwER4b+kxZrpQnkciyRtT9o35rxcv3gmbJlFU+mCTKcbgCvx5zvxVIJjv"
210     "bW4CnN855FQs8PDNGxydnChBB2YdZSoQTE3Dn1ZXAQA///yzjACdxxkh4jjnaLfbqNVq8Hxf"
211     "GYJJCJkqNSp6MMfjMR49eiR/393dhWlOMwGePHkiOY3UyjhXgmBqAAYHh5gEAbxLTw2t7Lrh"
212     "ui4++eSTheC/ZSG0ZR+apuHnX35F0F9Df613hTEqbQ5jDJ7nwTAMhGEIx3HAOcfl5eWin0Zo"
213     "nQqsr1qrYX19HY1aTT0PJjCN2A/DEJPJBAAQRREsy0Kj0YCu64jjeCmwlh1fkAdizKrLJT1R"
214     "y2KPRcRllmWwbRtJkiDLMoxGI1BKpXmmuDYlvLSFKUqCWVatZdnjtG1bWpYBSFEWBAF6vd7y"
215     "gPOya2UzB0dBD6YYwg8jzP7itWV5Oqp4MItDOQ+mwAqxGbdF/quwPnF4+PzGqOTBNE0TaZri"
216     "xYsXsG0bH3/88Y1Ar4oHcx4Daa5EK6Emc84lifz888+vfY9t2zMKgBIeTEKu8gQ5ckfZH5DQ"
217     "+o84TYQQHB0dyehL4RRL0xSEEJkgm6YpkiSB4zhX3kulwB9XrmVVJl3cGN/3MZlMMJlMYFkW"
218     "qtWq5DmTyQSO49yY+FRqUXZb1lbZwL/ouRTVJ0RKu4j/LS6SK7C+G7UylUYYhgiCAJqmIQgC"
219     "UEoRBAFardaCSUZNKyBXIzmWLLn2xRIrhmGgWq0iDENZxkSuKQd+opC45sUboxLBNAwDJycn"
220     "snpFt9uFaZpgjC0tEaIEwZybI5U5JQrdmDAM4bqu1L6AaZkTYTcTjrTiZ7kCUmGWYHKuxGkq"
221     "Dtu2ZYEF4SQTo1KpII5jBEEgb5syBJPnqgpHwYOpyI0RdjBRByxN04X3p2m6PExWKR5DiIwC"
222     "VGHSFcfB6ckJyC0Bf67rqm2SUYKAEYKz4RDgHP2NDfBbLBWGZYEDOB8OMYkiNQLmF/wxUMPt"
223     "+vLHH/+w01h+BYerQTAJgH//6qt3+uze/j5eDwZKpZlcYYxCk3758iW63S48z5OmGGAasiRy"
224     "/kXB1ZWVlauieGVfozZHMAUwqkIwsyxDv98HIQRBEMjqGDwvktPv95FlmYwrk1FAZQd/fo11"
225     "udQEcy4NAwDW1tZmHWIFA2bRtcwVWJ+cf+F60FlyowbzH41GsoqtqP8sioXGcYxqtQpDFKaG"
226     "GobMGZWeF/0xCuGM2BBgajdL0xRRFME0TXQ6HYzHY7kxyqxvjpfJVD+VspZt20a9XgdjDJZl"
227     "IYqiqTvZsuBWq3AcB5eXl2qZZOaELb3OJFDmcX5+Pq3NnFcrF2GyA3+MemMFrm3OiDI11rYE"
228     "/EutLi+JxHRdF+PxWKYtiKp+nXYLLGNw3QqiKJ69MQqELxGlCOaSB+q6Lu7fv3+VTzI3piXu"
229     "Y6g6uIoEs91uI01TmRfz8OHDpaev6A5QgWAuN2KWHRwLk7537x40TcPjx4+vfbthGLMYowLB"
230     "lDnLBYzhJZfBxdP0008/4fHjxxgMBjg7O5OlryzLwmg0QrPZRL1ex2QymTbwyW9L2Qnm1MPK"
231     "1SWYIvelXq+jUqkgDENZIWNtbU26movsXwVBrYHM+JaVrCLr+z58359JkhVxZa1Wa6a8rzJV"
232     "ZOf9MaphDABUq1VpWW42mzOa2bLMMVWylhfAv+wYgyX1yi4vL2GaJpIkmfb0onSpdlP6tV0j"
233     "FdQgmHMvZVmG8XiMJElQr9dvnL8KIcBXezBvXUaJ48quySYTeZeEkJn6ZE7eikrlwYvgrwrF"
234     "FBsggN+2bdmuS5o25kgzUTF8SYnwnsKkh8MhTk9P5b9FSnkR/KMoWsAcokDThVmMIUSJ/EQx"
235     "vvjiC+kYu1YUMAYtz9EkihDMYpsS6ShTIdFvcHz8Tp8TRX6UzVouuwy+GI3kDbjz6eccSZ4G"
236     "qAR+zosyFSb+9MMPJcbI0lGGAc7YVdYYgIwxQLRbpBQHJyc4OD5Wqn/BLMFUxLX8+vVrbG9v"
237     "AwC+++47GfEvGhZsbW0hyzJ4l5fTdouFGmYqKcxTjFEofEmoygDw6NEjWddfNJGrVCpIkuSq"
238     "hLwiEmF5nr8iZgsxhM8/yzJZsZznZRk9z0O3212U28qFyIpTpdCkW60WBoMBCCGypkyz2ZS5"
239     "mQvN4xQhmDOOMhXCl+YfapIkMlPZNE1EUYTj42Pouj7TGmvmKxQhmKTIY6AYxhiGgUqlAl3X"
240     "ZZtF27avr0umCMFc9GBCrXz4IAjgeR4cx5HtSizLAmNsoXOs7F3wT4L5/z9p27ahaZrMULYs"
241     "S3owRf7/TTdOCfAnioUviaj+8/NzOI6DVquFZrM5855lCbNEKX+Mou0WCSHY3NyEpmmSXM7X"
242     "NFOx3eKCKFOx3WKtVrvbbfgnwfzHjJ2dHXz22WfY29tDFEVgjME0TcRxjCRJ0Ol00O12cXl5"
243     "edWrTDGM4QJjVCKYolBcq9WC53my81IcxzI4IwxDGTmjis//WnVZJYJZtI2JRgu2bSOOY7iu"
244     "u1R0ESXaxl9dGSUJpshQLt4gwWOCIEC325URmVDIgzlbfUlBginKkQguQymVYUzVanWmhLwq"
245     "61vq81cRILMsg2EY2N/fx8bGhuQv4/F4gccQVUqWqKYuzw/x4CmlWF9fn8EZz/OQpulCfJla"
246     "VQyLrbAUIZiC+YsCC8IPEwQBwjBElmVwXXdhPeoRTFU6ReTj/Pwc+/v7N87Z8zzZblFFgjlT"
247     "E7P04is3TD579mxa0vc21TPHIZVuim3bMkWR/PXlS24qEO/r3LG5wvxI0lRuaulHFCOKQmhE"
248     "u7Iulx1jurkFWdf1O3ESnjf/Gfk+RnPtfcuqlWm6BgIOwzTUMWLW8/Lwu7u7MvjiuiEcZvVa"
249     "DZM4VqZ53N/29tBf7WH/t338LwV6X2bsIwn7AAAAAElFTkSuQmCC")
250 getpreviewData = preview.GetData
251 getpreviewImage = preview.GetImage
252 getpreviewBitmap = preview.GetBitmap
253 getpreviewIcon = preview.GetIcon
254