OSDN Git Service

Initial code for installer GUI. Doesn't actually do anything yet, but the GUI is...
authorJames Teh <jamie@jantrid.net>
Thu, 11 Aug 2011 08:47:42 +0000 (18:47 +1000)
committerJames Teh <jamie@jantrid.net>
Thu, 11 Aug 2011 08:47:42 +0000 (18:47 +1000)
source/gui/__init__.py
source/gui/installer.py [new file with mode: 0644]

index 99854c3..c16b09c 100644 (file)
@@ -242,6 +242,14 @@ class MainFrame(wx.Frame):
                        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
@@ -297,6 +305,8 @@ class SysTrayIcon(wx.TaskBarIcon):
                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
diff --git a/source/gui/installer.py b/source/gui/installer.py
new file mode 100644 (file)
index 0000000..3ac944b
--- /dev/null
@@ -0,0 +1,60 @@
+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