Beispiel #1
0
// Edit database dialog
LRESULT CDataBase::WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
	switch (msg)
	{
		case WM_INITDIALOG:
		{
			// Create database list
			m_listview.Create(hWnd, *m_pOption);
			// Create various buttons
			m_DelButton.Create(hWnd, _T("Edit"), ID_DB_BUTTON1);
			m_UndoButton.Create(hWnd, _T("Undo"), ID_DB_BUTTON2);
			m_AllSelButton.Create(hWnd, _T("Select all"), ID_DB_BUTTON3);
			m_EndButton.Create(hWnd, _T("Finish"), ID_DB_BUTTON4);
			// Seek the coordinates displayed in the center of the parent window
			RECT rc;
			GetWindowRect(GetParent(hWnd), (LPRECT)&rc);
			int width = 600;
			int height = 400;
			int left = rc.left + ((rc.right - rc.left) - width) / 2;
			int top = rc.top + ((rc.bottom - rc.top) - height) / 2;
			// Window position and size settings
			//SaveLoadIni slini(hWnd);
			//slini.LoadWindowPlacement(idsDataBaseWindow, left, top, width, height);
			//slini.LoadListView(idsDataBaseList, &sort_param, 1);

			// Read database file
			ReadFileInfo();
			// Sort
			m_listview.Sort();

			SetFocus(hWnd);
			return FALSE;
		}

		case WM_COMMAND:
		{
			switch (LOWORD(wp)) {
				case ID_DB_BUTTON1: // Edit
				//case IDM_DEL:
					DelFileInfo();
					m_listview.SetFocus();
					return FALSE;

				case ID_DB_BUTTON2: // Undo
				//case IDM_UNDO:
					SetUndo();
					m_listview.SetFocus();
					return FALSE;

				case ID_DB_BUTTON3: // Select all
				//case IDM_SELECTALL:
					m_listview.SetAllItemSelect();
					m_listview.SetFocus();
					return FALSE;

				case ID_DB_BUTTON4: // Finish
					SaveFileInfo();
				case IDCANCEL: // Cancel
					m_EndButton.SetFocus(); // Prevent lack of focus

					//SaveLoadIni slini(hWnd);
					//slini.SaveWindowPlacement(idsDataBaseWindow);
					//slini.SaveListView(idsDataBaseList, m_DataBaseList, sort_param);

					EndDialog(hWnd, IDOK);
					return TRUE;
			}
			return FALSE;
		}

		case WM_PAINT:
		{
			PAINTSTRUCT ps;
			BeginPaint(hWnd, &ps);
			m_listview.SetFocus();
			EndPaint(hWnd, &ps);
			return FALSE;
		}

		case WM_NOTIFY:
		{
			if (wp == ID_LISTVIEW2) // ID check
			{
				LPNMLISTVIEW pNM = (LPNMLISTVIEW)lp;
				switch (pNM->hdr.code)
				{
					case LVN_COLUMNCLICK:
						m_listview.Sort(pNM->iSubItem);
						return FALSE;

					case LVN_GETDISPINFO:
					{
						NMLVDISPINFO* pDispInfo = (NMLVDISPINFO*)lp;
						if (pDispInfo->item.mask & LVIF_TEXT)
							m_listview.Show(pDispInfo);
						return FALSE;
					}
				}
			}
			return FALSE;
		}

		case WM_SIZE:
			m_listview.SetWindowPos(20, 20, LOWORD(lp) - 130, HIWORD(lp) - 40);
			m_DelButton.SetWindowPos(LOWORD(lp) - 95, 70, 80, 20);
			m_UndoButton.SetWindowPos(LOWORD(lp) - 95, 110, 80, 20);
			m_AllSelButton.SetWindowPos(LOWORD(lp) - 95, 150, 80, 20);
			m_EndButton.SetWindowPos(LOWORD(lp) - 95, 190, 80, 20);
			return FALSE;
	}

	return FALSE;
}
Beispiel #2
0
void CSender::OnRecvData(const InterfaceDescription::Member* /*pMember*/, const char* /*srcPath*/, Message& msg)
{
	uint8_t * data;
	size_t size;
	mTrain::iterator iter;
	const char * pJoiner = msg->GetSender();
	mTrain & train = m_mTrain[pJoiner];
	SessionId sessionId = m_pMob->GetSessionID();

	msg->GetArg(0)->Get("ay", &size, &data);

	if (IS_TRAIN_HEADER(data) && size == sizeof(TRAIN_HEADER)) {
		TRAIN_HEADER * pTH = (TRAIN_HEADER *)data;

		if (pTH->action == ACT_END) OnDataEnd(pTH->footprint, pJoiner);
		else if (pTH->action == ACT_NO_MISSING) m_pMob->SetSignal(pJoiner, false);
		else {
			train[pTH->chain].action = pTH->action;
			train[pTH->chain].footprint = pTH->footprint;
			blkInit(&(train[pTH->chain].body));
			memcpy(train[pTH->chain].extra, pTH->extra, TRAIN_EXTRA_LEN);

			if (pTH->action == ACT_FILE) {
				FILE_SEND_ITEM * pFSI = (FILE_SEND_ITEM *)pTH->extra;

				if (pFSI) {
					qcc::String uri = pFSI->uri;

					train[pTH->chain].path = mem2file(0, 0, uri.substr(uri.find_last_of('.')).data());
				}
			}
		}
	}
	else if ((iter = train.find(((int*)data)[0])) != train.end()){
		if (size == sizeof(int)) {
			switch (iter->second.action) {
			case ACT_SIGNAL:
				MissingCheck(iter->second.body.z);
				blkFree(&(iter->second.body));
				break;
			case ACT_MISSING:
			{
				sqlite3_stmt *pStmt = NULL;
				sqlite3_stmt *pStmt2 = NULL;
				SYNC_DATA sd;

				strcpy_s(sd.joiner, sizeof(sd.joiner), m_pMob->GetJoinName());

				QUERY_SQL_V(m_pMob->GetUndoDB(), pStmt2, ("SELECT num, snum, base_table, redo FROM works WHERE joiner=%Q AND snum IN (%s)", sd.joiner, iter->second.body.z),
					sd.snum = sqlite3_column_int(pStmt2, 1);
					strcpy_s(sd.base_table, sizeof(sd.base_table), (const char *)sqlite3_column_text(pStmt2, 2));
					sd.snum_prev = -1;
					QUERY_SQL_V(m_pMob->GetUndoDB(), pStmt, ("SELECT joiner, snum FROM works WHERE num < %d AND base_table=%Q ORDER BY num DESC LIMIT 1", sqlite3_column_int(pStmt2, 0), sd.base_table),
						strcpy_s(sd.joiner_prev, sizeof(sd.joiner_prev), (const char *)sqlite3_column_text(pStmt, 0));
						sd.snum_prev = sqlite3_column_int(pStmt, 1);
						break;
					);
					alljoyn_send(sessionId, msg->GetSender(), ACT_DATA, (char *)sqlite3_column_text(pStmt2, 3), sqlite3_column_bytes(pStmt2, 3) + 1, (const char *)&sd, sizeof(SYNC_DATA));
				);
				blkFree(&(iter->second.body));
				break;
			}
			case ACT_DATA:
			{
				TRAIN & cargo = m_mStation[pJoiner][iter->second.footprint];
				cargo.action = iter->second.action;
				blkMove(&(cargo.body), &(iter->second.body));
				memcpy(cargo.extra, iter->second.extra, TRAIN_EXTRA_LEN);
				break;
			}
			case ACT_FLIST:
				if (sizeof(FILE_SEND_ITEM) % iter->second.body.nUsed == 0) {
					int n = 0;
					Block data;
					vRecvFiles::iterator _iter;
					FILE_SEND_ITEM * pFSI = (FILE_SEND_ITEM *)iter->second.body.z;

					blkInit(&data);

					while (n < iter->second.body.nUsed) {
						if ((_iter = std::find_if(gRecvFiles.begin(), gRecvFiles.end(), find_uri(sessionId, msg->GetSender(), pFSI->uri))) == gRecvFiles.end() ||
							(*_iter)->mtime != pFSI->mtime || (*_iter)->mtime != pFSI->mtime)
							mem2mem(&data, (char *)pFSI, sizeof(FILE_SEND_ITEM));

						n += sizeof(FILE_SEND_ITEM);
						pFSI++;
					}
					if (data.nUsed > 0) SendData(pJoiner, iter->second.footprint, ACT_FLIST_REQ, sessionId, data.z, data.nUsed); // special target most be assigned.
					else OnDataEnd(iter->second.footprint, pJoiner);

					blkFree(&data);
					blkFree(&(iter->second.body));
				}
				break;
			case ACT_FLIST_REQ:
				if (sizeof(FILE_SEND_ITEM) % iter->second.body.nUsed == 0) {
					int n = 0;
					FILE_SEND_ITEM * pFSI = (FILE_SEND_ITEM *)iter->second.body.z;

					while (n < iter->second.body.nUsed) {
						SendFile(pJoiner, iter->second.footprint, ACT_FILE, sessionId, pFSI);
						n += sizeof(FILE_SEND_ITEM);
						pFSI++;
					}
					SendData(pJoiner, iter->second.footprint, ACT_END, sessionId, 0, 0);// special target most be assigned.
				}
				blkFree(&(iter->second.body));
				break;
			case ACT_FILE:
				SaveFileInfo(sessionId, pJoiner, iter->second.path.data(), (FILE_SEND_ITEM *)iter->second.extra);
				break;
			default:
				blkFree(&(iter->second.body));
				break;
			}
			train.erase(iter);
		}