More fixes with menus and keyboard

This commit is contained in:
Daniel Collin 2013-01-03 20:52:40 +01:00
parent 30d9c79be0
commit ecfb900047
4 changed files with 391 additions and 77 deletions

View File

@ -185,6 +185,14 @@ static inline int getRowPos()
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static inline void setRowPos(int pos)
{
s_editorData.trackViewInfo.rowPos = pos;
RemoteConnection_sendSetRowCommand(pos);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static int getNextTrack()
{
TrackData* trackData = &s_editorData.trackData;
@ -647,6 +655,14 @@ enum ArrowDirection
{
ARROW_LEFT,
ARROW_RIGHT,
ARROW_UP,
ARROW_DOWN,
};
enum Selection
{
DO_SELECTION,
NO_SELECTION,
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -833,10 +849,10 @@ static void onArrow(int key, int modifiers, int rowPos, struct sync_track* track
switch (key)
{
case EMGUI_ARROW_DOWN: onArrowDown(rowPos, trackData, track, activeTrack, modifiers); break;
case EMGUI_ARROW_UP: onArrowUp(rowPos, trackData, track, activeTrack, modifiers); break;
case EMGUI_ARROW_RIGHT: onArrowSide(ARROW_RIGHT, rowPos, trackData, activeTrack, modifiers); break;
case EMGUI_ARROW_LEFT: onArrowSide(ARROW_LEFT, rowPos, trackData, activeTrack, modifiers); break;
case EMGUI_KEY_ARROW_DOWN: onArrowDown(rowPos, trackData, track, activeTrack, modifiers); break;
case EMGUI_KEY_ARROW_UP: onArrowUp(rowPos, trackData, track, activeTrack, modifiers); break;
case EMGUI_KEY_ARROW_RIGHT: onArrowSide(ARROW_RIGHT, rowPos, trackData, activeTrack, modifiers); break;
case EMGUI_KEY_ARROW_LEFT: onArrowSide(ARROW_LEFT, rowPos, trackData, activeTrack, modifiers); break;
}
}
@ -881,10 +897,10 @@ bool Editor_keyDown(int key, int keyCode, int modifiers)
break;
}
case EMGUI_ARROW_DOWN:
case EMGUI_ARROW_UP:
case EMGUI_ARROW_RIGHT:
case EMGUI_ARROW_LEFT:
case EMGUI_KEY_ARROW_DOWN:
case EMGUI_KEY_ARROW_UP:
case EMGUI_KEY_ARROW_RIGHT:
case EMGUI_KEY_ARROW_LEFT:
{
onArrow(key, modifiers, row_pos, tracks[active_track], active_track);
@ -1008,6 +1024,7 @@ bool Editor_keyDown(int key, int keyCode, int modifiers)
// Handle biasing of values
/*
if ((keyCode >= 0 && keyCode <= 6) || (keyCode >= 12 && keyCode <= 17))
{
float bias_value = 0.0f;
@ -1034,6 +1051,7 @@ bool Editor_keyDown(int key, int keyCode, int modifiers)
return true;
}
*/
// do edit here and biasing here
@ -1470,12 +1488,299 @@ bool Editor_saveBeforeExit()
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onCancelEdit()
{
endEditing();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onDeleteKey()
{
deleteArea(getRowPos(), getActiveTrack(), 1, 1);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onCutAndCopy(bool cut)
{
TrackViewInfo* viewInfo = getTrackViewInfo();
const int selectLeft = mini(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
const int selectRight = maxi(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
const int selectTop = mini(viewInfo->selectStartRow, viewInfo->selectStopRow);
const int selectBottom = maxi(viewInfo->selectStartRow, viewInfo->selectStopRow);
if (!cut)
{
copySelection(getRowPos(), getActiveTrack(), selectLeft, selectRight, selectTop, selectBottom);
}
else
{
copySelection(getRowPos(), getActiveTrack(), selectLeft, selectRight, selectTop, selectBottom);
deleteArea(selectTop, selectLeft, s_copyData.bufferWidth, s_copyData.bufferHeight);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onPaste()
{
const int buffer_width = s_copyData.bufferWidth;
const int buffer_height = s_copyData.bufferHeight;
const int buffer_size = s_copyData.count;
const int track_count = getTrackCount();
const int row_pos = getRowPos();
const int active_track = getActiveTrack();
int i, trackPos;
if (!s_copyData.entries)
return;
// First clear the paste area
deleteArea(row_pos, active_track, buffer_width, buffer_height);
Commands_beginMulti("pasteArea");
for (i = 0; i < buffer_size; ++i)
{
const CopyEntry* ce = &s_copyData.entries[i];
trackPos = active_track + ce->track;
if (trackPos < track_count)
{
size_t trackIndex = trackPos;
struct track_key key = ce->keyFrame;
key.row += row_pos;
Commands_addOrUpdateKey(trackIndex, &key);
}
}
Commands_endMulti();
updateNeedsSaving();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onSelectTrack()
{
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onBias(float v)
{
TrackViewInfo* viewInfo = getTrackViewInfo();
const int selectLeft = mini(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
const int selectRight = maxi(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
const int selectTop = mini(viewInfo->selectStartRow, viewInfo->selectStopRow);
const int selectBottom = maxi(viewInfo->selectStartRow, viewInfo->selectStopRow);
biasSelection(v, selectLeft, selectRight, selectTop, selectBottom);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onInterpolation()
{
struct track_key newKey;
struct sync_track* track;
struct sync_track** tracks = getTracks();
if (!tracks)
return;
track = tracks[getActiveTrack()];
int idx = key_idx_floor(track, getRowPos());
if (idx < 0)
return;
newKey = track->keys[idx];
newKey.type = ((newKey.type + 1) % KEY_TYPE_COUNT);
Commands_addOrUpdateKey(getActiveTrack(), &newKey);
updateNeedsSaving();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onEnterCurrentValue()
{
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onPlay()
{
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onRowStep(int step, enum Selection selection)
{
TrackViewInfo* viewInfo = getTrackViewInfo();
TrackData* trackData = getTrackData();
viewInfo->rowPos = eclampi(getRowPos() + step, trackData->startRow, trackData->endRow);
if (selection == DO_SELECTION)
viewInfo->selectStopRow = viewInfo->rowPos;
RemoteConnection_sendSetRowCommand(getRowPos());
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onTrackSide(enum ArrowDirection dir, bool startOrEnd, enum Selection selection)
{
TrackViewInfo* viewInfo = getTrackViewInfo();
const int trackCount = getTrackCount();
const int oldTrack = getActiveTrack();
int track = 0;
if (dir == ARROW_LEFT)
track = startOrEnd ? 0 : getPrevTrack();
else
track = startOrEnd ? trackCount - 1 : getNextTrack();
track = eclampi(track, 0, trackCount);
setActiveTrack(track);
if (selection == DO_SELECTION)
{
TrackData* trackData = getTrackData();
Track* t = &trackData->tracks[track];
// if this track has a folded group we can't select it so set back the selection to the old one
if (t->group->folded)
setActiveTrack(oldTrack);
else
viewInfo->selectStopTrack = track;
}
else
{
viewInfo->selectStartTrack = viewInfo->selectStopTrack = track;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onBookmarkDir(enum ArrowDirection dir)
{
TrackData* trackData = getTrackData();
int row = getRowPos();
if (dir == ARROW_UP)
row = TrackData_getPrevBookmark(trackData, row);
else
row = TrackData_getNextBookmark(trackData, row);
setRowPos(row);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onPrevNextKey(bool prevKey, enum Selection selection)
{
struct sync_track* track;
struct sync_track** tracks = getTracks();
TrackViewInfo* viewInfo = getTrackViewInfo();
if (!tracks || !tracks[getActiveTrack()]->keys)
return;
track = tracks[getActiveTrack()];
if (prevKey)
{
int idx = sync_find_key(track, getRowPos());
if (idx < 0)
idx = -idx - 1;
setRowPos(track->keys[emaxi(idx - 1, 0)].row);
if (selection == DO_SELECTION)
viewInfo->selectStartRow = getRowPos();
else
viewInfo->selectStartRow = viewInfo->selectStopRow = getRowPos();
}
else
{
int row = 0;
int idx = key_idx_floor(track, getRowPos());
if (idx < 0)
row = track->keys[0].row;
else if (idx > (int)track->num_keys - 2)
row = track->keys[track->num_keys - 1].row;
else
row = track->keys[idx + 1].row;
setRowPos(row);
if (selection == DO_SELECTION)
viewInfo->selectStopRow = row;
else
viewInfo->selectStartRow = viewInfo->selectStopRow = row;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onFoldTrack(bool fold)
{
Track* t = &getTrackData()->tracks[getActiveTrack()];
t->folded = fold;
Editor_updateTrackScroll();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onFoldGroup(bool fold)
{
Track* t = &getTrackData()->tracks[getActiveTrack()];
if (t->group->trackCount > 1)
t->group->folded = fold;
Editor_updateTrackScroll();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onToggleBookmark()
{
TrackData_toogleBookmark(getTrackData(), getRowPos());
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onClearBookmarks()
{
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void onTab()
{
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Editor_menuEvent(int menuItem)
{
printf("%s\n", s_type[menuItem - 0x1000]);
endEditing();
switch (menuItem)
{
// File
case EDITOR_MENU_OPEN: onOpen(); break;
case EDITOR_MENU_SAVE: onSave(); break;
case EDITOR_MENU_SAVE_AS: onSaveAs(); break;
@ -1491,62 +1796,59 @@ void Editor_menuEvent(int menuItem)
break;
}
/*
EDITOR_MENU_OPEN,
EDITOR_MENU_SAVE,
EDITOR_MENU_SAVE_AS,
EDITOR_MENU_REMOTE_EXPORT,
// Edit
EDITOR_MENU_UNDO,
EDITOR_MENU_REDO,
EDITOR_MENU_CANCEL_EDIT,
EDITOR_MENU_CLEAR,
EDITOR_MENU_CUT,
EDITOR_MENU_COPY,
EDITOR_MENU_PASTE,
EDITOR_MENU_SELECT_TRACK,
EDITOR_MENU_BIAS_P_001,
EDITOR_MENU_BIAS_P_01,
EDITOR_MENU_BIAS_P_1,
EDITOR_MENU_BIAS_P_10,
EDITOR_MENU_BIAS_P_100,
EDITOR_MENU_BIAS_P_1000,
EDITOR_MENU_BIAS_N_001,
EDITOR_MENU_BIAS_N_01,
EDITOR_MENU_BIAS_N_1,
EDITOR_MENU_BIAS_N_10,
EDITOR_MENU_BIAS_N_100,
EDITOR_MENU_BIAS_N_1000,
EDITOR_MENU_INTERPOLATION,
EDITOR_MENU_ENTER_CURRENT_V,
case EDITOR_MENU_UNDO : Commands_undo(); break;
case EDITOR_MENU_REDO : Commands_redo(); break;
case EDITOR_MENU_CANCEL_EDIT : onCancelEdit(); break;
case EDITOR_MENU_DELETE_KEY : onDeleteKey(); break;
case EDITOR_MENU_CUT : onCutAndCopy(true); break;
case EDITOR_MENU_COPY : onCutAndCopy(false); break;
case EDITOR_MENU_PASTE : onPaste(); break;
case EDITOR_MENU_SELECT_TRACK : onSelectTrack(); break;
case EDITOR_MENU_BIAS_P_001 : onBias(0.01f); break;
case EDITOR_MENU_BIAS_P_01 : onBias(0.1f); break;
case EDITOR_MENU_BIAS_P_1: onBias(1.0f); break;
case EDITOR_MENU_BIAS_P_10: onBias(10.0f); break;
case EDITOR_MENU_BIAS_P_100: onBias(100.0f); break;
case EDITOR_MENU_BIAS_P_1000: onBias(1000.0f); break;
case EDITOR_MENU_BIAS_N_001: onBias(-0.01f); break;
case EDITOR_MENU_BIAS_N_01: onBias(-0.1f); break;
case EDITOR_MENU_BIAS_N_1: onBias(-1.0f); break;
case EDITOR_MENU_BIAS_N_10: onBias(-10.0f); break;
case EDITOR_MENU_BIAS_N_100 : onBias(-100.0f); break;
case EDITOR_MENU_BIAS_N_1000: onBias(-1000.0f); break;
case EDITOR_MENU_INTERPOLATION : onInterpolation(); break;
case EDITOR_MENU_ENTER_CURRENT_V : onEnterCurrentValue(); break;
// View
EDITOR_MENU_PLAY,
EDITOR_MENU_ROW_UP,
EDITOR_MENU_ROW_DOWN,
EDITOR_MENU_TRACK_LEFT,
EDITOR_MENU_TRACK_RIGHT,
EDITOR_MENU_ROWS_DOWN,
EDITOR_MENU_ROWS_UP,
EDITOR_MENU_PREV_BOOKMARK,
EDITOR_MENU_NEXT_BOOKMARK,
EDITOR_MENU_FIRST_TRACK,
EDITOR_MENU_LAST_TRACK,
EDITOR_MENU_PREV_KEY,
EDITOR_MENU_NEXT_KEY,
EDITOR_MENU_FOLD_TRACK,
EDITOR_MENU_UNFOLD_TRACK,
EDITOR_MENU_FOLD_GROUP,
EDITOR_MENU_UNFOLD_GROUP,
EDITOR_MENU_TOGGLE_BOOKMARK,
EDITOR_MENU_CLEAR_BOOKMARKS,
EDITOR_MENU_TAB,
*/
case EDITOR_MENU_PLAY : onPlay(); break;
case EDITOR_MENU_ROW_UP : onRowStep(-1, NO_SELECTION); break;
case EDITOR_MENU_ROW_DOWN : onRowStep(1, NO_SELECTION); break;
case EDITOR_MENU_TRACK_LEFT : onTrackSide(ARROW_LEFT, false, NO_SELECTION); break;
case EDITOR_MENU_TRACK_RIGHT : onTrackSide(ARROW_RIGHT, false, NO_SELECTION); break;
case EDITOR_MENU_ROWS_UP : onRowStep(-8, false); break;
case EDITOR_MENU_ROWS_DOWN : onRowStep(8, false); break;
case EDITOR_MENU_PREV_BOOKMARK : onBookmarkDir(ARROW_UP); break;
case EDITOR_MENU_NEXT_BOOKMARK : onBookmarkDir(ARROW_DOWN); break;
case EDITOR_MENU_FIRST_TRACK : onTrackSide(ARROW_LEFT, true, NO_SELECTION); break;
case EDITOR_MENU_LAST_TRACK : onTrackSide(ARROW_RIGHT, true, NO_SELECTION); break;
case EDITOR_MENU_PREV_KEY : onPrevNextKey(true, NO_SELECTION); break;
case EDITOR_MENU_NEXT_KEY : onPrevNextKey(false, NO_SELECTION); break;
case EDITOR_MENU_FOLD_TRACK : onFoldTrack(true); break;
case EDITOR_MENU_UNFOLD_TRACK : onFoldTrack(false); break;
case EDITOR_MENU_FOLD_GROUP : onFoldGroup(true); break;
case EDITOR_MENU_UNFOLD_GROUP : onFoldGroup(false); break;
case EDITOR_MENU_TOGGLE_BOOKMARK : onToggleBookmark(); break;
case EDITOR_MENU_CLEAR_BOOKMARKS : onClearBookmarks(); break;
case EDITOR_MENU_TAB : onTab(); break;
}
Editor_update();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -28,7 +28,7 @@ MenuDescriptor g_editMenu[] =
{ _T("Undo"), EDITOR_MENU_UNDO, 'z', EMGUI_KEY_COMMAND, EMGUI_KEY_CTRL },
{ _T("Redo"), EDITOR_MENU_REDO, 'z', EMGUI_KEY_COMMAND | EMGUI_KEY_SHIFT, EMGUI_KEY_CTRL | EMGUI_KEY_SHIFT },
{ _T("Cancel Edit"), EDITOR_MENU_CANCEL_EDIT, EMGUI_KEY_ESC, 0, 0 },
{ _T("Clear"), EDITOR_MENU_CLEAR, EMGUI_KEY_BACKSPACE, 0, 0 },
{ _T("Delete Key"), EDITOR_MENU_DELETE_KEY, EMGUI_KEY_BACKSPACE, 0, 0 },
{ _T(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 },
{ _T("Cut"), EDITOR_MENU_CUT, 'x', EMGUI_KEY_COMMAND, EMGUI_KEY_CTRL },
{ _T("Copy"), EDITOR_MENU_COPY, 'c', EMGUI_KEY_COMMAND, EMGUI_KEY_CTRL },
@ -40,14 +40,14 @@ MenuDescriptor g_editMenu[] =
{ _T("Bias +0.1"), EDITOR_MENU_BIAS_P_01, 'w', 0, 0 },
{ _T("Bias +1.0"), EDITOR_MENU_BIAS_P_1, 'e', 0, 0 },
{ _T("Bias +10.0"), EDITOR_MENU_BIAS_P_10, 'r', 0, 0 },
{ _T("Bias +10.01"), EDITOR_MENU_BIAS_P_100, 't', 0, 0 },
{ _T("Bias +100.01"), EDITOR_MENU_BIAS_P_1000, 'y', 0, 0 },
{ _T("Bias +10.0"), EDITOR_MENU_BIAS_P_100, 't', 0, 0 },
{ _T("Bias +100.0"), EDITOR_MENU_BIAS_P_1000, 'y', 0, 0 },
{ _T("Bias -0.01"), EDITOR_MENU_BIAS_N_001, 'a', 0, 0 },
{ _T("Bias -0.1"), EDITOR_MENU_BIAS_N_01, 's', 0, 0 },
{ _T("Bias -1.0"), EDITOR_MENU_BIAS_N_1, 'd', 0, 0 },
{ _T("Bias -10.0"), EDITOR_MENU_BIAS_N_10, 'f', 0, 0 },
{ _T("Bias -10.01"), EDITOR_MENU_BIAS_N_100, 'g', 0, 0 },
{ _T("Bias -100.01"), EDITOR_MENU_BIAS_N_1000, 'h', 0, 0 },
{ _T("Bias -10.0"), EDITOR_MENU_BIAS_N_100, 'g', 0, 0 },
{ _T("Bias -100.0"), EDITOR_MENU_BIAS_N_1000, 'h', 0, 0 },
{ _T(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 },
{ _T("Interpolation"), EDITOR_MENU_INTERPOLATION, 'i', 0, 0 },
{ _T("Insert current value"), EDITOR_MENU_ENTER_CURRENT_V,EMGUI_KEY_ENTER,0, 0 },
@ -60,10 +60,10 @@ MenuDescriptor g_viewMenu[] =
{
{ _T("Start/Stop Playback"), EDITOR_MENU_PLAY, EMGUI_KEY_SPACE, 0, 0 },
{ _T(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 },
{ _T("Jump one row up"), EDITOR_MENU_ROW_UP, EMGUI_KEY_ARROW_UP, 0, 0 },
{ _T("Jump one row down"), EDITOR_MENU_ROW_DOWN, EMGUI_KEY_ARROW_DOWN, 0, 0 },
{ _T("Jump one track left"), EDITOR_MENU_TRACK_LEFT, EMGUI_KEY_ARROW_LEFT, 0, 0 },
{ _T("Jump one track right"), EDITOR_MENU_TRACK_RIGHT, EMGUI_KEY_ARROW_RIGHT, 0, 0 },
// { _T("Jump one row up"), EDITOR_MENU_ROW_UP, EMGUI_KEY_ARROW_UP, 0, 0 },
// { _T("Jump one row down"), EDITOR_MENU_ROW_DOWN, EMGUI_KEY_ARROW_DOWN, 0, 0 },
// { _T("Jump one track left"), EDITOR_MENU_TRACK_LEFT, EMGUI_KEY_ARROW_LEFT, 0, 0 },
// { _T("Jump one track right"), EDITOR_MENU_TRACK_RIGHT, EMGUI_KEY_ARROW_RIGHT, 0, 0 },
{ _T(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 },
{ _T("Jump 8 rows up"), EDITOR_MENU_ROWS_UP, EMGUI_KEY_ARROW_UP, EMGUI_KEY_ALT, 0 },
{ _T("Jump 8 rows down"), EDITOR_MENU_ROWS_DOWN, EMGUI_KEY_ARROW_DOWN, EMGUI_KEY_ALT, 0 },

View File

@ -28,7 +28,7 @@ enum
EDITOR_MENU_UNDO,
EDITOR_MENU_REDO,
EDITOR_MENU_CANCEL_EDIT,
EDITOR_MENU_CLEAR,
EDITOR_MENU_DELETE_KEY,
EDITOR_MENU_CUT,
EDITOR_MENU_COPY,
EDITOR_MENU_PASTE,

View File

@ -80,6 +80,19 @@ NSWindow* g_window = 0;
#define KEY_LEFT 123
#define KEY_RIGHT 124
@interface MyMenuItem : NSMenuItem
{
}
- (BOOL)isHighlighted;
@end
@implementation MyMenuItem
- (BOOL)isHighlighted
{
return NO;
}
@end
@implementation RocketView
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -171,7 +184,6 @@ static int getModifierFlags(int flags)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
- (void)keyDown:(NSEvent *)theEvent
{
NSString* key = [theEvent charactersIgnoringModifiers];
@ -190,10 +202,10 @@ static int getModifierFlags(int flags)
{
switch (keyChar)
{
case NSLeftArrowFunctionKey: keyCode = EMGUI_ARROW_LEFT; break;
case NSRightArrowFunctionKey: keyCode = EMGUI_ARROW_RIGHT; break;
case NSUpArrowFunctionKey: keyCode = EMGUI_ARROW_UP; break;
case NSDownArrowFunctionKey: keyCode = EMGUI_ARROW_DOWN; break;
case NSLeftArrowFunctionKey: keyCode = EMGUI_KEY_ARROW_LEFT; break;
case NSRightArrowFunctionKey: keyCode = EMGUI_KEY_ARROW_RIGHT; break;
case NSUpArrowFunctionKey: keyCode = EMGUI_KEY_ARROW_UP; break;
case NSDownArrowFunctionKey: keyCode = EMGUI_KEY_ARROW_DOWN; break;
}
}
@ -202,7 +214,6 @@ static int getModifierFlags(int flags)
Editor_update();
}
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -441,7 +452,7 @@ void buildSubMenu(NSMenu* menu, MenuDescriptor menuDesc[])
}
else if (desc->id == EDITOR_MENU_SUB_MENU)
{
NSMenuItem* newItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:name action:NULL keyEquivalent:@""];
MyMenuItem* newItem = [[MyMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:name action:NULL keyEquivalent:@""];
NSMenu* newMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:name];
[newItem setSubmenu:newMenu];
[newMenu release];
@ -451,7 +462,7 @@ void buildSubMenu(NSMenu* menu, MenuDescriptor menuDesc[])
else
{
int mask = 0;
NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:name action:@selector(onMenuPress:) keyEquivalent:@""];
MyMenuItem* newItem = [[MyMenuItem alloc] initWithTitle:name action:@selector(onMenuPress:) keyEquivalent:@""];
[newItem setTag:desc->id];
if (desc->macMod & EMGUI_KEY_COMMAND)
@ -475,8 +486,9 @@ void buildSubMenu(NSMenu* menu, MenuDescriptor menuDesc[])
fprintf(stderr, "Unable to map keyboard shortcut for %s\n", desc->name);
}
[newItem setOnStateImage: newItem.offStateImage];
[menu addItem:newItem];
[newItem release];
[newItem release];
}
desc++;