Basic invisible interface support

This commit is contained in:
2015-01-19 12:15:57 -06:00
parent fd70bedc05
commit 7b1f2f9482
8 changed files with 210 additions and 30 deletions

View File

@@ -25,6 +25,7 @@ class bufferController(object):
self.buffer = None
self.account = ""
self.needs_init = True
self.invisible = False # False if the buffer will be ignored on the invisible interface.
def get_event(self, ev):
if ev.GetKeyCode() == wx.WXK_RETURN and ev.ControlDown(): event = "audio"
@@ -148,6 +149,7 @@ class baseBufferController(bufferController):
self.buffer = getattr(buffers, bufferType)(parent, name)
else:
self.buffer = buffers.basePanel(parent, name)
self.invisible = True
self.name = name
self.type = self.buffer.type
self.id = self.buffer.GetId()
@@ -159,7 +161,7 @@ class baseBufferController(bufferController):
self.bind_events()
def get_message(self):
return " ".join(self.compose_function(self.get_right_tweet(), self.session.db, self.session.settings["general"]["relative_times"])[1:-2])
return " ".join(self.compose_function(self.get_right_tweet(), self.session.db, self.session.settings["general"]["relative_times"]))
def start_stream(self):
log.debug("Starting stream for buffer %s, account %s and type %s" % (self.name, self.account, self.type))
@@ -261,7 +263,7 @@ class baseBufferController(bufferController):
tweet = self.get_tweet()
if self.session.settings["general"]["relative_times"] == True:
# fix this:
original_date = arrow.get(self.session.db[self.name_buffer][self.list.get_selected()]["created_at"], "ddd MMM D H:m:s Z YYYY", locale="en")
original_date = arrow.get(self.session.db[self.name][self.buffer.list.get_selected()]["created_at"], "ddd MMM D H:m:s Z YYYY", locale="en")
ts = original_date.humanize(locale=languageHandler.getLanguage())
self.buffer.list.list.SetStringItem(self.buffer.list.get_selected(), 2, ts)
if utils.is_audio(tweet):
@@ -319,6 +321,7 @@ class eventsBufferController(bufferController):
def __init__(self, parent, name, session, account, *args, **kwargs):
super(eventsBufferController, self).__init__(parent, *args, **kwargs)
log.debug("Initializing buffer %s, account %s" % (name, account,))
self.invisible = True
self.buffer = buffers.eventsPanel(parent, name)
self.name = name
self.account = account
@@ -329,12 +332,9 @@ class eventsBufferController(bufferController):
self.type = self.buffer.type
def get_message(self):
if self.list.get_count() == 0: return _(u"Empty")
if self.buffer.list.get_count() == 0: return _(u"Empty")
# fix this:
if platform.system() == "Windows":
return "%s. %s" % (self.buffer.list.list.GetItemText(self.buffer.list.get_selected()), self.buffer.list.list.GetItemText(self.buffer.list.get_selected(), 1))
else:
return self.buffer.list.list.GetStringSelection()
return "%s. %s" % (self.buffer.list.list.GetItemText(self.buffer.list.get_selected()), self.buffer.list.list.GetItemText(self.buffer.list.get_selected(), 1))
def add_new_item(self, item):
tweet = self.compose_function(item, self.session.db["user_name"])
@@ -348,7 +348,7 @@ class peopleBufferController(baseBufferController):
super(peopleBufferController, self).__init__(parent, function, name, sessionObject, account, bufferType="peoplePanel")
log.debug("Initializing buffer %s, account %s" % (name, account,))
self.compose_function = compose.compose_followers_list
log.debug("Compose_function: self.compose_function" % (self.compose_function,))
log.debug("Compose_function: %s" % (self.compose_function,))
self.get_tweet = self.get_right_tweet
def onFocus(self, ev):
@@ -364,12 +364,12 @@ class peopleBufferController(baseBufferController):
log.debug("args: %s, kwargs: %s" % (self.args, self.kwargs))
val = self.session.get_cursored_stream(self.name, self.function, *self.args, **self.kwargs)
# self.session.order_cursored_buffer(self.name, self.session.db[self.name])
log.debug("Number of items retrieved: %d" % (val,))
# log.debug("Number of items retrieved: %d" % (val,))
self.put_items_on_list(val)
def put_items_on_list(self, number_of_items):
log.debug("The list contains %d items" % (self.buffer.list.get_count(),))
log.debug("Putting %d items on the list..." % (number_of_items,))
# log.debug("Putting %d items on the list..." % (number_of_items,))
if self.buffer.list.get_count() == 0:
for i in self.session.db[self.name]["items"]:
tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"])

View File

@@ -11,14 +11,19 @@ from mysc.thread_utils import call_threaded
from mysc.repeating_timer import RepeatingTimer
import config
import widgetUtils
import pygeocoder
from pygeolib import GeocoderError
import platform
from extra import SoundsTutorial
import logging
if platform.system() == "Windows":
import keystrokeEditor
from keyboard_handler.wx_handler import WXKeyboardHandler
log = logging.getLogger("mainController")
geocoder = pygeocoder.Geocoder()
class Controller(object):
""" Main Controller for TWBlue. It manages the main window and sessions."""
@@ -49,6 +54,18 @@ class Controller(object):
buffer = self.search_buffer(view_buffer.name, view_buffer.account)
return buffer
def get_first_buffer(self, account):
for i in self.buffers:
if i.account == account:
buff = i
break
return self.view.search(buff.name, buff.account)
def get_last_buffer(self, account):
results = []
[results.append(i) for i in self.buffers if i.account == account]
return self.view.search(results[-1].name, results[-1].account)
def bind_stream_events(self):
log.debug("Binding events for the Twitter stream API...")
pub.subscribe(self.manage_home_timelines, "item-in-home")
@@ -71,6 +88,7 @@ class Controller(object):
log.debug("Binding other application events...")
pub.subscribe(self.editing_keystroke, "editing_keystroke")
pub.subscribe(self.manage_stream_errors, "stream-error")
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.show_hide, menuitem=self.view.show_hide)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.search, menuitem=self.view.menuitem_search)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.learn_sounds, menuitem=self.view.sounds_tutorial)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.exit, menuitem=self.view.close)
@@ -82,11 +100,16 @@ class Controller(object):
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.view_item, self.view.view)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.delete, self.view.delete)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.send_dm, self.view.dm)
widgetUtils.connect_event(self.view.nb, widgetUtils.NOTEBOOK_PAGE_CHANGED, self.buffer_changed)
def __init__(self):
super(Controller, self).__init__()
self.showing = True
self.view = view.mainFrame()
self.buffers = []
self.accounts = []
self.buffer_positions = {}
self.current_account = ""
self.view.prepare()
self.bind_stream_events()
self.bind_other_events()
@@ -104,6 +127,8 @@ class Controller(object):
def create_buffers(self, session):
session.get_user_info()
self.accounts.append(session.db["user_name"])
self.buffer_positions[session.db["user_name"]] = 1
account = buffersController.accountPanel(self.view.nb, session.db["user_name"], session.db["user_name"])
self.buffers.append(account)
self.view.add_buffer(account.buffer , name=session.db["user_name"])
@@ -259,7 +284,7 @@ class Controller(object):
else:
buffer.reply()
def send_dm(self, user):
def send_dm(self, *args, **kwargs):
buffer = self.get_current_buffer()
if buffer.name == "sent_direct_messages" or buffer.name == "sent-tweets": return
else:
@@ -309,8 +334,18 @@ class Controller(object):
def remove_buffer(self):
pass
def show_hide(self):
pass
def show_hide(self, *args, **kwargs):
km = self.create_invisible_keyboard_shorcuts()
if self.showing == True:
if config.app["app-settings"]["use_invisible_keyboard_shorcuts"] == False:
self.register_invisible_keyboard_shorcuts(km)
self.view.Hide()
self.showing = False
else:
if config.app["app-settings"]["use_invisible_keyboard_shorcuts"] == False:
self.unregister_invisible_keyboard_shorcuts(km)
self.view.Show()
self.showing = True
def toggle_global_mute(self):
pass
@@ -321,8 +356,125 @@ class Controller(object):
def toggle_autoread(self):
pass
def go_conversation(self, orientation):
pass
def skip_buffer(self, forward=True):
buff = self.get_current_buffer()
if buff.invisible == False:
self.view.advance_selection(forward)
def buffer_changed(self, *args, **kwargs):
if self.get_current_buffer().account != self.current_account: self.current_account = self.get_current_buffer().account
def up(self, *args, **kwargs):
page = self.get_current_buffer()
position = page.buffer.list.get_selected()
index = position-1
try:
page.buffer.list.select_item(index)
except:
pass
if position == page.buffer.list.get_selected():
sound.player.play("limit.ogg")
try:
output.speak(page.get_message())
except:
pass
def down(self, *args, **kwargs):
page = self.get_current_buffer()
position = page.buffer.list.get_selected()
index = position+1
try:
page.buffer.list.select_item(index)
except:
pass
if position == page.buffer.list.get_selected():
sound.player.play("limit.ogg")
try:
output.speak(page.get_message())
except:
pass
def left(self, *args, **kwargs):
buff = self.view.get_current_buffer_pos()
buffer = self.get_current_buffer()
if buff == self.get_first_buffer(buffer.account) or buff == 0:
self.view.change_buffer(self.get_last_buffer(buffer.account))
else:
self.view.change_buffer(buff-1)
while self.get_current_buffer().invisible == False: self.skip_buffer(False)
buffer = self.get_current_buffer()
try:
msg = _(u"%s, %s of %s") % (self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count())
except:
msg = _(u"%s. Empty") % (self.view.get_buffer_text(),)
output.speak(msg)
def right(self, *args, **kwargs):
buff = self.view.get_current_buffer_pos()
buffer = self.get_current_buffer()
if buff == self.get_last_buffer(buffer.account) or buff+1 == self.view.get_buffer_count():
self.view.change_buffer(self.get_first_buffer(buffer.account))
else:
self.view.change_buffer(buff+1)
while self.get_current_buffer().invisible == False: self.skip_buffer(True)
buffer = self.get_current_buffer()
try:
msg = _(u"%s, %s of %s") % (self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count())
except:
msg = _(u"%s. Empty") % (self.view.get_buffer_text(),)
output.speak(msg)
def next_account(self, *args, **kwargs):
index = self.accounts.index(self.current_account)
if index+1 == len(self.accounts):
index = 0
else:
index = index+1
account = self.accounts[index]
self.current_account = account
buff = self.view.search("home_timeline", account)
self.view.change_buffer(buff)
buffer = self.get_current_buffer()
try:
msg = _(u"%s. %s, %s of %s") % (buffer.account, self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count())
except:
msg = _(u"%s. Empty") % (self.view.get_buffer_text(),)
output.speak(msg)
def previous_account(self, *args, **kwargs):
index = self.accounts.index(self.current_account)
if index-1 < 0:
index = len(self.accounts)-1
else:
index = index-1
account = self.accounts[index]
self.current_account = account
buff = self.view.search("home_timeline", account)
self.view.change_buffer(buff)
buffer = self.get_current_buffer()
try:
msg = _(u"%s. %s, %s of %s") % (buffer.account, self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count())
except:
msg = _(u"%s. Empty") % (self.view.get_buffer_text(),)
output.speak(msg)
def create_invisible_keyboard_shorcuts(self):
keymap = {}
for i in config.app["keymap"]:
if hasattr(self, i):
keymap[config.app["keymap"][i]] = getattr(self, i)
return keymap
def register_invisible_keyboard_shorcuts(self, keymap):
self.keyboard_handler = WXKeyboardHandler(self.view)
self.keyboard_handler.register_keys(keymap)
def unregister_invisible_keyboard_shorcuts(self, keymap):
try:
self.keyboard_handler.unregister_keys(keymap)
del self.keyboard_handler
except AttributeError:
pass
def notify(self, play_sound=None, message=None, notification=False):
if play_sound != None: