Mac PC Editor: Remove items menus and instead add "Add Item" to the party menu

Also:
- Add ellipses to a number of menuitems
- Shorten menu names to one word
- Fix not redrawing after an item is added
This commit is contained in:
2020-02-01 23:13:26 -05:00
parent 6ff18342ef
commit 4574c62521
4 changed files with 53 additions and 201 deletions

View File

@@ -3,12 +3,12 @@
<data>
<int key="IBDocument.SystemTarget">1070</int>
<string key="IBDocument.SystemVersion">11G63</string>
<string key="IBDocument.InterfaceBuilderVersion">2844</string>
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
<string key="IBDocument.AppKitVersion">1138.51</string>
<string key="IBDocument.HIToolboxVersion">569.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">2844</string>
<string key="NS.object.0">3084</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>NSCustomObject</string>
@@ -236,18 +236,18 @@
</object>
<object class="NSMenuItem" id="577561551">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">Edit Party</string>
<string key="NSTitle">Party</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="551880289">
<string key="NSTitle">Edit Party</string>
<string key="NSTitle">Party</string>
<array class="NSMutableArray" key="NSMenuItems">
<object class="NSMenuItem" id="224088146">
<reference key="NSMenu" ref="551880289"/>
<string key="NSTitle">Edit Gold</string>
<string key="NSTitle">Edit Gold</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
@@ -255,7 +255,7 @@
</object>
<object class="NSMenuItem" id="730029084">
<reference key="NSMenu" ref="551880289"/>
<string key="NSTitle">Edit Food</string>
<string key="NSTitle">Edit Food</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
@@ -263,7 +263,7 @@
</object>
<object class="NSMenuItem" id="35616607">
<reference key="NSMenu" ref="551880289"/>
<string key="NSTitle">Add Alchemy</string>
<string key="NSTitle">Add Alchemy</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
@@ -323,7 +323,7 @@
</object>
<object class="NSMenuItem" id="426558583">
<reference key="NSMenu" ref="551880289"/>
<string key="NSTitle">Add Mage Spells</string>
<string key="NSTitle">Add Mage Spells</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
@@ -331,7 +331,15 @@
</object>
<object class="NSMenuItem" id="119197894">
<reference key="NSMenu" ref="551880289"/>
<string key="NSTitle">Add Priest Spells</string>
<string key="NSTitle">Add Priest Spells</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="563083282">
<reference key="NSMenu" ref="551880289"/>
<string key="NSTitle">Add Item…</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
@@ -339,7 +347,7 @@
</object>
<object class="NSMenuItem" id="20224361">
<reference key="NSMenu" ref="551880289"/>
<string key="NSTitle">Edit Traits</string>
<string key="NSTitle">Edit Traits</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
@@ -347,7 +355,7 @@
</object>
<object class="NSMenuItem" id="331745279">
<reference key="NSMenu" ref="551880289"/>
<string key="NSTitle">Edit Skills</string>
<string key="NSTitle">Edit Skills</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
@@ -355,7 +363,7 @@
</object>
<object class="NSMenuItem" id="56062367">
<reference key="NSMenu" ref="551880289"/>
<string key="NSTitle">Edit XP</string>
<string key="NSTitle">Edit XP</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
@@ -385,18 +393,18 @@
</object>
<object class="NSMenuItem" id="416266767">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">Scenario Edit</string>
<string key="NSTitle">Scenario</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="779223651">
<string key="NSTitle">Scenario Edit</string>
<string key="NSTitle">Scenario</string>
<array class="NSMutableArray" key="NSMenuItems">
<object class="NSMenuItem" id="532156349">
<reference key="NSMenu" ref="779223651"/>
<string key="NSTitle">Edit Day</string>
<string key="NSTitle">Edit Day</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
@@ -472,7 +480,7 @@
</object>
<object class="NSMenuItem" id="555832425">
<reference key="NSMenu" ref="779223651"/>
<string key="NSTitle">Set Stuff Done Flag</string>
<string key="NSTitle">Set Stuff Done Flag</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
@@ -482,62 +490,6 @@
<bool key="NSNoAutoenable">YES</bool>
</object>
</object>
<object class="NSMenuItem" id="1047014210">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">Items 1</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="80672301">
<string key="NSTitle">Items 1</string>
<array class="NSMutableArray" key="NSMenuItems"/>
<bool key="NSNoAutoenable">YES</bool>
</object>
</object>
<object class="NSMenuItem" id="421040675">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">Items 2</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="13814608">
<string key="NSTitle">Items 2</string>
<array class="NSMutableArray" key="NSMenuItems"/>
<bool key="NSNoAutoenable">YES</bool>
</object>
</object>
<object class="NSMenuItem" id="978930519">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">Items 3</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="31045861">
<string key="NSTitle">Items 3</string>
<array class="NSMutableArray" key="NSMenuItems"/>
<bool key="NSNoAutoenable">YES</bool>
</object>
</object>
<object class="NSMenuItem" id="1010608296">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">Items 4</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="188992829">
<string key="NSTitle">Items 4</string>
<array class="NSMutableArray" key="NSMenuItems"/>
<bool key="NSNoAutoenable">YES</bool>
</object>
</object>
<object class="NSMenuItem" id="391199113">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">Help</string>
@@ -551,7 +503,7 @@
<array class="NSMutableArray" key="NSMenuItems">
<object class="NSMenuItem" id="238773614">
<reference key="NSMenu" ref="374024848"/>
<string key="NSTitle">Boe Character Editor Help</string>
<string key="NSTitle">Boe Character Editor Help</string>
<string key="NSKeyEquiv">?</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
@@ -628,10 +580,6 @@
<reference ref="379814623"/>
<reference ref="577561551"/>
<reference ref="416266767"/>
<reference ref="1047014210"/>
<reference ref="421040675"/>
<reference ref="978930519"/>
<reference ref="1010608296"/>
</array>
<reference key="parent" ref="0"/>
</object>
@@ -829,6 +777,7 @@
<reference ref="20224361"/>
<reference ref="331745279"/>
<reference ref="56062367"/>
<reference ref="563083282"/>
</array>
<reference key="parent" ref="577561551"/>
</object>
@@ -850,38 +799,6 @@
</array>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">819</int>
<reference key="object" ref="1047014210"/>
<array class="NSMutableArray" key="children">
<reference ref="80672301"/>
</array>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">820</int>
<reference key="object" ref="421040675"/>
<array class="NSMutableArray" key="children">
<reference ref="13814608"/>
</array>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">821</int>
<reference key="object" ref="978930519"/>
<array class="NSMutableArray" key="children">
<reference ref="31045861"/>
</array>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">822</int>
<reference key="object" ref="1010608296"/>
<array class="NSMutableArray" key="children">
<reference ref="188992829"/>
</array>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">815</int>
<reference key="object" ref="779223651"/>
@@ -904,30 +821,6 @@
<reference key="object" ref="532156349"/>
<reference key="parent" ref="779223651"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">827</int>
<reference key="object" ref="80672301"/>
<array class="NSMutableArray" key="children"/>
<reference key="parent" ref="1047014210"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">831</int>
<reference key="object" ref="13814608"/>
<array class="NSMutableArray" key="children"/>
<reference key="parent" ref="421040675"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">835</int>
<reference key="object" ref="31045861"/>
<array class="NSMutableArray" key="children"/>
<reference key="parent" ref="978930519"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">843</int>
<reference key="object" ref="188992829"/>
<array class="NSMutableArray" key="children"/>
<reference key="parent" ref="1010608296"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">847</int>
<reference key="object" ref="781373821"/>
@@ -1043,6 +936,11 @@
<reference key="object" ref="807827245"/>
<reference key="parent" ref="779223651"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">869</int>
<reference key="object" ref="563083282"/>
<reference key="parent" ref="551880289"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
@@ -1085,15 +983,7 @@
<string key="816.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="817.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="818.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="819.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="820.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="821.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="822.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="827.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="83.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="831.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="835.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="843.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="847.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="848.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="849.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1114,12 +1004,13 @@
<string key="866.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="867.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="868.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="869.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">868</int>
<int key="maxID">869</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>

View File

@@ -15,6 +15,7 @@
#include "control.hpp"
#include "strdlog.hpp"
#include "choicedlog.hpp"
#include "strchoice.hpp"
#include "fileio.hpp"
#include "pc.menus.hpp"
#include "winutil.hpp"
@@ -359,6 +360,19 @@ void handle_menu_choice(eMenu item_hit) {
case eMenu::EDIT_PRIEST:
display_pc(current_active_pc,11,0);
break;
case eMenu::EDIT_ITEM:
if(scen_items_loaded) {
auto& all_items = univ.scenario.scen_items;
std::vector<std::string> strings;
for(cItem& item : all_items) {
strings.push_back(item.full_name);
}
cStringChoice dlog(strings, "Add which item?");
auto choice = dlog.show(all_items.size());
if(choice < all_items.size())
handle_item_menu(all_items[choice]);
}
break;
case eMenu::EDIT_TRAITS:
pick_race_abil(&univ.party[current_active_pc],0);
break;
@@ -379,12 +393,12 @@ void handle_menu_choice(eMenu item_hit) {
}
}
// TODO: Let this take the item directly instead of the index
void handle_item_menu(cItem& item) {
cItem store_i = item;
store_i.ident = true;
if(!univ.party[current_active_pc].give_item(store_i,GIVE_ALLOW_OVERLOAD))
showError("Sorry, that PC has no free inventory slots left! You'll have to either drop something or give it to a different PC.");
else redraw_screen();
}
bool verify_restore_quit(std::string dlog) {

View File

@@ -25,6 +25,7 @@ enum class eMenu {
HEAL_DAMAGE, RESTORE_MANA, RAISE_DEAD, CURE_CONDITIONS,
EDIT_MAGE, EDIT_PRIEST, EDIT_TRAITS, EDIT_SKILLS, EDIT_XP,
REUNITE_PARTY, OWN_VEHICLES,
EDIT_ITEM,
// Scenario Edit menu
EDIT_DAY, LEAVE_TOWN, RESET_TOWNS, ADD_OUT_MAPS, ADD_TOWN_MAPS, LEAVE_SCENARIO, SET_SDF,
};

View File

@@ -21,19 +21,12 @@ extern cUniverse univ;
extern fs::path file_in_mem;
extern bool scen_items_loaded, party_in_scen;
MenuHandle menu_bar_handle;
MenuHandle apple_menu, file_menu, reg_menu, extra_menu, items_menu[4];
MenuHandle apple_menu, file_menu, reg_menu, extra_menu;
@interface MenuHandler : NSObject
-(void) itemMenu:(id) sender;
-(void) menuChoice:(id) sender;
@end
@interface ItemWrapper : NSObject
+(id) withItem:(int) theItem NS_RETURNS_RETAINED;
-(class cItem&) item;
-(void) setItem:(int) theItem;
@end
static void setMenuCallback(NSMenuItem* item, id targ, SEL selector, int num) {
[item setTarget: targ];
[item setAction: selector];
@@ -51,12 +44,8 @@ void init_menubar() {
apple_menu = [[menu_bar_handle itemWithTitle: @"BoE Character Editor"] submenu];
file_menu = [[menu_bar_handle itemWithTitle: @"File"] submenu];
reg_menu = [[menu_bar_handle itemWithTitle: @"Edit Party"] submenu];
extra_menu = [[menu_bar_handle itemWithTitle: @"Scenario Edit"] submenu];
items_menu[0] = [[menu_bar_handle itemWithTitle: @"Items 1"] submenu];
items_menu[1] = [[menu_bar_handle itemWithTitle: @"Items 2"] submenu];
items_menu[2] = [[menu_bar_handle itemWithTitle: @"Items 3"] submenu];
items_menu[3] = [[menu_bar_handle itemWithTitle: @"Items 4"] submenu];
reg_menu = [[menu_bar_handle itemWithTitle: @"Party"] submenu];
extra_menu = [[menu_bar_handle itemWithTitle: @"Scenario"] submenu];
static const eMenu file_choices[] = {
eMenu::FILE_OPEN, eMenu::FILE_CLOSE, eMenu::NONE, eMenu::FILE_SAVE, eMenu::FILE_SAVE_AS, eMenu::FILE_REVERT,
@@ -64,7 +53,7 @@ void init_menubar() {
static const eMenu party_choices[] = {
eMenu::EDIT_GOLD, eMenu::EDIT_FOOD, eMenu::EDIT_ALCHEMY, eMenu::NONE,
eMenu::HEAL_DAMAGE, eMenu::RESTORE_MANA, eMenu::RAISE_DEAD, eMenu::CURE_CONDITIONS, eMenu::NONE,
eMenu::EDIT_MAGE, eMenu::EDIT_PRIEST, eMenu::EDIT_TRAITS, eMenu::EDIT_SKILLS, eMenu::EDIT_XP, eMenu::NONE,
eMenu::EDIT_MAGE, eMenu::EDIT_PRIEST, eMenu::EDIT_ITEM, eMenu::EDIT_TRAITS, eMenu::EDIT_SKILLS, eMenu::EDIT_XP, eMenu::NONE,
eMenu::REUNITE_PARTY,
};
static const eMenu scen_choices[] = {
@@ -87,7 +76,6 @@ void init_menubar() {
for(eMenu opt : scen_choices)
setMenuCallback([extra_menu itemAtIndex: i++], handler, @selector(menuChoice:), int(opt));
update_item_menu();
menu_activate();
}
@@ -106,22 +94,6 @@ void menu_activate() {
}
void update_item_menu() {
id targ = [[file_menu itemAtIndex: 0] target];
auto& item_list = univ.scenario.scen_items;
int per_menu = 1 + (item_list.size() - 1) / 4;
for(int j = 0; j < 4; j++){
[items_menu[j] removeAllItems];
if(!scen_items_loaded) {
[[items_menu[j] addItemWithTitle: @"Items Not Loaded" action: @selector(itemMenu:) keyEquivalent: @""] setEnabled: NO];
} else for(int i = 0; i < per_menu && i + j * per_menu < item_list.size(); i++) {
ItemWrapper* item = [ItemWrapper withItem: i + j * per_menu];
NSString* item_name = [NSString stringWithCString: item_list[i + j * per_menu].full_name.c_str() encoding: NSASCIIStringEncoding];
NSMenuItem* choice = [items_menu[j] addItemWithTitle: item_name action: @selector(itemMenu:) keyEquivalent: @""];
[choice setTarget: targ];
[choice setEnabled: [item item].variety != eItemType::NO_ITEM];
[choice setRepresentedObject: item];
}
}
}
bool menuBarProcessEvent(const sf::Event&) {
@@ -132,34 +104,8 @@ void drawMenuBar() {
}
@implementation MenuHandler
-(void) itemMenu:(id) sender {
ItemWrapper* item = [sender representedObject];
class cItem& theItem = [item item];
handle_item_menu(theItem);
}
-(void) menuChoice:(id) sender {
eMenu opt = eMenu([[sender representedObject] intValue]);
handle_menu_choice(opt);
}
@end
@implementation ItemWrapper {
int itemID;
}
+(id) withItem:(int) theItem {
ItemWrapper* item = [[ItemWrapper alloc] init];
[item setItem: theItem];
return item;
}
-(void) setItem:(int) theItem {
self->itemID = theItem;
}
-(class cItem&) item {
return univ.scenario.scen_items[self->itemID];
}
@end