refactoring

This commit is contained in:
Erik Faye-Lund 2008-02-09 18:13:39 +00:00
parent 9331176838
commit ed688c55b7
9 changed files with 125 additions and 35 deletions

View File

@ -39,15 +39,21 @@ int main(int argc, char *argv[])
{
unsigned char cmd = 0;
int ret = recv(serverSocket, (char*)&cmd, 1, 0);
if (0 == ret) done = true;
if (0 == ret)
{
done = true;
break;
}
else
{
switch (cmd)
{
case 1:
printf("yes, master!\n");
unsigned char cmd = 0x1;
send(serverSocket, (char*)&cmd, 1, 0);
{
unsigned char cmd = 0x1;
send(serverSocket, (char*)&cmd, 1, 0);
}
break;
default:

View File

@ -1,4 +1,5 @@
#include "network.h"
#include <stdio.h>
bool initNetwork()
{
@ -20,11 +21,14 @@ SOCKET clientConnect(SOCKET serverSocket)
{
SOCKET clientSocket = accept(serverSocket, NULL, NULL);
if (INVALID_SOCKET == clientSocket) return INVALID_SOCKET;
printf("%x\n", clientSocket);
const char *expectedGreeting = clientGreeting;
char recievedGreeting[128];
recv(clientSocket, recievedGreeting, int(strlen(expectedGreeting)), 0);
while(recv(clientSocket, recievedGreeting, int(strlen(expectedGreeting)), 0) < 0) Sleep(1);
fprintf(stderr, "got: \"%s\"\n", recievedGreeting);
if (strncmp(expectedGreeting, recievedGreeting, strlen(expectedGreeting)) != 0)
{
closesocket(clientSocket);

View File

@ -7,13 +7,14 @@
#define ID_FILE 40001
#define ID_FILE_EXIT 40002
#define ID_EDIT 40003
#define ID_EDIT_SETROWS 40007
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 103
#define _APS_NEXT_COMMAND_VALUE 40004
#define _APS_NEXT_COMMAND_VALUE 40008
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif

View File

@ -39,34 +39,34 @@ public:
return lower->second.value + delta * d;
};
bool isKeyFrame(int row) const
bool isKeyFrame(size_t row) const
{
return keyFrames.find(row) != keyFrames.end();
}
const KeyFrame *getKeyFrame(int row) const
const KeyFrame *getKeyFrame(size_t row) const
{
KeyFrameContainer::const_iterator iter = keyFrames.find(row);
if (iter == keyFrames.end()) return NULL;
return &iter->second;
}
void deleteKeyFrame(int row)
void deleteKeyFrame(size_t row)
{
keyFrames.erase(row);
}
void setKeyFrame(int row, const KeyFrame &keyFrame)
void setKeyFrame(size_t row, const KeyFrame &keyFrame)
{
keyFrames[row] = keyFrame;
}
void setKeyFrame(int row, const float value)
void setKeyFrame(size_t row, const float value)
{
keyFrames[row] = KeyFrame(value);
}
int getFrameCount()
size_t getFrameCount() const
{
KeyFrameContainer::const_iterator iter = keyFrames.end();
iter--;
@ -74,7 +74,7 @@ public:
}
private:
typedef std::map<int, struct KeyFrame> KeyFrameContainer;
typedef std::map<size_t, struct KeyFrame> KeyFrameContainer;
KeyFrameContainer keyFrames;
};

View File

@ -2,6 +2,7 @@
#include "syncdata.h"
#include <stack>
#include <list>
class SyncEditData : public SyncData
{
@ -19,17 +20,17 @@ public:
class EditCommand : public Command
{
public:
EditCommand(int track, int row, bool existing, float value) : track(track), row(row), newValExisting(existing), newVal(value) {}
EditCommand(size_t track, size_t row, bool existing, float value) : track(track), row(row), newValExisting(existing), newVal(value) {}
~EditCommand() {}
virtual void exec(SyncEditData *data)
{
SyncTrack &track = data->getTrack(this->track);
// store old state
oldValExisting = track.isKeyFrame(row);
if (oldValExisting) oldVal = track.getKeyFrame(row)->value;
// update
if (!newValExisting) track.deleteKeyFrame(row);
else track.setKeyFrame(row, newVal);
@ -38,37 +39,71 @@ public:
virtual void undo(SyncEditData *data)
{
SyncTrack &track = data->getTrack(this->track);
// un-update
if (!oldValExisting) track.deleteKeyFrame(row);
else track.setKeyFrame(row, oldVal);
}
private:
int track, row;
size_t track, row;
float newVal, oldVal;
bool newValExisting, oldValExisting;
};
class MultiCommand : public Command
{
public:
~MultiCommand()
{
std::list<Command*>::iterator it;
for (it = commands.begin(); it != commands.end(); ++it)
{
delete *it;
}
commands.clear();
}
void addEditCommand(Command *cmd)
{
commands.push_back(cmd);
}
virtual void exec(SyncEditData *data)
{
std::list<Command*>::iterator it;
for (it = commands.begin(); it != commands.end(); ++it) (*it)->exec(data);
}
virtual void undo(SyncEditData *data)
{
std::list<Command*>::iterator it;
for (it = commands.begin(); it != commands.end(); ++it) (*it)->undo(data);
}
private:
std::list<Command*> commands;
};
void exec(Command *cmd)
{
undoStack.push(cmd);
cmd->exec(this);
clearRedoStack();
}
bool undo()
{
if (undoStack.size() == 0) return false;
Command *cmd = undoStack.top();
undoStack.pop();
redoStack.push(cmd);
cmd->undo(this);
return true;
}
bool redo()
{
if (redoStack.size() == 0) return false;
@ -80,7 +115,7 @@ public:
cmd->exec(this);
return true;
}
void clearRedoStack()
{
while (!redoStack.empty())
@ -90,7 +125,7 @@ public:
delete cmd;
}
}
private:
std::stack<Command*> undoStack;

View File

@ -13,6 +13,8 @@ TrackView *trackView;
HWND trackViewWin;
HWND statusBarWin;
#include "network.h"
static LRESULT CALLBACK mainWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
@ -36,8 +38,8 @@ static LRESULT CALLBACK mainWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA
int statwidths[] = { 100, -1 };
SendMessage(statusBarWin, SB_SETPARTS, sizeof(statwidths) / sizeof(int), (LPARAM)statwidths);
SendMessage(statusBarWin, SB_SETTEXT, 0, (LPARAM)"Hi there :)");
SendMessage(statusBarWin, SB_SETTEXT, 1, (LPARAM)"Hi there :)");
SendMessage(statusBarWin, SB_SETTEXT, 0, (LPARAM)_T("Hi there :)"));
SendMessage(statusBarWin, SB_SETTEXT, 1, (LPARAM)_T("Hi there :)"));
}
break;
@ -63,6 +65,7 @@ static LRESULT CALLBACK mainWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA
switch (LOWORD(wParam))
{
case ID_FILE_SAVE: /* meh.*/ break;
case ID_FILE_EXIT: PostQuitMessage(0); break;
case ID_EDIT_UNDO: SendMessage(trackViewWin, WM_UNDO, 0, 0); break;
case ID_EDIT_REDO: SendMessage(trackViewWin, WM_REDO, 0, 0); break;
case ID_EDIT_COPY: SendMessage(trackViewWin, WM_COPY, 0, 0); break;
@ -72,6 +75,40 @@ static LRESULT CALLBACK mainWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA
printf("cmd %d %d\n", wParam, lParam);
}
break;
case WM_USER+1:
{
if (WSAGETSELECTERROR(lParam))
{
printf("ERR!\n");
// error occurred
WSACleanup ();
return 0;
}
printf("tjo %x %x\n", lParam, wParam);
SOCKET serverSocket = (SOCKET)wParam;
switch (WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
printf("accept\n");
{
SOCKET clientSocket = clientConnect(serverSocket);
if (INVALID_SOCKET != clientSocket)
{
unsigned char cmd = 0x1;
send(clientSocket, (char*)&cmd, 1, 0);
closesocket(clientSocket);
}
else
{
puts("accept failed!");
}
}
break;
}
}
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
@ -99,8 +136,6 @@ static ATOM registerMainWindowClass(HINSTANCE hInstance)
return RegisterClassEx(&wc);
}
#include "network.h"
int _tmain(int argc, _TCHAR* argv[])
{
HWND hwnd;
@ -201,11 +236,15 @@ int _tmain(int argc, _TCHAR* argv[])
#if 1
printf("server socket %x\n", serverSocket);
// WSAAsyncSelect(serverSocket, hwnd, WM_USER+1, FD_ACCEPT);
bool done = false;
SOCKET clientSocket = INVALID_SOCKET;
MSG msg;
while (!done)
{
#if 1
if (INVALID_SOCKET == clientSocket)
{
fd_set fds;
@ -256,7 +295,7 @@ int _tmain(int argc, _TCHAR* argv[])
closesocket(clientSocket);
clientSocket = INVALID_SOCKET; */
}
#endif
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (!TranslateAccelerator(hwnd, accel, &msg))
@ -266,6 +305,7 @@ int _tmain(int argc, _TCHAR* argv[])
if (WM_QUIT == msg.message) done = true;
}
}
Sleep(1);
}
closesocket(serverSocket);

View File

@ -85,6 +85,8 @@ BEGIN
MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY
MENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUT
MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE
MENUITEM SEPARATOR
MENUITEM "Set Rows", ID_EDIT_SETROWS
END
END

View File

@ -11,7 +11,6 @@ static const int fontHeight = 16;
static const int fontWidth = 6;
static const int trackWidth = fontWidth * 16;
static const int rows = 0x80;
static DWORD darken(DWORD col, float amt)
{
return RGB(GetRValue(col) * amt, GetGValue(col) * amt, GetBValue(col) * amt);
@ -26,11 +25,12 @@ TrackView::TrackView()
editRow = 0;
editTrack = 0;
rows = 0x80;
selectStartTrack = selectStopTrack = 0;
selectStartRow = selectStopRow = 0;
selectActive = false;
this->hwnd = NULL;
bgBaseBrush = GetSysColorBrush(COLOR_WINDOW); // CreateSolidBrush(RGB(0xff, 0xff, 0xff));
@ -175,14 +175,14 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
leftMargin.right = leftMarginWidth;
leftMargin.top = getScreenY(row);
leftMargin.bottom = leftMargin.top + fontHeight;
if (!RectVisible(hdc, &leftMargin)) continue;
HBRUSH fillBrush;
if (row == editRow) fillBrush = editBrush;
else fillBrush = GetSysColorBrush(COLOR_3DFACE);
FillRect(hdc, &leftMargin, fillBrush);
DrawEdge(hdc, &leftMargin, BDR_RAISEDINNER | BDR_RAISEDOUTER, BF_RIGHT | BF_BOTTOM | BF_TOP);
// Rectangle( hdc, leftMargin.left, leftMargin.top, leftMargin.right, leftMargin.bottom + 1);
if ((row % 16) == 0) SetTextColor(hdc, RGB(0, 0, 0));

View File

@ -124,6 +124,8 @@ private:
int windowWidth, windowHeight;
int windowRows, windowTracks;
int rows;
SyncEditData *syncData;
std::basic_string<TCHAR> editString;