def __init__(self, options, parent, id, title, plugin=None, **kwds):
        self.plugin = plugin
        self.modified = False
        self.options = options
        args = (parent, id, title)
        # begin wxGlade: EditorFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.profile_book = wx.Notebook(self, -1, style=0)
        
        # Menu Bar
        self.profile_menu = wx.MenuBar()
        self.SetMenuBar(self.profile_menu)
        self.profile_item = wx.Menu()
        self.activate_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Online\tCtrl+O"), _("Allow users seeing profile"), wx.ITEM_CHECK)
        self.profile_item.AppendItem(self.activate_item)
        self.filters_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Filters...\tCtrl+F"), _("Create active filters to get notified on peers approach"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.filters_item)
        self.profile_item.AppendSeparator()
        self.export_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Export HTML ...\tCtrl+E"), _("Write profile as HTML File"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.export_item)
        self.save_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Save\tCtrl+S"), _("Save profile into file"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.save_item)
        self.quit_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Close\tCtrl+W"), _("Close profile management"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.quit_item)
        self.profile_menu.Append(self.profile_item, _("Action"))
        self.help_menu = wx.Menu()
        self.about_item = wx.MenuItem(self.help_menu, wx.NewId(), _("About...\tCtrl+?"), "", wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.about_item)
        self.preview_item = wx.MenuItem(self.help_menu, wx.NewId(), _("Preview...\tCtrl+P"), "", wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.preview_item)
        self.profile_menu.Append(self.help_menu, _("Info"))
        # Menu Bar end
        self.profile_statusbar = self.CreateStatusBar(1, 0)
        self.personal_tab = PersonalPanel(self.profile_book, -1)
        self.blog_tab = BlogPanel(self.profile_book, -1)
        self.file_tab = FilePanel(self.profile_book, -1)

        self.__set_properties()
        self.__do_layout()
        # end wxGlade
        
        if self.options["standalone"]:
            #put here special initialisation for standalone editor
            pass

        self.profile_dlg = ProfileDialog(parent, -1, plugin=self.plugin)
        # events
        self.bind_controls()
        # disclaimer
        if not skip_disclaimer():
            self.on_about(None)
    def __init__(self, options, parent, id, title, plugin=None, **kwds):
        self.plugin = plugin
        self.modified = False
        self.options = options
        args = (parent, id, title)
        # begin wxGlade: FilterFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.filter_book = wx.Notebook(self, -1, style=0)
        
        # Menu Bar
        self.filter_menu = wx.MenuBar()
        self.SetMenuBar(self.filter_menu)
        self.profile_item = wx.Menu()
        self.activate_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Activated\tCtrl+A"), _("Switch filters on/off"), wx.ITEM_CHECK)
        self.profile_item.AppendItem(self.activate_item)
        self.profile_item.AppendSeparator()
        self.save_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Save\tCtrl+S"), _("Save profile into file"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.save_item)
        self.quit_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Close\tCtrl+W"), _("Close profile management"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.quit_item)
        self.filter_menu.Append(self.profile_item, _("Action"))
        self.help_menu = wx.Menu()
        self.help_item = wx.MenuItem(self.help_menu, wx.NewId(), _("Help...\tCtrl+H"), _("Display information about regular expressions"), wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.help_item)
        self.help_menu.AppendSeparator()
        self.about_item = wx.MenuItem(self.help_menu, wx.NewId(), _("About...\tCtrl+?"), "", wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.about_item)
        self.filter_menu.Append(self.help_menu, _("Info"))
        # Menu Bar end
        self.filter_statusbar = self.CreateStatusBar(1, 0)
        self.personal_filter_tab = PersonalFilterPanel(self.filter_book, -1)
        self.file_filter_tab = FileFilterPanel(self.filter_book, -1)

        self.__set_properties()
        self.__do_layout()
        # end wxGlade
        
        # quite different initialisation according to launched by navigator or not
        if self.options["standalone"]:
            self.import_item = wx.MenuItem(self.profile_item, wx.NewId(), _("Import...\tCtrl+I"), _("Load & Match a profile and add it in contact list"), wx.ITEM_NORMAL)
            self.profile_item.AppendItem(self.import_item)
        # events
        self.match_frame = UIProxy(MatchFrame(options, parent, -1, plugin=self.plugin))
        self.help_dialog = ProfileDialog(parent, -1)
        self.help_dialog.profile_window.SetPage(open(REGEX_HTML()).read())
        self.help_dialog.SetTitle(_("Using regular expressions"))
        self.bind_controls()
    def __init__(self, options, parent, id, title, plugin=None, **kwds):
        self.plugin = plugin
        self.modified = False
        self.options = options
        args = (parent, id, title)
        # begin wxGlade: EditorFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.profile_book = wx.Notebook(self, -1, style=0)
        
        # Menu Bar
        self.profile_menu = wx.MenuBar()
        self.SetMenuBar(self.profile_menu)
        self.profile_item = wx.Menu()
        self.activate_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Online\tCtrl+O"), _("Allow users seeing profile"), wx.ITEM_CHECK)
        self.profile_item.AppendItem(self.activate_item)
        self.profile_item.AppendSeparator()
        self.export_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Export HTML ...\tCtrl+E"), _("Write profile as HTML File"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.export_item)
        self.save_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Save\tCtrl+S"), _("Save profile into file"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.save_item)
        self.quit_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Close\tCtrl+W"), _("Close profile management"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.quit_item)
        self.profile_menu.Append(self.profile_item, _("Action"))
        self.files_menu = wx.Menu()
        self.add_item = wx.MenuItem(self.files_menu, wx.NewId(), _("&Add directory...\tCtrl+A"), "", wx.ITEM_NORMAL)
        self.files_menu.AppendItem(self.add_item)
        self.del_item = wx.MenuItem(self.files_menu, wx.NewId(), _("&Remove directory...\tCtrl+R"), "", wx.ITEM_NORMAL)
        self.files_menu.AppendItem(self.del_item)
        self.files_menu.AppendSeparator()
        self.share_item = wx.MenuItem(self.files_menu, wx.NewId(), _("Share"), "", wx.ITEM_NORMAL)
        self.files_menu.AppendItem(self.share_item)
        self.unshare_item = wx.MenuItem(self.files_menu, wx.NewId(), _("Unshare"), "", wx.ITEM_NORMAL)
        self.files_menu.AppendItem(self.unshare_item)
        self.profile_menu.Append(self.files_menu, _("Files"))
        self.help_menu = wx.Menu()
        self.preview_item = wx.MenuItem(self.help_menu, wx.NewId(), _("&Profile...\tCtrl+P"), _("Preview your profile"), wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.preview_item)
        self.shared_item = wx.MenuItem(self.help_menu, wx.NewId(), _("S&hared Files...\tCtrl+H"), _("Preview your shared files"), wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.shared_item)
        self.help_menu.AppendSeparator()
        self.about_item = wx.MenuItem(self.help_menu, wx.NewId(), _("About...\tCtrl+?"), "", wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.about_item)
        self.profile_menu.Append(self.help_menu, _("Info"))
        # Menu Bar end
        self.profile_statusbar = self.CreateStatusBar(1, 0)
        self.personal_tab = PersonalPanel(self.profile_book, -1)
        self.blog_tab = BlogPanel(self.profile_book, -1)
        self.file_tab = FilePanel(self.profile_book, -1)

        self.__set_properties()
        self.__do_layout()
        # end wxGlade
        
        if self.options["standalone"]:
            #put here special initialisation for standalone editor
            pass
        self.profile_dlg = ProfileDialog(parent, -1, plugin=self.plugin)
        self.download_dlg = UIProxy(DownloadDialog(get_prefs().get("display_dl"), parent, -1))
        # events
        self.bind_controls()
        # disclaimer
        if get_prefs().get("disclaimer"):
            self.on_about(None)
class EditorFrame(wx.Frame):
    """Frame where profile is edited"""
    
    def __init__(self, options, parent, id, title, plugin=None, **kwds):
        self.plugin = plugin
        self.modified = False
        self.options = options
        args = (parent, id, title)
        # begin wxGlade: EditorFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.profile_book = wx.Notebook(self, -1, style=0)
        
        # Menu Bar
        self.profile_menu = wx.MenuBar()
        self.SetMenuBar(self.profile_menu)
        self.profile_item = wx.Menu()
        self.activate_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Online\tCtrl+O"), _("Allow users seeing profile"), wx.ITEM_CHECK)
        self.profile_item.AppendItem(self.activate_item)
        self.profile_item.AppendSeparator()
        self.export_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Export HTML ...\tCtrl+E"), _("Write profile as HTML File"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.export_item)
        self.save_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Save\tCtrl+S"), _("Save profile into file"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.save_item)
        self.quit_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Close\tCtrl+W"), _("Close profile management"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.quit_item)
        self.profile_menu.Append(self.profile_item, _("Action"))
        self.files_menu = wx.Menu()
        self.add_item = wx.MenuItem(self.files_menu, wx.NewId(), _("&Add directory...\tCtrl+A"), "", wx.ITEM_NORMAL)
        self.files_menu.AppendItem(self.add_item)
        self.del_item = wx.MenuItem(self.files_menu, wx.NewId(), _("&Remove directory...\tCtrl+R"), "", wx.ITEM_NORMAL)
        self.files_menu.AppendItem(self.del_item)
        self.files_menu.AppendSeparator()
        self.share_item = wx.MenuItem(self.files_menu, wx.NewId(), _("Share"), "", wx.ITEM_NORMAL)
        self.files_menu.AppendItem(self.share_item)
        self.unshare_item = wx.MenuItem(self.files_menu, wx.NewId(), _("Unshare"), "", wx.ITEM_NORMAL)
        self.files_menu.AppendItem(self.unshare_item)
        self.profile_menu.Append(self.files_menu, _("Files"))
        self.help_menu = wx.Menu()
        self.preview_item = wx.MenuItem(self.help_menu, wx.NewId(), _("&Profile...\tCtrl+P"), _("Preview your profile"), wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.preview_item)
        self.shared_item = wx.MenuItem(self.help_menu, wx.NewId(), _("S&hared Files...\tCtrl+H"), _("Preview your shared files"), wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.shared_item)
        self.help_menu.AppendSeparator()
        self.about_item = wx.MenuItem(self.help_menu, wx.NewId(), _("About...\tCtrl+?"), "", wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.about_item)
        self.profile_menu.Append(self.help_menu, _("Info"))
        # Menu Bar end
        self.profile_statusbar = self.CreateStatusBar(1, 0)
        self.personal_tab = PersonalPanel(self.profile_book, -1)
        self.blog_tab = BlogPanel(self.profile_book, -1)
        self.file_tab = FilePanel(self.profile_book, -1)

        self.__set_properties()
        self.__do_layout()
        # end wxGlade
        
        if self.options["standalone"]:
            #put here special initialisation for standalone editor
            pass
        self.profile_dlg = ProfileDialog(parent, -1, plugin=self.plugin)
        self.download_dlg = UIProxy(DownloadDialog(get_prefs().get("display_dl"), parent, -1))
        # events
        self.bind_controls()
        # disclaimer
        if get_prefs().get("disclaimer"):
            self.on_about(None)

    def on_change_facade(self):
        """update facade"""
        self.personal_tab.on_change_facade()
        self.blog_tab.on_change_facade()
        self.file_tab.on_change_facade()
        self.profile_dlg.on_change_facade(auto_refresh=True)
        
    # EVENTS
    
    def bind_controls(self):
        """bind all controls with facade"""
        # action
        self.Bind(wx.EVT_MENU, self.on_activate, id=self.activate_item.GetId())
        self.Bind(wx.EVT_MENU, self.on_export, id=self.export_item.GetId())
        self.Bind(wx.EVT_MENU, self.on_save, id=self.save_item.GetId())
        self.Bind(wx.EVT_MENU, self.on_close, id=self.quit_item.GetId())
        self.Bind(wx.EVT_CLOSE, self.on_close)
        # Files
        self.Bind(wx.EVT_MENU, self.file_tab.on_browse, id=self.add_item.GetId())
        self.Bind(wx.EVT_MENU, self.file_tab.on_remove, id=self.del_item.GetId())
        self.Bind(wx.EVT_MENU, self.file_tab.on_share, id=self.share_item.GetId())
        self.Bind(wx.EVT_MENU, self.file_tab.on_unshare, id=self.unshare_item.GetId())
        # about
        self.Bind(wx.EVT_MENU, self.on_display_profile, id=self.preview_item.GetId())
        self.Bind(wx.EVT_MENU, self.file_tab.on_preview, id=self.shared_item.GetId())
        self.Bind(wx.EVT_MENU, self.on_about,id=self.about_item.GetId())
        if self.options["standalone"]:
            #put here special initialisation for standalone editor
            pass

    def on_activate(self, evt):
        """activate service"""
        print self.activate_item.IsChecked() and "Activating..." \
              or "Disactivated"
        active = self.activate_item.IsChecked()
        get_facade().activate(active)
        
    def on_save(self, evt):
        """save .prf"""
        get_facade().save()
        self.do_modified(False)
        
    def on_export(self, evt):
        """export .html"""
        dlg = wx.FileDialog(
            self, message="Export HTML file as ...",
            defaultDir=PROFILE_DIR,
            defaultFile="%s.html"% get_facade().get_pseudo(),
            wildcard="HTML File (*.html)|*.html",
            style=wx.SAVE)
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()
            get_facade().export_profile(path)
        
    def on_close(self, evt=None):
        """hide  application"""
        # ask for saving
        if self.modified:
            self.do_modified(False)
            dlg = wx.MessageDialog(
                self,
                'Your profile has been modified. Do you want to change it?',
                'Saving Dialog',
                wx.YES_NO | wx.ICON_INFORMATION)
            if dlg.ShowModal() == wx.ID_YES:
                self.on_save(evt)
        # save size
        new_size = self.GetSize()
        get_prefs().set("profile_width", new_size.GetWidth())
        get_prefs().set("profile_height", new_size.GetHeight())
        # close dialog
        if self.options["standalone"]:
            self.profile_dlg.Destroy()
            self.Destroy()
            self.options['App'].ExitMainLoop()
        else:
            self.Hide()

    def on_about(self, evt):
        """display about"""
        # not modal because would freeze the wx thread while twisted
        # one goes on and initialize profile
        about_dlg = AboutDialog(get_prefs().get("disclaimer"), self, -1)
        about_dlg.Show()

    def on_display_profile(self, evt):
        """display blog in dedicated window"""
        self.profile_dlg.activate()
        self.profile_dlg.Show(get_facade()._desc)

    def do_modified(self, modified):
        """change state according to modified"""
        self.modified = modified
        if self.modified:
            self.save_item.Enable(True)
        else:
            self.save_item.Enable(False)
            
    def __set_properties(self):
        """generated by SetTitle"""
        # begin wxGlade: EditorFrame.__set_properties
        self.SetTitle(_("Profile Editor"))
        self.SetSize((460, 600))
        self.profile_statusbar.SetStatusWidths([-1])
        # statusbar fields
        profile_statusbar_fields = [_("status")]
        for i in range(len(profile_statusbar_fields)):
            self.profile_statusbar.SetStatusText(profile_statusbar_fields[i], i)
        # end wxGlade
        # set previous size
        width = get_prefs().get("profile_width")
        height = get_prefs().get("profile_height")
        self.SetSize((width, height))
        self.do_modified(False)
        self.activate_item.Check()
        # should be passed through constructor but wxglade does not allow it
        self.personal_tab.do_modified = self.do_modified
        self.blog_tab.do_modified = self.do_modified
        self.file_tab.do_modified = self.do_modified

    def __do_layout(self):
        """generated by SetTitle"""
        # begin wxGlade: EditorFrame.__do_layout
        frame_sizer = wx.BoxSizer(wx.VERTICAL)
        self.profile_book.AddPage(self.personal_tab, _("Personal"))
        self.profile_book.AddPage(self.blog_tab, _("Blog"))
        self.profile_book.AddPage(self.file_tab, _("Files"))
        frame_sizer.Add(self.profile_book, 1, wx.EXPAND, 0)
        self.SetAutoLayout(True)
        self.SetSizer(frame_sizer)
        self.Layout()
        self.Centre()
class FilterFrame(wx.Frame):
    def __init__(self, options, parent, id, title, plugin=None, **kwds):
        self.plugin = plugin
        self.modified = False
        self.options = options
        args = (parent, id, title)
        # begin wxGlade: FilterFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.filter_book = wx.Notebook(self, -1, style=0)
        
        # Menu Bar
        self.filter_menu = wx.MenuBar()
        self.SetMenuBar(self.filter_menu)
        self.profile_item = wx.Menu()
        self.activate_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Activated\tCtrl+A"), _("Switch filters on/off"), wx.ITEM_CHECK)
        self.profile_item.AppendItem(self.activate_item)
        self.profile_item.AppendSeparator()
        self.save_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Save\tCtrl+S"), _("Save profile into file"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.save_item)
        self.quit_item = wx.MenuItem(self.profile_item, wx.NewId(), _("&Close\tCtrl+W"), _("Close profile management"), wx.ITEM_NORMAL)
        self.profile_item.AppendItem(self.quit_item)
        self.filter_menu.Append(self.profile_item, _("Action"))
        self.help_menu = wx.Menu()
        self.help_item = wx.MenuItem(self.help_menu, wx.NewId(), _("Help...\tCtrl+H"), _("Display information about regular expressions"), wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.help_item)
        self.help_menu.AppendSeparator()
        self.about_item = wx.MenuItem(self.help_menu, wx.NewId(), _("About...\tCtrl+?"), "", wx.ITEM_NORMAL)
        self.help_menu.AppendItem(self.about_item)
        self.filter_menu.Append(self.help_menu, _("Info"))
        # Menu Bar end
        self.filter_statusbar = self.CreateStatusBar(1, 0)
        self.personal_filter_tab = PersonalFilterPanel(self.filter_book, -1)
        self.file_filter_tab = FileFilterPanel(self.filter_book, -1)

        self.__set_properties()
        self.__do_layout()
        # end wxGlade
        
        # quite different initialisation according to launched by navigator or not
        if self.options["standalone"]:
            self.import_item = wx.MenuItem(self.profile_item, wx.NewId(), _("Import...\tCtrl+I"), _("Load & Match a profile and add it in contact list"), wx.ITEM_NORMAL)
            self.profile_item.AppendItem(self.import_item)
        # events
        self.match_frame = UIProxy(MatchFrame(options, parent, -1, plugin=self.plugin))
        self.help_dialog = ProfileDialog(parent, -1)
        self.help_dialog.profile_window.SetPage(open(REGEX_HTML()).read())
        self.help_dialog.SetTitle(_("Using regular expressions"))
        self.bind_controls()

    def on_change_facade(self):
        """called when user changes identity (facade chanegd)"""
        get_filter_facade().activate(self.activate_item.IsChecked())
        
    # EVENTS
    
    def bind_controls(self):
        """bind all controls with facade"""
        # action
        self.Bind(wx.EVT_MENU, self.on_activate, id=self.activate_item.GetId())
        self.Bind(wx.EVT_MENU, self.on_save, id=self.save_item.GetId())
        self.Bind(wx.EVT_MENU, self.on_close, id=self.quit_item.GetId())
        self.Bind(wx.EVT_CLOSE, self.on_close)
        if self.options["standalone"]:
            self.Bind(wx.EVT_MENU, self.on_import, id=self.import_item.GetId())
        # about
        self.Bind(wx.EVT_MENU, self.on_about,id=self.about_item.GetId())
        self.Bind(wx.EVT_MENU, self.on_help,id=self.help_item.GetId())

    def on_activate(self, evt):
        """activate service"""
        print self.activate_item.IsChecked() and "Activating..." \
              or "Disactivated"
        get_filter_facade().activate(self.activate_item.IsChecked())

    def on_import(self, evt):
        """match current filter with given profile"""
        dlg = wx.FileDialog(
            self, message="Match profile ...",
            defaultDir=get_prefs("profile_dir"),
            defaultFile="",
            wildcard="Solipsis file (*.prf)|*.prf",
            style=wx.OPEN)
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()[:-4]
            loader = FileDocument(path)
            loader.load()
            pseudo = loader.pseudo
            get_facade().fill_data((pseudo, loader))
            get_filter_facade().fill_data((pseudo, loader))
        
    def on_save(self, evt):
        """save .prf"""
        self.do_modified(False)
        get_filter_facade().save()
        
    def on_close(self, evt=None):
        """hide  application"""
        # ask for saving
        if self.modified:
            self.do_modified(False)
            dlg = wx.MessageDialog(
                self,
                'Your profile has been modified. Do you want to change it?',
                'Saving Dialog',
                wx.YES_NO | wx.ICON_INFORMATION)
            if dlg.ShowModal() == wx.ID_YES:
                self.on_save(evt)
        # save size
        new_size = self.GetSize()
        set_prefs("filter_width", new_size.GetWidth())
        set_prefs("filter_height", new_size.GetHeight())
        # close dialog
        if self.options["standalone"]:
            self._close()
        else:
            self.Hide()

    def _close(self):
        """termainate application"""
        self.help_dialog.Destroy()
        self.Destroy()
        sys.exit()

    def on_help(self, evt):
        """display dialog about regular expression"""
        self.help_dialog.activate()
        self.help_dialog.Show()
        
    def on_about(self, evt):
        """display about"""
        # not modal because would freeze the wx thread while twisted
        # one goes on and initialize profile
        about_dlg = AboutDialog(get_prefs("disclaimer"), self, -1)
        about_dlg.Show()

    def do_modified(self, modified):
        """change state according to modified"""
        self.modified = modified
        if self.modified:
            self.save_item.Enable(True)
        else:
            self.save_item.Enable(False)

    def __set_properties(self):
        # begin wxGlade: FilterFrame.__set_properties
        self.SetTitle(_("Profile Filters"))
        self.SetSize((460, 600))
        self.filter_statusbar.SetStatusWidths([-1])
        # statusbar fields
        filter_statusbar_fields = [_("status")]
        for i in range(len(filter_statusbar_fields)):
            self.filter_statusbar.SetStatusText(filter_statusbar_fields[i], i)
        # end wxGlade
        width = get_prefs("filter_width")
        height = get_prefs("filter_height")
        self.SetSize((width, height))
        self.do_modified(False)
        self.activate_item.Check()
        # should be passed through constructor but wxglade does not allow it
        self.personal_filter_tab.do_modified = self.do_modified
        self.file_filter_tab.do_modified = self.do_modified


    def __do_layout(self):
        # begin wxGlade: FilterFrame.__do_layout
        frame_sizer = wx.BoxSizer(wx.VERTICAL)
        self.filter_book.AddPage(self.personal_filter_tab, _("Personal"))
        self.filter_book.AddPage(self.file_filter_tab, _("Files"))
        frame_sizer.Add(self.filter_book, 1, wx.EXPAND, 0)
        self.SetAutoLayout(True)
        self.SetSizer(frame_sizer)
        self.Layout()
        self.Centre()