|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
|
|
"""**************************************************************************
|
|
|
|
** $Id: fontdisplayer.py,v 1.2 2004/07/19 18:41:53 phil Exp $
|
|
|
|
**
|
|
|
|
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
|
|
|
|
**
|
|
|
|
** This file is part of an example program for TQt. This example
|
|
|
|
** program may be used, distributed and modified without limitation.
|
|
|
|
**
|
|
|
|
***************************************************************************"""
|
|
|
|
|
|
|
|
import sys
|
|
|
|
from python_tqt.qt import *
|
|
|
|
|
|
|
|
class FontRowTable( TQFrame ):
|
|
|
|
def __init__( self, parent=None, name=None ):
|
|
|
|
TQFrame.__init__( self, parent, name )
|
|
|
|
|
|
|
|
self.setBackgroundMode(self.PaletteBase)
|
|
|
|
self.setFrameStyle(self.Panel|self.Sunken)
|
|
|
|
self.setMargin(8)
|
|
|
|
self.setRow(0)
|
|
|
|
self.row = 0
|
|
|
|
self.tablefont = TQFont( TQApplication.font() )
|
|
|
|
|
|
|
|
def sizeHint( self ) :
|
|
|
|
width = 16*self.cellSize().width()+TQSize(2,2).width()*(self.margin()+self.frameWidth())
|
|
|
|
height = 16*self.cellSize().height()+TQSize(2,2).height()*(self.margin()+self.frameWidth())
|
|
|
|
return TQSize(width,height)
|
|
|
|
|
|
|
|
def cellSize( self ) :
|
|
|
|
fm = self.fontMetrics()
|
|
|
|
return TQSize( fm.maxWidth(), fm.lineSpacing() + 1 )
|
|
|
|
|
|
|
|
def paintEvent( self, e ):
|
|
|
|
TQFrame.paintEvent(self, e)
|
|
|
|
p = TQPainter(self)
|
|
|
|
p.setClipRegion(e.region())
|
|
|
|
r = TQRect(e.rect())
|
|
|
|
fm = self.fontMetrics()
|
|
|
|
ml = self.frameWidth() + self.margin() + 1 + max(0,-fm.minLeftBearing())
|
|
|
|
mt = self.frameWidth() + self.margin()
|
|
|
|
cell = TQSize((self.width()-15-ml)/16,(self.height()-15-mt)/16)
|
|
|
|
|
|
|
|
if not cell.width() or not cell.height() :
|
|
|
|
return
|
|
|
|
|
|
|
|
mini = r.left() / cell.width()
|
|
|
|
maxi = (r.right()+cell.width()-1) / cell.width()
|
|
|
|
minj = r.top() / cell.height()
|
|
|
|
maxj = (r.bottom()+cell.height()-1) / cell.height()
|
|
|
|
|
|
|
|
h = fm.height()
|
|
|
|
|
|
|
|
body = TQColor(255,255,192);
|
|
|
|
negative = TQColor(255,192,192);
|
|
|
|
positive = TQColor(192,192,255);
|
|
|
|
rnegative = TQColor(255,128,128);
|
|
|
|
rpositive = TQColor(128,128,255);
|
|
|
|
|
|
|
|
for j in range(minj, maxj+1, 1) :
|
|
|
|
for i in range(mini, maxi+1, 1) :
|
|
|
|
if i < 16 and j < 16 :
|
|
|
|
x = i*cell.width()
|
|
|
|
y = j*cell.height()
|
|
|
|
|
|
|
|
ch = TQChar(j*16+i) #,self.row) # just accept one argument!!!
|
|
|
|
|
|
|
|
if fm.inFont(ch) :
|
|
|
|
w = fm.width(ch)
|
|
|
|
l = fm.leftBearing(ch)
|
|
|
|
r = fm.rightBearing(ch)
|
|
|
|
|
|
|
|
x += ml
|
|
|
|
y += mt+h
|
|
|
|
|
|
|
|
p.fillRect(x,y,w,-h,TQBrush(body))
|
|
|
|
|
|
|
|
if w :
|
|
|
|
if l :
|
|
|
|
if l < 0: sign = negative
|
|
|
|
else: sign = positive
|
|
|
|
if l > 0: lsign = 0
|
|
|
|
else: lsign = 1
|
|
|
|
p.fillRect(x+lsign, y-h/2, abs(l),-h/2, TQBrush(sign))
|
|
|
|
if r :
|
|
|
|
if r < 0: sign = rnegative
|
|
|
|
else: sign = rpositive
|
|
|
|
if r > 0: rsign = r
|
|
|
|
else: rsign = 0
|
|
|
|
p.fillRect(x+w-rsign,y+2, abs(r),-h/2, TQBrush(sign))
|
|
|
|
s = TQString( ch )
|
|
|
|
p.setPen(TQPen(TQt.black))
|
|
|
|
p.drawText(x,y,s)
|
|
|
|
|
|
|
|
def setRow( self, r ) :
|
|
|
|
self.row = r
|
|
|
|
|
|
|
|
fm = self.fontMetrics()
|
|
|
|
str = " minLB=%d minRB=%d maxW=%d" % (fm.minLeftBearing(), fm.minRightBearing(), fm.maxWidth())
|
|
|
|
self.emit( PYSIGNAL("fontInformation"), ( TQString(str), ) )
|
|
|
|
self.update()
|
|
|
|
|
|
|
|
def chooseFont( self ) :
|
|
|
|
ok = 0
|
|
|
|
oldfont = TQFont( self.tablefont )
|
|
|
|
self.tablefont, ok = TQFontDialog.getFont(oldfont, self)
|
|
|
|
if ok:
|
|
|
|
self.setFont(self.tablefont)
|
|
|
|
else:
|
|
|
|
self.tablefont = oldfont
|
|
|
|
|
|
|
|
class FontDisplayer( TQMainWindow ) :
|
|
|
|
def __init__( self, parent=None, name=None ):
|
|
|
|
TQMainWindow.__init__( self, parent, name )
|
|
|
|
table = FontRowTable(self)
|
|
|
|
controls = TQToolBar(self)
|
|
|
|
|
|
|
|
TQLabel(self.tr("Row:"), controls)
|
|
|
|
self.row = TQSpinBox(0,255,1,controls)
|
|
|
|
controls.addSeparator()
|
|
|
|
fontbutton = TQPushButton(self.tr("Font..."), controls)
|
|
|
|
status = TQStatusBar(self)
|
|
|
|
|
|
|
|
self.connect( self.row, SIGNAL("valueChanged(int)"), table.setRow )
|
|
|
|
self.connect( fontbutton, SIGNAL("clicked()"), table.chooseFont )
|
|
|
|
self.connect( table, PYSIGNAL("fontInformation"),
|
|
|
|
status, SLOT("message(const TQString&)") )
|
|
|
|
table.setRow(0)
|
|
|
|
self.setCentralWidget(table)
|
|
|
|
|
|
|
|
def main( args ):
|
|
|
|
# Use an interesting font
|
|
|
|
TQApplication.setFont(TQFont("unifont",16))
|
|
|
|
app = TQApplication(sys.argv)
|
|
|
|
|
|
|
|
m = FontDisplayer()
|
|
|
|
sh = TQSize( m.centralWidget().sizeHint() )
|
|
|
|
m.resize(sh.width(), sh.height() + 3 * m.statusBar().height())
|
|
|
|
app.setMainWidget(m);
|
|
|
|
m.setCaption("TQt Example - TQFD");
|
|
|
|
m.show()
|
|
|
|
|
|
|
|
app.exec_loop()
|
|
|
|
|
|
|
|
if __name__=="__main__":
|
|
|
|
main(sys.argv)
|