def __init__(self, gui): """ Initialise "shared" variables, and set up a wxPython wildcard from the supported filetypes. """ self.gui = gui self.filename = None # ACTIVE .wtbd file self.temp_file = None # selected file (.wtdb/png/pdf - doesn't matter) self.to_archive = [] # image files to add to the save archive self.is_zipped = False self.zip = None # zip archive to read images from self.saved = True self.save_time = time.time() self.colour = wx.BLACK self.background = u"White" self.transparent = True # overwrites background self.thickness = 1 self.font = None # default font for text input self.tool = 1 # Current tool ID that is being drawn with self.items = tools.items # shortcut self.update_version = True self.saved_version = u"" self.im_location = None # location of ImageMagick on windows self.path = None self.library = PDFCache(u"library.known") pub.subscribe(self.set_colour, "change_colour") pub.subscribe(self.set_background, "change_background") if Config().default_font(): self.font = wx.FFont(1, wx.FONTFAMILY_DEFAULT) self.font.SetNativeFontInfoFromString(Config().default_font())
def __init__(self, pane, gui): """ Stores gui reference to access utility colour/thickness attributes. """ wx.Window.__init__(self, pane, size=(45, 45)) self.gui = gui self.SetBackgroundColour(wx.WHITE) self.SetToolTipString(_("A preview of your current tool")) self.Bind(wx.EVT_PAINT, self.on_paint) pub.subscribe(self.Refresh, 'gui.preview.refresh')
def setup(self): """ Create a random list of fake Tool objects, excluding Erasers The actual values of the shapes don't matter, as they're all instanciated to default values of 0 """ self.canvas = make_canvas() func = lambda shape: self.canvas.add_shape(shape) pub.subscribe(func, 'shape.add') make_shapes(self.canvas) self.shapes = list(self.canvas.shapes) # value to test changes against
def __init__(self, parent, gui): wx.Panel.__init__(self, parent) self.gui = gui self.tree = wx.TreeCtrl(self, style=wx.TR_HAS_BUTTONS) self.root = self.tree.AddRoot("Whyteboard") self.tabs = [] self.add_tab() self.tree.Expand(self.root) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.tree, 1, wx.EXPAND) # fills vert space self.SetSizer(sizer) self.tree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.on_click) self.tree.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.pop_up) pub.subscribe(self.add_note, 'note.add') pub.subscribe(self.edit_note, 'note.edit') pub.subscribe(self.rename, 'sheet.rename') pub.subscribe(self.sheet_moved, 'sheet.move') pub.subscribe(self.remove_current_sheet_items, 'note.delete_sheet_items')
def __init__(self, gui): """ Stores a reference to the drawing preview and the toggled drawing tool. """ wx.Panel.__init__(self, gui, style=0 | wx.RAISED_BORDER) collapsible = wx.CollapsiblePane(self, style=wx.CP_DEFAULT_STYLE | wx.CP_NO_TLW_RESIZE) self.pane = collapsible.GetPane() # every widget's parent self.gui = gui self.tools = {} self.thickness_timer = None self.thickness_scrolling = False self.setup_gui() self.change_tool(_id=1) # toggle pen self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.toggle) self.thickness.Bind(wx.EVT_COMBOBOX, self.change_thickness) pub.subscribe(self.set_colour, 'change_colour') pub.subscribe(self.set_background, 'change_background')
def __init__(self, parent, gui): scrolled.ScrolledPanel.__init__(self, parent, style=wx.VSCROLL) self.sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.sizer) self.SetScrollRate(0, 120) self.gui = gui self.thumbs = [] # ThumbButtons self.text = [] # StaticTexts self.new_thumb() # inital thumb self.thumbs[0].current = True pub.subscribe(self.highlight_current, 'thumbs.text.highlight') pub.subscribe(self.rename, 'sheet.rename') pub.subscribe(self.sheet_moved, 'sheet.move') pub.subscribe(self.update_current, 'thumbs.update_current')
def do_bindings(self): """ Performs event binding. """ logger.debug("Beginning frame event bindings") self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.on_change_tab) self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CONTEXT_MENU, self.tab_popup) self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_DROPPED, self.on_drop_tab) self.Bind(self.LOAD_DONE_EVENT, self.on_done_load) self.Bind(wx.EVT_CHAR_HOOK, self.hotkey) self.Bind(wx.EVT_CLOSE, self.on_exit) self.Bind(wx.EVT_END_PROCESS, self.on_end_process) # end pdf conversion self.menu.bindings() topics = {'shape.add': self.shape_add, 'shape.popup': self.shape_popup, 'shape.selected': self.shape_selected, 'canvas.capture_mouse': self.capture_mouse, 'canvas.change_tool': self.pubsub_change_tool, 'canvas.paste_image': self.paste_image, 'canvas.paste_text': self.paste_text, 'canvas.release_mouse': self.release_mouse, 'gui.mark_unsaved': self.mark_unsaved, 'gui.open_file': self.open_file, 'media.create_panel': self.make_media_panel, 'text.show_dialog': self.show_text_dialog} [pub.subscribe(value, key) for key, value in topics.items()] logger.debug("Setting up tool hotkeys") self.hotkeys = [x.hotkey for x in self.util.items] ac = [] if os.name == "nt": for x, item in enumerate(self.util.items): hotkey_event = lambda evt, y = x + 1, k = item.hotkey: self.on_change_tool(evt, y, key=k) _id = wx.NewId() ac.append((wx.ACCEL_NORMAL, ord(item.hotkey.upper()), _id)) self.Bind(wx.EVT_MENU, hotkey_event, id=_id) else: ac = [(wx.ACCEL_CTRL, ord(u'\t'), ID_NEXT), (wx.ACCEL_CTRL | wx.ACCEL_SHIFT, ord(u'\t'), ID_PREV) ] tbl = wx.AcceleratorTable(ac) self.SetAcceleratorTable(tbl)
def create_canvas(self): self.canvas = make_canvas() pub.subscribe(self.add, 'shape.add')
def __init__(self, gui): """ Initialise and populate the listbox """ wx.Dialog.__init__(self, gui, title=_("Shape Viewer"), size=(550, 400), style=wx.DEFAULT_DIALOG_STYLE | wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.WANTS_CHARS) self.gui = gui self.count = 0 self.shapes = list(self.gui.canvas.shapes) self.SetSizeHints(550, 400) label = wx.StaticText(self, label=_("Shapes at the top of the list are drawn over shapes at the bottom")) sizer = wx.BoxSizer(wx.VERTICAL) bsizer = wx.BoxSizer(wx.HORIZONTAL) nextprevsizer = wx.BoxSizer(wx.HORIZONTAL) self.moveUp = self.make_button(u"move-up", _("Move Shape Up"), self.on_up) self.moveTop = self.make_button(u"move-top", _("Move Shape To Top"), self.on_top) self.moveDown = self.make_button(u"move-down", _("Move Shape Down"), self.on_down) self.moveBottom = self.make_button(u"move-bottom", _("Move Shape To Bottom"), self.on_bottom) self.deleteBtn = self.make_button(u"delete", _("Delete Shape"), self.on_delete) self.prev = self.make_button(u"prev_sheet", _("Previous Sheet"), self.on_prev) self.next = self.make_button(u"next_sheet", _("Next Sheet"), self.on_next) self.pages = wx.ComboBox(self, size=(125, 25), style=wx.CB_READONLY) self.list = WhyteboardList(self) self.list.InsertColumn(0, _("Position")) self.list.InsertColumn(1, _("Type")) self.list.InsertColumn(2, _("Thickness")) self.list.InsertColumn(3, _("Color")) self.list.InsertColumn(4, _("Properties")) bsizer.AddMany([(self.moveTop, 0, wx.RIGHT, 5), (self.moveUp, 0, wx.RIGHT, 5), (self.moveDown, 0, wx.RIGHT, 5), (self.moveBottom, 0, wx.RIGHT, 5), (self.deleteBtn, 0, wx.RIGHT, 5)]) nextprevsizer.Add(self.prev, 0, wx.RIGHT, 5) nextprevsizer.Add(self.next) bsizer.Add((1, 1), 1, wx.EXPAND) # align to the right bsizer.Add(nextprevsizer, 0, wx.RIGHT, 10) bsizer.Add(self.pages, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 10) okButton = button(self, wx.ID_OK, _("&OK"), self.ok) okButton.SetDefault() cancelButton = button(self, wx.ID_CANCEL, _("&Cancel"), self.cancel) applyButton = button(self, wx.ID_APPLY, _("&Apply"), self.apply) btnSizer = wx.StdDialogButtonSizer() btnSizer.AddButton(okButton) btnSizer.AddButton(cancelButton) btnSizer.AddButton(applyButton) btnSizer.Realize() sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(label, 0, wx.ALL, 15) sizer.Add((10, 5)) sizer.Add(bsizer, 0, wx.LEFT | wx.EXPAND, 10) sizer.Add((10, 15)) sizer.Add(self.list, 1, wx.LEFT | wx.RIGHT | wx.EXPAND, 10) sizer.Add((10, 5)) sizer.Add(btnSizer, 0, wx.TOP | wx.BOTTOM | wx.ALIGN_CENTRE, 15) self.SetSizer(sizer) self.populate() self.Fit() self.SetFocus() self.SetEscapeId(cancelButton.GetId()) self.pages.Bind(wx.EVT_COMBOBOX, self.on_change_sheet) self.Bind(wx.EVT_CLOSE, self.on_close) ac = [(wx.ACCEL_NORMAL, wx.WXK_DELETE, self.deleteBtn.GetId())] tbl = wx.AcceleratorTable(ac) self.list.SetAcceleratorTable(tbl) self.Bind(wx.EVT_CHAR_HOOK, self.delete_key) pub.subscribe(self.sheet_rename, 'sheet.rename') pub.subscribe(self.update, 'update_shape_viewer') ids = [self.moveUp.GetId(), self.moveTop.GetId(), self.moveDown.GetId(), self.moveBottom.GetId(), self.deleteBtn.GetId(), self.prev.GetId(), self.next.GetId()] [self.Bind(wx.EVT_UPDATE_UI, self.update_buttons, id=x) for x in ids]