void TABLE::DestroyEditControl() { if(hEdit) { // Get the rectangle of the cell for intelligent update RECT cellRect; GetWindowRect(hEdit, &cellRect); ScreenToClient(hTable, (POINT*)&cellRect); ScreenToClient(hTable, (POINT*)&cellRect.right); cellRect.left -= COLUMN::CellCharWidth(editCol); cellRect.top = cellRect.bottom - TABLE_ATTRIBUTES::CellHeight(); cellRect.right += COLUMN::CellCharWidth(editCol); // un-subclass the control in preparation for destroy RemoveProp(hEdit, "loPtr"); RemoveProp(hEdit, "hiPtr"); RemoveProp(hEdit, "number"); SetWindowLong(hEdit, GWL_WNDPROC, (long)oldEditControlProc); // get the text and update the cell as necessary WORD len = (WORD)SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0L)+1; char* buffer = new char[len]; SendMessage(hEdit, WM_GETTEXT, (WPARAM)(len+1), (LPARAM)buffer); RUNTIMEINFO* rtime = (RUNTIMEINFO*)AObjGetRuntimeInfo(theObject); ROW* row = rtime->GetRow(); if(hstrcmp(row->GetCell(editRow, editCol, FALSE, NULL), buffer)) { row->SetCell(editRow, editCol, buffer); TABLE_ATTRIBUTES::SetEditRow(editRow); TABLE_ATTRIBUTES::SetEditColumn(editCol); PostObjectChanged(CHANGED_FULLREDRAW); AEvtPostSignalAtMark(theObject, SIGNAL_TABLEEDITED); } delete buffer; // destroy the window DestroyWindow(hEdit); hEdit = NULL; DeleteObject(hEditFont); AEvtPostSignalAtMark(theObject, SIGNAL_STOPEDITING); // make sure the proper region is redrawn InvalidateRect(hTable, &cellRect, FALSE); UpdateWindow(hTable); // wipPreventThieves(ParentID, FALSE); SKJ need replacement } }
static hubbub_error html_parser_cb(const hubbub_token *token, void *pw) { struct lws_rewrite *r = (struct lws_rewrite *)pw; char buf[1024], *start = buf + LWS_PRE, *p = start, *end = &buf[sizeof(buf) - 1]; size_t i; switch (token->type) { case HUBBUB_TOKEN_DOCTYPE: p += lws_snprintf(p, end - p, "<!DOCTYPE %.*s %s ", (int) token->data.doctype.name.len, token->data.doctype.name.ptr, token->data.doctype.force_quirks ? "(force-quirks) " : ""); if (token->data.doctype.public_missing) lwsl_debug("\tpublic: missing\n"); else p += lws_snprintf(p, end - p, "PUBLIC \"%.*s\"\n", (int) token->data.doctype.public_id.len, token->data.doctype.public_id.ptr); if (token->data.doctype.system_missing) lwsl_debug("\tsystem: missing\n"); else p += lws_snprintf(p, end - p, " \"%.*s\">\n", (int) token->data.doctype.system_id.len, token->data.doctype.system_id.ptr); break; case HUBBUB_TOKEN_START_TAG: p += lws_snprintf(p, end - p, "<%.*s", (int)token->data.tag.name.len, token->data.tag.name.ptr); /* (token->data.tag.self_closing) ? "(self-closing) " : "", (token->data.tag.n_attributes > 0) ? "attributes:" : ""); */ for (i = 0; i < token->data.tag.n_attributes; i++) { if (!hstrcmp(&token->data.tag.attributes[i].name, "href", 4) || !hstrcmp(&token->data.tag.attributes[i].name, "action", 6) || !hstrcmp(&token->data.tag.attributes[i].name, "src", 3)) { const char *pp = (const char *)token->data.tag.attributes[i].value.ptr; int plen = (int) token->data.tag.attributes[i].value.len; if (strncmp(pp, "http:", 5) && strncmp(pp, "https:", 6)) { if (!hstrcmp(&token->data.tag.attributes[i].value, r->from, r->from_len)) { pp += r->from_len; plen -= r->from_len; } p += lws_snprintf(p, end - p, " %.*s=\"%s/%.*s\"", (int) token->data.tag.attributes[i].name.len, token->data.tag.attributes[i].name.ptr, r->to, plen, pp); continue; } } p += lws_snprintf(p, end - p, " %.*s=\"%.*s\"", (int) token->data.tag.attributes[i].name.len, token->data.tag.attributes[i].name.ptr, (int) token->data.tag.attributes[i].value.len, token->data.tag.attributes[i].value.ptr); } p += lws_snprintf(p, end - p, ">"); break; case HUBBUB_TOKEN_END_TAG: p += lws_snprintf(p, end - p, "</%.*s", (int) token->data.tag.name.len, token->data.tag.name.ptr); /* (token->data.tag.self_closing) ? "(self-closing) " : "", (token->data.tag.n_attributes > 0) ? "attributes:" : ""); */ for (i = 0; i < token->data.tag.n_attributes; i++) { p += lws_snprintf(p, end - p, " %.*s='%.*s'\n", (int) token->data.tag.attributes[i].name.len, token->data.tag.attributes[i].name.ptr, (int) token->data.tag.attributes[i].value.len, token->data.tag.attributes[i].value.ptr); } p += lws_snprintf(p, end - p, ">"); break; case HUBBUB_TOKEN_COMMENT: p += lws_snprintf(p, end - p, "<!-- %.*s -->\n", (int) token->data.comment.len, token->data.comment.ptr); break; case HUBBUB_TOKEN_CHARACTER: if (token->data.character.len == 1) { if (*token->data.character.ptr == '<') { p += lws_snprintf(p, end - p, "<"); break; } if (*token->data.character.ptr == '>') { p += lws_snprintf(p, end - p, ">"); break; } if (*token->data.character.ptr == '&') { p += lws_snprintf(p, end - p, "&"); break; } } p += lws_snprintf(p, end - p, "%.*s", (int) token->data.character.len, token->data.character.ptr); break; case HUBBUB_TOKEN_EOF: p += lws_snprintf(p, end - p, "\n"); break; } if (user_callback_handle_rxflow(r->wsi->protocol->callback, r->wsi, LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ, r->wsi->user_space, start, p - start)) return -1; return HUBBUB_OK; }