diff --git a/src/controller/mainController.py b/src/controller/mainController.py index 3b1fbb9e..77f33c4d 100644 --- a/src/controller/mainController.py +++ b/src/controller/mainController.py @@ -127,6 +127,7 @@ class Controller(object): widgetUtils.connect_event(self.view, widgetUtils.MENU, self.search, menuitem=self.view.menuitem_search) widgetUtils.connect_event(self.view, widgetUtils.MENU, self.list_manager, menuitem=self.view.lists) widgetUtils.connect_event(self.view, widgetUtils.MENU, self.get_trending_topics, menuitem=self.view.trends) + widgetUtils.connect_event(self.view, widgetUtils.MENU, self.find, menuitem=self.view.find) widgetUtils.connect_event(self.view, widgetUtils.MENU, self.accountConfiguration, menuitem=self.view.account_settings) widgetUtils.connect_event(self.view, widgetUtils.MENU, self.configuration, menuitem=self.view.prefs) @@ -417,6 +418,33 @@ class Controller(object): search.timer.start() dlg.Destroy() + def find(self, *args, **kwargs): + if 'string' in kwargs: + string=kwargs['string'] + else: + string='' + dlg = dialogs.find.findDialog(string) + if dlg.get_response() == widgetUtils.OK and dlg.get("string") != "": + string = dlg.get("string") + #If we still have an empty string for some reason (I.E. user clicked cancel, etc), return here. + if string == '': + log.debug("Find canceled.") + return + page = self.get_current_buffer() + if not hasattr(page.buffer, "list"): + output.speak(_(u"No session is currently in focus. Focus a session with the next or previous session shortcut."), True) + return + count = page.buffer.list.get_count() + if count < 1: + output.speak(_(u"Empty buffer."), True) + return + start = page.buffer.list.get_selected() + for i in xrange(start,count): + page.buffer.list.select_item(i) + if string.lower() in page.get_message().lower(): + return output.speak(page.get_message(), True) + output.speak(unicode(string)+unicode(" ")+_(u"not found."), True) + page.buffer.list.select_item(start) def edit_keystrokes(self, *args, **kwargs): editor = keystrokeEditor.KeystrokeEditor() if editor.changed == True: diff --git a/src/keymaps/Chicken_Nugget.keymap b/src/keymaps/Chicken_Nugget.keymap index 799bbec0..4d10524a 100644 --- a/src/keymaps/Chicken_Nugget.keymap +++ b/src/keymaps/Chicken_Nugget.keymap @@ -27,3 +27,4 @@ clear_buffer = control+win+shift+delete repeat_item = control+win+space copy_to_clipboard = control+win+shift+c search = control+win+/ +find = control+win+shift+/ diff --git a/src/keymaps/Qwitter.keymap b/src/keymaps/Qwitter.keymap index bdac3766..8825f262 100644 --- a/src/keymaps/Qwitter.keymap +++ b/src/keymaps/Qwitter.keymap @@ -40,6 +40,7 @@ remove_from_list = control+win+alt+shift+l toggle_buffer_mute = control+win+alt+m toggle_session_mute = control+win+m search = control+win+/ +find = control+win+shift+/ edit_keystrokes = control+win+k view_user_lists = win+alt+shift+l reverse_geocode = control+win+g diff --git a/src/keymaps/base.template b/src/keymaps/base.template index 1e8845a1..ff612fde 100644 --- a/src/keymaps/base.template +++ b/src/keymaps/base.template @@ -43,6 +43,7 @@ toggle_buffer_mute = string(default="control+win+shift+m") toggle_session_mute = string(default="alt+win+m") toggle_autoread = string(default="control+win+e") search = string(default="control+win+-") +find = string(default="control+win+/") edit_keystrokes = string(default="control+win+k") view_user_lists = string(default="control+win+l") get_more_items = string(default="alt+win+pageup") diff --git a/src/keystrokeEditor/constants.py b/src/keystrokeEditor/constants.py index e208f67b..bdb29429 100644 --- a/src/keystrokeEditor/constants.py +++ b/src/keystrokeEditor/constants.py @@ -38,6 +38,7 @@ actions = { "toggle_session_mute": _(u"Mute/unmute the current session"), "toggle_autoread": _(u"toggle the automatic reading of incoming tweets in the active buffer"), "search": _(u"Search on twitter"), +"find": _(u"Find a string in the currently focused buffer"), "edit_keystrokes": _(u"Show the keystroke editor"), "view_user_lists": _(u"Show lists for a specified user"), "get_more_items": _(u"load previous items"), diff --git a/src/wxUI/dialogs/__init__.py b/src/wxUI/dialogs/__init__.py index 6e018d3c..cbf0d2da 100644 --- a/src/wxUI/dialogs/__init__.py +++ b/src/wxUI/dialogs/__init__.py @@ -1 +1 @@ -import baseDialog, trends, configuration, lists, message, search, show_user, update_profile, urlList, userSelection, utils +import baseDialog, trends, configuration, lists, message, search, find, show_user, update_profile, urlList, userSelection, utils diff --git a/src/wxUI/dialogs/find.py b/src/wxUI/dialogs/find.py new file mode 100644 index 00000000..48396295 --- /dev/null +++ b/src/wxUI/dialogs/find.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +import baseDialog +import wx + +class findDialog(baseDialog.BaseWXDialog): + def __init__(self, value=""): + super(findDialog, self).__init__(None, -1) + panel = wx.Panel(self) + sizer = wx.BoxSizer(wx.VERTICAL) + self.SetTitle(_(u"Find in current buffer")) + label = wx.StaticText(panel, -1, _(u"String")) + self.string = wx.TextCtrl(panel, -1, value) + dc = wx.WindowDC(self.string) + dc.SetFont(self.string.GetFont()) + self.string.SetSize(dc.GetTextExtent("0"*40)) + sizer.Add(label, 0, wx.ALL, 5) + sizer.Add(self.string, 0, wx.ALL, 5) + ok = wx.Button(panel, wx.ID_OK, _(u"OK")) + ok.SetDefault() + cancel = wx.Button(panel, wx.ID_CANCEL, _(u"Cancel")) + btnsizer = wx.BoxSizer() + btnsizer.Add(ok, 0, wx.ALL, 5) + btnsizer.Add(cancel, 0, wx.ALL, 5) + sizer.Add(btnsizer, 0, wx.ALL, 5) + panel.SetSizer(sizer) + self.SetClientSize(sizer.CalcMin()) \ No newline at end of file diff --git a/src/wxUI/view.py b/src/wxUI/view.py index 058e3e5c..598ee33c 100644 --- a/src/wxUI/view.py +++ b/src/wxUI/view.py @@ -50,6 +50,7 @@ class mainFrame(wx.Frame): # buffer menu buffer = wx.Menu() self.trends = buffer.Append(wx.NewId(), _(u"New &trending topics buffer...")) + self.find = buffer.Append(wx.NewId(), _(u"Find a string in the currently focused buffer...")) self.load_previous_items = buffer.Append(wx.NewId(), _(u"&Load previous items")) buffer.AppendSeparator() self.mute_buffer = buffer.AppendCheckItem(wx.NewId(), _(u"&Mute"))