diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index 97a4a65..b36cc1a 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -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(); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/ogl_editor/src/Menu.c b/ogl_editor/src/Menu.c index f104931..a8e4aa0 100644 --- a/ogl_editor/src/Menu.c +++ b/ogl_editor/src/Menu.c @@ -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 }, diff --git a/ogl_editor/src/Menu.h b/ogl_editor/src/Menu.h index ac6ecf7..4bbc36f 100644 --- a/ogl_editor/src/Menu.h +++ b/ogl_editor/src/Menu.h @@ -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, diff --git a/ogl_editor/src/macosx/RocketView.m b/ogl_editor/src/macosx/RocketView.m index 8f7bddf..53aef2a 100644 --- a/ogl_editor/src/macosx/RocketView.m +++ b/ogl_editor/src/macosx/RocketView.m @@ -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++;