Implement the close and revert menu choices, as well as PC editor help
- Fix storing directions in save file as control characters
This commit is contained in:
10
rsrc/dialogs/save-before-revert.xml
Normal file
10
rsrc/dialogs/save-before-revert.xml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||||
|
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||||
|
<dialog defbtn='cancel'>
|
||||||
|
<button name='cancel' type='regular' def-key='esc' top='43' left='240'>Cancel</button>
|
||||||
|
<button name='revert' type='regular' top='43' left='175'>Revert</button>
|
||||||
|
<pict type='dlog' num='16' top='6' left='6'/>
|
||||||
|
<text top='6' left='49' width='256' height='32'>
|
||||||
|
Are you sure you want to discard all changes to your scenario?
|
||||||
|
</text>
|
||||||
|
</dialog>
|
||||||
9
rsrc/dialogs/save-close.xml
Normal file
9
rsrc/dialogs/save-close.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||||
|
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||||
|
<dialog defbtn='save'>
|
||||||
|
<button name='save' type='large' top='31' left='230'>Save First</button>
|
||||||
|
<button name='quit' type='large' top='31' left='122'>Just Close</button>
|
||||||
|
<button name='cancel' type='regular' def-key='esc' top='31' left='54'>Cancel</button>
|
||||||
|
<pict top='9' left='9' type='dlog' num='23'/>
|
||||||
|
<text size='large' top='5' left='52' width='254' height='18'>Do you want to save before closing?</text>
|
||||||
|
</dialog>
|
||||||
8
rsrc/dialogs/save-revert.xml
Normal file
8
rsrc/dialogs/save-revert.xml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||||
|
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||||
|
<dialog defbtn='okay'>
|
||||||
|
<button name='okay' type='regular' top='41' left='272'>Revert</button>
|
||||||
|
<button name='cancel' type='regular' def-key='esc' top='41' left='203'>Cancel</button>
|
||||||
|
<pict top='9' left='9' type='dlog' num='23'/>
|
||||||
|
<text size='large' top='5' left='52' width='262' height='33'>Are you sure you want to discard any unsaved changes?</text>
|
||||||
|
</dialog>
|
||||||
@@ -122,7 +122,8 @@ BEGIN
|
|||||||
END
|
END
|
||||||
POPUP "&Help"
|
POPUP "&Help"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "About Blades of Exile Editor", IDM_HELP
|
MENUITEM "About Blades of Exile Editor", IDM_ABOUT
|
||||||
|
MENUITEM "Blades of Exile Editor Help", IDM_HELP
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
#define IDM_SCEN_LEAVE 126
|
#define IDM_SCEN_LEAVE 126
|
||||||
#define IDM_SCEN_SDF 127
|
#define IDM_SCEN_SDF 127
|
||||||
#define IDM_HELP 128
|
#define IDM_HELP 128
|
||||||
|
#define IDM_ABOUT 129
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
@@ -40,6 +41,6 @@
|
|||||||
#define _APS_NEXT_RESOURCE_VALUE 105
|
#define _APS_NEXT_RESOURCE_VALUE 105
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40010
|
#define _APS_NEXT_COMMAND_VALUE 40010
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
#define _APS_NEXT_SYMED_VALUE 129
|
#define _APS_NEXT_SYMED_VALUE 130
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -588,16 +588,36 @@ std::istream& operator >> (std::istream& in, eMonstTime& e){
|
|||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream& operator << (std::ostream& out, eDirection e) {
|
std::ostream& operator<<(std::ostream& out, eDirection dir) {
|
||||||
return out << (int)e;
|
switch(dir) {
|
||||||
|
case DIR_N: out << "n"; break;
|
||||||
|
case DIR_NE: out << "ne"; break;
|
||||||
|
case DIR_E: out << "e"; break;
|
||||||
|
case DIR_SE: out << "se"; break;
|
||||||
|
case DIR_S: out << "s"; break;
|
||||||
|
case DIR_SW: out << "sw"; break;
|
||||||
|
case DIR_W: out << "w"; break;
|
||||||
|
case DIR_NW: out << "nw"; break;
|
||||||
|
case DIR_HERE: out << "?"; break;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::istream& operator >> (std::istream& in, eDirection& e) {
|
std::istream& operator>>(std::istream& in, eDirection& dir) {
|
||||||
int i;
|
std::string str;
|
||||||
in >> i;
|
in >> str;
|
||||||
if(i >= 0 && i < 8)
|
if(str == "n") dir = DIR_N;
|
||||||
e = (eDirection)i;
|
else if(str == "ne") dir = DIR_NE;
|
||||||
else e = DIR_HERE;
|
else if(str == "e") dir = DIR_E;
|
||||||
|
else if(str == "se") dir = DIR_SE;
|
||||||
|
else if(str == "s") dir = DIR_S;
|
||||||
|
else if(str == "sw") dir = DIR_SW;
|
||||||
|
else if(str == "w") dir = DIR_W;
|
||||||
|
else if(str == "nw") dir = DIR_NW;
|
||||||
|
else if(str == "?") dir = DIR_HERE;
|
||||||
|
else if(str.length() == 1 && str[0] >= 0 && str[0] < 8)
|
||||||
|
dir = eDirection(str[0]);
|
||||||
|
else in.setstate(std::ios::failbit);
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,9 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include <Cocoa/Cocoa.h>
|
#include <Cocoa/Cocoa.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
extern bool verify_restore_quit(bool mode);
|
extern bool verify_restore_quit(std::string dlog);
|
||||||
extern bool All_Done;
|
extern bool All_Done;
|
||||||
|
|
||||||
typedef NSAppleEventDescriptor AEDescr;
|
typedef NSAppleEventDescriptor AEDescr;
|
||||||
@@ -37,7 +38,7 @@ void set_up_apple_events() {
|
|||||||
-(void)handleQuit:(AEDescr*)theAppleEvent withReply: (AEDescr*)reply {
|
-(void)handleQuit:(AEDescr*)theAppleEvent withReply: (AEDescr*)reply {
|
||||||
(void) theAppleEvent; // Suppress "unused parameter" warning
|
(void) theAppleEvent; // Suppress "unused parameter" warning
|
||||||
(void) reply;
|
(void) reply;
|
||||||
All_Done = verify_restore_quit(0);
|
All_Done = verify_restore_quit("save-quit");
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ void Handle_One_Event();
|
|||||||
void Handle_Activate();
|
void Handle_Activate();
|
||||||
void Handle_Update();
|
void Handle_Update();
|
||||||
void Mouse_Pressed();
|
void Mouse_Pressed();
|
||||||
bool verify_restore_quit(bool mode);
|
bool verify_restore_quit(std::string dlog);
|
||||||
void set_up_apple_events();
|
void set_up_apple_events();
|
||||||
extern bool cur_scen_is_mac;
|
extern bool cur_scen_is_mac;
|
||||||
extern fs::path progDir;
|
extern fs::path progDir;
|
||||||
@@ -132,7 +132,7 @@ void Handle_One_Event() {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case sf::Event::Closed:
|
case sf::Event::Closed:
|
||||||
All_Done = verify_restore_quit(false);
|
All_Done = verify_restore_quit("save-quit");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -145,7 +145,7 @@ void Mouse_Pressed() {
|
|||||||
|
|
||||||
try_to_end = handle_action(event);
|
try_to_end = handle_action(event);
|
||||||
if(try_to_end)
|
if(try_to_end)
|
||||||
All_Done = verify_restore_quit(false);
|
All_Done = verify_restore_quit("save-quit");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void display_strings(short nstr, pic_num_t pic) {
|
static void display_strings(short nstr, pic_num_t pic) {
|
||||||
@@ -170,8 +170,12 @@ void handle_menu_choice(eMenu item_hit) {
|
|||||||
if(!file.empty()) save_party(file, univ);
|
if(!file.empty()) save_party(file, univ);
|
||||||
break;
|
break;
|
||||||
case eMenu::FILE_OPEN:
|
case eMenu::FILE_OPEN:
|
||||||
if(verify_restore_quit(true)){
|
i = verify_restore_quit("save-open");
|
||||||
file = nav_get_party();
|
if(false)
|
||||||
|
case eMenu::FILE_REVERT:
|
||||||
|
i = cChoiceDlog("save-revert", {"okay", "cancel"}).show() == "okay";
|
||||||
|
if(i) {
|
||||||
|
file = item_hit == eMenu::FILE_OPEN ? nav_get_party() : file_in_mem;
|
||||||
if(!file.empty()) {
|
if(!file.empty()) {
|
||||||
if(load_party(file, univ)) {
|
if(load_party(file, univ)) {
|
||||||
file_in_mem = file;
|
file_in_mem = file;
|
||||||
@@ -184,8 +188,12 @@ void handle_menu_choice(eMenu item_hit) {
|
|||||||
menu_activate();
|
menu_activate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case eMenu::FILE_CLOSE:
|
||||||
|
if(verify_restore_quit("save-close"))
|
||||||
|
file_in_mem = "";
|
||||||
|
break;
|
||||||
case eMenu::QUIT:
|
case eMenu::QUIT:
|
||||||
All_Done = verify_restore_quit(false);
|
All_Done = verify_restore_quit("save-quit");
|
||||||
break;
|
break;
|
||||||
case eMenu::EDIT_GOLD:
|
case eMenu::EDIT_GOLD:
|
||||||
edit_gold_or_food(0);
|
edit_gold_or_food(0);
|
||||||
@@ -310,6 +318,9 @@ void handle_menu_choice(eMenu item_hit) {
|
|||||||
case eMenu::SET_SDF:
|
case eMenu::SET_SDF:
|
||||||
edit_stuff_done();
|
edit_stuff_done();
|
||||||
break;
|
break;
|
||||||
|
case eMenu::HELP_TOC:
|
||||||
|
launchURL("https://calref.net/~sylae/boe-doc/game/Editor.html");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,13 +332,12 @@ void handle_item_menu(int item_hit) {
|
|||||||
univ.party[current_active_pc].give_item(store_i,false);
|
univ.party[current_active_pc].give_item(store_i,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//short mode; // 0 - quit 1- restore
|
bool verify_restore_quit(std::string dlog) {
|
||||||
bool verify_restore_quit(bool mode) {
|
|
||||||
std::string choice;
|
std::string choice;
|
||||||
|
|
||||||
if(file_in_mem.empty())
|
if(file_in_mem.empty())
|
||||||
return true;
|
return true;
|
||||||
cChoiceDlog verify(mode ? "save-open" : "save-quit", {"save", "quit", "cancel"});
|
cChoiceDlog verify(dlog, {"save", "quit", "cancel"});
|
||||||
choice = verify.show();
|
choice = verify.show();
|
||||||
if(choice == "cancel")
|
if(choice == "cancel")
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -568,14 +568,6 @@
|
|||||||
</array>
|
</array>
|
||||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||||
<array class="NSMutableArray" key="connectionRecords">
|
<array class="NSMutableArray" key="connectionRecords">
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">showHelp:</string>
|
|
||||||
<reference key="source" ref="1014"/>
|
|
||||||
<reference key="destination" ref="238773614"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">360</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
<object class="IBConnectionRecord">
|
||||||
<object class="IBActionConnection" key="connection">
|
<object class="IBActionConnection" key="connection">
|
||||||
<string key="label">hide:</string>
|
<string key="label">hide:</string>
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ void init_menubar() {
|
|||||||
MenuHandler* handler = [[[MenuHandler alloc] init] retain];
|
MenuHandler* handler = [[[MenuHandler alloc] init] retain];
|
||||||
setMenuCallback([apple_menu itemWithTitle: @"About BoE Character Editor"], handler, @selector(menuChoice:), int(eMenu::ABOUT));
|
setMenuCallback([apple_menu itemWithTitle: @"About BoE Character Editor"], handler, @selector(menuChoice:), int(eMenu::ABOUT));
|
||||||
setMenuCallback([apple_menu itemWithTitle: @"Quit BoE Character Editor"], handler, @selector(menuChoice:), int(eMenu::QUIT));
|
setMenuCallback([apple_menu itemWithTitle: @"Quit BoE Character Editor"], handler, @selector(menuChoice:), int(eMenu::QUIT));
|
||||||
|
setMenuCallback([[[menu_bar_handle itemWithTitle: @"Help"] submenu] itemAtIndex: 0], handler, @selector(menuChoice:), int(eMenu::HELP_TOC));
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(eMenu opt : file_choices)
|
for(eMenu opt : file_choices)
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ void init_menubar() {
|
|||||||
eMenu::NONE, eMenu::LEAVE_SCENARIO, eMenu::SET_SDF,
|
eMenu::NONE, eMenu::LEAVE_SCENARIO, eMenu::SET_SDF,
|
||||||
};
|
};
|
||||||
static const eMenu help_choices[] = {
|
static const eMenu help_choices[] = {
|
||||||
eMenu::ABOUT,
|
eMenu::ABOUT, eMenu::HELP_TOC
|
||||||
};
|
};
|
||||||
|
|
||||||
HMENU file_menu = GetSubMenu(menuHandle, FILE_MENU_POS);
|
HMENU file_menu = GetSubMenu(menuHandle, FILE_MENU_POS);
|
||||||
|
|||||||
@@ -2058,6 +2058,8 @@ void town_entry(location spot_hit) {
|
|||||||
// is slot >= 0, force that slot
|
// is slot >= 0, force that slot
|
||||||
// if -1, use 1st free slot
|
// if -1, use 1st free slot
|
||||||
void set_up_start_screen() {
|
void set_up_start_screen() {
|
||||||
|
reset_lb();
|
||||||
|
reset_rb();
|
||||||
set_lb(0,LB_TITLE,LB_NO_ACTION,"Blades of Exile");
|
set_lb(0,LB_TITLE,LB_NO_ACTION,"Blades of Exile");
|
||||||
set_lb(1,LB_TITLE,LB_NO_ACTION,"Scenario Editor");
|
set_lb(1,LB_TITLE,LB_NO_ACTION,"Scenario Editor");
|
||||||
set_lb(3,LB_TEXT,LB_NEW_SCEN,"Make New Scenario");
|
set_lb(3,LB_TEXT,LB_NEW_SCEN,"Make New Scenario");
|
||||||
|
|||||||
@@ -193,7 +193,11 @@ void handle_menu_choice(eMenu item_hit) {
|
|||||||
case eMenu::FILE_OPEN:
|
case eMenu::FILE_OPEN:
|
||||||
if(change_made && !save_check("save-before-load"))
|
if(change_made && !save_check("save-before-load"))
|
||||||
break;
|
break;
|
||||||
file_to_load = nav_get_scenario();
|
if(false)
|
||||||
|
case eMenu::FILE_REVERT:
|
||||||
|
if(change_made && cChoiceDlog("save-before-revert", {"revert", "cancel"}).show() == "cancel")
|
||||||
|
break;
|
||||||
|
file_to_load = item_hit == eMenu::FILE_OPEN ? nav_get_scenario() : scenario.scen_file;
|
||||||
if(!file_to_load.empty() && load_scenario(file_to_load, scenario)) {
|
if(!file_to_load.empty() && load_scenario(file_to_load, scenario)) {
|
||||||
cur_town = scenario.last_town_edited;
|
cur_town = scenario.last_town_edited;
|
||||||
town = scenario.towns[cur_town];
|
town = scenario.towns[cur_town];
|
||||||
@@ -214,6 +218,12 @@ void handle_menu_choice(eMenu item_hit) {
|
|||||||
set_up_main_screen();
|
set_up_main_screen();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case eMenu::FILE_CLOSE:
|
||||||
|
if(!save_check("save-before-close"))
|
||||||
|
break;
|
||||||
|
overall_mode = MODE_INTRO_SCREEN;
|
||||||
|
set_up_start_screen();
|
||||||
|
break;
|
||||||
case eMenu::QUIT: // quit
|
case eMenu::QUIT: // quit
|
||||||
if(!save_check("save-before-quit"))
|
if(!save_check("save-before-quit"))
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user