]> git.phdru.name Git - m_librarian.git/blob - m_librarian/wx/SearchPanels.py
ab7bee69bb03aabcc9040ddac97514e73298efa5
[m_librarian.git] / m_librarian / wx / SearchPanels.py
1 # coding: utf-8
2
3 import wx
4 from ..config import get_config
5 from ..search import search_authors_raw, search_books_raw
6 from .ListAuthors import ListAuthorsWindow, ListBooksWindow
7
8
9 _search_types = ['start', 'substring', 'full']
10
11
12 class SearchPanel(wx.Panel):
13
14     # Subclasses must override these
15     search_title = None
16     search_button_title = None
17
18     def __init__(self, parent):
19         wx.Panel.__init__(self, parent)
20         search_vsizer = \
21             wx.StaticBoxSizer(wx.VERTICAL, self, self.search_title)
22         self.SetSizer(search_vsizer)
23
24         self.search = search = \
25             wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER)
26         search_vsizer.Add(search, 0, wx.EXPAND, 0)
27         search.Bind(wx.EVT_TEXT_ENTER, self.DoSearch)
28
29         self.search_substr = search_substr = wx.RadioBox(
30             self,
31             choices=[
32                 u'Подстрока в начале',
33                 u'Подстрока',
34                 u'Точное совпадение',
35             ],
36             majorDimension=1, style=wx.RA_SPECIFY_ROWS
37         )
38         search_vsizer.Add(search_substr)
39
40         self.search_case = search_case = wx.CheckBox(
41             self, label=u'Различать прописные/строчные')
42         search_vsizer.Add(search_case)
43
44         search_button = wx.Button(self, label=self.search_button_title)
45         search_vsizer.Add(search_button, 0, wx.ALIGN_CENTER, 0)
46         search_button.Bind(wx.EVT_BUTTON, self.DoSearch)
47
48     def DoSearch(self, event):
49         search = self.search.GetValue()
50         search_substr = _search_types[self.search_substr.GetSelection()]
51         search_case = self.search_case.GetValue()
52         if search_case is False:
53             search_case = None
54         self.realSearch(search, search_substr, search_case)
55
56
57 class SearchAuthorsPanel(SearchPanel):
58
59     search_title = u'Поиск авторов'
60     search_button_title = u'Искать авторов'
61
62     def realSearch(self, value, search_substr, search_case):
63         search_results = \
64             search_authors_raw(value, search_substr, search_case)
65         ListAuthorsWindow(self.Parent, search_results)
66
67
68 class SearchBooksPanel(SearchPanel):
69
70     search_title = u'Поиск книг'
71     search_button_title = u'Искать книги'
72
73     def __init__(self, parent):
74         SearchPanel.__init__(self, parent)
75         self.use_filters = use_filters = wx.CheckBox(
76             self, label=u'Использовать фильтры')
77         use_filters_cfg = \
78             get_config().getint('filters', 'use_in_search_forms', 1)
79         use_filters.SetValue(use_filters_cfg)
80         sizer = self.GetSizer()
81         s_count = len(sizer.GetChildren())
82         sizer.Insert(s_count-1, use_filters)  # Insert before the cutton
83
84     def realSearch(self, value, search_substr, search_case):
85         use_filters = self.use_filters.GetValue()
86         search_results = \
87             search_books_raw(value, search_substr, search_case, use_filters)
88         ListBooksWindow(self.Parent, search_results)