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:
2015-02-14 13:19:52 -05:00
parent 4fbc6cfa77
commit 0aaa299642
13 changed files with 96 additions and 31 deletions

View 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>

View 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>

View 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>

View File

@@ -122,7 +122,8 @@ BEGIN
END
POPUP "&Help"
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

View File

@@ -32,6 +32,7 @@
#define IDM_SCEN_LEAVE 126
#define IDM_SCEN_SDF 127
#define IDM_HELP 128
#define IDM_ABOUT 129
// Next default values for new objects
//
@@ -40,6 +41,6 @@
#define _APS_NEXT_RESOURCE_VALUE 105
#define _APS_NEXT_COMMAND_VALUE 40010
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 129
#define _APS_NEXT_SYMED_VALUE 130
#endif
#endif

View File

@@ -588,16 +588,36 @@ std::istream& operator >> (std::istream& in, eMonstTime& e){
return in;
}
std::ostream& operator << (std::ostream& out, eDirection e) {
return out << (int)e;
std::ostream& operator<<(std::ostream& out, eDirection dir) {
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) {
int i;
in >> i;
if(i >= 0 && i < 8)
e = (eDirection)i;
else e = DIR_HERE;
std::istream& operator>>(std::istream& in, eDirection& dir) {
std::string str;
in >> str;
if(str == "n") dir = DIR_N;
else if(str == "ne") dir = DIR_NE;
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;
}

View File

@@ -7,8 +7,9 @@
//
#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;
typedef NSAppleEventDescriptor AEDescr;
@@ -37,7 +38,7 @@ void set_up_apple_events() {
-(void)handleQuit:(AEDescr*)theAppleEvent withReply: (AEDescr*)reply {
(void) theAppleEvent; // Suppress "unused parameter" warning
(void) reply;
All_Done = verify_restore_quit(0);
All_Done = verify_restore_quit("save-quit");
}
@end

View File

@@ -53,7 +53,7 @@ void Handle_One_Event();
void Handle_Activate();
void Handle_Update();
void Mouse_Pressed();
bool verify_restore_quit(bool mode);
bool verify_restore_quit(std::string dlog);
void set_up_apple_events();
extern bool cur_scen_is_mac;
extern fs::path progDir;
@@ -132,7 +132,7 @@ void Handle_One_Event() {
break;
case sf::Event::Closed:
All_Done = verify_restore_quit(false);
All_Done = verify_restore_quit("save-quit");
break;
default:
@@ -145,7 +145,7 @@ void Mouse_Pressed() {
try_to_end = handle_action(event);
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) {
@@ -170,8 +170,12 @@ void handle_menu_choice(eMenu item_hit) {
if(!file.empty()) save_party(file, univ);
break;
case eMenu::FILE_OPEN:
if(verify_restore_quit(true)){
file = nav_get_party();
i = verify_restore_quit("save-open");
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(load_party(file, univ)) {
file_in_mem = file;
@@ -184,8 +188,12 @@ void handle_menu_choice(eMenu item_hit) {
menu_activate();
}
break;
case eMenu::FILE_CLOSE:
if(verify_restore_quit("save-close"))
file_in_mem = "";
break;
case eMenu::QUIT:
All_Done = verify_restore_quit(false);
All_Done = verify_restore_quit("save-quit");
break;
case eMenu::EDIT_GOLD:
edit_gold_or_food(0);
@@ -310,6 +318,9 @@ void handle_menu_choice(eMenu item_hit) {
case eMenu::SET_SDF:
edit_stuff_done();
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);
}
//short mode; // 0 - quit 1- restore
bool verify_restore_quit(bool mode) {
bool verify_restore_quit(std::string dlog) {
std::string choice;
if(file_in_mem.empty())
return true;
cChoiceDlog verify(mode ? "save-open" : "save-quit", {"save", "quit", "cancel"});
cChoiceDlog verify(dlog, {"save", "quit", "cancel"});
choice = verify.show();
if(choice == "cancel")
return false;

View File

@@ -568,14 +568,6 @@
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<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="IBActionConnection" key="connection">
<string key="label">hide:</string>

View File

@@ -75,6 +75,7 @@ void init_menubar() {
MenuHandler* handler = [[[MenuHandler alloc] init] retain];
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([[[menu_bar_handle itemWithTitle: @"Help"] submenu] itemAtIndex: 0], handler, @selector(menuChoice:), int(eMenu::HELP_TOC));
int i = 0;
for(eMenu opt : file_choices)

View File

@@ -73,7 +73,7 @@ void init_menubar() {
eMenu::NONE, eMenu::LEAVE_SCENARIO, eMenu::SET_SDF,
};
static const eMenu help_choices[] = {
eMenu::ABOUT,
eMenu::ABOUT, eMenu::HELP_TOC
};
HMENU file_menu = GetSubMenu(menuHandle, FILE_MENU_POS);

View File

@@ -2058,6 +2058,8 @@ void town_entry(location spot_hit) {
// is slot >= 0, force that slot
// if -1, use 1st free slot
void set_up_start_screen() {
reset_lb();
reset_rb();
set_lb(0,LB_TITLE,LB_NO_ACTION,"Blades of Exile");
set_lb(1,LB_TITLE,LB_NO_ACTION,"Scenario Editor");
set_lb(3,LB_TEXT,LB_NEW_SCEN,"Make New Scenario");

View File

@@ -193,7 +193,11 @@ void handle_menu_choice(eMenu item_hit) {
case eMenu::FILE_OPEN:
if(change_made && !save_check("save-before-load"))
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)) {
cur_town = scenario.last_town_edited;
town = scenario.towns[cur_town];
@@ -214,6 +218,12 @@ void handle_menu_choice(eMenu item_hit) {
set_up_main_screen();
}
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
if(!save_check("save-before-quit"))
break;