#!/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))