You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tde-guidance/wineconfig/firstrunwizard.py

326 lines
14 KiB

#!/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 tdecore import *
from tdeui 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))