def __init__(self, proportion=0): """ Construct the flags object initialized with the given proportion (0 by default). Modeled after wxSizerFlags in sizer.h file of wxWidgets. """ ## theClass = 'SizerFlags' ## wx.RegisterFirstCallerClassName(self, theClass) ## Object.__init__(self) ## self.tsBeginClassRegistration(theClass, wx.ID_ANY) try: self.logger = wxDisplay.TheLogger if self.logger is None: self.logger = Logger() except AttributeError as errorCode: msg = "Display.TheLogger not available (%s)" % errorCode print(" DEBUG: %s" % msg) self.logger = Logger() self.logger.debug(msg) # Set Default Values self.ts_BorderInPixels = 0 # -1 self.ts_Flags = 0 self.ts_Proportion = proportion
class SizerFlags(object): """ Normally, when you add an item to a sizer via wx.Sizer.Add, you have to specify a lot of flags and parameters which can be unwieldy. This is where wx.SizerFlags comes in: it allows you to specify all parameters using the named methods instead. For example, instead of: sizer.Add(ctrl, 0, wx.EXPAND | wx.ALL, 10) you can now write: sizer.AddF(ctrl, wx.SizerFlags().Expand().Border(wx.ALL, 10)) This is more readable and also allows you to create wx.SizerFlags objects which can be reused for several sizer items.: flagsExpand = wx.SizerFlags(1) flagsExpand.Expand().Border(wx.ALL, 10) sizer.AddF(ctrl1, flagsExpand) sizer.AddF(ctrl2, flagsExpand) Note that by specification, all methods of wx.SizerFlags return the wx.SizerFlags object itself allowing chaining multiple method calls like in the examples above. """ def __init__(self, proportion=0): """ Construct the flags object initialized with the given proportion (0 by default). Modeled after wxSizerFlags in sizer.h file of wxWidgets. """ ## theClass = 'SizerFlags' ## wx.RegisterFirstCallerClassName(self, theClass) ## Object.__init__(self) ## self.tsBeginClassRegistration(theClass, wx.ID_ANY) try: self.logger = wxDisplay.TheLogger if self.logger is None: self.logger = Logger() except AttributeError as errorCode: msg = "Display.TheLogger not available (%s)" % errorCode print(" DEBUG: %s" % msg) self.logger = Logger() self.logger.debug(msg) # Set Default Values self.ts_BorderInPixels = 0 # -1 self.ts_Flags = 0 self.ts_Proportion = proportion ## self.tsEndClassRegistration(theClass) # ----------------------------------------------------------------------- ## def __del__(self): ## ''' ## ''' ## pass # ----------------------------------------------------------------------- def Align(self, alignment): """ Sets the item alignment Modeled after Align in sizer.h file of wxWidgets. """ # notice that Align() replaces the current alignment flags, use # specific methods below such as Top(), Left() &c if you want # to set just the vertical or horizontal alignment self.ts_Flags &= ~wx.ALIGN_MASK self.ts_Flags |= alignment self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "Align Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) return self # ----------------------------------------------------------------------- @staticmethod def ASSERT_VALID_SIZER_FLAGS(f): """ Checks if flags value (f) is within the mask of allowed values. Return True is specified flag bits (f) represents a combination of valid sizer flag bits. """ if f == (f & SIZER_FLAGS_MASK): valid = True else: valid = False return valid # ----------------------------------------------------------------------- def Border(self, direction=wx.ALL, borderInPixels=-1): """ Sets the border of the item in the direction(s) or sides given by the direction parameter. If the borderInPixels value is not given then the default border size (see GetDefaultBorder) will be used. Modeled after Border in sizer.h file of wxWidgets. """ self.ts_Flags &= ~wx.ALL self.ts_Flags |= direction self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "Border Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) self.ts_BorderInPixels = borderInPixels return self # ----------------------------------------------------------------------- def Bottom(self): """ Aligns the object to the bottom of the available space, a shortcut for calling Align(wx.ALIGN_BOTTOM) Modeled after Bottom in sizer.h file of wxWidgets. """ self.ts_Flags = (self.ts_Flags & ~wx.ALIGN_CENTER_VERTICAL) | wx.ALIGN_BOTTOM self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "Bottom Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) return self # ----------------------------------------------------------------------- def Center(self): """ Sets the centering alignment flags. Modeled after Center in sizer.h file of wxWidgets. """ return self.Centre() # ----------------------------------------------------------------------- def Centre(self): """ Same as Center for those with an alternate dialect of English. Modeled after Centre in sizer.h file of wxWidgets. """ return self.Align(wx.ALIGN_CENTER) # ----------------------------------------------------------------------- def DoubleBorder(self, direction=wx.ALL): """ Sets the border in the given direction to twice the default border size. Modeled after DoubleBorder in sizer.h file of wxWidgets. """ self.logger.wxASSERT_MSG((direction == wx.ALL), "DoubleBorder direction 0x%X != 0x%X." % (direction, wx.ALL)) if wx.USE_BORDER_BY_DEFAULT: # Can only support one border character return self.Border(direction, self.GetDefaultBorder()) else: return self # ----------------------------------------------------------------------- def DoubleHorzBorder(self): """ Sets the left and right borders to twice the default border size. Modeled after DoubleHorzBorder in sizer.h file of wxWidgets. """ if wx.USE_BORDER_BY_DEFAULT: # Can only support one border character return self.Border(wx.LEFT | wx.RIGHT, SizerFlags.GetDefaultBorder()) else: return self # ----------------------------------------------------------------------- def Expand(self): """ Sets the wx.EXPAND flag, which will cause the item to be expanded to fill as much space as it is given by the sizer. Modeled after Expand in sizer.h file of wxWidgets. """ self.ts_Flags |= wx.EXPAND self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "Expand Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) return self # ----------------------------------------------------------------------- def FixedMinSize(self): """ Sets the wx.FIXED_MINSIZE flag. Modeled after FixedMinSize in sizer.h file of wxWidgets. """ self.ts_Flags |= wx.FIXED_MINSIZE self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "FixedMinSize Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) return self # ----------------------------------------------------------------------- def GetBorderInPixels(self): """ Returns the border value in pixels to be used in the sizer item. Modeled after GetBorderInPixels in sizer.h file of wxWidgets. """ return self.ts_BorderInPixels # ----------------------------------------------------------------------- @staticmethod def GetDefaultBorder(): """ Returns the default border size used by the other border methods Modeled after GetDefaultBorder in sizer.h file of wxWidgets. """ if wx.USE_BORDER_BY_DEFAULT: return -1 else: return 0 # ----------------------------------------------------------------------- def GetFlags(self): """ Returns the flags value to be used in the sizer item. Modeled after GetFlags in sizer.h file of wxWidgets. """ self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "GetFlags Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) return self.ts_Flags # ----------------------------------------------------------------------- def GetProportion(self): """ Returns the proportion value to be used in the sizer item. Modeled after GetProportion in sizer.h file of wxWidgets. """ return self.ts_Proportion # ----------------------------------------------------------------------- def HorzBorder(self): """ Sets the left and right borders to the default border size. Modeled after HorzBorder in sizer.h file of wxWidgets. """ if wx.USE_BORDER_BY_DEFAULT: return self.Border(wx.LEFT | wx.RIGHT, SizerFlags.GetDefaultBorder()) else: return self # ----------------------------------------------------------------------- def Left(self): """ Aligns the object to the left, a shortcut for calling Align(wx.ALIGN_LEFT) Modeled after Left in sizer.h file of wxWidgets. """ self.ts_Flags &= ~(wx.ALIGN_RIGHT | wx.ALIGN_CENTER_HORIZONTAL) self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "Left Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) return self # ----------------------------------------------------------------------- def Proportion(self, proportion): """ Sets the items proportion value. Modeled after Proportion in sizer.h file of wxWidgets. """ self.ts_Proportion = proportion return self # ----------------------------------------------------------------------- def ReserveSpaceEvenIfHidden(self): """ Makes the item ignore windows visibility status Modeled after ReserveSpaceEvenIfHidden in sizer.h file of wxWidgets. """ self.ts_Flags |= wx.RESERVE_SPACE_EVEN_IF_HIDDEN self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "ReserveSpaceEvenIfHidden Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) return self # ----------------------------------------------------------------------- def Right(self): """ Aligns the object to the right, a shortcut for calling Align(wx.ALIGN_RIGHT) Modeled after Right in sizer.h file of wxWidgets. """ self.ts_Flags = self.ts_Flags & ~wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_RIGHT self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "Right Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) return self # ----------------------------------------------------------------------- def Shaped(self): """ Sets the wx.SHAPED flag. Modeled after Shaped in sizer.h file of wxWidgets. """ self.ts_Flags |= wx.SHAPED self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "Shaped Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) return self # ----------------------------------------------------------------------- def Top(self): """ Aligns the object to the top of the available space, a shortcut for calling Align(wx.ALIGN_TOP) Modeled after Top in sizer.h file of wxWidgets. """ self.ts_Flags &= ~(wx.ALIGN_BOTTOM | wx.ALIGN_CENTER_VERTICAL) self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "Top Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) return self # ----------------------------------------------------------------------- def TripleBorder(self, direction=wx.ALL): """ Sets the border in the given direction to three times the default border size. Modeled after TripleBorder in sizer.h file of wxWidgets. """ self.logger.wxASSERT_MSG( (self.ts_Flags == (self.ts_Flags & SIZER_FLAGS_MASK)), "TripleBorder Flags 0x%X != 0x%X." % (self.ts_Flags, self.ts_Flags & SIZER_FLAGS_MASK), ) if wx.USE_BORDER_BY_DEFAULT: # Can only support one border character return self.Border(direction, SizerFlags.GetDefaultBorder()) else: return self # ----------------------------------------------------------------------- # Begin tsWx API Extensions def tsGetBorderCharacterDimensions(self, thickness): """ Return width and height of border character in pixels. Parameter: thickness --- Border line thickness in pixels. """ if thickness == -1: if wx.USE_BORDER_BY_DEFAULT: # Default (1-pixel) border required. dimensions = wxSize(wx.pixelWidthPerCharacter, wx.pixelHeightPerCharacter) else: # No border required. dimensions = wxSize(0, 0) elif thickness == 0: # No border required. dimensions = wxSize(0, 0) else: # Override thickness and apply default (1-pixel) border. dimensions = wxSize( min(1, thickness) * wx.pixelWidthPerCharacter, min(1, thickness) * wx.pixelHeightPerCharacter ) return dimensions