OSDN Git Service

Merge branch 'hotfix/singleton_with_db_accessor_generator_problem'
[amulettoolsmh4/main.git] / view / notebookseed1view.py
1 # -*- coding: utf-8 -*-
2
3 # GUIのメインフレームにおけるSeed1特定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
12 class NoteBookSeed1View():
13     u""" メインのフレームのSeed1特定タブ """
14     def __init__(self, frame):
15         self.frame = frame
16         self._init_view()
17         self._init_event()
18         self._seed1, self._table_no, self._no = None, None, None
19
20     def _init_view(self):
21         # initialize view
22
23         # buttons
24         self.radiobox_tenun = xrc.XRCCTRL(self.frame, "RadioBoxTenun")
25         self.button_search = xrc.XRCCTRL(self.frame, "ButtonSeed1Search")
26         self.button_clear = xrc.XRCCTRL(self.frame, "ButtonSeed1Clear")
27         self.button_skill1 = xrc.XRCCTRL(self.frame, "ButtonSkill1SearchFromSeed1")
28
29         self.spin_ctrl_amulet_num = xrc.XRCCTRL(self.frame, "SpinCtrlSeed1AmuletNum")
30
31         # load combo boxes
32         self.combobox_amulet_list = [xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet1"),
33                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet2"),
34                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet3"),
35                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet4"),
36                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet5"),
37                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet6"),
38                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet7")]
39         self.combobox_skill_list = [xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill1"),
40                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill2"),
41                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill3"),
42                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill4"),
43                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill5"),
44                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill6"),
45                 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill7")]
46
47         # text ctrl
48         u"""TableNoを結果TextCtrlで示す"""
49         self.text_ctrl_result = xrc.XRCCTRL(self.frame, "TextCtrl1Seed1Result")
50
51         # grid
52         self.grid_seed1 = xrc.XRCCTRL(self.frame, "GridSeed1Table")
53
54
55         self._amulet_names = []
56         self._amuletname2skillnames_dict = {}
57
58     def set_amuletname_skillnames_dict(self, amulet_names, amuletname2skillnames_dict):
59         u"""お守り名とそのお守りに対応する第1スキルの辞書をセットする"""
60         self._amulet_names = amulet_names
61         self._amuletname2skillnames_dict = amuletname2skillnames_dict
62         for amu_combo, skill_combo in zip(self.combobox_amulet_list, self.combobox_skill_list):
63             amu_combo.SetItems(self._amulet_names)
64             amu_combo.SetSelection(0)
65             skill_combo.SetItems(self._amuletname2skillnames_dict[self._amulet_names[0]])
66             skill_combo.SetSelection(0)
67
68     def _init_event(self):
69         u""" イベントの登録 """
70         self.spin_ctrl_amulet_num.Bind(wx.EVT_SPINCTRL, self.OnSpinCtrlChanged)
71         for amu_combo in self.combobox_amulet_list:
72             amu_combo.Bind(wx.EVT_COMBOBOX, self.OnAmuletComboChanged)
73
74     def OnSpinCtrlChanged(self, event):
75         u""" SpinCtrlの値が変わった時のイベント。
76         設定できるコンボボックスの数を調節する """
77         val = self.spin_ctrl_amulet_num.GetValue()
78         for combo1, combo2 in zip(self.combobox_amulet_list[:val], self.combobox_skill_list[:val]):
79             combo1.Enable()
80             combo2.Enable()
81         for combo1, combo2 in zip(self.combobox_amulet_list[val:], self.combobox_skill_list[val:]):
82             combo1.Disable()
83             combo2.Disable()
84
85     def OnAmuletComboChanged(self, event):
86         u""" お守りの種類を選択するコンボボックス変更時 """
87         obj = event.GetEventObject()
88         for amu_combo, skill_combo in zip(self.combobox_amulet_list, self.combobox_skill_list):
89             if obj == amu_combo:
90                 amu_name = amu_combo.GetStringSelection()
91                 if amu_name in self._amuletname2skillnames_dict:
92                     skill_combo.SetItems(self._amuletname2skillnames_dict[amu_name])
93                     skill_combo.SetSelection(0)
94                 break
95
96     def bind_button_search(self, event_func, evt=wx.EVT_BUTTON):
97         u""" 検索ボタンへのイベント登録 """
98         self.button_search.Bind(evt, event_func)
99
100     def bind_button_clear(self, event_func, evt=wx.EVT_BUTTON):
101         u""" クリアボタンへのイベント登録 """
102         self.button_clear.Bind(evt, event_func)
103
104     def bind_button_skill1(self, event_func, evt=wx.EVT_BUTTON):
105         u""" 対応第1スキルボタンへのイベント登録 """
106         self.button_skill1.Bind(evt, event_func)
107
108     def get_tenun_radio_key(self):
109         u""" 天運の錬金で使用したお守りの種類を示すkeyを返す """
110         idx = self.radiobox_tenun.GetSelection()
111         if idx == 0:
112             return constnumbers.KEY_TENUN555
113         elif idx == 1:
114             return constnumbers.KEY_TENUN888
115         else:
116             return None
117
118     def get_selected_amulets_and_names(self):
119         u"""選択されているお守りの種類名とスキル1の名前のペアをリストとして返す"""
120         result_num = self.spin_ctrl_amulet_num.GetValue()
121         result_list = []
122         for i, amu_combo, skill_combo in zip(
123                 range(result_num), self.combobox_amulet_list, self.combobox_skill_list):
124             amulet_name = amu_combo.GetStringSelection()
125             skill_name = skill_combo.GetStringSelection()
126             result_list.append((amulet_name, skill_name))
127         return result_list
128
129     def clear_combobox(self):
130         u""" comboboxの選択されたインデックスを0にする """
131         for amu_combo, skill_combo in zip(self.combobox_amulet_list, self.combobox_skill_list):
132             amu_combo.SetSelection(0)
133             skill_combo.SetSelection(0)
134
135     def clear_text_result(self):
136         u""" 結果を示すTextCtrlから値のクリア """
137         self.text_ctrl_result.SetValue(u"")
138         self._seed1, self._table_no, self._no = None, None, None
139
140     def set_text_result(self, value):
141         u""" 結果を示すTextCtrlへ値のセット """
142         self.text_ctrl_result.SetValue(value)
143         self._seed1, self._table_no, self._no = None, None, None
144
145     def set_text_result_by_seed1(self, seed1, table_no, no):
146         u""" 結果を示すTextCtrlへの値のセット """
147         if seed1 is not None and table_no is not None and no is not None:
148             self.text_ctrl_result.SetValue(
149                     u"Seed1: {0}, テーブルNo: {1}, 通し番号: {2}".format(seed1, table_no, no))
150             self._seed1, self._table_no, self._no = seed1, table_no, no
151         else:
152             self.clear_text_result()
153
154     def get_result_seed1(self):
155         u""" 現在の検索結果のSeed1を返す """
156         return self._seed1
157
158     def set_skill1_button_enable(self, value):
159         u""" 対応スキル検索ボタンの有効・無効の切り替え """
160         if value is True:
161             self.button_skill1.Enable()
162         else:
163             self.button_skill1.Disable()