summaryrefslogtreecommitdiffstats
path: root/wineconfig/firstrunwizard.py
diff options
context:
space:
mode:
Diffstat (limited to 'wineconfig/firstrunwizard.py')
-rwxr-xr-xwineconfig/firstrunwizard.py326
1 files changed, 326 insertions, 0 deletions
diff --git a/wineconfig/firstrunwizard.py b/wineconfig/firstrunwizard.py
new file mode 100755
index 0000000..c6d3d67
--- /dev/null
+++ b/wineconfig/firstrunwizard.py
@@ -0,0 +1,326 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# wineconfig.py - description #
+# ------------------------------ #
+# begin : Fri Mar 26 2004 #
+# copyright : (C) 2006 by Yuriy Kozlov #
+# email : yuriy.kozlov@gmail.com #
+# #
+###########################################################################
+# #
+# This program 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 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+from qt import *
+from kdecore import *
+from kdeui import *
+from kfile import *
+from kio import *
+import os
+import sys
+import signal
+import wineread
+import winewrite
+import drivedetect
+
+class FirstRunWizard(KWizard):
+ default_winepath = os.environ['HOME'] + "/.wine"
+
+ def __init__(self, parent = None, name=None, modal=0, fl=0):
+ KWizard.__init__(self,parent,name,modal,fl)
+
+ if not name:
+ self.setName("firstrunwizard")
+
+ self.imagedir = unicode(KGlobal.dirs().findDirs("data","guidance/pics")[0])
+
+ self.setupPage1()
+ self.setupPageVersion()
+ self.setupPageExistingWine()
+ self.setupPageCreateWine()
+ self.slotCreateExistingToggled(0)
+ #self.connect(self,SIGNAL("selected(const QString &)"),self.slotPageChanged)
+
+ #self.resize(QSize(600,480).expandedTo(self.minimumSizeHint()))
+ self.clearWState(Qt.WState_Polished)
+
+ def setupPage1(self):
+ page1 = QHBox(self,"page1")
+
+ self.kdewinepicture = QLabel(page1,"kdewinepicture")
+ self.kdewinepicture.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.kdewinepicture.sizePolicy().hasHeightForWidth()))
+ self.kdewinepicture.setMinimumSize(QSize(140,320))
+ self.kdewinepicture.setPixmap(QPixmap(self.imagedir+"kdewinewizard.png"))
+ #self.kdewinepicture.setScaledContents(1)
+
+ spacer = QWidget(page1)
+ spacer.setMinimumSize(QSize(6,300))
+
+ pagebody = QVBox(page1,"pagebody")
+ page1.setStretchFactor(pagebody,1)
+
+ introtext = QLabel(pagebody,"introtext")
+ introtext.setText(i18n("It appears that you do not yet have a Windows drive set up.\n" +\
+ "This wizard will help set it up so that you can run windows applications.\n"))
+
+ spacer = QWidget(pagebody)
+ spacer.setMinimumSize(QSize(6,20))
+
+ self.createinstall = True
+
+ createwinepathchoice = QRadioButton(i18n("Set up the fake windows installation " +\
+ "in the following directory:"),pagebody)
+
+ self.winepath = self.default_winepath
+ hbox = QHBox(pagebody)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.winefolderedit = KLineEdit(self.winepath,hbox)
+ self.urlcompletion = KURLCompletion(KURLCompletion.DirCompletion)
+ self.winefolderedit.setCompletionObject(self.urlcompletion)
+ self.winefolderedit.setCompletionMode(KGlobalSettings.CompletionPopup)
+ self.connect(self.winefolderedit,SIGNAL("textChanged(const QString &)"),self.slotWineFolderEdited)
+
+ self.browsecreatebutton = KPushButton(i18n("Browse"),hbox)
+ self.connect(self.browsecreatebutton,SIGNAL("clicked()"),self.slotBrowseClicked)
+
+ spacer = QWidget(pagebody)
+ spacer.setMinimumSize(QSize(6,10))
+
+ existingwinepathchoice = QRadioButton(i18n("There is already a fake windows installation " +\
+ "in the following directory:"),pagebody)
+
+ hbox = QHBox(pagebody)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.existingwinefolderedit = KLineEdit("",hbox)
+ self.urlcompletion = KURLCompletion(KURLCompletion.DirCompletion)
+ self.existingwinefolderedit.setCompletionObject(self.urlcompletion)
+ self.existingwinefolderedit.setCompletionMode(KGlobalSettings.CompletionPopup)
+ self.connect(self.existingwinefolderedit,SIGNAL("textChanged(const QString &)"),self.slotWineFolderEdited)
+
+ self.browseexistingbutton = KPushButton(i18n("Browse"),hbox)
+ self.connect(self.browseexistingbutton,SIGNAL("clicked()"),self.slotBrowseClicked)
+
+ self.createexistingchoicesgroup = QButtonGroup(pagebody,"createexistingchoicesgroup")
+ self.createexistingchoicesgroup.insert(createwinepathchoice,0)
+ self.createexistingchoicesgroup.insert(existingwinepathchoice,1)
+ self.createexistingchoicesgroup.setExclusive(True)
+ self.createexistingchoicesgroup.hide()
+ self.createexistingchoicesgroup.setButton(0)
+ self.connect(self.createexistingchoicesgroup,SIGNAL("clicked(int)"),self.slotCreateExistingToggled)
+
+ bottomspacer = QWidget(pagebody)
+ pagebody.setStretchFactor(bottomspacer,1)
+
+ self.addPage( page1, i18n("Setting up your windows drive") )
+
+ self.setBackEnabled( page1, False )
+ self.setNextEnabled( page1, True )
+ self.setHelpEnabled( page1, False )
+ self.setFinishEnabled( page1, False )
+
+ def setupPageExistingWine(self):
+ self.pageexisting = QHBox(self,"pageexisting")
+
+ self.kdewinepicture = QLabel(self.pageexisting,"kdewinepicture")
+ self.kdewinepicture.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.kdewinepicture.sizePolicy().hasHeightForWidth()))
+ self.kdewinepicture.setMinimumSize(QSize(140,320))
+ self.kdewinepicture.setPixmap(QPixmap(self.imagedir+"kdewinewizard.png"))
+ #self.kdewinepicture.setScaledContents(1)
+
+ spacer = QWidget(self.pageexisting)
+ spacer.setMinimumSize(QSize(6,300))
+
+ valid = wineread.VerifyWineDrive(self.winepath)
+
+ pagebody = QVBox(self.pageexisting,"pagebody")
+ self.pageexisting.setStretchFactor(pagebody,1)
+
+ existstext = QLabel(pagebody,"existstext")
+ if valid:
+ existstext.setText(i18n("A fake windows installation was found."))
+ else:
+ existstext.setText(i18n("No fake windows installation was found in\n" +\
+ self.winepath + "\nPlease go back and create one."))
+
+ bottomspacer = QWidget(pagebody)
+ pagebody.setStretchFactor(bottomspacer,1)
+
+ self.addPage( self.pageexisting, i18n("Setting up your windows drive") )
+
+ self.setBackEnabled( self.pageexisting, True )
+ self.setNextEnabled( self.pageexisting, True )
+ self.setHelpEnabled( self.pageexisting, False )
+ self.setFinishEnabled( self.pageexisting, True )
+
+ def setupPageCreateWine(self):
+ self.pagecreate = QHBox(self,"pagecreate")
+
+ self.kdewinepicture = QLabel(self.pagecreate,"kdewinepicture")
+ self.kdewinepicture.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.kdewinepicture.sizePolicy().hasHeightForWidth()))
+ self.kdewinepicture.setMinimumSize(QSize(140,320))
+ self.kdewinepicture.setPixmap(QPixmap(self.imagedir+"kdewinewizard.png"))
+ #self.kdewinepicture.setScaledContents(1)
+
+ spacer = QWidget(self.pagecreate)
+ spacer.setMinimumSize(QSize(6,300))
+
+ pagebody = QVBox(self.pagecreate,"pagebody")
+ self.pagecreate.setStretchFactor(pagebody,1)
+
+ self.createdtext = QLabel(pagebody,"existstext")
+ self.createdtext.setText(i18n("A fake windows installation was created for you in\n" +\
+ self.winepath))
+
+ bottomspacer = QWidget(pagebody)
+ pagebody.setStretchFactor(bottomspacer,1)
+
+ self.addPage( self.pagecreate, i18n("Setting up your windows drive") )
+
+ self.setBackEnabled( self.pagecreate, False )
+ self.setNextEnabled( self.pagecreate, True )
+ self.setHelpEnabled( self.pagecreate, False )
+ self.setFinishEnabled( self.pagecreate, True )
+
+ def setupPageVersion(self):
+ self.pageversion = QHBox(self,"pageversion")
+
+ self.kdewinepicture = QLabel(self.pageversion,"kdewinepicture")
+ self.kdewinepicture.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.kdewinepicture.sizePolicy().hasHeightForWidth()))
+ self.kdewinepicture.setMinimumSize(QSize(140,320))
+ self.kdewinepicture.setPixmap(QPixmap(self.imagedir+"kdewinewizard.png"))
+ #self.kdewinepicture.setScaledContents(1)
+
+ spacer = QWidget(self.pageversion)
+ spacer.setMinimumSize(QSize(6,300))
+
+ pagebody = QVBox(self.pageversion,"pagebody")
+ self.pageversion.setStretchFactor(pagebody,1)
+
+ versiontext = QLabel(pagebody,"versiontext")
+ versiontext.setText(i18n("What windows version would you like to emulate?\n"))
+
+ self.winversions = wineread.winversions
+
+ self.verid=1
+ self.versioncombo = KComboBox(0,pagebody,"versioncombo")
+ self.fillVersionCombo(self.versioncombo)
+ self.connect(self.versioncombo,SIGNAL("activated(int)"),self.slotVersionActivated)
+ self.__selectWinVer(self.verid)
+
+ bottomspacer = QWidget(pagebody)
+ pagebody.setStretchFactor(bottomspacer,1)
+
+ self.addPage( self.pageversion, i18n("Setting up your windows drive") )
+
+ self.setBackEnabled( self.pageversion, True )
+ self.setNextEnabled( self.pageversion, True )
+ self.setHelpEnabled( self.pageversion, False )
+ self.setFinishEnabled( self.pageversion, False )
+
+ def fillVersionCombo(self,combo):
+ """ Fill the combobox with the values from our list """
+ for version in self.winversions:
+ combo.insertItem(version[1])
+
+ def __selectWinVer(self,verid):
+ """
+ Sets the current windows version and selects it in the combo box
+ """
+ self.versioncombo.setCurrentItem(verid)
+
+ def slotVersionActivated(self,verid):
+ self.verid = verid
+
+ def slotFolderChanged(self,folder):
+ """ Change the directory when a new one is entered in the URL box """
+ self.winepath = str(folder)
+
+ def slotWineFolderEdited(self,folder):
+ """ Change the directory when a new one is entered manually in the URL box """
+ self.urlcompletion.makeCompletion("") # Doesn't seem like this should be required.
+ self.slotFolderChanged(folder)
+
+ def slotBrowseClicked(self):
+ """ Bring up a browse window to choose a directory """
+ path = KFileDialog.getExistingDirectory(wineread.winepath,self,i18n("Windows Directory"))
+ if path:
+ self.winepath = str(path)
+
+ #def slotPageChanged(self,pagename):
+ # if pagename == "pagecreate":
+ # self.CreateWindowsInstall()
+
+ def slotCreateExistingToggled(self, buttonid):
+ """ Called when the choice to create a new windows drive or use an existing one is changed """
+ if buttonid == 0:
+ self.createinstall = True
+ self.winefolderedit.setEnabled(True)
+ self.browsecreatebutton.setEnabled(True)
+ self.existingwinefolderedit.setEnabled(False)
+ self.browseexistingbutton.setEnabled(False)
+ self.setAppropriate(self.pageversion,True)
+ self.setAppropriate(self.pageexisting,False)
+ self.setAppropriate(self.pagecreate,True)
+ elif buttonid == 1:
+ self.createinstall = False
+ self.winefolderedit.setEnabled(False)
+ self.browsecreatebutton.setEnabled(False)
+ self.existingwinefolderedit.setEnabled(True)
+ self.browseexistingbutton.setEnabled(True)
+ self.setAppropriate(self.pageversion,False)
+ self.setAppropriate(self.pageexisting,True)
+ self.setAppropriate(self.pagecreate,False)
+
+ def showPage(self,page):
+ if page == self.pagecreate:
+ self.CreateWindowsInstall()
+
+ KWizard.showPage(self,page)
+
+ def CreateWindowsInstall(self):
+ winewrite.CreateWineDrive(self.winepath)
+ wineread.SetWinePath(self.winepath)
+
+ autodrives = drivedetect.autodetect()
+ autoshelllinks = drivedetect.autodetectshelllinks()
+
+ if autodrives[0] == 1:
+ KMessageBox.sorry(self, \
+ i18n("There were not enough letters to add all the autodetected drives."))
+ drives = autodrives[1]
+ drives[26:] = autoshelllinks
+
+ winewrite.SetDriveMappings(drives)
+
+ winewrite.SetAudioDriver('alsa')
+
+ dsoundsettings = {"HardwareAcceleration":"Full",
+ "DefaultSampleRate":"44100",
+ "DefaultBitsPerSample":"8",
+ "EmulDriver":"N"}
+
+ winewrite.SetDSoundSettings(dsoundsettings)
+
+ windowsettings = {"DXGrab":"N",
+ "DesktopDoubleBuffered":"Y",
+ "Managed":"Y",
+ "Desktop":""}
+
+ winewrite.SetWindowSettings(windowsettings)
+
+ d3dsettings = {"VertexShaderMode":"hardware",
+ "PixelShaderMode":"Y"}
+
+ winewrite.SetD3DSettings(d3dsettings)
+
+ winewrite.SetWinVersion(self.winversions[self.verid])
+
+ self.createdtext.setText(i18n("A fake windows installation was created for you in\n" +\
+ self.winepath)) \ No newline at end of file