F
fabien
Hi,
I am writing a POV-RAY editor with Python using either QT or GTK as GUI
'wrapper'. ( I am still trying both )
* * * * PYGTK * * * *
I have downloaded PygtkScintilla-1.99.5.
There is a lexPOV.cxx file in the package, but I can not find any POV
keywords in any file ( there are about 150 POV keywords). Did i miss it,
and if not, how do I create one and include it for the library building ?
Anyway, I compiled pyscintilla and got a library file called 'scintilla.a'.
Now how do I link the scintilla.a library to this GTK script example :
8<--------------- snip ------------>8
import pygtk
pygtk.require('2.0')
import gtk
import scintilla
class GUI:
def __init__(self):
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_title("Pyvon")
window.connect("destroy", lambda w:gtk.main_quit())
table = gtk.Table(10,10)
# Here we connect notifications as they are gtk signals as well
editor = scintilla.Scintilla()
#s.connect("CharAdded", char_added_notif)
window.add(table)
table.add(editor)
editor.show()
window.set_size_request(200, 300)
window.show_all()
def main():
gtk.main()
return 0
if __name__ == "__main__":
GUI()
main()
8<--------------- snip ------------>8
The same goes for QT :
* * * * PYQT * * * *
I have also downloaded qscintilla-1.62-gpl-1.5.1.
As for GTK, I also found the LexPOV.cpp file, with no POV keywords in it
and with no POV keywords in any of the file in the package.
The compilation builds then move the library libqscintilla.so to
/usr/lib/qt3/lib.
How do I link the newly built library to the folling qt script :
8<--------------- snip ------------>8
import sys, string
from qt import *
from qtext import *
fileopen = [
'16 13 5 1',
'. c #040404',
'# c #808304',
'a c None',
'b c #f3f704',
'c c #f3f7f3',
'aaaaaaaaa...aaaa',
'aaaaaaaa.aaa.a.a',
'aaaaaaaaaaaaa..a',
'a...aaaaaaaa...a',
'.bcb.......aaaaa',
'.cbcbcbcbc.aaaaa',
'.bcbcbcbcb.aaaaa',
'.cbcb...........',
'.bcb.#########.a',
'.cb.#########.aa',
'.b.#########.aaa',
'..#########.aaaa',
'...........aaaaa'
]
filesave = [
'14 14 4 1',
'. c #040404',
'# c #808304',
'a c #bfc2bf',
'b c None',
'..............',
'.#.aaaaaaaa.a.',
'.#.aaaaaaaa...',
'.#.aaaaaaaa.#.',
'.#.aaaaaaaa.#.',
'.#.aaaaaaaa.#.',
'.#.aaaaaaaa.#.',
'.##........##.',
'.############.',
'.##.........#.',
'.##......aa.#.',
'.##......aa.#.',
'.##......aa.#.',
'b.............'
]
fileprint = [
'16 14 6 1',
'. c #000000',
'# c #848284',
'a c #c6c3c6',
'b c #ffff00',
'c c #ffffff',
'd c None',
'ddddd.........dd',
'dddd.cccccccc.dd',
'dddd.c.....c.ddd',
'ddd.cccccccc.ddd',
'ddd.c.....c....d',
'dd.cccccccc.a.a.',
'd..........a.a..',
'.aaaaaaaaaa.a.a.',
'.............aa.',
'.aaaaaa###aa.a.d',
'.aaaaaabbbaa...d',
'.............a.d',
'd.aaaaaaaaa.a.dd',
'dd...........ddd'
]
fileOpenText = \
'''<img source="fileopen">
Click this button to open a <em>new file</em>.<br><br>
You can also select the <b>Open</b> command from the <b>File</b> menu.'''
fileSaveText = \
'''Click this button to save the file you are editing.<br><br>
You will be prompted for a filename.<br><br>
You can also select the <b>Save</b> command from the <b>File</b> menu.'''
filePrintText = \
'''Click this button to print the file you are editing.<br><br>
You can also select the <b>Print</b> command from the <b>File</b> menu.'''
editorList = []
class QSci(QextScintilla):
def __init__(self,parent):
QextScintilla.__init__(self,parent)
self.setUtf8(1)
#lex = QextScintillaLexerPython(self)
#QextScintillaLexerCPP
#lex = QextScintillaLexerCPP(self)
#lex = QextScintillaLexerPov(self)
lex = QextScintillalexerCSharp(self)
self.setLexer(lex)
self.setBraceMatching(QextScintilla.SloppyBraceMatch)
self.setAutoIndent(1)
self.setIndentationWidth(4)
self.setIndentationGuides(1)
self.setIndentationsUseTabs(0)
self.setAutoCompletionThreshold(1)
class ApplicationWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self,None,'example application main
window',Qt.WDestructiveClose)
self.filename = QString.null
self.printer = QPrinter()
self.fileTools = QToolBar(self,'file operations')
openIcon = QPixmap(fileopen)
self.fileOpen = QToolButton(QIconSet(openIcon),'Open
File',QString.null,self.load,self.fileTools,'open file')
saveIcon = QPixmap(filesave)
self.fileSave = QToolButton(QIconSet(saveIcon),'Save
File',QString.null,self.save,self.fileTools,'save file')
printIcon = QPixmap(fileprint)
self.filePrint = QToolButton(QIconSet(printIcon),'Print
File',QString.null,self.printDoc,self.fileTools,'print file')
QWhatsThis.whatsThisButton(self.fileTools)
QWhatsThis.add(self.fileOpen,fileOpenText)
QMimeSourceFactory.defaultFactory().setPixmap('fileopen',openIcon)
QWhatsThis.add(self.fileSave,fileSaveText)
QWhatsThis.add(self.filePrint,filePrintText)
self.file = QPopupMenu(self)
self.menuBar().insertItem('&File',self.file)
self.file.insertItem('&New',self.newDoc,Qt.CTRL + Qt.Key_N)
id =
self.file.insertItem(QIconSet(openIcon),'&Open',self.load,Qt.CTRL +
Qt.Key_O)
self.file.setWhatsThis(id,fileOpenText)
id =
self.file.insertItem(QIconSet(saveIcon),'&Save',self.save,Qt.CTRL +
Qt.Key_S)
self.file.setWhatsThis(id,fileSaveText)
id = self.file.insertItem('Save &as',self.saveAs)
self.file.setWhatsThis(id,fileSaveText)
self.file.insertSeparator()
id =
self.file.insertItem(QIconSet(printIcon),'&Print',self.printDoc,Qt.CTRL
+ Qt.Key_P)
self.file.setWhatsThis(id,filePrintText)
self.file.insertSeparator()
self.file.insertItem('&Close',self,SLOT('close()'),Qt.CTRL +
Qt.Key_W)
self.file.insertItem('&Quit',qApp,SLOT('closeAllWindows()'),Qt.CTRL +
Qt.Key_Q)
self.view = QPopupMenu(self)
self.menuBar().insertSeparator()
self.menuBar().insertItem('&View',self.view)
self.view.insertItem('Split',self.split)
self.help = QPopupMenu(self)
self.menuBar().insertSeparator()
self.menuBar().insertItem('&Help',self.help)
self.help.insertItem('&About',self.about,Qt.Key_F1)
self.help.insertItem('About &Qt',self.aboutQt)
self.splitter = QSplitter(self)
self.e = QSci(self.splitter)
self.e.setFocus()
self.setCentralWidget(self.splitter)
self.statusBar().message('Ready',2000)
self.resize(450,600)
def split(self):
ssci = QSci(self.splitter)
ssci.setDocument(self.e.document())
ssci.show()
def newDoc(self):
ed = ApplicationWindow()
ed.show()
editorList.append(ed)
def load(self):
fn = QFileDialog.getOpenFileName(QString.null,QString.null,self)
if fn.isEmpty():
self.statusBar().message('Loading aborted',2000)
return
fileName = str(fn)
self.e.clear()
try:
f = open(fileName,'r')
except:
return
for l in f.readlines():
self.e.append(l)
f.close()
self.setCaption(fileName)
self.statusBar().message('Loaded document %s' % (fileName),2000)
def save(self):
if self.filename.isEmpty():
self.saveAs()
return
try:
f = open(str(self.filename),'w+')
except:
self.statusBar().message('Could not write to %s' %
(self.filename),2000)
return
f.write(str(self.e.text()))
f.close()
self.e.setEdited(0)
self.setCaption(self.filename)
self.statusBar().message('File %s saved' % (self.filename),2000)
def saveAs(self):
fn = QFileDialog.getSaveFileName(QString.null,QString.null,self)
if not fn.isEmpty():
self.filename = fn
self.save()
else:
self.statusBar().message('Saving aborted',2000)
def printDoc(self):
Margin = 10
pageNo = 1
if self.printer.setup(self):
self.statusBar().message('Printing...')
p = QPainter()
p.begin(self.printer)
p.setFont(self.e.font())
yPos = 0
fm = p.fontMetrics()
metrics = QPaintDeviceMetrics(self.printer)
for i in range(self.e.numLines):
if Margin + yPos > metrics.height() - Margin:
pageNo = pageNo + 1
self.statusBar().message('Printing (page %d)...' %
(pageNo))
self.printer.newPage()
yPos = 0
p.drawText(Margin,Margin +
yPos,metrics.width(),fm.lineSpacing(),Qt.ExpandTabs |
Qt.DontClip,self.e.textLine(i))
yPos = yPos + fm.lineSpacing()
p.end()
self.statusBar().message('Printing completed',2000)
else:
self.statusBar().message('Printing aborted',2000)
def closeEvent(self,ce):
if not self.e.isModified():
ce.accept()
return
rc = QMessageBox.information(self,'QScintilla Editor',
'The document has been changed since the last save.',
'Save Now','Cancel','Leave Anyway',0,1)
if rc == 0:
self.save()
ce.accept()
elif rc == 2:
ce.accept()
else:
ce.ignore()
def about(self):
QMessageBox.about(self,'QScintilla Editor',
'This is a framework for testing QScintilla.')
def aboutQt(self):
QMessageBox.aboutQt(self,'QScintilla Editor')
a = QApplication(sys.argv)
mw = ApplicationWindow()
mw.setCaption('Document 1')
mw.show()
a.connect(a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()'))
a.exec_loop()
8<--------------- snip ------------>8
Thank you for any help
I am writing a POV-RAY editor with Python using either QT or GTK as GUI
'wrapper'. ( I am still trying both )
* * * * PYGTK * * * *
I have downloaded PygtkScintilla-1.99.5.
There is a lexPOV.cxx file in the package, but I can not find any POV
keywords in any file ( there are about 150 POV keywords). Did i miss it,
and if not, how do I create one and include it for the library building ?
Anyway, I compiled pyscintilla and got a library file called 'scintilla.a'.
Now how do I link the scintilla.a library to this GTK script example :
8<--------------- snip ------------>8
import pygtk
pygtk.require('2.0')
import gtk
import scintilla
class GUI:
def __init__(self):
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_title("Pyvon")
window.connect("destroy", lambda w:gtk.main_quit())
table = gtk.Table(10,10)
# Here we connect notifications as they are gtk signals as well
editor = scintilla.Scintilla()
#s.connect("CharAdded", char_added_notif)
window.add(table)
table.add(editor)
editor.show()
window.set_size_request(200, 300)
window.show_all()
def main():
gtk.main()
return 0
if __name__ == "__main__":
GUI()
main()
8<--------------- snip ------------>8
The same goes for QT :
* * * * PYQT * * * *
I have also downloaded qscintilla-1.62-gpl-1.5.1.
As for GTK, I also found the LexPOV.cpp file, with no POV keywords in it
and with no POV keywords in any of the file in the package.
The compilation builds then move the library libqscintilla.so to
/usr/lib/qt3/lib.
How do I link the newly built library to the folling qt script :
8<--------------- snip ------------>8
import sys, string
from qt import *
from qtext import *
fileopen = [
'16 13 5 1',
'. c #040404',
'# c #808304',
'a c None',
'b c #f3f704',
'c c #f3f7f3',
'aaaaaaaaa...aaaa',
'aaaaaaaa.aaa.a.a',
'aaaaaaaaaaaaa..a',
'a...aaaaaaaa...a',
'.bcb.......aaaaa',
'.cbcbcbcbc.aaaaa',
'.bcbcbcbcb.aaaaa',
'.cbcb...........',
'.bcb.#########.a',
'.cb.#########.aa',
'.b.#########.aaa',
'..#########.aaaa',
'...........aaaaa'
]
filesave = [
'14 14 4 1',
'. c #040404',
'# c #808304',
'a c #bfc2bf',
'b c None',
'..............',
'.#.aaaaaaaa.a.',
'.#.aaaaaaaa...',
'.#.aaaaaaaa.#.',
'.#.aaaaaaaa.#.',
'.#.aaaaaaaa.#.',
'.#.aaaaaaaa.#.',
'.##........##.',
'.############.',
'.##.........#.',
'.##......aa.#.',
'.##......aa.#.',
'.##......aa.#.',
'b.............'
]
fileprint = [
'16 14 6 1',
'. c #000000',
'# c #848284',
'a c #c6c3c6',
'b c #ffff00',
'c c #ffffff',
'd c None',
'ddddd.........dd',
'dddd.cccccccc.dd',
'dddd.c.....c.ddd',
'ddd.cccccccc.ddd',
'ddd.c.....c....d',
'dd.cccccccc.a.a.',
'd..........a.a..',
'.aaaaaaaaaa.a.a.',
'.............aa.',
'.aaaaaa###aa.a.d',
'.aaaaaabbbaa...d',
'.............a.d',
'd.aaaaaaaaa.a.dd',
'dd...........ddd'
]
fileOpenText = \
'''<img source="fileopen">
Click this button to open a <em>new file</em>.<br><br>
You can also select the <b>Open</b> command from the <b>File</b> menu.'''
fileSaveText = \
'''Click this button to save the file you are editing.<br><br>
You will be prompted for a filename.<br><br>
You can also select the <b>Save</b> command from the <b>File</b> menu.'''
filePrintText = \
'''Click this button to print the file you are editing.<br><br>
You can also select the <b>Print</b> command from the <b>File</b> menu.'''
editorList = []
class QSci(QextScintilla):
def __init__(self,parent):
QextScintilla.__init__(self,parent)
self.setUtf8(1)
#lex = QextScintillaLexerPython(self)
#QextScintillaLexerCPP
#lex = QextScintillaLexerCPP(self)
#lex = QextScintillaLexerPov(self)
lex = QextScintillalexerCSharp(self)
self.setLexer(lex)
self.setBraceMatching(QextScintilla.SloppyBraceMatch)
self.setAutoIndent(1)
self.setIndentationWidth(4)
self.setIndentationGuides(1)
self.setIndentationsUseTabs(0)
self.setAutoCompletionThreshold(1)
class ApplicationWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self,None,'example application main
window',Qt.WDestructiveClose)
self.filename = QString.null
self.printer = QPrinter()
self.fileTools = QToolBar(self,'file operations')
openIcon = QPixmap(fileopen)
self.fileOpen = QToolButton(QIconSet(openIcon),'Open
File',QString.null,self.load,self.fileTools,'open file')
saveIcon = QPixmap(filesave)
self.fileSave = QToolButton(QIconSet(saveIcon),'Save
File',QString.null,self.save,self.fileTools,'save file')
printIcon = QPixmap(fileprint)
self.filePrint = QToolButton(QIconSet(printIcon),'Print
File',QString.null,self.printDoc,self.fileTools,'print file')
QWhatsThis.whatsThisButton(self.fileTools)
QWhatsThis.add(self.fileOpen,fileOpenText)
QMimeSourceFactory.defaultFactory().setPixmap('fileopen',openIcon)
QWhatsThis.add(self.fileSave,fileSaveText)
QWhatsThis.add(self.filePrint,filePrintText)
self.file = QPopupMenu(self)
self.menuBar().insertItem('&File',self.file)
self.file.insertItem('&New',self.newDoc,Qt.CTRL + Qt.Key_N)
id =
self.file.insertItem(QIconSet(openIcon),'&Open',self.load,Qt.CTRL +
Qt.Key_O)
self.file.setWhatsThis(id,fileOpenText)
id =
self.file.insertItem(QIconSet(saveIcon),'&Save',self.save,Qt.CTRL +
Qt.Key_S)
self.file.setWhatsThis(id,fileSaveText)
id = self.file.insertItem('Save &as',self.saveAs)
self.file.setWhatsThis(id,fileSaveText)
self.file.insertSeparator()
id =
self.file.insertItem(QIconSet(printIcon),'&Print',self.printDoc,Qt.CTRL
+ Qt.Key_P)
self.file.setWhatsThis(id,filePrintText)
self.file.insertSeparator()
self.file.insertItem('&Close',self,SLOT('close()'),Qt.CTRL +
Qt.Key_W)
self.file.insertItem('&Quit',qApp,SLOT('closeAllWindows()'),Qt.CTRL +
Qt.Key_Q)
self.view = QPopupMenu(self)
self.menuBar().insertSeparator()
self.menuBar().insertItem('&View',self.view)
self.view.insertItem('Split',self.split)
self.help = QPopupMenu(self)
self.menuBar().insertSeparator()
self.menuBar().insertItem('&Help',self.help)
self.help.insertItem('&About',self.about,Qt.Key_F1)
self.help.insertItem('About &Qt',self.aboutQt)
self.splitter = QSplitter(self)
self.e = QSci(self.splitter)
self.e.setFocus()
self.setCentralWidget(self.splitter)
self.statusBar().message('Ready',2000)
self.resize(450,600)
def split(self):
ssci = QSci(self.splitter)
ssci.setDocument(self.e.document())
ssci.show()
def newDoc(self):
ed = ApplicationWindow()
ed.show()
editorList.append(ed)
def load(self):
fn = QFileDialog.getOpenFileName(QString.null,QString.null,self)
if fn.isEmpty():
self.statusBar().message('Loading aborted',2000)
return
fileName = str(fn)
self.e.clear()
try:
f = open(fileName,'r')
except:
return
for l in f.readlines():
self.e.append(l)
f.close()
self.setCaption(fileName)
self.statusBar().message('Loaded document %s' % (fileName),2000)
def save(self):
if self.filename.isEmpty():
self.saveAs()
return
try:
f = open(str(self.filename),'w+')
except:
self.statusBar().message('Could not write to %s' %
(self.filename),2000)
return
f.write(str(self.e.text()))
f.close()
self.e.setEdited(0)
self.setCaption(self.filename)
self.statusBar().message('File %s saved' % (self.filename),2000)
def saveAs(self):
fn = QFileDialog.getSaveFileName(QString.null,QString.null,self)
if not fn.isEmpty():
self.filename = fn
self.save()
else:
self.statusBar().message('Saving aborted',2000)
def printDoc(self):
Margin = 10
pageNo = 1
if self.printer.setup(self):
self.statusBar().message('Printing...')
p = QPainter()
p.begin(self.printer)
p.setFont(self.e.font())
yPos = 0
fm = p.fontMetrics()
metrics = QPaintDeviceMetrics(self.printer)
for i in range(self.e.numLines):
if Margin + yPos > metrics.height() - Margin:
pageNo = pageNo + 1
self.statusBar().message('Printing (page %d)...' %
(pageNo))
self.printer.newPage()
yPos = 0
p.drawText(Margin,Margin +
yPos,metrics.width(),fm.lineSpacing(),Qt.ExpandTabs |
Qt.DontClip,self.e.textLine(i))
yPos = yPos + fm.lineSpacing()
p.end()
self.statusBar().message('Printing completed',2000)
else:
self.statusBar().message('Printing aborted',2000)
def closeEvent(self,ce):
if not self.e.isModified():
ce.accept()
return
rc = QMessageBox.information(self,'QScintilla Editor',
'The document has been changed since the last save.',
'Save Now','Cancel','Leave Anyway',0,1)
if rc == 0:
self.save()
ce.accept()
elif rc == 2:
ce.accept()
else:
ce.ignore()
def about(self):
QMessageBox.about(self,'QScintilla Editor',
'This is a framework for testing QScintilla.')
def aboutQt(self):
QMessageBox.aboutQt(self,'QScintilla Editor')
a = QApplication(sys.argv)
mw = ApplicationWindow()
mw.setCaption('Document 1')
mw.show()
a.connect(a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()'))
a.exec_loop()
8<--------------- snip ------------>8
Thank you for any help