diff options
Diffstat (limited to 'wineconfig/firstrunwizard.py')
-rwxr-xr-x | wineconfig/firstrunwizard.py | 326 |
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 |