diff --git a/samples/ribbon/images.py b/samples/ribbon/images.py new file mode 100644 index 00000000..8e619f46 --- /dev/null +++ b/samples/ribbon/images.py @@ -0,0 +1,193 @@ +#---------------------------------------------------------------------- +# This file was generated by encode_bitmaps.py +# +from wx.lib.embeddedimage import PyEmbeddedImage + +#---------------------------------------------------------------------- +Mondrian = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAHFJ" + b"REFUWIXt1jsKgDAQRdF7xY25cpcWC60kioI6Fm/ahHBCMh+BRmGMnAgEWnvPpzK8dvrFCCCA" + b"coD8og4c5Lr6WB3Q3l1TBwLYPuF3YS1gn1HphgEEEABcKERrGy0E3B0HFJg7C1N/f/kTBBBA" + b"+Vi+AMkgFEvBPD17AAAAAElFTkSuQmCC") + +#---------------------------------------------------------------------- +align_center = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABHNCSVQICAgIfAhkiAAAADpJ" + b"REFUKJFjZGRiZqAEMFGkm4GBgQWZ8//f3//EaGJkYmaEsyn1Ags2QVwuQbaZNi4YDYMRGwYU" + b"ZyYAopsYTgbXQz4AAAAASUVORK5CYII=") + +#---------------------------------------------------------------------- +align_left = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABHNCSVQICAgIfAhkiAAAADxJ" + b"REFUKJFjZGRiZqAEMFGkm4GBgYWBgYHh/7+//4lRzMjEzIghRqkX8LoAm430dQExLhoNg2ER" + b"BhRnJgDCqhhOM7rMkQAAAABJRU5ErkJggg==") + +#---------------------------------------------------------------------- +align_right = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABHNCSVQICAgIfAhkiAAAADdJ" + b"REFUKJFjZGRiZqAEMFGkm4GBgQWb4P9/f/8To5mRiZmRkVIvYHUBsS6inQtGw2DEhQHFmQkA" + b"gowYTpdfxvkAAAAASUVORK5CYII=") + +#---------------------------------------------------------------------- +aui_style = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAMFJ" + b"REFUWIXtlrENgzAUBQ/beAQWYAcGYYIkgyWZxz2lF0CiRwJBCmKJIlGq+DV+lS1ZutO39eSq" + b"MpaU5+O+kyGX661Ka3eG932fgw+wJwmTi/gtRcCdN9u2aQWWZdEKzPOsFVjXVSsguYJz++Wc" + b"QOI6gLZtAZimKQs88WKMh0CMMQv4UxxA0zQS+DiOh4D3XiIA7wkYo2tkB2Ct/XXuvwJ1XWsF" + b"5BOQv4FhGLQCXddJ4CEE/Y+oCBSBIlAEHByNpMoLu1w1qHGIod8AAAAASUVORK5CYII=") + +#---------------------------------------------------------------------- +auto_crop_selection = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAi5J" + b"REFUWIXFlz1r20AYx/+ns4PjR7jG1IgG2tIO/QAdkyyZOvcrlECnQujWT9AtFDIF+h06dcjU" + b"KaFTxg4dWwiIBNU1d8Y0Ol0H+8TpxUKKpOgPB7Is7vfoebtHjDkcXcrplA4AzOFYe0ED0Pd9" + b"zUwIdKQ0czhr/Y3XMjxWlAP3YVScAzpSOg0/9g8z95uS2Tc3CQ0cAE5vjuKH2zAmNsC42oYT" + b"d0Gc8OXvR+hI6TNx0pgRhpebhDpS+vTmCMQJ5LgAgOHamP3tN2giLwwvNwTM4eztw08ZOHG3" + b"LjejTAjs368ffEjAyaHGwIZXWAVn4qQVeIJnd0Jzne6O9ko/Q/vfM/fKLKQ7YVXRwaWeTAZw" + b"iUNIhSBYQn57WTk579SK6eBSP3lM2PG2MB71MJuHuPL/4ddvWdoIw+tVtRgAJpMBdrwtPH86" + b"gDftw7++BQAIqSAr7rWxCjZpuHuuXeIYj3rwpn28eLYNb9rHeNSDSxzD3fNSjcrwYg+UDcHi" + b"Yo+JRz/0bB7Gb+5f32I2DyGkwuJir/0QBMESV7TKneBPGOdAECwr79V5FRT2gTIrrw+gRP9A" + b"ug80NXzoSOmf4VcAgIwkpBKQSuKV+y6R6JnDqOnJpwhu8zaeBU3BF0rE84T9TOFEVNsAC74y" + b"SCQmK1uthMC43cClWnnEnjELJ6K6MnuZyUquPfHe+5wY/ZjDWe0yLHPsHvuHmVJE3eP4Lh7J" + b"+6+VKkgrD547EaHLb8Ou9B/kXYasrB2oNQAAAABJRU5ErkJggg==") + +#---------------------------------------------------------------------- +auto_crop_selection_small = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAASRJ" + b"REFUOI2lkzFLw1AUhb+XdOvQiiAqgqAgLeJSWo0RG+iiOBRcXV3t6OIPEHfnQPUPFERxExRK" + b"i7gLXUSoo4hDxuQ62AsSQxPaAw8u7753OOdwrwGECWEs2+S0AJAoFK3TIFEoAJZerDhz0uo0" + b"kSgUbWZBTtkOTmtseRvM3y0y6A65vrjPRGCphcvDG957n3iNTfJ2PquAXwWKQXfIR/+Ll6dX" + b"AAqOL9/949RMxFg28VN02+KcvEnRbSf29Z+VxFhwfClVPPYbM5QqHgXHHxvqVArMqEj0qRnU" + b"dtelWi8ThAFX57cYyzY6M4kWFBpgtV7m6GyPtZ2lf2/GEiiCMODx4Znl7Vl02FIziPsFpNVp" + b"yqq7IJkziOPvrmhtmHIbzUjOxPgBMl93hZvH4+AAAAAASUVORK5CYII=") + +#---------------------------------------------------------------------- +circle = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAANtJ" + b"REFUWIXNV8sSxCAIA/z/T67d0864PiBQ2ZpbHQkxlGKZpVAEtV53+yxSOMLDqIA+oQVUkCnA" + b"m9grRDKTIxxLAUhykcKI1RrXtARagJXQGzsIWBF433KU50fALCjaXiinoBujmHG0udQu+AeE" + b"KO/0Gtc35xkODIsbT29xvu/Ajs9tFLVe9+BAhv0a9/sl6BcySzJv90TLLYgUPq8ERDllWE7H" + b"3Ym8ECJ7Yj2FNmvOcIAozwVr0p51JbOCESGPL6UIUU/o2QsLQIkRaK6pXZB1KW1x/s8pKijq" + b"1gcd75B9JbWfpAAAAABJRU5ErkJggg==") + +#---------------------------------------------------------------------- +circle_small = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAHxJ" + b"REFUOI2lU0EOwCAIg/r/J6u7TKMVgWXcDG2paFVRxKrWal/PQFELpyzARC4WQjSVCYyZDtbG" + b"za6FQZbMvcHBDZARERFBtDSvWqt9OshMt7DwgCmx1U6WtC/9g/VjOoq6HymaLvJewXrfiDw4" + b"WxZuAfKC9TtMh0DkhusBDWJQP2fEFKMAAAAASUVORK5CYII=") + +#---------------------------------------------------------------------- +colours = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAA3NCSVQICAjb4U/gAAAAOklE" + b"QVQokWNgIBEwMjAwXJJiwpTQefgPU5CJlQGLUvxgRGpgYWBgiNiHReJu3H9s6hkHoR8GoQaS" + b"AQBoQQZvRwyakAAAAABJRU5ErkJggg==") + +#---------------------------------------------------------------------- +cross = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAO9J" + b"REFUWIXNl9sOAyEIRIHu/39xU/epiXVRhltSX3ZNZOZoDCCzvGge4/MeLBdTw9C0ZV0wf6vN" + b"NW1ZF+zmFebaXE5mFRCWNhMN0yR6J5ANCCIeOQkkhuVi+f5UQqDmRNMlrILwmP8AVEB4zR8A" + b"GYiIuQoQgYiaExHxmop3Jplx2pB6AkhghbkJkIVAYk2AKAQaAwF4ITxrYYCuAQNUp2IXQFcx" + b"ggAyuQAqx13mqMYWAE2v2QKmAnhzewbiARAtLFEItS33mmcgtm151MALcWzLvcIRiP9vyzvL" + b"sdmWdzYkZlte+UI+aattecfzfKd9AzzryGWicE3pAAAAAElFTkSuQmCC") + +#---------------------------------------------------------------------- +empty = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAA3NCSVQICAjb4U/gAAAANElE" + b"QVQokWNgIBEwMjAw/P//H84/efIkHtUWFhZMpNpAew0sDKjuNjc3H2gnjWqgiQaSAQBRvgke" + b"qvN6jAAAAABJRU5ErkJggg==") + +#---------------------------------------------------------------------- +expand_selection_h = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAVFJ" + b"REFUWIXtVjFuwzAMJCmjQGrv/UH27vlB9j4gyAvykC5eCz+gewbv3rvnB93lGihCsUNqQ1Ys" + b"x0nUJgZ8AGFapOgTKVFGJAW3BN306xOBURIQwyKGpU//UwIAAEgK66etXxRrdMewL83/VoKQ" + b"uL8SnNrN19i67OQ65Tr1070SuU6PSDYExLAUVdYiY0s93nfcbJtvflFlLRKIpEAMy8f3O5Ss" + b"oeQSvlhDaQ56yRo2T29NcDEsPhK2TQzL6+caYpVArGKIKYHHWlcJPD+8AJJCEsOy228HJjEc" + b"dvstiGE5+xgOLcFQEJLCebQcPCFUI5pHywNhJAW/vUCKKpNcpwIAR2L71borrp8ruU6lqLJW" + b"vKYESAoXsxXY77bY475VuX5d8xezVdvP7YR1Gofs9HNtXXGjvlWEhC/u/d0FpzBdx6ExzhL4" + b"/ooviTW+EkwEQuMHDB37+4Mc8HwAAAAASUVORK5CYII=") + +#---------------------------------------------------------------------- +expand_selection_v = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAATtJ" + b"REFUWIXtlzGOwjAQRb8dhISCRMkN6OnpKaho9gArWho6TkBHQ4v2ADRbpaCnp88NtlyJCAnF" + b"HqqAozhoPfEmIPElS04cj59mbE9GCBmAK9KKAEDIQHBtyCqLx2mEOI1uIBwJjgdIKzpedrl3" + b"w/YHyxPOAKQVHc5f1rFR59MZwgmAtKL9afPwm3F37gThDJD1v39XubFpb3k36gDQ+vPqhmHS" + b"ihJ9Kh13kROAqUQl3Km+AIoe4Ih9DK3G6jiGvsW+Cb1JyKDQABAA+q9+rtlCQFpRlQRTJpvd" + b"59wDVbLbI9nsNr4J3yEoDUH2MWlFvvq2dZ4zBHWKlQ19JiN2Ol7/zHLPi/6WZYcNEAZd7lRf" + b"AGH9AGbsQ1n0AKdSeq3f8gyiscLEhGisNDMh4jQCAAxaE3aFXOkq9lGeXwGxGs15gJjjygAA" + b"AABJRU5ErkJggg==") + +#---------------------------------------------------------------------- +eye = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAJNJ" + b"REFUOI3NkjEOwjAQBOdsoE7pwj+gyCP4f0HBD67gDUHJUkRGhkRIlgtYyZJ13h3pzmcWIj0K" + b"Xem/ABw+C1pmfQtYiLYLKEF3ByDnDGlaH++nuq4aZBYiWmYVQx0ez0cArrfHG6R4CkTu/jqA" + b"SJPGiwSDYFjvadKet3uI3S1Y2cSGIbIZYq3Wb9wAWvX7Ve4GPAEieGRem+OF/wAAAABJRU5E" + b"rkJggg==") + +#---------------------------------------------------------------------- +hexagon = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAALNJ" + b"REFUWIXt180NgCAMBlALG7ILU7gLGxo9aWL4a/uV6KE9Q/sAxUoU4vZlBGRyjuXMsZxIDtLs" + b"QK/ofiRaCuCuVgJhAWYrRnZkCJAm1kCaAPSMJfNfAMuHi5vvAbQGawtzIHduohCrAVaFZ5D9" + b"SFRdRKuK93JDN6FFOMABDnCAAyoA2mSOopX7H5/j0UAEImpIpBPRwkOAFmLWlEoTL2vLuRBN" + b"YRVgBln+a9aDIK8rBLCICxjaeOXhD450AAAAAElFTkSuQmCC") + +#---------------------------------------------------------------------- +msw_style = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAOhJ" + b"REFUWIVjZGRiZkAGU3c8+c9AQ5DtIcOIzGdBtzzaSoCW9jMw7HjyH9kRjLAQmLrjyf8oS37a" + b"Wg4Fy45/hIcESgj8+UcX+1EAigN+/x1gB/yjafIbdQARDvg/AA5gZGRiZpi648l/D31+BkZG" + b"whqoAf7/Z2DYcRGSFRl7Nj36H2QuQh+b0cC6k28YmAbEZiTAwsDAwPD0xfMBsp4V4gAJUfGB" + b"sf/hO4gD/vwdgDIYCgaHA778+DOwDvg7EEUgsgPoVgLhcgDjiHfAaBQMuANGo2DAQ+De6+8D" + b"5oABb5CMOgDaJBu4NAAAvuND/BvGPIIAAAAASUVORK5CYII=") + +#---------------------------------------------------------------------- +position_left = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABHNCSVQICAgIfAhkiAAAAExJ" + b"REFUKJHtkzEKwDAMA0/yx/z/P7XqVOiQDmmHLDEIBEKCGyy5yHmEDyeXACIX3YlcPP2dvQkI" + b"QEblqYFRuTuZGtgIG2EpguR/33gBsoRzDlCsBR0AAAAASUVORK5CYII=") + +#---------------------------------------------------------------------- +position_top = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABHNCSVQICAgIfAhkiAAAAFJJ" + b"REFUKJHtkzEKwDAMA092H5b//ylRppRCpzhToTd50RljJEXi0U0BRQrAiqQ1W5HszIABXAkr" + b"kltQCb8E3z1By1Llev5zF4/uONkO8AtAp22caOhgKT6Nla4AAAAASUVORK5CYII=") + +#---------------------------------------------------------------------- +ribbon = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAYxJ" + b"REFUOI19krtKA0EUhr8xMcYbRIJgk87KBSsRBK0UROMi6y3Wig+wpLQTLMUHsLNSBEVCIoKd" + b"gpAyEBBMISKIiDeSmLhqxiLuZrPjeqrhXH6+c/4RoiWAX2iGKQHyR9vCryf43+D4zBLWtwTw" + b"FRJeAs0wpbEQ5+4Jql8BIl1tTu385EARCXqHB0bihIKwuxH+zdZY2xQIIRibWgSQbpEWL1Jf" + b"j+S5VH/ryQp6ssLOuvS5gItAM0w5ObtMb1eRd6ueS221O0JVq41wKKhQOAT5o21xerzHQ7GV" + b"SGeDwI630ge1mlTuoKzQHQ5RsRppPVkhtdVOTcJb+UNZ4U8XVlfmuX385LX0xUu5UStkM4oL" + b"ioAtAqDP6Vzff3N1mXHW9PYqH0kzTDk0bhDpCJE63AdgQk/wWr+s/JdAM0zZPzzt4E7oCQDO" + b"Uvu4826RJhsHR+O8Ww3Pbx6KynqDo/EmkiYbcxdpYlFBIZtRBgvZDLGoIHeR/pvAFrHVNcOU" + b"sWi9r+Cp+d7AHbYTHnElfgAFJbH0Sf7mkQAAAABJRU5ErkJggg==") + +#---------------------------------------------------------------------- +selection_panel = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAHlJ" + b"REFUOI3tk8EOwzAIQx+w307Dtu9u3UsS9bamuc4Ski8GjIyZByvwJTVA20CAnvBXb5SZAHp/" + b"vla3ol9cx666FWEemAeZqc7vVmbKzAMdu8zDZqx3zThiW28KdSvydsip6VfN30LYUhJHDrof" + b"gEvibvHR4CmWv/EExjdqKKO2QxEAAAAASUVORK5CYII=") + +#---------------------------------------------------------------------- +square = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAEdJ" + b"REFUWIXt1zEOACAIQ9FC9P4HNinOuhsGPyNLXxoWouRS42RnOABJGvcic8bLQHsdN9feAAAA" + b"AAAAAAAAAAAAAILf8HvABvIMCjlFTCZ2AAAAAElFTkSuQmCC") + +#---------------------------------------------------------------------- +triangle = PyEmbeddedImage( + b"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAALFJ" + b"REFUWIXVl0EOgCAMBFvq/39s8ERCyCKwIJY9EYG2M9GDqsGETbzvKCKiZsrWCHT3RaEHSPTl" + b"etsAq0INgIhZC+cZyEnVTPMvgLFwloGSHq1HLZxjoEaPno1YOMNAix7t9Vrwb6CXHp3pseDb" + b"wCg9Otuy4NcAS4/uvFnwaWCWHt2tWfBnYBU9qoEs+DKwmh7VKi34MfAVPaqZ9/JhYObPhk3q" + b"eb1t7ohKlO30eX5/Bx4qMXoN5ex1NgAAAABJRU5ErkJggg==") + +#---------------------------------------------------------------------- diff --git a/samples/ribbon/ribbonbar_demo.py b/samples/ribbon/ribbonbar_demo.py new file mode 100644 index 00000000..b7d33f78 --- /dev/null +++ b/samples/ribbon/ribbonbar_demo.py @@ -0,0 +1,674 @@ +#!/usr/bin/env python + +import os +import sys + +import wx +import wx.ribbon as RB + +import images + + + +# --------------------------------------------------- # +# Some constants for ribbon buttons + +ID_CIRCLE = wx.ID_HIGHEST + 1 +ID_CROSS = ID_CIRCLE + 1 +ID_TRIANGLE = ID_CIRCLE + 2 +ID_SQUARE = ID_CIRCLE + 3 +ID_POLYGON = ID_CIRCLE + 4 +ID_SELECTION_EXPAND_H = ID_CIRCLE + 5 +ID_SELECTION_EXPAND_V = ID_CIRCLE + 6 +ID_SELECTION_CONTRACT = ID_CIRCLE + 7 +ID_PRIMARY_COLOUR = ID_CIRCLE + 8 +ID_SECONDARY_COLOUR = ID_CIRCLE + 9 +ID_DEFAULT_PROVIDER = ID_CIRCLE + 10 +ID_AUI_PROVIDER = ID_CIRCLE + 11 +ID_MSW_PROVIDER = ID_CIRCLE + 12 +ID_MAIN_TOOLBAR = ID_CIRCLE + 13 +ID_POSITION_TOP = ID_CIRCLE + 14 +ID_POSITION_TOP_ICONS = ID_CIRCLE + 15 +ID_POSITION_TOP_BOTH = ID_CIRCLE + 16 +ID_POSITION_LEFT = ID_CIRCLE + 17 +ID_POSITION_LEFT_LABELS = ID_CIRCLE + 18 +ID_POSITION_LEFT_BOTH = ID_CIRCLE + 19 +ID_TOGGLE_PANELS = ID_CIRCLE + 20 + + + +# --------------------------------------------------- # + +def CreateBitmap(imgName): + bmp = getattr(images, imgName).Bitmap + return bmp + + +#--------------------------------------------------------------------------- + +class ColourClientData(object): + def __init__(self, name, colour): + self._name = name + self._colour = colour + + def GetName(self): + return self._name + + def GetColour(self): + return self._colour + + @property + def name(self): + return self._name + + @property + def colour(self): + return self._colour + +#--------------------------------------------------------------------------- + +class RibbonFrame(wx.Frame): + + def __init__(self, parent, id=wx.ID_ANY, title="", pos=wx.DefaultPosition, + size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE, log=None): + + wx.Frame.__init__(self, parent, id, title, pos, size, style) + panel = wx.Panel(self) + + self._ribbon = RB.RibbonBar(panel, style=RB.RIBBON_BAR_DEFAULT_STYLE + |RB.RIBBON_BAR_SHOW_PANEL_EXT_BUTTONS) + + self._bitmap_creation_dc = wx.MemoryDC() + self._colour_data = wx.ColourData() + + home = RB.RibbonPage(self._ribbon, wx.ID_ANY, "Examples", CreateBitmap("ribbon")) + toolbar_panel = RB.RibbonPanel(home, wx.ID_ANY, "Toolbar", + style=RB.RIBBON_PANEL_NO_AUTO_MINIMISE + |RB.RIBBON_PANEL_EXT_BUTTON) + + toolbar = RB.RibbonToolBar(toolbar_panel, ID_MAIN_TOOLBAR) + toolbar.AddTool(wx.ID_ANY, CreateBitmap("align_left")) + toolbar.AddTool(wx.ID_ANY, CreateBitmap("align_center")) + toolbar.AddTool(wx.ID_ANY, CreateBitmap("align_right")) + toolbar.AddSeparator() + toolbar.AddHybridTool(wx.ID_NEW, wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_OTHER, wx.Size(16, 15))) + toolbar.AddTool(wx.ID_ANY, wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, wx.Size(16, 15))) + toolbar.AddTool(wx.ID_ANY, wx.ArtProvider.GetBitmap(wx.ART_FILE_SAVE, wx.ART_OTHER, wx.Size(16, 15))) + toolbar.AddTool(wx.ID_ANY, wx.ArtProvider.GetBitmap(wx.ART_FILE_SAVE_AS, wx.ART_OTHER, wx.Size(16, 15))) + toolbar.AddSeparator() + toolbar.AddDropdownTool(wx.ID_UNDO, wx.ArtProvider.GetBitmap(wx.ART_UNDO, wx.ART_OTHER, wx.Size(16, 15))) + toolbar.AddDropdownTool(wx.ID_REDO, wx.ArtProvider.GetBitmap(wx.ART_REDO, wx.ART_OTHER, wx.Size(16, 15))) + toolbar.AddSeparator() + toolbar.AddTool(wx.ID_ANY, wx.ArtProvider.GetBitmap(wx.ART_REPORT_VIEW, wx.ART_OTHER, wx.Size(16, 15))) + toolbar.AddTool(wx.ID_ANY, wx.ArtProvider.GetBitmap(wx.ART_LIST_VIEW, wx.ART_OTHER, wx.Size(16, 15))) + toolbar.AddSeparator() + toolbar.AddHybridTool(ID_POSITION_LEFT, CreateBitmap("position_left"), "Align ribbonbar vertically\non the left\nfor demonstration purposes") + toolbar.AddHybridTool(ID_POSITION_TOP, CreateBitmap("position_top"), "Align the ribbonbar horizontally\nat the top\nfor demonstration purposes") + toolbar.AddSeparator() + toolbar.AddHybridTool(wx.ID_PRINT, wx.ArtProvider.GetBitmap(wx.ART_PRINT, wx.ART_OTHER, wx.Size(16, 15)), + "This is the Print button tooltip\ndemonstrating a tooltip") + toolbar.SetRows(2, 3) + + selection_panel = RB.RibbonPanel(home, wx.ID_ANY, "Selection", CreateBitmap("selection_panel")) + selection = RB.RibbonButtonBar(selection_panel) + selection.AddButton(ID_SELECTION_EXPAND_V, "Expand Vertically", CreateBitmap("expand_selection_v"), + "This is a tooltip for Expand Vertically\ndemonstrating a tooltip") + selection.AddButton(ID_SELECTION_EXPAND_H, "Expand Horizontally", CreateBitmap("expand_selection_h"), "") + selection.AddButton(ID_SELECTION_CONTRACT, "Contract", CreateBitmap("auto_crop_selection"), + CreateBitmap("auto_crop_selection_small")) + + shapes_panel = RB.RibbonPanel(home, wx.ID_ANY, "Shapes", CreateBitmap("circle_small")) + shapes = RB.RibbonButtonBar(shapes_panel) + shapes.AddButton(ID_CIRCLE, "Circle", CreateBitmap("circle"), CreateBitmap("circle_small"), + help_string="This is a tooltip for the circle button\ndemonstrating another tooltip", + kind=RB.RIBBON_BUTTON_TOGGLE) + shapes.AddButton(ID_CROSS, "Cross", CreateBitmap("cross"), "") + shapes.AddHybridButton(ID_TRIANGLE, "Triangle", CreateBitmap("triangle")) + shapes.AddButton(ID_SQUARE, "Square", CreateBitmap("square"), "") + shapes.AddDropdownButton(ID_POLYGON, "Other Polygon", CreateBitmap("hexagon"), "") + + sizer_panel = RB.RibbonPanel(home, wx.ID_ANY, "Panel with Sizer", + style=RB.RIBBON_PANEL_DEFAULT_STYLE) + + strs = ["Item 1 using a box sizer now", "Item 2 using a box sizer now"] + sizer_panelcombo = wx.ComboBox(sizer_panel, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, + strs, wx.CB_READONLY) + + sizer_panelcombo2 = wx.ComboBox(sizer_panel, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, + strs, wx.CB_READONLY) + + sizer_panelcombo.Select(0) + sizer_panelcombo2.Select(1) + sizer_panelcombo.SetMinSize(wx.Size(150, -1)) + sizer_panelcombo2.SetMinSize(wx.Size(150, -1)) + + # not using wx.WrapSizer(wx.HORIZONTAL) as it reports an incorrect min height + sizer_panelsizer = wx.BoxSizer(wx.VERTICAL) + sizer_panelsizer.AddStretchSpacer(1) + sizer_panelsizer.Add(sizer_panelcombo, 0, wx.ALL|wx.EXPAND, 2) + sizer_panelsizer.Add(sizer_panelcombo2, 0, wx.ALL|wx.EXPAND, 2) + sizer_panelsizer.AddStretchSpacer(1) + sizer_panel.SetSizer(sizer_panelsizer) + + label_font = wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_LIGHT) + self._bitmap_creation_dc.SetFont(label_font) + + scheme = RB.RibbonPage(self._ribbon, wx.ID_ANY, "Appearance", CreateBitmap("eye")) + + (self._default_primary, + self._default_secondary, + self._default_tertiary) = self._ribbon.GetArtProvider().GetColourScheme() + + provider_panel = RB.RibbonPanel(scheme, wx.ID_ANY, "Art", + style=RB.RIBBON_PANEL_NO_AUTO_MINIMISE) + provider_bar = RB.RibbonButtonBar(provider_panel, wx.ID_ANY) + provider_bar.AddButton(ID_DEFAULT_PROVIDER, "Default Provider", + wx.ArtProvider.GetBitmap(wx.ART_QUESTION, wx.ART_OTHER, wx.Size(32, 32)), "") + provider_bar.AddButton(ID_AUI_PROVIDER, "AUI Provider", CreateBitmap("aui_style"), "") + provider_bar.AddButton(ID_MSW_PROVIDER, "MSW Provider", CreateBitmap("msw_style"), "") + + primary_panel = RB.RibbonPanel(scheme, wx.ID_ANY, "Primary Colour", CreateBitmap("colours")) + self._primary_gallery = self.PopulateColoursPanel(primary_panel, self._default_primary, ID_PRIMARY_COLOUR) + + secondary_panel = RB.RibbonPanel(scheme, wx.ID_ANY, "Secondary Colour", CreateBitmap("colours")) + self._secondary_gallery = self.PopulateColoursPanel(secondary_panel, self._default_secondary, ID_SECONDARY_COLOUR) + + dummy_2 = RB.RibbonPage(self._ribbon, wx.ID_ANY, "Empty Page", CreateBitmap("empty")) + dummy_3 = RB.RibbonPage(self._ribbon, wx.ID_ANY, "Another Page", CreateBitmap("empty")) + + self._ribbon.Realize() + + self._logwindow = wx.TextCtrl(panel, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, + wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_LEFT | wx.TE_BESTWRAP | wx.BORDER_NONE) + + self._togglePanels = wx.ToggleButton(panel, ID_TOGGLE_PANELS, "&Toggle panels") + self._togglePanels.SetValue(True) + + s = wx.BoxSizer(wx.VERTICAL) + + s.Add(self._ribbon, 0, wx.EXPAND) + s.Add(self._logwindow, 1, wx.EXPAND) + s.Add(self._togglePanels, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 10) + + panel.SetSizer(s) + self.panel = panel + + self.BindEvents(selection, shapes, provider_bar, toolbar_panel) + + self.SetIcon(images.Mondrian.Icon) + self.CenterOnScreen() + + + + def BindEvents(self, selection, shapes, provider_bar, toolbar_panel): + provider_bar.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.OnDefaultProvider, id=ID_DEFAULT_PROVIDER) + provider_bar.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.OnAUIProvider, id=ID_AUI_PROVIDER) + provider_bar.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.OnMSWProvider, id=ID_MSW_PROVIDER) + selection.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.OnSelectionExpandHButton, id=ID_SELECTION_EXPAND_H) + selection.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.OnSelectionExpandVButton, id=ID_SELECTION_EXPAND_V) + selection.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.OnSelectionContractButton, id=ID_SELECTION_CONTRACT) + shapes.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.OnCircleButton, id=ID_CIRCLE) + shapes.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.OnCrossButton, id=ID_CROSS) + shapes.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.OnTriangleButton, id=ID_TRIANGLE) + shapes.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.OnSquareButton, id=ID_SQUARE) + shapes.Bind(RB.EVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED, self.OnTriangleDropdown, id=ID_TRIANGLE) + shapes.Bind(RB.EVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED, self.OnPolygonDropdown, id=ID_POLYGON) + toolbar_panel.Bind(RB.EVT_RIBBONPANEL_EXTBUTTON_ACTIVATED, self.OnExtButton) + + self.Bind(RB.EVT_RIBBONGALLERY_HOVER_CHANGED, self.OnHoveredColourChange, id=ID_PRIMARY_COLOUR) + self.Bind(RB.EVT_RIBBONGALLERY_HOVER_CHANGED, self.OnHoveredColourChange, id=ID_SECONDARY_COLOUR) + self.Bind(RB.EVT_RIBBONGALLERY_SELECTED, self.OnPrimaryColourSelect, id=ID_PRIMARY_COLOUR) + self.Bind(RB.EVT_RIBBONGALLERY_SELECTED, self.OnSecondaryColourSelect, id=ID_SECONDARY_COLOUR) + self.Bind(RB.EVT_RIBBONTOOLBAR_CLICKED, self.OnNew, id=wx.ID_NEW) + self.Bind(RB.EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED, self.OnNewDropdown, id=wx.ID_NEW) + self.Bind(RB.EVT_RIBBONTOOLBAR_CLICKED, self.OnPrint, id=wx.ID_PRINT) + self.Bind(RB.EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED, self.OnPrintDropdown, id=wx.ID_PRINT) + self.Bind(RB.EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED, self.OnRedoDropdown, id=wx.ID_REDO) + self.Bind(RB.EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED, self.OnUndoDropdown, id=wx.ID_UNDO) + self.Bind(RB.EVT_RIBBONTOOLBAR_CLICKED, self.OnPositionLeft, id=ID_POSITION_LEFT) + self.Bind(RB.EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED, self.OnPositionLeftDropdown, id=ID_POSITION_LEFT) + self.Bind(RB.EVT_RIBBONTOOLBAR_CLICKED, self.OnPositionTop, id=ID_POSITION_TOP) + self.Bind(RB.EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED, self.OnPositionTopDropdown, id=ID_POSITION_TOP) + self.Bind(wx.EVT_BUTTON, self.OnColourGalleryButton, id=ID_PRIMARY_COLOUR) + self.Bind(wx.EVT_BUTTON, self.OnColourGalleryButton, id=ID_SECONDARY_COLOUR) + self.Bind(wx.EVT_MENU, self.OnPositionLeftIcons, id=ID_POSITION_LEFT) + self.Bind(wx.EVT_MENU, self.OnPositionLeftLabels, id=ID_POSITION_LEFT_LABELS) + self.Bind(wx.EVT_MENU, self.OnPositionLeftBoth, id=ID_POSITION_LEFT_BOTH) + self.Bind(wx.EVT_MENU, self.OnPositionTopLabels, id=ID_POSITION_TOP) + self.Bind(wx.EVT_MENU, self.OnPositionTopIcons, id=ID_POSITION_TOP_ICONS) + self.Bind(wx.EVT_MENU, self.OnPositionTopBoth, id=ID_POSITION_TOP_BOTH) + + self._togglePanels.Bind(wx.EVT_TOGGLEBUTTON, self.OnTogglePanels, id=ID_TOGGLE_PANELS) + + + def SetBarStyle(self, style): + self._ribbon.Freeze() + self._ribbon.SetWindowStyleFlag(style) + + pTopSize = self.panel.GetSizer() + pToolbar = wx.FindWindowById(ID_MAIN_TOOLBAR) + + if style & RB.RIBBON_BAR_FLOW_VERTICAL: + self._ribbon.SetTabCtrlMargins(10, 10) + pTopSize.SetOrientation(wx.HORIZONTAL) + if pToolbar: + pToolbar.SetRows(3, 5) + + else: + self._ribbon.SetTabCtrlMargins(50, 20) + pTopSize.SetOrientation(wx.VERTICAL) + if pToolbar: + pToolbar.SetRows(2, 3) + + self._ribbon.Realize() + self._ribbon.Thaw() + self.panel.Layout() + + + def PopulateColoursPanel(self, panel, defc, gallery_id): + gallery = wx.FindWindowById(gallery_id, panel) + if gallery: + gallery.Clear() + else: + gallery = RB.RibbonGallery(panel, gallery_id) + + dc = self._bitmap_creation_dc + def_item = self.AddColourToGallery(gallery, "Default", dc, defc) + gallery.SetSelection(def_item) + + self.AddColourToGallery(gallery, "BLUE", dc) + self.AddColourToGallery(gallery, "BLUE VIOLET", dc) + self.AddColourToGallery(gallery, "BROWN", dc) + self.AddColourToGallery(gallery, "CADET BLUE", dc) + self.AddColourToGallery(gallery, "CORAL", dc) + self.AddColourToGallery(gallery, "CYAN", dc) + self.AddColourToGallery(gallery, "DARK GREEN", dc) + self.AddColourToGallery(gallery, "DARK ORCHID", dc) + self.AddColourToGallery(gallery, "FIREBRICK", dc) + self.AddColourToGallery(gallery, "GOLD", dc) + self.AddColourToGallery(gallery, "GOLDENROD", dc) + self.AddColourToGallery(gallery, "GREEN", dc) + self.AddColourToGallery(gallery, "INDIAN RED", dc) + self.AddColourToGallery(gallery, "KHAKI", dc) + self.AddColourToGallery(gallery, "LIGHT BLUE", dc) + self.AddColourToGallery(gallery, "LIME GREEN", dc) + self.AddColourToGallery(gallery, "MAGENTA", dc) + self.AddColourToGallery(gallery, "MAROON", dc) + self.AddColourToGallery(gallery, "NAVY", dc) + self.AddColourToGallery(gallery, "ORANGE", dc) + self.AddColourToGallery(gallery, "ORCHID", dc) + self.AddColourToGallery(gallery, "PINK", dc) + self.AddColourToGallery(gallery, "PLUM", dc) + self.AddColourToGallery(gallery, "PURPLE", dc) + self.AddColourToGallery(gallery, "RED", dc) + self.AddColourToGallery(gallery, "SALMON", dc) + self.AddColourToGallery(gallery, "SEA GREEN", dc) + self.AddColourToGallery(gallery, "SIENNA", dc) + self.AddColourToGallery(gallery, "SKY BLUE", dc) + self.AddColourToGallery(gallery, "TAN", dc) + self.AddColourToGallery(gallery, "THISTLE", dc) + self.AddColourToGallery(gallery, "TURQUOISE", dc) + self.AddColourToGallery(gallery, "VIOLET", dc) + self.AddColourToGallery(gallery, "VIOLET RED", dc) + self.AddColourToGallery(gallery, "WHEAT", dc) + self.AddColourToGallery(gallery, "WHITE", dc) + self.AddColourToGallery(gallery, "YELLOW", dc) + + return gallery + + + def GetGalleryColour(self, gallery, item, name=None): + data = gallery.GetItemClientData(item) + + if name != None: + name = data.GetName() + + return data.GetColour(), name + + + def OnHoveredColourChange(self, event): + # Set the background of the gallery to the hovered colour, or back to the + # default if there is no longer a hovered item. + + gallery = event.GetGallery() + provider = gallery.GetArtProvider() + + if event.GetGalleryItem() != None: + if provider == self._ribbon.GetArtProvider(): + provider = provider.Clone() + gallery.SetArtProvider(provider) + + provider.SetColour(RB.RIBBON_ART_GALLERY_HOVER_BACKGROUND_COLOUR, + self.GetGalleryColour(event.GetGallery(), event.GetGalleryItem(), None)[0]) + + else: + if provider != self._ribbon.GetArtProvider(): + gallery.SetArtProvider(self._ribbon.GetArtProvider()) + del provider + + + def OnPrimaryColourSelect(self, event): + colour, name = self.GetGalleryColour(event.GetGallery(), event.GetGalleryItem(), "") + self.AddText("Colour %s selected as primary."%name) + + dummy, secondary, tertiary = self._ribbon.GetArtProvider().GetColourScheme() + self._ribbon.GetArtProvider().SetColourScheme(colour, secondary, tertiary) + self.ResetGalleryArtProviders() + self._ribbon.Refresh() + + + def OnSecondaryColourSelect(self, event): + colour, name = self.GetGalleryColour(event.GetGallery(), event.GetGalleryItem(), "") + self.AddText("Colour %s selected as secondary."%name) + + primary, dummy, tertiary = self._ribbon.GetArtProvider().GetColourScheme() + self._ribbon.GetArtProvider().SetColourScheme(primary, colour, tertiary) + self.ResetGalleryArtProviders() + self._ribbon.Refresh() + + + def ResetGalleryArtProviders(self): + if self._primary_gallery.GetArtProvider() != self._ribbon.GetArtProvider(): + self._primary_gallery.SetArtProvider(self._ribbon.GetArtProvider()) + + if self._secondary_gallery.GetArtProvider() != self._ribbon.GetArtProvider(): + self._secondary_gallery.SetArtProvider(self._ribbon.GetArtProvider()) + + + def OnSelectionExpandHButton(self, event): + self.AddText("Expand selection horizontally button clicked.") + + + def OnSelectionExpandVButton(self, event): + self.AddText("Expand selection vertically button clicked.") + + + def OnSelectionContractButton(self, event): + self.AddText("Contract selection button clicked.") + + + def OnCircleButton(self, event): + self.AddText("Circle button clicked.") + + + def OnCrossButton(self, event): + self.AddText("Cross button clicked.") + + + def OnTriangleButton(self, event): + self.AddText("Triangle button clicked.") + + + def OnTriangleDropdown(self, event): + menu = wx.Menu() + menu.Append(wx.ID_ANY, "Equilateral") + menu.Append(wx.ID_ANY, "Isosceles") + menu.Append(wx.ID_ANY, "Scalene") + + event.PopupMenu(menu) + + + def OnSquareButton(self, event): + self.AddText("Square button clicked.") + + + def OnPolygonDropdown(self, event): + menu = wx.Menu() + menu.Append(wx.ID_ANY, "Pentagon (5 sided)") + menu.Append(wx.ID_ANY, "Hexagon (6 sided)") + menu.Append(wx.ID_ANY, "Heptagon (7 sided)") + menu.Append(wx.ID_ANY, "Octogon (8 sided)") + menu.Append(wx.ID_ANY, "Nonagon (9 sided)") + menu.Append(wx.ID_ANY, "Decagon (10 sided)") + + event.PopupMenu(menu) + + + def OnNew(self, event): + self.AddText("New button clicked.") + + + def OnNewDropdown(self, event): + menu = wx.Menu() + menu.Append(wx.ID_ANY, "New Document") + menu.Append(wx.ID_ANY, "New Template") + menu.Append(wx.ID_ANY, "New Mail") + + event.PopupMenu(menu) + + + def OnPrint(self, event): + self.AddText("Print button clicked.") + + + def OnPrintDropdown(self, event): + menu = wx.Menu() + menu.Append(wx.ID_ANY, "Print") + menu.Append(wx.ID_ANY, "Preview") + menu.Append(wx.ID_ANY, "Options") + + event.PopupMenu(menu) + + + def OnRedoDropdown(self, event): + menu = wx.Menu() + menu.Append(wx.ID_ANY, "Redo E") + menu.Append(wx.ID_ANY, "Redo F") + menu.Append(wx.ID_ANY, "Redo G") + + event.PopupMenu(menu) + + + def OnUndoDropdown(self, event): + menu = wx.Menu() + menu.Append(wx.ID_ANY, "Undo C") + menu.Append(wx.ID_ANY, "Undo B") + menu.Append(wx.ID_ANY, "Undo A") + + event.PopupMenu(menu) + + + def OnPositionTopLabels(self, event): + self.SetBarStyle(RB.RIBBON_BAR_DEFAULT_STYLE) + + + def OnPositionTopIcons(self, event): + self.SetBarStyle((RB.RIBBON_BAR_DEFAULT_STYLE &~RB.RIBBON_BAR_SHOW_PAGE_LABELS) + | RB.RIBBON_BAR_SHOW_PAGE_ICONS) + + + def OnPositionTopBoth(self, event): + self.SetBarStyle(RB.RIBBON_BAR_DEFAULT_STYLE | RB.RIBBON_BAR_SHOW_PAGE_ICONS) + + + def OnPositionLeftLabels(self, event): + self.SetBarStyle(RB.RIBBON_BAR_DEFAULT_STYLE | RB.RIBBON_BAR_FLOW_VERTICAL) + + + def OnPositionLeftIcons(self, event): + self.SetBarStyle((RB.RIBBON_BAR_DEFAULT_STYLE &~RB.RIBBON_BAR_SHOW_PAGE_LABELS) | + RB.RIBBON_BAR_SHOW_PAGE_ICONS | RB.RIBBON_BAR_FLOW_VERTICAL) + + + def OnPositionLeftBoth(self, event): + self.SetBarStyle(RB.RIBBON_BAR_DEFAULT_STYLE | RB.RIBBON_BAR_SHOW_PAGE_ICONS | + RB.RIBBON_BAR_FLOW_VERTICAL) + + + def OnPositionTop(self, event): + self.OnPositionTopLabels(event) + + + def OnPositionTopDropdown(self, event): + menu = wx.Menu() + menu.Append(ID_POSITION_TOP, "Top with Labels") + menu.Append(ID_POSITION_TOP_ICONS, "Top with Icons") + menu.Append(ID_POSITION_TOP_BOTH, "Top with Both") + event.PopupMenu(menu) + + + def OnPositionLeft(self, event): + self.OnPositionLeftIcons(event) + + + def OnPositionLeftDropdown(self, event): + menu = wx.Menu() + menu.Append(ID_POSITION_LEFT, "Left with Icons") + menu.Append(ID_POSITION_LEFT_LABELS, "Left with Labels") + menu.Append(ID_POSITION_LEFT_BOTH, "Left with Both") + event.PopupMenu(menu) + + + def OnTogglePanels(self, event): + self._ribbon.ShowPanels(self._togglePanels.GetValue()) + + + def OnExtButton(self, event): + wx.MessageBox("Extended button activated") + + + def AddText(self, msg): + self._logwindow.AppendText(msg) + self._logwindow.AppendText("\n") + self._ribbon.DismissExpandedPanel() + + + def AddColourToGallery(self, gallery, colour, dc, value=None): + item = None + + if colour != "Default": + c = wx.Colour(colour) + + if value is not None: + c = value + + if c.IsOk(): + + iWidth = 64 + iHeight = 40 + + bitmap = wx.Bitmap(iWidth, iHeight) + dc.SelectObject(bitmap) + b = wx.Brush(c) + dc.SetPen(wx.BLACK_PEN) + dc.SetBrush(b) + dc.DrawRectangle(0, 0, iWidth, iHeight) + + colour = colour[0] + colour[1:].lower() + size = wx.Size(*dc.GetTextExtent(colour)) + notcred = min(abs(~c.Red()), 255) + notcgreen = min(abs(~c.Green()), 255) + notcblue = min(abs(~c.Blue()), 255) + + foreground = wx.Colour(notcred, notcgreen, notcblue) + + if abs(foreground.Red() - c.Red()) + abs(foreground.Blue() - c.Blue()) + abs(foreground.Green() - c.Green()) < 64: + # Foreground too similar to background - use a different + # strategy to find a contrasting colour + foreground = wx.Colour((c.Red() + 64) % 256, 255 - c.Green(), + (c.Blue() + 192) % 256) + + dc.SetTextForeground(foreground) + dc.DrawText(colour, (iWidth - size.GetWidth() + 1) / 2, (iHeight - size.GetHeight()) / 2) + dc.SelectObjectAsSource(wx.NullBitmap) + + item = gallery.Append(bitmap, wx.ID_ANY) + gallery.SetItemClientData(item, ColourClientData(colour, c)) + + return item + + + def OnColourGalleryButton(self, event): + gallery = event.GetEventObject() + if gallery is None: + return + + self._ribbon.DismissExpandedPanel() + if gallery.GetSelection(): + self._colour_data.SetColour(self.GetGalleryColour(gallery, gallery.GetSelection(), None)[0]) + + dlg = wx.ColourDialog(self, self._colour_data) + + if dlg.ShowModal() == wx.ID_OK: + + self._colour_data = dlg.GetColourData() + clr = self._colour_data.GetColour() + + # Try to find colour in gallery + item = None + for i in range(gallery.GetCount()): + item = gallery.GetItem(i) + if self.GetGalleryColour(gallery, item, None)[0] == clr: + break + else: + item = None + + # Colour not in gallery - add it + if item == None: + item = self.AddColourToGallery(gallery, + clr.GetAsString(wx.C2S_HTML_SYNTAX), + self._bitmap_creation_dc, + clr) + gallery.Realize() + + # Set selection + gallery.EnsureVisible(item) + gallery.SetSelection(item) + + # Send an event to respond to the selection change + dummy = RB.RibbonGalleryEvent(RB.wxEVT_COMMAND_RIBBONGALLERY_SELECTED, + gallery.GetId()) + dummy.SetEventObject(gallery) + dummy.SetGallery(gallery) + dummy.SetGalleryItem(item) + self.GetEventHandler().ProcessEvent(dummy) + + + def OnDefaultProvider(self, event): + self._ribbon.DismissExpandedPanel() + self.SetArtProvider(RB.RibbonDefaultArtProvider()) + + + def OnAUIProvider(self, event): + self._ribbon.DismissExpandedPanel() + self.SetArtProvider(RB.RibbonAUIArtProvider()) + + + def OnMSWProvider(self, event): + self._ribbon.DismissExpandedPanel() + self.SetArtProvider(RB.RibbonMSWArtProvider()) + + + def SetArtProvider(self, prov): + self._ribbon.Freeze() + self._ribbon.SetArtProvider(prov) + + (self._default_primary, + self._default_secondary, + self._default_tertiary) = prov.GetColourScheme() + + self.PopulateColoursPanel(self._primary_gallery.GetParent(), + self._default_primary, + ID_PRIMARY_COLOUR) + self.PopulateColoursPanel(self._secondary_gallery.GetParent(), + self._default_secondary, + ID_SECONDARY_COLOUR) + + self._ribbon.Thaw() + self.panel.GetSizer().Layout() + self._ribbon.Realize() + + +#--------------------------------------------------------------------------- + + +if __name__ == '__main__': + app = wx.App() + frm = RibbonFrame(None, -1, "wx.ribbon Sample Application", size=(800, 600)) + frm.Show() + + if False: + import wx.lib.inspection + wx.lib.inspection.InspectionTool().Show() + + app.MainLoop()