]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/ColourDB.py
8 #----------------------------------------------------------------------
10 class TestWindow(wx
.ScrolledWindow
):
11 def __init__(self
, parent
):
12 wx
.ScrolledWindow
.__init
__(self
, parent
, -1)
14 # Populate our color list
15 self
.clrList
= wx
.lib
.colourdb
.getColourList()
17 # Just for style points, we'll use this as a background image.
19 self
.bg_bmp
= images
.getGridBGBitmap()
21 # This could also be done by getting the window's default font;
22 # either way, we need to have a font loaded for later on.
23 #self.SetBackgroundColour("WHITE")
24 self
.font
= wx
.Font(10, wx
.SWISS
, wx
.NORMAL
, wx
.NORMAL
)
26 # Create drawing area and set its font
27 dc
= wx
.ClientDC(self
)
30 # Using GetFullTextExtent(), we calculate a basic 'building block'
31 # that will be used to draw a depiction of the color list. We're
32 # using 'Wy' as the model becuase 'W' is a wide character and 'y'
33 # has a descender. This constitutes a 'worst case' scenario, which means
34 # that no matter what we draw later, text-wise, we'll have room for it
35 w
,h
,d
,e
= dc
.GetFullTextExtent("Wy")
37 # Height plus descender
38 self
.textHeight
= h
+ d
41 self
.lineHeight
= self
.textHeight
+ 5
43 # ... and this is the basic width.
46 # jmg 11/8/03: why 24?
49 # 'prep' our scroll bars.
51 self
.cellWidth
, self
.lineHeight
, numCells
, len(self
.clrList
) + 2
54 # Event handlers - moved here so events won't fire before init is
56 self
.Bind(wx
.EVT_PAINT
, self
.OnPaint
)
57 self
.Bind(wx
.EVT_ERASE_BACKGROUND
, self
.OnEraseBackground
)
60 # tile the background bitmap loaded in __init__()
61 def TileBackground(self
, dc
):
62 sz
= self
.GetClientSize()
63 w
= self
.bg_bmp
.GetWidth()
64 h
= self
.bg_bmp
.GetHeight()
66 # adjust for scrolled position
67 spx
, spy
= self
.GetScrollPixelsPerUnit()
68 vsx
, vsy
= self
.GetViewStart()
69 dx
, dy
= (spx
* vsx
) % w
, (spy
* vsy
) % h
76 dc
.DrawBitmap(self
.bg_bmp
, x
, y
)
81 # Redraw the background over a 'damaged' area.
82 def OnEraseBackground(self
, evt
):
86 dc
= wx
.ClientDC(self
)
87 rect
= self
.GetUpdateRegion().GetBox()
88 dc
.SetClippingRect(rect
)
90 self
.TileBackground(dc
)
93 def OnPaint(self
, evt
):
96 self
.Draw(dc
, self
.GetUpdateRegion(), self
.GetViewStart())
99 def Draw(self
, dc
, rgn
=None, vs
=None):
101 dc
.SetTextForeground("BLACK")
102 dc
.SetPen(wx
.Pen("BLACK", 1, wx
.SOLID
))
103 dc
.SetFont(self
.font
)
104 colours
= self
.clrList
105 numColours
= len(colours
)
108 # determine the subset of the color list that has been exposed
109 # and needs drawn. This is based on all the precalculation we
112 pixStart
= vs
[1]*self
.lineHeight
+ rect
.y
113 pixStop
= pixStart
+ rect
.height
114 start
= pixStart
/ self
.lineHeight
- 1
115 stop
= pixStop
/ self
.lineHeight
120 for line
in range(max(0,start
), min(stop
,numColours
)):
122 y
= (line
+1) * self
.lineHeight
+ 2
124 dc
.DrawText(clr
, self
.cellWidth
, y
)
126 brush
= wx
.Brush(clr
, wx
.SOLID
)
128 dc
.DrawRectangle(12 * self
.cellWidth
, y
,
129 6 * self
.cellWidth
, self
.textHeight
)
134 # On wxGTK there needs to be a panel under wx.ScrolledWindows if they are
135 # going to be in a wxNotebook. And, in this demo, we are.
136 class TestPanel(wx
.Panel
):
137 def __init__(self
, parent
):
138 wx
.Panel
.__init
__(self
, parent
, -1)
139 self
.win
= TestWindow(self
)
140 self
.Bind(wx
.EVT_SIZE
, self
.OnSize
)
143 def OnSize(self
, evt
):
144 self
.win
.SetSize(evt
.GetSize())
148 #----------------------------------------------------------------------
151 def runTest(frame
, nb
, log
):
152 # This loads a whole bunch of new color names and values
153 # into TheColourDatabase
155 # Note 11/24/03 - jg - I moved this into runTest() because
156 # there must be a wx.App existing before this function
157 # can be called - this is a change from 2.4 -> 2.5.
158 wx
.lib
.colourdb
.updateColourDB()
164 #----------------------------------------------------------------------
169 <B><font size=+2>ColourDB</font></b>
171 <p>wxWindows maintains a database of standard RGB colours for a predefined
172 set of named colours (such as "BLACK'', "LIGHT GREY''). The application
173 may add to this set if desired by using Append. There is only one instance
174 of this class: <b>TheColourDatabase</b>.
176 <p>The <code>colourdb</code> library is a lightweight API that pre-defines
177 a multitude of colors for you to use 'out of the box', and this demo serves
178 to show you these colors (it also serves as a handy reference).
180 <p>A secondary benefit of this demo is the use of the <b>ScrolledWindow</b> class
181 and the use of various *DC() classes, including background tiling and the use of
182 font data to generate a "building block" type of construct for repetitive use.
185 <B><font size=+2>Important note</font></b>
188 With implementation of V2.5 and later, it is required to have a wx.App already
189 initialized before <b><code>wx.updateColourDB()</code></b> can be called.
190 Trying to do otherwise will cause an exception to be raised.
196 if __name__
== '__main__':
199 run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])