• R/O
  • SSH
  • HTTPS

marathon: コミット


コミットメタ情報

リビジョン363 (tree)
日時2007-07-04 21:42:47
作者hogepiyo

ログメッセージ

*** empty log message ***

変更サマリ

差分

--- marathon/trunk/MapEditorWX/src/MapEditorMainFrame.cpp (revision 362)
+++ marathon/trunk/MapEditorWX/src/MapEditorMainFrame.cpp (revision 363)
@@ -20,9 +20,11 @@
2020 EVT_MENU(ID_Open, MapEditorMainFrame::OnOpen)
2121 EVT_MENU(ID_Save, MapEditorMainFrame::OnSave)
2222 EVT_MENU(ID_SaveAs, MapEditorMainFrame::OnSaveAs)
23+ EVT_MENU(ID_Merge, MapEditorMainFrame::OnMerge)
2324
2425 //edit menu
2526 EVT_MENU(ID_Undo, MapEditorMainFrame::OnUndo)
27+ EVT_MENU(ID_Redo, MapEditorMainFrame::OnRedo)
2628 EVT_MENU(ID_Cut, MapEditorMainFrame::OnCut)
2729 EVT_MENU(ID_Copy, MapEditorMainFrame::OnCopy)
2830 EVT_MENU(ID_Paste, MapEditorMainFrame::OnPaste)
--- marathon/trunk/MapEditorWX/src/SelectLevelDialog.cpp (revision 362)
+++ marathon/trunk/MapEditorWX/src/SelectLevelDialog.cpp (revision 363)
@@ -37,6 +37,12 @@
3737 grid_sizer_17->Fit(this);
3838 Layout();
3939
40+ for(int i = 0; i < (int)wxGetApp().levelNameList.size(); i ++){
41+ list_box_4->Insert(wxConvertMB2WX(wxGetApp().levelNameList[i].c_str()), i);
42+ }
43+ if(wxGetApp().levelNameList.size() == 0){
44+ list_box_4->Insert(_T("unknown"), 0);
45+ }
4046 return result;
4147 }
4248 void SelectLevelDialog::OnList(wxCommandEvent &event)
--- marathon/trunk/MapEditorWX/src/MapEditorMainFrame.h (revision 362)
+++ marathon/trunk/MapEditorWX/src/MapEditorMainFrame.h (revision 363)
@@ -53,13 +53,15 @@
5353 ID_About = wxID_ABOUT,
5454
5555 ID_Undo = wxID_UNDO,
56+ ID_Redo = wxID_REDO,
5657 ID_Cut = wxID_CUT,
5758 ID_Copy = wxID_COPY,
5859 ID_Paste = wxID_PASTE,
5960 ID_Preference = wxID_PREFERENCES,
6061
62+ ID_Merge = 1,
6163 //show
62- ID_ToolDialog = 1,
64+ ID_ToolDialog,
6365 ID_ZoomIn,
6466 ID_ZoomOut,
6567 ID_ZoomDefault,
@@ -209,9 +211,11 @@
209211 void OnPrintSetup(wxCommandEvent& ev);
210212 void OnQuit(wxCommandEvent& ev);
211213 void OnAbout(wxCommandEvent& ev);
214+ void OnMerge(wxCommandEvent& ev);
212215
213216 //編集メニュー<en>Edit menus
214217 void OnUndo(wxCommandEvent& ev);
218+ void OnRedo(wxCommandEvent& ev);
215219 void OnCut(wxCommandEvent& ev);
216220 void OnCopy(wxCommandEvent& ev);
217221 void OnPaste(wxCommandEvent& ev);
@@ -394,4 +398,12 @@
394398 void closeAllModelessDialogs();
395399
396400 void initLevel();
401+
402+ /**
403+ ダイアログを出して編集中のマップを破壊してよいかを聞き出します。
404+
405+ @param ユーザからOKが出れば真。出なければ偽。
406+ また、編集されてなければ真が返る
407+ */
408+ bool askDestructMap();
397409 };
--- marathon/trunk/MapEditorWX/src/MainFrameMenuEvent.cpp (revision 362)
+++ marathon/trunk/MapEditorWX/src/MainFrameMenuEvent.cpp (revision 363)
@@ -10,9 +10,11 @@
1010 }
1111 void MapEditorMainFrame::OnPrintPreview(wxCommandEvent& ev)
1212 {
13+ //TODO
1314 }
1415 void MapEditorMainFrame::OnPrintSetup(wxCommandEvent& ev)
1516 {
17+ //TODO
1618 }
1719
1820 void MapEditorMainFrame::initLevel()
@@ -40,15 +42,31 @@
4042 wxGetApp().getViewGridManager()->setViewHeightMin(SHRT_MAX);
4143 wxGetApp().getViewGridManager()->setViewHeightMin(SHRT_MIN);
4244 }
43-void MapEditorMainFrame::OnNew(wxCommandEvent& ev)
45+
46+/**
47+ ダイアログを出して編集中のマップを破壊してよいかを聞き出します。
48+ @param ユーザからOKが出れば真。出なければ偽。
49+ また、編集されてなければ真が返る
50+*/
51+bool MapEditorMainFrame::askDestructMap()
4452 {
4553 if(wxGetApp().isChanged){
4654 wxMessageDialog dlg(this, _T("Map has been modified. Are you sure that delete this and create new one?"));
47- if(dlg.ShowModal() == wxID_CANCEL){
55+ if(dlg.ShowModal() == wxID_OK){
56+ return true;
57+ }else{
4858 //拒否
49- return;
59+ return false;
5060 }
5161 }
62+ return true;
63+}
64+
65+void MapEditorMainFrame::OnNew(wxCommandEvent& ev)
66+{
67+ if(!this->askDestructMap()){
68+ return ;
69+ }
5270 initLevel();
5371
5472
@@ -63,18 +81,22 @@
6381
6482 Refresh();
6583 }
66-void MapEditorMainFrame::OnNewLevel(wxCommandEvent& ev)
67-{
68- //新規レベル作成
69- //TODO 不要?
70- //マージされているマップは保存できない
7184
72-
85+static void loadLevel(int i){
86+ bool check = load_level_from_map(wxGetApp().editLevelIndex);
87+ if(!check){
88+ wxMessageBox(_T("failed"));
89+ }
90+ //セットアップ
91+ wxGetApp().getStockManager()->updateDeletes();
7392 }
74-
7593 void MapEditorMainFrame::OnOpen(wxCommandEvent& WXUNUSED(ev))
7694 {
77- //TODO 未セーブチェック
95+ //未セーブチェック
96+ if(!this->askDestructMap()){
97+ return ;
98+ }
99+
78100 wxFileDialog fileDialog(this, _T("Choose a file"),
79101 _T("."), _T(""), _T("*.*"));
80102
@@ -94,10 +116,7 @@
94116 initLevel();
95117
96118 //Level1を読み込み
97- bool check = load_level_from_map(wxGetApp().editLevelIndex);
98- if(!check){
99- wxMessageBox(_T("failed"));
100- }
119+ loadLevel(0);
101120
102121 //インデックス
103122 wxGetApp().levelNameList.clear();
@@ -114,8 +133,6 @@
114133 wxGetApp().levelNameList.push_back("unnamed");
115134 }
116135 }
117- //セットアップ
118- wxGetApp().getStockManager()->updateDeletes();
119136 //再描画
120137 Refresh();
121138 }
@@ -155,20 +172,41 @@
155172 }
156173 }
157174
175+void MapEditorMainFrame::OnMerge(wxCommandEvent& ev)
176+{
177+ //ディレクトリを指定し、フォーマットに従ってレベルをマージする
178+ //TODO
179+}
158180 /////////////////////////////////////////////////////////////////////
159181 /////////////////////////////////////////////////////////////////////
160182 // edit menus
161183 void MapEditorMainFrame::OnUndo(wxCommandEvent& ev)
162184 {
185+ //TODO
186+ /*
187+ 処理すべきは
188+ ・マップアイテムの追加
189+ ・ の削除
190+ ・ の設定変更(移動含む)
191+ くらいかな?(それ以外の処理については無視。要望があれば応える感じ)
192+ */
193+ //bool result =
163194 }
195+void MapEditorMainFrame::OnUndo(wxCommandEvent& ev)
196+{
197+ //TODO REDO
198+}
164199 void MapEditorMainFrame::OnCut(wxCommandEvent& ev)
165200 {
201+ //TODO
166202 }
167203 void MapEditorMainFrame::OnCopy(wxCommandEvent& ev)
168204 {
205+ //TODO
169206 }
170207 void MapEditorMainFrame::OnPaste(wxCommandEvent& ev)
171208 {
209+ //TODO
172210 }
173211 void MapEditorMainFrame::OnPreference(wxCommandEvent& ev)
174212 {
@@ -390,34 +428,27 @@
390428 void MapEditorMainFrame::OnJumpLevel(wxCommandEvent& ev)
391429 {
392430 //TODO
431+ //保存確認
432+ //未セーブチェック
433+ if(!this->askDestructMap()){
434+ return ;
435+ }
393436 SelectLevelDialog dlg;
394437 dlg.Create(this, wxID_ANY);
395438 if(dlg.ShowModal() == wxID_OK){
439+ int sel = dlg.getSelectLevel();
440+ wxGetApp().editLevelIndex = sel;
441+ //ステージ読み込み
442+ initLevel();
443+ loadLevel(sel);
396444 }
397445 }
398446 void MapEditorMainFrame::OnLevelInfo(wxCommandEvent& ev)
399447 {
400- //保存確認
401- if(wxGetApp().isChanged){
402- if(wxMessageBox(_T("This level has been edited. Destruct it?"), _T("Message"),
403- wxOK | wxCANCEL) == wxCANCEL)
404- {
405- return;
406- }
407- }
408448 LevelInfoDialog dlg;
409449 dlg.Create(this, wxID_ANY);
410450 if(dlg.ShowModal() != wxCANCEL){
411- //初期化
412- this->initLevel();
413-
414- int index = wxGetApp().editLevelIndex;
415- //読み込み
416- bool check = load_level_from_map(index);
417- if(!check){
418- hpl::error::caution("Loading level[%d] failure", index);
419- }
420- wxGetApp().getStockManager()->updateDeletes();
451+ //設定反映
421452 }
422453 }
423454 void MapEditorMainFrame::OnObjectPlacement(wxCommandEvent& ev)
--- marathon/trunk/MapEditorWX/WXTODOリスト.txt (revision 362)
+++ marathon/trunk/MapEditorWX/WXTODOリスト.txt (revision 363)
@@ -1,8 +1,8 @@
11 TODO ???X?g
22
33 ???C???A?v???P?[?V?????N???X(MapEditorWX)
4-?E?A?C?R???r?b?g?}?b?v?̓ǂݍ???
5-?E?}?E?X?C?x???g?̋L?q
4+?ς݁E?A?C?R???r?b?g?}?b?v?̓ǂݍ???
5+?ו????ɔC????E?}?E?X?C?x???g?̋L?q
66
77 -AlephOneSrc??DLL??肽???ȁc
88 -XRC???߂??????B?N???X?̃C???X?^???X???̂܂܍?????Ⴄ???ĉ?????w?ǂ??g??????΂????񂾂?
@@ -10,12 +10,12 @@
1010 -rad2?????I
1111
1212
13--?V?K?}?b?v
13+?ς?-?V?K?}?b?v
1414 -?ۑ?
15--?_?C?A???O???
16---?v???p?e?B
17---?^?[?~?i??
18---?e?N?X?`??
15+?ו???-?_?C?A???O???
16+?ו???--?v???p?e?B
17+?ו???--?^?[?~?i??
18+?ו???--?e?N?X?`??
1919 --?r?W???A??
2020 -???j???[?R?}???h
2121 -?|???S????????????
@@ -192,4 +192,9 @@
192192
193193 TODO ???lj??F????????????N???b?N?Ŏ??̃N???b?N?ɂ‚Ȃ???Ȃ?
194194 TODO ???ɂ???Ƃ???Ƀ|???S????lj????悤?Ƃ???ƕςɂȂ?i?`?悳??Ȃ??̂ɐG???j
195-LevelInfo??I?ԂƑS????????o?O
195+?ς? LevelInfo??I?ԂƑS????????o?O
196+
197+TODO ?A?C?e???𓮂???????isChanged = true?ɂ???
198+ ???̂Ƃ??^?C?g???? MapEditorOneWX * [???x???ԍ?] [???x????]?ɂ???
199+TODO Merge Map ???j???[?A?C?e???̒lj?
200+TODO ?ǂݍ??݁??ۑ??̎??ɁA?f?t?H???g?????x?????ɂ???H
--- marathon/trunk/HPLLib/HPLDoneHistory.cpp (revision 362)
+++ marathon/trunk/HPLLib/HPLDoneHistory.cpp (revision 363)
@@ -1,6 +1,112 @@
11 #include "HPLDoneHistory.h"
22
3-hpl::aleph::map::HPLDoneHistory::HPLDoneHistory(){
3+#ifdef __WXDEBUG__
4+#include <wx/debug.h>
5+#endif
6+
7+hpl::aleph::map::HPLActionItem::HPLActionItem(int t, hpl::aleph::map::HPLSelectData& sel, hpl::aleph::map::HPLRealMapData& real)
8+{
9+ type = t;
10+ memcpy(&this->selectData, &sel, sizeof(hpl::aleph::map::HPLSelectData));
11+ memcpy(&this->realData, &real, sizeof(hpl::aleph::map::HPLRealMapData));
412 }
5-hpl::aleph::map::HPLDoneHistory::~HPLDoneHistory(){
6-}
\ No newline at end of file
13+hpl::aleph::map::HPLActionItem::~HPLActionItem()
14+{
15+}
16+
17+//////////////////////////////////////////////////////
18+//////////////////////////////////////////////////////
19+hpl::aleph::map::HPLDoneHistory::HPLDoneHistory()
20+{
21+ index = -1;
22+}
23+hpl::aleph::map::HPLDoneHistory::~HPLDoneHistory()
24+{
25+ dataList.clear();
26+ realList.clear();
27+}
28+/**
29+ 情報を追加します
30+*/
31+void hpl::aleph::map::HPLDoneHistory::push_back(int type, HPLSelectData& selectData)
32+{
33+ //現在の位置(index)から後ろ部分を削除します
34+ if(index >= 0){
35+ std::vector<hpl::aleph::map::HPLActionItem>::iterator it = actionList.begin();
36+ it += (index + 1);
37+ while(it != actionList.end()){
38+ it = actionList.erase(it);
39+ }
40+ }
41+ while(index >= 0 && index < actionList.size()){
42+ actionList.
43+ }
44+ //実データを取得します
45+ hpl::aleph::map::HPLRealMapData realData;
46+ realData.set(&selectData);
47+
48+ //コピー
49+ hpl::aleph::map::HPLSelectData selDat;
50+ memcpy(&selData, &selectData, sizeof(hpl::aleph::map::HPLSelectData));
51+ //追加
52+ hpl::aleph::map::HPLActionItem act = hpl::aleph::map::HPLActionItem(type, selDat, realData);
53+ this->actionList.push_back(act);
54+
55+
56+ index = actionList.size() - 1;
57+}
58+
59+/**
60+ index番目のものを取り出します。
61+ 最大記憶量を超えていたらNULLが入り、falseが返ります
62+ 取り出したとしても、selectDataは
63+ ・保存によって削除が実行された後
64+ にインデックス値が変化してしまうため、updateIndexes()を呼ぶ必要がある
65+ @return 取り出せなかった場合偽
66+*/
67+bool hpl::aleph::map::HPLDoneHistory::back(int *type, hpl::aleph::map::HPLSelectData* selectData,
68+ hpl::aleph::map::HPLRealMapData* realData)
69+{
70+ if(index < 0){
71+ return false;
72+ }
73+ hpl::aleph::map::HPLActionItem act = this->actionList[index];
74+ memcpy(selectData, &act.selectData, sizeof(hpl::aleph::map::HPLSelectData));
75+ memcpy(realData, &act.realData, sizeof(hpl::aleph::map::HPLRealMapData));
76+ *type = act.type;
77+ index --;
78+ return true;
79+}
80+bool hpl::aleph::map::HPLDoneHistory::forward(int *type, HPLSelectData* selectData, HPLRealMapData* realData)
81+{
82+ if(index >= this->actionList.size()){
83+ return false;
84+ }
85+ hpl::aleph::map::HPLActionItem act = this->actionList[index];
86+ memcpy(selectData, &act.selectData, sizeof(hpl::aleph::map::HPLSelectData));
87+ memcpy(realData, &act.realData, sizeof(hpl::aleph::map::HPLRealMapData));
88+ *type = act.type;
89+ index ++;
90+ return true;
91+}
92+
93+
94+/**
95+ インデックス番号を削除後のものに対応させます。
96+*/
97+void hpl::aleph::map::HPLDoneHistory::updateIndexes(hpl::aleph::HPLStockManager* smgr)
98+{
99+ //TODO
100+}
101+int hpl::aleph::map::HPLDoneHistory::getIndex()
102+{
103+ return index;
104+}
105+int hpl::aleph::map::HPLDoneHistory::getRemainUndoCount()
106+{
107+ //TODO
108+}
109+int hpl::aleph::map::HPLDoneHistory::getRemainRedoCount()
110+{
111+ //TODO
112+}
--- marathon/trunk/HPLLib/HPLDoneHistory.h (revision 362)
+++ marathon/trunk/HPLLib/HPLDoneHistory.h (revision 363)
@@ -12,6 +12,7 @@
1212 #include <vector>
1313 #include "HPLSelectData.h"
1414 #include "HPLRealMapData.h"
15+#include "HPLStockManager.h"
1516
1617 namespace hpl{
1718 namespace aleph{
@@ -24,13 +25,25 @@
2425 };
2526 };
2627
28+ /**
29+ ユーザの行った行動のまとめ
30+ */
31+ class HPLActionItem{
32+ private:
33+ HPLActionItem(){}
34+ public:
35+ HPLActionItem(int t, hpl::aleph::map::HPLSelectData& sel, hpl::aleph::map::HPLRealMapData& real);
36+ ~HPLActionItem();
37+ int type;
38+ hpl::aleph::map::HPLSelectData selectData;
39+ hpl::aleph::map::HPLRealMapData realData;
40+ };
41+
2742 class HPLDoneHistory{
2843 private:
29- //触ったデータ情報
30- std::vector<HPLSelectData> dataList;
44+ std::vector<HPLActionItem> actionList;
3145
32- //触った実データの控え
33- std::vector<HPLRealMapData> realList;
46+ int index;
3447 public:
3548 HPLDoneHistory();
3649 ~HPLDoneHistory();
@@ -38,15 +51,29 @@
3851 public:
3952 /**
4053 情報を追加します
54+ @param type ActionTypeで定義している、ユーザが取った行動
4155 */
42- void push_back(HPLSelectData selectData);
56+ void push_back(int type, HPLSelectData& selectData);
4357
4458 /**
45- 最後からindex番目の要素を取り出します。
46- 最大記憶量を超えていたらNULLが入り、falseが返ります
59+ index番目のものを取り出します。
60+ 最大記憶量を超えていたらfalseが返ります。ポインタは無視されます
61+ 取り出したとしても、selectDataは
62+ ・保存によって削除が実行された後
63+ にインデックス値が変化してしまうため、updateIndexes()を呼ぶ必要がある
4764 */
48- bool getLastIndexOf(int index,
49- HPLSelectData* selectData, HPLRealMapData* realData);
65+ bool back(int *type, hpl::aleph::map::HPLSelectData* selectData, hpl::aleph::map::HPLRealMapData* realData);
66+
67+ void forward(int *type, hpl::aleph::map::HPLSelectData* selectData,
68+ hpl::aleph::map::HPLRealMapData* realData);
69+ /**
70+ インデックス番号を削除後のものに対応させます。
71+ */
72+ void updateIndexes(hpl::aleph::HPLStockManager* smgr);
73+
74+ int getIndex();
75+ int getRemainUndoCount();
76+ int getRemainRedoCount();
5077 private:
5178 };
5279 };
--- marathon/trunk/HPLLib/HPLError.cpp (revision 362)
+++ marathon/trunk/HPLLib/HPLError.cpp (revision 363)
@@ -8,6 +8,8 @@
88 #ifdef WX
99
1010 #include <wx/wx.h>
11+#include <wx/defs.h>
12+#include <wx/debug.h>
1113
1214 #endif
1315 #ifdef WIN32
@@ -27,15 +29,9 @@
2729 vsprintf(message, format, maker);
2830 // int len = strlen(message);
2931
30-#ifdef WX
31-#ifdef UNICODE/*
32- wchar_t wmsg[BUF_MAX];
33- size_t wlen = wxMBConv::MB2WC(wmsg, message, BUF_MAX);*/
32+#ifdef __WXDEBUG__
3433 wxMessageBox(wxConvCurrent->cMB2WX(message));
35-#else
36- wxMessageBox(message);
3734 #endif
38-#endif
3935 #ifdef WIN32
4036 // MessageBox(NULL,
4137 #endif
@@ -52,5 +48,9 @@
5248 va_start(maker, format);
5349 vsprintf(message, format, maker);
5450 caution(message);
51+#ifdef __WXDEBUG__
52+ wxASSERT(false);
53+#else
5554 exit(-1);
55+#endif
5656 }
旧リポジトリブラウザで表示