chiark / gitweb /
Disable the clipboard profile functionality, to prevent the unable to read clipboard...
[cura.git] / Cura / gui / preferencesDialog.py
1 __copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License"
2
3 import wx
4
5 from Cura.gui import configWizard
6 from Cura.gui import configBase
7 from Cura.util import machineCom
8 from Cura.util import profile
9 from Cura.util import pluginInfo
10 from Cura.util import resources
11
12 class preferencesDialog(wx.Dialog):
13         def __init__(self, parent):
14                 super(preferencesDialog, self).__init__(None, title=_("Preferences"))
15
16                 wx.EVT_CLOSE(self, self.OnClose)
17
18                 self.parent = parent
19                 extruderCount = int(profile.getMachineSetting('extruder_amount'))
20
21                 self.panel = configBase.configPanelBase(self)
22
23                 left, right, main = self.panel.CreateConfigPanel(self)
24
25                 printWindowTypes = ['Basic']
26                 for p in pluginInfo.getPluginList('printwindow'):
27                         printWindowTypes.append(p.getName())
28                 configBase.TitleRow(left, _("Print window"))
29                 configBase.SettingRow(left, 'printing_window', printWindowTypes)
30
31                 configBase.TitleRow(left, _("Colours"))
32                 configBase.SettingRow(left, 'model_colour', wx.Colour)
33                 for i in xrange(1, extruderCount):
34                         configBase.SettingRow(left, 'model_colour%d' % (i+1), wx.Colour)
35
36                 if len(resources.getLanguageOptions()) > 1:
37                         configBase.TitleRow(left, _("Language"))
38                         configBase.SettingRow(left, 'language', map(lambda n: n[1], resources.getLanguageOptions()))
39
40                 configBase.TitleRow(right, _("Filament settings"))
41                 configBase.SettingRow(right, 'filament_physical_density')
42                 configBase.SettingRow(right, 'filament_cost_kg')
43                 configBase.SettingRow(right, 'filament_cost_meter')
44
45                 #configBase.TitleRow(right, 'Slicer settings')
46                 #configBase.SettingRow(right, 'save_profile')
47
48                 configBase.TitleRow(right, 'SD Card settings')
49                 configBase.SettingRow(right, 'auto_detect_sd')
50                 configBase.SettingRow(right, 'sdcard_rootfolder')
51                 
52                 configBase.TitleRow(right, _("Cura settings"))
53                 configBase.SettingRow(right, 'check_for_updates')
54                 configBase.SettingRow(right, 'submit_slice_information')
55
56                 self.okButton = wx.Button(right, -1, 'Ok')
57                 right.GetSizer().Add(self.okButton, (right.GetSizer().GetRows(), 0), flag=wx.BOTTOM, border=5)
58                 self.okButton.Bind(wx.EVT_BUTTON, lambda e: self.Close())
59
60                 main.Fit()
61                 self.Fit()
62
63         def OnClose(self, e):
64                 #self.parent.reloadSettingPanels()
65                 self.Destroy()
66
67 class machineSettingsDialog(wx.Dialog):
68         def __init__(self, parent):
69                 super(machineSettingsDialog, self).__init__(None, title=_("Machine settings"))
70
71                 wx.EVT_CLOSE(self, self.OnClose)
72
73                 self.parent = parent
74
75                 self.panel = configBase.configPanelBase(self)
76                 self.SetSizer(wx.BoxSizer(wx.HORIZONTAL))
77                 self.GetSizer().Add(self.panel, 1, wx.EXPAND)
78                 self.nb = wx.Notebook(self.panel)
79                 self.panel.SetSizer(wx.BoxSizer(wx.VERTICAL))
80                 self.panel.GetSizer().Add(self.nb, 1, wx.EXPAND)
81
82                 for idx in xrange(0, profile.getMachineCount()):
83                         extruderCount = int(profile.getMachineSetting('extruder_amount', idx))
84                         left, right, main = self.panel.CreateConfigPanel(self.nb)
85                         configBase.TitleRow(left, _("Machine settings"))
86                         configBase.SettingRow(left, 'steps_per_e', index=idx)
87                         configBase.SettingRow(left, 'machine_width', index=idx)
88                         configBase.SettingRow(left, 'machine_depth', index=idx)
89                         configBase.SettingRow(left, 'machine_height', index=idx)
90                         configBase.SettingRow(left, 'extruder_amount', index=idx)
91                         configBase.SettingRow(left, 'has_heated_bed', index=idx)
92                         configBase.SettingRow(left, 'machine_center_is_zero', index=idx)
93                         configBase.SettingRow(left, 'machine_shape', index=idx)
94                         configBase.SettingRow(left, 'gcode_flavor', index=idx)
95
96                         configBase.TitleRow(right, _("Printer head size"))
97                         configBase.SettingRow(right, 'extruder_head_size_min_x', index=idx)
98                         configBase.SettingRow(right, 'extruder_head_size_min_y', index=idx)
99                         configBase.SettingRow(right, 'extruder_head_size_max_x', index=idx)
100                         configBase.SettingRow(right, 'extruder_head_size_max_y', index=idx)
101                         configBase.SettingRow(right, 'extruder_head_size_height', index=idx)
102
103                         for i in xrange(1, extruderCount):
104                                 configBase.TitleRow(left, _("Extruder %d") % (i+1))
105                                 configBase.SettingRow(left, 'extruder_offset_x%d' % (i), index=idx)
106                                 configBase.SettingRow(left, 'extruder_offset_y%d' % (i), index=idx)
107
108                         configBase.TitleRow(right, _("Communication settings"))
109                         configBase.SettingRow(right, 'serial_port', ['AUTO'] + machineCom.serialList(), index=idx)
110                         configBase.SettingRow(right, 'serial_baud', ['AUTO'] + map(str, machineCom.baudrateList()), index=idx)
111
112                         self.nb.AddPage(main, profile.getMachineSetting('machine_name', idx).title())
113
114                 self.nb.SetSelection(int(profile.getPreferenceFloat('active_machine')))
115
116                 self.buttonPanel = wx.Panel(self.panel)
117                 self.panel.GetSizer().Add(self.buttonPanel)
118
119                 self.buttonPanel.SetSizer(wx.BoxSizer(wx.HORIZONTAL))
120                 self.okButton = wx.Button(self.buttonPanel, -1, _('Ok'))
121                 self.okButton.Bind(wx.EVT_BUTTON, lambda e: self.Close())
122                 self.buttonPanel.GetSizer().Add(self.okButton, flag=wx.ALL, border=5)
123
124                 self.addButton = wx.Button(self.buttonPanel, -1, _('Add new machine'))
125                 self.addButton.Bind(wx.EVT_BUTTON, self.OnAddMachine)
126                 self.buttonPanel.GetSizer().Add(self.addButton, flag=wx.ALL, border=5)
127
128                 self.remButton = wx.Button(self.buttonPanel, -1, _('Remove machine'))
129                 self.remButton.Bind(wx.EVT_BUTTON, self.OnRemoveMachine)
130                 self.buttonPanel.GetSizer().Add(self.remButton, flag=wx.ALL, border=5)
131
132                 self.renButton = wx.Button(self.buttonPanel, -1, _('Change machine name'))
133                 self.renButton.Bind(wx.EVT_BUTTON, self.OnRenameMachine)
134                 self.buttonPanel.GetSizer().Add(self.renButton, flag=wx.ALL, border=5)
135
136                 main.Fit()
137                 self.Fit()
138
139         def OnAddMachine(self, e):
140                 self.Hide()
141                 self.parent.Hide()
142                 configWizard.ConfigWizard(True)
143                 self.parent.Show()
144                 self.parent.reloadSettingPanels()
145                 self.parent.updateMachineMenu()
146
147                 prefDialog = machineSettingsDialog(self.parent)
148                 prefDialog.Centre()
149                 prefDialog.Show()
150                 wx.CallAfter(self.Close)
151
152         def OnRemoveMachine(self, e):
153                 if profile.getMachineCount() < 2:
154                         wx.MessageBox(_("Cannot remove the last machine configuration in Cura"), _("Machine remove error"), wx.OK | wx.ICON_ERROR)
155                         return
156
157                 self.Hide()
158                 profile.removeMachine(self.nb.GetSelection())
159                 self.parent.reloadSettingPanels()
160                 self.parent.updateMachineMenu()
161
162                 prefDialog = machineSettingsDialog(self.parent)
163                 prefDialog.Centre()
164                 prefDialog.Show()
165                 wx.CallAfter(self.Close)
166
167         def OnRenameMachine(self, e):
168                 dialog = wx.TextEntryDialog(self, _("Enter the new name:"), _("Change machine name"), self.nb.GetPageText(self.nb.GetSelection()))
169                 if dialog.ShowModal() != wx.ID_OK:
170                         return
171                 self.nb.SetPageText(self.nb.GetSelection(), dialog.GetValue())
172                 profile.putMachineSetting('machine_name', dialog.GetValue(), self.nb.GetSelection())
173                 self.parent.updateMachineMenu()
174
175         def OnClose(self, e):
176                 self.parent.reloadSettingPanels()
177                 self.Destroy()