source: sasview/src/sas/sasgui/guiframe/aboutbox.py @ 199b515e

Last change on this file since 199b515e was e0f28e6, checked in by smk78, 8 years ago

Updated About box text and images. Changed SNS image to ORNL image (more
inclusive) and added ANSTO image.

  • Property mode set to 100644
File size: 17.1 KB
Line 
1#!/usr/bin/env python
2########################################################################
3#
4# PDFgui            by DANSE Diffraction group
5#                   Simon J. L. Billinge
6#                   (c) 2006 trustees of the Michigan State University.
7#                   All rights reserved.
8#
9# File coded by:    Dmitriy Bryndin
10#
11# See AUTHORS.txt for a list of people who contributed.
12# See LICENSE.txt for license information.
13#
14# Modified by U. Tennessee for DANSE/SANS
15########################################################################
16
17# version
18__id__ = "$Id: aboutdialog.py 1193 2007-05-03 17:29:59Z dmitriy $"
19__revision__ = "$Revision: 1193 $"
20
21import wx
22import wx.lib.hyperlink
23import random
24import os.path
25import os
26try:
27    # Try to find a local config
28    import imp
29    path = os.getcwd()
30    if(os.path.isfile("%s/%s.py" % (path, 'local_config'))) or \
31      (os.path.isfile("%s/%s.pyc" % (path, 'local_config'))):
32        fObj, path, descr = imp.find_module('local_config', [path])
33        config = imp.load_module('local_config', fObj, path, descr) 
34    else:
35        # Try simply importing local_config
36        import local_config as config
37except:
38    # Didn't find local config, load the default
39    import config
40
41def launchBrowser(url):
42    """
43    Launches browser and opens specified url
44   
45    In some cases may require BROWSER environment variable to be set up.
46   
47    :param url: URL to open
48   
49    """
50    import webbrowser
51    webbrowser.open(url)
52
53
54class DialogAbout(wx.Dialog):
55    """
56    "About" Dialog
57   
58    Shows product name, current version, authors, and link to the product page.
59    Current version is taken from version.py
60   
61    """
62   
63    def __init__(self, *args, **kwds):
64
65        # begin wxGlade: DialogAbout.__init__
66        kwds["style"] = wx.DEFAULT_DIALOG_STYLE
67        wx.Dialog.__init__(self, *args, **kwds)
68       
69        file_dir = os.path.dirname(__file__)
70       
71        # Mac doesn't display images with transparent background so well,
72        # keep it for Windows
73        image = file_dir + "/images/angles_flat.png"
74       
75        if os.path.isfile(config._corner_image):
76            image = config._corner_image
77
78        if os.name == 'nt':
79            self.bitmap_logo = wx.StaticBitmap(self, -1, wx.Bitmap(image))
80        else:
81            self.bitmap_logo = wx.StaticBitmap(self, -1, wx.Bitmap(image))
82       
83        self.label_title = wx.StaticText(self, -1, config.__appname__)
84        self.label_version = wx.StaticText(self, -1, "")
85        self.label_build = wx.StaticText(self, -1, "Build:")
86        self.label_svnrevision = wx.StaticText(self, -1, "")
87        self.label_copyright = wx.StaticText(self, -1, config._copyright)
88        self.label_author = wx.StaticText(self, -1, "authors")
89        self.hyperlink = wx.lib.hyperlink.HyperLinkCtrl(self, -1,
90                                                        config._homepage,
91                                                        URL=config._homepage)
92        #self.hyperlink_license = wx.lib.hyperlink.HyperLinkCtrl(self, -1,
93        #"Comments? Bugs? Requests?", URL=config._paper)
94        self.hyperlink_license = wx.StaticText(self, -1,
95                                               "Comments? Bugs? Requests?")
96        self.hyperlink_paper = wx.lib.hyperlink.HyperLinkCtrl(self, -1,
97                                                        "Send us a ticket",
98                                                        URL=config._license)
99        self.hyperlink_download = wx.lib.hyperlink.HyperLinkCtrl(self, -1,
100                                                "Get the latest version",
101                                                URL=config._download)
102        self.static_line_1 = wx.StaticLine(self, -1)
103        self.label_acknowledgement = wx.StaticText(self, -1,
104                                                   config._acknowledgement)
105        self.static_line_2 = wx.StaticLine(self, -1)
106        self.bitmap_button_nist = wx.BitmapButton(self, -1, wx.NullBitmap)
107        self.bitmap_button_umd = wx.BitmapButton(self, -1, wx.NullBitmap)
108        self.bitmap_button_ornl = wx.BitmapButton(self, -1, wx.NullBitmap)
109        #self.bitmap_button_sns = wx.BitmapButton(self, -1, wx.NullBitmap)
110        #self.bitmap_button_nsf = wx.BitmapButton(self, -1,
111        #                                         wx.NullBitmap)
112        #self.bitmap_button_danse = wx.BitmapButton(self, -1, wx.NullBitmap)
113        self.bitmap_button_msu = wx.BitmapButton(self, -1, wx.NullBitmap)
114       
115        self.bitmap_button_isis = wx.BitmapButton(self, -1, wx.NullBitmap)
116        self.bitmap_button_ess = wx.BitmapButton(self, -1, wx.NullBitmap)
117        self.bitmap_button_ill = wx.BitmapButton(self, -1, wx.NullBitmap)
118        self.bitmap_button_ansto = wx.BitmapButton(self, -1, wx.NullBitmap)
119       
120        self.static_line_3 = wx.StaticLine(self, -1)
121        self.button_OK = wx.Button(self, wx.ID_OK, "OK")
122
123        self.__set_properties()
124        self.__do_layout()
125       
126        self.Bind(wx.EVT_BUTTON, self.onNistLogo, self.bitmap_button_nist)
127        self.Bind(wx.EVT_BUTTON, self.onUmdLogo, self.bitmap_button_umd)
128        #self.Bind(wx.EVT_BUTTON, self.onSnsLogo, self.bitmap_button_sns)
129        self.Bind(wx.EVT_BUTTON, self.onOrnlLogo, self.bitmap_button_ornl)
130        #self.Bind(wx.EVT_BUTTON, self.onNsfLogo, self.bitmap_button_nsf)
131        #self.Bind(wx.EVT_BUTTON, self.onDanseLogo, self.bitmap_button_danse)
132        self.Bind(wx.EVT_BUTTON, self.onUTLogo, self.bitmap_button_msu)
133        self.Bind(wx.EVT_BUTTON, self.onIsisLogo, self.bitmap_button_isis)
134        self.Bind(wx.EVT_BUTTON, self.onEssLogo, self.bitmap_button_ess)
135        self.Bind(wx.EVT_BUTTON, self.onIllLogo, self.bitmap_button_ill)
136        self.Bind(wx.EVT_BUTTON, self.onAnstoLogo, self.bitmap_button_ansto)
137        # end wxGlade
138        # fill in acknowledgements
139        #self.text_ctrl_acknowledgement.SetValue(__acknowledgement__)
140        # randomly shuffle authors' names
141        random.shuffle(config._authors)
142        strLabel = ", ".join(config._authors)
143       
144        # display version and svn revison numbers
145        verwords = config.__version__.split('.')
146        version = '.'.join(verwords[:-1])
147        revision = verwords[-1]
148        try:
149            build_num = str(config.__build__)
150        except:
151            build_num = str(config.__version__)
152        self.label_author.SetLabel(strLabel)
153        self.label_version.SetLabel(config.__version__)#(version)
154        self.label_svnrevision.SetLabel(build_num)
155       
156        # set bitmaps for logo buttons
157        image = file_dir + "/images/nist_logo.png"
158        if os.path.isfile(config._nist_logo):
159            image = config._nist_logo
160        logo = wx.Bitmap(image)       
161        self.bitmap_button_nist.SetBitmapLabel(logo)
162       
163        image = file_dir + "/images/umd_logo.png"
164        if os.path.isfile(config._umd_logo):
165            image = config._umd_logo
166        logo = wx.Bitmap(image)       
167        self.bitmap_button_umd.SetBitmapLabel(logo)
168
169        image = file_dir + "/images/ornl_logo.png"
170        if os.path.isfile(config._ornl_logo):
171            image = config._ornl_logo
172        logo = wx.Bitmap(image)       
173        self.bitmap_button_ornl.SetBitmapLabel(logo)
174
175        """
176        image = file_dir + "/images/sns_logo.png"
177        if os.path.isfile(config._sns_logo):
178            image = config._sns_logo
179        logo = wx.Bitmap(image)       
180        self.bitmap_button_sns.SetBitmapLabel(logo)
181       
182        image = file_dir + "/images/nsf_logo.png"
183        if os.path.isfile(config._nsf_logo):
184            image = config._nsf_logo
185        logo = wx.Bitmap(image)       
186        self.bitmap_button_nsf.SetBitmapLabel(logo)
187
188        image = file_dir + "/images/danse_logo.png"
189        if os.path.isfile(config._danse_logo):
190            image = config._danse_logo
191        logo = wx.Bitmap(image)
192        self.bitmap_button_danse.SetBitmapLabel(logo)
193        """
194        image = file_dir + "/images/utlogo.gif"
195        if os.path.isfile(config._inst_logo):
196            image = config._inst_logo
197        logo = wx.Bitmap(image)
198        self.bitmap_button_msu.SetBitmapLabel(logo)
199       
200        image = file_dir + "/images/isis_logo.png"
201        if os.path.isfile(config._isis_logo):
202            image = config._isis_logo
203        logo = wx.Bitmap(image)       
204        self.bitmap_button_isis.SetBitmapLabel(logo)
205
206        image = file_dir + "/images/ess_logo.png"
207        if os.path.isfile(config._ess_logo):
208            image = config._ess_logo
209        logo = wx.Bitmap(image)
210        self.bitmap_button_ess.SetBitmapLabel(logo)
211       
212        image = file_dir + "/images/ill_logo.png"
213        if os.path.isfile(config._ill_logo):
214            image = config._ill_logo
215        logo = wx.Bitmap(image)
216        self.bitmap_button_ill.SetBitmapLabel(logo)
217       
218        image = file_dir + "/images/ansto_logo.png"
219        if os.path.isfile(config._ansto_logo):
220            image = config._ansto_logo
221        logo = wx.Bitmap(image)
222        self.bitmap_button_ansto.SetBitmapLabel(logo)
223               
224        # resize dialog window to fit version number nicely
225        if wx.VERSION >= (2, 7, 2, 0):
226            size = [self.GetEffectiveMinSize()[0], self.GetSize()[1]]
227        else:
228            size = [self.GetBestFittingSize()[0], self.GetSize()[1]]
229        self.Fit()
230       
231    def __set_properties(self):
232        """
233        """
234        # begin wxGlade: DialogAbout.__set_properties
235        self.SetTitle("About")
236        self.SetSize((600, 595))
237        self.label_title.SetFont(wx.Font(26, wx.DEFAULT, wx.NORMAL,
238                                         wx.BOLD, 0, ""))
239        self.label_version.SetFont(wx.Font(26, wx.DEFAULT, wx.NORMAL,
240                                           wx.NORMAL, 0, ""))
241        self.hyperlink_paper.Enable(True)
242        self.bitmap_button_nist.SetSize(self.bitmap_button_nist.GetBestSize())
243        self.bitmap_button_umd.SetSize(self.bitmap_button_umd.GetBestSize())
244        self.bitmap_button_ornl.SetSize(self.bitmap_button_ornl.GetBestSize())
245        #self.bitmap_button_sns.SetSize(self.bitmap_button_sns.GetBestSize())
246        #self.bitmap_button_nsf.SetSize(self.bitmap_button_nsf.GetBestSize())
247        #self.bitmap_button_danse.SetSize(self.bitmap_button_danse.GetBestSize())
248        self.bitmap_button_msu.SetSize(self.bitmap_button_msu.GetBestSize())
249        self.bitmap_button_isis.SetSize(self.bitmap_button_isis.GetBestSize())
250        self.bitmap_button_ess.SetSize(self.bitmap_button_ess.GetBestSize())
251        self.bitmap_button_ill.SetSize(self.bitmap_button_ill.GetBestSize())
252        self.bitmap_button_ansto.SetSize(self.bitmap_button_ansto.GetBestSize())
253        # end wxGlade
254
255    def __do_layout(self):
256        """
257        """
258        # begin wxGlade: DialogAbout.__do_layout
259        sizer_main = wx.BoxSizer(wx.VERTICAL)
260        sizer_button = wx.BoxSizer(wx.HORIZONTAL)
261        sizer_logos = wx.BoxSizer(wx.HORIZONTAL)
262        sizer_header = wx.BoxSizer(wx.HORIZONTAL)
263        sizer_titles = wx.BoxSizer(wx.VERTICAL)
264        sizer_build = wx.BoxSizer(wx.HORIZONTAL)
265        sizer_title = wx.BoxSizer(wx.HORIZONTAL)
266        sizer_header.Add(self.bitmap_logo, 0, wx.EXPAND, 0)
267        sizer_title.Add(self.label_title, 0,
268                        wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 10)
269        sizer_title.Add((20, 20), 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
270        sizer_title.Add(self.label_version, 0,
271                        wx.RIGHT|wx.ALIGN_BOTTOM|wx.ADJUST_MINSIZE, 10)
272        sizer_titles.Add(sizer_title, 0, wx.EXPAND, 0)
273        sizer_build.Add(self.label_build, 0,
274                        wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10)
275        sizer_build.Add(self.label_svnrevision, 0, wx.ADJUST_MINSIZE, 0)
276        sizer_titles.Add(sizer_build, 0, wx.TOP|wx.EXPAND, 5)
277        sizer_titles.Add(self.label_copyright, 0,
278                         wx.LEFT|wx.RIGHT|wx.TOP|wx.ADJUST_MINSIZE, 10)
279        sizer_titles.Add(self.label_author, 0,
280                         wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10)
281        sizer_titles.Add(self.hyperlink, 0, wx.LEFT|wx.RIGHT, 10)
282        sizer_titles.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
283        sizer_titles.Add(self.hyperlink_license, 0, wx.LEFT|wx.RIGHT, 10)
284        sizer_titles.Add(self.hyperlink_paper, 0, wx.LEFT|wx.RIGHT, 10)
285        sizer_titles.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
286        sizer_titles.Add(self.hyperlink_download, 0, wx.LEFT|wx.RIGHT, 10)
287        sizer_header.Add(sizer_titles, 0, wx.EXPAND, 0)
288        sizer_main.Add(sizer_header, 0, wx.BOTTOM|wx.EXPAND, 3)
289        sizer_main.Add(self.static_line_1, 0, wx.EXPAND, 0)
290        sizer_main.Add(self.label_acknowledgement, 0,
291                       wx.LEFT|wx.TOP|wx.BOTTOM|wx.ADJUST_MINSIZE, 7)
292        sizer_main.Add(self.static_line_2, 0, wx.EXPAND, 0)
293
294        sizer_logos.Add(self.bitmap_button_msu, 0, 
295                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
296        #sizer_logos.Add(self.bitmap_button_danse, 0,
297        #                wx.LEFT|wx.ADJUST_MINSIZE, 2)
298        #sizer_logos.Add(self.bitmap_button_nsf, 0,
299        #                wx.LEFT|wx.ADJUST_MINSIZE, 2)
300        sizer_logos.Add(self.bitmap_button_umd, 0, 
301                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
302        sizer_logos.Add(self.bitmap_button_nist, 0, 
303                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
304        #sizer_logos.Add(self.bitmap_button_sns, 0,
305        #                wx.LEFT|wx.ADJUST_MINSIZE, 2)
306        sizer_logos.Add(self.bitmap_button_ornl, 0, 
307                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
308        sizer_logos.Add(self.bitmap_button_isis, 0, 
309                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
310        sizer_logos.Add(self.bitmap_button_ess, 0, 
311                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
312        sizer_logos.Add(self.bitmap_button_ill, 0, 
313                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
314        sizer_logos.Add(self.bitmap_button_ansto, 0, 
315                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
316               
317        sizer_logos.Add((10, 50), 0, wx.ADJUST_MINSIZE, 0)
318        sizer_main.Add(sizer_logos, 0, wx.EXPAND, 0)
319        sizer_main.Add(self.static_line_3, 0, wx.EXPAND, 0)
320        sizer_button.Add((20, 40), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
321        sizer_button.Add(self.button_OK, 0, 
322                         wx.RIGHT|wx.ADJUST_MINSIZE|wx.CENTER, 10)
323        sizer_main.Add(sizer_button, 0, wx.EXPAND, 0)
324        self.SetAutoLayout(True)
325        self.SetSizer(sizer_main)
326        self.Layout()
327        self.Centre()
328        # end wxGlade
329
330    def onNistLogo(self, event): 
331        """
332        """
333        # wxGlade: DialogAbout.<event_handler>
334        launchBrowser(config._nist_url)
335        event.Skip()
336       
337    def onUmdLogo(self, event): 
338        """
339        """
340        # wxGlade: DialogAbout.<event_handler>
341        launchBrowser(config._umd_url)
342        event.Skip()
343       
344    def onOrnlLogo(self, event): 
345        """
346        """
347        # wxGlade: DialogAbout.<event_handler>
348        launchBrowser(config._ornl_url)
349        event.Skip()
350       
351    def onSnsLogo(self, event): 
352        """
353        """
354        # wxGlade: DialogAbout.<event_handler>
355        launchBrowser(config._sns_url)
356        event.Skip()
357               
358    def onNsfLogo(self, event): 
359        """
360        """
361        # wxGlade: DialogAbout.<event_handler>
362        launchBrowser(config._nsf_url)
363        event.Skip()
364
365    def onDanseLogo(self, event):
366        """
367        """
368        # wxGlade: DialogAbout.<event_handler>
369        launchBrowser(config._danse_url)
370        event.Skip()
371
372    def onUTLogo(self, event):
373        """
374        """ 
375        # wxGlade: DialogAbout.<event_handler>
376        launchBrowser(config._inst_url)
377        event.Skip()
378
379    def onIsisLogo(self, event): 
380        """
381        """
382        # wxGlade: DialogAbout.<event_handler>
383        launchBrowser(config._isis_url)
384        event.Skip()
385
386    def onEssLogo(self, event):
387        """
388        """
389        # wxGlade: DialogAbout.<event_handler>
390        launchBrowser(config._ess_url)
391        event.Skip()
392
393    def onIllLogo(self, event):
394        """
395        """ 
396        # wxGlade: DialogAbout.<event_handler>
397        launchBrowser(config._ill_url)
398        event.Skip()
399
400    def onAnstoLogo(self, event):
401        """
402        """ 
403        # wxGlade: DialogAbout.<event_handler>
404        launchBrowser(config._ansto_url)
405        event.Skip()
406
407# end of class DialogAbout
408
409##### testing code ############################################################
410class MyApp(wx.App):
411    """
412    """
413    def OnInit(self):
414        """
415        """
416        wx.InitAllImageHandlers()
417        dialog = DialogAbout(None, -1, "")
418        self.SetTopWindow(dialog)
419        dialog.ShowModal()
420        dialog.Destroy()
421        return 1
422
423# end of class MyApp
424
425if __name__ == "__main__":
426    app = MyApp(0)
427    app.MainLoop()
428   
429##### end of testing code #####################################################   
Note: See TracBrowser for help on using the repository browser.