Switch to PySide (+ Arch, Draft & Start)

This commit is contained in:
Yorik van Havre 2014-01-06 13:26:49 -02:00
parent e9711ec7c9
commit 1d709ade42
24 changed files with 74 additions and 90582 deletions

View File

@ -23,9 +23,9 @@
#include "PreCompiled.h"
// Remove this block when activating PySide support!
#undef HAVE_SHIBOKEN
#undef HAVE_PYSIDE
// Uncomment this block to remove PySide support and switch back to PyQt
// #undef HAVE_SHIBOKEN
// #undef HAVE_PYSIDE
#ifdef FC_OS_WIN32
#undef max

View File

@ -23,7 +23,7 @@
import FreeCAD,FreeCADGui,Draft,math,DraftVecUtils,ArchCommands
from FreeCAD import Vector
from PyQt4 import QtCore, QtGui
from PySide import QtCore, QtGui
from pivy import coin
from DraftTools import translate

View File

@ -22,7 +22,7 @@
#***************************************************************************
import FreeCAD,FreeCADGui,Draft,ArchCommands,ArchFloor
from PyQt4 import QtCore
from PySide import QtCore
from DraftTools import translate
__title__="FreeCAD Building"

View File

@ -23,7 +23,7 @@
import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils
from FreeCAD import Vector
from PyQt4 import QtCore
from PySide import QtCore
from DraftTools import translate
__title__="FreeCAD Arch Commands"

View File

@ -27,7 +27,7 @@ __url__ = "http://www.freecadweb.org"
import FreeCAD,FreeCADGui,Draft
from FreeCAD import Vector
from PyQt4 import QtGui,QtCore
from PySide import QtGui,QtCore
from DraftTools import translate
def addToComponent(compobject,addobject,mod=None):

View File

@ -22,7 +22,7 @@
#***************************************************************************
import FreeCAD,FreeCADGui,Draft,ArchCommands
from PyQt4 import QtCore
from PySide import QtCore
from DraftTools import translate
__title__="FreeCAD Arch Floor"

View File

@ -23,7 +23,7 @@
import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils,ArchCommands
from FreeCAD import Vector
from PyQt4 import QtCore
from PySide import QtCore
from DraftTools import translate
__title__="FreeCAD Arch Frame"

View File

@ -23,7 +23,7 @@
import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils,ArchCommands
from FreeCAD import Vector
from PyQt4 import QtCore
from PySide import QtCore
from DraftTools import translate
__title__="FreeCAD Rebar"

View File

@ -23,7 +23,7 @@
import FreeCAD,FreeCADGui,Draft,ArchComponent, DraftVecUtils
from FreeCAD import Vector
from PyQt4 import QtCore
from PySide import QtCore
from DraftTools import translate
__title__="FreeCAD Roof"

View File

@ -23,7 +23,7 @@
import FreeCAD,FreeCADGui,ArchComponent,WorkingPlane,math,Draft,ArchCommands,DraftVecUtils
from FreeCAD import Vector
from PyQt4 import QtCore
from PySide import QtCore
from pivy import coin
from DraftTools import translate

View File

@ -22,7 +22,7 @@
#***************************************************************************
import FreeCAD,FreeCADGui,Draft,ArchCommands,ArchFloor
from PyQt4 import QtCore
from PySide import QtCore
from DraftTools import translate
__title__="FreeCAD Site"

View File

@ -27,7 +27,7 @@ __url__ = "http://www.freecadweb.org"
import FreeCAD,FreeCADGui,ArchComponent,ArchCommands,math,Draft
from DraftTools import translate
from PyQt4 import QtCore
from PySide import QtCore
def makeSpace(objects=None,name="Space"):
"""makeSpace([objects]): Creates a space object from the given objects. Objects can be one

View File

@ -28,7 +28,7 @@ __url__ = "http://www.freecadweb.org"
import FreeCAD,FreeCADGui,ArchComponent,ArchCommands,Draft,DraftVecUtils,math
from FreeCAD import Vector
from DraftTools import translate
from PyQt4 import QtCore
from PySide import QtCore
def makeStairs(base=None,length=4.5,width=1,height=3,steps=17):

View File

@ -23,7 +23,7 @@
import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils,ArchCommands
from FreeCAD import Vector
from PyQt4 import QtCore
from PySide import QtCore, QtGui
from DraftTools import translate
__title__="FreeCAD Structure"
@ -339,11 +339,7 @@ class _CommandStructure:
'Accel': "S, T",
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Structure","Creates a structure object from scratch or from a selected object (sketch, wire, face or solid)")}
def Activated(self):
global QtGui, QtCore
from PyQt4 import QtGui, QtCore
def Activated(self):
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch")
self.Length = p.GetFloat("StructureLength",100)
self.Width = p.GetFloat("StructureWidth",100)

View File

@ -23,7 +23,7 @@
import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils,ArchCommands,math
from FreeCAD import Vector
from PyQt4 import QtCore
from PySide import QtCore, QtGui
from DraftTools import translate
__title__="FreeCAD Wall"
@ -141,10 +141,6 @@ class _CommandWall:
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Wall","Creates a wall object from scratch or from a selected object (wire, face or solid)")}
def Activated(self):
global QtGui, QtCore
from PyQt4 import QtGui, QtCore
self.Align = "Center"
self.Length = None
self.continueCmd = False

View File

@ -23,7 +23,7 @@
import FreeCAD,FreeCADGui,Draft,ArchComponent,DraftVecUtils,ArchCommands
from FreeCAD import Vector
from PyQt4 import QtCore,QtGui,QtSvg
from PySide import QtCore,QtGui,QtSvg
from DraftTools import translate
__title__="FreeCAD Window"

File diff suppressed because one or more lines are too long

View File

@ -35,7 +35,7 @@ General description:
The Draft module is a FreeCAD module for drawing/editing 2D entities.
The aim is to give FreeCAD basic 2D-CAD capabilities (similar
to Autocad and other similar software). This modules is made to be run
inside FreeCAD and needs the PyQt4 and pivy modules available.
inside FreeCAD and needs the PySide and pivy modules available.
User manual:
@ -459,7 +459,7 @@ def select(objs=None):
def loadSvgPatterns():
"loads the default Draft SVG patterns and custom patters if available"
import importSVG
from PyQt4 import QtCore
from PySide import QtCore
FreeCAD.svgpatterns = {}
# getting default patterns
patfiles = QtCore.QDir(":/patterns").entryList()
@ -499,7 +499,7 @@ def loadTexture(filename,size=None):
it will be scaled to match the given size."""
if gui:
from pivy import coin
from PyQt4 import QtGui,QtSvg
from PySide import QtGui,QtSvg
try:
p = QtGui.QImage(filename)
# buggy - TODO: allow to use resolutions
@ -2728,7 +2728,7 @@ class _ViewProviderDraft:
if hasattr(self.Object,"Shape"):
if self.Object.Shape.Faces:
from pivy import coin
from PyQt4 import QtCore
from PySide import QtCore
path = None
if hasattr(vobj,"TextureImage"):
if vobj.TextureImage:

View File

@ -33,21 +33,10 @@ Report to Draft.py for info
import FreeCAD, FreeCADGui, os, Draft, sys
try:
from PyQt4 import QtCore,QtGui,QtSvg
from PySide import QtCore,QtGui,QtSvg
except:
FreeCAD.Console.PrintMessage("Error: Python-qt4 package must be installed on your system to use the Draft module.")
def getMainWindow():
"returns the main window"
# using QtGui.qApp.activeWindow() isn't very reliable because if another
# widget than the mainwindow is active (e.g. a dialog) the wrong widget is
# returned
toplevel = QtGui.qApp.topLevelWidgets()
for i in toplevel:
if i.metaObject().className() == "Gui::MainWindow":
return i
raise Exception("No main window found")
class todo:
''' static todo class, delays execution of functions. Use todo.delay
to schedule geometry manipulation that would crash coin if done in the
@ -114,7 +103,7 @@ def translate(context,text):
# Customized widgets
#---------------------------------------------------------------------------
class DraftDockWidget(QtGui.QWidget):
class DraftDockWidget(QtGui.QDockWidget):
"custom Widget that emits a resized() signal when resized"
def __init__(self,parent = None):
QtGui.QDockWidget.__init__(self,parent)
@ -201,7 +190,7 @@ class DraftToolBar:
self.draftWidget.setObjectName("draftToolbar")
self.draftWidget.setTitleBarWidget(self.baseWidget)
self.draftWidget.setWindowTitle(translate("draft", "draft Command Bar"))
self.mw = getMainWindow()
self.mw = FreeCADGui.getMainWindow()
self.mw.addDockWidget(QtCore.Qt.TopDockWidgetArea,self.draftWidget)
self.draftWidget.setVisible(False)
self.draftWidget.toggleViewAction().setVisible(False)
@ -1015,7 +1004,7 @@ class DraftToolBar:
if (self.labelSString.isVisible()):
if self.SStringValue.text():
# print "debug: D_G DraftToolBar.validateSString type(SStringValue.text): " str(type(self.SStringValue.text))
self.sourceCmd.validSString(str(self.SStringValue.text().toUtf8())) # QString to QByteArray to PyString
self.sourceCmd.validSString(str(self.SStringValue.text())) # QString to QByteArray to PyString
else:
FreeCAD.Console.PrintMessage(translate("draft", "Please enter a text string."))
@ -1314,7 +1303,7 @@ class DraftToolBar:
self.groupmenu = QtGui.QMenu()
for i in mlist:
self.groupmenu.addAction(i)
pos = getMainWindow().cursor().pos()
pos = FreeCADGui.getMainWindow().cursor().pos()
self.groupmenu.popup(pos)
QtCore.QObject.connect(self.groupmenu,QtCore.SIGNAL("triggered(QAction *)"),self.popupTriggered)

View File

@ -29,7 +29,7 @@ __url__ = "http://www.freecadweb.org"
import FreeCAD, FreeCADGui, math, Draft, DraftGui, DraftTrackers, DraftVecUtils
from FreeCAD import Vector
from pivy import coin
from PyQt4 import QtCore,QtGui
from PySide import QtCore,QtGui
class Snapper:
"""The Snapper objects contains all the functionality used by draft
@ -53,7 +53,6 @@ class Snapper:
def __init__(self):
self.lastObj = [None,None]
self.views = []
self.maxEdges = 0
self.radius = 0
self.constraintAxis = None
@ -137,7 +136,7 @@ class Snapper:
if not hasattr(self,"toolbar"):
self.makeSnapToolBar()
mw = DraftGui.getMainWindow()
mw = FreeCADGui.getMainWindow()
bt = mw.findChild(QtGui.QToolBar,"Draft Snap")
if not bt:
mw.addToolBar(self.toolbar)
@ -797,21 +796,20 @@ class Snapper:
def setCursor(self,mode=None):
"setCursor(self,mode=None): sets or resets the cursor to the given mode or resets"
if self.selectMode:
for v in self.views:
v.unsetCursor()
self.views = []
if self.selectMode:
mw = FreeCADGui.getMainWindow()
for w in mw.findChildren(QtGui.QWidget):
if w.metaObject().className() == "SoQtGLArea":
w.unsetCursor()
self.cursorMode = None
elif not mode:
for v in self.views:
v.unsetCursor()
self.views = []
mw = FreeCADGui.getMainWindow()
for w in mw.findChildren(QtGui.QWidget):
if w.metaObject().className() == "SoQtGLArea":
w.unsetCursor()
self.cursorMode = None
else:
if mode != self.cursorMode:
if not self.views:
mw = DraftGui.getMainWindow()
self.views = mw.findChildren(QtGui.QWidget,"QtGLArea")
baseicon = QtGui.QPixmap(":/icons/Draft_Cursor.svg")
newicon = QtGui.QPixmap(32,24)
newicon.fill(QtCore.Qt.transparent)
@ -823,8 +821,10 @@ class Snapper:
qp.drawPixmap(QtCore.QPoint(16, 8), tp);
qp.end()
cur = QtGui.QCursor(newicon,8,8)
for v in self.views:
v.setCursor(cur)
mw = FreeCADGui.getMainWindow()
for w in mw.findChildren(QtGui.QWidget):
if w.metaObject().className() == "SoQtGLArea":
w.setCursor(cur)
self.cursorMode = mode
def restack(self):
@ -1129,7 +1129,7 @@ class Snapper:
"shows the toolbar and the grid"
if not hasattr(self,"toolbar"):
self.makeSnapToolBar()
mw = DraftGui.getMainWindow()
mw = FreeCADGui.getMainWindow()
bt = mw.findChild(QtGui.QToolBar,"Draft Snap")
if not bt:
mw.addToolBar(self.toolbar)

View File

@ -67,7 +67,7 @@ MODALT = MODS[Draft.getParam("modalt",2)]
def translate(context,text):
"convenience function for Qt translator"
return QtGui.QApplication.translate(context, text, None, QtGui.QApplication.UnicodeUTF8).toUtf8()
return QtGui.QApplication.translate(context, text, None, QtGui.QApplication.UnicodeUTF8)
def msg(text=None,mode=None):
"prints the given message on the FreeCAD status bar"
@ -118,10 +118,18 @@ def getPoint(target,args,mobile=False,sym=False,workingplane=True,noTracker=Fals
last = None
amod = hasMod(args,MODSNAP)
cmod = hasMod(args,MODCONSTRAIN)
point = FreeCADGui.Snapper.snap(args["Position"],lastpoint=last,active=amod,constrain=cmod,noTracker=noTracker)
info = FreeCADGui.Snapper.snapInfo
if hasattr(FreeCADGui,"Snapper"):
point = FreeCADGui.Snapper.snap(args["Position"],lastpoint=last,active=amod,constrain=cmod,noTracker=noTracker)
info = FreeCADGui.Snapper.snapInfo
mask = FreeCADGui.Snapper.affinity
else:
p = FreeCADGui.ActiveDocument.ActiveView.getCursorPos()
point = FreeCADGui.ActiveDocument.ActiveView.getPoint(p)
info = FreeCADGui.ActiveDocument.ActiveView.getObjectInfo(p)
mask = None
ctrlPoint = Vector(point)
mask = FreeCADGui.Snapper.affinity
if target.node:
if target.featureName == "Rectangle":
ui.displayPoint(point, target.node[0], plane=plane, mask=mask)
@ -241,7 +249,8 @@ class DraftTool:
self.planetrack.finalize()
if self.support:
plane.restore()
FreeCADGui.Snapper.off()
if hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper.off()
if self.call:
self.view.removeEventCallback("SoEvent",self.call)
self.call = None

File diff suppressed because one or more lines are too long

View File

@ -85,9 +85,9 @@ class DraftWorkbench (Workbench):
FreeCAD.Console.PrintWarning("Error: Unknown error while trying to load Pivy\n")
else:
try:
import PyQt4
import PySide
except ImportError:
FreeCAD.Console.PrintWarning("Error: PyQt4 not found, Draft workbench will be disabled.\n")
FreeCAD.Console.PrintWarning("Error: PySide not found, Draft workbench will be disabled.\n")
else:
depsOK = True
if not depsOK:

View File

@ -24,7 +24,7 @@
# This is the start page template
import os,FreeCAD,FreeCADGui,tempfile,time,zipfile,urllib,re,cStringIO
from PyQt4 import QtGui
from PySide import QtGui
from xml.etree.ElementTree import parse
FreeCADGui.addLanguagePath(":/translations")
@ -34,7 +34,7 @@ def translate(context,text):
"convenience function for the Qt translator"
# return str(QtGui.QApplication.translate(context, text, None, QtGui.QApplication.UnicodeUTF8).toUtf8())
u = QtGui.QApplication.translate(context, text, None,
QtGui.QApplication.UnicodeUTF8).toUtf8()
QtGui.QApplication.UnicodeUTF8)
s = cStringIO.StringIO()
for i in u:
if ord(i) == 39: