Latest version

This commit is contained in:
Daniel Collin 2012-12-27 23:22:58 +01:00
parent c6f52ad6c3
commit c2591baa20
3 changed files with 107 additions and 61 deletions

View File

@ -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;
}
}

View File

@ -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

View File

@ -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);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////