return\r
messageBox(_("Successfully created a portable copy of NVDA at %s")%path,_("Success"))\r
\r
+ def onInstallCommand(self, evt):\r
+ if isInMessageBox:\r
+ return\r
+ self.prePopup()\r
+ from gui.installer import InstallerDialog\r
+ InstallerDialog(self).Show()\r
+ self.postPopup()\r
+\r
class SysTrayIcon(wx.TaskBarIcon):\r
\r
def __init__(self, frame):\r
if not globalVars.appArgs.secure:\r
item = menu_tools.Append(wx.ID_ANY, _("Create Portable copy..."))\r
self.Bind(wx.EVT_MENU, frame.onCreatePortableCopyCommand, item)\r
+ item = menu_tools.Append(wx.ID_ANY, _("Install NVDA..."))\r
+ self.Bind(wx.EVT_MENU, frame.onInstallCommand, item)\r
item = menu_tools.Append(wx.ID_ANY, _("Reload plugins"))\r
self.Bind(wx.EVT_MENU, frame.onReloadPluginsCommand, item)\r
self.menu.AppendMenu(wx.ID_ANY, _("Tools"), menu_tools)\r
--- /dev/null
+import os\r
+import wx\r
+import config\r
+import versionInfo\r
+\r
+class InstallerDialog(wx.Dialog):\r
+\r
+ def __init__(self, parent):\r
+ super(InstallerDialog, self).__init__(parent, title=_("Install NVDA"))\r
+ mainSizer = self.mainSizer = wx.BoxSizer(wx.VERTICAL)\r
+\r
+ ctrl = self.startOnLogonCheckbox = wx.CheckBox(self, label=_("Use NVDA on the Windows logon screen"))\r
+ ctrl.Value = config.getStartOnLogonScreen()\r
+ mainSizer.Add(ctrl)\r
+ ctrl = self.advancedCheckbox = wx.CheckBox(self, label=_("Show &advanced options"))\r
+ ctrl.Bind(wx.EVT_CHECKBOX, self.onAdvanced)\r
+ ctrl.SetValue(False)\r
+ mainSizer.Add(ctrl)\r
+\r
+ advancedSizer = self.advancedSizer = wx.BoxSizer(wx.VERTICAL)\r
+\r
+ sizer = wx.StaticBoxSizer(wx.StaticBox(self, label=_("Install to:")), wx.HORIZONTAL)\r
+ # FIXME: Don't use os.getenv to get the path to Program Files.\r
+ ctrl = self.programFolderEdit = wx.TextCtrl(self, value=os.path.join(unicode(os.getenv("ProgramFiles")), versionInfo.name))\r
+ sizer.Add(ctrl)\r
+ ctrl = wx.Button(self, label=_("Change &folder"))\r
+ ctrl.Bind(wx.EVT_BUTTON, self.onChangeProgramFolder)\r
+ sizer.Add(ctrl)\r
+ advancedSizer.Add(sizer)\r
+\r
+ mainSizer.Add(advancedSizer)\r
+ mainSizer.Hide(advancedSizer, recursive=True)\r
+\r
+ sizer = wx.BoxSizer(wx.HORIZONTAL)\r
+ ctrl = wx.Button(self, label=_("&Install"), id=wx.ID_OK)\r
+ ctrl.Bind(wx.EVT_BUTTON, self.onInstall)\r
+ sizer.Add(ctrl)\r
+ sizer.Add(wx.Button(self, id=wx.ID_CANCEL))\r
+ # If we bind this using button.Bind, it fails to trigger when the dialog is closed.\r
+ self.Bind(wx.EVT_BUTTON, self.onCancel, id=wx.ID_CANCEL)\r
+ mainSizer.Add(sizer)\r
+\r
+ self.SetSizer(mainSizer)\r
+\r
+ def onAdvanced(self, evt):\r
+ self.mainSizer.Show(self.advancedSizer, show=evt.IsChecked(), recursive=True)\r
+ self.mainSizer.Layout()\r
+\r
+ def onChangeProgramFolder(self, evt):\r
+ self.Disable()\r
+ with wx.DirDialog(self, _("Select Installation Folder"), defaultPath=self.programFolderEdit.Value) as d:\r
+ if d.ShowModal() == wx.ID_OK:\r
+ self.programFolderEdit.Value = d.Path\r
+ self.Enable()\r
+\r
+ def onInstall(self, evt):\r
+ self.Destroy()\r
+\r
+ def onCancel(self, evt):\r
+ self.Destroy()\r