OSDN Git Service

add alchemy simulator
[amulettoolsmh4/main.git] / amulettool.py
index 8fe7159..6c9911b 100644 (file)
@@ -49,8 +49,10 @@ class AmuletToolController(wx.App):
         self._init_database()
         self._init_notebook_seed1()
         self._init_notebook_seed2()
+        self._init_notebook_skill1()
         self._init_notebook_skill2()
         self._init_notebook_setting()
+        self._init_notebook_simulator()
         self._init_notebook_amulet()
 
         self.frame_view.EnableNoteBook()
@@ -63,6 +65,7 @@ class AmuletToolController(wx.App):
         # menu event
         frame.Bind(wx.EVT_MENU, self.OnClose, id=self.frame_view.ID_MENU_ITEM_EXIT)
         frame.Bind(wx.EVT_MENU, self.OnAboutBox, id=self.frame_view.ID_MENU_ITEM_ABOUT)
+        frame.Bind(wx.EVT_MENU, self.OnMemoBox, id=self.frame_view.ID_MENU_MEMO)
         frame.Bind(wx.EVT_CLOSE, self.CloseHandler)
 
         # button event
@@ -111,6 +114,8 @@ class AmuletToolController(wx.App):
         self.notebook_seed1_view = self.frame_view.notebook_seed1_view
         self.notebook_seed1_view.bind_button_search(self.OnClickSeed1Search)
         self.notebook_seed1_view.bind_button_clear(self.OnClickSeed1Clear)
+        self.notebook_seed1_view.bind_button_skill1(self.OnClickSkill1SearchFromSeed1)
+        self.notebook_seed1_view.set_skill1_button_enable(False)
 
         u" 各種お守りの第1スキル選択のセット "
         name2skill1s = {}
@@ -136,8 +141,21 @@ class AmuletToolController(wx.App):
     def _init_notebook_skill2(self):
         u""" Seed2によるSkill2一覧タブのviewの初期化 """
         self.notebook_skill2_view = self.frame_view.notebook_skill2_view
-        self.notebook_skill2_view.bind_button_search(self.OnClickSkillSearch)
-        self.notebook_skill2_view.bind_button_clear(self.OnClickSkillClear)
+        self.notebook_skill2_view.bind_button_search(self.OnClickSkill2Search)
+        self.notebook_skill2_view.bind_button_clear(self.OnClickSkill2Clear)
+
+    def _init_notebook_skill1(self):
+        u""" Seed1によるSkill1一覧タブのviewの初期化 """
+        self.notebook_skill1_view = self.frame_view.notebook_skill1_view
+        self.notebook_skill1_view.bind_button_search(self.OnClickSkill1Search)
+        self.notebook_skill1_view.bind_button_clear(self.OnClickSkill1Clear)
+
+    def _init_notebook_simulator(self):
+        u""" Seed1,Seed2による錬金シミュレータータブのviewの初期化 """
+        self.notebook_simulator_view = self.frame_view.notebook_simulator_view
+        self.notebook_simulator_view.bind_button_search(self.OnClickSimulatorSearch)
+        self.notebook_simulator_view.bind_button_clear(self.OnClickSimulatorClear)
+
 
     def _update_notebook_amulet(self, amulet_id=None):
         u""" お守り検索タブのviewの更新
@@ -181,7 +199,7 @@ class AmuletToolController(wx.App):
         u""" update highlight cells """
         self.notebook_skill2_view.set_skill2_highlight(
                 self._highlight_skills, self._highlight_threshold1, self._highlight_threshold2)
-        self.notebook_seed1_view.update_highlight(self._highlight_skills)
+        self.notebook_skill1_view.update_highlight(self._highlight_skills)
 
     u""" Seed1 view's event"""
     def OnClickSeed1Search(self, evt):
@@ -197,31 +215,32 @@ class AmuletToolController(wx.App):
         seed1s = self.db_accessor.select_seed1s(amu_skill_name_list, alchemy_type)
         if len(seed1s) == 0:
             self.notebook_seed1_view.set_text_result(u"条件に一致するSeed1は見つかりません")
-            self.notebook_seed1_view.clear_seed1_grid()
+            self.notebook_seed1_view.set_skill1_button_enable(False)
         elif len(seed1s) == 1:
             seed1 = [x for x in seed1s][0]
             no, table_no, result_num = self.db_accessor.select_table_nos_from_seed1(seed1, alchemy_type)
-            self.notebook_seed1_view.set_text_result(
-                    u"Seed1: {0}, テーブルNo: {1}, 通し番号: {2}".format(seed1, table_no, no))
-            # list of (no, seed1)
-            near_num = view.NEAR_SEED1_NUMBERS
-            no_seed1_dict = self.db_accessor.select_near_seed1s_from_table_no(
-                    no, table_no, near_num, near_num, alchemy_type)
-
-            # no -> (seed1, result_num, amu_names, skill_names)
-            self.notebook_seed1_view.set_no2seed1s_dict(no_seed1_dict, no)
-            self.notebook_seed1_view.update_highlight(self._highlight_skills)
+            self.notebook_seed1_view.set_text_result_by_seed1(seed1, table_no, no)
+            self.notebook_seed1_view.set_skill1_button_enable(True)
         else:
             self.notebook_seed1_view.set_text_result(
                     u"Seed1は{0}件あります。条件を絞ってください".format(len(seed1s)))
-            self.notebook_seed1_view.clear_seed1_grid()
+            self.notebook_seed1_view.set_skill1_button_enable(False)
 
     def OnClickSeed1Clear(self, evt):
         u""" clear seed1s from selected skill1s """
         self.notebook_seed1_view.clear_combobox()
-        self.notebook_seed1_view.clear_seed1_grid()
         self.notebook_seed1_view.clear_text_result()
 
+    def OnClickSkill1SearchFromSeed1(self, evt):
+        u""" change page to skill1 search from seed1"""
+        seed1 = self.notebook_seed1_view.get_result_seed1()
+        alchemy_type = self.notebook_seed1_view.get_tenun_radio_key()
+        if seed1 is not None:
+            self.notebook_skill1_view.set_seed1_value(seed1)
+            self.notebook_skill1_view.set_tenun_radio_key(alchemy_type)
+            self.frame_view.note_book.SetSelection(view.SKILL1_SEARCH_PAGE)
+            self.OnClickSkill1Search(evt)
+
     u""" Seed2 view's event """
     def OnClickSeed2Search(self, evt):
         u""" search seed2s from selected skill2s """
@@ -252,11 +271,39 @@ class AmuletToolController(wx.App):
         seed2 = self.notebook_seed2_view.get_selected_seed2()
         if seed2 is not None:
             self.notebook_skill2_view.set_seed2_value(seed2)
-            self.frame_view.note_book.SetSelection(view.SKILL_SEARCH_PAGE)
-            self.OnClickSkillSearch(evt)
+            self.frame_view.note_book.SetSelection(view.SKILL2_SEARCH_PAGE)
+            self.OnClickSkill2Search(evt)
+
+    u""" Skill1 search from Seed1's event """
+    def OnClickSkill1Search(self, evt):
+        u""" skill1 search from seed1"""
+        seed1 = self.notebook_skill1_view.get_seed1_value()
+        alchemy_type = self.notebook_skill1_view.get_tenun_radio_key()
+        if seed1 is not None:
+            try:
+                no, table_no, result_num = self.db_accessor.select_table_nos_from_seed1(seed1, alchemy_type)
+                self.notebook_skill1_view.set_text_result_by_seed1(seed1, table_no, no)
+                # list of (no, seed1)
+                near_num = view.NEAR_SEED1_NUMBERS
+                no_seed1_dict = self.db_accessor.select_near_seed1s_from_table_no(
+                        no, table_no, near_num, near_num, alchemy_type)
+
+                # no -> (seed1, result_num, amu_names, skill_names)
+                self.notebook_skill1_view.set_no2seed1s_dict(no_seed1_dict, no)
+                self.notebook_skill1_view.update_highlight(self._highlight_skills)
+            except KeyError, e:
+                self._show_message_dialog(message=u"指定されたSeed値は存在しません")
+        else:
+            self._show_message_dialog(message=u"Seed値には数字を入力してください")
+
+    def OnClickSkill1Clear(self, evt):
+        u""" clear skills from seed """
+        self.notebook_skill1_view.clear_skill1_grid()
+        self.notebook_skill1_view.clear_highlight()
+        self.notebook_skill1_view.clear_result_text()
 
     u""" Skill2 search from Seed2's event """
-    def OnClickSkillSearch(self, evt):
+    def OnClickSkill2Search(self, evt):
         u""" skill search from seed2"""
         seed2 = self.notebook_skill2_view.get_seed2_value()
         if seed2 is not None:
@@ -284,14 +331,42 @@ class AmuletToolController(wx.App):
         else:
             self._show_message_dialog(message=u"Seed値には数字を入力してください")
 
-    def OnClickSkillClear(self, evt):
+    def OnClickSkill2Clear(self, evt):
         u""" clear skills from seed """
         self.notebook_skill2_view.clear_skill2_grid()
         self.notebook_skill2_view.clear_skill2_highlight()
-        self.notebook_skill2_view.clear_items_amulet_prospects()
         self.notebook_skill2_view.clear_result_text()
         self.notebook_skill2_view.clear_inishie()
 
+    u""" Alchemy Simulator's event """
+    def OnClickSimulatorSearch(self, evt):
+        u""" alchemy simulation from seed1, seed2"""
+        seeds = self.notebook_simulator_view.get_seed_values()
+        alchemy_type = self.notebook_simulator_view.get_tenun_radio_key()
+        if seeds is not None:
+            seed1, seed2 = seeds
+            #try:
+            result = self.db_accessor.simulate_nazo(seed1, seed2)
+            self.notebook_simulator_view.set_values(view.KEY_NAZO, *result)
+            result = self.db_accessor.simulate_komyou(seed1, seed2)
+            self.notebook_simulator_view.set_values(view.KEY_KOMYOU, *result)
+            result = self.db_accessor.simulate_inishie(seed1, seed2)
+            self.notebook_simulator_view.set_values(view.KEY_INISHIE, *result)
+            result = self.db_accessor.simulate_tenun(seed1, seed2, alchemy_type)
+            self.notebook_simulator_view.set_tenun_values(result)
+            #except KeyError, e:
+            #   self._show_message_dialog(message=u"指定されたSeed値は存在しません")
+            #finally:
+            self.notebook_simulator_view.update_highlight(self._highlight_skills)
+        else:
+            self._show_message_dialog(message=u"Seed値には数字を入力してください")
+
+    def OnClickSimulatorClear(self, evt):
+        u""" clear simulator form """
+        self.notebook_simulator_view.clear_seed_values()
+        self.notebook_simulator_view.clear_grid()
+        self.notebook_simulator_view.clear_highlight()
+
     u""" amulet search event """
     def OnClickAmuletRadioAmulet(self, evt):
         u""" switch skill lists by amulet id """
@@ -382,6 +457,10 @@ class AmuletToolController(wx.App):
         info = self.frame_view.GetAboutInfo()
         wx.AboutBox(info)
 
+    def OnMemoBox(self, evt):
+        dlg_view = view.MemoDialogView(os.path.join(_get_base_dir(), u"view", view.XRC_MEMO_DIALOG))
+        dlg_view.Show()
+
     def _write_settings(self):
         with open(SETTING_FILE, mode="w") as f:
             data = {SETTING_THRESHOLD1:self._highlight_threshold1,