gtk/qt scintilla help !

fabien fabienhenon_nospam_ at free.fr
Sun May 1 08:38:07 EDT 2005


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



More information about the Python-list mailing list