diff --git a/src/controller/filterController.py b/src/controller/filterController.py index 3922ab31..a3869f3e 100644 --- a/src/controller/filterController.py +++ b/src/controller/filterController.py @@ -3,9 +3,10 @@ import time import widgetUtils import application from wxUI.dialogs import filterDialogs +from wxUI import commonMessageDialogs class filter(object): - def __init__(self, buffer): + def __init__(self, buffer, filter_title=None, if_word_exists=None, in_lang=None, regexp=None, word=None, in_buffer=None): self.buffer = buffer self.dialog = filterDialogs.filterDialog(languages=[i["name"] for i in application.supported_languages]) if self.dialog.get_response() == widgetUtils.OK: @@ -27,4 +28,45 @@ class filter(object): d = dict(in_buffer=self.buffer.name, word=term, regexp=regexp, in_lang=lang_option, languages=langcodes, if_word_exists=contains) filter_title = "filter_{0}".format(str(time.time())) self.buffer.session.settings["filters"][filter_title] = d - self.buffer.session.settings.write() \ No newline at end of file + self.buffer.session.settings.write() + +class filterManager(object): + + def __init__(self, session): + self.session = session + self.dialog = filterDialogs.filterManagerDialog() + self.insert_filters(self.session.settings["filters"]) + if self.dialog.filters.get_count() == 0: + self.dialog.edit.Enable(False) + self.dialog.delete.Enable(False) + else: + widgetUtils.connect_event(self.dialog.edit, widgetUtils.BUTTON_PRESSED, self.edit_filter) + widgetUtils.connect_event(self.dialog.delete, widgetUtils.BUTTON_PRESSED, self.delete_filter) + response = self.dialog.get_response() + + def insert_filters(self, filters): + self.dialog.filters.clear() + for f in filters.keys(): + # ToDo: Add titles to filters. + filterName = f + buffer = filters[f]["in_buffer"] + if filters[f]["if_word_exists"] == "True" and filters[f]["word"] != "": + filter_by_word = "True" + else: + filter_by_word = "False" + filter_by_lang = "" + if filters[f]["in_lang"] != "None": + filter_by_lang = "True" + b = [f, buffer, filter_by_word, filter_by_lang] + self.dialog.filters.insert_item(False, *b) + + def edit_filter(self, *args, **kwargs): + pass + + def delete_filter(self, *args, **kwargs): + filter_title = self.dialog.filters.get_text_column(self.dialog.filters.get_selected(), 0) + response = commonMessageDialogs.delete_filter() + if response == widgetUtils.YES: + self.session.settings["filters"].pop(filter_title) + self.session.settings.write() + self.insert_filters(self.session.settings["filters"]) \ No newline at end of file diff --git a/src/controller/mainController.py b/src/controller/mainController.py index 3a25ed6b..5fc2df76 100644 --- a/src/controller/mainController.py +++ b/src/controller/mainController.py @@ -141,6 +141,7 @@ class Controller(object): 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.filter, menuitem=self.view.filter) + widgetUtils.connect_event(self.view, widgetUtils.MENU, self.manage_filters, menuitem=self.view.manage_filters) 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) @@ -496,6 +497,10 @@ class Controller(object): return new_filter = filterController.filter(page) + def manage_filters(self, *args, **kwargs): + page = self.get_best_buffer() + manage_filters = filterController.filterManager(page.session) + def seekLeft(self, *args, **kwargs): try: sound.URLPlayer.seek(-5) diff --git a/src/wxUI/commonMessageDialogs.py b/src/wxUI/commonMessageDialogs.py index b643a3e6..318fb5a5 100644 --- a/src/wxUI/commonMessageDialogs.py +++ b/src/wxUI/commonMessageDialogs.py @@ -79,4 +79,7 @@ def blocked_timeline(): return wx.MessageDialog(None, _(u"You have been blocked from viewing someone's content. In order to avoid conflicts with the full session, TWBlue will remove the affected timeline."), _(u"Error"), wx.OK).ShowModal() def suspended_user(): - return wx.MessageDialog(None, _(u"TWBlue cannot load this timeline because the user has been suspended from Twitter."), _(u"Error"), wx.OK).ShowModal() \ No newline at end of file + return wx.MessageDialog(None, _(u"TWBlue cannot load this timeline because the user has been suspended from Twitter."), _(u"Error"), wx.OK).ShowModal() + +def delete_filter(): + return wx.MessageDialog(None, _(u"Do you really want to delete this filter?"), _(u"Attention"), style=wx.ICON_QUESTION|wx.YES_NO).ShowModal() diff --git a/src/wxUI/dialogs/filterDialogs.py b/src/wxUI/dialogs/filterDialogs.py index 81b1afbe..6cf97322 100644 --- a/src/wxUI/dialogs/filterDialogs.py +++ b/src/wxUI/dialogs/filterDialogs.py @@ -2,6 +2,7 @@ import baseDialog import wx import widgetUtils +from multiplatform_widgets import widgets class filterDialog(baseDialog.BaseWXDialog): def __init__(self, value="", languages=[]): @@ -96,3 +97,32 @@ class filterDialog(baseDialog.BaseWXDialog): def show_language_options(self, *args, **kwargs): for i in [self.cb, self.add, self.langs, self.remove]: i.Show() + +class filterManagerDialog(widgetUtils.BaseDialog): + + def __init__(self, *args, **kwargs): + super(filterManagerDialog, self).__init__(parent=None, *args, **kwargs) + self.SetTitle(_(u"Manage filters")) + panel = wx.Panel(self) + label = wx.StaticText(panel, -1, _(u"Filters")) + self.filters = widgets.list(panel, _(u"Filter"), _(u"Buffer"), _(u"Filter by word"), _(u"Filter by language"), size=(800, 800), style=wx.LC_REPORT|wx.LC_SINGLE_SEL) + self.filters.list.SetFocus() + sizer = wx.BoxSizer(wx.VERTICAL) + sizer.Add(label) + sizer.Add(self.filters.list) + self.edit = wx.Button(panel, wx.NewId(), _(u"Edit")) + self.edit.Enable(False) + self.delete = wx.Button(panel, wx.NewId(), _(u"Remove")) + self.cancel = wx.Button(panel, wx.ID_CANCEL) + btnSizer = wx.BoxSizer() + btnSizer.Add(self.edit, 0, wx.ALL, 5) + btnSizer.Add(self.delete, 0, wx.ALL, 5) + btnSizer.Add(self.cancel, 0, wx.ALL, 5) + sizer.Add(btnSizer, 0, wx.ALL, 5) + panel.SetSizer(sizer) + + def get_item(self): + return self.filters.get_selected() + + def clear(self): + self.filters.clear() diff --git a/src/wxUI/view.py b/src/wxUI/view.py index 7a63339c..9508f6c7 100644 --- a/src/wxUI/view.py +++ b/src/wxUI/view.py @@ -51,6 +51,7 @@ class mainFrame(wx.Frame): self.update_buffer = buffer.Append(wx.NewId(), _(u"&Update buffer")) self.trends = buffer.Append(wx.NewId(), _(u"New &trending topics buffer...")) self.filter = buffer.Append(wx.NewId(), _(u"Create a filter")) + self.manage_filters = buffer.Append(wx.NewId(), _(u"Manage filters")) 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()