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

Last change on this file since d619341 was 49e000b, checked in by smk78, 8 years ago

Added TU Delft logo to About box aswell, and Acknowledgement. Closes
#692

  • Property mode set to 100644
File size: 17.9 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        self.bitmap_button_tudelft = wx.BitmapButton(self, -1, wx.NullBitmap)
120       
121        self.static_line_3 = wx.StaticLine(self, -1)
122        self.button_OK = wx.Button(self, wx.ID_OK, "OK")
123
124        self.__set_properties()
125        self.__do_layout()
126       
127        self.Bind(wx.EVT_BUTTON, self.onNistLogo, self.bitmap_button_nist)
128        self.Bind(wx.EVT_BUTTON, self.onUmdLogo, self.bitmap_button_umd)
129        #self.Bind(wx.EVT_BUTTON, self.onSnsLogo, self.bitmap_button_sns)
130        self.Bind(wx.EVT_BUTTON, self.onOrnlLogo, self.bitmap_button_ornl)
131        #self.Bind(wx.EVT_BUTTON, self.onNsfLogo, self.bitmap_button_nsf)
132        #self.Bind(wx.EVT_BUTTON, self.onDanseLogo, self.bitmap_button_danse)
133        self.Bind(wx.EVT_BUTTON, self.onUTLogo, self.bitmap_button_msu)
134        self.Bind(wx.EVT_BUTTON, self.onIsisLogo, self.bitmap_button_isis)
135        self.Bind(wx.EVT_BUTTON, self.onEssLogo, self.bitmap_button_ess)
136        self.Bind(wx.EVT_BUTTON, self.onIllLogo, self.bitmap_button_ill)
137        self.Bind(wx.EVT_BUTTON, self.onAnstoLogo, self.bitmap_button_ansto)
138        self.Bind(wx.EVT_BUTTON, self.onTudelftLogo, self.bitmap_button_tudelft)
139        # end wxGlade
140        # fill in acknowledgements
141        #self.text_ctrl_acknowledgement.SetValue(__acknowledgement__)
142        # randomly shuffle authors' names
143        random.shuffle(config._authors)
144        strLabel = ", ".join(config._authors)
145       
146        # display version and svn revison numbers
147        verwords = config.__version__.split('.')
148        version = '.'.join(verwords[:-1])
149        revision = verwords[-1]
150        try:
151            build_num = str(config.__build__)
152        except:
153            build_num = str(config.__version__)
154        self.label_author.SetLabel(strLabel)
155        self.label_version.SetLabel(config.__version__)#(version)
156        self.label_svnrevision.SetLabel(build_num)
157       
158        # set bitmaps for logo buttons
159        image = file_dir + "/images/nist_logo.png"
160        if os.path.isfile(config._nist_logo):
161            image = config._nist_logo
162        logo = wx.Bitmap(image)       
163        self.bitmap_button_nist.SetBitmapLabel(logo)
164       
165        image = file_dir + "/images/umd_logo.png"
166        if os.path.isfile(config._umd_logo):
167            image = config._umd_logo
168        logo = wx.Bitmap(image)       
169        self.bitmap_button_umd.SetBitmapLabel(logo)
170
171        image = file_dir + "/images/ornl_logo.png"
172        if os.path.isfile(config._ornl_logo):
173            image = config._ornl_logo
174        logo = wx.Bitmap(image)       
175        self.bitmap_button_ornl.SetBitmapLabel(logo)
176
177        """
178        image = file_dir + "/images/sns_logo.png"
179        if os.path.isfile(config._sns_logo):
180            image = config._sns_logo
181        logo = wx.Bitmap(image)       
182        self.bitmap_button_sns.SetBitmapLabel(logo)
183       
184        image = file_dir + "/images/nsf_logo.png"
185        if os.path.isfile(config._nsf_logo):
186            image = config._nsf_logo
187        logo = wx.Bitmap(image)       
188        self.bitmap_button_nsf.SetBitmapLabel(logo)
189
190        image = file_dir + "/images/danse_logo.png"
191        if os.path.isfile(config._danse_logo):
192            image = config._danse_logo
193        logo = wx.Bitmap(image)
194        self.bitmap_button_danse.SetBitmapLabel(logo)
195        """
196        image = file_dir + "/images/utlogo.gif"
197        if os.path.isfile(config._inst_logo):
198            image = config._inst_logo
199        logo = wx.Bitmap(image)
200        self.bitmap_button_msu.SetBitmapLabel(logo)
201       
202        image = file_dir + "/images/isis_logo.png"
203        if os.path.isfile(config._isis_logo):
204            image = config._isis_logo
205        logo = wx.Bitmap(image)       
206        self.bitmap_button_isis.SetBitmapLabel(logo)
207
208        image = file_dir + "/images/ess_logo.png"
209        if os.path.isfile(config._ess_logo):
210            image = config._ess_logo
211        logo = wx.Bitmap(image)
212        self.bitmap_button_ess.SetBitmapLabel(logo)
213       
214        image = file_dir + "/images/ill_logo.png"
215        if os.path.isfile(config._ill_logo):
216            image = config._ill_logo
217        logo = wx.Bitmap(image)
218        self.bitmap_button_ill.SetBitmapLabel(logo)
219       
220        image = file_dir + "/images/ansto_logo.png"
221        if os.path.isfile(config._ansto_logo):
222            image = config._ansto_logo
223        logo = wx.Bitmap(image)
224        self.bitmap_button_ansto.SetBitmapLabel(logo)
225       
226        image = file_dir + "/images/tudelft_logo.png"
227        if os.path.isfile(config._tudelft_logo):
228            image = config._tudelft_logo
229        logo = wx.Bitmap(image)
230        self.bitmap_button_tudelft.SetBitmapLabel(logo)
231               
232        # resize dialog window to fit version number nicely
233        if wx.VERSION >= (2, 7, 2, 0):
234            size = [self.GetEffectiveMinSize()[0], self.GetSize()[1]]
235        else:
236            size = [self.GetBestFittingSize()[0], self.GetSize()[1]]
237        self.Fit()
238       
239    def __set_properties(self):
240        """
241        """
242        # begin wxGlade: DialogAbout.__set_properties
243        self.SetTitle("About")
244        self.SetSize((600, 595))
245        self.label_title.SetFont(wx.Font(26, wx.DEFAULT, wx.NORMAL,
246                                         wx.BOLD, 0, ""))
247        self.label_version.SetFont(wx.Font(26, wx.DEFAULT, wx.NORMAL,
248                                           wx.NORMAL, 0, ""))
249        self.hyperlink_paper.Enable(True)
250        self.bitmap_button_nist.SetSize(self.bitmap_button_nist.GetBestSize())
251        self.bitmap_button_umd.SetSize(self.bitmap_button_umd.GetBestSize())
252        self.bitmap_button_ornl.SetSize(self.bitmap_button_ornl.GetBestSize())
253        #self.bitmap_button_sns.SetSize(self.bitmap_button_sns.GetBestSize())
254        #self.bitmap_button_nsf.SetSize(self.bitmap_button_nsf.GetBestSize())
255        #self.bitmap_button_danse.SetSize(self.bitmap_button_danse.GetBestSize())
256        self.bitmap_button_msu.SetSize(self.bitmap_button_msu.GetBestSize())
257        self.bitmap_button_isis.SetSize(self.bitmap_button_isis.GetBestSize())
258        self.bitmap_button_ess.SetSize(self.bitmap_button_ess.GetBestSize())
259        self.bitmap_button_ill.SetSize(self.bitmap_button_ill.GetBestSize())
260        self.bitmap_button_ansto.SetSize(self.bitmap_button_ansto.GetBestSize())
261        self.bitmap_button_tudelft.SetSize(self.bitmap_button_tudelft.GetBestSize())
262        # end wxGlade
263
264    def __do_layout(self):
265        """
266        """
267        # begin wxGlade: DialogAbout.__do_layout
268        sizer_main = wx.BoxSizer(wx.VERTICAL)
269        sizer_button = wx.BoxSizer(wx.HORIZONTAL)
270        sizer_logos = wx.BoxSizer(wx.HORIZONTAL)
271        sizer_header = wx.BoxSizer(wx.HORIZONTAL)
272        sizer_titles = wx.BoxSizer(wx.VERTICAL)
273        sizer_build = wx.BoxSizer(wx.HORIZONTAL)
274        sizer_title = wx.BoxSizer(wx.HORIZONTAL)
275        sizer_header.Add(self.bitmap_logo, 0, wx.EXPAND, 0)
276        sizer_title.Add(self.label_title, 0,
277                        wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 10)
278        sizer_title.Add((20, 20), 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
279        sizer_title.Add(self.label_version, 0,
280                        wx.RIGHT|wx.ALIGN_BOTTOM|wx.ADJUST_MINSIZE, 10)
281        sizer_titles.Add(sizer_title, 0, wx.EXPAND, 0)
282        sizer_build.Add(self.label_build, 0,
283                        wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10)
284        sizer_build.Add(self.label_svnrevision, 0, wx.ADJUST_MINSIZE, 0)
285        sizer_titles.Add(sizer_build, 0, wx.TOP|wx.EXPAND, 5)
286        sizer_titles.Add(self.label_copyright, 0,
287                         wx.LEFT|wx.RIGHT|wx.TOP|wx.ADJUST_MINSIZE, 10)
288        sizer_titles.Add(self.label_author, 0,
289                         wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10)
290        sizer_titles.Add(self.hyperlink, 0, wx.LEFT|wx.RIGHT, 10)
291        sizer_titles.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
292        sizer_titles.Add(self.hyperlink_license, 0, wx.LEFT|wx.RIGHT, 10)
293        sizer_titles.Add(self.hyperlink_paper, 0, wx.LEFT|wx.RIGHT, 10)
294        sizer_titles.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
295        sizer_titles.Add(self.hyperlink_download, 0, wx.LEFT|wx.RIGHT, 10)
296        sizer_header.Add(sizer_titles, 0, wx.EXPAND, 0)
297        sizer_main.Add(sizer_header, 0, wx.BOTTOM|wx.EXPAND, 3)
298        sizer_main.Add(self.static_line_1, 0, wx.EXPAND, 0)
299        sizer_main.Add(self.label_acknowledgement, 0,
300                       wx.LEFT|wx.TOP|wx.BOTTOM|wx.ADJUST_MINSIZE, 7)
301        sizer_main.Add(self.static_line_2, 0, wx.EXPAND, 0)
302
303        sizer_logos.Add(self.bitmap_button_msu, 0, 
304                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
305        #sizer_logos.Add(self.bitmap_button_danse, 0,
306        #                wx.LEFT|wx.ADJUST_MINSIZE, 2)
307        #sizer_logos.Add(self.bitmap_button_nsf, 0,
308        #                wx.LEFT|wx.ADJUST_MINSIZE, 2)
309        sizer_logos.Add(self.bitmap_button_umd, 0, 
310                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
311        sizer_logos.Add(self.bitmap_button_nist, 0, 
312                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
313        #sizer_logos.Add(self.bitmap_button_sns, 0,
314        #                wx.LEFT|wx.ADJUST_MINSIZE, 2)
315        sizer_logos.Add(self.bitmap_button_ornl, 0, 
316                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
317        sizer_logos.Add(self.bitmap_button_isis, 0, 
318                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
319        sizer_logos.Add(self.bitmap_button_ess, 0, 
320                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
321        sizer_logos.Add(self.bitmap_button_ill, 0, 
322                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
323        sizer_logos.Add(self.bitmap_button_ansto, 0, 
324                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
325        sizer_logos.Add(self.bitmap_button_tudelft, 0, 
326                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
327               
328        sizer_logos.Add((10, 50), 0, wx.ADJUST_MINSIZE, 0)
329        sizer_main.Add(sizer_logos, 0, wx.EXPAND, 0)
330        sizer_main.Add(self.static_line_3, 0, wx.EXPAND, 0)
331        sizer_button.Add((20, 40), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
332        sizer_button.Add(self.button_OK, 0, 
333                         wx.RIGHT|wx.ADJUST_MINSIZE|wx.CENTER, 10)
334        sizer_main.Add(sizer_button, 0, wx.EXPAND, 0)
335        self.SetAutoLayout(True)
336        self.SetSizer(sizer_main)
337        self.Layout()
338        self.Centre()
339        # end wxGlade
340
341    def onNistLogo(self, event): 
342        """
343        """
344        # wxGlade: DialogAbout.<event_handler>
345        launchBrowser(config._nist_url)
346        event.Skip()
347       
348    def onUmdLogo(self, event): 
349        """
350        """
351        # wxGlade: DialogAbout.<event_handler>
352        launchBrowser(config._umd_url)
353        event.Skip()
354       
355    def onOrnlLogo(self, event): 
356        """
357        """
358        # wxGlade: DialogAbout.<event_handler>
359        launchBrowser(config._ornl_url)
360        event.Skip()
361       
362    def onSnsLogo(self, event): 
363        """
364        """
365        # wxGlade: DialogAbout.<event_handler>
366        launchBrowser(config._sns_url)
367        event.Skip()
368               
369    def onNsfLogo(self, event): 
370        """
371        """
372        # wxGlade: DialogAbout.<event_handler>
373        launchBrowser(config._nsf_url)
374        event.Skip()
375
376    def onDanseLogo(self, event):
377        """
378        """
379        # wxGlade: DialogAbout.<event_handler>
380        launchBrowser(config._danse_url)
381        event.Skip()
382
383    def onUTLogo(self, event):
384        """
385        """ 
386        # wxGlade: DialogAbout.<event_handler>
387        launchBrowser(config._inst_url)
388        event.Skip()
389
390    def onIsisLogo(self, event): 
391        """
392        """
393        # wxGlade: DialogAbout.<event_handler>
394        launchBrowser(config._isis_url)
395        event.Skip()
396
397    def onEssLogo(self, event):
398        """
399        """
400        # wxGlade: DialogAbout.<event_handler>
401        launchBrowser(config._ess_url)
402        event.Skip()
403
404    def onIllLogo(self, event):
405        """
406        """ 
407        # wxGlade: DialogAbout.<event_handler>
408        launchBrowser(config._ill_url)
409        event.Skip()
410
411    def onAnstoLogo(self, event):
412        """
413        """ 
414        # wxGlade: DialogAbout.<event_handler>
415        launchBrowser(config._ansto_url)
416        event.Skip()
417
418    def onTudelftLogo(self, event):
419        """
420        """ 
421        # wxGlade: DialogAbout.<event_handler>
422        launchBrowser(config._tudelft_url)
423        event.Skip()
424
425# end of class DialogAbout
426
427##### testing code ############################################################
428class MyApp(wx.App):
429    """
430    """
431    def OnInit(self):
432        """
433        """
434        wx.InitAllImageHandlers()
435        dialog = DialogAbout(None, -1, "")
436        self.SetTopWindow(dialog)
437        dialog.ShowModal()
438        dialog.Destroy()
439        return 1
440
441# end of class MyApp
442
443if __name__ == "__main__":
444    app = MyApp(0)
445    app.MainLoop()
446   
447##### end of testing code #####################################################   
Note: See TracBrowser for help on using the repository browser.