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() static int getNextTrack()
{ {
TrackData* trackData = &s_editorData.trackData; TrackData* trackData = &s_editorData.trackData;
@ -647,6 +655,14 @@ enum ArrowDirection
{ {
ARROW_LEFT, ARROW_LEFT,
ARROW_RIGHT, 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) switch (key)
{ {
case EMGUI_ARROW_DOWN: onArrowDown(rowPos, trackData, track, activeTrack, modifiers); break; case EMGUI_KEY_ARROW_DOWN: onArrowDown(rowPos, trackData, track, activeTrack, modifiers); break;
case EMGUI_ARROW_UP: onArrowUp(rowPos, trackData, track, activeTrack, modifiers); break; case EMGUI_KEY_ARROW_UP: onArrowUp(rowPos, trackData, track, activeTrack, modifiers); break;
case EMGUI_ARROW_RIGHT: onArrowSide(ARROW_RIGHT, rowPos, trackData, activeTrack, modifiers); break; case EMGUI_KEY_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_LEFT: onArrowSide(ARROW_LEFT, rowPos, trackData, activeTrack, modifiers); break;
} }
} }
@ -881,10 +897,10 @@ bool Editor_keyDown(int key, int keyCode, int modifiers)
break; break;
} }
case EMGUI_ARROW_DOWN: case EMGUI_KEY_ARROW_DOWN:
case EMGUI_ARROW_UP: case EMGUI_KEY_ARROW_UP:
case EMGUI_ARROW_RIGHT: case EMGUI_KEY_ARROW_RIGHT:
case EMGUI_ARROW_LEFT: case EMGUI_KEY_ARROW_LEFT:
{ {
onArrow(key, modifiers, row_pos, tracks[active_track], active_track); 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 // Handle biasing of values
/*
if ((keyCode >= 0 && keyCode <= 6) || (keyCode >= 12 && keyCode <= 17)) if ((keyCode >= 0 && keyCode <= 6) || (keyCode >= 12 && keyCode <= 17))
{ {
float bias_value = 0.0f; float bias_value = 0.0f;
@ -1034,6 +1051,7 @@ bool Editor_keyDown(int key, int keyCode, int modifiers)
return true; return true;
} }
*/
// do edit here and biasing here // 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) void Editor_menuEvent(int menuItem)
{ {
printf("%s\n", s_type[menuItem - 0x1000]); printf("%s\n", s_type[menuItem - 0x1000]);
endEditing();
switch (menuItem) switch (menuItem)
{ {
// File
case EDITOR_MENU_OPEN: onOpen(); break; case EDITOR_MENU_OPEN: onOpen(); break;
case EDITOR_MENU_SAVE: onSave(); break; case EDITOR_MENU_SAVE: onSave(); break;
case EDITOR_MENU_SAVE_AS: onSaveAs(); break; case EDITOR_MENU_SAVE_AS: onSaveAs(); break;
@ -1491,62 +1796,59 @@ void Editor_menuEvent(int menuItem)
break; break;
} }
/*
EDITOR_MENU_OPEN,
EDITOR_MENU_SAVE,
EDITOR_MENU_SAVE_AS,
EDITOR_MENU_REMOTE_EXPORT,
// Edit // Edit
EDITOR_MENU_UNDO, case EDITOR_MENU_UNDO : Commands_undo(); break;
EDITOR_MENU_REDO, case EDITOR_MENU_REDO : Commands_redo(); break;
EDITOR_MENU_CANCEL_EDIT,
EDITOR_MENU_CLEAR, case EDITOR_MENU_CANCEL_EDIT : onCancelEdit(); break;
EDITOR_MENU_CUT, case EDITOR_MENU_DELETE_KEY : onDeleteKey(); break;
EDITOR_MENU_COPY, case EDITOR_MENU_CUT : onCutAndCopy(true); break;
EDITOR_MENU_PASTE, case EDITOR_MENU_COPY : onCutAndCopy(false); break;
EDITOR_MENU_SELECT_TRACK, case EDITOR_MENU_PASTE : onPaste(); break;
EDITOR_MENU_BIAS_P_001, case EDITOR_MENU_SELECT_TRACK : onSelectTrack(); break;
EDITOR_MENU_BIAS_P_01,
EDITOR_MENU_BIAS_P_1, case EDITOR_MENU_BIAS_P_001 : onBias(0.01f); break;
EDITOR_MENU_BIAS_P_10, case EDITOR_MENU_BIAS_P_01 : onBias(0.1f); break;
EDITOR_MENU_BIAS_P_100, case EDITOR_MENU_BIAS_P_1: onBias(1.0f); break;
EDITOR_MENU_BIAS_P_1000, case EDITOR_MENU_BIAS_P_10: onBias(10.0f); break;
EDITOR_MENU_BIAS_N_001, case EDITOR_MENU_BIAS_P_100: onBias(100.0f); break;
EDITOR_MENU_BIAS_N_01, case EDITOR_MENU_BIAS_P_1000: onBias(1000.0f); break;
EDITOR_MENU_BIAS_N_1, case EDITOR_MENU_BIAS_N_001: onBias(-0.01f); break;
EDITOR_MENU_BIAS_N_10, case EDITOR_MENU_BIAS_N_01: onBias(-0.1f); break;
EDITOR_MENU_BIAS_N_100, case EDITOR_MENU_BIAS_N_1: onBias(-1.0f); break;
EDITOR_MENU_BIAS_N_1000, case EDITOR_MENU_BIAS_N_10: onBias(-10.0f); break;
EDITOR_MENU_INTERPOLATION, case EDITOR_MENU_BIAS_N_100 : onBias(-100.0f); break;
EDITOR_MENU_ENTER_CURRENT_V, 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 // View
EDITOR_MENU_PLAY, case EDITOR_MENU_PLAY : onPlay(); break;
EDITOR_MENU_ROW_UP, case EDITOR_MENU_ROW_UP : onRowStep(-1, NO_SELECTION); break;
EDITOR_MENU_ROW_DOWN, case EDITOR_MENU_ROW_DOWN : onRowStep(1, NO_SELECTION); break;
EDITOR_MENU_TRACK_LEFT, case EDITOR_MENU_TRACK_LEFT : onTrackSide(ARROW_LEFT, false, NO_SELECTION); break;
EDITOR_MENU_TRACK_RIGHT, case EDITOR_MENU_TRACK_RIGHT : onTrackSide(ARROW_RIGHT, false, NO_SELECTION); break;
EDITOR_MENU_ROWS_DOWN, case EDITOR_MENU_ROWS_UP : onRowStep(-8, false); break;
EDITOR_MENU_ROWS_UP, case EDITOR_MENU_ROWS_DOWN : onRowStep(8, false); break;
EDITOR_MENU_PREV_BOOKMARK, case EDITOR_MENU_PREV_BOOKMARK : onBookmarkDir(ARROW_UP); break;
EDITOR_MENU_NEXT_BOOKMARK, case EDITOR_MENU_NEXT_BOOKMARK : onBookmarkDir(ARROW_DOWN); break;
EDITOR_MENU_FIRST_TRACK, case EDITOR_MENU_FIRST_TRACK : onTrackSide(ARROW_LEFT, true, NO_SELECTION); break;
EDITOR_MENU_LAST_TRACK, case EDITOR_MENU_LAST_TRACK : onTrackSide(ARROW_RIGHT, true, NO_SELECTION); break;
EDITOR_MENU_PREV_KEY, case EDITOR_MENU_PREV_KEY : onPrevNextKey(true, NO_SELECTION); break;
EDITOR_MENU_NEXT_KEY, case EDITOR_MENU_NEXT_KEY : onPrevNextKey(false, NO_SELECTION); break;
EDITOR_MENU_FOLD_TRACK, case EDITOR_MENU_FOLD_TRACK : onFoldTrack(true); break;
EDITOR_MENU_UNFOLD_TRACK, case EDITOR_MENU_UNFOLD_TRACK : onFoldTrack(false); break;
EDITOR_MENU_FOLD_GROUP, case EDITOR_MENU_FOLD_GROUP : onFoldGroup(true); break;
EDITOR_MENU_UNFOLD_GROUP, case EDITOR_MENU_UNFOLD_GROUP : onFoldGroup(false); break;
EDITOR_MENU_TOGGLE_BOOKMARK, case EDITOR_MENU_TOGGLE_BOOKMARK : onToggleBookmark(); break;
EDITOR_MENU_CLEAR_BOOKMARKS, case EDITOR_MENU_CLEAR_BOOKMARKS : onClearBookmarks(); break;
EDITOR_MENU_TAB, 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("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("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("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(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 },
{ _T("Cut"), EDITOR_MENU_CUT, 'x', EMGUI_KEY_COMMAND, EMGUI_KEY_CTRL }, { _T("Cut"), EDITOR_MENU_CUT, 'x', EMGUI_KEY_COMMAND, EMGUI_KEY_CTRL },
{ _T("Copy"), EDITOR_MENU_COPY, 'c', 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 +0.1"), EDITOR_MENU_BIAS_P_01, 'w', 0, 0 },
{ _T("Bias +1.0"), EDITOR_MENU_BIAS_P_1, 'e', 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.0"), EDITOR_MENU_BIAS_P_10, 'r', 0, 0 },
{ _T("Bias +10.01"), EDITOR_MENU_BIAS_P_100, 't', 0, 0 }, { _T("Bias +10.0"), EDITOR_MENU_BIAS_P_100, 't', 0, 0 },
{ _T("Bias +100.01"), EDITOR_MENU_BIAS_P_1000, 'y', 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.01"), EDITOR_MENU_BIAS_N_001, 'a', 0, 0 },
{ _T("Bias -0.1"), EDITOR_MENU_BIAS_N_01, 's', 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 -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.0"), EDITOR_MENU_BIAS_N_10, 'f', 0, 0 },
{ _T("Bias -10.01"), EDITOR_MENU_BIAS_N_100, 'g', 0, 0 }, { _T("Bias -10.0"), EDITOR_MENU_BIAS_N_100, 'g', 0, 0 },
{ _T("Bias -100.01"), EDITOR_MENU_BIAS_N_1000, 'h', 0, 0 }, { _T("Bias -100.0"), EDITOR_MENU_BIAS_N_1000, 'h', 0, 0 },
{ _T(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 }, { _T(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 },
{ _T("Interpolation"), EDITOR_MENU_INTERPOLATION, 'i', 0, 0 }, { _T("Interpolation"), EDITOR_MENU_INTERPOLATION, 'i', 0, 0 },
{ _T("Insert current value"), EDITOR_MENU_ENTER_CURRENT_V,EMGUI_KEY_ENTER,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("Start/Stop Playback"), EDITOR_MENU_PLAY, EMGUI_KEY_SPACE, 0, 0 },
{ _T(""), EDITOR_MENU_SEPARATOR, 0, 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 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 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 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 track right"), EDITOR_MENU_TRACK_RIGHT, EMGUI_KEY_ARROW_RIGHT, 0, 0 },
{ _T(""), EDITOR_MENU_SEPARATOR, 0, 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 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 }, { _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_UNDO,
EDITOR_MENU_REDO, EDITOR_MENU_REDO,
EDITOR_MENU_CANCEL_EDIT, EDITOR_MENU_CANCEL_EDIT,
EDITOR_MENU_CLEAR, EDITOR_MENU_DELETE_KEY,
EDITOR_MENU_CUT, EDITOR_MENU_CUT,
EDITOR_MENU_COPY, EDITOR_MENU_COPY,
EDITOR_MENU_PASTE, EDITOR_MENU_PASTE,

View File

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