Latest version
This commit is contained in:
parent
c6f52ad6c3
commit
c2591baa20
@ -45,6 +45,7 @@ typedef struct EditorData
|
||||
int copyCount;
|
||||
} EditorData;
|
||||
|
||||
static char s_currentFile[2048];
|
||||
static EditorData s_editorData;
|
||||
static CopyData s_copyData;
|
||||
static bool reset_tracks = true;
|
||||
@ -288,6 +289,7 @@ static void drawStatus()
|
||||
int size = 0;
|
||||
const int sizeY = s_editorData.trackViewInfo.windowSizeY;
|
||||
const int sizeX = s_editorData.trackViewInfo.windowSizeX;
|
||||
const int prevRow = getRowPos();
|
||||
|
||||
Emgui_setFont(s_editorData.trackViewInfo.smallFontId);
|
||||
|
||||
@ -300,6 +302,9 @@ static void drawStatus()
|
||||
size += drawNameValue("Start Row", size, sizeY, &s_editorData.trackViewInfo.startRow, 0, 10000000, s_startRow);
|
||||
size += drawNameValue("End Row", size, sizeY, &s_editorData.trackViewInfo.endRow, 0, 10000000, s_endRow);
|
||||
|
||||
if (getRowPos() != prevRow)
|
||||
RemoteConnection_sendSetRowCommand(getRowPos());
|
||||
|
||||
Emgui_setDefaultFont();
|
||||
}
|
||||
|
||||
@ -456,10 +461,38 @@ static void deleteArea(int rowPos, int track, int bufferWidth, int bufferHeight)
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void biasSelection(float value, int selectLeft, int selectRight, int selectTop, int selectBottom)
|
||||
{
|
||||
int track, row;
|
||||
struct sync_track** tracks = getTracks();
|
||||
|
||||
for (track = selectLeft; track <= selectRight; ++track)
|
||||
{
|
||||
struct sync_track* t = tracks[track];
|
||||
|
||||
for (row = selectTop; row <= selectBottom; ++row)
|
||||
{
|
||||
struct track_key newKey;
|
||||
int idx = sync_find_key(t, row);
|
||||
if (idx < 0)
|
||||
continue;
|
||||
|
||||
newKey = t->keys[idx];
|
||||
newKey.value += value;
|
||||
|
||||
sync_set_key(t, &newKey);
|
||||
|
||||
RemoteConnection_sendSetKeyCommand(t->name, &newKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static char s_editBuffer[512];
|
||||
static bool is_editing = false;
|
||||
|
||||
bool Editor_keyDown(int key, int modifiers)
|
||||
bool Editor_keyDown(int key, int keyCode, int modifiers)
|
||||
{
|
||||
bool handled_key = true;
|
||||
TrackData* trackData = &s_editorData.trackData;
|
||||
@ -776,46 +809,27 @@ bool Editor_keyDown(int key, int modifiers)
|
||||
|
||||
// Handle biasing of values
|
||||
|
||||
if ((key >= '1' && key <= '9') && ((modifiers & EMGUI_KEY_CTRL) || (modifiers & EMGUI_KEY_ALT)))
|
||||
if ((keyCode >= 0 && keyCode <= 6) || (keyCode >= 12 && keyCode <= 17))
|
||||
{
|
||||
struct sync_track** tracks;
|
||||
int track, row;
|
||||
|
||||
float bias_value = 0.0f;
|
||||
tracks = getTracks();
|
||||
|
||||
switch (key)
|
||||
switch (keyCode)
|
||||
{
|
||||
case '1' : bias_value = 0.01f; break;
|
||||
case '2' : bias_value = 0.1f; break;
|
||||
case '3' : bias_value = 1.0f; break;
|
||||
case '4' : bias_value = 10.f; break;
|
||||
case '5' : bias_value = 100.0f; break;
|
||||
case '6' : bias_value = 1000.0f; break;
|
||||
case '7' : bias_value = 10000.0f; break;
|
||||
case 0 : bias_value = -0.01f; break;
|
||||
case 1 : bias_value = -0.1f; break;
|
||||
case 2 : bias_value = -1.0f; break;
|
||||
case 3 : bias_value = -10.f; break;
|
||||
case 5 : bias_value = -100.0f; break;
|
||||
case 4 : bias_value = -1000.0f; break;
|
||||
case 12 : bias_value = 0.01f; break;
|
||||
case 13 : bias_value = 0.1f; break;
|
||||
case 14 : bias_value = 1.0f; break;
|
||||
case 15 : bias_value = 10.f; break;
|
||||
case 17 : bias_value = 100.0f; break;
|
||||
case 16 : bias_value = 1000.0f; break;
|
||||
}
|
||||
|
||||
bias_value = modifiers & EMGUI_KEY_ALT ? -bias_value : bias_value;
|
||||
|
||||
for (track = selectLeft; track <= selectRight; ++track)
|
||||
{
|
||||
struct sync_track* t = tracks[track];
|
||||
|
||||
for (row = selectTop; row <= selectBottom; ++row)
|
||||
{
|
||||
struct track_key newKey;
|
||||
int idx = sync_find_key(t, row);
|
||||
if (idx < 0)
|
||||
continue;
|
||||
|
||||
newKey = t->keys[idx];
|
||||
newKey.value += bias_value;
|
||||
|
||||
sync_set_key(t, &newKey);
|
||||
|
||||
RemoteConnection_sendSetKeyCommand(t->name, &newKey);
|
||||
}
|
||||
}
|
||||
biasSelection(bias_value, selectLeft, selectRight, selectTop, selectBottom);
|
||||
|
||||
Editor_update();
|
||||
|
||||
@ -902,12 +916,28 @@ bool Editor_keyDown(int key, int modifiers)
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void Editor_scroll(float deltaX, float deltaY)
|
||||
void Editor_scroll(float deltaX, float deltaY, int flags)
|
||||
{
|
||||
int current_row = s_editorData.trackViewInfo.rowPos;
|
||||
int old_offset = s_editorData.trackViewInfo.startPixel;
|
||||
TrackViewInfo* viewInfo = &s_editorData.trackViewInfo;
|
||||
|
||||
if (flags & EMGUI_KEY_ALT)
|
||||
{
|
||||
TrackViewInfo* viewInfo = &s_editorData.trackViewInfo;
|
||||
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);
|
||||
const float multiplier = flags & EMGUI_KEY_SHIFT ? 0.1f : 0.01f;
|
||||
|
||||
biasSelection(-deltaY * multiplier, selectLeft, selectRight, selectTop, selectBottom);
|
||||
|
||||
Editor_update();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
current_row += (int)deltaY;
|
||||
|
||||
if (current_row < viewInfo->startRow || current_row >= viewInfo->endRow)
|
||||
@ -1061,12 +1091,10 @@ static void setWindowTitle(const char* path)
|
||||
|
||||
static void onOpen()
|
||||
{
|
||||
char path[2048];
|
||||
|
||||
if (LoadSave_loadRocketXMLDialog(path, &s_editorData.trackData))
|
||||
if (LoadSave_loadRocketXMLDialog(s_currentFile, getTrackData()))
|
||||
{
|
||||
Editor_update();
|
||||
setWindowTitle(path);
|
||||
setWindowTitle(s_currentFile);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1074,8 +1102,15 @@ static void onOpen()
|
||||
|
||||
static void onSave()
|
||||
{
|
||||
LoadSave_saveRocketXML(s_currentFile, getTrackData());
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void onSaveDialog()
|
||||
{
|
||||
char path[2048];
|
||||
if (!LoadSave_saveRocketXMLDialog(path, &s_editorData.trackData))
|
||||
if (!LoadSave_saveRocketXMLDialog(path, getTrackData()))
|
||||
return;
|
||||
|
||||
setWindowTitle(path);
|
||||
@ -1089,8 +1124,8 @@ void Editor_menuEvent(int menuItem)
|
||||
switch (menuItem)
|
||||
{
|
||||
case EDITOR_MENU_OPEN : onOpen(); break;
|
||||
case EDITOR_MENU_SAVE :
|
||||
case EDITOR_MENU_SAVE_AS : onSave(); break;
|
||||
case EDITOR_MENU_SAVE : onSave(); break;
|
||||
case EDITOR_MENU_SAVE_AS : onSaveDialog(); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -7,10 +7,11 @@ void Editor_destroy();
|
||||
void Editor_init();
|
||||
void Editor_update();
|
||||
void Editor_timedUpdate();
|
||||
bool Editor_keyDown(int keyCode, int mod);
|
||||
bool Editor_keyDown(int key, int keyCode, int mod);
|
||||
void Editor_keyUp();
|
||||
void Editor_setWindowSize(int x, int y);
|
||||
void Editor_menuEvent(int menuItem);
|
||||
void Editor_scroll(float deltaX, float deltaY);
|
||||
void Editor_scroll(float deltaX, float deltaY, int flags);
|
||||
void Editor_updateTrackScroll();
|
||||
|
||||
enum
|
||||
|
||||
@ -77,6 +77,27 @@ NSWindow* g_window = 0;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static int getModifierFlags(int flags)
|
||||
{
|
||||
int specialKeys = 0;
|
||||
|
||||
if (flags & NSShiftKeyMask)
|
||||
specialKeys |= EMGUI_KEY_SHIFT;
|
||||
|
||||
if (flags & NSAlternateKeyMask)
|
||||
specialKeys |= EMGUI_KEY_ALT;
|
||||
|
||||
if (flags & NSControlKeyMask)
|
||||
specialKeys |= EMGUI_KEY_CTRL;
|
||||
|
||||
if (flags & NSCommandKeyMask)
|
||||
specialKeys |= EMGUI_KEY_COMMAND;
|
||||
|
||||
return specialKeys;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
- (void)keyDown:(NSEvent *)theEvent
|
||||
{
|
||||
NSString* key = [theEvent charactersIgnoringModifiers];
|
||||
@ -87,19 +108,7 @@ NSWindow* g_window = 0;
|
||||
keyChar = [key characterAtIndex:0];
|
||||
|
||||
int keyCode = keyChar;
|
||||
int specialKeys = 0;
|
||||
|
||||
if ([theEvent modifierFlags] & NSShiftKeyMask)
|
||||
specialKeys |= EMGUI_KEY_SHIFT;
|
||||
|
||||
if ([theEvent modifierFlags] & NSAlternateKeyMask)
|
||||
specialKeys |= EMGUI_KEY_ALT;
|
||||
|
||||
if ([theEvent modifierFlags] & NSControlKeyMask)
|
||||
specialKeys |= EMGUI_KEY_CTRL;
|
||||
|
||||
if ([theEvent modifierFlags] & NSCommandKeyMask)
|
||||
specialKeys |= EMGUI_KEY_COMMAND;
|
||||
int specialKeys = getModifierFlags([theEvent modifierFlags]);
|
||||
|
||||
Emgui_sendKeyinput(keyChar, specialKeys);
|
||||
|
||||
@ -114,7 +123,7 @@ NSWindow* g_window = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Editor_keyDown(keyCode, specialKeys))
|
||||
if (!Editor_keyDown(keyCode, [theEvent keyCode], specialKeys))
|
||||
[super keyDown:theEvent];
|
||||
|
||||
Editor_update();
|
||||
@ -168,9 +177,10 @@ NSWindow* g_window = 0;
|
||||
{
|
||||
float x = (float)[theEvent deltaX];
|
||||
float y = (float)[theEvent deltaY];
|
||||
int flags = getModifierFlags([theEvent modifierFlags]);
|
||||
|
||||
printf("%f %f\n", x, y);
|
||||
Editor_scroll(-x, -y);
|
||||
printf("%f %f %d\n", x, y, flags);
|
||||
Editor_scroll(-x, -y, flags);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user