Пример #1
0
    def __init__(self, parent):
        Panel.__init__(self, parent)

        startButon = Button(self, label="Start Photobox", size=((300, 100)))

        homeSizer = BoxSizer(VERTICAL)
        homeSizer.AddStretchSpacer()
        homeSizer.Add(startButon, 0, CENTER)
        homeSizer.AddStretchSpacer()

        self.SetSizer(homeSizer)
Пример #2
0
    def layout(self):
        self.Sizer = None

        #
        # overrides AnyRow.layout
        #
        sz = BoxSizer(HORIZONTAL)
        p = self.padding
        links = self.links
        rlinks = self.right_links
        blinks = self.bottom_links

        if self.image:
            sz.AddSpacer((p.x + self.image.Width + p.x, self.row_height))

        v = BoxSizer(VERTICAL)

        topH = BoxSizer(HORIZONTAL)
        topH.AddSpacer((1, self.Parent.fonts.filename.LineHeight), 0, EXPAND)
        topH.AddStretchSpacer(1)
        if rlinks:
            topH.Add(rlinks[0], 0, EXPAND | RIGHT | ALIGN_RIGHT, p.x)

        v.Add(topH, 0, EXPAND | TOP | BOTTOM, p.y)
        v.Add(self.pbar, 0, EXPAND | RIGHT, p.x)

        bottomH = BoxSizer(HORIZONTAL)
        Add = bottomH.Add
        Add(self.details, 0, EXPAND)
        if blinks:
            for link in blinks:
                Add(link, 0, EXPAND | RIGHT, p.x)

        bottomH.AddStretchSpacer(1)
        if rlinks:
            for link in rlinks[1:]:
                Add(link, 0, EXPAND | RIGHT, p.x)

        v.Add(bottomH, 0, EXPAND | TOP | BOTTOM, p.y)
        sz.Add(v, 1)

        # apply margins
        self.Sizer = self.margins.Sizer(sz)
Пример #3
0
    def __init__(self, parent, editor_tab):
        Panel.__init__(self, parent)

        self.__editor_tab = editor_tab
        self.__cur_po_class = None

        sizer = GridBagSizer(5, 5)
        full_span = (1, 4)

        row = 0
        inner_sizer = BoxSizer(HORIZONTAL)
        self.btn_open_test_file = Button(self, label=u'Open test file')
        self.btn_open_test_file.Bind(EVT_BUTTON, self.__on_open_test_file)
        inner_sizer.Add(self.btn_open_test_file)

        self.btn_create_test_file = Button(self, label=u'Create test file')
        self.btn_create_test_file.Bind(EVT_BUTTON, self.__on_create_test_file)
        inner_sizer.Add(self.btn_create_test_file)

        self.btn_save_test_file = Button(self, label=u'Save current file')
        self.btn_save_test_file.Bind(EVT_BUTTON, self.__on_save_test_file)
        inner_sizer.Add(self.btn_save_test_file)

        inner_sizer.AddStretchSpacer(1)

        self.btn_create_test = Button(self,
                                      label=u'Create new method/test case')
        self.btn_create_test.Bind(EVT_BUTTON, self.__create_method_or_test)
        inner_sizer.Add(self.btn_create_test)
        sizer.Add(inner_sizer,
                  pos=(row, 0),
                  span=full_span,
                  flag=FLAG_ALL_AND_EXPAND)

        row += 1
        self.tabs = Tabs(self, [(Table, "Fields' table")])
        self.table = self.tabs.GetPage(0)
        self.table.Bind(EVT_GRID_SELECT_CELL, self.__on_cell_click)
        self.table.Bind(EVT_GRID_CELL_RIGHT_CLICK, self.__on_cell_click)

        sizer.Add(self.tabs,
                  pos=(row, 0),
                  span=full_span,
                  flag=FLAG_ALL_AND_EXPAND)

        sizer.AddGrowableCol(1, 1)
        sizer.AddGrowableRow(1, 1)
        self.SetSizer(sizer)
Пример #4
0
class PrefPanel(SimplePanel):
    def __init__(self,
                 parent,
                 content=None,
                 title='',
                 buttonlabel='',
                 buttoncb=None,
                 titlemaker=None,
                 prefix=''):
        SimplePanel.__init__(self, parent, wx.FULL_REPAINT_ON_RESIZE)

        sizer = self.Sizer = BoxSizer(VERTICAL)
        self.headersizer = BoxSizer(HORIZONTAL)
        self.bodysizer = BoxSizer(VERTICAL)
        sizer.Add(self.headersizer, 0, EXPAND | TOP, space_over_header)
        sizer.Add(self.bodysizer, 1, EXPAND | TOP, space_under_header)

        self.title = None
        self.combo = None
        self.button = None
        self.content = None
        self.contents = {}
        self.titlemaker = titlemaker
        if wxMac:
            self.menuitems = {}

        if title and isinstance(title, basestring):
            self.title = wx.StaticText(self,
                                       -1,
                                       ' ' + title + ' ',
                                       style=wx.ALIGN_CENTER_VERTICAL)

            #need grey backgound behind label on mac to hide the line
            if wxMac:
                self.title.BackgroundColour = wx.Color(232, 232, 232)
            self.title.Font = self.HeaderFont
            self.headersizer.Add(self.title, 0, *header_sizer_flags)

        if callable(content):
            content = self.content = content(self, prefix)
            self.bodysizer.Add(self.content, 1, pref_sizer_style, 7)
        elif isinstance(content, wx.WindowClass):
            content.Reparent(self)
            self.content = content
            self.bodysizer.Add(self.content, 1, pref_sizer_style, 7)
        elif isinstance(content, list):
            self.SetContents(content)

        if buttoncb:
            self.SetButton(buttonlabel, buttoncb)

        Bind = self.Bind
        Bind(wx.EVT_PAINT, self.OnPaint)

        #darker border if mac so it is visible for now
        if not wxMac:
            self.pen = wx.Pen(wx.Colour(213, 213, 213))
        else:
            self.pen = wx.Pen(wx.Colour(155, 155, 155))

    def SetTitle(self, title):
        self.title.SetLabel(title)

    @property
    def HeaderFont(self):
        try:
            return self._headerfont
        except AttributeError:
            if not wxMac:
                PrefPanel._headerfont = makeFont('arial 8 bold')
            else:
                PrefPanel._headerfont = makeFont('9 bold')
            return self._headerfont

    _fg_brush = \
    _bg_brush = \
    _fg_pen = \
    _bg_pen = lambda self: None

    def get_bg_brush(self):
        return self._bg_brush() or wx.WHITE_BRUSH

    def get_fg_brush(self):
        return self._fg_brush() or wx.TRANSPARENT_BRUSH

    def get_bg_pen(self):
        return self._bg_pen() or wx.TRANSPARENT_PEN

    def get_fg_pen(self):
        return self._fg_pen() or self.pen

    bg_brush = property(get_bg_brush)
    fg_brush = property(get_fg_brush)
    bg_pen = property(get_bg_pen)
    fg_pen = property(get_fg_pen)

    def OnPaint(self, event):
        size = self.Size
        dc = AutoDC(self)

        if not wxMac:
            # Non mac: white background, rounded rectangle around controls
            rect = wx.RectS(size)
            dc.Brush = self.bg_brush  #background
            dc.Pen = self.bg_pen  #background border
            dc.DrawRectangleRect(rect)
            ypos = self.headersizer.Size.height // 2 + space_over_header
            gc = wx.GraphicsContext.Create(dc)
            gc.SetBrush(self.fg_brush)  #foreground
            gc.SetPen(self.fg_pen)  #foreground
            gc.DrawRoundedRectangle(0, ypos, size.width - 1,
                                    size.height - ypos - 1, 5)
        else:
            # Mac: normal grey background, horizontal line above controls
            ypos = self.headersizer.Size.height // 2 + space_over_header + 2
            dc.Pen = self.fg_pen
            button_width = 0 if self.button is None else (
                self.button.Size.width)
            dc.DrawLine(10, ypos,
                        self.headersizer.Size.width - 10 - button_width, ypos)

        content = self.content
        if isinstance(content, AnyList):  # TODO: don't special case
            crect = wx.Rect(*content.Rect)
            crect = crect.Inflate(1, 1)
            dc.SetBrush(wx.TRANSPARENT_BRUSH)
            dc.SetPen(self.pen)
            dc.DrawRectangleRect(crect)

    def ChangeShownContent(self, *a):
        if self.content:
            self.content.Show(False)

        if wxMac:
            menu_item = self.menuitems[self.combo.GetStringSelection()]
        else:
            menu_item = self.combo.Value

        self.content = self.contents[menu_item]
        self.content.Show(True)
        self.Layout()

    def SetButton(self, label, callback):
        if self.button:
            self.headersizer.Detach(self.button)
            self.button.Destroy()

        # native button on mac instead of the vista clone button
        if not wxMac:
            self.button = UberButton(self,
                                     -1,
                                     label,
                                     skin='AppDefaults.PrefButton')
        else:
            self.button = wx.Button(self, -1, label)
            self.button.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)

        self.button.Bind(wx.EVT_BUTTON, lambda e: callback(self.button))

        self.headersizer.AddStretchSpacer(1)
        self.headersizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL | RIGHT,
                             7)

    @property
    def MenuItems(self):
        combo = self.combo
        if wxMac:
            return [combo.GetClientData(i) for i in xrange(combo.Count)]
        else:
            return combo.menu.spine.items

    def SetContents(self, content, destroyold=False):
        if destroyold:
            if not self.contents:
                self.content.Destroy()
            for content in self.contents.values():
                content.Destroy()

        # the currently showing pane in a multiple pane pref panel
        if self.content:
            self.content.Show(False)
            self.content = None

        self.bodysizer.Clear()
        contents = self.contents = {}

        titlemaker = self.titlemaker

        if self.combo is None:
            if not wxMac:
                self.combo = UberCombo(self,
                                       value='',
                                       skinkey='AppDefaults.PrefCombo',
                                       valuecallback=self.ChangeShownContent)
            else:
                # use a native ComboBox on mac
                self.combo = wx.ComboBox(self,
                                         style=wx.CB_DROPDOWN | wx.CB_READONLY)
                self.combo.Bind(wx.EVT_COMBOBOX, self.ChangeShownContent)
            newcombo = True
        else:
            self.combo.RemoveAllItems()
            newcombo = False

        for object in content:
            if isinstance(object, tuple):
                window, label = object
            elif isinstance(object, wx.WindowClass):
                window = object
                label = titlemaker(window) if titlemaker else object.Label

            window.Show(False)
            window.Reparent(self)
            assert window.Parent is self
            self.bodysizer.Add(window, 1, pref_sizer_style, 7)

            menuitem = SimpleMenuItem(label)
            contents[menuitem] = window

            if wxMac:
                itemname = menuitem.GetContentAsString()
                self.combo.Append(itemname)
                self.menuitems[itemname] = menuitem
            else:
                self.combo.AppendItem(menuitem)

        if self.combo:
            if wxMac:
                self.combo.SetSelection(0)
                self.ChangeShownContent()
            else:
                self.combo.Value = self.combo[0]

        if self.combo is not None and newcombo:
            self.headersizer.Add(self.combo, 1, *combo_sizer_flags)
Пример #5
0
    def __init__(self,parent):
        SimplePanel.__init__(self, parent, wx.FULL_REPAINT_ON_RESIZE)

        self.BackgroundColour = wx.WHITE

        self.Sizer = wx.BoxSizer(HORIZONTAL)
        sz = wx.BoxSizer(HORIZONTAL)

        self.Sizer.Add(sz,1,EXPAND|ALL,3)

        leftcol = wx.BoxSizer(VERTICAL)

        acctcombo = self.acctcombo = UberCombo(self, value='',skinkey='AppDefaults.PrefCombo')
        acctcont = PrefPanel(self,acctcombo,_('Account'))


        leftcol.Add(acctcont,0,EXPAND|ALL,3)

        buddylist = self.buddylist = ListOBuddies(self)
        self.buddies_panel = buddycont = PrefPanel(self, buddylist, _('Buddy'))
        leftcol.Add(buddycont, 1, EXPAND | TOPLESS, 3)

        style = wx.NO_BORDER | CAL_SUNDAY_FIRST | CAL_SEQUENTIAL_MONTH_SELECTION | CAL_SHOW_HOLIDAYS
        cal = self.cal = CalendarCtrl(self, -1, wx.DateTime.Now(), wx.DefaultPosition, wx.DefaultSize, style)

        cal.SetForegroundColour(wx.Color(160, 160, 160))
        cal.SetHolidayColours(wx.BLACK, wx.WHITE)
        cal.SetHeaderColours(Color(160, 160, 160), Color(239, 239, 239))

        calcont = PrefPanel(self,cal,_('Date'))
        leftcol.Add(calcont, 0, EXPAND | TOPLESS, 3)

        sz.Add(leftcol, 0, EXPAND)

        viewpanel = wx.Panel(self)

        viewer = self.viewer = PastBrowserWebkitWindow(viewpanel)
#        viewer.SetMouseWheelZooms(True)
        finder = self.finder = FindBar(viewpanel,viewer)

        menu = UMenu(viewer)
        menu.AddItem(_('Copy'),  id = wx.ID_COPY,  callback = lambda *a: viewer.Copy())

        viewer.BindWheel(self)
        viewer.BindScrollWin(self)
        viewer.Bind(wx.EVT_CONTEXT_MENU,
                    lambda e: (menu.GetItemById(wx.ID_COPY).Enable(viewer.CanCopy()),
                               menu.PopupMenu(event = e)))

        viewer.Bind(wx.EVT_KEY_DOWN,self.OnKeyDown)
        finder.TextControl.Bind(wx.EVT_KEY_DOWN,self.OnKeyDown)

        nav  = BoxSizer(wx.HORIZONTAL)

        prev = self.prev = UberButton(viewpanel, label = '<-', skin = BUTTON_SKIN)
        next = self.next = UberButton(viewpanel, label = '->', skin = BUTTON_SKIN)

        datelabel = wx.StaticText(viewpanel, -1, style = wx.ALIGN_CENTER| wx.ST_NO_AUTORESIZE)
        datelabel.SetMinSize((140, -1))


        prev.Bind(wx.EVT_BUTTON, lambda e: self.Flip(-1))
        next.Bind(wx.EVT_BUTTON, lambda e: self.Flip( 1))

        nav.AddStretchSpacer(1)
        nav.AddMany([(prev, 0, wx.EXPAND | wx.ALIGN_CENTER),
                     (datelabel, 0, wx.EXPAND | wx.ALIGN_CENTER),
                     (next, 0, wx.EXPAND | wx.ALIGN_CENTER)])
        nav.AddStretchSpacer(1)


        viewpanel.Sizer = wx.BoxSizer(wx.VERTICAL)
        viewpanel.Sizer.AddMany([ (nav,    0, EXPAND),
                                  (viewer, 1, EXPAND),
                                  (finder, 0, EXPAND) ])

        sz.Add(PrefPanel(self, viewpanel, _('Conversation Log')), 1, EXPAND | ALL, 3)

        Bind = self.Bind
        Bind(wx.EVT_PAINT, self.OnPaint)

        def OnAcct(*a):
            '''
            Handle selection of a new account from the Account drop down
            '''
            if self.GroupChatsSelected():
                from collections import defaultdict
                self.groupchats = defaultdict(list)
                for g in GetGroupChats():
                    d = g['time']
                    key = DateTimeFromDMY(d.day, d.month-1, d.year)
                    self.groupchats[key].append(g)

                #dates = sorted((g['date'], g) for g in
                self.dates = sorted(self.groupchats.keys())
                UpdateCal()
                self.buddies_panel.SetTitle(_('Chats'))
            else:
                buddylist.SetList(GetBuddies(acctcombo.Value.id), BuddyRenderer())
                OnBuddy()
                self.buddies_panel.SetTitle(_('Buddy'))

        def OnBuddy(*a):
            '''
            Handels selection of a buddy from the buddy pannel
            '''

            if not self.GroupChatsSelected():
                self.dates = GetDates(buddylist.SelectedBuddy.dir)
                UpdateCal()
            else:
                ViewLogForFile(buddylist.SelectedItem['file'], do_aliases=False)

        def UpdateCal():
            '''
            Switches the date to the last date conversed with the selected budy
            '''
            self.next.Enable(True)
            self.prev.Enable(True)
            if self.dates:
                self.cal.Date = self.dates[-1]

            self.cal.Enable(True)
            OnCalChange()

        def OnCalChange(*a):
            '''
            Update the Calendar UI to a new date
            '''
            caldate = cal.Date

            currentyear   = caldate.GetYear()
            currentmonth  = caldate.GetMonth()
            relevantdates = frozenset(date.GetDay() for date in self.dates
                                      if date.GetYear() == currentyear and
                                      date.GetMonth() == currentmonth and date.GetDay())
            SetHoliday, SetAttr = cal.SetHoliday, cal.SetAttr

            for i in xrange(1, 32):
                if i in relevantdates:
                    SetHoliday(i)
                else:
                    SetAttr(i, CalendarDateAttr(Color(160,160,160)))


            OnDayChange()

        self.OnCalChange = OnCalChange

        def ViewLogForDay(date):
            '''
            Load the log file for the specified date for the currently selected buddy
            '''
            logpath = logpath_for_date(buddylist.SelectedBuddy, date)
            ViewLogForFile(logpath)

        def ViewLogForFile(logpath, do_aliases=True):
            '''
            Update the log viewer with the file specified
            '''
            with viewer.Frozen():
                viewer.SetPageSource(logpath.text('utf-8', 'replace'), logpath.url())
                viewer.RunScript('window.scroll(0, 0);')

                if do_aliases:
                    substitue_aliases()

                import hooks
                hooks.notify('digsby.statistics.logviewer.log_viewed')

        def substitue_aliases():
            '''
            Swap out buddy names with their allies
            '''
            import gui
            with open(gui.skin.resourcedir() / 'html' / 'jquery-1.3.2.js', 'rb') as f:
                viewer.RunScript(f.read())
            buddy = buddylist.SelectedBuddy
            aliases = IAliasProvider(profile())
            import simplejson as json
            names = set(json.loads(viewer.RunScript("var foo = []; $('.buddy').each(function(){foo.push($(this).html())}); JSON.stringify(foo);")))
            for name in names:
                alias = aliases.get_alias(name, buddy.service, buddy.protocol) or name
                viewer.RunScript(SUBHTML % (json.dumps(name), json.dumps(alias)))

        def OnDayChange(*a):
            '''
            Show the log for the day selected in the clander
            '''
            date = cal.Date
            self.date = date

            datelabel.SetLabel(date.FormatDate())

            if cal.GetAttr(date.GetDay()).IsHoliday():
                if self.GroupChatsSelected():
                    chats = sorted(self.groupchats[date], key=lambda g: g['time'], reverse=True)
                    buddylist.SetList(chats, GroupChatRenderer())
                    if chats:
                        ViewLogForFile(chats[0]['file'], do_aliases=False)
                else:
                    ViewLogForDay(date)
            else:
                year  = str(date.GetYear())
                month = date.GetMonth()
                month = wx.DateTime.GetMonthName(int(month))
                day   = str(date.GetDay())

                specific_day_string = _('{month}, {day}, {year}').format(month=month, day=day, year=year)

                if self.GroupChatsSelected():
                    msg = _("There are no chat logs for {specific_day_string}.").format(specific_day_string=specific_day_string)
                else:
                    msg = _("There are no chat logs for {specific_day_string} with {name}.").format(specific_day_string=specific_day_string, name=buddylist.SelectedBuddy.name)

                viewer.SetPageSource(msg, 'file:///C:/')

            viewer.SetFocus()


            wx.CallAfter(cal.Refresh)
        self.OnDayChange = OnDayChange

        acctcombo.SetCallbacks(value = OnAcct)
        buddylist.Bind(wx.EVT_LISTBOX, OnBuddy)

        cBind = cal.Bind
        cBind(EVT_CALENDAR_YEAR, OnCalChange)
        cBind(EVT_CALENDAR_MONTH, OnCalChange)
        cBind(EVT_CALENDAR_SEL_CHANGED, OnDayChange)

        acctcombo.SetItems(MakeAccountItems(), 0)
Пример #6
0
class PasswordChangeDialog(wx.Dialog):
    def __init__(self, parent, acct, *a, **k):
        self.acct = acct
        wx.Dialog.__init__(self, parent, title=_('Change Password'), *a, **k)

        self.init_components()
        self.bind_events()
        self.layout_components()

        self.Layout()
        self.Sizer.Fit(self)

    def init_components(self):
        self.old_pw_label = wx.StaticText(self, label=_("Old Password: "******"New Password: "******"Confirm New Password: "******"Incorrect Old Password"),
                          _("Incorrect Old Password"))
        elif self.new1_password != self.new2_password:
            wx.MessageBox(_("Passwords do not match"),
                          _("Paswords do not match"))
        else:

            def success(st=None):
                print 'success!', st
                print 'setting password in', self.acct
                from common import profile
                self.acct.password = profile.crypt_pw(self.new1_password)

                for acct in profile.account_manager.accounts:
                    if acct.name == self.acct.username and acct.protocol == self.acct.protocol:
                        acct.update_info(
                            password=profile.crypt_pw(self.new1_password))
                        break

                self.EndModal(wx.ID_OK)

            def error(self, e=None):
                print 'error', e
                self.EndModal(wx.ID_OK)

            self.acct.change_password(self.new1_password,
                                      success=success,
                                      error=error)

    def Prompt(self, callback):
        #self.callback = callback
        self.ShowModal()