mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2024-11-22 19:28:09 -06:00
view user info is now posible from the menu bar or control+win+shift+n
This commit is contained in:
parent
007da773c9
commit
2cc865b62c
@ -28,7 +28,7 @@ send_dm = string(default="control+win+d")
|
|||||||
add_to_favourites = string(default="alt+win+f")
|
add_to_favourites = string(default="alt+win+f")
|
||||||
remove_from_favourites = string(default="alt+shift+win+f")
|
remove_from_favourites = string(default="alt+shift+win+f")
|
||||||
follow = string(default="control+win+s")
|
follow = string(default="control+win+s")
|
||||||
details = string(default="control+win+alt+n")
|
user_details = string(default="control+win+alt+n")
|
||||||
view_item = string(default="control+win+v")
|
view_item = string(default="control+win+v")
|
||||||
exit = string(default="control+win+f4")
|
exit = string(default="control+win+f4")
|
||||||
open_timeline = string(default="control+win+i")
|
open_timeline = string(default="control+win+i")
|
||||||
|
@ -7,7 +7,7 @@ import output
|
|||||||
import config
|
import config
|
||||||
import sound
|
import sound
|
||||||
import messages
|
import messages
|
||||||
import updateProfile
|
import user
|
||||||
import languageHandler
|
import languageHandler
|
||||||
import logging
|
import logging
|
||||||
from twitter import compose, utils
|
from twitter import compose, utils
|
||||||
@ -415,6 +415,19 @@ class baseBufferController(bufferController):
|
|||||||
except TwythonError:
|
except TwythonError:
|
||||||
self.session.sound.play("error.ogg")
|
self.session.sound.play("error.ogg")
|
||||||
|
|
||||||
|
@_tweets_exist
|
||||||
|
def user_details(self):
|
||||||
|
tweet = self.get_tweet()
|
||||||
|
if self.type == "dm":
|
||||||
|
users = utils.get_all_users(tweet, self.session.db)
|
||||||
|
elif self.type == "people":
|
||||||
|
users = [tweet["screen_name"]]
|
||||||
|
else:
|
||||||
|
users = utils.get_all_users(tweet, self.session.db)
|
||||||
|
dlg = dialogs.utils.selectUserDialog(title=_(u"User details"), users=users)
|
||||||
|
if dlg.get_response() == widgetUtils.OK:
|
||||||
|
user.profileController(session=self.session, user=dlg.get_user())
|
||||||
|
|
||||||
class eventsBufferController(bufferController):
|
class eventsBufferController(bufferController):
|
||||||
def __init__(self, parent, name, session, account, *args, **kwargs):
|
def __init__(self, parent, name, session, account, *args, **kwargs):
|
||||||
super(eventsBufferController, self).__init__(parent, *args, **kwargs)
|
super(eventsBufferController, self).__init__(parent, *args, **kwargs)
|
||||||
@ -545,7 +558,7 @@ class peopleBufferController(baseBufferController):
|
|||||||
self.buffer.list.clear()
|
self.buffer.list.clear()
|
||||||
|
|
||||||
def url(self):
|
def url(self):
|
||||||
updateProfile.updateProfileController(self.session, user=self.get_right_tweet()["screen_name"])
|
user.profileController(self.session, user=self.get_right_tweet()["screen_name"])
|
||||||
|
|
||||||
class searchBufferController(baseBufferController):
|
class searchBufferController(baseBufferController):
|
||||||
def start_stream(self):
|
def start_stream(self):
|
||||||
|
@ -28,7 +28,7 @@ if platform.system() == "Windows":
|
|||||||
from keyboard_handler.wx_handler import WXKeyboardHandler
|
from keyboard_handler.wx_handler import WXKeyboardHandler
|
||||||
import userActionsController
|
import userActionsController
|
||||||
import trendingTopics
|
import trendingTopics
|
||||||
import updateProfile
|
import user
|
||||||
import webbrowser
|
import webbrowser
|
||||||
|
|
||||||
log = logging.getLogger("mainController")
|
log = logging.getLogger("mainController")
|
||||||
@ -151,6 +151,7 @@ class Controller(object):
|
|||||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.edit_keystrokes, menuitem=self.view.keystroke_editor)
|
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.edit_keystrokes, menuitem=self.view.keystroke_editor)
|
||||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.manage_accounts, self.view.manage_accounts)
|
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.manage_accounts, self.view.manage_accounts)
|
||||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.update_profile, menuitem=self.view.updateProfile)
|
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.update_profile, menuitem=self.view.updateProfile)
|
||||||
|
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.user_details, menuitem=self.view.details)
|
||||||
widgetUtils.connect_event(self.view.nb, widgetUtils.NOTEBOOK_PAGE_CHANGED, self.buffer_changed)
|
widgetUtils.connect_event(self.view.nb, widgetUtils.NOTEBOOK_PAGE_CHANGED, self.buffer_changed)
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -1073,7 +1074,13 @@ class Controller(object):
|
|||||||
session_.sessions.pop(i)
|
session_.sessions.pop(i)
|
||||||
|
|
||||||
def update_profile(self, *args, **kwargs):
|
def update_profile(self, *args, **kwargs):
|
||||||
r = updateProfile.updateProfileController(self.get_best_buffer().session)
|
r = user.profileController(self.get_best_buffer().session)
|
||||||
|
|
||||||
|
def user_details(self, *args, **kwargs):
|
||||||
|
buffer = self.get_current_buffer()
|
||||||
|
if not hasattr(buffer, "session") or buffer.session == None: return
|
||||||
|
if hasattr(buffer, "user_details"):
|
||||||
|
buffer.user_details()
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
config.app.write()
|
config.app.write()
|
@ -1,67 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
import widgetUtils
|
|
||||||
import output
|
|
||||||
from wxUI.dialogs import update_profile
|
|
||||||
from twython import TwythonError
|
|
||||||
|
|
||||||
class updateProfileController(object):
|
|
||||||
def __init__(self, session, user=None):
|
|
||||||
super(updateProfileController, self).__init__()
|
|
||||||
self.file = None
|
|
||||||
self.session = session
|
|
||||||
self.user = user
|
|
||||||
self.dialog = update_profile.updateProfileDialog()
|
|
||||||
if user == None:
|
|
||||||
self.get_data(screen_name=self.session.db["user_name"])
|
|
||||||
self.uploaded = False
|
|
||||||
widgetUtils.connect_event(self.dialog.upload_image, widgetUtils.BUTTON_PRESSED, self.upload_image)
|
|
||||||
else:
|
|
||||||
self.get_data(screen_name=self.user)
|
|
||||||
self.dialog.set_readonly()
|
|
||||||
if self.dialog.get_response() == widgetUtils.OK and self.user == None:
|
|
||||||
self.do_update()
|
|
||||||
|
|
||||||
|
|
||||||
def get_data(self, screen_name):
|
|
||||||
data = self.session.twitter.twitter.show_user(screen_name=screen_name)
|
|
||||||
self.dialog.set_name(data["name"])
|
|
||||||
if data["url"] != None:
|
|
||||||
self.dialog.set_url(data["url"])
|
|
||||||
if len(data["location"]) > 0:
|
|
||||||
self.dialog.set_location(data["location"])
|
|
||||||
if len(data["description"]) > 0:
|
|
||||||
self.dialog.set_description(data["description"])
|
|
||||||
|
|
||||||
def get_image(self):
|
|
||||||
file = self.dialog.upload_picture()
|
|
||||||
if file != None:
|
|
||||||
self.file = open(file, "rb")
|
|
||||||
self.uploaded = True
|
|
||||||
self.dialog.change_upload_button(self.uploaded)
|
|
||||||
|
|
||||||
def discard_image(self):
|
|
||||||
self.file = None
|
|
||||||
output.speak(_(u"Discarded"))
|
|
||||||
self.uploaded = False
|
|
||||||
self.dialog.change_upload_button(self.uploaded)
|
|
||||||
|
|
||||||
def upload_image(self, *args, **kwargs):
|
|
||||||
if self.uploaded == False:
|
|
||||||
self.get_image()
|
|
||||||
elif self.uploaded == True:
|
|
||||||
self.discard_image()
|
|
||||||
|
|
||||||
def do_update(self):
|
|
||||||
name = self.dialog.get("name")
|
|
||||||
description = self.dialog.get("description")
|
|
||||||
location = self.dialog.get("location")
|
|
||||||
url = self.dialog.get("url")
|
|
||||||
if self.file != None:
|
|
||||||
try:
|
|
||||||
self.session.twitter.twitter.update_profile_image(image=self.file)
|
|
||||||
except TwythonError as e:
|
|
||||||
output.speak(u"Error %s. %s" % (e.error_code, e.msg))
|
|
||||||
try:
|
|
||||||
self.session.twitter.twitter.update_profile(name=name, description=description, location=location, url=url)
|
|
||||||
except TwythonError as e:
|
|
||||||
output.speak(u"Error %s. %s" % (e.error_code, e.msg))
|
|
99
src/controller/user.py
Normal file
99
src/controller/user.py
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import webbrowser
|
||||||
|
import widgetUtils
|
||||||
|
import output
|
||||||
|
from wxUI.dialogs import update_profile, show_user
|
||||||
|
from twython import TwythonError
|
||||||
|
|
||||||
|
class profileController(object):
|
||||||
|
def __init__(self, session, user=None):
|
||||||
|
super(profileController, self).__init__()
|
||||||
|
self.file = None
|
||||||
|
self.session = session
|
||||||
|
self.user = user
|
||||||
|
if user == None:
|
||||||
|
self.dialog = update_profile.updateProfileDialog()
|
||||||
|
self.get_data(screen_name=self.session.db["user_name"])
|
||||||
|
self.fill_profile_fields()
|
||||||
|
self.uploaded = False
|
||||||
|
widgetUtils.connect_event(self.dialog.upload_image, widgetUtils.BUTTON_PRESSED, self.upload_image)
|
||||||
|
else:
|
||||||
|
self.dialog = show_user.showUserProfile()
|
||||||
|
self.get_data(screen_name=self.user)
|
||||||
|
string = self.get_user_info()
|
||||||
|
self.dialog.set("text", string)
|
||||||
|
self.dialog.set_title(_(u"Information for %s") % (self.data["screen_name"]))
|
||||||
|
if self.data["url"] != None:
|
||||||
|
self.dialog.enable_url()
|
||||||
|
widgetUtils.connect_event(self.dialog.url, widgetUtils.BUTTON_PRESSED, self.visit_url)
|
||||||
|
if self.dialog.get_response() == widgetUtils.OK and self.user == None:
|
||||||
|
self.do_update()
|
||||||
|
|
||||||
|
def get_data(self, screen_name):
|
||||||
|
self.data = self.session.twitter.twitter.show_user(screen_name=screen_name)
|
||||||
|
|
||||||
|
def fill_profile_fields(self):
|
||||||
|
self.dialog.set_name(self.data["name"])
|
||||||
|
if self.data["url"] != None:
|
||||||
|
self.dialog.set_url(self.data["url"])
|
||||||
|
if len(self.data["location"]) > 0:
|
||||||
|
self.dialog.set_location(self.data["location"])
|
||||||
|
if len(self.data["description"]) > 0:
|
||||||
|
self.dialog.set_description(self.data["description"])
|
||||||
|
|
||||||
|
def get_image(self):
|
||||||
|
file = self.dialog.upload_picture()
|
||||||
|
if file != None:
|
||||||
|
self.file = open(file, "rb")
|
||||||
|
self.uploaded = True
|
||||||
|
self.dialog.change_upload_button(self.uploaded)
|
||||||
|
|
||||||
|
def discard_image(self):
|
||||||
|
self.file = None
|
||||||
|
output.speak(_(u"Discarded"))
|
||||||
|
self.uploaded = False
|
||||||
|
self.dialog.change_upload_button(self.uploaded)
|
||||||
|
|
||||||
|
def upload_image(self, *args, **kwargs):
|
||||||
|
if self.uploaded == False:
|
||||||
|
self.get_image()
|
||||||
|
elif self.uploaded == True:
|
||||||
|
self.discard_image()
|
||||||
|
|
||||||
|
def do_update(self):
|
||||||
|
if self.user != None: return
|
||||||
|
name = self.dialog.get("name")
|
||||||
|
description = self.dialog.get("description")
|
||||||
|
location = self.dialog.get("location")
|
||||||
|
url = self.dialog.get("url")
|
||||||
|
if self.file != None:
|
||||||
|
try:
|
||||||
|
self.session.twitter.twitter.update_profile_image(image=self.file)
|
||||||
|
except TwythonError as e:
|
||||||
|
output.speak(u"Error %s. %s" % (e.error_code, e.msg))
|
||||||
|
try:
|
||||||
|
self.session.twitter.twitter.update_profile(name=name, description=description, location=location, url=url)
|
||||||
|
except TwythonError as e:
|
||||||
|
output.speak(u"Error %s. %s" % (e.error_code, e.msg))
|
||||||
|
|
||||||
|
def get_user_info(self):
|
||||||
|
|
||||||
|
string = u""
|
||||||
|
string = string + _(u"Username: @%s\n") % (self.data["screen_name"])
|
||||||
|
string = string + _(u"Name: %s\n") % (self.data["name"])
|
||||||
|
if self.data["location"] != "":
|
||||||
|
string = string + _(u"Location: %s\n") % (self.data["location"])
|
||||||
|
if self.data["url"] != None:
|
||||||
|
string = string+ _(u"URL: %s\n") % (self.data["url"])
|
||||||
|
if self.data["description"] != "":
|
||||||
|
string = string+ _(u"Bio: %s\n") % (self.data["description"])
|
||||||
|
if self.data["protected"] == True: protected = _(u"Yes")
|
||||||
|
else: protected = _(u"No")
|
||||||
|
string = string+ _(u"Protected: %s\n") % (protected)
|
||||||
|
string = string+_(u"Followers: %s\n Friends: %s\n") % (self.data["followers_count"], self.data["friends_count"])
|
||||||
|
string = string+ _(u"Tweets: %s\n") % (self.data["statuses_count"])
|
||||||
|
string = string+ _(u"Favourites: %s") % (self.data["favourites_count"])
|
||||||
|
return string
|
||||||
|
|
||||||
|
def visit_url(self, *args, **kwargs):
|
||||||
|
webbrowser.open_new_tab(self.data["url"])
|
@ -17,7 +17,7 @@ actions = {
|
|||||||
"add_to_favourites": _(u"Mark as favourite"),
|
"add_to_favourites": _(u"Mark as favourite"),
|
||||||
"remove_from_favourites": _(u"Remove from favourites"),
|
"remove_from_favourites": _(u"Remove from favourites"),
|
||||||
"follow": _(u"Open the actions dialogue"),
|
"follow": _(u"Open the actions dialogue"),
|
||||||
"details": _(u"See user details"),
|
"user_details": _(u"See user details"),
|
||||||
"view_item": _(u"Show tweet"),
|
"view_item": _(u"Show tweet"),
|
||||||
"exit": _(u"Quit"),
|
"exit": _(u"Quit"),
|
||||||
"open_timeline": _(u"Open user timeline"),
|
"open_timeline": _(u"Open user timeline"),
|
||||||
|
@ -1 +1 @@
|
|||||||
import baseDialog, trends, configuration, lists, message, search, show_user, update_profile, urlList, userSelection
|
import baseDialog, trends, configuration, lists, message, search, show_user, update_profile, urlList, userSelection, utils
|
||||||
|
@ -23,3 +23,6 @@ class BaseWXDialog(wx.Dialog):
|
|||||||
elif hasattr(control, "ChangeValue"): return getattr(control, "ChangeValue")(text)
|
elif hasattr(control, "ChangeValue"): return getattr(control, "ChangeValue")(text)
|
||||||
else: return -1
|
else: return -1
|
||||||
else: return 0
|
else: return 0
|
||||||
|
|
||||||
|
def set_title(self, title):
|
||||||
|
self.SetTitle(title)
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import wx
|
import wx
|
||||||
|
import baseDialog
|
||||||
|
|
||||||
class showUserProfile(wx.Dialog):
|
class showUserProfile(baseDialog.BaseWXDialog):
|
||||||
def __init__(self, screen_name):
|
def __init__(self):
|
||||||
super(showUserProfile, self).__init__(self, None, -1)
|
super(showUserProfile, self).__init__(parent=None, id=wx.NewId())
|
||||||
self.SetTitle(_(u"Information for %s") % (screen_name))
|
|
||||||
panel = wx.Panel(self)
|
panel = wx.Panel(self)
|
||||||
sizer = wx.BoxSizer(wx.VERTICAL)
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
static = wx.StaticText(panel, -1, _(u"Details"))
|
static = wx.StaticText(panel, -1, _(u"Details"))
|
||||||
sizer.Add(static, 0, wx.ALL, 5)
|
sizer.Add(static, 0, wx.ALL, 5)
|
||||||
text = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE|wx.TE_READONLY)
|
self.text = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE|wx.TE_READONLY, size=(350, 250))
|
||||||
text.SetFocus()
|
self.text.SetFocus()
|
||||||
sizer.Add(text, 0, wx.ALL|wx.EXPAND, 5)
|
sizer.Add(self.text, 0, wx.ALL|wx.EXPAND, 5)
|
||||||
self.url = wx.Button(panel, -1, _(u"Go to URL"), size=wx.DefaultSize)
|
self.url = wx.Button(panel, -1, _(u"Go to URL"), size=wx.DefaultSize)
|
||||||
self.url.Disable()
|
self.url.Disable()
|
||||||
close = wx.Button(panel, wx.ID_CANCEL, _(u"Close"))
|
close = wx.Button(panel, wx.ID_CANCEL, _(u"Close"))
|
||||||
@ -19,10 +19,8 @@ class showUserProfile(wx.Dialog):
|
|||||||
btnSizer.Add(self.url, 0, wx.ALL, 5)
|
btnSizer.Add(self.url, 0, wx.ALL, 5)
|
||||||
btnSizer.Add(close, 0, wx.ALL, 5)
|
btnSizer.Add(close, 0, wx.ALL, 5)
|
||||||
sizer.Add(btnSizer, 0, wx.ALL, 5)
|
sizer.Add(btnSizer, 0, wx.ALL, 5)
|
||||||
text.ChangeValue(self.compose_string())
|
|
||||||
text.SetSize(text.GetBestSize())
|
|
||||||
panel.SetSizer(sizer)
|
panel.SetSizer(sizer)
|
||||||
self.SetClientSize(sizer.CalcMin())
|
self.SetClientSize(sizer.CalcMin())
|
||||||
|
|
||||||
def get_response(self):
|
def enable_url(self, enabled=True):
|
||||||
return self.ShowModal()
|
self.url.Enable(enabled)
|
46
src/wxUI/dialogs/utils.py
Normal file
46
src/wxUI/dialogs/utils.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
############################################################
|
||||||
|
# Copyright (c) 2013, 2014 Manuel Eduardo Cortéz Vallejo <manuel@manuelcortez.net>
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
############################################################
|
||||||
|
import wx
|
||||||
|
import baseDialog
|
||||||
|
|
||||||
|
class selectUserDialog(baseDialog.BaseWXDialog):
|
||||||
|
def __init__(self, title, users):
|
||||||
|
super(selectUserDialog, self).__init__(parent=None, id=wx.NewId(), title=title)
|
||||||
|
panel = wx.Panel(self)
|
||||||
|
userSizer = wx.BoxSizer()
|
||||||
|
self.cb = wx.ComboBox(panel, -1, choices=users, value=users[0], size=wx.DefaultSize)
|
||||||
|
self.cb.SetFocus()
|
||||||
|
userSizer.Add(wx.StaticText(panel, -1, _(u"User")), 0, wx.ALL, 5)
|
||||||
|
userSizer.Add(self.cb)
|
||||||
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
ok = wx.Button(panel, wx.ID_OK, _(u"OK"))
|
||||||
|
ok.SetDefault()
|
||||||
|
# ok.Bind(wx.EVT_BUTTON, self.onok)
|
||||||
|
cancel = wx.Button(panel, wx.ID_CANCEL, _(u"Close"))
|
||||||
|
btnsizer = wx.BoxSizer()
|
||||||
|
btnsizer.Add(ok, 0, wx.ALL, 5)
|
||||||
|
btnsizer.Add(cancel, 0, wx.ALL, 5)
|
||||||
|
sizer.Add(userSizer, 0, wx.ALL, 5)
|
||||||
|
sizer.Add(btnsizer, 0, wx.ALL, 5)
|
||||||
|
panel.SetSizer(sizer)
|
||||||
|
self.SetClientSize(sizer.CalcMin())
|
||||||
|
|
||||||
|
def get_user(self):
|
||||||
|
return self.cb.GetValue()
|
||||||
|
|
@ -18,7 +18,7 @@ class mainFrame(wx.Frame):
|
|||||||
self.menuitem_search = app.Append(wx.NewId(), _(u"&Search"))
|
self.menuitem_search = app.Append(wx.NewId(), _(u"&Search"))
|
||||||
self.trends = app.Append(wx.NewId(), _(u"View &trending topics"))
|
self.trends = app.Append(wx.NewId(), _(u"View &trending topics"))
|
||||||
self.lists = app.Append(wx.NewId(), _(u"&Lists manager"))
|
self.lists = app.Append(wx.NewId(), _(u"&Lists manager"))
|
||||||
self.lists.Enable(True)
|
self.lists.Enable(False)
|
||||||
self.sounds_tutorial = app.Append(wx.NewId(), _(u"Sounds &tutorial"))
|
self.sounds_tutorial = app.Append(wx.NewId(), _(u"Sounds &tutorial"))
|
||||||
self.keystroke_editor = app.Append(wx.NewId(), _(u"&Edit keystrokes"))
|
self.keystroke_editor = app.Append(wx.NewId(), _(u"&Edit keystrokes"))
|
||||||
self.account_settings = app.Append(wx.NewId(), _(u"Account se&ttings"))
|
self.account_settings = app.Append(wx.NewId(), _(u"Account se&ttings"))
|
||||||
@ -53,7 +53,6 @@ class mainFrame(wx.Frame):
|
|||||||
self.viewLists = user.Append(wx.NewId(), _(u"&View lists"))
|
self.viewLists = user.Append(wx.NewId(), _(u"&View lists"))
|
||||||
self.viewLists.Enable(False)
|
self.viewLists.Enable(False)
|
||||||
self.details = user.Append(wx.NewId(), _(u"Show user &profile"))
|
self.details = user.Append(wx.NewId(), _(u"Show user &profile"))
|
||||||
self.details.Enable(False)
|
|
||||||
self.timeline = user.Append(wx.NewId(), _(u"&Timeline"))
|
self.timeline = user.Append(wx.NewId(), _(u"&Timeline"))
|
||||||
self.timeline.Enable(False)
|
self.timeline.Enable(False)
|
||||||
self.favs = user.Append(wx.NewId(), _(u"V&iew favourites"))
|
self.favs = user.Append(wx.NewId(), _(u"V&iew favourites"))
|
||||||
|
Loading…
Reference in New Issue
Block a user