Skip to content
Browse files

Fix TARGETDIR handling...

  • Loading branch information...
1 parent 7f79594 commit 5fcfef1945c8fb5cf8bd9ddfc9e318fd5699793d @dieterv committed Nov 27, 2010
Showing with 203 additions and 101 deletions.
  1. +60 −35 README.rst
  2. +18 −10 bin/build_installer.py
  3. +4 −3 wix/{2.22.1.xml → 2.22.2.xml}
  4. +42 −0 wix/build.xsd
  5. +16 −9 wix/template/PyGtk.wxs
  6. +63 −44 wix/template/WixUI_PyGtk.wxs
View
95 README.rst
@@ -1,16 +1,69 @@
+=======
+WARNING
+=======
+
+The all-in-one installer should be considered as a proof of concept.
+Please do not use it on productions systems just yet!
+
===============
pygtk-installer
===============
-The pygtk-installer project provides:
+The pygtk-installer project provides a set of tools to build the PyGTK
+all-in-one installer and it's various dependencies.
+There are currently versions of the all-in-one installer targeting Python 2.6
+and Python 2.7.
+
+Included tools:
- build_glade.sh: a tool that builds glade3 binaries for mswindows with
- "Python Widgets Support".
+ "Python Widgets Support" for each supported Python version.
- build_bindings.sh: a tool that builds windows installer packages (both .exe
- and .msi) for pycairo, pygobject, pygtk, pygoocanvas, pygtksourceview and pyrsvg.
+ and .msi) for pycairo, pygobject, pygtk, pygoocanvas, pygtksourceview and
+ pyrsvg for each supported Python version.
- build_installer.py: a tool that generates an all-in-one installer bundling
- the separate .msi installers created by build_bindings.sh and the gtk+ runtime
- packages from ftp.gnome.org/pub/GNOME/binaries/win32/.
+ the separate .msi installers created by build_bindings.sh, the glade binaries
+ created by build_glade.sh and various gtk+ runtime packages from
+ ftp.gnome.org/pub/GNOME/binaries/win32/.
+
+=============================
+Things you might want to know
+=============================
+
+#. Make absolutely sure the separate pycairo, pygtk, pygobject, etc packages
+ are uninstalled. The all-in-one installer does not check for their presence
+ and will happily overwrite files that belong to them. If you forget to check
+ for this you risk the following scenario:
+
+ - install Python
+ - install pycairo, pygtk and pygobject
+ - install pygtk all-in-one
+ - uninstall pycairo, pygtk and pygobject
+ ... you now have a *broken* pygtk all-in-one installation
+
+#. You no longer need to fiddle with the PATH environment variable. Ever.
+ The pygtk version that's installed with the all-in-one installer
+ takes care of loading the included gtk+ runtime on the PATH environment
+ variable on interpreter startup. As a consequence simply importing gobject,
+ gtk, etc works out of the box. As an added advantage there is no possible way
+ a different gtk+ runtime can interfere with pygtk all-in-one.
+
+#. I lied. If you have used the separate pygtk, pygobject and pycairo installers
+ but decide to migrate to the pygtk all-in-one installer, now is a good time to
+ clean your system or user PATH environment variable.
+
+#. If something doesn't work as expected:
+
+ - unsinstall pygtk all-in-one
+ - install pygtk all-in-one with the following command (from a "Command Prompt" aka cmd.exe)::
+
+ %WINDIR%\system32\msiexec.exe -i pygtk-all-in-one-2.22.X.win32-py2.X.msi /l*vx install.log
+
+ - then run Python with the following command (from a "Command Prompt" aka cmd.exe)::
+
+ python -v -c "import gtk">import.log 2>&1
+
+ - study both install.log and import.log...
==========
Versioning
@@ -22,33 +75,5 @@ major upgrades. The version number is constructed as follows::
PYGTK_MAJOR.PYGTK_MINOR.INSTALLER_REVISION
-=======
-WARNING
-=======
-
-The all-in-one installer should be considered as a proof of concept.
-Please do not use it on productions systems just yet.
-
-If you decide to give it a test anyway:
-
-#. Make absolutely sure the separate pycairo, pygtk, pygobject, etc
- packages are uninstalled. The all-in-one installer does not yet
- check for their presence and will happily overwrite them.
-#. You no longer need to fiddle with the PATH environment variable.
- The pygtk version that's installed with the all-in-one installer
- should take care of loading the included gtk+ runtime on PATH
- when you import pygtk; pygtk.require('2.0'). As a consequence
- simply importing gobject, gtk, etc *might* not work without
- the .require() call. The .require() call is typically done only
- once in a startup script somewhere.
-#. Why did you say "*might* not work" above? Ah, good question. If
- you've got another gtk+ runtime on your PATH environment variable - for
- example you installed Dia, MonoDevelop (gtk#), etc. - the PyGtk bindings might
- use one of those runtime libraries. In that case the behavior of the PyGtk
- bindings is unspecified (it might crash, error out, etc.).
-#. If it doesn't work, consider executing the following and study the
- output::
-
- $ python -v
- >>> import pygtk
- >>> pygtk.require('2.0)
+Stable releases are kept available for download, testing revisions are removed
+from the download area once they are superseeded by newer versions.
View
28 bin/build_installer.py
@@ -120,7 +120,7 @@ def __init__(self, arguments=None):
self.parse_options(arguments)
self.validate_environment_wix()
self.validate_environment_xmllint()
- self.load_product()
+ self.parse_build_description()
def parse_options(self, arguments=None):
if arguments == None:
@@ -186,23 +186,27 @@ def validate_environment_xmllint(self):
if not XML_LINT_VERSION <= int(xml_lint_version):
error('Your xmllint (version %s) is too old. A mininmum of version %s is required.' % (xml_lint_version, XML_LINT_VERSION))
- def load_product(self):
+ def parse_build_description(self):
global CACHEDIR
version = self.args[0]
CACHEDIR = join(TMPDIR, 'cache', version)
- productfile = join(WIXDIR, '%s.xml' % version)
+ schemafile = join(WIXDIR, 'build.xsd')
+ buildfile = join(WIXDIR, '%s.xml' % version)
if not isdir(CACHEDIR):
os.makedirs(CACHEDIR)
- if not isfile(productfile):
- error('Unable to load product "%s".' % productfile)
+ if not isfile(buildfile):
+ error('Unable to load product "%s".' % buildfile)
- self.buildfile = objectify.parse(productfile).getroot()
+ #schema = etree.XMLSchema(file=schemafile)
+ #parser = etree.XMLParser(schema=schema)
+ #self.buildfile = objectify.parse(buildfile, parser=parser).getroot()
+ self.buildfile = objectify.parse(buildfile).getroot()
etree.SubElement(self.buildfile, 'Version', Version=version)
- info('Loaded product "%s" (loaded from "%s").' % (version, productfile))
+ info('Loaded product "%s" (loaded from "%s").' % (version, buildfile))
def build(self):
for child in self.buildfile.Interpreters.iterchildren():
@@ -252,13 +256,17 @@ def merge(self):
self.do_compile()
self.do_link()
+ f = open(join(self.builddir, 'install.cmd'), 'w')
+ f.write('@echo off\r\nmsiexec /i pygtk-all-in-one-2.22.1.win32-py2.7.msi /l*vx install.log\r\n')
+ f.close()
+
info('Success: .msi installer targeting Python %s has been created ("%s")' % (PYTHON_FULLVERSION, self.msifile))
def do_clean(self):
info('Cleaning build environment...', 1)
if isdir(join(self.builddir, '..')):
- rmtree(join(self.builddir, '..'))
+ rmtree(join(self.builddir, '..'), ignore_errors=False)
def do_prepare(self):
info('Preparing build environment...', 1)
@@ -639,7 +647,7 @@ def do_unpack(self):
file.close()
def do_build(self):
- info('Creating .wxi include file...', 3)
+ info('Creating wix include file...', 3)
# Get the Wix/Product/Directory node
root = etree.parse(self.wxsfile).getroot()
@@ -716,7 +724,7 @@ def do_unpack(self):
zipfile.close()
def do_build(self):
- info('Creating .wxi include file...', 3)
+ info('Creating wix include file...', 3)
sourcedir = 'var.%s_sourcedir' % self.package.get('Id')
View
7 wix/2.22.1.xml → wix/2.22.2.xml
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Build>
+<!-- <Build xmlns="http://schemas.pygtk.org/2010/build"> -->
<!-- Currently only 2.6 (x86) and 2.7 (x86) are supported (until I
can get my hands on a 64bit machine...) -->
<Interpreters>
- <!-- <Interpreter Version="2.6" Platform="win32" /> -->
+ <Interpreter Version="2.6" Platform="win32" />
<!-- <Interpreter Version="2.6" Platform="win64" /> -->
<Interpreter Version="2.7" Platform="win32" />
<!-- <Interpreter Version="2.7" Platform="win64" /> -->
@@ -112,8 +113,8 @@
Url = "http://www.optionexplicit.be/projects/gnome-windows/20101102/"
Msi_26 = "pygoocanvas-0.14.2.win32-py2.6.msi"
Msi_27 = "pygoocanvas-0.14.2.win32-py2.7.msi"
- Digest_26 = "c33db1b3332331b674a98cc3a6c88232"
- Digest_27 = "0a373713e14440a5261da1bc9e4026f8" />
+ Digest_26 = "effa78d13f535213e338beb41badf419"
+ Digest_27 = "9fc8a8795c31e0c469958530adb80d93" />
<Package Id = "libgoocanvas"
Type = "ArchiveSourcePackage"
View
42 wix/build.xsd
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://schemas.pygtk.org/2010/build"
+ xmlns="http://schemas.pygtk.org/2010/build">
+ <xs:annotation>
+ <xs:documentation>
+ <![CDATA[Copyright © 2010 pygtk-installer Contributors
+
+ This file is part of pygtk-installer.
+
+ pygtk-installer is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ pygtk-installer is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with pygtk-installer. If not, see <http://www.gnu.org/licenses/>.]]>
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="Build">
+ <xs:annotation><xs:documentation>
+ This is the top-level container element for every build description file.
+ </xs:documentation></xs:annotation>
+ <xs:complexType>
+ <xs:choice minOccurs="0">
+ <xs:sequence>
+ <xs:choice minOccurs="1" maxOccurs="1">
+ <xs:element ref="Interpreters"/>
+ <xs:element ref="Product"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
View
25 wix/template/PyGtk.wxs
@@ -82,28 +82,35 @@
<Icon Id="PyGtkIcon" SourceFile="$(var.SrcImages)/PyGtkIcon.ico" />
<Property Id="ARPPRODUCTICON" Value="PyGtkIcon" />
+ <Property Id="_BrowseProperty" Value="TARGETDIR" />
<Property Id="PYTHON.MACHINE">
- <RegistrySearch Id="python.machine" Root="HKLM" Key="SOFTWARE\Python\PythonCore\$(var.PythonVersion)\InstallPath" Type="raw" />
+ <RegistrySearch Id="PYTHON.MACHINE" Root="HKLM" Key="SOFTWARE\Python\PythonCore\$(var.PythonVersion)\InstallPath" Type="raw" />
</Property>
<Property Id="PYTHON.USER">
- <RegistrySearch Id="python.user" Root="HKCU" Key="SOFTWARE\Python\PythonCore\$(var.PythonVersion)\InstallPath" Type="raw" />
+ <RegistrySearch Id="PYTHON.USER" Root="HKCU" Key="SOFTWARE\Python\PythonCore\$(var.PythonVersion)\InstallPath" Type="raw" />
</Property>
+ <CustomAction Id="PythonX" Property="PYTHONDIR" Value="[WindowsVolume]PythonX" Execute="firstSequence" />
<CustomAction Id="PythonFromMachine" Property="PYTHONDIR" Value="[PYTHON.MACHINE]" Execute="firstSequence" />
<CustomAction Id="PythonFromUser" Property="PYTHONDIR" Value="[PYTHON.USER]" Execute="firstSequence" />
+ <CustomAction Id="PythonDetected" Property="PythonDetected" Value="PYTHON.MACHINE Or PYTHON.USER" Execute="firstSequence" />
<CustomAction Id="InitialTargetDir" Property="TARGETDIR" Value="[PYTHONDIR]" Execute="firstSequence" />
<InstallExecuteSequence>
- <Custom Action="PythonFromMachine" Sequence="401">PYTHON.MACHINE</Custom>
- <Custom Action="PythonFromUser" Sequence="402">PYTHON.USER</Custom>
- <Custom Action="InitialTargetDir" Sequence="403">TARGETDIR=""</Custom>
+ <Custom Action="PythonX" Sequence="401" />
+ <Custom Action="PythonFromMachine" Sequence="402">PYTHON.MACHINE</Custom>
+ <Custom Action="PythonFromUser" Sequence="403">PYTHON.USER</Custom>
+ <Custom Action="PythonDetected" Sequence="404">PythonDetected</Custom>
+ <Custom Action="InitialTargetDir" Sequence="405" />
<RemoveExistingProducts Sequence="1401" />
</InstallExecuteSequence>
<InstallUISequence>
- <Custom Action="PythonFromMachine" Sequence="401">PYTHON.MACHINE</Custom>
- <Custom Action="PythonFromUser" Sequence="402">PYTHON.USER</Custom>
- <Custom Action="InitialTargetDir" Sequence="403">TARGETDIR=""</Custom>
+ <Custom Action="PythonX" Sequence="401" />
+ <Custom Action="PythonFromMachine" Sequence="402">PYTHON.MACHINE</Custom>
+ <Custom Action="PythonFromUser" Sequence="403">PYTHON.USER</Custom>
+ <Custom Action="PythonDetected" Sequence="404">PythonDetected</Custom>
+ <Custom Action="InitialTargetDir" Sequence="405" />
</InstallUISequence>
<Feature Id="PyGTKAllInOne"
@@ -119,7 +126,7 @@
</Feature>
<Directory Id="TARGETDIR" Name="SourceDir">
- <!-- Prevent run from network -->
+ <!-- Referenced by container Features -->
<Component Id="Empty" KeyPath='yes' Guid="{2957BDC1-E807-49fb-A46D-F70834B326C4}">
<CreateFolder />
</Component>
View
107 wix/template/WixUI_PyGtk.wxs
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- This file is an adaptation of src/ext/UIExtension/wixlib/WixUI_Mondo.wxs
+ This file is an adaptation of src/ext/UIExtension/wixlib/WixUI_PyGtk.wxs
and src/ext/UIExtension/wixlib/CustomizeDlg.wxs as distributed by the WiX
project.
-->
@@ -20,74 +20,64 @@
<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
<UI Id="WixUI_PyGTK">
- <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
- <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
- <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
+ <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
+ <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
+ <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
- <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
- <Property Id="WixUI_Mode" Value="Mondo" />
+ <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
+ <Property Id="WixUI_Mode" Value="FeatureTree" />
- <DialogRef Id="ErrorDlg" />
- <DialogRef Id="FatalError" />
- <DialogRef Id="FilesInUse" />
- <DialogRef Id="MsiRMFilesInUse" />
- <DialogRef Id="PrepareDlg" />
- <DialogRef Id="ProgressDlg" />
- <DialogRef Id="ResumeDlg" />
- <DialogRef Id="UserExit" />
+ <DialogRef Id="ErrorDlg" />
+ <DialogRef Id="FatalError" />
+ <DialogRef Id="FilesInUse" />
+ <DialogRef Id="MsiRMFilesInUse" />
+ <DialogRef Id="PrepareDlg" />
+ <DialogRef Id="ProgressDlg" />
+ <DialogRef Id="ResumeDlg" />
+ <DialogRef Id="UserExit" />
- <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
+ <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
- <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg">NOT Installed AND NOT PATCH</Publish>
- <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>
+ <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="PyGTK_CustomizeDlg">NOT Installed</Publish>
+ <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>
- <Publish Dialog="SetupTypeDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
- <Publish Dialog="SetupTypeDlg" Control="TypicalButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
- <Publish Dialog="SetupTypeDlg" Control="CustomButton" Event="NewDialog" Value="PyGTK_CustomizeDlg">1</Publish>
- <Publish Dialog="SetupTypeDlg" Control="CompleteButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Publish Dialog="PyGTK_CustomizeDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="1">Installed</Publish>
+ <Publish Dialog="PyGTK_CustomizeDlg" Control="Back" Event="NewDialog" Value="PyGTK_CustomizeDlg" Order="2">NOT Installed</Publish>
+ <Publish Dialog="PyGTK_CustomizeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
- <Publish Dialog="PyGTK_CustomizeDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="1">WixUI_InstallMode = "Change"</Publish>
- <Publish Dialog="PyGTK_CustomizeDlg" Control="Back" Event="NewDialog" Value="SetupTypeDlg" Order="2">WixUI_InstallMode = "InstallCustom"</Publish>
- <Publish Dialog="PyGTK_CustomizeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="PyGTK_CustomizeDlg" Order="1">NOT Installed OR WixUI_InstallMode = "Change"</Publish>
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="3">Installed AND PATCH</Publish>
- <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="PyGTK_CustomizeDlg" Order="1">WixUI_InstallMode = "InstallCustom"</Publish>
- <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="SetupTypeDlg" Order="2">WixUI_InstallMode = "InstallTypical" OR WixUI_InstallMode = "InstallComplete"</Publish>
- <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="PyGTK_CustomizeDlg" Order="3">WixUI_InstallMode = "Change"</Publish>
- <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="4">WixUI_InstallMode = "Repair" OR WixUI_InstallMode = "Remove"</Publish>
- <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="PyGTK_CustomizeDlg" Order="2">WixUI_InstallMode = "Update"</Publish>
+ <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
- <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
-
- <Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" Event="NewDialog" Value="PyGTK_CustomizeDlg">1</Publish>
- <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
- <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
- <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" Event="NewDialog" Value="PyGTK_CustomizeDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
<Dialog Id="PyGTK_CustomizeDlg" Width="370" Height="270" Title="!(loc.CustomizeDlg_Title)" TrackDiskSpace="yes">
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.CustomizeDlgBannerBitmap)" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="210" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.CustomizeDlgTitle)" />
- <Control Id="Tree" Type="SelectionTree" X="25" Y="85" Width="175" Height="115" Property="_BrowseProperty" Sunken="yes" TabSkip="no" Text="!(loc.CustomizeDlgTree)" />
<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.CustomizeDlgDescription)" />
<Control Id="Text" Type="Text" X="25" Y="55" Width="320" Height="20" Text="!(loc.CustomizeDlgText)" />
- <Control Id="Box" Type="GroupBox" X="210" Y="81" Width="150" Height="118" />
- <Control Id="ItemDescription" Type="Text" X="215" Y="90" Width="131" Height="50" Text="!(loc.CustomizeDlgItemDescription)">
+ <Control Id="Tree" Type="SelectionTree" X="25" Y="85" Width="200" Height="115" Property="_BrowseProperty" Sunken="yes" TabSkip="no" Text="!(loc.CustomizeDlgTree)" />
+ <Control Id="Box" Type="GroupBox" X="235" Y="81" Width="125" Height="118" />
+ <Control Id="ItemDescription" Type="Text" X="240" Y="90" Width="106" Height="50" Text="!(loc.CustomizeDlgItemDescription)">
<Subscribe Event="SelectionDescription" Attribute="Text" />
</Control>
- <Control Id="ItemSize" Type="Text" X="215" Y="140" Width="131" Height="50" Text="!(loc.CustomizeDlgItemSize)">
+ <Control Id="ItemSize" Type="Text" X="240" Y="140" Width="106" Height="50" Text="!(loc.CustomizeDlgItemSize)">
<Subscribe Event="SelectionSize" Attribute="Text" />
</Control>
<Control Id="LocationLabel" Type="Text" X="25" Y="210" Width="65" Height="10" Text="!(loc.CustomizeDlgLocationLabel)">
- <!-- <Subscribe Event="SelectionPathOn" Attribute="Visible" /> -->
<Condition Action="hide">Installed</Condition>
</Control>
- <Control Id="Location" Type="Text" X="90" Y="210" Width="200" Height="20" Text="!(loc.CustomizeDlgLocation)">
- <!-- <Subscribe Event="SelectionPath" Attribute="Text" />
- <Subscribe Event="SelectionPathOn" Attribute="Visible" /> -->
+ <Control Id="Location" Type="Text" X="90" Y="210" Width="200" Height="20" Text="[TARGETDIR]">
<Condition Action="hide">Installed</Condition>
</Control>
<Control Id="Browse" Type="PushButton" X="294" Y="210" Width="66" Height="17" Text="!(loc.CustomizeDlgBrowse)">
- <Publish Event="SelectionBrowse" Value="BrowseDlg">1</Publish>
+ <Publish Event="SelectionBrowse" Value="PyGtkBrowseDlg">1</Publish>
<Condition Action="hide">Installed</Condition>
<Condition Action="disable">Installed</Condition>
</Control>
@@ -108,6 +98,35 @@
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
</Dialog>
+ <Dialog Id="PyGtkBrowseDlg" Width="370" Height="270" Title="!(loc.BrowseDlg_Title)">
+ <Control Id="PathEdit" Type="PathEdit" X="25" Y="202" Width="320" Height="18" Property="_BrowseProperty" Indirect="yes" />
+ <Control Id="OK" Type="PushButton" X="240" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUIOK)">
+ <Publish Event="SetTargetPath" Value="[_BrowseProperty]">1</Publish>
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
+ <Publish Event="Reset" Value="0">1</Publish>
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="!(loc.BrowseDlgComboLabel)" />
+ <Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80" Property="_BrowseProperty" Indirect="yes" Fixed="yes" Remote="yes">
+ <Subscribe Event="IgnoreChange" Attribute="IgnoreChange" />
+ </Control>
+ <Control Id="WixUI_Bmp_Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="!(loc.BrowseDlgWixUI_Bmp_UpTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="!(loc.BrowseDlgWixUI_Bmp_Up)">
+ <Publish Event="DirectoryListUp" Value="0">1</Publish>
+ </Control>
+ <Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" ToolTip="!(loc.BrowseDlgNewFolderTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="!(loc.BrowseDlgNewFolder)">
+ <Publish Event="DirectoryListNew" Value="0">1</Publish>
+ </Control>
+ <Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="98" Property="_BrowseProperty" Sunken="yes" Indirect="yes" TabSkip="no" />
+ <Control Id="PathLabel" Type="Text" X="25" Y="190" Width="320" Height="10" TabSkip="no" Text="!(loc.BrowseDlgPathLabel)" />
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.BrowseDlgBannerBitmap)" />
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.BrowseDlgDescription)" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.BrowseDlgTitle)" />
+ </Dialog>
+
</UI>
<UIRef Id="WixUI_Common" />

0 comments on commit 5fcfef1

Please sign in to comment.
Something went wrong with that request. Please try again.