OSDN Git Service

revise amulet search to consider of seed1 value,
[amulettoolsmh4/main.git] / view / notebookamuletview.py
1 # -*- coding: utf-8 -*-
2
3 # GUIのメインフレームにおけるお守り検索Notebookのview
4 # 2013/12/15 written by kei9
5 import wx
6 from wx import xrc
7 import wx.grid
8
9 import constnumbers
10
11 class NoteBookAmuletView():
12     u""" メインのフレームのお守り検索タブ """
13     def __init__(self, frame):
14         self.frame = frame
15         self._init_view()
16         self._init_event()
17
18     def _init_view(self):
19         # initialize view
20
21         # button
22         self.button_search = xrc.XRCCTRL(self.frame, "ButtonAmuletSearchSearch")
23         self.button_clear = xrc.XRCCTRL(self.frame, "ButtonAmuletSearchClear")
24         self.button_skill = xrc.XRCCTRL(self.frame, "ButtonAmuletSearchSkill2")
25         self.ID_BUTTON_SEARCH = xrc.XRCID("ButtonAmuletSearchSearch")
26         self.ID_BUTTON_CLEAR = xrc.XRCID("ButtonAmuletSearchClear")
27         self.ID_BUTTON_SKILL = xrc.XRCID("ButtonAmuletSearchSkill2")
28
29         # radio button
30         self.radiobox_amulet = xrc.XRCCTRL(self.frame, "RadioBoxAmulet")
31         self.radiobox_threshold_type = xrc.XRCCTRL(self.frame, "RadioBoxThresholdType")
32
33         # seed2s list
34         self.grid_seed2s = xrc.XRCCTRL(self.frame, "GridAmuletSeed2s")
35         self.grid_seed2s.CreateGrid(1, constnumbers.NUM_AMULET_SEED2S_GRID_COL)
36         self.grid_seed2s.SetColLabelValue(0, constnumbers.LABEL_FORMAT_AMULET_SEED2S_GRID_COL1)
37         self.grid_seed2s.SetColLabelValue(1, constnumbers.LABEL_FORMAT_AMULET_SEED2S_GRID_COL2)
38         self.grid_seed2s.SetColLabelValue(2, constnumbers.LABEL_FORMAT_AMULET_SEED2S_GRID_COL3)
39         self.grid_seed2s.DisableDragGridSize()
40         self.grid_seed2s.EnableEditing(False)
41         self.grid_seed2s.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
42
43         # seed1s list
44         self.grid_seed1s = xrc.XRCCTRL(self.frame, "GridAmuletSeed1s")
45         self.grid_seed1s.CreateGrid(1, constnumbers.NUM_AMULET_SEED1S_GRID_COL)
46         self.grid_seed1s.SetColLabelValue(0, constnumbers.LABEL_FORMAT_AMULET_SEED1S_GRID_COL1)
47         self.grid_seed1s.SetColLabelValue(1, constnumbers.LABEL_FORMAT_AMULET_SEED1S_GRID_COL2)
48         self.grid_seed1s.DisableDragGridSize()
49         self.grid_seed1s.EnableEditing(False)
50         self.grid_seed1s.SetRowLabelSize(1)
51
52         # spin ctrl
53         self.spin_ctrl_skill1_val = xrc.XRCCTRL(self.frame, "SpinCtrlAmuletSearchSkill1Value")
54         self.spin_ctrl_skill2_val = xrc.XRCCTRL(self.frame, "SpinCtrlAmuletSearchSkill2Value")
55         self.spin_ctrl_slot_num = xrc.XRCCTRL(self.frame, "SpinCtrlAmuletSearchSlotNumber")
56         self.ID_SPIN_CTRL_SKILL1_VAL = xrc.XRCID("SpinCtrlAmuletSearchSkill1Value")
57         self.ID_SPIN_CTRL_SKILL2_VAL = xrc.XRCID("SpinCtrlAmuletSearchSkill2Value")
58
59         # combobox
60         self.combo_box_skill1 = xrc.XRCCTRL(self.frame, "ComboBoxAmuletSearchSkill1")
61         self.combo_box_skill2 = xrc.XRCCTRL(self.frame, "ComboBoxAmuletSearchSkill2")
62         self.ID_COMBO_BOX_SKILL1 = xrc.XRCID("ComboBoxAmuletSearchSkill1")
63         self.ID_COMBO_BOX_SKILL2 = xrc.XRCID("ComboBoxAmuletSearchSkill2")
64
65         # text ctrl
66         self.text_ctrl_result = xrc.XRCCTRL(self.frame, "TextCtrlAmuletSearchResult")
67
68         # set min & max of slot
69         self.set_slot_minmax(constnumbers.SLOT_MIN, constnumbers.SLOT_MAX)
70
71     def _init_event(self):
72         # initialize event
73         self.grid_seed1s.Bind(wx.EVT_SIZE, self.OnSeed1GridSizeChanged)
74         self.grid_seed2s.Bind(wx.EVT_SIZE, self.OnSeed2GridSizeChanged)
75
76     def OnSeed1GridSizeChanged(self, event):
77         u""" Seed1Gridサイズの変更時 """
78         width, height = self.grid_seed1s.GetParent().GetSize()
79         each_width = (width) / (constnumbers.NUM_AMULET_SEED1S_GRID_COL) # consider margin size
80         self.grid_seed1s.SetRowLabelValue(0, u"")
81         for col in range(constnumbers.NUM_AMULET_SEED1S_GRID_COL):
82             self.grid_seed1s.SetColSize(col, each_width)
83
84     def OnSeed2GridSizeChanged(self, event):
85         u""" Seed2Gridサイズの変更時 """
86         width, height = self.grid_seed2s.GetParent().GetSize()
87         each_width = (width - 60) / (constnumbers.NUM_AMULET_SEED2S_GRID_COL) # consider margin size
88         self.grid_seed2s.SetRowLabelSize(45)
89         for col in range(constnumbers.NUM_AMULET_SEED2S_GRID_COL):
90             self.grid_seed2s.SetColSize(col, each_width)
91
92     def bind_radiobox_amulet(self, event_func, evt=wx.EVT_RADIOBOX):
93         u""" お守り種類のラジオボタンが押された時のイベントをセットする """
94         self.radiobox_amulet.Bind(evt, event_func)
95
96     def bind_radiobox_threshold_type(self, event_func, evt=wx.EVT_RADIOBOX):
97         u""" 判定値の種類のラジオボタンが押された時のイベントをセットする """
98         self.radiobox_threshold_type.Bind(evt, event_func)
99
100     def bind_combobox(self, event_func, evt=wx.EVT_COMBOBOX):
101         u""" コンボボタンが押された時のイベントをセットする """
102         self.combo_box_skill1.Bind(evt, event_func)
103         self.combo_box_skill2.Bind(evt, event_func)
104
105     def bind_button_search(self, event_func, evt=wx.EVT_BUTTON):
106         u""" 検索ボタンが押された時のイベントをセットする """
107         self.button_search.Bind(evt, event_func)
108
109     def bind_button_clear(self, event_func, evt=wx.EVT_BUTTON):
110         u""" クリアボタンが押された時のイベントをセットする """
111         self.button_clear.Bind(evt, event_func)
112
113     def bind_button_skill(self, event_func, evt=wx.EVT_BUTTON):
114         u""" スキル検索ボタンが押された時のイベントをセットする """
115         self.button_skill.Bind(evt, event_func)
116
117     def set_skill_minmax(self, min1, max1, min2, max2):
118         u""" 第1,2スキルの最大値と最小値をセットする """
119         self.spin_ctrl_skill1_val.SetRange(min1, max1)
120         self.spin_ctrl_skill2_val.SetRange(min2, max2)
121
122     def set_slot_minmax(self, slot_min, slot_max):
123         u""" スロットの最大値と最小値をセットする """
124         self.spin_ctrl_slot_num.SetRange(slot_min, slot_max)
125
126     def get_skill_values(self):
127         u""" 第1,2スキルの値を得る 
128         return (skill1_val, skill2_val)"""
129         skill1_val = self.spin_ctrl_skill1_val.GetValue()
130         skill2_val = self.spin_ctrl_skill2_val.GetValue()
131         return (skill1_val, skill2_val)
132
133     def get_slot_value(self):
134         u""" スロットの値を得る """
135         return self.spin_ctrl_slot_num.GetValue()
136
137     def set_radio_value(self, value, amulet_name=constnumbers.NAME_AMULET1):
138         u""" ラジオボタンの値をセットする 
139             arg: (value, amulet_name)
140         """
141         if amulet_name == constnumbers.NAME_AMULET1:
142             idx = 0
143         elif amulet_name == constnumbers.NAME_AMULET2:
144             idx = 1
145         elif amulet_name == constnumbers.NAME_AMULET3:
146             idx = 2
147         self.radiobox_amulet.SetSelection(idx)
148
149     def get_radio_value(self, amulet_name=constnumbers.NAME_AMULET1):
150         u""" ラジオボタンの値を得る
151             return: (value)
152         """
153         if amulet_name == constnumbers.NAME_AMULET1:
154             idx = 0
155         elif amulet_name == constnumbers.NAME_AMULET2:
156             idx = 1
157         elif amulet_name == constnumbers.NAME_AMULET3:
158             idx = 2
159         return self.radiobox_amulet.GetSelection() == idx
160
161     def get_selected_amulet(self):
162         u""" 選択されているお守り名を得る 
163             return: (NAME_OF_AMULET)
164         """
165         idx = self.radiobox_amulet.GetSelection()
166         if idx == 0:
167             return constnumbers.NAME_AMULET1
168         elif idx == 1:
169             return constnumbers.NAME_AMULET2
170         elif idx == 2:
171             return constnumbers.NAME_AMULET3
172         else:
173             raise NotImplementedError("irregular radio button selected")
174
175     def get_selected_threshold_type(self):
176         u""" 選択されているラジオボタンの検索種類IDを得る
177             return: (THRESHOLD_TYPE_ID)
178         """
179         idx = self.radiobox_threshold_type.GetSelection()
180         if idx == 0:
181             return constnumbers.THRESHOLD_TYPE_ALL
182         elif idx == 1:
183             return constnumbers.THRESHOLD_TYPE_THRESHOLD1
184         elif idx == 2:
185             return constnumbers.THRESHOLD_TYPE_THRESHOLD2
186         elif idx == 3:
187             return constnumbers.THRESHOLD_TYPE_INISHIE
188         else:
189             raise NotImplementedError("irregular radio button selected")
190
191     def set_selection_skill1_combobox(self, idx):
192         u""" skill1のコンボボックスの選択されたインデックスをセットする """
193         self.combo_box_skill1.SetSelection(idx)
194
195     def set_selection_skill2_combobox(self, idx):
196         u""" skill2のコンボボックスの選択されたインデックスをセットする """
197         self.combo_box_skill2.SetSelection(idx)
198
199     def get_string_selection_skill1_combobox(self):
200         u""" skill1のコンボボックスの選択された値を得る """
201         return self.combo_box_skill1.GetStringSelection()
202
203     def get_string_selection_skill2_combobox(self):
204         u""" skill2のコンボボックスの選択された値を得る """
205         return self.combo_box_skill2.GetStringSelection()
206
207     def get_string_selection_skill_names(self):
208         u""" skill1, skill2で選択されているスキル名を返す
209             return (skill1_name, skill2_name)"""
210         skill1_name = self.get_string_selection_skill1_combobox()
211         skill2_name = self.get_string_selection_skill2_combobox()
212         return (skill1_name, skill2_name)
213
214     def set_items_skill1_combobox(self, string_list):
215         u""" skill1のコンボボックスの値をセットする """
216         self.combo_box_skill1.SetItems(string_list)
217
218     def set_items_skill2_combobox(self, string_list):
219         u""" skill2のコンボボックスの値をセットする """
220         self.combo_box_skill2.SetItems(string_list)
221
222     def set_items_skill_combobox(self, idx, string_list):
223         u""" 指定されたインデックスのskillのコンボボックスの値をセットする """
224         if idx == 0:
225             self.set_items_skill1_combobox(string_list)
226         elif idx == 1:
227             self.set_items_skill2_combobox(string_list)
228         else:
229             raise NotImplementedError(u"this idx is not implemented")
230
231     def set_skill_button_enable(self, value):
232         u""" 対応スキル検索ボタンの有効・無効の切り替え """
233         if value is True:
234             self.button_skill.Enable()
235         else:
236             self.button_skill.Disable()
237
238     def set_result_text_ctrl_value(self, value):
239         u""" 結果表示用のTextCtrlに値をセットする """
240         self.text_ctrl_result.SetValue(value)
241
242     def set_grid_seed2s_items(self, items_dict):
243         u""" Seed2一覧のGridに値をセットする。
244         引数はSeed2 -> (str_renkin_type, tenun555_num, tenun888)の辞書とする。
245         Noneが与えられた時はClearする"""
246
247         if items_dict is not None:
248             row_num = len(items_dict)
249             diff = row_num - self.grid_seed2s.GetNumberRows()
250             if diff > 0:
251                 self.grid_seed2s.AppendRows(diff, False)
252             elif diff < 0:
253                 self.grid_seed2s.DeleteRows(0, -diff, False)
254
255             for row, seed2 in enumerate(sorted(items_dict.keys())):
256                 self.grid_seed2s.SetRowLabelValue(row, u"{0}".format(seed2))
257                 renkin_type, tenun555_num, tenun888_num = items_dict[seed2]
258                 self.grid_seed2s.SetCellValue(row, 0, renkin_type)
259                 self.grid_seed2s.SetCellValue(row, 1, u"{0}".format(tenun555_num))
260                 self.grid_seed2s.SetCellValue(row, 2, u"{0}".format(tenun888_num))
261         else:
262             self.clear_grid_seed2s()
263
264     def set_grid_seed1s_items(self, tenun555_seed1s, tenun888_seed1s):
265         u""" Seed1一覧のGridに天運555と天運888のSeed1の値をセットする。"""
266         self.clear_grid_seed1s()
267         max_len = max([len(tenun555_seed1s, tenun888_seed2s)])
268         diff = max_len - self.grid_seed2s.GetNumberRows()
269         if diff > 0:
270             self.grid_seed1s.AppendRows(diff, False)
271         elif diff < 0:
272             self.grid_seed1s.DeleteRows(0, -diff, False)
273
274         for row in range(max_len):
275             self.grid_seed1s.SetRowLabelValue(row, u"")
276         for row, seed1 in enumerate(sorted(tenun555_seed1s)):
277             self.grid_seed1s.SetCellValue(row, 0, seed1)
278         for row, seed1 in enumerate(sorted(tenun888_seed1s)):
279             self.grid_seed1s.SetCellValue(row, 1, seed1)
280
281     def get_grid_selected_seed2(self):
282         u""" Seed2一覧のGridの選択されたSeed2の値を得る。"""
283         rows = [x for x in self.grid_seed2s.GetSelectedRows()]
284         print rows
285         if len(rows) > 0:
286             return int(self.grid_seed2s.GetRowLabelValue(rows[0]))
287         else:
288             return None
289
290     def set_grid_seed2s_selected_idx(self, idx):
291         u""" Seed2一覧のGridの選択された行を選択状態にする。"""
292         if idx >= 0 and idx < self.grid_seed2s.GetNumberRows():
293             self.grid_seed2s.MakeCellVisible(idx, 0)
294             self.grid_seed2s.SelectRow(idx)
295
296     def clear_grid_seed2s(self):
297         u""" Seed2一覧のGridから値をClearする"""
298         for row in range(self.grid_seed2s.GetNumberRows()):
299             self.grid_seed2s.SetRowLabelValue(row, u"")
300             for col in range(self.grid_seed2s.GetNumberCols()):
301                 self.grid_seed2s.SetCellValue(row, col, u"")
302         self.grid_seed2s.ClearSelection()
303
304     def clear_grid_seed1s(self):
305         u""" Seed1一覧のGridから値をClearする"""
306         for row in range(self.grid_seed1s.GetNumberRows()):
307             self.grid_seed1s.SetRowLabelValue(row, u"")
308             for col in range(self.grid_seed1s.GetNumberCols()):
309                 self.grid_seed1s.SetCellValue(row, col, u"")
310         self.grid_seed1s.ClearSelection()
311
312     def clear_grid(self):
313         u"""Gridの値をクリアする"""
314         self.clear_grid_seed1s()
315         self.clear_grid_seed2s()