source: sasview/sansguiframe/src/sans/guiframe/startup_configuration.py @ 5ea34ec

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 5ea34ec was 53f9e40, checked in by Jae Cho <jhjcho@…>, 12 years ago

controlpanel frame size is added in start-configuration.

  • Property mode set to 100644
File size: 9.2 KB
Line 
1
2################################################################################
3#This software was developed by the University of Tennessee as part of the
4#Distributed Data Analysis of Neutron Scattering Experiments (DANSE)
5#project funded by the US National Science Foundation.
6#
7#See the license text in license.txt
8#
9#copyright 2009, University of Tennessee
10################################################################################
11import wx
12import os
13import sys
14import copy
15#import sans.guiframe.gui_manager as gui
16from sans.guiframe.events import StatusEvent 
17from sans.guiframe.gui_style import GUIFRAME
18from sans.guiframe import gui_manager as CURRENT
19from sans.guiframe.customdir  import SetupCustom
20# default configuration
21DEFAULT_STRINGS = {'GUIFRAME_WIDTH':-1,
22                   'GUIFRAME_HEIGHT':-1,
23                   'CONTROL_WIDTH':-1,
24                   'CONTROL_HEIGHT':-1,
25                   'PLOPANEL_WIDTH':-1,
26                   'DATAPANEL_WIDTH':-1,
27                   'DATALOADER_SHOW':True,
28                   'TOOLBAR_SHOW':True,
29                   'FIXED_PANEL':True,
30                   'WELCOME_PANEL_SHOW':False,
31                   'CLEANUP_PLOT':False,
32                   'DEFAULT_PERSPECTIVE':'Fitting',
33                   'DEFAULT_OPEN_FOLDER': None}
34try:
35    CURRENT_STRINGS = {'GUIFRAME_WIDTH':CURRENT.GUIFRAME_WIDTH,
36                       'GUIFRAME_HEIGHT':CURRENT.GUIFRAME_HEIGHT,
37                       'CONTROL_WIDTH':CURRENT.CONTROL_WIDTH,
38                       'CONTROL_HEIGHT':CURRENT.CONTROL_HEIGHT,
39                       'PLOPANEL_WIDTH':CURRENT.PLOPANEL_WIDTH,
40                       'DATAPANEL_WIDTH':CURRENT.DATAPANEL_WIDTH,
41                       'DATALOADER_SHOW':CURRENT.DATALOADER_SHOW,
42                       'TOOLBAR_SHOW':CURRENT.TOOLBAR_SHOW,
43                       'FIXED_PANEL':CURRENT.FIXED_PANEL,
44                       'WELCOME_PANEL_SHOW':CURRENT.WELCOME_PANEL_SHOW,
45                       'CLEANUP_PLOT':CURRENT.CLEANUP_PLOT,
46                       'DEFAULT_PERSPECTIVE':CURRENT.DEFAULT_PERSPECTIVE,
47                       'DEFAULT_OPEN_FOLDER':CURRENT.DEFAULT_OPEN_FOLDER}
48except:
49    CURRENT_STRINGS = DEFAULT_STRINGS
50   
51if sys.platform.count("win32") > 0:
52    PANEL_WIDTH = 265 
53    PANEL_HEIGHT = 235
54    FONT_VARIANT = 0
55else:
56    PANEL_WIDTH = 285
57    PANEL_HEIGHT = 255
58    FONT_VARIANT = 1
59   
60"""
61Dialog to set Appication startup configuration
62"""
63class StartupConfiguration(wx.Dialog):
64    """
65    Dialog for Startup Configuration
66    """
67    def __init__(self, parent, gui, id=-1, title="Startup Setting"):
68        wx.Dialog.__init__(self, parent, id, title, 
69                           size=(PANEL_WIDTH, PANEL_HEIGHT))
70        # parent
71        self.parent = parent
72        self.path = SetupCustom().find_dir()
73        self._gui = gui
74        # font size
75        self.SetWindowVariant(variant=FONT_VARIANT)
76        self.current_string = copy.deepcopy(CURRENT_STRINGS)
77        self.return_string = copy.deepcopy(DEFAULT_STRINGS)
78        # build layout
79        panel = wx.Panel(self, -1)
80        vbox = wx.BoxSizer(wx.VERTICAL)
81        wx.StaticBox(panel, -1, 'Set View-Configuration', (5, 5),
82                      (PANEL_WIDTH*0.94, PANEL_HEIGHT*0.7))
83        default_bt = wx.RadioButton(panel, -1, 'Default View', (15, 30), 
84                                    style=wx.RB_GROUP)
85        default_bt.Bind(wx.EVT_RADIOBUTTON, self.OnDefault)
86        default_bt.SetValue(True)
87        current_bt = wx.RadioButton(panel, -1, 'Current View', (15, 55))
88        current_bt.SetValue(False)
89        current_bt.Bind(wx.EVT_RADIOBUTTON, self.OnCurrent)
90        msg = "\nThis new configuration will take effect when\n"
91        msg += "running this application next time."
92        note_txt = wx.StaticText(panel, -1, msg, (15, 75))
93        note_txt.SetForegroundColour("black")
94        hbox = wx.BoxSizer(wx.HORIZONTAL)
95        cancelButton = wx.Button(self, -1, 'Cancel', size=(70, 25))
96        hbox.Add(cancelButton, 1, wx.RIGHT, 5)
97        cancelButton.Bind(wx.EVT_BUTTON, self.OnCancel)
98        okButton = wx.Button(self, -1, 'OK', size=(70, 25))
99        hbox.Add(okButton, 1, wx.RIGHT, 5)
100        okButton.Bind(wx.EVT_BUTTON, self.OnClose)
101        vbox.Add(panel)
102
103        vbox.Add(hbox, 1, wx.ALIGN_CENTER | wx.RIGHT | wx.BOTTOM, 5)
104        # set sizer
105        self.SetSizer(vbox)
106        #pos = self.parent.GetPosition()
107        #self.SetPosition(pos)
108       
109    def OnDefault(self, event=None):
110        """
111        Set to default
112        """
113        event.Skip()
114        # event object and selection
115        self.return_string = copy.deepcopy(DEFAULT_STRINGS)
116        return self.return_string
117       
118    def OnCurrent(self, event=None):
119        """
120        Set to curent setup
121        """
122        event.Skip()
123        if self.parent.IsMaximized():
124            gui_pw, gui_ph = (0, 0)
125        else:
126            gui_pw, gui_ph = self.parent.get_window_size()
127        self.current_string['GUIFRAME_WIDTH'] = gui_pw
128        self.current_string['GUIFRAME_HEIGHT'] = gui_ph
129        try:
130            p_size = None
131            for panel in self.parent.plot_panels.values():
132                #p_panel = self.parent._mgr.GetPane(panel.window_name)
133                width, _ = panel.frame.GetSizeTuple()
134                if panel.frame.IsShown():
135                    if p_size == None or width > p_size:
136                        p_size = width
137            if p_size == None:
138                p_size = CURRENT_STRINGS['PLOPANEL_WIDTH']
139            self.current_string['PLOPANEL_WIDTH'] = p_size
140           
141            try:
142                control_frame = self.parent.get_current_perspective().frame
143                control_w, control_h = control_frame.GetSizeTuple()
144                self.current_string['CONTROL_WIDTH'] = control_w
145                self.current_string['CONTROL_HEIGHT'] = control_h
146            except:
147                self.current_string['CONTROL_WIDTH'] = -1
148                self.current_string['CONTROL_HEIGHT'] = -1
149               
150            data_pw, _ = self.parent.panels["data_panel"].frame.GetSizeTuple()
151            if data_pw == None:
152                data_pw = CURRENT_STRINGS['DATAPANEL_WIDTH']
153            self.current_string['DATAPANEL_WIDTH'] = data_pw
154           
155            #label = self.parent._data_panel_menu.GetText()
156            label = self.parent.panels['data_panel'].frame.IsShown()
157            if label:# == 'Hide Data Explorer':
158                self.current_string['DATALOADER_SHOW'] = True
159            else:
160                self.current_string['DATALOADER_SHOW'] = False
161               
162            if self.parent._toolbar.IsShown():
163                self.current_string['TOOLBAR_SHOW'] = True
164            else:
165                self.current_string['TOOLBAR_SHOW'] = False
166               
167            style = self._gui & GUIFRAME.FLOATING_PANEL
168            if style == GUIFRAME.FLOATING_PANEL: 
169                self.current_string['FIXED_PANEL'] = False
170            else:
171                self.current_string['FIXED_PANEL'] = True
172               
173            if self.parent.panels['default'].frame.IsShown():
174                self.current_string['WELCOME_PANEL_SHOW'] = True
175            else:
176                self.current_string['WELCOME_PANEL_SHOW'] = False
177            self.current_string['CLEANUP_PLOT'] = \
178                                        self.parent.cleanup_plots
179            perspective = self.parent.get_current_perspective()
180            self.current_string['DEFAULT_PERSPECTIVE'] =\
181                                            str(perspective.sub_menu)
182            location = ''
183            temp = self.parent._default_save_location.split("\\")
184            for strings in temp:
185                location += (strings + "/")
186            self.current_string['DEFAULT_OPEN_FOLDER'] = location
187                        #self.parent._default_save_location.ascii_letters
188           
189        except:
190            raise
191        # event object and selection
192        self.return_string = self.current_string
193        return self.return_string
194
195    def OnCancel(self, event):
196        """
197        Close event
198        """
199        # clear event
200        event.Skip()
201        self.return_string = {}
202        self.Destroy()
203   
204    def OnClose(self, event):
205        """
206        Close event
207        """
208        # clear event
209        event.Skip()
210        fname = os.path.join(self.path, 'custom_config.py')
211        self.write_string(fname, self.return_string)
212        self.Destroy()
213
214    def write_string(self, fname, strings):
215        """
216        Write and Save file
217        """
218       
219        try:
220            out_f =  open(fname,'w')
221        except :
222            raise  #RuntimeError, "Error: Can not change the configuration..."
223        out_f.write("#Application appearance custom configuration\n" )
224        for key, item in strings.iteritems():
225            if (key == 'DEFAULT_PERSPECTIVE') or \
226                (key == 'DEFAULT_OPEN_FOLDER' and item != None):
227                out_f.write("%s = \"%s\"\n" % (key,str(item)))
228            else:
229                out_f.write("%s = %s\n" % (key,str(item)))
230   
231        out_f.close() 
232       
Note: See TracBrowser for help on using the repository browser.