Implement main scenario editor menus
- Edit, monster, item menus still missing - Fix some formatting in the menus file - Clean up some verbose stuff
This commit is contained in:
@@ -230,58 +230,14 @@ void Handle_Update() {
|
||||
restore_cursor();
|
||||
}
|
||||
|
||||
//void handle_menu_choice(long choice) {
|
||||
// int menu,menu_item;
|
||||
//
|
||||
// if (choice != 0) {
|
||||
// menu = HiWord(choice);
|
||||
// menu_item = LoWord(choice);
|
||||
//
|
||||
// set_cursor(wand_curs);
|
||||
// switch (menu) {
|
||||
// case 500:
|
||||
// handle_apple_menu(menu_item);
|
||||
// break;
|
||||
// case 550:
|
||||
// handle_file_menu(menu_item);
|
||||
// break;
|
||||
// case 600:
|
||||
// handle_scenario_menu(menu_item);
|
||||
// break;
|
||||
// case 650:
|
||||
// handle_town_menu(menu_item);
|
||||
// break;
|
||||
// case 651:
|
||||
// handle_outdoor_menu(menu_item);
|
||||
// break;
|
||||
// case 675:
|
||||
// handle_help_menu(menu_item);
|
||||
// break;
|
||||
// case 700: case 701: case 702: case 703: case 704:
|
||||
// handle_item_menu(menu_item + 80 * (menu - 700) - 1);
|
||||
// break;
|
||||
// case 750: case 751: case 752: case 753:
|
||||
// handle_monst_menu(menu_item + 64 * (menu - 750) - 1);
|
||||
// break;
|
||||
//
|
||||
// }
|
||||
// }
|
||||
// HiliteMenu(0);
|
||||
//}
|
||||
|
||||
void handle_apple_menu(int item_hit) {
|
||||
switch (item_hit) {
|
||||
case 1:
|
||||
cChoiceDlog("about-scened.xml").show();
|
||||
break;
|
||||
default:
|
||||
// GetItem (apple_menu,item_hit,desk_acc_name);
|
||||
// desk_acc_num = OpenDeskAcc(desk_acc_name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void handle_file_menu(int item_hit) {
|
||||
fs::path file_to_load;
|
||||
switch (item_hit) {
|
||||
|
||||
@@ -13,19 +13,41 @@
|
||||
using MenuHandle = NSMenu*;
|
||||
MenuHandle menu_bar_handle;
|
||||
MenuHandle item_menu[5], mon_menu[4];
|
||||
MenuHandle file_menu, edit_menu;
|
||||
MenuHandle file_menu, edit_menu, app_menu, scen_menu, town_menu, out_menu, help_menu;
|
||||
|
||||
extern cScenario scenario;
|
||||
|
||||
@interface MenuHandler : NSObject
|
||||
|
||||
-(void) appMenu:(id) sender;
|
||||
-(void) fileMenu:(id) sender;
|
||||
-(void) editMenu:(id) sender;
|
||||
-(void) scenMenu:(id) sender;
|
||||
-(void) townMenu:(id) sender;
|
||||
-(void) outMenu:(id) sender;
|
||||
-(void) itemMenu:(id) sender;
|
||||
-(void) monstMenu:(id) sender;
|
||||
-(void) helpMenu:(id) sender;
|
||||
-(void) onlineHelp:(id) sender;
|
||||
@end
|
||||
|
||||
static void setMenuCallback(NSMenuItem* item, id targ, SEL selector, int num) {
|
||||
[item setTarget: targ];
|
||||
[item setAction: selector];
|
||||
[item setRepresentedObject: [[NSNumber numberWithInt: num] retain]];
|
||||
}
|
||||
|
||||
void init_menubar() {
|
||||
NSApplication* app = [NSApplication sharedApplication];
|
||||
[NSBundle loadNibNamed: @"scen.menu" owner: app];
|
||||
menu_bar_handle = [app mainMenu];
|
||||
|
||||
app_menu = [[menu_bar_handle itemWithTitle: @"BoE Scenario Editor"] submenu];
|
||||
file_menu = [[menu_bar_handle itemWithTitle: @"File"] submenu];
|
||||
edit_menu = [[menu_bar_handle itemWithTitle: @"Edit"] submenu];
|
||||
scen_menu = [[menu_bar_handle itemWithTitle: @"Scenario"] submenu];
|
||||
town_menu = [[menu_bar_handle itemWithTitle: @"Town"] submenu];
|
||||
out_menu = [[menu_bar_handle itemWithTitle: @"Outdoors"] submenu];
|
||||
help_menu = [[menu_bar_handle itemWithTitle: @"Help"] submenu];
|
||||
item_menu[0] = [[menu_bar_handle itemWithTitle: @"I1"] submenu];
|
||||
item_menu[1] = [[menu_bar_handle itemWithTitle: @"I2"] submenu];
|
||||
item_menu[2] = [[menu_bar_handle itemWithTitle: @"I3"] submenu];
|
||||
@@ -35,12 +57,34 @@ void init_menubar() {
|
||||
mon_menu[1] = [[menu_bar_handle itemWithTitle: @"M2"] submenu];
|
||||
mon_menu[2] = [[menu_bar_handle itemWithTitle: @"M3"] submenu];
|
||||
mon_menu[3] = [[menu_bar_handle itemWithTitle: @"M4"] submenu];
|
||||
|
||||
MenuHandler* handler = [[[MenuHandler alloc] init] retain];
|
||||
setMenuCallback([app_menu itemWithTitle: @"About BoE Scenario Editor"], handler, @selector(appMenu:), 1);
|
||||
setMenuCallback([app_menu itemWithTitle: @"Quit BoE Scenario Editor"], handler, @selector(fileMenu:), 5);
|
||||
// TODO: Organize file menu function
|
||||
setMenuCallback([file_menu itemWithTitle: @"New Scenario…"], handler, @selector(fileMenu:), 3);
|
||||
setMenuCallback([file_menu itemWithTitle: @"Open…"], handler, @selector(fileMenu:), 1);
|
||||
setMenuCallback([file_menu itemWithTitle: @"Save"], handler, @selector(fileMenu:), 2);
|
||||
setMenuCallback([help_menu itemAtIndex: 0], handler, @selector(onlineHelp:), 0);
|
||||
|
||||
for(int i = 0; i < [edit_menu numberOfItems]; i++)
|
||||
setMenuCallback([edit_menu itemAtIndex: i], handler, @selector(editMenu:), i + 1);
|
||||
for(int i = 0; i < [scen_menu numberOfItems]; i++)
|
||||
setMenuCallback([scen_menu itemAtIndex: i], handler, @selector(scenMenu:), i + 1);
|
||||
for(int i = 0; i < [town_menu numberOfItems]; i++)
|
||||
setMenuCallback([town_menu itemAtIndex: i], handler, @selector(townMenu:), i + 1);
|
||||
for(int i = 0; i < [out_menu numberOfItems]; i++)
|
||||
setMenuCallback([out_menu itemAtIndex: i], handler, @selector(outMenu:), i + 1);
|
||||
for(int i = 2; i < [help_menu numberOfItems]; i++)
|
||||
setMenuCallback([help_menu itemAtIndex: i], handler, @selector(helpMenu:), i - 1);
|
||||
// TODO: Item and monster menus
|
||||
}
|
||||
|
||||
// mode 0 - initial shut down, 1 - no town, 2 - no out, 3 - no town or out 4 - all menus on
|
||||
// TODO: Use an enum here
|
||||
void shut_down_menus(short mode) {
|
||||
if (mode == 0) {
|
||||
if(mode == 0) {
|
||||
[[file_menu itemWithTitle: @"Save"] setEnabled: NO];
|
||||
[[menu_bar_handle itemWithTitle: @"Scenario"] setEnabled: NO];
|
||||
[[menu_bar_handle itemWithTitle: @"Town"] setEnabled: NO];
|
||||
[[menu_bar_handle itemWithTitle: @"Outdoors"] setEnabled: NO];
|
||||
@@ -54,8 +98,8 @@ void shut_down_menus(short mode) {
|
||||
[[menu_bar_handle itemWithTitle: @"M3"] setEnabled: NO];
|
||||
[[menu_bar_handle itemWithTitle: @"M4"] setEnabled: NO];
|
||||
}
|
||||
if (mode == 4) {
|
||||
[[[[menu_bar_handle itemWithTitle: @"File"] submenu] itemWithTitle: @"Save"] setEnabled: YES];
|
||||
if(mode == 4) {
|
||||
[[file_menu itemWithTitle: @"Save"] setEnabled: YES];
|
||||
[[menu_bar_handle itemWithTitle: @"Scenario"] setEnabled: YES];
|
||||
[[menu_bar_handle itemWithTitle: @"Town"] setEnabled: YES];
|
||||
MenuHandle town_menu = [[menu_bar_handle itemWithTitle: @"Town"] submenu];
|
||||
@@ -77,7 +121,7 @@ void shut_down_menus(short mode) {
|
||||
[[menu_bar_handle itemWithTitle: @"M3"] setEnabled: YES];
|
||||
[[menu_bar_handle itemWithTitle: @"M4"] setEnabled: YES];
|
||||
}
|
||||
if ((mode == 1) || (mode == 3)) {
|
||||
if((mode == 1) || (mode == 3)) {
|
||||
MenuHandle town_menu = [[menu_bar_handle itemWithTitle: @"Town"] submenu];
|
||||
for(id item in [town_menu itemArray])
|
||||
if([[item title] length] > 0 && [[item title] characterAtIndex: 0] != ' ')
|
||||
@@ -92,7 +136,7 @@ void shut_down_menus(short mode) {
|
||||
[[menu_bar_handle itemWithTitle: @"M3"] setEnabled: NO];
|
||||
[[menu_bar_handle itemWithTitle: @"M4"] setEnabled: NO];
|
||||
}
|
||||
if ((mode == 2) || (mode == 3)) {
|
||||
if((mode == 2) || (mode == 3)) {
|
||||
MenuHandle out_menu = [[menu_bar_handle itemWithTitle: @"Outdoors"] submenu];
|
||||
for(id item in [out_menu itemArray])
|
||||
if([[item title] length] > 0 && [[item title] characterAtIndex: 0] != ' ')
|
||||
@@ -105,7 +149,7 @@ void update_item_menu() {
|
||||
short i,j;
|
||||
char item_name[256];
|
||||
|
||||
for (j = 0; j < 5; j++) {
|
||||
for(j = 0; j < 5; j++) {
|
||||
[item_menu[j] removeAllItems];
|
||||
for (i = 0; i < 80; i++) {
|
||||
NSString* title = [NSString stringWithCString: scenario.scen_items[i + j * 80].full_name.c_str() encoding: NSASCIIStringEncoding];
|
||||
@@ -113,9 +157,9 @@ void update_item_menu() {
|
||||
[newItem setTarget: targ];
|
||||
}
|
||||
}
|
||||
for (j = 0; j < 4; j++) {
|
||||
for(j = 0; j < 4; j++) {
|
||||
[mon_menu[j] removeAllItems];
|
||||
for (i = 0; i < 64; i++) {
|
||||
for(i = 0; i < 64; i++) {
|
||||
NSString* title = [NSString stringWithCString: scenario.scen_monsters[i + j * 64].m_name.c_str() encoding: NSASCIIStringEncoding];
|
||||
NSMenuItem* newItem = [mon_menu[j] addItemWithTitle: title action: @selector(monstMenu:) keyEquivalent: @""];
|
||||
[newItem setTarget: targ];
|
||||
@@ -123,3 +167,53 @@ void update_item_menu() {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void handle_apple_menu(int item_hit);
|
||||
void handle_file_menu(int item_hit);
|
||||
void handle_scenario_menu(int item_hit);
|
||||
void handle_town_menu(int item_hit);
|
||||
void handle_outdoor_menu(int item_hit);
|
||||
void handle_help_menu(int item_hit);
|
||||
void handle_item_menu(int item_hit);
|
||||
void handle_monst_menu(int item_hit);
|
||||
|
||||
@implementation MenuHandler
|
||||
-(void) appMenu:(id) sender {
|
||||
handle_apple_menu([[sender representedObject] intValue]);
|
||||
}
|
||||
|
||||
-(void) fileMenu:(id) sender {
|
||||
handle_file_menu([[sender representedObject] intValue]);
|
||||
}
|
||||
|
||||
// TODO: Implement edit menu (much work to be done here!)
|
||||
-(void) editMenu:(id) sender {
|
||||
}
|
||||
|
||||
-(void) scenMenu:(id) sender {
|
||||
handle_scenario_menu([[sender representedObject] intValue]);
|
||||
}
|
||||
|
||||
-(void) townMenu:(id) sender {
|
||||
handle_town_menu([[sender representedObject] intValue]);
|
||||
}
|
||||
|
||||
-(void) outMenu:(id) sender {
|
||||
handle_outdoor_menu([[sender representedObject] intValue]);
|
||||
}
|
||||
|
||||
// TODO: Monster and item menus
|
||||
-(void) itemMenu:(id) sender {
|
||||
}
|
||||
|
||||
-(void) monstMenu:(id) sender {
|
||||
}
|
||||
|
||||
-(void) helpMenu:(id) sender {
|
||||
handle_help_menu([[sender representedObject] intValue]);
|
||||
}
|
||||
|
||||
-(void) onlineHelp:(id) sender {
|
||||
[[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString: @"https://calref.net/~sylae/boe-doc/editor/About.html"]];
|
||||
}
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user