Beispiel #1
0
    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())
Beispiel #2
0
    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')
Beispiel #3
0
    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
Beispiel #4
0
    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')
Beispiel #5
0
    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')
Beispiel #6
0
    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')
Beispiel #7
0
    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)
Beispiel #8
0
 def create_canvas(self):
     self.canvas = make_canvas()
     pub.subscribe(self.add, 'shape.add')
Beispiel #9
0
    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]