1 # -*- coding: utf-8 -*-
3 # GUIのメインフレームにおけるSeed1特定Notebookのview
4 # 2013/12/15 written by kei9
12 class NoteBookSeed1View():
13 u""" メインのフレームのSeed1特定タブ """
15 def __init__(self, frame):
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")
28 self.spin_ctrl_amulet_num = xrc.XRCCTRL(self.frame, "SpinCtrlSeed1AmuletNum")
31 self.combobox_amulet_list = [xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet1"),
32 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet2"),
33 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet3"),
34 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet4"),
35 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet5"),
36 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet6"),
37 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Amulet7")]
38 self.combobox_skill_list = [xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill1"),
39 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill2"),
40 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill3"),
41 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill4"),
42 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill5"),
43 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill6"),
44 xrc.XRCCTRL(self.frame, "ComboBoxSeed1Skill7")]
47 self.text_ctrl_result = xrc.XRCCTRL(self.frame, "TextCtrl1Seed1Result")
50 self.grid_seed1 = xrc.XRCCTRL(self.frame, "GridSeed1Table")
51 u"""Tableを結果TextCtrlで示し、No.をrowラベル、行にはseed1, 天運個数、
52 1-7枠目の値を表示する。1-7枠目をお守りの種類とスキル名で分けると面倒なので
53 合体させて1つの行で表示した方がいいかもしれない。この場合は行数は9となる"""
54 self.grid_seed1.CreateGrid(constnumbers.NUM_SEED1_GRID_ROW, constnumbers.NUM_SEED1_GRID_COL)
55 self.grid_seed1.SetColLabelValue(0, constnumbers.LABEL_FORMAT_SEED1_GRID_COL1)
56 self.grid_seed1.SetColLabelValue(1, constnumbers.LABEL_FORMAT_SEED1_GRID_COL2)
57 for i in range(2, constnumbers.NUM_SEED1_GRID_COL):
58 self.grid_seed1.SetColLabelValue(i,
59 constnumbers.LABEL_FORMAT_SEED1_GRID_COL_AFTER2.format(i-1))
60 self.grid_seed1.DisableDragGridSize()
61 self.grid_seed1.EnableEditing(False)
63 self._amulet_names = []
64 self._amuletname2skillnames_dict = {}
66 def set_amuletname_skillnames_dict(self, amulet_names, amuletname2skillnames_dict):
67 u"""お守り名とそのお守りに対応する第1スキルの辞書をセットする"""
68 self._amulet_names = amulet_names
69 self._amuletname2skillnames_dict = amuletname2skillnames_dict
70 for amu_combo, skill_combo in zip(self.combobox_amulet_list, self.combobox_skill_list):
71 amu_combo.SetItems(self._amulet_names)
72 amu_combo.SetSelection(0)
73 skill_combo.SetItems(self._amuletname2skillnames_dict[self._amulet_names[0]])
74 skill_combo.SetSelection(0)
76 def _init_event(self):
78 self.spin_ctrl_amulet_num.Bind(wx.EVT_SPINCTRL, self.OnSpinCtrlChanged)
79 self.grid_seed1.Bind(wx.EVT_SIZE, self.OnGridSizeChanged)
80 for amu_combo in self.combobox_amulet_list:
81 amu_combo.Bind(wx.EVT_COMBOBOX, self.OnAmuletComboChanged)
83 def OnSpinCtrlChanged(self, event):
84 u""" SpinCtrlの値が変わった時のイベント。
85 設定できるコンボボックスの数を調節する """
86 val = self.spin_ctrl_amulet_num.GetValue()
87 for combo1, combo2 in zip(self.combobox_amulet_list[:val], self.combobox_skill_list[:val]):
90 for combo1, combo2 in zip(self.combobox_amulet_list[val:], self.combobox_skill_list[val:]):
94 def OnGridSizeChanged(self, event):
96 width, height = self.grid_seed1.GetParent().GetSize()
97 each_width = (width - 60) / (constnumbers.NUM_SEED1_GRID_COL) # consider margin size
98 self.grid_seed1.SetRowLabelSize(45)
99 for col in range(constnumbers.NUM_SEED1_GRID_COL):
100 self.grid_seed1.SetColSize(col, each_width)
102 def OnAmuletComboChanged(self, event):
103 u""" お守りの種類を選択するコンボボックス変更時 """
104 obj = event.GetEventObject()
105 for amu_combo, skill_combo in zip(self.combobox_amulet_list, self.combobox_skill_list):
107 amu_name = amu_combo.GetStringSelection()
108 if amu_name in self._amuletname2skillnames_dict:
109 skill_combo.SetItems(self._amuletname2skillnames_dict[amu_name])
110 skill_combo.SetSelection(0)
113 def bind_button_search(self, event_func, evt=wx.EVT_BUTTON):
114 u""" 検索ボタンへのイベント登録 """
115 self.button_search.Bind(evt, event_func)
117 def bind_button_clear(self, event_func, evt=wx.EVT_BUTTON):
118 u""" クリアボタンへのイベント登録 """
119 self.button_clear.Bind(evt, event_func)
121 def get_tenun_radio_key(self):
122 u""" 天運の錬金で使用したお守りの種類を示すkeyを返す """
123 idx = self.radiobox_tenun.GetSelection()
125 return constnumbers.KEY_TENUN555
127 return constnumbers.KEY_TENUN888
131 def get_selected_amulets_and_names(self):
132 u"""選択されているお守りの種類名とスキル1の名前のペアをリストとして返す"""
133 result_num = self.spin_ctrl_amulet_num.GetValue()
135 for i, amu_combo, skill_combo in zip(
136 range(result_num), self.combobox_amulet_list, self.combobox_skill_list):
137 amulet_name = amu_combo.GetStringSelection()
138 skill_name = skill_combo.GetStringSelection()
139 result_list.append((amulet_name, skill_name))
142 def clear_highlight(self):
143 u""" セルの強調表示をクリアする """
144 for row in range(self.grid_seed1.GetNumberRows()):
145 for col in range(self.grid_seed1.GetNumberCols()):
146 self.grid_seed1.SetCellBackgroundColour(row, col, wx.NullColor)
148 def update_highlight(self, skill_names, color=u"Yellow"):
149 u""" 指定されたスキル名に一致するセルを強調表示する """
150 for row in range(self.grid_seed1.GetNumberRows()):
151 for col in range(2, self.grid_seed1.GetNumberCols()):
152 val = self.grid_seed1.GetCellValue(row, col)
154 amu_name, skill_name = val.split(self.SEPARATER)
155 if skill_name in skill_names:
156 self.grid_seed1.SetCellBackgroundColour(row, col, color)
158 self.grid_seed1.SetCellBackgroundColour(row, col, wx.NullColor)
159 except ValueError as e:
161 self.grid_seed1.SetCellBackgroundColour(row, col, wx.NullColor)
163 def set_seed1_dict(self, seed1_dict, select_seed1=None):
164 u""" seed1から(no, table_no, result_num, amulet_names, skill_names)への辞書を元に、
166 select_seed1がNoneでなければ、対応する行を選択状態とする"""
167 row_num = len(seed1_dict)
168 diff = row_num - self.grid_seed1.GetNumberRows()
170 self.grid_seed1.AppendRows(diff, False)
172 self.grid_seed1.DeleteRows(0, -diff, False)
174 for row, seed1 in enumerate(
175 sorted(seed1_dict.keys(), key=lambda x: seed1_dict[x][0])): # order by no
176 no, table_no, result_num, amu_names, skill_names = seed1_dict[seed1]
177 self.grid_seed1.SetRowLabelValue(row, u"{0}".format(no))
178 self.grid_seed1.SetCellValue(row, 0, "{0}".format(seed1))
179 self.grid_seed1.SetCellValue(row, 1, "{0}".format(result_num))
180 for col, amu_name, skill_name in zip(
181 range(2, constnumbers.NUM_SEED1_GRID_COL), amu_names, skill_names):
182 if amu_name is not None and skill_name is not None:
183 val = u"{0}{1}{2}".format(
184 constnumbers.AMULET_NAME_TO_SHORT_NAME_DICT[amu_name], self.SEPARATER, skill_name)
185 self.grid_seed1.SetCellValue(row, col, val)
187 self.grid_seed1.SetCellValue(row, col, u"")
188 if seed1 == select_seed1:
189 self.grid_seed1.MakeCellVisible(row, 0)
190 self.grid_seed1.SelectRow(row)
192 def clear_combobox(self):
193 u""" comboboxの選択されたインデックスを0にする """
194 for amu_combo, skill_combo in zip(self.combobox_amulet_list, self.combobox_skill_list):
195 amu_combo.SetSelection(0)
196 skill_combo.SetSelection(0)
198 def clear_seed1_grid(self):
200 for row in range(self.grid_seed1.GetNumberRows()):
201 self.grid_seed1.SetRowLabelValue(row, u"")
202 for col in range(self.grid_seed1.GetNumberCols()):
203 self.grid_seed1.SetCellValue(row, col, u"")
204 self.clear_highlight()
206 def clear_text_result(self):
207 u""" 結果を示すTextCtrlから値のクリア """
208 self.text_ctrl_result.SetValue(u"")
210 def set_text_result(self, value):
211 u""" 結果を示すTextCtrlへの値のセット """
212 self.text_ctrl_result.SetValue(value)