def OnInsertBitmap(self, event): """Insert bitmap event handler""" key = self.grid.actions.cursor # Get file name wildcard = _("Bitmap file") + " (*)|*" if rsvg is not None: wildcard += "|" + _("SVG file") + " (*.svg)|*.svg" message = _("Select image for current cell") style = wx.OPEN | wx.CHANGE_DIR filepath, index = \ self.grid.interfaces.get_filepath_findex_from_user(wildcard, message, style) if index == 0: # Bitmap loaded try: img = wx.EmptyImage(1, 1) img.LoadFile(filepath) except TypeError: return if img.GetSize() == (-1, -1): # Bitmap could not be read return code = self.grid.main_window.actions.img2code(key, img) elif index == 1 and rsvg is not None: # SVG loaded with open(filepath) as infile: try: code = infile.read() except IOError: return if is_svg(code): code = 'u"""' + code + '"""' else: # Does not seem to be an svg file return else: code = None if code: self.grid.actions.set_code(key, code)
def draw(self): """Draws cell content to context""" # Content is only rendered within rect self.context.save() self.context.rectangle(*self.rect) self.context.clip() content = self.get_cell_content() pos_x, pos_y = self.rect[:2] self.context.translate(pos_x + 2, pos_y + 2) cell_attributes = self.code_array.cell_attributes # Do not draw cell content if cell is too small # This allows blending out small cells by reducing height to 0 if self.rect[2] < cell_attributes[self.key]["borderwidth_right"] or \ self.rect[3] < cell_attributes[self.key]["borderwidth_bottom"]: self.context.restore() return if self.code_array.cell_attributes[self.key]["button_cell"]: # Render a button instead of the cell label = self.code_array.cell_attributes[self.key]["button_cell"] self.draw_button(1, 1, self.rect[2]-5, self.rect[3]-5, label) elif isinstance(content, wx._gdi.Bitmap): # A bitmap is returned --> Draw it! self.draw_bitmap(content) elif pyplot is not None and isinstance(content, pyplot.Figure): # A matplotlib figure is returned --> Draw it! self.draw_matplotlib_figure(content) elif isinstance(content, basestring) and is_svg(content): # The content is a vaid SVG xml string self.draw_svg(content) elif content is not None: self.draw_text(content) self.context.translate(-pos_x - 2, -pos_y - 2) # Remove clipping to rect self.context.restore()
def draw(self): """Draws cell content to context""" # Content is only rendered within rect self.context.save() self.context.rectangle(*self.rect) self.context.clip() content = self.get_cell_content() pos_x, pos_y = self.rect[:2] self.context.translate(pos_x + 2, pos_y + 2) cell_attributes = self.code_array.cell_attributes # Do not draw cell content if cell is too small # This allows blending out small cells by reducing height to 0 if self.rect[2] < cell_attributes[self.key]["borderwidth_right"] or \ self.rect[3] < cell_attributes[self.key]["borderwidth_bottom"]: self.context.restore() return if self.code_array.cell_attributes[self.key]["button_cell"]: # Render a button instead of the cell label = self.code_array.cell_attributes[self.key]["button_cell"] self.draw_button(1, 1, self.rect[2] - 5, self.rect[3] - 5, label) elif isinstance(content, wx._gdi.Bitmap): # A bitmap is returned --> Draw it! self.draw_bitmap(content) elif pyplot is not None and isinstance(content, pyplot.Figure): # A matplotlib figure is returned --> Draw it! self.draw_matplotlib_figure(content) elif isinstance(content, basestring) and is_svg(content): # The content is a vaid SVG xml string self.draw_svg(content) elif content is not None: self.draw_text(content) self.context.translate(-pos_x - 2, -pos_y - 2) # Remove clipping to rect self.context.restore()
def test_is_svg(code, res): """Unit test for is_svg""" if is_svg(code) is not None: # This only works if pyrsvg is installed assert is_svg(code) == res