gtk/qt scintilla help !

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
 
N

Neil Hodgson

Fabien:
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 ?

The Scintilla web site, documentation and mailing list are:
http://www.scintilla.org/
http://scintilla.sourceforge.net/ScintillaDoc.html
http://mailman.lyra.org/mailman/listinfo/scintilla-interest

Keyword lists are often very large as it is frequently desired to
highlight all the identifiers in an API. The Win32 API is around 10
megabytes in SciTE .api format.

The SciTE editor is shipped with some keyword lists, including some
for POV in the pov.properties file.

To set keywords, call SCI_SETKEYWORDS as described on the
documentation page.

I do not personally use the Qt or PygtkScintilla wrappers for
Scintilla.

Neil
 
F

fabien

Neil said:
Fabien:




The Scintilla web site, documentation and mailing list are:
http://www.scintilla.org/
http://scintilla.sourceforge.net/ScintillaDoc.html
http://mailman.lyra.org/mailman/listinfo/scintilla-interest

Keyword lists are often very large as it is frequently desired to
highlight all the identifiers in an API. The Win32 API is around 10
megabytes in SciTE .api format.

The SciTE editor is shipped with some keyword lists, including some
for POV in the pov.properties file.
Yes I saw that file, but as far as I know, it is used by and only by
SciTE. I thought at first that I could use it for pygtkScintilla.
To set keywords, call SCI_SETKEYWORDS as described on the
documentation page.
That is going to be tough, I do not know anything about C. It is going
to be easier if I could find a file with a syntax close to that of POV
and replace of the keywords found in it with POV keywords ,and the compile.
I do not personally use the Qt or PygtkScintilla wrappers for
Scintilla.

Thanks for the reply and the links

Fabien
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top