OSDN Git Service

add amulet search with fixed seed2
authorkei9 <kei9@users.sourceforge.jp>
Fri, 20 Dec 2013 17:12:10 +0000 (02:12 +0900)
committerkei9 <kei9@users.sourceforge.jp>
Fri, 20 Dec 2013 17:12:10 +0000 (02:12 +0900)
give up all amulet search because of too heavy and long calculation

12 files changed:
amulettool.py
model/alchemysimulator.py
model/amuletsearcher.py
model/db_accessor.py
model/seed1tenuntable.py
model/seed2skill2table.py
readme.txt
view/constnumbers.py
view/mainframe.fbp
view/mainframe.xrc
view/notebookalchemysimulatorview.py
view/notebookamuletview.py

index 23ec9b9..6f2a06e 100644 (file)
@@ -166,7 +166,7 @@ class AmuletToolController(wx.App):
         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)
 
@@ -360,17 +360,37 @@ class AmuletToolController(wx.App):
     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):
@@ -378,13 +398,19 @@ class AmuletToolController(wx.App):
         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):
index 0bb6269..2a312f3 100644 (file)
@@ -14,9 +14,11 @@ from skillminmaxtable import SkillMinMaxTableAccessor
 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
@@ -94,7 +96,7 @@ class AlchemySimulator(object):
             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:
@@ -140,7 +142,7 @@ class AlchemySimulator(object):
         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 = []
index 024ef5c..8b4e3ca 100644 (file)
@@ -14,7 +14,9 @@ import skillminmaxtable
 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}} 
@@ -60,11 +62,41 @@ class AmuletSearcher(object):
         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,スキル値、スロット数を元にして、
@@ -116,31 +148,94 @@ class AmuletSearcher(object):
         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")
index 6d8a5cf..205240c 100644 (file)
@@ -126,14 +126,14 @@ class DataBaseAccessor(object):
         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
@@ -157,6 +157,25 @@ class DataBaseAccessor(object):
         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""" なぞの錬金
index a5b8a0b..ef74218 100644 (file)
@@ -371,3 +371,20 @@ class Seed1TenunTableAccessor(object):
             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()])
+
index cf64685..4e01686 100644 (file)
@@ -96,6 +96,25 @@ SELECT_ALL_FROM_SEED2_SQL = u"""select {skill_id1}, {skill_id2},
         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とスキル名の組み合わせテーブルを作成するクラス """
@@ -237,3 +256,40 @@ class Seed2Skill2TableAccessor(object):
             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()])
index 7216b6a..40b47e7 100644 (file)
@@ -87,6 +87,10 @@ Q. アプリが起動しない
 A. アプリケーションの置かれているディレクトリに日本語が含まれていると起動しない可能性があります。
     Cドライブ直下にフォルダを移動するなどしてから起動してみてください。
 
+Q. お守り検索タブから錬金シミュレーターに移動できない
+A. Seed表のセルを選択するのではなく、左端の列ラベルをクリックして列全体を選択するようにして下さい。
+    どうも使用ライブラリのバグらしいです。
+
 -------------------------------------------------
 更新情報
 -------------------------------------------------
index 016b9dc..84b4f17 100644 (file)
@@ -70,20 +70,28 @@ SIMULATOR_GRID_SKILL_NAME_COLS = [1,3]
 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
index 1ca7976..01626c0 100644 (file)
                         <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">&quot;Seed2のみ(検索時間小・不確実)&quot; &quot;Seed1,2(検索時間大・正確)&quot; &quot;Seed2固定&quot;</property>
+                                                    <property name="choices">&quot;Seed2のみを判定基準(不正確)&quot; &quot;Seed2固定&quot;</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">&quot;Radio Button&quot; &quot;Radio Button&quot; &quot;Radio Button&quot;</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>
index 3b48cdf..3122c0f 100644 (file)
@@ -32,7 +32,7 @@
                <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>
index 06e8f5b..9b44c7f 100644 (file)
@@ -92,8 +92,14 @@ class NoteBookAlchemySimulatorView():
 
     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に与えられた値をセットする"""
index 1a03394..40d75ba 100644 (file)
@@ -14,6 +14,8 @@ class NoteBookAmuletView():
         self.frame = frame
         self._init_view()
         self._init_event()
+        self.update_filter_radio()
+        self._last_search_type = None
 
     def _init_view(self):
         # initialize view
@@ -21,31 +23,25 @@ class NoteBookAmuletView():
         # 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")
@@ -62,33 +58,27 @@ class NoteBookAmuletView():
 
         # 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のコンボボックスの変更時 """
@@ -101,6 +91,26 @@ class NoteBookAmuletView():
     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""" 判定値の種類のラジオボタンが押された時のイベントをセットする """
@@ -114,9 +124,9 @@ class NoteBookAmuletView():
         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"""スキル名のリスト、お守り名のリスト、
@@ -138,7 +148,6 @@ class NoteBookAmuletView():
         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])
@@ -166,6 +175,24 @@ class NoteBookAmuletView():
             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)
@@ -188,6 +215,16 @@ class NoteBookAmuletView():
         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""" ラジオボタンの値をセットする 
@@ -223,12 +260,25 @@ class NoteBookAmuletView():
         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)"""
@@ -241,12 +291,12 @@ class NoteBookAmuletView():
         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に値をセットする """
@@ -254,100 +304,172 @@ class NoteBookAmuletView():
 
     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()