self.notebook_amulet_view.set_skillminmax_dict(self._skill_names, self._amulet_names, self._minmax_dict)
self.notebook_amulet_view.bind_button_search(self.OnClickAmuletSearch)
self.notebook_amulet_view.bind_button_clear(self.OnClickAmuletClear)
- self.notebook_amulet_view.bind_button_skill2(self.OnClickSkill2SearchFromAmulet)
+ self.notebook_amulet_view.bind_button_simulate(self.OnClickSimulateFromAmulet)
self.notebook_amulet_view.set_selected_amulet(True, view.NAME_AMULET1)
def OnClickAmuletSearch(self, evt):
u""" search seeds from amulet condition """
search_type = self.notebook_amulet_view.get_selected_search_type()
+ skill1_name, skill2_name = self.notebook_amulet_view.get_skill_names()
+ skill1_val, skill2_val = self.notebook_amulet_view.get_skill_values()
+ slot_num = self.notebook_amulet_view.get_slot_value()
+ amulet_name = self.notebook_amulet_view.get_selected_amulet()
if search_type == view.SEARCH_TYPE_SEED2:
- skill1_name, skill2_name = self.notebook_amulet_view.get_skill_names()
- skill1_val, skill2_val = self.notebook_amulet_view.get_skill_values()
- slot_num = self.notebook_amulet_view.get_slot_value()
- amulet_name = self.notebook_amulet_view.get_selected_amulet()
suff_val, threshold, th1_seed2s, th2_seed2s = self.db_accessor.simple_select_seed2s_from_names(
amulet_name, skill1_name, skill1_val, skill2_name, skill2_val, slot_num)
self.notebook_amulet_view.set_result_only_seed2(suff_val, threshold, th1_seed2s, th2_seed2s)
- elif search_type == view.SEARCH_TYPE_SEED1_SEED2:
- pass
elif search_type == view.SEARCH_TYPE_FIXED_SEED2:
+ seed2 = self.notebook_amulet_view.get_fixed_seed2()
+ suff_val = self.db_accessor.get_sufficient_value(amulet_name, skill1_name, skill2_name, skill1_val, skill2_val)
+ threshold = self.db_accessor.select_threshold_from_sufficient(amulet_name, suff_val)[slot_num-1]
+ if seed2 is not None and skill2_name in self._skill_names:
+ seed1s_555, seed1s_888 = self.db_accessor.select_seed1s_from_fixed_seed2(seed2,
+ amulet_name, skill1_name, skill1_val, skill2_name, skill2_val, slot_num)
+ self.notebook_amulet_view.set_result_fixed_seed2(suff_val, threshold, seed2, seed1s_555, seed1s_888)
+ elif seed2 is None:
+ self._show_message_dialog(message=u"Seed2には数字を入力して下さい")
+ else:
+ self._show_message_dialog(message=u"第2スキルに何らかのスキルを指定してください")
+ elif search_type == view.SEARCH_TYPE_SEED1_SEED2:
+ u"""
+ suff_val = self.db_accessor.get_sufficient_value(amulet_name, skill1_name, skill2_name,
+ skill1_val, skill2_val)
+ if suff_val > 15:
+ result_dict = self.db_accessor.select_seed1s_from_names(amulet_name,
+ skill1_name, skill1_val, skill2_name, skill2_val, slot_num)
+ self.notebook_amulet_view.set_result_seeds(suff_val, result_dict)
+ else:
+ self._show_message_dialog(message=u"指定されたお守りの充足値が低いため、結果を表示しきれません")
+ """
pass
def OnClickAmuletClear(self, evt):
self.notebook_amulet_view.clear_grid()
self.notebook_amulet_view.clear_input_values()
- def OnClickSkill2SearchFromAmulet(self, evt):
+ def OnClickSimulateFromAmulet(self, evt):
u""" change page to skill search from amulet"""
- seed = self.notebook_amulet_view.get_grid_selected_seed2()
- if seed is not None:
- self.notebook_skill2_view.set_seed2_value(seed)
- self.frame_view.note_book.SetSelection(view.SKILL_SEARCH_PAGE)
- self.OnClickSkillSearch(evt)
+ values = self.notebook_amulet_view.get_selected_seeds()
+ if values is not None:
+ seed1, seed2 = values
+ self.notebook_simulator_view.set_seed_values(seed1, seed2)
+ self.frame_view.note_book.SetSelection(view.ALCHEMY_SIMULATE_PAGE)
+ if seed1 is not None and seed2 is not None:
+ tenun = self.notebook_amulet_view.get_selected_tenun_type()
+ self.notebook_simulator_view.set_tenun_radio_key(tenun)
+ self.OnClickSimulatorSearch(evt)
+ else:
+ self._show_message_dialog(message=u"有効な行を選択してください")
u""" settings' event """
def OnClickSettingOK(self, evt):
from skilltable import SkillTableAccessor
from amulettable import AmuletTableAccessor
from sufficienttable import SufficientTableAccessor
+import singleton
class AlchemySimulator(object):
u""" 特定Seed1,2から生じる錬金結果を模擬するクラス """
+ __metaclass__ = singleton.Singleton
def __init__(self, db_cursor):
u""" 錬金結果の模擬クラス """
self._cursor = db_cursor
return (self._skill_id2name[skill1_id], skill1_val, u"", 0, slot_num, type_name)
def alchemy_tenun_id(self, seed1, seed2, alchemy_type):
- u""" 天運の錬金 (古*3または歪*3限定。)
+ u""" 天運の錬金 (古*3または歪*3限定。)
return list of (skill1_id, skill1_val, skill2_id, skill2_val, slot_num, type_name)
"""
if alchemy_type == mh4constnumbers.KEY_TENUN555:
return result_list
def alchemy_tenun_name(self, seed1, seed2, alchemy_type):
- u""" 天運の錬金(古*3または歪*3限定。)
+ u""" 天運の錬金(古*3または歪*3限定。)
return list of (skill1_name, skill1_val, skill2_name, skill2_val, slot_num, type_name)
"""
result_list = []
import seed2thresholdtable
import seed2skill2table
import sufficienttable
-
+import seed1tenuntable
+import alchemysimulator
+import mh4constnumbers
SELECT_SEED2S_FROM_THRESHOLD_AND_SKILL2_SQL = u"""
select {{threshold_table}}.{threshold_seed2} from {{threshold_table}}
accessor = skillminmaxtable.SkillMinMaxTableAccessor(db_cursor)
self._minmax_dict = accessor.get_minmax_by_id()
- accessor = seed2skill2table.Seed2Skill2TableAccessor(db_cursor)
- self._amu_id2skill2_table = accessor.get_amulet_id2table_name_dict()
+ self._acc_seed2skill2 = seed2skill2table.Seed2Skill2TableAccessor(db_cursor)
+ self._amu_id2skill2_table = self._acc_seed2skill2.get_amulet_id2table_name_dict()
self._acc_sufficient = sufficienttable.SufficientTableAccessor(db_cursor)
self._acc_threshold = seed2thresholdtable.Seed2ThresholdTableAccessor(db_cursor)
+ self._acc_seed1tenun = seed1tenuntable.Seed1TenunTableAccessor(db_cursor)
+ self._simulator = alchemysimulator.AlchemySimulator(db_cursor)
+
+ def get_sufficient_value(self, amulet_id, skill1_id, skill1_val, skill2_id, skill2_val):
+ u""" 充足値を計算する。
+ 指定したスキルが見つからない場合や、充足値を計算できない場合はNoneを返す
+ skill2_nameが存在しないスキルであればskill1のみから計算する
+ return sufficient_val
+ """
+ skill1_minmax, skill2_minmax = self._minmax_dict[amulet_id]
+ if skill1_id in skill1_minmax:
+ min1, max1 = skill1_minmax[skill1_id]
+ skill1_val = 0 if skill1_val < 0 else skill1_val
+ else:
+ # cannot find skill1
+ return None
+
+ if skill2_id in skill2_minmax:
+ min2, max2 = skill2_minmax[skill2_id]
+ skill2_val = 0 if skill2_val < 0 else skill2_val
+ else:
+ max2 = 1
+ skill2_val = 0
+
+ if skill1_val > max1 or skill2_val > max2:
+ # over value
+ return None
+
+ suff_val = (10 * skill1_val) // max1 + (10 * skill2_val) // max2
+ return suff_val
def simple_select_seed2s_from_ids(self, amulet_id, skill1_id, skill1_val, skill2_id, skill2_val, slot_num):
u""" 指定されたスキルId,スキル値、スロット数を元にして、
return self.simple_select_seed2s_from_ids(amulet_id, skill1_id, skill1_val, skill2_id, skill2_val, slot_num)
-
- def get_sufficient_value(self, amulet_id, skill1_id, skill1_val, skill2_id, skill2_val):
- u""" 充足値を計算する。
- 指定したスキルが見つからない場合や、充足値を計算できない場合はNoneを返す
- skill2_nameが存在しないスキルであればskill1のみから計算する
- return sufficient_val
- """
- skill1_minmax, skill2_minmax = self._minmax_dict[amulet_id]
- if skill1_id in skill1_minmax:
- min1, max1 = skill1_minmax[skill1_id]
- skill1_val = 0 if skill1_val < 0 else skill1_val
+ def select_seed1s_from_fixed_seed2_ids(self,
+ seed2, amulet_id, skill1_id, skill1_val, skill2_id, skill2_val, slot_num):
+ u""" 指定されたSeed2, スキルId、スキル値、スロット数において、
+ 条件を満たすお守りが発生するSeed1を検索する
+ return (seed1s_555, seed1s_888)"""
+ skill2_positions = self._acc_seed2skill2.select_skill_position_from_seed2_ids(
+ amulet_id, seed2, skill2_id)
+ if len(skill2_positions) > 0:
+ seed1s_555, seed1s_888 = set(), set()
+ for seed1s, key in zip([seed1s_555, seed1s_888],
+ [mh4constnumbers.KEY_TENUN555, mh4constnumbers.KEY_TENUN888]):
+ for pos in skill2_positions:
+ seed1s |= self._acc_seed1tenun.select_seed1s_from_skill_pos_ids(
+ amulet_id, skill1_id, pos, key)
+
+ for seed1s, key in zip([seed1s_555, seed1s_888],
+ [mh4constnumbers.KEY_TENUN555, mh4constnumbers.KEY_TENUN888]):
+ tmp_list = []
+ for seed1 in seed1s:
+ result = self._simulator.alchemy_tenun_id(seed1, seed2, key)
+ for _skill1_id, _skill1_val, _skill2_id, _skill2_val, _slot_num, type_name in result:
+ if (skill1_id == _skill1_id and skill1_val <= _skill1_val and
+ skill2_id == _skill2_id and skill2_val <= _skill2_val and
+ slot_num <= _slot_num):
+ tmp_list.append(seed1)
+ break
+ seed1s &= set(tmp_list)
+
+ return (seed1s_555, seed1s_888)
else:
- # cannot find skill1
- return None
-
- if skill2_id in skill2_minmax:
- min2, max2 = skill2_minmax[skill2_id]
- skill2_val = 0 if skill2_val < 0 else skill2_val
+ return set(), set()
+
+ def select_seed1s_from_fixed_seed2_names(self,
+ seed2, amulet_name, skill1_name, skill1_val, skill2_name, skill2_val, slot_num):
+ u""" 指定されたSeed2, スキル名、スキル値、スロット数において、
+ 条件を満たすお守りが発生するSeed1を検索する
+ return (seed1s_555, seed1s_888)"""
+ if (amulet_name in self._amu_name2id and
+ skill1_name in self._skill_name2id and
+ skill2_name in self._skill_name2id):
+ amulet_id = self._amu_name2id[amulet_name]
+ skill1_id = self._skill_name2id[skill1_name]
+ skill2_id = self._skill_name2id[skill2_name]
+ return self.select_seed1s_from_fixed_seed2_ids(seed2, amulet_id,
+ skill1_id, skill1_val, skill2_id, skill2_val, slot_num)
else:
- max2 = 1
- skill2_val = 0
+ return set(), set()
+
+ def select_seed1s_from_ids(self,
+ amulet_id, skill1_id, skill1_val, skill2_id, skill2_val, slot_num):
+ u""" 指定されたお守りId、スキルId、スキル値、スロット数において、
+ 条件を満たすお守りが発生するSeed2とSeed1のペアを検索する。
+ return {seed2s: (seed1s_555, seed1s_888)} """
+ u"""
+ seed2s = self._acc_seed2skill2.select_seed2s_from_skill2_id(amulet_id, skill2_id)
+ print u"first seed2's length: {0}".format(len(seed2s))
+ result_dict = {}
+ count = 0
+ for seed2 in seed2s:
+ _seed1s_555, _seed1s_888 = self.select_seed1s_from_fixed_seed2_ids(seed2, amulet_id,
+ skill1_id, skill1_val, skill2_id, skill2_val, slot_num)
+ if len(_seed1s_555) == 0 and len(_seed1s_888) == 0:
+ continue
+ else:
+ result_dict[seed2] = (_seed1s_555, _seed1s_888)
+ count += 1
+ if count % 100 == 0:
+ print u"loop {0}".format(count)
- if skill1_val > max1 or skill2_val > max2:
- # over value
- return None
+ return result_dict
+ """
+ raise NotImplementedError(u"too heavy and long to calc")
- suff_val = (10 * skill1_val) // max1 + (10 * skill2_val) // max2
- return suff_val
+ def select_seed1s_from_names(self,
+ amulet_name, skill1_name, skill1_val, skill2_name, skill2_val, slot_num):
+ u""" 指定されたお守り名、スキル名、スキル値、スロット数において、
+ 条件を満たすお守りが発生するSeed2とSeed1のペアを検索する。
+ return {seed2s: (seed1s_555, seed1s_888} """
+ u"""
+ if (amulet_name in self._amu_name2id and
+ skill1_name in self._skill_name2id and
+ skill2_name in self._skill_name2id):
+ amulet_id = self._amu_name2id[amulet_name]
+ skill1_id = self._skill_name2id[skill1_name]
+ skill2_id = self._skill_name2id[skill2_name]
+ return self.select_seed1s_from_ids(amulet_id,
+ skill1_id, skill1_val, skill2_id, skill2_val, slot_num)
+ else:
+ return {}
+ """
+ raise NotImplementedError(u"too heavy and long to calc")
if amulet_name in self._minmax_dict_by_name:
skill1_minmax, skill2_minmax = self._minmax_dict_by_name[amulet_name]
if skill1_name in skill1_minmax:
- max1 = skill1_minmax[skill1_name]
+ min1, max1 = skill1_minmax[skill1_name]
skill1_val = 0 if skill1_val < 0 else skill1_val
else:
# cannot find skill1
return None
if skill2_name in skill2_minmax:
- max2 = skill2_minmax[skill2_name]
+ min2, max2 = skill2_minmax[skill2_name]
skill2_val = 0 if skill2_val < 0 else skill2_val
else:
max2 = 1
return self._amulet_searcher.simple_select_seed2s_from_names(
amulet_name, skill1_name, skill1_val, skill2_name, skill2_val, slot_num)
+ def select_seed1s_from_fixed_seed2(self,
+ seed2, amulet_name, skill1_name, skill1_val, skill2_name, skill2_val, slot_num):
+ u""" 指定されたSeed2, スキルId、スキル値、スロット数において、
+ 条件を満たすお守りが発生するSeed1を検索する
+ return (seed1s_555, seed1s_888)"""
+ return self._amulet_searcher.select_seed1s_from_fixed_seed2_names(
+ seed2, amulet_name, skill1_name, skill1_val, skill2_name, skill2_val, slot_num)
+
+ def select_seed1s_from_names(self,
+ amulet_name, skill1_name, skill1_val, skill2_name, skill2_val, slot_num):
+ u""" 指定されたお守り名、スキル名、スキル値、スロット数において、
+ 条件を満たすお守りが発生するSeed2とSeed1のペアを検索する。
+ return {seed2:( seed1s_555, seed1s_888)} """
+ u"""
+ return self._amulet_searcher.select_seed1s_from_names(amulet_name,
+ skill1_name, skill1_val, skill2_name, skill2_val, slot_num)
+ """
+ raise NotImplementedError(u"Too heavy and long to calculate!")
+
u""" 錬金シミュレーター """
def simulate_nazo(self, seed1, seed2):
u""" なぞの錬金
result_dict[no] = (seed1, result_num, amulet_names, skill_names)
return result_dict
+
+ def select_seed1s_from_skill_pos_ids(self, amulet_id, skill1_id, skill_pos, key_alchemy):
+ u""" 指定されたお守りId,スキルIdを指定された枠に持つSeed1を返す """
+ if (key_alchemy == mh4constnumbers.KEY_TENUN555 or
+ key_alchemy == mh4constnumbers.KEY_TENUN888):
+ table_name = NAME.format(alchemy_type=key_alchemy)
+ else:
+ raise NotImplementedError(u"this alchemy type is not supported")
+
+ skill_col = COL_SKILL1_LIST[skill_pos]
+ amulet_col = COL_AMULET_LIST[skill_pos]
+ sql = SELECT_SEED1_BY_SKILL1_SQL.format(table_name=table_name,
+ skill1_col=skill_col, skill1_id=skill1_id,
+ amulet_col=amulet_col, amulet_id=amulet_id)
+ self._cursor.execute(sql)
+ return set([x[0] for x in self._cursor.fetchall()])
+
skill_id5=COL_SKILL2_ID5,
skill_id6=COL_SKILL2_ID6,
skill_id7=COL_SKILL2_ID7)
+COUNT_SKILL2_POS_SQL = u"""select count({seed2}) from {{table_name}}
+where {seed2}={{seed2}} and {{skill_pos}}={{skill2_id}}""".format(
+ seed2=COL_SEED2)
+SELECT_SEED2_FROM_SKILL2_SQL = u"""select {seed2} from {{table_name}} where
+ {skill_id1} = {{skill2_id}} or
+ {skill_id2} = {{skill2_id}} or
+ {skill_id3} = {{skill2_id}} or
+ {skill_id4} = {{skill2_id}} or
+ {skill_id5} = {{skill2_id}} or
+ {skill_id6} = {{skill2_id}} or
+ {skill_id7} = {{skill2_id}} """.format(
+ seed2=COL_SEED2,
+ skill_id1=COL_SKILL2_ID1,
+ skill_id2=COL_SKILL2_ID2,
+ skill_id3=COL_SKILL2_ID3,
+ skill_id4=COL_SKILL2_ID4,
+ skill_id5=COL_SKILL2_ID5,
+ skill_id6=COL_SKILL2_ID6,
+ skill_id7=COL_SKILL2_ID7)
class Seed2Skill2TableGenerator(object):
u""" Seed2とスキル名の組み合わせテーブルを作成するクラス """
names = [self._skill_id2name[x] for x in self._cursor.fetchone()]
result_dict[self._amu_id2name[amu_id]] = tuple(names)
return result_dict
+
+ def select_skill_position_from_seed2_ids(self, amulet_id, seed2, skill2_id):
+ u""" 与えられたお守りIdおよびSeed2において、
+ 指定されたスキルIdが何枠目で発生するのかを返す
+ return tuple of index"""
+ result_list = []
+ table_name = self._amu_id2table_name[amulet_id]
+ for i, col in enumerate(COL_SKILL2_LIST):
+ sql = COUNT_SKILL2_POS_SQL.format(
+ seed2=seed2,
+ table_name=table_name,
+ skill2_id=skill2_id,
+ skill_pos=col)
+ self._cursor.execute(sql)
+ count = self._cursor.fetchone()[0]
+ if count > 0:
+ result_list.append(i)
+ return tuple(result_list)
+
+ def select_skill_position_from_seed2_names(self, amulet_name, seed2, skill2_name):
+ u""" 与えられたお守り名およびSeed2において、
+ 指定されたスキル名が何枠目で発生するのかを返す
+ return tuple of index"""
+ if amulet_name in self._amu_name2id and skill2_name in self._skill_name2id:
+ amulet_id = self._amu_name2id[amulet_name]
+ skill2_id = self._skill_name2id[skill2_name]
+ return self.select_skill_position_from_seed2_ids(amulet_id, seed2, skill2_name)
+ else:
+ return tuple()
+
+ def select_seed2s_from_skill2_id(self, amulet_id, skill2_id):
+ u""" 指定されたお守りIdで指定されたスキルIdを持つSeed2を返す """
+ table_name = self._amu_id2table_name[amulet_id]
+ sql = SELECT_SEED2_FROM_SKILL2_SQL.format(table_name=table_name,
+ skill2_id=skill2_id)
+ self._cursor.execute(sql)
+ return set([x[0] for x in self._cursor.fetchall()])
A. アプリケーションの置かれているディレクトリに日本語が含まれていると起動しない可能性があります。
Cドライブ直下にフォルダを移動するなどしてから起動してみてください。
+Q. お守り検索タブから錬金シミュレーターに移動できない
+A. Seed表のセルを選択するのではなく、左端の列ラベルをクリックして列全体を選択するようにして下さい。
+ どうも使用ライブラリのバグらしいです。
+
-------------------------------------------------
更新情報
-------------------------------------------------
SIMULATOR_GRID_ROW_DICT = {KEY_NAZO:0, KEY_KOMYOU:1, KEY_INISHIE:2, KEY_TENUN:(3,4,5,6,7,8,9)}
# amulet seed2s grid
-LABEL_FORMAT_AMULET_SEED2S_GRID_COL1 = u"判定値の種類"
-NUM_AMULET_SEED2S_GRID_COL = 1
-
-LABEL_FORMAT_AMULET_SEED1S_GRID_COL1 = u"天運555"
-LABEL_FORMAT_AMULET_SEED1S_GRID_COL2 = u"天運888"
-NUM_AMULET_SEED1S_GRID_COL = 2
+LABEL_FORMAT_AMULET_SEEDS_GRID_COL1 = u"Seed"
+LABEL_FORMAT_AMULET_SEEDS_GRID_COL2 = u"種類"
+NUM_AMULET_SEEDS_GRID_COL = 2
SEARCH_TYPE_SEED2 = 1
SEARCH_TYPE_SEED1_SEED2 = 2
SEARCH_TYPE_FIXED_SEED2 = 3
+SEARCH_TYPE_SEED2_COL1 = u"Seed2"
+SEARCH_TYPE_SEED2_COL2 = u"判定値の種類"
+SEARCH_TYPE_SEED2_FILTER1 = u"すべて表示"
+SEARCH_TYPE_SEED2_FILTER2 = u"判定値1のみ"
+SEARCH_TYPE_SEED2_FILTER3 = u"判定値2のみ"
+SEARCH_TYPE_FIXED_SEED2_COL1 = u"Seed1"
+SEARCH_TYPE_FIXED_SEED2_COL2 = u"天運の種類"
+SEARCH_TYPE_FIXED_SEED2_FILTER1 = u"すべて表示"
+SEARCH_TYPE_FIXED_SEED2_FILTER2 = u"天運555のみ"
+SEARCH_TYPE_FIXED_SEED2_FILTER3 = u"天運888のみ"
# page index
SKILL2_SEARCH_PAGE = 1
SKILL1_SEARCH_PAGE = 3
+ALCHEMY_SIMULATE_PAGE = 4
# skill vals
SLOT_MIN = 1
<object class="notebookpage" expanded="1">
<property name="bitmap"></property>
<property name="label">Seed2の特定</property>
- <property name="select">0</property>
+ <property name="select">1</property>
<object class="wxPanel" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<object class="notebookpage" expanded="1">
<property name="bitmap"></property>
<property name="label">お守り検索</property>
- <property name="select">1</property>
+ <property name="select">0</property>
<object class="wxPanel" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
- <property name="choices">"Seed2のみ(検索時間小・不確実)" "Seed1,2(検索時間大・正確)" "Seed2固定"</property>
+ <property name="choices">"Seed2のみを判定基準(不正確)" "Seed2固定"</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<event name="OnUpdateUI"></event>
</object>
</object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer28</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="spacer" expanded="1">
+ <property name="height">0</property>
+ <property name="permission">protected</property>
+ <property name="width">0</property>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER|wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">固定Seed2</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticText46</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxTextCtrl" expanded="1">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">0</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="maxlength"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">TextCtrlFixedSeed2</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
+ <property name="value"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnText"></event>
+ <event name="OnTextEnter"></event>
+ <event name="OnTextMaxLen"></event>
+ <event name="OnTextURL"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
- <property name="label">Seed2候補</property>
+ <property name="label">Seed候補</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
- <property name="name">m_staticText411</property>
+ <property name="name">LabelAmuletSearch</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
- <property name="name">GridAmuletSeed2s</property>
+ <property name="name">GridAmuletSeeds</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
- <property name="flag">wxLEFT|wxRIGHT|wxTOP</property>
+ <property name="flag">wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
- <object class="wxStaticText" expanded="1">
+ <object class="wxRadioBox" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
+ <property name="choices">"Radio Button" "Radio Button" "Radio Button"</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
- <property name="label">Seed1候補</property>
+ <property name="label">候補のフィルタリング</property>
+ <property name="majorDimension">1</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
- <property name="name">m_staticText421</property>
+ <property name="name">RadioBoxFilter</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
+ <property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
- <property name="style"></property>
+ <property name="style">wxRA_SPECIFY_ROWS</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
+ <property name="validator_data_type"></property>
+ <property name="validator_style">wxFILTER_NONE</property>
+ <property name="validator_type">wxDefaultValidator</property>
+ <property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
- <property name="wrap">-1</property>
- <event name="OnChar"></event>
- <event name="OnEnterWindow"></event>
- <event name="OnEraseBackground"></event>
- <event name="OnKeyDown"></event>
- <event name="OnKeyUp"></event>
- <event name="OnKillFocus"></event>
- <event name="OnLeaveWindow"></event>
- <event name="OnLeftDClick"></event>
- <event name="OnLeftDown"></event>
- <event name="OnLeftUp"></event>
- <event name="OnMiddleDClick"></event>
- <event name="OnMiddleDown"></event>
- <event name="OnMiddleUp"></event>
- <event name="OnMotion"></event>
- <event name="OnMouseEvents"></event>
- <event name="OnMouseWheel"></event>
- <event name="OnPaint"></event>
- <event name="OnRightDClick"></event>
- <event name="OnRightDown"></event>
- <event name="OnRightUp"></event>
- <event name="OnSetFocus"></event>
- <event name="OnSize"></event>
- <event name="OnUpdateUI"></event>
- </object>
- </object>
- <object class="sizeritem" expanded="1">
- <property name="border">5</property>
- <property name="flag">wxEXPAND | wxALL</property>
- <property name="proportion">2</property>
- <object class="wxPanel" expanded="1">
- <property name="BottomDockable">1</property>
- <property name="LeftDockable">1</property>
- <property name="RightDockable">1</property>
- <property name="TopDockable">1</property>
- <property name="aui_layer"></property>
- <property name="aui_name"></property>
- <property name="aui_position"></property>
- <property name="aui_row"></property>
- <property name="best_size"></property>
- <property name="bg"></property>
- <property name="caption"></property>
- <property name="caption_visible">1</property>
- <property name="center_pane">0</property>
- <property name="close_button">1</property>
- <property name="context_help"></property>
- <property name="context_menu">1</property>
- <property name="default_pane">0</property>
- <property name="dock">Dock</property>
- <property name="dock_fixed">0</property>
- <property name="docking">Left</property>
- <property name="enabled">1</property>
- <property name="fg"></property>
- <property name="floatable">1</property>
- <property name="font"></property>
- <property name="gripper">0</property>
- <property name="hidden">0</property>
- <property name="id">wxID_ANY</property>
- <property name="max_size"></property>
- <property name="maximize_button">0</property>
- <property name="maximum_size"></property>
- <property name="min_size"></property>
- <property name="minimize_button">0</property>
- <property name="minimum_size"></property>
- <property name="moveable">1</property>
- <property name="name">m_panel141</property>
- <property name="pane_border">1</property>
- <property name="pane_position"></property>
- <property name="pane_size"></property>
- <property name="permission">protected</property>
- <property name="pin_button">1</property>
- <property name="pos"></property>
- <property name="resize">Resizable</property>
- <property name="show">1</property>
- <property name="size"></property>
- <property name="subclass"></property>
- <property name="toolbar_pane">0</property>
- <property name="tooltip"></property>
- <property name="window_extra_style"></property>
- <property name="window_name"></property>
- <property name="window_style">wxTAB_TRAVERSAL</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
+ <event name="OnRadioBox"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
- <object class="wxBoxSizer" expanded="1">
- <property name="minimum_size"></property>
- <property name="name">bSizer211</property>
- <property name="orient">wxVERTICAL</property>
- <property name="permission">none</property>
- <object class="sizeritem" expanded="1">
- <property name="border">0</property>
- <property name="flag">wxALL|wxEXPAND</property>
- <property name="proportion">2</property>
- <object class="wxGrid" expanded="1">
- <property name="BottomDockable">1</property>
- <property name="LeftDockable">1</property>
- <property name="RightDockable">1</property>
- <property name="TopDockable">1</property>
- <property name="aui_layer"></property>
- <property name="aui_name"></property>
- <property name="aui_position"></property>
- <property name="aui_row"></property>
- <property name="autosize_cols">0</property>
- <property name="autosize_rows">0</property>
- <property name="best_size"></property>
- <property name="bg"></property>
- <property name="caption"></property>
- <property name="caption_visible">1</property>
- <property name="cell_bg"></property>
- <property name="cell_font"></property>
- <property name="cell_horiz_alignment">wxALIGN_LEFT</property>
- <property name="cell_text"></property>
- <property name="cell_vert_alignment">wxALIGN_TOP</property>
- <property name="center_pane">0</property>
- <property name="close_button">1</property>
- <property name="col_label_horiz_alignment">wxALIGN_CENTRE</property>
- <property name="col_label_size">30</property>
- <property name="col_label_values"></property>
- <property name="col_label_vert_alignment">wxALIGN_CENTRE</property>
- <property name="cols">5</property>
- <property name="column_sizes"></property>
- <property name="context_help"></property>
- <property name="context_menu">1</property>
- <property name="default_pane">0</property>
- <property name="dock">Dock</property>
- <property name="dock_fixed">0</property>
- <property name="docking">Left</property>
- <property name="drag_col_move">0</property>
- <property name="drag_col_size">1</property>
- <property name="drag_grid_size">0</property>
- <property name="drag_row_size">1</property>
- <property name="editing">1</property>
- <property name="enabled">1</property>
- <property name="fg"></property>
- <property name="floatable">1</property>
- <property name="font"></property>
- <property name="grid_line_color"></property>
- <property name="grid_lines">1</property>
- <property name="gripper">0</property>
- <property name="hidden">0</property>
- <property name="id">wxID_ANY</property>
- <property name="label_bg"></property>
- <property name="label_font"></property>
- <property name="label_text"></property>
- <property name="margin_height">0</property>
- <property name="margin_width">0</property>
- <property name="max_size"></property>
- <property name="maximize_button">0</property>
- <property name="maximum_size"></property>
- <property name="min_size"></property>
- <property name="minimize_button">0</property>
- <property name="minimum_size"></property>
- <property name="moveable">1</property>
- <property name="name">GridAmuletSeed1s</property>
- <property name="pane_border">1</property>
- <property name="pane_position"></property>
- <property name="pane_size"></property>
- <property name="permission">protected</property>
- <property name="pin_button">1</property>
- <property name="pos"></property>
- <property name="resize">Resizable</property>
- <property name="row_label_horiz_alignment">wxALIGN_CENTRE</property>
- <property name="row_label_size">80</property>
- <property name="row_label_values"></property>
- <property name="row_label_vert_alignment">wxALIGN_CENTRE</property>
- <property name="row_sizes"></property>
- <property name="rows">5</property>
- <property name="show">1</property>
- <property name="size"></property>
- <property name="subclass"></property>
- <property name="toolbar_pane">0</property>
- <property name="tooltip"></property>
- <property name="window_extra_style"></property>
- <property name="window_name"></property>
- <property name="window_style"></property>
- <event name="OnChar"></event>
- <event name="OnEnterWindow"></event>
- <event name="OnEraseBackground"></event>
- <event name="OnGridCellChange"></event>
- <event name="OnGridCellLeftClick"></event>
- <event name="OnGridCellLeftDClick"></event>
- <event name="OnGridCellRightClick"></event>
- <event name="OnGridCellRightDClick"></event>
- <event name="OnGridCmdCellChange"></event>
- <event name="OnGridCmdCellLeftClick"></event>
- <event name="OnGridCmdCellLeftDClick"></event>
- <event name="OnGridCmdCellRightClick"></event>
- <event name="OnGridCmdCellRightDClick"></event>
- <event name="OnGridCmdColSize"></event>
- <event name="OnGridCmdEditorCreated"></event>
- <event name="OnGridCmdEditorHidden"></event>
- <event name="OnGridCmdEditorShown"></event>
- <event name="OnGridCmdLabelLeftClick"></event>
- <event name="OnGridCmdLabelLeftDClick"></event>
- <event name="OnGridCmdLabelRightClick"></event>
- <event name="OnGridCmdLabelRightDClick"></event>
- <event name="OnGridCmdRangeSelect"></event>
- <event name="OnGridCmdRowSize"></event>
- <event name="OnGridCmdSelectCell"></event>
- <event name="OnGridColSize"></event>
- <event name="OnGridEditorCreated"></event>
- <event name="OnGridEditorHidden"></event>
- <event name="OnGridEditorShown"></event>
- <event name="OnGridLabelLeftClick"></event>
- <event name="OnGridLabelLeftDClick"></event>
- <event name="OnGridLabelRightClick"></event>
- <event name="OnGridLabelRightDClick"></event>
- <event name="OnGridRangeSelect"></event>
- <event name="OnGridRowSize"></event>
- <event name="OnGridSelectCell"></event>
- <event name="OnKeyDown"></event>
- <event name="OnKeyUp"></event>
- <event name="OnKillFocus"></event>
- <event name="OnLeaveWindow"></event>
- <event name="OnLeftDClick"></event>
- <event name="OnLeftDown"></event>
- <event name="OnLeftUp"></event>
- <event name="OnMiddleDClick"></event>
- <event name="OnMiddleDown"></event>
- <event name="OnMiddleUp"></event>
- <event name="OnMotion"></event>
- <event name="OnMouseEvents"></event>
- <event name="OnMouseWheel"></event>
- <event name="OnPaint"></event>
- <event name="OnRightDClick"></event>
- <event name="OnRightDown"></event>
- <event name="OnRightUp"></event>
- <event name="OnSetFocus"></event>
- <event name="OnSize"></event>
- <event name="OnUpdateUI"></event>
- </object>
- </object>
- </object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="gripper">0</property>
<property name="hidden"></property>
<property name="id">wxID_ANY</property>
- <property name="label">Seed2対å¿\9cã\82¹ã\82ã\83«è¡¨ç¤º</property>
+ <property name="label">ã\82·ã\83\9fã\83¥ã\83¬ã\83¼ã\82¿ã\83¼ã\81«è¡¨ç¤º</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
- <property name="name">ButtonAmuletSearchSkill2</property>
+ <property name="name">ButtonAmuletToSimulator</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<object class="wxNotebook" name="NoteBookMain">
<object class="notebookpage">
<label>Seed2の特定</label>
- <selected>0</selected>
+ <selected>1</selected>
<object class="wxPanel" name="NoteBookPanelSeed2">
<style>wxTAB_TRAVERSAL</style>
<object class="wxBoxSizer">
</object>
<object class="notebookpage">
<label>お守り検索</label>
- <selected>1</selected>
+ <selected>0</selected>
<object class="wxPanel" name="NoteBookPanelAmuletSearch">
<style>wxTAB_TRAVERSAL</style>
<object class="wxBoxSizer">
<label>検索方法</label>
<selection>0</selection>
<content>
- <item>Seed2のみ(検索時間小・不確実)</item>
- <item>Seed1,2(検索時間大・正確)</item>
+ <item>Seed2のみを判定基準(不正確)</item>
<item>Seed2固定</item>
</content>
<dimension>1</dimension>
</object>
<object class="sizeritem">
<option>0</option>
+ <flag>wxEXPAND|wxLEFT|wxRIGHT</flag>
+ <border>5</border>
+ <object class="wxBoxSizer">
+ <orient>wxHORIZONTAL</orient>
+ <object class="spacer">
+ <option>1</option>
+ <flag>wxEXPAND</flag>
+ <border>5</border>
+ <size>0,0</size>
+ </object>
+ <object class="sizeritem">
+ <option>0</option>
+ <flag>wxALIGN_CENTER|wxALL</flag>
+ <border>5</border>
+ <object class="wxStaticText" name="m_staticText46">
+ <label>固定Seed2</label>
+ <wrap>-1</wrap>
+ </object>
+ </object>
+ <object class="sizeritem">
+ <option>0</option>
+ <flag>wxALL</flag>
+ <border>5</border>
+ <object class="wxTextCtrl" name="TextCtrlFixedSeed2">
+ <enabled>0</enabled>
+ <value></value>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem">
+ <option>0</option>
<flag>wxALL|wxEXPAND</flag>
<border>5</border>
<object class="wxBoxSizer">
<option>0</option>
<flag>wxLEFT|wxRIGHT|wxTOP</flag>
<border>5</border>
- <object class="wxStaticText" name="m_staticText411">
- <label>Seed2候補</label>
+ <object class="wxStaticText" name="LabelAmuletSearch">
+ <label>Seed候補</label>
<wrap>-1</wrap>
</object>
</object>
<option>2</option>
<flag>wxALL|wxEXPAND</flag>
<border>0</border>
- <object class="wxGrid" name="GridAmuletSeed2s" />
+ <object class="wxGrid" name="GridAmuletSeeds" />
</object>
</object>
</object>
</object>
<object class="sizeritem">
<option>0</option>
- <flag>wxLEFT|wxRIGHT|wxTOP</flag>
- <border>5</border>
- <object class="wxStaticText" name="m_staticText421">
- <label>Seed1候補</label>
- <wrap>-1</wrap>
- </object>
- </object>
- <object class="sizeritem">
- <option>2</option>
- <flag>wxEXPAND | wxALL</flag>
+ <flag>wxEXPAND|wxLEFT|wxRIGHT</flag>
<border>5</border>
- <object class="wxPanel" name="m_panel141">
- <style>wxTAB_TRAVERSAL</style>
- <object class="wxBoxSizer">
- <orient>wxVERTICAL</orient>
- <object class="sizeritem">
- <option>2</option>
- <flag>wxALL|wxEXPAND</flag>
- <border>0</border>
- <object class="wxGrid" name="GridAmuletSeed1s" />
- </object>
- </object>
+ <object class="wxRadioBox" name="RadioBoxFilter">
+ <style>wxRA_SPECIFY_ROWS</style>
+ <label>候補のフィルタリング</label>
+ <selection>0</selection>
+ <content>
+ <item>Radio Button</item>
+ <item>Radio Button</item>
+ <item>Radio Button</item>
+ </content>
+ <dimension>1</dimension>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag></flag>
<border>0</border>
- <object class="wxButton" name="ButtonAmuletSearchSkill2">
+ <object class="wxButton" name="ButtonAmuletToSimulator">
<enabled>0</enabled>
- <label>Seed2対å¿\9cã\82¹ã\82ã\83«è¡¨ç¤º</label>
+ <label>ã\82·ã\83\9fã\83¥ã\83¬ã\83¼ã\82¿ã\83¼ã\81«è¡¨ç¤º</label>
<default>0</default>
</object>
</object>
def set_seed_values(self, seed1, seed2):
u""" TextCtrlに与えられた値をセットする"""
- self.text_ctrl_seed1.SetValue(u"{0}".format(seed1))
- self.text_ctrl_seed2.SetValue(u"{0}".format(seed2))
+ if seed1 is not None:
+ self.text_ctrl_seed1.SetValue(u"{0}".format(seed1))
+ else:
+ self.text_ctrl_seed1.SetValue(u"")
+ if seed2 is not None:
+ self.text_ctrl_seed2.SetValue(u"{0}".format(seed2))
+ else:
+ self.text_ctrl_seed2.SetValue(u"")
def clear_seed_values(self):
u""" TextCtrlに与えられた値をセットする"""
self.frame = frame
self._init_view()
self._init_event()
+ self.update_filter_radio()
+ self._last_search_type = None
def _init_view(self):
# initialize view
# button
self.button_search = xrc.XRCCTRL(self.frame, "ButtonAmuletSearchSearch")
self.button_clear = xrc.XRCCTRL(self.frame, "ButtonAmuletSearchClear")
- self.button_skill2 = xrc.XRCCTRL(self.frame, "ButtonAmuletSearchSkill2")
+ self.button_simulate = xrc.XRCCTRL(self.frame, "ButtonAmuletToSimulator")
self.ID_BUTTON_SEARCH = xrc.XRCID("ButtonAmuletSearchSearch")
self.ID_BUTTON_CLEAR = xrc.XRCID("ButtonAmuletSearchClear")
- self.ID_BUTTON_SKILL = xrc.XRCID("ButtonAmuletSearchSkill2")
+ self.ID_BUTTON_SIMULATE = xrc.XRCID("ButtonAmuletToSimulator")
# radio button
self.radiobox_amulet = xrc.XRCCTRL(self.frame, "RadioBoxAmulet")
self.radiobox_search_type = xrc.XRCCTRL(self.frame, "RadioBoxSearchType")
-
- # seed2s list
- self.grid_seed2s = xrc.XRCCTRL(self.frame, "GridAmuletSeed2s")
- self.grid_seed2s.CreateGrid(1, constnumbers.NUM_AMULET_SEED2S_GRID_COL)
- self.grid_seed2s.SetColLabelValue(0, constnumbers.LABEL_FORMAT_AMULET_SEED2S_GRID_COL1)
- self.grid_seed2s.DisableDragGridSize()
- self.grid_seed2s.EnableEditing(False)
- self.grid_seed2s.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
-
- # seed1s list
- self.grid_seed1s = xrc.XRCCTRL(self.frame, "GridAmuletSeed1s")
- self.grid_seed1s.CreateGrid(1, constnumbers.NUM_AMULET_SEED1S_GRID_COL)
- self.grid_seed1s.SetColLabelValue(0, constnumbers.LABEL_FORMAT_AMULET_SEED1S_GRID_COL1)
- self.grid_seed1s.SetColLabelValue(1, constnumbers.LABEL_FORMAT_AMULET_SEED1S_GRID_COL2)
- self.grid_seed1s.DisableDragGridSize()
- self.grid_seed1s.EnableEditing(False)
- self.grid_seed1s.SetRowLabelSize(1)
+ self.radiobox_filter = xrc.XRCCTRL(self.frame, "RadioBoxFilter")
+
+ # seeds grid
+ self.grid_seeds = xrc.XRCCTRL(self.frame, "GridAmuletSeeds")
+ self.grid_seeds.CreateGrid(1, constnumbers.NUM_AMULET_SEEDS_GRID_COL)
+ self.grid_seeds.SetColLabelValue(0, constnumbers.LABEL_FORMAT_AMULET_SEEDS_GRID_COL1)
+ self.grid_seeds.SetColLabelValue(1, constnumbers.LABEL_FORMAT_AMULET_SEEDS_GRID_COL2)
+ self.grid_seeds.DisableDragGridSize()
+ self.grid_seeds.EnableEditing(False)
+ self.grid_seeds.SetRowLabelSize(30)
+ self.grid_seeds.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
# spin ctrl
self.spin_ctrl_skill1_val = xrc.XRCCTRL(self.frame, "SpinCtrlAmuletSearchSkill1Value")
# text ctrl
self.text_ctrl_result = xrc.XRCCTRL(self.frame, "TextCtrlAmuletSearchResult")
+ self.text_ctrl_seed2 = xrc.XRCCTRL(self.frame, "TextCtrlFixedSeed2")
# set min & max of slot
self.set_slot_minmax(constnumbers.SLOT_MIN, constnumbers.SLOT_MAX)
def _init_event(self):
# initialize event
- self.grid_seed1s.Bind(wx.EVT_SIZE, self.OnSeed1GridSizeChanged)
- self.grid_seed2s.Bind(wx.EVT_SIZE, self.OnSeed2GridSizeChanged)
+ self.grid_seeds.Bind(wx.EVT_SIZE, self.OnSeedGridSizeChanged)
self.combo_box_skill1.Bind(wx.EVT_COMBOBOX, self.OnComboSkill1Changed)
self.combo_box_skill2.Bind(wx.EVT_COMBOBOX, self.OnComboSkill2Changed)
self.radiobox_amulet.Bind(wx.EVT_RADIOBOX, self.OnRadioAmuletChanged)
+ self.radiobox_search_type.Bind(wx.EVT_RADIOBOX, self.OnRadioSearchTypeChanged)
+ self.radiobox_filter.Bind(wx.EVT_RADIOBOX, self.OnRadioFilterChanged)
- def OnSeed1GridSizeChanged(self, event):
- u""" Seed1Gridサイズの変更時 """
- width, height = self.grid_seed1s.GetParent().GetSize()
- each_width = (width) / (constnumbers.NUM_AMULET_SEED1S_GRID_COL) # consider margin size
- self.grid_seed1s.SetRowLabelValue(0, u"")
- for col in range(constnumbers.NUM_AMULET_SEED1S_GRID_COL):
- self.grid_seed1s.SetColSize(col, each_width)
-
- def OnSeed2GridSizeChanged(self, event):
- u""" Seed2Gridサイズの変更時 """
- width, height = self.grid_seed2s.GetParent().GetSize()
- each_width = (width - 60) / (constnumbers.NUM_AMULET_SEED2S_GRID_COL) # consider margin size
- self.grid_seed2s.SetRowLabelSize(45)
- for col in range(constnumbers.NUM_AMULET_SEED2S_GRID_COL):
- self.grid_seed2s.SetColSize(col, each_width)
+ def OnSeedGridSizeChanged(self, event):
+ u""" SeedGridサイズの変更時 """
+ width, height = self.grid_seeds.GetParent().GetSize()
+ each_width = (width-40) / (constnumbers.NUM_AMULET_SEEDS_GRID_COL) # consider margin size
+ #self.grid_seeds.SetRowLabelValue(0, u"")
+ for col in range(constnumbers.NUM_AMULET_SEEDS_GRID_COL):
+ self.grid_seeds.SetColSize(col, each_width)
def OnComboSkill1Changed(self, event):
u""" スキル1のコンボボックスの変更時 """
def OnRadioAmuletChanged(self, event):
u""" お守り選択のラジオボタン変更時 """
self.update_skill_names()
+ self.update_skill_minmax()
+
+ def OnRadioSearchTypeChanged(self, event):
+ u""" お守り選択のラジオボタン変更時 """
+ search_type = self.get_selected_search_type()
+ if search_type == constnumbers.SEARCH_TYPE_FIXED_SEED2:
+ self.text_ctrl_seed2.Enable()
+ else:
+ self.text_ctrl_seed2.Disable()
+
+ def OnRadioFilterChanged(self, event):
+ u""" 結果表示のフィルターラジオボックスの変更時 """
+ if self._last_search_type == None:
+ pass
+ elif self._last_search_type == constnumbers.SEARCH_TYPE_SEED2:
+ self._set_items_dict_only_seed2()
+ elif self._last_search_type == constnumbers.SEARCH_TYPE_FIXED_SEED2:
+ self._set_items_dict_fixed_seed2()
+ else:
+ raise NotImplementedError("irregular radio button selected")
def bind_radiobox_search_type(self, event_func, evt=wx.EVT_RADIOBOX):
u""" 判定値の種類のラジオボタンが押された時のイベントをセットする """
u""" クリアボタンが押された時のイベントをセットする """
self.button_clear.Bind(evt, event_func)
- def bind_button_skill2(self, event_func, evt=wx.EVT_BUTTON):
- u""" ã\82¹ã\82ã\83«2æ¤\9cç´¢ボタンが押された時のイベントをセットする """
- self.button_skill2.Bind(evt, event_func)
+ def bind_button_simulate(self, event_func, evt=wx.EVT_BUTTON):
+ u""" ã\82·ã\83\9fã\83¥ã\83¬ã\83¼ã\82¿ã\83¼ç§»å\8b\95ボタンが押された時のイベントをセットする """
+ self.button_simulate.Bind(evt, event_func)
def set_skillminmax_dict(self, skill_names, amulet_names, minmax_dict):
u"""スキル名のリスト、お守り名のリスト、
u""" 選択されたお守り名に応じてスキル名のリストを更新する """
amu_name = self.get_selected_amulet()
skill1_minmax, skill2_minmax = self._minmax_dict[amu_name]
-
self.combo_box_skill1.SetItems([x for x in self._skill_names if x in skill1_minmax])
self.combo_box_skill2.SetItems([constnumbers.VAL_NO_SKILL] +
[x for x in self._skill_names if x in skill2_minmax])
else:
self.spin_ctrl_skill2_val.SetRange(0, 0)
+ def update_filter_radio(self):
+ u""" 検索方式に応じて結果表示のフィルターを変える """
+ search_type = self.get_selected_search_type()
+ if search_type == constnumbers.SEARCH_TYPE_SEED2:
+ self.radiobox_filter.SetItemLabel(0, constnumbers.SEARCH_TYPE_SEED2_FILTER1)
+ self.radiobox_filter.SetItemLabel(1, constnumbers.SEARCH_TYPE_SEED2_FILTER2)
+ self.radiobox_filter.SetItemLabel(2, constnumbers.SEARCH_TYPE_SEED2_FILTER3)
+ self.grid_seeds.SetColLabelValue(0, constnumbers.SEARCH_TYPE_SEED2_COL1)
+ self.grid_seeds.SetColLabelValue(1, constnumbers.SEARCH_TYPE_SEED2_COL2)
+ elif search_type == constnumbers.SEARCH_TYPE_FIXED_SEED2:
+ self.radiobox_filter.SetItemLabel(0, constnumbers.SEARCH_TYPE_FIXED_SEED2_FILTER1)
+ self.radiobox_filter.SetItemLabel(1, constnumbers.SEARCH_TYPE_FIXED_SEED2_FILTER2)
+ self.radiobox_filter.SetItemLabel(2, constnumbers.SEARCH_TYPE_FIXED_SEED2_FILTER3)
+ self.grid_seeds.SetColLabelValue(0, constnumbers.SEARCH_TYPE_FIXED_SEED2_COL1)
+ self.grid_seeds.SetColLabelValue(1, constnumbers.SEARCH_TYPE_FIXED_SEED2_COL2)
+ else:
+ raise NotImplementedError("irregular radio button selected")
+
def set_slot_minmax(self, slot_min, slot_max):
u""" スロットの最大値と最小値をセットする """
self.spin_ctrl_slot_num.SetRange(slot_min, slot_max)
self.spin_ctrl_skill1_val.SetValue(1)
self.spin_ctrl_skill2_val.SetValue(0)
self.spin_ctrl_slot_num.SetValue(1)
+ self.text_ctrl_seed2.SetValue(u"")
+ self.text_ctrl_result.SetValue(u"")
+
+ def get_fixed_seed2(self):
+ u""" seed2固定検索時のSeed2を返す """
+ seed2 = self.text_ctrl_seed2.GetValue()
+ if seed2.isdigit():
+ return int(seed2)
+ else:
+ return None
def set_selected_amulet(self, value, amulet_name=constnumbers.NAME_AMULET1):
u""" ラジオボタンの値をセットする
if idx == 0:
return constnumbers.SEARCH_TYPE_SEED2
elif idx == 1:
- return constnumbers.SEARCH_TYPE_SEED1_SEED2
- elif idx == 2:
return constnumbers.SEARCH_TYPE_FIXED_SEED2
+ elif idx == 2:
+ return constnumbers.SEARCH_TYPE_SEED1_SEED2
else:
raise NotImplementedError("irregular radio button selected")
+ def get_selected_tenun_type(self):
+ u""" 固定Seed2における天運の種類を返す。判別できない場合はNone """
+ if self._last_search_type == constnumbers.SEARCH_TYPE_FIXED_SEED2:
+ filter_str = self.radiobox_filter.GetStringSelection()
+ if filter_str == constnumbers.SEARCH_TYPE_FIXED_SEED2_FILTER1:
+ return constnumbers.KEY_TENUN888
+ elif filter_str == constnumbers.SEARCH_TYPE_FIXED_SEED2_FILTER2:
+ return constnumbers.KEY_TENUN555
+ elif filter_str == constnumbers.SEARCH_TYPE_FIXED_SEED2_FILTER3:
+ return constnumbers.KEY_TENUN888
+ else:
+ return None
+
def get_skill_names(self):
u""" skill1, skill2で選択されているスキル名を返す
return (skill1_name, skill2_name)"""
self.combo_box_skill1.SetItems(skill1_names)
self.combo_box_skill2.SetItems(skill2_names)
- def set_skill_button_enable(self, value):
+ def set_simualte_button_enable(self, value):
u""" 対応スキル検索ボタンの有効・無効の切り替え """
if value is True:
- self.button_skill.Enable()
+ self.button_simulate.Enable()
else:
- self.button_skill.Disable()
+ self.button_simulate.Disable()
def set_result(self, value):
u""" 結果表示用のTextCtrlに値をセットする """
def set_result_only_seed2(self, suff_val, threshold, th1_seed2s, th2_seed2s):
u""" Seed2のみからの検索結果表示用に値をセットする """
+ self.update_filter_radio()
seed2s = th1_seed2s | th2_seed2s
- self.text_ctrl_result.SetValue(u"""充足値: {0}, 必要な判定値: {1}
+ self.text_ctrl_result.SetValue(u"""※簡易検索のため、不正確な場合があります
+充足値: {0}, 必要な判定値: {1}
{1}以上の判定値1を持つSeed2: {2}
{1}以上の判定値2を持つSeed2: {3}
{1}以上の判定値を持つSeed2: {4}""".format(
suff_val, threshold, len(th1_seed2s), len(th2_seed2s), len(seed2s)))
+ self._last_search_type = constnumbers.SEARCH_TYPE_SEED2
+ self._last_values = (suff_val, threshold, th1_seed2s, th2_seed2s)
+ self._set_items_dict_only_seed2()
+
+ def _set_items_dict_only_seed2(self):
+ u""" Seed2のみからの検索時結果をフィルターに応じて表示 """
+ if self._last_search_type == constnumbers.SEARCH_TYPE_SEED2:
+ filter_str = self.radiobox_filter.GetStringSelection()
+ if filter_str == constnumbers.SEARCH_TYPE_SEED2_FILTER1:
+ th1_include, th2_include = True, True
+ elif filter_str == constnumbers.SEARCH_TYPE_SEED2_FILTER2:
+ th1_include, th2_include = True, False
+ elif filter_str == constnumbers.SEARCH_TYPE_SEED2_FILTER3:
+ th1_include, th2_include = False, True
+
+ suff_val, threshold, th1_seed2s, th2_seed2s = self._last_values
+ seed2s = th1_seed2s | th2_seed2s
+ items_dict = {}
+ for seed2 in seed2s:
+ texts = []
+ is_include = False
+ if seed2 in th1_seed2s:
+ texts.append(u"判定値1")
+ if th1_include:
+ is_include = True
+ if seed2 in th2_seed2s:
+ texts.append(u"判定値2")
+ if th2_include:
+ is_include = True
+ if is_include:
+ texts = u", ".join(texts)
+ texts = u"Seed2({0})".format(texts) if len(texts) > 0 else texts
+ items_dict[seed2] = texts
+ self.set_grid_seeds_items(items_dict)
+
+ def set_result_fixed_seed2(self, suff_val, threshold, seed2, seed1s_555, seed1s_888):
+ u""" 固定Seed2からの検索結果表示用に値をセットする """
+ self.update_filter_radio()
+ seed1s = seed1s_555 | seed1s_888
+ self.text_ctrl_result.SetValue(u"""Seed2:\t{0}
+充足値: {1}, 必要な判定値: {2}
+天運555におけるSeed1:\t{3}
+天運888におけるSeed1:\t{4}
+Seed1の合計:\t{5}""".format(seed2, suff_val, threshold, len(seed1s_555), len(seed1s_888), len(seed1s)))
+
+ self._last_search_type = constnumbers.SEARCH_TYPE_FIXED_SEED2
+ self._last_values = (suff_val, threshold, seed2, seed1s_555, seed1s_888)
+ self._set_items_dict_fixed_seed2()
+
+ def _set_items_dict_fixed_seed2(self):
+ u""" 固定Seed2からの検索時結果をフィルターに応じて表示 """
+ if self._last_search_type == constnumbers.SEARCH_TYPE_FIXED_SEED2:
+ filter_str = self.radiobox_filter.GetStringSelection()
+ if filter_str == constnumbers.SEARCH_TYPE_FIXED_SEED2_FILTER1:
+ include_555, include_888 = True, True
+ elif filter_str == constnumbers.SEARCH_TYPE_FIXED_SEED2_FILTER2:
+ include_555, include_888 = True, False
+ elif filter_str == constnumbers.SEARCH_TYPE_FIXED_SEED2_FILTER3:
+ include_555, include_888 = False, True
+
+ items_dict = {}
+ suff_val, threshold, seed2, seed1s_555, seed1s_888 = self._last_values
+ seed1s = seed1s_555 | seed1s_888
+ for seed1 in seed1s:
+ texts = []
+ is_include = False
+ if seed1 in seed1s_555:
+ texts.append(u"天運555")
+ if include_555:
+ is_include = True
+ if seed1 in seed1s_888:
+ texts.append(u"天運888")
+ if include_888:
+ is_include = True
+ if is_include:
+ texts = u", ".join(texts)
+ texts = u"Seed1({0})".format(texts) if len(texts) > 0 else texts
+ items_dict[seed1] = texts
+ self.set_grid_seeds_items(items_dict)
+
+ def set_result_seeds(self, suff_val, result_dict):
+ u""" 全検索の結果を表示する。
+ Seed2から各天運のSeed1の集合の辞書を引数とする。
+ result_dict={seed2:(seed1s_555, seed1s_888)}"""
+ u"""
+ self.text_ctrl_result.SetValue(u"充足値: {0} Seed2の総数:\t{1}".format(suff_val, len(result_dict)))
items_dict = {}
- for seed2 in seed2s:
- texts = []
- if seed2 in th1_seed2s:
- texts.append(u"判定値1")
- if seed2 in th2_seed2s:
- texts.append(u"判定値2")
- texts = u", ".join(texts)
- texts = u"Seed2({0})".format(texts) if len(texts) > 0 else texts
- items_dict[seed2] = texts
- self.set_grid_seed2s_items(items_dict)
-
- def set_grid_seed2s_items(self, items_dict):
- u""" Seed2一覧のGridに値をセットする。
- 引数はSeed2 -> str_renkin_typeの辞書とする。
- Noneが与えられた時はClearする"""
+ for seed2, (seed1s_555, seed1s_888) in result_dict.items():
+ seed1s = seed1s_555 | seed1s_888
+ for seed1 in seed1s:
+ texts = []
+ if seed1 in seed1s_555:
+ texts.append(u"天運555")
+ if seed1 in seed1s_888:
+ texts.append(u"天運888")
+ texts = u", ".join(texts)
+ texts = u"Seed1({0})".format(texts) if len(texts) > 0 else texts
+ items_dict[(seed1, seed2)] = texts
+ self.set_grid_seeds_items(items_dict)
+ """
+ raise NotImplementedError(u"give up to implement all search because of ttoo heavy and long calc")
- if items_dict is not None:
+ def set_grid_seeds_items(self, items_dict):
+ u""" Seed一覧のGridに値をセットする。
+ 引数はSeed -> 文字列の辞書とする。
+ Noneが与えられた時はClearする"""
+ if items_dict is not None and len(items_dict) > 0:
row_num = len(items_dict)
- diff = row_num - self.grid_seed2s.GetNumberRows()
+ diff = row_num - self.grid_seeds.GetNumberRows()
if diff > 0:
- self.grid_seed2s.AppendRows(diff, False)
+ self.grid_seeds.AppendRows(diff, False)
elif diff < 0:
- self.grid_seed2s.DeleteRows(0, -diff, False)
-
- for row, seed2 in enumerate(sorted(items_dict.keys())):
- self.grid_seed2s.SetRowLabelValue(row, u"{0}".format(seed2))
- renkin_type = items_dict[seed2]
- self.grid_seed2s.SetCellValue(row, 0, renkin_type)
+ self.grid_seeds.DeleteRows(0, -diff, False)
+
+ for row, seed in enumerate(sorted(items_dict.keys())):
+ #self.grid_seeds.SetRowLabelValue(row, u"")
+ type_str = items_dict[seed]
+ self.grid_seeds.SetCellValue(row, 0, u"{0}".format(seed))
+ self.grid_seeds.SetCellValue(row, 1, type_str)
+ self.set_simualte_button_enable(True)
else:
- self.clear_grid_seed2s()
-
- def set_grid_seed1s_items(self, tenun555_seed1s, tenun888_seed1s):
- u""" Seed1一覧のGridに天運555と天運888のSeed1の値をセットする。"""
- self.clear_grid_seed1s()
- max_len = max([len(tenun555_seed1s, tenun888_seed2s)])
- diff = max_len - self.grid_seed2s.GetNumberRows()
- if diff > 0:
- self.grid_seed1s.AppendRows(diff, False)
- elif diff < 0:
- self.grid_seed1s.DeleteRows(0, -diff, False)
-
- for row in range(max_len):
- self.grid_seed1s.SetRowLabelValue(row, u"")
- for row, seed1 in enumerate(sorted(tenun555_seed1s)):
- self.grid_seed1s.SetCellValue(row, 0, seed1)
- for row, seed1 in enumerate(sorted(tenun888_seed1s)):
- self.grid_seed1s.SetCellValue(row, 1, seed1)
-
- def get_grid_selected_seed2(self):
- u""" Seed2一覧のGridの選択されたSeed2の値を得る。"""
- rows = [x for x in self.grid_seed2s.GetSelectedRows()]
- print rows
+ self.clear_grid_seeds()
+ self.set_simualte_button_enable(False)
+
+ def get_selected_seeds(self):
+ u""" Seed一覧のGridの選択された(Seed1,Seed2)の値を得る。"""
+ rows = [x for x in self.grid_seeds.GetSelectedRows()]
if len(rows) > 0:
- return int(self.grid_seed2s.GetRowLabelValue(rows[0]))
+ if self._last_search_type == constnumbers.SEARCH_TYPE_FIXED_SEED2:
+ seed1 = int(self.grid_seeds.GetCellValue(rows[0], 0))
+ seed2 = self._last_values[2]
+ return seed1, seed2
+ elif self._last_search_type == constnumbers.SEARCH_TYPE_SEED2:
+ seed1 = None
+ seed2 = int(self.grid_seeds.GetCellValue(rows[0], 0))
+ return seed1, seed2
+ else:
+ return None
else:
return None
- def set_grid_seed2s_selected_idx(self, idx):
- u""" Seed2一覧のGridの選択された行を選択状態にする。"""
- if idx >= 0 and idx < self.grid_seed2s.GetNumberRows():
- self.grid_seed2s.MakeCellVisible(idx, 0)
- self.grid_seed2s.SelectRow(idx)
-
- def set_grid_seed1_enable(self, value):
- u""" Seed1表示ボタンの有効・無効の切り替え """
- if value is True:
- self.grid_seed1.Enable()
- else:
- self.grid_seed1.Disable()
-
- def clear_grid_seed2s(self):
- u""" Seed2一覧のGridから値をClearする"""
- for row in range(self.grid_seed2s.GetNumberRows()):
- self.grid_seed2s.SetRowLabelValue(row, u"")
- for col in range(self.grid_seed2s.GetNumberCols()):
- self.grid_seed2s.SetCellValue(row, col, u"")
- self.grid_seed2s.ClearSelection()
-
- def clear_grid_seed1s(self):
- u""" Seed1一覧のGridから値をClearする"""
- for row in range(self.grid_seed1s.GetNumberRows()):
- self.grid_seed1s.SetRowLabelValue(row, u"")
- for col in range(self.grid_seed1s.GetNumberCols()):
- self.grid_seed1s.SetCellValue(row, col, u"")
- self.grid_seed1s.ClearSelection()
+ def set_grid_seeds_selected_idx(self, idx):
+ u""" Seed一覧のGridの選択された行を選択状態にする。"""
+ if idx >= 0 and idx < self.grid_seeds.GetNumberRows():
+ self.grid_seeds.MakeCellVisible(idx, 0)
+ self.grid_seeds.SelectRow(idx)
+
+ def clear_grid_seeds(self):
+ u""" Seed一覧のGridから値をClearする"""
+ for row in range(self.grid_seeds.GetNumberRows()):
+ self.grid_seeds.SetRowLabelValue(row, u"")
+ for col in range(self.grid_seeds.GetNumberCols()):
+ self.grid_seeds.SetCellValue(row, col, u"")
+ self.grid_seeds.ClearSelection()
+ self.set_simualte_button_enable(False)
+ self._last_search_type = None
+ self._last_valuse = None
def clear_grid(self):
u"""Gridの値をクリアする"""
- self.clear_grid_seed1s()
- self.clear_grid_seed2s()
+ self.clear_grid_seeds()