Commit 1baa901b authored by fallenstardust's avatar fallenstardust

deckmanager

parent ce14c953
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include "data_manager.h" #include "data_manager.h"
#include "deck_manager.h" #include "deck_manager.h"
#include "image_manager.h" #include "image_manager.h"
#include "myfilesystem.h"
#include "game.h" #include "game.h"
#include "duelclient.h" #include "duelclient.h"
#include <algorithm> #include <algorithm>
...@@ -59,6 +60,68 @@ static bool check_set_code(const CardDataC& data, int set_code) { ...@@ -59,6 +60,68 @@ static bool check_set_code(const CardDataC& data, int set_code) {
return res; return res;
} }
inline bool havePopupWindow() {
return mainGame->wQuery->isVisible() || mainGame->wCategories->isVisible() || mainGame->wLinkMarks->isVisible() || mainGame->wDeckManage->isVisible() || mainGame->wDMQuery->isVisible();
}
inline void refreshDeckList() {
irr::gui::IGUIListBox* lstCategories = mainGame->lstCategories;
irr::gui::IGUIListBox* lstDecks = mainGame->lstDecks;
wchar_t catepath[256];
deckManager.GetCategoryPath(catepath, lstCategories->getSelected(), lstCategories->getListItem(lstCategories->getSelected()));
lstDecks->clear();
FileSystem::TraversalDir(catepath, [lstDecks](const wchar_t* name, bool isdir) {
if(!isdir && wcsrchr(name, '.') && !wcsncasecmp(wcsrchr(name, '.'), L".ydk", 4)) {
size_t len = wcslen(name);
wchar_t deckname[256];
wcsncpy(deckname, name, len - 4);
deckname[len - 4] = 0;
lstDecks->addItem(deckname);
}
});
}
inline void refreshReadonly(int catesel) {
mainGame->deckBuilder.readonly = catesel < 2;
mainGame->btnSaveDeck->setEnabled(!mainGame->deckBuilder.readonly);
mainGame->btnDeleteDeck->setEnabled(!mainGame->deckBuilder.readonly);
mainGame->btnRenameCategory->setEnabled(catesel > 3);
mainGame->btnDeleteCategory->setEnabled(catesel > 3);
mainGame->btnNewDeck->setEnabled(!mainGame->deckBuilder.readonly);
mainGame->btnRenameDeck->setEnabled(!mainGame->deckBuilder.readonly);
mainGame->btnDMDeleteDeck->setEnabled(!mainGame->deckBuilder.readonly);
mainGame->btnMoveDeck->setEnabled(!mainGame->deckBuilder.readonly);
}
inline void changeCategory(int catesel) {
refreshReadonly(catesel);
mainGame->RefreshDeck(mainGame->cbDBCategory, mainGame->cbDBDecks);
mainGame->cbDBDecks->setSelected(0);
deckManager.LoadDeck(mainGame->cbDBCategory, mainGame->cbDBDecks);
mainGame->deckBuilder.is_modified = false;
mainGame->deckBuilder.prev_category = catesel;
mainGame->deckBuilder.prev_deck = 0;
}
inline void showDeckManage() {
mainGame->RefreshCategoryDeck(mainGame->cbDBCategory, mainGame->cbDBDecks, false);
mainGame->cbDBCategory->setSelected(mainGame->deckBuilder.prev_category);
mainGame->RefreshDeck(mainGame->cbDBCategory, mainGame->cbDBDecks);
mainGame->cbDBDecks->setSelected(mainGame->deckBuilder.prev_deck);
irr::gui::IGUIListBox* lstCategories = mainGame->lstCategories;
lstCategories->clear();
lstCategories->addItem(dataManager.GetSysString(1450));
lstCategories->addItem(dataManager.GetSysString(1451));
lstCategories->addItem(dataManager.GetSysString(1452));
lstCategories->addItem(dataManager.GetSysString(1453));
FileSystem::TraversalDir(L"./deck", [lstCategories](const wchar_t* name, bool isdir) {
if(isdir) {
lstCategories->addItem(name);
}
});
lstCategories->setSelected(mainGame->deckBuilder.prev_category);
refreshReadonly(mainGame->deckBuilder.prev_category);
refreshDeckList();
mainGame->lstDecks->setSelected(mainGame->deckBuilder.prev_deck);
mainGame->PopupElement(mainGame->wDeckManage);
}
void DeckBuilder::Initialize() { void DeckBuilder::Initialize() {
mainGame->is_building = true; mainGame->is_building = true;
mainGame->is_siding = false; mainGame->is_siding = false;
...@@ -75,7 +138,7 @@ void DeckBuilder::Initialize() { ...@@ -75,7 +138,7 @@ void DeckBuilder::Initialize() {
mainGame->btnSideSort->setVisible(false); mainGame->btnSideSort->setVisible(false);
mainGame->btnSideReload->setVisible(false); mainGame->btnSideReload->setVisible(false);
filterList = deckManager._lfList[0].content; filterList = deckManager._lfList[0].content;
mainGame->cbDBLFList->setSelected(0); mainGame->cbLFList->setSelected(0);
ClearSearch(); ClearSearch();
mouse_pos.set(0, 0); mouse_pos.set(0, 0);
hovered_code = 0; hovered_code = 0;
...@@ -85,6 +148,10 @@ void DeckBuilder::Initialize() { ...@@ -85,6 +148,10 @@ void DeckBuilder::Initialize() {
is_draging = false; is_draging = false;
is_starting_dragging = false; is_starting_dragging = false;
prev_deck = mainGame->cbDBDecks->getSelected(); prev_deck = mainGame->cbDBDecks->getSelected();
prev_category = mainGame->cbDBCategory->getSelected();
readonly = prev_category < 2;
mainGame->btnSaveDeck->setEnabled(!readonly);
mainGame->btnDeleteDeck->setEnabled(!readonly);
prev_operation = 0; prev_operation = 0;
prev_sel = -1; prev_sel = -1;
is_modified = false; is_modified = false;
...@@ -104,15 +171,16 @@ void DeckBuilder::Terminate() { ...@@ -104,15 +171,16 @@ void DeckBuilder::Terminate() {
mainGame->device->setEventReceiver(&mainGame->menuHandler); mainGame->device->setEventReceiver(&mainGame->menuHandler);
mainGame->wACMessage->setVisible(false); mainGame->wACMessage->setVisible(false);
mainGame->ClearTextures(); mainGame->ClearTextures();
mainGame->SaveConfig();
mainGame->scrFilter->setVisible(false); mainGame->scrFilter->setVisible(false);
int sel = mainGame->cbDBDecks->getSelected(); int catesel = mainGame->cbDBCategory->getSelected();
if(sel >= 0){ if(catesel >= 0)
BufferIO::CopyWStr(mainGame->cbDBDecks->getItem(sel), mainGame->gameConf.lastdeck, 64); BufferIO::CopyWStr(mainGame->cbDBCategory->getItem(catesel), mainGame->gameConf.lastcategory, 64);
char linebuf[256]; int decksel = mainGame->cbDBDecks->getSelected();
char linebuf[256];
if(decksel >= 0)
BufferIO::EncodeUTF8(mainGame->gameConf.lastdeck, linebuf); BufferIO::EncodeUTF8(mainGame->gameConf.lastdeck, linebuf);
android::setLastDeck(mainGame->appMain, linebuf); android::setLastDeck(mainGame->appMain, linebuf);
}
mainGame->SaveConfig();
if(exit_on_return) if(exit_on_return)
mainGame->device->closeDevice(); mainGame->device->closeDevice();
} }
...@@ -128,13 +196,25 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -128,13 +196,25 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
switch(event.EventType) { switch(event.EventType) {
case irr::EET_GUI_EVENT: { case irr::EET_GUI_EVENT: {
s32 id = event.GUIEvent.Caller->getID(); s32 id = event.GUIEvent.Caller->getID();
if(mainGame->wCategories->isVisible() && id != BUTTON_CATEGORY_OK) if(((mainGame->wCategories->isVisible() && id != BUTTON_CATEGORY_OK) ||
break; (mainGame->wQuery->isVisible() && id != BUTTON_YES && id != BUTTON_NO) ||
if(mainGame->wQuery->isVisible() && id != BUTTON_YES && id != BUTTON_NO) (mainGame->wLinkMarks->isVisible() && id != BUTTON_MARKERS_OK) ||
break; (mainGame->wDMQuery->isVisible() && id != BUTTON_DM_OK && id != BUTTON_DM_CANCEL) ||
if(mainGame->wLinkMarks->isVisible() && id != BUTTON_MARKERS_OK) (mainGame->wDeckManage->isVisible() && !(id >= WINDOW_DECK_MANAGE && id <= COMBOBOX_LFLIST)))
&& event.GUIEvent.EventType != irr::gui::EGET_LISTBOX_CHANGED
&& event.GUIEvent.EventType != irr::gui::EGET_COMBO_BOX_CHANGED) {
if(mainGame->wDMQuery->isVisible())
mainGame->wDMQuery->getParent()->bringToFront(mainGame->wDMQuery);
break; break;
}
switch(event.GUIEvent.EventType) { switch(event.GUIEvent.EventType) {
case irr::gui::EGET_ELEMENT_CLOSED: {
if(id == WINDOW_DECK_MANAGE) {
mainGame->HideElement(mainGame->wDeckManage);
return true;
break;
}
}
case irr::gui::EGET_BUTTON_CLICKED: { case irr::gui::EGET_BUTTON_CLICKED: {
switch(id) { switch(id) {
case BUTTON_CLEAR_DECK: { case BUTTON_CLEAR_DECK: {
...@@ -160,7 +240,11 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -160,7 +240,11 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
} }
case BUTTON_SAVE_DECK: { case BUTTON_SAVE_DECK: {
int sel = mainGame->cbDBDecks->getSelected(); int sel = mainGame->cbDBDecks->getSelected();
if(sel >= 0 && deckManager.SaveDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(sel))) { if(sel == -1)
break;
wchar_t filepath[256];
deckManager.GetDeckFile(filepath, mainGame->cbDBCategory, mainGame->cbDBDecks);
if(deckManager.SaveDeck(deckManager.current_deck, filepath)) {
mainGame->stACMessage->setText(dataManager.GetSysString(1335)); mainGame->stACMessage->setText(dataManager.GetSysString(1335));
mainGame->PopupElement(mainGame->wACMessage, 20); mainGame->PopupElement(mainGame->wACMessage, 20);
is_modified = false; is_modified = false;
...@@ -185,7 +269,11 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -185,7 +269,11 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
mainGame->cbDBDecks->addItem(dname); mainGame->cbDBDecks->addItem(dname);
mainGame->cbDBDecks->setSelected(mainGame->cbDBDecks->getItemCount() - 1); mainGame->cbDBDecks->setSelected(mainGame->cbDBDecks->getItemCount() - 1);
} }
if(deckManager.SaveDeck(deckManager.current_deck, dname)) { wchar_t catepath[256];
deckManager.GetCategoryPath(catepath, mainGame->cbDBCategory->getSelected(), mainGame->cbDBCategory->getText());
wchar_t filepath[256];
myswprintf(filepath, L"%ls/%ls.ydk", catepath, dname);
if(deckManager.SaveDeck(deckManager.current_deck, filepath)) {
mainGame->stACMessage->setText(dataManager.GetSysString(1335)); mainGame->stACMessage->setText(dataManager.GetSysString(1335));
mainGame->PopupElement(mainGame->wACMessage, 20); mainGame->PopupElement(mainGame->wACMessage, 20);
is_modified = false; is_modified = false;
...@@ -193,49 +281,6 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -193,49 +281,6 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
} }
break; break;
} }
case BUTTON_RENAME_DECK: {
mainGame->soundEffectPlayer->doPressButton();
int sel = mainGame->cbDBDecks->getSelected();
if(sel == -1)
break;
mainGame->gMutex.Lock();
mainGame->wRenameDeck->setText(dataManager.GetSysString(1362));
mainGame->ebREName->setText(mainGame->cbDBDecks->getItem(sel));
mainGame->PopupElement(mainGame->wRenameDeck);
mainGame->gMutex.Unlock();
prev_operation = id;
prev_sel = sel;
break;
}
case BUTTON_RENAME_DECK_SAVE: {
mainGame->soundEffectPlayer->doSaveDeck();
mainGame->HideElement(mainGame->wRenameDeck);
if(prev_operation == BUTTON_RENAME_DECK) {
wchar_t newname[256];
BufferIO::CopyWStr(mainGame->ebREName->getText(), newname, 256);
if(wcsncasecmp(newname + wcslen(newname) - 4, L"", 4)) {
myswprintf(newname, L"%ls", mainGame->ebREName->getText());
}
if(DeckManager::RenameDeck(mainGame->cbDBDecks->getItem(prev_sel), newname)) {
mainGame->RefreshDeck(mainGame->cbDBDecks);
deckManager.LoadDeck(mainGame->cbDBDecks->getItem(prev_sel));
mainGame->cbDBDecks->setSelected(prev_sel);
mainGame->stACMessage->setText(dataManager.GetSysString(1335));
mainGame->PopupElement(mainGame->wACMessage, 20);
} else {
mainGame->env->addMessageBox(L"", dataManager.GetSysString(1365));
}
}
prev_operation = 0;
prev_sel = -1;
break;
}
case BUTTON_RENAME_DECK_CANCEL: {
mainGame->HideElement(mainGame->wRenameDeck);
prev_operation = 0;
prev_sel = -1;
break;
}
case BUTTON_DELETE_DECK: { case BUTTON_DELETE_DECK: {
int sel = mainGame->cbDBDecks->getSelected(); int sel = mainGame->cbDBDecks->getSelected();
if(sel == -1) if(sel == -1)
...@@ -252,7 +297,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -252,7 +297,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break; break;
} }
case BUTTON_LEAVE_GAME: { case BUTTON_LEAVE_GAME: {
if(is_modified && !mainGame->chkIgnoreDeckChanges->isChecked()) { if(is_modified && !readonly && !mainGame->chkIgnoreDeckChanges->isChecked()) {
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
mainGame->SetStaticText(mainGame->stQMessage, 370 * mainGame->xScale, mainGame->textFont, dataManager.GetSysString(1356)); mainGame->SetStaticText(mainGame->stQMessage, 370 * mainGame->xScale, mainGame->textFont, dataManager.GetSysString(1356));
mainGame->PopupElement(mainGame->wQuery); mainGame->PopupElement(mainGame->wQuery);
...@@ -292,6 +337,373 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -292,6 +337,373 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
InstantSearch(); InstantSearch();
break; break;
} }
case BUTTON_MANAGE_DECK: {
if(is_modified && !readonly && !mainGame->chkIgnoreDeckChanges->isChecked()) {
mainGame->gMutex.Lock();
mainGame->SetStaticText(mainGame->stQMessage, 370 * mainGame->xScale, mainGame->guiFont, dataManager.GetSysString(1356));
mainGame->PopupElement(mainGame->wQuery);
mainGame->gMutex.Unlock();
prev_operation = id;
break;
}
showDeckManage();
break;
}
case BUTTON_NEW_CATEGORY: {
mainGame->gMutex.Lock();
mainGame->stDMMessage->setText(dataManager.GetSysString(1469));
mainGame->ebDMName->setVisible(true);
mainGame->ebDMName->setText(L"");
mainGame->PopupElement(mainGame->wDMQuery);
mainGame->gMutex.Unlock();
prev_operation = id;
break;
}
case BUTTON_RENAME_CATEGORY: {
if(mainGame->lstCategories->getSelected() < 4)
break;
mainGame->gMutex.Lock();
mainGame->stDMMessage->setText(dataManager.GetSysString(1469));
mainGame->ebDMName->setVisible(true);
mainGame->ebDMName->setText(L"");
mainGame->PopupElement(mainGame->wDMQuery);
mainGame->gMutex.Unlock();
prev_operation = id;
break;
}
case BUTTON_DELETE_CATEGORY: {
mainGame->gMutex.Lock();
mainGame->stDMMessage->setText(dataManager.GetSysString(1470));
mainGame->stDMMessage2->setVisible(true);
mainGame->stDMMessage2->setText(mainGame->lstCategories->getListItem(mainGame->lstCategories->getSelected()));
mainGame->PopupElement(mainGame->wDMQuery);
mainGame->gMutex.Unlock();
prev_operation = id;
break;
}
case BUTTON_NEW_DECK: {
mainGame->gMutex.Lock();
mainGame->stDMMessage->setText(dataManager.GetSysString(1471));
mainGame->ebDMName->setVisible(true);
mainGame->ebDMName->setText(L"");
mainGame->PopupElement(mainGame->wDMQuery);
mainGame->gMutex.Unlock();
prev_operation = id;
break;
}
case BUTTON_RENAME_DECK: {
mainGame->gMutex.Lock();
mainGame->stDMMessage->setText(dataManager.GetSysString(1471));
mainGame->ebDMName->setVisible(true);
mainGame->ebDMName->setText(L"");
mainGame->PopupElement(mainGame->wDMQuery);
mainGame->gMutex.Unlock();
prev_operation = id;
break;
}
case BUTTON_DELETE_DECK_DM: {
mainGame->gMutex.Lock();
mainGame->stDMMessage->setText(dataManager.GetSysString(1337));
mainGame->stDMMessage2->setVisible(true);
mainGame->stDMMessage2->setText(mainGame->lstDecks->getListItem(mainGame->lstDecks->getSelected()));
mainGame->PopupElement(mainGame->wDMQuery);
mainGame->gMutex.Unlock();
prev_operation = id;
break;
}
case BUTTON_MOVE_DECK: {
mainGame->gMutex.Lock();
mainGame->stDMMessage->setText(dataManager.GetSysString(1472));
mainGame->cbDMCategory->setVisible(true);
mainGame->cbDMCategory->clear();
int catesel = mainGame->lstCategories->getSelected();
if(catesel != 2)
mainGame->cbDMCategory->addItem(dataManager.GetSysString(1452));
for(int i = 4;i < mainGame->lstCategories->getItemCount();i++) {
if(i != catesel)
mainGame->cbDMCategory->addItem(mainGame->lstCategories->getListItem(i));
}
mainGame->PopupElement(mainGame->wDMQuery);
mainGame->gMutex.Unlock();
prev_operation = id;
break;
}
case BUTTON_COPY_DECK: {
mainGame->gMutex.Lock();
mainGame->stDMMessage->setText(dataManager.GetSysString(1473));
mainGame->cbDMCategory->setVisible(true);
mainGame->cbDMCategory->clear();
int catesel = mainGame->lstCategories->getSelected();
if(catesel != 2)
mainGame->cbDMCategory->addItem(dataManager.GetSysString(1452));
for(int i = 4;i < mainGame->lstCategories->getItemCount();i++) {
if(i != catesel)
mainGame->cbDMCategory->addItem(mainGame->lstCategories->getListItem(i));
}
mainGame->PopupElement(mainGame->wDMQuery);
mainGame->gMutex.Unlock();
prev_operation = id;
break;
}
case BUTTON_DM_OK: {
switch(prev_operation) {
case BUTTON_NEW_CATEGORY: {
int catesel = 0;
const wchar_t* catename = mainGame->ebDMName->getText();
if(deckManager.CreateCategory(catename)) {
mainGame->cbDBCategory->addItem(catename);
mainGame->lstCategories->addItem(catename);
catesel = mainGame->lstCategories->getItemCount() - 1;
}
else {
for(int i = 3;i < mainGame->lstCategories->getItemCount();i++) {
if(!wcsncasecmp(mainGame->lstCategories->getListItem(i), catename, 256)) {
catesel = i;
mainGame->stACMessage->setText(dataManager.GetSysString(1474));
mainGame->PopupElement(mainGame->wACMessage, 20);
break;
}
}
}
if(catesel > 0) {
mainGame->lstCategories->setSelected(catesel);
refreshDeckList();
mainGame->lstDecks->setSelected(0);
mainGame->cbDBCategory->setSelected(catesel);
changeCategory(catesel);
}
break;
}
case BUTTON_RENAME_CATEGORY: {
int catesel = mainGame->lstCategories->getSelected();
const wchar_t* oldcatename = mainGame->lstCategories->getListItem(catesel);
const wchar_t* newcatename = mainGame->ebDMName->getText();
if(deckManager.RenameCategory(oldcatename, newcatename)) {
mainGame->cbDBCategory->removeItem(catesel);
mainGame->cbDBCategory->addItem(newcatename);
mainGame->lstCategories->removeItem(catesel);
mainGame->lstCategories->addItem(newcatename);
catesel = mainGame->lstCategories->getItemCount() - 1;
} else {
catesel = 0;
for(int i = 3;i < mainGame->lstCategories->getItemCount();i++) {
if(!wcsncasecmp(mainGame->lstCategories->getListItem(i), newcatename, 256)) {
catesel = i;
mainGame->stACMessage->setText(dataManager.GetSysString(1474));
mainGame->PopupElement(mainGame->wACMessage, 20);
break;
}
}
}
if(catesel > 0) {
mainGame->lstCategories->setSelected(catesel);
refreshDeckList();
mainGame->lstDecks->setSelected(0);
mainGame->cbDBCategory->setSelected(catesel);
changeCategory(catesel);
}
break;
}
case BUTTON_DELETE_CATEGORY: {
int catesel = mainGame->lstCategories->getSelected();
const wchar_t* catename = mainGame->lstCategories->getListItem(catesel);
if(deckManager.DeleteCategory(catename)) {
mainGame->cbDBCategory->removeItem(catesel);
mainGame->lstCategories->removeItem(catesel);
catesel = 2;
mainGame->lstCategories->setSelected(catesel);
refreshDeckList();
mainGame->lstDecks->setSelected(0);
mainGame->cbDBCategory->setSelected(catesel);
changeCategory(catesel);
} else {
mainGame->stACMessage->setText(dataManager.GetSysString(1476));
mainGame->PopupElement(mainGame->wACMessage, 20);
}
break;
}
case BUTTON_NEW_DECK: {
const wchar_t* deckname = mainGame->ebDMName->getText();
wchar_t catepath[256];
deckManager.GetCategoryPath(catepath, mainGame->cbDBCategory->getSelected(), mainGame->cbDBCategory->getText());
wchar_t filepath[256];
myswprintf(filepath, L"%ls/%ls.ydk", catepath, deckname);
bool res = false;
if(!FileSystem::IsFileExists(filepath)) {
deckManager.current_deck.main.clear();
deckManager.current_deck.extra.clear();
deckManager.current_deck.side.clear();
res = deckManager.SaveDeck(deckManager.current_deck, filepath);
refreshDeckList();
changeCategory(mainGame->lstCategories->getSelected());
}
for(int i = 0;i < mainGame->lstDecks->getItemCount();i++) {
if(!wcsncasecmp(mainGame->lstDecks->getListItem(i), deckname, 256)) {
deckManager.LoadDeck(filepath);
prev_deck = i;
mainGame->cbDBDecks->setSelected(prev_deck);
mainGame->lstDecks->setSelected(prev_deck);
if(!res) {
mainGame->stACMessage->setText(dataManager.GetSysString(1475));
mainGame->PopupElement(mainGame->wACMessage, 20);
}
break;
}
}
break;
}
case BUTTON_RENAME_DECK: {
int catesel = mainGame->lstCategories->getSelected();
int decksel = mainGame->lstDecks->getSelected();
const wchar_t* catename = mainGame->lstCategories->getListItem(catesel);
wchar_t oldfilepath[256];
deckManager.GetDeckFile(oldfilepath, mainGame->cbDBCategory, mainGame->cbDBDecks);
const wchar_t* newdeckname = mainGame->ebDMName->getText();
wchar_t newfilepath[256];
if(catesel == 2) {
myswprintf(newfilepath, L"./deck/%ls.ydk", newdeckname);
} else {
myswprintf(newfilepath, L"./deck/%ls/%ls.ydk", catename, newdeckname);
}
bool res = false;
if(!FileSystem::IsFileExists(newfilepath)) {
res = FileSystem::Rename(oldfilepath, newfilepath);
}
refreshDeckList();
changeCategory(catesel);
for(int i = 0;i < mainGame->lstDecks->getItemCount();i++) {
if(!wcsncasecmp(mainGame->lstDecks->getListItem(i), newdeckname, 256)) {
deckManager.LoadDeck(newfilepath);
prev_deck = i;
mainGame->cbDBDecks->setSelected(prev_deck);
mainGame->lstDecks->setSelected(prev_deck);
if(!res) {
mainGame->stACMessage->setText(dataManager.GetSysString(1475));
mainGame->PopupElement(mainGame->wACMessage, 20);
}
break;
}
}
break;
}
case BUTTON_DELETE_DECK_DM: {
int decksel = mainGame->lstDecks->getSelected();
wchar_t filepath[256];
deckManager.GetDeckFile(filepath, mainGame->cbDBCategory, mainGame->cbDBDecks);
if(deckManager.DeleteDeck(filepath)) {
mainGame->lstDecks->removeItem(decksel);
mainGame->cbDBDecks->removeItem(decksel);
decksel--;
if(decksel == -1) {
decksel = mainGame->lstDecks->getItemCount() - 1;
}
if(decksel != -1) {
mainGame->lstDecks->setSelected(decksel);
mainGame->cbDBDecks->setSelected(decksel);
deckManager.LoadDeck(mainGame->cbDBCategory, mainGame->cbDBDecks);
}
prev_deck = decksel;
} else {
mainGame->stACMessage->setText(dataManager.GetSysString(1476));
mainGame->PopupElement(mainGame->wACMessage, 20);
}
break;
}
case BUTTON_MOVE_DECK: {
int oldcatesel = mainGame->lstCategories->getSelected();
int newcatesel = mainGame->cbDMCategory->getSelected();
int decksel = mainGame->lstDecks->getSelected();
const wchar_t* newcatename = mainGame->cbDMCategory->getText();
const wchar_t* olddeckname = mainGame->lstDecks->getListItem(decksel);
wchar_t deckname[256];
BufferIO::CopyWStr(olddeckname, deckname, 256);
wchar_t oldfilepath[256];
deckManager.GetDeckFile(oldfilepath, mainGame->cbDBCategory, mainGame->cbDBDecks);
wchar_t newfilepath[256];
if(oldcatesel != 2 && newcatesel == 0) {
myswprintf(newfilepath, L"./deck/%ls.ydk", deckname);
} else {
myswprintf(newfilepath, L"./deck/%ls/%ls.ydk", newcatename, deckname);
}
bool res = false;
if(!FileSystem::IsFileExists(newfilepath)) {
res = FileSystem::Rename(oldfilepath, newfilepath);
}
mainGame->lstCategories->setSelected(newcatename);
int catesel = mainGame->lstCategories->getSelected();
refreshDeckList();
mainGame->cbDBCategory->setSelected(catesel);
changeCategory(catesel);
for(int i = 0;i < mainGame->lstDecks->getItemCount();i++) {
if(!wcsncasecmp(mainGame->lstDecks->getListItem(i), deckname, 256)) {
deckManager.LoadDeck(newfilepath);
prev_deck = i;
mainGame->cbDBDecks->setSelected(prev_deck);
mainGame->lstDecks->setSelected(prev_deck);
if(!res) {
mainGame->stACMessage->setText(dataManager.GetSysString(1475));
mainGame->PopupElement(mainGame->wACMessage, 20);
}
break;
}
}
break;
}
case BUTTON_COPY_DECK: {
int oldcatesel = mainGame->lstCategories->getSelected();
int newcatesel = mainGame->cbDMCategory->getSelected();
int decksel = mainGame->lstDecks->getSelected();
const wchar_t* newcatename = mainGame->cbDMCategory->getText();
const wchar_t* olddeckname = mainGame->lstDecks->getListItem(decksel);
wchar_t deckname[256];
BufferIO::CopyWStr(olddeckname, deckname, 256);
wchar_t newfilepath[256];
if(oldcatesel != 2 && newcatesel == 0) {
myswprintf(newfilepath, L"./deck/%ls.ydk", deckname);
} else {
myswprintf(newfilepath, L"./deck/%ls/%ls.ydk", newcatename, deckname);
}
bool res = false;
if(!FileSystem::IsFileExists(newfilepath)) {
res = deckManager.SaveDeck(deckManager.current_deck, newfilepath);
}
mainGame->lstCategories->setSelected(newcatename);
int catesel = mainGame->lstCategories->getSelected();
refreshDeckList();
mainGame->cbDBCategory->setSelected(catesel);
changeCategory(catesel);
for(int i = 0;i < mainGame->lstDecks->getItemCount();i++) {
if(!wcsncasecmp(mainGame->lstDecks->getListItem(i), deckname, 256)) {
deckManager.LoadDeck(newfilepath);
prev_deck = i;
mainGame->cbDBDecks->setSelected(prev_deck);
mainGame->lstDecks->setSelected(prev_deck);
if(!res) {
mainGame->stACMessage->setText(dataManager.GetSysString(1475));
mainGame->PopupElement(mainGame->wACMessage, 20);
}
break;
}
}
break;
}
default:
break;
}
prev_operation = 0;
mainGame->HideElement(mainGame->wDMQuery);
mainGame->stDMMessage2->setVisible(false);
mainGame->ebDMName->setVisible(false);
mainGame->cbDMCategory->setVisible(false);
break;
}
case BUTTON_DM_CANCEL: {
mainGame->HideElement(mainGame->wDMQuery);
mainGame->stDMMessage2->setVisible(false);
mainGame->ebDMName->setVisible(false);
mainGame->cbDMCategory->setVisible(false);
break;
}
case BUTTON_SIDE_OK: { case BUTTON_SIDE_OK: {
mainGame->soundEffectPlayer->doPressButton(); mainGame->soundEffectPlayer->doPressButton();
if(deckManager.current_deck.main.size() != pre_mainc || deckManager.current_deck.extra.size() != pre_extrac if(deckManager.current_deck.main.size() != pre_mainc || deckManager.current_deck.extra.size() != pre_extrac
...@@ -314,7 +726,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -314,7 +726,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break; break;
} }
case BUTTON_SIDE_RELOAD: { case BUTTON_SIDE_RELOAD: {
deckManager.LoadDeck(mainGame->cbDeckSelect->getItem(mainGame->cbDeckSelect->getSelected())); deckManager.LoadDeck(mainGame->cbCategorySelect, mainGame->cbDeckSelect);
break; break;
} }
case BUTTON_MSG_OK: { case BUTTON_MSG_OK: {
...@@ -333,14 +745,17 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -333,14 +745,17 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
deckManager.current_deck.side.clear(); deckManager.current_deck.side.clear();
} else if(prev_operation == BUTTON_DELETE_DECK) { } else if(prev_operation == BUTTON_DELETE_DECK) {
int sel = prev_sel; int sel = prev_sel;
if(deckManager.DeleteDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(sel))) { mainGame->cbDBDecks->setSelected(sel);
wchar_t filepath[256];
deckManager.GetDeckFile(filepath, mainGame->cbDBCategory, mainGame->cbDBDecks);
if(deckManager.DeleteDeck(filepath)) {
mainGame->cbDBDecks->removeItem(sel); mainGame->cbDBDecks->removeItem(sel);
int count = mainGame->cbDBDecks->getItemCount(); int count = mainGame->cbDBDecks->getItemCount();
if(sel >= count) if(sel >= count)
sel = count - 1; sel = count - 1;
mainGame->cbDBDecks->setSelected(sel); mainGame->cbDBDecks->setSelected(sel);
if(sel != -1) if(sel != -1)
deckManager.LoadDeck(mainGame->cbDBDecks->getItem(sel)); deckManager.LoadDeck(mainGame->cbDBCategory, mainGame->cbDBDecks);
mainGame->stACMessage->setText(dataManager.GetSysString(1338)); mainGame->stACMessage->setText(dataManager.GetSysString(1338));
mainGame->PopupElement(mainGame->wACMessage, 20); mainGame->PopupElement(mainGame->wACMessage, 20);
prev_deck = sel; prev_deck = sel;
...@@ -349,11 +764,16 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -349,11 +764,16 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
prev_sel = -1; prev_sel = -1;
} else if(prev_operation == BUTTON_LEAVE_GAME) { } else if(prev_operation == BUTTON_LEAVE_GAME) {
Terminate(); Terminate();
} else if(prev_operation == COMBOBOX_DBCATEGORY) {
int catesel = mainGame->cbDBCategory->getSelected();
changeCategory(catesel);
} else if(prev_operation == COMBOBOX_DBDECKS) { } else if(prev_operation == COMBOBOX_DBDECKS) {
int sel = mainGame->cbDBDecks->getSelected(); int decksel = mainGame->cbDBDecks->getSelected();
deckManager.LoadDeck(mainGame->cbDBDecks->getItem(sel)); deckManager.LoadDeck(mainGame->cbDBCategory, mainGame->cbDBDecks);
prev_deck = sel; prev_deck = decksel;
is_modified = false; is_modified = false;
} else if(prev_operation == BUTTON_MANAGE_DECK) {
showDeckManage();
} }
prev_operation = 0; prev_operation = 0;
break; break;
...@@ -361,7 +781,10 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -361,7 +781,10 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
case BUTTON_NO: { case BUTTON_NO: {
mainGame->soundEffectPlayer->doPressButton(); mainGame->soundEffectPlayer->doPressButton();
mainGame->HideElement(mainGame->wQuery); mainGame->HideElement(mainGame->wQuery);
if (prev_operation == COMBOBOX_DBDECKS) { if(prev_operation == COMBOBOX_DBCATEGORY) {
mainGame->cbDBCategory->setSelected(prev_category);
}
else if(prev_operation == COMBOBOX_DBDECKS) {
mainGame->cbDBDecks->setSelected(prev_deck); mainGame->cbDBDecks->setSelected(prev_deck);
} }
prev_operation = 0; prev_operation = 0;
...@@ -426,12 +849,39 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -426,12 +849,39 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
} }
case irr::gui::EGET_COMBO_BOX_CHANGED: { case irr::gui::EGET_COMBO_BOX_CHANGED: {
switch(id) { switch(id) {
case COMBOBOX_DBLFLIST: { case COMBOBOX_LFLIST: {
filterList = deckManager._lfList[mainGame->cbDBLFList->getSelected()].content; filterList = deckManager._lfList[mainGame->cbLFList->getSelected()].content;
break;
}
case COMBOBOX_DBCATEGORY: {
if(havePopupWindow()) {
mainGame->cbDBCategory->setSelected(prev_category);
break;
}
int catesel = mainGame->cbDBCategory->getSelected();
if(catesel == 3) {
catesel = 2;
mainGame->cbDBCategory->setSelected(2);
if(prev_category == 2)
break;
}
if(is_modified && !readonly && !mainGame->chkIgnoreDeckChanges->isChecked()) {
mainGame->gMutex.Lock();
mainGame->SetStaticText(mainGame->stQMessage, 370 * mainGame->xScale, mainGame->guiFont, dataManager.GetSysString(1356));
mainGame->PopupElement(mainGame->wQuery);
mainGame->gMutex.Unlock();
prev_operation = id;
break;
}
changeCategory(catesel);
break; break;
} }
case COMBOBOX_DBDECKS: { case COMBOBOX_DBDECKS: {
if(is_modified && !mainGame->chkIgnoreDeckChanges->isChecked()) { if(havePopupWindow()) {
mainGame->cbDBDecks->setSelected(prev_deck);
break;
}
if(is_modified && !readonly && !mainGame->chkIgnoreDeckChanges->isChecked()) {
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
mainGame->SetStaticText(mainGame->stQMessage, 370 * mainGame-> xScale, mainGame->textFont, dataManager.GetSysString(1356)); mainGame->SetStaticText(mainGame->stQMessage, 370 * mainGame-> xScale, mainGame->textFont, dataManager.GetSysString(1356));
mainGame->PopupElement(mainGame->wQuery); mainGame->PopupElement(mainGame->wQuery);
...@@ -439,10 +889,11 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -439,10 +889,11 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
prev_operation = id; prev_operation = id;
break; break;
} }
int sel = mainGame->cbDBDecks->getSelected(); int decksel = mainGame->cbDBDecks->getSelected();
if(sel >= 0) if(decksel >= 0) {
deckManager.LoadDeck(mainGame->cbDBDecks->getItem(sel)); deckManager.LoadDeck(mainGame->cbDBCategory, mainGame->cbDBDecks);
prev_deck = sel; }
prev_deck = decksel;
is_modified = false; is_modified = false;
break; break;
} }
...@@ -562,6 +1013,46 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -562,6 +1013,46 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
InstantSearch(); InstantSearch();
} }
} }
case irr::gui::EGET_LISTBOX_CHANGED: {
switch(id) {
case LISTBOX_CATEGORIES: {
if(mainGame->wDMQuery->isVisible()) {
mainGame->lstCategories->setSelected(prev_category);
break;
}
int catesel = mainGame->lstCategories->getSelected();
if(catesel == 3) {
catesel = 2;
mainGame->lstCategories->setSelected(catesel);
if(prev_category == catesel)
break;
}
refreshDeckList();
mainGame->lstDecks->setSelected(0);
mainGame->cbDBCategory->setSelected(catesel);
changeCategory(catesel);
break;
}
case LISTBOX_DECKS: {
if(mainGame->wDMQuery->isVisible()) {
mainGame->lstDecks->setSelected(prev_deck);
break;
}
int decksel = mainGame->lstDecks->getSelected();
mainGame->cbDBDecks->setSelected(decksel);
if(decksel == -1)
break;
wchar_t filepath[256];
wchar_t catepath[256];
deckManager.GetCategoryPath(catepath, mainGame->lstCategories->getSelected(), mainGame->lstCategories->getListItem(mainGame->lstCategories->getSelected()));
myswprintf(filepath, L"%ls/%ls.ydk", catepath, mainGame->lstDecks->getListItem(decksel));
deckManager.LoadDeck(filepath);
prev_deck = decksel;
break;
}
}
break;
}
default: break; default: break;
} }
break; break;
...@@ -572,7 +1063,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -572,7 +1063,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement(); irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
if(root->getElementFromPoint(mouse_pos) != root) if(root->getElementFromPoint(mouse_pos) != root)
break; break;
if(mainGame->wCategories->isVisible() || mainGame->wQuery->isVisible()) if(havePopupWindow())
break; break;
if(hovered_pos == 0 || hovered_seq == -1) if(hovered_pos == 0 || hovered_seq == -1)
break; break;
...@@ -634,7 +1125,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -634,7 +1125,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
} }
break; break;
} }
if(mainGame->wCategories->isVisible() || mainGame->wQuery->isVisible()) if(havePopupWindow())
break; break;
if(!is_draging) { if(!is_draging) {
if(hovered_pos == 0 || hovered_seq == -1) if(hovered_pos == 0 || hovered_seq == -1)
...@@ -672,7 +1163,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -672,7 +1163,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
case irr::EMIE_MMOUSE_LEFT_UP: { case irr::EMIE_MMOUSE_LEFT_UP: {
if (mainGame->is_siding) if (mainGame->is_siding)
break; break;
if (mainGame->wCategories->isVisible() || mainGame->wQuery->isVisible()) if (havePopupWindow())
break; break;
if (hovered_pos == 0 || hovered_seq == -1) if (hovered_pos == 0 || hovered_seq == -1)
break; break;
......
...@@ -66,10 +66,12 @@ public: ...@@ -66,10 +66,12 @@ public:
size_t pre_extrac; size_t pre_extrac;
size_t pre_sidec; size_t pre_sidec;
code_pointer draging_pointer; code_pointer draging_pointer;
int prev_category;
int prev_deck; int prev_deck;
s32 prev_operation; s32 prev_operation;
int prev_sel; int prev_sel;
bool is_modified; bool is_modified;
bool readonly;
std::unordered_map<int, int>* filterList; std::unordered_map<int, int>* filterList;
std::vector<code_pointer> results; std::vector<code_pointer> results;
......
...@@ -8,7 +8,7 @@ namespace ygo { ...@@ -8,7 +8,7 @@ namespace ygo {
DeckManager deckManager; DeckManager deckManager;
void DeckManager::LoadLFList(const char* path, bool load_none) { void DeckManager::LoadLFListSingle(const char* path) {
LFList* cur = NULL; LFList* cur = NULL;
FILE* fp = fopen(path, "r"); FILE* fp = fopen(path, "r");
char linebuf[256]; char linebuf[256];
...@@ -24,7 +24,7 @@ void DeckManager::LoadLFList(const char* path, bool load_none) { ...@@ -24,7 +24,7 @@ void DeckManager::LoadLFList(const char* path, bool load_none) {
LFList newlist; LFList newlist;
_lfList.push_back(newlist); _lfList.push_back(newlist);
cur = &_lfList[_lfList.size() - 1]; cur = &_lfList[_lfList.size() - 1];
memcpy(cur->listName, (const void*)strBuffer, 40); memcpy(cur->listName, (const void*)strBuffer, 20 * sizeof(wchar_t));
cur->listName[sa] = 0; cur->listName[sa] = 0;
cur->content = new std::unordered_map<int, int>; cur->content = new std::unordered_map<int, int>;
cur->hash = 0x7dfcee6a; cur->hash = 0x7dfcee6a;
...@@ -48,31 +48,16 @@ void DeckManager::LoadLFList(const char* path, bool load_none) { ...@@ -48,31 +48,16 @@ void DeckManager::LoadLFList(const char* path, bool load_none) {
} }
fclose(fp); fclose(fp);
} }
if(!load_none) }
return; void DeckManager::LoadLFList() {
LoadLFListSingle("expansions/lflist.conf");
LoadLFListSingle("lflist.conf");
LFList nolimit; LFList nolimit;
myswprintf(nolimit.listName, L"N/A"); myswprintf(nolimit.listName, L"N/A");
nolimit.hash = 0; nolimit.hash = 0;
nolimit.content = new std::unordered_map<int, int>; nolimit.content = new std::unordered_map<int, int>;
_lfList.push_back(nolimit); _lfList.push_back(nolimit);
} }
bool DeckManager::RenameDeck(const wchar_t* oldname, const wchar_t* newname) {
wchar_t oldfname[256];
wchar_t newfname[256];
myswprintf(oldfname, L"./deck/%ls.ydk", oldname);
myswprintf(newfname, L"./deck/%ls.ydk", newname);
#ifdef WIN32
BOOL result = MoveFileW(oldfname, newfname);
return !!result;
#else
char oldfilefn[256];
char newfilefn[256];
BufferIO::EncodeUTF8(oldfname, oldfilefn);
BufferIO::EncodeUTF8(newfname, newfilefn);
int result = rename(oldfilefn, newfilefn);
return result == 0;
#endif
}
wchar_t* DeckManager::GetLFListName(int lfhash) { wchar_t* DeckManager::GetLFListName(int lfhash) {
for(size_t i = 0; i < _lfList.size(); ++i) { for(size_t i = 0; i < _lfList.size(); ++i) {
if(_lfList[i].hash == (unsigned int)lfhash) { if(_lfList[i].hash == (unsigned int)lfhash) {
...@@ -206,6 +191,37 @@ bool DeckManager::LoadSide(Deck& deck, int* dbuf, int mainc, int sidec) { ...@@ -206,6 +191,37 @@ bool DeckManager::LoadSide(Deck& deck, int* dbuf, int mainc, int sidec) {
deck = ndeck; deck = ndeck;
return true; return true;
} }
void DeckManager::GetCategoryPath(wchar_t* ret, int index, const wchar_t* text) {
wchar_t catepath[256];
switch(index) {
case 0:
myswprintf(catepath, L"./pack");
break;
case 1:
myswprintf(catepath, mainGame->gameConf.bot_deck_path);
break;
case -1:
case 2:
case 3:
myswprintf(catepath, L"./deck");
break;
default:
myswprintf(catepath, L"./deck/%ls", text);
}
BufferIO::CopyWStr(catepath, ret, 256);
}
void DeckManager::GetDeckFile(wchar_t* ret, irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck) {
wchar_t filepath[256];
wchar_t catepath[256];
GetCategoryPath(catepath, cbCategory->getSelected(), cbCategory->getText());
myswprintf(filepath, L"%ls/%ls.ydk", catepath, cbDeck->getItem(cbDeck->getSelected()));
BufferIO::CopyWStr(filepath, ret, 256);
}
bool DeckManager::LoadDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck) {
wchar_t filepath[256];
GetDeckFile(filepath, cbCategory, cbDeck);
return LoadDeck(filepath);
}
FILE* DeckManager::OpenDeckFile(const wchar_t* file, const char* mode) { FILE* DeckManager::OpenDeckFile(const wchar_t* file, const char* mode) {
#ifdef WIN32 #ifdef WIN32
FILE* fp = _wfopen(file, (wchar_t*)mode); FILE* fp = _wfopen(file, (wchar_t*)mode);
...@@ -218,11 +234,11 @@ FILE* DeckManager::OpenDeckFile(const wchar_t* file, const char* mode) { ...@@ -218,11 +234,11 @@ FILE* DeckManager::OpenDeckFile(const wchar_t* file, const char* mode) {
} }
bool DeckManager::LoadDeck(const wchar_t* file) { bool DeckManager::LoadDeck(const wchar_t* file) {
int sp = 0, ct = 0, mainc = 0, sidec = 0, code; int sp = 0, ct = 0, mainc = 0, sidec = 0, code;
wchar_t localfile[64]; FILE* fp = OpenDeckFile(file, "r");
myswprintf(localfile, L"./deck/%ls.ydk", file);
FILE* fp = OpenDeckFile(localfile, "r");
if(!fp) { if(!fp) {
fp = OpenDeckFile(file, "r"); wchar_t localfile[64];
myswprintf(localfile, L"./deck/%ls.ydk", file);
fp = OpenDeckFile(localfile, "r");
} }
if(!fp) if(!fp)
return false; return false;
...@@ -248,9 +264,9 @@ bool DeckManager::LoadDeck(const wchar_t* file) { ...@@ -248,9 +264,9 @@ bool DeckManager::LoadDeck(const wchar_t* file) {
LoadDeck(current_deck, cardlist, mainc, sidec); LoadDeck(current_deck, cardlist, mainc, sidec);
return true; return true;
} }
bool DeckManager::SaveDeck(Deck& deck, const wchar_t* name) { bool DeckManager::SaveDeck(Deck& deck, const wchar_t* file) {
wchar_t file[64]; if(!FileSystem::IsDirExists(L"./deck") && !FileSystem::MakeDir(L"./deck"))
myswprintf(file, L"./deck/%ls.ydk", name); return false;
FILE* fp = OpenDeckFile(file, "w"); FILE* fp = OpenDeckFile(file, "w");
if(!fp) if(!fp)
return false; return false;
...@@ -266,9 +282,7 @@ bool DeckManager::SaveDeck(Deck& deck, const wchar_t* name) { ...@@ -266,9 +282,7 @@ bool DeckManager::SaveDeck(Deck& deck, const wchar_t* name) {
fclose(fp); fclose(fp);
return true; return true;
} }
bool DeckManager::DeleteDeck(Deck& deck, const wchar_t* name) { bool DeckManager::DeleteDeck(const wchar_t* file) {
wchar_t file[64];
myswprintf(file, L"./deck/%ls.ydk", name);
#ifdef WIN32 #ifdef WIN32
BOOL result = DeleteFileW(file); BOOL result = DeleteFileW(file);
return !!result; return !!result;
...@@ -279,13 +293,31 @@ bool DeckManager::DeleteDeck(Deck& deck, const wchar_t* name) { ...@@ -279,13 +293,31 @@ bool DeckManager::DeleteDeck(Deck& deck, const wchar_t* name) {
return result == 0; return result == 0;
#endif #endif
} }
int DeckManager::TypeCount(std::vector<code_pointer> list, unsigned int ctype) { bool DeckManager::CreateCategory(const wchar_t* name) {
int res = 0; if(!FileSystem::IsDirExists(L"./deck") && !FileSystem::MakeDir(L"./deck"))
for(size_t i = 0; i < list.size(); ++i) { return false;
code_pointer cur = list[i]; if(name[0] == 0)
if(cur->second.type & ctype) return false;
res++; wchar_t localname[256];
} myswprintf(localname, L"./deck/%ls", name);
return res; return FileSystem::MakeDir(localname);
}
bool DeckManager::RenameCategory(const wchar_t* oldname, const wchar_t* newname) {
if(!FileSystem::IsDirExists(L"./deck") && !FileSystem::MakeDir(L"./deck"))
return false;
if(newname[0] == 0)
return false;
wchar_t oldlocalname[256];
wchar_t newlocalname[256];
myswprintf(oldlocalname, L"./deck/%ls", oldname);
myswprintf(newlocalname, L"./deck/%ls", newname);
return FileSystem::Rename(oldlocalname, newlocalname);
}
bool DeckManager::DeleteCategory(const wchar_t* name) {
wchar_t localname[256];
myswprintf(localname, L"./deck/%ls", name);
if(!FileSystem::IsDirExists(localname))
return false;
return FileSystem::DeleteDir(localname);
} }
} }
...@@ -35,17 +35,22 @@ public: ...@@ -35,17 +35,22 @@ public:
Deck current_deck; Deck current_deck;
std::vector<LFList> _lfList; std::vector<LFList> _lfList;
void LoadLFList(const char* path, bool load_none); void LoadLFListSingle(const char* path);
void LoadLFList();
wchar_t* GetLFListName(int lfhash); wchar_t* GetLFListName(int lfhash);
int CheckDeck(Deck& deck, int lfhash, bool allow_ocg, bool allow_tcg); int CheckDeck(Deck& deck, int lfhash, bool allow_ocg, bool allow_tcg);
int LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec); int LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec);
bool LoadSide(Deck& deck, int* dbuf, int mainc, int sidec); bool LoadSide(Deck& deck, int* dbuf, int mainc, int sidec);
void GetCategoryPath(wchar_t* ret, int index, const wchar_t* text);
void GetDeckFile(wchar_t* ret, irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck);
bool LoadDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck);
FILE* OpenDeckFile(const wchar_t * file, const char * mode); FILE* OpenDeckFile(const wchar_t * file, const char * mode);
bool LoadDeck(const wchar_t* file); bool LoadDeck(const wchar_t* file);
bool SaveDeck(Deck& deck, const wchar_t* name); bool SaveDeck(Deck& deck, const wchar_t* file);
bool DeleteDeck(Deck& deck, const wchar_t* name); bool DeleteDeck(const wchar_t* file);
static bool RenameDeck(const wchar_t* oldname, const wchar_t* newname); bool CreateCategory(const wchar_t* name);
int TypeCount(std::vector<code_pointer> list, unsigned int ctype); bool RenameCategory(const wchar_t* oldname, const wchar_t* newname);
bool DeleteCategory(const wchar_t* name);
}; };
extern DeckManager deckManager; extern DeckManager deckManager;
......
...@@ -304,6 +304,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -304,6 +304,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
} }
} }
mainGame->env->addMessageBox(L"", msgbuf); mainGame->env->addMessageBox(L"", msgbuf);
mainGame->cbCategorySelect->setEnabled(true);
mainGame->cbDeckSelect->setEnabled(true); mainGame->cbDeckSelect->setEnabled(true);
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
break; break;
...@@ -467,7 +468,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -467,7 +468,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->stHostPrepDuelist[3]->setText(L""); mainGame->stHostPrepDuelist[3]->setText(L"");
mainGame->stHostPrepOB->setText(L""); mainGame->stHostPrepOB->setText(L"");
mainGame->SetStaticText(mainGame->stHostPrepRule, 180 * mainGame->xScale, mainGame->guiFont, str.c_str()); mainGame->SetStaticText(mainGame->stHostPrepRule, 180 * mainGame->xScale, mainGame->guiFont, str.c_str());
mainGame->RefreshDeck(mainGame->cbDeckSelect); mainGame->RefreshCategoryDeck(mainGame->cbCategorySelect, mainGame->cbDeckSelect);
mainGame->cbCategorySelect->setEnabled(true);
mainGame->cbDeckSelect->setEnabled(true); mainGame->cbDeckSelect->setEnabled(true);
if(mainGame->wCreateHost->isVisible()) if(mainGame->wCreateHost->isVisible())
mainGame->HideElement(mainGame->wCreateHost); mainGame->HideElement(mainGame->wCreateHost);
......
...@@ -337,50 +337,23 @@ bool Game::Initialize() { ...@@ -337,50 +337,23 @@ bool Game::Initialize() {
chkHostPrepReady[i]->setEnabled(false); chkHostPrepReady[i]->setEnabled(false);
} }
for (int i = 2; i < 4; ++i) { for (int i = 2; i < 4; ++i) {
stHostPrepDuelist[i] = env->addStaticText(L"", stHostPrepDuelist[i] = env->addStaticText(L"", rect<s32>(60 * xScale, (145 + i * 45) * yScale, 260 * xScale, (185 + i * 45) * yScale), true, false, wHostPrepare);
rect<s32>(60 * xScale, (145 + i * 45) * yScale, 260 * xScale, btnHostPrepKick[i] = env->addButton(rect<s32>(10 * xScale, (145 + i * 45) * yScale, 50 * xScale, (185 + i * 45) * yScale), wHostPrepare, BUTTON_HP_KICK, L"X");
(185 + i * 45) * yScale), true, false, wHostPrepare); chkHostPrepReady[i] = env->addCheckBox(false, rect<s32>(270 * xScale, (145 + i * 45) * yScale, 310 * xScale, (185 + i * 45) * yScale), wHostPrepare, CHECKBOX_HP_READY, L"");
stHostPrepDuelist[i]->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER);
btnHostPrepKick[i] = env->addButton(
rect<s32>(10 * xScale, (145 + i * 45) * yScale, 50 * xScale,
(185 + i * 45) * yScale), wHostPrepare, BUTTON_HP_KICK,
L"X");
chkHostPrepReady[i] = env->addCheckBox(false,
rect<s32>(270 * xScale, (145 + i * 45) * yScale, 310 * xScale,
(185 + i * 45) * yScale), wHostPrepare,
CHECKBOX_HP_READY, L"");
chkHostPrepReady[i]->setEnabled(false); chkHostPrepReady[i]->setEnabled(false);
} }
btnHostPrepOB = env->addButton( btnHostPrepOB = env->addButton(rect<s32>(10 * xScale, 180 * yScale, 110 * xScale, 205 * yScale), wHostPrepare, BUTTON_HP_OBSERVER, dataManager.GetSysString(1252));
rect<s32>(10 * xScale, 180 * yScale, 110 * xScale, 205 * yScale), myswprintf(dataManager.strBuffer, L"%ls%d", dataManager.GetSysString(1253), 0);
wHostPrepare, BUTTON_HP_OBSERVER, dataManager.GetSysString(1252)); stHostPrepOB = env->addStaticText(dataManager.strBuffer, rect<s32>(10 * xScale, 210 * yScale, 270 * xScale, 230 * yScale), false, false, wHostPrepare);
myswprintf(dataManager.strBuffer, L"%ls%d", dataManager.GetSysString(1253), stHostPrepRule = env->addStaticText(L"", rect<s32>(300 * xScale, 30 * yScale, 460 * xScale, 230 * yScale), false, true, wHostPrepare);
0); env->addStaticText(dataManager.GetSysString(1254), rect<s32>(10 * xScale, 385 * yScale, 110 * xScale, 410 * yScale), false, false, wHostPrepare);
stHostPrepOB = env->addStaticText(dataManager.strBuffer,
rect<s32>(10 * xScale, 210 * yScale, 270 * xScale, 230 * yScale),
false, false, wHostPrepare);
stHostPrepRule = env->addStaticText(L"",
rect<s32>(300 * xScale, 30 * yScale, 460 * xScale, 230 * yScale),
false, true, wHostPrepare);
env->addStaticText(dataManager.GetSysString(1254),
rect<s32>(10 * xScale, 385 * yScale, 110 * xScale, 410 * yScale),
false, false, wHostPrepare);
cbDeckSelect = CAndroidGUIComboBox::addAndroidComboBox(env, rect<s32>(120 * xScale, 380 * yScale, 270 * xScale, 405 * yScale), wHostPrepare); cbDeckSelect = CAndroidGUIComboBox::addAndroidComboBox(env, rect<s32>(120 * xScale, 380 * yScale, 270 * xScale, 405 * yScale), wHostPrepare);
btnHostPrepReady = env->addButton( btnHostPrepReady = env->addButton(rect<s32>(170 * xScale, 180 * yScale, 280 * xScale, 205 * yScale), wHostPrepare, BUTTON_HP_READY, dataManager.GetSysString(1218));
rect<s32>(170 * xScale, 180 * yScale, 280 * xScale, 205 * yScale), btnHostPrepNotReady = env->addButton(rect<s32>(170 * xScale, 180 * yScale, 280 * xScale, 205 * yScale), wHostPrepare, BUTTON_HP_NOTREADY, dataManager.GetSysString(1219));
wHostPrepare, BUTTON_HP_READY, dataManager.GetSysString(1218));
btnHostPrepNotReady = env->addButton(
rect<s32>(170 * xScale, 180 * yScale, 280 * xScale, 205 * yScale),
wHostPrepare, BUTTON_HP_NOTREADY, dataManager.GetSysString(1219));
btnHostPrepNotReady->setVisible(false); btnHostPrepNotReady->setVisible(false);
btnHostPrepStart = env->addButton( btnHostPrepStart = env->addButton(rect<s32>(280 * xScale, 380 * yScale, 390 * xScale, 405 * yScale), wHostPrepare, BUTTON_HP_START, dataManager.GetSysString(1215));
rect<s32>(280 * xScale, 380 * yScale, 390 * xScale, 405 * yScale), btnHostPrepCancel = env->addButton(rect<s32>(400 * xScale, 380 * yScale, 510 * xScale, 405 * yScale), wHostPrepare, BUTTON_HP_CANCEL, dataManager.GetSysString(1210));
wHostPrepare, BUTTON_HP_START, dataManager.GetSysString(1215));
btnHostPrepCancel = env->addButton(
rect<s32>(400 * xScale, 380 * yScale, 510 * xScale, 405 * yScale),
wHostPrepare, BUTTON_HP_CANCEL, dataManager.GetSysString(1210));
#endif #endif
//img //img
wCardImg = env->addStaticText(L"", rect<s32>(1 * xScale, 1 * yScale, ( 1 + CARD_IMG_WIDTH + 20) * xScale, (1 + CARD_IMG_HEIGHT + 18) * yScale), true, false, 0, -1, true); wCardImg = env->addStaticText(L"", rect<s32>(1 * xScale, 1 * yScale, ( 1 + CARD_IMG_WIDTH + 20) * xScale, (1 + CARD_IMG_HEIGHT + 18) * yScale), true, false, 0, -1, true);
wCardImg->setBackgroundColor(0x6011113d); wCardImg->setBackgroundColor(0x6011113d);
...@@ -667,7 +640,6 @@ bool Game::Initialize() { ...@@ -667,7 +640,6 @@ bool Game::Initialize() {
wCmdMenu->setDrawTitlebar(false); wCmdMenu->setDrawTitlebar(false);
wCmdMenu->setVisible(false); wCmdMenu->setVisible(false);
wCmdMenu->getCloseButton()->setVisible(false); wCmdMenu->getCloseButton()->setVisible(false);
#ifdef _IRR_ANDROID_PLATFORM_
btnActivate = env->addButton(rect<s32>(1 * xScale, 1 * yScale, 105 * xScale, 51 * yScale), wCmdMenu, BUTTON_CMD_ACTIVATE, dataManager.GetSysString(1150)); btnActivate = env->addButton(rect<s32>(1 * xScale, 1 * yScale, 105 * xScale, 51 * yScale), wCmdMenu, BUTTON_CMD_ACTIVATE, dataManager.GetSysString(1150));
btnSummon = env->addButton(rect<s32>(1 * xScale, 52 * yScale, 105 * xScale, 102 * yScale), wCmdMenu, BUTTON_CMD_SUMMON, dataManager.GetSysString(1151)); btnSummon = env->addButton(rect<s32>(1 * xScale, 52 * yScale, 105 * xScale, 102 * yScale), wCmdMenu, BUTTON_CMD_SUMMON, dataManager.GetSysString(1151));
btnSPSummon = env->addButton(rect<s32>(1 * xScale, 103 * yScale, 105 * xScale, 153 * yScale), wCmdMenu, BUTTON_CMD_SPSUMMON, dataManager.GetSysString(1152)); btnSPSummon = env->addButton(rect<s32>(1 * xScale, 103 * yScale, 105 * xScale, 153 * yScale), wCmdMenu, BUTTON_CMD_SPSUMMON, dataManager.GetSysString(1152));
...@@ -678,28 +650,61 @@ bool Game::Initialize() { ...@@ -678,28 +650,61 @@ bool Game::Initialize() {
btnShowList = env->addButton(rect<s32>(1 * xScale, 358 * yScale, 105 * xScale, 408 * yScale), wCmdMenu, BUTTON_CMD_SHOWLIST, dataManager.GetSysString(1158)); btnShowList = env->addButton(rect<s32>(1 * xScale, 358 * yScale, 105 * xScale, 408 * yScale), wCmdMenu, BUTTON_CMD_SHOWLIST, dataManager.GetSysString(1158));
btnOperation = env->addButton(rect<s32>(1 * xScale, 409 * yScale, 105 * xScale, 459 * yScale), wCmdMenu, BUTTON_CMD_ACTIVATE, dataManager.GetSysString(1161)); btnOperation = env->addButton(rect<s32>(1 * xScale, 409 * yScale, 105 * xScale, 459 * yScale), wCmdMenu, BUTTON_CMD_ACTIVATE, dataManager.GetSysString(1161));
btnReset = env->addButton(rect<s32>(1 * xScale, 460 * yScale , 105 * xScale, 510 * yScale), wCmdMenu, BUTTON_CMD_RESET, dataManager.GetSysString(1162)); btnReset = env->addButton(rect<s32>(1 * xScale, 460 * yScale , 105 * xScale, 510 * yScale), wCmdMenu, BUTTON_CMD_RESET, dataManager.GetSysString(1162));
#endif
//deck edit //deck edit
wDeckEdit = env->addStaticText(L"", rect<s32>(309 * xScale, 8 * yScale, 605 * xScale, 130 * yScale), true, false, 0, -1, true); wDeckEdit = env->addStaticText(L"", rect<s32>(309 * xScale, 8 * yScale, 605 * xScale, 130 * yScale), true, false, 0, -1, true);
wDeckEdit->setVisible(false); wDeckEdit->setVisible(false);
env->addStaticText(dataManager.GetSysString(1300), rect<s32>(10 * xScale, 9 * yScale, 100 * xScale, 29 * yScale), false, false, wDeckEdit); btnManageDeck = env->addButton(rect<s32>(225 * xScale, 5 * yScale, 290 * xScale, 30 * yScale), wDeckEdit, BUTTON_MANAGE_DECK, dataManager.GetSysString(1328));
#ifdef _IRR_ANDROID_PLATFORM_ //deck manage
cbDBLFList = CAndroidGUIComboBox::addAndroidComboBox(env, rect<s32>(80 * xScale, 5 * yScale, 220 * xScale, 30 * yScale), wDeckEdit, COMBOBOX_DBLFLIST); wDeckManage = env->addWindow(rect<s32>(310 * xScale, 135 * yScale, 800 * xScale, 465 * yScale), false, dataManager.GetSysString(1460), 0, WINDOW_DECK_MANAGE);
#else wDeckManage->setVisible(false);
cbDBLFList = env->addComboBox(rect<s32>(80 * xScale, 5 * yScale, 220 * xScale, 30 * yScale), wDeckEdit, COMBOBOX_DBLFLIST); lstCategories = env->addListBox(rect<s32>(10 * xScale, 30 * yScale, 140 * xScale, 320 * yScale), wDeckManage, LISTBOX_CATEGORIES, true);
#endif lstDecks = env->addListBox(rect<s32>(150 * xScale, 30 * yScale, 340 * xScale, 320 * yScale), wDeckManage, LISTBOX_DECKS, true);
env->addStaticText(dataManager.GetSysString(1301), rect<s32>(10 * xScale, 39 * yScale, 100 * xScale, 59 * yScale), false, false, wDeckEdit); posY = 30;
#ifdef _IRR_ANDROID_PLATFORM_ btnNewCategory = env->addButton(rect<s32>(350 * xScale, posY * yScale, 480 * xScale, (posY + 25) * yScale), wDeckManage, BUTTON_NEW_CATEGORY, dataManager.GetSysString(1461));
cbDBDecks = CAndroidGUIComboBox::addAndroidComboBox(env, rect<s32>(80 * xScale, 35 * yScale, 220 * xScale, 60 * yScale), wDeckEdit, COMBOBOX_DBDECKS); posY += 60;
#else btnRenameCategory = env->addButton(rect<s32>(350 * xScale, posY * yScale, 480 * xScale, (posY + 25) * yScale), wDeckManage, BUTTON_RENAME_CATEGORY, dataManager.GetSysString(1462));
cbDBDecks = env->addComboBox(rect<s32>(80 * xScale, 35 * yScale, 220 * xScale, 60 * yScale), wDeckEdit, COMBOBOX_DBDECKS); posY += 60;
#endif btnDeleteCategory = env->addButton(rect<s32>(350 * xScale, posY * yScale, 480 * xScale, (posY + 25) * yScale), wDeckManage, BUTTON_DELETE_CATEGORY, dataManager.GetSysString(1463));
posY += 60;
btnNewDeck = env->addButton(rect<s32>(350 * xScale, posY * yScale, 480 * xScale, (posY + 25) * yScale), wDeckManage, BUTTON_NEW_DECK, dataManager.GetSysString(1464));
posY += 60;
btnRenameDeck = env->addButton(rect<s32>(350 * xScale, posY * yScale, 480 * xScale, (posY + 25) * yScale), wDeckManage, BUTTON_RENAME_DECK, dataManager.GetSysString(1465));
posY += 60;
btnDMDeleteDeck = env->addButton(rect<s32>(350 * xScale, posY * yScale, 480 * xScale, (posY + 25) * yScale), wDeckManage, BUTTON_DELETE_DECK_DM, dataManager.GetSysString(1466));
posY += 60;
btnMoveDeck = env->addButton(rect<s32>(350 * xScale, posY * yScale, 480 * xScale, (posY + 25) * yScale), wDeckManage, BUTTON_MOVE_DECK, dataManager.GetSysString(1467));
posY += 60;
btnCopyDeck = env->addButton(rect<s32>(350 * xScale, posY * yScale, 480 * xScale, (posY + 25) * yScale), wDeckManage, BUTTON_COPY_DECK, dataManager.GetSysString(1468));
posY += 85;
cbLFList = CAndroidGUIComboBox::addAndroidComboBox(rect<s32>(350 * xScale, posY * yScale, 480 * xScale, (posY + 25) * yScale), wDeckManage, COMBOBOX_LFLIST);
cbLFList->setMaxSelectionRows(10);
for(unsigned int i = 0; i < deckManager._lfList.size(); ++i) for(unsigned int i = 0; i < deckManager._lfList.size(); ++i)
cbDBLFList->addItem(deckManager._lfList[i].listName); cbLFList->addItem(deckManager._lfList[i].listName);
//deck manage query
wDMQuery = env->addWindow(rect<s32>(400, 200, 710, 320), false, dataManager.GetSysString(1460));
wDMQuery->getCloseButton()->setVisible(false);
wDMQuery->setVisible(false);
stDMMessage = env->addStaticText(L"", rect<s32>(20, 25 * yScale, 290, 45 * yScale), false, false, wDMQuery);
stDMMessage2 = env->addStaticText(L"", rect<s32>(20, 50 * yScale, 290, 70 * yScale), false, false, wDMQuery, -1, true);
stDMMessage2->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
ebDMName = env->addEditBox(L"", rect<s32>(20, 50 * yScale, 290, 70 * yScale), true, wDMQuery, -1);
ebDMName->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
cbDMCategory = CAndroidGUIComboBox::addAndroidComboBox(rect<s32>(20 * xScale, 50 * yScale, 290 * xScale, 70 * yScale), wDMQuery, -1);
stDMMessage2->setVisible(false);
ebDMName->setVisible(false);
cbDMCategory->setVisible(false);
cbDMCategory->setMaxSelectionRows(10);
btnDMOK = env->addButton(rect<s32>(70 * xScale, 80 * yScale, 140 * xScale, 105 * yScale), wDMQuery, BUTTON_DM_OK, dataManager.GetSysString(1211));
btnDMCancel = env->addButton(rect<s32>(170 * xScale, 80 * yScale, 240 * xScale, 105 * yScale), wDMQuery, BUTTON_DM_CANCEL, dataManager.GetSysString(1212));
stDBCategory = env->addStaticText(dataManager.GetSysString(1300), rect<s32>(10 * xScale, 9 * yScale, 100 * xScale, 29 * yScale), false, false, wDeckEdit);
cbDBCategory = CAndroidGUIComboBox::addAndroidComboBox(rect<s32>(80 * xScale, 5 * yScale, 220 * xScale, 30 * yScale), wDeckEdit, COMBOBOX_DBCATEGORY);
cbDBCategory->setMaxSelectionRows(15);
stDeck = env->addStaticText(dataManager.GetSysString(1301), rect<s32>(10 * xScale, 39 * yScale, 100 * xScale, 59 * yScale), false, false, wDeckEdit);
cbDBDecks = CAndroidGUIComboBox::addAndroidComboBox(rect<s32>(80 * xScale, 35 * yScale, 220 * xScale, 60 * yScale), wDeckEdit, COMBOBOX_DBDECKS);
cbDBDecks->setMaxSelectionRows(15);
btnSaveDeck = env->addButton(rect<s32>(225 * xScale, 35 * yScale, 290 * xScale, 60 * yScale), wDeckEdit, BUTTON_SAVE_DECK, dataManager.GetSysString(1302)); btnSaveDeck = env->addButton(rect<s32>(225 * xScale, 35 * yScale, 290 * xScale, 60 * yScale), wDeckEdit, BUTTON_SAVE_DECK, dataManager.GetSysString(1302));
#ifdef _IRR_ANDROID_PLATFORM_ ebDeckname = env->addEditBox(L"", rect<s32>(80 * xScale, 65 * yScale, 220 * xScale, 90 * yScale), true, wDeckEdit, -1);
ebDeckname = CAndroidGUIEditBox::addAndroidEditBox(L"", true, env, rect<s32>(80 * xScale, 65 * yScale, 220 * xScale, 90 * yScale), wDeckEdit, -1);
#endif
ebDeckname->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER); ebDeckname->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
btnSaveDeckAs = env->addButton(rect<s32>(225 * xScale, 65 * yScale, 290 * xScale, 90 * yScale), wDeckEdit, BUTTON_SAVE_DECK_AS, dataManager.GetSysString(1303)); btnSaveDeckAs = env->addButton(rect<s32>(225 * xScale, 65 * yScale, 290 * xScale, 90 * yScale), wDeckEdit, BUTTON_SAVE_DECK_AS, dataManager.GetSysString(1303));
btnDeleteDeck = env->addButton(rect<s32>(10 * xScale, 95 * yScale, 70 * xScale, 116 * yScale), wDeckEdit, BUTTON_DELETE_DECK, dataManager.GetSysString(1308)); btnDeleteDeck = env->addButton(rect<s32>(10 * xScale, 95 * yScale, 70 * xScale, 116 * yScale), wDeckEdit, BUTTON_DELETE_DECK, dataManager.GetSysString(1308));
...@@ -714,21 +719,11 @@ bool Game::Initialize() { ...@@ -714,21 +719,11 @@ bool Game::Initialize() {
btnSideSort->setVisible(false); btnSideSort->setVisible(false);
btnSideReload = env->addButton(rect<s32>(440 * xScale, 100 * yScale, 500 * xScale, 130 * yScale), 0, BUTTON_SIDE_RELOAD, dataManager.GetSysString(1309)); btnSideReload = env->addButton(rect<s32>(440 * xScale, 100 * yScale, 500 * xScale, 130 * yScale), 0, BUTTON_SIDE_RELOAD, dataManager.GetSysString(1309));
btnSideReload->setVisible(false); btnSideReload->setVisible(false);
btnRenameDeck = env->addButton(rect<s32>(75 * xScale, 95 * yScale, 125 * xScale, 116 * yScale), wDeckEdit, BUTTON_RENAME_DECK, dataManager.GetSysString(1362));
// //
scrFilter = env->addScrollBar(false, recti(999 * xScale, 161 * yScale, 1019 * xScale, 629 * yScale), 0, SCROLL_FILTER); scrFilter = env->addScrollBar(false, recti(999 * xScale, 161 * yScale, 1019 * xScale, 629 * yScale), 0, SCROLL_FILTER);
scrFilter->setLargeStep(10); scrFilter->setLargeStep(10);
scrFilter->setSmallStep(1); scrFilter->setSmallStep(1);
scrFilter->setVisible(false); scrFilter->setVisible(false);
//rename deck
wRenameDeck = env->addWindow(rect<s32>(490 * xScale, 180 * yScale, 840 * xScale, 340 * yScale), false, dataManager.GetSysString(1367));
wRenameDeck->getCloseButton()->setVisible(false);
wRenameDeck->setVisible(false);
env->addStaticText(dataManager.GetSysString(1280), rect<s32>(20 * xScale, 25 * yScale, 290 * xScale, 45 * yScale), false, false, wRenameDeck);
ebREName = CAndroidGUIEditBox::addAndroidEditBox(L"", true, env, rect<s32>(20 * xScale, 50 * yScale, 330 * xScale, 90 * yScale), wRenameDeck, -1);
ebREName->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
btnREYes = env->addButton(rect<s32>(70 * xScale, 100 * yScale, 160 * xScale, 150 * yScale), wRenameDeck, BUTTON_RENAME_DECK_SAVE, dataManager.GetSysString(1341));
btnRENo = env->addButton(rect<s32>(180 * xScale, 100 * yScale, 270 * xScale, 150 * yScale), wRenameDeck, BUTTON_RENAME_DECK_CANCEL, dataManager.GetSysString(1212));
//sort type //sort type
wSort = env->addStaticText(L"", rect<s32>(930 * xScale, 132 * yScale, 1020 * xScale, 156 * yScale), true, false, 0, -1, true); wSort = env->addStaticText(L"", rect<s32>(930 * xScale, 132 * yScale, 1020 * xScale, 156 * yScale), true, false, 0, -1, true);
cbSortType = env->addComboBox(rect<s32>(10 * xScale, 2 * yScale, 85 * xScale, 22 * yScale), wSort, COMBOBOX_SORTTYPE); cbSortType = env->addComboBox(rect<s32>(10 * xScale, 2 * yScale, 85 * xScale, 22 * yScale), wSort, COMBOBOX_SORTTYPE);
...@@ -1304,9 +1299,44 @@ void Game::LoadExpansions() { ...@@ -1304,9 +1299,44 @@ void Game::LoadExpansions() {
} }
} }
} }
void Game::RefreshDeck(irr::gui::IGUIComboBox* cbDeck) { void Game::RefreshCategoryDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck, bool selectlastused) {
cbCategory->clear();
cbCategory->addItem(dataManager.GetSysString(1450));
cbCategory->addItem(dataManager.GetSysString(1451));
cbCategory->addItem(dataManager.GetSysString(1452));
cbCategory->addItem(dataManager.GetSysString(1453));
FileSystem::TraversalDir(L"./deck", [cbCategory](const wchar_t* name, bool isdir) {
if(isdir) {
cbCategory->addItem(name);
}
});
cbCategory->setSelected(2);
if(selectlastused) {
for(size_t i = 0; i < cbCategory->getItemCount(); ++i) {
if(!wcscmp(cbCategory->getItem(i), gameConf.lastcategory)) {
cbCategory->setSelected(i);
break;
}
}
}
RefreshDeck(cbCategory, cbDeck);
if(selectlastused) {
for(size_t i = 0; i < cbDeck->getItemCount(); ++i) {
if(!wcscmp(cbDeck->getItem(i), gameConf.lastdeck)) {
cbDeck->setSelected(i);
break;
}
}
}
}
void Game::RefreshDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck) {
wchar_t catepath[256];
deckManager.GetCategoryPath(catepath, cbCategory->getSelected(), cbCategory->getText());
RefreshDeck(catepath, cbDeck);
}
void Game::RefreshDeck(const wchar_t* deckpath, irr::gui::IGUIComboBox* cbDeck) {
cbDeck->clear(); cbDeck->clear();
FileSystem::TraversalDir(L"./deck", [cbDeck](const wchar_t* name, bool isdir) { FileSystem::TraversalDir(deckpath, [cbDeck](const wchar_t* name, bool isdir) {
if(!isdir && wcsrchr(name, '.') && !wcsncasecmp(wcsrchr(name, '.'), L".ydk", 4)) { if(!isdir && wcsrchr(name, '.') && !wcsncasecmp(wcsrchr(name, '.'), L".ydk", 4)) {
size_t len = wcslen(name); size_t len = wcslen(name);
wchar_t deckname[256]; wchar_t deckname[256];
...@@ -1315,12 +1345,6 @@ void Game::RefreshDeck(irr::gui::IGUIComboBox* cbDeck) { ...@@ -1315,12 +1345,6 @@ void Game::RefreshDeck(irr::gui::IGUIComboBox* cbDeck) {
cbDeck->addItem(deckname); cbDeck->addItem(deckname);
} }
}); });
for(size_t i = 0; i < cbDeck->getItemCount(); ++i) {
if(!wcscmp(cbDeck->getItem(i), gameConf.lastdeck)) {
cbDeck->setSelected(i);
break;
}
}
} }
void Game::RefreshReplay() { void Game::RefreshReplay() {
lstReplayList->clear(); lstReplayList->clear();
...@@ -1386,6 +1410,8 @@ void Game::LoadConfig() { ...@@ -1386,6 +1410,8 @@ void Game::LoadConfig() {
gameConf.textfontsize = 16; gameConf.textfontsize = 16;
gameConf.nickname[0] = 0; gameConf.nickname[0] = 0;
gameConf.gamename[0] = 0; gameConf.gamename[0] = 0;
gameConf.bot_deck_path[0] = 0;
gameConf.lastcategory[0] = 0;
BufferIO::DecodeUTF8(android::getLastDeck(appMain).c_str(), wstr); BufferIO::DecodeUTF8(android::getLastDeck(appMain).c_str(), wstr);
BufferIO::CopyWStr(wstr, gameConf.lastdeck, 64); BufferIO::CopyWStr(wstr, gameConf.lastdeck, 64);
irr:os::Printer::log(android::getFontPath(appMain).c_str()); irr:os::Printer::log(android::getFontPath(appMain).c_str());
......
...@@ -23,10 +23,12 @@ struct Config { ...@@ -23,10 +23,12 @@ struct Config {
wchar_t lastport[10]; wchar_t lastport[10];
wchar_t nickname[20]; wchar_t nickname[20];
wchar_t gamename[20]; wchar_t gamename[20];
wchar_t lastcategory[64];
wchar_t lastdeck[64]; wchar_t lastdeck[64];
wchar_t textfont[256]; wchar_t textfont[256];
wchar_t numfont[256]; wchar_t numfont[256];
wchar_t roompass[20]; wchar_t roompass[20];
wchar_t bot_deck_path[64];
//settings //settings
int chkMAutoPos; int chkMAutoPos;
int chkSTAutoPos; int chkSTAutoPos;
...@@ -119,7 +121,9 @@ public: ...@@ -119,7 +121,9 @@ public:
void InitStaticText(irr::gui::IGUIStaticText* pControl, u32 cWidth, u32 cHeight, irr::gui::CGUITTFont* font, const wchar_t* text); void InitStaticText(irr::gui::IGUIStaticText* pControl, u32 cWidth, u32 cHeight, irr::gui::CGUITTFont* font, const wchar_t* text);
void SetStaticText(irr::gui::IGUIStaticText* pControl, u32 cWidth, irr::gui::CGUITTFont* font, const wchar_t* text, u32 pos = 0); void SetStaticText(irr::gui::IGUIStaticText* pControl, u32 cWidth, irr::gui::CGUITTFont* font, const wchar_t* text, u32 pos = 0);
void LoadExpansions(); void LoadExpansions();
void RefreshDeck(irr::gui::IGUIComboBox* cbDeck); void RefreshCategoryDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck, bool selectlastused = true);
void RefreshDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck);
void RefreshDeck(const wchar_t* deckpath, irr::gui::IGUIComboBox* cbDeck);
void RefreshReplay(); void RefreshReplay();
void RefreshSingleplay(); void RefreshSingleplay();
void RefreshBot(); void RefreshBot();
...@@ -251,12 +255,12 @@ public: ...@@ -251,12 +255,12 @@ public:
irr::gui::IGUICheckBox* chkRandomPos; irr::gui::IGUICheckBox* chkRandomPos;
irr::gui::IGUICheckBox* chkAutoChain; irr::gui::IGUICheckBox* chkAutoChain;
irr::gui::IGUICheckBox* chkWaitChain; irr::gui::IGUICheckBox* chkWaitChain;
irr::gui::IGUICheckBox* chkQuickAnimation;
irr::gui::IGUICheckBox* chkAutoSaveReplay;
irr::gui::IGUIWindow* tabSystem; irr::gui::IGUIWindow* tabSystem;
irr::gui::IGUIElement* elmTabSystemLast; irr::gui::IGUIElement* elmTabSystemLast;
irr::gui::IGUIScrollBar* scrTabSystem; irr::gui::IGUIScrollBar* scrTabSystem;
irr::gui::IGUICheckBox* chkDrawFieldSpell; irr::gui::IGUICheckBox* chkDrawFieldSpell;
irr::gui::IGUICheckBox* chkQuickAnimation;
irr::gui::IGUICheckBox* chkAutoSaveReplay;
irr::gui::IGUICheckBox* chkIgnoreDeckChanges; irr::gui::IGUICheckBox* chkIgnoreDeckChanges;
irr::gui::IGUICheckBox* chkAutoSearch; irr::gui::IGUICheckBox* chkAutoSearch;
irr::gui::IGUICheckBox* chkMultiKeywords; irr::gui::IGUICheckBox* chkMultiKeywords;
...@@ -303,6 +307,7 @@ public: ...@@ -303,6 +307,7 @@ public:
irr::gui::IGUIStaticText* stHostPrepDuelist[4]; irr::gui::IGUIStaticText* stHostPrepDuelist[4];
irr::gui::IGUICheckBox* chkHostPrepReady[4]; irr::gui::IGUICheckBox* chkHostPrepReady[4];
irr::gui::IGUIButton* btnHostPrepKick[4]; irr::gui::IGUIButton* btnHostPrepKick[4];
irr::gui::IGUIComboBox* cbCategorySelect;
irr::gui::IGUIComboBox* cbDeckSelect; irr::gui::IGUIComboBox* cbDeckSelect;
irr::gui::IGUIStaticText* stHostPrepRule; irr::gui::IGUIStaticText* stHostPrepRule;
irr::gui::IGUIStaticText* stHostPrepOB; irr::gui::IGUIStaticText* stHostPrepOB;
...@@ -422,8 +427,9 @@ public: ...@@ -422,8 +427,9 @@ public:
irr::gui::IGUIButton* btnEP; irr::gui::IGUIButton* btnEP;
//deck edit //deck edit
irr::gui::IGUIStaticText* wDeckEdit; irr::gui::IGUIStaticText* wDeckEdit;
irr::gui::IGUIComboBox* cbDBLFList; irr::gui::IGUIComboBox* cbDBCategory;
irr::gui::IGUIComboBox* cbDBDecks; irr::gui::IGUIComboBox* cbDBDecks;
irr::gui::IGUIButton* btnManageDeck;
irr::gui::IGUIButton* btnClearDeck; irr::gui::IGUIButton* btnClearDeck;
irr::gui::IGUIButton* btnSortDeck; irr::gui::IGUIButton* btnSortDeck;
irr::gui::IGUIButton* btnShuffleDeck; irr::gui::IGUIButton* btnShuffleDeck;
...@@ -435,12 +441,37 @@ public: ...@@ -435,12 +441,37 @@ public:
irr::gui::IGUIButton* btnSideSort; irr::gui::IGUIButton* btnSideSort;
irr::gui::IGUIButton* btnSideReload; irr::gui::IGUIButton* btnSideReload;
irr::gui::IGUIEditBox* ebDeckname; irr::gui::IGUIEditBox* ebDeckname;
irr::gui::IGUIStaticText* stDBCategory;
irr::gui::IGUIStaticText* stDeck;
irr::gui::IGUIStaticText* stCategory;
irr::gui::IGUIStaticText* stLimit;
irr::gui::IGUIStaticText* stAttribute;
irr::gui::IGUIStaticText* stRace;
irr::gui::IGUIStaticText* stAttack;
irr::gui::IGUIStaticText* stDefense;
irr::gui::IGUIStaticText* stStar;
irr::gui::IGUIStaticText* stSearch;
irr::gui::IGUIStaticText* stScale;
//deck manage
irr::gui::IGUIWindow* wDeckManage;
irr::gui::IGUIListBox* lstCategories;
irr::gui::IGUIListBox* lstDecks;
irr::gui::IGUIButton* btnNewCategory;
irr::gui::IGUIButton* btnRenameCategory;
irr::gui::IGUIButton* btnDeleteCategory;
irr::gui::IGUIButton* btnNewDeck;
irr::gui::IGUIButton* btnRenameDeck; irr::gui::IGUIButton* btnRenameDeck;
//deck rename irr::gui::IGUIButton* btnDMDeleteDeck;
irr::gui::IGUIWindow* wRenameDeck; irr::gui::IGUIButton* btnMoveDeck;
irr::gui::IGUIEditBox* ebREName; irr::gui::IGUIButton* btnCopyDeck;
irr::gui::IGUIButton* btnREYes; irr::gui::IGUIWindow* wDMQuery;
irr::gui::IGUIButton* btnRENo; irr::gui::IGUIStaticText* stDMMessage;
irr::gui::IGUIStaticText* stDMMessage2;
irr::gui::IGUIEditBox* ebDMName;
irr::gui::IGUIComboBox* cbDMCategory;
irr::gui::IGUIButton* btnDMOK;
irr::gui::IGUIButton* btnDMCancel;
irr::gui::IGUIComboBox* cbLFList;
//filter //filter
irr::gui::IGUIStaticText* wFilter; irr::gui::IGUIStaticText* wFilter;
irr::gui::IGUIScrollBar* scrFilter; irr::gui::IGUIScrollBar* scrFilter;
...@@ -552,12 +583,28 @@ extern Game* mainGame; ...@@ -552,12 +583,28 @@ extern Game* mainGame;
#define CHECKBOX_HP_READY 125 #define CHECKBOX_HP_READY 125
#define BUTTON_HP_READY 126 #define BUTTON_HP_READY 126
#define BUTTON_HP_NOTREADY 127 #define BUTTON_HP_NOTREADY 127
#define COMBOBOX_HP_CATEGORY 128
#define LISTBOX_REPLAY_LIST 130 #define LISTBOX_REPLAY_LIST 130
#define BUTTON_LOAD_REPLAY 131 #define BUTTON_LOAD_REPLAY 131
#define BUTTON_CANCEL_REPLAY 132 #define BUTTON_CANCEL_REPLAY 132
#define BUTTON_DELETE_REPLAY 133 #define BUTTON_DELETE_REPLAY 133
#define BUTTON_RENAME_REPLAY 134 #define BUTTON_RENAME_REPLAY 134
#define EDITBOX_CHAT 140 #define BUTTON_REPLAY_START 140
#define BUTTON_REPLAY_PAUSE 141
#define BUTTON_REPLAY_STEP 142
#define BUTTON_REPLAY_UNDO 143
#define BUTTON_REPLAY_EXIT 144
#define BUTTON_REPLAY_SWAP 145
#define BUTTON_REPLAY_SAVE 146
#define BUTTON_REPLAY_CANCEL 147
#define LISTBOX_SINGLEPLAY_LIST 150
#define BUTTON_LOAD_SINGLEPLAY 151
#define BUTTON_CANCEL_SINGLEPLAY 152
#define LISTBOX_BOT_LIST 153
#define BUTTON_BOT_START 154
#define CHECKBOX_BOT_OLD_RULE 155
#define EDITBOX_CHAT 199
#define BUTTON_MSG_OK 200 #define BUTTON_MSG_OK 200
#define BUTTON_YES 201 #define BUTTON_YES 201
#define BUTTON_NO 202 #define BUTTON_NO 202
...@@ -622,8 +669,8 @@ extern Game* mainGame; ...@@ -622,8 +669,8 @@ extern Game* mainGame;
#define BUTTON_DISPLAY_4 294 #define BUTTON_DISPLAY_4 294
#define SCROLL_CARD_DISPLAY 295 #define SCROLL_CARD_DISPLAY 295
#define BUTTON_CARD_DISP_OK 296 #define BUTTON_CARD_DISP_OK 296
#define BUTTON_CATEGORY_OK 300 #define BUTTON_MANAGE_DECK 300
#define COMBOBOX_DBLFLIST 301 #define COMBOBOX_DBCATEGORY 301
#define COMBOBOX_DBDECKS 302 #define COMBOBOX_DBDECKS 302
#define BUTTON_CLEAR_DECK 303 #define BUTTON_CLEAR_DECK 303
#define BUTTON_SAVE_DECK 304 #define BUTTON_SAVE_DECK 304
...@@ -642,37 +689,37 @@ extern Game* mainGame; ...@@ -642,37 +689,37 @@ extern Game* mainGame;
#define BUTTON_CLEAR_FILTER 317 #define BUTTON_CLEAR_FILTER 317
#define COMBOBOX_ATTRIBUTE 318 #define COMBOBOX_ATTRIBUTE 318
#define COMBOBOX_RACE 319 #define COMBOBOX_RACE 319
#define BUTTON_REPLAY_START 320 #define COMBOBOX_LIMIT 320
#define BUTTON_REPLAY_PAUSE 321 #define BUTTON_CATEGORY_OK 321
#define BUTTON_REPLAY_STEP 322 #define BUTTON_MARKS_FILTER 322
#define BUTTON_REPLAY_UNDO 323 #define BUTTON_MARKERS_OK 323
#define BUTTON_REPLAY_EXIT 324 #define COMBOBOX_SORTTYPE 324
#define BUTTON_REPLAY_SWAP 325
#define BUTTON_REPLAY_SAVE 330 #define WINDOW_DECK_MANAGE 330
#define BUTTON_REPLAY_CANCEL 331 #define BUTTON_NEW_CATEGORY 331
#define BUTTON_BOT_START 340 #define BUTTON_RENAME_CATEGORY 332
#define LISTBOX_BOT_LIST 341 #define BUTTON_DELETE_CATEGORY 333
#define CHECKBOX_BOT_OLD_RULE 342 #define BUTTON_NEW_DECK 334
#define LISTBOX_SINGLEPLAY_LIST 343 #define BUTTON_RENAME_DECK 335
#define BUTTON_LOAD_SINGLEPLAY 344 #define BUTTON_DELETE_DECK_DM 336
#define BUTTON_CANCEL_SINGLEPLAY 345 #define BUTTON_MOVE_DECK 337
#define SCROLL_TAB_HELPER 350 #define BUTTON_COPY_DECK 338
#define SCROLL_TAB_SYSTEM 351 #define LISTBOX_CATEGORIES 339
#define LISTBOX_DECKS 340
#define BUTTON_DM_OK 341
#define BUTTON_DM_CANCEL 342
#define COMBOBOX_LFLIST 349
#define CHECKBOX_AUTO_SEARCH 360 #define CHECKBOX_AUTO_SEARCH 360
#define CHECKBOX_MULTI_KEYWORDS 372 #define CHECKBOX_MULTI_KEYWORDS 372
#define CHECKBOX_PREFER_EXPANSION 373 #define CHECKBOX_PREFER_EXPANSION 373
#define CHECKBOX_DISABLE_CHAT 364 #define CHECKBOX_DISABLE_CHAT 364
#define CHECKBOX_DRAW_FIELD_SPELL 368 #define CHECKBOX_DRAW_FIELD_SPELL 368
#define CHECKBOX_QUICK_ANIMATION 369 #define CHECKBOX_QUICK_ANIMATION 369
#define COMBOBOX_SORTTYPE 370 #define SCROLL_TAB_HELPER 370
#define COMBOBOX_LIMIT 371 #define SCROLL_TAB_SYSTEM 371
#define CHECKBOX_MULTI_KEYWORDS 372
#define BUTTON_MARKS_FILTER 380 #define CHECKBOX_PREFER_EXPANSION 373
#define BUTTON_MARKERS_OK 381
#define BUTTON_RENAME_DECK 386
#define BUTTON_RENAME_DECK_SAVE 387
#define BUTTON_RENAME_DECK_CANCEL 388
#define DEFAULT_DUEL_RULE 4 #define DEFAULT_DUEL_RULE 4
......
...@@ -50,6 +50,31 @@ public: ...@@ -50,6 +50,31 @@ public:
return MakeDir(wdir); return MakeDir(wdir);
} }
static bool Rename(const wchar_t* woldname, const wchar_t* wnewname) {
return MoveFileW(woldname, wnewname);
}
static bool Rename(const char* oldname, const char* newname) {
wchar_t woldname[1024];
wchar_t wnewname[1024];
BufferIO::DecodeUTF8(oldname, woldname);
BufferIO::DecodeUTF8(newname, wnewname);
return Rename(woldname, wnewname);
}
static bool DeleteDir(const wchar_t* wdir) {
wchar_t pdir[256];
BufferIO::CopyWStr(wdir, pdir, 256);
pdir[wcslen(wdir) + 1] = 0;
SHFILEOPSTRUCTW lpFileOp;
lpFileOp.hwnd = NULL;
lpFileOp.wFunc = FO_DELETE;
lpFileOp.pFrom = pdir;
lpFileOp.pTo = 0;
lpFileOp.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT;
return SHFileOperationW(&lpFileOp) == 0;
}
static void TraversalDir(const wchar_t* wpath, const std::function<void(const wchar_t*, bool)>& cb) { static void TraversalDir(const wchar_t* wpath, const std::function<void(const wchar_t*, bool)>& cb) {
wchar_t findstr[1024]; wchar_t findstr[1024];
wcscpy(findstr, wpath); wcscpy(findstr, wpath);
...@@ -59,7 +84,8 @@ public: ...@@ -59,7 +84,8 @@ public:
if(fh == INVALID_HANDLE_VALUE) if(fh == INVALID_HANDLE_VALUE)
return; return;
do { do {
cb(fdataw.cFileName, (fdataw.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)); if(mywcsncasecmp(fdataw.cFileName, L".", 1) && mywcsncasecmp(fdataw.cFileName, L"..", 2))
cb(fdataw.cFileName, (fdataw.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY));
} while(FindNextFileW(fh, &fdataw)); } while(FindNextFileW(fh, &fdataw));
FindClose(fh); FindClose(fh);
} }
......
include "lzma/." include "lzma/."
include "spmemvfs/."
project "ygopro" project "ygopro"
kind "WindowedApp" kind "WindowedApp"
files { "**.cpp", "**.cc", "**.c", "**.h" } files { "**.cpp", "**.cc", "**.c", "**.h" }
excludes "lzma/**" excludes { "lzma/**", "spmemvfs/**" }
includedirs { "../ocgcore" } includedirs { "../ocgcore" }
links { "ocgcore", "clzma", "Irrlicht", "freetype", "sqlite3", "lua" , "event" } links { "ocgcore", "clzma", "cspmemvfs", "Irrlicht", "freetype", "sqlite3", "lua" , "event" }
configuration "windows" configuration "windows"
files "ygopro.rc" files "ygopro.rc"
......
...@@ -358,6 +358,7 @@ ...@@ -358,6 +358,7 @@
!system 1325 关键字: !system 1325 关键字:
!system 1326 效果 !system 1326 效果
!system 1327 搜索 !system 1327 搜索
!system 1328 管理
!system 1329 字段: !system 1329 字段:
!system 1330 主卡组: !system 1330 主卡组:
!system 1331 额外卡组: !system 1331 额外卡组:
...@@ -432,6 +433,27 @@ ...@@ -432,6 +433,27 @@
!system 1419 副卡组数量应不超过15张,当前卡组数量为%d张。 !system 1419 副卡组数量应不超过15张,当前卡组数量为%d张。
!system 1420 有额外卡组卡片存在于主卡组,可能是额外卡组数量超过15张。 !system 1420 有额外卡组卡片存在于主卡组,可能是额外卡组数量超过15张。
!system 1421 宣言的卡不符合条件,不存在于本主机卡池中。 !system 1421 宣言的卡不符合条件,不存在于本主机卡池中。
!system 1450 卡包展示
!system 1451 人机卡组
!system 1452 未分类卡组
!system 1453 --------
!system 1460 卡组管理
!system 1461 新建分类
!system 1462 重命名分类
!system 1463 删除分类
!system 1464 新建卡组
!system 1465 重命名卡组
!system 1466 删除卡组
!system 1467 移动到分类
!system 1468 复制到分类
!system 1469 请输入分类名:
!system 1470 确实要删除此分类和分类下全部卡组吗?
!system 1471 请输入卡组名:
!system 1472 请选择要移动到的分类:
!system 1473 请选择要复制到的分类:
!system 1474 已存在同名分类
!system 1475 已存在同名卡组
!system 1476 删除失败
!system 1500 决斗结束。 !system 1500 决斗结束。
!system 1501 录像结束。 !system 1501 录像结束。
!system 1502 连接已断开。 !system 1502 连接已断开。
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment