From d177e807aebbfa0fb0aa6b9e107495fd1121bbcc Mon Sep 17 00:00:00 2001 From: James Teh Date: Thu, 11 Aug 2011 18:47:42 +1000 Subject: [PATCH] Initial code for installer GUI. Doesn't actually do anything yet, but the GUI is usable. --- source/gui/__init__.py | 10 +++++++++ source/gui/installer.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 source/gui/installer.py diff --git a/source/gui/__init__.py b/source/gui/__init__.py index 99854c333..c16b09cf1 100644 --- a/source/gui/__init__.py +++ b/source/gui/__init__.py @@ -242,6 +242,14 @@ class MainFrame(wx.Frame): return messageBox(_("Successfully created a portable copy of NVDA at %s")%path,_("Success")) + def onInstallCommand(self, evt): + if isInMessageBox: + return + self.prePopup() + from gui.installer import InstallerDialog + InstallerDialog(self).Show() + self.postPopup() + class SysTrayIcon(wx.TaskBarIcon): def __init__(self, frame): @@ -297,6 +305,8 @@ class SysTrayIcon(wx.TaskBarIcon): if not globalVars.appArgs.secure: item = menu_tools.Append(wx.ID_ANY, _("Create Portable copy...")) self.Bind(wx.EVT_MENU, frame.onCreatePortableCopyCommand, item) + item = menu_tools.Append(wx.ID_ANY, _("Install NVDA...")) + self.Bind(wx.EVT_MENU, frame.onInstallCommand, item) item = menu_tools.Append(wx.ID_ANY, _("Reload plugins")) self.Bind(wx.EVT_MENU, frame.onReloadPluginsCommand, item) self.menu.AppendMenu(wx.ID_ANY, _("Tools"), menu_tools) diff --git a/source/gui/installer.py b/source/gui/installer.py new file mode 100644 index 000000000..3ac944b97 --- /dev/null +++ b/source/gui/installer.py @@ -0,0 +1,60 @@ +import os +import wx +import config +import versionInfo + +class InstallerDialog(wx.Dialog): + + def __init__(self, parent): + super(InstallerDialog, self).__init__(parent, title=_("Install NVDA")) + mainSizer = self.mainSizer = wx.BoxSizer(wx.VERTICAL) + + ctrl = self.startOnLogonCheckbox = wx.CheckBox(self, label=_("Use NVDA on the Windows logon screen")) + ctrl.Value = config.getStartOnLogonScreen() + mainSizer.Add(ctrl) + ctrl = self.advancedCheckbox = wx.CheckBox(self, label=_("Show &advanced options")) + ctrl.Bind(wx.EVT_CHECKBOX, self.onAdvanced) + ctrl.SetValue(False) + mainSizer.Add(ctrl) + + advancedSizer = self.advancedSizer = wx.BoxSizer(wx.VERTICAL) + + sizer = wx.StaticBoxSizer(wx.StaticBox(self, label=_("Install to:")), wx.HORIZONTAL) + # FIXME: Don't use os.getenv to get the path to Program Files. + ctrl = self.programFolderEdit = wx.TextCtrl(self, value=os.path.join(unicode(os.getenv("ProgramFiles")), versionInfo.name)) + sizer.Add(ctrl) + ctrl = wx.Button(self, label=_("Change &folder")) + ctrl.Bind(wx.EVT_BUTTON, self.onChangeProgramFolder) + sizer.Add(ctrl) + advancedSizer.Add(sizer) + + mainSizer.Add(advancedSizer) + mainSizer.Hide(advancedSizer, recursive=True) + + sizer = wx.BoxSizer(wx.HORIZONTAL) + ctrl = wx.Button(self, label=_("&Install"), id=wx.ID_OK) + ctrl.Bind(wx.EVT_BUTTON, self.onInstall) + sizer.Add(ctrl) + sizer.Add(wx.Button(self, id=wx.ID_CANCEL)) + # If we bind this using button.Bind, it fails to trigger when the dialog is closed. + self.Bind(wx.EVT_BUTTON, self.onCancel, id=wx.ID_CANCEL) + mainSizer.Add(sizer) + + self.SetSizer(mainSizer) + + def onAdvanced(self, evt): + self.mainSizer.Show(self.advancedSizer, show=evt.IsChecked(), recursive=True) + self.mainSizer.Layout() + + def onChangeProgramFolder(self, evt): + self.Disable() + with wx.DirDialog(self, _("Select Installation Folder"), defaultPath=self.programFolderEdit.Value) as d: + if d.ShowModal() == wx.ID_OK: + self.programFolderEdit.Value = d.Path + self.Enable() + + def onInstall(self, evt): + self.Destroy() + + def onCancel(self, evt): + self.Destroy() -- 2.11.0